@igo2/context 1.15.4 → 16.0.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/context-theme.scss +5 -0
  2. package/{esm2020 → esm2022}/igo2-context.mjs +4 -4
  3. package/esm2022/lib/context-import-export/context-import-export/context-import-export.component.mjs +258 -0
  4. package/esm2022/lib/context-import-export/context-import-export.module.mjs +81 -0
  5. package/{esm2020 → esm2022}/lib/context-import-export/index.mjs +3 -3
  6. package/{esm2020 → esm2022}/lib/context-import-export/shared/context-export.errors.mjs +15 -15
  7. package/{esm2020 → esm2022}/lib/context-import-export/shared/context-export.interface.mjs +2 -2
  8. package/esm2022/lib/context-import-export/shared/context-export.service.mjs +38 -0
  9. package/esm2022/lib/context-import-export/shared/context-export.utils.mjs +15 -0
  10. package/{esm2020 → esm2022}/lib/context-import-export/shared/context-import.errors.mjs +33 -33
  11. package/esm2022/lib/context-import-export/shared/context-import.service.mjs +82 -0
  12. package/esm2022/lib/context-import-export/shared/context-import.utils.mjs +148 -0
  13. package/{esm2020 → esm2022}/lib/context-import-export/shared/index.mjs +8 -8
  14. package/esm2022/lib/context-manager/context-edit/context-edit-binding.directive.mjs +57 -0
  15. package/esm2022/lib/context-manager/context-edit/context-edit.component.mjs +48 -0
  16. package/{esm2020 → esm2022}/lib/context-manager/context-edit/index.mjs +3 -3
  17. package/esm2022/lib/context-manager/context-form/context-form.component.mjs +151 -0
  18. package/{esm2020 → esm2022}/lib/context-manager/context-form/index.mjs +2 -2
  19. package/esm2022/lib/context-manager/context-item/context-item.component.mjs +251 -0
  20. package/{esm2020 → esm2022}/lib/context-manager/context-item/index.mjs +2 -2
  21. package/esm2022/lib/context-manager/context-list/context-list-binding.directive.mjs +259 -0
  22. package/esm2022/lib/context-manager/context-list/context-list.component.mjs +616 -0
  23. package/{esm2020 → esm2022}/lib/context-manager/context-list/context-list.enum.mjs +7 -7
  24. package/{esm2020 → esm2022}/lib/context-manager/context-list/index.mjs +3 -3
  25. package/esm2022/lib/context-manager/context-manager.module.mjs +157 -0
  26. package/esm2022/lib/context-manager/context-permissions/context-permissions-binding.directive.mjs +108 -0
  27. package/esm2022/lib/context-manager/context-permissions/context-permissions.component.mjs +331 -0
  28. package/{esm2020 → esm2022}/lib/context-manager/context-permissions/index.mjs +3 -3
  29. package/{esm2020 → esm2022}/lib/context-manager/index.mjs +7 -7
  30. package/{esm2020 → esm2022}/lib/context-manager/shared/context.enum.mjs +13 -13
  31. package/esm2022/lib/context-manager/shared/context.interface.mjs +2 -0
  32. package/esm2022/lib/context-manager/shared/context.service.mjs +662 -0
  33. package/{esm2020 → esm2022}/lib/context-manager/shared/index.mjs +6 -6
  34. package/esm2022/lib/context-manager/shared/layer-context.directive.mjs +172 -0
  35. package/esm2022/lib/context-manager/shared/map-context.directive.mjs +79 -0
  36. package/esm2022/lib/context-map-button/bookmark-button/bookmark-button.component.mjs +74 -0
  37. package/esm2022/lib/context-map-button/bookmark-button/bookmark-dialog.component.mjs +53 -0
  38. package/{esm2020 → esm2022}/lib/context-map-button/bookmark-button/index.mjs +3 -3
  39. package/esm2022/lib/context-map-button/context-map-button.module.mjs +104 -0
  40. package/{esm2020 → esm2022}/lib/context-map-button/index.mjs +4 -4
  41. package/{esm2020 → esm2022}/lib/context-map-button/poi-button/index.mjs +4 -4
  42. package/esm2022/lib/context-map-button/poi-button/poi-button.component.mjs +179 -0
  43. package/esm2022/lib/context-map-button/poi-button/poi-dialog.component.mjs +53 -0
  44. package/{esm2020 → esm2022}/lib/context-map-button/poi-button/shared/index.mjs +3 -3
  45. package/{esm2020 → esm2022}/lib/context-map-button/poi-button/shared/poi.interface.mjs +2 -2
  46. package/esm2022/lib/context-map-button/poi-button/shared/poi.service.mjs +38 -0
  47. package/{esm2020 → esm2022}/lib/context-map-button/user-button/index.mjs +3 -3
  48. package/{esm2020 → esm2022}/lib/context-map-button/user-button/user-button.animation.mjs +17 -17
  49. package/esm2022/lib/context-map-button/user-button/user-button.component.mjs +112 -0
  50. package/esm2022/lib/context-map-button/user-button/user-dialog.component.mjs +74 -0
  51. package/{esm2020 → esm2022}/lib/context.module.mjs +45 -45
  52. package/{esm2020 → esm2022}/lib/share-map/index.mjs +5 -5
  53. package/esm2022/lib/share-map/share-map/share-map-api.component.mjs +186 -0
  54. package/esm2022/lib/share-map/share-map/share-map-url.component.mjs +251 -0
  55. package/esm2022/lib/share-map/share-map/share-map.component.mjs +60 -0
  56. package/{esm2020 → esm2022}/lib/share-map/share-map.module.mjs +67 -67
  57. package/{esm2020 → esm2022}/lib/share-map/shared/index.mjs +2 -2
  58. package/esm2022/lib/share-map/shared/share-map.service.mjs +221 -0
  59. package/{esm2020 → esm2022}/lib/sidenav/index.mjs +2 -2
  60. package/esm2022/lib/sidenav/sidenav.component.mjs +178 -0
  61. package/{esm2020 → esm2022}/lib/sidenav/sidenav.module.mjs +61 -61
  62. package/{esm2020 → esm2022}/public_api.mjs +15 -15
  63. package/{fesm2020 → fesm2022}/igo2-context.mjs +4838 -4608
  64. package/fesm2022/igo2-context.mjs.map +1 -0
  65. package/index.d.ts +5 -5
  66. package/lib/context-import-export/context-import-export/context-import-export.component.d.ts +46 -44
  67. package/lib/context-import-export/context-import-export.module.d.ts +23 -23
  68. package/lib/context-import-export/index.d.ts +2 -2
  69. package/lib/context-import-export/shared/context-export.errors.d.ts +8 -8
  70. package/lib/context-import-export/shared/context-export.interface.d.ts +5 -5
  71. package/lib/context-import-export/shared/context-export.service.d.ts +10 -10
  72. package/lib/context-import-export/shared/context-export.utils.d.ts +4 -4
  73. package/lib/context-import-export/shared/context-import.errors.d.ts +17 -17
  74. package/lib/context-import-export/shared/context-import.service.d.ts +18 -18
  75. package/lib/context-import-export/shared/context-import.utils.d.ts +15 -17
  76. package/lib/context-import-export/shared/index.d.ts +7 -7
  77. package/lib/context-manager/context-edit/context-edit-binding.directive.d.ts +20 -20
  78. package/lib/context-manager/context-edit/context-edit.component.d.ts +14 -14
  79. package/lib/context-manager/context-edit/index.d.ts +2 -2
  80. package/lib/context-manager/context-form/context-form.component.d.ts +30 -30
  81. package/lib/context-manager/context-form/index.d.ts +1 -1
  82. package/lib/context-manager/context-item/context-item.component.d.ts +32 -32
  83. package/lib/context-manager/context-item/context-item.theming.scss +21 -0
  84. package/lib/context-manager/context-item/index.d.ts +1 -1
  85. package/lib/context-manager/context-list/context-list-binding.directive.d.ts +46 -46
  86. package/lib/context-manager/context-list/context-list.component.d.ts +93 -93
  87. package/lib/context-manager/context-list/context-list.enum.d.ts +5 -5
  88. package/lib/context-manager/context-list/context-list.theming.scss +23 -0
  89. package/lib/context-manager/context-list/index.d.ts +2 -2
  90. package/lib/context-manager/context-manager.module.d.ts +37 -37
  91. package/lib/context-manager/context-manager.theming.scss +7 -0
  92. package/lib/context-manager/context-permissions/context-permissions-binding.directive.d.ts +23 -23
  93. package/lib/context-manager/context-permissions/context-permissions.component.d.ts +40 -40
  94. package/lib/context-manager/context-permissions/index.d.ts +2 -2
  95. package/lib/context-manager/index.d.ts +6 -6
  96. package/lib/context-manager/shared/context.enum.d.ts +10 -10
  97. package/lib/context-manager/shared/context.interface.d.ts +81 -75
  98. package/lib/context-manager/shared/context.service.d.ts +76 -75
  99. package/lib/context-manager/shared/index.d.ts +5 -5
  100. package/lib/context-manager/shared/layer-context.directive.d.ts +28 -28
  101. package/lib/context-manager/shared/map-context.directive.d.ts +19 -19
  102. package/lib/context-map-button/bookmark-button/bookmark-button.component.d.ts +20 -20
  103. package/lib/context-map-button/bookmark-button/bookmark-dialog.component.d.ts +9 -9
  104. package/lib/context-map-button/bookmark-button/index.d.ts +2 -2
  105. package/lib/context-map-button/context-map-button.module.d.ts +27 -27
  106. package/lib/context-map-button/index.d.ts +3 -3
  107. package/lib/context-map-button/poi-button/index.d.ts +3 -3
  108. package/lib/context-map-button/poi-button/poi-button.component.d.ts +34 -34
  109. package/lib/context-map-button/poi-button/poi-dialog.component.d.ts +9 -9
  110. package/lib/context-map-button/poi-button/shared/index.d.ts +2 -2
  111. package/lib/context-map-button/poi-button/shared/poi.interface.d.ts +7 -7
  112. package/lib/context-map-button/poi-button/shared/poi.service.d.ts +16 -16
  113. package/lib/context-map-button/user-button/index.d.ts +2 -2
  114. package/lib/context-map-button/user-button/user-button.animation.d.ts +2 -2
  115. package/lib/context-map-button/user-button/user-button.component.d.ts +25 -25
  116. package/lib/context-map-button/user-button/user-dialog.component.d.ts +15 -15
  117. package/lib/context.module.d.ts +16 -16
  118. package/lib/share-map/index.d.ts +4 -4
  119. package/lib/share-map/share-map/share-map-api.component.d.ts +27 -27
  120. package/lib/share-map/share-map/share-map-url.component.d.ts +26 -26
  121. package/lib/share-map/share-map/share-map.component.d.ts +11 -11
  122. package/lib/share-map/share-map.module.d.ts +21 -21
  123. package/lib/share-map/shared/index.d.ts +1 -1
  124. package/lib/share-map/shared/share-map.service.d.ts +17 -17
  125. package/lib/sidenav/index.d.ts +1 -1
  126. package/lib/sidenav/sidenav.component.d.ts +35 -35
  127. package/lib/sidenav/sidenav.module.d.ts +18 -18
  128. package/locale/en.context.json +199 -0
  129. package/locale/fr.context.json +199 -0
  130. package/package.json +20 -26
  131. package/public_api.d.ts +11 -11
  132. package/esm2020/lib/context-import-export/context-import-export/context-import-export.component.mjs +0 -228
  133. package/esm2020/lib/context-import-export/context-import-export.module.mjs +0 -85
  134. package/esm2020/lib/context-import-export/shared/context-export.service.mjs +0 -38
  135. package/esm2020/lib/context-import-export/shared/context-export.utils.mjs +0 -15
  136. package/esm2020/lib/context-import-export/shared/context-import.service.mjs +0 -79
  137. package/esm2020/lib/context-import-export/shared/context-import.utils.mjs +0 -133
  138. package/esm2020/lib/context-manager/context-edit/context-edit-binding.directive.mjs +0 -50
  139. package/esm2020/lib/context-manager/context-edit/context-edit.component.mjs +0 -46
  140. package/esm2020/lib/context-manager/context-form/context-form.component.mjs +0 -143
  141. package/esm2020/lib/context-manager/context-item/context-item.component.mjs +0 -245
  142. package/esm2020/lib/context-manager/context-list/context-list-binding.directive.mjs +0 -240
  143. package/esm2020/lib/context-manager/context-list/context-list.component.mjs +0 -592
  144. package/esm2020/lib/context-manager/context-manager.module.mjs +0 -162
  145. package/esm2020/lib/context-manager/context-permissions/context-permissions-binding.directive.mjs +0 -99
  146. package/esm2020/lib/context-manager/context-permissions/context-permissions.component.mjs +0 -306
  147. package/esm2020/lib/context-manager/shared/context.interface.mjs +0 -2
  148. package/esm2020/lib/context-manager/shared/context.service.mjs +0 -632
  149. package/esm2020/lib/context-manager/shared/layer-context.directive.mjs +0 -162
  150. package/esm2020/lib/context-manager/shared/map-context.directive.mjs +0 -70
  151. package/esm2020/lib/context-map-button/bookmark-button/bookmark-button.component.mjs +0 -66
  152. package/esm2020/lib/context-map-button/bookmark-button/bookmark-dialog.component.mjs +0 -50
  153. package/esm2020/lib/context-map-button/context-map-button.module.mjs +0 -96
  154. package/esm2020/lib/context-map-button/poi-button/poi-button.component.mjs +0 -161
  155. package/esm2020/lib/context-map-button/poi-button/poi-dialog.component.mjs +0 -50
  156. package/esm2020/lib/context-map-button/poi-button/shared/poi.service.mjs +0 -33
  157. package/esm2020/lib/context-map-button/user-button/user-button.component.mjs +0 -104
  158. package/esm2020/lib/context-map-button/user-button/user-dialog.component.mjs +0 -66
  159. package/esm2020/lib/share-map/share-map/share-map-api.component.mjs +0 -170
  160. package/esm2020/lib/share-map/share-map/share-map-url.component.mjs +0 -243
  161. package/esm2020/lib/share-map/share-map/share-map.component.mjs +0 -57
  162. package/esm2020/lib/share-map/shared/share-map.service.mjs +0 -210
  163. package/esm2020/lib/sidenav/sidenav.component.mjs +0 -170
  164. package/fesm2015/igo2-context.mjs +0 -5094
  165. package/fesm2015/igo2-context.mjs.map +0 -1
  166. package/fesm2020/igo2-context.mjs.map +0 -1
  167. package/ngcc.config.js +0 -3
@@ -0,0 +1,616 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';
2
+ import { AuthService } from '@igo2/auth';
3
+ import { ConfigService, LanguageService, StorageService } from '@igo2/core';
4
+ import { ContextListControlsEnum } from './context-list.enum';
5
+ import { BehaviorSubject, ReplaySubject, EMPTY, timer } from 'rxjs';
6
+ import { take } from 'rxjs/operators';
7
+ import { MatDialog } from '@angular/material/dialog';
8
+ import { BookmarkDialogComponent } from '../../context-map-button/bookmark-button/bookmark-dialog.component';
9
+ import { debounce } from 'rxjs/operators';
10
+ import { ActionStore, ActionbarMode } from '@igo2/common';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@igo2/core";
13
+ import * as i2 from "@igo2/auth";
14
+ import * as i3 from "@angular/material/dialog";
15
+ import * as i4 from "@angular/common";
16
+ import * as i5 from "@angular/forms";
17
+ import * as i6 from "@angular/material/form-field";
18
+ import * as i7 from "@angular/material/input";
19
+ import * as i8 from "@angular/material/icon";
20
+ import * as i9 from "@angular/material/button";
21
+ import * as i10 from "@angular/material/tooltip";
22
+ import * as i11 from "@angular/material/checkbox";
23
+ import * as i12 from "@angular/material/menu";
24
+ import * as i13 from "@igo2/common";
25
+ import * as i14 from "../context-item/context-item.component";
26
+ import * as i15 from "@ngx-translate/core";
27
+ function ContextListComponent_mat_form_field_2_button_6_Template(rf, ctx) { if (rf & 1) {
28
+ const _r10 = i0.ɵɵgetCurrentView();
29
+ i0.ɵɵelementStart(0, "button", 16);
30
+ i0.ɵɵlistener("click", function ContextListComponent_mat_form_field_2_button_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r9.clearFilter()); });
31
+ i0.ɵɵelement(1, "mat-icon", 17);
32
+ i0.ɵɵelementEnd();
33
+ } }
34
+ function ContextListComponent_mat_form_field_2_Template(rf, ctx) { if (rf & 1) {
35
+ const _r12 = i0.ɵɵgetCurrentView();
36
+ i0.ɵɵelementStart(0, "mat-form-field", 13)(1, "mat-label");
37
+ i0.ɵɵtext(2);
38
+ i0.ɵɵpipe(3, "translate");
39
+ i0.ɵɵelementEnd();
40
+ i0.ɵɵelementStart(4, "input", 14);
41
+ i0.ɵɵlistener("ngModelChange", function ContextListComponent_mat_form_field_2_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r11 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r11.term = $event); });
42
+ i0.ɵɵpipe(5, "translate");
43
+ i0.ɵɵelementEnd();
44
+ i0.ɵɵtemplate(6, ContextListComponent_mat_form_field_2_button_6_Template, 2, 0, "button", 15);
45
+ i0.ɵɵelementEnd();
46
+ } if (rf & 2) {
47
+ const ctx_r0 = i0.ɵɵnextContext();
48
+ i0.ɵɵadvance(2);
49
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 4, "igo.context.contextManager.filterPlaceHolder"));
50
+ i0.ɵɵadvance(2);
51
+ i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(5, 6, "igo.context.contextManager.filterPlaceHolder"))("ngModel", ctx_r0.term);
52
+ i0.ɵɵadvance(2);
53
+ i0.ɵɵproperty("ngIf", ctx_r0.term.length);
54
+ } }
55
+ function ContextListComponent_button_4_Template(rf, ctx) { if (rf & 1) {
56
+ const _r14 = i0.ɵɵgetCurrentView();
57
+ i0.ɵɵelementStart(0, "button", 18);
58
+ i0.ɵɵlistener("click", function ContextListComponent_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r13.toggleSort(true)); });
59
+ i0.ɵɵpipe(1, "translate");
60
+ i0.ɵɵelement(2, "mat-icon", 19);
61
+ i0.ɵɵelementEnd();
62
+ } if (rf & 2) {
63
+ i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 1, "igo.context.contextManager.sortAlphabetically"));
64
+ } }
65
+ function ContextListComponent_button_5_Template(rf, ctx) { if (rf & 1) {
66
+ const _r16 = i0.ɵɵgetCurrentView();
67
+ i0.ɵɵelementStart(0, "button", 18);
68
+ i0.ɵɵlistener("click", function ContextListComponent_button_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r15 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r15.toggleSort(false)); });
69
+ i0.ɵɵpipe(1, "translate");
70
+ i0.ɵɵelement(2, "mat-icon", 20);
71
+ i0.ɵɵelementEnd();
72
+ } if (rf & 2) {
73
+ i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 1, "igo.context.contextManager.sortContextOrder"));
74
+ } }
75
+ function ContextListComponent_igo_actionbar_6_Template(rf, ctx) { if (rf & 1) {
76
+ i0.ɵɵelement(0, "igo-actionbar", 21);
77
+ } if (rf & 2) {
78
+ const ctx_r3 = i0.ɵɵnextContext();
79
+ i0.ɵɵproperty("iconColor", ctx_r3.color)("store", ctx_r3.actionStore)("withIcon", true)("withTitle", ctx_r3.actionbarMode === "overlay")("horizontal", false)("mode", ctx_r3.actionbarMode);
80
+ } }
81
+ function ContextListComponent_button_7_Template(rf, ctx) { if (rf & 1) {
82
+ i0.ɵɵelementStart(0, "button", 22);
83
+ i0.ɵɵpipe(1, "translate");
84
+ i0.ɵɵelement(2, "mat-icon", 23);
85
+ i0.ɵɵelementEnd();
86
+ } if (rf & 2) {
87
+ i0.ɵɵnextContext();
88
+ const _r5 = i0.ɵɵreference(9);
89
+ i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 2, "igo.context.contextManager.filterUser"))("matMenuTriggerFor", _r5);
90
+ } }
91
+ function ContextListComponent_ng_container_10_button_4_Template(rf, ctx) { if (rf & 1) {
92
+ i0.ɵɵelementStart(0, "button", 29);
93
+ i0.ɵɵtext(1);
94
+ i0.ɵɵelementEnd();
95
+ } if (rf & 2) {
96
+ const user_r17 = i0.ɵɵnextContext().$implicit;
97
+ const _r20 = i0.ɵɵreference(7);
98
+ i0.ɵɵproperty("matMenuTriggerFor", _r20);
99
+ i0.ɵɵadvance(1);
100
+ i0.ɵɵtextInterpolate1(" ", user_r17.title, " ");
101
+ } }
102
+ function ContextListComponent_ng_container_10_button_5_Template(rf, ctx) { if (rf & 1) {
103
+ i0.ɵɵelementStart(0, "button", 10);
104
+ i0.ɵɵtext(1);
105
+ i0.ɵɵelementEnd();
106
+ } if (rf & 2) {
107
+ const user_r17 = i0.ɵɵnextContext().$implicit;
108
+ i0.ɵɵadvance(1);
109
+ i0.ɵɵtextInterpolate1(" ", user_r17.title, " ");
110
+ } }
111
+ function ContextListComponent_ng_container_10_mat_checkbox_9_Template(rf, ctx) { if (rf & 1) {
112
+ const _r27 = i0.ɵɵgetCurrentView();
113
+ i0.ɵɵelementStart(0, "mat-checkbox", 11);
114
+ i0.ɵɵlistener("click", function ContextListComponent_ng_container_10_mat_checkbox_9_Template_mat_checkbox_click_0_listener($event) { return $event.stopPropagation(); })("change", function ContextListComponent_ng_container_10_mat_checkbox_9_Template_mat_checkbox_change_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r27); const child_r24 = restoredCtx.$implicit; const user_r17 = i0.ɵɵnextContext().$implicit; const ctx_r26 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r26.userSelection(child_r24, user_r17)); });
115
+ i0.ɵɵtext(1);
116
+ i0.ɵɵelementEnd();
117
+ } if (rf & 2) {
118
+ const child_r24 = ctx.$implicit;
119
+ const ctx_r21 = i0.ɵɵnextContext(2);
120
+ i0.ɵɵproperty("checked", ctx_r21.getPermission(child_r24).checked);
121
+ i0.ɵɵadvance(1);
122
+ i0.ɵɵtextInterpolate1(" ", child_r24.title, " ");
123
+ } }
124
+ function ContextListComponent_ng_container_10_Template(rf, ctx) { if (rf & 1) {
125
+ const _r31 = i0.ɵɵgetCurrentView();
126
+ i0.ɵɵelementContainerStart(0);
127
+ i0.ɵɵelementStart(1, "span", 9)(2, "div", 10)(3, "mat-checkbox", 24);
128
+ i0.ɵɵlistener("click", function ContextListComponent_ng_container_10_Template_mat_checkbox_click_3_listener($event) { return $event.stopPropagation(); })("change", function ContextListComponent_ng_container_10_Template_mat_checkbox_change_3_listener() { const restoredCtx = i0.ɵɵrestoreView(_r31); const user_r17 = restoredCtx.$implicit; const ctx_r30 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r30.userSelection(user_r17)); });
129
+ i0.ɵɵelementEnd()();
130
+ i0.ɵɵtemplate(4, ContextListComponent_ng_container_10_button_4_Template, 2, 2, "button", 25);
131
+ i0.ɵɵtemplate(5, ContextListComponent_ng_container_10_button_5_Template, 2, 1, "button", 26);
132
+ i0.ɵɵelementEnd();
133
+ i0.ɵɵelementStart(6, "mat-menu", null, 27)(8, "div", 10);
134
+ i0.ɵɵtemplate(9, ContextListComponent_ng_container_10_mat_checkbox_9_Template, 2, 2, "mat-checkbox", 28);
135
+ i0.ɵɵelementEnd()();
136
+ i0.ɵɵelementContainerEnd();
137
+ } if (rf & 2) {
138
+ const user_r17 = ctx.$implicit;
139
+ const ctx_r6 = i0.ɵɵnextContext();
140
+ i0.ɵɵadvance(3);
141
+ i0.ɵɵproperty("checked", ctx_r6.getPermission(user_r17).checked)("indeterminate", ctx_r6.getPermission(user_r17).indeterminate);
142
+ i0.ɵɵadvance(1);
143
+ i0.ɵɵproperty("ngIf", user_r17.childs);
144
+ i0.ɵɵadvance(1);
145
+ i0.ɵɵproperty("ngIf", !user_r17.childs);
146
+ i0.ɵɵadvance(4);
147
+ i0.ɵɵproperty("ngForOf", user_r17.childs);
148
+ } }
149
+ function ContextListComponent_ng_template_17_igo_collapsible_0_ng_template_2_Template(rf, ctx) { if (rf & 1) {
150
+ const _r38 = i0.ɵɵgetCurrentView();
151
+ i0.ɵɵelementStart(0, "igo-context-item", 33);
152
+ i0.ɵɵlistener("edit", function ContextListComponent_ng_template_17_igo_collapsible_0_ng_template_2_Template_igo_context_item_edit_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r38); const context_r36 = restoredCtx.$implicit; const ctx_r37 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r37.edit.emit(context_r36)); })("delete", function ContextListComponent_ng_template_17_igo_collapsible_0_ng_template_2_Template_igo_context_item_delete_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r38); const context_r36 = restoredCtx.$implicit; const ctx_r39 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r39.delete.emit(context_r36)); })("clone", function ContextListComponent_ng_template_17_igo_collapsible_0_ng_template_2_Template_igo_context_item_clone_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r38); const context_r36 = restoredCtx.$implicit; const ctx_r40 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r40.clone.emit(context_r36)); })("save", function ContextListComponent_ng_template_17_igo_collapsible_0_ng_template_2_Template_igo_context_item_save_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r38); const context_r36 = restoredCtx.$implicit; const ctx_r41 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r41.save.emit(context_r36)); })("hide", function ContextListComponent_ng_template_17_igo_collapsible_0_ng_template_2_Template_igo_context_item_hide_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r38); const context_r36 = restoredCtx.$implicit; const ctx_r42 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r42.hideContext(context_r36)); })("show", function ContextListComponent_ng_template_17_igo_collapsible_0_ng_template_2_Template_igo_context_item_show_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r38); const context_r36 = restoredCtx.$implicit; const ctx_r43 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r43.showContext(context_r36)); })("favorite", function ContextListComponent_ng_template_17_igo_collapsible_0_ng_template_2_Template_igo_context_item_favorite_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r38); const context_r36 = restoredCtx.$implicit; const ctx_r44 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r44.favorite.emit(context_r36)); })("manageTools", function ContextListComponent_ng_template_17_igo_collapsible_0_ng_template_2_Template_igo_context_item_manageTools_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r38); const context_r36 = restoredCtx.$implicit; const ctx_r45 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r45.manageTools.emit(context_r36)); })("managePermissions", function ContextListComponent_ng_template_17_igo_collapsible_0_ng_template_2_Template_igo_context_item_managePermissions_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r38); const context_r36 = restoredCtx.$implicit; const ctx_r46 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r46.managePermissions.emit(context_r36)); })("select", function ContextListComponent_ng_template_17_igo_collapsible_0_ng_template_2_Template_igo_context_item_select_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r38); const context_r36 = restoredCtx.$implicit; const ctx_r47 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r47.select.emit(context_r36)); })("unselect", function ContextListComponent_ng_template_17_igo_collapsible_0_ng_template_2_Template_igo_context_item_unselect_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r38); const context_r36 = restoredCtx.$implicit; const ctx_r48 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r48.unselect.emit(context_r36)); });
153
+ i0.ɵɵelementEnd();
154
+ } if (rf & 2) {
155
+ const context_r36 = ctx.$implicit;
156
+ const ctx_r35 = i0.ɵɵnextContext(3);
157
+ i0.ɵɵproperty("selected", ctx_r35.selectedContext && ctx_r35.selectedContext.uri === context_r36.uri)("context", context_r36)("default", context_r36.id && ctx_r35.defaultContextId && ctx_r35.defaultContextId === context_r36.id);
158
+ } }
159
+ function ContextListComponent_ng_template_17_igo_collapsible_0_Template(rf, ctx) { if (rf & 1) {
160
+ const _r50 = i0.ɵɵgetCurrentView();
161
+ i0.ɵɵelementStart(0, "igo-collapsible", 32);
162
+ i0.ɵɵlistener("toggle", function ContextListComponent_ng_template_17_igo_collapsible_0_Template_igo_collapsible_toggle_0_listener($event) { i0.ɵɵrestoreView(_r50); const groupContexts_r32 = i0.ɵɵnextContext().$implicit; const ctx_r49 = i0.ɵɵnextContext(); return i0.ɵɵresetView((ctx_r49.collapsed[ctx_r49.titleMapping[groupContexts_r32.key]] = $event)); });
163
+ i0.ɵɵpipe(1, "translate");
164
+ i0.ɵɵtemplate(2, ContextListComponent_ng_template_17_igo_collapsible_0_ng_template_2_Template, 1, 3, "ng-template", 12);
165
+ i0.ɵɵelementEnd();
166
+ } if (rf & 2) {
167
+ const groupContexts_r32 = i0.ɵɵnextContext().$implicit;
168
+ const ctx_r33 = i0.ɵɵnextContext();
169
+ i0.ɵɵproperty("title", i0.ɵɵpipeBind1(1, 3, ctx_r33.titleMapping[groupContexts_r32.key]))("collapsed", ctx_r33.collapsed[ctx_r33.titleMapping[groupContexts_r32.key]]);
170
+ i0.ɵɵadvance(2);
171
+ i0.ɵɵproperty("ngForOf", groupContexts_r32.value);
172
+ } }
173
+ function ContextListComponent_ng_template_17_1_ng_template_0_Template(rf, ctx) { if (rf & 1) {
174
+ const _r56 = i0.ɵɵgetCurrentView();
175
+ i0.ɵɵelementStart(0, "igo-context-item", 34);
176
+ i0.ɵɵlistener("favorite", function ContextListComponent_ng_template_17_1_ng_template_0_Template_igo_context_item_favorite_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r56); const context_r54 = restoredCtx.$implicit; const ctx_r55 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r55.favorite.emit(context_r54)); })("select", function ContextListComponent_ng_template_17_1_ng_template_0_Template_igo_context_item_select_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r56); const context_r54 = restoredCtx.$implicit; const ctx_r57 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r57.select.emit(context_r54)); })("unselect", function ContextListComponent_ng_template_17_1_ng_template_0_Template_igo_context_item_unselect_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r56); const context_r54 = restoredCtx.$implicit; const ctx_r58 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r58.unselect.emit(context_r54)); });
177
+ i0.ɵɵelementEnd();
178
+ } if (rf & 2) {
179
+ const context_r54 = ctx.$implicit;
180
+ const ctx_r53 = i0.ɵɵnextContext(3);
181
+ i0.ɵɵproperty("showFavorite", ctx_r53.configService.getConfig("favoriteContext4NonAuthenticated"))("selected", ctx_r53.selectedContext && ctx_r53.selectedContext.uri === context_r54.uri)("context", context_r54)("default", ctx_r53.configService.getConfig("context") ? ctx_r53.defaultContextId === context_r54.id : ctx_r53.defaultContextId === context_r54.uri);
182
+ } }
183
+ function ContextListComponent_ng_template_17_1_Template(rf, ctx) { if (rf & 1) {
184
+ i0.ɵɵtemplate(0, ContextListComponent_ng_template_17_1_ng_template_0_Template, 1, 4, "ng-template", 12);
185
+ } if (rf & 2) {
186
+ const groupContexts_r32 = i0.ɵɵnextContext().$implicit;
187
+ i0.ɵɵproperty("ngForOf", groupContexts_r32.value);
188
+ } }
189
+ function ContextListComponent_ng_template_17_Template(rf, ctx) { if (rf & 1) {
190
+ i0.ɵɵtemplate(0, ContextListComponent_ng_template_17_igo_collapsible_0_Template, 3, 5, "igo-collapsible", 30);
191
+ i0.ɵɵtemplate(1, ContextListComponent_ng_template_17_1_Template, 1, 1, null, 31);
192
+ } if (rf & 2) {
193
+ const groupContexts_r32 = ctx.$implicit;
194
+ const ctx_r7 = i0.ɵɵnextContext();
195
+ i0.ɵɵproperty("ngIf", groupContexts_r32.value.length && ctx_r7.auth.authenticated);
196
+ i0.ɵɵadvance(1);
197
+ i0.ɵɵproperty("ngIf", groupContexts_r32.value.length && !ctx_r7.auth.authenticated);
198
+ } }
199
+ export class ContextListComponent {
200
+ cdRef;
201
+ configService;
202
+ auth;
203
+ dialog;
204
+ languageService;
205
+ storageService;
206
+ contextsInitial = { ours: [] };
207
+ contexts$ = new BehaviorSubject(this.contextsInitial);
208
+ change$ = new ReplaySubject(1);
209
+ change$$;
210
+ get contexts() {
211
+ return this._contexts;
212
+ }
213
+ set contexts(value) {
214
+ this._contexts = value;
215
+ this.cdRef.detectChanges();
216
+ this.next();
217
+ }
218
+ _contexts = { ours: [] };
219
+ get selectedContext() {
220
+ return this._selectedContext;
221
+ }
222
+ set selectedContext(value) {
223
+ this._selectedContext = value;
224
+ this.cdRef.detectChanges();
225
+ }
226
+ _selectedContext;
227
+ get map() {
228
+ return this._map;
229
+ }
230
+ set map(value) {
231
+ this._map = value;
232
+ }
233
+ _map;
234
+ get defaultContextId() {
235
+ return this.configService.getConfig('context')
236
+ ? this._defaultContextId
237
+ : this.storageService.get('favorite.context.uri') ||
238
+ this._defaultContextId;
239
+ }
240
+ set defaultContextId(value) {
241
+ this._defaultContextId = value;
242
+ }
243
+ _defaultContextId;
244
+ collapsed = [];
245
+ select = new EventEmitter();
246
+ unselect = new EventEmitter();
247
+ edit = new EventEmitter();
248
+ delete = new EventEmitter();
249
+ save = new EventEmitter();
250
+ clone = new EventEmitter();
251
+ create = new EventEmitter();
252
+ hide = new EventEmitter();
253
+ show = new EventEmitter();
254
+ showHiddenContexts = new EventEmitter();
255
+ favorite = new EventEmitter();
256
+ managePermissions = new EventEmitter();
257
+ manageTools = new EventEmitter();
258
+ filterPermissionsChanged = new EventEmitter();
259
+ titleMapping = {
260
+ ours: 'igo.context.contextManager.ourContexts',
261
+ shared: 'igo.context.contextManager.sharedContexts',
262
+ public: 'igo.context.contextManager.publicContexts'
263
+ };
264
+ users;
265
+ permissions = [];
266
+ actionStore = new ActionStore([]);
267
+ actionbarMode = ActionbarMode.Overlay;
268
+ color = 'primary';
269
+ showHidden = false;
270
+ /**
271
+ * Context filter term
272
+ */
273
+ set term(value) {
274
+ this._term = value;
275
+ this.next();
276
+ }
277
+ get term() {
278
+ return this._term;
279
+ }
280
+ _term = '';
281
+ get sortedAlpha() {
282
+ return this._sortedAlpha;
283
+ }
284
+ set sortedAlpha(value) {
285
+ this._sortedAlpha = value;
286
+ this.next();
287
+ }
288
+ _sortedAlpha = undefined;
289
+ showContextFilter = ContextListControlsEnum.always;
290
+ thresholdToFilter = 5;
291
+ constructor(cdRef, configService, auth, dialog, languageService, storageService) {
292
+ this.cdRef = cdRef;
293
+ this.configService = configService;
294
+ this.auth = auth;
295
+ this.dialog = dialog;
296
+ this.languageService = languageService;
297
+ this.storageService = storageService;
298
+ }
299
+ ngOnInit() {
300
+ this.change$$ = this.change$
301
+ .pipe(debounce(() => {
302
+ return this.contexts.ours.length === 0 &&
303
+ this.contexts.public?.length === 0 &&
304
+ this.contexts.shared?.length === 0
305
+ ? EMPTY
306
+ : timer(50);
307
+ }))
308
+ .subscribe(() => {
309
+ this.contexts$.next(this.filterContextsList(this.contexts));
310
+ });
311
+ this.actionStore.load([
312
+ {
313
+ id: 'emptyContext',
314
+ title: this.languageService.translate.instant('igo.context.contextManager.emptyContext'),
315
+ icon: 'map-outline',
316
+ tooltip: this.languageService.translate.instant('igo.context.contextManager.emptyContextTooltip'),
317
+ handler: () => {
318
+ this.createContext(true);
319
+ }
320
+ },
321
+ {
322
+ id: 'contextFromMap',
323
+ title: this.languageService.translate.instant('igo.context.contextManager.contextMap'),
324
+ icon: 'map-check',
325
+ tooltip: this.languageService.translate.instant('igo.context.contextManager.contextMapTooltip'),
326
+ handler: () => {
327
+ this.createContext(false);
328
+ }
329
+ }
330
+ ]);
331
+ }
332
+ next() {
333
+ this.change$.next();
334
+ }
335
+ filterContextsList(contexts) {
336
+ if (this.term === '') {
337
+ if (this.sortedAlpha) {
338
+ contexts = this.sortContextsList(contexts);
339
+ }
340
+ return contexts;
341
+ }
342
+ else {
343
+ const ours = contexts.ours.filter((context) => {
344
+ const filterNormalized = this.term
345
+ .toLowerCase()
346
+ .normalize('NFD')
347
+ .replace(/[\u0300-\u036f]/g, '');
348
+ const contextTitleNormalized = context.title
349
+ .toLowerCase()
350
+ .normalize('NFD')
351
+ .replace(/[\u0300-\u036f]/g, '');
352
+ return contextTitleNormalized.includes(filterNormalized);
353
+ });
354
+ let updateContexts = {
355
+ ours
356
+ };
357
+ if (this.contexts.public) {
358
+ const publics = contexts.public.filter((context) => {
359
+ const filterNormalized = this.term
360
+ .toLowerCase()
361
+ .normalize('NFD')
362
+ .replace(/[\u0300-\u036f]/g, '');
363
+ const contextTitleNormalized = context.title
364
+ .toLowerCase()
365
+ .normalize('NFD')
366
+ .replace(/[\u0300-\u036f]/g, '');
367
+ return contextTitleNormalized.includes(filterNormalized);
368
+ });
369
+ updateContexts.public = publics;
370
+ }
371
+ if (this.contexts.shared) {
372
+ const shared = contexts.shared.filter((context) => {
373
+ const filterNormalized = this.term
374
+ .toLowerCase()
375
+ .normalize('NFD')
376
+ .replace(/[\u0300-\u036f]/g, '');
377
+ const contextTitleNormalized = context.title
378
+ .toLowerCase()
379
+ .normalize('NFD')
380
+ .replace(/[\u0300-\u036f]/g, '');
381
+ return contextTitleNormalized.includes(filterNormalized);
382
+ });
383
+ updateContexts.shared = shared;
384
+ }
385
+ if (this.sortedAlpha) {
386
+ updateContexts = this.sortContextsList(updateContexts);
387
+ }
388
+ return updateContexts;
389
+ }
390
+ }
391
+ ngOnDestroy() {
392
+ this.change$$.unsubscribe();
393
+ }
394
+ showFilter() {
395
+ switch (this.showContextFilter) {
396
+ case ContextListControlsEnum.always:
397
+ return true;
398
+ case ContextListControlsEnum.never:
399
+ return false;
400
+ default:
401
+ let totalLength = this.contexts.ours.length;
402
+ this.contexts.public
403
+ ? (totalLength += this.contexts.public.length)
404
+ : (totalLength += 0);
405
+ this.contexts.shared
406
+ ? (totalLength += this.contexts.shared.length)
407
+ : (totalLength += 0);
408
+ if (totalLength >= this.thresholdToFilter) {
409
+ return true;
410
+ }
411
+ return false;
412
+ }
413
+ }
414
+ sortContextsList(contexts) {
415
+ if (contexts) {
416
+ const contextsList = JSON.parse(JSON.stringify(contexts));
417
+ contextsList.ours.sort((a, b) => {
418
+ if (this.normalize(a.title) < this.normalize(b.title)) {
419
+ return -1;
420
+ }
421
+ if (this.normalize(a.title) > this.normalize(b.title)) {
422
+ return 1;
423
+ }
424
+ return 0;
425
+ });
426
+ if (contextsList.shared) {
427
+ contextsList.shared.sort((a, b) => {
428
+ if (this.normalize(a.title) < this.normalize(b.title)) {
429
+ return -1;
430
+ }
431
+ if (this.normalize(a.title) > this.normalize(b.title)) {
432
+ return 1;
433
+ }
434
+ return 0;
435
+ });
436
+ }
437
+ else if (contextsList.public) {
438
+ contextsList.public.sort((a, b) => {
439
+ if (this.normalize(a.title) < this.normalize(b.title)) {
440
+ return -1;
441
+ }
442
+ if (this.normalize(a.title) > this.normalize(b.title)) {
443
+ return 1;
444
+ }
445
+ return 0;
446
+ });
447
+ }
448
+ return contextsList;
449
+ }
450
+ }
451
+ normalize(str) {
452
+ return str
453
+ .normalize('NFD')
454
+ .replace(/[\u0300-\u036f]/g, '')
455
+ .toLowerCase();
456
+ }
457
+ toggleSort(sortAlpha) {
458
+ this.sortedAlpha = sortAlpha;
459
+ }
460
+ clearFilter() {
461
+ this.term = '';
462
+ }
463
+ createContext(empty) {
464
+ this.dialog
465
+ .open(BookmarkDialogComponent, { disableClose: false })
466
+ .afterClosed()
467
+ .pipe(take(1))
468
+ .subscribe((title) => {
469
+ if (title) {
470
+ this.create.emit({ title, empty });
471
+ }
472
+ });
473
+ }
474
+ getPermission(user) {
475
+ if (user) {
476
+ const permission = this.permissions.find((p) => p.name === user.name);
477
+ return permission;
478
+ }
479
+ }
480
+ userSelection(user, parent) {
481
+ const permission = this.getPermission(user);
482
+ if (permission) {
483
+ permission.checked = !permission.checked;
484
+ this.storageService.set('contexts.permissions.' + permission.name, permission.checked);
485
+ permission.indeterminate = false;
486
+ }
487
+ if (parent) {
488
+ let indeterminate = false;
489
+ for (const c of parent.childs) {
490
+ const cPermission = this.getPermission(c);
491
+ if (cPermission.checked !== permission.checked) {
492
+ indeterminate = true;
493
+ break;
494
+ }
495
+ }
496
+ const parentPermission = this.getPermission(parent);
497
+ if (parentPermission) {
498
+ parentPermission.checked = permission.checked;
499
+ this.storageService.set('contexts.permissions.' + parentPermission.name, permission.checked);
500
+ parentPermission.indeterminate = indeterminate;
501
+ }
502
+ }
503
+ if (user.childs) {
504
+ for (const c of user.childs) {
505
+ const childrenPermission = this.getPermission(c);
506
+ if (childrenPermission &&
507
+ childrenPermission.checked !== permission.checked) {
508
+ childrenPermission.checked = permission.checked;
509
+ this.storageService.set('contexts.permissions.' + childrenPermission.name, permission.checked);
510
+ }
511
+ }
512
+ }
513
+ this.filterPermissionsChanged.emit(this.permissions);
514
+ }
515
+ hideContext(context) {
516
+ context.hidden = true;
517
+ if (!this.showHidden) {
518
+ const contexts = { ours: [], shared: [], public: [] };
519
+ contexts.ours = this.contexts.ours.filter((c) => c.id !== context.id);
520
+ contexts.shared = this.contexts.shared.filter((c) => c.id !== context.id);
521
+ contexts.public = this.contexts.public.filter((c) => c.id !== context.id);
522
+ this.contexts = contexts;
523
+ }
524
+ this.hide.emit(context);
525
+ }
526
+ showContext(context) {
527
+ context.hidden = false;
528
+ this.show.emit(context);
529
+ }
530
+ static ɵfac = function ContextListComponent_Factory(t) { return new (t || ContextListComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i1.ConfigService), i0.ɵɵdirectiveInject(i2.AuthService), i0.ɵɵdirectiveInject(i3.MatDialog), i0.ɵɵdirectiveInject(i1.LanguageService), i0.ɵɵdirectiveInject(i1.StorageService)); };
531
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ContextListComponent, selectors: [["igo-context-list"]], inputs: { contexts: "contexts", selectedContext: "selectedContext", map: "map", defaultContextId: "defaultContextId", term: "term" }, outputs: { select: "select", unselect: "unselect", edit: "edit", delete: "delete", save: "save", clone: "clone", create: "create", hide: "hide", show: "show", showHiddenContexts: "showHiddenContexts", favorite: "favorite", managePermissions: "managePermissions", manageTools: "manageTools", filterPermissionsChanged: "filterPermissionsChanged" }, decls: 20, vars: 16, consts: [[3, "navigation"], [1, "context-filter-container"], ["floatLabel", "always", 4, "ngIf"], [1, "actions-container"], ["class", "sort-alpha", "mat-icon-button", "", "matTooltipShowDelay", "500", 3, "matTooltip", "click", 4, "ngIf"], ["class", "add-context-button", "icon", "plus", 3, "iconColor", "store", "withIcon", "withTitle", "horizontal", "mode", 4, "ngIf"], ["class", "users-filter", "mat-icon-button", "", "matTooltipShowDelay", "500", 3, "matTooltip", "matMenuTriggerFor", 4, "ngIf"], ["accountMenu", "matMenu"], [4, "ngFor", "ngForOf"], [1, "profilsMenu"], ["mat-menu-item", ""], [3, "checked", "click", "change"], ["ngFor", "", 3, "ngForOf"], ["floatLabel", "always"], ["matInput", "", "type", "text", 3, "placeholder", "ngModel", "ngModelChange"], ["mat-icon-button", "", "matSuffix", "", "class", "clear-button", "aria-label", "Clear", "color", "warn", 3, "click", 4, "ngIf"], ["mat-icon-button", "", "matSuffix", "", "aria-label", "Clear", "color", "warn", 1, "clear-button", 3, "click"], ["svgIcon", "close"], ["mat-icon-button", "", "matTooltipShowDelay", "500", 1, "sort-alpha", 3, "matTooltip", "click"], ["color", "primary", "svgIcon", "sort-alphabetical-variant"], ["color", "warn", "svgIcon", "sort-variant-remove"], ["icon", "plus", 1, "add-context-button", 3, "iconColor", "store", "withIcon", "withTitle", "horizontal", "mode"], ["mat-icon-button", "", "matTooltipShowDelay", "500", 1, "users-filter", 3, "matTooltip", "matMenuTriggerFor"], ["color", "primary", "svgIcon", "filter-menu"], [3, "checked", "indeterminate", "click", "change"], ["mat-menu-item", "", 3, "matMenuTriggerFor", 4, "ngIf"], ["mat-menu-item", "", 4, "ngIf"], ["subAccountMenu", "matMenu"], [3, "checked", "click", "change", 4, "ngFor", "ngForOf"], ["mat-menu-item", "", 3, "matMenuTriggerFor"], [3, "title", "collapsed", "toggle", 4, "ngIf"], [4, "ngIf"], [3, "title", "collapsed", "toggle"], ["igoListItem", "", "color", "accent", 3, "selected", "context", "default", "edit", "delete", "clone", "save", "hide", "show", "favorite", "manageTools", "managePermissions", "select", "unselect"], ["igoListItem", "", "color", "accent", 3, "showFavorite", "selected", "context", "default", "favorite", "select", "unselect"]], template: function ContextListComponent_Template(rf, ctx) { if (rf & 1) {
532
+ i0.ɵɵelementStart(0, "igo-list", 0)(1, "div", 1);
533
+ i0.ɵɵtemplate(2, ContextListComponent_mat_form_field_2_Template, 7, 8, "mat-form-field", 2);
534
+ i0.ɵɵelementStart(3, "div", 3);
535
+ i0.ɵɵtemplate(4, ContextListComponent_button_4_Template, 3, 3, "button", 4);
536
+ i0.ɵɵtemplate(5, ContextListComponent_button_5_Template, 3, 3, "button", 4);
537
+ i0.ɵɵtemplate(6, ContextListComponent_igo_actionbar_6_Template, 1, 6, "igo-actionbar", 5);
538
+ i0.ɵɵtemplate(7, ContextListComponent_button_7_Template, 3, 4, "button", 6);
539
+ i0.ɵɵelementStart(8, "mat-menu", null, 7);
540
+ i0.ɵɵtemplate(10, ContextListComponent_ng_container_10_Template, 10, 5, "ng-container", 8);
541
+ i0.ɵɵelementStart(11, "span", 9)(12, "div", 10)(13, "mat-checkbox", 11);
542
+ i0.ɵɵlistener("click", function ContextListComponent_Template_mat_checkbox_click_13_listener($event) { return $event.stopPropagation(); })("change", function ContextListComponent_Template_mat_checkbox_change_13_listener() { return ctx.showHiddenContexts.emit(); });
543
+ i0.ɵɵelementEnd()();
544
+ i0.ɵɵelementStart(14, "button", 10);
545
+ i0.ɵɵtext(15);
546
+ i0.ɵɵpipe(16, "translate");
547
+ i0.ɵɵelementEnd()()()()();
548
+ i0.ɵɵtemplate(17, ContextListComponent_ng_template_17_Template, 2, 2, "ng-template", 12);
549
+ i0.ɵɵpipe(18, "keyvalue");
550
+ i0.ɵɵpipe(19, "async");
551
+ i0.ɵɵelementEnd();
552
+ } if (rf & 2) {
553
+ i0.ɵɵproperty("navigation", true);
554
+ i0.ɵɵadvance(2);
555
+ i0.ɵɵproperty("ngIf", ctx.showFilter());
556
+ i0.ɵɵadvance(2);
557
+ i0.ɵɵproperty("ngIf", !ctx.sortedAlpha);
558
+ i0.ɵɵadvance(1);
559
+ i0.ɵɵproperty("ngIf", ctx.sortedAlpha);
560
+ i0.ɵɵadvance(1);
561
+ i0.ɵɵproperty("ngIf", ctx.auth.authenticated && ctx.configService.getConfig("context"));
562
+ i0.ɵɵadvance(1);
563
+ i0.ɵɵproperty("ngIf", ctx.auth.authenticated && ctx.configService.getConfig("context"));
564
+ i0.ɵɵadvance(3);
565
+ i0.ɵɵproperty("ngForOf", ctx.users);
566
+ i0.ɵɵadvance(3);
567
+ i0.ɵɵproperty("checked", ctx.showHidden);
568
+ i0.ɵɵadvance(2);
569
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(16, 10, "igo.context.contextManager.showHidden"), " ");
570
+ i0.ɵɵadvance(2);
571
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(18, 12, i0.ɵɵpipeBind1(19, 14, ctx.contexts$)));
572
+ } }, dependencies: [i4.NgForOf, i4.NgIf, i5.DefaultValueAccessor, i5.NgControlStatus, i5.NgModel, i6.MatFormField, i6.MatLabel, i6.MatSuffix, i7.MatInput, i8.MatIcon, i9.MatIconButton, i10.MatTooltip, i11.MatCheckbox, i12.MatMenu, i12.MatMenuItem, i12.MatMenuTrigger, i13.ListItemDirective, i13.ListComponent, i13.CollapsibleComponent, i13.ActionbarComponent, i14.ContextItemComponent, i4.AsyncPipe, i13.KeyValuePipe, i15.TranslatePipe], styles: ["[_nghost-%COMP%] .context-filter-container[_ngcontent-%COMP%]{display:flex;align-items:center;padding:8px 4px}[_nghost-%COMP%] .context-filter-container[_ngcontent-%COMP%] mat-form-field[_ngcontent-%COMP%]{flex:1}[_nghost-%COMP%] .context-filter-min-width[_ngcontent-%COMP%]{width:calc(100% - 135px);margin:5px;padding-left:6px}[_nghost-%COMP%] .profilsMenu[_ngcontent-%COMP%]{display:flex}[_nghost-%COMP%] .add-context-button[_ngcontent-%COMP%]{margin:0;width:40px;display:inline-flex;overflow:hidden}[_nghost-%COMP%] mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}[_nghost-%COMP%] .actions-container[_ngcontent-%COMP%]{margin-left:4px}"], changeDetection: 0 });
573
+ }
574
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ContextListComponent, [{
575
+ type: Component,
576
+ args: [{ selector: 'igo-context-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<igo-list [navigation]=\"true\">\r\n <div class=\"context-filter-container\">\r\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\r\n <mat-label>{{\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n \"\r\n [(ngModel)]=\"term\"\r\n />\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n class=\"clear-button\"\r\n *ngIf=\"term.length\"\r\n aria-label=\"Clear\"\r\n color=\"warn\"\r\n (click)=\"clearFilter()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <div class=\"actions-container\">\r\n <button\r\n *ngIf=\"!sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.sortAlphabetically' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(true)\"\r\n >\r\n <mat-icon\r\n color=\"primary\"\r\n svgIcon=\"sort-alphabetical-variant\"\r\n ></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(false)\"\r\n >\r\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\r\n </button>\r\n\r\n <igo-actionbar\r\n *ngIf=\"auth.authenticated && configService.getConfig('context')\"\r\n class=\"add-context-button\"\r\n [iconColor]=\"color\"\r\n [store]=\"actionStore\"\r\n [withIcon]=\"true\"\r\n icon=\"plus\"\r\n [withTitle]=\"actionbarMode === 'overlay'\"\r\n [horizontal]=\"false\"\r\n [mode]=\"actionbarMode\"\r\n >\r\n </igo-actionbar>\r\n\r\n <button\r\n *ngIf=\"auth.authenticated && configService.getConfig('context')\"\r\n class=\"users-filter\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"accountMenu\"\r\n >\r\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\r\n </button>\r\n <mat-menu #accountMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let user of users\">\r\n <span class=\"profilsMenu\">\r\n <div mat-menu-item>\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"userSelection(user)\"\r\n >\r\n </mat-checkbox>\r\n </div>\r\n <button\r\n *ngIf=\"user.childs\"\r\n [matMenuTriggerFor]=\"subAccountMenu\"\r\n mat-menu-item\r\n >\r\n {{ user.title }}\r\n </button>\r\n <button mat-menu-item *ngIf=\"!user.childs\">\r\n {{ user.title }}\r\n </button>\r\n </span>\r\n\r\n <mat-menu #subAccountMenu=\"matMenu\">\r\n <div mat-menu-item>\r\n <mat-checkbox\r\n *ngFor=\"let child of user.childs\"\r\n [checked]=\"getPermission(child).checked\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"userSelection(child, user)\"\r\n >\r\n {{ child.title }}\r\n </mat-checkbox>\r\n </div>\r\n </mat-menu>\r\n </ng-container>\r\n\r\n <span class=\"profilsMenu\">\r\n <div mat-menu-item>\r\n <mat-checkbox\r\n [checked]=\"showHidden\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"showHiddenContexts.emit()\"\r\n >\r\n </mat-checkbox>\r\n </div>\r\n <button mat-menu-item>\r\n {{ 'igo.context.contextManager.showHidden' | translate }}\r\n </button>\r\n </span>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n\r\n <ng-template ngFor let-groupContexts [ngForOf]=\"contexts$ | async | keyvalue\">\r\n <igo-collapsible\r\n *ngIf=\"groupContexts.value.length && auth.authenticated\"\r\n [title]=\"titleMapping[groupContexts.key] | translate\"\r\n [collapsed]=\"collapsed[titleMapping[groupContexts.key]]\"\r\n (toggle)=\"collapsed[titleMapping[groupContexts.key]] = $event\"\r\n >\r\n <ng-template ngFor let-context [ngForOf]=\"groupContexts.value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n context.id &&\r\n this.defaultContextId &&\r\n this.defaultContextId === context.id\r\n \"\r\n (edit)=\"edit.emit(context)\"\r\n (delete)=\"delete.emit(context)\"\r\n (clone)=\"clone.emit(context)\"\r\n (save)=\"save.emit(context)\"\r\n (hide)=\"hideContext(context)\"\r\n (show)=\"showContext(context)\"\r\n (favorite)=\"favorite.emit(context)\"\r\n (manageTools)=\"manageTools.emit(context)\"\r\n (managePermissions)=\"managePermissions.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </igo-collapsible>\r\n\r\n <ng-template\r\n *ngIf=\"groupContexts.value.length && !auth.authenticated\"\r\n ngFor\r\n let-context\r\n [ngForOf]=\"groupContexts.value\"\r\n >\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [showFavorite]=\"\r\n configService.getConfig('favoriteContext4NonAuthenticated')\r\n \"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n configService.getConfig('context')\r\n ? defaultContextId === context.id\r\n : defaultContextId === context.uri\r\n \"\r\n (favorite)=\"favorite.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </ng-template>\r\n</igo-list>\r\n", styles: [":host .context-filter-container{display:flex;align-items:center;padding:8px 4px}:host .context-filter-container mat-form-field{flex:1}:host .context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}:host .profilsMenu{display:flex}:host .add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}:host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}:host .actions-container{margin-left:4px}\n"] }]
577
+ }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ConfigService }, { type: i2.AuthService }, { type: i3.MatDialog }, { type: i1.LanguageService }, { type: i1.StorageService }]; }, { contexts: [{
578
+ type: Input
579
+ }], selectedContext: [{
580
+ type: Input
581
+ }], map: [{
582
+ type: Input
583
+ }], defaultContextId: [{
584
+ type: Input
585
+ }], select: [{
586
+ type: Output
587
+ }], unselect: [{
588
+ type: Output
589
+ }], edit: [{
590
+ type: Output
591
+ }], delete: [{
592
+ type: Output
593
+ }], save: [{
594
+ type: Output
595
+ }], clone: [{
596
+ type: Output
597
+ }], create: [{
598
+ type: Output
599
+ }], hide: [{
600
+ type: Output
601
+ }], show: [{
602
+ type: Output
603
+ }], showHiddenContexts: [{
604
+ type: Output
605
+ }], favorite: [{
606
+ type: Output
607
+ }], managePermissions: [{
608
+ type: Output
609
+ }], manageTools: [{
610
+ type: Output
611
+ }], filterPermissionsChanged: [{
612
+ type: Output
613
+ }], term: [{
614
+ type: Input
615
+ }] }); })();
616
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9jb250ZXh0LW1hbmFnZXIvY29udGV4dC1saXN0L2NvbnRleHQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL2NvbnRleHQtbGlzdC9jb250ZXh0LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsRUFFakIsdUJBQXVCLEVBRXhCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBUzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFFTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLEtBQUssRUFDTCxLQUFLLEVBQ04sTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ3BCcEQsa0NBUUM7SUFEQyx1TEFBUyxlQUFBLG9CQUFhLENBQUEsSUFB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WUFVaEMsZUFBUTtZQUFSLG1DQUFRO1lBd0NqQyxlQUFzQjtZQUF0Qix3Q0FBc0I7WUFPeEIsZUFDRjtZQURFLGdHQUNGO1lBTTZCLGVBQXdDO1lBQXhDLHVGQUF3Qzs7O3VGRDFGbEUsb0JBQW9CO2NBTmhDLFNBQVM7MkJBQ0Usa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU07Nk1BYTNDLFFBQVE7a0JBRFgsS0FBSztZQVlGLGVBQWU7a0JBRGxCLEtBQUs7WUFXRixHQUFHO2tCQUROLEtBQUs7WUFVRixnQkFBZ0I7a0JBRG5CLEtBQUs7WUFjSSxNQUFNO2tCQUFmLE1BQU07WUFDRyxRQUFRO2tCQUFqQixNQUFNO1lBQ0csSUFBSTtrQkFBYixNQUFNO1lBQ0csTUFBTTtrQkFBZixNQUFNO1lBQ0csSUFBSTtrQkFBYixNQUFNO1lBQ0csS0FBSztrQkFBZCxNQUFNO1lBQ0csTUFBTTtrQkFBZixNQUFNO1lBQ0csSUFBSTtrQkFBYixNQUFNO1lBQ0csSUFBSTtrQkFBYixNQUFNO1lBQ0csa0JBQWtCO2tCQUEzQixNQUFNO1lBQ0csUUFBUTtrQkFBakIsTUFBTTtZQUNHLGlCQUFpQjtrQkFBMUIsTUFBTTtZQUNHLFdBQVc7a0JBQXBCLE1BQU07WUFDRyx3QkFBd0I7a0JBQWpDLE1BQU07WUF3QkgsSUFBSTtrQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBPbkluaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgT25EZXN0cm95XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ0BpZ28yL2F1dGgnO1xyXG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlLCBMYW5ndWFnZVNlcnZpY2UsIFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB0eXBlIHsgSWdvTWFwIH0gZnJvbSAnQGlnbzIvZ2VvJztcclxuXHJcbmltcG9ydCB7XHJcbiAgRGV0YWlsZWRDb250ZXh0LFxyXG4gIENvbnRleHRzTGlzdCxcclxuICBDb250ZXh0VXNlclBlcm1pc3Npb24sXHJcbiAgQ29udGV4dFByb2ZpbHNcclxufSBmcm9tICcuLi9zaGFyZWQvY29udGV4dC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBDb250ZXh0TGlzdENvbnRyb2xzRW51bSB9IGZyb20gJy4vY29udGV4dC1saXN0LmVudW0nO1xyXG5pbXBvcnQge1xyXG4gIFN1YnNjcmlwdGlvbixcclxuICBCZWhhdmlvclN1YmplY3QsXHJcbiAgUmVwbGF5U3ViamVjdCxcclxuICBFTVBUWSxcclxuICB0aW1lclxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQm9va21hcmtEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb250ZXh0LW1hcC1idXR0b24vYm9va21hcmstYnV0dG9uL2Jvb2ttYXJrLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQWN0aW9uU3RvcmUsIEFjdGlvbmJhck1vZGUgfSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tY29udGV4dC1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29udGV4dC1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb250ZXh0LWxpc3QuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udGV4dExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBjb250ZXh0c0luaXRpYWw6IENvbnRleHRzTGlzdCA9IHsgb3VyczogW10gfTtcclxuICBjb250ZXh0cyQ6IEJlaGF2aW9yU3ViamVjdDxDb250ZXh0c0xpc3Q+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIHRoaXMuY29udGV4dHNJbml0aWFsXHJcbiAgKTtcclxuXHJcbiAgY2hhbmdlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xyXG5cclxuICBwcml2YXRlIGNoYW5nZSQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGNvbnRleHRzKCk6IENvbnRleHRzTGlzdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dHM7XHJcbiAgfVxyXG4gIHNldCBjb250ZXh0cyh2YWx1ZTogQ29udGV4dHNMaXN0KSB7XHJcbiAgICB0aGlzLl9jb250ZXh0cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY29udGV4dHM6IENvbnRleHRzTGlzdCA9IHsgb3VyczogW10gfTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgc2VsZWN0ZWRDb250ZXh0KCk6IERldGFpbGVkQ29udGV4dCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRDb250ZXh0O1xyXG4gIH1cclxuICBzZXQgc2VsZWN0ZWRDb250ZXh0KHZhbHVlOiBEZXRhaWxlZENvbnRleHQpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkQ29udGV4dCA9IHZhbHVlO1xyXG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3NlbGVjdGVkQ29udGV4dDogRGV0YWlsZWRDb250ZXh0O1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBtYXAoKTogSWdvTWFwIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXA7XHJcbiAgfVxyXG4gIHNldCBtYXAodmFsdWU6IElnb01hcCkge1xyXG4gICAgdGhpcy5fbWFwID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX21hcDogSWdvTWFwO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBkZWZhdWx0Q29udGV4dElkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZygnY29udGV4dCcpXHJcbiAgICAgID8gdGhpcy5fZGVmYXVsdENvbnRleHRJZFxyXG4gICAgICA6ICh0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgnZmF2b3JpdGUuY29udGV4dC51cmknKSBhcyBzdHJpbmcpIHx8XHJcbiAgICAgICAgICB0aGlzLl9kZWZhdWx0Q29udGV4dElkO1xyXG4gIH1cclxuICBzZXQgZGVmYXVsdENvbnRleHRJZCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9kZWZhdWx0Q29udGV4dElkID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2RlZmF1bHRDb250ZXh0SWQ6IHN0cmluZztcclxuXHJcbiAgcHVibGljIGNvbGxhcHNlZDogeyBjb250ZXh0U2NvcGUgfVtdID0gW107XHJcblxyXG4gIEBPdXRwdXQoKSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgdW5zZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgZWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBjbG9uZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBjcmVhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdGl0bGU6IHN0cmluZzsgZW1wdHk6IGJvb2xlYW4gfT4oKTtcclxuICBAT3V0cHV0KCkgaGlkZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBzaG93ID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIHNob3dIaWRkZW5Db250ZXh0cyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgZmF2b3JpdGUgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgbWFuYWdlUGVybWlzc2lvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgbWFuYWdlVG9vbHMgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgZmlsdGVyUGVybWlzc2lvbnNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxcclxuICAgIENvbnRleHRVc2VyUGVybWlzc2lvbltdXHJcbiAgPigpO1xyXG5cclxuICBwdWJsaWMgdGl0bGVNYXBwaW5nID0ge1xyXG4gICAgb3VyczogJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLm91ckNvbnRleHRzJyxcclxuICAgIHNoYXJlZDogJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnNoYXJlZENvbnRleHRzJyxcclxuICAgIHB1YmxpYzogJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnB1YmxpY0NvbnRleHRzJ1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyB1c2VyczogQ29udGV4dFByb2ZpbHNbXTtcclxuICBwdWJsaWMgcGVybWlzc2lvbnM6IENvbnRleHRVc2VyUGVybWlzc2lvbltdID0gW107XHJcblxyXG4gIHB1YmxpYyBhY3Rpb25TdG9yZSA9IG5ldyBBY3Rpb25TdG9yZShbXSk7XHJcbiAgcHVibGljIGFjdGlvbmJhck1vZGUgPSBBY3Rpb25iYXJNb2RlLk92ZXJsYXk7XHJcblxyXG4gIHB1YmxpYyBjb2xvciA9ICdwcmltYXJ5JztcclxuXHJcbiAgcHVibGljIHNob3dIaWRkZW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29udGV4dCBmaWx0ZXIgdGVybVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHRlcm0odmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdGVybSA9IHZhbHVlO1xyXG4gICAgdGhpcy5uZXh0KCk7XHJcbiAgfVxyXG4gIGdldCB0ZXJtKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdGVybTtcclxuICB9XHJcbiAgcHVibGljIF90ZXJtOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgZ2V0IHNvcnRlZEFscGhhKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvcnRlZEFscGhhO1xyXG4gIH1cclxuICBzZXQgc29ydGVkQWxwaGEodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3NvcnRlZEFscGhhID0gdmFsdWU7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc29ydGVkQWxwaGE6IGJvb2xlYW4gPSB1bmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyBzaG93Q29udGV4dEZpbHRlciA9IENvbnRleHRMaXN0Q29udHJvbHNFbnVtLmFsd2F5cztcclxuXHJcbiAgcHVibGljIHRocmVzaG9sZFRvRmlsdGVyID0gNTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHVibGljIGF1dGg6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNoYW5nZSQkID0gdGhpcy5jaGFuZ2UkXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGRlYm91bmNlKCgpID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRleHRzLm91cnMubGVuZ3RoID09PSAwICYmXHJcbiAgICAgICAgICAgIHRoaXMuY29udGV4dHMucHVibGljPy5sZW5ndGggPT09IDAgJiZcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0cy5zaGFyZWQ/Lmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICA/IEVNUFRZXHJcbiAgICAgICAgICAgIDogdGltZXIoNTApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0cyQubmV4dCh0aGlzLmZpbHRlckNvbnRleHRzTGlzdCh0aGlzLmNvbnRleHRzKSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWN0aW9uU3RvcmUubG9hZChbXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogJ2VtcHR5Q29udGV4dCcsXHJcbiAgICAgICAgdGl0bGU6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmVtcHR5Q29udGV4dCdcclxuICAgICAgICApLFxyXG4gICAgICAgIGljb246ICdtYXAtb3V0bGluZScsXHJcbiAgICAgICAgdG9vbHRpcDogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZW1wdHlDb250ZXh0VG9vbHRpcCdcclxuICAgICAgICApLFxyXG4gICAgICAgIGhhbmRsZXI6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlQ29udGV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogJ2NvbnRleHRGcm9tTWFwJyxcclxuICAgICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuY29udGV4dE1hcCdcclxuICAgICAgICApLFxyXG4gICAgICAgIGljb246ICdtYXAtY2hlY2snLFxyXG4gICAgICAgIHRvb2x0aXA6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxyXG4gICAgICAgICAgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmNvbnRleHRNYXBUb29sdGlwJ1xyXG4gICAgICAgICksXHJcbiAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVDb250ZXh0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBuZXh0KCkge1xyXG4gICAgdGhpcy5jaGFuZ2UkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmlsdGVyQ29udGV4dHNMaXN0KGNvbnRleHRzOiBDb250ZXh0c0xpc3QpIHtcclxuICAgIGlmICh0aGlzLnRlcm0gPT09ICcnKSB7XHJcbiAgICAgIGlmICh0aGlzLnNvcnRlZEFscGhhKSB7XHJcbiAgICAgICAgY29udGV4dHMgPSB0aGlzLnNvcnRDb250ZXh0c0xpc3QoY29udGV4dHMpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjb250ZXh0cztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IG91cnMgPSBjb250ZXh0cy5vdXJzLmZpbHRlcigoY29udGV4dCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlck5vcm1hbGl6ZWQgPSB0aGlzLnRlcm1cclxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICBjb25zdCBjb250ZXh0VGl0bGVOb3JtYWxpemVkID0gY29udGV4dC50aXRsZVxyXG4gICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgIHJldHVybiBjb250ZXh0VGl0bGVOb3JtYWxpemVkLmluY2x1ZGVzKGZpbHRlck5vcm1hbGl6ZWQpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGxldCB1cGRhdGVDb250ZXh0czogQ29udGV4dHNMaXN0ID0ge1xyXG4gICAgICAgIG91cnNcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmNvbnRleHRzLnB1YmxpYykge1xyXG4gICAgICAgIGNvbnN0IHB1YmxpY3MgPSBjb250ZXh0cy5wdWJsaWMuZmlsdGVyKChjb250ZXh0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdGhpcy50ZXJtXHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgICBjb25zdCBjb250ZXh0VGl0bGVOb3JtYWxpemVkID0gY29udGV4dC50aXRsZVxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHRUaXRsZU5vcm1hbGl6ZWQuaW5jbHVkZXMoZmlsdGVyTm9ybWFsaXplZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdXBkYXRlQ29udGV4dHMucHVibGljID0gcHVibGljcztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuY29udGV4dHMuc2hhcmVkKSB7XHJcbiAgICAgICAgY29uc3Qgc2hhcmVkID0gY29udGV4dHMuc2hhcmVkLmZpbHRlcigoY29udGV4dCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyTm9ybWFsaXplZCA9IHRoaXMudGVybVxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgICAgY29uc3QgY29udGV4dFRpdGxlTm9ybWFsaXplZCA9IGNvbnRleHQudGl0bGVcclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgIHJldHVybiBjb250ZXh0VGl0bGVOb3JtYWxpemVkLmluY2x1ZGVzKGZpbHRlck5vcm1hbGl6ZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHVwZGF0ZUNvbnRleHRzLnNoYXJlZCA9IHNoYXJlZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuc29ydGVkQWxwaGEpIHtcclxuICAgICAgICB1cGRhdGVDb250ZXh0cyA9IHRoaXMuc29ydENvbnRleHRzTGlzdCh1cGRhdGVDb250ZXh0cyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmNoYW5nZSQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0ZpbHRlcigpIHtcclxuICAgIHN3aXRjaCAodGhpcy5zaG93Q29udGV4dEZpbHRlcikge1xyXG4gICAgICBjYXNlIENvbnRleHRMaXN0Q29udHJvbHNFbnVtLmFsd2F5czpcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgY2FzZSBDb250ZXh0TGlzdENvbnRyb2xzRW51bS5uZXZlcjpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgbGV0IHRvdGFsTGVuZ3RoID0gdGhpcy5jb250ZXh0cy5vdXJzLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmNvbnRleHRzLnB1YmxpY1xyXG4gICAgICAgICAgPyAodG90YWxMZW5ndGggKz0gdGhpcy5jb250ZXh0cy5wdWJsaWMubGVuZ3RoKVxyXG4gICAgICAgICAgOiAodG90YWxMZW5ndGggKz0gMCk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0cy5zaGFyZWRcclxuICAgICAgICAgID8gKHRvdGFsTGVuZ3RoICs9IHRoaXMuY29udGV4dHMuc2hhcmVkLmxlbmd0aClcclxuICAgICAgICAgIDogKHRvdGFsTGVuZ3RoICs9IDApO1xyXG4gICAgICAgIGlmICh0b3RhbExlbmd0aCA+PSB0aGlzLnRocmVzaG9sZFRvRmlsdGVyKSB7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc29ydENvbnRleHRzTGlzdChjb250ZXh0czogQ29udGV4dHNMaXN0KSB7XHJcbiAgICBpZiAoY29udGV4dHMpIHtcclxuICAgICAgY29uc3QgY29udGV4dHNMaXN0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjb250ZXh0cykpO1xyXG4gICAgICBjb250ZXh0c0xpc3Qub3Vycy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpIDwgdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpID4gdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoY29udGV4dHNMaXN0LnNoYXJlZCkge1xyXG4gICAgICAgIGNvbnRleHRzTGlzdC5zaGFyZWQuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpIDwgdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpID4gdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmIChjb250ZXh0c0xpc3QucHVibGljKSB7XHJcbiAgICAgICAgY29udGV4dHNMaXN0LnB1YmxpYy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5ub3JtYWxpemUoYS50aXRsZSkgPCB0aGlzLm5vcm1hbGl6ZShiLnRpdGxlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5ub3JtYWxpemUoYS50aXRsZSkgPiB0aGlzLm5vcm1hbGl6ZShiLnRpdGxlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjb250ZXh0c0xpc3Q7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBub3JtYWxpemUoc3RyOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBzdHJcclxuICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxyXG4gICAgICAudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVNvcnQoc29ydEFscGhhOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnNvcnRlZEFscGhhID0gc29ydEFscGhhO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLnRlcm0gPSAnJztcclxuICB9XHJcblxyXG4gIGNyZWF0ZUNvbnRleHQoZW1wdHk/OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1xyXG4gICAgICAub3BlbihCb29rbWFya0RpYWxvZ0NvbXBvbmVudCwgeyBkaXNhYmxlQ2xvc2U6IGZhbHNlIH0pXHJcbiAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgIC5waXBlKHRha2UoMSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHRpdGxlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICAgIHRoaXMuY3JlYXRlLmVtaXQoeyB0aXRsZSwgZW1wdHkgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFBlcm1pc3Npb24odXNlcj8pOiBDb250ZXh0VXNlclBlcm1pc3Npb24ge1xyXG4gICAgaWYgKHVzZXIpIHtcclxuICAgICAgY29uc3QgcGVybWlzc2lvbiA9IHRoaXMucGVybWlzc2lvbnMuZmluZCgocCkgPT4gcC5uYW1lID09PSB1c2VyLm5hbWUpO1xyXG4gICAgICByZXR1cm4gcGVybWlzc2lvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVzZXJTZWxlY3Rpb24odXNlciwgcGFyZW50Pykge1xyXG4gICAgY29uc3QgcGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvbih1c2VyKTtcclxuICAgIGlmIChwZXJtaXNzaW9uKSB7XHJcbiAgICAgIHBlcm1pc3Npb24uY2hlY2tlZCA9ICFwZXJtaXNzaW9uLmNoZWNrZWQ7XHJcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFxyXG4gICAgICAgICdjb250ZXh0cy5wZXJtaXNzaW9ucy4nICsgcGVybWlzc2lvbi5uYW1lLFxyXG4gICAgICAgIHBlcm1pc3Npb24uY2hlY2tlZFxyXG4gICAgICApO1xyXG4gICAgICBwZXJtaXNzaW9uLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgIGxldCBpbmRldGVybWluYXRlID0gZmFsc2U7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGMgb2YgcGFyZW50LmNoaWxkcykge1xyXG4gICAgICAgIGNvbnN0IGNQZXJtaXNzaW9uID0gdGhpcy5nZXRQZXJtaXNzaW9uKGMpO1xyXG4gICAgICAgIGlmIChjUGVybWlzc2lvbi5jaGVja2VkICE9PSBwZXJtaXNzaW9uLmNoZWNrZWQpIHtcclxuICAgICAgICAgIGluZGV0ZXJtaW5hdGUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBhcmVudFBlcm1pc3Npb24gPSB0aGlzLmdldFBlcm1pc3Npb24ocGFyZW50KTtcclxuICAgICAgaWYgKHBhcmVudFBlcm1pc3Npb24pIHtcclxuICAgICAgICBwYXJlbnRQZXJtaXNzaW9uLmNoZWNrZWQgPSBwZXJtaXNzaW9uLmNoZWNrZWQ7XHJcbiAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoXHJcbiAgICAgICAgICAnY29udGV4dHMucGVybWlzc2lvbnMuJyArIHBhcmVudFBlcm1pc3Npb24ubmFtZSxcclxuICAgICAgICAgIHBlcm1pc3Npb24uY2hlY2tlZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcGFyZW50UGVybWlzc2lvbi5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh1c2VyLmNoaWxkcykge1xyXG4gICAgICBmb3IgKGNvbnN0IGMgb2YgdXNlci5jaGlsZHMpIHtcclxuICAgICAgICBjb25zdCBjaGlsZHJlblBlcm1pc3Npb24gPSB0aGlzLmdldFBlcm1pc3Npb24oYyk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgY2hpbGRyZW5QZXJtaXNzaW9uICYmXHJcbiAgICAgICAgICBjaGlsZHJlblBlcm1pc3Npb24uY2hlY2tlZCAhPT0gcGVybWlzc2lvbi5jaGVja2VkXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjaGlsZHJlblBlcm1pc3Npb24uY2hlY2tlZCA9IHBlcm1pc3Npb24uY2hlY2tlZDtcclxuICAgICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFxyXG4gICAgICAgICAgICAnY29udGV4dHMucGVybWlzc2lvbnMuJyArIGNoaWxkcmVuUGVybWlzc2lvbi5uYW1lLFxyXG4gICAgICAgICAgICBwZXJtaXNzaW9uLmNoZWNrZWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWx0ZXJQZXJtaXNzaW9uc0NoYW5nZWQuZW1pdCh0aGlzLnBlcm1pc3Npb25zKTtcclxuICB9XHJcblxyXG4gIGhpZGVDb250ZXh0KGNvbnRleHQ6IERldGFpbGVkQ29udGV4dCkge1xyXG4gICAgY29udGV4dC5oaWRkZW4gPSB0cnVlO1xyXG4gICAgaWYgKCF0aGlzLnNob3dIaWRkZW4pIHtcclxuICAgICAgY29uc3QgY29udGV4dHM6IENvbnRleHRzTGlzdCA9IHsgb3VyczogW10sIHNoYXJlZDogW10sIHB1YmxpYzogW10gfTtcclxuICAgICAgY29udGV4dHMub3VycyA9IHRoaXMuY29udGV4dHMub3Vycy5maWx0ZXIoKGMpID0+IGMuaWQgIT09IGNvbnRleHQuaWQpO1xyXG4gICAgICBjb250ZXh0cy5zaGFyZWQgPSB0aGlzLmNvbnRleHRzLnNoYXJlZC5maWx0ZXIoKGMpID0+IGMuaWQgIT09IGNvbnRleHQuaWQpO1xyXG4gICAgICBjb250ZXh0cy5wdWJsaWMgPSB0aGlzLmNvbnRleHRzLnB1YmxpYy5maWx0ZXIoKGMpID0+IGMuaWQgIT09IGNvbnRleHQuaWQpO1xyXG4gICAgICB0aGlzLmNvbnRleHRzID0gY29udGV4dHM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhpZGUuZW1pdChjb250ZXh0KTtcclxuICB9XHJcblxyXG4gIHNob3dDb250ZXh0KGNvbnRleHQ6IERldGFpbGVkQ29udGV4dCkge1xyXG4gICAgY29udGV4dC5oaWRkZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvdy5lbWl0KGNvbnRleHQpO1xyXG4gIH1cclxufVxyXG4iLCI8aWdvLWxpc3QgW25hdmlnYXRpb25dPVwidHJ1ZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjb250ZXh0LWZpbHRlci1jb250YWluZXJcIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cInNob3dGaWx0ZXIoKVwiIGZsb2F0TGFiZWw9XCJhbHdheXNcIj5cclxuICAgICAgPG1hdC1sYWJlbD57e1xyXG4gICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5maWx0ZXJQbGFjZUhvbGRlcicgfCB0cmFuc2xhdGVcclxuICAgICAgfX08L21hdC1sYWJlbD5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxyXG4gICAgICAgICAgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmZpbHRlclBsYWNlSG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZXJtXCJcclxuICAgICAgLz5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgIGNsYXNzPVwiY2xlYXItYnV0dG9uXCJcclxuICAgICAgICAqbmdJZj1cInRlcm0ubGVuZ3RoXCJcclxuICAgICAgICBhcmlhLWxhYmVsPVwiQ2xlYXJcIlxyXG4gICAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVyKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJjbG9zZVwiPjwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiIXNvcnRlZEFscGhhXCJcclxuICAgICAgICBjbGFzcz1cInNvcnQtYWxwaGFcIlxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cIlxyXG4gICAgICAgICAgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnNvcnRBbHBoYWJldGljYWxseScgfCB0cmFuc2xhdGVcclxuICAgICAgICBcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVTb3J0KHRydWUpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtaWNvblxyXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgIHN2Z0ljb249XCJzb3J0LWFscGhhYmV0aWNhbC12YXJpYW50XCJcclxuICAgICAgICA+PC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICAqbmdJZj1cInNvcnRlZEFscGhhXCJcclxuICAgICAgICBjbGFzcz1cInNvcnQtYWxwaGFcIlxyXG4gICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgIFttYXRUb29sdGlwXT1cIidpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5zb3J0Q29udGV4dE9yZGVyJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQoZmFsc2UpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cIndhcm5cIiBzdmdJY29uPVwic29ydC12YXJpYW50LXJlbW92ZVwiPjwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGlnby1hY3Rpb25iYXJcclxuICAgICAgICAqbmdJZj1cImF1dGguYXV0aGVudGljYXRlZCAmJiBjb25maWdTZXJ2aWNlLmdldENvbmZpZygnY29udGV4dCcpXCJcclxuICAgICAgICBjbGFzcz1cImFkZC1jb250ZXh0LWJ1dHRvblwiXHJcbiAgICAgICAgW2ljb25Db2xvcl09XCJjb2xvclwiXHJcbiAgICAgICAgW3N0b3JlXT1cImFjdGlvblN0b3JlXCJcclxuICAgICAgICBbd2l0aEljb25dPVwidHJ1ZVwiXHJcbiAgICAgICAgaWNvbj1cInBsdXNcIlxyXG4gICAgICAgIFt3aXRoVGl0bGVdPVwiYWN0aW9uYmFyTW9kZSA9PT0gJ292ZXJsYXknXCJcclxuICAgICAgICBbaG9yaXpvbnRhbF09XCJmYWxzZVwiXHJcbiAgICAgICAgW21vZGVdPVwiYWN0aW9uYmFyTW9kZVwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZ28tYWN0aW9uYmFyPlxyXG5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiYXV0aC5hdXRoZW50aWNhdGVkICYmIGNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCdjb250ZXh0JylcIlxyXG4gICAgICAgIGNsYXNzPVwidXNlcnMtZmlsdGVyXCJcclxuICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICBbbWF0VG9vbHRpcF09XCInaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZmlsdGVyVXNlcicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxyXG4gICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJhY2NvdW50TWVudVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCIgc3ZnSWNvbj1cImZpbHRlci1tZW51XCI+PC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxtYXQtbWVudSAjYWNjb3VudE1lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdXNlciBvZiB1c2Vyc1wiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwcm9maWxzTWVudVwiPlxyXG4gICAgICAgICAgICA8ZGl2IG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0UGVybWlzc2lvbih1c2VyKS5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImdldFBlcm1pc3Npb24odXNlcikuaW5kZXRlcm1pbmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXNlclNlbGVjdGlvbih1c2VyKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwidXNlci5jaGlsZHNcIlxyXG4gICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJzdWJBY2NvdW50TWVudVwiXHJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgdXNlci50aXRsZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0lmPVwiIXVzZXIuY2hpbGRzXCI+XHJcbiAgICAgICAgICAgICAge3sgdXNlci50aXRsZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICA8bWF0LW1lbnUgI3N1YkFjY291bnRNZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICA8ZGl2IG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkIG9mIHVzZXIuY2hpbGRzXCJcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImdldFBlcm1pc3Npb24oY2hpbGQpLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVzZXJTZWxlY3Rpb24oY2hpbGQsIHVzZXIpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBjaGlsZC50aXRsZSB9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicHJvZmlsc01lbnVcIj5cclxuICAgICAgICAgIDxkaXYgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInNob3dIaWRkZW5cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2hvd0hpZGRlbkNvbnRleHRzLmVtaXQoKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbT5cclxuICAgICAgICAgICAge3sgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnNob3dIaWRkZW4nIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1ncm91cENvbnRleHRzIFtuZ0Zvck9mXT1cImNvbnRleHRzJCB8IGFzeW5jIHwga2V5dmFsdWVcIj5cclxuICAgIDxpZ28tY29sbGFwc2libGVcclxuICAgICAgKm5nSWY9XCJncm91cENvbnRleHRzLnZhbHVlLmxlbmd0aCAmJiBhdXRoLmF1dGhlbnRpY2F0ZWRcIlxyXG4gICAgICBbdGl0bGVdPVwidGl0bGVNYXBwaW5nW2dyb3VwQ29udGV4dHMua2V5XSB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIFtjb2xsYXBzZWRdPVwiY29sbGFwc2VkW3RpdGxlTWFwcGluZ1tncm91cENvbnRleHRzLmtleV1dXCJcclxuICAgICAgKHRvZ2dsZSk9XCJjb2xsYXBzZWRbdGl0bGVNYXBwaW5nW2dyb3VwQ29udGV4dHMua2V5XV0gPSAkZXZlbnRcIlxyXG4gICAgPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWNvbnRleHQgW25nRm9yT2ZdPVwiZ3JvdXBDb250ZXh0cy52YWx1ZVwiPlxyXG4gICAgICAgIDxpZ28tY29udGV4dC1pdGVtXHJcbiAgICAgICAgICBpZ29MaXN0SXRlbVxyXG4gICAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxyXG4gICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkQ29udGV4dCAmJiBzZWxlY3RlZENvbnRleHQudXJpID09PSBjb250ZXh0LnVyaVwiXHJcbiAgICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCJcclxuICAgICAgICAgIFtkZWZhdWx0XT1cIlxyXG4gICAgICAgICAgICBjb250ZXh0LmlkICYmXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbnRleHRJZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDb250ZXh0SWQgPT09IGNvbnRleHQuaWRcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICAoZWRpdCk9XCJlZGl0LmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKGRlbGV0ZSk9XCJkZWxldGUuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgICAoY2xvbmUpPVwiY2xvbmUuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgICAoc2F2ZSk9XCJzYXZlLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKGhpZGUpPVwiaGlkZUNvbnRleHQoY29udGV4dClcIlxyXG4gICAgICAgICAgKHNob3cpPVwic2hvd0NvbnRleHQoY29udGV4dClcIlxyXG4gICAgICAgICAgKGZhdm9yaXRlKT1cImZhdm9yaXRlLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKG1hbmFnZVRvb2xzKT1cIm1hbmFnZVRvb2xzLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKG1hbmFnZVBlcm1pc3Npb25zKT1cIm1hbmFnZVBlcm1pc3Npb25zLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKHNlbGVjdCk9XCJzZWxlY3QuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgICAodW5zZWxlY3QpPVwidW5zZWxlY3QuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvaWdvLWNvbnRleHQtaXRlbT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvaWdvLWNvbGxhcHNpYmxlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAqbmdJZj1cImdyb3VwQ29udGV4dHMudmFsdWUubGVuZ3RoICYmICFhdXRoLmF1dGhlbnRpY2F0ZWRcIlxyXG4gICAgICBuZ0ZvclxyXG4gICAgICBsZXQtY29udGV4dFxyXG4gICAgICBbbmdGb3JPZl09XCJncm91cENvbnRleHRzLnZhbHVlXCJcclxuICAgID5cclxuICAgICAgPGlnby1jb250ZXh0LWl0ZW1cclxuICAgICAgICBpZ29MaXN0SXRlbVxyXG4gICAgICAgIGNvbG9yPVwiYWNjZW50XCJcclxuICAgICAgICBbc2hvd0Zhdm9yaXRlXT1cIlxyXG4gICAgICAgICAgY29uZmlnU2VydmljZS5nZXRDb25maWcoJ2Zhdm9yaXRlQ29udGV4dDROb25BdXRoZW50aWNhdGVkJylcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZENvbnRleHQgJiYgc2VsZWN0ZWRDb250ZXh0LnVyaSA9PT0gY29udGV4dC51cmlcIlxyXG4gICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxyXG4gICAgICAgIFtkZWZhdWx0XT1cIlxyXG4gICAgICAgICAgY29uZmlnU2VydmljZS5nZXRDb25maWcoJ2NvbnRleHQnKVxyXG4gICAgICAgICAgICA/IGRlZmF1bHRDb250ZXh0SWQgPT09IGNvbnRleHQuaWRcclxuICAgICAgICAgICAgOiBkZWZhdWx0Q29udGV4dElkID09PSBjb250ZXh0LnVyaVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgKGZhdm9yaXRlKT1cImZhdm9yaXRlLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgIChzZWxlY3QpPVwic2VsZWN0LmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICh1bnNlbGVjdCk9XCJ1bnNlbGVjdC5lbWl0KGNvbnRleHQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L2lnby1jb250ZXh0LWl0ZW0+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvaWdvLWxpc3Q+XHJcbiJdfQ==