@arsedizioni/ars-utils 18.4.103 → 18.4.105

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 (99) hide show
  1. package/esm2022/clipper.common/common/common.module.mjs +5 -5
  2. package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +17 -8
  3. package/esm2022/clipper.common/common/services/clipper.service.mjs +12 -7
  4. package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +4 -4
  5. package/esm2022/clipper.ui/ui/document/document.component.mjs +4 -4
  6. package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +4 -4
  7. package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +4 -4
  8. package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +4 -4
  9. package/esm2022/clipper.ui/ui/references/references.component.mjs +4 -4
  10. package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +4 -4
  11. package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +4 -4
  12. package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +4 -4
  13. package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +4 -4
  14. package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +4 -4
  15. package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +4 -4
  16. package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +4 -4
  17. package/esm2022/core/core.module.mjs +9 -9
  18. package/esm2022/core/dateFnsAdapter.mjs +4 -4
  19. package/esm2022/core/directives/autoFocusDirective.mjs +4 -4
  20. package/esm2022/core/directives/changeDateIntervalDirective.mjs +4 -4
  21. package/esm2022/core/directives/copyClipboardDirective.mjs +5 -5
  22. package/esm2022/core/directives/validators.mjs +37 -37
  23. package/esm2022/core/pipes/format.pipe.mjs +5 -5
  24. package/esm2022/core/pipes/replace.pipe.mjs +5 -5
  25. package/esm2022/core/pipes/safe-html.pipe.mjs +5 -5
  26. package/esm2022/core/pipes/safe-url.pipe.mjs +5 -5
  27. package/esm2022/core/pipes/search-callback.pipe.mjs +4 -4
  28. package/esm2022/core/pipes/search-filter.pipe.mjs +5 -5
  29. package/esm2022/core/services/broadcast.service.mjs +4 -4
  30. package/esm2022/core/services/environment.service.mjs +4 -4
  31. package/esm2022/core/services/screen.service.mjs +4 -4
  32. package/esm2022/core/services/theme.service.mjs +4 -4
  33. package/esm2022/evolution.common/common/common.module.mjs +5 -5
  34. package/esm2022/evolution.common/common/interceptors/auth.interceptor.mjs +17 -8
  35. package/esm2022/evolution.common/common/services/evolution.service.mjs +9 -6
  36. package/esm2022/help/components/help-viewer/help-viewer.component.mjs +7 -7
  37. package/esm2022/help/help.module.mjs +5 -5
  38. package/esm2022/help/services/help.service.mjs +4 -4
  39. package/esm2022/support.common/common/common.module.mjs +5 -5
  40. package/esm2022/support.common/common/interceptors/auth.interceptor.mjs +17 -8
  41. package/esm2022/support.common/common/services/support.service.mjs +4 -4
  42. package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +4 -4
  43. package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +4 -4
  44. package/esm2022/tinymce/full-screen-editor/full-screen-editor.component.mjs +4 -4
  45. package/esm2022/tinymce/tinymce.module.mjs +5 -5
  46. package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +4 -4
  47. package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +4 -4
  48. package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +4 -4
  49. package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +4 -4
  50. package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +4 -4
  51. package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +4 -4
  52. package/esm2022/ui/ui/dialogs/toast/toast.component.mjs +4 -4
  53. package/esm2022/ui/ui/paginatorIntl.mjs +4 -4
  54. package/esm2022/ui/ui/services/dialog.service.mjs +4 -4
  55. package/esm2022/ui/ui/services/ui.service.mjs +4 -4
  56. package/esm2022/ui/ui/ui.module.mjs +5 -5
  57. package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +4 -4
  58. package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +4 -4
  59. package/esm2022/ui.application/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +4 -4
  60. package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +4 -4
  61. package/esm2022/ui.application/ui/components/file-input/file-input.component.mjs +4 -4
  62. package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +4 -4
  63. package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +4 -4
  64. package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +4 -4
  65. package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +4 -4
  66. package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +4 -4
  67. package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +4 -4
  68. package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +4 -4
  69. package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +4 -4
  70. package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +7 -7
  71. package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +4 -4
  72. package/esm2022/ui.application/ui/directives/resize-table-column.directive.mjs +4 -4
  73. package/esm2022/ui.application/ui/services/applicationDialog.service.mjs +4 -4
  74. package/esm2022/ui.application/ui/ui.module.mjs +5 -5
  75. package/esm2022/ui.oauth/ui/components/login/login-oauth.component.mjs +4 -4
  76. package/esm2022/ui.oauth/ui/ui.module.mjs +5 -5
  77. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +31 -17
  78. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
  79. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +39 -39
  80. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  81. package/fesm2022/arsedizioni-ars-utils-core.mjs +92 -92
  82. package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
  83. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +28 -16
  84. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
  85. package/fesm2022/arsedizioni-ars-utils-help.mjs +13 -13
  86. package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
  87. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +23 -14
  88. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  89. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +6 -6
  90. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
  91. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +7 -7
  92. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs.map +1 -1
  93. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +58 -58
  94. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
  95. package/fesm2022/arsedizioni-ars-utils-ui.mjs +34 -34
  96. package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
  97. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +7 -7
  98. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
  99. package/package.json +7 -7
@@ -1,11 +1,11 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class ArsClipperCommonModule {
4
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ArsClipperCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
5
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: ArsClipperCommonModule }); }
6
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ArsClipperCommonModule }); }
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ArsClipperCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
5
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.10", ngImport: i0, type: ArsClipperCommonModule }); }
6
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ArsClipperCommonModule }); }
7
7
  }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ArsClipperCommonModule, decorators: [{
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ArsClipperCommonModule, decorators: [{
9
9
  type: NgModule
10
10
  }] });
11
11
  // Other exports
@@ -13,4 +13,4 @@ export * from './messages';
13
13
  export * from './definitions';
14
14
  export * from './interceptors/auth.interceptor';
15
15
  export * from './services/clipper.service';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbi9jb21tb24vY29tbW9uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUd6QyxNQUFNLE9BQU8sc0JBQXNCOzhHQUF0QixzQkFBc0I7K0dBQXRCLHNCQUFzQjsrR0FBdEIsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQURsQyxRQUFROztBQUdULGdCQUFnQjtBQUNoQixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQE5nTW9kdWxlKClcclxuZXhwb3J0IGNsYXNzIEFyc0NsaXBwZXJDb21tb25Nb2R1bGUge31cclxuXHJcbi8vIE90aGVyIGV4cG9ydHNcclxuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGVmaW5pdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ludGVyY2VwdG9ycy9hdXRoLmludGVyY2VwdG9yJztcclxuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jbGlwcGVyLnNlcnZpY2UnO1xyXG5cclxuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbi9jb21tb24vY29tbW9uLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUd6QyxNQUFNLE9BQU8sc0JBQXNCOytHQUF0QixzQkFBc0I7Z0hBQXRCLHNCQUFzQjtnSEFBdEIsc0JBQXNCOzs0RkFBdEIsc0JBQXNCO2tCQURsQyxRQUFROztBQUdULGdCQUFnQjtBQUNoQixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQE5nTW9kdWxlKClcclxuZXhwb3J0IGNsYXNzIEFyc0NsaXBwZXJDb21tb25Nb2R1bGUge31cclxuXHJcbi8vIE90aGVyIGV4cG9ydHNcclxuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlcyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGVmaW5pdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ludGVyY2VwdG9ycy9hdXRoLmludGVyY2VwdG9yJztcclxuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9jbGlwcGVyLnNlcnZpY2UnO1xyXG5cclxuIl19
@@ -30,10 +30,19 @@ export class ClipperAuthInterceptor {
30
30
  const errorTime = new Date().getTime();
31
31
  if (errorTime - this.lastErrorTime > 5000) {
32
32
  this.lastErrorTime = errorTime;
33
- const invalidSession = errorStatus === 403 || errorStatus === 405;
34
- const message = error.status === 0
35
- ? "In questo momento Clipper non è disponibile."
36
- : (error.error?.message ?? error.message ?? "Impossibile eseguire l'operazione richiesta.").replaceAll("\r\n", "</p><p>");
33
+ let message = "";
34
+ switch (errorStatus) {
35
+ case 0:
36
+ message = "In questo momento Clipper non è disponibile. Riprova tra qualche minuto.";
37
+ break;
38
+ case 403:
39
+ message = "Non hai i permessi necessari per eseguire l'operazione richiesta.";
40
+ break;
41
+ default:
42
+ message = (error.error?.message ?? error.message ?? "Impossibile eseguire l'operazione richiesta.").replaceAll("\r\n", "</p><p>");
43
+ break;
44
+ }
45
+ const invalidSession = errorStatus === 405 || errorStatus === 410;
37
46
  this.dialogService.error("<p>" + message + "</p>", null, "Errore in Clipper", undefined, undefined, invalidSession ? 5000 : 15000).afterClosed().subscribe(() => {
38
47
  if (invalidSession) {
39
48
  this.broadcastService.sendMessage(ClipperMessages.LOGOUT);
@@ -82,10 +91,10 @@ export class ClipperAuthInterceptor {
82
91
  }
83
92
  return request;
84
93
  }
85
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ClipperAuthInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
86
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ClipperAuthInterceptor }); }
94
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ClipperAuthInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
95
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ClipperAuthInterceptor }); }
87
96
  }
88
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ClipperAuthInterceptor, decorators: [{
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ClipperAuthInterceptor, decorators: [{
89
98
  type: Injectable
90
99
  }] });
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbi9jb21tb24vaW50ZXJjZXB0b3JzL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUF3RCxNQUFNLHNCQUFzQixDQUFDO0FBQy9HLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQWMsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUk3RCxNQUFNLE9BQU8sc0JBQXNCO0lBRG5DO1FBRVUsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsa0JBQWEsR0FBVyxDQUFDLENBQUMsQ0FBQztLQTJGcEM7SUF6RkMsU0FBUyxDQUNQLE9BQXlCLEVBQ3pCLElBQWlCO1FBRWpCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNELE9BQU8sR0FBRyxP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T0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3RELENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDakIsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxpQkFBaUIsQ0FDdkIsT0FBeUIsRUFDekIsUUFBdUIsSUFBSTtRQUUzQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMzRCxJQUFJLENBQUMsS0FBSztnQkFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztvQkFDbkIsVUFBVSxFQUFFO3dCQUNWLGFBQWEsRUFBRSxTQUFTLEdBQUcsS0FBSzt3QkFDaEMsYUFBYSxFQUFFLGFBQWE7cUJBQzdCO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs4R0E3RlUsc0JBQXNCO2tIQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJyb2FkY2FzdFNlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGNhdGNoRXJyb3IsIGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlcnZpY2VGbGFncyB9IGZyb20gJy4uL2RlZmluaXRpb25zJztcclxuaW1wb3J0IHsgQ2xpcHBlck1lc3NhZ2VzIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NsaXBwZXIuc2VydmljZSc7XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlckF1dGhJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgcHJpdmF0ZSBjbGlwcGVyU2VydmljZSA9IGluamVjdChDbGlwcGVyU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBicm9hZGNhc3RTZXJ2aWNlID0gaW5qZWN0KEJyb2FkY2FzdFNlcnZpY2UpO1xyXG4gIHByaXZhdGUgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcclxuICBwcml2YXRlIGxhc3RFcnJvclRpbWU6IG51bWJlciA9IC0xO1xyXG5cclxuICBpbnRlcmNlcHQoXHJcbiAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LFxyXG4gICAgbmV4dDogSHR0cEhhbmRsZXJcclxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XHJcbiAgICBpZiAocmVxdWVzdC51cmwuc3RhcnRzV2l0aCh0aGlzLmNsaXBwZXJTZXJ2aWNlLnNlcnZpY2VVcmkpKSB7XHJcbiAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHsgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH0pO1xyXG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUodGhpcy5hZGRUb2tlblRvUmVxdWVzdChyZXF1ZXN0KSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuZGlhbG9nU2VydmljZS5jbGVhckJ1c3koKSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yLnVybC5zdGFydHNXaXRoKHRoaXMuY2xpcHBlclNlcnZpY2Uuc2VydmljZVVyaSkpIHtcclxuICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmXHJcbiAgICAgICAgICAgICAgICAhcmVxdWVzdC51cmwuaW5jbHVkZXMoXCIvbG9naW5cIikgJiZcclxuICAgICAgICAgICAgICAgIGVycm9yLnN0YXR1cyA9PT0gNDAxXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGU0MDFFcnJvcihyZXF1ZXN0LCBuZXh0KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JTdGF0dXMgPSBwYXJzZUludChlcnJvci5zdGF0dXMgPz8gXCIwXCIpO1xyXG4gICAgICAgICAgICAgIGlmICgoZXJyb3JTdGF0dXMgPiAwICYmIGVycm9yU3RhdHVzIDwgNTAwKSB8fCAodGhpcy5jbGlwcGVyU2VydmljZS5mbGFncyAmIENsaXBwZXJTZXJ2aWNlRmxhZ3MuTm90aWZ5U3lzdGVtRXJyb3JzKSA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yVGltZSAtIHRoaXMubGFzdEVycm9yVGltZSA+IDUwMDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3JUaW1lID0gZXJyb3JUaW1lO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkU2Vzc2lvbiA9IGVycm9yU3RhdHVzID09PSA0MDMgfHwgZXJyb3JTdGF0dXMgPT09IDQwNTtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLnN0YXR1cyA9PT0gMFxyXG4gICAgICAgICAgICAgICAgICAgID8gXCJJbiBxdWVzdG8gbW9tZW50byBDbGlwcGVyIG5vbiDDqCBkaXNwb25pYmlsZS5cIlxyXG4gICAgICAgICAgICAgICAgICAgIDogKGVycm9yLmVycm9yPy5tZXNzYWdlID8/IGVycm9yLm1lc3NhZ2UgPz8gXCJJbXBvc3NpYmlsZSBlc2VndWlyZSBsJ29wZXJhemlvbmUgcmljaGllc3RhLlwiKS5yZXBsYWNlQWxsKFwiXFxyXFxuXCIsIFwiPC9wPjxwPlwiKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIFwiPHA+XCIgKyBtZXNzYWdlICsgXCI8L3A+XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcIkVycm9yZSBpbiBDbGlwcGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkU2Vzc2lvbiA/IDUwMDAgOiAxNTAwMCkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGludmFsaWRTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuTE9HT1VUKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIDQwMSBlcnJvclxyXG4gICAqIEBwYXJhbSByZXF1ZXN0IDogdGhlIHJlcXVlc3RcclxuICAgKiBAcGFyYW0gbmV4dCA6IHRoZSBodHRwIGhhbmRsZXJcclxuICAgKi9cclxuICBwcml2YXRlIGhhbmRsZTQwMUVycm9yKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XHJcbiAgICBpZiAodGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNsaXBwZXJTZXJ2aWNlLnJlZnJlc2goKS5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUodGhpcy5hZGRUb2tlblRvUmVxdWVzdChyZXF1ZXN0KSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0b2tlbiB0byByZXF1ZXN0XHJcbiAgICogQHBhcmFtIHJlcXVlc3QgOiB0aGUgcmVxdWVzdFxyXG4gICAqIEBwYXJhbSB0b2tlbjogdGhlIHRva2VuIG9yIG51bGwgdG8gdXNlIGN1cnJlM250XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRUb2tlblRvUmVxdWVzdChcclxuICAgIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sXHJcbiAgICB0b2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuICApOiBIdHRwUmVxdWVzdDxhbnk+IHtcclxuICAgIGlmIChyZXF1ZXN0LnVybC5zdGFydHNXaXRoKHRoaXMuY2xpcHBlclNlcnZpY2Uuc2VydmljZVVyaSkpIHtcclxuICAgICAgaWYgKCF0b2tlbikgdG9rZW4gPSB0aGlzLmNsaXBwZXJTZXJ2aWNlLmdldFRva2VuKCk7XHJcbiAgICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgIHJldHVybiByZXF1ZXN0LmNsb25lKHtcclxuICAgICAgICAgIHNldEhlYWRlcnM6IHtcclxuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogJ0JlYXJlciAnICsgdG9rZW4sXHJcbiAgICAgICAgICAgICduZ3N3LWJ5cGFzcyc6ICduZ3N3LWJ5cGFzcydcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXF1ZXN0O1xyXG4gIH1cclxuXHJcbn1cclxuIl19
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbi9jb21tb24vaW50ZXJjZXB0b3JzL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUF3RCxNQUFNLHNCQUFzQixDQUFDO0FBQy9HLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQWMsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQUk3RCxNQUFNLE9BQU8sc0JBQXNCO0lBRG5DO1FBRVUsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEMscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsa0JBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEMsa0JBQWEsR0FBVyxDQUFDLENBQUMsQ0FBQztLQW9HcEM7SUFsR0MsU0FBUyxDQUNQLE9BQXlCLEVBQ3pCLElBQWlCO1FBRWpCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNELE9BQU8sR0FBRyxP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RXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQnJvYWRjYXN0U2VydmljZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgY2F0Y2hFcnJvciwgZmluYWxpemUsIHN3aXRjaE1hcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VydmljZUZsYWdzIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyTWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XHJcbmltcG9ydCB7IENsaXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY2xpcHBlci5zZXJ2aWNlJztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyQXV0aEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuICBwcml2YXRlIGNsaXBwZXJTZXJ2aWNlID0gaW5qZWN0KENsaXBwZXJTZXJ2aWNlKTtcclxuICBwcml2YXRlIGJyb2FkY2FzdFNlcnZpY2UgPSBpbmplY3QoQnJvYWRjYXN0U2VydmljZSk7XHJcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgbGFzdEVycm9yVGltZTogbnVtYmVyID0gLTE7XHJcblxyXG4gIGludGVyY2VwdChcclxuICAgIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sXHJcbiAgICBuZXh0OiBIdHRwSGFuZGxlclxyXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgIGlmIChyZXF1ZXN0LnVybC5zdGFydHNXaXRoKHRoaXMuY2xpcHBlclNlcnZpY2Uuc2VydmljZVVyaSkpIHtcclxuICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoeyB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSk7XHJcbiAgICAgIHJldHVybiBuZXh0LmhhbmRsZSh0aGlzLmFkZFRva2VuVG9SZXF1ZXN0KHJlcXVlc3QpKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IudXJsLnN0YXJ0c1dpdGgodGhpcy5jbGlwcGVyU2VydmljZS5zZXJ2aWNlVXJpKSkge1xyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiZcclxuICAgICAgICAgICAgICAgICFyZXF1ZXN0LnVybC5pbmNsdWRlcyhcIi9sb2dpblwiKSAmJlxyXG4gICAgICAgICAgICAgICAgZXJyb3Iuc3RhdHVzID09PSA0MDFcclxuICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZTQwMUVycm9yKHJlcXVlc3QsIG5leHQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCBlcnJvclN0YXR1cyA9IHBhcnNlSW50KGVycm9yLnN0YXR1cyA/PyBcIjBcIik7XHJcbiAgICAgICAgICAgICAgaWYgKChlcnJvclN0YXR1cyA+IDAgJiYgZXJyb3JTdGF0dXMgPCA1MDApfHwgKHRoaXMuY2xpcHBlclNlcnZpY2UuZmxhZ3MgJiBDbGlwcGVyU2VydmljZUZsYWdzLk5vdGlmeVN5c3RlbUVycm9ycykgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvclRpbWUgLSB0aGlzLmxhc3RFcnJvclRpbWUgPiA1MDAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVycm9yVGltZSA9IGVycm9yVGltZTtcclxuICAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBcIlwiXHJcbiAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZXJyb3JTdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJJbiBxdWVzdG8gbW9tZW50byBDbGlwcGVyIG5vbiDDqCBkaXNwb25pYmlsZS4gUmlwcm92YSB0cmEgcXVhbGNoZSBtaW51dG8uXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDQwMzpcclxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIk5vbiBoYWkgaSBwZXJtZXNzaSBuZWNlc3NhcmkgcGVyIGVzZWd1aXJlIGwnb3BlcmF6aW9uZSByaWNoaWVzdGEuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IChlcnJvci5lcnJvcj8ubWVzc2FnZSA/PyBlcnJvci5tZXNzYWdlID8/IFwiSW1wb3NzaWJpbGUgZXNlZ3VpcmUgbCdvcGVyYXppb25lIHJpY2hpZXN0YS5cIikucmVwbGFjZUFsbChcIlxcclxcblwiLCBcIjwvcD48cD5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkU2Vzc2lvbiA9IGVycm9yU3RhdHVzID09PSA0MDUgfHwgZXJyb3JTdGF0dXMgPT09IDQxMDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIFwiPHA+XCIgKyBtZXNzYWdlICsgXCI8L3A+XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcIkVycm9yZSBpbiBDbGlwcGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkU2Vzc2lvbiA/IDUwMDAgOiAxNTAwMCkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGludmFsaWRTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuTE9HT1VUKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIDQwMSBlcnJvclxyXG4gICAqIEBwYXJhbSByZXF1ZXN0IDogdGhlIHJlcXVlc3RcclxuICAgKiBAcGFyYW0gbmV4dCA6IHRoZSBodHRwIGhhbmRsZXJcclxuICAgKi9cclxuICBwcml2YXRlIGhhbmRsZTQwMUVycm9yKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKSB7XHJcbiAgICBpZiAodGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNsaXBwZXJTZXJ2aWNlLnJlZnJlc2goKS5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUodGhpcy5hZGRUb2tlblRvUmVxdWVzdChyZXF1ZXN0KSk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCB0b2tlbiB0byByZXF1ZXN0XHJcbiAgICogQHBhcmFtIHJlcXVlc3QgOiB0aGUgcmVxdWVzdFxyXG4gICAqIEBwYXJhbSB0b2tlbjogdGhlIHRva2VuIG9yIG51bGwgdG8gdXNlIGN1cnJlM250XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhZGRUb2tlblRvUmVxdWVzdChcclxuICAgIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sXHJcbiAgICB0b2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGxcclxuICApOiBIdHRwUmVxdWVzdDxhbnk+IHtcclxuICAgIGlmIChyZXF1ZXN0LnVybC5zdGFydHNXaXRoKHRoaXMuY2xpcHBlclNlcnZpY2Uuc2VydmljZVVyaSkpIHtcclxuICAgICAgaWYgKCF0b2tlbikgdG9rZW4gPSB0aGlzLmNsaXBwZXJTZXJ2aWNlLmdldFRva2VuKCk7XHJcbiAgICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgIHJldHVybiByZXF1ZXN0LmNsb25lKHtcclxuICAgICAgICAgIHNldEhlYWRlcnM6IHtcclxuICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogJ0JlYXJlciAnICsgdG9rZW4sXHJcbiAgICAgICAgICAgICduZ3N3LWJ5cGFzcyc6ICduZ3N3LWJ5cGFzcydcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXF1ZXN0O1xyXG4gIH1cclxuXHJcbn1cclxuIl19
@@ -79,8 +79,11 @@ export class ClipperService {
79
79
  setTimeout(() => {
80
80
  this.login(message.data.email, message.data.password, true, message.data.oauth, message.data.oauthAccessToken).subscribe({
81
81
  next: r => {
82
- if (!r.success)
83
- this.dialogService.error(r.message, null, "Errore di Clipper");
82
+ if (!r.success) {
83
+ if (r.message) {
84
+ this.dialogService.error(r.message, null, "Errore di Clipper");
85
+ }
86
+ }
84
87
  else {
85
88
  if ((this.flags & ClipperServiceFlags.DisplayConnectionStateMessages) > 0) {
86
89
  this.dialogService.toast('Connesso a Clipper', 1500, 'power');
@@ -97,7 +100,9 @@ export class ClipperService {
97
100
  if (this.loggedIn()) {
98
101
  this.logout().subscribe(r => {
99
102
  if (!r.success) {
100
- this.dialogService.error("<p>" + r.message + "</p><br><br><hr><p class='small'><i>Per eliminare la configurazione di Clipper accedere a:<br><b>menu > personalizza > collegamenti</b></i></p>", null, "Errore di Clipper");
103
+ if (r.message) {
104
+ this.dialogService.error("<p>" + r.message + "</p><br><br><hr><p class='small'><i>Per eliminare la configurazione di Clipper accedere a:<br><b>menu > personalizza > collegamenti</b></i></p>", null, "Errore di Clipper");
105
+ }
101
106
  }
102
107
  else {
103
108
  if ((this.flags & ClipperServiceFlags.DisplayConnectionStateMessages) > 0) {
@@ -960,13 +965,13 @@ export class ClipperService {
960
965
  downloadArchiveFile(id, otp = null) {
961
966
  return this.httpClient.get(this._serviceUri + '/archive/files/download/?id=' + id + '&otp=' + (otp ?? ''), { responseType: 'blob' });
962
967
  }
963
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ClipperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
964
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ClipperService, providedIn: 'root' }); }
968
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ClipperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
969
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ClipperService, providedIn: 'root' }); }
965
970
  }
966
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ClipperService, decorators: [{
971
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ClipperService, decorators: [{
967
972
  type: Injectable,
968
973
  args: [{
969
974
  providedIn: 'root',
970
975
  }]
971
976
  }] });
972
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uL2NvbW1vbi9zZXJ2aWNlcy9jbGlwcGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUM0QixnQkFBZ0IsRUFHbEMsV0FBVyxFQUMzQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQXFGLE1BQU0sMkJBQTJCLENBQUM7QUFFN0ksT0FBTyxFQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUEwUSwwQkFBMEIsRUFBOHpCLE1BQU0sZ0JBQWdCLENBQUM7QUFDdnFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBTzlDLE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBS1UsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0QyxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUl6QixXQUFNLEdBQXdCLG1CQUFtQixDQUFDLElBQUksQ0FBQztRQUl2RCxlQUFVLEdBQTRCLElBQUksQ0FBQztRQVluQyxhQUFRLEdBQUcs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LEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUM5RSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FDekIsQ0FBQztJQUNKLENBQUM7OEdBOXRDVSxjQUFjO2tIQUFkLGNBQWMsY0FGYixNQUFNOzsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUmVxdWVzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBTaWduYWwsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFwaVJlc3VsdCwgQnJvYWRjYXN0TWVzc2FnZUluZm8sIEJyb2FkY2FzdFNlcnZpY2UsXHJcbiAgRm9sZGVyLFxyXG4gIEZvbGRlclRyZWUsXHJcbiAgTmFtZVZhbHVlSXRlbSwgU3lzdGVtVXRpbHNcclxufSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBSZWNvdmVyUGFzc3dvcmREaWFsb2dEYXRhLCBSZWNvdmVyUGFzc3dvcmREaWFsb2dSZXN1bHQsIFJlc2V0UGFzc3dvcmREaWFsb2dSZXN1bHQgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuaW1wb3J0IHsgTG9naW5PQXV0aFR5cGUgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpLm9hdXRoJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENsaXBwZXJTZXJ2aWNlRmxhZ3MsIENsaXBwZXJEYXNoYm9hcmQsIENsaXBwZXJEYXNoYm9hcmRSZXN1bHQsIENsaXBwZXJEb2N1bWVudEluZm8sIENsaXBwZXJEb2N1bWVudFN0cnVjdHVyZSwgQ2xpcHBlckRvY3VtZW50VXBkYXRlU3RhdGVQYXJhbXMsIENsaXBwZXJFeHBvcnREb2N1bWVudHNQYXJhbXMsIENsaXBwZXJMb2dpbkluZm8sIENsaXBwZXJMb2dpblJlc3VsdCwgQ2xpcHBlck1vZHVsZSwgQ2xpcHBlck9UUEluZm8sIENsaXBwZXJTZWFyY2hBcnNFdmVudHNQYXJhbXMsIENsaXBwZXJTZWFyY2hBcnNFdmVudHNSZXN1bHQsIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLCBDbGlwcGVyUmVmZXJlbmNlc1NlYXJjaFBhcmFtcywgQ2xpcHBlclNlYXJjaEZhY2V0c1Jlc3VsdCwgQ2xpcHBlclNlYXJjaFBhcmFtcywgQ2xpcHBlclNlYXJjaFJlc3VsdCwgQ2xpcHBlclNlbmREb2N1bWVudHNCeUVtYWlsUGFyYW1zLCBDbGlwcGVyVGF4b25vbXlQYXJhbXMsIENsaXBwZXJVc2VyTGluaywgQ2xpcHBlclVzZXJTZWFyY2gsIENsaXBwZXJVc2VyVHJpYWxJbmZvLCBDbGlwcGVyVXNlcldvcmtpbmdEb2N1bWVudCwgQ2xpcHBlclRlYW1NZW1iZXJJbmZvLCBDbGlwcGVyVGVhbXNTZWFyY2hQYXJhbXMsIENsaXBwZXJUZWFtc1NlYXJjaFJlc3VsdCwgQ2xpcHBlclRlYW1JbmZvLCBDbGlwcGVyVGVhbU1lbWJlcnNTZWFyY2hSZXN1bHQsIENsaXBwZXJDYWxlbmRhclNlYXJjaFBhcmFtcywgQ2xpcHBlckNhbGVuZGFyU2VhcmNoUmVzdWx0LCBDbGlwcGVyU2VhcmNoQ2FsZW5kYXJTbmFwc2hvdFJlc3VsdCwgQ2xpcHBlckNhbGVuZGFyQ29weURlYWRsaW5lc1BhcmFtcywgQ2xpcHBlckRlYWRsaW5lSW5mbywgQ2xpcHBlckNhbGVuZGFyU2F2ZURlYWRsaW5lUGFyYW1zLCBDbGlwcGVyQXJjaGl2ZUZvbGRlcnNTZWFyY2hQYXJhbXMsIENsaXBwZXJBcmNoaXZlRm9sZGVyc1NlYXJjaFJlc3VsdCwgQ2xpcHBlckFyY2hpdmVGaWxlSW5mbywgQ2xpcHBlckFyY2hpdmVGb2xkZXJzSW1wb3J0UGFyYW1zLCBDbGlwcGVyQXJjaGl2ZUZpbGVzU2VhcmNoUmVzdWx0LCBDbGlwcGVyQXJjaGl2ZUZpbGVzRGVsZXRlUGFyYW1zLCBDbGlwcGVyQXJjaGl2ZUZpbGVzQ29weVBhcmFtcywgQ2xpcHBlckFyY2hpdmVGaWxlc1NlYXJjaFBhcmFtcywgQ2xpcHBlck1vZGVsIH0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyTWVzc2FnZXMgfSBmcm9tICcuLi9tZXNzYWdlcyc7XHJcblxyXG5cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHByaXZhdGUgaHR0cENsaWVudCA9IGluamVjdChIdHRwQ2xpZW50KTtcclxuICBwcml2YXRlIGJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb24gfCBudWxsO1xyXG4gIHByaXZhdGUgYnJvYWRjYXN0U2VydmljZSA9IGluamVjdChCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcblxyXG4gIHByaXZhdGUgX3NlcnZpY2VVcmk6IHN0cmluZyA9ICcnO1xyXG4gIGdldCBzZXJ2aWNlVXJpKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VydmljZVVyaTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZmxhZ3M6IENsaXBwZXJTZXJ2aWNlRmxhZ3MgPSBDbGlwcGVyU2VydmljZUZsYWdzLk5vbmU7XHJcbiAgZ2V0IGZsYWdzKCk6IENsaXBwZXJTZXJ2aWNlRmxhZ3Mge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZsYWdzO1xyXG4gIH1cclxuICBwcml2YXRlIF9sb2dpbkluZm86IENsaXBwZXJMb2dpbkluZm8gfCBudWxsID0gbnVsbDtcclxuICBnZXQgbG9naW5JbmZvKCk6IENsaXBwZXJMb2dpbkluZm8gfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5fbG9naW5JbmZvKSB7XHJcbiAgICAgIGNvbnN0IGxvZ2luSW5mbyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjbGlwcGVyX2xvZ2luJyk7XHJcbiAgICAgIGlmIChsb2dpbkluZm8pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5fbG9naW5JbmZvID0gSlNPTi5wYXJzZShsb2dpbkluZm8pIGFzIENsaXBwZXJMb2dpbkluZm87XHJcbiAgICAgICAgfSBjYXRjaCB7IH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2xvZ2luSW5mbztcclxuICB9XHJcbiAgcHVibGljIHJlYWRvbmx5IGxvZ2dlZEluID0gc2lnbmFsPGJvb2xlYW4+KHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJjbGlwcGVyX29hdXRoX3Rva2VuXCIpICE9PSBudWxsKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgbG9nZ2luZ0luID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc25hcHNob3QgPSBzaWduYWw8Q2xpcHBlclNlYXJjaFJlc3VsdCB8IG51bGw+KG51bGwpO1xyXG4gIHB1YmxpYyByZWFkb25seSBzdXBwb3J0c1JTID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgcmVmZXJlbmNlc1NuYXBzaG90ID0gc2lnbmFsPENsaXBwZXJTZWFyY2hSZXN1bHQgfCBudWxsPihudWxsKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgZGFzaGJvYXJkOiBDbGlwcGVyRGFzaGJvYXJkID0gbmV3IENsaXBwZXJEYXNoYm9hcmQoKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgYmFnID0gc2lnbmFsPENsaXBwZXJEb2N1bWVudEluZm9bXT4oW10pO1xyXG4gIHB1YmxpYyByZWFkb25seSBiYWdUb3RhbDogU2lnbmFsPG51bWJlcj4gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5iYWcoKS5sZW5ndGg7XHJcbiAgfSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHZpc2libGUgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByaXZhdGUgX3RlYW1zOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSA9IFtdO1xyXG4gIGdldCB0ZWFtcygpOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVhbXM7XHJcbiAgfVxyXG4gIHB1YmxpYyBjdXJyZW50VGVhbUlkID0gc2lnbmFsPHN0cmluZz4oU3lzdGVtVXRpbHMuZW1wdHlVVUlEKCkpO1xyXG4gIHB1YmxpYyBjdXJyZW50VGVhbU5hbWUgPSBzaWduYWw8c3RyaW5nPihcIlBFUlNPTkFMRVwiKTtcclxuICBwdWJsaWMgY3VycmVudFRlYW1Jc1ByaXZhdGU6IFNpZ25hbDxib29sZWFuPiA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLmN1cnJlbnRUZWFtSWQoKSAhPT0gU3lzdGVtVXRpbHMuZW1wdHlVVUlEKCk7XHJcbiAgfSk7XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgc2VydmljZVxyXG4gICAqIEBwYXJhbSBzZXJ2aWNlVXJpIDogdGhlIHNlcnZpY2UgdXJpXHJcbiAgICogQHBhcmFtIGZsYWdzOiB0aGUgc2VydmljZSBmbGFncy4gRGVmYXVsdCBpcyBub25lLlxyXG4gICAqL1xyXG4gIGluaXRpYWxpemUoXHJcbiAgICBzZXJ2aWNlVXJpOiBzdHJpbmcsXHJcbiAgICBmbGFnczogQ2xpcHBlclNlcnZpY2VGbGFncyA9IENsaXBwZXJTZXJ2aWNlRmxhZ3MuTm9uZSkge1xyXG5cclxuICAgIC8vIENyZWF0ZSB1bmlxdWUgY2xpZW50IGlkXHJcbiAgICBpZiAoIWxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjbGlwcGVyX2NsaWVudF9pZCcpKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjbGlwcGVyX2NsaWVudF9pZCcsIFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJbml0aWFsaXplXHJcbiAgICB0aGlzLl9zZXJ2aWNlVXJpID0gc2VydmljZVVyaTtcclxuICAgIHRoaXMuX2ZsYWdzID0gZmxhZ3M7XHJcblxyXG4gICAgLy8gUmVhY3QgdG8gbWVzc2FnZSBicm9hZGNhc3RpbmdcclxuICAgIGlmICghdGhpcy5icm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbiA9IHRoaXMuYnJvYWRjYXN0U2VydmljZS5nZXRNZXNzYWdlKCkuc3Vic2NyaWJlKChtZXNzYWdlOiBCcm9hZGNhc3RNZXNzYWdlSW5mbykgPT4ge1xyXG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBDbGlwcGVyTWVzc2FnZXMuTE9HSU5fQ0hBTkdFRCkge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9naW4oXHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhLmVtYWlsLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YS5wYXNzd29yZCxcclxuICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YS5vYXV0aCxcclxuICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEub2F1dGhBY2Nlc3NUb2tlbikuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoIXIuc3VjY2VzcylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlLCBudWxsLCBcIkVycm9yZSBkaSBDbGlwcGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZmxhZ3MgJiBDbGlwcGVyU2VydmljZUZsYWdzLkRpc3BsYXlDb25uZWN0aW9uU3RhdGVNZXNzYWdlcykgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ0Nvbm5lc3NvIGEgQ2xpcHBlcicsIDE1MDAsICdwb3dlcicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIGJhZ1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEJhZygpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHsgY29uc29sZS5lcnJvcihcIkNsaXBwZXIgbm9uIGRpc3BvbmliaWxlLlwiKSB9IC8vIEF2b2lkIHVud2FudGVkIGVycm9ycyBvbiBjbGllbnRcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmlkID09PSBDbGlwcGVyTWVzc2FnZXMuTE9HT1VUKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5sb2dnZWRJbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nb3V0KCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3IoXCI8cD5cIiArIHIubWVzc2FnZSArIFwiPC9wPjxicj48YnI+PGhyPjxwIGNsYXNzPSdzbWFsbCc+PGk+UGVyIGVsaW1pbmFyZSBsYSBjb25maWd1cmF6aW9uZSBkaSBDbGlwcGVyIGFjY2VkZXJlIGE6PGJyPjxiPm1lbnUgPiBwZXJzb25hbGl6emEgPiBjb2xsZWdhbWVudGk8L2I+PC9pPjwvcD5cIiwgbnVsbCwgXCJFcnJvcmUgZGkgQ2xpcHBlclwiKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLmZsYWdzICYgQ2xpcHBlclNlcnZpY2VGbGFncy5EaXNwbGF5Q29ubmVjdGlvblN0YXRlTWVzc2FnZXMpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ0Rpc2Nvbm5lc3NvIGRhIENsaXBwZXInLCAxNTAwLCAncG93ZXJfb2ZmJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBFbXB0eSBiYWdcclxuICAgICAgICAgICAgICAgIHRoaXMuYmFnLnNldChbXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEV2ZWx1YXRlIGN1cnJlbnQgc2Vzc2lvbiBzdG9yYWdlIGluIGNhc2Ugb2YgcGFnZSByZWZyZXNoIChGNSlcclxuICAgIGlmICghdGhpcy5sb2dnZWRJbigpICYmIHRoaXMuZ2V0VG9rZW4oKSkge1xyXG4gICAgICAvLyBBdXRvIGxvZ2luXHJcbiAgICAgIHRoaXMubG9nZ2VkSW4uc2V0KHRydWUpO1xyXG4gICAgICAvLyBOb3RpZnlcclxuICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5MT0dJTl9DT01QTEVURUQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFNldCBKV1QgdG9rZW5zXHJcbiAqIEBwYXJhbSB2YWx1ZSA6IHRoZSBsb2dpbiByZXN1bHRcclxuICovXHJcbiAgcHJpdmF0ZSBzZXRUb2tlbih2YWx1ZTogQ2xpcHBlckxvZ2luUmVzdWx0KSB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdjbGlwcGVyX2p3dCcsIHZhbHVlLnRva2VuKTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2NsaXBwZXJfand0X3JlZnJlc2gnLCB2YWx1ZS5yZWZyZXNoVG9rZW4gPz8gJycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGN1cnJlbnQgSldUIHRva2VuXHJcbiAgICogQHBhcmFtIHJlZnJlc2g6IHRydWUgdG8gZ2V0IHRoZSByZWZyZXNoIHRva2VuLiBEZWZhdWx0IGlzIGZhbHNlLlxyXG4gICAqL1xyXG4gIGdldFRva2VuKHJlZnJlc2g6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgICBsZXQgdG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHJlZnJlc2ggPyAnY2xpcHBlcl9qd3RfcmVmcmVzaCcgOiAnY2xpcHBlcl9qd3QnKTtcclxuICAgIGlmICh0b2tlbiAmJiB0b2tlblswXSA9PT0gJ1wiJykge1xyXG4gICAgICByZXR1cm4gdG9rZW4uc3Vic3RyaW5nKDEsIHRva2VuLmxlbmd0aCAtIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRva2VuID8/ICcnO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3JlIGxvZ2luIGluZm9cclxuICAgKi9cclxuICBzdG9yZUxvZ2luKCkge1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NsaXBwZXJfbG9naW4nLCBKU09OLnN0cmluZ2lmeSh0aGlzLl9sb2dpbkluZm8pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBQZXJmb3JtIGF1dG8gbG9naW4gdXNpbmcgY3VycmVudCBsaW5rIGRhdGFcclxuICAgKiBAcGFyYW0gZW1haWw6IHRoZSBvcHRpb25hbCBlbWFpbCBpZiB1c2luZyBPQXV0aDJcclxuICAgKiBAcGFybWEgcGFzc3dvcmQ6IHRoZSBvcHRpb25hbCBwYXNzd29yZCBpZiB1c2luZyBPQXV0aDJcclxuICAgKiBAcGFyYW0gcmVtZW1iZXI6IHJlbWVtYmVyIGNyZWRlbnRpYWxzIFxyXG4gICAqIEBwYXJhbSBvYXV0aDogdGhlIG9wdGlvbmFsIG9wZW4gYXV0aGVudGljYXRpb24gc3VwcG9ydGVkXHJcbiAgICogQHBhcmFtIG9hdXRoQWNjZXNzVG9rZW46IHRoZSBvcHRpb25hbCBPQXV0aDIgYWNjZXNzIHRva2VuXHJcbiAqIEBwYXJhbSBvblN1Y2NlczogZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbiBzZWNjZXNzXHJcbiAqL1xyXG4gIGF1dG9Mb2dpbihcclxuICAgIGVtYWlsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHBhc3N3b3JkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHJlbWVtYmVyOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCA9IGZhbHNlLFxyXG4gICAgb2F1dGg6IExvZ2luT0F1dGhUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICBvYXV0aEFjY2Vzc1Rva2VuOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcImNsaXBwZXJfb2F1dGhfdG9rZW5cIiksXHJcbiAgICBvblN1Y2NlczogRnVuY3Rpb24gfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5sb2dpbihlbWFpbCwgcGFzc3dvcmQsIHJlbWVtYmVyLCBvYXV0aCwgb2F1dGhBY2Nlc3NUb2tlbilcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogciA9PiB7XHJcbiAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlLCBudWxsLCBcIkVycm9yZSBpbiBDbGlwcGVyXCIpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdDb25uZXNzbyBhIENsaXBwZXInLCAxNTAwLCAncG93ZXInKTtcclxuICAgICAgICAgICAgaWYgKG9uU3VjY2VzKSB7XHJcbiAgICAgICAgICAgICAgb25TdWNjZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHsgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKFwiQ2xpcHBlciBub24gZGlzcG9uaWJpbGUuXCIpIH1cclxuICAgICAgfSlcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBhdXRvIGxvZ291dFxyXG4gICAqIEBwYXJhbSBvblN1Y2NlczogZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbiBzZWNjZXNzXHJcbiAgICovXHJcbiAgYXV0b0xvZ291dChcclxuICAgIG9uU3VjY2VzOiBGdW5jdGlvbiB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsKSB7XHJcbiAgICBpZiAoIXRoaXMubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgdGhpcy5sb2dvdXQoKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiByID0+IHtcclxuICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSwgbnVsbCwgXCJFcnJvcmUgaW4gQ2xpcHBlclwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdEaXNjb25uZXNzbyBkYSBDbGlwcGVyJywgMTUwMCwgJ3Bvd2VyX29mZicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmNsZWFyKClcclxuICAgICAgICBpZiAob25TdWNjZXMpIHtcclxuICAgICAgICAgIG9uU3VjY2VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmZvcm0gbG9naW4gICBcclxuICAgKiBAcGFyYW0gZW1haWw6IHRoZSBvcHRpb2FubCBlbWFpbCBpZiB1c2luZyBPQXV0aDJcclxuICAgKiBAcGFybWEgcGFzc3dvcmQ6IHRoZSBvcHRpb25hbCBwYXNzd29yZCBpZiB1c2luZyBPQXV0aDJcclxuICAgKiBAcGFyYW0gcmVtZW1iZXI6IHJlbWVtYmVyIGNyZWRlbnRpYWxzIFxyXG4gICAqIEBwYXJhbSBvYXV0aDogdGhlIG9wdGlvbmFsIG9wZW4gYXV0aGVudGljYXRpb24gc3VwcG9ydGVkXHJcbiAgICogQHBhcmFtIG9hdXRoQWNjZXNzVG9rZW46IHRoZSBvcHRpb25hbCBPQXV0aDIgYWNjZXNzIHRva2VuXHJcbiAgICogQHJldHVybnM6IHRoZSBsb2dpbiByZXN1bHRcclxuICAgKi9cclxuICBsb2dpbihlbWFpbDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICBwYXNzd29yZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICByZW1lbWJlcjogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgPSBmYWxzZSxcclxuICAgIG9hdXRoOiBMb2dpbk9BdXRoVHlwZSB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgb2F1dGhBY2Nlc3NUb2tlbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJjbGlwcGVyX29hdXRoX3Rva2VuXCIpKSB7XHJcbiAgICB0aGlzLmxvZ2dpbmdJbi5zZXQodHJ1ZSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+PihcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9sb2dpbjInLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHVzZXI6IG9hdXRoID8gbnVsbCA6IGVtYWlsLFxyXG4gICAgICAgICAgcGFzc3dvcmQ6IG9hdXRoID8gbnVsbCA6IHBhc3N3b3JkLFxyXG4gICAgICAgICAgY2xpZW50SWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiY2xpcHBlcl9jbGllbnRfaWRcIiksXHJcbiAgICAgICAgICBPQVVUSDogb2F1dGhcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGhlYWRlcnM6XHJcbiAgICAgICAgICAgICFvYXV0aCB8fCAhb2F1dGhBY2Nlc3NUb2tlblxyXG4gICAgICAgICAgICAgID8gbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgICAgICAgICA6IG5ldyBIdHRwSGVhZGVycygpXHJcbiAgICAgICAgICAgICAgICAuc2V0KFwiQXV0aG9yaXphdGlvblwiLCBvYXV0aEFjY2Vzc1Rva2VuKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIHRoaXMubG9nZ2luZ0luLnNldChmYWxzZSk7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9sb2dpbicpO1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvZ2dpbmdJbi5zZXQoZmFsc2UpO1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAvLyBTdG9yZSBhY2Nlc3MgdG9rZW5cclxuICAgICAgICAgICAgdGhpcy5zZXRUb2tlbihyLnZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgbG9naW5JbmZvOiBDbGlwcGVyTG9naW5JbmZvID0ge1xyXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHIudmFsdWUuY29udGV4dCxcclxuICAgICAgICAgICAgICB1c2VyU2V0dGluZ3M6IHIudmFsdWUuc2V0dGluZ3MsXHJcbiAgICAgICAgICAgICAgT0FVVEg6IG9hdXRoXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFvYXV0aCkge1xyXG4gICAgICAgICAgICAgIGxvZ2luSW5mby51c2VyQ3JlZGVudGlhbHMgPVxyXG4gICAgICAgICAgICAgICAgU3lzdGVtVXRpbHMuY2lwaGVyKFxyXG4gICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZW1haWw6IGVtYWlsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBwYXNzd29yZCxcclxuICAgICAgICAgICAgICAgICAgICByZW1lbWJlcjogcmVtZW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgIH0pLCBsb2dpbkluZm8uY29udGV4dC51c2VySWQudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gVXBkYXRlIGluZm8gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5fbG9naW5JbmZvID0gbG9naW5JbmZvO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlTG9naW4oKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZWRJbi5zZXQodHJ1ZSk7XHJcbiAgICAgICAgICAgIC8vIE5vdGlmeVxyXG4gICAgICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkxPR0lOX0NPTVBMRVRFRCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBsb2dvdXRcclxuICAgKi9cclxuICBsb2dvdXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8YW55Pih0aGlzLl9zZXJ2aWNlVXJpICsgJy9sb2dvdXQnLCB7fSkucGlwZShcclxuICAgICAgbWFwKHIgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xlYXIodHJ1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHJcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKF9lKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbGVhcih0cnVlKTtcclxuICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIFJlc2V0IGxvZ2luIHJlZnJlc2ggdGltZXIgYW5kIGxvZ2luIHN0YXRlXHJcbiAgKi9cclxuICByZXNldCgpIHtcclxuICAgIC8vIENsZWFyIGxvZ2luIGluZm9cclxuICAgIHRoaXMuX2xvZ2luSW5mbyA9IG51bGw7XHJcbiAgICAvLyBMb2dnZWQgb3V0XHJcbiAgICB0aGlzLmxvZ2dlZEluLnNldChmYWxzZSk7XHJcbiAgICAvLyBOb3RpZnlcclxuICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuTE9HT1VUX0NPTVBMRVRFRCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBsb2dpbiBkYXRhXHJcbiAgICogQHBhcmFtIGNsZWFyT0F1dGhUb2tlbjogdHJ1ZSB0byBjbGVhciBvYXV0aCB0b2tlbiBhbHNvXHJcbiAgICovXHJcbiAgY2xlYXIoY2xlYXJPQXV0aFRva2VuOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIC8vIENsZWFyIGxvY2FsIHN0b3JhZ2VcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBwZXJfand0Jyk7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdjbGlwcGVyX2p3dF9yZWZyZXNoJyk7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCdjbGlwcGVyX29hdXRoJyk7XHJcbiAgICBpZiAoY2xlYXJPQXV0aFRva2VuKSB7XHJcbiAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBwZXJfb2F1dGhfdG9rZW4nKTtcclxuICAgIH1cclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdjbGlwcGVyX2xvZ2luJyk7XHJcblxyXG4gICAgLy8gUmVzZXQgbG9naW5cclxuICAgIHRoaXMucmVzZXQoKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAqIFBlcmZvcm0gdG9rZW4gcmVmcmVzaFxyXG4gICovXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvcmVmcmVzaDIvP3Rva2VuPScgKyB0aGlzLmdldFRva2VuKHRydWUpXHJcbiAgICApLnBpcGUobWFwKChyOiBBcGlSZXN1bHQ8Q2xpcHBlckxvZ2luUmVzdWx0PikgPT4ge1xyXG4gICAgICAvLyBVcGRhdGUgdG9rZW5cclxuICAgICAgdGhpcy5zZXRUb2tlbihyLnZhbHVlKTtcclxuICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogR2V0IGEgbmV3IG9uZSB0aW1lIHBhc3N3b3JkXHJcbiAgKiBAcGFyYW0gaWQ6IHRoZSBvcHRpb25hbCByZXBvc2l0b3J5IGlkIFxyXG4gICovXHJcbiAgbmV3T1RQKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyT1RQSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9vdHAvbmV3Lz9pZD0nICsgaWQsXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBBcnMgZXZlbnRzIGNhbGVuZGFyXHJcbiAgICovXHJcbiAgZXZlbnRzKHBhcmFtczogQ2xpcHBlclNlYXJjaEFyc0V2ZW50c1BhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoQXJzRXZlbnRzUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2Fycy9ldmVudHMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUXVlcnkgZG9jdW1lbnRzXHJcbiAgICovXHJcbiAgcXVlcnkocGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZhY2V0cyBmb3IgYSBxdWVyeVxyXG4gICAqL1xyXG4gIHF1ZXJ5RmFjZXRzKHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9mYWNldHMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgKiBVcGRhdGUgZG9jdW1lbnQgc3RhdGVcclxuICAqL1xyXG4gIHVwZGF0ZVN0YXRlKHBhcmFtczogQ2xpcHBlckRvY3VtZW50VXBkYXRlU3RhdGVQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zdGF0ZS91cGRhdGUnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgYSBkb2N1bWVudCBpbiBwZGYgZm9ybWF0XHJcbiAgICovXHJcbiAgZXhwb3J0UGRmKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvZXhwb3J0LycgKyBpZCxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKipcclxuICogRXhwb3J0IGRvY3VtZW50IGxpc3QgKHF1ZXJ5IG9yIHNlbGVjdGVkIGl0ZW1zKSBvciBleHBvcnQgZGVhZGxpbmVzIGFzIGljc1xyXG4gKi9cclxuICBleHBvcnQocGFyYW1zOiBDbGlwcGVyRXhwb3J0RG9jdW1lbnRzUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9leHBvcnQnLFxyXG4gICAgICBwYXJhbXMsXHJcbiAgICAgIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmQgZG9jdW1lbnRzIGxpbmsgYnkgZW1haWxcclxuICAgKi9cclxuICBzZW5kVG8ocGFyYW1zOiBDbGlwcGVyU2VuZERvY3VtZW50c0J5RW1haWxQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zZW5kJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzcGxheSBhIHBhZ2UgdGhlIGZ1bGwgZG9jdW1lbnQgcmVwb3J0XHJcbiAgICovXHJcbiAgcmVwb3J0KGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvcmVwb3J0LycgKyBpZCxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGNvbW1lbnRcclxuICAgKi9cclxuICBjb21tZW50KGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxzdHJpbmc+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NvbW1lbnQvJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGluZm9cclxuICAgKi9cclxuICBpbmZvKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyRG9jdW1lbnRJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9pbmZvLycgKyBpZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBkb2N1bWVudCBzdHJ1Y3R1cmVcclxuICAgKi9cclxuICBpbmRleChpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlckRvY3VtZW50U3RydWN0dXJlPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zdHJ1Y3R1cmUvJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IGxhc3QgdXBkYXRlXHJcbiAgICovXHJcbiAgbGFzdFVwZGF0ZShpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8c3RyaW5nPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9sYXN0LXVwZGF0ZS8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBRdWVyeSBkb2N1bWVudCByZWZlcmVuY2VzXHJcbiAgICovXHJcbiAgcmVmZXJlbmNlcyhwYXJhbXM6IENsaXBwZXJSZWZlcmVuY2VzU2VhcmNoUGFyYW1zKSB7XHJcbiAgICBsZXQgbW9kZSA9IHBhcmFtcy5tb2RlO1xyXG4gICAgaWYgKCFtb2RlKSBtb2RlID0gQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc0luO1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc0luOlxyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNPdXQ6XHJcbiAgICAgICAgcGFyYW1zLm1vZGUgPSBtb2RlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3JlZmVyZW5jZXMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc091dDpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9jaGFuZ2VzJyxcclxuICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuSnVyaXM6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvanVyaXMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBmYWNldHMgZm9yIGEgZG9jdW1lbnQgcmVmZXJlbmNlc1xyXG4gICAqL1xyXG4gIHJlZmVyZW5jZXNGYWNldHMocGFyYW1zOiBDbGlwcGVyUmVmZXJlbmNlc1NlYXJjaFBhcmFtcykge1xyXG4gICAgbGV0IG1vZGUgPSBwYXJhbXMubW9kZSA/PyBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW47XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc091dDpcclxuICAgICAgICBwYXJhbXMubW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvcmVmZXJlbmNlcy9mYWNldHMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc091dDpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9jaGFuZ2VzL2ZhY2V0cycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkp1cmlzOlxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaEZhY2V0c1Jlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2p1cmlzL2ZhY2V0cycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OiByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdyYXAgZG9jdW1lbnQgcmVuZGVyaW5nIHRvIGFsbG93IHRva2VuIHJlZnJlc2hcclxuICAgKi9cclxuICBwcmVSZW5kZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Ym9vbGVhbj4+KHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9wcmUtcmVuZGVyJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQganVyaXMgYXJ0aWNsZXNcclxuICAgKi9cclxuICBqdXJpc0FydGljbGVzKHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9qdXJpcy9hcnRpY2xlcycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogR2V0IGRlYWRsaW5lcyBzbmFwc2hvdCBiYXNlZCBvbiB0aGUgZGVhZGxpbmVzXHJcbiAgKi9cclxuICBkZWFkbGluZXNTbmFwc2hvdChwYXJhbXM6IENsaXBwZXJDYWxlbmRhclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoQ2FsZW5kYXJTbmFwc2hvdFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvY2FsZW5kYXIvc25hcHNob3QnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgdGhlIHRheG9ub215XHJcbiAgICovXHJcbiAgZ2V0VGF4b25vbXkocGFyYW1zOiBDbGlwcGVyVGF4b25vbXlQYXJhbXMgfCBudWxsID0gbnVsbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxGb2xkZXJUcmVlPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL3RheG9ub215JyxcclxuICAgICAgcGFyYW1zID8/IHsgbW9kZWw6IDAsIGNvdW50SXRlbXM6IGZhbHNlIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSB0b3BpY3NcclxuICAgKi9cclxuICBnZXRUb3BpY3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8TmFtZVZhbHVlSXRlbTxzdHJpbmc+W10+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvdG9waWNzJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogUmV0cmlldmUgdG9waWNzIGFzIHRyZWVcclxuICAqL1xyXG4gIGdldFRvcGljc0FzVHJlZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxGb2xkZXJUcmVlPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL3RvcGljczInXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgdGFnc1xyXG4gICAqL1xyXG4gIGdldFRhZ3MoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8TmFtZVZhbHVlSXRlbTxzdHJpbmc+W10+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvdGFncydcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vXHJcbiAgLy8gREFTSEJPQVJEXHJcbiAgLy8vXHJcbiAgLyoqXHJcbiAgKiBSZXRyaWV2ZSBjdXJyZW50IGRhc2hib2FyZFxyXG4gICovXHJcbiAgbG9hZERhc2hib2FyZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJEYXNoYm9hcmRSZXN1bHQ+PihcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L2Rhc2hib2FyZCcsXHJcbiAgICAgICAgeyByZWZyZXNoaW5nOiB0cnVlIH1cclxuICAgICAgKS5zdWJzY3JpYmUoKHI6IEFwaVJlc3VsdDxDbGlwcGVyRGFzaGJvYXJkUmVzdWx0PikgPT4ge1xyXG4gICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLmRvY3VtZW50VXBkYXRlcyA9IHIudmFsdWUuZG9jdW1lbnRVcGRhdGVzO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQuZXhwaXJlZERlYWRsaW5lcyA9IHIudmFsdWUuZXhwaXJlZERlYWRsaW5lcztcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLmV4cGlyaW5nRGVhZGxpbmVzID0gci52YWx1ZS5leHBpcmluZ0RlYWRsaW5lcztcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLmlzVHJpYWwgPSByLnZhbHVlLmlzVHJpYWw7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5pdGVtcy5zZXQoci52YWx1ZS5pdGVtcyA/PyBbXSk7XHJcbiAgICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfREFTSEJPQVJEX1VQREFURUQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIFVwZGF0ZSB1bnJlYWQgaXRlbXNcclxuICAqIEBwYXJhbSBtb2R1bGUgOiB0aGUgbW9kdWxlXHJcbiAgKiBAcGFyYW0gbW9kZWwgOiB0aGUgb3B0aW9uYWwgbW9kZWxcclxuICAqIEBwYXJhbSBpbmNyZW1lbnQgOiB0aGUgaW5jcmVtZW50IChjYW4gYmUgbmVnYXRpdmUpXHJcbiAgKi9cclxuICB1cGRhdGVVbnJlYWRJdGVtcyhtb2R1bGU6IENsaXBwZXJNb2R1bGUsIG1vZGVsOiBDbGlwcGVyTW9kZWwgfCBudWxsLCBpbmNyZW1lbnQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5kYXNoYm9hcmQudXBkYXRlVW5yZWFkSXRlbXMobW9kdWxlLCBtb2RlbCwgaW5jcmVtZW50KTtcclxuICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9EQVNIQk9BUkRfVVBEQVRFRCk7XHJcbiAgfVxyXG5cclxuICAvLy9cclxuICAvLyBMSU5LU1xyXG4gIC8vL1xyXG5cclxuICAvKipcclxuICAqIFNhdmUgYSB1c2VyIGxpbmtcclxuICAqIEBwYXJhbSBpdGVtOiB0aGUgdXNlciBsaW5rXHJcbiAgKi9cclxuICBzYXZlTGluayhpdGVtOiBDbGlwcGVyVXNlckxpbmspIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Ym9vbGVhbj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L2xpbmtzL3NhdmUnLFxyXG4gICAgICBpdGVtXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGEgdXNlciBsaW5rXHJcbiAgICogQHBhcmFtIGl0ZW06IHRoZSB1c2VyIGxpbmtcclxuICAgKi9cclxuICBkZWxldGVMaW5rKGl0ZW06IENsaXBwZXJVc2VyTGluaykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxib29sZWFuPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvbGlua3MvZGVsZXRlJyxcclxuICAgICAgaXRlbVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvLy9cclxuICAvLyBCQUcgLSBXT1JLSU5HIERPQ1VNRU5UU1xyXG4gIC8vL1xyXG5cclxuICAvKipcclxuICAgKiBMb2FkIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiAgICovXHJcbiAgbG9hZEJhZygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLmdldDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXT4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3dvcmtpbmcnXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocjogQXBpUmVzdWx0PENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50W10+KSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSA9IFtdO1xyXG4gICAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChuLmRvY3VtZW50RGVzY3JpcHRvcikge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEluZm8gPSBKU09OLnBhcnNlKG4uZG9jdW1lbnREZXNjcmlwdG9yKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uZG9jdW1lbnRJZCA9IGRvY3VtZW50SW5mby5Eb2N1bWVudElkIHx8IGRvY3VtZW50SW5mby5JZDtcclxuICAgICAgICAgICAgICAgICAgICBuLnRpdGxlMSA9IGRvY3VtZW50SW5mby5UaXRsZTEgPz8gZG9jdW1lbnRJbmZvLlRpdGxlMjtcclxuICAgICAgICAgICAgICAgICAgICBuLnRpdGxlMiA9IGRvY3VtZW50SW5mby5UaXRsZTEgPyBkb2N1bWVudEluZm8uVGl0bGUyIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBuLmRvY3VtZW50RGVzY3JpcHRvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2gobik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5iYWcuc2V0KGl0ZW1zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkIG9uZSBvciBtb3JlIHdvcmtpbmcgZG9jdW1lbnRcclxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZHMgOiB0aGUgZG9jdW1lbnQgaWRzIHRvIGFkZFxyXG4gICAqL1xyXG4gIGFkZFRvQmFnKGRvY3VtZW50SWRzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXT4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3dvcmtpbmcvYWRkJyxcclxuICAgICAgICB7IGRvY3VtZW50SWRzOiBkb2N1bWVudElkcyB9XHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PENsaXBwZXJVc2VyV29ya2luZ0RvY3VtZW50W10+KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoci52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdJdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdID0gW107XHJcbiAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICBpZiAobi5kb2N1bWVudERlc2NyaXB0b3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50SW5mbyA9IEpTT04ucGFyc2Uobi5kb2N1bWVudERlc2NyaXB0b3IpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50SW5mbykge1xyXG4gICAgICAgICAgICAgICAgICBuLmRvY3VtZW50SWQgPSBkb2N1bWVudEluZm8uRG9jdW1lbnRJZCB8fCBkb2N1bWVudEluZm8uSWQ7XHJcbiAgICAgICAgICAgICAgICAgIG4udGl0bGUxID0gZG9jdW1lbnRJbmZvLlRpdGxlMSA/PyBkb2N1bWVudEluZm8uVGl0bGUyO1xyXG4gICAgICAgICAgICAgICAgICBuLnRpdGxlMiA9IGRvY3VtZW50SW5mby5UaXRsZTEgPyBkb2N1bWVudEluZm8uVGl0bGUyIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG4uZG9jdW1lbnREZXNjcmlwdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIG5ld0l0ZW1zLnB1c2gobik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKG5ld0l0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmJhZy51cGRhdGUoKHZhbHVlczogYW55KSA9PiBbLi4udmFsdWVzLCAuLi5uZXdJdGVtc10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIG9uZSB3b3JraW5nIGRvY3VtZW50XHJcbiAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgKi9cclxuICByZW1vdmVGcm9tQmFnKGRvY3VtZW50SWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvd29ya2luZy9kZWxldGUnLFxyXG4gICAgICAgIHsgZG9jdW1lbnRJZHM6IFtkb2N1bWVudElkXSB9XHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PG51bWJlcj4pID0+IHtcclxuICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLmJhZygpLmZpbmRJbmRleCgobjogYW55KSA9PiBuLmRvY3VtZW50SWQgPT09IGRvY3VtZW50SWQpO1xyXG4gICAgICAgICAgaWYgKHAgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFnLnVwZGF0ZSgodmFsdWVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB2YWx1ZXMuc3BsaWNlKHAsIDEpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBbLi4udmFsdWVzXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYWxsIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiAgICovXHJcbiAgY2xlYXJCYWcoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy93b3JraW5nL2RlbGV0ZScsXHJcbiAgICAgICAgeyBkZWxldGVBbGw6IHRydWUgfVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHI6IEFwaVJlc3VsdDxudW1iZXI+KSA9PiB7XHJcbiAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmJhZy5zZXQoW10pO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdPcGVyYXppb25lIGNvbXBsZXRhdGEgY29uIHN1Y2Nlc3NvLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLy9cclxuICAvLyBXT1JLSU5HIFNFQVJDSEVTXHJcbiAgLy8vXHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWQgd29ya2luZyBzZWFyY2hlc1xyXG4gICAqIEBwYXJhbTogbW9kdWxlOiB0aGUgbW9kdWxlIHRvIGxvYWQgc2VhcmNoZXMgZm9yXHJcbiAgICovXHJcbiAgbG9hZFNlYXJjaGVzKG1vZHVsZTogQ2xpcHBlck1vZHVsZSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyVXNlclNlYXJjaFtdPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvc2VhcmNoZXMvP21vZHVsZT0nICsgbW9kdWxlXHJcbiAgICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgYSB3b3JraW5nIHNlYXJjaFxyXG4gICAqIEBwYXJhbSBwYXJhbXMgOiB0aGUgY2xpcHBlciB1c2VyIHNlYXJjaFxyXG4gICAqL1xyXG4gIHNhdmVTZWFyY2gocGFyYW1zOiBDbGlwcGVyVXNlclNlYXJjaCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJTZWFyY2g+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zZWFyY2hlcy9zYXZlJyxcclxuICAgICAgICBwYXJhbXNcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBvbmUgd29ya2luZyBzZWFyY2hcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgaWQgdG8gcmVtb3ZlXHJcbiAgICovXHJcbiAgZGVsZXRlU2VhcmNoKGlkOiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3NlYXJjaGVzL2RlbGV0ZScsXHJcbiAgICAgICAgeyBpZDogaWQgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gVVNFUiBTRVRUSU5HUyBBTkQgVFJJQUxcclxuICAvLy9cclxuXHJcbiAgLyoqXHJcbiAgKiBSZXNldCBhIHVzZXIgcGFzc3dvcmRcclxuICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVyc1xyXG4gICovXHJcbiAgcmVzZXRQYXNzd29yZChwYXJhbXM6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxSZXNldFBhc3N3b3JkRGlhbG9nUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvcGFzc3dvcmQvcmVzZXQnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWNvdmVyIHBhc3N3b3JkXHJcbiAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgcmVjb3ZlclBhc3N3b3JkKHBhcmFtczogUmVjb3ZlclBhc3N3b3JkRGlhbG9nRGF0YSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxSZWNvdmVyUGFzc3dvcmREaWFsb2dSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9wYXNzd29yZC9yZWNvdmVyJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBzZXR0aW5ncyBcclxuICAgICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHVwZGF0ZVNldHRpbmdzKHBhcmFtczogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PGJvb2xlYW4+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9zZXR0aW5ncy91cGRhdGUnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgY2hhbm5lbCBzdGF0ZVxyXG4gICAqIEBwYXJhbSBpZDogdGhlIGNoYW5uZWwgaWQgKDEsIDIsIDMsIDQpXHJcbiAgICovXHJcbiAgdXBkYXRlQ2hhbm5lbFN0YXRlKGlkOiBudW1iZXIsIGVuYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckRhc2hib2FyZFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3NldHRpbmdzL2NoYW5uZWxzL3VwZGF0ZScsXHJcbiAgICAgIHtcclxuICAgICAgICBjaGFubmVsSWQ6IGlkLFxyXG4gICAgICAgIGlzRW5hYmxlZDogZW5hYmxlZCxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0cmlhbCBpbmZvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRUcmlhbEluZm8oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlclVzZXJUcmlhbEluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC90cmlhbCdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgdHJpYWwgaW5mb1xyXG4gICAqL1xyXG4gIHVwZGF0ZVRyaWFsSW5mbygpIHtcclxuICAgIGlmICghdGhpcy5fbG9naW5JbmZvIHx8IHRoaXMuX2xvZ2luSW5mbz8uY29udGV4dC5oYXNUcmlhbCA9PT0gZmFsc2UpXHJcbiAgICAgIHJldHVybjsgLy8gTm90IHN1cHBvcnRlZFxyXG4gICAgdGhpcy5nZXRUcmlhbEluZm8oKS5zdWJzY3JpYmUoKHI6IEFwaVJlc3VsdDxDbGlwcGVyVXNlclRyaWFsSW5mbz4pID0+IHtcclxuICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgIGlmICh0aGlzLl9sb2dpbkluZm8pIHtcclxuICAgICAgICAgIGlmIChyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvZ2luSW5mby5jb250ZXh0Lmhhc1RyaWFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fbG9naW5JbmZvLmNvbnRleHQudHJpYWxJbmZvID0gci52YWx1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvZ2luSW5mby5jb250ZXh0Lmhhc1RyaWFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvZ2luSW5mby5jb250ZXh0LnRyaWFsSW5mbyA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vL1xyXG4gIC8vIFRFQU1TXHJcbiAgLy8vXHJcblxyXG4gIC8qKlxyXG4gICogUmVuYW1lIGEgdGVhbVxyXG4gICogQHBhcmFtIG5ld05hbWUgOiB0aGUgbmV3IG5hbWVcclxuICAqL1xyXG4gIHJlbmFtZVRlYW0obmV3TmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJUZWFtSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3RlYW1zL3VwZGF0ZScsXHJcbiAgICAgIHsgdGl0bGU6IG5ld05hbWUgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRlYW1zXHJcbiAgICovXHJcbiAgZ2V0VGVhbXMocGFyYW1zOiBDbGlwcGVyVGVhbXNTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclRlYW1zU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvdGVhbXMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyOiBBcGlSZXN1bHQ8Q2xpcHBlclRlYW1zU2VhcmNoUmVzdWx0PikgPT4ge1xyXG4gICAgICAgICAgLy8gU3RvcmUgdGVhbXNcclxuICAgICAgICAgIHRoaXMuX3RlYW1zID0gci52YWx1ZS5pdGVtcztcclxuICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSB0ZWFtIG1lbWJlcnNcclxuICAgKi9cclxuICBnZXRUZWFtTWVtYmVycyhwYXJhbXM6IENsaXBwZXJUZWFtc1NlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyVGVhbU1lbWJlcnNTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC90ZWFtcy9tZW1iZXJzJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIG1lbWJlcnNcclxuICAgKiBAcGFyYW0gaWRzOiB0aGUgaWQgbGlzdCB0byBkZWxldGVcclxuICAgKi9cclxuICBkZWxldGVUZWFtTWVtYmVycyhpZHM6IG51bWJlcltdKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3RlYW1zL21lbWJlcnMvZGVsZXRlJyxcclxuICAgICAgeyBpZHM6IGlkcyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBtZW1iZXJcclxuICAgKiBAcGFyYW0gaXRlbTogdGhlIGl0ZW0gdG8gc2F2ZVxyXG4gICAqL1xyXG4gIHNhdmVUZWFtTWVtYmVyKGl0ZW06IENsaXBwZXJUZWFtTWVtYmVySW5mbykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyVGVhbU1lbWJlckluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC90ZWFtcy9tZW1iZXJzL3NhdmUnLFxyXG4gICAgICBpdGVtXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vL1xyXG4gIC8vIENBTEVOREFSXHJcbiAgLy8vXHJcbiAgLyoqXHJcbiAgICogUXVlcnkgY2FsZW5kYXJcclxuICAgKi9cclxuICBxdWVyeUNhbGVuZGFyKHBhcmFtczogQ2xpcHBlckNhbGVuZGFyU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJDYWxlbmRhclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhcicsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyQ2FsZW5kYXJTZWFyY2hSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAvLyBTdG9yZSB0ZWFtc1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLl90ZWFtcyA9IHIudmFsdWUudGVhbXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBjYWxlbmRhciBzbmFwc2hvdFxyXG4gICAqL1xyXG4gIGNhbGVuZGFyU25hcHNob3QocGFyYW1zOiBDbGlwcGVyQ2FsZW5kYXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaENhbGVuZGFyU25hcHNob3RSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvc25hcHNob3QnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgb25lIG9yIG1vcmUgaXRlbXNcclxuICAgKiBAcGFyYW0gaWRzOiBpZHMgdG8gZGVsZXRlXHJcbiAgICovXHJcbiAgZGVsZXRlQ2FsZW5kYXJEZWFkbGluZXMoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvZGVsZXRlJyxcclxuICAgICAgeyBpZHM6IGlkcyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29weSBvbmUgb3IgbW9yZSBpdGVtc1xyXG4gICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIGNvcHlDYWxlbmRhckRlYWRsaW5lcyhwYXJhbXM6IENsaXBwZXJDYWxlbmRhckNvcHlEZWFkbGluZXNQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2NhbGVuZGFyL2NvcHknLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9zZSBhIGRlYWRsaW5lXHJcbiAgICogQHBhcmFtIGlkIDogdGhlIGlkIHRvIGNsb3NlXHJcbiAgICovXHJcbiAgY2xvc2VDYWxlbmRhckRlYWRsaW5lKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckRlYWRsaW5lSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9jbG9zZScsXHJcbiAgICAgIHsgaWQ6IGlkIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIGFuIGl0ZW1cclxuICAgKiBAcGFyYW0gcGFyYW1zIHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBzYXZlQ2FsZW5kYXJEZWFkbGluZShwYXJhbXM6IENsaXBwZXJDYWxlbmRhclNhdmVEZWFkbGluZVBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyRGVhZGxpbmVJbmZvW10+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvc2F2ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpdmUgYSBuIGl0ZW1cclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgaXRlbSBpZFxyXG4gICAqL1xyXG4gIGdldENhbGVuZGFyRGVhZGxpbmUoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJEZWFkbGluZUluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwb3J0IHRvIGlDYWxlbmRhciBmb3JtYXRcclxuICAgKiBAcGFyYW0gaWRzIDogZGVhZGxpbmVzIHRvIGV4cG9ydFxyXG4gICAqL1xyXG4gIGV4cG9ydENhbGVuZGFyRGVhZGxpbmVzKGlkczogc3RyaW5nW10pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvZXhwb3J0JyxcclxuICAgICAgeyBpZHM6IGlkcyB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vL1xyXG4gIC8vIEFSQ0hJVkVcclxuICAvLy9cclxuICAvKipcclxuICAqIFJldHJpZXZlIGFsbCBmb2xkZXJzXHJcbiAgKiBAcGFyYW0gcGFyYW1zIDogcGFyYW1ldGVyc1xyXG4gICovXHJcbiAgZ2V0QXJjaGl2ZUZvbGRlcnMocGFyYW1zOiBDbGlwcGVyQXJjaGl2ZUZvbGRlcnNTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJBcmNoaXZlRm9sZGVyc1NlYXJjaFJlc3VsdD4+KFxyXG4gICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FyY2hpdmUvZm9sZGVycycsXHJcbiAgICAgICAgcGFyYW1zXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyOiBBcGlSZXN1bHQ8Q2xpcHBlckFyY2hpdmVGb2xkZXJzU2VhcmNoUmVzdWx0PikgPT4ge1xyXG4gICAgICAgICAgLy8gU3RvcmUgdGVhbXNcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5fdGVhbXMgPSByLnZhbHVlLnRlYW1zO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHI7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgZm9sZGVyXHJcbiAgICogQHBhcmFtIHBhcmFtcyA6IHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBzYXZlQXJjaGl2ZUZvbGRlcihwYXJhbXM6IEZvbGRlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxGb2xkZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9mb2xkZXJzL3NhdmUnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgZm9sZGVyc1xyXG4gICAqIEBwYXJhbSBpZDogdGhlIGZvbGRlciBpZCBvciBudWxsIHRvIGV4cG9ydCBhbGwgZm9sZGVyc1xyXG4gICAqIEBwYXJhbSB0ZWFtSWQ6IHRoZSBvcHRpb25hbCB0ZWFtIGlkLiBEZWZhdWx0IG51bGwgKHBlcnNvbmFsKVxyXG4gICAqL1xyXG4gIGV4cG9ydEFyY2hpdmVGb2xkZXJzKGlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCwgdGVhbUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xyXG4gICAgbGV0IHVybCA9IHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FyY2hpdmUvZXhwb3J0Lz8nO1xyXG4gICAgaWYgKGlkKSB7XHJcbiAgICAgIHVybCArPSAnaWQ9JyArIGlkO1xyXG4gICAgfVxyXG4gICAgaWYgKHRlYW1JZCkge1xyXG4gICAgICBpZiAoaWQpIHtcclxuICAgICAgICB1cmwgKz0gJyYnO1xyXG4gICAgICB9XHJcbiAgICAgIHVybCArPSAndGVhbT0nICsgdGVhbUlkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoXHJcbiAgICAgIHVybCxcclxuICAgICAge1xyXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmFtJ1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBvcnQgZm9sZGVyc1xyXG4gICAqIEBwYXJhbSBwYXJhbXMgOiBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgaW1wb3J0QXJjaGl2ZUZvbGRlcnMocGFyYW1zOiBDbGlwcGVyQXJjaGl2ZUZvbGRlcnNJbXBvcnRQYXJhbXMpIHtcclxuICAgIC8vIFByZXBhcmUgZm9ybVxyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZChwYXJhbXMuZmlsZS5uYW1lLCBwYXJhbXMuZmlsZSk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ3NvdXJjZUZpbGVOYW1lJywgcGFyYW1zLmZpbGUubmFtZSk7XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ292ZXJ3cml0ZScsIHBhcmFtcy5vdmVyd3JpdGUgPT09IHRydWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIik7XHJcbiAgICBpZiAocGFyYW1zLmRlc3RGb2xkZXJJZCkge1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2Rlc3RGb2xkZXJJZCcsIHBhcmFtcy5kZXN0Rm9sZGVySWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcmFtcy50ZWFtSWQpIHtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCd0ZWFtSWQnLCBwYXJhbXMudGVhbUlkKTtcclxuICAgIH1cclxuICAgIC8vIENyZWF0ZSByZXF1ZXN0XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3QoXHJcbiAgICAgIG5ldyBIdHRwUmVxdWVzdChcclxuICAgICAgICAnUE9TVCcsXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9pbXBvcnQvJyxcclxuICAgICAgICBmb3JtRGF0YSxcclxuICAgICAgICB7IHJlcG9ydFByb2dyZXNzOiB0cnVlIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBmaWxlcyBhbmQgZm9sZGVyc1xyXG4gICAqIEBwYXJhbSBwYXJhbXMgOiBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgcXVlcnlBcmNoaXZlSXRlbXMocGFyYW1zOiBDbGlwcGVyQXJjaGl2ZUZpbGVzU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJBcmNoaXZlRmlsZXNTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9maWxlcycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZSBmaWxlIGFuZCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgZGVsZXRlQXJjaGl2ZUl0ZW1zKHBhcmFtczogQ2xpcHBlckFyY2hpdmVGaWxlc0RlbGV0ZVBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9maWxlcy9kZWxldGUnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb3B5ICBmaWxlIGFuZCBmb2xkZXJzIHRvIGFub3RoZXIgZm9sZGVyIG9yIHRoZSBzYW1lXHJcbiAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgY29weUFyY2hpdmVJdGVtcyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRmlsZXNDb3B5UGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzL2NvcHknLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBhIGZpbGVcclxuICAgKiBAcGFyYW0gcGFyYW1zIDogcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHNhdmVBcmNoaXZlRmlsZShwYXJhbXM6IENsaXBwZXJBcmNoaXZlRmlsZUluZm8pIHtcclxuICAgIC8vIFByZXBhcmUgZm9ybVxyXG4gICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBpZiAocGFyYW1zLmZpbGUpIGZvcm1EYXRhLmFwcGVuZChwYXJhbXMuZmlsZS5maWxlLm5hbWUsIHBhcmFtcy5maWxlLmZpbGUpO1xyXG4gICAgaWYgKHBhcmFtcy5pZCkgZm9ybURhdGEuYXBwZW5kKCdpZCcsIHBhcmFtcy5pZCk7XHJcbiAgICBpZiAocGFyYW1zLmZvbGRlcklkKSB7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZm9sZGVySWQnLCBwYXJhbXMuZm9sZGVySWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcmFtcy50b3BpY0lkICYmIHBhcmFtcy50b3BpY1BhdGgpIHtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCd0b3BpY0lkJywgcGFyYW1zLnRvcGljSWQpO1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3RvcGljUGF0aCcsIHBhcmFtcy50b3BpY1BhdGgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcmFtcy50aXRsZTEpIGZvcm1EYXRhLmFwcGVuZCgndGl0bGUxJywgcGFyYW1zLnRpdGxlMSk7XHJcbiAgICBpZiAocGFyYW1zLnRpdGxlMikgZm9ybURhdGEuYXBwZW5kKCd0aXRsZTInLCBwYXJhbXMudGl0bGUyKTtcclxuICAgIGlmIChwYXJhbXMub3JpZ2luKSBmb3JtRGF0YS5hcHBlbmQoJ29yaWdpbicsIHBhcmFtcy5vcmlnaW4pO1xyXG4gICAgaWYgKHBhcmFtcy5vcmlnaW5EZXNjcmlwdGlvbikge1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ29yaWdpbkRlc2NyaXB0aW9uJywgcGFyYW1zLm9yaWdpbkRlc2NyaXB0aW9uKTtcclxuICAgIH1cclxuICAgIGlmIChwYXJhbXMuZG9jdW1lbnRJZCkgZm9ybURhdGEuYXBwZW5kKCdkb2N1bWVudElkJywgcGFyYW1zLmRvY3VtZW50SWQpO1xyXG4gICAgaWYgKHBhcmFtcy5kb2N1bWVudElkcykgZm9ybURhdGEuYXBwZW5kKCdkb2N1bWVudElkcycsIHBhcmFtcy5kb2N1bWVudElkcyk7XHJcbiAgICBpZiAocGFyYW1zLmJpbmFyeUlkKSBmb3JtRGF0YS5hcHBlbmQoJ2JpbmFyeUlkJywgcGFyYW1zLmJpbmFyeUlkPy50b1N0cmluZygpKTtcclxuICAgIGlmIChwYXJhbXMudGFncykgZm9ybURhdGEuYXBwZW5kKCd0YWdzJywgcGFyYW1zLnRhZ3MpO1xyXG4gICAgaWYgKHBhcmFtcy5ub3RlcykgZm9ybURhdGEuYXBwZW5kKCdub3RlcycsIHBhcmFtcy5ub3Rlcyk7XHJcbiAgICBpZiAocGFyYW1zLmZpbGVOYW1lKSBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGVOYW1lJywgcGFyYW1zLmZpbGVOYW1lKTtcclxuICAgIGlmIChwYXJhbXMuZmlsZVR5cGUpIGZvcm1EYXRhLmFwcGVuZCgnZmlsZVR5cGUnLCAocGFyYW1zLmZpbGVUeXBlIGFzIG51bWJlcikudG9TdHJpbmcoKSk7XHJcbiAgICBpZiAocGFyYW1zLnN0b3JhZ2VUeXBlKSBmb3JtRGF0YS5hcHBlbmQoJ3N0b3JhZ2VUeXBlJywgKHBhcmFtcy5zdG9yYWdlVHlwZSBhcyBudW1iZXIpLnRvU3RyaW5nKCkpO1xyXG4gICAgaWYgKHBhcmFtcy5tb2RlbCkgZm9ybURhdGEuYXBwZW5kKCdtb2RlbCcsIChwYXJhbXMubW9kZWwgYXMgbnVtYmVyKS50b1N0cmluZygpKTtcclxuXHJcbiAgICAvLyBDcmVhdGUgcmVxdWVzdFxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0KFxyXG4gICAgICBuZXcgSHR0cFJlcXVlc3QoXHJcbiAgICAgICAgJ1BPU1QnLFxyXG4gICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FyY2hpdmUvZmlsZXMvc2F2ZScsXHJcbiAgICAgICAgZm9ybURhdGEsXHJcbiAgICAgICAgeyByZXBvcnRQcm9ncmVzczogdHJ1ZSB9XHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZmlsZSBkYXRhXHJcbiAgICogQHBhcmFtIGlkIDogdGhlIGl0ZW0gaWRcclxuICAgKi9cclxuICBnZXRBcmNoaXZlRmlsZShpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlckFyY2hpdmVGaWxlSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzLycgKyBpZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEb3dubG9hZCBmaWxlXHJcbiAgICogQHBhcmFtIGlkIDogdGhlIGJpbmFyeSBpZCB0byBkb3dubG9hZFxyXG4gICAqIEBwYXJhbSBvdHAgOiB0aGUgb3B0aW9uYWwgb25lIHRpbWUgcGFzc3dvcmRcclxuICAgKi9cclxuICBkb3dubG9hZEFyY2hpdmVGaWxlKGlkOiBudW1iZXIsIG90cDogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzL2Rvd25sb2FkLz9pZD0nICsgaWQgKyAnJm90cD0nICsgKG90cCA/PyAnJyksXHJcbiAgICAgIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=
977
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcHBlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uL2NvbW1vbi9zZXJ2aWNlcy9jbGlwcGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUM0QixnQkFBZ0IsRUFHbEMsV0FBVyxFQUMzQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxhQUFhLEVBQXFGLE1BQU0sMkJBQTJCLENBQUM7QUFFN0ksT0FBTyxFQUFnQixFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUEwUSwwQkFBMEIsRUFBOHpCLE1BQU0sZ0JBQWdCLENBQUM7QUFDdnFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBTzlDLE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBS1UsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVoQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0QyxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUl6QixXQUFNLEdBQXdCLG1CQUFtQixDQUFDLElBQUksQ0FBQztRQUl2RCxlQUFVLEdBQTRCLElBQUksQ0FBQztRQVluQyxhQUFRLEdBQUcs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QUNILG1CQUFtQixDQUFDLEVBQVUsRUFBRSxNQUFxQixJQUFJO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQ3hCLElBQUksQ0FBQyxXQUFXLEdBQUcsOEJBQThCLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFDOUUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQ3pCLENBQUM7SUFDSixDQUFDOytHQWx1Q1UsY0FBYzttSEFBZCxjQUFjLGNBRmIsTUFBTTs7NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSwgU2lnbmFsLCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBBcGlSZXN1bHQsIEJyb2FkY2FzdE1lc3NhZ2VJbmZvLCBCcm9hZGNhc3RTZXJ2aWNlLFxyXG4gIEZvbGRlcixcclxuICBGb2xkZXJUcmVlLFxyXG4gIE5hbWVWYWx1ZUl0ZW0sIFN5c3RlbVV0aWxzXHJcbn0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgUmVjb3ZlclBhc3N3b3JkRGlhbG9nRGF0YSwgUmVjb3ZlclBhc3N3b3JkRGlhbG9nUmVzdWx0LCBSZXNldFBhc3N3b3JkRGlhbG9nUmVzdWx0IH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aSc7XHJcbmltcG9ydCB7IExvZ2luT0F1dGhUeXBlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aS5vYXV0aCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VydmljZUZsYWdzLCBDbGlwcGVyRGFzaGJvYXJkLCBDbGlwcGVyRGFzaGJvYXJkUmVzdWx0LCBDbGlwcGVyRG9jdW1lbnRJbmZvLCBDbGlwcGVyRG9jdW1lbnRTdHJ1Y3R1cmUsIENsaXBwZXJEb2N1bWVudFVwZGF0ZVN0YXRlUGFyYW1zLCBDbGlwcGVyRXhwb3J0RG9jdW1lbnRzUGFyYW1zLCBDbGlwcGVyTG9naW5JbmZvLCBDbGlwcGVyTG9naW5SZXN1bHQsIENsaXBwZXJNb2R1bGUsIENsaXBwZXJPVFBJbmZvLCBDbGlwcGVyU2VhcmNoQXJzRXZlbnRzUGFyYW1zLCBDbGlwcGVyU2VhcmNoQXJzRXZlbnRzUmVzdWx0LCBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZSwgQ2xpcHBlclJlZmVyZW5jZXNTZWFyY2hQYXJhbXMsIENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQsIENsaXBwZXJTZWFyY2hQYXJhbXMsIENsaXBwZXJTZWFyY2hSZXN1bHQsIENsaXBwZXJTZW5kRG9jdW1lbnRzQnlFbWFpbFBhcmFtcywgQ2xpcHBlclRheG9ub215UGFyYW1zLCBDbGlwcGVyVXNlckxpbmssIENsaXBwZXJVc2VyU2VhcmNoLCBDbGlwcGVyVXNlclRyaWFsSW5mbywgQ2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnQsIENsaXBwZXJUZWFtTWVtYmVySW5mbywgQ2xpcHBlclRlYW1zU2VhcmNoUGFyYW1zLCBDbGlwcGVyVGVhbXNTZWFyY2hSZXN1bHQsIENsaXBwZXJUZWFtSW5mbywgQ2xpcHBlclRlYW1NZW1iZXJzU2VhcmNoUmVzdWx0LCBDbGlwcGVyQ2FsZW5kYXJTZWFyY2hQYXJhbXMsIENsaXBwZXJDYWxlbmRhclNlYXJjaFJlc3VsdCwgQ2xpcHBlclNlYXJjaENhbGVuZGFyU25hcHNob3RSZXN1bHQsIENsaXBwZXJDYWxlbmRhckNvcHlEZWFkbGluZXNQYXJhbXMsIENsaXBwZXJEZWFkbGluZUluZm8sIENsaXBwZXJDYWxlbmRhclNhdmVEZWFkbGluZVBhcmFtcywgQ2xpcHBlckFyY2hpdmVGb2xkZXJzU2VhcmNoUGFyYW1zLCBDbGlwcGVyQXJjaGl2ZUZvbGRlcnNTZWFyY2hSZXN1bHQsIENsaXBwZXJBcmNoaXZlRmlsZUluZm8sIENsaXBwZXJBcmNoaXZlRm9sZGVyc0ltcG9ydFBhcmFtcywgQ2xpcHBlckFyY2hpdmVGaWxlc1NlYXJjaFJlc3VsdCwgQ2xpcHBlckFyY2hpdmVGaWxlc0RlbGV0ZVBhcmFtcywgQ2xpcHBlckFyY2hpdmVGaWxlc0NvcHlQYXJhbXMsIENsaXBwZXJBcmNoaXZlRmlsZXNTZWFyY2hQYXJhbXMsIENsaXBwZXJNb2RlbCB9IGZyb20gJy4uL2RlZmluaXRpb25zJztcclxuaW1wb3J0IHsgQ2xpcHBlck1lc3NhZ2VzIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xyXG5cclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwcml2YXRlIGh0dHBDbGllbnQgPSBpbmplY3QoSHR0cENsaWVudCk7XHJcbiAgcHJpdmF0ZSBicm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uIHwgbnVsbDtcclxuICBwcml2YXRlIGJyb2FkY2FzdFNlcnZpY2UgPSBpbmplY3QoQnJvYWRjYXN0U2VydmljZSk7XHJcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xyXG5cclxuICBwcml2YXRlIF9zZXJ2aWNlVXJpOiBzdHJpbmcgPSAnJztcclxuICBnZXQgc2VydmljZVVyaSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VVcmk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2ZsYWdzOiBDbGlwcGVyU2VydmljZUZsYWdzID0gQ2xpcHBlclNlcnZpY2VGbGFncy5Ob25lO1xyXG4gIGdldCBmbGFncygpOiBDbGlwcGVyU2VydmljZUZsYWdzIHtcclxuICAgIHJldHVybiB0aGlzLl9mbGFncztcclxuICB9XHJcbiAgcHJpdmF0ZSBfbG9naW5JbmZvOiBDbGlwcGVyTG9naW5JbmZvIHwgbnVsbCA9IG51bGw7XHJcbiAgZ2V0IGxvZ2luSW5mbygpOiBDbGlwcGVyTG9naW5JbmZvIHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMuX2xvZ2luSW5mbykge1xyXG4gICAgICBjb25zdCBsb2dpbkluZm8gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2xpcHBlcl9sb2dpbicpO1xyXG4gICAgICBpZiAobG9naW5JbmZvKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHRoaXMuX2xvZ2luSW5mbyA9IEpTT04ucGFyc2UobG9naW5JbmZvKSBhcyBDbGlwcGVyTG9naW5JbmZvO1xyXG4gICAgICAgIH0gY2F0Y2ggeyB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9sb2dpbkluZm87XHJcbiAgfVxyXG4gIHB1YmxpYyByZWFkb25seSBsb2dnZWRJbiA9IHNpZ25hbDxib29sZWFuPihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiY2xpcHBlcl9vYXV0aF90b2tlblwiKSAhPT0gbnVsbCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGxvZ2dpbmdJbiA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNuYXBzaG90ID0gc2lnbmFsPENsaXBwZXJTZWFyY2hSZXN1bHQgfCBudWxsPihudWxsKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgc3VwcG9ydHNSUyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgcHVibGljIHJlYWRvbmx5IHJlZmVyZW5jZXNTbmFwc2hvdCA9IHNpZ25hbDxDbGlwcGVyU2VhcmNoUmVzdWx0IHwgbnVsbD4obnVsbCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGRhc2hib2FyZDogQ2xpcHBlckRhc2hib2FyZCA9IG5ldyBDbGlwcGVyRGFzaGJvYXJkKCk7XHJcbiAgcHVibGljIHJlYWRvbmx5IGJhZyA9IHNpZ25hbDxDbGlwcGVyRG9jdW1lbnRJbmZvW10+KFtdKTtcclxuICBwdWJsaWMgcmVhZG9ubHkgYmFnVG90YWw6IFNpZ25hbDxudW1iZXI+ID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYmFnKCkubGVuZ3RoO1xyXG4gIH0pO1xyXG4gIHB1YmxpYyByZWFkb25seSB2aXNpYmxlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcml2YXRlIF90ZWFtczogTmFtZVZhbHVlSXRlbTxzdHJpbmc+W10gPSBbXTtcclxuICBnZXQgdGVhbXMoKTogTmFtZVZhbHVlSXRlbTxzdHJpbmc+W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RlYW1zO1xyXG4gIH1cclxuICBwdWJsaWMgY3VycmVudFRlYW1JZCA9IHNpZ25hbDxzdHJpbmc+KFN5c3RlbVV0aWxzLmVtcHR5VVVJRCgpKTtcclxuICBwdWJsaWMgY3VycmVudFRlYW1OYW1lID0gc2lnbmFsPHN0cmluZz4oXCJQRVJTT05BTEVcIik7XHJcbiAgcHVibGljIGN1cnJlbnRUZWFtSXNQcml2YXRlOiBTaWduYWw8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VGVhbUlkKCkgIT09IFN5c3RlbVV0aWxzLmVtcHR5VVVJRCgpO1xyXG4gIH0pO1xyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLmJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHNlcnZpY2VcclxuICAgKiBAcGFyYW0gc2VydmljZVVyaSA6IHRoZSBzZXJ2aWNlIHVyaVxyXG4gICAqIEBwYXJhbSBmbGFnczogdGhlIHNlcnZpY2UgZmxhZ3MuIERlZmF1bHQgaXMgbm9uZS5cclxuICAgKi9cclxuICBpbml0aWFsaXplKFxyXG4gICAgc2VydmljZVVyaTogc3RyaW5nLFxyXG4gICAgZmxhZ3M6IENsaXBwZXJTZXJ2aWNlRmxhZ3MgPSBDbGlwcGVyU2VydmljZUZsYWdzLk5vbmUpIHtcclxuXHJcbiAgICAvLyBDcmVhdGUgdW5pcXVlIGNsaWVudCBpZFxyXG4gICAgaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2xpcHBlcl9jbGllbnRfaWQnKSkge1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2xpcHBlcl9jbGllbnRfaWQnLCBTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGl6ZVxyXG4gICAgdGhpcy5fc2VydmljZVVyaSA9IHNlcnZpY2VVcmk7XHJcbiAgICB0aGlzLl9mbGFncyA9IGZsYWdzO1xyXG5cclxuICAgIC8vIFJlYWN0IHRvIG1lc3NhZ2UgYnJvYWRjYXN0aW5nXHJcbiAgICBpZiAoIXRoaXMuYnJvYWRjYXN0U2VydmljZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2VTdWJzY3JpcHRpb24gPSB0aGlzLmJyb2FkY2FzdFNlcnZpY2UuZ2V0TWVzc2FnZSgpLnN1YnNjcmliZSgobWVzc2FnZTogQnJvYWRjYXN0TWVzc2FnZUluZm8pID0+IHtcclxuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gQ2xpcHBlck1lc3NhZ2VzLkxPR0lOX0NIQU5HRUQpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2luKFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2UuZGF0YS5lbWFpbCxcclxuICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEucGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgICBtZXNzYWdlLmRhdGEub2F1dGgsXHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5kYXRhLm9hdXRoQWNjZXNzVG9rZW4pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiByID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCFyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlLCBudWxsLCBcIkVycm9yZSBkaSBDbGlwcGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZmxhZ3MgJiBDbGlwcGVyU2VydmljZUZsYWdzLkRpc3BsYXlDb25uZWN0aW9uU3RhdGVNZXNzYWdlcykgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ0Nvbm5lc3NvIGEgQ2xpcHBlcicsIDE1MDAsICdwb3dlcicpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIGJhZ1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEJhZygpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHsgY29uc29sZS5lcnJvcihcIkNsaXBwZXIgbm9uIGRpc3BvbmliaWxlLlwiKSB9IC8vIEF2b2lkIHVud2FudGVkIGVycm9ycyBvbiBjbGllbnRcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLmlkID09PSBDbGlwcGVyTWVzc2FnZXMuTE9HT1VUKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5sb2dnZWRJbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nb3V0KCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihcIjxwPlwiICsgci5tZXNzYWdlICsgXCI8L3A+PGJyPjxicj48aHI+PHAgY2xhc3M9J3NtYWxsJz48aT5QZXIgZWxpbWluYXJlIGxhIGNvbmZpZ3VyYXppb25lIGRpIENsaXBwZXIgYWNjZWRlcmUgYTo8YnI+PGI+bWVudSA+IHBlcnNvbmFsaXp6YSA+IGNvbGxlZ2FtZW50aTwvYj48L2k+PC9wPlwiLCBudWxsLCBcIkVycm9yZSBkaSBDbGlwcGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMuZmxhZ3MgJiBDbGlwcGVyU2VydmljZUZsYWdzLkRpc3BsYXlDb25uZWN0aW9uU3RhdGVNZXNzYWdlcykgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnRGlzY29ubmVzc28gZGEgQ2xpcHBlcicsIDE1MDAsICdwb3dlcl9vZmYnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIEVtcHR5IGJhZ1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWcuc2V0KFtdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXZlbHVhdGUgY3VycmVudCBzZXNzaW9uIHN0b3JhZ2UgaW4gY2FzZSBvZiBwYWdlIHJlZnJlc2ggKEY1KVxyXG4gICAgaWYgKCF0aGlzLmxvZ2dlZEluKCkgJiYgdGhpcy5nZXRUb2tlbigpKSB7XHJcbiAgICAgIC8vIEF1dG8gbG9naW5cclxuICAgICAgdGhpcy5sb2dnZWRJbi5zZXQodHJ1ZSk7XHJcbiAgICAgIC8vIE5vdGlmeVxyXG4gICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkxPR0lOX0NPTVBMRVRFRCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogU2V0IEpXVCB0b2tlbnNcclxuICogQHBhcmFtIHZhbHVlIDogdGhlIGxvZ2luIHJlc3VsdFxyXG4gKi9cclxuICBwcml2YXRlIHNldFRva2VuKHZhbHVlOiBDbGlwcGVyTG9naW5SZXN1bHQpIHtcclxuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ2NsaXBwZXJfand0JywgdmFsdWUudG9rZW4pO1xyXG4gICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnY2xpcHBlcl9qd3RfcmVmcmVzaCcsIHZhbHVlLnJlZnJlc2hUb2tlbiA/PyAnJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gY3VycmVudCBKV1QgdG9rZW5cclxuICAgKiBAcGFyYW0gcmVmcmVzaDogdHJ1ZSB0byBnZXQgdGhlIHJlZnJlc2ggdG9rZW4uIERlZmF1bHQgaXMgZmFsc2UuXHJcbiAgICovXHJcbiAgZ2V0VG9rZW4ocmVmcmVzaDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgIGxldCB0b2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0ocmVmcmVzaCA/ICdjbGlwcGVyX2p3dF9yZWZyZXNoJyA6ICdjbGlwcGVyX2p3dCcpO1xyXG4gICAgaWYgKHRva2VuICYmIHRva2VuWzBdID09PSAnXCInKSB7XHJcbiAgICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9rZW4gPz8gJyc7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogU3RvcmUgbG9naW4gaW5mb1xyXG4gICAqL1xyXG4gIHN0b3JlTG9naW4oKSB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2xpcHBlcl9sb2dpbicsIEpTT04uc3RyaW5naWZ5KHRoaXMuX2xvZ2luSW5mbykpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFBlcmZvcm0gYXV0byBsb2dpbiB1c2luZyBjdXJyZW50IGxpbmsgZGF0YVxyXG4gICAqIEBwYXJhbSBlbWFpbDogdGhlIG9wdGlvbmFsIGVtYWlsIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJtYSBwYXNzd29yZDogdGhlIG9wdGlvbmFsIHBhc3N3b3JkIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJhbSByZW1lbWJlcjogcmVtZW1iZXIgY3JlZGVudGlhbHMgXHJcbiAgICogQHBhcmFtIG9hdXRoOiB0aGUgb3B0aW9uYWwgb3BlbiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0ZWRcclxuICAgKiBAcGFyYW0gb2F1dGhBY2Nlc3NUb2tlbjogdGhlIG9wdGlvbmFsIE9BdXRoMiBhY2Nlc3MgdG9rZW5cclxuICogQHBhcmFtIG9uU3VjY2VzOiBmdW5jdGlvbiB0byBleGVjdXRlIG9uIHNlY2Nlc3NcclxuICovXHJcbiAgYXV0b0xvZ2luKFxyXG4gICAgZW1haWw6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgcGFzc3dvcmQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgcmVtZW1iZXI6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkID0gZmFsc2UsXHJcbiAgICBvYXV0aDogTG9naW5PQXV0aFR5cGUgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIG9hdXRoQWNjZXNzVG9rZW46IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwiY2xpcHBlcl9vYXV0aF90b2tlblwiKSxcclxuICAgIG9uU3VjY2VzOiBGdW5jdGlvbiB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLmxvZ2luKGVtYWlsLCBwYXNzd29yZCwgcmVtZW1iZXIsIG9hdXRoLCBvYXV0aEFjY2Vzc1Rva2VuKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiByID0+IHtcclxuICAgICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UsIG51bGwsIFwiRXJyb3JlIGluIENsaXBwZXJcIik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ0Nvbm5lc3NvIGEgQ2xpcHBlcicsIDE1MDAsICdwb3dlcicpO1xyXG4gICAgICAgICAgICBpZiAob25TdWNjZXMpIHtcclxuICAgICAgICAgICAgICBvblN1Y2NlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4geyB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3IoXCJDbGlwcGVyIG5vbiBkaXNwb25pYmlsZS5cIikgfVxyXG4gICAgICB9KVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtIGF1dG8gbG9nb3V0XHJcbiAgICogQHBhcmFtIG9uU3VjY2VzOiBmdW5jdGlvbiB0byBleGVjdXRlIG9uIHNlY2Nlc3NcclxuICAgKi9cclxuICBhdXRvTG9nb3V0KFxyXG4gICAgb25TdWNjZXM6IEZ1bmN0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwpIHtcclxuICAgIGlmICghdGhpcy5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICB0aGlzLmxvZ291dCgpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IHIgPT4ge1xyXG4gICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlLCBudWxsLCBcIkVycm9yZSBpbiBDbGlwcGVyXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ0Rpc2Nvbm5lc3NvIGRhIENsaXBwZXInLCAxNTAwLCAncG93ZXJfb2ZmJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xlYXIoKVxyXG4gICAgICAgIGlmIChvblN1Y2Nlcykge1xyXG4gICAgICAgICAgb25TdWNjZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybSBsb2dpbiAgIFxyXG4gICAqIEBwYXJhbSBlbWFpbDogdGhlIG9wdGlvYW5sIGVtYWlsIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJtYSBwYXNzd29yZDogdGhlIG9wdGlvbmFsIHBhc3N3b3JkIGlmIHVzaW5nIE9BdXRoMlxyXG4gICAqIEBwYXJhbSByZW1lbWJlcjogcmVtZW1iZXIgY3JlZGVudGlhbHMgXHJcbiAgICogQHBhcmFtIG9hdXRoOiB0aGUgb3B0aW9uYWwgb3BlbiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0ZWRcclxuICAgKiBAcGFyYW0gb2F1dGhBY2Nlc3NUb2tlbjogdGhlIG9wdGlvbmFsIE9BdXRoMiBhY2Nlc3MgdG9rZW5cclxuICAgKiBAcmV0dXJuczogdGhlIGxvZ2luIHJlc3VsdFxyXG4gICAqL1xyXG4gIGxvZ2luKGVtYWlsOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHBhc3N3b3JkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgIHJlbWVtYmVyOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCA9IGZhbHNlLFxyXG4gICAgb2F1dGg6IExvZ2luT0F1dGhUeXBlIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICBvYXV0aEFjY2Vzc1Rva2VuOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcImNsaXBwZXJfb2F1dGhfdG9rZW5cIikpIHtcclxuICAgIHRoaXMubG9nZ2luZ0luLnNldCh0cnVlKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJMb2dpblJlc3VsdD4+KFxyXG4gICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2xvZ2luMicsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdXNlcjogb2F1dGggPyBudWxsIDogZW1haWwsXHJcbiAgICAgICAgICBwYXNzd29yZDogb2F1dGggPyBudWxsIDogcGFzc3dvcmQsXHJcbiAgICAgICAgICBjbGllbnRJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjbGlwcGVyX2NsaWVudF9pZFwiKSxcclxuICAgICAgICAgIE9BVVRIOiBvYXV0aFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaGVhZGVyczpcclxuICAgICAgICAgICAgIW9hdXRoIHx8ICFvYXV0aEFjY2Vzc1Rva2VuXHJcbiAgICAgICAgICAgICAgPyBuZXcgSHR0cEhlYWRlcnMoKVxyXG4gICAgICAgICAgICAgIDogbmV3IEh0dHBIZWFkZXJzKClcclxuICAgICAgICAgICAgICAgIC5zZXQoXCJBdXRob3JpemF0aW9uXCIsIG9hdXRoQWNjZXNzVG9rZW4pXHJcbiAgICAgICAgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2dnaW5nSW4uc2V0KGZhbHNlKTtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdjbGlwcGVyX2xvZ2luJyk7XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIG1hcCgocjogQXBpUmVzdWx0PENsaXBwZXJMb2dpblJlc3VsdD4pID0+IHtcclxuICAgICAgICAgIHRoaXMubG9nZ2luZ0luLnNldChmYWxzZSk7XHJcbiAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIC8vIFN0b3JlIGFjY2VzcyB0b2tlblxyXG4gICAgICAgICAgICB0aGlzLnNldFRva2VuKHIudmFsdWUpO1xyXG4gICAgICAgICAgICBjb25zdCBsb2dpbkluZm86IENsaXBwZXJMb2dpbkluZm8gPSB7XHJcbiAgICAgICAgICAgICAgY29udGV4dDogci52YWx1ZS5jb250ZXh0LFxyXG4gICAgICAgICAgICAgIHVzZXJTZXR0aW5nczogci52YWx1ZS5zZXR0aW5ncyxcclxuICAgICAgICAgICAgICBPQVVUSDogb2F1dGhcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW9hdXRoKSB7XHJcbiAgICAgICAgICAgICAgbG9naW5JbmZvLnVzZXJDcmVkZW50aWFscyA9XHJcbiAgICAgICAgICAgICAgICBTeXN0ZW1VdGlscy5jaXBoZXIoXHJcbiAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICBlbWFpbDogZW1haWwsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbWVtYmVyOiByZW1lbWJlcixcclxuICAgICAgICAgICAgICAgICAgfSksIGxvZ2luSW5mby5jb250ZXh0LnVzZXJJZC50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgaW5mbyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLl9sb2dpbkluZm8gPSBsb2dpbkluZm87XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVMb2dpbigpO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlZEluLnNldCh0cnVlKTtcclxuICAgICAgICAgICAgLy8gTm90aWZ5XHJcbiAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuTE9HSU5fQ09NUExFVEVEKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtIGxvZ291dFxyXG4gICAqL1xyXG4gIGxvZ291dCgpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxhbnk+KHRoaXMuX3NlcnZpY2VVcmkgKyAnL2xvZ291dCcsIHt9KS5waXBlKFxyXG4gICAgICBtYXAociA9PiB7XHJcbiAgICAgICAgdGhpcy5jbGVhcih0cnVlKTtcclxuICAgICAgICByZXR1cm4gclxyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoX2UpID0+IHtcclxuICAgICAgICB0aGlzLmNsZWFyKHRydWUpO1xyXG4gICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogUmVzZXQgbG9naW4gcmVmcmVzaCB0aW1lciBhbmQgbG9naW4gc3RhdGVcclxuICAqL1xyXG4gIHJlc2V0KCkge1xyXG4gICAgLy8gQ2xlYXIgbG9naW4gaW5mb1xyXG4gICAgdGhpcy5fbG9naW5JbmZvID0gbnVsbDtcclxuICAgIC8vIExvZ2dlZCBvdXRcclxuICAgIHRoaXMubG9nZ2VkSW4uc2V0KGZhbHNlKTtcclxuICAgIC8vIE5vdGlmeVxyXG4gICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5MT0dPVVRfQ09NUExFVEVEKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGxvZ2luIGRhdGFcclxuICAgKiBAcGFyYW0gY2xlYXJPQXV0aFRva2VuOiB0cnVlIHRvIGNsZWFyIG9hdXRoIHRva2VuIGFsc29cclxuICAgKi9cclxuICBjbGVhcihjbGVhck9BdXRoVG9rZW46IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgLy8gQ2xlYXIgbG9jYWwgc3RvcmFnZVxyXG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9qd3QnKTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBwZXJfand0X3JlZnJlc2gnKTtcclxuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBwZXJfb2F1dGgnKTtcclxuICAgIGlmIChjbGVhck9BdXRoVG9rZW4pIHtcclxuICAgICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSgnY2xpcHBlcl9vYXV0aF90b2tlbicpO1xyXG4gICAgfVxyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NsaXBwZXJfbG9naW4nKTtcclxuXHJcbiAgICAvLyBSZXNldCBsb2dpblxyXG4gICAgdGhpcy5yZXNldCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICogUGVyZm9ybSB0b2tlbiByZWZyZXNoXHJcbiAgKi9cclxuICByZWZyZXNoKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJMb2dpblJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9yZWZyZXNoMi8/dG9rZW49JyArIHRoaXMuZ2V0VG9rZW4odHJ1ZSlcclxuICAgICkucGlwZShtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyTG9naW5SZXN1bHQ+KSA9PiB7XHJcbiAgICAgIC8vIFVwZGF0ZSB0b2tlblxyXG4gICAgICB0aGlzLnNldFRva2VuKHIudmFsdWUpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBHZXQgYSBuZXcgb25lIHRpbWUgcGFzc3dvcmRcclxuICAqIEBwYXJhbSBpZDogdGhlIG9wdGlvbmFsIHJlcG9zaXRvcnkgaWQgXHJcbiAgKi9cclxuICBuZXdPVFAoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJPVFBJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL290cC9uZXcvP2lkPScgKyBpZCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMb2FkIEFycyBldmVudHMgY2FsZW5kYXJcclxuICAgKi9cclxuICBldmVudHMocGFyYW1zOiBDbGlwcGVyU2VhcmNoQXJzRXZlbnRzUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hBcnNFdmVudHNSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJzL2V2ZW50cycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBRdWVyeSBkb2N1bWVudHNcclxuICAgKi9cclxuICBxdWVyeShwYXJhbXM6IENsaXBwZXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZmFjZXRzIGZvciBhIHF1ZXJ5XHJcbiAgICovXHJcbiAgcXVlcnlGYWNldHMocGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2ZhY2V0cycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAqIFVwZGF0ZSBkb2N1bWVudCBzdGF0ZVxyXG4gICovXHJcbiAgdXBkYXRlU3RhdGUocGFyYW1zOiBDbGlwcGVyRG9jdW1lbnRVcGRhdGVTdGF0ZVBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3N0YXRlL3VwZGF0ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCBhIGRvY3VtZW50IGluIHBkZiBmb3JtYXRcclxuICAgKi9cclxuICBleHBvcnRQZGYoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9leHBvcnQvJyArIGlkLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBFeHBvcnQgZG9jdW1lbnQgbGlzdCAocXVlcnkgb3Igc2VsZWN0ZWQgaXRlbXMpIG9yIGV4cG9ydCBkZWFkbGluZXMgYXMgaWNzXHJcbiAqL1xyXG4gIGV4cG9ydChwYXJhbXM6IENsaXBwZXJFeHBvcnREb2N1bWVudHNQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2V4cG9ydCcsXHJcbiAgICAgIHBhcmFtcyxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZCBkb2N1bWVudHMgbGluayBieSBlbWFpbFxyXG4gICAqL1xyXG4gIHNlbmRUbyhwYXJhbXM6IENsaXBwZXJTZW5kRG9jdW1lbnRzQnlFbWFpbFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3NlbmQnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5IGEgcGFnZSB0aGUgZnVsbCBkb2N1bWVudCByZXBvcnRcclxuICAgKi9cclxuICByZXBvcnQoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9yZXBvcnQvJyArIGlkLFxyXG4gICAgICB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQgY29tbWVudFxyXG4gICAqL1xyXG4gIGNvbW1lbnQoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PHN0cmluZz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvY29tbWVudC8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQgaW5mb1xyXG4gICAqL1xyXG4gIGluZm8oaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJEb2N1bWVudEluZm8+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2luZm8vJyArIGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRvY3VtZW50IHN0cnVjdHVyZVxyXG4gICAqL1xyXG4gIGluZGV4KGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyRG9jdW1lbnRTdHJ1Y3R1cmU+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3N0cnVjdHVyZS8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZG9jdW1lbnQgbGFzdCB1cGRhdGVcclxuICAgKi9cclxuICBsYXN0VXBkYXRlKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxzdHJpbmc+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2xhc3QtdXBkYXRlLycgKyBpZFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFF1ZXJ5IGRvY3VtZW50IHJlZmVyZW5jZXNcclxuICAgKi9cclxuICByZWZlcmVuY2VzKHBhcmFtczogQ2xpcHBlclJlZmVyZW5jZXNTZWFyY2hQYXJhbXMpIHtcclxuICAgIGxldCBtb2RlID0gcGFyYW1zLm1vZGU7XHJcbiAgICBpZiAoIW1vZGUpIG1vZGUgPSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW47XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW46XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc091dDpcclxuICAgICAgICBwYXJhbXMubW9kZSA9IG1vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvcmVmZXJlbmNlcycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkNoYW5nZXNJbjpcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaFJlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NoYW5nZXMnLFxyXG4gICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgKTtcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5KdXJpczpcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9qdXJpcycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZhY2V0cyBmb3IgYSBkb2N1bWVudCByZWZlcmVuY2VzXHJcbiAgICovXHJcbiAgcmVmZXJlbmNlc0ZhY2V0cyhwYXJhbXM6IENsaXBwZXJSZWZlcmVuY2VzU2VhcmNoUGFyYW1zKSB7XHJcbiAgICBsZXQgbW9kZSA9IHBhcmFtcy5tb2RlID8/IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbjtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbjpcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzT3V0OlxyXG4gICAgICAgIHBhcmFtcy5tb2RlID0gbW9kZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hGYWNldHNSZXN1bHQ+PihcclxuICAgICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9yZWZlcmVuY2VzL2ZhY2V0cycsXHJcbiAgICAgICAgICBwYXJhbXNcclxuICAgICAgICApO1xyXG4gICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLkNoYW5nZXNJbjpcclxuICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0OlxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclNlYXJjaEZhY2V0c1Jlc3VsdD4+KFxyXG4gICAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2NoYW5nZXMvZmFjZXRzJyxcclxuICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICk7XHJcbiAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuSnVyaXM6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoRmFjZXRzUmVzdWx0Pj4oXHJcbiAgICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvanVyaXMvZmFjZXRzJyxcclxuICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICk7XHJcbiAgICAgIGRlZmF1bHQ6IHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV3JhcCBkb2N1bWVudCByZW5kZXJpbmcgdG8gYWxsb3cgdG9rZW4gcmVmcmVzaFxyXG4gICAqL1xyXG4gIHByZVJlbmRlcigpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxib29sZWFuPj4odGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3ByZS1yZW5kZXInKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBkb2N1bWVudCBqdXJpcyBhcnRpY2xlc1xyXG4gICAqL1xyXG4gIGp1cmlzQXJ0aWNsZXMocGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvZG9jdW1lbnRzL2p1cmlzL2FydGljbGVzJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBHZXQgZGVhZGxpbmVzIHNuYXBzaG90IGJhc2VkIG9uIHRoZSBkZWFkbGluZXNcclxuICAqL1xyXG4gIGRlYWRsaW5lc1NuYXBzaG90KHBhcmFtczogQ2xpcHBlckNhbGVuZGFyU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJTZWFyY2hDYWxlbmRhclNuYXBzaG90UmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9jYWxlbmRhci9zbmFwc2hvdCcsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSB0aGUgdGF4b25vbXlcclxuICAgKi9cclxuICBnZXRUYXhvbm9teShwYXJhbXM6IENsaXBwZXJUYXhvbm9teVBhcmFtcyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PEZvbGRlclRyZWU+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvdGF4b25vbXknLFxyXG4gICAgICBwYXJhbXMgPz8geyBtb2RlbDogMCwgY291bnRJdGVtczogZmFsc2UgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRvcGljc1xyXG4gICAqL1xyXG4gIGdldFRvcGljcygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxOYW1lVmFsdWVJdGVtPHN0cmluZz5bXT4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy90b3BpY3MnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBSZXRyaWV2ZSB0b3BpY3MgYXMgdHJlZVxyXG4gICovXHJcbiAgZ2V0VG9waWNzQXNUcmVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBpUmVzdWx0PEZvbGRlclRyZWU+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvdG9waWNzMidcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSB0YWdzXHJcbiAgICovXHJcbiAgZ2V0VGFncygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxOYW1lVmFsdWVJdGVtPHN0cmluZz5bXT4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy90YWdzJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvLy9cclxuICAvLyBEQVNIQk9BUkRcclxuICAvLy9cclxuICAvKipcclxuICAqIFJldHJpZXZlIGN1cnJlbnQgZGFzaGJvYXJkXHJcbiAgKi9cclxuICBsb2FkRGFzaGJvYXJkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckRhc2hib2FyZFJlc3VsdD4+KFxyXG4gICAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvZGFzaGJvYXJkJyxcclxuICAgICAgICB7IHJlZnJlc2hpbmc6IHRydWUgfVxyXG4gICAgICApLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PENsaXBwZXJEYXNoYm9hcmRSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQuZG9jdW1lbnRVcGRhdGVzID0gci52YWx1ZS5kb2N1bWVudFVwZGF0ZXM7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZC5leHBpcmVkRGVhZGxpbmVzID0gci52YWx1ZS5leHBpcmVkRGVhZGxpbmVzO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQuZXhwaXJpbmdEZWFkbGluZXMgPSByLnZhbHVlLmV4cGlyaW5nRGVhZGxpbmVzO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmQuaXNUcmlhbCA9IHIudmFsdWUuaXNUcmlhbDtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkLml0ZW1zLnNldChyLnZhbHVlLml0ZW1zID8/IFtdKTtcclxuICAgICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9EQVNIQk9BUkRfVVBEQVRFRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogVXBkYXRlIHVucmVhZCBpdGVtc1xyXG4gICogQHBhcmFtIG1vZHVsZSA6IHRoZSBtb2R1bGVcclxuICAqIEBwYXJhbSBtb2RlbCA6IHRoZSBvcHRpb25hbCBtb2RlbFxyXG4gICogQHBhcmFtIGluY3JlbWVudCA6IHRoZSBpbmNyZW1lbnQgKGNhbiBiZSBuZWdhdGl2ZSlcclxuICAqL1xyXG4gIHVwZGF0ZVVucmVhZEl0ZW1zKG1vZHVsZTogQ2xpcHBlck1vZHVsZSwgbW9kZWw6IENsaXBwZXJNb2RlbCB8IG51bGwsIGluY3JlbWVudDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmRhc2hib2FyZC51cGRhdGVVbnJlYWRJdGVtcyhtb2R1bGUsIG1vZGVsLCBpbmNyZW1lbnQpO1xyXG4gICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5DT01NQU5EX0RBU0hCT0FSRF9VUERBVEVEKTtcclxuICB9XHJcblxyXG4gIC8vL1xyXG4gIC8vIExJTktTXHJcbiAgLy8vXHJcblxyXG4gIC8qKlxyXG4gICogU2F2ZSBhIHVzZXIgbGlua1xyXG4gICogQHBhcmFtIGl0ZW06IHRoZSB1c2VyIGxpbmtcclxuICAqL1xyXG4gIHNhdmVMaW5rKGl0ZW06IENsaXBwZXJVc2VyTGluaykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxib29sZWFuPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvbGlua3Mvc2F2ZScsXHJcbiAgICAgIGl0ZW1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgYSB1c2VyIGxpbmtcclxuICAgKiBAcGFyYW0gaXRlbTogdGhlIHVzZXIgbGlua1xyXG4gICAqL1xyXG4gIGRlbGV0ZUxpbmsoaXRlbTogQ2xpcHBlclVzZXJMaW5rKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PGJvb2xlYW4+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9saW5rcy9kZWxldGUnLFxyXG4gICAgICBpdGVtXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vL1xyXG4gIC8vIEJBRyAtIFdPUktJTkcgRE9DVU1FTlRTXHJcbiAgLy8vXHJcblxyXG4gIC8qKlxyXG4gICAqIExvYWQgd29ya2luZyBkb2N1bWVudHNcclxuICAgKi9cclxuICBsb2FkQmFnKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyVXNlcldvcmtpbmdEb2N1bWVudFtdPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvd29ya2luZydcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChyOiBBcGlSZXN1bHQ8Q2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXT4pID0+IHtcclxuICAgICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHIudmFsdWUpIHtcclxuICAgICAgICAgICAgICBjb25zdCBpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdID0gW107XHJcbiAgICAgICAgICAgICAgci52YWx1ZS5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKG4uZG9jdW1lbnREZXNjcmlwdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50SW5mbyA9IEpTT04ucGFyc2Uobi5kb2N1bWVudERlc2NyaXB0b3IpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5kb2N1bWVudElkID0gZG9jdW1lbnRJbmZvLkRvY3VtZW50SWQgfHwgZG9jdW1lbnRJbmZvLklkO1xyXG4gICAgICAgICAgICAgICAgICAgIG4udGl0bGUxID0gZG9jdW1lbnRJbmZvLlRpdGxlMSA/PyBkb2N1bWVudEluZm8uVGl0bGUyO1xyXG4gICAgICAgICAgICAgICAgICAgIG4udGl0bGUyID0gZG9jdW1lbnRJbmZvLlRpdGxlMSA/IGRvY3VtZW50SW5mby5UaXRsZTIgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIG4uZG9jdW1lbnREZXNjcmlwdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaChuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB0aGlzLmJhZy5zZXQoaXRlbXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGQgb25lIG9yIG1vcmUgd29ya2luZyBkb2N1bWVudFxyXG4gICAqIEBwYXJhbSBkb2N1bWVudElkcyA6IHRoZSBkb2N1bWVudCBpZHMgdG8gYWRkXHJcbiAgICovXHJcbiAgYWRkVG9CYWcoZG9jdW1lbnRJZHM6IHN0cmluZ1tdKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyVXNlcldvcmtpbmdEb2N1bWVudFtdPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvd29ya2luZy9hZGQnLFxyXG4gICAgICAgIHsgZG9jdW1lbnRJZHM6IGRvY3VtZW50SWRzIH1cclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChyOiBBcGlSZXN1bHQ8Q2xpcHBlclVzZXJXb3JraW5nRG9jdW1lbnRbXT4pID0+IHtcclxuICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10gPSBbXTtcclxuICAgICAgICAgICAgci52YWx1ZS5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChuLmRvY3VtZW50RGVzY3JpcHRvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRJbmZvID0gSlNPTi5wYXJzZShuLmRvY3VtZW50RGVzY3JpcHRvcik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgIG4uZG9jdW1lbnRJZCA9IGRvY3VtZW50SW5mby5Eb2N1bWVudElkIHx8IGRvY3VtZW50SW5mby5JZDtcclxuICAgICAgICAgICAgICAgICAgbi50aXRsZTEgPSBkb2N1bWVudEluZm8uVGl0bGUxID8/IGRvY3VtZW50SW5mby5UaXRsZTI7XHJcbiAgICAgICAgICAgICAgICAgIG4udGl0bGUyID0gZG9jdW1lbnRJbmZvLlRpdGxlMSA/IGRvY3VtZW50SW5mby5UaXRsZTIgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbi5kb2N1bWVudERlc2NyaXB0b3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgbmV3SXRlbXMucHVzaChuKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYmFnLnVwZGF0ZSgodmFsdWVzOiBhbnkpID0+IFsuLi52YWx1ZXMsIC4uLm5ld0l0ZW1zXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdPcGVyYXppb25lIGNvbXBsZXRhdGEgY29uIHN1Y2Nlc3NvLicpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmUgb25lIHdvcmtpbmcgZG9jdW1lbnRcclxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAqL1xyXG4gIHJlbW92ZUZyb21CYWcoZG9jdW1lbnRJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy93b3JraW5nL2RlbGV0ZScsXHJcbiAgICAgICAgeyBkb2N1bWVudElkczogW2RvY3VtZW50SWRdIH1cclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChyOiBBcGlSZXN1bHQ8bnVtYmVyPikgPT4ge1xyXG4gICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcCA9IHRoaXMuYmFnKCkuZmluZEluZGV4KChuOiBhbnkpID0+IG4uZG9jdW1lbnRJZCA9PT0gZG9jdW1lbnRJZCk7XHJcbiAgICAgICAgICBpZiAocCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5iYWcudXBkYXRlKCh2YWx1ZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHZhbHVlcy5zcGxpY2UocCwgMSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIFsuLi52YWx1ZXNdO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KCdPcGVyYXppb25lIGNvbXBsZXRhdGEgY29uIHN1Y2Nlc3NvLicpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBhbGwgd29ya2luZyBkb2N1bWVudHNcclxuICAgKi9cclxuICBjbGVhckJhZygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcclxuICAgICAgLnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3dvcmtpbmcvZGVsZXRlJyxcclxuICAgICAgICB7IGRlbGV0ZUFsbDogdHJ1ZSB9XHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PG51bWJlcj4pID0+IHtcclxuICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYmFnLnNldChbXSk7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ09wZXJhemlvbmUgY29tcGxldGF0YSBjb24gc3VjY2Vzc28uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vL1xyXG4gIC8vIFdPUktJTkcgU0VBUkNIRVNcclxuICAvLy9cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCB3b3JraW5nIHNlYXJjaGVzXHJcbiAgICogQHBhcmFtOiBtb2R1bGU6IHRoZSBtb2R1bGUgdG8gbG9hZCBzZWFyY2hlcyBmb3JcclxuICAgKi9cclxuICBsb2FkU2VhcmNoZXMobW9kdWxlOiBDbGlwcGVyTW9kdWxlKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5nZXQ8QXBpUmVzdWx0PENsaXBwZXJVc2VyU2VhcmNoW10+PihcclxuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgKyAnL2RvY3VtZW50cy9zZWFyY2hlcy8/bW9kdWxlPScgKyBtb2R1bGVcclxuICAgICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBhIHdvcmtpbmcgc2VhcmNoXHJcbiAgICogQHBhcmFtIHBhcmFtcyA6IHRoZSBjbGlwcGVyIHVzZXIgc2VhcmNoXHJcbiAgICovXHJcbiAgc2F2ZVNlYXJjaChwYXJhbXM6IENsaXBwZXJVc2VyU2VhcmNoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XHJcbiAgICAgIC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyVXNlclNlYXJjaD4+KFxyXG4gICAgICAgIHRoaXMuc2VydmljZVVyaSArICcvZG9jdW1lbnRzL3NlYXJjaGVzL3NhdmUnLFxyXG4gICAgICAgIHBhcmFtc1xyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlIG9uZSB3b3JraW5nIHNlYXJjaFxyXG4gICAqIEBwYXJhbSBpZCA6IHRoZSBpZCB0byByZW1vdmVcclxuICAgKi9cclxuICBkZWxldGVTZWFyY2goaWQ6IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlVXJpICsgJy9kb2N1bWVudHMvc2VhcmNoZXMvZGVsZXRlJyxcclxuICAgICAgICB7IGlkOiBpZCB9XHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvLy9cclxuICAvLyBVU0VSIFNFVFRJTkdTIEFORCBUUklBTFxyXG4gIC8vL1xyXG5cclxuICAvKipcclxuICAqIFJlc2V0IGEgdXNlciBwYXNzd29yZFxyXG4gICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgKi9cclxuICByZXNldFBhc3N3b3JkKHBhcmFtczogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PFJlc2V0UGFzc3dvcmREaWFsb2dSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC9wYXNzd29yZC9yZXNldCcsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlY292ZXIgcGFzc3dvcmRcclxuICAgKiBAcGFyYW0gcGFyYW1zIHBhcmFtZXRlcnNcclxuICAgKi9cclxuICByZWNvdmVyUGFzc3dvcmQocGFyYW1zOiBSZWNvdmVyUGFzc3dvcmREaWFsb2dEYXRhKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PFJlY292ZXJQYXNzd29yZERpYWxvZ1Jlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3Bhc3N3b3JkL3JlY292ZXInLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHNldHRpbmdzIFxyXG4gICAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgdXBkYXRlU2V0dGluZ3MocGFyYW1zOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Ym9vbGVhbj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3NldHRpbmdzL3VwZGF0ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBjaGFubmVsIHN0YXRlXHJcbiAgICogQHBhcmFtIGlkOiB0aGUgY2hhbm5lbCBpZCAoMSwgMiwgMywgNClcclxuICAgKi9cclxuICB1cGRhdGVDaGFubmVsU3RhdGUoaWQ6IG51bWJlciwgZW5hYmxlZDogYm9vbGVhbikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyRGFzaGJvYXJkUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvc2V0dGluZ3MvY2hhbm5lbHMvdXBkYXRlJyxcclxuICAgICAge1xyXG4gICAgICAgIGNoYW5uZWxJZDogaWQsXHJcbiAgICAgICAgaXNFbmFibGVkOiBlbmFibGVkLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRyaWFsIGluZm9cclxuICAgKi9cclxuICBwcml2YXRlIGdldFRyaWFsSW5mbygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyVXNlclRyaWFsSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3RyaWFsJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSB0cmlhbCBpbmZvXHJcbiAgICovXHJcbiAgdXBkYXRlVHJpYWxJbmZvKCkge1xyXG4gICAgaWYgKCF0aGlzLl9sb2dpbkluZm8gfHwgdGhpcy5fbG9naW5JbmZvPy5jb250ZXh0Lmhhc1RyaWFsID09PSBmYWxzZSlcclxuICAgICAgcmV0dXJuOyAvLyBOb3Qgc3VwcG9ydGVkXHJcbiAgICB0aGlzLmdldFRyaWFsSW5mbygpLnN1YnNjcmliZSgocjogQXBpUmVzdWx0PENsaXBwZXJVc2VyVHJpYWxJbmZvPikgPT4ge1xyXG4gICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2xvZ2luSW5mbykge1xyXG4gICAgICAgICAgaWYgKHIudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9naW5JbmZvLmNvbnRleHQuaGFzVHJpYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLl9sb2dpbkluZm8uY29udGV4dC50cmlhbEluZm8gPSByLnZhbHVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9naW5JbmZvLmNvbnRleHQuaGFzVHJpYWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5fbG9naW5JbmZvLmNvbnRleHQudHJpYWxJbmZvID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gVEVBTVNcclxuICAvLy9cclxuXHJcbiAgLyoqXHJcbiAgKiBSZW5hbWUgYSB0ZWFtXHJcbiAgKiBAcGFyYW0gbmV3TmFtZSA6IHRoZSBuZXcgbmFtZVxyXG4gICovXHJcbiAgcmVuYW1lVGVhbShuZXdOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlclRlYW1JbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvdGVhbXMvdXBkYXRlJyxcclxuICAgICAgeyB0aXRsZTogbmV3TmFtZSB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgdGVhbXNcclxuICAgKi9cclxuICBnZXRUZWFtcyhwYXJhbXM6IENsaXBwZXJUZWFtc1NlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyVGVhbXNTZWFyY2hSZXN1bHQ+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYWNjb3VudC90ZWFtcycsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyVGVhbXNTZWFyY2hSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAvLyBTdG9yZSB0ZWFtc1xyXG4gICAgICAgICAgdGhpcy5fdGVhbXMgPSByLnZhbHVlLml0ZW1zO1xyXG4gICAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIHRlYW0gbWVtYmVyc1xyXG4gICAqL1xyXG4gIGdldFRlYW1NZW1iZXJzKHBhcmFtczogQ2xpcHBlclRlYW1zU2VhcmNoUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJUZWFtTWVtYmVyc1NlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3RlYW1zL21lbWJlcnMnLFxyXG4gICAgICBwYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgbWVtYmVyc1xyXG4gICAqIEBwYXJhbSBpZHM6IHRoZSBpZCBsaXN0IHRvIGRlbGV0ZVxyXG4gICAqL1xyXG4gIGRlbGV0ZVRlYW1NZW1iZXJzKGlkczogbnVtYmVyW10pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FjY291bnQvdGVhbXMvbWVtYmVycy9kZWxldGUnLFxyXG4gICAgICB7IGlkczogaWRzIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIG1lbWJlclxyXG4gICAqIEBwYXJhbSBpdGVtOiB0aGUgaXRlbSB0byBzYXZlXHJcbiAgICovXHJcbiAgc2F2ZVRlYW1NZW1iZXIoaXRlbTogQ2xpcHBlclRlYW1NZW1iZXJJbmZvKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJUZWFtTWVtYmVySW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hY2NvdW50L3RlYW1zL21lbWJlcnMvc2F2ZScsXHJcbiAgICAgIGl0ZW1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vXHJcbiAgLy8gQ0FMRU5EQVJcclxuICAvLy9cclxuICAvKipcclxuICAgKiBRdWVyeSBjYWxlbmRhclxyXG4gICAqL1xyXG4gIHF1ZXJ5Q2FsZW5kYXIocGFyYW1zOiBDbGlwcGVyQ2FsZW5kYXJTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckNhbGVuZGFyU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2NhbGVuZGFyJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocjogQXBpUmVzdWx0PENsaXBwZXJDYWxlbmRhclNlYXJjaFJlc3VsdD4pID0+IHtcclxuICAgICAgICAgIC8vIFN0b3JlIHRlYW1zXHJcbiAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RlYW1zID0gci52YWx1ZS50ZWFtcztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiByO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGNhbGVuZGFyIHNuYXBzaG90XHJcbiAgICovXHJcbiAgY2FsZW5kYXJTbmFwc2hvdChwYXJhbXM6IENsaXBwZXJDYWxlbmRhclNlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyU2VhcmNoQ2FsZW5kYXJTbmFwc2hvdFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9zbmFwc2hvdCcsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZSBvbmUgb3IgbW9yZSBpdGVtc1xyXG4gICAqIEBwYXJhbSBpZHM6IGlkcyB0byBkZWxldGVcclxuICAgKi9cclxuICBkZWxldGVDYWxlbmRhckRlYWRsaW5lcyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9kZWxldGUnLFxyXG4gICAgICB7IGlkczogaWRzIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb3B5IG9uZSBvciBtb3JlIGl0ZW1zXHJcbiAgICogQHBhcmFtIHBhcmFtcyBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgY29weUNhbGVuZGFyRGVhZGxpbmVzKHBhcmFtczogQ2xpcHBlckNhbGVuZGFyQ29weURlYWRsaW5lc1BhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxudW1iZXI+PihcclxuICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvY2FsZW5kYXIvY29weScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGEgZGVhZGxpbmVcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgaWQgdG8gY2xvc2VcclxuICAgKi9cclxuICBjbG9zZUNhbGVuZGFyRGVhZGxpbmUoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3VsdDxDbGlwcGVyRGVhZGxpbmVJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2NhbGVuZGFyL2Nsb3NlJyxcclxuICAgICAgeyBpZDogaWQgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNhdmUgYW4gaXRlbVxyXG4gICAqIEBwYXJhbSBwYXJhbXMgcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHNhdmVDYWxlbmRhckRlYWRsaW5lKHBhcmFtczogQ2xpcHBlckNhbGVuZGFyU2F2ZURlYWRsaW5lUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PENsaXBwZXJEZWFkbGluZUluZm9bXT4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9zYXZlJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cml2ZSBhIG4gaXRlbVxyXG4gICAqIEBwYXJhbSBpZCA6IHRoZSBpdGVtIGlkXHJcbiAgICovXHJcbiAgZ2V0Q2FsZW5kYXJEZWFkbGluZShpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldDxBcGlSZXN1bHQ8Q2xpcHBlckRlYWRsaW5lSW5mbz4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci8nICsgaWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHBvcnQgdG8gaUNhbGVuZGFyIGZvcm1hdFxyXG4gICAqIEBwYXJhbSBpZHMgOiBkZWFkbGluZXMgdG8gZXhwb3J0XHJcbiAgICovXHJcbiAgZXhwb3J0Q2FsZW5kYXJEZWFkbGluZXMoaWRzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9jYWxlbmRhci9leHBvcnQnLFxyXG4gICAgICB7IGlkczogaWRzIH0sXHJcbiAgICAgIHtcclxuICAgICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8vXHJcbiAgLy8gQVJDSElWRVxyXG4gIC8vL1xyXG4gIC8qKlxyXG4gICogUmV0cmlldmUgYWxsIGZvbGRlcnNcclxuICAqIEBwYXJhbSBwYXJhbXMgOiBwYXJhbWV0ZXJzXHJcbiAgKi9cclxuICBnZXRBcmNoaXZlRm9sZGVycyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRm9sZGVyc1NlYXJjaFBhcmFtcykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxyXG4gICAgICAucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckFyY2hpdmVGb2xkZXJzU2VhcmNoUmVzdWx0Pj4oXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9mb2xkZXJzJyxcclxuICAgICAgICBwYXJhbXNcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHI6IEFwaVJlc3VsdDxDbGlwcGVyQXJjaGl2ZUZvbGRlcnNTZWFyY2hSZXN1bHQ+KSA9PiB7XHJcbiAgICAgICAgICAvLyBTdG9yZSB0ZWFtc1xyXG4gICAgICAgICAgaWYgKHIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLl90ZWFtcyA9IHIudmFsdWUudGVhbXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuXHJcbiAgICAgICAgICByZXR1cm4gcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBmb2xkZXJcclxuICAgKiBAcGFyYW0gcGFyYW1zIDogcGFyYW1ldGVyc1xyXG4gICAqL1xyXG4gIHNhdmVBcmNoaXZlRm9sZGVyKHBhcmFtczogRm9sZGVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PEZvbGRlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZvbGRlcnMvc2F2ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4cG9ydCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIGlkOiB0aGUgZm9sZGVyIGlkIG9yIG51bGwgdG8gZXhwb3J0IGFsbCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHRlYW1JZDogdGhlIG9wdGlvbmFsIHRlYW0gaWQuIERlZmF1bHQgbnVsbCAocGVyc29uYWwpXHJcbiAgICovXHJcbiAgZXhwb3J0QXJjaGl2ZUZvbGRlcnMoaWQ6IHN0cmluZyB8IG51bGwgPSBudWxsLCB0ZWFtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9leHBvcnQvPyc7XHJcbiAgICBpZiAoaWQpIHtcclxuICAgICAgdXJsICs9ICdpZD0nICsgaWQ7XHJcbiAgICB9XHJcbiAgICBpZiAodGVhbUlkKSB7XHJcbiAgICAgIGlmIChpZCkge1xyXG4gICAgICAgIHVybCArPSAnJic7XHJcbiAgICAgIH1cclxuICAgICAgdXJsICs9ICd0ZWFtPScgKyB0ZWFtSWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldChcclxuICAgICAgdXJsLFxyXG4gICAgICB7XHJcbiAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyYW0nXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEltcG9ydCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHBhcmFtcyA6IHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBpbXBvcnRBcmNoaXZlRm9sZGVycyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRm9sZGVyc0ltcG9ydFBhcmFtcykge1xyXG4gICAgLy8gUHJlcGFyZSBmb3JtXHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKHBhcmFtcy5maWxlLm5hbWUsIHBhcmFtcy5maWxlKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnc291cmNlRmlsZU5hbWUnLCBwYXJhbXMuZmlsZS5uYW1lKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnb3ZlcndyaXRlJywgcGFyYW1zLm92ZXJ3cml0ZSA9PT0gdHJ1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiKTtcclxuICAgIGlmIChwYXJhbXMuZGVzdEZvbGRlcklkKSB7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVzdEZvbGRlcklkJywgcGFyYW1zLmRlc3RGb2xkZXJJZCk7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyYW1zLnRlYW1JZCkge1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3RlYW1JZCcsIHBhcmFtcy50ZWFtSWQpO1xyXG4gICAgfVxyXG4gICAgLy8gQ3JlYXRlIHJlcXVlc3RcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdChcclxuICAgICAgbmV3IEh0dHBSZXF1ZXN0KFxyXG4gICAgICAgICdQT1NUJyxcclxuICAgICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ltcG9ydC8nLFxyXG4gICAgICAgIGZvcm1EYXRhLFxyXG4gICAgICAgIHsgcmVwb3J0UHJvZ3Jlc3M6IHRydWUgfVxyXG4gICAgICApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZpbGVzIGFuZCBmb2xkZXJzXHJcbiAgICogQHBhcmFtIHBhcmFtcyA6IHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBxdWVyeUFyY2hpdmVJdGVtcyhwYXJhbXM6IENsaXBwZXJBcmNoaXZlRmlsZXNTZWFyY2hQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8Q2xpcHBlckFyY2hpdmVGaWxlc1NlYXJjaFJlc3VsdD4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzJyxcclxuICAgICAgcGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlIGZpbGUgYW5kIGZvbGRlcnNcclxuICAgKiBAcGFyYW0gcGFyYW1zIHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBkZWxldGVBcmNoaXZlSXRlbXMocGFyYW1zOiBDbGlwcGVyQXJjaGl2ZUZpbGVzRGVsZXRlUGFyYW1zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzdWx0PG51bWJlcj4+KFxyXG4gICAgICB0aGlzLl9zZXJ2aWNlVXJpICsgJy9hcmNoaXZlL2ZpbGVzL2RlbGV0ZScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvcHkgIGZpbGUgYW5kIGZvbGRlcnMgdG8gYW5vdGhlciBmb2xkZXIgb3IgdGhlIHNhbWVcclxuICAgKiBAcGFyYW0gcGFyYW1zIHBhcmFtZXRlcnNcclxuICAgKi9cclxuICBjb3B5QXJjaGl2ZUl0ZW1zKHBhcmFtczogQ2xpcHBlckFyY2hpdmVGaWxlc0NvcHlQYXJhbXMpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXN1bHQ8bnVtYmVyPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FyY2hpdmUvZmlsZXMvY29weScsXHJcbiAgICAgIHBhcmFtc1xyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBTYXZlIGEgZmlsZVxyXG4gICAqIEBwYXJhbSBwYXJhbXMgOiBwYXJhbWV0ZXJzXHJcbiAgICovXHJcbiAgc2F2ZUFyY2hpdmVGaWxlKHBhcmFtczogQ2xpcHBlckFyY2hpdmVGaWxlSW5mbykge1xyXG4gICAgLy8gUHJlcGFyZSBmb3JtXHJcbiAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGlmIChwYXJhbXMuZmlsZSkgZm9ybURhdGEuYXBwZW5kKHBhcmFtcy5maWxlLmZpbGUubmFtZSwgcGFyYW1zLmZpbGUuZmlsZSk7XHJcbiAgICBpZiAocGFyYW1zLmlkKSBmb3JtRGF0YS5hcHBlbmQoJ2lkJywgcGFyYW1zLmlkKTtcclxuICAgIGlmIChwYXJhbXMuZm9sZGVySWQpIHtcclxuICAgICAgZm9ybURhdGEuYXBwZW5kKCdmb2xkZXJJZCcsIHBhcmFtcy5mb2xkZXJJZCk7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyYW1zLnRvcGljSWQgJiYgcGFyYW1zLnRvcGljUGF0aCkge1xyXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ3RvcGljSWQnLCBwYXJhbXMudG9waWNJZCk7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgndG9waWNQYXRoJywgcGFyYW1zLnRvcGljUGF0aCk7XHJcbiAgICB9XHJcbiAgICBpZiAocGFyYW1zLnRpdGxlMSkgZm9ybURhdGEuYXBwZW5kKCd0aXRsZTEnLCBwYXJhbXMudGl0bGUxKTtcclxuICAgIGlmIChwYXJhbXMudGl0bGUyKSBmb3JtRGF0YS5hcHBlbmQoJ3RpdGxlMicsIHBhcmFtcy50aXRsZTIpO1xyXG4gICAgaWYgKHBhcmFtcy5vcmlnaW4pIGZvcm1EYXRhLmFwcGVuZCgnb3JpZ2luJywgcGFyYW1zLm9yaWdpbik7XHJcbiAgICBpZiAocGFyYW1zLm9yaWdpbkRlc2NyaXB0aW9uKSB7XHJcbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnb3JpZ2luRGVzY3JpcHRpb24nLCBwYXJhbXMub3JpZ2luRGVzY3JpcHRpb24pO1xyXG4gICAgfVxyXG4gICAgaWYgKHBhcmFtcy5kb2N1bWVudElkKSBmb3JtRGF0YS5hcHBlbmQoJ2RvY3VtZW50SWQnLCBwYXJhbXMuZG9jdW1lbnRJZCk7XHJcbiAgICBpZiAocGFyYW1zLmRvY3VtZW50SWRzKSBmb3JtRGF0YS5hcHBlbmQoJ2RvY3VtZW50SWRzJywgcGFyYW1zLmRvY3VtZW50SWRzKTtcclxuICAgIGlmIChwYXJhbXMuYmluYXJ5SWQpIGZvcm1EYXRhLmFwcGVuZCgnYmluYXJ5SWQnLCBwYXJhbXMuYmluYXJ5SWQ/LnRvU3RyaW5nKCkpO1xyXG4gICAgaWYgKHBhcmFtcy50YWdzKSBmb3JtRGF0YS5hcHBlbmQoJ3RhZ3MnLCBwYXJhbXMudGFncyk7XHJcbiAgICBpZiAocGFyYW1zLm5vdGVzKSBmb3JtRGF0YS5hcHBlbmQoJ25vdGVzJywgcGFyYW1zLm5vdGVzKTtcclxuICAgIGlmIChwYXJhbXMuZmlsZU5hbWUpIGZvcm1EYXRhLmFwcGVuZCgnZmlsZU5hbWUnLCBwYXJhbXMuZmlsZU5hbWUpO1xyXG4gICAgaWYgKHBhcmFtcy5maWxlVHlwZSkgZm9ybURhdGEuYXBwZW5kKCdmaWxlVHlwZScsIChwYXJhbXMuZmlsZVR5cGUgYXMgbnVtYmVyKS50b1N0cmluZygpKTtcclxuICAgIGlmIChwYXJhbXMuc3RvcmFnZVR5cGUpIGZvcm1EYXRhLmFwcGVuZCgnc3RvcmFnZVR5cGUnLCAocGFyYW1zLnN0b3JhZ2VUeXBlIGFzIG51bWJlcikudG9TdHJpbmcoKSk7XHJcbiAgICBpZiAocGFyYW1zLm1vZGVsKSBmb3JtRGF0YS5hcHBlbmQoJ21vZGVsJywgKHBhcmFtcy5tb2RlbCBhcyBudW1iZXIpLnRvU3RyaW5nKCkpO1xyXG5cclxuICAgIC8vIENyZWF0ZSByZXF1ZXN0XHJcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3QoXHJcbiAgICAgIG5ldyBIdHRwUmVxdWVzdChcclxuICAgICAgICAnUE9TVCcsXHJcbiAgICAgICAgdGhpcy5fc2VydmljZVVyaSArICcvYXJjaGl2ZS9maWxlcy9zYXZlJyxcclxuICAgICAgICBmb3JtRGF0YSxcclxuICAgICAgICB7IHJlcG9ydFByb2dyZXNzOiB0cnVlIH1cclxuICAgICAgKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBmaWxlIGRhdGFcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgaXRlbSBpZFxyXG4gICAqL1xyXG4gIGdldEFyY2hpdmVGaWxlKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0PEFwaVJlc3VsdDxDbGlwcGVyQXJjaGl2ZUZpbGVJbmZvPj4oXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FyY2hpdmUvZmlsZXMvJyArIGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERvd25sb2FkIGZpbGVcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgYmluYXJ5IGlkIHRvIGRvd25sb2FkXHJcbiAgICogQHBhcmFtIG90cCA6IHRoZSBvcHRpb25hbCBvbmUgdGltZSBwYXNzd29yZFxyXG4gICAqL1xyXG4gIGRvd25sb2FkQXJjaGl2ZUZpbGUoaWQ6IG51bWJlciwgb3RwOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQoXHJcbiAgICAgIHRoaXMuX3NlcnZpY2VVcmkgKyAnL2FyY2hpdmUvZmlsZXMvZG93bmxvYWQvP2lkPScgKyBpZCArICcmb3RwPScgKyAob3RwID8/ICcnKSxcclxuICAgICAgeyByZXNwb25zZVR5cGU6ICdibG9iJyB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiJdfQ==