@netgrif/components-core 6.1.1 → 6.2.0-rc.11

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 (126) hide show
  1. package/esm2020/assets/i18n/de.json +19 -1
  2. package/esm2020/assets/i18n/en.json +19 -1
  3. package/esm2020/assets/i18n/sk.json +20 -2
  4. package/esm2020/lib/authorization/permission/access.service.mjs +74 -0
  5. package/esm2020/lib/authorization/public-api.mjs +2 -1
  6. package/esm2020/lib/data-fields/file-field/abstract-file-field.component.mjs +8 -3
  7. package/esm2020/lib/data-fields/file-list-field/abstract-file-list-field.component.mjs +7 -2
  8. package/esm2020/lib/dialog/components/prompt-dialog/prompt-dialog.component.mjs +3 -3
  9. package/esm2020/lib/filter/models/case-search-request-body.mjs +1 -1
  10. package/esm2020/lib/header/abstract-header-service.mjs +15 -8
  11. package/esm2020/lib/header/abstract-header.component.mjs +2 -2
  12. package/esm2020/lib/header/case-header/case-header.service.mjs +2 -2
  13. package/esm2020/lib/header/header-modes/search-mode/abstract-search-mode.component.mjs +3 -2
  14. package/esm2020/lib/header/task-header/task-header.service.mjs +7 -4
  15. package/esm2020/lib/header/workflow-header/workflow-header.service.mjs +11 -8
  16. package/esm2020/lib/navigation/model/uri-resource.mjs +6 -0
  17. package/esm2020/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.mjs +386 -0
  18. package/esm2020/lib/navigation/navigation-tree/abstract-navigation-tree.component.mjs +15 -62
  19. package/esm2020/lib/navigation/public-api.mjs +5 -1
  20. package/esm2020/lib/navigation/service/uri-resource.service.mjs +35 -0
  21. package/esm2020/lib/navigation/service/uri.service.mjs +194 -0
  22. package/esm2020/lib/panel/abstract/panel-with-immediate-data.mjs +51 -20
  23. package/esm2020/lib/panel/abstract-panel.component.mjs +23 -5
  24. package/esm2020/lib/panel/case-panel/abstract-case-panel.component.mjs +2 -2
  25. package/esm2020/lib/panel/configuration/config-params.mjs +5 -0
  26. package/esm2020/lib/panel/public-api.mjs +5 -1
  27. package/esm2020/lib/panel/task-panel/abstract-task-panel.component.mjs +36 -6
  28. package/esm2020/lib/panel/task-panel/models/task-panel-context.mjs +2 -0
  29. package/esm2020/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.mjs +2 -2
  30. package/esm2020/lib/panel/task-panel-single/abstract-single-task.component.mjs +81 -0
  31. package/esm2020/lib/panel/workflow-panel/abstract-workflow-panel.component.mjs +9 -4
  32. package/esm2020/lib/process/net.mjs +8 -1
  33. package/esm2020/lib/process/public-api.mjs +3 -1
  34. package/esm2020/lib/public/factories/public-factory-resolver.mjs +3 -3
  35. package/esm2020/lib/resources/engine-endpoint/petri-net-resource.service.mjs +2 -2
  36. package/esm2020/lib/resources/engine-endpoint/public/public-task-resource.service.mjs +1 -40
  37. package/esm2020/lib/resources/engine-endpoint/task-resource.service.mjs +4 -1
  38. package/esm2020/lib/resources/interface/case.mjs +1 -1
  39. package/esm2020/lib/resources/interface/petri-net-reference.mjs +1 -1
  40. package/esm2020/lib/resources/interface/task-pair.mjs +2 -0
  41. package/esm2020/lib/resources/public-api.mjs +2 -1
  42. package/esm2020/lib/routing/redirect-service/redirect.service.mjs +2 -1
  43. package/esm2020/lib/routing/routing-builder/routing-builder.service.mjs +5 -1
  44. package/esm2020/lib/search/models/category/case/case-dataset.mjs +3 -1
  45. package/esm2020/lib/search/models/category/case/case-simple-dataset.mjs +5 -1
  46. package/esm2020/lib/side-menu/content-components/save-filter/abstract-save-filter.component.mjs +8 -7
  47. package/esm2020/lib/tabs/classes/opened-tab.mjs +19 -1
  48. package/esm2020/lib/tabs/classes/tab-label-stream.mjs +15 -0
  49. package/esm2020/lib/tabs/classes/tab-view.mjs +11 -3
  50. package/esm2020/lib/tabs/interfaces.mjs +1 -1
  51. package/esm2020/lib/tabs/public-api.mjs +3 -1
  52. package/esm2020/lib/task/services/assign-task.service.mjs +7 -6
  53. package/esm2020/lib/task/services/cancel-task.service.mjs +7 -6
  54. package/esm2020/lib/task/services/delegate-task.service.mjs +9 -8
  55. package/esm2020/lib/task/services/finish-task.service.mjs +7 -6
  56. package/esm2020/lib/task/services/task-data.service.mjs +51 -13
  57. package/esm2020/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.mjs +3 -2
  58. package/esm2020/lib/task-content/model/task-event-notification.mjs +5 -3
  59. package/esm2020/lib/task-content/services/task-content.service.mjs +5 -2
  60. package/esm2020/lib/utility/tests/utility/create-mock-net.mjs +2 -1
  61. package/esm2020/lib/view/abstract/view-with-headers.mjs +13 -4
  62. package/esm2020/lib/view/case-view/abstract-case-view.mjs +7 -5
  63. package/esm2020/lib/view/case-view/tabbed-case-view.mjs +7 -5
  64. package/esm2020/lib/view/public-api.mjs +4 -1
  65. package/esm2020/lib/view/task-view/abstract-single-task-view.component.mjs +55 -0
  66. package/esm2020/lib/view/task-view/abstract-task-view.mjs +6 -5
  67. package/esm2020/lib/view/task-view/tabbed-task-view.mjs +6 -5
  68. package/esm2020/lib/view/workflow-view/abstract-workflow-view.component.mjs +6 -5
  69. package/fesm2015/netgrif-components-core.mjs +5900 -4921
  70. package/fesm2015/netgrif-components-core.mjs.map +1 -1
  71. package/fesm2020/netgrif-components-core.mjs +5841 -4870
  72. package/fesm2020/netgrif-components-core.mjs.map +1 -1
  73. package/lib/authorization/permission/access.service.d.ts +40 -0
  74. package/lib/authorization/public-api.d.ts +1 -0
  75. package/lib/filter/models/case-search-request-body.d.ts +1 -0
  76. package/lib/header/abstract-header-service.d.ts +6 -3
  77. package/lib/header/abstract-header.component.d.ts +1 -1
  78. package/lib/header/task-header/task-header.service.d.ts +3 -2
  79. package/lib/header/workflow-header/workflow-header.service.d.ts +3 -2
  80. package/lib/navigation/model/uri-resource.d.ts +15 -0
  81. package/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.d.ts +138 -0
  82. package/lib/navigation/navigation-tree/abstract-navigation-tree.component.d.ts +3 -30
  83. package/lib/navigation/public-api.d.ts +4 -0
  84. package/lib/navigation/service/uri-resource.service.d.ts +18 -0
  85. package/lib/navigation/service/uri.service.d.ts +75 -0
  86. package/lib/panel/abstract/panel-with-immediate-data.d.ts +4 -1
  87. package/lib/panel/abstract-panel.component.d.ts +8 -2
  88. package/lib/panel/configuration/config-params.d.ts +3 -0
  89. package/lib/panel/public-api.d.ts +3 -0
  90. package/lib/panel/task-panel/abstract-task-panel.component.d.ts +11 -4
  91. package/lib/panel/task-panel/models/task-panel-context.d.ts +19 -0
  92. package/lib/panel/task-panel-single/abstract-single-task.component.d.ts +42 -0
  93. package/lib/panel/workflow-panel/abstract-workflow-panel.component.d.ts +4 -1
  94. package/lib/process/net.d.ts +6 -0
  95. package/lib/process/public-api.d.ts +2 -0
  96. package/lib/public/factories/public-factory-resolver.d.ts +2 -1
  97. package/lib/resources/engine-endpoint/public/public-task-resource.service.d.ts +0 -12
  98. package/lib/resources/interface/case.d.ts +8 -0
  99. package/lib/resources/interface/petri-net-reference.d.ts +4 -0
  100. package/lib/resources/interface/task-pair.d.ts +4 -0
  101. package/lib/resources/public-api.d.ts +1 -0
  102. package/lib/routing/routing-builder/routing-builder.service.d.ts +1 -0
  103. package/lib/side-menu/content-components/save-filter/abstract-save-filter.component.d.ts +2 -1
  104. package/lib/tabs/classes/opened-tab.d.ts +8 -1
  105. package/lib/tabs/classes/tab-label-stream.d.ts +7 -0
  106. package/lib/tabs/interfaces.d.ts +12 -1
  107. package/lib/tabs/public-api.d.ts +2 -0
  108. package/lib/task/services/assign-task.service.d.ts +4 -2
  109. package/lib/task/services/cancel-task.service.d.ts +4 -2
  110. package/lib/task/services/delegate-task.service.d.ts +5 -3
  111. package/lib/task/services/finish-task.service.d.ts +4 -2
  112. package/lib/task/services/task-data.service.d.ts +12 -3
  113. package/lib/task-content/model/task-event-notification.d.ts +7 -1
  114. package/lib/task-content/services/task-content.service.d.ts +1 -0
  115. package/lib/view/abstract/view-with-headers.d.ts +5 -1
  116. package/lib/view/case-view/abstract-case-view.d.ts +4 -2
  117. package/lib/view/case-view/tabbed-case-view.d.ts +4 -2
  118. package/lib/view/public-api.d.ts +3 -0
  119. package/lib/view/task-view/abstract-single-task-view.component.d.ts +25 -0
  120. package/lib/view/task-view/abstract-task-view.d.ts +2 -1
  121. package/lib/view/task-view/tabbed-task-view.d.ts +2 -1
  122. package/lib/view/workflow-view/abstract-workflow-view.component.d.ts +2 -1
  123. package/package.json +1 -1
  124. package/src/assets/i18n/de.json +19 -1
  125. package/src/assets/i18n/en.json +19 -1
  126. package/src/assets/i18n/sk.json +20 -2
@@ -6,7 +6,12 @@
6
6
  "logout": "Abmelden",
7
7
  "en": "English",
8
8
  "sk": "Slowakisch",
9
- "de": "Deutsch"
9
+ "de": "Deutsch",
10
+ "open": "Menü öffnen",
11
+ "home": "Startseite",
12
+ "back": "Zurück",
13
+ "folders": "Mappen",
14
+ "views": "Blidschirme"
10
15
  }
11
16
  },
12
17
  "tasks": {
@@ -45,6 +50,9 @@
45
50
  "cancel": "Stornieren",
46
51
  "noData": "Diese Aufgabe hat keine Dateien. Schließen Sie die Aufgabe ab, um fortzufahren.",
47
52
  "redirecting": "Umleiten..."
53
+ },
54
+ "footer": {
55
+ "defaultText": "NETGRIF, s.r.o. © 2022"
48
56
  }
49
57
  },
50
58
  "side-menu": {
@@ -93,6 +101,10 @@
93
101
  "noUser": "LDAP-Gruppe nicht gefunden",
94
102
  "err": "LDAP-Gruppe konnte nicht geladen werden"
95
103
  },
104
+ "tooltip": {
105
+ "SelectAll": "Alle auswählen",
106
+ "DeselectAll": "Alle abwählen"
107
+ },
96
108
  "option-selector": {
97
109
  "select": "Auswählen",
98
110
  "choose-one-option": "Wählen Sie eine Option aus"
@@ -259,6 +271,12 @@
259
271
  },
260
272
  "enum": {
261
273
  "reset": "Rücksetzen"
274
+ },
275
+ "user": {
276
+ "selectUser": "Benutzer auswählen"
277
+ },
278
+ "textarea": {
279
+ "insertText": "Hier Text eingeben..."
262
280
  }
263
281
  },
264
282
  "dialog": {
@@ -6,7 +6,12 @@
6
6
  "logout": "Logout",
7
7
  "en": "English",
8
8
  "sk": "Slovak",
9
- "de": "German"
9
+ "de": "German",
10
+ "open": "Open menu",
11
+ "home": "Home",
12
+ "back": "Back",
13
+ "folders": "Folders",
14
+ "views": "Views"
10
15
  }
11
16
  },
12
17
  "tasks": {
@@ -45,6 +50,9 @@
45
50
  "cancel": "Cancel",
46
51
  "noData": "This task has no data. Finish to continue.",
47
52
  "redirecting": "Redirecting..."
53
+ },
54
+ "footer": {
55
+ "defaultText": "NETGRIF, s.r.o. © 2022"
48
56
  }
49
57
  },
50
58
  "side-menu": {
@@ -93,6 +101,10 @@
93
101
  "noUser": "Not found Ldap group",
94
102
  "err": "Failed to load Ldap group"
95
103
  },
104
+ "tooltip": {
105
+ "SelectAll": "Select All",
106
+ "DeselectAll": "Deselect All"
107
+ },
96
108
  "option-selector": {
97
109
  "select": "Select",
98
110
  "choose-one-option": "Choose one of the provided options"
@@ -259,6 +271,12 @@
259
271
  },
260
272
  "enum": {
261
273
  "reset": "Reset"
274
+ },
275
+ "user": {
276
+ "selectUser": "Select user"
277
+ },
278
+ "textarea": {
279
+ "insertText": "Insert text here..."
262
280
  }
263
281
  },
264
282
  "dialog": {
@@ -6,7 +6,12 @@
6
6
  "logout": "Odhlasiť sa",
7
7
  "en": "Anglický",
8
8
  "sk": "Slovenský",
9
- "de": "Nemecký"
9
+ "de": "Nemecký",
10
+ "open": "Otvoriť menu",
11
+ "home": "Domov",
12
+ "back": "Späť",
13
+ "folders": "Priečinky",
14
+ "views": "Obrazovky"
10
15
  }
11
16
  },
12
17
  "tasks": {
@@ -45,6 +50,9 @@
45
50
  "cancel": "Zrušiť",
46
51
  "noData": "Táto úloha nemá žiadne údaje. Stlačte dokončiť pre pokračovanie.",
47
52
  "redirecting": "Presmerovanie..."
53
+ },
54
+ "footer": {
55
+ "defaultText": "NETGRIF, s.r.o. © 2022"
48
56
  }
49
57
  },
50
58
  "side-menu": {
@@ -89,10 +97,14 @@
89
97
  "showcase": "Nebol zvolený mód zobrazenia používateľa!"
90
98
  },
91
99
  "ldapGroup": {
92
- "choose": "Vyhladajťe Ldap skupinu",
100
+ "choose": "Vyhladajte Ldap skupinu",
93
101
  "noUser": "Neexistuje žiadna Ldap skupina",
94
102
  "err": "Nepodarilo sa načítať Ldap skupiny"
95
103
  },
104
+ "tooltip": {
105
+ "SelectAll": "Označiť všetko",
106
+ "DeselectAll": "Odznačit všetko"
107
+ },
96
108
  "option-selector": {
97
109
  "select": "Zvoliť",
98
110
  "choose-one-option": "Vyberte jednu z možností"
@@ -259,6 +271,12 @@
259
271
  },
260
272
  "enum": {
261
273
  "reset": "Resetovať"
274
+ },
275
+ "user": {
276
+ "selectUser": "Vyberte používateľa"
277
+ },
278
+ "textarea": {
279
+ "insertText": "Sem zadajte text..."
262
280
  }
263
281
  },
264
282
  "dialog": {
@@ -0,0 +1,74 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../configuration/configuration.service";
4
+ import * as i2 from "../../user/services/user.service";
5
+ import * as i3 from "../role/role-guard.service";
6
+ import * as i4 from "../authority/authority-guard.service";
7
+ import * as i5 from "../group/group-guard.service";
8
+ export class AccessService {
9
+ constructor(_config, _userService, _roleGuard, _authorityGuard, _groupGuard) {
10
+ this._config = _config;
11
+ this._userService = _userService;
12
+ this._roleGuard = _roleGuard;
13
+ this._authorityGuard = _authorityGuard;
14
+ this._groupGuard = _groupGuard;
15
+ }
16
+ /**
17
+ * @param view the view whose access permissions we want to check
18
+ * @param url URL to which the view maps. Is used only for error message generation
19
+ * @returns whether the user can access the provided view
20
+ */
21
+ canAccessView(view, url) {
22
+ if (!view.hasOwnProperty('access')) {
23
+ return true;
24
+ }
25
+ if (typeof view.access === 'string') {
26
+ if (view.access === 'public') {
27
+ return true;
28
+ }
29
+ if (view.access !== 'private') {
30
+ throw new Error(`Unknown access option '${view.access}'. Only 'public' or 'private' is allowed.`);
31
+ }
32
+ return !this._userService.user.isEmpty();
33
+ }
34
+ if (!url) {
35
+ url = view?.routing?.path;
36
+ }
37
+ return !this._userService.user.isEmpty() // AuthGuard
38
+ && this.passesRoleGuard(view, url)
39
+ && this.passesAuthorityGuard(view)
40
+ && this.passesGroupGuard(view, url);
41
+ }
42
+ /**
43
+ * @param view the view whose access permissions we want to check
44
+ * @param url URL to which the view maps. Is used only for error message generation
45
+ * @returns whether the user passes the role guard condition for accessing the specified view
46
+ */
47
+ passesRoleGuard(view, url) {
48
+ return !view.access.hasOwnProperty('role') || this._roleGuard.canAccessView(view, url);
49
+ }
50
+ /**
51
+ * @param view the view whose access permissions we want to check
52
+ * @returns whether the user passes the authority guard condition for accessing the specified view
53
+ */
54
+ passesAuthorityGuard(view) {
55
+ return !view.access.hasOwnProperty('authority') || this._authorityGuard.canAccessView(view);
56
+ }
57
+ /**
58
+ * @param view the view whose access permissions we want to check
59
+ * @param url URL to which the view maps. Is used only for error message generation
60
+ * @returns whether the user passes the role guard condition for accessing the specified view
61
+ */
62
+ passesGroupGuard(view, url) {
63
+ return !view.access.hasOwnProperty('group') || this._groupGuard.canAccessView(view, url);
64
+ }
65
+ }
66
+ AccessService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AccessService, deps: [{ token: i1.ConfigurationService }, { token: i2.UserService }, { token: i3.RoleGuardService }, { token: i4.AuthorityGuardService }, { token: i5.GroupGuardService }], target: i0.ɵɵFactoryTarget.Injectable });
67
+ AccessService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AccessService, providedIn: 'root' });
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AccessService, decorators: [{
69
+ type: Injectable,
70
+ args: [{
71
+ providedIn: 'root'
72
+ }]
73
+ }], ctorParameters: function () { return [{ type: i1.ConfigurationService }, { type: i2.UserService }, { type: i3.RoleGuardService }, { type: i4.AuthorityGuardService }, { type: i5.GroupGuardService }]; } });
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL2F1dGhvcml6YXRpb24vcGVybWlzc2lvbi9hY2Nlc3Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBV3pDLE1BQU0sT0FBTyxhQUFhO0lBRXRCLFlBQ1ksT0FBNkIsRUFDN0IsWUFBeUIsRUFDekIsVUFBNEIsRUFDNUIsZUFBc0MsRUFDdEMsV0FBOEI7UUFKOUIsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFDN0IsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsb0JBQWUsR0FBZixlQUFlLENBQXVCO1FBQ3RDLGdCQUFXLEdBQVgsV0FBVyxDQUFtQjtJQUUxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGFBQWEsQ0FBQyxJQUFVLEVBQUUsR0FBWTtRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoQyxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQ2pDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUU7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO2dCQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixJQUFJLENBQUMsTUFBTSwyQ0FBMkMsQ0FBQyxDQUFDO2FBQ3JHO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLEdBQUcsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQztTQUM3QjtRQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxZQUFZO2VBQzlDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztlQUMvQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDO2VBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsSUFBVSxFQUFFLEdBQVc7UUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksb0JBQW9CLENBQUMsSUFBVTtRQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyxJQUFVLEVBQUUsR0FBVztRQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdGLENBQUM7OzJHQWpFUSxhQUFhOytHQUFiLGFBQWEsY0FGVixNQUFNOzRGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um9sZUd1YXJkU2VydmljZX0gZnJvbSBcIi4uL3JvbGUvcm9sZS1ndWFyZC5zZXJ2aWNlXCI7XG5pbXBvcnQge0F1dGhvcml0eUd1YXJkU2VydmljZX0gZnJvbSBcIi4uL2F1dGhvcml0eS9hdXRob3JpdHktZ3VhcmQuc2VydmljZVwiO1xuaW1wb3J0IHtHcm91cEd1YXJkU2VydmljZX0gZnJvbSBcIi4uL2dyb3VwL2dyb3VwLWd1YXJkLnNlcnZpY2VcIjtcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9uL2NvbmZpZ3VyYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHtWaWV3fSBmcm9tIFwiLi4vLi4vLi4vY29tbW9ucy9zY2hlbWFcIjtcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4uLy4uL3VzZXIvc2VydmljZXMvdXNlci5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBY2Nlc3NTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9jb25maWc6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgX3JvbGVHdWFyZDogUm9sZUd1YXJkU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfYXV0aG9yaXR5R3VhcmQ6IEF1dGhvcml0eUd1YXJkU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZ3JvdXBHdWFyZDogR3JvdXBHdWFyZFNlcnZpY2UsXG4gICAgKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHZpZXcgdGhlIHZpZXcgd2hvc2UgYWNjZXNzIHBlcm1pc3Npb25zIHdlIHdhbnQgdG8gY2hlY2tcbiAgICAgKiBAcGFyYW0gdXJsIFVSTCB0byB3aGljaCB0aGUgdmlldyBtYXBzLiBJcyB1c2VkIG9ubHkgZm9yIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGlvblxuICAgICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIHVzZXIgY2FuIGFjY2VzcyB0aGUgcHJvdmlkZWQgdmlld1xuICAgICAqL1xuICAgIHB1YmxpYyBjYW5BY2Nlc3NWaWV3KHZpZXc6IFZpZXcsIHVybD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXZpZXcuaGFzT3duUHJvcGVydHkoJ2FjY2VzcycpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Ygdmlldy5hY2Nlc3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAodmlldy5hY2Nlc3MgPT09ICdwdWJsaWMnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmlldy5hY2Nlc3MgIT09ICdwcml2YXRlJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhY2Nlc3Mgb3B0aW9uICcke3ZpZXcuYWNjZXNzfScuIE9ubHkgJ3B1YmxpYycgb3IgJ3ByaXZhdGUnIGlzIGFsbG93ZWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuX3VzZXJTZXJ2aWNlLnVzZXIuaXNFbXB0eSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgIHVybCA9IHZpZXc/LnJvdXRpbmc/LnBhdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gIXRoaXMuX3VzZXJTZXJ2aWNlLnVzZXIuaXNFbXB0eSgpIC8vIEF1dGhHdWFyZFxuICAgICAgICAgICAgJiYgdGhpcy5wYXNzZXNSb2xlR3VhcmQodmlldywgdXJsKVxuICAgICAgICAgICAgJiYgdGhpcy5wYXNzZXNBdXRob3JpdHlHdWFyZCh2aWV3KVxuICAgICAgICAgICAgJiYgdGhpcy5wYXNzZXNHcm91cEd1YXJkKHZpZXcsIHVybCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHZpZXcgdGhlIHZpZXcgd2hvc2UgYWNjZXNzIHBlcm1pc3Npb25zIHdlIHdhbnQgdG8gY2hlY2tcbiAgICAgKiBAcGFyYW0gdXJsIFVSTCB0byB3aGljaCB0aGUgdmlldyBtYXBzLiBJcyB1c2VkIG9ubHkgZm9yIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGlvblxuICAgICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIHVzZXIgcGFzc2VzIHRoZSByb2xlIGd1YXJkIGNvbmRpdGlvbiBmb3IgYWNjZXNzaW5nIHRoZSBzcGVjaWZpZWQgdmlld1xuICAgICAqL1xuICAgIHB1YmxpYyBwYXNzZXNSb2xlR3VhcmQodmlldzogVmlldywgdXJsOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF2aWV3LmFjY2Vzcy5oYXNPd25Qcm9wZXJ0eSgncm9sZScpIHx8IHRoaXMuX3JvbGVHdWFyZC5jYW5BY2Nlc3NWaWV3KHZpZXcsIHVybCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHZpZXcgdGhlIHZpZXcgd2hvc2UgYWNjZXNzIHBlcm1pc3Npb25zIHdlIHdhbnQgdG8gY2hlY2tcbiAgICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoZSB1c2VyIHBhc3NlcyB0aGUgYXV0aG9yaXR5IGd1YXJkIGNvbmRpdGlvbiBmb3IgYWNjZXNzaW5nIHRoZSBzcGVjaWZpZWQgdmlld1xuICAgICAqL1xuICAgIHB1YmxpYyBwYXNzZXNBdXRob3JpdHlHdWFyZCh2aWV3OiBWaWV3KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdmlldy5hY2Nlc3MuaGFzT3duUHJvcGVydHkoJ2F1dGhvcml0eScpIHx8IHRoaXMuX2F1dGhvcml0eUd1YXJkLmNhbkFjY2Vzc1ZpZXcodmlldyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHZpZXcgdGhlIHZpZXcgd2hvc2UgYWNjZXNzIHBlcm1pc3Npb25zIHdlIHdhbnQgdG8gY2hlY2tcbiAgICAgKiBAcGFyYW0gdXJsIFVSTCB0byB3aGljaCB0aGUgdmlldyBtYXBzLiBJcyB1c2VkIG9ubHkgZm9yIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGlvblxuICAgICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIHVzZXIgcGFzc2VzIHRoZSByb2xlIGd1YXJkIGNvbmRpdGlvbiBmb3IgYWNjZXNzaW5nIHRoZSBzcGVjaWZpZWQgdmlld1xuICAgICAqL1xuICAgIHB1YmxpYyBwYXNzZXNHcm91cEd1YXJkKHZpZXc6IFZpZXcsIHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdmlldy5hY2Nlc3MuaGFzT3duUHJvcGVydHkoJ2dyb3VwJykgfHwgdGhpcy5fZ3JvdXBHdWFyZC5jYW5BY2Nlc3NWaWV3KHZpZXcsIHVybCk7XG4gICAgfVxufVxuIl19
@@ -6,5 +6,6 @@ export * from './authority/authority-guard.service';
6
6
  export * from './role/role-guard.service';
7
7
  export * from './group/group-guard.service';
8
8
  export * from './permission/permission.service';
9
+ export * from './permission/access.service';
9
10
  /* COMPONENTS */
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvYXV0aG9yaXphdGlvbi9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFFVixhQUFhO0FBRWIsYUFBYTtBQUViLGNBQWM7QUFDZCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlDQUFpQyxDQUFDO0FBRWhELGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIEFQSVMgKi9cblxuLyogTU9EVUxFUyAqL1xuXG4vKiBDTEFTU0VTICovXG5cbi8qIFNFUlZJQ0VTICovXG5leHBvcnQgKiBmcm9tICcuL2F1dGhvcml0eS9hdXRob3JpdHktZ3VhcmQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3JvbGUvcm9sZS1ndWFyZC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZ3JvdXAvZ3JvdXAtZ3VhcmQuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3Blcm1pc3Npb24vcGVybWlzc2lvbi5zZXJ2aWNlJztcblxuLyogQ09NUE9ORU5UUyAqL1xuIl19
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvYXV0aG9yaXphdGlvbi9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFFVixhQUFhO0FBRWIsYUFBYTtBQUViLGNBQWM7QUFDZCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsNkJBQTZCLENBQUM7QUFFNUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLyogQVBJUyAqL1xuXG4vKiBNT0RVTEVTICovXG5cbi8qIENMQVNTRVMgKi9cblxuLyogU0VSVklDRVMgKi9cbmV4cG9ydCAqIGZyb20gJy4vYXV0aG9yaXR5L2F1dGhvcml0eS1ndWFyZC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcm9sZS9yb2xlLWd1YXJkLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9ncm91cC9ncm91cC1ndWFyZC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcGVybWlzc2lvbi9wZXJtaXNzaW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9wZXJtaXNzaW9uL2FjY2Vzcy5zZXJ2aWNlJztcblxuLyogQ09NUE9ORU5UUyAqL1xuIl19
@@ -13,7 +13,7 @@ import * as i4 from "@ngx-translate/core";
13
13
  import * as i5 from "../../event/services/event.service";
14
14
  import * as i6 from "@angular/platform-browser";
15
15
  const preview = 'preview';
16
- const fieldHeight = 105;
16
+ const fieldHeight = 75;
17
17
  const fieldPadding = 16;
18
18
  /**
19
19
  * Component that is created in the body of the task panel accord on the Petri Net, which must be bind properties.
@@ -161,7 +161,12 @@ export class AbstractFileFieldComponent extends AbstractDataFieldComponent {
161
161
  this.state.uploading = false;
162
162
  this.state.progress = 0;
163
163
  this._log.error(`File [${this.dataField.stringId}] ${this.fileUploadEl.nativeElement.files.item(0)} uploading has failed!`, error);
164
- this._snackbar.openErrorSnackBar(this._translate.instant('dataField.snackBar.fileUploadFailed'));
164
+ if (error?.error?.message) {
165
+ this._snackbar.openErrorSnackBar(this._translate.instant(error.error.message));
166
+ }
167
+ else {
168
+ this._snackbar.openErrorSnackBar(this._translate.instant('dataField.snackBar.fileUploadFailed'));
169
+ }
165
170
  this.dataField.touch = true;
166
171
  this.dataField.update();
167
172
  this.fileUploadEl.nativeElement.value = '';
@@ -417,4 +422,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
417
422
  type: ViewChild,
418
423
  args: ['imageDiv']
419
424
  }] } });
420
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZmlsZS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL2RhdGEtZmllbGRzL2ZpbGUtZmllbGQvYWJzdHJhY3QtZmlsZS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFZLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQy9ELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBRW5GLE9BQU8sRUFBQyxZQUFZLEVBQW1CLE1BQU0sMkNBQTJDLENBQUM7QUFJekYsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFFbEYsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFckQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQWNwQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFFMUIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBRXhCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUV4Qjs7R0FFRztBQUtILE1BQU0sT0FBZ0IsMEJBQTJCLFNBQVEsMEJBQTBCO0lBdUUvRTs7Ozs7Ozs7OztPQVVHO0lBQ0gsWUFBZ0Msb0JBQXlDLEVBQ3pDLElBQW1CLEVBQ25CLFNBQTBCLEVBQzFCLFVBQTRCLEVBQzVCLGFBQTJCLEVBQ2Msc0JBQXNDLEVBQy9FLFVBQXdCO1FBQ3BELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBUEYseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN6QyxTQUFJLEdB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Q0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyRixDQUFDOztBQXhjRDs7R0FFRztBQUNvQix1REFBNEIsR0FBRyxDQUFFLENBQUE7QUFDeEQ7O0dBRUc7QUFDb0IsdURBQTRCLEdBQUcsTUFBTyxDQUFBO0FBQzdEOztHQUVHO0FBQ29CLHVEQUE0QixHQUFHLE9BQVEsQ0FBQTt3SEFiNUMsMEJBQTBCLDZLQXVGRiw2QkFBNkI7NEdBdkZyRCwwQkFBMEIsMmFBRmxDLEVBQUU7NEZBRU0sMEJBQTBCO2tCQUovQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFFBQVEsRUFBRSxFQUFFO2lCQUNmOzswQkF3RjBCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsNkJBQTZCO3VFQXBFdkQsTUFBTTtzQkFBckIsS0FBSztnQkFJVSxTQUFTO3NCQUF4QixLQUFLO2dCQUkrQixZQUFZO3NCQUFoRCxTQUFTO3VCQUFDLGlCQUFpQjtnQkFJQyxPQUFPO3NCQUFuQyxTQUFTO3VCQUFDLFNBQVM7Z0JBRVUsVUFBVTtzQkFBdkMsU0FBUzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RmlsZUZpZWxkLCBGaWxlUHJldmlld1R5cGV9IGZyb20gJy4vbW9kZWxzL2ZpbGUtZmllbGQnO1xuaW1wb3J0IHtBYnN0cmFjdERhdGFGaWVsZENvbXBvbmVudH0gZnJvbSAnLi4vbW9kZWxzL2Fic3RyYWN0LWRhdGEtZmllbGQtY29tcG9uZW50JztcbmltcG9ydCB7VGFza1Jlc291cmNlU2VydmljZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2VuZ2luZS1lbmRwb2ludC90YXNrLXJlc291cmNlLnNlcnZpY2UnO1xuaW1wb3J0IHtQcm9ncmVzc1R5cGUsIFByb3ZpZGVyUHJvZ3Jlc3N9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9yZXNvdXJjZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7U25hY2tCYXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9zbmFjay1iYXIvc2VydmljZXMvc25hY2stYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TkFFX0lORk9STV9BQk9VVF9JTlZBTElEX0RBVEF9IGZyb20gJy4uL21vZGVscy9pbnZhbGlkLWRhdGEtcG9saWN5LXRva2VuJztcbmltcG9ydCB7RG9tU2FuaXRpemVyLCBTYWZlVXJsfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1Jlc2l6ZWRFdmVudH0gZnJvbSAnYW5ndWxhci1yZXNpemUtZXZlbnQnO1xuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0V2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZX0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9tZXNzYWdlLXJlc291cmNlJztcbmltcG9ydCB7RXZlbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9ldmVudC9zZXJ2aWNlcy9ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkc01hcH0gZnJvbSAnLi4vLi4vZXZlbnQvc2VydmljZXMvaW50ZXJmYWNlcy9jaGFuZ2VkLWZpZWxkcy1tYXAnO1xuaW1wb3J0IHtGaWxlRmllbGRJZEJvZHl9IGZyb20gJy4uL21vZGVscy9maWxlLWZpZWxkLWlkLWJvZHknO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVTdGF0ZSB7XG4gICAgcHJvZ3Jlc3M6IG51bWJlcjtcbiAgICB1cGxvYWRpbmc6IGJvb2xlYW47XG4gICAgZG93bmxvYWRpbmc6IGJvb2xlYW47XG4gICAgY29tcGxldGVkOiBib29sZWFuO1xuICAgIGVycm9yOiBib29sZWFuO1xufVxuXG5jb25zdCBwcmV2aWV3ID0gJ3ByZXZpZXcnO1xuXG5jb25zdCBmaWVsZEhlaWdodCA9IDEwNTtcblxuY29uc3QgZmllbGRQYWRkaW5nID0gMTY7XG5cbi8qKlxuICogQ29tcG9uZW50IHRoYXQgaXMgY3JlYXRlZCBpbiB0aGUgYm9keSBvZiB0aGUgdGFzayBwYW5lbCBhY2NvcmQgb24gdGhlIFBldHJpIE5ldCwgd2hpY2ggbXVzdCBiZSBiaW5kIHByb3BlcnRpZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmNjLWFic3RyYWN0LWZpbGUtZmllbGQnLFxuICAgIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEZpbGVGaWVsZENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RGF0YUZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHdpZHRoIG9mIHRoZSBkZWZhdWx0IGZpbGUgcHJldmlldyBib3JkZXIgaW4gcGl4ZWxzLiBUaGUgYHB4YCBzdHJpbmcgaXMgYXBwZW5kZWQgaW4gdGhlIGNvZGUuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1BSRVZJRVdfQk9SREVSX1dJRFRIID0gMDtcbiAgICAvKipcbiAgICAgKiBUaGUgQ1NTIHN0eWxlIGF0dHJpYnV0ZSBvZiB0aGUgZGVmYXVsdCBmaWxlIHByZXZpZXcgYm9yZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9QUkVWSUVXX0JPUkRFUl9TVFlMRSA9ICdub25lJztcbiAgICAvKipcbiAgICAgKiBUaGUgQ1NTIGNvbG9yIHN0cmluZyBvZiB0aGUgZGVmYXVsdCBmaWxlIHByZXZpZXcgYm9yZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9QUkVWSUVXX0JPUkRFUl9DT0xPUiA9ICdibGFjayc7XG5cbiAgICBwdWJsaWMgc3RhdGU6IEZpbGVTdGF0ZTtcbiAgICAvKipcbiAgICAgKiBUYXNrIG1vbmdvIHN0cmluZyBpZCBpcyBiaW5kaW5nIHByb3BlcnR5IGZyb20gcGFyZW50IGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgdGFza0lkOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogQmluZGluZyBwcm9wZXJ0eSBhcyBpbnN0YW5jZSBmcm9tIHBhcmVudCBjb21wb25lbnQuXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGRhdGFGaWVsZDogRmlsZUZpZWxkO1xuICAgIC8qKlxuICAgICAqIEZpbGUgcGlja2VyIGVsZW1lbnQgcmVmZXJlbmNlIGZyb20gY29tcG9uZW50IHRlbXBsYXRlIHRoYXQgaXMgaW5pdGlhbGl6ZWQgYWZ0ZXIgdmlldyBpbml0LlxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2ZpbGVVcGxvYWRJbnB1dCcpIHB1YmxpYyBmaWxlVXBsb2FkRWw6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gICAgLyoqXG4gICAgICogSW1hZ2UgZmllbGQgdmlldyBlbGVtZW50IHJlZmVyZW5jZSBmcm9tIGNvbXBvbmVudCB0ZW1wbGF0ZSB0aGF0IGlzIGluaXRpYWxpemVkIGFmdGVyIHZpZXcgaW5pdC5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdpbWFnZUVsJykgcHVibGljIGltYWdlRWw6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCdpbWFnZURpdicpIHB1YmxpYyBpbWFnZURpdkVsOiBFbGVtZW50UmVmO1xuICAgIC8qKlxuICAgICAqIElmIGZpbGUgcHJldmlldyBzaG91bGQgYmUgZGlzcGxheWVkXG4gICAgICovXG4gICAgcHVibGljIGZpbGVQcmV2aWV3ID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogSWYgZmlsZSB0eXBlIGNhbiBiZSBkaXNwbGF5ZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNEaXNwbGF5YWJsZSA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIE1heCBoZWlnaHQgb2YgcHJldmlld1xuICAgICAqL1xuICAgIHByaXZhdGUgbWF4SGVpZ2h0OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogU3RvcmUgZmlsZSBmb3IgcHJldmlld1xuICAgICAqL1xuICAgIHByaXZhdGUgZmlsZUZvclByZXZpZXc6IEJsb2I7XG4gICAgLyoqXG4gICAgICogVXJsIG9mIHByZXZpZXcgZmlsZVxuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2aWV3U291cmNlOiBTYWZlVXJsO1xuICAgIC8qKlxuICAgICAqIFN0b3JlIGZpbGUgdG8gc2hvdy9kb3dubG9hZFxuICAgICAqL1xuICAgIHByaXZhdGUgZmlsZUZvckRvd25sb2FkOiBCbG9iO1xuICAgIC8qKlxuICAgICAqIEZ1bGwgc2l6ZSBmaWxlIHVybFxuICAgICAqL1xuICAgIHB1YmxpYyBmdWxsU291cmNlOiBCZWhhdmlvclN1YmplY3Q8U2FmZVVybD47XG4gICAgLyoqXG4gICAgICogRXh0ZW5zaW9uIG9mIGZpbGUgdG8gcHJldmlld1xuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2aWV3RXh0ZW5zaW9uOiBGaWxlUHJldmlld1R5cGU7XG4gICAgLyoqXG4gICAgICogRm9ybSBjb250cm9sIHN1YnNjcmlwdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlZEZpZWxkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICAvKipcbiAgICAgKiBPbmx5IGluamVjdCBzZXJ2aWNlcy5cbiAgICAgKiBAcGFyYW0gX3Rhc2tSZXNvdXJjZVNlcnZpY2UgUHJvdmlkZXMgdG8gZG93bmxvYWQgYSBmaWxlIGZyb20gdGhlIGJhY2tlbmRcbiAgICAgKiBAcGFyYW0gX2xvZyBMb2dnZXIgc2VydmljZVxuICAgICAqIEBwYXJhbSBfc25hY2tiYXIgU25hY2tiYXIgc2VydmljZSB0byBub3RpZnkgdXNlclxuICAgICAqIEBwYXJhbSBfdHJhbnNsYXRlIFRyYW5zbGF0ZSBzZXJ2aWNlIGZvciBJMThOXG4gICAgICogQHBhcmFtIF9ldmVudFNlcnZpY2UgdXNlZCBmb3IgcGFyc2luZyBvZiBiYWNrZW5kIHJlc3BvbnNlXG4gICAgICogQHBhcmFtIGluZm9ybUFib3V0SW52YWxpZERhdGEgd2hldGhlciB0aGUgYmFja2VuZCBzaG91bGQgYmUgbm90aWZpZWQgYWJvdXQgaW52YWxpZCB2YWx1ZXMuXG4gICAgICogT3B0aW9uIGluamVjdGVkIHRyb3VnaCBgTkFFX0lORk9STV9BQk9VVF9JTlZBTElEX0RBVEFgIEluamVjdGlvblRva2VuXG4gICAgICogQHBhcmFtIF9zYW5pdGl6ZXIgU2FuaXRpemUgdXJsIG9mIGltYWdlIHByZXZpZXdcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJvdGVjdGVkIF90YXNrUmVzb3VyY2VTZXJ2aWNlOiBUYXNrUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2xvZzogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9zbmFja2JhcjogU25hY2tCYXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9ldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChOQUVfSU5GT1JNX0FCT1VUX0lOVkFMSURfREFUQSkgaW5mb3JtQWJvdXRJbnZhbGlkRGF0YTogYm9vbGVhbiB8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIpIHtcbiAgICAgICAgc3VwZXIoaW5mb3JtQWJvdXRJbnZhbGlkRGF0YSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLmRlZmF1bHRTdGF0ZTtcbiAgICAgICAgdGhpcy5mdWxsU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTYWZlVXJsPihudWxsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgOlxuICAgICAqICAtIEZpbGUgZmllbGQgdG8gW0ZpbGVGaWVsZFNlcnZpY2Vde0BsaW5rIEZpbGVGaWVsZFNlcnZpY2V9XG4gICAgICogIC0gRGlzcGxheSBuYW1lXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuZmlsZVByZXZpZXcgPSB0aGlzLmRhdGFGaWVsZCAmJiB0aGlzLmRhdGFGaWVsZC5jb21wb25lbnQgJiYgdGhpcy5kYXRhRmllbGQuY29tcG9uZW50Lm5hbWVcbiAgICAgICAgICAgICYmIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5uYW1lID09PSBwcmV2aWV3O1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZVVwbG9hZEVsKSB7XG4gICAgICAgICAgICB0aGlzLmZpbGVVcGxvYWRFbC5uYXRpdmVFbGVtZW50Lm9uY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbGVQcmV2aWV3KSB7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmltYWdlRGl2RWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVByZXZpZXdJZkRpc3BsYXlhYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlZEZpZWxkU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhRmllbGQudXBkYXRlZC5zdWJzY3JpYmUoICgpID0+IHtcbiAgICAgICAgICAgIGlmICghIXRoaXMuZmlsZVByZXZpZXdcbiAgICAgICAgICAgICAgICAmJiAhIXRoaXMuZGF0YUZpZWxkLnZhbHVlXG4gICAgICAgICAgICAgICAgJiYgISF0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplUHJldmlld0lmRGlzcGxheWFibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5mdWxsU291cmNlLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlZEZpZWxkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNob29zZUZpbGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLnVwbG9hZGluZyB8fCB0aGlzLmZvcm1Db250cm9sLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlVXBsb2FkRWwubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGwgYWZ0ZXIgY2xpY2sgb24gZmlsZSBmaWVsZC5cbiAgICAgKlxuICAgICAqIElmIGZpbGUgZmllbGQgaGFzIG5vIGZpbGUgdXBsb2FkZWRcbiAgICAgKiBbRmlsZXNVcGxvYWRDb21wb25lbnRde0BsaW5rIEFic3RyYWN0RmlsZXNVcGxvYWRDb21wb25lbnR9IHZpYSBbU2lkZU1lbnVde0BsaW5rIFNpZGVNZW51U2VydmljZX0gb3BlbnMuXG4gICAgICpcbiAgICAgKiBPdGhlcndpc2Ugb3BlbnMgYSBmaWxlIHBpY2tlciBmcm9tIHdoaWNoIHRoZSB1c2VyIGNhbiBzZWxlY3QgZmlsZXMuXG4gICAgICovXG4gICAgcHVibGljIHVwbG9hZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZpbGVVcGxvYWRFbC5uYXRpdmVFbGVtZW50LmZpbGVzIHx8IHRoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQuZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnRhc2tJZCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdGaWxlIGNhbm5vdCBiZSB1cGxvYWRlZC4gTm8gdGFzayBpcyBzZXQgdG8gdGhlIGZpZWxkLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGFGaWVsZC52YWx1ZSAmJlxuICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZSAmJlxuICAgICAgICAgICAgdGhpcy5maWxlVXBsb2FkRWwubmF0aXZlRWxlbWVudC5maWxlcy5pdGVtKDApLm5hbWUgPT09IHRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignVXNlciBjaG9zZSB0aGUgc2FtZSBmaWxlLiBVcGxvYWRpbmcgc2tpcHBlZCcpO1xuICAgICAgICAgICAgdGhpcy5fc25hY2tiYXIub3BlbkVycm9yU25hY2tCYXIodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ2RhdGFGaWVsZC5zbmFja0Jhci53b250VXBsb2FkU2FtZUZpbGUnKSk7XG4gICAgICAgICAgICB0aGlzLmZpbGVVcGxvYWRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YUZpZWxkLm1heFVwbG9hZFNpemVJbkJ5dGVzICYmXG4gICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC5tYXhVcGxvYWRTaXplSW5CeXRlcyA8IHRoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQuZmlsZXMuaXRlbSgwKS5zaXplKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ0ZpbGUgY2Fubm90IGJlIHVwbG9hZGVkLiBNYXhpbXVtIHNpemUgb2YgZmlsZSBleGNlZWRlZC4nKTtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKFxuICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdkYXRhRmllbGQuc25hY2tCYXIubWF4RmlsZXNTaXplRXhjZWVkZWQnKSArIHRoaXMuZGF0YUZpZWxkLm1heFVwbG9hZFNpemVJbkJ5dGVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5maWxlVXBsb2FkRWwubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLmRlZmF1bHRTdGF0ZTtcbiAgICAgICAgdGhpcy5zdGF0ZS51cGxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaWxlRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgY29uc3QgZmlsZVRvVXBsb2FkID0gdGhpcy5maWxlVXBsb2FkRWwubmF0aXZlRWxlbWVudC5maWxlcy5pdGVtKDApIGFzIEZpbGU7XG4gICAgICAgIGNvbnN0IGRhdGE6IEZpbGVGaWVsZElkQm9keSA9IHt9O1xuICAgICAgICBkYXRhW3RoaXMucmVzb2x2ZVBhcmVudFRhc2tJZCgpXSA9IHRoaXMuZGF0YUZpZWxkLnN0cmluZ0lkO1xuICAgICAgICBmaWxlRm9ybURhdGEuYXBwZW5kKCdmaWxlJywgZmlsZVRvVXBsb2FkKTtcbiAgICAgICAgZmlsZUZvcm1EYXRhLmFwcGVuZCgnZGF0YScsIG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShkYXRhKV0sIHt0eXBlOiAnYXBwbGljYXRpb24vanNvbid9KSk7XG4gICAgICAgIHRoaXMuX3Rhc2tSZXNvdXJjZVNlcnZpY2UudXBsb2FkRmlsZSh0aGlzLnRhc2tJZCwgdGhpcy5kYXRhRmllbGQuc3RyaW5nSWQsIGZpbGVGb3JtRGF0YSwgZmFsc2UpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogRXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKChyZXNwb25zZSBhcyBQcm92aWRlclByb2dyZXNzKS50eXBlICYmIChyZXNwb25zZSBhcyBQcm92aWRlclByb2dyZXNzKS50eXBlID09PSBQcm9ncmVzc1R5cGUuVVBMT0FEKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUucHJvZ3Jlc3MgPSAocmVzcG9uc2UgYXMgUHJvdmlkZXJQcm9ncmVzcykucHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhbmdlZEZpZWxkc01hcDogQ2hhbmdlZEZpZWxkc01hcCA9IHRoaXMuX2V2ZW50U2VydmljZS5wYXJzZUNoYW5nZWRGaWVsZHNGcm9tT3V0Y29tZVRyZWUocmVzcG9uc2Uub3V0Y29tZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLmVtaXRDaGFuZ2VkRmllbGRzKGNoYW5nZWRGaWVsZHNNYXApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoXG4gICAgICAgICAgICAgICAgICAgICAgICBgRmlsZSBbJHt0aGlzLmRhdGFGaWVsZC5zdHJpbmdJZH1dICR7dGhpcy5maWxlVXBsb2FkRWwubmF0aXZlRWxlbWVudC5maWxlcy5pdGVtKDApLm5hbWV9IHdhcyBzdWNjZXNzZnVsbHkgdXBsb2FkZWRgXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5lcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnVwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnByb2dyZXNzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQuZG93bmxvYWRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lID0gZmlsZVRvVXBsb2FkLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbGVQcmV2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVQcmV2aWV3SWZEaXNwbGF5YWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnVsbFNvdXJjZS5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUZvckRvd25sb2FkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC50b3VjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVVcGxvYWRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuY29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnVwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUucHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEZpbGUgWyR7dGhpcy5kYXRhRmllbGQuc3RyaW5nSWR9XSAke3RoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQuZmlsZXMuaXRlbSgwKX0gdXBsb2FkaW5nIGhhcyBmYWlsZWQhYCwgZXJyb3JcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdkYXRhRmllbGQuc25hY2tCYXIuZmlsZVVwbG9hZEZhaWxlZCcpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC50b3VjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlVXBsb2FkRWwubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRvd25sb2FkKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tGaWxlQmVmb3JlRG93bmxvYWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIXRoaXMuZmlsZUZvckRvd25sb2FkKSB7XG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkVmlhQW5jaG9yKHRoaXMuZmlsZUZvckRvd25sb2FkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5kZWZhdWx0U3RhdGU7XG4gICAgICAgIHRoaXMuc3RhdGUuZG93bmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmRvd25sb2FkRmlsZSh0aGlzLnJlc29sdmVQYXJlbnRUYXNrSWQoKSxcbiAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnN0cmluZ0lkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgaWYgKCEocmVzcG9uc2UgYXMgUHJvdmlkZXJQcm9ncmVzcykudHlwZSB8fCAocmVzcG9uc2UgYXMgUHJvdmlkZXJQcm9ncmVzcykudHlwZSAhPT0gUHJvZ3Jlc3NUeXBlLkRPV05MT0FEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKGBGaWxlIFske3RoaXMuZGF0YUZpZWxkLnN0cmluZ0lkfV0gJHt0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lfSB3YXMgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWRgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkVmlhQW5jaG9yKHJlc3BvbnNlIGFzIEJsb2IpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbGVQcmV2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdERvd25sb2FkRmlsZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnByb2dyZXNzID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC5kb3dubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGBEb3dubG9hZGluZyBmaWxlIFske3RoaXMuZGF0YUZpZWxkLnN0cmluZ0lkfV0gJHt0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lfSBoYXMgZmFpbGVkIWAsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUgKyAnICcgKyB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLnNuYWNrQmFyLmRvd25sb2FkRmFpbCcpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5kb3dubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5wcm9ncmVzcyA9IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdERvd25sb2FkRmlsZShyZXNwb25zZTogQmxvYiB8IFByb3ZpZGVyUHJvZ3Jlc3MpIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldmlld0V4dGVuc2lvbiA9PT0gRmlsZVByZXZpZXdUeXBlLnBkZikge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZUZvckRvd25sb2FkID0gbmV3IEJsb2IoW3Jlc3BvbnNlXSwge3R5cGU6ICdhcHBsaWNhdGlvbi9wZGYnfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mdWxsU291cmNlLm5leHQodGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChVUkwuY3JlYXRlT2JqZWN0VVJMKHRoaXMuZmlsZUZvckRvd25sb2FkKSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JEb3dubG9hZCA9IG5ldyBCbG9iKFtyZXNwb25zZV0sIHt0eXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ30pO1xuICAgICAgICAgICAgICAgIHRoaXMuZnVsbFNvdXJjZS5uZXh0KHRoaXMuX3Nhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFVSTC5jcmVhdGVPYmplY3RVUkwodGhpcy5maWxlRm9yRG93bmxvYWQpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZG93bmxvYWRWaWFBbmNob3IoYmxvYjogQmxvYik6IHZvaWQge1xuICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICAgICAgICBhLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZGlzcGxheTogbm9uZScpO1xuICAgICAgICBpZiAoIXRoaXMuZmlsZUZvckRvd25sb2FkKSB7XG4gICAgICAgICAgICBibG9iID0gbmV3IEJsb2IoW2Jsb2JdLCB7dHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSd9KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTCghIXRoaXMuZmlsZUZvckRvd25sb2FkID8gdGhpcy5maWxlRm9yRG93bmxvYWQgOiBibG9iKTtcbiAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICBhLmRvd25sb2FkID0gdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZTtcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVGaWxlKCkge1xuICAgICAgICBpZiAoIXRoaXMuZGF0YUZpZWxkLnZhbHVlIHx8ICF0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnRhc2tJZCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdGaWxlIGNhbm5vdCBiZSBkZWxldGVkLiBObyB0YXNrIGlzIHNldCB0byB0aGUgZmllbGQuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmRlbGV0ZUZpbGUodGhpcy50YXNrSWQsXG4gICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC5zdHJpbmdJZCkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IHRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQudmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC51cGRhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC5kb3dubG9hZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5mdWxsU291cmNlLm5leHQodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JEb3dubG9hZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdTb3VyY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlRm9yUHJldmlldyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoYEZpbGUgWyR7dGhpcy5kYXRhRmllbGQuc3RyaW5nSWR9XSAke2ZpbGVuYW1lfSB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWRgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGBEZWxldGluZyBmaWxlIFske3RoaXMuZGF0YUZpZWxkLnN0cmluZ0lkfV0gJHt0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lfSBoYXMgZmFpbGVkIWAsIHJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuRXJyb3JTbmFja0JhcihcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZSArICcgJyArIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdkYXRhRmllbGQuc25hY2tCYXIuZmlsZURlbGV0ZUZhaWxlZCcpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmRhdGFGaWVsZC52YWx1ZSB8fCAhdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IGRlZmF1bHRTdGF0ZSgpOiBGaWxlU3RhdGUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJvZ3Jlc3M6IDAsXG4gICAgICAgICAgICBjb21wbGV0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGZhbHNlLFxuICAgICAgICAgICAgdXBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGRvd25sb2FkaW5nOiBmYWxzZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdCBkaXNwbGF5IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdERpc3BsYXlOYW1lKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICghIXRoaXMuZGF0YUZpZWxkKSB7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmRhdGFGaWVsZC52YWx1ZSAmJiAhIXRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoISF0aGlzLmRhdGFGaWVsZC5wbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFGaWVsZC5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ2RhdGFGaWVsZC5maWxlLm5vRmlsZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgZmlsZSBmaWVsZCBpbWFnZSBmcm9tIGJhY2tlbmQgaWYgaXQgaXMgaW1hZ2UgdHlwZS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaW5pdEZpbGVGaWVsZEltYWdlKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tGaWxlQmVmb3JlRG93bmxvYWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUuZG93bmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmRvd25sb2FkRmlsZVByZXZpZXcodGhpcy5yZXNvbHZlUGFyZW50VGFza0lkKCksIHRoaXMuZGF0YUZpZWxkLnN0cmluZ0lkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZyhgUHJldmlldyBvZiBmaWxlIFske3RoaXMuZGF0YUZpZWxkLnN0cmluZ0lkfV0gJHt0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lfSB3YXMgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWRgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JQcmV2aWV3ID0gbmV3IEJsb2IoW3Jlc3BvbnNlXSwge3R5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3U291cmNlID0gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoVVJMLmNyZWF0ZU9iamVjdFVSTCh0aGlzLmZpbGVGb3JQcmV2aWV3KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCB8fCByZXNwb25zZSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmRvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihgRG93bmxvYWRpbmcgZmlsZSBbJHt0aGlzLmRhdGFGaWVsZC5zdHJpbmdJZH1dICR7dGhpcy5kYXRhRmllbGQudmFsdWUubmFtZX0gaGFzIGZhaWxlZCFgLCBlcnJvcik7XG4gICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuRXJyb3JTbmFja0JhcihcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lICsgJyAnICsgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ2RhdGFGaWVsZC5zbmFja0Jhci5kb3dubG9hZEZhaWwnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUucHJvZ3Jlc3MgPSAwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrRmlsZUJlZm9yZURvd25sb2FkKCkge1xuICAgICAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudGFza0lkKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ0ZpbGUgY2Fubm90IGJlIGRvd25sb2FkZWQuIE5vIHRhc2sgaXMgc2V0IHRvIHRoZSBmaWVsZC4nKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd1ByZXZpZXdEaWFsb2coKSB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0ZpbGVCZWZvcmVEb3dubG9hZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGFza1Jlc291cmNlU2VydmljZS5kb3dubG9hZEZpbGUodGhpcy50YXNrSWQsIHRoaXMuZGF0YUZpZWxkLnN0cmluZ0lkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgaWYgKCEocmVzcG9uc2UgYXMgUHJvdmlkZXJQcm9ncmVzcykudHlwZSB8fCAocmVzcG9uc2UgYXMgUHJvdmlkZXJQcm9ncmVzcykudHlwZSAhPT0gUHJvZ3Jlc3NUeXBlLkRPV05MT0FEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKGBGaWxlIFske3RoaXMuZGF0YUZpZWxkLnN0cmluZ0lkfV0gJHt0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lfSB3YXMgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWRgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXREb3dubG9hZEZpbGUocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoYERvd25sb2FkaW5nIGZpbGUgWyR7dGhpcy5kYXRhRmllbGQuc3RyaW5nSWR9XSAke3RoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWV9IGhhcyBmYWlsZWQhYCwgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fc25hY2tiYXIub3BlbkVycm9yU25hY2tCYXIoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZSArICcgJyArIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdkYXRhRmllbGQuc25hY2tCYXIuZG93bmxvYWRGYWlsJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLnByb2dyZXNzID0gMDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoYW5nZU1heFdpZHRoKGV2ZW50OiBSZXNpemVkRXZlbnQpIHtcbiAgICAgICAgaWYgKCEhdGhpcy5pbWFnZUVsKSB7XG4gICAgICAgICAgICB0aGlzLmltYWdlRWwubmF0aXZlRWxlbWVudC5zdHlsZS5tYXhXaWR0aCA9IGV2ZW50Lm5ld1JlY3Qud2lkdGggKyAncHgnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplUHJldmlld0lmRGlzcGxheWFibGUoKSB7XG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9IHRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUuc3BsaXQoJy4nKS5yZXZlcnNlKClbMF07XG4gICAgICAgIHRoaXMuaXNEaXNwbGF5YWJsZSA9IE9iamVjdC52YWx1ZXMoRmlsZVByZXZpZXdUeXBlKS5pbmNsdWRlcyhleHRlbnNpb24gYXMgYW55KTtcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwbGF5YWJsZSkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3RXh0ZW5zaW9uID0gRmlsZVByZXZpZXdUeXBlW2V4dGVuc2lvbl07XG4gICAgICAgICAgICB0aGlzLmluaXRGaWxlRmllbGRJbWFnZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmxheW91dCAmJiB0aGlzLmRhdGFGaWVsZC5sYXlvdXQucm93cyAmJiB0aGlzLmRhdGFGaWVsZC5sYXlvdXQucm93cyAhPT0gMSA/XG4gICAgICAgICAgICAodGhpcy5kYXRhRmllbGQubGF5b3V0LnJvd3MpICogZmllbGRIZWlnaHQgLSBmaWVsZFBhZGRpbmcgOiBmaWVsZEhlaWdodCAtIGZpZWxkUGFkZGluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UHJldmlld0JvcmRlcldpZHRoKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmJvcmRlclByb3BlcnR5RW5hYmxlZCgnYm9yZGVyV2lkdGgnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzLmJvcmRlcldpZHRoICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7QWJzdHJhY3RGaWxlRmllbGRDb21wb25lbnQuREVGQVVMVF9QUkVWSUVXX0JPUkRFUl9XSURUSH1weGA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFByZXZpZXdCb3JkZXJTdHlsZSgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5ib3JkZXJQcm9wZXJ0eUVuYWJsZWQoJ2JvcmRlclN0eWxlJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFGaWVsZC5jb21wb25lbnQucHJvcGVydGllcy5ib3JkZXJTdHlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQWJzdHJhY3RGaWxlRmllbGRDb21wb25lbnQuREVGQVVMVF9QUkVWSUVXX0JPUkRFUl9TVFlMRTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UHJldmlld0JvcmRlckNvbG9yKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmJvcmRlclByb3BlcnR5RW5hYmxlZCgnYm9yZGVyQ29sb3InKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzLmJvcmRlckNvbG9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBBYnN0cmFjdEZpbGVGaWVsZENvbXBvbmVudC5ERUZBVUxUX1BSRVZJRVdfQk9SREVSX0NPTE9SO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0JvcmRlckxHQlRRKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5ib3JkZXJQcm9wZXJ0eUVuYWJsZWQoJ2JvcmRlckxHQlRRJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFGaWVsZC5jb21wb25lbnQucHJvcGVydGllcy5ib3JkZXJMR0JUUSA9PT0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNCb3JkZXJEZWZhdWx0KCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5ib3JkZXJQcm9wZXJ0eUVuYWJsZWQoJ2JvcmRlckVuYWJsZWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzLmJvcmRlckVuYWJsZWQgPT09ICd0cnVlJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGJvcmRlclByb3BlcnR5RW5hYmxlZChwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudCAmJiAhIXRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzICYmIHByb3BlcnR5IGluIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlUGFyZW50VGFza0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZGF0YUZpZWxkLnBhcmVudFRhc2tJZCA/IHRoaXMuZGF0YUZpZWxkLnBhcmVudFRhc2tJZCA6IHRoaXMudGFza0lkO1xuICAgIH1cbn1cbiJdfQ==
425
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtZmlsZS1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL2RhdGEtZmllbGRzL2ZpbGUtZmllbGQvYWJzdHJhY3QtZmlsZS1maWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFZLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQy9ELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBRW5GLE9BQU8sRUFBQyxZQUFZLEVBQW1CLE1BQU0sMkNBQTJDLENBQUM7QUFJekYsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFFbEYsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFFckQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQWNwQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFFMUIsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBRXZCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUV4Qjs7R0FFRztBQUtILE1BQU0sT0FBZ0IsMEJBQTJCLFNBQVEsMEJBQTBCO0lBdUUvRTs7Ozs7Ozs7OztPQVVHO0lBQ0gsWUFBZ0Msb0JBQXlDLEVBQ3pDLElBQW1CLEVBQ25CLFNBQTBCLEVBQzFCLFVBQTRCLEVBQzVCLGFBQTJCLEVBQ2Msc0JBQXNDLEVBQy9FLFVBQXdCO1FBQ3BELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBUEYseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQUN6QyxTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBRTNCLGVBQVUsR0FBVixVQUFVLENBQWM7UUF0RHhEOztXQUVHO1FBQ0ksZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDM0I7O1dBRUc7UUFDSSxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQWlEekIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxRQUFRO1FBQ0osS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJO2VBQ3ZGLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7SUFDckQsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLENBQUMsQ0FBQztTQUNMO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO2lCQUN6QzthQUNKO1NBQ0o7UUFDRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFFLEdBQUcsRUFBRTtZQUNuRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVzttQkFDZixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO21CQUN0QixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQzthQUN6QztRQUNMLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELFdBQVc7UUFDUCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVNLFVBQVU7UUFDYixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQ25ELE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTTtRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDOUYsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1lBQ3pFLE9BQU87U0FDVjtRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUk7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDLENBQUM7WUFDbkcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUMzQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CO1lBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDMUYsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQzNHLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQzNDLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDNUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBUyxDQUFDO1FBQzNFLE1BQU0sSUFBSSxHQUFvQixFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDM0QsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUM7YUFDMUYsU0FBUyxDQUFDLENBQUMsUUFBcUMsRUFBRSxFQUFFO1lBQ2pELElBQUssUUFBNkIsQ0FBQyxJQUFJLElBQUssUUFBNkIsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLE1BQU0sRUFBRTtnQkFDcEcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUksUUFBNkIsQ0FBQyxRQUFRLENBQUM7YUFDakU7aUJBQU07Z0JBQ0gsTUFBTSxnQkFBZ0IsR0FBcUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQ0FBaUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xILElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQ1gsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksNEJBQTRCLENBQ3RILENBQUM7Z0JBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2dCQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUM5QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO2lCQUN6QztnQkFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7YUFDOUM7UUFDTCxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQ1gsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQ3BILENBQUM7WUFDRixJQUFJLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUNsRjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLHFDQUFxQyxDQUFDLENBQUMsQ0FBQzthQUNwRztZQUNELElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU0sUUFBUTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsRUFBRTtZQUNqQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDN0MsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUM3RCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUUsUUFBNkIsQ0FBQyxJQUFJLElBQUssUUFBNkIsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLFFBQVEsRUFBRTtnQkFDdkcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLDhCQUE4QixDQUFDLENBQUM7Z0JBQzlHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFnQixDQUFDLENBQUM7Z0JBQ3pDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNuQztnQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2FBQ3BDO1FBQ0wsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pILElBQUksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQzVCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsaUNBQWlDLENBQUMsQ0FDL0YsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsUUFBaUM7UUFDdEQsSUFBSSxRQUFRLFlBQVksSUFBSSxFQUFFO1lBQzFCLElBQUksSUFBSSxDQUFDLGdCQUFnQixLQUFLLGVBQWUsQ0FBQyxHQUFHLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBQyxDQUFDLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ25IO2lCQUFNO2dCQUNILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFDLElBQUksRUFBRSwwQkFBMEIsRUFBQyxDQUFDLENBQUM7Z0JBQ2hGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNHO1NBQ0o7SUFDTCxDQUFDO0lBRVMsaUJBQWlCLENBQUMsSUFBVTtRQUNsQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3ZCLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUMsSUFBSSxFQUFFLDBCQUEwQixFQUFDLENBQUMsQ0FBQztTQUMvRDtRQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RixDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNWLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTSxVQUFVO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ3JELE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsc0RBQXNELENBQUMsQ0FBQztZQUN4RSxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM1RCxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2xCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO2dCQUMvQixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsS0FBSyxRQUFRLDJCQUEyQixDQUFDLENBQUM7Z0JBQzFGLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDcEM7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksY0FBYyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxxQ0FBcUMsQ0FBQyxDQUNuRyxDQUFDO2FBQ0w7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPO1FBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQy9ELENBQUM7SUFFRCxJQUFjLFlBQVk7UUFDdEIsT0FBTztZQUNILFFBQVEsRUFBRSxDQUFDO1lBQ1gsU0FBUyxFQUFFLEtBQUs7WUFDaEIsS0FBSyxFQUFFLEtBQUs7WUFDWixTQUFTLEVBQUUsS0FBSztZQUNoQixXQUFXLEVBQUUsS0FBSztTQUNyQixDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ksb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtnQkFDdkQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDcEM7aUJBQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3JDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7YUFDckM7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxrQkFBa0I7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxFQUFFO1lBQ2pDLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDcEgsSUFBSSxRQUFRLFlBQVksSUFBSSxFQUFFO2dCQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSw4QkFBOEIsQ0FBQyxDQUFDO2dCQUN6SCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsMEJBQTBCLEVBQUMsQ0FBQyxDQUFDO2dCQUMvRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQzthQUN6RztZQUNELElBQUksUUFBUSxJQUFJLElBQUksSUFBSSxRQUFRLFlBQVksSUFBSSxFQUFFO2dCQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7YUFDbEM7UUFDTCxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUMvRixDQUFDO1lBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDaEIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7WUFDM0UsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0saUJBQWlCO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsRUFBRTtZQUNqQyxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDOUYsSUFBSSxDQUFFLFFBQTZCLENBQUMsSUFBSSxJQUFLLFFBQTZCLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxRQUFRLEVBQUU7Z0JBQ3ZHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSw4QkFBOEIsQ0FBQyxDQUFDO2dCQUM5RyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDbkM7UUFDTCxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUMvRixDQUFDO1lBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGNBQWMsQ0FBQyxLQUFtQjtRQUNyQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQzFFO0lBQ0wsQ0FBQztJQUVPLDhCQUE4QjtRQUNsQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBZ0IsQ0FBQyxDQUFDO1FBQy9FLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzdCO0lBQ0wsQ0FBQztJQUVNLFNBQVM7UUFDWixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDNUYsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDO0lBQy9GLENBQUM7SUFFTSxxQkFBcUI7UUFDeEIsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUNqRTtRQUNELE9BQU8sR0FBRywwQkFBMEIsQ0FBQyw0QkFBNEIsSUFBSSxDQUFDO0lBQzFFLENBQUM7SUFFTSxxQkFBcUI7UUFDeEIsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1NBQzFEO1FBQ0QsT0FBTywwQkFBMEIsQ0FBQyw0QkFBNEIsQ0FBQztJQUNuRSxDQUFDO0lBRU0scUJBQXFCO1FBQ3hCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzNDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztTQUMxRDtRQUNELE9BQU8sMEJBQTBCLENBQUMsNEJBQTRCLENBQUM7SUFDbkUsQ0FBQztJQUVNLGFBQWE7UUFDaEIsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQztTQUNyRTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxlQUFlO1FBQ2xCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQzdDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUM7U0FDdkU7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU0scUJBQXFCLENBQUMsUUFBZ0I7UUFDekMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO0lBQ2xJLENBQUM7SUFFUyxtQkFBbUI7UUFDekIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JGLENBQUM7O0FBNWNEOztHQUVHO0FBQ29CLHVEQUE0QixHQUFHLENBQUUsQ0FBQTtBQUN4RDs7R0FFRztBQUNvQix1REFBNEIsR0FBRyxNQUFPLENBQUE7QUFDN0Q7O0dBRUc7QUFDb0IsdURBQTRCLEdBQUcsT0FBUSxDQUFBO3dIQWI1QywwQkFBMEIsNktBdUZGLDZCQUE2Qjs0R0F2RnJELDBCQUEwQiwyYUFGbEMsRUFBRTs0RkFFTSwwQkFBMEI7a0JBSi9DLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsUUFBUSxFQUFFLEVBQUU7aUJBQ2Y7OzBCQXdGMEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw2QkFBNkI7dUVBcEV2RCxNQUFNO3NCQUFyQixLQUFLO2dCQUlVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBSStCLFlBQVk7c0JBQWhELFNBQVM7dUJBQUMsaUJBQWlCO2dCQUlDLE9BQU87c0JBQW5DLFNBQVM7dUJBQUMsU0FBUztnQkFFVSxVQUFVO3NCQUF2QyxTQUFTO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGaWxlRmllbGQsIEZpbGVQcmV2aWV3VHlwZX0gZnJvbSAnLi9tb2RlbHMvZmlsZS1maWVsZCc7XG5pbXBvcnQge0Fic3RyYWN0RGF0YUZpZWxkQ29tcG9uZW50fSBmcm9tICcuLi9tb2RlbHMvYWJzdHJhY3QtZGF0YS1maWVsZC1jb21wb25lbnQnO1xuaW1wb3J0IHtUYXNrUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L3Rhc2stcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge1Byb2dyZXNzVHlwZSwgUHJvdmlkZXJQcm9ncmVzc30gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3Jlc291cmNlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dnZXIvc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtTbmFja0JhclNlcnZpY2V9IGZyb20gJy4uLy4uL3NuYWNrLWJhci9zZXJ2aWNlcy9zbmFjay1iYXIuc2VydmljZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtOQUVfSU5GT1JNX0FCT1VUX0lOVkFMSURfREFUQX0gZnJvbSAnLi4vbW9kZWxzL2ludmFsaWQtZGF0YS1wb2xpY3ktdG9rZW4nO1xuaW1wb3J0IHtEb21TYW5pdGl6ZXIsIFNhZmVVcmx9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7UmVzaXplZEV2ZW50fSBmcm9tICdhbmd1bGFyLXJlc2l6ZS1ldmVudCc7XG5pbXBvcnQge3Rha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7RXZlbnRPdXRjb21lTWVzc2FnZVJlc291cmNlfSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL21lc3NhZ2UtcmVzb3VyY2UnO1xuaW1wb3J0IHtFdmVudFNlcnZpY2V9IGZyb20gJy4uLy4uL2V2ZW50L3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtDaGFuZ2VkRmllbGRzTWFwfSBmcm9tICcuLi8uLi9ldmVudC9zZXJ2aWNlcy9pbnRlcmZhY2VzL2NoYW5nZWQtZmllbGRzLW1hcCc7XG5pbXBvcnQge0ZpbGVGaWVsZElkQm9keX0gZnJvbSAnLi4vbW9kZWxzL2ZpbGUtZmllbGQtaWQtYm9keSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVN0YXRlIHtcbiAgICBwcm9ncmVzczogbnVtYmVyO1xuICAgIHVwbG9hZGluZzogYm9vbGVhbjtcbiAgICBkb3dubG9hZGluZzogYm9vbGVhbjtcbiAgICBjb21wbGV0ZWQ6IGJvb2xlYW47XG4gICAgZXJyb3I6IGJvb2xlYW47XG59XG5cbmNvbnN0IHByZXZpZXcgPSAncHJldmlldyc7XG5cbmNvbnN0IGZpZWxkSGVpZ2h0ID0gNzU7XG5cbmNvbnN0IGZpZWxkUGFkZGluZyA9IDE2O1xuXG4vKipcbiAqIENvbXBvbmVudCB0aGF0IGlzIGNyZWF0ZWQgaW4gdGhlIGJvZHkgb2YgdGhlIHRhc2sgcGFuZWwgYWNjb3JkIG9uIHRoZSBQZXRyaSBOZXQsIHdoaWNoIG11c3QgYmUgYmluZCBwcm9wZXJ0aWVzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1maWxlLWZpZWxkJyxcbiAgICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RGaWxlRmllbGRDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdERhdGFGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8qKlxuICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgZGVmYXVsdCBmaWxlIHByZXZpZXcgYm9yZGVyIGluIHBpeGVscy4gVGhlIGBweGAgc3RyaW5nIGlzIGFwcGVuZGVkIGluIHRoZSBjb2RlLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9QUkVWSUVXX0JPUkRFUl9XSURUSCA9IDA7XG4gICAgLyoqXG4gICAgICogVGhlIENTUyBzdHlsZSBhdHRyaWJ1dGUgb2YgdGhlIGRlZmF1bHQgZmlsZSBwcmV2aWV3IGJvcmRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUFJFVklFV19CT1JERVJfU1RZTEUgPSAnbm9uZSc7XG4gICAgLyoqXG4gICAgICogVGhlIENTUyBjb2xvciBzdHJpbmcgb2YgdGhlIGRlZmF1bHQgZmlsZSBwcmV2aWV3IGJvcmRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfUFJFVklFV19CT1JERVJfQ09MT1IgPSAnYmxhY2snO1xuXG4gICAgcHVibGljIHN0YXRlOiBGaWxlU3RhdGU7XG4gICAgLyoqXG4gICAgICogVGFzayBtb25nbyBzdHJpbmcgaWQgaXMgYmluZGluZyBwcm9wZXJ0eSBmcm9tIHBhcmVudCBjb21wb25lbnQuXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHRhc2tJZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEJpbmRpbmcgcHJvcGVydHkgYXMgaW5zdGFuY2UgZnJvbSBwYXJlbnQgY29tcG9uZW50LlxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkYXRhRmllbGQ6IEZpbGVGaWVsZDtcbiAgICAvKipcbiAgICAgKiBGaWxlIHBpY2tlciBlbGVtZW50IHJlZmVyZW5jZSBmcm9tIGNvbXBvbmVudCB0ZW1wbGF0ZSB0aGF0IGlzIGluaXRpYWxpemVkIGFmdGVyIHZpZXcgaW5pdC5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdmaWxlVXBsb2FkSW5wdXQnKSBwdWJsaWMgZmlsZVVwbG9hZEVsOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICAgIC8qKlxuICAgICAqIEltYWdlIGZpZWxkIHZpZXcgZWxlbWVudCByZWZlcmVuY2UgZnJvbSBjb21wb25lbnQgdGVtcGxhdGUgdGhhdCBpcyBpbml0aWFsaXplZCBhZnRlciB2aWV3IGluaXQuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaW1hZ2VFbCcpIHB1YmxpYyBpbWFnZUVsOiBFbGVtZW50UmVmO1xuXG4gICAgQFZpZXdDaGlsZCgnaW1hZ2VEaXYnKSBwdWJsaWMgaW1hZ2VEaXZFbDogRWxlbWVudFJlZjtcbiAgICAvKipcbiAgICAgKiBJZiBmaWxlIHByZXZpZXcgc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgICAqL1xuICAgIHB1YmxpYyBmaWxlUHJldmlldyA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIElmIGZpbGUgdHlwZSBjYW4gYmUgZGlzcGxheWVkXG4gICAgICovXG4gICAgcHVibGljIGlzRGlzcGxheWFibGUgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBNYXggaGVpZ2h0IG9mIHByZXZpZXdcbiAgICAgKi9cbiAgICBwcml2YXRlIG1heEhlaWdodDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFN0b3JlIGZpbGUgZm9yIHByZXZpZXdcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbGVGb3JQcmV2aWV3OiBCbG9iO1xuICAgIC8qKlxuICAgICAqIFVybCBvZiBwcmV2aWV3IGZpbGVcbiAgICAgKi9cbiAgICBwdWJsaWMgcHJldmlld1NvdXJjZTogU2FmZVVybDtcbiAgICAvKipcbiAgICAgKiBTdG9yZSBmaWxlIHRvIHNob3cvZG93bmxvYWRcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbGVGb3JEb3dubG9hZDogQmxvYjtcbiAgICAvKipcbiAgICAgKiBGdWxsIHNpemUgZmlsZSB1cmxcbiAgICAgKi9cbiAgICBwdWJsaWMgZnVsbFNvdXJjZTogQmVoYXZpb3JTdWJqZWN0PFNhZmVVcmw+O1xuICAgIC8qKlxuICAgICAqIEV4dGVuc2lvbiBvZiBmaWxlIHRvIHByZXZpZXdcbiAgICAgKi9cbiAgICBwdWJsaWMgcHJldmlld0V4dGVuc2lvbjogRmlsZVByZXZpZXdUeXBlO1xuICAgIC8qKlxuICAgICAqIEZvcm0gY29udHJvbCBzdWJzY3JpcHRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZWRGaWVsZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqXG4gICAgICogT25seSBpbmplY3Qgc2VydmljZXMuXG4gICAgICogQHBhcmFtIF90YXNrUmVzb3VyY2VTZXJ2aWNlIFByb3ZpZGVzIHRvIGRvd25sb2FkIGEgZmlsZSBmcm9tIHRoZSBiYWNrZW5kXG4gICAgICogQHBhcmFtIF9sb2cgTG9nZ2VyIHNlcnZpY2VcbiAgICAgKiBAcGFyYW0gX3NuYWNrYmFyIFNuYWNrYmFyIHNlcnZpY2UgdG8gbm90aWZ5IHVzZXJcbiAgICAgKiBAcGFyYW0gX3RyYW5zbGF0ZSBUcmFuc2xhdGUgc2VydmljZSBmb3IgSTE4TlxuICAgICAqIEBwYXJhbSBfZXZlbnRTZXJ2aWNlIHVzZWQgZm9yIHBhcnNpbmcgb2YgYmFja2VuZCByZXNwb25zZVxuICAgICAqIEBwYXJhbSBpbmZvcm1BYm91dEludmFsaWREYXRhIHdoZXRoZXIgdGhlIGJhY2tlbmQgc2hvdWxkIGJlIG5vdGlmaWVkIGFib3V0IGludmFsaWQgdmFsdWVzLlxuICAgICAqIE9wdGlvbiBpbmplY3RlZCB0cm91Z2ggYE5BRV9JTkZPUk1fQUJPVVRfSU5WQUxJRF9EQVRBYCBJbmplY3Rpb25Ub2tlblxuICAgICAqIEBwYXJhbSBfc2FuaXRpemVyIFNhbml0aXplIHVybCBvZiBpbWFnZSBwcmV2aWV3XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfdGFza1Jlc291cmNlU2VydmljZTogVGFza1Jlc291cmNlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfc25hY2tiYXI6IFNuYWNrQmFyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkFFX0lORk9STV9BQk9VVF9JTlZBTElEX0RBVEEpIGluZm9ybUFib3V0SW52YWxpZERhdGE6IGJvb2xlYW4gfCBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Nhbml0aXplcjogRG9tU2FuaXRpemVyKSB7XG4gICAgICAgIHN1cGVyKGluZm9ybUFib3V0SW52YWxpZERhdGEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5kZWZhdWx0U3RhdGU7XG4gICAgICAgIHRoaXMuZnVsbFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2FmZVVybD4obnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IDpcbiAgICAgKiAgLSBGaWxlIGZpZWxkIHRvIFtGaWxlRmllbGRTZXJ2aWNlXXtAbGluayBGaWxlRmllbGRTZXJ2aWNlfVxuICAgICAqICAtIERpc3BsYXkgbmFtZVxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmZpbGVQcmV2aWV3ID0gdGhpcy5kYXRhRmllbGQgJiYgdGhpcy5kYXRhRmllbGQuY29tcG9uZW50ICYmIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5uYW1lXG4gICAgICAgICAgICAmJiB0aGlzLmRhdGFGaWVsZC5jb21wb25lbnQubmFtZSA9PT0gcHJldmlldztcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbGVVcGxvYWRFbCkge1xuICAgICAgICAgICAgdGhpcy5maWxlVXBsb2FkRWwubmF0aXZlRWxlbWVudC5vbmNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWxlUHJldmlldykge1xuICAgICAgICAgICAgaWYgKCEhdGhpcy5pbWFnZURpdkVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxpemVQcmV2aWV3SWZEaXNwbGF5YWJsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZWRGaWVsZFN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YUZpZWxkLnVwZGF0ZWQuc3Vic2NyaWJlKCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmZpbGVQcmV2aWV3XG4gICAgICAgICAgICAgICAgJiYgISF0aGlzLmRhdGFGaWVsZC52YWx1ZVxuICAgICAgICAgICAgICAgICYmICEhdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZVByZXZpZXdJZkRpc3BsYXlhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZnVsbFNvdXJjZS5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZWRGaWVsZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaG9vc2VGaWxlKCkge1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS51cGxvYWRpbmcgfHwgdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDYWxsIGFmdGVyIGNsaWNrIG9uIGZpbGUgZmllbGQuXG4gICAgICpcbiAgICAgKiBJZiBmaWxlIGZpZWxkIGhhcyBubyBmaWxlIHVwbG9hZGVkXG4gICAgICogW0ZpbGVzVXBsb2FkQ29tcG9uZW50XXtAbGluayBBYnN0cmFjdEZpbGVzVXBsb2FkQ29tcG9uZW50fSB2aWEgW1NpZGVNZW51XXtAbGluayBTaWRlTWVudVNlcnZpY2V9IG9wZW5zLlxuICAgICAqXG4gICAgICogT3RoZXJ3aXNlIG9wZW5zIGEgZmlsZSBwaWNrZXIgZnJvbSB3aGljaCB0aGUgdXNlciBjYW4gc2VsZWN0IGZpbGVzLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGxvYWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5maWxlVXBsb2FkRWwubmF0aXZlRWxlbWVudC5maWxlcyB8fCB0aGlzLmZpbGVVcGxvYWRFbC5uYXRpdmVFbGVtZW50LmZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy50YXNrSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignRmlsZSBjYW5ub3QgYmUgdXBsb2FkZWQuIE5vIHRhc2sgaXMgc2V0IHRvIHRoZSBmaWVsZC4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhRmllbGQudmFsdWUgJiZcbiAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUgJiZcbiAgICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQuZmlsZXMuaXRlbSgwKS5uYW1lID09PSB0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ1VzZXIgY2hvc2UgdGhlIHNhbWUgZmlsZS4gVXBsb2FkaW5nIHNraXBwZWQnKTtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdkYXRhRmllbGQuc25hY2tCYXIud29udFVwbG9hZFNhbWVGaWxlJykpO1xuICAgICAgICAgICAgdGhpcy5maWxlVXBsb2FkRWwubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGFGaWVsZC5tYXhVcGxvYWRTaXplSW5CeXRlcyAmJlxuICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQubWF4VXBsb2FkU2l6ZUluQnl0ZXMgPCB0aGlzLmZpbGVVcGxvYWRFbC5uYXRpdmVFbGVtZW50LmZpbGVzLml0ZW0oMCkuc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKCdGaWxlIGNhbm5vdCBiZSB1cGxvYWRlZC4gTWF4aW11bSBzaXplIG9mIGZpbGUgZXhjZWVkZWQuJyk7XG4gICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuRXJyb3JTbmFja0JhcihcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLnNuYWNrQmFyLm1heEZpbGVzU2l6ZUV4Y2VlZGVkJykgKyB0aGlzLmRhdGFGaWVsZC5tYXhVcGxvYWRTaXplSW5CeXRlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gdGhpcy5kZWZhdWx0U3RhdGU7XG4gICAgICAgIHRoaXMuc3RhdGUudXBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZmlsZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGNvbnN0IGZpbGVUb1VwbG9hZCA9IHRoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQuZmlsZXMuaXRlbSgwKSBhcyBGaWxlO1xuICAgICAgICBjb25zdCBkYXRhOiBGaWxlRmllbGRJZEJvZHkgPSB7fTtcbiAgICAgICAgZGF0YVt0aGlzLnJlc29sdmVQYXJlbnRUYXNrSWQoKV0gPSB0aGlzLmRhdGFGaWVsZC5zdHJpbmdJZDtcbiAgICAgICAgZmlsZUZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGVUb1VwbG9hZCk7XG4gICAgICAgIGZpbGVGb3JtRGF0YS5hcHBlbmQoJ2RhdGEnLCBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoZGF0YSldLCB7dHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nfSkpO1xuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLnVwbG9hZEZpbGUodGhpcy50YXNrSWQsIHRoaXMuZGF0YUZpZWxkLnN0cmluZ0lkLCBmaWxlRm9ybURhdGEsIGZhbHNlKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgocmVzcG9uc2UgYXMgUHJvdmlkZXJQcm9ncmVzcykudHlwZSAmJiAocmVzcG9uc2UgYXMgUHJvdmlkZXJQcm9ncmVzcykudHlwZSA9PT0gUHJvZ3Jlc3NUeXBlLlVQTE9BRCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnByb2dyZXNzID0gKHJlc3BvbnNlIGFzIFByb3ZpZGVyUHJvZ3Jlc3MpLnByb2dyZXNzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZWRGaWVsZHNNYXA6IENoYW5nZWRGaWVsZHNNYXAgPSB0aGlzLl9ldmVudFNlcnZpY2UucGFyc2VDaGFuZ2VkRmllbGRzRnJvbU91dGNvbWVUcmVlKHJlc3BvbnNlLm91dGNvbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC5lbWl0Q2hhbmdlZEZpZWxkcyhjaGFuZ2VkRmllbGRzTWFwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKFxuICAgICAgICAgICAgICAgICAgICAgICAgYEZpbGUgWyR7dGhpcy5kYXRhRmllbGQuc3RyaW5nSWR9XSAke3RoaXMuZmlsZVVwbG9hZEVsLm5hdGl2ZUVsZW1lbnQuZmlsZXMuaXRlbSgwKS5uYW1lfSB3YXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkYFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS51cGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLmRvd25sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZSA9IGZpbGVUb1VwbG9hZC5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maWxlUHJldmlldykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplUHJldmlld0lmRGlzcGxheWFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZ1bGxTb3VyY2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JEb3dubG9hZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQudG91Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC51cGRhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlVXBsb2FkRWwubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmNvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS51cGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnByb2dyZXNzID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBGaWxlIFske3RoaXMuZGF0YUZpZWxkLnN0cmluZ0lkfV0gJHt0aGlzLmZpbGVVcGxvYWRFbC5uYXRpdmVFbGVtZW50LmZpbGVzLml0ZW0oMCl9IHVwbG9hZGluZyBoYXMgZmFpbGVkIWAsIGVycm9yXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3I/LmVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KGVycm9yLmVycm9yLm1lc3NhZ2UpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuRXJyb3JTbmFja0Jhcih0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLnNuYWNrQmFyLmZpbGVVcGxvYWRGYWlsZWQnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnRvdWNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC51cGRhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVVcGxvYWRFbC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZG93bmxvYWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0ZpbGVCZWZvcmVEb3dubG9hZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEhdGhpcy5maWxlRm9yRG93bmxvYWQpIHtcbiAgICAgICAgICAgIHRoaXMuZG93bmxvYWRWaWFBbmNob3IodGhpcy5maWxlRm9yRG93bmxvYWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLmRlZmF1bHRTdGF0ZTtcbiAgICAgICAgdGhpcy5zdGF0ZS5kb3dubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3Rhc2tSZXNvdXJjZVNlcnZpY2UuZG93bmxvYWRGaWxlKHRoaXMucmVzb2x2ZVBhcmVudFRhc2tJZCgpLFxuICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQuc3RyaW5nSWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBpZiAoIShyZXNwb25zZSBhcyBQcm92aWRlclByb2dyZXNzKS50eXBlIHx8IChyZXNwb25zZSBhcyBQcm92aWRlclByb2dyZXNzKS50eXBlICE9PSBQcm9ncmVzc1R5cGUuRE9XTkxPQUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoYEZpbGUgWyR7dGhpcy5kYXRhRmllbGQuc3RyaW5nSWR9XSAke3RoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWV9IHdhcyBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZGApO1xuICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRWaWFBbmNob3IocmVzcG9uc2UgYXMgQmxvYik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsZVByZXZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0RG93bmxvYWRGaWxlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5kb3dubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUucHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLmRvd25sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoYERvd25sb2FkaW5nIGZpbGUgWyR7dGhpcy5kYXRhRmllbGQuc3RyaW5nSWR9XSAke3RoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWV9IGhhcyBmYWlsZWQhYCwgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5fc25hY2tiYXIub3BlbkVycm9yU25hY2tCYXIoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZSArICcgJyArIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdkYXRhRmllbGQuc25hY2tCYXIuZG93bmxvYWRGYWlsJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLmRvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLnByb2dyZXNzID0gMDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RG93bmxvYWRGaWxlKHJlc3BvbnNlOiBCbG9iIHwgUHJvdmlkZXJQcm9ncmVzcykge1xuICAgICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2aWV3RXh0ZW5zaW9uID09PSBGaWxlUHJldmlld1R5cGUucGRmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlRm9yRG93bmxvYWQgPSBuZXcgQmxvYihbcmVzcG9uc2VdLCB7dHlwZTogJ2FwcGxpY2F0aW9uL3BkZid9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bGxTb3VyY2UubmV4dCh0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKFVSTC5jcmVhdGVPYmplY3RVUkwodGhpcy5maWxlRm9yRG93bmxvYWQpKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZUZvckRvd25sb2FkID0gbmV3IEJsb2IoW3Jlc3BvbnNlXSwge3R5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mdWxsU291cmNlLm5leHQodGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoVVJMLmNyZWF0ZU9iamVjdFVSTCh0aGlzLmZpbGVGb3JEb3dubG9hZCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBkb3dubG9hZFZpYUFuY2hvcihibG9iOiBCbG9iKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICAgIGEuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lJyk7XG4gICAgICAgIGlmICghdGhpcy5maWxlRm9yRG93bmxvYWQpIHtcbiAgICAgICAgICAgIGJsb2IgPSBuZXcgQmxvYihbYmxvYl0sIHt0eXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ30pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKCEhdGhpcy5maWxlRm9yRG93bmxvYWQgPyB0aGlzLmZpbGVGb3JEb3dubG9hZCA6IGJsb2IpO1xuICAgICAgICBhLmhyZWYgPSB1cmw7XG4gICAgICAgIGEuZG93bmxvYWQgPSB0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lO1xuICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZUZpbGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhRmllbGQudmFsdWUgfHwgIXRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMudGFza0lkKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoJ0ZpbGUgY2Fubm90IGJlIGRlbGV0ZWQuIE5vIHRhc2sgaXMgc2V0IHRvIHRoZSBmaWVsZC4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Rhc2tSZXNvdXJjZVNlcnZpY2UuZGVsZXRlRmlsZSh0aGlzLnRhc2tJZCxcbiAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnN0cmluZ0lkKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC52YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLmRvd25sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bGxTb3VyY2UubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZUZvckRvd25sb2FkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmlld1NvdXJjZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbGVGb3JQcmV2aWV3ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZy5kZWJ1ZyhgRmlsZSBbJHt0aGlzLmRhdGFGaWVsZC5zdHJpbmdJZH1dICR7ZmlsZW5hbWV9IHdhcyBzdWNjZXNzZnVsbHkgZGVsZXRlZGApO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZXJyb3IoYERlbGV0aW5nIGZpbGUgWyR7dGhpcy5kYXRhRmllbGQuc3RyaW5nSWR9XSAke3RoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWV9IGhhcyBmYWlsZWQhYCwgcmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lICsgJyAnICsgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ2RhdGFGaWVsZC5zbmFja0Jhci5maWxlRGVsZXRlRmFpbGVkJylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZGF0YUZpZWxkLnZhbHVlIHx8ICF0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgZGVmYXVsdFN0YXRlKCk6IEZpbGVTdGF0ZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcm9ncmVzczogMCxcbiAgICAgICAgICAgIGNvbXBsZXRlZDogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZmFsc2UsXG4gICAgICAgICAgICB1cGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZG93bmxvYWRpbmc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0IGRpc3BsYXkgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0RGlzcGxheU5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCEhdGhpcy5kYXRhRmllbGQpIHtcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YUZpZWxkLnZhbHVlICYmICEhdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghIXRoaXMuZGF0YUZpZWxkLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLmZpbGUubm9GaWxlJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBmaWxlIGZpZWxkIGltYWdlIGZyb20gYmFja2VuZCBpZiBpdCBpcyBpbWFnZSB0eXBlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpbml0RmlsZUZpZWxkSW1hZ2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0ZpbGVCZWZvcmVEb3dubG9hZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZS5kb3dubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3Rhc2tSZXNvdXJjZVNlcnZpY2UuZG93bmxvYWRGaWxlUHJldmlldyh0aGlzLnJlc29sdmVQYXJlbnRUYXNrSWQoKSwgdGhpcy5kYXRhRmllbGQuc3RyaW5nSWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nLmRlYnVnKGBQcmV2aWV3IG9mIGZpbGUgWyR7dGhpcy5kYXRhRmllbGQuc3RyaW5nSWR9XSAke3RoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWV9IHdhcyBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZGApO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZUZvclByZXZpZXcgPSBuZXcgQmxvYihbcmVzcG9uc2VdLCB7dHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSd9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdTb3VyY2UgPSB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChVUkwuY3JlYXRlT2JqZWN0VVJMKHRoaXMuZmlsZUZvclByZXZpZXcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwb25zZSA9PSBudWxsIHx8IHJlc3BvbnNlIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nLmVycm9yKGBEb3dubG9hZGluZyBmaWxlIFske3RoaXMuZGF0YUZpZWxkLnN0cmluZ0lkfV0gJHt0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lfSBoYXMgZmFpbGVkIWAsIGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLm9wZW5FcnJvclNuYWNrQmFyKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWUgKyAnICcgKyB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnZGF0YUZpZWxkLnNuYWNrQmFyLmRvd25sb2FkRmFpbCcpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5kb3dubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5wcm9ncmVzcyA9IDA7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tGaWxlQmVmb3JlRG93bmxvYWQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy50YXNrSWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcignRmlsZSBjYW5ub3QgYmUgZG93bmxvYWRlZC4gTm8gdGFzayBpcyBzZXQgdG8gdGhlIGZpZWxkLicpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93UHJldmlld0RpYWxvZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrRmlsZUJlZm9yZURvd25sb2FkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmRvd25sb2FkRmlsZSh0aGlzLnRhc2tJZCwgdGhpcy5kYXRhRmllbGQuc3RyaW5nSWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBpZiAoIShyZXNwb25zZSBhcyBQcm92aWRlclByb2dyZXNzKS50eXBlIHx8IChyZXNwb25zZSBhcyBQcm92aWRlclByb2dyZXNzKS50eXBlICE9PSBQcm9ncmVzc1R5cGUuRE9XTkxPQUQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2cuZGVidWcoYEZpbGUgWyR7dGhpcy5kYXRhRmllbGQuc3RyaW5nSWR9XSAke3RoaXMuZGF0YUZpZWxkLnZhbHVlLm5hbWV9IHdhcyBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZGApO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdERvd25sb2FkRmlsZShyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZy5lcnJvcihgRG93bmxvYWRpbmcgZmlsZSBbJHt0aGlzLmRhdGFGaWVsZC5zdHJpbmdJZH1dICR7dGhpcy5kYXRhRmllbGQudmFsdWUubmFtZX0gaGFzIGZhaWxlZCFgLCBlcnJvcik7XG4gICAgICAgICAgICB0aGlzLl9zbmFja2Jhci5vcGVuRXJyb3JTbmFja0JhcihcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFGaWVsZC52YWx1ZS5uYW1lICsgJyAnICsgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ2RhdGFGaWVsZC5zbmFja0Jhci5kb3dubG9hZEZhaWwnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUucHJvZ3Jlc3MgPSAwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlTWF4V2lkdGgoZXZlbnQ6IFJlc2l6ZWRFdmVudCkge1xuICAgICAgICBpZiAoISF0aGlzLmltYWdlRWwpIHtcbiAgICAgICAgICAgIHRoaXMuaW1hZ2VFbC5uYXRpdmVFbGVtZW50LnN0eWxlLm1heFdpZHRoID0gZXZlbnQubmV3UmVjdC53aWR0aCArICdweCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVQcmV2aWV3SWZEaXNwbGF5YWJsZSgpIHtcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gdGhpcy5kYXRhRmllbGQudmFsdWUubmFtZS5zcGxpdCgnLicpLnJldmVyc2UoKVswXTtcbiAgICAgICAgdGhpcy5pc0Rpc3BsYXlhYmxlID0gT2JqZWN0LnZhbHVlcyhGaWxlUHJldmlld1R5cGUpLmluY2x1ZGVzKGV4dGVuc2lvbiBhcyBhbnkpO1xuICAgICAgICBpZiAodGhpcy5pc0Rpc3BsYXlhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdFeHRlbnNpb24gPSBGaWxlUHJldmlld1R5cGVbZXh0ZW5zaW9uXTtcbiAgICAgICAgICAgIHRoaXMuaW5pdEZpbGVGaWVsZEltYWdlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhRmllbGQubGF5b3V0ICYmIHRoaXMuZGF0YUZpZWxkLmxheW91dC5yb3dzICYmIHRoaXMuZGF0YUZpZWxkLmxheW91dC5yb3dzICE9PSAxID9cbiAgICAgICAgICAgICh0aGlzLmRhdGFGaWVsZC5sYXlvdXQucm93cykgKiBmaWVsZEhlaWdodCAtIGZpZWxkUGFkZGluZyA6IGZpZWxkSGVpZ2h0IC0gZmllbGRQYWRkaW5nO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQcmV2aWV3Qm9yZGVyV2lkdGgoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuYm9yZGVyUHJvcGVydHlFbmFibGVkKCdib3JkZXJXaWR0aCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhRmllbGQuY29tcG9uZW50LnByb3BlcnRpZXMuYm9yZGVyV2lkdGggKyAncHgnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtBYnN0cmFjdEZpbGVGaWVsZENvbXBvbmVudC5ERUZBVUxUX1BSRVZJRVdfQk9SREVSX1dJRFRIfXB4YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UHJldmlld0JvcmRlclN0eWxlKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmJvcmRlclByb3BlcnR5RW5hYmxlZCgnYm9yZGVyU3R5bGUnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzLmJvcmRlclN0eWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBBYnN0cmFjdEZpbGVGaWVsZENvbXBvbmVudC5ERUZBVUxUX1BSRVZJRVdfQk9SREVSX1NUWUxFO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQcmV2aWV3Qm9yZGVyQ29sb3IoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuYm9yZGVyUHJvcGVydHlFbmFibGVkKCdib3JkZXJDb2xvcicpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhRmllbGQuY29tcG9uZW50LnByb3BlcnRpZXMuYm9yZGVyQ29sb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEFic3RyYWN0RmlsZUZpZWxkQ29tcG9uZW50LkRFRkFVTFRfUFJFVklFV19CT1JERVJfQ09MT1I7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQm9yZGVyTEdCVFEoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmJvcmRlclByb3BlcnR5RW5hYmxlZCgnYm9yZGVyTEdCVFEnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUZpZWxkLmNvbXBvbmVudC5wcm9wZXJ0aWVzLmJvcmRlckxHQlRRID09PSAndHJ1ZSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0JvcmRlckRlZmF1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmJvcmRlclByb3BlcnR5RW5hYmxlZCgnYm9yZGVyRW5hYmxlZCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhRmllbGQuY29tcG9uZW50LnByb3BlcnRpZXMuYm9yZGVyRW5hYmxlZCA9PT0gJ3RydWUnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYm9yZGVyUHJvcGVydHlFbmFibGVkKHByb3BlcnR5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5kYXRhRmllbGQuY29tcG9uZW50ICYmICEhdGhpcy5kYXRhRmllbGQuY29tcG9uZW50LnByb3BlcnRpZXMgJiYgcHJvcGVydHkgaW4gdGhpcy5kYXRhRmllbGQuY29tcG9uZW50LnByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRUYXNrSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5kYXRhRmllbGQucGFyZW50VGFza0lkID8gdGhpcy5kYXRhRmllbGQucGFyZW50VGFza0lkIDogdGhpcy50YXNrSWQ7XG4gICAgfVxufVxuIl19