@arsedizioni/ars-utils 18.5.62 → 19.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +10 -10
  2. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
  3. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +41 -41
  4. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  5. package/fesm2022/arsedizioni-ars-utils-core.mjs +99 -99
  6. package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
  7. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +10 -10
  8. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
  9. package/fesm2022/arsedizioni-ars-utils-help.mjs +13 -13
  10. package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
  11. package/fesm2022/arsedizioni-ars-utils-support.common.mjs +10 -10
  12. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  13. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +6 -6
  14. package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
  15. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +7 -7
  16. package/fesm2022/arsedizioni-ars-utils-tinymce.mjs.map +1 -1
  17. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +58 -58
  18. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
  19. package/fesm2022/arsedizioni-ars-utils-ui.mjs +34 -34
  20. package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
  21. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +7 -7
  22. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
  23. package/package.json +5 -29
  24. package/esm2022/arsedizioni-ars-utils.mjs +0 -5
  25. package/esm2022/clipper.common/arsedizioni-ars-utils-clipper.common.mjs +0 -5
  26. package/esm2022/clipper.common/common/common.module.mjs +0 -16
  27. package/esm2022/clipper.common/common/definitions.mjs +0 -2041
  28. package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +0 -100
  29. package/esm2022/clipper.common/common/messages.mjs +0 -36
  30. package/esm2022/clipper.common/common/services/clipper.service.mjs +0 -1011
  31. package/esm2022/clipper.common/public_api.mjs +0 -5
  32. package/esm2022/clipper.ui/arsedizioni-ars-utils-clipper.ui.mjs +0 -5
  33. package/esm2022/clipper.ui/documents.mjs +0 -50
  34. package/esm2022/clipper.ui/public_api.mjs +0 -18
  35. package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +0 -766
  36. package/esm2022/clipper.ui/ui/document/document.component.mjs +0 -688
  37. package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +0 -118
  38. package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +0 -441
  39. package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +0 -217
  40. package/esm2022/clipper.ui/ui/references/references.component.mjs +0 -380
  41. package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +0 -116
  42. package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +0 -339
  43. package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +0 -251
  44. package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +0 -17
  45. package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +0 -106
  46. package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +0 -120
  47. package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +0 -531
  48. package/esm2022/core/arsedizioni-ars-utils-core.mjs +0 -5
  49. package/esm2022/core/core.module.mjs +0 -151
  50. package/esm2022/core/dateFnsAdapter.mjs +0 -203
  51. package/esm2022/core/definitions.mjs +0 -47
  52. package/esm2022/core/directives/autoFocusDirective.mjs +0 -22
  53. package/esm2022/core/directives/changeDateIntervalDirective.mjs +0 -48
  54. package/esm2022/core/directives/copyClipboardDirective.mjs +0 -46
  55. package/esm2022/core/directives/validators.mjs +0 -502
  56. package/esm2022/core/pipes/format.pipe.mjs +0 -53
  57. package/esm2022/core/pipes/replace.pipe.mjs +0 -29
  58. package/esm2022/core/pipes/safe-html.pipe.mjs +0 -24
  59. package/esm2022/core/pipes/safe-url.pipe.mjs +0 -24
  60. package/esm2022/core/pipes/search-callback.pipe.mjs +0 -21
  61. package/esm2022/core/pipes/search-filter.pipe.mjs +0 -50
  62. package/esm2022/core/public_api.mjs +0 -22
  63. package/esm2022/core/selectable.mjs +0 -131
  64. package/esm2022/core/services/broadcast.service.mjs +0 -35
  65. package/esm2022/core/services/broadcastChannelManager.mjs +0 -80
  66. package/esm2022/core/services/environment.service.mjs +0 -29
  67. package/esm2022/core/services/screen.service.mjs +0 -23
  68. package/esm2022/core/services/theme.service.mjs +0 -140
  69. package/esm2022/core/system.mjs +0 -664
  70. package/esm2022/evolution.common/arsedizioni-ars-utils-evolution.common.mjs +0 -5
  71. package/esm2022/evolution.common/common/common.module.mjs +0 -16
  72. package/esm2022/evolution.common/common/definitions.mjs +0 -454
  73. package/esm2022/evolution.common/common/interceptors/auth.interceptor.mjs +0 -100
  74. package/esm2022/evolution.common/common/messages.mjs +0 -8
  75. package/esm2022/evolution.common/common/services/evolution.service.mjs +0 -490
  76. package/esm2022/evolution.common/public_api.mjs +0 -5
  77. package/esm2022/help/arsedizioni-ars-utils-help.mjs +0 -5
  78. package/esm2022/help/components/help-viewer/help-viewer.component.mjs +0 -442
  79. package/esm2022/help/definitions.mjs +0 -2
  80. package/esm2022/help/help.module.mjs +0 -12
  81. package/esm2022/help/public_api.mjs +0 -7
  82. package/esm2022/help/services/help.service.mjs +0 -77
  83. package/esm2022/public_api.mjs +0 -15
  84. package/esm2022/support.common/arsedizioni-ars-utils-support.common.mjs +0 -5
  85. package/esm2022/support.common/common/common.module.mjs +0 -16
  86. package/esm2022/support.common/common/definitions.mjs +0 -29
  87. package/esm2022/support.common/common/interceptors/auth.interceptor.mjs +0 -100
  88. package/esm2022/support.common/common/messages.mjs +0 -13
  89. package/esm2022/support.common/common/services/support.service.mjs +0 -289
  90. package/esm2022/support.common/public_api.mjs +0 -8
  91. package/esm2022/support.ui/arsedizioni-ars-utils-support.ui.mjs +0 -5
  92. package/esm2022/support.ui/public_api.mjs +0 -5
  93. package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +0 -80
  94. package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +0 -233
  95. package/esm2022/tinymce/arsedizioni-ars-utils-tinymce.mjs +0 -5
  96. package/esm2022/tinymce/full-screen-editor/full-screen-editor.component.mjs +0 -48
  97. package/esm2022/tinymce/public_api.mjs +0 -7
  98. package/esm2022/tinymce/tinymce.module.mjs +0 -19
  99. package/esm2022/tinymce/utils.mjs +0 -150
  100. package/esm2022/ui/arsedizioni-ars-utils-ui.mjs +0 -5
  101. package/esm2022/ui/public_api.mjs +0 -12
  102. package/esm2022/ui/ui/components/button-selector/button-selector.component.mjs +0 -150
  103. package/esm2022/ui/ui/components/button-toggle/button-toggle.component.mjs +0 -51
  104. package/esm2022/ui/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
  105. package/esm2022/ui/ui/components/chips-selector/chips-selector.component.mjs +0 -272
  106. package/esm2022/ui/ui/components/file-input/file-input.component.mjs +0 -264
  107. package/esm2022/ui/ui/components/file-preview/file-preview.component.mjs +0 -73
  108. package/esm2022/ui/ui/components/filter-bar/filter-bar.component.mjs +0 -356
  109. package/esm2022/ui/ui/definitions.mjs +0 -2
  110. package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +0 -47
  111. package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +0 -101
  112. package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +0 -86
  113. package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +0 -51
  114. package/esm2022/ui/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
  115. package/esm2022/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
  116. package/esm2022/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
  117. package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +0 -49
  118. package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +0 -89
  119. package/esm2022/ui/ui/dialogs/select/select-dialog.component.mjs +0 -374
  120. package/esm2022/ui/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
  121. package/esm2022/ui/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
  122. package/esm2022/ui/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
  123. package/esm2022/ui/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
  124. package/esm2022/ui/ui/dialogs/toast/toast.component.mjs +0 -32
  125. package/esm2022/ui/ui/directives/resize-table-column.directive.mjs +0 -63
  126. package/esm2022/ui/ui/filters.mjs +0 -43
  127. package/esm2022/ui/ui/paginatorIntl.mjs +0 -34
  128. package/esm2022/ui/ui/services/dialog.service.mjs +0 -417
  129. package/esm2022/ui/ui/services/ui.service.mjs +0 -21
  130. package/esm2022/ui/ui/ui.module.mjs +0 -21
  131. package/esm2022/ui.application/arsedizioni-ars-utils-ui.application.mjs +0 -5
  132. package/esm2022/ui.application/public_api.mjs +0 -21
  133. package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +0 -150
  134. package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +0 -51
  135. package/esm2022/ui.application/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
  136. package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +0 -272
  137. package/esm2022/ui.application/ui/components/file-input/file-input.component.mjs +0 -264
  138. package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +0 -73
  139. package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +0 -356
  140. package/esm2022/ui.application/ui/definitions.mjs +0 -31
  141. package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
  142. package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
  143. package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
  144. package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +0 -374
  145. package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
  146. package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
  147. package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
  148. package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
  149. package/esm2022/ui.application/ui/directives/resize-table-column.directive.mjs +0 -63
  150. package/esm2022/ui.application/ui/filters.mjs +0 -43
  151. package/esm2022/ui.application/ui/services/applicationDialog.service.mjs +0 -304
  152. package/esm2022/ui.application/ui/ui.module.mjs +0 -30
  153. package/esm2022/ui.oauth/arsedizioni-ars-utils-ui.oauth.mjs +0 -5
  154. package/esm2022/ui.oauth/public_api.mjs +0 -6
  155. package/esm2022/ui.oauth/ui/components/login/login-oauth.component.mjs +0 -199
  156. package/esm2022/ui.oauth/ui/definitions.mjs +0 -7
  157. package/esm2022/ui.oauth/ui/ui.module.mjs +0 -13
  158. package/ui/ui/components/button-selector/button-selector.component.d.ts +0 -52
  159. package/ui/ui/components/button-toggle/button-toggle.component.d.ts +0 -28
  160. package/ui/ui/components/calendar-empty-header/calendar-empy-header.component.d.ts +0 -11
  161. package/ui/ui/components/chips-selector/chips-selector.component.d.ts +0 -82
  162. package/ui/ui/components/file-input/file-input.component.d.ts +0 -88
  163. package/ui/ui/components/file-preview/file-preview.component.d.ts +0 -26
  164. package/ui/ui/components/filter-bar/filter-bar.component.d.ts +0 -83
  165. package/ui/ui/dialogs/prompt/prompt-dialog.component.d.ts +0 -18
  166. package/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.d.ts +0 -18
  167. package/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.d.ts +0 -18
  168. package/ui/ui/dialogs/select/select-dialog.component.d.ts +0 -122
  169. package/ui/ui/dialogs/select-file/select-file-dialog.component.d.ts +0 -36
  170. package/ui/ui/dialogs/select-picture/select-picture-dialog.component.d.ts +0 -26
  171. package/ui/ui/dialogs/select-tree/select-tree-dialog.component.d.ts +0 -98
  172. package/ui/ui/dialogs/send-to/send-to-dialog.component.d.ts +0 -28
  173. package/ui/ui/directives/resize-table-column.directive.d.ts +0 -19
  174. package/ui/ui/filters.d.ts +0 -57
@@ -1,531 +0,0 @@
1
- import { BreakpointObserver } from '@angular/cdk/layout';
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ViewChild, inject, signal } from '@angular/core';
3
- import { ClipperMessages, ClipperModel, ClipperSearchParams, ClipperSearchResult, ClipperSort, ClipperUtils } from '@arsedizioni/ars-utils/clipper.common';
4
- import { DateFormat, ScreenService, SystemUtils, ThemeService } from '@arsedizioni/ars-utils/core';
5
- import { startOfDay, startOfToday, subDays } from 'date-fns';
6
- import { Subject } from 'rxjs';
7
- import { ClipperDocumentsUtils } from '../../documents';
8
- import { ClipperDocumentManager } from '../document-manager/document-manager';
9
- import { ClipperSearchCalendarComponent } from '../search-calendar/search-calendar.component';
10
- import { ClipperSearchFacetsComponent } from '../search-facets/search-facets.component';
11
- import * as i0 from "@angular/core";
12
- export class ClipperSearchResultManager extends ClipperDocumentManager {
13
- constructor() {
14
- super(...arguments);
15
- this.unsubscribe = new Subject();
16
- this.changeDetector = inject(ChangeDetectorRef);
17
- this.breakpointObserver = inject(BreakpointObserver);
18
- this.themeService = inject(ThemeService);
19
- this.screenService = inject(ScreenService);
20
- this.selection = null;
21
- this.snapshot = new ClipperSearchResult();
22
- this.filterBusy = signal(false);
23
- this.filterParams = new ClipperSearchParams();
24
- this.filterPaneHasBackdrop = false;
25
- this.filterPaneClosed = false;
26
- this.filterPane2HasBackdrop = false;
27
- this.filterPane2Closed = false;
28
- this.sortOptions = [];
29
- this.sortMode = null;
30
- this.scrollerId = 'scroller_' + SystemUtils.generateUUID();
31
- this.restorableId = null;
32
- this.hasFacets = signal(false);
33
- this.hasRegions = () => {
34
- return (this.filterParams.sectors?.filter(n => n.value === 'LR').length ?? 0) > 0;
35
- };
36
- }
37
- ngOnDestroy() {
38
- this.unsubscribe.next();
39
- this.unsubscribe.complete();
40
- }
41
- /**
42
- * Update menu buttons visibility when the menu is closed
43
- */
44
- updateMenuButtonsVisibility() {
45
- if (this.snapshot) {
46
- this.snapshot.items?.forEach(n => {
47
- n.isMenuOpen = false;
48
- });
49
- }
50
- }
51
- /**
52
- * Scroll on top o list area
53
- * @param top: the top position
54
- */
55
- scroll(top = 0) {
56
- const elem = document.getElementById(this.scrollerId);
57
- if (elem) {
58
- elem.scrollTo({ top: top, left: 0, behavior: 'auto' });
59
- }
60
- }
61
- /**
62
- * Check if every element are selected
63
- */
64
- allSelected() {
65
- return this.selection?.current?.selected?.length === this.snapshot?.items?.length;
66
- }
67
- /**
68
- * Master selection toggle
69
- * @param select: true to select all elements false to deselect all elements
70
- */
71
- selectAll(select = true) {
72
- if (select) {
73
- this.snapshot?.items?.forEach(n => this.selection?.select(n, n.documentId));
74
- }
75
- else {
76
- this.snapshot?.items?.forEach(n => this.selection?.deselect(n, n.documentId));
77
- }
78
- }
79
- /**
80
- * Check if selections exists
81
- * @returns true if at least one element is selected
82
- */
83
- hasAnySelection() {
84
- return (this.selection?.all?.length ?? 0) > 0;
85
- }
86
- /**
87
- * Check if only one element is selected
88
- * @returns true if only one element is selected
89
- */
90
- hasSingleSelection() {
91
- return (this.selection?.all?.length ?? 0) === 1;
92
- }
93
- /**
94
- * Get the first selected item
95
- * @returns the selected item or null
96
- */
97
- getSingleSelection() {
98
- return this.hasAnySelection() ? this.selection?.all[0] : null;
99
- }
100
- /**
101
- * Clear selection
102
- */
103
- clearSelection() {
104
- return this.selection?.clear();
105
- }
106
- /**
107
- * Return the number of selected items or null
108
- * @returns Return the number of selected items
109
- */
110
- countSelections() {
111
- return (this.selection && this.selection?.all?.length > 0) ? this.selection?.all?.length : null;
112
- }
113
- /**
114
- * Get the selected id
115
- */
116
- getSeletectId() {
117
- if (this.hasAnySelection()) {
118
- return this.selection?.all[0].documentId;
119
- }
120
- return null;
121
- }
122
- /**
123
- * Get all selected ids
124
- */
125
- getSeletectIds() {
126
- if ((this.selection?.all?.length ?? 0) > 100) {
127
- this.dialogService.error('La selezione non può contenere più di 100 elementi.');
128
- return null;
129
- }
130
- let ids = [];
131
- if (this.hasAnySelection()) {
132
- this.selection?.all?.forEach(n => {
133
- ids.push(n.documentId);
134
- });
135
- }
136
- return ids;
137
- }
138
- /**
139
- * Get all selected ids
140
- * @returns a tuple list with id and data
141
- */
142
- getSeletectIdsAndData() {
143
- if ((this.selection?.all?.length ?? 0) > 100) {
144
- this.dialogService.error('La selezione non può contenere più di 100 elementi.');
145
- return null;
146
- }
147
- let data = [];
148
- if (this.hasAnySelection()) {
149
- this.selection?.all?.forEach(n => {
150
- data.push([n.documentId, n]);
151
- });
152
- }
153
- return data;
154
- }
155
- /**
156
- * Prepare result items
157
- * @param items : the items to process
158
- * @param params : the current search params
159
- */
160
- prepareResultItems(items, params) {
161
- const today = startOfToday();
162
- const groupByYear = !params.sortMode ||
163
- params.sortMode === ClipperSort.DateAsc ||
164
- params.sortMode === ClipperSort.DateDesc ||
165
- params.sortMode === ClipperSort.SourceDateAsc ||
166
- params.sortMode === ClipperSort.SourceDateDesc;
167
- const groupByRelevance = params.sortMode === ClipperSort.Relevance;
168
- const groupByPopularity = params.sortMode === ClipperSort.Popularity;
169
- let group = '';
170
- items?.forEach(n => {
171
- n.documentId = n.documentId ?? n.id;
172
- this.selection?.updateCurrent(n, n.documentId);
173
- if (n.model === ClipperModel.Quesiti) {
174
- n.info = "Quesito n° " + n.number + " del " + SystemUtils.formatDate(n.date, "d MMM yyyy");
175
- }
176
- else if (n.model === ClipperModel.Scadenze ||
177
- n.model === ClipperModel.Segnalazioni) {
178
- switch (n.model) {
179
- case ClipperModel.Scadenze:
180
- n.originDescription = 'Scadenza';
181
- break;
182
- case ClipperModel.Segnalazioni:
183
- n.originDescription = 'Segnalazione';
184
- break;
185
- }
186
- if (n.expiringInfo) {
187
- let parts = n.expiringInfo.split('|');
188
- if (parts.length === 3) {
189
- n.expiringDescription = parts[2];
190
- }
191
- }
192
- if (n.expiringDate) {
193
- n.date = startOfDay(new Date(n.expiringDate));
194
- const d = startOfDay(subDays(n.date, 15));
195
- n.isExpiring = today <= n.date && today >= d;
196
- n.isExpired = n.date < today;
197
- }
198
- }
199
- else {
200
- if ((n.model === ClipperModel.Articoli ||
201
- n.model === ClipperModel.News) &&
202
- n.tags) {
203
- n.info = n.tags.toUpperCase().substring(1).replaceAll("#", ", ");
204
- }
205
- if (n.model !== ClipperModel.AggiornamentoNormativo &&
206
- n.model !== ClipperModel.NormativaVigente &&
207
- n.model !== ClipperModel.GiurisprudenzaRecente &&
208
- n.model !== ClipperModel.Juris &&
209
- n.date) {
210
- n.date = startOfDay(new Date(n.date ?? n.publishingDate));
211
- const d = startOfDay(subDays(startOfToday(), 7));
212
- n.isNew = n.date > d;
213
- }
214
- if (n.anchors) {
215
- let anchorType = null;
216
- let anchors = [];
217
- n.anchors.forEach(a => {
218
- if (a.type === 20)
219
- return;
220
- if (a.type !== anchorType) {
221
- if (a.type >= 3)
222
- anchors.push({ text: a.typeDescription });
223
- anchorType = a.type;
224
- }
225
- let score = a.score;
226
- if (score > 7)
227
- score -= 7;
228
- else if (score > 5)
229
- score -= 5;
230
- else if (score > 3)
231
- score -= 3;
232
- anchors.push({
233
- text: a.text,
234
- title: a.title,
235
- documentId: a.documentId,
236
- uri: a.uri,
237
- veryRelevant: score > 0.6
238
- });
239
- });
240
- n.anchors = anchors;
241
- }
242
- if (n.validityState > 0) {
243
- n.validityDescription = 'Il documento non è più vigente';
244
- n.isExpired = true;
245
- if (n.validUntilDate) {
246
- const expiringDate = startOfDay(new Date(n.validUntilDate));
247
- if (expiringDate < today) {
248
- n.validityDescription =
249
- 'Il documento non è più vigente dal ' +
250
- SystemUtils.formatDate(expiringDate) +
251
- '.';
252
- }
253
- else {
254
- n.validityDescription =
255
- 'Il documento non sarà più vigente dal ' +
256
- SystemUtils.formatDate(expiringDate) +
257
- '.';
258
- n.isExpired = false;
259
- }
260
- }
261
- }
262
- if (n.expiringDate) {
263
- n.date = startOfDay(new Date(n.expiringDate));
264
- const d = startOfDay(subDays(n.date, 15));
265
- n.isExpiring = today <= n.date && today >= d;
266
- n.isExpired = n.date < today;
267
- }
268
- }
269
- if (groupByYear) {
270
- const year = SystemUtils.formatDate(n.date, DateFormat.LongMonthAndYear).toLowerCase();
271
- if (group !== year) {
272
- n.group = year;
273
- group = year;
274
- }
275
- }
276
- else if (groupByRelevance) {
277
- if (group !== 'none') {
278
- n.group =
279
- 'Elementi più rilevanti per la ricerca: ' + params.text;
280
- group = 'none';
281
- }
282
- }
283
- else if (groupByPopularity) {
284
- if (group !== 'none') {
285
- n.group = 'Elementi più popolari in ordine decrescente';
286
- group = 'none';
287
- }
288
- }
289
- });
290
- }
291
- /**
292
- * Prepare results
293
- * @param data : the result list to prepare
294
- */
295
- prepareResults(data) {
296
- this.selection?.current.clear();
297
- this.snapshot = data;
298
- if (this.snapshot.items) {
299
- this.prepareResultItems(this.snapshot.items, this.filterParams);
300
- }
301
- this.changeDetector.markForCheck();
302
- }
303
- /**
304
- * Save current document list or just the selected documents as a csv
305
- * @param format: the export format: 1) list, 2) deadlines
306
- */
307
- exportResults(format = 1) {
308
- if (this.snapshot?.total > 0 || this.hasAnySelection()) {
309
- this.exportItems(this.getSeletectIds(), this.filterParams, format);
310
- }
311
- }
312
- /**
313
- * Return item state css class
314
- * @param item : the item to evaluate
315
- */
316
- getItemStateCssClass(item) {
317
- if (item.isRead !== true && ClipperUtils.isClipperModelReadable(item.model))
318
- return 'unread-bg';
319
- else if (item.isExpired)
320
- return 'expired-bg';
321
- else if (item.popularity === 3)
322
- return 'popular-bg';
323
- else if (item.popularity > 3)
324
- return 'very-popular-bg';
325
- return null;
326
- }
327
- /**
328
- * Return the item state tooltip text
329
- * @param item : the item to evaluate
330
- */
331
- getItemStateTooltip(item) {
332
- if (item.isRead !== true && ClipperUtils.isClipperModelReadable(item.model))
333
- return 'Non letto';
334
- else if (item.isExpired)
335
- return 'Non più vigente';
336
- else if (item.popularity === 3)
337
- return 'Documento con numero di citazioni alto';
338
- else if (item.popularity > 3)
339
- return 'Documento con numero di citazioni molto alto';
340
- return '';
341
- }
342
- /**
343
- * Return the item icon
344
- * @param item : the item to evaluate
345
- */
346
- getItemIcon(item) {
347
- switch (item.model) {
348
- case ClipperModel.NormativaVigente: return 'gavel';
349
- case ClipperModel.Articoli:
350
- case ClipperModel.Quesiti:
351
- case ClipperModel.MetodiDiAnalisi: return 'extension';
352
- default: return 'updated';
353
- }
354
- }
355
- /**
356
- * Toggle the read flag
357
- * @param item : the item to update
358
- * @paran e: the optional click event
359
- */
360
- toggleRead(item, e = null) {
361
- e?.preventDefault();
362
- e?.stopPropagation();
363
- this.setRead(!item?.isRead, item);
364
- }
365
- /**
366
- * Toggle the selection flag
367
- * @param item : the item to update
368
- * @paran e: the optional click event
369
- */
370
- toggleSelection(item, e = null) {
371
- e?.preventDefault();
372
- e?.stopPropagation();
373
- this.selection?.toggle(item, item.documentId);
374
- }
375
- /**
376
- * Set read flag
377
- * @param value: the flag value
378
- * @param item: the item to set or null to use current selection
379
- */
380
- setRead(value, item = null) {
381
- let documentIds = [];
382
- if (item) {
383
- documentIds = [item.documentId];
384
- }
385
- else if (this.hasAnySelection()) {
386
- documentIds = this.selection?.all?.map(n => n.documentId);
387
- }
388
- return this.clipperService.updateState({ documentIds: documentIds, isRead: value })
389
- .subscribe(r => {
390
- if (r.success) {
391
- let changed = 0;
392
- if (item) {
393
- if (item.isRead !== value) {
394
- item.isRead = value;
395
- this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_READ, { document: item, value: value });
396
- changed++;
397
- }
398
- }
399
- else if (this.hasAnySelection()) {
400
- this.selection?.all?.forEach(n => {
401
- if (n.isRead !== value) {
402
- n.isRead = value;
403
- this.broadcastService.sendMessage(ClipperMessages.DOCUMENT_READ, { document: n, value: value });
404
- changed++;
405
- }
406
- });
407
- }
408
- // Update dashboard
409
- if (changed > 0) {
410
- this.clipperService.updateUnreadItems(ClipperUtils.getClipperModuleFromModel(item), item.model, value ? -1 : 1);
411
- this.changeDetector.markForCheck();
412
- }
413
- }
414
- });
415
- }
416
- /**
417
- * Open an item
418
- * @param documentId : the document id
419
- * @param query: the current query or null
420
- * @param newWindow: true if the document must be open into a new window
421
- */
422
- open(documentId, query = null, newWindow = false) {
423
- if (!newWindow)
424
- this.openDocument(documentId, query);
425
- else
426
- window.open('/documento/' + documentId, '_blank');
427
- }
428
- /**
429
- * Open a document
430
- * @param documentId : the document id
431
- * @param query: the current query or null
432
- */
433
- openDocument(documentId, query = null) {
434
- if (!documentId)
435
- return;
436
- ClipperDocumentsUtils.openDocument(this.dialogService.baseService, this.clipperService, documentId, query ?? this.filterParams.expandTextQueryUsingAI
437
- ? (this.filterParams.augmentedText ?? this.filterParams.text)
438
- : this.filterParams.text, null, this.themeService.getTheme());
439
- }
440
- ///
441
- // Restorable
442
- ///
443
- /**
444
- * Save restorable data
445
- * @param id : the restorable id
446
- * @param scroll : the current scroll position
447
- * @param storage : the storage to use. Default si session storage.
448
- */
449
- save(id, scroll = 0, storage = sessionStorage) {
450
- storage.setItem(id, JSON.stringify({
451
- paginator: {
452
- page: this.paginator?.pageIndex ?? 0,
453
- total: this.snapshot?.total ?? 0,
454
- size: this.paginator?.pageSize ?? 15
455
- },
456
- facets: this.facets?.save(),
457
- filterParams: this.filterParams,
458
- scroll: scroll,
459
- sort: { mode: this.sortMode, options: this.sortOptions },
460
- data: this.snapshot
461
- ? { items: this.snapshot.items, total: this.snapshot.total }
462
- : null
463
- }));
464
- }
465
- /**
466
- * Restore data
467
- * @param id : the restorable id
468
- * @param storage : the storage to use. Default si session storage.
469
- */
470
- restore(id, storage = sessionStorage) {
471
- const value = storage.getItem(id);
472
- if (value) {
473
- const data = JSON.parse(value);
474
- if (data) {
475
- this.filterParams = data.filterParams;
476
- const modules = SystemUtils.clone(this.filterParams.modules);
477
- const sectors = SystemUtils.clone(this.filterParams.sectors);
478
- const authors = SystemUtils.clone(this.filterParams.authors);
479
- const tags = SystemUtils.clone(this.filterParams.tags);
480
- const topics = SystemUtils.clone(this.filterParams.topics);
481
- this.filterParams.modules = modules;
482
- this.filterParams.sectors = null;
483
- this.filterParams.authors = null;
484
- this.filterParams.tags = null;
485
- this.filterParams.topics = null;
486
- this.snapshot = data.data;
487
- this.sortMode = data.sort.mode;
488
- this.sortOptions = data.sort.options;
489
- setTimeout(() => {
490
- this.filterParams.sectors = sectors;
491
- this.filterParams.authors = authors;
492
- this.filterParams.tags = tags;
493
- this.filterParams.topics = topics;
494
- if (this.facets && data.facets) {
495
- this.facets.restore(data.facets);
496
- this.hasFacets.set(data.facets.hasFacets === true ? true : false);
497
- }
498
- if (this.paginator && data.paginator) {
499
- this.paginator.pageIndex = data.paginator.page;
500
- this.paginator.pageSize = data.paginator.size;
501
- this.paginator.length = data.paginator.total;
502
- }
503
- this.scroll(data.scroll ?? 0);
504
- this.broadcastService.sendMessage(ClipperMessages.COMMAND_SEARCH_RESTORED, data.filterParams);
505
- this.changeDetector.detectChanges();
506
- }, 750);
507
- }
508
- }
509
- }
510
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ClipperSearchResultManager, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
511
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: ClipperSearchResultManager, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "paginator", first: true, predicate: ["paginator"], descendants: true }, { propertyName: "facets", first: true, predicate: ["facets"], descendants: true }, { propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true }], usesInheritance: true, ngImport: i0, template: '<div></div>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
512
- }
513
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ClipperSearchResultManager, decorators: [{
514
- type: Component,
515
- args: [{
516
- template: '<div></div>',
517
- standalone: true,
518
- changeDetection: ChangeDetectionStrategy.OnPush,
519
- imports: [ClipperDocumentManager, ClipperSearchFacetsComponent, ClipperSearchCalendarComponent],
520
- }]
521
- }], propDecorators: { paginator: [{
522
- type: ViewChild,
523
- args: ['paginator']
524
- }], facets: [{
525
- type: ViewChild,
526
- args: ['facets']
527
- }], calendar: [{
528
- type: ViewChild,
529
- args: ['calendar']
530
- }] } });
531
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLXJlc3VsdC1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyL3NlYXJjaC1yZXN1bHQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQWEsU0FBUyxFQUFFLE1BQU0sRUFDdkMsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBdUIsZUFBZSxFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEwsT0FBTyxFQUNILFVBQVUsRUFDSyxhQUFhLEVBQW1CLFdBQVcsRUFDMUQsWUFBWSxFQUNmLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDOUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDOUYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMENBQTBDLENBQUM7O0FBVXhGLE1BQU0sT0FBTywwQkFDVCxTQUFRLHNCQUFzQjtJQVBsQzs7UUFhYyxnQkFBVyxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2pELG1CQUFjLEdBQUcsTUFBTSxDQUFD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Uzt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgaW5qZWN0LFxyXG4gICAgc2lnbmFsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudEluZm8sIENsaXBwZXJNZXNzYWdlcywgQ2xpcHBlck1vZGVsLCBDbGlwcGVyU2VhcmNoUGFyYW1zLCBDbGlwcGVyU2VhcmNoUmVzdWx0LCBDbGlwcGVyU29ydCwgQ2xpcHBlclV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgICBEYXRlRm9ybWF0LFxyXG4gICAgTmFtZVZhbHVlSXRlbSwgU2NyZWVuU2VydmljZSwgU2VsZWN0YWJsZU1vZGVsLCBTeXN0ZW1VdGlscyxcclxuICAgIFRoZW1lU2VydmljZVxyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IHN0YXJ0T2ZEYXksIHN0YXJ0T2ZUb2RheSwgc3ViRGF5cyB9IGZyb20gJ2RhdGUtZm5zJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRzVXRpbHMgfSBmcm9tICcuLi8uLi9kb2N1bWVudHMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRNYW5hZ2VyIH0gZnJvbSAnLi4vZG9jdW1lbnQtbWFuYWdlci9kb2N1bWVudC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaENhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWNhbGVuZGFyL3NlYXJjaC1jYWxlbmRhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRmFjZXRzQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWZhY2V0cy9zZWFyY2gtZmFjZXRzLmNvbXBvbmVudCc7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgdGVtcGxhdGU6ICc8ZGl2PjwvZGl2PicsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBpbXBvcnRzOiBbQ2xpcHBlckRvY3VtZW50TWFuYWdlciwgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCwgQ2xpcHBlclNlYXJjaENhbGVuZGFyQ29tcG9uZW50XSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJTZWFyY2hSZXN1bHRNYW5hZ2VyXHJcbiAgICBleHRlbmRzIENsaXBwZXJEb2N1bWVudE1hbmFnZXJcclxuICAgIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3BhZ2luYXRvcicpIHBhZ2luYXRvciE6IE1hdFBhZ2luYXRvcjtcclxuICAgIEBWaWV3Q2hpbGQoJ2ZhY2V0cycpIGZhY2V0cyE6IENsaXBwZXJTZWFyY2hGYWNldHNDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdjYWxlbmRhcicpIGNhbGVuZGFyITogQ2xpcHBlclNlYXJjaENhbGVuZGFyQ29tcG9uZW50O1xyXG5cclxuICAgIHByb3RlY3RlZCB1bnN1YnNjcmliZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgcHJvdGVjdGVkIGJyZWFrcG9pbnRPYnNlcnZlciA9IGluamVjdChCcmVha3BvaW50T2JzZXJ2ZXIpO1xyXG4gICAgcHJpdmF0ZSB0aGVtZVNlcnZpY2UgPSBpbmplY3QoVGhlbWVTZXJ2aWNlKTtcclxuICAgIHB1YmxpYyBzY3JlZW5TZXJ2aWNlID0gaW5qZWN0KFNjcmVlblNlcnZpY2UpO1xyXG4gICAgcHVibGljIHNlbGVjdGlvbjogU2VsZWN0YWJsZU1vZGVsPENsaXBwZXJEb2N1bWVudEluZm8sIHN0cmluZz4gfCBudWxsID0gbnVsbDtcclxuICAgIHByb3RlY3RlZCBzbmFwc2hvdDogQ2xpcHBlclNlYXJjaFJlc3VsdCB8IG51bGwgPSBuZXcgQ2xpcHBlclNlYXJjaFJlc3VsdCgpO1xyXG4gICAgcHJvdGVjdGVkIGZpbHRlckJ1c3kgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJvdGVjdGVkIGZpbHRlclBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcyA9IG5ldyBDbGlwcGVyU2VhcmNoUGFyYW1zKCk7XHJcbiAgICBwcm90ZWN0ZWQgZmlsdGVyUGFuZUhhc0JhY2tkcm9wOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcm90ZWN0ZWQgZmlsdGVyUGFuZUNsb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIGZpbHRlclBhbmUySGFzQmFja2Ryb3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByb3RlY3RlZCBmaWx0ZXJQYW5lMkNsb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJvdGVjdGVkIHNvcnRPcHRpb25zOiBOYW1lVmFsdWVJdGVtPENsaXBwZXJTb3J0PltdID0gW107XHJcbiAgICBwcm90ZWN0ZWQgc29ydE1vZGU6IE5hbWVWYWx1ZUl0ZW08Q2xpcHBlclNvcnQ+IHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcm90ZWN0ZWQgc2Nyb2xsZXJJZDogc3RyaW5nID0gJ3Njcm9sbGVyXycgKyBTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKTtcclxuICAgIHByb3RlY3RlZCByZXN0b3JhYmxlSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJvdGVjdGVkIGhhc0ZhY2V0cyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcm90ZWN0ZWQgaGFzUmVnaW9ucyA9ICgpOiBib29sZWFuID0+IHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvcnM/LmZpbHRlcihuID0+IG4udmFsdWUgPT09ICdMUicpLmxlbmd0aCA/PyAwKSA+IDA7XHJcbiAgICB9O1xyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZSBtZW51IGJ1dHRvbnMgdmlzaWJpbGl0eSB3aGVuIHRoZSBtZW51IGlzIGNsb3NlZFxyXG4gICAgICovXHJcbiAgICB1cGRhdGVNZW51QnV0dG9uc1Zpc2liaWxpdHkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc25hcHNob3QpIHtcclxuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdC5pdGVtcz8uZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICAgIG4uaXNNZW51T3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTY3JvbGwgb24gdG9wIG8gbGlzdCBhcmVhXHJcbiAgICAgKiBAcGFyYW0gdG9wOiB0aGUgdG9wIHBvc2l0aW9uXHJcbiAgICAgKi9cclxuICAgIHNjcm9sbCh0b3A6IG51bWJlciA9IDApIHtcclxuICAgICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zY3JvbGxlcklkKTtcclxuICAgICAgICBpZiAoZWxlbSkge1xyXG4gICAgICAgICAgICBlbGVtLnNjcm9sbFRvKHsgdG9wOiB0b3AsIGxlZnQ6IDAsIGJlaGF2aW9yOiAnYXV0bycgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgaWYgZXZlcnkgZWxlbWVudCBhcmUgc2VsZWN0ZWRcclxuICAgICAqL1xyXG4gICAgYWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uPy5jdXJyZW50Py5zZWxlY3RlZD8ubGVuZ3RoID09PSB0aGlzLnNuYXBzaG90Py5pdGVtcz8ubGVuZ3RoO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFzdGVyIHNlbGVjdGlvbiB0b2dnbGVcclxuICAgICAqIEBwYXJhbSBzZWxlY3Q6IHRydWUgdG8gc2VsZWN0IGFsbCBlbGVtZW50cyBmYWxzZSB0byBkZXNlbGVjdCBhbGwgZWxlbWVudHNcclxuICAgICAqL1xyXG4gICAgc2VsZWN0QWxsKHNlbGVjdDogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAoc2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3Q/Lml0ZW1zPy5mb3JFYWNoKG4gPT4gdGhpcy5zZWxlY3Rpb24/LnNlbGVjdChuLCBuLmRvY3VtZW50SWQpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90Py5pdGVtcz8uZm9yRWFjaChuID0+IHRoaXMuc2VsZWN0aW9uPy5kZXNlbGVjdChuLCBuLmRvY3VtZW50SWQpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENoZWNrIGlmIHNlbGVjdGlvbnMgZXhpc3RzXHJcbiAgICAqIEByZXR1cm5zIHRydWUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaXMgc2VsZWN0ZWRcclxuICAgICovXHJcbiAgICBoYXNBbnlTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGlvbj8uYWxsPy5sZW5ndGggPz8gMCkgPiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDaGVjayBpZiBvbmx5IG9uZSBlbGVtZW50IGlzIHNlbGVjdGVkXHJcbiAgICAqIEByZXR1cm5zIHRydWUgaWYgb25seSBvbmUgZWxlbWVudCBpcyBzZWxlY3RlZFxyXG4gICAgKi9cclxuICAgIGhhc1NpbmdsZVNlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0aW9uPy5hbGw/Lmxlbmd0aCA/PyAwKSA9PT0gMTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogR2V0IHRoZSBmaXJzdCBzZWxlY3RlZCBpdGVtIFxyXG4gICAgKiBAcmV0dXJucyB0aGUgc2VsZWN0ZWQgaXRlbSBvciBudWxsICAgIFxyXG4gICAgKi9cclxuICAgIGdldFNpbmdsZVNlbGVjdGlvbigpOiBDbGlwcGVyRG9jdW1lbnRJbmZvIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzQW55U2VsZWN0aW9uKCkgPyB0aGlzLnNlbGVjdGlvbj8uYWxsWzBdIDogbnVsbDtcclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDbGVhciBzZWxlY3Rpb25cclxuICAgICovXHJcbiAgICBjbGVhclNlbGVjdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24/LmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgb3IgbnVsbFxyXG4gICAqIEByZXR1cm5zIFJldHVybiB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zXHJcbiAgICovXHJcbiAgICBjb3VudFNlbGVjdGlvbnMoKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGlvbiAmJiB0aGlzLnNlbGVjdGlvbj8uYWxsPy5sZW5ndGggPiAwKSA/IHRoaXMuc2VsZWN0aW9uPy5hbGw/Lmxlbmd0aCA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgKiBHZXQgdGhlIHNlbGVjdGVkIGlkXHJcbiAgKi9cclxuICAgIGdldFNlbGV0ZWN0SWQoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQW55U2VsZWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uPy5hbGxbMF0uZG9jdW1lbnRJZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAqIEdldCBhbGwgc2VsZWN0ZWQgaWRzXHJcbiAqL1xyXG4gICAgZ2V0U2VsZXRlY3RJZHMoKTogc3RyaW5nW10gfCBudWxsIHtcclxuICAgICAgICBpZiAoKHRoaXMuc2VsZWN0aW9uPy5hbGw/Lmxlbmd0aCA/PyAwKSA+IDEwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3IoJ0xhIHNlbGV6aW9uZSBub24gcHXDsiBjb250ZW5lcmUgcGnDuSBkaSAxMDAgZWxlbWVudGkuJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0FueVNlbGVjdGlvbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uPy5hbGw/LmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZHMucHVzaChuLmRvY3VtZW50SWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlkcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBhbGwgc2VsZWN0ZWQgaWRzXHJcbiAgICAgKiBAcmV0dXJucyBhIHR1cGxlIGxpc3Qgd2l0aCBpZCBhbmQgZGF0YVxyXG4gICAgICovXHJcbiAgICBnZXRTZWxldGVjdElkc0FuZERhdGEoKTogW3N0cmluZywgQ2xpcHBlckRvY3VtZW50SW5mb11bXSB8IG51bGwge1xyXG4gICAgICAgIGlmICgodGhpcy5zZWxlY3Rpb24/LmFsbD8ubGVuZ3RoID8/IDApID4gMTAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcignTGEgc2VsZXppb25lIG5vbiBwdcOyIGNvbnRlbmVyZSBwacO5IGRpIDEwMCBlbGVtZW50aS4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBkYXRhOiBbc3RyaW5nLCBDbGlwcGVyRG9jdW1lbnRJbmZvXVtdID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQW55U2VsZWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24/LmFsbD8uZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgICAgIGRhdGEucHVzaChbbi5kb2N1bWVudElkLCBuXSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVwYXJlIHJlc3VsdCBpdGVtc1xyXG4gICAgICogQHBhcmFtIGl0ZW1zIDogdGhlIGl0ZW1zIHRvIHByb2Nlc3NcclxuICAgICAqIEBwYXJhbSBwYXJhbXMgOiB0aGUgY3VycmVudCBzZWFyY2ggcGFyYW1zXHJcbiAgICAgKi9cclxuICAgIHByZXBhcmVSZXN1bHRJdGVtcyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdLCBwYXJhbXM6IENsaXBwZXJTZWFyY2hQYXJhbXMpIHtcclxuICAgICAgICBjb25zdCB0b2RheSA9IHN0YXJ0T2ZUb2RheSgpO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQnlZZWFyID1cclxuICAgICAgICAgICAgIXBhcmFtcy5zb3J0TW9kZSB8fFxyXG4gICAgICAgICAgICBwYXJhbXMuc29ydE1vZGUgPT09IENsaXBwZXJTb3J0LkRhdGVBc2MgfHxcclxuICAgICAgICAgICAgcGFyYW1zLnNvcnRNb2RlID09PSBDbGlwcGVyU29ydC5EYXRlRGVzYyB8fFxyXG4gICAgICAgICAgICBwYXJhbXMuc29ydE1vZGUgPT09IENsaXBwZXJTb3J0LlNvdXJjZURhdGVBc2MgfHxcclxuICAgICAgICAgICAgcGFyYW1zLnNvcnRNb2RlID09PSBDbGlwcGVyU29ydC5Tb3VyY2VEYXRlRGVzYztcclxuICAgICAgICBjb25zdCBncm91cEJ5UmVsZXZhbmNlID0gcGFyYW1zLnNvcnRNb2RlID09PSBDbGlwcGVyU29ydC5SZWxldmFuY2U7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBCeVBvcHVsYXJpdHkgPSBwYXJhbXMuc29ydE1vZGUgPT09IENsaXBwZXJTb3J0LlBvcHVsYXJpdHk7XHJcbiAgICAgICAgbGV0IGdyb3VwID0gJyc7XHJcbiAgICAgICAgaXRlbXM/LmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgIG4uZG9jdW1lbnRJZCA9IG4uZG9jdW1lbnRJZCA/PyBuLmlkO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbj8udXBkYXRlQ3VycmVudChuLCBuLmRvY3VtZW50SWQpO1xyXG4gICAgICAgICAgICBpZiAobi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLlF1ZXNpdGkpIHtcclxuICAgICAgICAgICAgICAgIG4uaW5mbyA9IFwiUXVlc2l0byBuwrAgXCIgKyBuLm51bWJlciArIFwiIGRlbCBcIiArIFN5c3RlbVV0aWxzLmZvcm1hdERhdGUobi5kYXRlLCBcImQgTU1NIHl5eXlcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLlNjYWRlbnplIHx8XHJcbiAgICAgICAgICAgICAgICBuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuU2VnbmFsYXppb25pKSB7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG4ubW9kZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIENsaXBwZXJNb2RlbC5TY2FkZW56ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbi5vcmlnaW5EZXNjcmlwdGlvbiA9ICdTY2FkZW56YSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQ2xpcHBlck1vZGVsLlNlZ25hbGF6aW9uaTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbi5vcmlnaW5EZXNjcmlwdGlvbiA9ICdTZWduYWxhemlvbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChuLmV4cGlyaW5nSW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJ0cyA9IG4uZXhwaXJpbmdJbmZvLnNwbGl0KCd8Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuLmV4cGlyaW5nRGVzY3JpcHRpb24gPSBwYXJ0c1syXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobi5leHBpcmluZ0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBuLmRhdGUgPSBzdGFydE9mRGF5KG5ldyBEYXRlKG4uZXhwaXJpbmdEYXRlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IHN0YXJ0T2ZEYXkoc3ViRGF5cyhuLmRhdGUsIDE1KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyaW5nID0gdG9kYXkgPD0gbi5kYXRlICYmIHRvZGF5ID49IGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyZWQgPSBuLmRhdGUgPCB0b2RheTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5BcnRpY29saSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5OZXdzKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIG4udGFncykge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uaW5mbyA9IG4udGFncy50b1VwcGVyQ2FzZSgpLnN1YnN0cmluZygxKS5yZXBsYWNlQWxsKFwiI1wiLCBcIiwgXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG4ubW9kZWwgIT09IENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvICYmXHJcbiAgICAgICAgICAgICAgICAgICAgbi5tb2RlbCAhPT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgJiZcclxuICAgICAgICAgICAgICAgICAgICBuLm1vZGVsICE9PSBDbGlwcGVyTW9kZWwuR2l1cmlzcHJ1ZGVuemFSZWNlbnRlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgbi5tb2RlbCAhPT0gQ2xpcHBlck1vZGVsLkp1cmlzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgbi5kYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5kYXRlID0gc3RhcnRPZkRheShuZXcgRGF0ZShuLmRhdGUgPz8gbi5wdWJsaXNoaW5nRGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGQgPSBzdGFydE9mRGF5KHN1YkRheXMoc3RhcnRPZlRvZGF5KCksIDcpKVxyXG4gICAgICAgICAgICAgICAgICAgIG4uaXNOZXcgPSBuLmRhdGUgPiBkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG4uYW5jaG9ycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhbmNob3JUeXBlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYW5jaG9yczogYW55ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgbi5hbmNob3JzLmZvckVhY2goYSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLnR5cGUgPT09IDIwKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLnR5cGUgIT09IGFuY2hvclR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhLnR5cGUgPj0gMylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JzLnB1c2goeyB0ZXh0OiBhLnR5cGVEZXNjcmlwdGlvbiB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvclR5cGUgPSBhLnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNjb3JlID0gYS5zY29yZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3JlID4gNykgc2NvcmUgLT0gNztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NvcmUgPiA1KSBzY29yZSAtPSA1O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY29yZSA+IDMpIHNjb3JlIC09IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBhLnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogYS50aXRsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50SWQ6IGEuZG9jdW1lbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaTogYS51cmksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ5UmVsZXZhbnQ6IHNjb3JlID4gMC42XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG4uYW5jaG9ycyA9IGFuY2hvcnM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobi52YWxpZGl0eVN0YXRlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG4udmFsaWRpdHlEZXNjcmlwdGlvbiA9ICdJbCBkb2N1bWVudG8gbm9uIMOoIHBpw7kgdmlnZW50ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuLnZhbGlkVW50aWxEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cGlyaW5nRGF0ZSA9IHN0YXJ0T2ZEYXkobmV3IERhdGUobi52YWxpZFVudGlsRGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwaXJpbmdEYXRlIDwgdG9kYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4udmFsaWRpdHlEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lsIGRvY3VtZW50byBub24gw6ggcGnDuSB2aWdlbnRlIGRhbCAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGV4cGlyaW5nRGF0ZSkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4udmFsaWRpdHlEZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lsIGRvY3VtZW50byBub24gc2Fyw6AgcGnDuSB2aWdlbnRlIGRhbCAnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGV4cGlyaW5nRGF0ZSkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4uaXNFeHBpcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobi5leHBpcmluZ0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBuLmRhdGUgPSBzdGFydE9mRGF5KG5ldyBEYXRlKG4uZXhwaXJpbmdEYXRlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZCA9IHN0YXJ0T2ZEYXkoc3ViRGF5cyhuLmRhdGUsIDE1KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyaW5nID0gdG9kYXkgPD0gbi5kYXRlICYmIHRvZGF5ID49IGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5pc0V4cGlyZWQgPSBuLmRhdGUgPCB0b2RheTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZ3JvdXBCeVllYXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKG4uZGF0ZSwgRGF0ZUZvcm1hdC5Mb25nTW9udGhBbmRZZWFyKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwICE9PSB5ZWFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5ncm91cCA9IHllYXI7XHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSB5ZWFyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdyb3VwQnlSZWxldmFuY2UpIHtcclxuICAgICAgICAgICAgICAgIGlmIChncm91cCAhPT0gJ25vbmUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbi5ncm91cCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdFbGVtZW50aSBwacO5IHJpbGV2YW50aSBwZXIgbGEgcmljZXJjYTogJyArIHBhcmFtcy50ZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGdyb3VwQnlQb3B1bGFyaXR5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXAgIT09ICdub25lJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG4uZ3JvdXAgPSAnRWxlbWVudGkgcGnDuSBwb3BvbGFyaSBpbiBvcmRpbmUgZGVjcmVzY2VudGUnO1xyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlcGFyZSByZXN1bHRzXHJcbiAgICAgKiBAcGFyYW0gZGF0YSA6IHRoZSByZXN1bHQgbGlzdCB0byBwcmVwYXJlXHJcbiAgICAgKi9cclxuICAgIHByZXBhcmVSZXN1bHRzKGRhdGE6IENsaXBwZXJTZWFyY2hSZXN1bHQpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbj8uY3VycmVudC5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuc25hcHNob3QgPSBkYXRhO1xyXG4gICAgICAgIGlmICh0aGlzLnNuYXBzaG90Lml0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVJlc3VsdEl0ZW1zKHRoaXMuc25hcHNob3QuaXRlbXMsIHRoaXMuZmlsdGVyUGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFNhdmUgY3VycmVudCBkb2N1bWVudCBsaXN0IG9yIGp1c3QgdGhlIHNlbGVjdGVkIGRvY3VtZW50cyBhcyBhIGNzdlxyXG4gICAgKiBAcGFyYW0gZm9ybWF0OiB0aGUgZXhwb3J0IGZvcm1hdDogMSkgbGlzdCwgMikgZGVhZGxpbmVzXHJcbiAgICAqL1xyXG4gICAgZXhwb3J0UmVzdWx0cyhmb3JtYXQ6IG51bWJlciA9IDEpIHtcclxuICAgICAgICBpZiAodGhpcy5zbmFwc2hvdD8udG90YWwgPiAwIHx8IHRoaXMuaGFzQW55U2VsZWN0aW9uKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5leHBvcnRJdGVtcyh0aGlzLmdldFNlbGV0ZWN0SWRzKCksIHRoaXMuZmlsdGVyUGFyYW1zLCBmb3JtYXQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJldHVybiBpdGVtIHN0YXRlIGNzcyBjbGFzc1xyXG4gICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGV2YWx1YXRlXHJcbiAgICAqL1xyXG4gICAgZ2V0SXRlbVN0YXRlQ3NzQ2xhc3MoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGlmIChpdGVtLmlzUmVhZCAhPT0gdHJ1ZSAmJiBDbGlwcGVyVXRpbHMuaXNDbGlwcGVyTW9kZWxSZWFkYWJsZShpdGVtLm1vZGVsKSkgcmV0dXJuICd1bnJlYWQtYmcnO1xyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0uaXNFeHBpcmVkKSByZXR1cm4gJ2V4cGlyZWQtYmcnO1xyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0ucG9wdWxhcml0eSA9PT0gMykgcmV0dXJuICdwb3B1bGFyLWJnJztcclxuICAgICAgICBlbHNlIGlmIChpdGVtLnBvcHVsYXJpdHkgPiAzKSByZXR1cm4gJ3ZlcnktcG9wdWxhci1iZyc7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm4gdGhlIGl0ZW0gc3RhdGUgdG9vbHRpcCB0ZXh0XHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGV2YWx1YXRlXHJcbiAgICAgKi9cclxuICAgIGdldEl0ZW1TdGF0ZVRvb2x0aXAoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXNSZWFkICE9PSB0cnVlICYmIENsaXBwZXJVdGlscy5pc0NsaXBwZXJNb2RlbFJlYWRhYmxlKGl0ZW0ubW9kZWwpKSByZXR1cm4gJ05vbiBsZXR0byc7XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5pc0V4cGlyZWQpIHJldHVybiAnTm9uIHBpw7kgdmlnZW50ZSc7XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5wb3B1bGFyaXR5ID09PSAzKSByZXR1cm4gJ0RvY3VtZW50byBjb24gbnVtZXJvIGRpIGNpdGF6aW9uaSBhbHRvJztcclxuICAgICAgICBlbHNlIGlmIChpdGVtLnBvcHVsYXJpdHkgPiAzKVxyXG4gICAgICAgICAgICByZXR1cm4gJ0RvY3VtZW50byBjb24gbnVtZXJvIGRpIGNpdGF6aW9uaSBtb2x0byBhbHRvJztcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFJldHVybiB0aGUgaXRlbSBpY29uXHJcbiAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gZXZhbHVhdGVcclxuICAgICovXHJcbiAgICBnZXRJdGVtSWNvbihpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKTogc3RyaW5nIHtcclxuICAgICAgICBzd2l0Y2ggKGl0ZW0ubW9kZWwpIHtcclxuICAgICAgICAgICAgY2FzZSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZTogcmV0dXJuICdnYXZlbCc7XHJcbiAgICAgICAgICAgIGNhc2UgQ2xpcHBlck1vZGVsLkFydGljb2xpOlxyXG4gICAgICAgICAgICBjYXNlIENsaXBwZXJNb2RlbC5RdWVzaXRpOlxyXG4gICAgICAgICAgICBjYXNlIENsaXBwZXJNb2RlbC5NZXRvZGlEaUFuYWxpc2k6IHJldHVybiAnZXh0ZW5zaW9uJztcclxuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuICd1cGRhdGVkJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUb2dnbGUgdGhlIHJlYWQgZmxhZ1xyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byB1cGRhdGVcclxuICAgICAqIEBwYXJhbiBlOiB0aGUgb3B0aW9uYWwgY2xpY2sgZXZlbnRcclxuICAgICAqL1xyXG4gICAgdG9nZ2xlUmVhZChpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvLCBlOiBFdmVudCB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgZT8ucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlPy5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLnNldFJlYWQoIWl0ZW0/LmlzUmVhZCwgaXRlbSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBUb2dnbGUgdGhlIHNlbGVjdGlvbiBmbGFnXHJcbiAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gdXBkYXRlXHJcbiAgICAqIEBwYXJhbiBlOiB0aGUgb3B0aW9uYWwgY2xpY2sgZXZlbnRcclxuICAgICovXHJcbiAgICB0b2dnbGVTZWxlY3Rpb24oaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbywgZTogRXZlbnQgfCBudWxsID0gbnVsbCkge1xyXG4gICAgICAgIGU/LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZT8uc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24/LnRvZ2dsZShpdGVtLCBpdGVtLmRvY3VtZW50SWQpXHJcblxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIFNldCByZWFkIGZsYWdcclxuICAgICogQHBhcmFtIHZhbHVlOiB0aGUgZmxhZyB2YWx1ZVxyXG4gICAgKiBAcGFyYW0gaXRlbTogdGhlIGl0ZW0gdG8gc2V0IG9yIG51bGwgdG8gdXNlIGN1cnJlbnQgc2VsZWN0aW9uXHJcbiAgICAqL1xyXG4gICAgc2V0UmVhZCh2YWx1ZTogYm9vbGVhbiwgaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGRvY3VtZW50SWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50SWRzID0gW2l0ZW0uZG9jdW1lbnRJZF07XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0FueVNlbGVjdGlvbigpKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50SWRzID0gdGhpcy5zZWxlY3Rpb24/LmFsbD8ubWFwKG4gPT4gbi5kb2N1bWVudElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpcHBlclNlcnZpY2UudXBkYXRlU3RhdGUoeyBkb2N1bWVudElkczogZG9jdW1lbnRJZHMsIGlzUmVhZDogdmFsdWUgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2hhbmdlZCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uaXNSZWFkICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pc1JlYWQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuRE9DVU1FTlRfUkVBRCwgeyBkb2N1bWVudDogaXRlbSwgdmFsdWU6IHZhbHVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0FueVNlbGVjdGlvbigpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uPy5hbGw/LmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobi5pc1JlYWQgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi5pc1JlYWQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkRPQ1VNRU5UX1JFQUQsIHsgZG9jdW1lbnQ6IG4sIHZhbHVlOiB2YWx1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZGFzaGJvYXJkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UudXBkYXRlVW5yZWFkSXRlbXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGlwcGVyVXRpbHMuZ2V0Q2xpcHBlck1vZHVsZUZyb21Nb2RlbChpdGVtKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0ubW9kZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA/IC0xIDogMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICogT3BlbiBhbiBpdGVtXHJcbiAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAqIEBwYXJhbSBxdWVyeTogdGhlIGN1cnJlbnQgcXVlcnkgb3IgbnVsbFxyXG4gKiBAcGFyYW0gbmV3V2luZG93OiB0cnVlIGlmIHRoZSBkb2N1bWVudCBtdXN0IGJlIG9wZW4gaW50byBhIG5ldyB3aW5kb3dcclxuICovXHJcbiAgICBvdmVycmlkZSBvcGVuKGRvY3VtZW50SWQ6IHN0cmluZywgcXVlcnk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLCBuZXdXaW5kb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICghbmV3V2luZG93KSB0aGlzLm9wZW5Eb2N1bWVudChkb2N1bWVudElkLCBxdWVyeSk7XHJcbiAgICAgICAgZWxzZSB3aW5kb3cub3BlbignL2RvY3VtZW50by8nICsgZG9jdW1lbnRJZCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBhIGRvY3VtZW50XHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgICogQHBhcmFtIHF1ZXJ5OiB0aGUgY3VycmVudCBxdWVyeSBvciBudWxsXHJcbiAgICAgKi9cclxuICAgIG9wZW5Eb2N1bWVudChkb2N1bWVudElkOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnRJZCkgcmV0dXJuO1xyXG4gICAgICAgIENsaXBwZXJEb2N1bWVudHNVdGlscy5vcGVuRG9jdW1lbnQoXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5iYXNlU2VydmljZSxcclxuICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZSxcclxuICAgICAgICAgICAgZG9jdW1lbnRJZCxcclxuICAgICAgICAgICAgcXVlcnkgPz8gdGhpcy5maWx0ZXJQYXJhbXMuZXhwYW5kVGV4dFF1ZXJ5VXNpbmdBSVxyXG4gICAgICAgICAgICAgICAgPyAodGhpcy5maWx0ZXJQYXJhbXMuYXVnbWVudGVkVGV4dCA/PyB0aGlzLmZpbHRlclBhcmFtcy50ZXh0KVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLmZpbHRlclBhcmFtcy50ZXh0LFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICB0aGlzLnRoZW1lU2VydmljZS5nZXRUaGVtZSgpKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8vXHJcbiAgICAvLyBSZXN0b3JhYmxlXHJcbiAgICAvLy9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNhdmUgcmVzdG9yYWJsZSBkYXRhXHJcbiAgICAgKiBAcGFyYW0gaWQgOiB0aGUgcmVzdG9yYWJsZSBpZFxyXG4gICAgICogQHBhcmFtIHNjcm9sbCA6IHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvblxyXG4gICAgICogQHBhcmFtIHN0b3JhZ2UgOiB0aGUgc3RvcmFnZSB0byB1c2UuIERlZmF1bHQgc2kgc2Vzc2lvbiBzdG9yYWdlLlxyXG4gICAgICovXHJcbiAgICBzYXZlKGlkOiBzdHJpbmcsIHNjcm9sbDogbnVtYmVyID0gMCwgc3RvcmFnZTogU3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlKSB7XHJcbiAgICAgICAgc3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgcGFnaW5hdG9yOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdpbmF0b3I/LnBhZ2VJbmRleCA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiB0aGlzLnNuYXBzaG90Py50b3RhbCA/PyAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IHRoaXMucGFnaW5hdG9yPy5wYWdlU2l6ZSA/PyAxNVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGZhY2V0czogdGhpcy5mYWNldHM/LnNhdmUoKSxcclxuICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtczogdGhpcy5maWx0ZXJQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBzY3JvbGw6IHNjcm9sbCxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHsgbW9kZTogdGhpcy5zb3J0TW9kZSwgb3B0aW9uczogdGhpcy5zb3J0T3B0aW9ucyB9LFxyXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5zbmFwc2hvdFxyXG4gICAgICAgICAgICAgICAgICAgID8geyBpdGVtczogdGhpcy5zbmFwc2hvdC5pdGVtcywgdG90YWw6IHRoaXMuc25hcHNob3QudG90YWwgfVxyXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXN0b3JlIGRhdGFcclxuICAgICAqIEBwYXJhbSBpZCA6IHRoZSByZXN0b3JhYmxlIGlkXHJcbiAgICAgKiBAcGFyYW0gc3RvcmFnZSA6IHRoZSBzdG9yYWdlIHRvIHVzZS4gRGVmYXVsdCBzaSBzZXNzaW9uIHN0b3JhZ2UuXHJcbiAgICAgKi9cclxuICAgIHJlc3RvcmUoaWQ6IHN0cmluZywgc3RvcmFnZTogU3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzdG9yYWdlLmdldEl0ZW0oaWQpO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcyA9IGRhdGEuZmlsdGVyUGFyYW1zO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlcyA9IFN5c3RlbVV0aWxzLmNsb25lKHRoaXMuZmlsdGVyUGFyYW1zLm1vZHVsZXMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VjdG9ycyA9IFN5c3RlbVV0aWxzLmNsb25lKHRoaXMuZmlsdGVyUGFyYW1zLnNlY3RvcnMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXV0aG9ycyA9IFN5c3RlbVV0aWxzLmNsb25lKHRoaXMuZmlsdGVyUGFyYW1zLmF1dGhvcnMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGFncyA9IFN5c3RlbVV0aWxzLmNsb25lKHRoaXMuZmlsdGVyUGFyYW1zLnRhZ3MpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG9waWNzID0gU3lzdGVtVXRpbHMuY2xvbmUodGhpcy5maWx0ZXJQYXJhbXMudG9waWNzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZHVsZXMgPSBtb2R1bGVzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9ycyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5hdXRob3JzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRhZ3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudG9waWNzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc25hcHNob3QgPSBkYXRhLmRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRNb2RlID0gZGF0YS5zb3J0Lm1vZGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRPcHRpb25zID0gZGF0YS5zb3J0Lm9wdGlvbnM7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5zZWN0b3JzID0gc2VjdG9ycztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5hdXRob3JzID0gYXV0aG9ycztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50YWdzID0gdGFncztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50b3BpY3MgPSB0b3BpY3M7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmFjZXRzICYmIGRhdGEuZmFjZXRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmFjZXRzLnJlc3RvcmUoZGF0YS5mYWNldHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc0ZhY2V0cy5zZXQoZGF0YS5mYWNldHMuaGFzRmFjZXRzID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmIGRhdGEucGFnaW5hdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCA9IGRhdGEucGFnaW5hdG9yLnBhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gZGF0YS5wYWdpbmF0b3Iuc2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3IubGVuZ3RoID0gZGF0YS5wYWdpbmF0b3IudG90YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsKGRhdGEuc2Nyb2xsID8/IDApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9TRUFSQ0hfUkVTVE9SRUQsIGRhdGEuZmlsdGVyUGFyYW1zKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgfSwgNzUwKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public_api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJzZWRpemlvbmktYXJzLXV0aWxzLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY29yZS9hcnNlZGl6aW9uaS1hcnMtdXRpbHMtY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuIl19