cps-ui-kit 0.165.0 → 17.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/esm2022/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +824 -0
  2. package/esm2022/lib/components/cps-button/cps-button.component.mjs +190 -0
  3. package/esm2022/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +235 -0
  4. package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +149 -0
  5. package/esm2022/lib/components/cps-chip/cps-chip.component.mjs +94 -0
  6. package/esm2022/lib/components/cps-datepicker/cps-datepicker.component.mjs +382 -0
  7. package/esm2022/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +209 -0
  8. package/esm2022/lib/components/cps-file-upload/cps-file-upload.component.mjs +138 -0
  9. package/esm2022/lib/components/cps-icon/cps-icon.component.mjs +193 -0
  10. package/esm2022/lib/components/cps-info-circle/cps-info-circle.component.mjs +61 -0
  11. package/esm2022/lib/components/cps-input/cps-input.component.mjs +386 -0
  12. package/{esm2020 → esm2022}/lib/components/cps-loader/cps-loader.component.mjs +5 -5
  13. package/esm2022/lib/components/cps-menu/cps-menu.component.mjs +552 -0
  14. package/esm2022/lib/components/cps-paginator/cps-paginator.component.mjs +114 -0
  15. package/esm2022/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +30 -0
  16. package/{esm2020 → esm2022}/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +4 -4
  17. package/{esm2020 → esm2022}/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +4 -4
  18. package/{esm2020 → esm2022}/lib/components/cps-radio-group/cps-radio/cps-radio.component.mjs +7 -7
  19. package/esm2022/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +55 -0
  20. package/esm2022/lib/components/cps-radio-group/cps-radio-group.component.mjs +158 -0
  21. package/esm2022/lib/components/cps-select/cps-select.component.mjs +615 -0
  22. package/esm2022/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +110 -0
  23. package/{esm2020 → esm2022}/lib/components/cps-tab-group/cps-tab/cps-tab.component.mjs +4 -4
  24. package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +303 -0
  25. package/esm2022/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +79 -0
  26. package/esm2022/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +408 -0
  27. package/esm2022/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +149 -0
  28. package/esm2022/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +88 -0
  29. package/esm2022/lib/components/cps-table/cps-table.component.mjs +941 -0
  30. package/esm2022/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +181 -0
  31. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-column-sortable.directive.mjs +5 -5
  32. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-header-selectable.directive.mjs +5 -5
  33. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-row-selectable.directive.mjs +5 -5
  34. package/esm2022/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +220 -0
  35. package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +136 -0
  36. package/esm2022/lib/components/cps-textarea/cps-textarea.component.mjs +291 -0
  37. package/esm2022/lib/components/cps-timepicker/cps-timepicker.component.mjs +351 -0
  38. package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +251 -0
  39. package/esm2022/lib/components/cps-tree-select/cps-tree-select.component.mjs +87 -0
  40. package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +1196 -0
  41. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.mjs +5 -5
  42. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.mjs +5 -5
  43. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-header-selectable.directive.mjs +5 -5
  44. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.mjs +5 -5
  45. package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +43 -0
  46. package/esm2022/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +354 -0
  47. package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +619 -0
  48. package/esm2022/lib/directives/cps-tooltip/cps-tooltip.directive.mjs +257 -0
  49. package/{esm2020 → esm2022}/lib/pipes/internal/check-option-selected.pipe.mjs +4 -4
  50. package/esm2022/lib/pipes/internal/combine-labels.pipe.mjs +25 -0
  51. package/{esm2020 → esm2022}/lib/pipes/internal/label-by-value.pipe.mjs +4 -4
  52. package/esm2022/lib/services/cps-dialog/cps-dialog.service.mjs +99 -0
  53. package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.mjs +5 -5
  54. package/esm2022/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +470 -0
  55. package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.mjs +5 -5
  56. package/esm2022/lib/services/cps-dialog/utils/cps-dialog-config.mjs +3 -0
  57. package/esm2022/lib/services/cps-notification/cps-notification.service.mjs +126 -0
  58. package/esm2022/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +91 -0
  59. package/{esm2020 → esm2022}/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.mjs +23 -23
  60. package/esm2022/lib/utils/colors-utils.mjs +57 -0
  61. package/esm2022/lib/utils/internal/size-utils.mjs +24 -0
  62. package/{esm2020 → esm2022}/public-api.mjs +2 -2
  63. package/{fesm2020 → fesm2022}/cps-ui-kit.mjs +481 -391
  64. package/fesm2022/cps-ui-kit.mjs.map +1 -0
  65. package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +2 -2
  66. package/lib/components/cps-button/cps-button.component.d.ts +1 -1
  67. package/lib/components/cps-button-toggle/cps-button-toggle.component.d.ts +2 -2
  68. package/lib/components/cps-checkbox/cps-checkbox.component.d.ts +2 -2
  69. package/lib/components/cps-chip/cps-chip.component.d.ts +1 -1
  70. package/lib/components/cps-datepicker/cps-datepicker.component.d.ts +2 -2
  71. package/lib/components/cps-expansion-panel/cps-expansion-panel.component.d.ts +1 -1
  72. package/lib/components/cps-file-upload/cps-file-upload.component.d.ts +1 -1
  73. package/lib/components/cps-icon/cps-icon.component.d.ts +1 -1
  74. package/lib/components/cps-info-circle/cps-info-circle.component.d.ts +2 -2
  75. package/lib/components/cps-input/cps-input.component.d.ts +2 -2
  76. package/lib/components/cps-loader/cps-loader.component.d.ts +1 -1
  77. package/lib/components/cps-menu/cps-menu.component.d.ts +1 -1
  78. package/lib/components/cps-paginator/cps-paginator.component.d.ts +1 -1
  79. package/lib/components/cps-progress-circular/cps-progress-circular.component.d.ts +1 -1
  80. package/lib/components/cps-progress-linear/cps-progress-linear.component.d.ts +1 -1
  81. package/lib/components/cps-radio-group/cps-radio/cps-radio.component.d.ts +1 -1
  82. package/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.d.ts +1 -1
  83. package/lib/components/cps-radio-group/cps-radio-group.component.d.ts +2 -2
  84. package/lib/components/cps-select/cps-select.component.d.ts +2 -2
  85. package/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.d.ts +1 -1
  86. package/lib/components/cps-tab-group/cps-tab/cps-tab.component.d.ts +1 -1
  87. package/lib/components/cps-tab-group/cps-tab-group.component.d.ts +1 -1
  88. package/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.d.ts +1 -1
  89. package/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.d.ts +1 -1
  90. package/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.d.ts +1 -1
  91. package/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.d.ts +1 -1
  92. package/lib/components/cps-table/cps-table.component.d.ts +1 -1
  93. package/lib/components/cps-table/directives/cps-table-column-filter.directive.d.ts +1 -1
  94. package/lib/components/cps-table/directives/cps-table-column-sortable.directive.d.ts +1 -1
  95. package/lib/components/cps-table/directives/cps-table-row-selectable.directive.d.ts +1 -1
  96. package/lib/components/cps-tag/cps-tag.component.d.ts +1 -1
  97. package/lib/components/cps-textarea/cps-textarea.component.d.ts +2 -2
  98. package/lib/components/cps-timepicker/cps-timepicker.component.d.ts +2 -2
  99. package/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.d.ts +1 -1
  100. package/lib/components/cps-tree-select/cps-tree-select.component.d.ts +1 -1
  101. package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +4 -4
  102. package/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.d.ts +1 -1
  103. package/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.d.ts +1 -1
  104. package/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.d.ts +1 -1
  105. package/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.d.ts +1 -1
  106. package/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.d.ts +2 -2
  107. package/lib/directives/{cps-tooltip.directive.d.ts → cps-tooltip/cps-tooltip.directive.d.ts} +2 -2
  108. package/lib/services/cps-dialog/cps-dialog.service.d.ts +13 -0
  109. package/lib/services/cps-dialog/utils/cps-dialog-config.d.ts +1 -1
  110. package/lib/services/cps-notification/cps-notification.service.d.ts +32 -0
  111. package/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.d.ts +1 -1
  112. package/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.d.ts +1 -1
  113. package/package.json +12 -18
  114. package/public-api.d.ts +1 -1
  115. package/esm2020/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +0 -824
  116. package/esm2020/lib/components/cps-button/cps-button.component.mjs +0 -190
  117. package/esm2020/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +0 -235
  118. package/esm2020/lib/components/cps-checkbox/cps-checkbox.component.mjs +0 -149
  119. package/esm2020/lib/components/cps-chip/cps-chip.component.mjs +0 -94
  120. package/esm2020/lib/components/cps-datepicker/cps-datepicker.component.mjs +0 -382
  121. package/esm2020/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +0 -209
  122. package/esm2020/lib/components/cps-file-upload/cps-file-upload.component.mjs +0 -138
  123. package/esm2020/lib/components/cps-icon/cps-icon.component.mjs +0 -193
  124. package/esm2020/lib/components/cps-info-circle/cps-info-circle.component.mjs +0 -61
  125. package/esm2020/lib/components/cps-input/cps-input.component.mjs +0 -386
  126. package/esm2020/lib/components/cps-menu/cps-menu.component.mjs +0 -552
  127. package/esm2020/lib/components/cps-paginator/cps-paginator.component.mjs +0 -113
  128. package/esm2020/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +0 -30
  129. package/esm2020/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +0 -55
  130. package/esm2020/lib/components/cps-radio-group/cps-radio-group.component.mjs +0 -158
  131. package/esm2020/lib/components/cps-select/cps-select.component.mjs +0 -615
  132. package/esm2020/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +0 -110
  133. package/esm2020/lib/components/cps-tab-group/cps-tab-group.component.mjs +0 -299
  134. package/esm2020/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +0 -79
  135. package/esm2020/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +0 -408
  136. package/esm2020/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +0 -148
  137. package/esm2020/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +0 -88
  138. package/esm2020/lib/components/cps-table/cps-table.component.mjs +0 -940
  139. package/esm2020/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +0 -181
  140. package/esm2020/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +0 -210
  141. package/esm2020/lib/components/cps-tag/cps-tag.component.mjs +0 -136
  142. package/esm2020/lib/components/cps-textarea/cps-textarea.component.mjs +0 -291
  143. package/esm2020/lib/components/cps-timepicker/cps-timepicker.component.mjs +0 -351
  144. package/esm2020/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +0 -250
  145. package/esm2020/lib/components/cps-tree-select/cps-tree-select.component.mjs +0 -87
  146. package/esm2020/lib/components/cps-tree-table/cps-tree-table.component.mjs +0 -1192
  147. package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +0 -43
  148. package/esm2020/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +0 -334
  149. package/esm2020/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +0 -616
  150. package/esm2020/lib/directives/cps-tooltip.directive.mjs +0 -257
  151. package/esm2020/lib/pipes/internal/combine-labels.pipe.mjs +0 -25
  152. package/esm2020/lib/services/cps-dialog/cps-dialog.service.mjs +0 -86
  153. package/esm2020/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +0 -470
  154. package/esm2020/lib/services/cps-dialog/utils/cps-dialog-config.mjs +0 -3
  155. package/esm2020/lib/services/cps-notification/cps-notification.service.mjs +0 -94
  156. package/esm2020/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +0 -91
  157. package/esm2020/lib/utils/colors-utils.mjs +0 -57
  158. package/esm2020/lib/utils/internal/size-utils.mjs +0 -24
  159. package/fesm2015/cps-ui-kit.mjs +0 -12086
  160. package/fesm2015/cps-ui-kit.mjs.map +0 -1
  161. package/fesm2020/cps-ui-kit.mjs.map +0 -1
  162. /package/{esm2020 → esm2022}/cps-ui-kit.mjs +0 -0
  163. /package/{esm2020 → esm2022}/lib/components/cps-table/cps-column-filter-types.mjs +0 -0
  164. /package/{esm2020 → esm2022}/lib/services/cps-dialog/utils/cps-dialog-ref.mjs +0 -0
  165. /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/cps-notification-config.mjs +0 -0
  166. /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/internal/cps-notification-data.mjs +0 -0
@@ -0,0 +1,1196 @@
1
+ import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, RendererStyleFlags2, ViewChild } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { TreeTable, TreeTableService, TreeTableModule } from 'primeng/treetable';
5
+ import { DomHandler } from 'primeng/dom';
6
+ import { AngleDoubleLeftIcon } from 'primeng/icons/angledoubleleft';
7
+ import { AngleLeftIcon } from 'primeng/icons/angleleft';
8
+ import { AngleRightIcon } from 'primeng/icons/angleright';
9
+ import { AngleDoubleRightIcon } from 'primeng/icons/angledoubleright';
10
+ import { cloneDeep, isEqual } from 'lodash-es';
11
+ import { CpsInputComponent } from '../cps-input/cps-input.component';
12
+ import { CpsButtonComponent } from '../cps-button/cps-button.component';
13
+ import { CpsMenuComponent } from '../cps-menu/cps-menu.component';
14
+ import { CpsIconComponent } from '../cps-icon/cps-icon.component';
15
+ import { CpsSelectComponent } from '../cps-select/cps-select.component';
16
+ import { CpsLoaderComponent } from '../cps-loader/cps-loader.component';
17
+ import { CpsTreeTableColumnSortableDirective } from './directives/cps-tree-table-column-sortable.directive';
18
+ import { TreeTableUnsortDirective } from './directives/internal/tree-table-unsort.directive';
19
+ import { TableRowMenuComponent } from '../cps-table/components/internal/table-row-menu/table-row-menu.component';
20
+ import { convertSize } from '../../utils/internal/size-utils';
21
+ import { CpsTreeTableHeaderSelectableDirective } from './directives/cps-tree-table-header-selectable.directive';
22
+ import { CpsTreeTableRowSelectableDirective } from './directives/cps-tree-table-row-selectable.directive';
23
+ import { CpsTreetableRowTogglerDirective } from './directives/cps-tree-table-row-toggler.directive';
24
+ import { fromEvent } from 'rxjs';
25
+ import * as i0 from "@angular/core";
26
+ import * as i1 from "@angular/forms";
27
+ import * as i2 from "@angular/common";
28
+ import * as i3 from "primeng/treetable";
29
+ import * as i4 from "primeng/api";
30
+ export function treeTableFactory(tableComponent) {
31
+ return tableComponent.primengTreeTable;
32
+ }
33
+ /**
34
+ * CpsTreeTableComponent is used to display hierarchical data in tabular format.
35
+ * @group Components
36
+ */
37
+ export class CpsTreeTableComponent {
38
+ /**
39
+ * An array of objects to display.
40
+ * @group Props
41
+ */
42
+ set data(value) {
43
+ const clone = cloneDeep(value);
44
+ if (clone && clone.length > 0) {
45
+ let i = 0;
46
+ clone.forEach((v) => {
47
+ v._defaultSortOrder = i++;
48
+ });
49
+ }
50
+ this._data = clone;
51
+ }
52
+ get data() {
53
+ return this._data;
54
+ }
55
+ // eslint-disable-next-line no-useless-constructor
56
+ constructor(cdRef, renderer, ngZone) {
57
+ this.cdRef = cdRef;
58
+ this.renderer = renderer;
59
+ this.ngZone = ngZone;
60
+ /**
61
+ * An array of objects to represent dynamic columns.
62
+ * @group Props
63
+ */
64
+ this.columns = [];
65
+ /**
66
+ * A key used to retrieve the header from columns.
67
+ * @group Props
68
+ */
69
+ this.colHeaderName = 'header';
70
+ /**
71
+ * A key used to retrieve the field from columns.
72
+ * @group Props
73
+ */
74
+ this.colFieldName = 'field';
75
+ /**
76
+ * Treetable min width of type number denoting pixels or string.
77
+ * @group Props
78
+ */
79
+ this.minWidth = '';
80
+ /**
81
+ * Determines whether minWidth prop is used for treetable body only, excluding toolbar and paginator.
82
+ * @group Props
83
+ */
84
+ this.minWidthForBodyOnly = true;
85
+ /**
86
+ * Determines whether the cell widths scale according to their content or not.
87
+ * @group Props
88
+ */
89
+ this.autoLayout = true;
90
+ /**
91
+ * Determines whether the treetable should have alternating stripes.
92
+ * @group Props
93
+ */
94
+ this.striped = true;
95
+ /**
96
+ * Determines whether the treetable should have borders.
97
+ * @group Props
98
+ */
99
+ this.bordered = true;
100
+ /**
101
+ * Size of treetable cells, it can be "small", "normal" or "large".
102
+ * @group Props
103
+ */
104
+ this.size = 'normal';
105
+ /**
106
+ * Determines whether the treetable should have row selection.
107
+ * @group Props
108
+ */
109
+ this.selectable = false;
110
+ /**
111
+ * Determines whether the treetable should have rows highlighting on hover.
112
+ * @group Props
113
+ */
114
+ this.rowHover = true;
115
+ /**
116
+ * Determines whether the treetable should show row menus.
117
+ * @group Props
118
+ */
119
+ this.showRowMenu = false;
120
+ /**
121
+ * Determines whether the 'Remove' button should be displayed in the row menu.
122
+ * Note: This setting only takes effect if 'showRowMenu' is true.
123
+ * @group Props
124
+ */
125
+ this.showRowRemoveButton = true;
126
+ /**
127
+ * Determines whether the 'Edit' button should be displayed in the row menu.
128
+ * Note: This setting only takes effect if 'showRowMenu' is true.
129
+ * @group Props
130
+ */
131
+ this.showRowEditButton = true;
132
+ /**
133
+ * When enabled, a loader component is displayed.
134
+ * @group Props
135
+ */
136
+ this.loading = false;
137
+ /**
138
+ * Inline style of the treetable.
139
+ * @group Props
140
+ */
141
+ this.tableStyle = undefined;
142
+ /**
143
+ * Style class of the treetable.
144
+ * @group Props
145
+ */
146
+ this.tableStyleClass = '';
147
+ /**
148
+ * Makes all columns sortable if columns prop is provided.
149
+ * @group Props
150
+ */
151
+ this.sortable = false;
152
+ /**
153
+ * Determines whether sorting works on single column or on multiple columns.
154
+ * @group Props
155
+ */
156
+ this.sortMode = 'single';
157
+ /**
158
+ * Determines whether to use the default sorting or a custom one using sortFunction.
159
+ * @group Props
160
+ */
161
+ this.customSort = false;
162
+ /**
163
+ * Determines whether the treetable has a toolbar.
164
+ * @group Props
165
+ */
166
+ this.hasToolbar = true;
167
+ /**
168
+ * Toolbar size, it can be "small" or "normal".
169
+ * @group Props
170
+ */
171
+ this.toolbarSize = 'normal';
172
+ /**
173
+ * Toolbar title.
174
+ * @group Props
175
+ */
176
+ this.toolbarTitle = '';
177
+ /**
178
+ * Toolbar icon name.
179
+ * @group Props
180
+ */
181
+ this.toolbarIcon = '';
182
+ /**
183
+ * Toolbar icon color.
184
+ * @group Props
185
+ */
186
+ this.toolbarIconColor = '';
187
+ /**
188
+ * Makes treetable scrollable.
189
+ * @group Props
190
+ */
191
+ this.scrollable = true;
192
+ /**
193
+ * Height of the scroll viewport in fixed pixels or the "flex" keyword for a dynamic size.
194
+ * @group Props
195
+ */
196
+ this.scrollHeight = '';
197
+ /**
198
+ * Determines whether only the elements within scrollable area should be added into the DOM. Works only if scrollable prop is true.
199
+ * @group Props
200
+ */
201
+ this.virtualScroll = false;
202
+ /**
203
+ * Height of a virtual scroll item in fixed pixels.
204
+ * @group Props
205
+ */
206
+ this.virtualScrollItemHeight = 0;
207
+ /**
208
+ * Determines how many additional elements to add to the DOM outside of the view.
209
+ * @group Props
210
+ */
211
+ this.numToleratedItems = 10;
212
+ /**
213
+ * Determines whether the treetable should have paginator.
214
+ * @group Props
215
+ */
216
+ this.paginator = false;
217
+ /**
218
+ * Determines whether to show paginator even there is only one page.
219
+ * @group Props
220
+ */
221
+ this.alwaysShowPaginator = true;
222
+ /**
223
+ * Array of integer values to display inside rows per page dropdown of paginator.
224
+ * @group Props
225
+ */
226
+ this.rowsPerPageOptions = [];
227
+ /**
228
+ * Index of the first row to be displayed.
229
+ * @group Props
230
+ */
231
+ this.first = 0;
232
+ /**
233
+ * Number of rows to display per page.
234
+ * @group Props
235
+ */
236
+ this.rows = 0;
237
+ /**
238
+ * Determines whether to reset page on rows change.
239
+ * @group Props
240
+ */
241
+ this.resetPageOnRowsChange = false;
242
+ /**
243
+ * Determines whether to reset page on treetable data sorting.
244
+ * @group Props
245
+ */
246
+ this.resetPageOnSort = true;
247
+ /**
248
+ * Number of total records.
249
+ * @group Props
250
+ */
251
+ this.totalRecords = 0;
252
+ /**
253
+ * Text to display when there is no data.
254
+ * @group Props
255
+ */
256
+ this.emptyMessage = 'No data';
257
+ /**
258
+ * Height of treetable's body when there is no data, of type number denoting pixels or string.
259
+ * @group Props
260
+ */
261
+ this.emptyBodyHeight = '';
262
+ /**
263
+ * Defines if data is loaded and interacted with in lazy manner.
264
+ * @group Props
265
+ */
266
+ this.lazy = false;
267
+ /**
268
+ * Determines whether to call lazy loading on initialization.
269
+ * @group Props
270
+ */
271
+ this.lazyLoadOnInit = true;
272
+ /**
273
+ * Determines whether to show global filter in the toolbar.
274
+ * @group Props
275
+ */
276
+ this.showGlobalFilter = false;
277
+ /**
278
+ * Global filter placeholder.
279
+ * @group Props
280
+ */
281
+ this.globalFilterPlaceholder = 'Search';
282
+ /**
283
+ * An array of fields to use in global filtering.
284
+ * @group Props
285
+ */
286
+ this.globalFilterFields = [];
287
+ /**
288
+ * Determines whether to clear global filter on data loading.
289
+ * @group Props
290
+ */
291
+ this.clearGlobalFilterOnLoading = false;
292
+ /**
293
+ * Determines whether to show remove button in the toolbar when rows are selected.
294
+ * @group Props
295
+ */
296
+ this.showRemoveBtnOnSelect = true;
297
+ /**
298
+ * Determines whether removeBtnOnSelect is disabled.
299
+ * @group Props
300
+ */
301
+ this.removeBtnOnSelectDisabled = false;
302
+ /**
303
+ * Determines whether to show additional button in the toolbar when rows are selected.
304
+ * @group Props
305
+ */
306
+ this.showAdditionalBtnOnSelect = false;
307
+ /**
308
+ * AdditionalBtnOnSelect title.
309
+ * @group Props
310
+ */
311
+ this.additionalBtnOnSelectTitle = 'Select action';
312
+ /**
313
+ * Determines whether additionalBtnOnSelect is disabled.
314
+ * @group Props
315
+ */
316
+ this.additionalBtnOnSelectDisabled = false;
317
+ /**
318
+ * Determines whether to show action button in the toolbar.
319
+ * @group Props
320
+ */
321
+ this.showActionBtn = false;
322
+ /**
323
+ * Action button title.
324
+ * @group Props
325
+ */
326
+ this.actionBtnTitle = 'Action';
327
+ /**
328
+ * Determines whether actionBtn is disabled.
329
+ * @group Props
330
+ */
331
+ this.actionBtnDisabled = false;
332
+ /**
333
+ * Determines whether to show data reload button in the toolbar.
334
+ * @group Props
335
+ */
336
+ this.showDataReloadBtn = false;
337
+ /**
338
+ * Determines whether dataReloadBtn is disabled.
339
+ * @group Props
340
+ */
341
+ this.dataReloadBtnDisabled = false;
342
+ /**
343
+ * Determines whether the treetable should show columnsToggle menu, where you can choose which columns to be displayed. If external body template is provided, use columnsSelected event emitter.
344
+ * @group Props
345
+ */
346
+ this.showColumnsToggleBtn = false;
347
+ /**
348
+ * Determines whether columnsToggle button is disabled.
349
+ * @group Props
350
+ */
351
+ this.columnsToggleBtnDisabled = false;
352
+ /**
353
+ * Array of initial columns to show in the treetable. If not provided, all columns are initially visible.
354
+ * @group Props
355
+ */
356
+ this.initialColumns = [];
357
+ /**
358
+ * Callback to invoke on selected rows change.
359
+ * @param {any[]} any[] - selected rows.
360
+ * @group Emits
361
+ */
362
+ this.rowsSelected = new EventEmitter();
363
+ /**
364
+ * Callback to invoke when action button is clicked.
365
+ * @param {void} void - action button clicked.
366
+ * @group Emits
367
+ */
368
+ this.actionBtnClicked = new EventEmitter();
369
+ /**
370
+ * Callback to invoke when additional button on select is clicked.
371
+ * @param {any[]} any[] - selected data.
372
+ * @group Emits
373
+ */
374
+ this.additionalBtnOnSelectClicked = new EventEmitter();
375
+ /**
376
+ * Callback to invoke when edit-row button is clicked.
377
+ * @param {any} any - button clicked.
378
+ * @group Emits
379
+ */
380
+ this.editRowBtnClicked = new EventEmitter();
381
+ /**
382
+ * Callback to invoke when rows are removed.
383
+ * @param {any[]} any[] - array of rows to remove.
384
+ * @group Emits
385
+ */
386
+ this.rowsToRemove = new EventEmitter();
387
+ /**
388
+ * Callback to invoke when page is changed.
389
+ * @param {any} any - page changed.
390
+ * @group Emits
391
+ */
392
+ this.pageChanged = new EventEmitter();
393
+ /**
394
+ * Callback to invoke when data is sorted.
395
+ * @param {any} any - Sort data.
396
+ * @group Emits
397
+ */
398
+ this.sorted = new EventEmitter();
399
+ /**
400
+ * Callback to invoke when data is filtered.
401
+ * @param {any} any - Custom filter event.
402
+ * @group Emits
403
+ */
404
+ this.filtered = new EventEmitter();
405
+ /**
406
+ * Callback to invoke on selected columns.
407
+ * @param {any[]} object[] - selection changed.
408
+ * @group Emits
409
+ */
410
+ this.columnsSelected = new EventEmitter();
411
+ /**
412
+ * Callback to invoke when paging, sorting or filtering happens in lazy mode.
413
+ * @param {any} any - Custom lazy load event.
414
+ * @group Emits
415
+ */
416
+ this.lazyLoaded = new EventEmitter();
417
+ /**
418
+ * Callback to invoke when data reload button is clicked.
419
+ * @param {any} any - data reload button clicked.
420
+ * @group Emits
421
+ */
422
+ this.dataReloadBtnClicked = new EventEmitter();
423
+ /**
424
+ * Callback to invoke when a node is expanded.
425
+ * @param {any} any - Node instance.
426
+ * @group Emits
427
+ */
428
+ this.nodeExpanded = new EventEmitter();
429
+ /**
430
+ * Callback to invoke when a node is collapsed.
431
+ * @param {any} any - Node collapse event.
432
+ * @group Emits
433
+ */
434
+ this.nodeCollapsed = new EventEmitter();
435
+ /**
436
+ * Callback to invoke when a node is selected.
437
+ * @param {any} any - Node instance.
438
+ * @group Emits
439
+ */
440
+ this.nodeSelected = new EventEmitter();
441
+ /**
442
+ * Callback to invoke when a node is unselected.
443
+ * @param {any} any - Custom node unselect event.
444
+ * @group Emits
445
+ */
446
+ this.nodeUnselected = new EventEmitter();
447
+ /**
448
+ * A function to implement custom sorting. customSort must be true.
449
+ * @param {any} any - sort meta.
450
+ * @group Emits
451
+ */
452
+ this.customSortFunction = new EventEmitter();
453
+ this.selectedColumns = [];
454
+ this.rowOptions = [];
455
+ // Todo: Add explicit type
456
+ this.selectedRows = [];
457
+ this.virtualScrollItemSize = 0;
458
+ this.defScrollHeight = '';
459
+ this._defScrollHeightPx = 0;
460
+ this._defScrollHeightPxInitial = 0;
461
+ this._scrollbarWidth = 0;
462
+ this._scrollbarVisible = true;
463
+ this._needRecalcAutoLayout = true;
464
+ this._data = [];
465
+ this._resizeObserver = new ResizeObserver((entries) => {
466
+ entries.forEach((entry) => {
467
+ const body = entry.target;
468
+ this._scrollbarVisible = body.scrollHeight > body.clientHeight;
469
+ if (this._scrollbarVisible && this.virtualScroll)
470
+ this.renderer.setStyle(this._scrollableBody, 'overflow', 'auto', RendererStyleFlags2.Important);
471
+ let wScroll = this._scrollbarVisible ? this._scrollbarWidth : 0;
472
+ if (wScroll > 0)
473
+ wScroll -= 1;
474
+ this.renderer.setStyle(this._headerBox, 'padding-right', `${wScroll}px`);
475
+ this.renderer.setStyle(this._headerBox, 'border-right', wScroll > 0 ? '1px solid #d7d5d5' : 'unset');
476
+ this._calcAutoLayoutHeaderWidths();
477
+ });
478
+ });
479
+ }
480
+ ngOnInit() {
481
+ if (!this.scrollable)
482
+ this.virtualScroll = false;
483
+ this.emptyBodyHeight = convertSize(this.emptyBodyHeight);
484
+ this.minWidth = convertSize(this.minWidth);
485
+ if (this.showAdditionalBtnOnSelect)
486
+ this.showRemoveBtnOnSelect = false;
487
+ this.defScrollHeight = this.scrollHeight;
488
+ if (this.virtualScroll) {
489
+ window.addEventListener('resize', this._onWindowResize.bind(this));
490
+ if (this.defScrollHeight && this.defScrollHeight !== 'flex') {
491
+ this._defScrollHeightPx = parseInt(this.scrollHeight, 10);
492
+ }
493
+ }
494
+ if (this.paginator) {
495
+ if (this.rowsPerPageOptions.length < 1)
496
+ this.rowsPerPageOptions = [5, 10, 25, 50];
497
+ if (!this.rows)
498
+ this.rows = this.rowsPerPageOptions[0];
499
+ else {
500
+ if (!this.rowsPerPageOptions.includes(this.rows)) {
501
+ throw new Error('rowsPerPageOptions must include rows');
502
+ }
503
+ }
504
+ this.rowOptions = this.rowsPerPageOptions.map((v) => ({
505
+ label: '' + v,
506
+ value: v
507
+ }));
508
+ }
509
+ if (this.showGlobalFilter &&
510
+ this.globalFilterFields?.length < 1 &&
511
+ this.data?.length > 0) {
512
+ this.globalFilterFields = Object.keys(this.data[0].data);
513
+ }
514
+ this.selectedColumns =
515
+ this.initialColumns.length > 0 ? this.initialColumns : this.columns;
516
+ }
517
+ ngAfterViewInit() {
518
+ this._setMinWidthOverall();
519
+ this._scrollableBody = this.primengTreeTable.el.nativeElement.querySelector('.p-treetable-scrollable-body');
520
+ if (this._scrollableBody) {
521
+ if (this.minWidthForBodyOnly && this.minWidth) {
522
+ const table = this._scrollableBody.querySelector('table');
523
+ if (table)
524
+ this.renderer.setStyle(table, 'min-width', this.minWidth);
525
+ }
526
+ if (this.virtualScroll) {
527
+ if (this.defScrollHeight === 'flex') {
528
+ this._defScrollHeightPx = this._scrollableBody.clientHeight;
529
+ this._defScrollHeightPxInitial = this._defScrollHeightPx;
530
+ }
531
+ if (this.autoLayout) {
532
+ this._scrollSubscription = fromEvent(this._scrollableBody, 'scroll').subscribe(() => {
533
+ this._calcAutoLayoutHeaderWidths(true);
534
+ });
535
+ }
536
+ }
537
+ this._headerBox = this.primengTreeTable.el.nativeElement.querySelector('.p-treetable-scrollable-header-box');
538
+ if (this._headerBox) {
539
+ if (this.minWidthForBodyOnly && this.minWidth) {
540
+ const table = this._headerBox.querySelector('table');
541
+ if (table)
542
+ this.renderer.setStyle(table, 'min-width', this.minWidth);
543
+ }
544
+ this._scrollbarWidth = DomHandler.calculateScrollbarWidth();
545
+ this._resizeObserver.observe(this._scrollableBody);
546
+ }
547
+ if (this._needRecalcAutoLayout) {
548
+ this._calcAutoLayoutHeaderWidths();
549
+ this.cdRef.detectChanges();
550
+ }
551
+ }
552
+ if (!this.scrollable) {
553
+ const tableWrapper = this.primengTreeTable.el?.nativeElement?.querySelector('.p-treetable-wrapper');
554
+ if (tableWrapper && this.minWidthForBodyOnly && this.minWidth) {
555
+ const table = tableWrapper.querySelector('table');
556
+ if (table)
557
+ this.renderer.setStyle(table, 'min-width', this.minWidth);
558
+ }
559
+ }
560
+ }
561
+ ngAfterViewChecked() {
562
+ if (this._needRecalcAutoLayout) {
563
+ this._calcAutoLayoutHeaderWidths();
564
+ this.cdRef.detectChanges();
565
+ }
566
+ if (!this.virtualScroll)
567
+ return;
568
+ if (!this._defScrollHeightPx && this.defScrollHeight === 'flex') {
569
+ this._defScrollHeightPx = this._scrollableBody.clientHeight;
570
+ this._defScrollHeightPxInitial = this._defScrollHeightPx;
571
+ this.cdRef.detectChanges();
572
+ }
573
+ if (!this.virtualScrollItemSize) {
574
+ setTimeout(() => {
575
+ this._recalcVirtualHeight();
576
+ this.cdRef.detectChanges();
577
+ });
578
+ }
579
+ }
580
+ ngOnChanges(changes) {
581
+ if (this.loading) {
582
+ this.clearSelection();
583
+ if (this.clearGlobalFilterOnLoading)
584
+ this.clearGlobalFilter();
585
+ }
586
+ if (this.virtualScrollItemHeight)
587
+ this.virtualScrollItemSize = this.virtualScrollItemHeight;
588
+ this._setMinWidthOverall();
589
+ const dataChanges = changes?.data;
590
+ if (dataChanges?.previousValue !== dataChanges?.currentValue) {
591
+ this.clearSelection();
592
+ setTimeout(() => {
593
+ this._calcAutoLayoutHeaderWidths(true);
594
+ });
595
+ }
596
+ this._calcAutoLayoutHeaderWidths(true);
597
+ this._recalcVirtualHeight();
598
+ }
599
+ ngOnDestroy() {
600
+ this._resizeObserver?.disconnect();
601
+ if (this.virtualScroll) {
602
+ if (this.autoLayout)
603
+ this._scrollSubscription?.unsubscribe();
604
+ window.removeEventListener('resize', this._onWindowResize.bind(this));
605
+ }
606
+ }
607
+ _calcAutoLayoutHeaderWidths(forced = false) {
608
+ this.ngZone.runOutsideAngular(() => {
609
+ if (!this.autoLayout || !this.scrollable)
610
+ return;
611
+ if (!this._needRecalcAutoLayout && !forced)
612
+ return;
613
+ const headerRows = this._headerBox?.querySelectorAll('tr');
614
+ if (!headerRows?.length)
615
+ return;
616
+ const headerCells = headerRows[headerRows.length - 1]?.querySelectorAll('th');
617
+ if (!headerCells?.length)
618
+ return;
619
+ let hasSelectableCell = false;
620
+ let hasRowMenuCell = false;
621
+ const ths = Array.from(headerCells);
622
+ if (ths.every((th) => th.offsetWidth === 0))
623
+ return;
624
+ const thWidths = ths.map((th) => {
625
+ const wprev = th.style.width;
626
+ const isSelectableCell = th.classList.contains('cps-treetable-selectable-cell');
627
+ const isRowCell = th.classList.contains('cps-treetable-row-menu-cell');
628
+ if (isSelectableCell)
629
+ hasSelectableCell = true;
630
+ if (isRowCell)
631
+ hasRowMenuCell = true;
632
+ let thWidth = 55;
633
+ if (!isSelectableCell && !isRowCell) {
634
+ this.renderer.setStyle(th, 'width', 'min-content');
635
+ this.renderer.setStyle(th, 'display', 'block');
636
+ this.renderer.setStyle(th, 'text-wrap', 'nowrap');
637
+ thWidth = th.offsetWidth;
638
+ this.renderer.setStyle(th, 'width', wprev);
639
+ this.renderer.removeStyle(th, 'display');
640
+ this.renderer.removeStyle(th, 'text-wrap');
641
+ }
642
+ return thWidth;
643
+ });
644
+ const bodyRows = this._scrollableBody?.querySelectorAll('tr');
645
+ if (!bodyRows?.length)
646
+ return;
647
+ const tdWidths = [];
648
+ const fragment = document.createDocumentFragment();
649
+ const hiddenDiv = document.createElement('div');
650
+ hiddenDiv.style.visibility = 'hidden';
651
+ hiddenDiv.style.position = 'absolute';
652
+ hiddenDiv.style.whiteSpace = 'nowrap';
653
+ document.body.appendChild(hiddenDiv);
654
+ bodyRows.forEach((tr) => {
655
+ const tds = tr?.querySelectorAll('td');
656
+ tds?.forEach((td, idx) => {
657
+ const isSelectableOrRowMenuCell = td.classList.contains('cps-treetable-selectable-cell') ||
658
+ td.classList.contains('cps-treetable-row-menu-cell');
659
+ let tdWidth = 55;
660
+ if (!isSelectableOrRowMenuCell) {
661
+ const clonedTd = td.cloneNode(true);
662
+ fragment.appendChild(clonedTd);
663
+ this.renderer.setStyle(clonedTd, 'width', 'min-content');
664
+ this.renderer.setStyle(clonedTd, 'display', 'block');
665
+ hiddenDiv.innerHTML = clonedTd.innerHTML;
666
+ hiddenDiv.style.width = 'auto';
667
+ tdWidth = hiddenDiv.offsetWidth;
668
+ fragment.removeChild(clonedTd);
669
+ }
670
+ if (!tdWidths[idx])
671
+ tdWidths[idx] = 0;
672
+ tdWidths[idx] = Math.max(tdWidths[idx], tdWidth);
673
+ });
674
+ });
675
+ document.body.removeChild(hiddenDiv);
676
+ if (thWidths.length !== tdWidths.length)
677
+ return;
678
+ const maxWidths = thWidths.map((v, idx) => Math.max(v, tdWidths[idx]));
679
+ let sum = maxWidths.reduce((a, b) => a + b, 0);
680
+ if (hasSelectableCell) {
681
+ sum -= 55;
682
+ maxWidths.shift();
683
+ }
684
+ if (hasRowMenuCell) {
685
+ sum -= 55;
686
+ maxWidths.pop();
687
+ }
688
+ const percentages = maxWidths.map((v) => (v / sum) * 100);
689
+ headerCells.forEach((th, idx) => {
690
+ if ((hasSelectableCell && idx === 0) ||
691
+ (hasRowMenuCell && idx === headerCells.length - 1)) {
692
+ this.renderer.setStyle(th, 'width', '55px');
693
+ }
694
+ else
695
+ this.renderer.setStyle(th, 'width', percentages[hasSelectableCell ? idx - 1 : idx] + '%');
696
+ });
697
+ bodyRows.forEach((tr) => {
698
+ const tds = tr?.querySelectorAll('td');
699
+ tds?.forEach((td, idx) => {
700
+ if ((hasSelectableCell && idx === 0) ||
701
+ (hasRowMenuCell && idx === tds.length - 1)) {
702
+ this.renderer.setStyle(td, 'width', '55px');
703
+ }
704
+ else {
705
+ this.renderer.setStyle(td, 'width', percentages[hasSelectableCell ? idx - 1 : idx] + '%');
706
+ }
707
+ this.renderer.setStyle(td, 'opacity', '1');
708
+ this.renderer.setStyle(td, 'overflow', 'hidden');
709
+ if (this.bordered)
710
+ this.renderer.setStyle(td, 'border-left-color', 'var(--cps-color-line-mid)');
711
+ });
712
+ });
713
+ this._needRecalcAutoLayout = false;
714
+ });
715
+ }
716
+ _updateVirtualScrollItemSize() {
717
+ if (!this.virtualScroll || this.virtualScrollItemHeight)
718
+ return;
719
+ const trs = this.primengTreeTable?.el?.nativeElement
720
+ ?.querySelector('.p-treetable-tbody')
721
+ ?.querySelectorAll('tr');
722
+ if (!trs?.length)
723
+ return;
724
+ if (!trs[0]?.offsetHeight)
725
+ return;
726
+ let h = 0;
727
+ trs.forEach((tr, idx) => {
728
+ let rh = 0;
729
+ const tds = tr?.querySelectorAll('td');
730
+ tds?.forEach((td) => {
731
+ const wprev = td.style.width;
732
+ this.renderer.setStyle(td, 'display', 'block');
733
+ this.renderer.removeStyle(td, 'width');
734
+ if (td.offsetHeight)
735
+ rh = Math.max(rh, td.offsetHeight);
736
+ this.renderer.removeStyle(td, 'display');
737
+ this.renderer.setStyle(td, 'width', wprev);
738
+ });
739
+ if (rh) {
740
+ h = idx === 0 ? rh : Math.min(h, rh);
741
+ }
742
+ });
743
+ this.virtualScrollItemSize = h;
744
+ }
745
+ _setMinWidthOverall() {
746
+ if (this.minWidthForBodyOnly || !this.minWidth || !this.primengTreeTable)
747
+ return;
748
+ const treeTableMain = this.primengTreeTable.el?.nativeElement?.querySelector('.p-treetable');
749
+ if (treeTableMain) {
750
+ this.renderer.setStyle(treeTableMain, 'overflow', 'auto');
751
+ const paginatorEl = treeTableMain.querySelector('.p-paginator');
752
+ if (paginatorEl)
753
+ this.renderer.setStyle(paginatorEl, 'min-width', this.minWidth);
754
+ const loadingOverlay = treeTableMain.querySelector('.p-treetable-loading-overlay');
755
+ if (loadingOverlay)
756
+ this.renderer.setStyle(loadingOverlay, 'min-width', this.minWidth);
757
+ }
758
+ const scrollableWrapper = this.primengTreeTable.el?.nativeElement?.querySelector('.p-treetable-scrollable-wrapper');
759
+ if (scrollableWrapper)
760
+ this.renderer.setStyle(scrollableWrapper, 'min-width', this.minWidth);
761
+ if (!this.scrollable) {
762
+ const tableWrapper = this.primengTreeTable.el?.nativeElement?.querySelector('.p-treetable-wrapper');
763
+ if (tableWrapper)
764
+ this.renderer.setStyle(tableWrapper, 'min-width', this.minWidth);
765
+ }
766
+ const treeTableHeader = this.primengTreeTable.el?.nativeElement?.querySelector('.p-treetable-header');
767
+ if (treeTableHeader)
768
+ this.renderer.setStyle(treeTableHeader, 'min-width', this.minWidth);
769
+ }
770
+ _onWindowResize() {
771
+ // if (this.defScrollHeight === 'flex')
772
+ // this.defScrollHeightPx = this.scrollableBody.clientHeight;
773
+ clearTimeout(this._windowResizeDebouncer);
774
+ this._windowResizeDebouncer = setTimeout(() => {
775
+ this._recalcVirtualHeight();
776
+ }, 100);
777
+ }
778
+ get styleClass() {
779
+ const classesList = [];
780
+ switch (this.size) {
781
+ case 'small':
782
+ classesList.push('p-treetable-sm');
783
+ break;
784
+ case 'large':
785
+ classesList.push('p-treetable-lg');
786
+ break;
787
+ }
788
+ if (this.hasToolbar) {
789
+ switch (this.toolbarSize) {
790
+ case 'small':
791
+ classesList.push('cps-tbar-small');
792
+ break;
793
+ case 'normal':
794
+ classesList.push('cps-tbar-normal');
795
+ break;
796
+ }
797
+ }
798
+ if (this.striped) {
799
+ classesList.push('p-treetable-striped');
800
+ }
801
+ if (this.bordered) {
802
+ classesList.push('p-treetable-gridlines');
803
+ }
804
+ return classesList.join(' ');
805
+ }
806
+ _recalcVirtualHeight() {
807
+ if (!this._scrollbarVisible && this.virtualScroll)
808
+ this.renderer.setStyle(this._scrollableBody, 'overflow', 'hidden', RendererStyleFlags2.Important);
809
+ setTimeout(() => {
810
+ if (this.virtualScroll && this.defScrollHeight) {
811
+ this._updateVirtualScrollItemSize();
812
+ // Todo: Add explicit type
813
+ const itemsLen = this.primengTreeTable.serializedValue.length;
814
+ if (itemsLen < 1) {
815
+ this.scrollHeight = this.emptyBodyHeight
816
+ ? `calc(${this.emptyBodyHeight} + 1px)`
817
+ : this.virtualScrollItemSize + 1 + 'px';
818
+ }
819
+ else {
820
+ const curHeight = this.virtualScrollItemSize * itemsLen + 2;
821
+ if (this.defScrollHeight === 'flex') {
822
+ if (curHeight >= this._defScrollHeightPxInitial) {
823
+ this.scrollHeight = 'flex';
824
+ this.renderer.setStyle(this._scrollableBody, 'height', '100%');
825
+ this.cdRef.markForCheck();
826
+ return;
827
+ }
828
+ }
829
+ this.scrollHeight =
830
+ Math.min(this._defScrollHeightPx, curHeight) + 'px';
831
+ }
832
+ this.cdRef.markForCheck();
833
+ }
834
+ });
835
+ }
836
+ clearGlobalFilter() {
837
+ this.globalFilterComp?.clear();
838
+ }
839
+ // Todo: Use explicit type
840
+ onSortFunction(event) {
841
+ this.customSortFunction.emit(event);
842
+ }
843
+ onFilterGlobal(value) {
844
+ this.primengTreeTable.filterGlobal(value, 'contains');
845
+ }
846
+ onClickAdditionalBtnOnSelect() {
847
+ this.additionalBtnOnSelectClicked.emit(this.selectedRows);
848
+ }
849
+ onClickActionBtn() {
850
+ this.actionBtnClicked.emit();
851
+ }
852
+ onReloadData() {
853
+ if (this.dataReloadBtnDisabled)
854
+ return;
855
+ this.dataReloadBtnClicked.emit();
856
+ }
857
+ onColumnsToggle(event) {
858
+ if (this.columnsToggleBtnDisabled)
859
+ return;
860
+ this.colToggleMenu?.toggle(event);
861
+ }
862
+ removeSelected() {
863
+ this.rowsToRemove.emit(this.selectedRows);
864
+ }
865
+ clearSelection() {
866
+ this.selectedRows = [];
867
+ }
868
+ onEditRowClicked(node) {
869
+ this.editRowBtnClicked.emit(node);
870
+ }
871
+ onRemoveRowClicked(node) {
872
+ this.rowsToRemove.emit([node]);
873
+ }
874
+ toggleAllColumns() {
875
+ this.selectedColumns =
876
+ this.selectedColumns.length < this.columns.length ? this.columns : [];
877
+ this.columnsSelected.emit(this.selectedColumns);
878
+ setTimeout(() => {
879
+ this._calcAutoLayoutHeaderWidths(true);
880
+ });
881
+ }
882
+ isColumnSelected(col) {
883
+ return this.selectedColumns.some((item) => isEqual(item, col));
884
+ }
885
+ onRowsPerPageChanged() {
886
+ if (this.resetPageOnRowsChange) {
887
+ this.primengTreeTable.first = 0;
888
+ }
889
+ this.changePage(this.getPage());
890
+ }
891
+ getPageCount() {
892
+ return Math.ceil(this.primengTreeTable.totalRecords / this.rows);
893
+ }
894
+ getPage() {
895
+ return Math.floor(this.primengTreeTable.first / this.rows);
896
+ }
897
+ changePage(p) {
898
+ const pc = Math.ceil(this.getPageCount());
899
+ if (p >= 0 && p < pc) {
900
+ this.first = this.rows * p;
901
+ this.primengTreeTable.onPageChange({
902
+ first: this.first,
903
+ rows: this.rows
904
+ });
905
+ }
906
+ }
907
+ onPageChange(event) {
908
+ this.first = event.first;
909
+ this.rows = event.rows;
910
+ const state = {
911
+ page: this.getPage(),
912
+ first: this.first,
913
+ rows: this.rows,
914
+ pageCount: Math.ceil(this.getPageCount())
915
+ };
916
+ this.pageChanged.emit(state);
917
+ setTimeout(() => {
918
+ this._calcAutoLayoutHeaderWidths(true);
919
+ });
920
+ }
921
+ onLazyLoaded(event) {
922
+ this.lazyLoaded.emit(event);
923
+ }
924
+ onNodeExpanded(event) {
925
+ this.nodeExpanded.emit(event);
926
+ setTimeout(() => {
927
+ this._calcAutoLayoutHeaderWidths(true);
928
+ });
929
+ this._recalcVirtualHeight();
930
+ }
931
+ onNodeCollapsed(event) {
932
+ this.nodeCollapsed.emit(event);
933
+ setTimeout(() => {
934
+ this._calcAutoLayoutHeaderWidths(true);
935
+ });
936
+ this._recalcVirtualHeight();
937
+ }
938
+ onNodeSelected(event) {
939
+ this.nodeSelected.emit(event);
940
+ }
941
+ onNodeUnselected(event) {
942
+ this.nodeUnselected.emit(event);
943
+ }
944
+ onSort(event) {
945
+ this.sorted.emit(event);
946
+ setTimeout(() => {
947
+ this._calcAutoLayoutHeaderWidths(true);
948
+ });
949
+ }
950
+ onFilter(event) {
951
+ this.filtered.emit(event);
952
+ setTimeout(() => {
953
+ this._calcAutoLayoutHeaderWidths(true);
954
+ });
955
+ this._recalcVirtualHeight();
956
+ }
957
+ onSelectColumn(col) {
958
+ let res = [];
959
+ if (this.isColumnSelected(col)) {
960
+ res = this.selectedColumns.filter((v) => !isEqual(v, col));
961
+ }
962
+ else {
963
+ this.columns.forEach((o) => {
964
+ if (this.selectedColumns.some((v) => isEqual(v, o)) ||
965
+ isEqual(col, o)) {
966
+ res.push(o);
967
+ }
968
+ });
969
+ }
970
+ this.selectedColumns = res;
971
+ this.columnsSelected.emit(this.selectedColumns);
972
+ setTimeout(() => {
973
+ this._calcAutoLayoutHeaderWidths(true);
974
+ });
975
+ }
976
+ // Replace with explicit type
977
+ onSelectionChanged(selection) {
978
+ this.rowsSelected.emit(selection);
979
+ }
980
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CpsTreeTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
981
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: CpsTreeTableComponent, isStandalone: true, selector: "cps-tree-table", inputs: { columns: "columns", colHeaderName: "colHeaderName", colFieldName: "colFieldName", minWidth: "minWidth", minWidthForBodyOnly: "minWidthForBodyOnly", autoLayout: "autoLayout", striped: "striped", bordered: "bordered", size: "size", selectable: "selectable", rowHover: "rowHover", showRowMenu: "showRowMenu", showRowRemoveButton: "showRowRemoveButton", showRowEditButton: "showRowEditButton", loading: "loading", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", sortable: "sortable", sortMode: "sortMode", customSort: "customSort", hasToolbar: "hasToolbar", toolbarSize: "toolbarSize", toolbarTitle: "toolbarTitle", toolbarIcon: "toolbarIcon", toolbarIconColor: "toolbarIconColor", scrollable: "scrollable", scrollHeight: "scrollHeight", virtualScroll: "virtualScroll", virtualScrollItemHeight: "virtualScrollItemHeight", numToleratedItems: "numToleratedItems", paginator: "paginator", alwaysShowPaginator: "alwaysShowPaginator", rowsPerPageOptions: "rowsPerPageOptions", first: "first", rows: "rows", resetPageOnRowsChange: "resetPageOnRowsChange", resetPageOnSort: "resetPageOnSort", totalRecords: "totalRecords", emptyMessage: "emptyMessage", emptyBodyHeight: "emptyBodyHeight", lazy: "lazy", lazyLoadOnInit: "lazyLoadOnInit", showGlobalFilter: "showGlobalFilter", globalFilterPlaceholder: "globalFilterPlaceholder", globalFilterFields: "globalFilterFields", clearGlobalFilterOnLoading: "clearGlobalFilterOnLoading", showRemoveBtnOnSelect: "showRemoveBtnOnSelect", removeBtnOnSelectDisabled: "removeBtnOnSelectDisabled", showAdditionalBtnOnSelect: "showAdditionalBtnOnSelect", additionalBtnOnSelectTitle: "additionalBtnOnSelectTitle", additionalBtnOnSelectDisabled: "additionalBtnOnSelectDisabled", showActionBtn: "showActionBtn", actionBtnTitle: "actionBtnTitle", actionBtnDisabled: "actionBtnDisabled", showDataReloadBtn: "showDataReloadBtn", dataReloadBtnDisabled: "dataReloadBtnDisabled", showColumnsToggleBtn: "showColumnsToggleBtn", columnsToggleBtnDisabled: "columnsToggleBtnDisabled", initialColumns: "initialColumns", data: "data" }, outputs: { rowsSelected: "rowsSelected", actionBtnClicked: "actionBtnClicked", additionalBtnOnSelectClicked: "additionalBtnOnSelectClicked", editRowBtnClicked: "editRowBtnClicked", rowsToRemove: "rowsToRemove", pageChanged: "pageChanged", sorted: "sorted", filtered: "filtered", columnsSelected: "columnsSelected", lazyLoaded: "lazyLoaded", dataReloadBtnClicked: "dataReloadBtnClicked", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed", nodeSelected: "nodeSelected", nodeUnselected: "nodeUnselected", customSortFunction: "customSortFunction" }, providers: [
982
+ TreeTableService,
983
+ {
984
+ provide: TreeTable,
985
+ useFactory: treeTableFactory,
986
+ // eslint-disable-next-line no-use-before-define
987
+ deps: [CpsTreeTableComponent]
988
+ }
989
+ ], queries: [{ propertyName: "toolbarTemplate", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true }, { propertyName: "nestedHeaderTemplate", first: true, predicate: ["nestedHeader"], descendants: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true }], viewQueries: [{ propertyName: "primengTreeTable", first: true, predicate: ["primengTreeTable"], descendants: true, static: true }, { propertyName: "globalFilterComp", first: true, predicate: ["globalFilterComp"], descendants: true }, { propertyName: "colToggleMenu", first: true, predicate: ["colToggleMenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<p-treeTable\n #primengTreeTable\n ttWithUnsort\n [ngClass]=\"{\n 'cps-treetable-loading': loading,\n 'cps-treetable-flex': defScrollHeight === 'flex',\n 'cps-treetable-nonvirtual': !virtualScroll,\n 'cps-treetable-autolayout-calced': autoLayout && scrollable,\n }\"\n [value]=\"data\"\n [autoLayout]=\"autoLayout && !scrollable\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [virtualScroll]=\"virtualScroll\"\n [virtualScrollItemSize]=\"virtualScrollItemSize\"\n [virtualScrollOptions]=\"{\n numToleratedItems: numToleratedItems,\n autoSize: false\n }\"\n [columns]=\"selectedColumns\"\n [loading]=\"loading\"\n [rowHover]=\"rowHover\"\n [lazy]=\"lazy\"\n [(selection)]=\"selectedRows\"\n (selectionChange)=\"onSelectionChanged($event)\"\n compareSelectionBy=\"deepEquals\"\n [lazyLoadOnInit]=\"lazyLoadOnInit\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [tableStyleClass]=\"tableStyleClass\"\n [customSort]=\"customSort\"\n [sortMode]=\"sortMode\"\n [globalFilterFields]=\"globalFilterFields\"\n [paginator]=\"paginator\"\n [showCurrentPageReport]=\"true\"\n [alwaysShowPaginator]=\"alwaysShowPaginator\"\n [rows]=\"rows\"\n [first]=\"first\"\n [totalRecords]=\"totalRecords\"\n [resetPageOnSort]=\"resetPageOnSort\"\n currentPageReportTemplate=\"{first} - {last} of {totalRecords}\"\n (onPage)=\"onPageChange($event)\"\n (onSort)=\"onSort($event)\"\n (onFilter)=\"onFilter($event)\"\n (onLazyLoad)=\"onLazyLoaded($event)\"\n (sortFunction)=\"onSortFunction($event)\"\n (onNodeExpand)=\"onNodeExpanded($event)\"\n (onNodeCollapse)=\"onNodeCollapsed($event)\"\n (onNodeSelect)=\"onNodeSelected($event)\"\n (onNodeUnselect)=\"onNodeUnselected($event)\">\n <ng-template pTemplate=\"caption\" *ngIf=\"hasToolbar\">\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!toolbarTemplate\">\n <div class=\"cps-treetable-tbar-left\">\n <div *ngIf=\"toolbarIcon\" class=\"cps-treetable-tbar-icon\">\n <cps-icon [icon]=\"toolbarIcon\" [color]=\"toolbarIconColor\"></cps-icon>\n </div>\n <div class=\"cps-treetable-tbar-title\">{{ toolbarTitle }}</div>\n <div *ngIf=\"showGlobalFilter\" class=\"cps-treetable-tbar-global-filter\">\n <cps-input\n #globalFilterComp\n prefixIcon=\"search\"\n [placeholder]=\"globalFilterPlaceholder\"\n (valueChanged)=\"onFilterGlobal($event)\"\n [clearable]=\"true\"\n [disabled]=\"loading\"\n [appearance]=\"toolbarSize === 'small' ? 'underlined' : 'outlined'\"\n [hideDetails]=\"true\">\n </cps-input>\n </div>\n </div>\n <div class=\"cps-treetable-tbar-right\">\n <div\n *ngIf=\"showRemoveBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n label=\"Remove\"\n [disabled]=\"removeBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n icon=\"remove\"\n [size]=\"toolbarSize\"\n (clicked)=\"removeSelected()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showAdditionalBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n [label]=\"additionalBtnOnSelectTitle\"\n [disabled]=\"additionalBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickAdditionalBtnOnSelect()\">\n </cps-button>\n </div>\n <div *ngIf=\"showActionBtn\" class=\"cps-treetable-tbar-action-btn\">\n <cps-button\n [label]=\"actionBtnTitle\"\n [disabled]=\"actionBtnDisabled\"\n color=\"prepared\"\n type=\"outlined\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickActionBtn()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showColumnsToggleBtn && columns.length > 0\"\n class=\"cps-treetable-tbar-coltoggle-btn\"\n [ngClass]=\"{ 'btn-disabled': columnsToggleBtnDisabled }\">\n <cps-icon\n icon=\"columns\"\n size=\"normal\"\n [color]=\"\n columnsToggleBtnDisabled ? 'text-lightest' : 'prepared-lighten1'\n \"\n (click)=\"onColumnsToggle($event)\"></cps-icon>\n <cps-menu #colToggleMenu [withArrow]=\"false\">\n <div class=\"cps-treetable-coltoggle-menu\">\n <div\n class=\"cps-treetable-coltoggle-menu-item select-all-option\"\n [class.allselected]=\"selectedColumns.length === columns.length\"\n (click)=\"toggleAllColumns()\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"> </span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\"\n >Show all columns</span\n >\n </span>\n </div>\n <div\n *ngFor=\"let col of columns\"\n class=\"cps-treetable-coltoggle-menu-item\"\n (click)=\"onSelectColumn(col)\"\n [class.selected]=\"isColumnSelected(col)\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"></span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\">{{\n col[colHeaderName]\n }}</span>\n </span>\n </div>\n </div>\n </cps-menu>\n </div>\n <div\n *ngIf=\"showDataReloadBtn\"\n class=\"cps-treetable-tbar-reload-btn\"\n [ngClass]=\"{ 'btn-disabled': dataReloadBtnDisabled }\">\n <cps-icon\n icon=\"refresh\"\n size=\"18\"\n [color]=\"dataReloadBtnDisabled ? 'text-light' : 'prepared-lighten1'\"\n (click)=\"onReloadData()\">\n </cps-icon>\n </div>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"nestedHeaderTemplate\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"\n nestedHeaderTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"!nestedHeaderTemplate\" let-columns>\n <tr>\n <!-- <th style=\"width: 3rem\" *ngIf=\"reorderableRows\"></th> -->\n <th *ngIf=\"selectable\" cpsTTHdrSelectable></th>\n <ng-container *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!headerTemplate && columns.length > 0\">\n <ng-container *ngIf=\"sortable\">\n <th\n *ngFor=\"let col of columns\"\n [cpsTTColSortable]=\"col[colFieldName]\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n <ng-container *ngIf=\"!sortable\">\n <th *ngFor=\"let col of columns\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n </ng-container>\n <th\n class=\"cps-treetable-row-menu-cell\"\n *ngIf=\"showRowMenu && (showRowRemoveButton || showRowEditButton)\"></th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData=\"rowData\"\n let-columns=\"columns\"\n let-rowNode\n let-rowIndex=\"rowIndex\">\n <tr\n [ttRow]=\"rowNode\"\n [ngClass]=\"{\n 'cps-treetable-row-selected':\n selectable && primengTreeTable.isSelected(rowNode.node)\n }\">\n <!-- <td *ngIf=\"reorderableRows\" class=\"cps-table-row-drag-handle-cell\">\n <span class=\"cps-table-row-drag-handle\" pReorderableRowHandle>\u2630</span>\n </td> -->\n <td [cpsTTRowSelectable]=\"rowNode\" *ngIf=\"selectable\"></td>\n <ng-container *ngIf=\"bodyTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n bodyTemplate;\n context: {\n $implicit: rowNode,\n rowIndex: rowIndex,\n columns: columns,\n rowData: rowData\n }\n \">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!bodyTemplate\">\n <ng-container *ngIf=\"columns.length > 0\">\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <td *ngIf=\"i === 0\" [cpsTTRowToggler]=\"rowNode\">\n {{ rowData[col[colFieldName]] }}\n </td>\n <td *ngIf=\"i > 0\">{{ rowData[col[colFieldName]] }}</td>\n </ng-container>\n </ng-container>\n </ng-container>\n <td\n *ngIf=\"showRowMenu && (showRowRemoveButton || showRowEditButton)\"\n class=\"cps-treetable-row-menu-cell\">\n <table-row-menu\n (editRowBtnClicked)=\"onEditRowClicked(rowNode.node)\"\n (removeRowBtnClicked)=\"onRemoveRowClicked(rowNode.node)\"\n [showRowRemoveButton]=\"showRowRemoveButton\"\n [showRowEditButton]=\"showRowEditButton\">\n </table-row-menu>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td\n colspan=\"100\"\n class=\"cps-treetable-empty-message-td\"\n [ngStyle]=\"{ height: emptyBodyHeight }\">\n {{ emptyMessage }}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"loadingicon\">\n <cps-loader [fullScreen]=\"false\" opacity=\"0\"></cps-loader>\n </ng-template>\n <ng-template pTemplate=\"paginatorleft\">\n <div class=\"cps-table-paginator-itms-per-page\">\n <span class=\"cps-table-paginator-items-per-page-title\"\n >Rows per page:\n </span>\n <cps-select\n [options]=\"rowOptions\"\n [hideDetails]=\"true\"\n [(ngModel)]=\"rows\"\n (valueChanged)=\"onRowsPerPageChanged()\"\n [returnObject]=\"false\"\n optionsClass=\"cps-paginator-page-options\">\n </cps-select>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"paginatorfirstpagelinkicon\">\n <AngleDoubleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorpreviouspagelinkicon\">\n <AngleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatornextpagelinkicon\">\n <AngleRightIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorlastpagelinkicon\">\n <AngleDoubleRightIcon />\n </ng-template>\n</p-treeTable>\n", styles: [":host ::ng-deep .p-treetable{position:relative}:host ::ng-deep .p-component,:host ::ng-deep .p-component *{box-sizing:border-box}:host ::ng-deep .p-component{font-family:Source Sans Pro,sans-serif;font-size:14px;font-weight:400}:host ::ng-deep .p-treetable-scrollable-wrapper{position:relative;background:#fff}:host ::ng-deep .p-treetable-wrapper{background:#fff}:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable.cps-tbar-normal .p-treetable-scrollable-wrapper{height:calc(100% - 72px)}:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable.cps-tbar-small .p-treetable-scrollable-wrapper{height:calc(100% - 43px)}:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable .p-treetable-scrollable-wrapper .p-treetable-scrollable-view .p-treetable-scrollable-header{display:contents}:host ::ng-deep .p-treetable .p-treetable-scrollable-header,:host ::ng-deep .p-treetable .p-treetable-scrollable-footer{background:#fff}:host ::ng-deep .p-treetable-scrollable-header,:host ::ng-deep .p-treetable-scrollable-footer{overflow:hidden}:host ::ng-deep .p-treetable table{border-collapse:collapse;width:100%;table-layout:fixed}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 1px;font-weight:400;color:var(--cps-color-text-mild);background:#fff;transition:box-shadow .2s;overflow:hidden}:host ::ng-deep .p-treetable-scrollable-body{overflow:auto!important;position:relative}:host ::ng-deep .cps-treetable-flex .p-treetable-scrollable-body{height:100%}:host ::ng-deep .p-treetable .p-treetable-tbody{background:#fff}:host ::ng-deep .p-treetable .p-treetable-tbody>tr{background:#fff;color:var(--cps-color-text-dark);transition:box-shadow .2s}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.cps-treetable-row-selected{background-color:var(--cps-color-highlight-active)!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{text-align:left;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem}:host ::ng-deep p-treetable:not(.cps-treetable-autolayout-calced) .p-treetable .p-treetable-tbody>tr>td{overflow:hidden}:host ::ng-deep .cps-treetable-autolayout-calced .p-treetable .p-treetable-scrollable-body .p-treetable-tbody>tr>td:not(.cps-treetable-row-toggler-cell):not(.cps-treetable-selectable-cell):not(.cps-treetable-row-menu-cell):not(.cps-treetable-empty-message-td){opacity:0;border-left-color:#fff}:host ::ng-deep .cps-treetable-autolayout-calced .p-treetable.p-treetable-striped .p-treetable-scrollable-body .p-treetable-tbody>tr:nth-child(odd)>td:not(.cps-treetable-row-toggler-cell):not(.cps-treetable-selectable-cell):not(.cps-treetable-row-menu-cell):not(.cps-treetable-empty-message-td){border-left-color:var(--cps-color-bg-light)}:host ::ng-deep .cps-treetable-autolayout-calced .p-treetable .p-treetable-scrollable-body .p-treetable-tbody>tr:hover>td:not(.cps-treetable-row-toggler-cell):not(.cps-treetable-selectable-cell):not(.cps-treetable-row-menu-cell):not(.cps-treetable-empty-message-td){border-left-color:var(--cps-color-highlight-hover)}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:first-child{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 0}:host ::ng-deep .p-treetable-auto-layout table{table-layout:auto}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler{width:1rem;height:1rem;color:var(--cps-color-text-dark);border:0 none;background:transparent;border-radius:50%;margin-right:.5rem}:host ::ng-deep .p-treetable-toggler{cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;overflow:hidden;position:relative}:host ::ng-deep .p-ripple{overflow:hidden;position:relative}:host ::ng-deep .p-link:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:14px;font-family:Source Sans Pro,sans-serif;border-radius:6px}:host ::ng-deep input[type=button],:host ::ng-deep input[type=submit],:host ::ng-deep input[type=reset],:host ::ng-deep input[type=file]::-webkit-file-upload-button,:host ::ng-deep button{border-radius:0}:host ::ng-deep .p-treetable .p-treetable-tbody>tr:focus{outline:0 none;outline-offset:-.15rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:enabled:hover{color:var(--cps-color-calm);border-color:transparent;background:unset}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-treetable .p-paginator{border-width:0 1px 1px 1px;border-radius:0}:host ::ng-deep .p-paginator{background:#fff;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;color:var(--cps-color-text-dark);padding:1rem;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-paginator-left-content{margin-right:auto}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page{display:inline-flex;align-items:center}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-table-paginator-items-per-page-title{font-family:Source Sans Pro,sans-serif;font-size:14px;margin-right:12px;cursor:default}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box{min-height:32px!important;background:transparent!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-items{font-size:14px!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-chevron .cps-icon{width:14px;height:14px}:host ::ng-deep .p-paginator .p-paginator-current{background-color:transparent;border:0 none;color:var(--cps-color-text-dark);min-width:3rem;margin:.143rem;padding:0 .5rem;font-family:Source Sans Pro,sans-serif;font-size:14px;height:unset}:host ::ng-deep .p-paginator-page,:host ::ng-deep .p-paginator-next,:host ::ng-deep .p-paginator-last,:host ::ng-deep .p-paginator-first,:host ::ng-deep .p-paginator-prev,:host ::ng-deep .p-paginator-current{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;-webkit-user-select:none;user-select:none;overflow:hidden;position:relative}:host ::ng-deep .p-paginator-current{cursor:default}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-first,:host ::ng-deep .p-paginator .p-paginator-prev,:host ::ng-deep .p-paginator .p-paginator-next,:host ::ng-deep .p-paginator .p-paginator-last{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-disabled,:host ::ng-deep .p-disabled *{cursor:default!important;pointer-events:none}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background:var(--cps-color-calm);border-color:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-paginator-element:focus{z-index:1;position:relative}:host ::ng-deep span.p-paginator-icon{display:contents}:host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:.4}:host ::ng-deep .cps-treetable-empty-message-td{text-align:center!important;font-weight:600;background:#fff}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-header{border-width:1px 1px 0 1px}:host ::ng-deep .p-treetable .p-treetable-header{font-weight:600;display:flex;justify-content:space-between;align-items:center;padding:0 10px;border:unset;background:unset;border-top:1px solid var(--cps-color-line-mid);border-right:1px solid var(--cps-color-line-mid);border-left:4px solid var(--cps-color-surprise)!important;border-radius:4px 4px 0 0;font-size:16px;line-height:150%;background-color:#fff;color:var(--cps-color-text-darkest);overflow:auto}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-global-filter{margin-left:12px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-icon{display:flex;margin-right:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-title{cursor:default}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-btn-on-select{margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-action-btn{margin-right:4px;margin-left:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn{display:contents}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn cps-icon{margin-left:12px;margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon{cursor:pointer}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon:hover .cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon:hover .cps-icon{color:var(--cps-color-prepared)!important}:host ::ng-deep .cps-tbar-small.p-treetable .p-treetable-header{height:43px}:host ::ng-deep .cps-tbar-normal.p-treetable .p-treetable-header{height:72px}:host ::ng-deep .p-treetable .p-treetable-footer{background:#fff;color:#343a40;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem;font-weight:700}:host ::ng-deep .p-treetable .p-treetable-tfoot>tr>td{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;font-weight:700;color:#343a40;background:#fff}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-up{border-bottom-color:var(--cps-color-text-mild)}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-down{border-top-color:var(--cps-color-text-mild)}:host ::ng-deep .p-icon-wrapper{display:inline-flex}:host ::ng-deep .p-icon{display:inline-block;width:1rem;height:1rem}:host ::ng-deep .p-treetable .p-sortable-column .cps-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center;font-size:12px;vertical-align:top;color:var(--cps-color-calm);margin-left:.25rem}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column{cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column:focus{box-shadow:none;outline:0 none}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler.p-icon{width:2rem;height:2rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.p-highlight{background:#eff6ff;color:#1d4ed8}:host ::ng-deep .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody>tr:not(.p-highlight):hover{background:var(--cps-color-highlight-hover)}:host ::ng-deep .p-treetable-hoverable-rows .p-treetable-tbody>tr{cursor:auto}:host ::ng-deep .p-treetable .p-column-resizer-helper{background:#3b82f6}:host ::ng-deep .p-treetable .p-treetable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:1001;top:0;left:0;width:100%;height:100%;background-color:#fff;transition-duration:.2s;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-treetable.cps-tbar-small .p-treetable-loading-overlay{top:43px;height:calc(100% - 43px)}:host ::ng-deep .p-treetable.cps-tbar-normal .p-treetable-loading-overlay{top:72px;height:calc(100% - 72px)}:host ::ng-deep .cps-treetable-loading .p-treetable{min-height:200px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-normal{min-height:272px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-small{min-height:243px}:host ::ng-deep .cps-table-col-filter-menu-open .cps-table-col-filter-menu-button{color:var(--cps-color-text-dark)}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-footer{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-top{border-width:0 1px 0 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-bottom{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{border-width:1px 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:last-child{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tfoot>tr>td{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:only-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tbody>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tfoot>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-footer{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-thead>tr>th{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tbody>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tfoot>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-footer{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(odd){background:var(--cps-color-bg-light)}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(2n){background:#fff}:host ::ng-deep .cps-treetable-row-menu-cell{width:55px;border-left:none!important}:host ::ng-deep .cps-treetable-selectable-cell{width:55px;text-align:center!important}:host ::ng-deep .p-checkbox{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:bottom;position:relative;width:18px;height:18px}:host ::ng-deep .p-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}:host ::ng-deep .p-hidden-accessible input,:host ::ng-deep .p-hidden-accessible select{transform:scale(0)}:host ::ng-deep .p-checkbox .p-checkbox-box{background:#fff;width:18px;height:18px;color:var(--cps-color-text-dark);border:2px solid var(--cps-color-text-mild);border-radius:2px;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}:host ::ng-deep .p-checkbox-box{display:flex;justify-content:center;align-items:center}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:var(--cps-color-calm);background:var(--cps-color-calm)}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:var(--cps-color-calm);background:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{border-color:var(--cps-color-calm)}:host ::ng-deep .p-checkbox .p-checkbox-box .p-icon{width:14px;height:14px}:host ::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{transition-duration:.2s;color:#fff;font-size:14px}:host ::ng-deep .p-checkbox .p-checkbox-box minusicon .p-checkbox-icon{color:var(--cps-color-calm);width:12px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td p-treetablecheckbox .p-checkbox{margin-right:0}::ng-deep .p-scrollbar-measure{width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px}.cps-treetable-coltoggle-menu{display:block;max-height:242px;overflow-x:hidden;background:#fff}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item:hover{background:var(--cps-color-highlight-hover)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-text-dark)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-left{display:flex;align-items:center;margin-right:8px}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected{font-weight:600}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-label,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-calm)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-check,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-check{opacity:1}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected{background:var(--cps-color-highlight-selected)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.highlighten{background:var(--cps-color-highlight-active)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected.highlighten{background:var(--cps-color-highlight-selected-dark)}.cps-treetable-coltoggle-menu .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}::ng-deep .cps-select-options-menu.cps-paginator-page-options .cps-select-options-option{font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: TreeTableModule }, { kind: "component", type: i3.TreeTable, selector: "p-treeTable", inputs: ["columns", "style", "styleClass", "tableStyle", "tableStyleClass", "autoLayout", "lazy", "lazyLoadOnInit", "paginator", "rows", "first", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "customSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "compareSelectionBy", "rowHover", "loading", "loadingIcon", "showLoader", "scrollable", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "frozenColumns", "resizableColumns", "columnResizeMode", "reorderableColumns", "contextMenu", "rowTrackBy", "filters", "globalFilterFields", "filterDelay", "filterMode", "filterLocale", "paginatorLocale", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "value", "virtualRowHeight"], outputs: ["selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i3.TTRow, selector: "[ttRow]", inputs: ["ttRow"] }, { kind: "component", type: CpsInputComponent, selector: "cps-input", inputs: ["label", "hint", "placeholder", "disabled", "readonly", "width", "type", "loading", "clearable", "prefixIcon", "prefixIconClickable", "prefixIconSize", "prefixText", "hideDetails", "persistentClear", "error", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "appearance", "valueToDisplay", "value"], outputs: ["valueChanged", "focused", "prefixIconClicked", "blurred", "cleared", "enterClicked"] }, { kind: "component", type: CpsButtonComponent, selector: "cps-button", inputs: ["color", "contentColor", "type", "label", "icon", "iconPosition", "size", "width", "height", "disabled", "loading"], outputs: ["clicked"] }, { kind: "component", type: CpsMenuComponent, selector: "cps-menu", inputs: ["header", "items", "withArrow", "compressed", "focusOnShow", "persistent", "containerClass", "showTransitionOptions", "hideTransitionOptions"], outputs: ["menuShown", "menuHidden", "beforeMenuHidden", "contentClicked"] }, { kind: "component", type: CpsIconComponent, selector: "cps-icon", inputs: ["icon", "size", "color"] }, { kind: "component", type: CpsSelectComponent, selector: "cps-select", inputs: ["label", "placeholder", "hint", "returnObject", "multiple", "disabled", "width", "selectAll", "chips", "closableChips", "clearable", "openOnClear", "options", "keepInitialOrder", "optionLabel", "optionValue", "optionInfo", "hideDetails", "persistentClear", "prefixIcon", "prefixIconSize", "loading", "virtualScroll", "numToleratedItems", "infoTooltip", "infoTooltipClass", "infoTooltipMaxWidth", "infoTooltipPersistent", "infoTooltipPosition", "optionsClass", "appearance", "value"], outputs: ["valueChanged"] }, { kind: "component", type: CpsLoaderComponent, selector: "cps-loader", inputs: ["fullScreen", "opacity", "labelColor", "showLabel"] }, { kind: "component", type: AngleDoubleLeftIcon, selector: "AngleDoubleLeftIcon" }, { kind: "component", type: AngleLeftIcon, selector: "AngleLeftIcon" }, { kind: "component", type: AngleRightIcon, selector: "AngleRightIcon" }, { kind: "component", type: AngleDoubleRightIcon, selector: "AngleDoubleRightIcon" }, { kind: "directive", type: CpsTreeTableColumnSortableDirective, selector: "[cpsTTColSortable]", inputs: ["cpsTTColSortable"] }, { kind: "directive", type: CpsTreeTableHeaderSelectableDirective, selector: "[cpsTTHdrSelectable]" }, { kind: "directive", type: CpsTreeTableRowSelectableDirective, selector: "[cpsTTRowSelectable]", inputs: ["cpsTTRowSelectable"] }, { kind: "directive", type: CpsTreetableRowTogglerDirective, selector: "[cpsTTRowToggler]", inputs: ["cpsTTRowToggler"] }, { kind: "directive", type: TreeTableUnsortDirective, selector: "[ttWithUnsort]" }, { kind: "component", type: TableRowMenuComponent, selector: "table-row-menu", inputs: ["showRowRemoveButton", "showRowEditButton"], outputs: ["editRowBtnClicked", "removeRowBtnClicked"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
990
+ }
991
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: CpsTreeTableComponent, decorators: [{
992
+ type: Component,
993
+ args: [{ selector: 'cps-tree-table', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
994
+ FormsModule,
995
+ CommonModule,
996
+ TreeTableModule,
997
+ CpsInputComponent,
998
+ CpsButtonComponent,
999
+ CpsMenuComponent,
1000
+ CpsIconComponent,
1001
+ CpsSelectComponent,
1002
+ CpsLoaderComponent,
1003
+ AngleDoubleLeftIcon,
1004
+ AngleLeftIcon,
1005
+ AngleRightIcon,
1006
+ AngleDoubleRightIcon,
1007
+ CpsTreeTableColumnSortableDirective,
1008
+ CpsTreeTableHeaderSelectableDirective,
1009
+ CpsTreeTableRowSelectableDirective,
1010
+ CpsTreetableRowTogglerDirective,
1011
+ TreeTableUnsortDirective,
1012
+ TableRowMenuComponent
1013
+ ], providers: [
1014
+ TreeTableService,
1015
+ {
1016
+ provide: TreeTable,
1017
+ useFactory: treeTableFactory,
1018
+ // eslint-disable-next-line no-use-before-define
1019
+ deps: [CpsTreeTableComponent]
1020
+ }
1021
+ ], template: "<p-treeTable\n #primengTreeTable\n ttWithUnsort\n [ngClass]=\"{\n 'cps-treetable-loading': loading,\n 'cps-treetable-flex': defScrollHeight === 'flex',\n 'cps-treetable-nonvirtual': !virtualScroll,\n 'cps-treetable-autolayout-calced': autoLayout && scrollable,\n }\"\n [value]=\"data\"\n [autoLayout]=\"autoLayout && !scrollable\"\n [scrollable]=\"scrollable\"\n [scrollHeight]=\"scrollHeight\"\n [virtualScroll]=\"virtualScroll\"\n [virtualScrollItemSize]=\"virtualScrollItemSize\"\n [virtualScrollOptions]=\"{\n numToleratedItems: numToleratedItems,\n autoSize: false\n }\"\n [columns]=\"selectedColumns\"\n [loading]=\"loading\"\n [rowHover]=\"rowHover\"\n [lazy]=\"lazy\"\n [(selection)]=\"selectedRows\"\n (selectionChange)=\"onSelectionChanged($event)\"\n compareSelectionBy=\"deepEquals\"\n [lazyLoadOnInit]=\"lazyLoadOnInit\"\n [styleClass]=\"styleClass\"\n [tableStyle]=\"tableStyle\"\n [tableStyleClass]=\"tableStyleClass\"\n [customSort]=\"customSort\"\n [sortMode]=\"sortMode\"\n [globalFilterFields]=\"globalFilterFields\"\n [paginator]=\"paginator\"\n [showCurrentPageReport]=\"true\"\n [alwaysShowPaginator]=\"alwaysShowPaginator\"\n [rows]=\"rows\"\n [first]=\"first\"\n [totalRecords]=\"totalRecords\"\n [resetPageOnSort]=\"resetPageOnSort\"\n currentPageReportTemplate=\"{first} - {last} of {totalRecords}\"\n (onPage)=\"onPageChange($event)\"\n (onSort)=\"onSort($event)\"\n (onFilter)=\"onFilter($event)\"\n (onLazyLoad)=\"onLazyLoaded($event)\"\n (sortFunction)=\"onSortFunction($event)\"\n (onNodeExpand)=\"onNodeExpanded($event)\"\n (onNodeCollapse)=\"onNodeCollapsed($event)\"\n (onNodeSelect)=\"onNodeSelected($event)\"\n (onNodeUnselect)=\"onNodeUnselected($event)\">\n <ng-template pTemplate=\"caption\" *ngIf=\"hasToolbar\">\n <ng-container *ngIf=\"toolbarTemplate\">\n <ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!toolbarTemplate\">\n <div class=\"cps-treetable-tbar-left\">\n <div *ngIf=\"toolbarIcon\" class=\"cps-treetable-tbar-icon\">\n <cps-icon [icon]=\"toolbarIcon\" [color]=\"toolbarIconColor\"></cps-icon>\n </div>\n <div class=\"cps-treetable-tbar-title\">{{ toolbarTitle }}</div>\n <div *ngIf=\"showGlobalFilter\" class=\"cps-treetable-tbar-global-filter\">\n <cps-input\n #globalFilterComp\n prefixIcon=\"search\"\n [placeholder]=\"globalFilterPlaceholder\"\n (valueChanged)=\"onFilterGlobal($event)\"\n [clearable]=\"true\"\n [disabled]=\"loading\"\n [appearance]=\"toolbarSize === 'small' ? 'underlined' : 'outlined'\"\n [hideDetails]=\"true\">\n </cps-input>\n </div>\n </div>\n <div class=\"cps-treetable-tbar-right\">\n <div\n *ngIf=\"showRemoveBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n label=\"Remove\"\n [disabled]=\"removeBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n icon=\"remove\"\n [size]=\"toolbarSize\"\n (clicked)=\"removeSelected()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showAdditionalBtnOnSelect && selectedRows.length > 0\"\n class=\"cps-treetable-tbar-btn-on-select\">\n <cps-button\n [label]=\"additionalBtnOnSelectTitle\"\n [disabled]=\"additionalBtnOnSelectDisabled\"\n color=\"prepared\"\n type=\"borderless\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickAdditionalBtnOnSelect()\">\n </cps-button>\n </div>\n <div *ngIf=\"showActionBtn\" class=\"cps-treetable-tbar-action-btn\">\n <cps-button\n [label]=\"actionBtnTitle\"\n [disabled]=\"actionBtnDisabled\"\n color=\"prepared\"\n type=\"outlined\"\n [size]=\"toolbarSize\"\n (clicked)=\"onClickActionBtn()\">\n </cps-button>\n </div>\n <div\n *ngIf=\"showColumnsToggleBtn && columns.length > 0\"\n class=\"cps-treetable-tbar-coltoggle-btn\"\n [ngClass]=\"{ 'btn-disabled': columnsToggleBtnDisabled }\">\n <cps-icon\n icon=\"columns\"\n size=\"normal\"\n [color]=\"\n columnsToggleBtnDisabled ? 'text-lightest' : 'prepared-lighten1'\n \"\n (click)=\"onColumnsToggle($event)\"></cps-icon>\n <cps-menu #colToggleMenu [withArrow]=\"false\">\n <div class=\"cps-treetable-coltoggle-menu\">\n <div\n class=\"cps-treetable-coltoggle-menu-item select-all-option\"\n [class.allselected]=\"selectedColumns.length === columns.length\"\n (click)=\"toggleAllColumns()\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"> </span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\"\n >Show all columns</span\n >\n </span>\n </div>\n <div\n *ngFor=\"let col of columns\"\n class=\"cps-treetable-coltoggle-menu-item\"\n (click)=\"onSelectColumn(col)\"\n [class.selected]=\"isColumnSelected(col)\">\n <span class=\"cps-treetable-coltoggle-menu-item-left\">\n <span class=\"cps-treetable-coltoggle-menu-item-check\"></span>\n <span class=\"cps-treetable-coltoggle-menu-item-label\">{{\n col[colHeaderName]\n }}</span>\n </span>\n </div>\n </div>\n </cps-menu>\n </div>\n <div\n *ngIf=\"showDataReloadBtn\"\n class=\"cps-treetable-tbar-reload-btn\"\n [ngClass]=\"{ 'btn-disabled': dataReloadBtnDisabled }\">\n <cps-icon\n icon=\"refresh\"\n size=\"18\"\n [color]=\"dataReloadBtnDisabled ? 'text-light' : 'prepared-lighten1'\"\n (click)=\"onReloadData()\">\n </cps-icon>\n </div>\n </div>\n </ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"nestedHeaderTemplate\" let-columns>\n <ng-container\n *ngTemplateOutlet=\"\n nestedHeaderTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-template>\n\n <ng-template pTemplate=\"header\" *ngIf=\"!nestedHeaderTemplate\" let-columns>\n <tr>\n <!-- <th style=\"width: 3rem\" *ngIf=\"reorderableRows\"></th> -->\n <th *ngIf=\"selectable\" cpsTTHdrSelectable></th>\n <ng-container *ngIf=\"headerTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n headerTemplate;\n context: {\n $implicit: columns,\n }\n \"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!headerTemplate && columns.length > 0\">\n <ng-container *ngIf=\"sortable\">\n <th\n *ngFor=\"let col of columns\"\n [cpsTTColSortable]=\"col[colFieldName]\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n <ng-container *ngIf=\"!sortable\">\n <th *ngFor=\"let col of columns\">\n {{ col[colHeaderName] }}\n </th>\n </ng-container>\n </ng-container>\n <th\n class=\"cps-treetable-row-menu-cell\"\n *ngIf=\"showRowMenu && (showRowRemoveButton || showRowEditButton)\"></th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-rowData=\"rowData\"\n let-columns=\"columns\"\n let-rowNode\n let-rowIndex=\"rowIndex\">\n <tr\n [ttRow]=\"rowNode\"\n [ngClass]=\"{\n 'cps-treetable-row-selected':\n selectable && primengTreeTable.isSelected(rowNode.node)\n }\">\n <!-- <td *ngIf=\"reorderableRows\" class=\"cps-table-row-drag-handle-cell\">\n <span class=\"cps-table-row-drag-handle\" pReorderableRowHandle>\u2630</span>\n </td> -->\n <td [cpsTTRowSelectable]=\"rowNode\" *ngIf=\"selectable\"></td>\n <ng-container *ngIf=\"bodyTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n bodyTemplate;\n context: {\n $implicit: rowNode,\n rowIndex: rowIndex,\n columns: columns,\n rowData: rowData\n }\n \">\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!bodyTemplate\">\n <ng-container *ngIf=\"columns.length > 0\">\n <ng-container *ngFor=\"let col of columns; let i = index\">\n <td *ngIf=\"i === 0\" [cpsTTRowToggler]=\"rowNode\">\n {{ rowData[col[colFieldName]] }}\n </td>\n <td *ngIf=\"i > 0\">{{ rowData[col[colFieldName]] }}</td>\n </ng-container>\n </ng-container>\n </ng-container>\n <td\n *ngIf=\"showRowMenu && (showRowRemoveButton || showRowEditButton)\"\n class=\"cps-treetable-row-menu-cell\">\n <table-row-menu\n (editRowBtnClicked)=\"onEditRowClicked(rowNode.node)\"\n (removeRowBtnClicked)=\"onRemoveRowClicked(rowNode.node)\"\n [showRowRemoveButton]=\"showRowRemoveButton\"\n [showRowEditButton]=\"showRowEditButton\">\n </table-row-menu>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td\n colspan=\"100\"\n class=\"cps-treetable-empty-message-td\"\n [ngStyle]=\"{ height: emptyBodyHeight }\">\n {{ emptyMessage }}\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"loadingicon\">\n <cps-loader [fullScreen]=\"false\" opacity=\"0\"></cps-loader>\n </ng-template>\n <ng-template pTemplate=\"paginatorleft\">\n <div class=\"cps-table-paginator-itms-per-page\">\n <span class=\"cps-table-paginator-items-per-page-title\"\n >Rows per page:\n </span>\n <cps-select\n [options]=\"rowOptions\"\n [hideDetails]=\"true\"\n [(ngModel)]=\"rows\"\n (valueChanged)=\"onRowsPerPageChanged()\"\n [returnObject]=\"false\"\n optionsClass=\"cps-paginator-page-options\">\n </cps-select>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"paginatorfirstpagelinkicon\">\n <AngleDoubleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorpreviouspagelinkicon\">\n <AngleLeftIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatornextpagelinkicon\">\n <AngleRightIcon />\n </ng-template>\n <ng-template pTemplate=\"paginatorlastpagelinkicon\">\n <AngleDoubleRightIcon />\n </ng-template>\n</p-treeTable>\n", styles: [":host ::ng-deep .p-treetable{position:relative}:host ::ng-deep .p-component,:host ::ng-deep .p-component *{box-sizing:border-box}:host ::ng-deep .p-component{font-family:Source Sans Pro,sans-serif;font-size:14px;font-weight:400}:host ::ng-deep .p-treetable-scrollable-wrapper{position:relative;background:#fff}:host ::ng-deep .p-treetable-wrapper{background:#fff}:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable.cps-tbar-normal .p-treetable-scrollable-wrapper{height:calc(100% - 72px)}:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable.cps-tbar-small .p-treetable-scrollable-wrapper{height:calc(100% - 43px)}:host ::ng-deep .cps-treetable-nonvirtual.cps-treetable-flex .p-treetable-flex-scrollable .p-treetable-scrollable-wrapper .p-treetable-scrollable-view .p-treetable-scrollable-header{display:contents}:host ::ng-deep .p-treetable .p-treetable-scrollable-header,:host ::ng-deep .p-treetable .p-treetable-scrollable-footer{background:#fff}:host ::ng-deep .p-treetable-scrollable-header,:host ::ng-deep .p-treetable-scrollable-footer{overflow:hidden}:host ::ng-deep .p-treetable table{border-collapse:collapse;width:100%;table-layout:fixed}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 1px;font-weight:400;color:var(--cps-color-text-mild);background:#fff;transition:box-shadow .2s;overflow:hidden}:host ::ng-deep .p-treetable-scrollable-body{overflow:auto!important;position:relative}:host ::ng-deep .cps-treetable-flex .p-treetable-scrollable-body{height:100%}:host ::ng-deep .p-treetable .p-treetable-tbody{background:#fff}:host ::ng-deep .p-treetable .p-treetable-tbody>tr{background:#fff;color:var(--cps-color-text-dark);transition:box-shadow .2s}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.cps-treetable-row-selected{background-color:var(--cps-color-highlight-active)!important}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td{text-align:left;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem}:host ::ng-deep p-treetable:not(.cps-treetable-autolayout-calced) .p-treetable .p-treetable-tbody>tr>td{overflow:hidden}:host ::ng-deep .cps-treetable-autolayout-calced .p-treetable .p-treetable-scrollable-body .p-treetable-tbody>tr>td:not(.cps-treetable-row-toggler-cell):not(.cps-treetable-selectable-cell):not(.cps-treetable-row-menu-cell):not(.cps-treetable-empty-message-td){opacity:0;border-left-color:#fff}:host ::ng-deep .cps-treetable-autolayout-calced .p-treetable.p-treetable-striped .p-treetable-scrollable-body .p-treetable-tbody>tr:nth-child(odd)>td:not(.cps-treetable-row-toggler-cell):not(.cps-treetable-selectable-cell):not(.cps-treetable-row-menu-cell):not(.cps-treetable-empty-message-td){border-left-color:var(--cps-color-bg-light)}:host ::ng-deep .cps-treetable-autolayout-calced .p-treetable .p-treetable-scrollable-body .p-treetable-tbody>tr:hover>td:not(.cps-treetable-row-toggler-cell):not(.cps-treetable-selectable-cell):not(.cps-treetable-row-menu-cell):not(.cps-treetable-empty-message-td){border-left-color:var(--cps-color-highlight-hover)}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:first-child{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 0}:host ::ng-deep .p-treetable-auto-layout table{table-layout:auto}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler{width:1rem;height:1rem;color:var(--cps-color-text-dark);border:0 none;background:transparent;border-radius:50%;margin-right:.5rem}:host ::ng-deep .p-treetable-toggler{cursor:pointer;-webkit-user-select:none;user-select:none;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;overflow:hidden;position:relative}:host ::ng-deep .p-ripple{overflow:hidden;position:relative}:host ::ng-deep .p-link:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:14px;font-family:Source Sans Pro,sans-serif;border-radius:6px}:host ::ng-deep input[type=button],:host ::ng-deep input[type=submit],:host ::ng-deep input[type=reset],:host ::ng-deep input[type=file]::-webkit-file-upload-button,:host ::ng-deep button{border-radius:0}:host ::ng-deep .p-treetable .p-treetable-tbody>tr:focus{outline:0 none;outline-offset:-.15rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:enabled:hover{color:var(--cps-color-calm);border-color:transparent;background:unset}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler:focus{outline:0 none;outline-offset:0;box-shadow:unset}:host ::ng-deep .p-treetable .p-paginator{border-width:0 1px 1px 1px;border-radius:0}:host ::ng-deep .p-paginator{background:#fff;display:flex;align-items:center;justify-content:center;flex-wrap:wrap;color:var(--cps-color-text-dark);padding:1rem;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-paginator-left-content{margin-right:auto}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page{display:inline-flex;align-items:center}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-table-paginator-items-per-page-title{font-family:Source Sans Pro,sans-serif;font-size:14px;margin-right:12px;cursor:default}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box{min-height:32px!important;background:transparent!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-items{font-size:14px!important}:host ::ng-deep .p-paginator-left-content .cps-table-paginator-itms-per-page .cps-select-box .cps-select-box-chevron .cps-icon{width:14px;height:14px}:host ::ng-deep .p-paginator .p-paginator-current{background-color:transparent;border:0 none;color:var(--cps-color-text-dark);min-width:3rem;margin:.143rem;padding:0 .5rem;font-family:Source Sans Pro,sans-serif;font-size:14px;height:unset}:host ::ng-deep .p-paginator-page,:host ::ng-deep .p-paginator-next,:host ::ng-deep .p-paginator-last,:host ::ng-deep .p-paginator-first,:host ::ng-deep .p-paginator-prev,:host ::ng-deep .p-paginator-current{cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1;-webkit-user-select:none;user-select:none;overflow:hidden;position:relative}:host ::ng-deep .p-paginator-current{cursor:default}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):hover,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-first:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-prev:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-next:not(.p-disabled):not(.p-highlight):active,:host ::ng-deep .p-paginator .p-paginator-last:not(.p-disabled):not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-first,:host ::ng-deep .p-paginator .p-paginator-prev,:host ::ng-deep .p-paginator .p-paginator-next,:host ::ng-deep .p-paginator .p-paginator-last{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-disabled,:host ::ng-deep .p-disabled *{cursor:default!important;pointer-events:none}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page.p-highlight{background:var(--cps-color-calm);border-color:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):hover{background:var(--cps-color-highlight-hover);border-color:unset}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page:not(.p-highlight):active{background:var(--cps-color-highlight-active)}:host ::ng-deep .p-paginator .p-paginator-pages .p-paginator-page{background-color:transparent;border:1px solid var(--cps-color-text-dark);border-radius:4px;color:var(--cps-color-text-dark);min-width:32px;height:32px;margin:.143rem;transition:box-shadow .2s}:host ::ng-deep .p-paginator-element:focus{z-index:1;position:relative}:host ::ng-deep span.p-paginator-icon{display:contents}:host ::ng-deep .p-disabled,:host ::ng-deep .p-component:disabled{opacity:.4}:host ::ng-deep .cps-treetable-empty-message-td{text-align:center!important;font-weight:600;background:#fff}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-header{border-width:1px 1px 0 1px}:host ::ng-deep .p-treetable .p-treetable-header{font-weight:600;display:flex;justify-content:space-between;align-items:center;padding:0 10px;border:unset;background:unset;border-top:1px solid var(--cps-color-line-mid);border-right:1px solid var(--cps-color-line-mid);border-left:4px solid var(--cps-color-surprise)!important;border-radius:4px 4px 0 0;font-size:16px;line-height:150%;background-color:#fff;color:var(--cps-color-text-darkest);overflow:auto}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-global-filter{margin-left:12px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-icon{display:flex;margin-right:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-left .cps-treetable-tbar-title{cursor:default}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right{display:flex;align-items:center}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-btn-on-select{margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-action-btn{margin-right:4px;margin-left:8px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn{display:contents}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn cps-icon{margin-left:12px;margin-right:4px}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon{cursor:pointer}:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-coltoggle-btn:not(.btn-disabled) cps-icon:hover .cps-icon,:host ::ng-deep .p-treetable .p-treetable-header .cps-treetable-tbar-right .cps-treetable-tbar-reload-btn:not(.btn-disabled) cps-icon:hover .cps-icon{color:var(--cps-color-prepared)!important}:host ::ng-deep .cps-tbar-small.p-treetable .p-treetable-header{height:43px}:host ::ng-deep .cps-tbar-normal.p-treetable .p-treetable-header{height:72px}:host ::ng-deep .p-treetable .p-treetable-footer{background:#fff;color:#343a40;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;padding:1rem;font-weight:700}:host ::ng-deep .p-treetable .p-treetable-tfoot>tr>td{text-align:left;padding:1rem;border:1px solid var(--cps-color-line-mid);border-width:0 0 1px 0;font-weight:700;color:#343a40;background:#fff}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-up{border-bottom-color:var(--cps-color-text-mild)}:host ::ng-deep .p-treetable .p-sortable-column:not(.p-highlight):hover .cps-sortable-column-icon.sort-unsorted .sort-unsorted-arrow-down{border-top-color:var(--cps-color-text-mild)}:host ::ng-deep .p-icon-wrapper{display:inline-flex}:host ::ng-deep .p-icon{display:inline-block;width:1rem;height:1rem}:host ::ng-deep .p-treetable .p-sortable-column .cps-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center;font-size:12px;vertical-align:top;color:var(--cps-color-calm);margin-left:.25rem}:host ::ng-deep .p-link{text-align:left;background-color:transparent;margin:0;padding:0;border:none;cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column{cursor:pointer;-webkit-user-select:none;user-select:none}:host ::ng-deep .p-treetable .p-sortable-column:focus{box-shadow:none;outline:0 none}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td .p-treetable-toggler.p-icon{width:2rem;height:2rem}:host ::ng-deep .p-treetable .p-treetable-tbody>tr.p-highlight{background:#eff6ff;color:#1d4ed8}:host ::ng-deep .p-treetable.p-treetable-hoverable-rows .p-treetable-tbody>tr:not(.p-highlight):hover{background:var(--cps-color-highlight-hover)}:host ::ng-deep .p-treetable-hoverable-rows .p-treetable-tbody>tr{cursor:auto}:host ::ng-deep .p-treetable .p-column-resizer-helper{background:#3b82f6}:host ::ng-deep .p-treetable .p-treetable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:1001;top:0;left:0;width:100%;height:100%;background-color:#fff;transition-duration:.2s;border:1px solid var(--cps-color-line-mid)}:host ::ng-deep .p-treetable.cps-tbar-small .p-treetable-loading-overlay{top:43px;height:calc(100% - 43px)}:host ::ng-deep .p-treetable.cps-tbar-normal .p-treetable-loading-overlay{top:72px;height:calc(100% - 72px)}:host ::ng-deep .cps-treetable-loading .p-treetable{min-height:200px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-normal{min-height:272px}:host ::ng-deep .cps-treetable-loading .p-treetable.cps-tbar-small{min-height:243px}:host ::ng-deep .cps-table-col-filter-menu-open .cps-table-col-filter-menu-button{color:var(--cps-color-text-dark)}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-footer{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-top{border-width:0 1px 0 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-bottom{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th{border-width:1px 0 1px 1px}:host ::ng-deep .p-treetable .p-treetable-thead>tr>th:last-child{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td{border-width:0 0 1px 1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tfoot>tr>td{border-width:1px}:host ::ng-deep .p-treetable.p-treetable-gridlines .p-treetable-tbody>tr>td:last-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td:only-child{border-width:0 1px 1px 1px}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-thead>tr>th{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tbody>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-tfoot>tr>td{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-sm .p-treetable-footer{padding:.5rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-thead>tr>th{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tbody>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-tfoot>tr>td{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-lg .p-treetable-footer{padding:1.25rem}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(odd){background:var(--cps-color-bg-light)}:host ::ng-deep .p-treetable.p-treetable-striped .p-treetable-tbody>tr:nth-child(2n){background:#fff}:host ::ng-deep .cps-treetable-row-menu-cell{width:55px;border-left:none!important}:host ::ng-deep .cps-treetable-selectable-cell{width:55px;text-align:center!important}:host ::ng-deep .p-checkbox{display:inline-flex;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:bottom;position:relative;width:18px;height:18px}:host ::ng-deep .p-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}:host ::ng-deep .p-hidden-accessible input,:host ::ng-deep .p-hidden-accessible select{transform:scale(0)}:host ::ng-deep .p-checkbox .p-checkbox-box{background:#fff;width:18px;height:18px;color:var(--cps-color-text-dark);border:2px solid var(--cps-color-text-mild);border-radius:2px;transition:background-color .2s,color .2s,border-color .2s,box-shadow .2s}:host ::ng-deep .p-checkbox-box{display:flex;justify-content:center;align-items:center}:host ::ng-deep .p-checkbox .p-checkbox-box.p-highlight{border-color:var(--cps-color-calm);background:var(--cps-color-calm)}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box.p-highlight:hover{border-color:var(--cps-color-calm);background:var(--cps-color-calm);color:#fff}:host ::ng-deep .p-checkbox:not(.p-checkbox-disabled) .p-checkbox-box:hover{border-color:var(--cps-color-calm)}:host ::ng-deep .p-checkbox .p-checkbox-box .p-icon{width:14px;height:14px}:host ::ng-deep .p-checkbox .p-checkbox-box .p-checkbox-icon{transition-duration:.2s;color:#fff;font-size:14px}:host ::ng-deep .p-checkbox .p-checkbox-box minusicon .p-checkbox-icon{color:var(--cps-color-calm);width:12px}:host ::ng-deep .p-treetable .p-treetable-tbody>tr>td p-treetablecheckbox .p-checkbox{margin-right:0}::ng-deep .p-scrollbar-measure{width:100px;height:100px;overflow:scroll;position:absolute;top:-9999px}.cps-treetable-coltoggle-menu{display:block;max-height:242px;overflow-x:hidden;background:#fff}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item{padding:12px;justify-content:space-between;display:flex;cursor:pointer}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item:hover{background:var(--cps-color-highlight-hover)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-text-dark)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-left{display:flex;align-items:center;margin-right:8px}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check{background-color:transparent;border:0;width:16px;height:16px;cursor:pointer;display:inline-block;vertical-align:middle;box-sizing:border-box;position:relative;flex-shrink:0;transition:border-color 90ms cubic-bezier(0,0,.2,.1),background-color 90ms cubic-bezier(0,0,.2,.1);margin-right:8px;opacity:0}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item-check:after{color:var(--cps-color-calm);top:4px;left:1px;width:8px;height:3px;border-left:2px solid currentColor;transform:rotate(-45deg);opacity:1;box-sizing:content-box;position:absolute;content:\"\";border-bottom:2px solid currentColor;transition:opacity 90ms cubic-bezier(0,0,.2,.1)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected{font-weight:600}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-label,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-label{color:var(--cps-color-calm)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected .cps-treetable-coltoggle-menu-item-check,.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.allselected .cps-treetable-coltoggle-menu-item-check{opacity:1}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected{background:var(--cps-color-highlight-selected)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.highlighten{background:var(--cps-color-highlight-active)}.cps-treetable-coltoggle-menu .cps-treetable-coltoggle-menu-item.selected.highlighten{background:var(--cps-color-highlight-selected-dark)}.cps-treetable-coltoggle-menu .select-all-option{border-bottom:1px solid lightgrey;font-weight:600}::ng-deep .cps-select-options-menu.cps-paginator-page-options .cps-select-options-option{font-size:14px}\n"] }]
1022
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.NgZone }], propDecorators: { columns: [{
1023
+ type: Input
1024
+ }], colHeaderName: [{
1025
+ type: Input
1026
+ }], colFieldName: [{
1027
+ type: Input
1028
+ }], minWidth: [{
1029
+ type: Input
1030
+ }], minWidthForBodyOnly: [{
1031
+ type: Input
1032
+ }], autoLayout: [{
1033
+ type: Input
1034
+ }], striped: [{
1035
+ type: Input
1036
+ }], bordered: [{
1037
+ type: Input
1038
+ }], size: [{
1039
+ type: Input
1040
+ }], selectable: [{
1041
+ type: Input
1042
+ }], rowHover: [{
1043
+ type: Input
1044
+ }], showRowMenu: [{
1045
+ type: Input
1046
+ }], showRowRemoveButton: [{
1047
+ type: Input
1048
+ }], showRowEditButton: [{
1049
+ type: Input
1050
+ }], loading: [{
1051
+ type: Input
1052
+ }], tableStyle: [{
1053
+ type: Input
1054
+ }], tableStyleClass: [{
1055
+ type: Input
1056
+ }], sortable: [{
1057
+ type: Input
1058
+ }], sortMode: [{
1059
+ type: Input
1060
+ }], customSort: [{
1061
+ type: Input
1062
+ }], hasToolbar: [{
1063
+ type: Input
1064
+ }], toolbarSize: [{
1065
+ type: Input
1066
+ }], toolbarTitle: [{
1067
+ type: Input
1068
+ }], toolbarIcon: [{
1069
+ type: Input
1070
+ }], toolbarIconColor: [{
1071
+ type: Input
1072
+ }], scrollable: [{
1073
+ type: Input
1074
+ }], scrollHeight: [{
1075
+ type: Input
1076
+ }], virtualScroll: [{
1077
+ type: Input
1078
+ }], virtualScrollItemHeight: [{
1079
+ type: Input
1080
+ }], numToleratedItems: [{
1081
+ type: Input
1082
+ }], paginator: [{
1083
+ type: Input
1084
+ }], alwaysShowPaginator: [{
1085
+ type: Input
1086
+ }], rowsPerPageOptions: [{
1087
+ type: Input
1088
+ }], first: [{
1089
+ type: Input
1090
+ }], rows: [{
1091
+ type: Input
1092
+ }], resetPageOnRowsChange: [{
1093
+ type: Input
1094
+ }], resetPageOnSort: [{
1095
+ type: Input
1096
+ }], totalRecords: [{
1097
+ type: Input
1098
+ }], emptyMessage: [{
1099
+ type: Input
1100
+ }], emptyBodyHeight: [{
1101
+ type: Input
1102
+ }], lazy: [{
1103
+ type: Input
1104
+ }], lazyLoadOnInit: [{
1105
+ type: Input
1106
+ }], showGlobalFilter: [{
1107
+ type: Input
1108
+ }], globalFilterPlaceholder: [{
1109
+ type: Input
1110
+ }], globalFilterFields: [{
1111
+ type: Input
1112
+ }], clearGlobalFilterOnLoading: [{
1113
+ type: Input
1114
+ }], showRemoveBtnOnSelect: [{
1115
+ type: Input
1116
+ }], removeBtnOnSelectDisabled: [{
1117
+ type: Input
1118
+ }], showAdditionalBtnOnSelect: [{
1119
+ type: Input
1120
+ }], additionalBtnOnSelectTitle: [{
1121
+ type: Input
1122
+ }], additionalBtnOnSelectDisabled: [{
1123
+ type: Input
1124
+ }], showActionBtn: [{
1125
+ type: Input
1126
+ }], actionBtnTitle: [{
1127
+ type: Input
1128
+ }], actionBtnDisabled: [{
1129
+ type: Input
1130
+ }], showDataReloadBtn: [{
1131
+ type: Input
1132
+ }], dataReloadBtnDisabled: [{
1133
+ type: Input
1134
+ }], showColumnsToggleBtn: [{
1135
+ type: Input
1136
+ }], columnsToggleBtnDisabled: [{
1137
+ type: Input
1138
+ }], initialColumns: [{
1139
+ type: Input
1140
+ }], data: [{
1141
+ type: Input
1142
+ }], rowsSelected: [{
1143
+ type: Output
1144
+ }], actionBtnClicked: [{
1145
+ type: Output
1146
+ }], additionalBtnOnSelectClicked: [{
1147
+ type: Output
1148
+ }], editRowBtnClicked: [{
1149
+ type: Output
1150
+ }], rowsToRemove: [{
1151
+ type: Output
1152
+ }], pageChanged: [{
1153
+ type: Output
1154
+ }], sorted: [{
1155
+ type: Output
1156
+ }], filtered: [{
1157
+ type: Output
1158
+ }], columnsSelected: [{
1159
+ type: Output
1160
+ }], lazyLoaded: [{
1161
+ type: Output
1162
+ }], dataReloadBtnClicked: [{
1163
+ type: Output
1164
+ }], nodeExpanded: [{
1165
+ type: Output
1166
+ }], nodeCollapsed: [{
1167
+ type: Output
1168
+ }], nodeSelected: [{
1169
+ type: Output
1170
+ }], nodeUnselected: [{
1171
+ type: Output
1172
+ }], customSortFunction: [{
1173
+ type: Output
1174
+ }], toolbarTemplate: [{
1175
+ type: ContentChild,
1176
+ args: ['toolbar', { static: false }]
1177
+ }], headerTemplate: [{
1178
+ type: ContentChild,
1179
+ args: ['header', { static: false }]
1180
+ }], nestedHeaderTemplate: [{
1181
+ type: ContentChild,
1182
+ args: ['nestedHeader', { static: false }]
1183
+ }], bodyTemplate: [{
1184
+ type: ContentChild,
1185
+ args: ['body', { static: false }]
1186
+ }], primengTreeTable: [{
1187
+ type: ViewChild,
1188
+ args: ['primengTreeTable', { static: true }]
1189
+ }], globalFilterComp: [{
1190
+ type: ViewChild,
1191
+ args: ['globalFilterComp']
1192
+ }], colToggleMenu: [{
1193
+ type: ViewChild,
1194
+ args: ['colToggleMenu']
1195
+ }] } });
1196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvY3BzLXRyZWUtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBS0wsTUFBTSxFQUVOLG1CQUFtQixFQUduQixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsU0FBUyxFQUNULGdCQUFnQixFQUNoQixlQUFlLEVBQ2hCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8s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O3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSXhDLFlBQVk7c0JBRGxCLFlBQVk7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJdkMsZ0JBQWdCO3NCQURmLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUkvQyxnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBSTdCLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJTdHlsZUZsYWdzMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIFRyZWVUYWJsZSxcbiAgVHJlZVRhYmxlU2VydmljZSxcbiAgVHJlZVRhYmxlTW9kdWxlXG59IGZyb20gJ3ByaW1lbmcvdHJlZXRhYmxlJztcbmltcG9ydCB7IERvbUhhbmRsZXIgfSBmcm9tICdwcmltZW5nL2RvbSc7XG5pbXBvcnQgeyBBbmdsZURvdWJsZUxlZnRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZWRvdWJsZWxlZnQnO1xuaW1wb3J0IHsgQW5nbGVMZWZ0SWNvbiB9IGZyb20gJ3ByaW1lbmcvaWNvbnMvYW5nbGVsZWZ0JztcbmltcG9ydCB7IEFuZ2xlUmlnaHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZXJpZ2h0JztcbmltcG9ydCB7IEFuZ2xlRG91YmxlUmlnaHRJY29uIH0gZnJvbSAncHJpbWVuZy9pY29ucy9hbmdsZWRvdWJsZXJpZ2h0JztcbmltcG9ydCB7IFNvcnRFdmVudCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBDcHNJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1pbnB1dC9jcHMtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENwc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1idXR0b24vY3BzLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzTWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1tZW51L2Nwcy1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWljb24vY3BzLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IENwc1NlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uL2Nwcy1zZWxlY3QvY3BzLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3BzTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLWxvYWRlci9jcHMtbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcHNUcmVlVGFibGVDb2x1bW5Tb3J0YWJsZURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jcHMtdHJlZS10YWJsZS1jb2x1bW4tc29ydGFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRyZWVUYWJsZVVuc29ydERpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9pbnRlcm5hbC90cmVlLXRhYmxlLXVuc29ydC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGFibGVSb3dNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vY3BzLXRhYmxlL2NvbXBvbmVudHMvaW50ZXJuYWwvdGFibGUtcm93LW1lbnUvdGFibGUtcm93LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7IGNvbnZlcnRTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW50ZXJuYWwvc2l6ZS11dGlscyc7XG5pbXBvcnQgeyBDcHNUcmVlVGFibGVIZWFkZXJTZWxlY3RhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLWhlYWRlci1zZWxlY3RhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDcHNUcmVlVGFibGVSb3dTZWxlY3RhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLXJvdy1zZWxlY3RhYmxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDcHNUcmVldGFibGVSb3dUb2dnbGVyRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Nwcy10cmVlLXRhYmxlLXJvdy10b2dnbGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJlZVRhYmxlRmFjdG9yeSh0YWJsZUNvbXBvbmVudDogQ3BzVHJlZVRhYmxlQ29tcG9uZW50KSB7XG4gIHJldHVybiB0YWJsZUNvbXBvbmVudC5wcmltZW5nVHJlZVRhYmxlO1xufVxuXG5leHBvcnQgdHlwZSBDcHNUcmVlVGFibGVTaXplID0gJ3NtYWxsJyB8ICdub3JtYWwnIHwgJ2xhcmdlJztcbmV4cG9ydCB0eXBlIENwc1RyZWVUYWJsZVRvb2xiYXJTaXplID0gJ3NtYWxsJyB8ICdub3JtYWwnO1xuZXhwb3J0IHR5cGUgQ3BzVHJlZVRhYmxlU29ydE1vZGUgPSAnc2luZ2xlJyB8ICdtdWx0aXBsZSc7XG5cbi8qKlxuICogQ3BzVHJlZVRhYmxlQ29tcG9uZW50IGlzIHVzZWQgdG8gZGlzcGxheSBoaWVyYXJjaGljYWwgZGF0YSBpbiB0YWJ1bGFyIGZvcm1hdC5cbiAqIEBncm91cCBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Nwcy10cmVlLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgVHJlZVRhYmxlTW9kdWxlLFxuICAgIENwc0lucHV0Q29tcG9uZW50LFxuICAgIENwc0J1dHRvbkNvbXBvbmVudCxcbiAgICBDcHNNZW51Q29tcG9uZW50LFxuICAgIENwc0ljb25Db21wb25lbnQsXG4gICAgQ3BzU2VsZWN0Q29tcG9uZW50LFxuICAgIENwc0xvYWRlckNvbXBvbmVudCxcbiAgICBBbmdsZURvdWJsZUxlZnRJY29uLFxuICAgIEFuZ2xlTGVmdEljb24sXG4gICAgQW5nbGVSaWdodEljb24sXG4gICAgQW5nbGVEb3VibGVSaWdodEljb24sXG4gICAgQ3BzVHJlZVRhYmxlQ29sdW1uU29ydGFibGVEaXJlY3RpdmUsXG4gICAgQ3BzVHJlZVRhYmxlSGVhZGVyU2VsZWN0YWJsZURpcmVjdGl2ZSxcbiAgICBDcHNUcmVlVGFibGVSb3dTZWxlY3RhYmxlRGlyZWN0aXZlLFxuICAgIENwc1RyZWV0YWJsZVJvd1RvZ2dsZXJEaXJlY3RpdmUsXG4gICAgVHJlZVRhYmxlVW5zb3J0RGlyZWN0aXZlLFxuICAgIFRhYmxlUm93TWVudUNvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY3BzLXRyZWUtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcHMtdHJlZS10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBUcmVlVGFibGVTZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRyZWVUYWJsZSxcbiAgICAgIHVzZUZhY3Rvcnk6IHRyZWVUYWJsZUZhY3RvcnksXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIGRlcHM6IFtDcHNUcmVlVGFibGVDb21wb25lbnRdXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENwc1RyZWVUYWJsZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXNcbntcbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIG9iamVjdHMgdG8gcmVwcmVzZW50IGR5bmFtaWMgY29sdW1ucy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBjb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9W10gPSBbXTtcblxuICAvKipcbiAgICogQSBrZXkgdXNlZCB0byByZXRyaWV2ZSB0aGUgaGVhZGVyIGZyb20gY29sdW1ucy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBjb2xIZWFkZXJOYW1lID0gJ2hlYWRlcic7XG5cbiAgLyoqXG4gICAqIEEga2V5IHVzZWQgdG8gcmV0cmlldmUgdGhlIGZpZWxkIGZyb20gY29sdW1ucy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBjb2xGaWVsZE5hbWUgPSAnZmllbGQnO1xuXG4gIC8qKlxuICAgKiBUcmVldGFibGUgbWluIHdpZHRoIG9mIHR5cGUgbnVtYmVyIGRlbm90aW5nIHBpeGVscyBvciBzdHJpbmcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgbWluV2lkdGg6IG51bWJlciB8IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgbWluV2lkdGggcHJvcCBpcyB1c2VkIGZvciB0cmVldGFibGUgYm9keSBvbmx5LCBleGNsdWRpbmcgdG9vbGJhciBhbmQgcGFnaW5hdG9yLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIG1pbldpZHRoRm9yQm9keU9ubHkgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNlbGwgd2lkdGhzIHNjYWxlIGFjY29yZGluZyB0byB0aGVpciBjb250ZW50IG9yIG5vdC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBhdXRvTGF5b3V0ID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0cmVldGFibGUgc2hvdWxkIGhhdmUgYWx0ZXJuYXRpbmcgc3RyaXBlcy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzdHJpcGVkID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSB0cmVldGFibGUgc2hvdWxkIGhhdmUgYm9yZGVycy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBib3JkZXJlZCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNpemUgb2YgdHJlZXRhYmxlIGNlbGxzLCBpdCBjYW4gYmUgXCJzbWFsbFwiLCBcIm5vcm1hbFwiIG9yIFwibGFyZ2VcIi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaXplOiBDcHNUcmVlVGFibGVTaXplID0gJ25vcm1hbCc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdHJlZXRhYmxlIHNob3VsZCBoYXZlIHJvdyBzZWxlY3Rpb24uXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0YWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRyZWV0YWJsZSBzaG91bGQgaGF2ZSByb3dzIGhpZ2hsaWdodGluZyBvbiBob3Zlci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSByb3dIb3ZlciA9IHRydWU7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdHJlZXRhYmxlIHNob3VsZCBzaG93IHJvdyBtZW51cy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93Um93TWVudSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlICdSZW1vdmUnIGJ1dHRvbiBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRoZSByb3cgbWVudS5cbiAgICogTm90ZTogVGhpcyBzZXR0aW5nIG9ubHkgdGFrZXMgZWZmZWN0IGlmICdzaG93Um93TWVudScgaXMgdHJ1ZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93Um93UmVtb3ZlQnV0dG9uID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSAnRWRpdCcgYnV0dG9uIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHJvdyBtZW51LlxuICAgKiBOb3RlOiBUaGlzIHNldHRpbmcgb25seSB0YWtlcyBlZmZlY3QgaWYgJ3Nob3dSb3dNZW51JyBpcyB0cnVlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dSb3dFZGl0QnV0dG9uID0gdHJ1ZTtcblxuICAvKipcbiAgICogV2hlbiBlbmFibGVkLCBhIGxvYWRlciBjb21wb25lbnQgaXMgZGlzcGxheWVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcblxuICAvKipcbiAgICogSW5saW5lIHN0eWxlIG9mIHRoZSB0cmVldGFibGUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgdGFibGVTdHlsZSA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogU3R5bGUgY2xhc3Mgb2YgdGhlIHRyZWV0YWJsZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB0YWJsZVN0eWxlQ2xhc3MgPSAnJztcblxuICAvKipcbiAgICogTWFrZXMgYWxsIGNvbHVtbnMgc29ydGFibGUgaWYgY29sdW1ucyBwcm9wIGlzIHByb3ZpZGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNvcnRhYmxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBzb3J0aW5nIHdvcmtzIG9uIHNpbmdsZSBjb2x1bW4gb3Igb24gbXVsdGlwbGUgY29sdW1ucy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzb3J0TW9kZTogQ3BzVHJlZVRhYmxlU29ydE1vZGUgPSAnc2luZ2xlJztcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgZGVmYXVsdCBzb3J0aW5nIG9yIGEgY3VzdG9tIG9uZSB1c2luZyBzb3J0RnVuY3Rpb24uXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgY3VzdG9tU29ydCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRyZWV0YWJsZSBoYXMgYSB0b29sYmFyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGhhc1Rvb2xiYXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUb29sYmFyIHNpemUsIGl0IGNhbiBiZSBcInNtYWxsXCIgb3IgXCJub3JtYWxcIi5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB0b29sYmFyU2l6ZTogQ3BzVHJlZVRhYmxlVG9vbGJhclNpemUgPSAnbm9ybWFsJztcblxuICAvKipcbiAgICogVG9vbGJhciB0aXRsZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB0b29sYmFyVGl0bGUgPSAnJztcblxuICAvKipcbiAgICogVG9vbGJhciBpY29uIG5hbWUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgdG9vbGJhckljb24gPSAnJztcblxuICAvKipcbiAgICogVG9vbGJhciBpY29uIGNvbG9yLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHRvb2xiYXJJY29uQ29sb3IgPSAnJztcblxuICAvKipcbiAgICogTWFrZXMgdHJlZXRhYmxlIHNjcm9sbGFibGUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2Nyb2xsYWJsZSA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEhlaWdodCBvZiB0aGUgc2Nyb2xsIHZpZXdwb3J0IGluIGZpeGVkIHBpeGVscyBvciB0aGUgXCJmbGV4XCIga2V5d29yZCBmb3IgYSBkeW5hbWljIHNpemUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2Nyb2xsSGVpZ2h0ID0gJyc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBvbmx5IHRoZSBlbGVtZW50cyB3aXRoaW4gc2Nyb2xsYWJsZSBhcmVhIHNob3VsZCBiZSBhZGRlZCBpbnRvIHRoZSBET00uIFdvcmtzIG9ubHkgaWYgc2Nyb2xsYWJsZSBwcm9wIGlzIHRydWUuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgdmlydHVhbFNjcm9sbCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIZWlnaHQgb2YgYSB2aXJ0dWFsIHNjcm9sbCBpdGVtIGluIGZpeGVkIHBpeGVscy5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSB2aXJ0dWFsU2Nyb2xsSXRlbUhlaWdodCA9IDA7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaG93IG1hbnkgYWRkaXRpb25hbCBlbGVtZW50cyB0byBhZGQgdG8gdGhlIERPTSBvdXRzaWRlIG9mIHRoZSB2aWV3LlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIG51bVRvbGVyYXRlZEl0ZW1zID0gMTA7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdHJlZXRhYmxlIHNob3VsZCBoYXZlIHBhZ2luYXRvci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBwYWdpbmF0b3IgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgcGFnaW5hdG9yIGV2ZW4gdGhlcmUgaXMgb25seSBvbmUgcGFnZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBhbHdheXNTaG93UGFnaW5hdG9yID0gdHJ1ZTtcblxuICAvKipcbiAgICogQXJyYXkgb2YgaW50ZWdlciB2YWx1ZXMgdG8gZGlzcGxheSBpbnNpZGUgcm93cyBwZXIgcGFnZSBkcm9wZG93biBvZiBwYWdpbmF0b3IuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcm93c1BlclBhZ2VPcHRpb25zOiBudW1iZXJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBJbmRleCBvZiB0aGUgZmlyc3Qgcm93IHRvIGJlIGRpc3BsYXllZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBmaXJzdCA9IDA7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgcGVyIHBhZ2UuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcm93cyA9IDA7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byByZXNldCBwYWdlIG9uIHJvd3MgY2hhbmdlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHJlc2V0UGFnZU9uUm93c0NoYW5nZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmVzZXQgcGFnZSBvbiB0cmVldGFibGUgZGF0YSBzb3J0aW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHJlc2V0UGFnZU9uU29ydCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiB0b3RhbCByZWNvcmRzLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyA9IDA7XG5cbiAgLyoqXG4gICAqIFRleHQgdG8gZGlzcGxheSB3aGVuIHRoZXJlIGlzIG5vIGRhdGEuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZW1wdHlNZXNzYWdlID0gJ05vIGRhdGEnO1xuXG4gIC8qKlxuICAgKiBIZWlnaHQgb2YgdHJlZXRhYmxlJ3MgYm9keSB3aGVuIHRoZXJlIGlzIG5vIGRhdGEsIG9mIHR5cGUgbnVtYmVyIGRlbm90aW5nIHBpeGVscyBvciBzdHJpbmcuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZW1wdHlCb2R5SGVpZ2h0OiBudW1iZXIgfCBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogRGVmaW5lcyBpZiBkYXRhIGlzIGxvYWRlZCBhbmQgaW50ZXJhY3RlZCB3aXRoIGluIGxhenkgbWFubmVyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGxhenkgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNhbGwgbGF6eSBsb2FkaW5nIG9uIGluaXRpYWxpemF0aW9uLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGxhenlMb2FkT25Jbml0ID0gdHJ1ZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgZ2xvYmFsIGZpbHRlciBpbiB0aGUgdG9vbGJhci5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93R2xvYmFsRmlsdGVyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEdsb2JhbCBmaWx0ZXIgcGxhY2Vob2xkZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgZ2xvYmFsRmlsdGVyUGxhY2Vob2xkZXIgPSAnU2VhcmNoJztcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgZmllbGRzIHRvIHVzZSBpbiBnbG9iYWwgZmlsdGVyaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGdsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNsZWFyIGdsb2JhbCBmaWx0ZXIgb24gZGF0YSBsb2FkaW5nLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNsZWFyR2xvYmFsRmlsdGVyT25Mb2FkaW5nID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IHJlbW92ZSBidXR0b24gaW4gdGhlIHRvb2xiYXIgd2hlbiByb3dzIGFyZSBzZWxlY3RlZC5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzaG93UmVtb3ZlQnRuT25TZWxlY3QgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcmVtb3ZlQnRuT25TZWxlY3QgaXMgZGlzYWJsZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgcmVtb3ZlQnRuT25TZWxlY3REaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyBhZGRpdGlvbmFsIGJ1dHRvbiBpbiB0aGUgdG9vbGJhciB3aGVuIHJvd3MgYXJlIHNlbGVjdGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dBZGRpdGlvbmFsQnRuT25TZWxlY3QgPSBmYWxzZTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbEJ0bk9uU2VsZWN0IHRpdGxlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxCdG5PblNlbGVjdFRpdGxlID0gJ1NlbGVjdCBhY3Rpb24nO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYWRkaXRpb25hbEJ0bk9uU2VsZWN0IGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxCdG5PblNlbGVjdERpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IGFjdGlvbiBidXR0b24gaW4gdGhlIHRvb2xiYXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd0FjdGlvbkJ0biA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBY3Rpb24gYnV0dG9uIHRpdGxlLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGFjdGlvbkJ0blRpdGxlID0gJ0FjdGlvbic7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBhY3Rpb25CdG4gaXMgZGlzYWJsZWQuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgYWN0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHNob3cgZGF0YSByZWxvYWQgYnV0dG9uIGluIHRoZSB0b29sYmFyLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIHNob3dEYXRhUmVsb2FkQnRuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBkYXRhUmVsb2FkQnRuIGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGRhdGFSZWxvYWRCdG5EaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHRyZWV0YWJsZSBzaG91bGQgc2hvdyBjb2x1bW5zVG9nZ2xlIG1lbnUsIHdoZXJlIHlvdSBjYW4gY2hvb3NlIHdoaWNoIGNvbHVtbnMgdG8gYmUgZGlzcGxheWVkLiBJZiBleHRlcm5hbCBib2R5IHRlbXBsYXRlIGlzIHByb3ZpZGVkLCB1c2UgY29sdW1uc1NlbGVjdGVkIGV2ZW50IGVtaXR0ZXIuXG4gICAqIEBncm91cCBQcm9wc1xuICAgKi9cbiAgQElucHV0KCkgc2hvd0NvbHVtbnNUb2dnbGVCdG4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGNvbHVtbnNUb2dnbGUgYnV0dG9uIGlzIGRpc2FibGVkLlxuICAgKiBAZ3JvdXAgUHJvcHNcbiAgICovXG4gIEBJbnB1dCgpIGNvbHVtbnNUb2dnbGVCdG5EaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBpbml0aWFsIGNvbHVtbnMgdG8gc2hvdyBpbiB0aGUgdHJlZXRhYmxlLiBJZiBub3QgcHJvdmlkZWQsIGFsbCBjb2x1bW5zIGFyZSBpbml0aWFsbHkgdmlzaWJsZS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBpbml0aWFsQ29sdW1uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIG9iamVjdHMgdG8gZGlzcGxheS5cbiAgICogQGdyb3VwIFByb3BzXG4gICAqL1xuICBASW5wdXQoKSBzZXQgZGF0YSh2YWx1ZTogYW55W10pIHtcbiAgICBjb25zdCBjbG9uZSA9IGNsb25lRGVlcCh2YWx1ZSk7XG4gICAgaWYgKGNsb25lICYmIGNsb25lLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGNsb25lLmZvckVhY2goKHY6IGFueSkgPT4ge1xuICAgICAgICB2Ll9kZWZhdWx0U29ydE9yZGVyID0gaSsrO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX2RhdGEgPSBjbG9uZTtcbiAgfVxuXG4gIGdldCBkYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugb24gc2VsZWN0ZWQgcm93cyBjaGFuZ2UuXG4gICAqIEBwYXJhbSB7YW55W119IGFueVtdIC0gc2VsZWN0ZWQgcm93cy5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgcm93c1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgKiBAcGFyYW0ge3ZvaWR9IHZvaWQgLSBhY3Rpb24gYnV0dG9uIGNsaWNrZWQuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGFjdGlvbkJ0bkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGFkZGl0aW9uYWwgYnV0dG9uIG9uIHNlbGVjdCBpcyBjbGlja2VkLlxuICAgKiBAcGFyYW0ge2FueVtdfSBhbnlbXSAtIHNlbGVjdGVkIGRhdGEuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGFkZGl0aW9uYWxCdG5PblNlbGVjdENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBlZGl0LXJvdyBidXR0b24gaXMgY2xpY2tlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIGJ1dHRvbiBjbGlja2VkLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBlZGl0Um93QnRuQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiByb3dzIGFyZSByZW1vdmVkLlxuICAgKiBAcGFyYW0ge2FueVtdfSBhbnlbXSAtIGFycmF5IG9mIHJvd3MgdG8gcmVtb3ZlLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSByb3dzVG9SZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBwYWdlIGlzIGNoYW5nZWQuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBwYWdlIGNoYW5nZWQuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGRhdGEgaXMgc29ydGVkLlxuICAgKiBAcGFyYW0ge2FueX0gYW55IC0gU29ydCBkYXRhLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBzb3J0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZGF0YSBpcyBmaWx0ZXJlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIEN1c3RvbSBmaWx0ZXIgZXZlbnQuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGZpbHRlcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiBzZWxlY3RlZCBjb2x1bW5zLlxuICAgKiBAcGFyYW0ge2FueVtdfSBvYmplY3RbXSAtIHNlbGVjdGlvbiBjaGFuZ2VkLlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBjb2x1bW5zU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgW2tleTogc3RyaW5nXTogYW55IH1bXT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gcGFnaW5nLCBzb3J0aW5nIG9yIGZpbHRlcmluZyBoYXBwZW5zIGluIGxhenkgbW9kZS5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIEN1c3RvbSBsYXp5IGxvYWQgZXZlbnQuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGxhenlMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gZGF0YSByZWxvYWQgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBkYXRhIHJlbG9hZCBidXR0b24gY2xpY2tlZC5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgZGF0YVJlbG9hZEJ0bkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYSBub2RlIGlzIGV4cGFuZGVkLlxuICAgKiBAcGFyYW0ge2FueX0gYW55IC0gTm9kZSBpbnN0YW5jZS5cbiAgICogQGdyb3VwIEVtaXRzXG4gICAqL1xuICBAT3V0cHV0KCkgbm9kZUV4cGFuZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgbm9kZSBpcyBjb2xsYXBzZWQuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBOb2RlIGNvbGxhcHNlIGV2ZW50LlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBub2RlQ29sbGFwc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgbm9kZSBpcyBzZWxlY3RlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIE5vZGUgaW5zdGFuY2UuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIG5vZGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIG5vZGUgaXMgdW5zZWxlY3RlZC5cbiAgICogQHBhcmFtIHthbnl9IGFueSAtIEN1c3RvbSBub2RlIHVuc2VsZWN0IGV2ZW50LlxuICAgKiBAZ3JvdXAgRW1pdHNcbiAgICovXG4gIEBPdXRwdXQoKSBub2RlVW5zZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRvIGltcGxlbWVudCBjdXN0b20gc29ydGluZy4gY3VzdG9tU29ydCBtdXN0IGJlIHRydWUuXG4gICAqIEBwYXJhbSB7YW55fSBhbnkgLSBzb3J0IG1ldGEuXG4gICAqIEBncm91cCBFbWl0c1xuICAgKi9cbiAgQE91dHB1dCgpIGN1c3RvbVNvcnRGdW5jdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAQ29udGVudENoaWxkKCd0b29sYmFyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHB1YmxpYyB0b29sYmFyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgaGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ25lc3RlZEhlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgbmVzdGVkSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBDb250ZW50Q2hpbGQoJ2JvZHknLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcHVibGljIGJvZHlUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgncHJpbWVuZ1RyZWVUYWJsZScsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaW1lbmdUcmVlVGFibGUhOiBUcmVlVGFibGU7XG5cbiAgQFZpZXdDaGlsZCgnZ2xvYmFsRmlsdGVyQ29tcCcpXG4gIGdsb2JhbEZpbHRlckNvbXAhOiBDcHNJbnB1dENvbXBvbmVudDtcblxuICBAVmlld0NoaWxkKCdjb2xUb2dnbGVNZW51JylcbiAgY29sVG9nZ2xlTWVudSE6IENwc01lbnVDb21wb25lbnQ7XG5cbiAgc2VsZWN0ZWRDb2x1bW5zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9W10gPSBbXTtcblxuICByb3dPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfVtdID0gW107XG5cbiAgLy8gVG9kbzogQWRkIGV4cGxpY2l0IHR5cGVcbiAgc2VsZWN0ZWRSb3dzOiBhbnkgPSBbXTtcblxuICB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSAwO1xuICBkZWZTY3JvbGxIZWlnaHQgPSAnJztcblxuICBwcml2YXRlIF9kZWZTY3JvbGxIZWlnaHRQeCA9IDA7XG4gIHByaXZhdGUgX2RlZlNjcm9sbEhlaWdodFB4SW5pdGlhbCA9IDA7XG5cbiAgcHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIF93aW5kb3dSZXNpemVEZWJvdW5jZXI6IGFueTtcbiAgcHJpdmF0ZSBfc2Nyb2xsU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgX2hlYWRlckJveDogYW55O1xuICBwcml2YXRlIF9zY3JvbGxhYmxlQm9keTogYW55O1xuICBwcml2YXRlIF9zY3JvbGxiYXJXaWR0aCA9IDA7XG4gIHByaXZhdGUgX3Njcm9sbGJhclZpc2libGUgPSB0cnVlO1xuXG4gIHByaXZhdGUgX25lZWRSZWNhbGNBdXRvTGF5b3V0ID0gdHJ1ZTtcblxuICBfZGF0YTogYW55W10gPSBbXTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZVxuICApIHtcbiAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gZW50cnkudGFyZ2V0O1xuICAgICAgICB0aGlzLl9zY3JvbGxiYXJWaXNpYmxlID0gYm9keS5zY3JvbGxIZWlnaHQgPiBib2R5LmNsaWVudEhlaWdodDtcblxuICAgICAgICBpZiAodGhpcy5fc2Nyb2xsYmFyVmlzaWJsZSAmJiB0aGlzLnZpcnR1YWxTY3JvbGwpXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbGFibGVCb2R5LFxuICAgICAgICAgICAgJ292ZXJmbG93JyxcbiAgICAgICAgICAgICdhdXRvJyxcbiAgICAgICAgICAgIFJlbmRlcmVyU3R5bGVGbGFnczIuSW1wb3J0YW50XG4gICAgICAgICAgKTtcblxuICAgICAgICBsZXQgd1Njcm9sbCA9IHRoaXMuX3Njcm9sbGJhclZpc2libGUgPyB0aGlzLl9zY3JvbGxiYXJXaWR0aCA6IDA7XG4gICAgICAgIGlmICh3U2Nyb2xsID4gMCkgd1Njcm9sbCAtPSAxO1xuXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgdGhpcy5faGVhZGVyQm94LFxuICAgICAgICAgICdwYWRkaW5nLXJpZ2h0JyxcbiAgICAgICAgICBgJHt3U2Nyb2xsfXB4YFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICAgIHRoaXMuX2hlYWRlckJveCxcbiAgICAgICAgICAnYm9yZGVyLXJpZ2h0JyxcbiAgICAgICAgICB3U2Nyb2xsID4gMCA/ICcxcHggc29saWQgI2Q3ZDVkNScgOiAndW5zZXQnXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2FsY0F1dG9MYXlvdXRIZWFkZXJXaWR0aHMoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNjcm9sbGFibGUpIHRoaXMudmlydHVhbFNjcm9sbCA9IGZhbHNlO1xuICAgIHRoaXMuZW1wdHlCb2R5SGVpZ2h0ID0gY29udmVydFNpemUodGhpcy5lbXB0eUJvZHlIZWlnaHQpO1xuICAgIHRoaXMubWluV2lkdGggPSBjb252ZXJ0U2l6ZSh0aGlzLm1pbldpZHRoKTtcblxuICAgIGlmICh0aGlzLnNob3dBZGRpdGlvbmFsQnRuT25TZWxlY3QpIHRoaXMuc2hvd1JlbW92ZUJ0bk9uU2VsZWN0ID0gZmFsc2U7XG5cbiAgICB0aGlzLmRlZlNjcm9sbEhlaWdodCA9IHRoaXMuc2Nyb2xsSGVpZ2h0O1xuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9vbldpbmRvd1Jlc2l6ZS5iaW5kKHRoaXMpKTtcblxuICAgICAgaWYgKHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ICE9PSAnZmxleCcpIHtcbiAgICAgICAgdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHggPSBwYXJzZUludCh0aGlzLnNjcm9sbEhlaWdodCwgMTApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgaWYgKHRoaXMucm93c1BlclBhZ2VPcHRpb25zLmxlbmd0aCA8IDEpXG4gICAgICAgIHRoaXMucm93c1BlclBhZ2VPcHRpb25zID0gWzUsIDEwLCAyNSwgNTBdO1xuXG4gICAgICBpZiAoIXRoaXMucm93cykgdGhpcy5yb3dzID0gdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF07XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5pbmNsdWRlcyh0aGlzLnJvd3MpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb3dzUGVyUGFnZU9wdGlvbnMgbXVzdCBpbmNsdWRlIHJvd3MnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJvd09wdGlvbnMgPSB0aGlzLnJvd3NQZXJQYWdlT3B0aW9ucy5tYXAoKHYpID0+ICh7XG4gICAgICAgIGxhYmVsOiAnJyArIHYsXG4gICAgICAgIHZhbHVlOiB2XG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5zaG93R2xvYmFsRmlsdGVyICYmXG4gICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcz8ubGVuZ3RoIDwgMSAmJlxuICAgICAgdGhpcy5kYXRhPy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcyA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YVswXS5kYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9XG4gICAgICB0aGlzLmluaXRpYWxDb2x1bW5zLmxlbmd0aCA+IDAgPyB0aGlzLmluaXRpYWxDb2x1bW5zIDogdGhpcy5jb2x1bW5zO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3NldE1pbldpZHRoT3ZlcmFsbCgpO1xuXG4gICAgdGhpcy5fc2Nyb2xsYWJsZUJvZHkgPSB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJy5wLXRyZWV0YWJsZS1zY3JvbGxhYmxlLWJvZHknXG4gICAgKTtcbiAgICBpZiAodGhpcy5fc2Nyb2xsYWJsZUJvZHkpIHtcbiAgICAgIGlmICh0aGlzLm1pbldpZHRoRm9yQm9keU9ubHkgJiYgdGhpcy5taW5XaWR0aCkge1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuX3Njcm9sbGFibGVCb2R5LnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlJyk7XG4gICAgICAgIGlmICh0YWJsZSkgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0YWJsZSwgJ21pbi13aWR0aCcsIHRoaXMubWluV2lkdGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKSB7XG4gICAgICAgICAgdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHggPSB0aGlzLl9zY3JvbGxhYmxlQm9keS5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHhJbml0aWFsID0gdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYXV0b0xheW91dCkge1xuICAgICAgICAgIHRoaXMuX3Njcm9sbFN1YnNjcmlwdGlvbiA9IGZyb21FdmVudChcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbGFibGVCb2R5LFxuICAgICAgICAgICAgJ3Njcm9sbCdcbiAgICAgICAgICApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9oZWFkZXJCb3ggPSB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnAtdHJlZXRhYmxlLXNjcm9sbGFibGUtaGVhZGVyLWJveCdcbiAgICAgICk7XG5cbiAgICAgIGlmICh0aGlzLl9oZWFkZXJCb3gpIHtcbiAgICAgICAgaWYgKHRoaXMubWluV2lkdGhGb3JCb2R5T25seSAmJiB0aGlzLm1pbldpZHRoKSB7XG4gICAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLl9oZWFkZXJCb3gucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICAgICAgICBpZiAodGFibGUpIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGFibGUsICdtaW4td2lkdGgnLCB0aGlzLm1pbldpZHRoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Njcm9sbGJhcldpZHRoID0gRG9tSGFuZGxlci5jYWxjdWxhdGVTY3JvbGxiYXJXaWR0aCgpO1xuICAgICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuX3Njcm9sbGFibGVCb2R5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX25lZWRSZWNhbGNBdXRvTGF5b3V0KSB7XG4gICAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKCk7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICBjb25zdCB0YWJsZVdyYXBwZXIgPVxuICAgICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWw/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgJy5wLXRyZWV0YWJsZS13cmFwcGVyJ1xuICAgICAgICApO1xuICAgICAgaWYgKHRhYmxlV3JhcHBlciAmJiB0aGlzLm1pbldpZHRoRm9yQm9keU9ubHkgJiYgdGhpcy5taW5XaWR0aCkge1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRhYmxlV3JhcHBlci5xdWVyeVNlbGVjdG9yKCd0YWJsZScpO1xuICAgICAgICBpZiAodGFibGUpIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGFibGUsICdtaW4td2lkdGgnLCB0aGlzLm1pbldpZHRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgaWYgKHRoaXMuX25lZWRSZWNhbGNBdXRvTGF5b3V0KSB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocygpO1xuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuX2RlZlNjcm9sbEhlaWdodFB4ICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcpIHtcbiAgICAgIHRoaXMuX2RlZlNjcm9sbEhlaWdodFB4ID0gdGhpcy5fc2Nyb2xsYWJsZUJvZHkuY2xpZW50SGVpZ2h0O1xuICAgICAgdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHhJbml0aWFsID0gdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHg7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICBpZiAodGhpcy5jbGVhckdsb2JhbEZpbHRlck9uTG9hZGluZykgdGhpcy5jbGVhckdsb2JhbEZpbHRlcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGxJdGVtSGVpZ2h0KVxuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtSGVpZ2h0O1xuXG4gICAgdGhpcy5fc2V0TWluV2lkdGhPdmVyYWxsKCk7XG5cbiAgICBjb25zdCBkYXRhQ2hhbmdlcyA9IGNoYW5nZXM/LmRhdGE7XG5cbiAgICBpZiAoZGF0YUNoYW5nZXM/LnByZXZpb3VzVmFsdWUgIT09IGRhdGFDaGFuZ2VzPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgIHRoaXMuX3JlY2FsY1ZpcnR1YWxIZWlnaHQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbCkge1xuICAgICAgaWYgKHRoaXMuYXV0b0xheW91dCkgdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uV2luZG93UmVzaXplLmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKGZvcmNlZCA9IGZhbHNlKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmF1dG9MYXlvdXQgfHwgIXRoaXMuc2Nyb2xsYWJsZSkgcmV0dXJuO1xuXG4gICAgICBpZiAoIXRoaXMuX25lZWRSZWNhbGNBdXRvTGF5b3V0ICYmICFmb3JjZWQpIHJldHVybjtcblxuICAgICAgY29uc3QgaGVhZGVyUm93cyA9IHRoaXMuX2hlYWRlckJveD8ucXVlcnlTZWxlY3RvckFsbCgndHInKTtcbiAgICAgIGlmICghaGVhZGVyUm93cz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGhlYWRlckNlbGxzID1cbiAgICAgICAgaGVhZGVyUm93c1toZWFkZXJSb3dzLmxlbmd0aCAtIDFdPy5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpO1xuICAgICAgaWYgKCFoZWFkZXJDZWxscz8ubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgIGxldCBoYXNTZWxlY3RhYmxlQ2VsbCA9IGZhbHNlO1xuICAgICAgbGV0IGhhc1Jvd01lbnVDZWxsID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHRocyA9IEFycmF5LmZyb20oaGVhZGVyQ2VsbHMpO1xuICAgICAgaWYgKHRocy5ldmVyeSgodGg6IGFueSkgPT4gdGgub2Zmc2V0V2lkdGggPT09IDApKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHRoV2lkdGhzID0gdGhzLm1hcCgodGg6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB3cHJldiA9IHRoLnN0eWxlLndpZHRoO1xuXG4gICAgICAgIGNvbnN0IGlzU2VsZWN0YWJsZUNlbGwgPSB0aC5jbGFzc0xpc3QuY29udGFpbnMoXG4gICAgICAgICAgJ2Nwcy10cmVldGFibGUtc2VsZWN0YWJsZS1jZWxsJ1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGlzUm93Q2VsbCA9IHRoLmNsYXNzTGlzdC5jb250YWlucygnY3BzLXRyZWV0YWJsZS1yb3ctbWVudS1jZWxsJyk7XG5cbiAgICAgICAgaWYgKGlzU2VsZWN0YWJsZUNlbGwpIGhhc1NlbGVjdGFibGVDZWxsID0gdHJ1ZTtcbiAgICAgICAgaWYgKGlzUm93Q2VsbCkgaGFzUm93TWVudUNlbGwgPSB0cnVlO1xuXG4gICAgICAgIGxldCB0aFdpZHRoID0gNTU7XG4gICAgICAgIGlmICghaXNTZWxlY3RhYmxlQ2VsbCAmJiAhaXNSb3dDZWxsKSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aCwgJ3dpZHRoJywgJ21pbi1jb250ZW50Jyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aCwgJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoLCAndGV4dC13cmFwJywgJ25vd3JhcCcpO1xuICAgICAgICAgIHRoV2lkdGggPSB0aC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoLCAnd2lkdGgnLCB3cHJldik7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aCwgJ2Rpc3BsYXknKTtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoLCAndGV4dC13cmFwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoV2lkdGg7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYm9keVJvd3MgPSB0aGlzLl9zY3JvbGxhYmxlQm9keT8ucXVlcnlTZWxlY3RvckFsbCgndHInKTtcbiAgICAgIGlmICghYm9keVJvd3M/Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCB0ZFdpZHRoczogbnVtYmVyW10gPSBbXTtcbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgY29uc3QgaGlkZGVuRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBoaWRkZW5EaXYuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgaGlkZGVuRGl2LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgIGhpZGRlbkRpdi5zdHlsZS53aGl0ZVNwYWNlID0gJ25vd3JhcCc7XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuRGl2KTtcbiAgICAgIGJvZHlSb3dzLmZvckVhY2goKHRyOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCB0ZHMgPSB0cj8ucXVlcnlTZWxlY3RvckFsbCgndGQnKTtcbiAgICAgICAgdGRzPy5mb3JFYWNoKCh0ZDogSFRNTEVsZW1lbnQsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNTZWxlY3RhYmxlT3JSb3dNZW51Q2VsbCA9XG4gICAgICAgICAgICB0ZC5jbGFzc0xpc3QuY29udGFpbnMoJ2Nwcy10cmVldGFibGUtc2VsZWN0YWJsZS1jZWxsJykgfHxcbiAgICAgICAgICAgIHRkLmNsYXNzTGlzdC5jb250YWlucygnY3BzLXRyZWV0YWJsZS1yb3ctbWVudS1jZWxsJyk7XG5cbiAgICAgICAgICBsZXQgdGRXaWR0aCA9IDU1O1xuICAgICAgICAgIGlmICghaXNTZWxlY3RhYmxlT3JSb3dNZW51Q2VsbCkge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVkVGQgPSB0ZC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChjbG9uZWRUZCk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGNsb25lZFRkLCAnd2lkdGgnLCAnbWluLWNvbnRlbnQnKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoY2xvbmVkVGQsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgICAgICBoaWRkZW5EaXYuaW5uZXJIVE1MID0gY2xvbmVkVGQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgaGlkZGVuRGl2LnN0eWxlLndpZHRoID0gJ2F1dG8nO1xuICAgICAgICAgICAgdGRXaWR0aCA9IGhpZGRlbkRpdi5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIGZyYWdtZW50LnJlbW92ZUNoaWxkKGNsb25lZFRkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0ZFdpZHRoc1tpZHhdKSB0ZFdpZHRoc1tpZHhdID0gMDtcbiAgICAgICAgICB0ZFdpZHRoc1tpZHhdID0gTWF0aC5tYXgodGRXaWR0aHNbaWR4XSwgdGRXaWR0aCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGhpZGRlbkRpdik7XG5cbiAgICAgIGlmICh0aFdpZHRocy5sZW5ndGggIT09IHRkV2lkdGhzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBtYXhXaWR0aHMgPSB0aFdpZHRocy5tYXAoKHYsIGlkeCkgPT4gTWF0aC5tYXgodiwgdGRXaWR0aHNbaWR4XSkpO1xuICAgICAgbGV0IHN1bSA9IG1heFdpZHRocy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgICAgIGlmIChoYXNTZWxlY3RhYmxlQ2VsbCkge1xuICAgICAgICBzdW0gLT0gNTU7XG4gICAgICAgIG1heFdpZHRocy5zaGlmdCgpO1xuICAgICAgfVxuICAgICAgaWYgKGhhc1Jvd01lbnVDZWxsKSB7XG4gICAgICAgIHN1bSAtPSA1NTtcbiAgICAgICAgbWF4V2lkdGhzLnBvcCgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwZXJjZW50YWdlcyA9IG1heFdpZHRocy5tYXAoKHYpID0+ICh2IC8gc3VtKSAqIDEwMCk7XG5cbiAgICAgIGhlYWRlckNlbGxzLmZvckVhY2goKHRoOiBhbnksIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoaGFzU2VsZWN0YWJsZUNlbGwgJiYgaWR4ID09PSAwKSB8fFxuICAgICAgICAgIChoYXNSb3dNZW51Q2VsbCAmJiBpZHggPT09IGhlYWRlckNlbGxzLmxlbmd0aCAtIDEpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGgsICd3aWR0aCcsICc1NXB4Jyk7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICB0aCxcbiAgICAgICAgICAgICd3aWR0aCcsXG4gICAgICAgICAgICBwZXJjZW50YWdlc1toYXNTZWxlY3RhYmxlQ2VsbCA/IGlkeCAtIDEgOiBpZHhdICsgJyUnXG4gICAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICBib2R5Um93cy5mb3JFYWNoKCh0cjogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgdGRzID0gdHI/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7XG4gICAgICAgIHRkcz8uZm9yRWFjaCgodGQ6IEhUTUxFbGVtZW50LCBpZHg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChoYXNTZWxlY3RhYmxlQ2VsbCAmJiBpZHggPT09IDApIHx8XG4gICAgICAgICAgICAoaGFzUm93TWVudUNlbGwgJiYgaWR4ID09PSB0ZHMubGVuZ3RoIC0gMSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGQsICd3aWR0aCcsICc1NXB4Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICAgIHRkLFxuICAgICAgICAgICAgICAnd2lkdGgnLFxuICAgICAgICAgICAgICBwZXJjZW50YWdlc1toYXNTZWxlY3RhYmxlQ2VsbCA/IGlkeCAtIDEgOiBpZHhdICsgJyUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRkLCAnb3BhY2l0eScsICcxJyk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZCwgJ292ZXJmbG93JywgJ2hpZGRlbicpO1xuICAgICAgICAgIGlmICh0aGlzLmJvcmRlcmVkKVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgICAgdGQsXG4gICAgICAgICAgICAgICdib3JkZXItbGVmdC1jb2xvcicsXG4gICAgICAgICAgICAgICd2YXIoLS1jcHMtY29sb3ItbGluZS1taWQpJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fbmVlZFJlY2FsY0F1dG9MYXlvdXQgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3VwZGF0ZVZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpIHtcbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbCB8fCB0aGlzLnZpcnR1YWxTY3JvbGxJdGVtSGVpZ2h0KSByZXR1cm47XG5cbiAgICBjb25zdCB0cnMgPSB0aGlzLnByaW1lbmdUcmVlVGFibGU/LmVsPy5uYXRpdmVFbGVtZW50XG4gICAgICA/LnF1ZXJ5U2VsZWN0b3IoJy5wLXRyZWV0YWJsZS10Ym9keScpXG4gICAgICA/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RyJyk7XG5cbiAgICBpZiAoIXRycz8ubGVuZ3RoKSByZXR1cm47XG4gICAgaWYgKCF0cnNbMF0/Lm9mZnNldEhlaWdodCkgcmV0dXJuO1xuXG4gICAgbGV0IGggPSAwO1xuICAgIHRycy5mb3JFYWNoKCh0cjogSFRNTEVsZW1lbnQsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICBsZXQgcmggPSAwO1xuICAgICAgY29uc3QgdGRzID0gdHI/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7XG4gICAgICB0ZHM/LmZvckVhY2goKHRkOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCB3cHJldiA9IHRkLnN0eWxlLndpZHRoO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRkLCAnZGlzcGxheScsICdibG9jaycpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRkLCAnd2lkdGgnKTtcbiAgICAgICAgaWYgKHRkLm9mZnNldEhlaWdodCkgcmggPSBNYXRoLm1heChyaCwgdGQub2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0ZCwgJ2Rpc3BsYXknKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0ZCwgJ3dpZHRoJywgd3ByZXYpO1xuICAgICAgfSk7XG4gICAgICBpZiAocmgpIHtcbiAgICAgICAgaCA9IGlkeCA9PT0gMCA/IHJoIDogTWF0aC5taW4oaCwgcmgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSBoO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TWluV2lkdGhPdmVyYWxsKCkge1xuICAgIGlmICh0aGlzLm1pbldpZHRoRm9yQm9keU9ubHkgfHwgIXRoaXMubWluV2lkdGggfHwgIXRoaXMucHJpbWVuZ1RyZWVUYWJsZSlcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IHRyZWVUYWJsZU1haW4gPVxuICAgICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlLmVsPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCcucC10cmVldGFibGUnKTtcbiAgICBpZiAodHJlZVRhYmxlTWFpbikge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0cmVlVGFibGVNYWluLCAnb3ZlcmZsb3cnLCAnYXV0bycpO1xuICAgICAgY29uc3QgcGFnaW5hdG9yRWwgPSB0cmVlVGFibGVNYWluLnF1ZXJ5U2VsZWN0b3IoJy5wLXBhZ2luYXRvcicpO1xuICAgICAgaWYgKHBhZ2luYXRvckVsKVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHBhZ2luYXRvckVsLCAnbWluLXdpZHRoJywgdGhpcy5taW5XaWR0aCk7XG4gICAgICBjb25zdCBsb2FkaW5nT3ZlcmxheSA9IHRyZWVUYWJsZU1haW4ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5wLXRyZWV0YWJsZS1sb2FkaW5nLW92ZXJsYXknXG4gICAgICApO1xuICAgICAgaWYgKGxvYWRpbmdPdmVybGF5KVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGxvYWRpbmdPdmVybGF5LCAnbWluLXdpZHRoJywgdGhpcy5taW5XaWR0aCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsYWJsZVdyYXBwZXIgPVxuICAgICAgdGhpcy5wcmltZW5nVHJlZVRhYmxlLmVsPy5uYXRpdmVFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnLnAtdHJlZXRhYmxlLXNjcm9sbGFibGUtd3JhcHBlcidcbiAgICAgICk7XG4gICAgaWYgKHNjcm9sbGFibGVXcmFwcGVyKVxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzY3JvbGxhYmxlV3JhcHBlciwgJ21pbi13aWR0aCcsIHRoaXMubWluV2lkdGgpO1xuXG4gICAgaWYgKCF0aGlzLnNjcm9sbGFibGUpIHtcbiAgICAgIGNvbnN0IHRhYmxlV3JhcHBlciA9XG4gICAgICAgIHRoaXMucHJpbWVuZ1RyZWVUYWJsZS5lbD8ubmF0aXZlRWxlbWVudD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAnLnAtdHJlZXRhYmxlLXdyYXBwZXInXG4gICAgICAgICk7XG4gICAgICBpZiAodGFibGVXcmFwcGVyKVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRhYmxlV3JhcHBlciwgJ21pbi13aWR0aCcsIHRoaXMubWluV2lkdGgpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyZWVUYWJsZUhlYWRlciA9XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZWw/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcucC10cmVldGFibGUtaGVhZGVyJ1xuICAgICAgKTtcbiAgICBpZiAodHJlZVRhYmxlSGVhZGVyKVxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0cmVlVGFibGVIZWFkZXIsICdtaW4td2lkdGgnLCB0aGlzLm1pbldpZHRoKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uV2luZG93UmVzaXplKCkge1xuICAgIC8vIGlmICh0aGlzLmRlZlNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnKVxuICAgIC8vICAgdGhpcy5kZWZTY3JvbGxIZWlnaHRQeCA9IHRoaXMuc2Nyb2xsYWJsZUJvZHkuY2xpZW50SGVpZ2h0O1xuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3dpbmRvd1Jlc2l6ZURlYm91bmNlcik7XG4gICAgdGhpcy5fd2luZG93UmVzaXplRGVib3VuY2VyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIGdldCBzdHlsZUNsYXNzKCkge1xuICAgIGNvbnN0IGNsYXNzZXNMaXN0ID0gW107XG4gICAgc3dpdGNoICh0aGlzLnNpemUpIHtcbiAgICAgIGNhc2UgJ3NtYWxsJzpcbiAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgncC10cmVldGFibGUtc20nKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsYXJnZSc6XG4gICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLWxnJyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNUb29sYmFyKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMudG9vbGJhclNpemUpIHtcbiAgICAgICAgY2FzZSAnc21hbGwnOlxuICAgICAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ2Nwcy10YmFyLXNtYWxsJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ25vcm1hbCc6XG4gICAgICAgICAgY2xhc3Nlc0xpc3QucHVzaCgnY3BzLXRiYXItbm9ybWFsJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnN0cmlwZWQpIHtcbiAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLXN0cmlwZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYm9yZGVyZWQpIHtcbiAgICAgIGNsYXNzZXNMaXN0LnB1c2goJ3AtdHJlZXRhYmxlLWdyaWRsaW5lcycpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGFzc2VzTGlzdC5qb2luKCcgJyk7XG4gIH1cblxuICBwcml2YXRlIF9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCkge1xuICAgIGlmICghdGhpcy5fc2Nyb2xsYmFyVmlzaWJsZSAmJiB0aGlzLnZpcnR1YWxTY3JvbGwpXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLl9zY3JvbGxhYmxlQm9keSxcbiAgICAgICAgJ292ZXJmbG93JyxcbiAgICAgICAgJ2hpZGRlbicsXG4gICAgICAgIFJlbmRlcmVyU3R5bGVGbGFnczIuSW1wb3J0YW50XG4gICAgICApO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsICYmIHRoaXMuZGVmU2Nyb2xsSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpO1xuICAgICAgICAvLyBUb2RvOiBBZGQgZXhwbGljaXQgdHlwZVxuICAgICAgICBjb25zdCBpdGVtc0xlbiA9ICh0aGlzLnByaW1lbmdUcmVlVGFibGUuc2VyaWFsaXplZFZhbHVlIGFzIGFueSkubGVuZ3RoO1xuICAgICAgICBpZiAoaXRlbXNMZW4gPCAxKSB7XG4gICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSB0aGlzLmVtcHR5Qm9keUhlaWdodFxuICAgICAgICAgICAgPyAoYGNhbGMoJHt0aGlzLmVtcHR5Qm9keUhlaWdodH0gKyAxcHgpYCBhcyBzdHJpbmcpXG4gICAgICAgICAgICA6IHRoaXMudmlydHVhbFNjcm9sbEl0ZW1TaXplICsgMSArICdweCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY3VySGVpZ2h0ID0gdGhpcy52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgKiBpdGVtc0xlbiArIDI7XG4gICAgICAgICAgaWYgKHRoaXMuZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcpIHtcbiAgICAgICAgICAgIGlmIChjdXJIZWlnaHQgPj0gdGhpcy5fZGVmU2Nyb2xsSGVpZ2h0UHhJbml0aWFsKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsSGVpZ2h0ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuX3Njcm9sbGFibGVCb2R5LCAnaGVpZ2h0JywgJzEwMCUnKTtcbiAgICAgICAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9XG4gICAgICAgICAgICBNYXRoLm1pbih0aGlzLl9kZWZTY3JvbGxIZWlnaHRQeCwgY3VySGVpZ2h0KSArICdweCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyR2xvYmFsRmlsdGVyKCkge1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyQ29tcD8uY2xlYXIoKTtcbiAgfVxuXG4gIC8vIFRvZG86IFVzZSBleHBsaWNpdCB0eXBlXG4gIG9uU29ydEZ1bmN0aW9uKGV2ZW50OiBTb3J0RXZlbnQgfCBhbnkpIHtcbiAgICB0aGlzLmN1c3RvbVNvcnRGdW5jdGlvbi5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIG9uRmlsdGVyR2xvYmFsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlsdGVyR2xvYmFsKHZhbHVlLCAnY29udGFpbnMnKTtcbiAgfVxuXG4gIG9uQ2xpY2tBZGRpdGlvbmFsQnRuT25TZWxlY3QoKSB7XG4gICAgdGhpcy5hZGRpdGlvbmFsQnRuT25TZWxlY3RDbGlja2VkLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgb25DbGlja0FjdGlvbkJ0bigpIHtcbiAgICB0aGlzLmFjdGlvbkJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25SZWxvYWREYXRhKCkge1xuICAgIGlmICh0aGlzLmRhdGFSZWxvYWRCdG5EaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuZGF0YVJlbG9hZEJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgb25Db2x1bW5zVG9nZ2xlKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zVG9nZ2xlQnRuRGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLmNvbFRvZ2dsZU1lbnU/LnRvZ2dsZShldmVudCk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZCgpIHtcbiAgICB0aGlzLnJvd3NUb1JlbW92ZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG4gIH1cblxuICBvbkVkaXRSb3dDbGlja2VkKG5vZGU6IGFueSkge1xuICAgIHRoaXMuZWRpdFJvd0J0bkNsaWNrZWQuZW1pdChub2RlKTtcbiAgfVxuXG4gIG9uUmVtb3ZlUm93Q2xpY2tlZChub2RlOiBhbnkpIHtcbiAgICB0aGlzLnJvd3NUb1JlbW92ZS5lbWl0KFtub2RlXSk7XG4gIH1cblxuICB0b2dnbGVBbGxDb2x1bW5zKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zID1cbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA8IHRoaXMuY29sdW1ucy5sZW5ndGggPyB0aGlzLmNvbHVtbnMgOiBbXTtcbiAgICB0aGlzLmNvbHVtbnNTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRDb2x1bW5zKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgaXNDb2x1bW5TZWxlY3RlZChjb2w6IGFueSkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zb21lKChpdGVtKSA9PiBpc0VxdWFsKGl0ZW0sIGNvbCkpO1xuICB9XG5cbiAgb25Sb3dzUGVyUGFnZUNoYW5nZWQoKSB7XG4gICAgaWYgKHRoaXMucmVzZXRQYWdlT25Sb3dzQ2hhbmdlKSB7XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUuZmlyc3QgPSAwO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZVBhZ2UodGhpcy5nZXRQYWdlKCkpO1xuICB9XG5cbiAgZ2V0UGFnZUNvdW50KCkge1xuICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy5wcmltZW5nVHJlZVRhYmxlLnRvdGFsUmVjb3JkcyAvIHRoaXMucm93cyk7XG4gIH1cblxuICBnZXRQYWdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy5wcmltZW5nVHJlZVRhYmxlLmZpcnN0IC8gdGhpcy5yb3dzKTtcbiAgfVxuXG4gIGNoYW5nZVBhZ2UocDogbnVtYmVyKSB7XG4gICAgY29uc3QgcGMgPSBNYXRoLmNlaWwodGhpcy5nZXRQYWdlQ291bnQoKSk7XG5cbiAgICBpZiAocCA+PSAwICYmIHAgPCBwYykge1xuICAgICAgdGhpcy5maXJzdCA9IHRoaXMucm93cyAqIHA7XG4gICAgICB0aGlzLnByaW1lbmdUcmVlVGFibGUub25QYWdlQ2hhbmdlKHtcbiAgICAgICAgZmlyc3Q6IHRoaXMuZmlyc3QsXG4gICAgICAgIHJvd3M6IHRoaXMucm93c1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25QYWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpcnN0ID0gZXZlbnQuZmlyc3Q7XG4gICAgdGhpcy5yb3dzID0gZXZlbnQucm93cztcblxuICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgcGFnZTogdGhpcy5nZXRQYWdlKCksXG4gICAgICBmaXJzdDogdGhpcy5maXJzdCxcbiAgICAgIHJvd3M6IHRoaXMucm93cyxcbiAgICAgIHBhZ2VDb3VudDogTWF0aC5jZWlsKHRoaXMuZ2V0UGFnZUNvdW50KCkpXG4gICAgfTtcblxuICAgIHRoaXMucGFnZUNoYW5nZWQuZW1pdChzdGF0ZSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uTGF6eUxvYWRlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5sYXp5TG9hZGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Ob2RlRXhwYW5kZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMubm9kZUV4cGFuZGVkLmVtaXQoZXZlbnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fY2FsY0F1dG9MYXlvdXRIZWFkZXJXaWR0aHModHJ1ZSk7XG4gICAgfSk7XG4gICAgdGhpcy5fcmVjYWxjVmlydHVhbEhlaWdodCgpO1xuICB9XG5cbiAgb25Ob2RlQ29sbGFwc2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVDb2xsYXBzZWQuZW1pdChldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gIH1cblxuICBvbk5vZGVTZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5ub2RlU2VsZWN0ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbk5vZGVVbnNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm5vZGVVbnNlbGVjdGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Tb3J0KGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNvcnRlZC5lbWl0KGV2ZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2NhbGNBdXRvTGF5b3V0SGVhZGVyV2lkdGhzKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgb25GaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsdGVyZWQuZW1pdChldmVudCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgICB0aGlzLl9yZWNhbGNWaXJ0dWFsSGVpZ2h0KCk7XG4gIH1cblxuICBvblNlbGVjdENvbHVtbihjb2w6IGFueSkge1xuICAgIGxldCByZXMgPSBbXSBhcyBhbnk7XG4gICAgaWYgKHRoaXMuaXNDb2x1bW5TZWxlY3RlZChjb2wpKSB7XG4gICAgICByZXMgPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maWx0ZXIoKHY6IGFueSkgPT4gIWlzRXF1YWwodiwgY29sKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChvKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zb21lKCh2OiBhbnkpID0+IGlzRXF1YWwodiwgbykpIHx8XG4gICAgICAgICAgaXNFcXVhbChjb2wsIG8pXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcy5wdXNoKG8pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMgPSByZXM7XG4gICAgdGhpcy5jb2x1bW5zU2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkQ29sdW1ucyk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jYWxjQXV0b0xheW91dEhlYWRlcldpZHRocyh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJlcGxhY2Ugd2l0aCBleHBsaWNpdCB0eXBlXG4gIG9uU2VsZWN0aW9uQ2hhbmdlZChzZWxlY3Rpb246IGFueVtdIHwgYW55KSB7XG4gICAgdGhpcy5yb3dzU2VsZWN0ZWQuZW1pdChzZWxlY3Rpb24pO1xuICB9XG59XG4iLCI8cC10cmVlVGFibGVcbiAgI3ByaW1lbmdUcmVlVGFibGVcbiAgdHRXaXRoVW5zb3J0XG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnY3BzLXRyZWV0YWJsZS1sb2FkaW5nJzogbG9hZGluZyxcbiAgICAnY3BzLXRyZWV0YWJsZS1mbGV4JzogZGVmU2Nyb2xsSGVpZ2h0ID09PSAnZmxleCcsXG4gICAgJ2Nwcy10cmVldGFibGUtbm9udmlydHVhbCc6ICF2aXJ0dWFsU2Nyb2xsLFxuICAgICdjcHMtdHJlZXRhYmxlLWF1dG9sYXlvdXQtY2FsY2VkJzogYXV0b0xheW91dCAmJiBzY3JvbGxhYmxlLFxuICB9XCJcbiAgW3ZhbHVlXT1cImRhdGFcIlxuICBbYXV0b0xheW91dF09XCJhdXRvTGF5b3V0ICYmICFzY3JvbGxhYmxlXCJcbiAgW3Njcm9sbGFibGVdPVwic2Nyb2xsYWJsZVwiXG4gIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCJcbiAgW3ZpcnR1YWxTY3JvbGxdPVwidmlydHVhbFNjcm9sbFwiXG4gIFt2aXJ0dWFsU2Nyb2xsSXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplXCJcbiAgW3ZpcnR1YWxTY3JvbGxPcHRpb25zXT1cIntcbiAgICBudW1Ub2xlcmF0ZWRJdGVtczogbnVtVG9sZXJhdGVkSXRlbXMsXG4gICAgYXV0b1NpemU6IGZhbHNlXG4gIH1cIlxuICBbY29sdW1uc109XCJzZWxlY3RlZENvbHVtbnNcIlxuICBbbG9hZGluZ109XCJsb2FkaW5nXCJcbiAgW3Jvd0hvdmVyXT1cInJvd0hvdmVyXCJcbiAgW2xhenldPVwibGF6eVwiXG4gIFsoc2VsZWN0aW9uKV09XCJzZWxlY3RlZFJvd3NcIlxuICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgY29tcGFyZVNlbGVjdGlvbkJ5PVwiZGVlcEVxdWFsc1wiXG4gIFtsYXp5TG9hZE9uSW5pdF09XCJsYXp5TG9hZE9uSW5pdFwiXG4gIFtzdHlsZUNsYXNzXT1cInN0eWxlQ2xhc3NcIlxuICBbdGFibGVTdHlsZV09XCJ0YWJsZVN0eWxlXCJcbiAgW3RhYmxlU3R5bGVDbGFzc109XCJ0YWJsZVN0eWxlQ2xhc3NcIlxuICBbY3VzdG9tU29ydF09XCJjdXN0b21Tb3J0XCJcbiAgW3NvcnRNb2RlXT1cInNvcnRNb2RlXCJcbiAgW2dsb2JhbEZpbHRlckZpZWxkc109XCJnbG9iYWxGaWx0ZXJGaWVsZHNcIlxuICBbcGFnaW5hdG9yXT1cInBhZ2luYXRvclwiXG4gIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXG4gIFthbHdheXNTaG93UGFnaW5hdG9yXT1cImFsd2F5c1Nob3dQYWdpbmF0b3JcIlxuICBbcm93c109XCJyb3dzXCJcbiAgW2ZpcnN0XT1cImZpcnN0XCJcbiAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICBbcmVzZXRQYWdlT25Tb3J0XT1cInJlc2V0UGFnZU9uU29ydFwiXG4gIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IC0ge2xhc3R9IG9mIHt0b3RhbFJlY29yZHN9XCJcbiAgKG9uUGFnZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gIChvblNvcnQpPVwib25Tb3J0KCRldmVudClcIlxuICAob25GaWx0ZXIpPVwib25GaWx0ZXIoJGV2ZW50KVwiXG4gIChvbkxhenlMb2FkKT1cIm9uTGF6eUxvYWRlZCgkZXZlbnQpXCJcbiAgKHNvcnRGdW5jdGlvbik9XCJvblNvcnRGdW5jdGlvbigkZXZlbnQpXCJcbiAgKG9uTm9kZUV4cGFuZCk9XCJvbk5vZGVFeHBhbmRlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZUNvbGxhcHNlKT1cIm9uTm9kZUNvbGxhcHNlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZVNlbGVjdCk9XCJvbk5vZGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgKG9uTm9kZVVuc2VsZWN0KT1cIm9uTm9kZVVuc2VsZWN0ZWQoJGV2ZW50KVwiPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiICpuZ0lmPVwiaGFzVG9vbGJhclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b29sYmFyVGVtcGxhdGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b29sYmFyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRvb2xiYXJUZW1wbGF0ZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1sZWZ0XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0b29sYmFySWNvblwiIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWljb25cIj5cbiAgICAgICAgICA8Y3BzLWljb24gW2ljb25dPVwidG9vbGJhckljb25cIiBbY29sb3JdPVwidG9vbGJhckljb25Db2xvclwiPjwvY3BzLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLXRpdGxlXCI+e3sgdG9vbGJhclRpdGxlIH19PC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93R2xvYmFsRmlsdGVyXCIgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXRiYXItZ2xvYmFsLWZpbHRlclwiPlxuICAgICAgICAgIDxjcHMtaW5wdXRcbiAgICAgICAgICAgICNnbG9iYWxGaWx0ZXJDb21wXG4gICAgICAgICAgICBwcmVmaXhJY29uPVwic2VhcmNoXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnbG9iYWxGaWx0ZXJQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2VkKT1cIm9uRmlsdGVyR2xvYmFsKCRldmVudClcIlxuICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsb2FkaW5nXCJcbiAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cInRvb2xiYXJTaXplID09PSAnc21hbGwnID8gJ3VuZGVybGluZWQnIDogJ291dGxpbmVkJ1wiXG4gICAgICAgICAgICBbaGlkZURldGFpbHNdPVwidHJ1ZVwiPlxuICAgICAgICAgIDwvY3BzLWlucHV0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1yaWdodFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93UmVtb3ZlQnRuT25TZWxlY3QgJiYgc2VsZWN0ZWRSb3dzLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWJ0bi1vbi1zZWxlY3RcIj5cbiAgICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICAgbGFiZWw9XCJSZW1vdmVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlbW92ZUJ0bk9uU2VsZWN0RGlzYWJsZWRcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwiYm9yZGVybGVzc1wiXG4gICAgICAgICAgICBpY29uPVwicmVtb3ZlXCJcbiAgICAgICAgICAgIFtzaXplXT1cInRvb2xiYXJTaXplXCJcbiAgICAgICAgICAgIChjbGlja2VkKT1cInJlbW92ZVNlbGVjdGVkKClcIj5cbiAgICAgICAgICA8L2Nwcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93QWRkaXRpb25hbEJ0bk9uU2VsZWN0ICYmIHNlbGVjdGVkUm93cy5sZW5ndGggPiAwXCJcbiAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtdGJhci1idG4tb24tc2VsZWN0XCI+XG4gICAgICAgICAgPGNwcy1idXR0b25cbiAgICAgICAgICAgIFtsYWJlbF09XCJhZGRpdGlvbmFsQnRuT25TZWxlY3RUaXRsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWRkaXRpb25hbEJ0bk9uU2VsZWN0RGlzYWJsZWRcIlxuICAgICAgICAgICAgY29sb3I9XCJwcmVwYXJlZFwiXG4gICAgICAgICAgICB0eXBlPVwiYm9yZGVybGVzc1wiXG4gICAgICAgICAgICBbc2l6ZV09XCJ0b29sYmFyU2l6ZVwiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNsaWNrQWRkaXRpb25hbEJ0bk9uU2VsZWN0KClcIj5cbiAgICAgICAgICA8L2Nwcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0FjdGlvbkJ0blwiIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWFjdGlvbi1idG5cIj5cbiAgICAgICAgICA8Y3BzLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cImFjdGlvbkJ0blRpdGxlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb25CdG5EaXNhYmxlZFwiXG4gICAgICAgICAgICBjb2xvcj1cInByZXBhcmVkXCJcbiAgICAgICAgICAgIHR5cGU9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICBbc2l6ZV09XCJ0b29sYmFyU2l6ZVwiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJvbkNsaWNrQWN0aW9uQnRuKClcIj5cbiAgICAgICAgICA8L2Nwcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJzaG93Q29sdW1uc1RvZ2dsZUJ0biAmJiBjb2x1bW5zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLWNvbHRvZ2dsZS1idG5cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1kaXNhYmxlZCc6IGNvbHVtbnNUb2dnbGVCdG5EaXNhYmxlZCB9XCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwiY29sdW1uc1wiXG4gICAgICAgICAgICBzaXplPVwibm9ybWFsXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJcbiAgICAgICAgICAgICAgY29sdW1uc1RvZ2dsZUJ0bkRpc2FibGVkID8gJ3RleHQtbGlnaHRlc3QnIDogJ3ByZXBhcmVkLWxpZ2h0ZW4xJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNvbHVtbnNUb2dnbGUoJGV2ZW50KVwiPjwvY3BzLWljb24+XG4gICAgICAgICAgPGNwcy1tZW51ICNjb2xUb2dnbGVNZW51IFt3aXRoQXJyb3ddPVwiZmFsc2VcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51XCI+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtY29sdG9nZ2xlLW1lbnUtaXRlbSBzZWxlY3QtYWxsLW9wdGlvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFsbHNlbGVjdGVkXT1cInNlbGVjdGVkQ29sdW1ucy5sZW5ndGggPT09IGNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsQ29sdW1ucygpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGVmdFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tY2hlY2tcIj4gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+U2hvdyBhbGwgY29sdW1uczwvc3BhblxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sIG9mIGNvbHVtbnNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RDb2x1bW4oY29sKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzQ29sdW1uU2VsZWN0ZWQoY29sKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWxlZnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1jb2x0b2dnbGUtbWVudS1pdGVtLWNoZWNrXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcHMtdHJlZXRhYmxlLWNvbHRvZ2dsZS1tZW51LWl0ZW0tbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICBjb2xbY29sSGVhZGVyTmFtZV1cbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Nwcy1tZW51PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwic2hvd0RhdGFSZWxvYWRCdG5cIlxuICAgICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS10YmFyLXJlbG9hZC1idG5cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1kaXNhYmxlZCc6IGRhdGFSZWxvYWRCdG5EaXNhYmxlZCB9XCI+XG4gICAgICAgICAgPGNwcy1pY29uXG4gICAgICAgICAgICBpY29uPVwicmVmcmVzaFwiXG4gICAgICAgICAgICBzaXplPVwiMThcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImRhdGFSZWxvYWRCdG5EaXNhYmxlZCA/ICd0ZXh0LWxpZ2h0JyA6ICdwcmVwYXJlZC1saWdodGVuMSdcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVsb2FkRGF0YSgpXCI+XG4gICAgICAgICAgPC9jcHMtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgKm5nSWY9XCJuZXN0ZWRIZWFkZXJUZW1wbGF0ZVwiIGxldC1jb2x1bW5zPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICBuZXN0ZWRIZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICRpbXBsaWNpdDogY29sdW1ucyxcbiAgICAgICAgfVxuICAgICAgXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiICpuZ0lmPVwiIW5lc3RlZEhlYWRlclRlbXBsYXRlXCIgbGV0LWNvbHVtbnM+XG4gICAgPHRyPlxuICAgICAgPCEtLSA8dGggc3R5bGU9XCJ3aWR0aDogM3JlbVwiICpuZ0lmPVwicmVvcmRlcmFibGVSb3dzXCI+PC90aD4gLS0+XG4gICAgICA8dGggKm5nSWY9XCJzZWxlY3RhYmxlXCIgY3BzVFRIZHJTZWxlY3RhYmxlPjwvdGg+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyVGVtcGxhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBoZWFkZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2x1bW5zLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhlYWRlclRlbXBsYXRlICYmIGNvbHVtbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic29ydGFibGVcIj5cbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiXG4gICAgICAgICAgICBbY3BzVFRDb2xTb3J0YWJsZV09XCJjb2xbY29sRmllbGROYW1lXVwiPlxuICAgICAgICAgICAge3sgY29sW2NvbEhlYWRlck5hbWVdIH19XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc29ydGFibGVcIj5cbiAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XG4gICAgICAgICAgICB7eyBjb2xbY29sSGVhZGVyTmFtZV0gfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHRoXG4gICAgICAgIGNsYXNzPVwiY3BzLXRyZWV0YWJsZS1yb3ctbWVudS1jZWxsXCJcbiAgICAgICAgKm5nSWY9XCJzaG93Um93TWVudSAmJiAoc2hvd1Jvd1JlbW92ZUJ1dHRvbiB8fCBzaG93Um93RWRpdEJ1dHRvbilcIj48L3RoPlxuICAgIDwvdHI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgbGV0LXJvd0RhdGE9XCJyb3dEYXRhXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuICAgIGxldC1yb3dOb2RlXG4gICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICA8dHJcbiAgICAgIFt0dFJvd109XCJyb3dOb2RlXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2Nwcy10cmVldGFibGUtcm93LXNlbGVjdGVkJzpcbiAgICAgICAgICBzZWxlY3RhYmxlICYmIHByaW1lbmdUcmVlVGFibGUuaXNTZWxlY3RlZChyb3dOb2RlLm5vZGUpXG4gICAgICB9XCI+XG4gICAgICA8IS0tIDx0ZCAqbmdJZj1cInJlb3JkZXJhYmxlUm93c1wiIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZS1jZWxsXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3BzLXRhYmxlLXJvdy1kcmFnLWhhbmRsZVwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT7imLA8L3NwYW4+XG4gICAgICA8L3RkPiAtLT5cbiAgICAgIDx0ZCBbY3BzVFRSb3dTZWxlY3RhYmxlXT1cInJvd05vZGVcIiAqbmdJZj1cInNlbGVjdGFibGVcIj48L3RkPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJvZHlUZW1wbGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGJvZHlUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgJGltcGxpY2l0OiByb3dOb2RlLFxuICAgICAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICAgIGNvbHVtbnM6IGNvbHVtbnMsXG4gICAgICAgICAgICAgIHJvd0RhdGE6IHJvd0RhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYm9keVRlbXBsYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiaSA9PT0gMFwiIFtjcHNUVFJvd1RvZ2dsZXJdPVwicm93Tm9kZVwiPlxuICAgICAgICAgICAgICB7eyByb3dEYXRhW2NvbFtjb2xGaWVsZE5hbWVdXSB9fVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cImkgPiAwXCI+e3sgcm93RGF0YVtjb2xbY29sRmllbGROYW1lXV0gfX08L3RkPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPHRkXG4gICAgICAgICpuZ0lmPVwic2hvd1Jvd01lbnUgJiYgKHNob3dSb3dSZW1vdmVCdXR0b24gfHwgc2hvd1Jvd0VkaXRCdXR0b24pXCJcbiAgICAgICAgY2xhc3M9XCJjcHMtdHJlZXRhYmxlLXJvdy1tZW51LWNlbGxcIj5cbiAgICAgICAgPHRhYmxlLXJvdy1tZW51XG4gICAgICAgICAgKGVkaXRSb3dCdG5DbGlja2VkKT1cIm9uRWRpdFJvd0NsaWNrZWQocm93Tm9kZS5ub2RlKVwiXG4gICAgICAgICAgKHJlbW92ZVJvd0J0bkNsaWNrZWQpPVwib25SZW1vdmVSb3dDbGlja2VkKHJvd05vZGUubm9kZSlcIlxuICAgICAgICAgIFtzaG93Um93UmVtb3ZlQnV0dG9uXT1cInNob3dSb3dSZW1vdmVCdXR0b25cIlxuICAgICAgICAgIFtzaG93Um93RWRpdEJ1dHRvbl09XCJzaG93Um93RWRpdEJ1dHRvblwiPlxuICAgICAgICA8L3RhYmxlLXJvdy1tZW51PlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgPHRyPlxuICAgICAgPHRkXG4gICAgICAgIGNvbHNwYW49XCIxMDBcIlxuICAgICAgICBjbGFzcz1cImNwcy10cmVldGFibGUtZW1wdHktbWVzc2FnZS10ZFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBlbXB0eUJvZHlIZWlnaHQgfVwiPlxuICAgICAgICB7eyBlbXB0eU1lc3NhZ2UgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxvYWRpbmdpY29uXCI+XG4gICAgPGNwcy1sb2FkZXIgW2Z1bGxTY3JlZW5dPVwiZmFsc2VcIiBvcGFjaXR5PVwiMFwiPjwvY3BzLWxvYWRlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInBhZ2luYXRvcmxlZnRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3BzLXRhYmxlLXBhZ2luYXRvci1pdG1zLXBlci1wYWdlXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNwcy10YWJsZS1wYWdpbmF0b3ItaXRlbXMtcGVyLXBhZ2UtdGl0bGVcIlxuICAgICAgICA+Um93cyBwZXIgcGFnZTpcbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxjcHMtc2VsZWN0XG4gICAgICAgIFtvcHRpb25zXT1cInJvd09wdGlvbnNcIlxuICAgICAgICBbaGlkZURldGFpbHNdPVwidHJ1ZVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwicm93c1wiXG4gICAgICAgICh2YWx1ZUNoYW5nZWQpPVwib25Sb3dzUGVyUGFnZUNoYW5nZWQoKVwiXG4gICAgICAgIFtyZXR1cm5PYmplY3RdPVwiZmFsc2VcIlxuICAgICAgICBvcHRpb25zQ2xhc3M9XCJjcHMtcGFnaW5hdG9yLXBhZ2Utb3B0aW9uc1wiPlxuICAgICAgPC9jcHMtc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JmaXJzdHBhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZURvdWJsZUxlZnRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JwcmV2aW91c3BhZ2VsaW5raWNvblwiPlxuICAgIDxBbmdsZUxlZnRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JuZXh0cGFnZWxpbmtpY29uXCI+XG4gICAgPEFuZ2xlUmlnaHRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJwYWdpbmF0b3JsYXN0cGFnZWxpbmtpY29uXCI+XG4gICAgPEFuZ2xlRG91YmxlUmlnaHRJY29uIC8+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtdHJlZVRhYmxlPlxuIl19