@energycap/components 0.44.8 → 0.44.9-Angular19Upgrade.20260212-1633

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 (143) hide show
  1. package/fesm2022/energycap-components.mjs +379 -354
  2. package/fesm2022/energycap-components.mjs.map +1 -1
  3. package/lib/controls/button/copy-button-base.directive.d.ts +1 -1
  4. package/lib/controls/date-input/date-input.component.d.ts +1 -1
  5. package/lib/controls/form-control-base.d.ts +1 -1
  6. package/lib/display/hierarchy/hierarchy-base.d.ts +1 -1
  7. package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +1 -1
  8. package/lib/display/resizable/resizable-base.d.ts +1 -1
  9. package/lib/shared/page/page-base/page-base.component.d.ts +1 -1
  10. package/lib/shared/testing/public-mocks.spec.d.ts +1 -1
  11. package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +1 -1
  12. package/package.json +1 -3
  13. package/schematics/utilities/typescript.js +3 -4
  14. package/schematics/utilities/typescript.js.map +1 -1
  15. package/schematics/utilities/workspace.d.ts +0 -8
  16. package/schematics/utilities/workspace.js +48 -71
  17. package/schematics/utilities/workspace.js.map +1 -1
  18. package/esm2022/energycap-components.mjs +0 -5
  19. package/esm2022/lib/components.module.mjs +0 -425
  20. package/esm2022/lib/controls/banner/banner.component.mjs +0 -112
  21. package/esm2022/lib/controls/button/button.component.mjs +0 -114
  22. package/esm2022/lib/controls/button/copy-button-base.directive.mjs +0 -67
  23. package/esm2022/lib/controls/button/copy-button.directive.mjs +0 -28
  24. package/esm2022/lib/controls/button/copy-table-button.directive.mjs +0 -43
  25. package/esm2022/lib/controls/calendar/calendar-item.component.mjs +0 -91
  26. package/esm2022/lib/controls/calendar/calendar.component.mjs +0 -251
  27. package/esm2022/lib/controls/calendar/calendar.types.mjs +0 -2
  28. package/esm2022/lib/controls/checkbox/checkbox.component.mjs +0 -140
  29. package/esm2022/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +0 -38
  30. package/esm2022/lib/controls/combobox/combobox.component.mjs +0 -879
  31. package/esm2022/lib/controls/date-input/date-input-selection-strategies/date-input-selection-strategy-base.mjs +0 -57
  32. package/esm2022/lib/controls/date-input/date-input-selection-strategies/day-selection-strategy.mjs +0 -62
  33. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-28-days-selection-strategy.mjs +0 -100
  34. package/esm2022/lib/controls/date-input/date-input-selection-strategies/last-7-days-selection-strategy.mjs +0 -101
  35. package/esm2022/lib/controls/date-input/date-input-selection-strategies/month-selection-strategy.mjs +0 -76
  36. package/esm2022/lib/controls/date-input/date-input-selection-strategies/quarter-selection-strategy.mjs +0 -79
  37. package/esm2022/lib/controls/date-input/date-input-selection-strategies/range-selection-strategy.mjs +0 -210
  38. package/esm2022/lib/controls/date-input/date-input-selection-strategies/year-selection-strategy.mjs +0 -81
  39. package/esm2022/lib/controls/date-input/date-input.component.mjs +0 -466
  40. package/esm2022/lib/controls/date-input/date-input.types.mjs +0 -44
  41. package/esm2022/lib/controls/dropdown/dropdown.component.mjs +0 -243
  42. package/esm2022/lib/controls/file-upload/file-upload.component.mjs +0 -261
  43. package/esm2022/lib/controls/form-control/form-control.component.mjs +0 -110
  44. package/esm2022/lib/controls/form-control-base.mjs +0 -151
  45. package/esm2022/lib/controls/form-control-label/form-control-label.component.mjs +0 -136
  46. package/esm2022/lib/controls/form-group/form-group.component.mjs +0 -261
  47. package/esm2022/lib/controls/help-popover/help-popover.component.mjs +0 -31
  48. package/esm2022/lib/controls/item-picker/item-picker.component.mjs +0 -329
  49. package/esm2022/lib/controls/link-button/link-button.component.mjs +0 -11
  50. package/esm2022/lib/controls/menu/menu.component.mjs +0 -485
  51. package/esm2022/lib/controls/navigation/link-item.mjs +0 -2
  52. package/esm2022/lib/controls/navigation/nav-group.mjs +0 -39
  53. package/esm2022/lib/controls/navigation/nav-item-active.directive.mjs +0 -92
  54. package/esm2022/lib/controls/navigation/nav-item.mjs +0 -2
  55. package/esm2022/lib/controls/numericbox/numericbox.component.mjs +0 -372
  56. package/esm2022/lib/controls/popover/popover.component.mjs +0 -117
  57. package/esm2022/lib/controls/radio-button/radio-button-option.mjs +0 -3
  58. package/esm2022/lib/controls/radio-button/radio-button.component.mjs +0 -82
  59. package/esm2022/lib/controls/select/select.component.mjs +0 -88
  60. package/esm2022/lib/controls/tabs/tabs.component.mjs +0 -47
  61. package/esm2022/lib/controls/textbox/textbox.component.mjs +0 -155
  62. package/esm2022/lib/core/cache.service.mjs +0 -105
  63. package/esm2022/lib/core/custom-validators.mjs +0 -29
  64. package/esm2022/lib/core/date-time-helper.mjs +0 -228
  65. package/esm2022/lib/core/error.service.mjs +0 -61
  66. package/esm2022/lib/core/router-helper.service.mjs +0 -111
  67. package/esm2022/lib/core/scroll.service.mjs +0 -89
  68. package/esm2022/lib/core/telemetry-tracker.service.mjs +0 -16
  69. package/esm2022/lib/core/telemetry.service.mjs +0 -38
  70. package/esm2022/lib/core/validation-message.service.mjs +0 -185
  71. package/esm2022/lib/core/validation-patterns.mjs +0 -31
  72. package/esm2022/lib/core/window.service.mjs +0 -186
  73. package/esm2022/lib/display/app-bar/app-bar.component.mjs +0 -49
  74. package/esm2022/lib/display/avatar/avatar.component.mjs +0 -67
  75. package/esm2022/lib/display/avatar/avatar.service.mjs +0 -64
  76. package/esm2022/lib/display/confirm/confirm.component.mjs +0 -168
  77. package/esm2022/lib/display/dialog/dialog-content.mjs +0 -2
  78. package/esm2022/lib/display/dialog/dialog-group/dialog-group.component.mjs +0 -63
  79. package/esm2022/lib/display/dialog/dialog-types.mjs +0 -77
  80. package/esm2022/lib/display/dialog/dialog.component.mjs +0 -287
  81. package/esm2022/lib/display/dialog/dialog.service.mjs +0 -71
  82. package/esm2022/lib/display/help/help-types.mjs +0 -2
  83. package/esm2022/lib/display/hierarchy/hierarchy-base.mjs +0 -111
  84. package/esm2022/lib/display/hierarchy/hierarchy-mocks.spec.mjs +0 -54
  85. package/esm2022/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +0 -65
  86. package/esm2022/lib/display/item-display/item-display.component.mjs +0 -83
  87. package/esm2022/lib/display/json-display/json-display.component.mjs +0 -47
  88. package/esm2022/lib/display/resizable/resizable-base.mjs +0 -120
  89. package/esm2022/lib/display/resizable/resizable.component.mjs +0 -57
  90. package/esm2022/lib/display/spinner/spinner.component.mjs +0 -12
  91. package/esm2022/lib/display/splash/splash.component.mjs +0 -61
  92. package/esm2022/lib/display/splash/splash.service.mjs +0 -35
  93. package/esm2022/lib/display/table/resizable-column.component.mjs +0 -20
  94. package/esm2022/lib/display/table/resizable-table.directive.mjs +0 -227
  95. package/esm2022/lib/display/table/searchable-table.component.mjs +0 -344
  96. package/esm2022/lib/display/table/table-detail-row.component.mjs +0 -28
  97. package/esm2022/lib/display/table/table-locked-column.component.mjs +0 -58
  98. package/esm2022/lib/display/table/table-master-header-row.component.mjs +0 -14
  99. package/esm2022/lib/display/table/table-master-row.component.mjs +0 -163
  100. package/esm2022/lib/display/table/table-pagination.component.mjs +0 -155
  101. package/esm2022/lib/display/table/table-selectable-row.component.mjs +0 -235
  102. package/esm2022/lib/display/table/table.component.mjs +0 -257
  103. package/esm2022/lib/display/tags/tag.mjs +0 -18
  104. package/esm2022/lib/display/tags/tags.component.mjs +0 -82
  105. package/esm2022/lib/display/toast/toast/toast.component.mjs +0 -77
  106. package/esm2022/lib/display/toast/toast-types.mjs +0 -8
  107. package/esm2022/lib/display/toast/toast.service.mjs +0 -35
  108. package/esm2022/lib/display/toast/toaster/toaster.component.mjs +0 -114
  109. package/esm2022/lib/display/tooltip/tooltip.component.mjs +0 -28
  110. package/esm2022/lib/display/tooltip/tooltip.service.mjs +0 -78
  111. package/esm2022/lib/display/tooltip-directive/tooltip.directive.mjs +0 -173
  112. package/esm2022/lib/display/tree/tree.component.mjs +0 -139
  113. package/esm2022/lib/display/view-overlay/view-overlay.component.mjs +0 -58
  114. package/esm2022/lib/shared/directives/click-area-for/click-area-for.directive.mjs +0 -32
  115. package/esm2022/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +0 -111
  116. package/esm2022/lib/shared/directives/keyboard-nav-container/keyboard-nav-container.directive.mjs +0 -103
  117. package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +0 -166
  118. package/esm2022/lib/shared/display/pipes/date-display-2.pipe.mjs +0 -39
  119. package/esm2022/lib/shared/display/pipes/date-display.pipe.mjs +0 -51
  120. package/esm2022/lib/shared/display/pipes/highlight-text.pipe.mjs +0 -30
  121. package/esm2022/lib/shared/display/pipes/relative-date.pipe.mjs +0 -62
  122. package/esm2022/lib/shared/display/pipes/row-count.pipe.mjs +0 -48
  123. package/esm2022/lib/shared/display/pipes/time-display.pipe.mjs +0 -41
  124. package/esm2022/lib/shared/display.mjs +0 -6
  125. package/esm2022/lib/shared/form-group.helper.mjs +0 -67
  126. package/esm2022/lib/shared/json-helper.mjs +0 -19
  127. package/esm2022/lib/shared/lodash-helper.mjs +0 -52
  128. package/esm2022/lib/shared/page/page-base/page-base.component.mjs +0 -387
  129. package/esm2022/lib/shared/page/page-statuses.mjs +0 -23
  130. package/esm2022/lib/shared/page/page-title/page-title.component.mjs +0 -23
  131. package/esm2022/lib/shared/page/page-view/page-view.component.mjs +0 -147
  132. package/esm2022/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +0 -17
  133. package/esm2022/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +0 -17
  134. package/esm2022/lib/shared/testing/page-base-component-test-helper.spec.mjs +0 -38
  135. package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
  136. package/esm2022/lib/shared/testing/public-mocks.spec.mjs +0 -148
  137. package/esm2022/lib/shared/testing/spy-factory.spec.mjs +0 -40
  138. package/esm2022/lib/shared/testing/translation-mocks.spec.mjs +0 -57
  139. package/esm2022/lib/shared/user-preference.service.mjs +0 -17
  140. package/esm2022/lib/shared/wizard/wizard-base/wizard-base.component.mjs +0 -246
  141. package/esm2022/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +0 -68
  142. package/esm2022/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +0 -18
  143. package/esm2022/public-api.mjs +0 -115
@@ -1,329 +0,0 @@
1
- import { Component, Input, ViewChild } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { debounceTime, takeUntil } from 'rxjs/operators';
4
- import { TableSelectableRowContext } from '../../display/table/table-selectable-row.component';
5
- import { Overlay } from '../../display/view-overlay/view-overlay.component';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@ngx-translate/core";
8
- import * as i2 from "@angular/common";
9
- import * as i3 from "../button/button.component";
10
- import * as i4 from "../../display/view-overlay/view-overlay.component";
11
- import * as i5 from "../../display/table/table.component";
12
- import * as i6 from "../../display/table/searchable-table.component";
13
- import * as i7 from "../../display/table/table-selectable-row.component";
14
- import * as i8 from "../help-popover/help-popover.component";
15
- import * as i9 from "../link-button/link-button.component";
16
- ;
17
- export class ItemPickerSelectableContext extends TableSelectableRowContext {
18
- constructor() {
19
- super(...arguments);
20
- /** id/value map of the selected items. Used for keeping track of what is selected */
21
- this.selectedItemsMap = new Map();
22
- /**
23
- * Gives a way to tell the picker component that the map was modified externally and to update
24
- * the available/selected lists
25
- */
26
- this.selectedItemsMapChanged = new Subject();
27
- /**
28
- * AdvancedRowClickBehavior is disabled for ItemPicker.
29
- */
30
- this.disableAdvancedRowClickBehavior = true;
31
- /** When true the user has opted to select all items across all pages. Due to api pagination
32
- * we don't have all of the items locally, so the host will need to tell the API to operate on all
33
- * via api filters or other means.
34
- */
35
- this.isSelectingAllItems = false;
36
- }
37
- }
38
- export class ItemPickerComponent {
39
- constructor(translateService) {
40
- this.translateService = translateService;
41
- /** Identifier for the component. This will be added to the beginning of all internal action elements */
42
- this.id = '';
43
- /** Title displayed above the available items table */
44
- this.availableTitle = '';
45
- /** Help popover next to the available title. If supplied will show, otherwise is hidden */
46
- this.availableTitleHelpPopover = '';
47
- /** Title displayed above the selected items list */
48
- this.selectedTitle = '';
49
- /** The type of item being selected. Ex. Meters, Addresses */
50
- this.itemName = '';
51
- /** Used by the internal Searchable Table when there is no available items to choose from based on the getItems results. Do not supply
52
- * to inherit the default message.
53
- */
54
- this.noDataMessage = '';
55
- /** Used to enable select all items across pages. When true the button to select all items will be visible in the available items header when
56
- * the header checkbox is checked and there are multiple pages of results
57
- */
58
- this.enableSelectAllItems = false;
59
- /** Used to display a message in the selected items table when the select all items button is clicked */
60
- this.selectAllItemsMessage = '';
61
- /** List of available items to pick from */
62
- this.availableItems = [];
63
- /**
64
- * Selected items array. Created from the selected items map. Binding to the
65
- * map iterate values caused angular "expression changed" errors so after a map
66
- * update this gets set to the values
67
- */
68
- this.selectedItems = [];
69
- /** True if there are selected items and at least one can be removed */
70
- this.selectedItemsClearable = false;
71
- /** Track by used for the searchable table rows */
72
- this.trackByIndex = (index) => index;
73
- this.tableStatus = new Overlay('pending');
74
- /** Text to display next to the checkbox in the available items header. Used to dislay how many items are
75
- * selected when select all items is enabled
76
- */
77
- this.availableCheckboxText = '';
78
- /** When set to true the select all items button will show in the available items header. This is
79
- * shown when the user has enabled select all for the item picker and the user selects the header checkbox
80
- * with more than one page of results.
81
- */
82
- this.showSelectAllItemsButton = false;
83
- /** The total number of items returned from the api across all pages */
84
- this.totalItemsBeforePaging = 0;
85
- /** Passed to the searchable table control. Used to disable the pagination controls */
86
- this.disablePaginationControls = false;
87
- /** Used to shut down our subscriptions when the component is destroyed */
88
- this.destroyed = new Subject();
89
- }
90
- ngOnInit() {
91
- this.setupRowCheckboxesWatcher();
92
- this.setupSelectedItemsChangedWatcher();
93
- }
94
- /**
95
- * Watch for changes and react if the custom item template value changes
96
- */
97
- ngOnChanges() {
98
- this.setInternalizedTemplates();
99
- }
100
- ngOnDestroy() {
101
- this.destroyed.next();
102
- this.destroyed.unsubscribe();
103
- }
104
- /**
105
- * Called by the searchable table when a new set of items are returned from the getItems call.
106
- * If any of the items have `preventRemove` set, their indices are added to the context.
107
- */
108
- onItemsChange(results) {
109
- if (this.selectionContext.isSelectingAllItems) {
110
- this.onClearSelectionClick();
111
- }
112
- let newNonDependentCheckboxes = [];
113
- results.items.forEach((item, index) => {
114
- // Check to see if any of the items are marked to be selected by default and if so
115
- // add them to the map.
116
- if (item.defaultSelected && !this.selectionContext?.selectedItemsMap.has(item.id)) {
117
- this.selectionContext?.selectedItemsMap.set(item.id, item);
118
- }
119
- // Check to see if any of the items are marked to prevent Removal, and if so
120
- // add them to the non-dependent checkboxes array. This will prevent the master
121
- // checkbox from toggling them.
122
- if (item.preventRemove) {
123
- newNonDependentCheckboxes.push(index);
124
- }
125
- });
126
- this.selectionContext.nonDependentCheckboxes = newNonDependentCheckboxes;
127
- // When the user filters the list we should reset the select all items
128
- this.selectionContext.isSelectingAllItems = false;
129
- this.availableItems = results.items;
130
- this.totalItemsBeforePaging = results.totalItemsBeforePaging;
131
- this.updateAvailableCheckboxText();
132
- }
133
- /**
134
- * Called when the clear selection link button is clicked
135
- */
136
- onClearSelectionClick() {
137
- this.clearSelectedItemsMap();
138
- this.selectionContext.rowCheckboxes.controls.forEach((control, index) => {
139
- if (!this.availableItems[index].preventRemove) {
140
- control.setValue(false);
141
- }
142
- });
143
- this.selectedItems = Array.from(this.selectionContext.selectedItemsMap.values());
144
- this.selectionContext.isSelectingAllItems = false;
145
- this.disablePaginationControls = false;
146
- this.updateAvailableCheckboxText();
147
- }
148
- /**
149
- * Called when the remove item button is clicked for a selected item
150
- * @param removeItem
151
- */
152
- removeSelectedItem(removeItem) {
153
- let foundIndex = this.availableItems.findIndex(item => item.id === removeItem.id);
154
- if (foundIndex > -1) {
155
- // Update the row checkbox since the item exists in the page being viewed
156
- // The value change handler for row checkboxes will update the map/selected items
157
- this.selectionContext.rowCheckboxes.at(foundIndex).setValue(false);
158
- }
159
- else {
160
- // The item being removed is not on the current page so just update the
161
- // map/selected items
162
- this.selectionContext.selectedItemsMap.delete(removeItem.id);
163
- this.selectedItems = Array.from(this.selectionContext.selectedItemsMap.values());
164
- }
165
- this.updateAvailableCheckboxText();
166
- }
167
- /**
168
- * Click handler for the select all items button
169
- */
170
- selectAllItems() {
171
- this.clearSelectedItemsMap();
172
- this.selectionContext.isSelectingAllItems = true;
173
- this.showSelectAllItemsButton = false;
174
- this.updateAvailableCheckboxText();
175
- this.disablePaginationControls = true;
176
- }
177
- /**
178
- * Removes all items from the selected items map. This was split from the onClearSelectionClick function to allow
179
- * selectAllItems to call this function but keep the row checkbox values in place. This was needed because when you are
180
- * selecting all items across all pages we want the current page of items to remain checked.
181
- *
182
- */
183
- clearSelectedItemsMap() {
184
- // Remove removable items from map
185
- // This is safe. See https://stackoverflow.com/questions/35940216/es6-is-it-dangerous-to-delete-elements-from-set-map-during-set-map-iteration
186
- for (const [key, val] of this.selectionContext.selectedItemsMap) {
187
- if (!val.preventRemove) {
188
- this.selectionContext.selectedItemsMap.delete(key);
189
- }
190
- }
191
- }
192
- /**
193
- * Watch for changes to the row checkboxes form array and update the selected items
194
- * list
195
- */
196
- setupRowCheckboxesWatcher() {
197
- this.selectionContext?.rowCheckboxes.valueChanges.pipe(
198
- // Debounce 10 is simply to not spam the change handler on load/page change
199
- // Otherwise this will get called every time a new row is added to the table
200
- debounceTime(10), takeUntil(this.destroyed)).subscribe((rowValues) => {
201
- rowValues.forEach((selected, index) => {
202
- let availableItem = this.availableItems[index];
203
- if (!selected && this.selectionContext?.selectedItemsMap.has(availableItem.id)) {
204
- this.selectionContext?.selectedItemsMap.delete(availableItem.id);
205
- }
206
- else if (selected && !this.selectionContext?.selectedItemsMap.has(availableItem.id)) {
207
- this.selectionContext?.selectedItemsMap.set(availableItem.id, availableItem);
208
- }
209
- });
210
- this.selectedItems = Array.from(this.selectionContext?.selectedItemsMap.values());
211
- this.selectedItemsClearable = this.selectedItems.length > 0 && this.selectedItems.some(i => !i.preventRemove);
212
- this.updateAvailableCheckboxText();
213
- });
214
- this.selectionContext.selectAllCheckbox.valueChanges.pipe(debounceTime(10), takeUntil(this.destroyed)).subscribe((checked) => {
215
- if (this.enableSelectAllItems) {
216
- const onePageOfData = this.availableItems.length === this.totalItemsBeforePaging;
217
- if (checked && !onePageOfData) {
218
- this.showSelectAllItemsButton = true;
219
- }
220
- else if (!checked) {
221
- if (this.selectionContext.isSelectingAllItems) {
222
- // We were selecting all items, clear the selection to allow the user to start over
223
- this.onClearSelectionClick();
224
- }
225
- this.showSelectAllItemsButton = false;
226
- this.selectionContext.isSelectingAllItems = false;
227
- }
228
- }
229
- });
230
- }
231
- updateAvailableCheckboxText() {
232
- if (this.selectionContext.isSelectingAllItems) {
233
- this.availableCheckboxText = this.translateService.instant('AllItemPickerItemsSelected_SC', { count: this.totalItemsBeforePaging, itemName: this.translateService.instant(this.itemName) });
234
- }
235
- else {
236
- const checkedCount = this.selectionContext.rowCheckboxes.controls.map(c => c.value).filter(v => v).length;
237
- if (checkedCount > 0) {
238
- this.availableCheckboxText = this.translateService.instant('CountSelected_TC', { count: checkedCount });
239
- }
240
- else {
241
- this.availableCheckboxText = '';
242
- }
243
- }
244
- }
245
- /**
246
- * Watch to be told if changes to the map were made outside of the component and if so update
247
- * the array displayed in the selected list and select checkboxes for visible available items
248
- */
249
- setupSelectedItemsChangedWatcher() {
250
- this.selectionContext.selectedItemsMapChanged.pipe(takeUntil(this.destroyed)).subscribe(() => {
251
- if (this.selectionContext) {
252
- this.selectedItems = Array.from(this.selectionContext?.selectedItemsMap.values());
253
- this.availableItems.forEach((item, index) => {
254
- if (this.selectionContext.selectedItemsMap.has(item.id)) {
255
- this.selectionContext.rowCheckboxes.at(index).setValue(true);
256
- }
257
- });
258
- }
259
- });
260
- }
261
- setInternalizedTemplates() {
262
- if (this.customAvailableHeaderTemplate) {
263
- this.internalizedAvailableHeaderTemplate = this.customAvailableHeaderTemplate;
264
- }
265
- else {
266
- this.internalizedAvailableHeaderTemplate = this.defaultAvailableHeaderTemplate;
267
- }
268
- if (this.customAvailableItemTemplate) {
269
- this.internalizedAvailableItemTemplate = this.customAvailableItemTemplate;
270
- }
271
- else {
272
- this.internalizedAvailableItemTemplate = this.defaultAvailableItemTemplate;
273
- }
274
- if (this.customSelectedItemTemplate) {
275
- this.internalizedSelectedItemTemplate = this.customSelectedItemTemplate;
276
- }
277
- else {
278
- this.internalizedSelectedItemTemplate = this.defaultSelectedItemTemplate;
279
- }
280
- }
281
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ItemPickerComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
282
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ItemPickerComponent, selector: "ec-item-picker", inputs: { id: "id", availableTitle: "availableTitle", availableTitleHelpPopover: "availableTitleHelpPopover", selectedTitle: "selectedTitle", itemName: "itemName", formModel: "formModel", customAvailableHeaderTemplate: "customAvailableHeaderTemplate", customAvailableItemTemplate: "customAvailableItemTemplate", customSelectedItemTemplate: "customSelectedItemTemplate", ready: "ready", getItems: "getItems", selectionContext: "selectionContext", noDataMessage: "noDataMessage", noSelectedItemsMessage: "noSelectedItemsMessage", enableSelectAllItems: "enableSelectAllItems", selectAllItemsMessage: "selectAllItemsMessage" }, viewQueries: [{ propertyName: "defaultAvailableHeaderTemplate", first: true, predicate: ["defaultAvailableHeaderTemplate"], descendants: true, static: true }, { propertyName: "defaultAvailableItemTemplate", first: true, predicate: ["defaultAvailableItemTemplate"], descendants: true, static: true }, { propertyName: "defaultSelectedItemTemplate", first: true, predicate: ["defaultSelectedItemTemplate"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div ecOverlay\n class=\"d-flex flex-grow card\"\n [status]=\"tableStatus?.status\"\n [message]=\"tableStatus?.message\"\n [displayAsMask]=\"true\">\n <ec-searchable-table id=\"{{id}}_searchableTable\"\n class=\"flex-grow\"\n [fillParentHeight]=\"true\"\n [hideHeader]=\"true\"\n [hideSearchControl]=\"true\"\n [removeCard]=\"true\"\n [pageable]=\"true\"\n [pageSize]=\"50\"\n [objectType]=\"itemName\"\n [formModel]=\"formModel\"\n [ready]=\"ready\"\n [getItems]=\"getItems\"\n [selectable]=\"true\"\n [noDataMessage]=\"noDataMessage\"\n [selectionContext]=\"selectionContext\"\n [status]=\"tableStatus\"\n (itemsChange)=\"onItemsChange($event)\"\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\n [tableLayoutFixed]=\"true\"\n [disablePaginationControls]=\"disablePaginationControls\">\n <header *ngIf=\"customAvailableHeaderTemplate\"\n class=\"card-header flex-shrink\"\n style=\"height: 3rem;\">\n <h3 class=\"card-title\">{{availableTitle | translate}}\n <ec-help-popover id=\"availableTitle_helpPopover\"\n *ngIf=\"availableTitleHelpPopover\"\n class=\"d-inline-block my-n3 mx-n1\"\n text=\"{{availableTitleHelpPopover | translate}}\">\n </ec-help-popover>\n </h3>\n </header>\n <thead>\n <tr ecTableSelectableRow\n [selectionContext]=\"selectionContext\"\n class=\"border-bottom-0\">\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\n </tr>\n </thead>\n\n <tbody>\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\n <tr ecTableSelectableRow\n [selectionContext]=\"selectionContext\"\n [rowIndex]=\"rowIndex\"\n [isCheckboxDisabled]=\"item.preventRemove || selectionContext.isSelectingAllItems\"\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id) || selectionContext.isSelectingAllItems\"\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n </ec-searchable-table>\n\n <section id=\"{{id}}_selectedItems\"\n class=\"selected-items flex-grow d-flex flex-column\">\n <div *ngIf=\"selectionContext.isSelectingAllItems\"\n class=\"d-flex flex-column flex-grow\">\n <header class=\"d-flex align-items-center px-2 text-heading-2\"\n style=\"height: 3rem;\">\n <span class=\"flex-grow text-truncate\">{{selectedTitle | translate}}</span>\n <button *ngIf=\"selectedItemsClearable\"\n ecLinkButton\n id=\"{{id}}_clearSelection\"\n class=\"pl-2 ml-auto\"\n (click)=\"onClearSelectionClick()\"\n translate>ClearSelection_TC</button>\n </header>\n <div class=\"text-center border-top flex-grow d-flex align-items-center justify-content-center text-heading-2\"\n [style.padding-left.rem]=\"4\"\n [style.padding-right.rem]=\"4\"\n [innerHtml]=\"selectAllItemsMessage | translate\"></div>\n </div>\n <ec-table *ngIf=\"!selectionContext.isSelectingAllItems\"\n [scrollable]=\"true\"\n class=\"d-flex flex-grow is-fixed\">\n <colgroup>\n <col>\n <col style=\"width: 2rem;\">\n </colgroup>\n <thead>\n <tr style=\"height: 3rem;\">\n <th colspan=\"2\"\n class=\"p-2 border-bottom-0\">\n <div class=\"d-flex align-items-center text-heading-2\">\n <span class=\"flex-grow text-truncate\">{{selectedTitle | translate}}</span>\n <button *ngIf=\"selectedItemsClearable\"\n ecLinkButton\n id=\"{{id}}_clearSelection\"\n class=\"pl-2 ml-auto\"\n (click)=\"onClearSelectionClick()\"\n translate>ClearSelection_TC</button>\n </div>\n </th>\n </tr>\n </thead>\n\n <tbody>\n <ng-container *ngIf=\"selectedItems.length\">\n <tr *ngFor=\"let item of selectedItems; last as isLast\"\n id=\"selected_row_{{item.id}}\"\n [class.border-bottom]=\"!isLast\">\n <td class=\"p-2\">\n <ng-container\n *ngTemplateOutlet=\"internalizedSelectedItemTemplate; context: {$implicit: item}\">\n </ng-container>\n </td>\n\n <td class=\"actions-col text-right\"\n style=\"vertical-align: middle;\">\n <ec-button id=\"{{id}}_removeSelected_{{item.id}}\"\n *ngIf=\"!item.preventRemove\"\n type=\"icon\"\n icon=\"ec-icon icon-cancel\"\n (clicked)=\"removeSelectedItem(item)\">\n </ec-button>\n </td>\n </tr>\n </ng-container>\n <tr *ngIf=\"!selectedItems.length\">\n <td *ngIf=\"!noSelectedItemsMessage\"\n colspan=\"2\"\n class=\"p-2 no-data-message\"\n translate\n [translateParams]=\"{itemName: itemName | translate}\">ItemPickerNoItemsSelected_SC</td>\n <td *ngIf=\"noSelectedItemsMessage\"\n colspan=\"2\"\n class=\"p-2 no-data-message\"\n translate>{{noSelectedItemsMessage}}</td>\n </tr>\n </tbody>\n </ec-table>\n\n <footer id=\"selectedItemsFooter\"\n *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\"\n class=\"d-flex flex-shrink px-2 border-top align-items-center\">\n <div class=\"ml-auto my-2 d-flex align-items-center\"\n style=\"height: 1.75rem;\">\n <span class=\"text-caption-1 font-color-hint\">{{selectedItems.length}} {{itemName | translate}}</span>\n </div>\n </footer>\n </section>\n</div>\n\n<ng-template #defaultAvailableHeaderTemplate>\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">\n <div class=\"d-flex align-items-center \">\n <div *ngIf=\"!availableCheckboxText\">\n <span class=\"text-truncate\">{{availableTitle | translate}}</span>\n <ec-help-popover id=\"availableTitle_helpPopover\"\n *ngIf=\"availableTitleHelpPopover\"\n class=\"d-inline-block my-n3 mx-n1\"\n text=\"{{availableTitleHelpPopover | translate}}\">\n </ec-help-popover>\n </div>\n <span *ngIf=\"availableCheckboxText\"\n id=\"selectedCount\">{{availableCheckboxText}}</span>\n <button *ngIf=\"showSelectAllItemsButton\"\n ecLinkButton\n id=\"selectAllItemsButton\"\n (click)=\"selectAllItems()\"\n class=\"ml-2\">\n {{ ('SelectAllItemPickerItems_TC') | translate:{ count: totalItemsBeforePaging, itemName: itemName } }}\n </button>\n </div>\n </th>\n</ng-template>\n\n<ng-template #defaultAvailableItemTemplate\n let-item>\n <td>{{item.label}}</td>\n</ng-template>\n\n<ng-template #defaultSelectedItemTemplate\n let-item>\n {{item.label}}\n</ng-template>", styles: [":host{display:flex}ec-searchable-table{border-right:2px solid var(--ec-border-color)}.selected-items{max-width:var(--ec-item-picker-max-width-selected-items, 50%)}.no-data-message{white-space:normal}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i3.ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "lockButton", "icon", "iconColor", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }, { kind: "component", type: i4.ViewOverlayComponent, selector: "[ecOverlay]", inputs: ["status", "message", "action", "noDataTemplate", "displayAsMask", "overlayClassList"] }, { kind: "component", type: i5.TableComponent, selector: "ec-table", inputs: ["id", "scrollable", "resizable", "condensed", "sortable", "selectionContext", "selectionToolbarTemplate", "headerTitleTemplate", "selectable", "isForm", "sort", "resizableColumns"], outputs: ["sortChange"] }, { kind: "component", type: i6.SearchableTableComponent, selector: "ec-searchable-table", inputs: ["id", "resizable", "sortable", "sort", "autofocus", "tableClasses", "searchboxPlaceholder", "formModel", "noDataMessage", "noSearchResultsMessage", "ready", "getItems", "refresh", "status", "tableLayoutFixed", "searchboxTabIndex", "maxItemCount", "hideSearchControl", "hideHeader", "objectType", "hideFooter", "pageable", "pageSize", "maxTabs", "searchboxReadonly", "selectionContext", "selectionToolbarTemplate", "headerTitleTemplate", "additionalCountText", "selectable", "customContentTemplate", "removeCard", "overlayClasses", "fillParentHeight", "disablePaginationControls"], outputs: ["sortChange", "pageChange", "itemsChange"] }, { kind: "component", type: i7.TableSelectableRowComponent, selector: "[ecTableSelectableRow]", inputs: ["id", "ecTableSelectableRow", "selectionContext", "rowIndex", "lockedColOptions", "isSelected", "isCheckboxDisabled"] }, { kind: "component", type: i8.HelpPopoverComponent, selector: "ec-help-popover", inputs: ["id", "text", "contentPosition", "maxWidth"] }, { kind: "component", type: i9.LinkButtonComponent, selector: "button[ecLinkButton]" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
283
- }
284
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ItemPickerComponent, decorators: [{
285
- type: Component,
286
- args: [{ selector: 'ec-item-picker', template: "<div ecOverlay\n class=\"d-flex flex-grow card\"\n [status]=\"tableStatus?.status\"\n [message]=\"tableStatus?.message\"\n [displayAsMask]=\"true\">\n <ec-searchable-table id=\"{{id}}_searchableTable\"\n class=\"flex-grow\"\n [fillParentHeight]=\"true\"\n [hideHeader]=\"true\"\n [hideSearchControl]=\"true\"\n [removeCard]=\"true\"\n [pageable]=\"true\"\n [pageSize]=\"50\"\n [objectType]=\"itemName\"\n [formModel]=\"formModel\"\n [ready]=\"ready\"\n [getItems]=\"getItems\"\n [selectable]=\"true\"\n [noDataMessage]=\"noDataMessage\"\n [selectionContext]=\"selectionContext\"\n [status]=\"tableStatus\"\n (itemsChange)=\"onItemsChange($event)\"\n [style.--ec-searchable-table-flex-properties]=\"(availableItems.length || tableStatus.status === 'pending' || tableStatus.status === 'error' ) ? '1 1 auto' : '0 1 auto'\"\n [style.--ec-searchable-table-height-caption-footer]=\"'calc(2.5rem + 1px)'\"\n [tableLayoutFixed]=\"true\"\n [disablePaginationControls]=\"disablePaginationControls\">\n <header *ngIf=\"customAvailableHeaderTemplate\"\n class=\"card-header flex-shrink\"\n style=\"height: 3rem;\">\n <h3 class=\"card-title\">{{availableTitle | translate}}\n <ec-help-popover id=\"availableTitle_helpPopover\"\n *ngIf=\"availableTitleHelpPopover\"\n class=\"d-inline-block my-n3 mx-n1\"\n text=\"{{availableTitleHelpPopover | translate}}\">\n </ec-help-popover>\n </h3>\n </header>\n <thead>\n <tr ecTableSelectableRow\n [selectionContext]=\"selectionContext\"\n class=\"border-bottom-0\">\n <ng-container *ngTemplateOutlet=\"internalizedAvailableHeaderTemplate;\"></ng-container>\n </tr>\n </thead>\n\n <tbody>\n <ng-container *ngFor=\"let item of availableItems; index as rowIndex; trackBy: trackByIndex\">\n <tr ecTableSelectableRow\n [selectionContext]=\"selectionContext\"\n [rowIndex]=\"rowIndex\"\n [isCheckboxDisabled]=\"item.preventRemove || selectionContext.isSelectingAllItems\"\n [isSelected]=\"selectionContext?.selectedItemsMap.has(item.id) || selectionContext.isSelectingAllItems\"\n [style.--ec-table-selectable-row-vertical-align-checkbox-td]=\"'middle'\">\n <ng-container *ngTemplateOutlet=\"internalizedAvailableItemTemplate; context: {$implicit: item}\">\n </ng-container>\n </tr>\n </ng-container>\n </tbody>\n </ec-searchable-table>\n\n <section id=\"{{id}}_selectedItems\"\n class=\"selected-items flex-grow d-flex flex-column\">\n <div *ngIf=\"selectionContext.isSelectingAllItems\"\n class=\"d-flex flex-column flex-grow\">\n <header class=\"d-flex align-items-center px-2 text-heading-2\"\n style=\"height: 3rem;\">\n <span class=\"flex-grow text-truncate\">{{selectedTitle | translate}}</span>\n <button *ngIf=\"selectedItemsClearable\"\n ecLinkButton\n id=\"{{id}}_clearSelection\"\n class=\"pl-2 ml-auto\"\n (click)=\"onClearSelectionClick()\"\n translate>ClearSelection_TC</button>\n </header>\n <div class=\"text-center border-top flex-grow d-flex align-items-center justify-content-center text-heading-2\"\n [style.padding-left.rem]=\"4\"\n [style.padding-right.rem]=\"4\"\n [innerHtml]=\"selectAllItemsMessage | translate\"></div>\n </div>\n <ec-table *ngIf=\"!selectionContext.isSelectingAllItems\"\n [scrollable]=\"true\"\n class=\"d-flex flex-grow is-fixed\">\n <colgroup>\n <col>\n <col style=\"width: 2rem;\">\n </colgroup>\n <thead>\n <tr style=\"height: 3rem;\">\n <th colspan=\"2\"\n class=\"p-2 border-bottom-0\">\n <div class=\"d-flex align-items-center text-heading-2\">\n <span class=\"flex-grow text-truncate\">{{selectedTitle | translate}}</span>\n <button *ngIf=\"selectedItemsClearable\"\n ecLinkButton\n id=\"{{id}}_clearSelection\"\n class=\"pl-2 ml-auto\"\n (click)=\"onClearSelectionClick()\"\n translate>ClearSelection_TC</button>\n </div>\n </th>\n </tr>\n </thead>\n\n <tbody>\n <ng-container *ngIf=\"selectedItems.length\">\n <tr *ngFor=\"let item of selectedItems; last as isLast\"\n id=\"selected_row_{{item.id}}\"\n [class.border-bottom]=\"!isLast\">\n <td class=\"p-2\">\n <ng-container\n *ngTemplateOutlet=\"internalizedSelectedItemTemplate; context: {$implicit: item}\">\n </ng-container>\n </td>\n\n <td class=\"actions-col text-right\"\n style=\"vertical-align: middle;\">\n <ec-button id=\"{{id}}_removeSelected_{{item.id}}\"\n *ngIf=\"!item.preventRemove\"\n type=\"icon\"\n icon=\"ec-icon icon-cancel\"\n (clicked)=\"removeSelectedItem(item)\">\n </ec-button>\n </td>\n </tr>\n </ng-container>\n <tr *ngIf=\"!selectedItems.length\">\n <td *ngIf=\"!noSelectedItemsMessage\"\n colspan=\"2\"\n class=\"p-2 no-data-message\"\n translate\n [translateParams]=\"{itemName: itemName | translate}\">ItemPickerNoItemsSelected_SC</td>\n <td *ngIf=\"noSelectedItemsMessage\"\n colspan=\"2\"\n class=\"p-2 no-data-message\"\n translate>{{noSelectedItemsMessage}}</td>\n </tr>\n </tbody>\n </ec-table>\n\n <footer id=\"selectedItemsFooter\"\n *ngIf=\"selectedItems.length && !selectionContext.isSelectingAllItems\"\n class=\"d-flex flex-shrink px-2 border-top align-items-center\">\n <div class=\"ml-auto my-2 d-flex align-items-center\"\n style=\"height: 1.75rem;\">\n <span class=\"text-caption-1 font-color-hint\">{{selectedItems.length}} {{itemName | translate}}</span>\n </div>\n </footer>\n </section>\n</div>\n\n<ng-template #defaultAvailableHeaderTemplate>\n <th class=\"text-heading-2 font-color-primary border-bottom-0\">\n <div class=\"d-flex align-items-center \">\n <div *ngIf=\"!availableCheckboxText\">\n <span class=\"text-truncate\">{{availableTitle | translate}}</span>\n <ec-help-popover id=\"availableTitle_helpPopover\"\n *ngIf=\"availableTitleHelpPopover\"\n class=\"d-inline-block my-n3 mx-n1\"\n text=\"{{availableTitleHelpPopover | translate}}\">\n </ec-help-popover>\n </div>\n <span *ngIf=\"availableCheckboxText\"\n id=\"selectedCount\">{{availableCheckboxText}}</span>\n <button *ngIf=\"showSelectAllItemsButton\"\n ecLinkButton\n id=\"selectAllItemsButton\"\n (click)=\"selectAllItems()\"\n class=\"ml-2\">\n {{ ('SelectAllItemPickerItems_TC') | translate:{ count: totalItemsBeforePaging, itemName: itemName } }}\n </button>\n </div>\n </th>\n</ng-template>\n\n<ng-template #defaultAvailableItemTemplate\n let-item>\n <td>{{item.label}}</td>\n</ng-template>\n\n<ng-template #defaultSelectedItemTemplate\n let-item>\n {{item.label}}\n</ng-template>", styles: [":host{display:flex}ec-searchable-table{border-right:2px solid var(--ec-border-color)}.selected-items{max-width:var(--ec-item-picker-max-width-selected-items, 50%)}.no-data-message{white-space:normal}\n"] }]
287
- }], ctorParameters: () => [{ type: i1.TranslateService }], propDecorators: { id: [{
288
- type: Input
289
- }], availableTitle: [{
290
- type: Input
291
- }], availableTitleHelpPopover: [{
292
- type: Input
293
- }], selectedTitle: [{
294
- type: Input
295
- }], itemName: [{
296
- type: Input
297
- }], formModel: [{
298
- type: Input
299
- }], customAvailableHeaderTemplate: [{
300
- type: Input
301
- }], customAvailableItemTemplate: [{
302
- type: Input
303
- }], customSelectedItemTemplate: [{
304
- type: Input
305
- }], ready: [{
306
- type: Input
307
- }], getItems: [{
308
- type: Input
309
- }], selectionContext: [{
310
- type: Input
311
- }], noDataMessage: [{
312
- type: Input
313
- }], noSelectedItemsMessage: [{
314
- type: Input
315
- }], enableSelectAllItems: [{
316
- type: Input
317
- }], selectAllItemsMessage: [{
318
- type: Input
319
- }], defaultAvailableHeaderTemplate: [{
320
- type: ViewChild,
321
- args: ['defaultAvailableHeaderTemplate', { static: true }]
322
- }], defaultAvailableItemTemplate: [{
323
- type: ViewChild,
324
- args: ['defaultAvailableItemTemplate', { static: true }]
325
- }], defaultSelectedItemTemplate: [{
326
- type: ViewChild,
327
- args: ['defaultSelectedItemTemplate', { static: true }]
328
- }] } });
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2l0ZW0tcGlja2VyL2l0ZW0tcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9pdGVtLXBpY2tlci9pdGVtLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNkMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZHLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUl6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbURBQW1ELENBQUM7Ozs7Ozs7Ozs7O0FBZTNFLENBQUM7QUFFRixNQUFNLE9BQU8sMkJBQStCLFNBQVEseUJBQXlCO0lBQTdFOztRQUNFLHFGQUFxRjtRQUM5RSxxQkFBZ0IsR0FBK0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUVoRTs7O1dBR0c7UUFDSSw0QkFBdUIsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUU5RDs7V0FFRztRQUNhLG9DQUErQixHQUFZLElBQUksQ0FBQztRQUVoRTs7O1dBR0c7UUFDSSx3QkFBbUIsR0FBWSxLQUFLLENBQUM7SUFDOUMsQ0FBQztDQUFBO0FBT0QsTUFBTSxPQUFPLG1CQUFtQjtJQTZHOUIsWUFDVSxnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQTVHNUMsd0dBQXdHO1FBQ3hGLE9BQUUsR0FBWSxFQUFFLENB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O3NCQUF6QyxLQUFLO2dCQUdVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBR1UsUUFBUTtzQkFBdkIsS0FBSztnQkFHVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBS1UsYUFBYTtzQkFBNUIsS0FBSztnQkFNVSxzQkFBc0I7c0JBQXJDLEtBQUs7Z0JBS1Usb0JBQW9CO3NCQUFuQyxLQUFLO2dCQUdVLHFCQUFxQjtzQkFBcEMsS0FBSztnQkErQ2lFLDhCQUE4QjtzQkFBcEcsU0FBUzt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1EsNEJBQTRCO3NCQUFoRyxTQUFTO3VCQUFDLDhCQUE4QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDUywyQkFBMkI7c0JBQTlGLFNBQVM7dUJBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBUYWJsZVNlYXJjaFJlc3VsdHMgfSBmcm9tICcuLi8uLi9kaXNwbGF5L3RhYmxlL3NlYXJjaGFibGUtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2luZ0luZm8gfSBmcm9tICcuLi8uLi9kaXNwbGF5L3RhYmxlL3RhYmxlLXBhZ2luYXRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlU2VsZWN0YWJsZVJvd0NvbnRleHQgfSBmcm9tICcuLi8uLi9kaXNwbGF5L3RhYmxlL3RhYmxlLXNlbGVjdGFibGUtcm93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPdmVybGF5IH0gZnJvbSAnLi4vLi4vZGlzcGxheS92aWV3LW92ZXJsYXkvdmlldy1vdmVybGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJy4uL21lbnUvbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBpY2tlckl0ZW08VFZhbHVlID0gYW55LCBTSXRlbXMgPSBhbnk+IGV4dGVuZHMgTWVudUl0ZW0ge1xuICBpZDogc3RyaW5nO1xuXG4gIC8qKiBXaGVuIHNldCB0byB0cnVlIHRoZSBhdmFpbGFibGUgaXRlbSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIGxpc3QgKi9cbiAgZGVmYXVsdFNlbGVjdGVkPzogYm9vbGVhbjtcblxuICAvKiogV2hlbiBzZXQgdG8gdHJ1ZSwgdGhlIGl0ZW0gd2lsbCBub3QgYmUgYWxsb3dlZCB0byBiZSByZW1vdmVkIGZyb20gdGhlIHNlbGVjdGVkIGxpc3QgKi9cbiAgcHJldmVudFJlbW92ZT86IGJvb2xlYW47XG5cbiAgLyoqIFJlZGVmaW5pbmcgdG8gZ2V0IHRoZSB0eXBpbmcgKi9cbiAgdmFsdWU6IFRWYWx1ZTtcbn07XG5cbmV4cG9ydCBjbGFzcyBJdGVtUGlja2VyU2VsZWN0YWJsZUNvbnRleHQ8VD4gZXh0ZW5kcyBUYWJsZVNlbGVjdGFibGVSb3dDb250ZXh0IHtcbiAgLyoqIGlkL3ZhbHVlIG1hcCBvZiB0aGUgc2VsZWN0ZWQgaXRlbXMuIFVzZWQgZm9yIGtlZXBpbmcgdHJhY2sgb2Ygd2hhdCBpcyBzZWxlY3RlZCAqL1xuICBwdWJsaWMgc2VsZWN0ZWRJdGVtc01hcDogTWFwPHN0cmluZywgUGlja2VySXRlbTxUPj4gPSBuZXcgTWFwKCk7XG5cbiAgLyoqXG4gICAqIEdpdmVzIGEgd2F5IHRvIHRlbGwgdGhlIHBpY2tlciBjb21wb25lbnQgdGhhdCB0aGUgbWFwIHdhcyBtb2RpZmllZCBleHRlcm5hbGx5IGFuZCB0byB1cGRhdGVcbiAgICogdGhlIGF2YWlsYWJsZS9zZWxlY3RlZCBsaXN0c1xuICAgKi9cbiAgcHVibGljIHNlbGVjdGVkSXRlbXNNYXBDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICAvKipcbiAgICogQWR2YW5jZWRSb3dDbGlja0JlaGF2aW9yIGlzIGRpc2FibGVkIGZvciBJdGVtUGlja2VyLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpc2FibGVBZHZhbmNlZFJvd0NsaWNrQmVoYXZpb3I6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBXaGVuIHRydWUgdGhlIHVzZXIgaGFzIG9wdGVkIHRvIHNlbGVjdCBhbGwgaXRlbXMgYWNyb3NzIGFsbCBwYWdlcy4gRHVlIHRvIGFwaSBwYWdpbmF0aW9uXG4gICAqICB3ZSBkb24ndCBoYXZlIGFsbCBvZiB0aGUgaXRlbXMgbG9jYWxseSwgc28gdGhlIGhvc3Qgd2lsbCBuZWVkIHRvIHRlbGwgdGhlIEFQSSB0byBvcGVyYXRlIG9uIGFsbFxuICAgKiAgdmlhIGFwaSBmaWx0ZXJzIG9yIG90aGVyIG1lYW5zLlxuICAgKi9cbiAgcHVibGljIGlzU2VsZWN0aW5nQWxsSXRlbXM6IGJvb2xlYW4gPSBmYWxzZTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZWMtaXRlbS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vaXRlbS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pdGVtLXBpY2tlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEl0ZW1QaWNrZXJDb21wb25lbnQ8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICAvKiogSWRlbnRpZmllciBmb3IgdGhlIGNvbXBvbmVudC4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgYWxsIGludGVybmFsIGFjdGlvbiBlbGVtZW50cyAqL1xuICBASW5wdXQoKSBwdWJsaWMgaWQ/OiBzdHJpbmcgPSAnJztcblxuICAvKiogVGl0bGUgZGlzcGxheWVkIGFib3ZlIHRoZSBhdmFpbGFibGUgaXRlbXMgdGFibGUgKi9cbiAgQElucHV0KCkgcHVibGljIGF2YWlsYWJsZVRpdGxlOiBzdHJpbmcgPSAnJztcblxuICAvKiogSGVscCBwb3BvdmVyIG5leHQgdG8gdGhlIGF2YWlsYWJsZSB0aXRsZS4gSWYgc3VwcGxpZWQgd2lsbCBzaG93LCBvdGhlcndpc2UgaXMgaGlkZGVuICovXG4gIEBJbnB1dCgpIHB1YmxpYyBhdmFpbGFibGVUaXRsZUhlbHBQb3BvdmVyOiBzdHJpbmcgPSAnJztcblxuICAvKiogVGl0bGUgZGlzcGxheWVkIGFib3ZlIHRoZSBzZWxlY3RlZCBpdGVtcyBsaXN0ICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZFRpdGxlOiBzdHJpbmcgPSAnJztcblxuICAvKiogVGhlIHR5cGUgb2YgaXRlbSBiZWluZyBzZWxlY3RlZC4gRXguIE1ldGVycywgQWRkcmVzc2VzICovXG4gIEBJbnB1dCgpIHB1YmxpYyBpdGVtTmFtZTogc3RyaW5nID0gJyc7XG5cbiAgLyoqIEZvcm0gZ3JvdXAgdGhhdCBpcyBnaXZlbiB0byB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSAqL1xuICBASW5wdXQoKSBwdWJsaWMgZm9ybU1vZGVsPzogVW50eXBlZEZvcm1Hcm91cDtcblxuICAvKiogVGVtcGxhdGUgZm9yIHdoZW4gYSBjdXN0b20gaGVhZGVyIGlzIG5lZWRlZCBmb3IgdGhlIGF2YWlsYWJsZSBpdGVtcyB0YWJsZSAqL1xuICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKiBUZW1wbGF0ZSBmb3Igd2hlbiBhIGN1c3RvbSBhdmFpbGFibGUgaXRlbSBpcyBuZWVkZWQuIERlZmF1bHQgdGVtcGxhdGUgaXMgYSBsYWJlbCBvbmx5ICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21BdmFpbGFibGVJdGVtVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKiBUZW1wbGF0ZSBmb3Igd2hlbiBhIGN1c3RvbSBzZWxlY3RlZCBpdGVtIGlzIG5lZWRlZC4gRGVmYXVsdCB0ZW1wbGF0ZSBpcyBhIGxhYmVsIG9ubHkgKi9cbiAgQElucHV0KCkgcHVibGljIGN1c3RvbVNlbGVjdGVkSXRlbVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKiogVXNlZCBieSB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSB0byBrbm93IHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHkgKi9cbiAgQElucHV0KCkgcHVibGljIHJlYWR5PzogT2JzZXJ2YWJsZTx2b2lkPjtcblxuICAvKiogVXNlZCBieSBTZWFyY2hhYmxlIFRhYmxlIHRvIHJldHJpZXZlIHRoZSBhdmFpbGFibGUgaXRlbXMgKi9cbiAgQElucHV0KCkgcHVibGljIGdldEl0ZW1zPzogKHNlYXJjaD86IHN0cmluZywgcGFnZUNoYW5nZUluZm8/OiBQYWdpbmdJbmZvKSA9PiBPYnNlcnZhYmxlPFRhYmxlU2VhcmNoUmVzdWx0cz47XG5cbiAgLyoqIFVzZWQgdG8gbWFpbnRhaW4gdGhlIGF2YWlsYWJsZSBpdGVtcyBjaGVja2JveCBzZWxlY3Rpb24gYXMgd2VsbCBhcyB0aGUgc2VsZWN0ZWQgaXRlbXMgbGlzdCAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0aW9uQ29udGV4dCE6IEl0ZW1QaWNrZXJTZWxlY3RhYmxlQ29udGV4dDxUPjtcblxuICAvKiogVXNlZCBieSB0aGUgaW50ZXJuYWwgU2VhcmNoYWJsZSBUYWJsZSB3aGVuIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSBpdGVtcyB0byBjaG9vc2UgZnJvbSBiYXNlZCBvbiB0aGUgZ2V0SXRlbXMgcmVzdWx0cy4gRG8gbm90IHN1cHBseVxuICAgKiAgdG8gaW5oZXJpdCB0aGUgZGVmYXVsdCBtZXNzYWdlLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIG5vRGF0YU1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IG5vIHNlbGVjdGVkIGl0ZW1zIG1lc3NhZ2UuIElmIHByb3ZpZGVkIHRoaXMgd2lsbCBiZSB1c2VkLCBvdGhlcndpc2UgdGhlIGRlZmF1bHQgbWVzc2FnZSB3aXRoIHRoZSBpdGVtIG5hbWVcbiAgICogaW50ZXJwb2xhdGlvbiB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbm9TZWxlY3RlZEl0ZW1zTWVzc2FnZT86IHN0cmluZztcblxuICAvKiogVXNlZCB0byBlbmFibGUgc2VsZWN0IGFsbCBpdGVtcyBhY3Jvc3MgcGFnZXMuIFdoZW4gdHJ1ZSB0aGUgYnV0dG9uIHRvIHNlbGVjdCBhbGwgaXRlbXMgd2lsbCBiZSB2aXNpYmxlIGluIHRoZSBhdmFpbGFibGUgaXRlbXMgaGVhZGVyIHdoZW5cbiAgICogIHRoZSBoZWFkZXIgY2hlY2tib3ggaXMgY2hlY2tlZCBhbmQgdGhlcmUgYXJlIG11bHRpcGxlIHBhZ2VzIG9mIHJlc3VsdHNcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBlbmFibGVTZWxlY3RBbGxJdGVtczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBVc2VkIHRvIGRpc3BsYXkgYSBtZXNzYWdlIGluIHRoZSBzZWxlY3RlZCBpdGVtcyB0YWJsZSB3aGVuIHRoZSBzZWxlY3QgYWxsIGl0ZW1zIGJ1dHRvbiBpcyBjbGlja2VkICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RBbGxJdGVtc01lc3NhZ2U6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBMaXN0IG9mIGF2YWlsYWJsZSBpdGVtcyB0byBwaWNrIGZyb20gKi9cbiAgcHVibGljIGF2YWlsYWJsZUl0ZW1zOiBQaWNrZXJJdGVtW10gPSBbXTtcblxuICAvKipcbiAgICogU2VsZWN0ZWQgaXRlbXMgYXJyYXkuIENyZWF0ZWQgZnJvbSB0aGUgc2VsZWN0ZWQgaXRlbXMgbWFwLiBCaW5kaW5nIHRvIHRoZVxuICAgKiBtYXAgaXRlcmF0ZSB2YWx1ZXMgY2F1c2VkIGFuZ3VsYXIgXCJleHByZXNzaW9uIGNoYW5nZWRcIiBlcnJvcnMgc28gYWZ0ZXIgYSBtYXBcbiAgICogdXBkYXRlIHRoaXMgZ2V0cyBzZXQgdG8gdGhlIHZhbHVlc1xuICAgKi9cbiAgcHVibGljIHNlbGVjdGVkSXRlbXM6IFBpY2tlckl0ZW1bXSA9IFtdO1xuXG4gIC8qKiBUcnVlIGlmIHRoZXJlIGFyZSBzZWxlY3RlZCBpdGVtcyBhbmQgYXQgbGVhc3Qgb25lIGNhbiBiZSByZW1vdmVkICovXG4gIHB1YmxpYyBzZWxlY3RlZEl0ZW1zQ2xlYXJhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFRyYWNrIGJ5IHVzZWQgZm9yIHRoZSBzZWFyY2hhYmxlIHRhYmxlIHJvd3MgKi9cbiAgcHVibGljIHRyYWNrQnlJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiBpbmRleDtcblxuICBwdWJsaWMgdGFibGVTdGF0dXM6IE92ZXJsYXkgPSBuZXcgT3ZlcmxheSgncGVuZGluZycpO1xuXG4gIC8qKiBUZXh0IHRvIGRpc3BsYXkgbmV4dCB0byB0aGUgY2hlY2tib3ggaW4gdGhlIGF2YWlsYWJsZSBpdGVtcyBoZWFkZXIuIFVzZWQgdG8gZGlzbGF5IGhvdyBtYW55IGl0ZW1zIGFyZVxuICAgKiAgc2VsZWN0ZWQgd2hlbiBzZWxlY3QgYWxsIGl0ZW1zIGlzIGVuYWJsZWRcbiAgICovXG4gIHB1YmxpYyBhdmFpbGFibGVDaGVja2JveFRleHQ6IHN0cmluZyA9ICcnO1xuXG4gIC8qKiBXaGVuIHNldCB0byB0cnVlIHRoZSBzZWxlY3QgYWxsIGl0ZW1zIGJ1dHRvbiB3aWxsIHNob3cgaW4gdGhlIGF2YWlsYWJsZSBpdGVtcyBoZWFkZXIuIFRoaXMgaXNcbiAgICogIHNob3duIHdoZW4gdGhlIHVzZXIgaGFzIGVuYWJsZWQgc2VsZWN0IGFsbCBmb3IgdGhlIGl0ZW0gcGlja2VyIGFuZCB0aGUgdXNlciBzZWxlY3RzIHRoZSBoZWFkZXIgY2hlY2tib3hcbiAgICogIHdpdGggbW9yZSB0aGFuIG9uZSBwYWdlIG9mIHJlc3VsdHMuXG4gICAqL1xuICBwdWJsaWMgc2hvd1NlbGVjdEFsbEl0ZW1zQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFRoZSB0b3RhbCBudW1iZXIgb2YgaXRlbXMgcmV0dXJuZWQgZnJvbSB0aGUgYXBpIGFjcm9zcyBhbGwgcGFnZXMgKi9cbiAgcHVibGljIHRvdGFsSXRlbXNCZWZvcmVQYWdpbmc/OiBudW1iZXIgPSAwO1xuXG4gIC8qKiBQYXNzZWQgdG8gdGhlIHNlYXJjaGFibGUgdGFibGUgY29udHJvbC4gVXNlZCB0byBkaXNhYmxlIHRoZSBwYWdpbmF0aW9uIGNvbnRyb2xzICovXG4gIHB1YmxpYyBkaXNhYmxlUGFnaW5hdGlvbkNvbnRyb2xzPzogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgLyoqXG4gICAqIFRlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSB0aGUgYXZhaWxhYmxlIGFuZCBzZWxlY3RlZCBpdGVtcyBhcyB3ZWxsIGFzIHRoZSBhdmFpbGFibGUgaXRlbSBoZWFkZXIuXG4gICAqIFRoaXMgd2lsbCBiZSBzZXQgdG8gdGhlIGRlZmF1bHQgdGVtcGxhdGUgaWYgYSBjdXN0b20gaXMgbm90IHByb3ZpZGVkXG4gICAqL1xuICBwdWJsaWMgaW50ZXJuYWxpemVkQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwdWJsaWMgaW50ZXJuYWxpemVkQXZhaWxhYmxlSXRlbVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHVibGljIGludGVybmFsaXplZFNlbGVjdGVkSXRlbVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKiogRGVmYXVsdCB0ZW1wbGF0ZXMgdXNlZCBpZiBhIGN1c3RvbSB0ZW1wbGF0ZSBpcyBub3QgcHJvdmlkZWQgKi9cbiAgQFZpZXdDaGlsZCgnZGVmYXVsdEF2YWlsYWJsZUhlYWRlclRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBkZWZhdWx0QXZhaWxhYmxlSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdkZWZhdWx0QXZhaWxhYmxlSXRlbVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBkZWZhdWx0QXZhaWxhYmxlSXRlbVRlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnZGVmYXVsdFNlbGVjdGVkSXRlbVRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBkZWZhdWx0U2VsZWN0ZWRJdGVtVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKiBVc2VkIHRvIHNodXQgZG93biBvdXIgc3Vic2NyaXB0aW9ucyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkICovXG4gIHByaXZhdGUgZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXR1cFJvd0NoZWNrYm94ZXNXYXRjaGVyKCk7XG4gICAgdGhpcy5zZXR1cFNlbGVjdGVkSXRlbXNDaGFuZ2VkV2F0Y2hlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoIGZvciBjaGFuZ2VzIGFuZCByZWFjdCBpZiB0aGUgY3VzdG9tIGl0ZW0gdGVtcGxhdGUgdmFsdWUgY2hhbmdlc1xuICAgKi9cbiAgcHVibGljIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0SW50ZXJuYWxpemVkVGVtcGxhdGVzKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSBzZWFyY2hhYmxlIHRhYmxlIHdoZW4gYSBuZXcgc2V0IG9mIGl0ZW1zIGFyZSByZXR1cm5lZCBmcm9tIHRoZSBnZXRJdGVtcyBjYWxsLlxuICAgKiBJZiBhbnkgb2YgdGhlIGl0ZW1zIGhhdmUgYHByZXZlbnRSZW1vdmVgIHNldCwgdGhlaXIgaW5kaWNlcyBhcmUgYWRkZWQgdG8gdGhlIGNvbnRleHQuXG4gICAqL1xuICBwdWJsaWMgb25JdGVtc0NoYW5nZShyZXN1bHRzOiBUYWJsZVNlYXJjaFJlc3VsdHMpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Db250ZXh0LmlzU2VsZWN0aW5nQWxsSXRlbXMpIHtcbiAgICAgIHRoaXMub25DbGVhclNlbGVjdGlvbkNsaWNrKCk7XG4gICAgfVxuXG4gICAgbGV0IG5ld05vbkRlcGVuZGVudENoZWNrYm94ZXM6IG51bWJlcltdID0gW107XG5cbiAgICAoPFBpY2tlckl0ZW1bXT5yZXN1bHRzLml0ZW1zKS5mb3JFYWNoKChpdGVtLCBpbmRleCkgID0+IHtcbiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiBhbnkgb2YgdGhlIGl0ZW1zIGFyZSBtYXJrZWQgdG8gYmUgc2VsZWN0ZWQgYnkgZGVmYXVsdCBhbmQgaWYgc29cbiAgICAgIC8vIGFkZCB0aGVtIHRvIHRoZSBtYXAuXG4gICAgICBpZiAoaXRlbS5kZWZhdWx0U2VsZWN0ZWQgJiYgIXRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5oYXMoaXRlbS5pZCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLnNldChpdGVtLmlkLCBpdGVtKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGFueSBvZiB0aGUgaXRlbXMgYXJlIG1hcmtlZCB0byBwcmV2ZW50IFJlbW92YWwsIGFuZCBpZiBzb1xuICAgICAgLy8gYWRkIHRoZW0gdG8gdGhlIG5vbi1kZXBlbmRlbnQgY2hlY2tib3hlcyBhcnJheS4gIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSBtYXN0ZXJcbiAgICAgIC8vIGNoZWNrYm94IGZyb20gdG9nZ2xpbmcgdGhlbS5cbiAgICAgIGlmIChpdGVtLnByZXZlbnRSZW1vdmUpIHtcbiAgICAgICAgbmV3Tm9uRGVwZW5kZW50Q2hlY2tib3hlcy5wdXNoKGluZGV4KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5ub25EZXBlbmRlbnRDaGVja2JveGVzID0gbmV3Tm9uRGVwZW5kZW50Q2hlY2tib3hlcztcblxuICAgIC8vIFdoZW4gdGhlIHVzZXIgZmlsdGVycyB0aGUgbGlzdCB3ZSBzaG91bGQgcmVzZXQgdGhlIHNlbGVjdCBhbGwgaXRlbXNcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQuaXNTZWxlY3RpbmdBbGxJdGVtcyA9IGZhbHNlO1xuXG4gICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9ICg8UGlja2VySXRlbVtdPnJlc3VsdHMuaXRlbXMpO1xuICAgIHRoaXMudG90YWxJdGVtc0JlZm9yZVBhZ2luZyA9IHJlc3VsdHMudG90YWxJdGVtc0JlZm9yZVBhZ2luZztcblxuICAgIHRoaXMudXBkYXRlQXZhaWxhYmxlQ2hlY2tib3hUZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNsZWFyIHNlbGVjdGlvbiBsaW5rIGJ1dHRvbiBpcyBjbGlja2VkXG4gICAqL1xuICBwdWJsaWMgb25DbGVhclNlbGVjdGlvbkNsaWNrKCkge1xuICAgIHRoaXMuY2xlYXJTZWxlY3RlZEl0ZW1zTWFwKCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQucm93Q2hlY2tib3hlcy5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuYXZhaWxhYmxlSXRlbXNbaW5kZXhdLnByZXZlbnRSZW1vdmUpIHtcbiAgICAgICAgY29udHJvbC5zZXRWYWx1ZShmYWxzZSlcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3Rpb25Db250ZXh0LnNlbGVjdGVkSXRlbXNNYXAudmFsdWVzKCkpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zID0gZmFsc2U7XG4gICAgdGhpcy5kaXNhYmxlUGFnaW5hdGlvbkNvbnRyb2xzID0gZmFsc2U7XG4gICAgdGhpcy51cGRhdGVBdmFpbGFibGVDaGVja2JveFRleHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcmVtb3ZlIGl0ZW0gYnV0dG9uIGlzIGNsaWNrZWQgZm9yIGEgc2VsZWN0ZWQgaXRlbVxuICAgKiBAcGFyYW0gcmVtb3ZlSXRlbVxuICAgKi9cbiAgcHVibGljIHJlbW92ZVNlbGVjdGVkSXRlbShyZW1vdmVJdGVtOiBQaWNrZXJJdGVtKTogdm9pZCB7XG4gICAgbGV0IGZvdW5kSW5kZXggPSB0aGlzLmF2YWlsYWJsZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IHJlbW92ZUl0ZW0uaWQpO1xuICAgIGlmIChmb3VuZEluZGV4ID4gLTEpIHtcbiAgICAgIC8vIFVwZGF0ZSB0aGUgcm93IGNoZWNrYm94IHNpbmNlIHRoZSBpdGVtIGV4aXN0cyBpbiB0aGUgcGFnZSBiZWluZyB2aWV3ZWRcbiAgICAgIC8vIFRoZSB2YWx1ZSBjaGFuZ2UgaGFuZGxlciBmb3Igcm93IGNoZWNrYm94ZXMgd2lsbCB1cGRhdGUgdGhlIG1hcC9zZWxlY3RlZCBpdGVtc1xuICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnJvd0NoZWNrYm94ZXMuYXQoZm91bmRJbmRleCkuc2V0VmFsdWUoZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgaXRlbSBiZWluZyByZW1vdmVkIGlzIG5vdCBvbiB0aGUgY3VycmVudCBwYWdlIHNvIGp1c3QgdXBkYXRlIHRoZVxuICAgICAgLy8gbWFwL3NlbGVjdGVkIGl0ZW1zXG4gICAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcC5kZWxldGUocmVtb3ZlSXRlbS5pZCk7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwLnZhbHVlcygpKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVBdmFpbGFibGVDaGVja2JveFRleHQoKTtcbiAgfVxuXG4gIFxuICAvKiogXG4gICAqIENsaWNrIGhhbmRsZXIgZm9yIHRoZSBzZWxlY3QgYWxsIGl0ZW1zIGJ1dHRvblxuICAgKi9cbiAgcHVibGljIHNlbGVjdEFsbEl0ZW1zKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJTZWxlY3RlZEl0ZW1zTWFwKCk7XG5cbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQuaXNTZWxlY3RpbmdBbGxJdGVtcyA9IHRydWU7XG4gICAgdGhpcy5zaG93U2VsZWN0QWxsSXRlbXNCdXR0b24gPSBmYWxzZTtcbiAgICB0aGlzLnVwZGF0ZUF2YWlsYWJsZUNoZWNrYm94VGV4dCgpO1xuICAgIHRoaXMuZGlzYWJsZVBhZ2luYXRpb25Db250cm9scyA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgaXRlbXMgZnJvbSB0aGUgc2VsZWN0ZWQgaXRlbXMgbWFwLiBUaGlzIHdhcyBzcGxpdCBmcm9tIHRoZSBvbkNsZWFyU2VsZWN0aW9uQ2xpY2sgZnVuY3Rpb24gdG8gYWxsb3dcbiAgICogc2VsZWN0QWxsSXRlbXMgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGJ1dCBrZWVwIHRoZSByb3cgY2hlY2tib3ggdmFsdWVzIGluIHBsYWNlLiBUaGlzIHdhcyBuZWVkZWQgYmVjYXVzZSB3aGVuIHlvdSBhcmVcbiAgICogc2VsZWN0aW5nIGFsbCBpdGVtcyBhY3Jvc3MgYWxsIHBhZ2VzIHdlIHdhbnQgdGhlIGN1cnJlbnQgcGFnZSBvZiBpdGVtcyB0byByZW1haW4gY2hlY2tlZC5cbiAgICogXG4gICAqL1xuICBwcml2YXRlIGNsZWFyU2VsZWN0ZWRJdGVtc01hcCgpOiB2b2lkIHtcbiAgICAvLyBSZW1vdmUgcmVtb3ZhYmxlIGl0ZW1zIGZyb20gbWFwXG4gICAgLy8gVGhpcyBpcyBzYWZlLiAgU2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1OTQwMjE2L2VzNi1pcy1pdC1kYW5nZXJvdXMtdG8tZGVsZXRlLWVsZW1lbnRzLWZyb20tc2V0LW1hcC1kdXJpbmctc2V0LW1hcC1pdGVyYXRpb25cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnNlbGVjdGVkSXRlbXNNYXApIHtcbiAgICAgIGlmICghdmFsLnByZXZlbnRSZW1vdmUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnNlbGVjdGVkSXRlbXNNYXAuZGVsZXRlKGtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoIGZvciBjaGFuZ2VzIHRvIHRoZSByb3cgY2hlY2tib3hlcyBmb3JtIGFycmF5IGFuZCB1cGRhdGUgdGhlIHNlbGVjdGVkIGl0ZW1zXG4gICAqIGxpc3RcbiAgICovXG4gIHByaXZhdGUgc2V0dXBSb3dDaGVja2JveGVzV2F0Y2hlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnJvd0NoZWNrYm94ZXMudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAvLyBEZWJvdW5jZSAxMCBpcyBzaW1wbHkgdG8gbm90IHNwYW0gdGhlIGNoYW5nZSBoYW5kbGVyIG9uIGxvYWQvcGFnZSBjaGFuZ2VcbiAgICAgIC8vIE90aGVyd2lzZSB0aGlzIHdpbGwgZ2V0IGNhbGxlZCBldmVyeSB0aW1lIGEgbmV3IHJvdyBpcyBhZGRlZCB0byB0aGUgdGFibGVcbiAgICAgIGRlYm91bmNlVGltZSgxMCksXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpXG4gICAgKS5zdWJzY3JpYmUoKHJvd1ZhbHVlczogYm9vbGVhbltdKSA9PiB7XG4gICAgICByb3dWYWx1ZXMuZm9yRWFjaCgoc2VsZWN0ZWQsIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCBhdmFpbGFibGVJdGVtID0gdGhpcy5hdmFpbGFibGVJdGVtc1tpbmRleF07XG5cbiAgICAgICAgaWYgKCFzZWxlY3RlZCAmJiB0aGlzLnNlbGVjdGlvbkNvbnRleHQ/LnNlbGVjdGVkSXRlbXNNYXAuaGFzKGF2YWlsYWJsZUl0ZW0uaWQpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLmRlbGV0ZShhdmFpbGFibGVJdGVtLmlkKTtcbiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZCAmJiAhdGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLmhhcyhhdmFpbGFibGVJdGVtLmlkKSkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5zZXQoYXZhaWxhYmxlSXRlbS5pZCwgYXZhaWxhYmxlSXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC52YWx1ZXMoKSk7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXNDbGVhcmFibGUgPSB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCAmJiB0aGlzLnNlbGVjdGVkSXRlbXMuc29tZShpID0+ICFpLnByZXZlbnRSZW1vdmUpO1xuICAgICAgdGhpcy51cGRhdGVBdmFpbGFibGVDaGVja2JveFRleHQoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RBbGxDaGVja2JveC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMTApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmICh0aGlzLmVuYWJsZVNlbGVjdEFsbEl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IG9uZVBhZ2VPZkRhdGEgPSB0aGlzLmF2YWlsYWJsZUl0ZW1zLmxlbmd0aCA9PT0gdGhpcy50b3RhbEl0ZW1zQmVmb3JlUGFnaW5nO1xuXG4gICAgICAgIGlmIChjaGVja2VkICYmICFvbmVQYWdlT2ZEYXRhKSB7XG4gICAgICAgICAgdGhpcy5zaG93U2VsZWN0QWxsSXRlbXNCdXR0b24gPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKCFjaGVja2VkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zKSB7XG4gICAgICAgICAgICAvLyBXZSB3ZXJlIHNlbGVjdGluZyBhbGwgaXRlbXMsIGNsZWFyIHRoZSBzZWxlY3Rpb24gdG8gYWxsb3cgdGhlIHVzZXIgdG8gc3RhcnQgb3ZlclxuICAgICAgICAgICAgdGhpcy5vbkNsZWFyU2VsZWN0aW9uQ2xpY2soKTtcbiAgICAgICAgICB9XG4gIFxuICAgICAgICAgIHRoaXMuc2hvd1NlbGVjdEFsbEl0ZW1zQnV0dG9uID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LmlzU2VsZWN0aW5nQWxsSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVBdmFpbGFibGVDaGVja2JveFRleHQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zKSB7XG4gICAgICB0aGlzLmF2YWlsYWJsZUNoZWNrYm94VGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdBbGxJdGVtUGlja2VySXRlbXNTZWxlY3RlZF9TQycsIHsgY291bnQ6IHRoaXMudG90YWxJdGVtc0JlZm9yZVBhZ2luZywgaXRlbU5hbWU6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuaXRlbU5hbWUpIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjaGVja2VkQ291bnQgPSB0aGlzLnNlbGVjdGlvbkNvbnRleHQucm93Q2hlY2tib3hlcy5jb250cm9scy5tYXAoYyA9PiBjLnZhbHVlKS5maWx0ZXIodiA9PiB2KS5sZW5ndGg7XG4gICAgICBpZiAoY2hlY2tlZENvdW50ID4gMCkge1xuICAgICAgICB0aGlzLmF2YWlsYWJsZUNoZWNrYm94VGV4dCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdDb3VudFNlbGVjdGVkX1RDJywgeyBjb3VudDogY2hlY2tlZENvdW50IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVDaGVja2JveFRleHQgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2F0Y2ggdG8gYmUgdG9sZCBpZiBjaGFuZ2VzIHRvIHRoZSBtYXAgd2VyZSBtYWRlIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCBhbmQgaWYgc28gdXBkYXRlXG4gICAqIHRoZSBhcnJheSBkaXNwbGF5ZWQgaW4gdGhlIHNlbGVjdGVkIGxpc3QgYW5kIHNlbGVjdCBjaGVja2JveGVzIGZvciB2aXNpYmxlIGF2YWlsYWJsZSBpdGVtc1xuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cFNlbGVjdGVkSXRlbXNDaGFuZ2VkV2F0Y2hlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGlvbkNvbnRleHQuc2VsZWN0ZWRJdGVtc01hcENoYW5nZWQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Db250ZXh0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3Rpb25Db250ZXh0Py5zZWxlY3RlZEl0ZW1zTWFwLnZhbHVlcygpKTtcblxuICAgICAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uQ29udGV4dC5zZWxlY3RlZEl0ZW1zTWFwLmhhcyhpdGVtLmlkKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Db250ZXh0LnJvd0NoZWNrYm94ZXMuYXQoaW5kZXgpLnNldFZhbHVlKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldEludGVybmFsaXplZFRlbXBsYXRlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXN0b21BdmFpbGFibGVIZWFkZXJUZW1wbGF0ZSkge1xuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZSA9IHRoaXMuY3VzdG9tQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxpemVkQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGUgPSB0aGlzLmRlZmF1bHRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jdXN0b21BdmFpbGFibGVJdGVtVGVtcGxhdGUpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxpemVkQXZhaWxhYmxlSXRlbVRlbXBsYXRlID0gdGhpcy5jdXN0b21BdmFpbGFibGVJdGVtVGVtcGxhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxpemVkQXZhaWxhYmxlSXRlbVRlbXBsYXRlID0gdGhpcy5kZWZhdWx0QXZhaWxhYmxlSXRlbVRlbXBsYXRlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmN1c3RvbVNlbGVjdGVkSXRlbVRlbXBsYXRlKSB7XG4gICAgICB0aGlzLmludGVybmFsaXplZFNlbGVjdGVkSXRlbVRlbXBsYXRlID0gdGhpcy5jdXN0b21TZWxlY3RlZEl0ZW1UZW1wbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnRlcm5hbGl6ZWRTZWxlY3RlZEl0ZW1UZW1wbGF0ZSA9IHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbVRlbXBsYXRlO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBlY092ZXJsYXlcbiAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1ncm93IGNhcmRcIlxuICAgICBbc3RhdHVzXT1cInRhYmxlU3RhdHVzPy5zdGF0dXNcIlxuICAgICBbbWVzc2FnZV09XCJ0YWJsZVN0YXR1cz8ubWVzc2FnZVwiXG4gICAgIFtkaXNwbGF5QXNNYXNrXT1cInRydWVcIj5cbiAgICA8ZWMtc2VhcmNoYWJsZS10YWJsZSBpZD1cInt7aWR9fV9zZWFyY2hhYmxlVGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleC1ncm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsbFBhcmVudEhlaWdodF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZUhlYWRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZVNlYXJjaENvbnRyb2xdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3JlbW92ZUNhcmRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCI1MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW29iamVjdFR5cGVdPVwiaXRlbU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtTW9kZWxdPVwiZm9ybU1vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZHldPVwicmVhZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtnZXRJdGVtc109XCJnZXRJdGVtc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW25vRGF0YU1lc3NhZ2VdPVwibm9EYXRhTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGlvbkNvbnRleHRdPVwic2VsZWN0aW9uQ29udGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJ0YWJsZVN0YXR1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW1zQ2hhbmdlKT1cIm9uSXRlbXNDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tZWMtc2VhcmNoYWJsZS10YWJsZS1mbGV4LXByb3BlcnRpZXNdPVwiKGF2YWlsYWJsZUl0ZW1zLmxlbmd0aCB8fCB0YWJsZVN0YXR1cy5zdGF0dXMgPT09ICdwZW5kaW5nJyB8fCB0YWJsZVN0YXR1cy5zdGF0dXMgPT09ICdlcnJvcicgKSA/ICcxIDEgYXV0bycgOiAnMCAxIGF1dG8nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuLS1lYy1zZWFyY2hhYmxlLXRhYmxlLWhlaWdodC1jYXB0aW9uLWZvb3Rlcl09XCInY2FsYygyLjVyZW0gKyAxcHgpJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlTGF5b3V0Rml4ZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVQYWdpbmF0aW9uQ29udHJvbHNdPVwiZGlzYWJsZVBhZ2luYXRpb25Db250cm9sc1wiPlxuICAgICAgICA8aGVhZGVyICpuZ0lmPVwiY3VzdG9tQXZhaWxhYmxlSGVhZGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FyZC1oZWFkZXIgZmxleC1zaHJpbmtcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzcmVtO1wiPlxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZVwiPnt7YXZhaWxhYmxlVGl0bGUgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgIDxlYy1oZWxwLXBvcG92ZXIgaWQ9XCJhdmFpbGFibGVUaXRsZV9oZWxwUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImF2YWlsYWJsZVRpdGxlSGVscFBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1ibG9jayBteS1uMyBteC1uMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PVwie3thdmFpbGFibGVUaXRsZUhlbHBQb3BvdmVyIHwgdHJhbnNsYXRlfX1cIj5cbiAgICAgICAgICAgICAgICA8L2VjLWhlbHAtcG9wb3Zlcj5cbiAgICAgICAgICAgIDwvaDM+XG4gICAgICAgIDwvaGVhZGVyPlxuICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHIgZWNUYWJsZVNlbGVjdGFibGVSb3dcbiAgICAgICAgICAgICAgICBbc2VsZWN0aW9uQ29udGV4dF09XCJzZWxlY3Rpb25Db250ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJvcmRlci1ib3R0b20tMFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbnRlcm5hbGl6ZWRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZTtcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhdmFpbGFibGVJdGVtczsgaW5kZXggYXMgcm93SW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlJbmRleFwiPlxuICAgICAgICAgICAgICAgIDx0ciBlY1RhYmxlU2VsZWN0YWJsZVJvd1xuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0aW9uQ29udGV4dF09XCJzZWxlY3Rpb25Db250ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2lzQ2hlY2tib3hEaXNhYmxlZF09XCJpdGVtLnByZXZlbnRSZW1vdmUgfHwgc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzU2VsZWN0ZWRdPVwic2VsZWN0aW9uQ29udGV4dD8uc2VsZWN0ZWRJdGVtc01hcC5oYXMoaXRlbS5pZCkgfHwgc2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLi0tZWMtdGFibGUtc2VsZWN0YWJsZS1yb3ctdmVydGljYWwtYWxpZ24tY2hlY2tib3gtdGRdPVwiJ21pZGRsZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImludGVybmFsaXplZEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZTsgY29udGV4dDogeyRpbXBsaWNpdDogaXRlbX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3Rib2R5PlxuICAgIDwvZWMtc2VhcmNoYWJsZS10YWJsZT5cblxuICAgIDxzZWN0aW9uIGlkPVwie3tpZH19X3NlbGVjdGVkSXRlbXNcIlxuICAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0ZWQtaXRlbXMgZmxleC1ncm93IGQtZmxleCBmbGV4LWNvbHVtblwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0aW9uQ29udGV4dC5pc1NlbGVjdGluZ0FsbEl0ZW1zXCJcbiAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LWdyb3dcIj5cbiAgICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHB4LTIgdGV4dC1oZWFkaW5nLTJcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogM3JlbTtcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXgtZ3JvdyB0ZXh0LXRydW5jYXRlXCI+e3tzZWxlY3RlZFRpdGxlIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNlbGVjdGVkSXRlbXNDbGVhcmFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZWNMaW5rQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInt7aWR9fV9jbGVhclNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBsLTIgbWwtYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGVhclNlbGVjdGlvbkNsaWNrKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlPkNsZWFyU2VsZWN0aW9uX1RDPC9idXR0b24+XG4gICAgICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBib3JkZXItdG9wIGZsZXgtZ3JvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgdGV4dC1oZWFkaW5nLTJcIlxuICAgICAgICAgICAgICAgICBbc3R5bGUucGFkZGluZy1sZWZ0LnJlbV09XCI0XCJcbiAgICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmctcmlnaHQucmVtXT1cIjRcIlxuICAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cInNlbGVjdEFsbEl0ZW1zTWVzc2FnZSB8IHRyYW5zbGF0ZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGVjLXRhYmxlICpuZ0lmPVwiIXNlbGVjdGlvbkNvbnRleHQuaXNTZWxlY3RpbmdBbGxJdGVtc1wiXG4gICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGZsZXgtZ3JvdyBpcy1maXhlZFwiPlxuICAgICAgICAgICAgPGNvbGdyb3VwPlxuICAgICAgICAgICAgICAgIDxjb2w+XG4gICAgICAgICAgICAgICAgPGNvbCBzdHlsZT1cIndpZHRoOiAycmVtO1wiPlxuICAgICAgICAgICAgPC9jb2xncm91cD5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHIgc3R5bGU9XCJoZWlnaHQ6IDNyZW07XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjb2xzcGFuPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtMiBib3JkZXItYm90dG9tLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHRleHQtaGVhZGluZy0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LWdyb3cgdGV4dC10cnVuY2F0ZVwiPnt7c2VsZWN0ZWRUaXRsZSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzZWxlY3RlZEl0ZW1zQ2xlYXJhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjTGlua0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ7e2lkfX1fY2xlYXJTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwbC0yIG1sLWF1dG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xlYXJTZWxlY3Rpb25DbGljaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT5DbGVhclNlbGVjdGlvbl9UQzwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRJdGVtcy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXM7IGxhc3QgYXMgaXNMYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0ZWRfcm93X3t7aXRlbS5pZH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItYm90dG9tXT1cIiFpc0xhc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaW50ZXJuYWxpemVkU2VsZWN0ZWRJdGVtVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGl0ZW19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhY3Rpb25zLWNvbCB0ZXh0LXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVjLWJ1dHRvbiBpZD1cInt7aWR9fV9yZW1vdmVTZWxlY3RlZF97e2l0ZW0uaWR9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFpdGVtLnByZXZlbnRSZW1vdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImVjLWljb24gaWNvbi1jYW5jZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlU2VsZWN0ZWRJdGVtKGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lYy1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cIiFzZWxlY3RlZEl0ZW1zLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCIhbm9TZWxlY3RlZEl0ZW1zTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xzcGFuPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtMiBuby1kYXRhLW1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHJhbnNsYXRlUGFyYW1zXT1cIntpdGVtTmFtZTogaXRlbU5hbWUgfCB0cmFuc2xhdGV9XCI+SXRlbVBpY2tlck5vSXRlbXNTZWxlY3RlZF9TQzwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIm5vU2VsZWN0ZWRJdGVtc01lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sc3Bhbj1cIjJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLTIgbm8tZGF0YS1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZT57e25vU2VsZWN0ZWRJdGVtc01lc3NhZ2V9fTwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvZWMtdGFibGU+XG5cbiAgICAgICAgPGZvb3RlciBpZD1cInNlbGVjdGVkSXRlbXNGb290ZXJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0ZWRJdGVtcy5sZW5ndGggJiYgIXNlbGVjdGlvbkNvbnRleHQuaXNTZWxlY3RpbmdBbGxJdGVtc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXggZmxleC1zaHJpbmsgcHgtMiBib3JkZXItdG9wIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG8gbXktMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEuNzVyZW07XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcHRpb24tMSBmb250LWNvbG9yLWhpbnRcIj57e3NlbGVjdGVkSXRlbXMubGVuZ3RofX0ge3tpdGVtTmFtZSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9vdGVyPlxuICAgIDwvc2VjdGlvbj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRBdmFpbGFibGVIZWFkZXJUZW1wbGF0ZT5cbiAgICA8dGggY2xhc3M9XCJ0ZXh0LWhlYWRpbmctMiBmb250LWNvbG9yLXByaW1hcnkgYm9yZGVyLWJvdHRvbS0wXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFhdmFpbGFibGVDaGVja2JveFRleHRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtdHJ1bmNhdGVcIj57e2F2YWlsYWJsZVRpdGxlIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGVjLWhlbHAtcG9wb3ZlciBpZD1cImF2YWlsYWJsZVRpdGxlX2hlbHBQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYXZhaWxhYmxlVGl0bGVIZWxwUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtaW5saW5lLWJsb2NrIG15LW4zIG14LW4xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJ7e2F2YWlsYWJsZVRpdGxlSGVscFBvcG92ZXIgfCB0cmFuc2xhdGV9fVwiPlxuICAgICAgICAgICAgICAgIDwvZWMtaGVscC1wb3BvdmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImF2YWlsYWJsZUNoZWNrYm94VGV4dFwiXG4gICAgICAgICAgICAgICAgICBpZD1cInNlbGVjdGVkQ291bnRcIj57e2F2YWlsYWJsZUNoZWNrYm94VGV4dH19PC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dTZWxlY3RBbGxJdGVtc0J1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGVjTGlua0J1dHRvblxuICAgICAgICAgICAgICAgICAgICBpZD1cInNlbGVjdEFsbEl0ZW1zQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFsbEl0ZW1zKClcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTJcIj5cbiAgICAgICAgICAgICAgICB7eyAoJ1NlbGVjdEFsbEl0ZW1QaWNrZXJJdGVtc19UQycpIHwgdHJhbnNsYXRlOnsgY291bnQ6IHRvdGFsSXRlbXNCZWZvcmVQYWdpbmcsIGl0ZW1OYW1lOiBpdGVtTmFtZSB9IH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC90aD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEF2YWlsYWJsZUl0ZW1UZW1wbGF0ZVxuICAgICAgICAgICAgIGxldC1pdGVtPlxuICAgIDx0ZD57e2l0ZW0ubGFiZWx9fTwvdGQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRTZWxlY3RlZEl0ZW1UZW1wbGF0ZVxuICAgICAgICAgICAgIGxldC1pdGVtPlxuICAgIHt7aXRlbS5sYWJlbH19XG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -1,11 +0,0 @@
1
- import { Component } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class LinkButtonComponent {
4
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LinkButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LinkButtonComponent, selector: "button[ecLinkButton]", ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: [":host{display:inline;border:none;padding:0;background-color:transparent;font-size:inherit;text-align:start;color:var(--ec-color-link);cursor:pointer}:host:hover{text-decoration:underline}:host:focus{outline:none;text-decoration:underline}:host(:disabled){cursor:default;color:var(--ec-color-hint-dark)}:host(:disabled):hover{text-decoration:none}\n"] }); }
6
- }
7
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LinkButtonComponent, decorators: [{
8
- type: Component,
9
- args: [{ selector: 'button[ecLinkButton]', template: `<ng-content></ng-content>`, styles: [":host{display:inline;border:none;padding:0;background-color:transparent;font-size:inherit;text-align:start;color:var(--ec-color-link);cursor:pointer}:host:hover{text-decoration:underline}:host:focus{outline:none;text-decoration:underline}:host(:disabled){cursor:default;color:var(--ec-color-hint-dark)}:host(:disabled):hover{text-decoration:none}\n"] }]
10
- }] });
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2xpbmstYnV0dG9uL2xpbmstYnV0dG9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU8xQyxNQUFNLE9BQU8sbUJBQW1COytHQUFuQixtQkFBbUI7bUdBQW5CLG1CQUFtQiw0REFIcEIsMkJBQTJCOzs0RkFHMUIsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLHNCQUFzQixZQUN0QiwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYnV0dG9uW2VjTGlua0J1dHRvbl0nLFxuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxuICBzdHlsZVVybHM6IFsnLi9saW5rLWJ1dHRvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIExpbmtCdXR0b25Db21wb25lbnQgeyB9XG4iXX0=