@alfresco/adf-process-services-cloud 7.1.0-15297936594 → 8.0.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 (212) hide show
  1. package/bundles/assets/adf-process-services-cloud/i18n/de.json +2 -2
  2. package/fesm2022/adf-process-services-cloud.mjs +829 -720
  3. package/fesm2022/adf-process-services-cloud.mjs.map +1 -1
  4. package/lib/app/components/app-list-cloud/app-list-cloud.component.scss +3 -3
  5. package/lib/common/date-range-filter/date-range-filter.service.d.ts +1 -1
  6. package/lib/flex.scss +81 -0
  7. package/lib/form/components/form-cloud.component.d.ts +4 -4
  8. package/lib/form/components/form-cloud.component.scss +16 -4
  9. package/lib/form/components/widgets/data-table/data-table-adapter.widget.d.ts +1 -2
  10. package/lib/form/components/widgets/data-table/data-table.widget.d.ts +1 -0
  11. package/lib/form/components/widgets/data-table/data-table.widget.scss +8 -0
  12. package/lib/form/components/widgets/data-table/helpers/data-table-path-parser.helper.d.ts +2 -1
  13. package/lib/form/components/widgets/date/date-cloud.widget.scss +10 -4
  14. package/lib/form/components/widgets/display-external-property/display-external-property.widget.scss +1 -1
  15. package/lib/form/components/widgets/display-rich-text/display-rich-text.widget.scss +0 -2
  16. package/lib/form/components/widgets/dropdown/dropdown-cloud.widget.d.ts +2 -0
  17. package/lib/form/components/widgets/dropdown/dropdown-cloud.widget.scss +2 -2
  18. package/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.scss +1 -2
  19. package/lib/group/components/group-cloud.component.d.ts +3 -1
  20. package/lib/group/components/group-cloud.component.scss +5 -5
  21. package/lib/mat-selectors.scss +9 -0
  22. package/lib/models/constant-values.type.d.ts +19 -0
  23. package/lib/models/process-definition-cloud.model.d.ts +2 -0
  24. package/lib/models/task-cloud.model.d.ts +2 -0
  25. package/lib/people/components/people-cloud.component.d.ts +3 -1
  26. package/lib/people/components/people-cloud.component.scss +6 -6
  27. package/lib/process/process-filters/components/edit-process-filter/edit-process-filter-cloud.component.scss +7 -7
  28. package/lib/process/process-filters/models/process-filter-cloud.model.d.ts +1 -0
  29. package/lib/process/process-header/components/process-header-cloud.component.scss +1 -1
  30. package/lib/process/start-process/components/start-process-cloud.component.d.ts +4 -2
  31. package/lib/process-services-cloud.module.d.ts +12 -0
  32. package/lib/providers.d.ts +36 -0
  33. package/lib/screen/components/screen-cloud/screen-cloud.component.d.ts +10 -1
  34. package/lib/screen/models/screen-cloud.model.d.ts +7 -3
  35. package/lib/services/web-socket.service.d.ts +2 -5
  36. package/lib/task/models/task-details-cloud.model.d.ts +1 -0
  37. package/lib/task/task-filters/components/base-task-filters-cloud.component.d.ts +1 -1
  38. package/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.d.ts +1 -1
  39. package/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter/edit-service-task-filter-cloud.component.scss +7 -7
  40. package/lib/task/task-filters/components/edit-task-filters/edit-task-filter/edit-task-filter-cloud.component.scss +7 -7
  41. package/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.scss +4 -4
  42. package/lib/task/task-form/components/task-form-cloud/task-form-cloud.component.scss +3 -3
  43. package/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.d.ts +11 -3
  44. package/lib/task/task-header/components/task-header-cloud.component.scss +2 -2
  45. package/lib/task/task-list/components/base-task-list-cloud.component.d.ts +1 -1
  46. package/package.json +5 -8
  47. package/public-api.d.ts +1 -0
  48. package/esm2022/adf-process-services-cloud.mjs +0 -5
  49. package/esm2022/lib/app/app-list-cloud.module.mjs +0 -20
  50. package/esm2022/lib/app/components/app-details-cloud/app-details-cloud.component.mjs +0 -67
  51. package/esm2022/lib/app/components/app-list-cloud/app-list-cloud.component.mjs +0 -126
  52. package/esm2022/lib/app/models/application-instance.model.mjs +0 -24
  53. package/esm2022/lib/app/public-api.mjs +0 -22
  54. package/esm2022/lib/app/services/apps-process-cloud.service.mjs +0 -97
  55. package/esm2022/lib/common/date-range-filter/date-range-filter.component.mjs +0 -164
  56. package/esm2022/lib/common/date-range-filter/date-range-filter.service.mjs +0 -97
  57. package/esm2022/lib/common/index.mjs +0 -18
  58. package/esm2022/lib/common/interface/environment.interface.mjs +0 -18
  59. package/esm2022/lib/common/interface/index.mjs +0 -18
  60. package/esm2022/lib/common/interface/public-api.mjs +0 -18
  61. package/esm2022/lib/common/public-api.mjs +0 -19
  62. package/esm2022/lib/form/components/cloud-form-rendering.service.mjs +0 -57
  63. package/esm2022/lib/form/components/form-cloud-custom-outcomes.component.mjs +0 -31
  64. package/esm2022/lib/form/components/form-cloud.component.mjs +0 -394
  65. package/esm2022/lib/form/components/form-definition-selector-cloud.component.mjs +0 -54
  66. package/esm2022/lib/form/components/spinner/form-spinner.component.mjs +0 -36
  67. package/esm2022/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +0 -250
  68. package/esm2022/lib/form/components/widgets/attach-file/file-properties-table/file-properties-table-cloud.component.mjs +0 -137
  69. package/esm2022/lib/form/components/widgets/data-table/data-table-adapter.widget.mjs +0 -111
  70. package/esm2022/lib/form/components/widgets/data-table/data-table.widget.mjs +0 -119
  71. package/esm2022/lib/form/components/widgets/data-table/helpers/data-table-path-parser.helper.mjs +0 -122
  72. package/esm2022/lib/form/components/widgets/date/date-cloud.widget.mjs +0 -189
  73. package/esm2022/lib/form/components/widgets/display-external-property/display-external-property.widget.mjs +0 -86
  74. package/esm2022/lib/form/components/widgets/display-rich-text/display-rich-text.widget.mjs +0 -80
  75. package/esm2022/lib/form/components/widgets/dropdown/dropdown-cloud.widget.mjs +0 -451
  76. package/esm2022/lib/form/components/widgets/dropdown/validators.mjs +0 -29
  77. package/esm2022/lib/form/components/widgets/file-viewer/file-viewer.widget.mjs +0 -47
  78. package/esm2022/lib/form/components/widgets/group/group-cloud.widget.mjs +0 -83
  79. package/esm2022/lib/form/components/widgets/people/people-cloud.widget.mjs +0 -91
  80. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer-wrapper/properties-viewer-wrapper.component.mjs +0 -81
  81. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer.widget.mjs +0 -54
  82. package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.schema.mjs +0 -86
  83. package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.mjs +0 -117
  84. package/esm2022/lib/form/components/widgets/upload/upload-cloud.widget.mjs +0 -188
  85. package/esm2022/lib/form/form-cloud.module.mjs +0 -103
  86. package/esm2022/lib/form/models/form-cloud-representation.model.mjs +0 -48
  87. package/esm2022/lib/form/models/task-variable-cloud.model.mjs +0 -28
  88. package/esm2022/lib/form/public-api.mjs +0 -44
  89. package/esm2022/lib/form/services/content-cloud-node-selector.service.mjs +0 -120
  90. package/esm2022/lib/form/services/display-mode.service.mjs +0 -146
  91. package/esm2022/lib/form/services/form-cloud.service.interface.mjs +0 -18
  92. package/esm2022/lib/form/services/form-cloud.service.mjs +0 -201
  93. package/esm2022/lib/form/services/form-definition-selector-cloud.service.interface.mjs +0 -18
  94. package/esm2022/lib/form/services/form-definition-selector-cloud.service.mjs +0 -51
  95. package/esm2022/lib/form/services/form-utils.service.mjs +0 -37
  96. package/esm2022/lib/form/services/process-cloud-content.service.mjs +0 -71
  97. package/esm2022/lib/form/services/spinner/form-cloud-spinner.service.mjs +0 -50
  98. package/esm2022/lib/group/components/group-cloud.component.mjs +0 -422
  99. package/esm2022/lib/group/group-cloud.module.mjs +0 -33
  100. package/esm2022/lib/group/models/identity-group.model.mjs +0 -18
  101. package/esm2022/lib/group/public-api.mjs +0 -21
  102. package/esm2022/lib/group/services/identity-group.service.mjs +0 -89
  103. package/esm2022/lib/models/application-version.model.mjs +0 -21
  104. package/esm2022/lib/models/data-column-custom-data.mjs +0 -18
  105. package/esm2022/lib/models/date-cloud-filter.model.mjs +0 -31
  106. package/esm2022/lib/models/date-format-cloud.model.mjs +0 -18
  107. package/esm2022/lib/models/engine-event-cloud.model.mjs +0 -18
  108. package/esm2022/lib/models/filter-cloud-model.mjs +0 -128
  109. package/esm2022/lib/models/process-definition-cloud.model.mjs +0 -31
  110. package/esm2022/lib/models/process-instance-variable.model.mjs +0 -18
  111. package/esm2022/lib/models/process-variable-filter.model.mjs +0 -18
  112. package/esm2022/lib/models/task-cloud.model.mjs +0 -23
  113. package/esm2022/lib/models/task-list-sorting.model.mjs +0 -40
  114. package/esm2022/lib/models/variable-definition.mjs +0 -18
  115. package/esm2022/lib/people/components/people-cloud.component.mjs +0 -497
  116. package/esm2022/lib/people/models/identity-user.model.mjs +0 -18
  117. package/esm2022/lib/people/people-cloud.module.mjs +0 -33
  118. package/esm2022/lib/people/public-api.mjs +0 -21
  119. package/esm2022/lib/people/services/identity-user.service.mjs +0 -119
  120. package/esm2022/lib/process/process-cloud.module.mjs +0 -40
  121. package/esm2022/lib/process/process-filters/components/edit-process-filter/edit-process-filter-cloud.component.mjs +0 -802
  122. package/esm2022/lib/process/process-filters/components/process-filter-dialog/process-filter-dialog-cloud.component.mjs +0 -59
  123. package/esm2022/lib/process/process-filters/components/process-filters/process-filters-cloud.component.mjs +0 -290
  124. package/esm2022/lib/process/process-filters/models/process-filter-cloud.model.mjs +0 -169
  125. package/esm2022/lib/process/process-filters/process-filters-cloud.module.mjs +0 -44
  126. package/esm2022/lib/process/process-filters/public-api.mjs +0 -23
  127. package/esm2022/lib/process/process-filters/services/process-filter-cloud.service.mjs +0 -405
  128. package/esm2022/lib/process/process-header/components/process-header-cloud.component.mjs +0 -137
  129. package/esm2022/lib/process/process-header/process-header-cloud.module.mjs +0 -33
  130. package/esm2022/lib/process/process-header/public-api.mjs +0 -19
  131. package/esm2022/lib/process/process-list/components/process-list-cloud.component.mjs +0 -583
  132. package/esm2022/lib/process/process-list/datatable/process-list-datatable-adapter.mjs +0 -31
  133. package/esm2022/lib/process/process-list/models/perocess-instance-cloud-view.model.mjs +0 -18
  134. package/esm2022/lib/process/process-list/models/process-cloud-preferences.mjs +0 -24
  135. package/esm2022/lib/process/process-list/models/process-cloud-preset.model.mjs +0 -37
  136. package/esm2022/lib/process/process-list/models/process-cloud-query-request.model.mjs +0 -107
  137. package/esm2022/lib/process/process-list/models/process-list-sorting.model.mjs +0 -40
  138. package/esm2022/lib/process/process-list/process-list-cloud.module.mjs +0 -45
  139. package/esm2022/lib/process/process-list/public-api.mjs +0 -25
  140. package/esm2022/lib/process/process-list/services/process-list-cloud.service.mjs +0 -253
  141. package/esm2022/lib/process/process-list/services/process-task-list-cloud.service.mjs +0 -109
  142. package/esm2022/lib/process/public-api.mjs +0 -23
  143. package/esm2022/lib/process/services/process-cloud.service.mjs +0 -105
  144. package/esm2022/lib/process/start-process/components/start-process-cloud.component.mjs +0 -444
  145. package/esm2022/lib/process/start-process/models/process-instance-cloud.model.mjs +0 -18
  146. package/esm2022/lib/process/start-process/models/process-payload-cloud.model.mjs +0 -26
  147. package/esm2022/lib/process/start-process/models/process-with-form-payload-cloud.model.mjs +0 -26
  148. package/esm2022/lib/process/start-process/public-api.mjs +0 -21
  149. package/esm2022/lib/process/start-process/services/start-process-cloud.service.mjs +0 -125
  150. package/esm2022/lib/process-services-cloud.module.mjs +0 -91
  151. package/esm2022/lib/rich-text-editor/editorjs-config.mjs +0 -101
  152. package/esm2022/lib/rich-text-editor/index.mjs +0 -18
  153. package/esm2022/lib/rich-text-editor/public-api.mjs +0 -19
  154. package/esm2022/lib/rich-text-editor/rich-text-editor.component.mjs +0 -80
  155. package/esm2022/lib/rich-text-editor/rich-text-editor.module.mjs +0 -33
  156. package/esm2022/lib/screen/components/screen-cloud/screen-cloud.component.mjs +0 -154
  157. package/esm2022/lib/screen/models/screen-cloud.model.mjs +0 -18
  158. package/esm2022/lib/screen/public-api.mjs +0 -18
  159. package/esm2022/lib/services/base-cloud.service.mjs +0 -83
  160. package/esm2022/lib/services/cloud-token.service.mjs +0 -23
  161. package/esm2022/lib/services/form-fields.interfaces.mjs +0 -55
  162. package/esm2022/lib/services/local-preference-cloud.service.mjs +0 -115
  163. package/esm2022/lib/services/notification-cloud.service.mjs +0 -45
  164. package/esm2022/lib/services/preference-cloud.interface.mjs +0 -18
  165. package/esm2022/lib/services/public-api.mjs +0 -28
  166. package/esm2022/lib/services/screen-rendering.service.mjs +0 -30
  167. package/esm2022/lib/services/task-list-cloud.service.interface.mjs +0 -18
  168. package/esm2022/lib/services/user-preference-cloud.service.mjs +0 -105
  169. package/esm2022/lib/services/variable-mapper.sevice.mjs +0 -77
  170. package/esm2022/lib/services/web-socket.service.mjs +0 -182
  171. package/esm2022/lib/task/models/start-task-cloud-request.model.mjs +0 -32
  172. package/esm2022/lib/task/models/task-details-cloud.model.mjs +0 -26
  173. package/esm2022/lib/task/models/task.model.mjs +0 -23
  174. package/esm2022/lib/task/public-api.mjs +0 -26
  175. package/esm2022/lib/task/services/task-cloud.service.mjs +0 -272
  176. package/esm2022/lib/task/task-cloud.module.mjs +0 -45
  177. package/esm2022/lib/task/task-filters/components/base-task-filters-cloud.component.mjs +0 -59
  178. package/esm2022/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.mjs +0 -467
  179. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter/edit-service-task-filter-cloud.component.mjs +0 -206
  180. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-task-filter/edit-task-filter-cloud.component.mjs +0 -320
  181. package/esm2022/lib/task/task-filters/components/service-task-filters/service-task-filters-cloud.component.mjs +0 -147
  182. package/esm2022/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.mjs +0 -143
  183. package/esm2022/lib/task/task-filters/components/task-filter-dialog/task-filter-dialog-cloud.component.mjs +0 -73
  184. package/esm2022/lib/task/task-filters/components/task-filters/task-filters-cloud.component.mjs +0 -256
  185. package/esm2022/lib/task/task-filters/models/filter-cloud.model.mjs +0 -207
  186. package/esm2022/lib/task/task-filters/public-api.mjs +0 -27
  187. package/esm2022/lib/task/task-filters/services/service-task-filter-cloud.service.mjs +0 -283
  188. package/esm2022/lib/task/task-filters/services/task-filter-cloud.service.mjs +0 -392
  189. package/esm2022/lib/task/task-filters/task-filters-cloud.module.mjs +0 -56
  190. package/esm2022/lib/task/task-form/components/task-form-cloud/task-form-cloud.component.mjs +0 -199
  191. package/esm2022/lib/task/task-form/components/user-task-cloud/complete-task/complete-task.directive.mjs +0 -89
  192. package/esm2022/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.mjs +0 -259
  193. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/claim-task/claim-task-cloud.directive.mjs +0 -101
  194. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/unclaim-task/unclaim-task-cloud.directive.mjs +0 -87
  195. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/user-task-cloud-buttons.component.mjs +0 -79
  196. package/esm2022/lib/task/task-form/public-api.mjs +0 -21
  197. package/esm2022/lib/task/task-form/task-form.module.mjs +0 -36
  198. package/esm2022/lib/task/task-header/components/task-header-cloud.component.mjs +0 -280
  199. package/esm2022/lib/task/task-header/public-api.mjs +0 -19
  200. package/esm2022/lib/task/task-header/task-header-cloud.module.mjs +0 -33
  201. package/esm2022/lib/task/task-list/components/base-task-list-cloud.component.mjs +0 -331
  202. package/esm2022/lib/task/task-list/components/service-task-list/service-task-list-cloud.component.mjs +0 -116
  203. package/esm2022/lib/task/task-list/components/task-list/datatable/task-list-datatable-adapter.mjs +0 -31
  204. package/esm2022/lib/task/task-list/components/task-list/task-list-cloud.component.mjs +0 -390
  205. package/esm2022/lib/task/task-list/models/service-task-cloud.model.mjs +0 -18
  206. package/esm2022/lib/task/task-list/models/task-cloud-view.model.mjs +0 -18
  207. package/esm2022/lib/task/task-list/public-api.mjs +0 -23
  208. package/esm2022/lib/task/task-list/services/service-task-list-cloud.service.mjs +0 -115
  209. package/esm2022/lib/task/task-list/services/task-list-cloud.service.mjs +0 -178
  210. package/esm2022/lib/task/task-list/task-list-cloud.module.mjs +0 -57
  211. package/esm2022/lib/types.mjs +0 -18
  212. package/esm2022/public-api.mjs +0 -40
@@ -1,583 +0,0 @@
1
- /*!
2
- * @license
3
- * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- */
17
- import { Component, ContentChild, EventEmitter, Inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
18
- import { AppConfigService, ColumnsSelectorComponent, CustomEmptyContentTemplateDirective, CustomLoadingContentTemplateDirective, DataTableComponent, DataTableSchema, EmptyContentComponent, LoadingContentTemplateDirective, MainMenuDataTableTemplateDirective, NoContentTemplateDirective, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core';
19
- import { ProcessListCloudService } from '../services/process-list-cloud.service';
20
- import { BehaviorSubject, combineLatest, Subject } from 'rxjs';
21
- import { processCloudPresetsDefaultModel } from '../models/process-cloud-preset.model';
22
- import { ProcessListRequestModel, ProcessQueryCloudRequestModel } from '../models/process-cloud-query-request.model';
23
- import { ProcessListCloudSortingModel, ProcessListRequestSortingModel } from '../models/process-list-sorting.model';
24
- import { filter, map, switchMap, take, tap } from 'rxjs/operators';
25
- import { PROCESS_LISTS_PREFERENCES_SERVICE_TOKEN } from '../../../services/cloud-token.service';
26
- import { ProcessListCloudPreferences } from '../models/process-cloud-preferences';
27
- import { ProcessListDatatableAdapter } from '../datatable/process-list-datatable-adapter';
28
- import { PROCESS_LIST_CUSTOM_VARIABLE_COLUMN } from '../../../models/data-column-custom-data';
29
- import { VariableMapperService } from '../../../services/variable-mapper.sevice';
30
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
31
- import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
32
- import { TranslateModule } from '@ngx-translate/core';
33
- import { NgIf } from '@angular/common';
34
- import * as i0 from "@angular/core";
35
- import * as i1 from "../services/process-list-cloud.service";
36
- import * as i2 from "@alfresco/adf-core";
37
- import * as i3 from "../../../services/variable-mapper.sevice";
38
- import * as i4 from "@angular/material/progress-spinner";
39
- import * as i5 from "@ngx-translate/core";
40
- const PRESET_KEY = 'adf-cloud-process-list.presets';
41
- /* eslint-disable @typescript-eslint/brace-style */
42
- export class ProcessListCloudComponent extends DataTableSchema {
43
- constructor(processListCloudService, appConfigService, userPreferences, cloudPreferenceService, variableMapperService) {
44
- super(appConfigService, PRESET_KEY, processCloudPresetsDefaultModel);
45
- this.processListCloudService = processListCloudService;
46
- this.userPreferences = userPreferences;
47
- this.cloudPreferenceService = cloudPreferenceService;
48
- this.variableMapperService = variableMapperService;
49
- /** The name of the application. */
50
- this.appName = '';
51
- /** Name of the initiator of the process. */
52
- this.initiator = '';
53
- /** Filter the processes to display only the ones with this ID. */
54
- this.id = '';
55
- /** Filter the processes to display only the ones with this name. */
56
- this.name = '';
57
- /** Filter the processes to display only the ones with this process definition ID. */
58
- this.processDefinitionId = '';
59
- /** Filter the processes to display only the ones with this process definition name. */
60
- this.processDefinitionName = '';
61
- /** Filter the processes to display only the ones with this process definition key. */
62
- this.processDefinitionKey = '';
63
- /** Filter the processes to display only the ones with this status. */
64
- this.status = '';
65
- /** Filter the processes to display only the ones with this businessKey value. */
66
- this.businessKey = '';
67
- /** Filter the processes. Display only process with startedDate greater then the supplied date. */
68
- this.startFrom = '';
69
- /** Filter the processes. Display only process with startedDate less than the supplied date. */
70
- this.startTo = '';
71
- /** Filter the processes. Display only process with completedFrom equal to the supplied date. */
72
- this.completedFrom = '';
73
- /** Filter the processes. Display only process with completedTo equal to the supplied date. */
74
- this.completedTo = '';
75
- /** Filter the processes. Display only process with completedDate equal to the supplied date. */
76
- this.completedDate = '';
77
- /** Filter the processes. Display only process with suspendedFrom equal to the supplied date. */
78
- this.suspendedFrom = '';
79
- /** Filter the processes. Display only process with suspendedTo equal to the supplied date. */
80
- this.suspendedTo = '';
81
- /**
82
- * Row selection mode. Can be "none", "single" or "multiple".
83
- * For multiple mode, you can use Cmd (macOS) or Ctrl (Win) modifier
84
- * key to toggle selection for multiple rows.
85
- */
86
- this.selectionMode = 'single'; // none|single|multiple
87
- /** Toggles multiple row selection and renders checkboxes at the beginning of each row */
88
- this.multiselect = false;
89
- /** Toggles the data actions column. */
90
- this.showActions = false;
91
- /** Toggles the provided actions. */
92
- this.showProvidedActions = false;
93
- /** Position of the actions dropdown menu. Can be "left" or "right". */
94
- this.actionsPosition = 'right'; // left|right
95
- /** Toggles the sticky header mode. */
96
- this.stickyHeader = false;
97
- /** Toggles custom context menu for the component. */
98
- this.showContextMenu = false;
99
- /** Toggle main datatable actions. */
100
- this.showMainDatatableActions = false;
101
- /** Toggles main datatable column resizing feature. */
102
- this.isResizingEnabled = false;
103
- /** From Activiti 8.7.0 forward, use 'POST' value and array inputs to enable advanced filtering. */
104
- this.searchApiMethod = 'GET';
105
- /**
106
- * Filter the processes. Display only processes with names matching any of the supplied strings.
107
- * This input will be used only if searchApiMethod input is provided with 'POST' value.
108
- */
109
- this.names = [];
110
- /**
111
- * Filter the processes. Display only processes with instance Ids matching any of the supplied strings.
112
- * This input will be used only if searchApiMethod input is provided with 'POST' value.
113
- */
114
- this.ids = [];
115
- /**
116
- * Filter the processes. Display only processes with parent Ids matching any of the supplied strings.
117
- * This input will be used only if searchApiMethod input is provided with 'POST' value.
118
- */
119
- this.parentIds = [];
120
- /**
121
- * Filter the processes. Display only processes with definition names matching any of the supplied strings.
122
- * This input will be used only if searchApiMethod input is provided with 'POST' value.
123
- */
124
- this.processDefinitionNames = [];
125
- /**
126
- * Filter the processes. Display only processes started by any of the users whose usernames are present in the array.
127
- * This input will be used only if searchApiMethod input is provided with 'POST' value.
128
- */
129
- this.initiators = [];
130
- /**
131
- * Filter the processes. Display only processes present in any of the specified app versions.
132
- * This input will be used only if searchApiMethod input is provided with 'POST' value.
133
- */
134
- this.appVersions = [];
135
- /**
136
- * Filter the processes. Display only processes with provided statuses.
137
- * This input will be used only if searchApiMethod input is provided with 'POST' value.
138
- */
139
- this.statuses = [];
140
- /** Emitted when a row in the process list is clicked. */
141
- this.rowClick = new EventEmitter();
142
- /** Emitted when rows are selected/unselected. */
143
- this.rowsSelected = new EventEmitter();
144
- /** Emitted before the context menu is displayed for a row. */
145
- this.showRowContextMenu = new EventEmitter();
146
- /** Emitted before the actions menu is displayed for a row. */
147
- this.showRowActionsMenu = new EventEmitter();
148
- /** Emitted when the user executes a row action. */
149
- this.executeRowAction = new EventEmitter();
150
- /** Emitted when an error occurs while loading the list of process instances from the server. */
151
- this.error = new EventEmitter();
152
- /** Emitted when the list of process instances has been loaded successfully from the server. */
153
- this.success = new EventEmitter();
154
- this.skipCount = 0;
155
- this.isLoading = true;
156
- this.rows = [];
157
- this.defaultSorting = { key: 'startDate', direction: 'desc' };
158
- this.fetchProcessesTrigger$ = new Subject();
159
- this.size = userPreferences.paginationSize;
160
- this.userPreferences.select(UserPreferenceValues.PaginationSize).subscribe((pageSize) => {
161
- this.size = pageSize;
162
- });
163
- this.pagination = new BehaviorSubject({
164
- maxItems: this.size,
165
- skipCount: 0,
166
- totalItems: 0
167
- });
168
- combineLatest([this.isColumnSchemaCreated$, this.fetchProcessesTrigger$])
169
- .pipe(tap(() => (this.isLoading = true)), filter(([isColumnSchemaCreated]) => isColumnSchemaCreated), switchMap(() => {
170
- if (this.searchApiMethod === 'POST') {
171
- const requestNode = this.createProcessListRequestNode();
172
- this.processListRequestNode = requestNode;
173
- return this.processListCloudService.fetchProcessList(requestNode).pipe(take(1));
174
- }
175
- else {
176
- const requestNode = this.createRequestNode();
177
- this.requestNode = requestNode;
178
- return this.processListCloudService.getProcessByRequest(requestNode).pipe(take(1));
179
- }
180
- }), takeUntilDestroyed())
181
- .subscribe({
182
- next: (processes) => {
183
- this.rows = this.variableMapperService.mapVariablesByColumnTitle(processes.list.entries, this.columns);
184
- this.dataAdapter = new ProcessListDatatableAdapter(this.rows, this.columns);
185
- this.success.emit(processes);
186
- this.isLoading = false;
187
- this.pagination.next(processes.list.pagination);
188
- },
189
- error: (error) => {
190
- console.error(error);
191
- this.error.emit(error);
192
- this.isLoading = false;
193
- }
194
- });
195
- }
196
- ngAfterContentInit() {
197
- this.cloudPreferenceService
198
- .getPreferences(this.appName)
199
- .pipe(take(1), map((preferences) => {
200
- const preferencesList = preferences?.list?.entries || [];
201
- const columnsOrder = preferencesList.find((preference) => preference.entry.key === ProcessListCloudPreferences.columnOrder);
202
- const columnsVisibility = preferencesList.find((preference) => preference.entry.key === ProcessListCloudPreferences.columnsVisibility);
203
- const columnsWidths = preferencesList.find((preference) => preference.entry.key === ProcessListCloudPreferences.columnsWidths);
204
- return {
205
- columnsOrder: columnsOrder ? JSON.parse(columnsOrder.entry.value) : undefined,
206
- columnsVisibility: columnsVisibility ? JSON.parse(columnsVisibility.entry.value) : this.columnsVisibility,
207
- columnsWidths: columnsWidths ? JSON.parse(columnsWidths.entry.value) : undefined
208
- };
209
- }))
210
- .subscribe(({ columnsOrder, columnsVisibility, columnsWidths }) => {
211
- if (columnsVisibility) {
212
- this.columnsVisibility = columnsVisibility;
213
- }
214
- if (columnsOrder) {
215
- this.columnsOrder = columnsOrder;
216
- }
217
- if (columnsWidths) {
218
- this.columnsWidths = columnsWidths;
219
- }
220
- this.createDatatableSchema();
221
- });
222
- }
223
- ngOnChanges(changes) {
224
- if (this.isPropertyChanged(changes, 'sorting')) {
225
- this.formatSorting(changes['sorting'].currentValue);
226
- }
227
- if (this.isAnyPropertyChanged(changes)) {
228
- this.reload();
229
- }
230
- }
231
- getCurrentId() {
232
- return this.currentInstanceId;
233
- }
234
- reload() {
235
- if (this.appName || this.appName === '') {
236
- this.fetchProcessesTrigger$.next();
237
- }
238
- else {
239
- this.rows = [];
240
- }
241
- }
242
- isAnyPropertyChanged(changes) {
243
- for (const property in changes) {
244
- if (this.isPropertyChanged(changes, property)) {
245
- return true;
246
- }
247
- }
248
- return false;
249
- }
250
- isPropertyChanged(changes, property) {
251
- return Object.prototype.hasOwnProperty.call(changes, property);
252
- }
253
- isListEmpty() {
254
- return !this.rows || this.rows.length === 0;
255
- }
256
- /**
257
- * Resets the pagination values
258
- */
259
- resetPagination() {
260
- this.skipCount = 0;
261
- this.size = this.userPreferences.paginationSize;
262
- this.pagination.next({
263
- skipCount: 0,
264
- maxItems: this.size
265
- });
266
- }
267
- /**
268
- * Resets the pagination values and
269
- * Reloads the process list
270
- *
271
- * @param pagination Pagination values to be set
272
- */
273
- updatePagination(pagination) {
274
- this.size = pagination.maxItems;
275
- this.skipCount = pagination.skipCount;
276
- this.pagination.next(pagination);
277
- this.reload();
278
- }
279
- onSortingChanged(event) {
280
- this.setSorting(event.detail);
281
- this.formatSorting(this.sorting);
282
- this.reload();
283
- }
284
- onColumnOrderChanged(columnsWithNewOrder) {
285
- this.columnsOrder = columnsWithNewOrder.map((column) => column.id);
286
- this.createColumns();
287
- if (this.appName) {
288
- this.cloudPreferenceService.updatePreference(this.appName, ProcessListCloudPreferences.columnOrder, this.columnsOrder);
289
- }
290
- }
291
- onColumnsVisibilityChange(columns) {
292
- this.columnsVisibility = columns.reduce((visibleColumnsMap, column) => {
293
- if (column.isHidden !== undefined) {
294
- visibleColumnsMap[column.id] = !column.isHidden;
295
- }
296
- return visibleColumnsMap;
297
- }, {});
298
- this.createColumns();
299
- this.createDatatableSchema();
300
- if (this.appName) {
301
- this.cloudPreferenceService.updatePreference(this.appName, ProcessListCloudPreferences.columnsVisibility, this.columnsVisibility);
302
- }
303
- }
304
- onColumnsWidthChanged(columns) {
305
- const newColumnsWidths = columns.reduce((widthsColumnsMap, column) => {
306
- if (column.width) {
307
- widthsColumnsMap[column.id] = Math.ceil(column.width);
308
- }
309
- return widthsColumnsMap;
310
- }, {});
311
- this.columnsWidths = { ...this.columnsWidths, ...newColumnsWidths };
312
- this.createColumns();
313
- if (this.appName) {
314
- this.cloudPreferenceService.updatePreference(this.appName, ProcessListCloudPreferences.columnsWidths, this.columnsWidths);
315
- }
316
- }
317
- onRowClick(item) {
318
- this.currentInstanceId = item.value.getValue('id');
319
- this.rowClick.emit(this.currentInstanceId);
320
- }
321
- onRowSelect(event) {
322
- this.selectedInstances = [...event.detail.selection];
323
- this.rowsSelected.emit(this.selectedInstances);
324
- }
325
- onRowUnselect(event) {
326
- this.selectedInstances = [...event.detail.selection];
327
- this.rowsSelected.emit(this.selectedInstances);
328
- }
329
- onRowKeyUp(event) {
330
- if (event.detail.keyboardEvent.key === 'Enter') {
331
- event.preventDefault();
332
- this.currentInstanceId = event.detail.row.getValue('id');
333
- this.rowClick.emit(this.currentInstanceId);
334
- }
335
- }
336
- onShowRowActionsMenu(event) {
337
- this.showRowActionsMenu.emit(event);
338
- }
339
- onShowRowContextMenu(event) {
340
- this.showRowContextMenu.emit(event);
341
- }
342
- onExecuteRowAction(row) {
343
- this.executeRowAction.emit(row);
344
- }
345
- createProcessListRequestNode() {
346
- const requestNode = {
347
- appName: this.appName,
348
- pagination: {
349
- maxItems: this.size,
350
- skipCount: this.skipCount
351
- },
352
- sorting: this.getProcessListRequestSorting(),
353
- name: this.names,
354
- id: this.ids,
355
- parentId: this.parentIds,
356
- processDefinitionName: this.processDefinitionNames,
357
- initiator: this.initiators,
358
- appVersion: this.appVersions,
359
- status: this.statuses,
360
- lastModifiedFrom: this.lastModifiedFrom?.toISOString() || '',
361
- lasModifiedTo: this.lastModifiedTo?.toISOString() || '',
362
- startFrom: this.startFrom,
363
- startTo: this.startTo,
364
- completedFrom: this.completedFrom,
365
- completedTo: this.completedTo,
366
- suspendedFrom: this.suspendedFrom,
367
- suspendedTo: this.suspendedTo,
368
- processVariableKeys: this.getVariableDefinitionsRequestModel(),
369
- processVariableFilters: this.processVariables
370
- };
371
- return new ProcessListRequestModel(requestNode);
372
- }
373
- getProcessListRequestSorting() {
374
- if (!this.sorting?.length) {
375
- return new ProcessListRequestSortingModel({
376
- orderBy: this.defaultSorting.key,
377
- direction: this.defaultSorting.direction,
378
- isFieldProcessVariable: false
379
- });
380
- }
381
- const orderBy = this.sorting[0]?.orderBy;
382
- const direction = this.sorting[0]?.direction;
383
- const orderByColumn = this.columnList?.columns.find((column) => column.key === orderBy);
384
- const isFieldProcessVariable = orderByColumn?.customData?.columnType === 'process-variable-column';
385
- if (isFieldProcessVariable) {
386
- const processDefinitionKey = orderByColumn.customData.variableDefinitionsPayload[0].split('/')[0];
387
- const variableName = orderByColumn.customData.variableDefinitionsPayload[0].split('/')[1];
388
- return new ProcessListRequestSortingModel({
389
- orderBy: variableName,
390
- direction,
391
- isFieldProcessVariable: true,
392
- processVariableData: {
393
- processDefinitionKey,
394
- type: orderByColumn.customData.variableType
395
- }
396
- });
397
- }
398
- else {
399
- return new ProcessListRequestSortingModel({ orderBy, direction, isFieldProcessVariable: false });
400
- }
401
- }
402
- createRequestNode() {
403
- const requestNode = {
404
- appName: this.appName,
405
- appVersion: this.getAppVersions(),
406
- maxItems: this.size,
407
- skipCount: this.skipCount,
408
- initiator: this.initiator,
409
- id: this.id,
410
- environmentId: this.environmentId,
411
- name: this.name,
412
- parentId: this.parentId,
413
- processDefinitionId: this.processDefinitionId,
414
- processDefinitionName: this.processDefinitionName,
415
- processDefinitionKey: this.processDefinitionKey,
416
- status: this.status,
417
- businessKey: this.businessKey,
418
- lastModifiedFrom: this.lastModifiedFrom,
419
- lastModifiedTo: this.lastModifiedTo,
420
- startFrom: this.startFrom,
421
- startTo: this.startTo,
422
- completedFrom: this.completedFrom,
423
- completedTo: this.completedTo,
424
- suspendedFrom: this.suspendedFrom,
425
- suspendedTo: this.suspendedTo,
426
- completedDate: this.completedDate,
427
- sorting: this.sorting,
428
- variableKeys: this.getVariableDefinitionsRequestModel()
429
- };
430
- return new ProcessQueryCloudRequestModel(requestNode);
431
- }
432
- getAppVersions() {
433
- return this.appVersion instanceof Array ? this.appVersion.join(',') : this.appVersion ? String(this.appVersion) : '';
434
- }
435
- setSorting(sortDetail) {
436
- const sorting = sortDetail
437
- ? {
438
- orderBy: sortDetail.key,
439
- direction: sortDetail.direction.toUpperCase()
440
- }
441
- : { ...this.defaultSorting };
442
- this.sorting = [new ProcessListCloudSortingModel(sorting)];
443
- }
444
- formatSorting(sorting) {
445
- this.formattedSorting = this.isValidSorting(sorting) ? [sorting[0].orderBy, sorting[0].direction.toLocaleLowerCase()] : null;
446
- }
447
- isValidSorting(sorting) {
448
- return sorting.length && sorting[0].orderBy && sorting[0].direction;
449
- }
450
- getVariableDefinitionsRequestModel() {
451
- const displayedVariableColumns = this.columns
452
- .filter((column) => column.customData?.columnType === PROCESS_LIST_CUSTOM_VARIABLE_COLUMN && column.isHidden !== true)
453
- .map((column) => {
454
- const variableDefinitionsPayload = column.customData.variableDefinitionsPayload;
455
- return variableDefinitionsPayload;
456
- })
457
- .reduce((variablesPayload, payload) => [...variablesPayload, ...payload], []);
458
- return displayedVariableColumns.length ? displayedVariableColumns : undefined;
459
- }
460
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ProcessListCloudComponent, deps: [{ token: i1.ProcessListCloudService }, { token: i2.AppConfigService }, { token: i2.UserPreferencesService }, { token: PROCESS_LISTS_PREFERENCES_SERVICE_TOKEN }, { token: i3.VariableMapperService }], target: i0.ɵɵFactoryTarget.Component }); }
461
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: ProcessListCloudComponent, isStandalone: true, selector: "adf-cloud-process-list", inputs: { appName: "appName", appVersion: "appVersion", initiator: "initiator", id: "id", environmentId: "environmentId", name: "name", parentId: "parentId", processDefinitionId: "processDefinitionId", processDefinitionName: "processDefinitionName", processDefinitionKey: "processDefinitionKey", status: "status", businessKey: "businessKey", lastModifiedFrom: "lastModifiedFrom", lastModifiedTo: "lastModifiedTo", startFrom: "startFrom", startTo: "startTo", completedFrom: "completedFrom", completedTo: "completedTo", completedDate: "completedDate", suspendedFrom: "suspendedFrom", suspendedTo: "suspendedTo", selectionMode: "selectionMode", multiselect: "multiselect", sorting: "sorting", showActions: "showActions", showProvidedActions: "showProvidedActions", actionsPosition: "actionsPosition", stickyHeader: "stickyHeader", showContextMenu: "showContextMenu", showMainDatatableActions: "showMainDatatableActions", isResizingEnabled: "isResizingEnabled", searchApiMethod: "searchApiMethod", names: "names", ids: "ids", parentIds: "parentIds", processDefinitionNames: "processDefinitionNames", initiators: "initiators", appVersions: "appVersions", statuses: "statuses", processVariables: "processVariables" }, outputs: { rowClick: "rowClick", rowsSelected: "rowsSelected", showRowContextMenu: "showRowContextMenu", showRowActionsMenu: "showRowActionsMenu", executeRowAction: "executeRowAction", error: "error", success: "success" }, queries: [{ propertyName: "emptyCustomContent", first: true, predicate: CustomEmptyContentTemplateDirective, descendants: true }, { propertyName: "customLoadingContent", first: true, predicate: CustomLoadingContentTemplateDirective, descendants: true }], viewQueries: [{ propertyName: "dataTable", first: true, predicate: DataTableComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<adf-datatable\n [rows]=\"rows\"\n [columns]=\"columns\"\n [data]=\"dataAdapter\"\n [stickyHeader]=\"stickyHeader\"\n [loading]=\"isLoading\"\n [sorting]=\"formattedSorting\"\n [selectionMode]=\"selectionMode\"\n [multiselect]=\"multiselect\"\n [actions]=\"showActions\"\n [actionsPosition]=\"actionsPosition\"\n [contextMenu]=\"showContextMenu\"\n [showMainDatatableActions]=\"showMainDatatableActions\"\n [showProvidedActions]=\"showProvidedActions\"\n [isResizingEnabled]=\"isResizingEnabled\"\n (showRowActionsMenu)=\"onShowRowActionsMenu($event)\"\n (showRowContextMenu)=\"onShowRowContextMenu($event)\"\n (executeRowAction)=\"onExecuteRowAction($event)\"\n (rowClick)=\"onRowClick($any($event))\"\n (row-select)=\"onRowSelect($any($event))\"\n (row-unselect)=\"onRowUnselect($any($event))\"\n (row-keyup)=\"onRowKeyUp($any($event))\"\n (sorting-changed)=\"onSortingChanged($any($event))\"\n (columnOrderChanged)=\"onColumnOrderChanged($event)\"\n (columnsWidthChanged)=\"onColumnsWidthChanged($event)\"\n >\n <adf-loading-content-template>\n <ng-template>\n <mat-progress-spinner\n *ngIf=\"!customLoadingContent\"\n class=\"adf-cloud-process-list-loading-margin\"\n [color]=\"'primary'\"\n [mode]=\"'indeterminate'\" />\n <ng-content select=\"adf-custom-loading-content-template\" />\n </ng-template>\n </adf-loading-content-template>\n <adf-no-content-template>\n <ng-template>\n <adf-empty-content *ngIf=\"!emptyCustomContent\"\n icon=\"assessment\"\n [title]=\"'ADF_CLOUD_PROCESS_LIST.MESSAGES.TITLE' | translate\"\n [subtitle]=\"'ADF_CLOUD_PROCESS_LIST.MESSAGES.SUBTITLE'| translate\" />\n <ng-content select=\"adf-custom-empty-content-template\" />\n </ng-template>\n </adf-no-content-template>\n\n <adf-main-menu-datatable-template>\n <ng-template let-mainMenuTrigger>\n <adf-datatable-column-selector\n [columns]=\"columns\"\n [mainMenuTrigger]=\"mainMenuTrigger\"\n (submitColumnsVisibility)=\"onColumnsVisibilityChange($event)\" />\n </ng-template>\n </adf-main-menu-datatable-template>\n</adf-datatable>\n", styles: [".adf-cloud-process-list-loading-margin{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}\n"], dependencies: [{ kind: "component", type: DataTableComponent, selector: "adf-datatable", inputs: ["data", "rows", "sorting", "columns", "selectionMode", "multiselect", "mainTableAction", "actions", "showMainDatatableActions", "showProvidedActions", "actionsPosition", "actionsVisibleOnHover", "fallbackThumbnail", "contextMenu", "rowStyle", "rowStyleClass", "showHeader", "stickyHeader", "loading", "noPermission", "rowMenuCacheEnabled", "resolverFn", "allowFiltering", "isResizingEnabled", "blurOnResize", "displayCheckboxesOnHover", "enableDragRows"], outputs: ["rowClick", "rowDblClick", "showRowContextMenu", "showRowActionsMenu", "executeRowAction", "columnOrderChanged", "columnsWidthChanged", "selectedItemsCountChanged", "dragDropped"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "component", type: ColumnsSelectorComponent, selector: "adf-datatable-column-selector", inputs: ["columns", "mainMenuTrigger", "columnsSorting", "maxColumnsVisible"], outputs: ["submitColumnsVisibility"] }, { kind: "directive", type: MainMenuDataTableTemplateDirective, selector: "adf-main-menu-datatable-template" }, { kind: "component", type: EmptyContentComponent, selector: "adf-empty-content", inputs: ["icon", "title", "subtitle"] }, { kind: "directive", type: NoContentTemplateDirective, selector: "adf-no-content-template, no-content-template" }, { kind: "directive", type: LoadingContentTemplateDirective, selector: "adf-loading-content-template, loading-content-template" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
462
- }
463
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ProcessListCloudComponent, decorators: [{
464
- type: Component,
465
- args: [{ selector: 'adf-cloud-process-list', standalone: true, imports: [
466
- DataTableComponent,
467
- MatProgressSpinnerModule,
468
- TranslateModule,
469
- ColumnsSelectorComponent,
470
- MainMenuDataTableTemplateDirective,
471
- EmptyContentComponent,
472
- NoContentTemplateDirective,
473
- LoadingContentTemplateDirective,
474
- NgIf
475
- ], encapsulation: ViewEncapsulation.None, template: "<adf-datatable\n [rows]=\"rows\"\n [columns]=\"columns\"\n [data]=\"dataAdapter\"\n [stickyHeader]=\"stickyHeader\"\n [loading]=\"isLoading\"\n [sorting]=\"formattedSorting\"\n [selectionMode]=\"selectionMode\"\n [multiselect]=\"multiselect\"\n [actions]=\"showActions\"\n [actionsPosition]=\"actionsPosition\"\n [contextMenu]=\"showContextMenu\"\n [showMainDatatableActions]=\"showMainDatatableActions\"\n [showProvidedActions]=\"showProvidedActions\"\n [isResizingEnabled]=\"isResizingEnabled\"\n (showRowActionsMenu)=\"onShowRowActionsMenu($event)\"\n (showRowContextMenu)=\"onShowRowContextMenu($event)\"\n (executeRowAction)=\"onExecuteRowAction($event)\"\n (rowClick)=\"onRowClick($any($event))\"\n (row-select)=\"onRowSelect($any($event))\"\n (row-unselect)=\"onRowUnselect($any($event))\"\n (row-keyup)=\"onRowKeyUp($any($event))\"\n (sorting-changed)=\"onSortingChanged($any($event))\"\n (columnOrderChanged)=\"onColumnOrderChanged($event)\"\n (columnsWidthChanged)=\"onColumnsWidthChanged($event)\"\n >\n <adf-loading-content-template>\n <ng-template>\n <mat-progress-spinner\n *ngIf=\"!customLoadingContent\"\n class=\"adf-cloud-process-list-loading-margin\"\n [color]=\"'primary'\"\n [mode]=\"'indeterminate'\" />\n <ng-content select=\"adf-custom-loading-content-template\" />\n </ng-template>\n </adf-loading-content-template>\n <adf-no-content-template>\n <ng-template>\n <adf-empty-content *ngIf=\"!emptyCustomContent\"\n icon=\"assessment\"\n [title]=\"'ADF_CLOUD_PROCESS_LIST.MESSAGES.TITLE' | translate\"\n [subtitle]=\"'ADF_CLOUD_PROCESS_LIST.MESSAGES.SUBTITLE'| translate\" />\n <ng-content select=\"adf-custom-empty-content-template\" />\n </ng-template>\n </adf-no-content-template>\n\n <adf-main-menu-datatable-template>\n <ng-template let-mainMenuTrigger>\n <adf-datatable-column-selector\n [columns]=\"columns\"\n [mainMenuTrigger]=\"mainMenuTrigger\"\n (submitColumnsVisibility)=\"onColumnsVisibilityChange($event)\" />\n </ng-template>\n </adf-main-menu-datatable-template>\n</adf-datatable>\n", styles: [".adf-cloud-process-list-loading-margin{margin-left:calc((100% - 100px)/2);margin-right:calc((100% - 100px)/2)}\n"] }]
476
- }], ctorParameters: () => [{ type: i1.ProcessListCloudService }, { type: i2.AppConfigService }, { type: i2.UserPreferencesService }, { type: undefined, decorators: [{
477
- type: Inject,
478
- args: [PROCESS_LISTS_PREFERENCES_SERVICE_TOKEN]
479
- }] }, { type: i3.VariableMapperService }], propDecorators: { dataTable: [{
480
- type: ViewChild,
481
- args: [DataTableComponent]
482
- }], emptyCustomContent: [{
483
- type: ContentChild,
484
- args: [CustomEmptyContentTemplateDirective]
485
- }], customLoadingContent: [{
486
- type: ContentChild,
487
- args: [CustomLoadingContentTemplateDirective]
488
- }], appName: [{
489
- type: Input
490
- }], appVersion: [{
491
- type: Input
492
- }], initiator: [{
493
- type: Input
494
- }], id: [{
495
- type: Input
496
- }], environmentId: [{
497
- type: Input
498
- }], name: [{
499
- type: Input
500
- }], parentId: [{
501
- type: Input
502
- }], processDefinitionId: [{
503
- type: Input
504
- }], processDefinitionName: [{
505
- type: Input
506
- }], processDefinitionKey: [{
507
- type: Input
508
- }], status: [{
509
- type: Input
510
- }], businessKey: [{
511
- type: Input
512
- }], lastModifiedFrom: [{
513
- type: Input
514
- }], lastModifiedTo: [{
515
- type: Input
516
- }], startFrom: [{
517
- type: Input
518
- }], startTo: [{
519
- type: Input
520
- }], completedFrom: [{
521
- type: Input
522
- }], completedTo: [{
523
- type: Input
524
- }], completedDate: [{
525
- type: Input
526
- }], suspendedFrom: [{
527
- type: Input
528
- }], suspendedTo: [{
529
- type: Input
530
- }], selectionMode: [{
531
- type: Input
532
- }], multiselect: [{
533
- type: Input
534
- }], sorting: [{
535
- type: Input
536
- }], showActions: [{
537
- type: Input
538
- }], showProvidedActions: [{
539
- type: Input
540
- }], actionsPosition: [{
541
- type: Input
542
- }], stickyHeader: [{
543
- type: Input
544
- }], showContextMenu: [{
545
- type: Input
546
- }], showMainDatatableActions: [{
547
- type: Input
548
- }], isResizingEnabled: [{
549
- type: Input
550
- }], searchApiMethod: [{
551
- type: Input
552
- }], names: [{
553
- type: Input
554
- }], ids: [{
555
- type: Input
556
- }], parentIds: [{
557
- type: Input
558
- }], processDefinitionNames: [{
559
- type: Input
560
- }], initiators: [{
561
- type: Input
562
- }], appVersions: [{
563
- type: Input
564
- }], statuses: [{
565
- type: Input
566
- }], processVariables: [{
567
- type: Input
568
- }], rowClick: [{
569
- type: Output
570
- }], rowsSelected: [{
571
- type: Output
572
- }], showRowContextMenu: [{
573
- type: Output
574
- }], showRowActionsMenu: [{
575
- type: Output
576
- }], executeRowAction: [{
577
- type: Output
578
- }], error: [{
579
- type: Output
580
- }], success: [{
581
- type: Output
582
- }] } });
583
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy1saXN0LWNsb3VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvcHJvY2Vzcy9wcm9jZXNzLWxpc3QvY29tcG9uZW50cy9wcm9jZXNzLWxpc3QtY2xvdWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3Byb2Nlc3Mtc2VydmljZXMtY2xvdWQvc3JjL2xpYi9wcm9jZXNzL3Byb2Nlc3MtbGlzdC9jb21wb25lbnRzL3Byb2Nlc3MtbGlzdC1jbG91ZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN4QixtQ0FBbUMsRUFDbkMscUNBQXFDLEVBS3JDLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLCtCQUErQixFQUMvQixrQ0FBa0MsRUFDbEMsMEJBQTBCLEVBRzFCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDdkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLDZCQUE2QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckgsT0FBTyxF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QkFEVixLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFRTixnQkFBZ0I7c0JBRGYsS0FBSztnQkFLTixRQUFRO3NCQURQLE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQUtQLGtCQUFrQjtzQkFEakIsTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AsZ0JBQWdCO3NCQURmLE1BQU07Z0JBS1AsS0FBSztzQkFESixNQUFNO2dCQUtQLE9BQU87c0JBRE4sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBcHBDb25maWdTZXJ2aWNlLFxuICAgIENvbHVtbnNTZWxlY3RvckNvbXBvbmVudCxcbiAgICBDdXN0b21FbXB0eUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBDdXN0b21Mb2FkaW5nQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIERhdGFDZWxsRXZlbnQsXG4gICAgRGF0YUNvbHVtbixcbiAgICBEYXRhUm93QWN0aW9uRXZlbnQsXG4gICAgRGF0YVJvd0V2ZW50LFxuICAgIERhdGFUYWJsZUNvbXBvbmVudCxcbiAgICBEYXRhVGFibGVTY2hlbWEsXG4gICAgRW1wdHlDb250ZW50Q29tcG9uZW50LFxuICAgIExvYWRpbmdDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgTWFpbk1lbnVEYXRhVGFibGVUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBOb0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBQYWdpbmF0ZWRDb21wb25lbnQsXG4gICAgUGFnaW5hdGlvbk1vZGVsLFxuICAgIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgVXNlclByZWZlcmVuY2VWYWx1ZXNcbn0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IFByb2Nlc3NMaXN0Q2xvdWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvY2Vzcy1saXN0LWNsb3VkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBwcm9jZXNzQ2xvdWRQcmVzZXRzRGVmYXVsdE1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3Byb2Nlc3MtY2xvdWQtcHJlc2V0Lm1vZGVsJztcbmltcG9ydCB7IFByb2Nlc3NMaXN0UmVxdWVzdE1vZGVsLCBQcm9jZXNzUXVlcnlDbG91ZFJlcXVlc3RNb2RlbCB9IGZyb20gJy4uL21vZGVscy9wcm9jZXNzLWNsb3VkLXF1ZXJ5LXJlcXVlc3QubW9kZWwnO1xuaW1wb3J0IHsgUHJvY2Vzc0xpc3RDbG91ZFNvcnRpbmdNb2RlbCwgUHJvY2Vzc0xpc3RSZXF1ZXN0U29ydGluZ01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL3Byb2Nlc3MtbGlzdC1zb3J0aW5nLm1vZGVsJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFByZWZlcmVuY2VDbG91ZFNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVmZXJlbmNlLWNsb3VkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQUk9DRVNTX0xJU1RTX1BSRUZFUkVOQ0VTX1NFUlZJQ0VfVE9LRU4gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jbG91ZC10b2tlbi5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2Nlc3NMaXN0Q2xvdWRQcmVmZXJlbmNlcyB9IGZyb20gJy4uL21vZGVscy9wcm9jZXNzLWNsb3VkLXByZWZlcmVuY2VzJztcbmltcG9ydCB7IFByb2Nlc3NMaXN0RGF0YXRhYmxlQWRhcHRlciB9IGZyb20gJy4uL2RhdGF0YWJsZS9wcm9jZXNzLWxpc3QtZGF0YXRhYmxlLWFkYXB0ZXInO1xuaW1wb3J0IHsgUFJPQ0VTU19MSVNUX0NVU1RPTV9WQVJJQUJMRV9DT0xVTU4sIFByb2Nlc3NMaXN0RGF0YUNvbHVtbkN1c3RvbURhdGEgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZGF0YS1jb2x1bW4tY3VzdG9tLWRhdGEnO1xuaW1wb3J0IHsgVmFyaWFibGVNYXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdmFyaWFibGUtbWFwcGVyLnNldmljZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBQcm9jZXNzVmFyaWFibGVGaWx0ZXJNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9wcm9jZXNzLXZhcmlhYmxlLWZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmNvbnN0IFBSRVNFVF9LRVkgPSAnYWRmLWNsb3VkLXByb2Nlc3MtbGlzdC5wcmVzZXRzJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2JyYWNlLXN0eWxlICovXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWNsb3VkLXByb2Nlc3MtbGlzdCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIERhdGFUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIENvbHVtbnNTZWxlY3RvckNvbXBvbmVudCxcbiAgICAgICAgTWFpbk1lbnVEYXRhVGFibGVUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgRW1wdHlDb250ZW50Q29tcG9uZW50LFxuICAgICAgICBOb0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgTG9hZGluZ0NvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgTmdJZlxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2Nlc3MtbGlzdC1jbG91ZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcHJvY2Vzcy1saXN0LWNsb3VkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBQcm9jZXNzTGlzdENsb3VkQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBEYXRhVGFibGVTY2hlbWE8UHJvY2Vzc0xpc3REYXRhQ29sdW1uQ3VzdG9tRGF0YT5cbiAgICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgUGFnaW5hdGVkQ29tcG9uZW50XG57XG4gICAgQFZpZXdDaGlsZChEYXRhVGFibGVDb21wb25lbnQpIGRhdGFUYWJsZTogRGF0YVRhYmxlQ29tcG9uZW50O1xuXG4gICAgQENvbnRlbnRDaGlsZChDdXN0b21FbXB0eUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgICBlbXB0eUN1c3RvbUNvbnRlbnQ6IEN1c3RvbUVtcHR5Q29udGVudFRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgQENvbnRlbnRDaGlsZChDdXN0b21Mb2FkaW5nQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIGN1c3RvbUxvYWRpbmdDb250ZW50OiBDdXN0b21Mb2FkaW5nQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFwcE5hbWU6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIFRoZSB2ZXJzaW9uIG9mIHRoZSBhcHBsaWNhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFwcFZlcnNpb246IG51bWJlciB8IG51bWJlcltdO1xuXG4gICAgLyoqIE5hbWUgb2YgdGhlIGluaXRpYXRvciBvZiB0aGUgcHJvY2Vzcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGluaXRpYXRvcjogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogRmlsdGVyIHRoZSBwcm9jZXNzZXMgdG8gZGlzcGxheSBvbmx5IHRoZSBvbmVzIHdpdGggdGhpcyBJRC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBGaWx0ZXIgdGhlIHByb2Nlc3NlcyB0byBkaXNwbGF5IG9ubHkgdGhlIG9uZXMgd2l0aCB0aGlzIGVudmlyb25tZW50IElELiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW52aXJvbm1lbnRJZDogc3RyaW5nO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzIHRvIGRpc3BsYXkgb25seSB0aGUgb25lcyB3aXRoIHRoaXMgbmFtZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIG5hbWU6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzIHRvIGRpc3BsYXkgb25seSB0aGUgb25lcyB3aXRoIHRoaXMgcGFyZW50SWQuICovXG4gICAgQElucHV0KClcbiAgICBwYXJlbnRJZD86IHN0cmluZztcblxuICAgIC8qKiBGaWx0ZXIgdGhlIHByb2Nlc3NlcyB0byBkaXNwbGF5IG9ubHkgdGhlIG9uZXMgd2l0aCB0aGlzIHByb2Nlc3MgZGVmaW5pdGlvbiBJRC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHByb2Nlc3NEZWZpbml0aW9uSWQ6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzIHRvIGRpc3BsYXkgb25seSB0aGUgb25lcyB3aXRoIHRoaXMgcHJvY2VzcyBkZWZpbml0aW9uIG5hbWUuICovXG4gICAgQElucHV0KClcbiAgICBwcm9jZXNzRGVmaW5pdGlvbk5hbWU6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzIHRvIGRpc3BsYXkgb25seSB0aGUgb25lcyB3aXRoIHRoaXMgcHJvY2VzcyBkZWZpbml0aW9uIGtleS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHByb2Nlc3NEZWZpbml0aW9uS2V5OiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBGaWx0ZXIgdGhlIHByb2Nlc3NlcyB0byBkaXNwbGF5IG9ubHkgdGhlIG9uZXMgd2l0aCB0aGlzIHN0YXR1cy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXR1czogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogRmlsdGVyIHRoZSBwcm9jZXNzZXMgdG8gZGlzcGxheSBvbmx5IHRoZSBvbmVzIHdpdGggdGhpcyBidXNpbmVzc0tleSB2YWx1ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGJ1c2luZXNzS2V5OiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBGaWx0ZXIgdGhlIHByb2Nlc3Nlcy4gRGlzcGxheSBvbmx5IHByb2Nlc3Mgd2l0aCBsYXN0TW9kaWZpZWRUbyBlcXVhbCB0byB0aGUgc3VwcGxpZWQgZGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxhc3RNb2RpZmllZEZyb206IERhdGU7XG5cbiAgICAvKiogRmlsdGVyIHRoZSBwcm9jZXNzZXMuIERpc3BsYXkgb25seSBwcm9jZXNzIHdpdGggbGFzdE1vZGlmaWVkVG8gZXF1YWwgdG8gdGhlIHN1cHBsaWVkIGRhdGUuICovXG4gICAgQElucHV0KClcbiAgICBsYXN0TW9kaWZpZWRUbzogRGF0ZTtcblxuICAgIC8qKiBGaWx0ZXIgdGhlIHByb2Nlc3Nlcy4gRGlzcGxheSBvbmx5IHByb2Nlc3Mgd2l0aCBzdGFydGVkRGF0ZSBncmVhdGVyIHRoZW4gdGhlIHN1cHBsaWVkIGRhdGUuICovXG4gICAgQElucHV0KClcbiAgICBzdGFydEZyb206IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzLiBEaXNwbGF5IG9ubHkgcHJvY2VzcyB3aXRoIHN0YXJ0ZWREYXRlIGxlc3MgdGhhbiB0aGUgc3VwcGxpZWQgZGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXJ0VG86IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzLiBEaXNwbGF5IG9ubHkgcHJvY2VzcyB3aXRoIGNvbXBsZXRlZEZyb20gZXF1YWwgdG8gdGhlIHN1cHBsaWVkIGRhdGUuICovXG4gICAgQElucHV0KClcbiAgICBjb21wbGV0ZWRGcm9tOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBGaWx0ZXIgdGhlIHByb2Nlc3Nlcy4gRGlzcGxheSBvbmx5IHByb2Nlc3Mgd2l0aCBjb21wbGV0ZWRUbyBlcXVhbCB0byB0aGUgc3VwcGxpZWQgZGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbXBsZXRlZFRvOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBGaWx0ZXIgdGhlIHByb2Nlc3Nlcy4gRGlzcGxheSBvbmx5IHByb2Nlc3Mgd2l0aCBjb21wbGV0ZWREYXRlIGVxdWFsIHRvIHRoZSBzdXBwbGllZCBkYXRlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29tcGxldGVkRGF0ZTogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogRmlsdGVyIHRoZSBwcm9jZXNzZXMuIERpc3BsYXkgb25seSBwcm9jZXNzIHdpdGggc3VzcGVuZGVkRnJvbSBlcXVhbCB0byB0aGUgc3VwcGxpZWQgZGF0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN1c3BlbmRlZEZyb206IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIEZpbHRlciB0aGUgcHJvY2Vzc2VzLiBEaXNwbGF5IG9ubHkgcHJvY2VzcyB3aXRoIHN1c3BlbmRlZFRvIGVxdWFsIHRvIHRoZSBzdXBwbGllZCBkYXRlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3VzcGVuZGVkVG86IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogUm93IHNlbGVjdGlvbiBtb2RlLiBDYW4gYmUgXCJub25lXCIsIFwic2luZ2xlXCIgb3IgXCJtdWx0aXBsZVwiLlxuICAgICAqIEZvciBtdWx0aXBsZSBtb2RlLCB5b3UgY2FuIHVzZSBDbWQgKG1hY09TKSBvciBDdHJsIChXaW4pIG1vZGlmaWVyXG4gICAgICoga2V5IHRvIHRvZ2dsZSBzZWxlY3Rpb24gZm9yIG11bHRpcGxlIHJvd3MuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgPSAnc2luZ2xlJzsgLy8gbm9uZXxzaW5nbGV8bXVsdGlwbGVcblxuICAgIC8qKiBUb2dnbGVzIG11bHRpcGxlIHJvdyBzZWxlY3Rpb24gYW5kIHJlbmRlcnMgY2hlY2tib3hlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcm93ICovXG4gICAgQElucHV0KClcbiAgICBtdWx0aXNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQXJyYXkgb2Ygb2JqZWN0cyBzcGVjaWZ5aW5nIHRoZSBzb3J0IG9yZGVyIGFuZCBkaXJlY3Rpb24gZm9yIHRoZVxuICAgICAqIGxpc3QuIFRoZSBzb3J0IHBhcmFtZXRlcnMgYXJlIGZvciBCRSBzb3J0aW5nLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc29ydGluZzogUHJvY2Vzc0xpc3RDbG91ZFNvcnRpbmdNb2RlbFtdO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGRhdGEgYWN0aW9ucyBjb2x1bW4uICovXG4gICAgQElucHV0KClcbiAgICBzaG93QWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHByb3ZpZGVkIGFjdGlvbnMuICovXG4gICAgQElucHV0KClcbiAgICBzaG93UHJvdmlkZWRBY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogUG9zaXRpb24gb2YgdGhlIGFjdGlvbnMgZHJvcGRvd24gbWVudS4gQ2FuIGJlIFwibGVmdFwiIG9yIFwicmlnaHRcIi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbnNQb3NpdGlvbjogc3RyaW5nID0gJ3JpZ2h0JzsgLy8gbGVmdHxyaWdodFxuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHN0aWNreSBoZWFkZXIgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0aWNreUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgY3VzdG9tIGNvbnRleHQgbWVudSBmb3IgdGhlIGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dDb250ZXh0TWVudTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZSBtYWluIGRhdGF0YWJsZSBhY3Rpb25zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd01haW5EYXRhdGFibGVBY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyBtYWluIGRhdGF0YWJsZSBjb2x1bW4gcmVzaXppbmcgZmVhdHVyZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlzUmVzaXppbmdFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRnJvbSBBY3Rpdml0aSA4LjcuMCBmb3J3YXJkLCB1c2UgJ1BPU1QnIHZhbHVlIGFuZCBhcnJheSBpbnB1dHMgdG8gZW5hYmxlIGFkdmFuY2VkIGZpbHRlcmluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlYXJjaEFwaU1ldGhvZDogJ0dFVCcgfCAnUE9TVCcgPSAnR0VUJztcblxuICAgIC8qKlxuICAgICAqIEZpbHRlciB0aGUgcHJvY2Vzc2VzLiBEaXNwbGF5IG9ubHkgcHJvY2Vzc2VzIHdpdGggbmFtZXMgbWF0Y2hpbmcgYW55IG9mIHRoZSBzdXBwbGllZCBzdHJpbmdzLlxuICAgICAqIFRoaXMgaW5wdXQgd2lsbCBiZSB1c2VkIG9ubHkgaWYgc2VhcmNoQXBpTWV0aG9kIGlucHV0IGlzIHByb3ZpZGVkIHdpdGggJ1BPU1QnIHZhbHVlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXIgdGhlIHByb2Nlc3Nlcy4gRGlzcGxheSBvbmx5IHByb2Nlc3NlcyB3aXRoIGluc3RhbmNlIElkcyBtYXRjaGluZyBhbnkgb2YgdGhlIHN1cHBsaWVkIHN0cmluZ3MuXG4gICAgICogVGhpcyBpbnB1dCB3aWxsIGJlIHVzZWQgb25seSBpZiBzZWFyY2hBcGlNZXRob2QgaW5wdXQgaXMgcHJvdmlkZWQgd2l0aCAnUE9TVCcgdmFsdWUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXIgdGhlIHByb2Nlc3Nlcy4gRGlzcGxheSBvbmx5IHByb2Nlc3NlcyB3aXRoIHBhcmVudCBJZHMgbWF0Y2hpbmcgYW55IG9mIHRoZSBzdXBwbGllZCBzdHJpbmdzLlxuICAgICAqIFRoaXMgaW5wdXQgd2lsbCBiZSB1c2VkIG9ubHkgaWYgc2VhcmNoQXBpTWV0aG9kIGlucHV0IGlzIHByb3ZpZGVkIHdpdGggJ1BPU1QnIHZhbHVlLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFyZW50SWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogRmlsdGVyIHRoZSBwcm9jZXNzZXMuIERpc3BsYXkgb25seSBwcm9jZXNzZXMgd2l0aCBkZWZpbml0aW9uIG5hbWVzIG1hdGNoaW5nIGFueSBvZiB0aGUgc3VwcGxpZWQgc3RyaW5ncy5cbiAgICAgKiBUaGlzIGlucHV0IHdpbGwgYmUgdXNlZCBvbmx5IGlmIHNlYXJjaEFwaU1ldGhvZCBpbnB1dCBpcyBwcm92aWRlZCB3aXRoICdQT1NUJyB2YWx1ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByb2Nlc3NEZWZpbml0aW9uTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXIgdGhlIHByb2Nlc3Nlcy4gRGlzcGxheSBvbmx5IHByb2Nlc3NlcyBzdGFydGVkIGJ5IGFueSBvZiB0aGUgdXNlcnMgd2hvc2UgdXNlcm5hbWVzIGFyZSBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAgICAgKiBUaGlzIGlucHV0IHdpbGwgYmUgdXNlZCBvbmx5IGlmIHNlYXJjaEFwaU1ldGhvZCBpbnB1dCBpcyBwcm92aWRlZCB3aXRoICdQT1NUJyB2YWx1ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGluaXRpYXRvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXIgdGhlIHByb2Nlc3Nlcy4gRGlzcGxheSBvbmx5IHByb2Nlc3NlcyBwcmVzZW50IGluIGFueSBvZiB0aGUgc3BlY2lmaWVkIGFwcCB2ZXJzaW9ucy5cbiAgICAgKiBUaGlzIGlucHV0IHdpbGwgYmUgdXNlZCBvbmx5IGlmIHNlYXJjaEFwaU1ldGhvZCBpbnB1dCBpcyBwcm92aWRlZCB3aXRoICdQT1NUJyB2YWx1ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFwcFZlcnNpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogRmlsdGVyIHRoZSBwcm9jZXNzZXMuIERpc3BsYXkgb25seSBwcm9jZXNzZXMgd2l0aCBwcm92aWRlZCBzdGF0dXNlcy5cbiAgICAgKiBUaGlzIGlucHV0IHdpbGwgYmUgdXNlZCBvbmx5IGlmIHNlYXJjaEFwaU1ldGhvZCBpbnB1dCBpcyBwcm92aWRlZCB3aXRoICdQT1NUJyB2YWx1ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXR1c2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogRmlsdGVyIHRoZSBwcm9jZXNzZXMuIERpc3BsYXkgb25seSBwcm9jZXNzZXMgd2l0aCBzcGVjaWZpYyBwcm9jZXNzIHZhcmlhYmxlcy5cbiAgICAgKiBUaGlzIGlucHV0IHdpbGwgYmUgdXNlZCBvbmx5IGlmIHNlYXJjaEFwaU1ldGhvZCBpbnB1dCBpcyBwcm92aWRlZCB3aXRoICdQT1NUJyB2YWx1ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHByb2Nlc3NWYXJpYWJsZXM6IFByb2Nlc3NWYXJpYWJsZUZpbHRlck1vZGVsW107XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGEgcm93IGluIHRoZSBwcm9jZXNzIGxpc3QgaXMgY2xpY2tlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByb3dDbGljazogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gcm93cyBhcmUgc2VsZWN0ZWQvdW5zZWxlY3RlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByb3dzU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgYmVmb3JlIHRoZSBjb250ZXh0IG1lbnUgaXMgZGlzcGxheWVkIGZvciBhIHJvdy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzaG93Um93Q29udGV4dE1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFDZWxsRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCBiZWZvcmUgdGhlIGFjdGlvbnMgbWVudSBpcyBkaXNwbGF5ZWQgZm9yIGEgcm93LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNob3dSb3dBY3Rpb25zTWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNlbGxFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgZXhlY3V0ZXMgYSByb3cgYWN0aW9uLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGV4ZWN1dGVSb3dBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFSb3dBY3Rpb25FdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzIHdoaWxlIGxvYWRpbmcgdGhlIGxpc3Qgb2YgcHJvY2VzcyBpbnN0YW5jZXMgZnJvbSB0aGUgc2VydmVyLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBsaXN0IG9mIHByb2Nlc3MgaW5zdGFuY2VzIGhhcyBiZWVuIGxvYWRlZCBzdWNjZXNzZnVsbHkgZnJvbSB0aGUgc2VydmVyLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHN1Y2Nlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIHBhZ2luYXRpb246IEJlaGF2aW9yU3ViamVjdDxQYWdpbmF0aW9uTW9kZWw+O1xuICAgIHNpemU6IG51bWJlcjtcbiAgICBza2lwQ291bnQ6IG51bWJlciA9IDA7XG4gICAgY3VycmVudEluc3RhbmNlSWQ6IHN0cmluZztcbiAgICBzZWxlY3RlZEluc3RhbmNlczogYW55W107XG4gICAgaXNMb2FkaW5nID0gdHJ1ZTtcblxuICAgIHJvd3M6IGFueVtdID0gW107XG4gICAgZm9ybWF0dGVkU29ydGluZzogYW55W107XG4gICAgcmVxdWVzdE5vZGU6IFByb2Nlc3NRdWVyeUNsb3VkUmVxdWVzdE1vZGVsO1xuICAgIHByb2Nlc3NMaXN0UmVxdWVzdE5vZGU6IFByb2Nlc3NMaXN0UmVxdWVzdE1vZGVsO1xuICAgIGRhdGFBZGFwdGVyOiBQcm9jZXNzTGlzdERhdGF0YWJsZUFkYXB0ZXI7XG5cbiAgICBwcml2YXRlIGRlZmF1bHRTb3J0aW5nID0geyBrZXk6ICdzdGFydERhdGUnLCBkaXJlY3Rpb246ICdkZXNjJyB9O1xuXG4gICAgcHJpdmF0ZSBmZXRjaFByb2Nlc3Nlc1RyaWdnZXIkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHByb2Nlc3NMaXN0Q2xvdWRTZXJ2aWNlOiBQcm9jZXNzTGlzdENsb3VkU2VydmljZSxcbiAgICAgICAgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZXM6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoUFJPQ0VTU19MSVNUU19QUkVGRVJFTkNFU19TRVJWSUNFX1RPS0VOKSBwcml2YXRlIGNsb3VkUHJlZmVyZW5jZVNlcnZpY2U6IFByZWZlcmVuY2VDbG91ZFNlcnZpY2VJbnRlcmZhY2UsXG4gICAgICAgIHByaXZhdGUgdmFyaWFibGVNYXBwZXJTZXJ2aWNlOiBWYXJpYWJsZU1hcHBlclNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoYXBwQ29uZmlnU2VydmljZSwgUFJFU0VUX0tFWSwgcHJvY2Vzc0Nsb3VkUHJlc2V0c0RlZmF1bHRNb2RlbCk7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHVzZXJQcmVmZXJlbmNlcy5wYWdpbmF0aW9uU2l6ZTtcbiAgICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZXMuc2VsZWN0KFVzZXJQcmVmZXJlbmNlVmFsdWVzLlBhZ2luYXRpb25TaXplKS5zdWJzY3JpYmUoKHBhZ2VTaXplKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNpemUgPSBwYWdlU2l6ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFnaW5hdGlvbk1vZGVsPih7XG4gICAgICAgICAgICBtYXhJdGVtczogdGhpcy5zaXplLFxuICAgICAgICAgICAgc2tpcENvdW50OiAwLFxuICAgICAgICAgICAgdG90YWxJdGVtczogMFxuICAgICAgICB9KTtcblxuICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLmlzQ29sdW1uU2NoZW1hQ3JlYXRlZCQsIHRoaXMuZmV0Y2hQcm9jZXNzZXNUcmlnZ2VyJF0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gKHRoaXMuaXNMb2FkaW5nID0gdHJ1ZSkpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoW2lzQ29sdW1uU2NoZW1hQ3JlYXRlZF0pID0+IGlzQ29sdW1uU2NoZW1hQ3JlYXRlZCksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoQXBpTWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3ROb2RlID0gdGhpcy5jcmVhdGVQcm9jZXNzTGlzdFJlcXVlc3ROb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NMaXN0UmVxdWVzdE5vZGUgPSByZXF1ZXN0Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NMaXN0Q2xvdWRTZXJ2aWNlLmZldGNoUHJvY2Vzc0xpc3QocmVxdWVzdE5vZGUpLnBpcGUodGFrZSgxKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0Tm9kZSA9IHRoaXMuY3JlYXRlUmVxdWVzdE5vZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdE5vZGUgPSByZXF1ZXN0Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NMaXN0Q2xvdWRTZXJ2aWNlLmdldFByb2Nlc3NCeVJlcXVlc3QocmVxdWVzdE5vZGUpLnBpcGUodGFrZSgxKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKHByb2Nlc3NlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd3MgPSB0aGlzLnZhcmlhYmxlTWFwcGVyU2VydmljZS5tYXBWYXJpYWJsZXNCeUNvbHVtblRpdGxlKHByb2Nlc3Nlcy5saXN0LmVudHJpZXMsIHRoaXMuY29sdW1ucyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhQWRhcHRlciA9IG5ldyBQcm9jZXNzTGlzdERhdGF0YWJsZUFkYXB0ZXIodGhpcy5yb3dzLCB0aGlzLmNvbHVtbnMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2Vzcy5lbWl0KHByb2Nlc3Nlcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbi5uZXh0KHByb2Nlc3Nlcy5saXN0LnBhZ2luYXRpb24pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvci5lbWl0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuY2xvdWRQcmVmZXJlbmNlU2VydmljZVxuICAgICAgICAgICAgLmdldFByZWZlcmVuY2VzKHRoaXMuYXBwTmFtZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgbWFwKChwcmVmZXJlbmNlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmVmZXJlbmNlc0xpc3QgPSBwcmVmZXJlbmNlcz8ubGlzdD8uZW50cmllcyB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uc09yZGVyID0gcHJlZmVyZW5jZXNMaXN0LmZpbmQoKHByZWZlcmVuY2UpID0+IHByZWZlcmVuY2UuZW50cnkua2V5ID09PSBQcm9jZXNzTGlzdENsb3VkUHJlZmVyZW5jZXMuY29sdW1uT3JkZXIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zVmlzaWJpbGl0eSA9IHByZWZlcmVuY2VzTGlzdC5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHByZWZlcmVuY2UpID0+IHByZWZlcmVuY2UuZW50cnkua2V5ID09PSBQcm9jZXNzTGlzdENsb3VkUHJlZmVyZW5jZXMuY29sdW1uc1Zpc2liaWxpdHlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uc1dpZHRocyA9IHByZWZlcmVuY2VzTGlzdC5maW5kKChwcmVmZXJlbmNlKSA9PiBwcmVmZXJlbmNlLmVudHJ5LmtleSA9PT0gUHJvY2Vzc0xpc3RDbG91ZFByZWZlcmVuY2VzLmNvbHVtbnNXaWR0aHMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zT3JkZXI6IGNvbHVtbnNPcmRlciA/IEpTT04ucGFyc2UoY29sdW1uc09yZGVyLmVudHJ5LnZhbHVlKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNWaXNpYmlsaXR5OiBjb2x1bW5zVmlzaWJpbGl0eSA/IEpTT04ucGFyc2UoY29sdW1uc1Zpc2liaWxpdHkuZW50cnkudmFsdWUpIDogdGhpcy5jb2x1bW5zVmlzaWJpbGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNXaWR0aHM6IGNvbHVtbnNXaWR0aHMgPyBKU09OLnBhcnNlKGNvbHVtbnNXaWR0aHMuZW50cnkudmFsdWUpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgY29sdW1uc09yZGVyLCBjb2x1bW5zVmlzaWJpbGl0eSwgY29sdW1uc1dpZHRocyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbnNWaXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1Zpc2liaWxpdHkgPSBjb2x1bW5zVmlzaWJpbGl0eTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uc09yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc09yZGVyID0gY29sdW1uc09yZGVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5zV2lkdGhzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1dpZHRocyA9IGNvbHVtbnNXaWR0aHM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEYXRhdGFibGVTY2hlbWEoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKGNoYW5nZXMsICdzb3J0aW5nJykpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0U29ydGluZyhjaGFuZ2VzWydzb3J0aW5nJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzQW55UHJvcGVydHlDaGFuZ2VkKGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0Q3VycmVudElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRJbnN0YW5jZUlkO1xuICAgIH1cblxuICAgIHJlbG9hZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYXBwTmFtZSB8fCB0aGlzLmFwcE5hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLmZldGNoUHJvY2Vzc2VzVHJpZ2dlciQubmV4dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3dzID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQW55UHJvcGVydHlDaGFuZ2VkKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1Byb3BlcnR5Q2hhbmdlZChjaGFuZ2VzLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Byb3BlcnR5Q2hhbmdlZChjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzLCBwcm9wZXJ0eTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgcHJvcGVydHkpO1xuICAgIH1cblxuICAgIGlzTGlzdEVtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMucm93cyB8fCB0aGlzLnJvd3MubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgcGFnaW5hdGlvbiB2YWx1ZXNcbiAgICAgKi9cbiAgICByZXNldFBhZ2luYXRpb24oKSB7XG4gICAgICAgIHRoaXMuc2tpcENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5zaXplID0gdGhpcy51c2VyUHJlZmVyZW5jZXMucGFnaW5hdGlvblNpemU7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5uZXh0KHtcbiAgICAgICAgICAgIHNraXBDb3VudDogMCxcbiAgICAgICAgICAgIG1heEl0ZW1zOiB0aGlzLnNpemVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBwYWdpbmF0aW9uIHZhbHVlcyBhbmRcbiAgICAgKiBSZWxvYWRzIHRoZSBwcm9jZXNzIGxpc3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYWdpbmF0aW9uIFBhZ2luYXRpb24gdmFsdWVzIHRvIGJlIHNldFxuICAgICAqL1xuICAgIHVwZGF0ZVBhZ2luYXRpb24ocGFnaW5hdGlvbjogUGFnaW5hdGlvbk1vZGVsKSB7XG4gICAgICAgIHRoaXMuc2l6ZSA9IHBhZ2luYXRpb24ubWF4SXRlbXM7XG4gICAgICAgIHRoaXMuc2tpcENvdW50ID0gcGFnaW5hdGlvbi5za2lwQ291bnQ7XG4gICAgICAgIHRoaXMucGFnaW5hdGlvbi5uZXh0KHBhZ2luYXRpb24pO1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgIH1cblxuICAgIG9uU29ydGluZ0NoYW5nZWQoZXZlbnQ6IEN1c3RvbUV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2V0U29ydGluZyhldmVudC5kZXRhaWwpO1xuICAgICAgICB0aGlzLmZvcm1hdFNvcnRpbmcodGhpcy5zb3J0aW5nKTtcbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICBvbkNvbHVtbk9yZGVyQ2hhbmdlZChjb2x1bW5zV2l0aE5ld09yZGVyOiBEYXRhQ29sdW1uW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zT3JkZXIgPSBjb2x1bW5zV2l0aE5ld09yZGVyLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uaWQpO1xuICAgICAgICB0aGlzLmNyZWF0ZUNvbHVtbnMoKTtcblxuICAgICAgICBpZiAodGhpcy5hcHBOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3VkUHJlZmVyZW5jZVNlcnZpY2UudXBkYXRlUHJlZmVyZW5jZSh0aGlzLmFwcE5hbWUsIFByb2Nlc3NMaXN0Q2xvdWRQcmVmZXJlbmNlcy5jb2x1bW5PcmRlciwgdGhpcy5jb2x1bW5zT3JkZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Db2x1bW5zVmlzaWJpbGl0eUNoYW5nZShjb2x1bW5zOiBEYXRhQ29sdW1uW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zVmlzaWJpbGl0eSA9IGNvbHVtbnMucmVkdWNlKCh2aXNpYmxlQ29sdW1uc01hcCwgY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmlzSGlkZGVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlQ29sdW1uc01hcFtjb2x1bW4uaWRdID0gIWNvbHVtbi5pc0hpZGRlbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZpc2libGVDb2x1bW5zTWFwO1xuICAgICAgICB9LCB7fSk7XG5cbiAgICAgICAgdGhpcy5jcmVhdGVDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlRGF0YXRhYmxlU2NoZW1hKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYXBwTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5jbG91ZFByZWZlcmVuY2VTZXJ2aWNlLnVwZGF0ZVByZWZlcmVuY2UodGhpcy5hcHBOYW1lLCBQcm9jZXNzTGlzdENsb3VkUHJlZmVyZW5jZXMuY29sdW1uc1Zpc2liaWxpdHksIHRoaXMuY29sdW1uc1Zpc2liaWxpdHkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Db2x1bW5zV2lkdGhDaGFuZ2VkKGNvbHVtbnM6IERhdGFDb2x1bW5bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdDb2x1bW5zV2lkdGhzID0gY29sdW1ucy5yZWR1Y2UoKHdpZHRoc0NvbHVtbnNNYXAsIGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi53aWR0aCkge1xuICAgICAgICAgICAgICAgIHdpZHRoc0NvbHVtbnNNYXBbY29sdW1uLmlkXSA9IE1hdGguY2VpbChjb2x1bW4ud2lkdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHdpZHRoc0NvbHVtbnNNYXA7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICB0aGlzLmNvbHVtbnNXaWR0aHMgPSB7IC4uLnRoaXMuY29sdW1uc1dpZHRocywgLi4ubmV3Q29sdW1uc1dpZHRocyB9O1xuXG4gICAgICAgIHRoaXMuY3JlYXRlQ29sdW1ucygpO1xuXG4gICAgICAgIGlmICh0aGlzLmFwcE5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvdWRQcmVmZXJlbmNlU2VydmljZS51cGRhdGVQcmVmZXJlbmNlKHRoaXMuYXBwTmFtZSwgUHJvY2Vzc0xpc3RDbG91ZFByZWZlcmVuY2VzLmNvbHVtbnNXaWR0aHMsIHRoaXMuY29sdW1uc1dpZHRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJvd0NsaWNrKGl0ZW06IERhdGFSb3dFdmVudCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRJbnN0YW5jZUlkID0gaXRlbS52YWx1ZS5nZXRWYWx1ZSgnaWQnKTtcbiAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHRoaXMuY3VycmVudEluc3RhbmNlSWQpO1xuICAgIH1cblxuICAgIG9uUm93U2VsZWN0KGV2ZW50OiBDdXN0b21FdmVudCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW5zdGFuY2VzID0gWy4uLmV2ZW50LmRldGFpbC5zZWxlY3Rpb25dO1xuICAgICAgICB0aGlzLnJvd3NTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWRJbnN0YW5jZXMpO1xuICAgIH1cblxuICAgIG9uUm93VW5zZWxlY3QoZXZlbnQ6IEN1c3RvbUV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbnN0YW5jZXMgPSBbLi4uZXZlbnQuZGV0YWlsLnNlbGVjdGlvbl07XG4gICAgICAgIHRoaXMucm93c1NlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZEluc3RhbmNlcyk7XG4gICAgfVxuXG4gICAgb25Sb3dLZXlVcChldmVudDogQ3VzdG9tRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmRldGFpbC5rZXlib2FyZEV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEluc3RhbmNlSWQgPSBldmVudC5kZXRhaWwucm93LmdldFZhbHVlKCdpZCcpO1xuICAgICAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHRoaXMuY3VycmVudEluc3RhbmNlSWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TaG93Um93QWN0aW9uc01lbnUoZXZlbnQ6IERhdGFDZWxsRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zaG93Um93QWN0aW9uc01lbnUuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgb25TaG93Um93Q29udGV4dE1lbnUoZXZlbnQ6IERhdGFDZWxsRXZlbnQpIHtcbiAgICAgICAgdGhpcy5zaG93Um93Q29udGV4dE1lbnUuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgb25FeGVjdXRlUm93QWN0aW9uKHJvdzogRGF0YVJvd0FjdGlvbkV2ZW50KSB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZVJvd0FjdGlvbi5lbWl0KHJvdyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVQcm9jZXNzTGlzdFJlcXVlc3ROb2RlKCk6IFByb2Nlc3NMaXN0UmVxdWVzdE1vZGVsIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdE5vZGU6IFByb2Nlc3NMaXN0UmVxdWVzdE1vZGVsID0ge1xuICAgICAgICAgICAgYXBwTmFtZTogdGhpcy5hcHBOYW1lLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAgIG1heEl0ZW1zOiB0aGlzLnNpemUsXG4gICAgICAgICAgICAgICAgc2tpcENvdW50OiB0aGlzLnNraXBDb3VudFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvcnRpbmc6IHRoaXMuZ2V0UHJvY2Vzc0xpc3RSZXF1ZXN0U29ydGluZygpLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lcyxcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkcyxcbiAgICAgICAgICAgIHBhcmVudElkOiB0aGlzLnBhcmVudElkcyxcbiAgICAgICAgICAgIHByb2Nlc3NEZWZpbml0aW9uTmFtZTogdGhpcy5wcm9jZXNzRGVmaW5pdGlvbk5hbWVzLFxuICAgICAgICAgICAgaW5pdGlhdG9yOiB0aGlzLmluaXRpYXRvcnMsXG4gICAgICAgICAgICBhcHBWZXJzaW9uOiB0aGlzLmFwcFZlcnNpb25zLFxuICAgICAgICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1c2VzLFxuICAgICAgICAgICAgbGFzdE1vZGlmaWVkRnJvbTogdGhpcy5sYXN0TW9kaWZpZWRGcm9tPy50b0lTT1N0cmluZygpIHx8ICcnLFxuICAgICAgICAgICAgbGFzTW9kaWZpZWRUbzogdGhpcy5sYXN0TW9kaWZpZWRUbz8udG9JU09TdHJpbmcoKSB8fCAnJyxcbiAgICAgICAgICAgIHN0YXJ0RnJvbTogdGhpcy5zdGFydEZyb20sXG4gICAgICAgICAgICBzdGFydFRvOiB0aGlzLnN0YXJ0VG8sXG4gICAgICAgICAgICBjb21wbGV0ZWRGcm9tOiB0aGlzLmNvbXBsZXRlZEZyb20sXG4gICAgICAgICAgICBjb21wbGV0ZWRUbzogdGhpcy5jb21wbGV0ZWRUbyxcbiAgICAgICAgICAgIHN1c3BlbmRlZEZyb206IHRoaXMuc3VzcGVuZGVkRnJvbSxcbiAgICAgICAgICAgIHN1c3BlbmRlZFRvOiB0aGlzLnN1c3BlbmRlZFRvLFxuICAgICAgICAgICAgcHJvY2Vzc1ZhcmlhYmxlS2V5czogdGhpcy5nZXRWYXJpYWJsZURlZmluaXRpb25zUmVxdWVzdE1vZGVsKCksXG4gICAgICAgICAgICBwcm9jZXNzVmFyaWFibGVGaWx0ZXJzOiB0aGlzLnByb2Nlc3NWYXJpYWJsZXNcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb2Nlc3NMaXN0UmVxdWVzdE1vZGVsKHJlcXVlc3ROb2RlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2Nlc3NMaXN0UmVxdWVzdFNvcnRpbmcoKTogUHJvY2Vzc0xpc3RSZXF1ZXN0U29ydGluZ01vZGVsIHtcbiAgICAgICAgaWYgKCF0aGlzLnNvcnRpbmc/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNzTGlzdFJlcXVlc3RTb3J0aW5nTW9kZWwoe1xuICAgICAgICAgICAgICAgIG9yZGVyQnk6IHRoaXMuZGVmYXVsdFNvcnRpbmcua2V5LFxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogdGhpcy5kZWZhdWx0U29ydGluZy5kaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgaXNGaWVsZFByb2Nlc3NWYXJpYWJsZTogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3JkZXJCeSA9IHRoaXMuc29ydGluZ1swXT8ub3JkZXJCeTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5zb3J0aW5nWzBdPy5kaXJlY3Rpb247XG4gICAgICAgIGNvbnN0IG9yZGVyQnlDb2x1bW4gPSB0aGlzLmNvbHVtbkxpc3Q/LmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4ua2V5ID09PSBvcmRlckJ5KTtcbiAgICAgICAgY29uc3QgaXNGaWVsZFByb2Nlc3NWYXJpYWJsZSA9IG9yZGVyQnlDb2x1bW4/LmN1c3RvbURhdGE/LmNvbHVtblR5cGUgPT09ICdwcm9jZXNzLXZhcmlhYmxlLWNvbHVtbic7XG5cbiAgICAgICAgaWYgKGlzRmllbGRQcm9jZXNzVmFyaWFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NEZWZpbml0aW9uS2V5ID0gb3JkZXJCeUNvbHVtbi5jdXN0b21EYXRhLnZhcmlhYmxlRGVmaW5pdGlvbnNQYXlsb2FkWzBdLnNwbGl0KCcvJylbMF07XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZU5hbWUgPSBvcmRlckJ5Q29sdW1uLmN1c3RvbURhdGEudmFyaWFibGVEZWZpbml0aW9uc1BheWxvYWRbMF0uc3BsaXQoJy8nKVsxXTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc0xpc3RSZXF1ZXN0U29ydGluZ01vZGVsKHtcbiAgICAgICAgICAgICAgICBvcmRlckJ5OiB2YXJpYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgIGlzRmllbGRQcm9jZXNzVmFyaWFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1ZhcmlhYmxlRGF0YToge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRGVmaW5pdGlvbktleSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogb3JkZXJCeUNvbHVtbi5jdXN0b21EYXRhLnZhcmlhYmxlVHlwZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNzTGlzdFJlcXVlc3RTb3J0aW5nTW9kZWwoeyBvcmRlckJ5LCBkaXJlY3Rpb24sIGlzRmllbGRQcm9jZXNzVmFyaWFibGU6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVSZXF1ZXN0Tm9kZSgpOiBQcm9jZXNzUXVlcnlDbG91ZFJlcXVlc3RNb2RlbCB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3ROb2RlID0ge1xuICAgICAgICAgICAgYXBwTmFtZTogdGhpcy5hcHBOYW1lLFxuICAgICAgICAgICAgYXBwVmVyc2lvbjogdGhpcy5nZXRBcHBWZXJzaW9ucygpLFxuICAgICAgICAgICAgbWF4SXRlbXM6IHRoaXMuc2l6ZSxcbiAgICAgICAgICAgIHNraXBDb3VudDogdGhpcy5za2lwQ291bnQsXG4gICAgICAgICAgICBpbml0aWF0b3I6IHRoaXMuaW5pdGlhdG9yLFxuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBlbnZpcm9ubWVudElkOiB0aGlzLmVudmlyb25tZW50SWQsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBwYXJlbnRJZDogdGhpcy5wYXJlbnRJZCxcbiAgICAgICAgICAgIHByb2Nlc3NEZWZpbml0aW9uSWQ6IHRoaXMucHJvY2Vzc0RlZmluaXRpb25JZCxcbiAgICAgICAgICAgIHByb2Nlc3NEZWZpbml0aW9uTmFtZTogdGhpcy5wcm9jZXNzRGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgICBwcm9jZXNzRGVmaW5pdGlvbktleTogdGhpcy5wcm9jZXNzRGVmaW5pdGlvbktleSxcbiAgICAgICAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICAgICAgICBidXNpbmVzc0tleTogdGhpcy5idXNpbmVzc0tleSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZEZyb206IHRoaXMubGFzdE1vZGlmaWVkRnJvbSxcbiAgICAgICAgICAgIGxhc3RNb2RpZmllZFRvOiB0aGlzLmxhc3RNb2RpZmllZFRvLFxuICAgICAgICAgICAgc3RhcnRGcm9tOiB0aGlzLnN0YXJ0RnJvbSxcbiAgICAgICAgICAgIHN0YXJ0VG86IHRoaXMuc3RhcnRUbyxcbiAgICAgICAgICAgIGNvbXBsZXRlZEZyb206IHRoaXMuY29tcGxldGVkRnJvbSxcbiAgICAgICAgICAgIGNvbXBsZXRlZFRvOiB0aGlzLmNvbXBsZXRlZFRvLFxuICAgICAgICAgICAgc3VzcGVuZGVkRnJvbTogdGhpcy5zdXNwZW5kZWRGcm9tLFxuICAgICAgICAgICAgc3VzcGVuZGVkVG86IHRoaXMuc3VzcGVuZGVkVG8sXG4gICAgICAgICAgICBjb21wbGV0ZWREYXRlOiB0aGlzLmNvbXBsZXRlZERhdGUsXG4gICAgICAgICAgICBzb3J0aW5nOiB0aGlzLnNvcnRpbmcsXG4gICAgICAgICAgICB2YXJpYWJsZUtleXM6IHRoaXMuZ2V0VmFyaWFibGVEZWZpbml0aW9uc1JlcXVlc3RNb2RlbCgpXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9jZXNzUXVlcnlDbG91ZFJlcXVlc3RNb2RlbChyZXF1ZXN0Tm9kZSk7XG4gICAgfVxuXG4gICAgZ2V0QXBwVmVyc2lvbnMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwVmVyc2lvbiBpbnN0YW5jZW9mIEFycmF5ID8gdGhpcy5hcHBWZXJzaW9uLmpvaW4oJywnKSA6IHRoaXMuYXBwVmVyc2lvbiA/IFN0cmluZyh0aGlzLmFwcFZlcnNpb24pIDogJyc7XG4gICAgfVxuXG4gICAgc2V0U29ydGluZyhzb3J0RGV0YWlsKSB7XG4gICAgICAgIGNvbnN0IHNvcnRpbmcgPSBzb3J0RGV0YWlsXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIG9yZGVyQnk6IHNvcnREZXRhaWwua2V5LFxuICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBzb3J0RGV0YWlsLmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogeyAuLi50aGlzLmRlZmF1bHRTb3J0aW5nIH07XG4gICAgICAgIHRoaXMuc29ydGluZyA9IFtuZXcgUHJvY2Vzc0xpc3RDbG91ZFNvcnRpbmdNb2RlbChzb3J0aW5nKV07XG4gICAgfVxuXG4gICAgZm9ybWF0U29ydGluZyhzb3J0aW5nOiBQcm9jZXNzTGlzdENsb3VkU29ydGluZ01vZGVsW10pIHtcbiAgICAgICAgdGhpcy5mb3JtYXR0ZWRTb3J0aW5nID0gdGhpcy5pc1ZhbGlkU29ydGluZyhzb3J0aW5nKSA/IFtzb3J0aW5nWzBdLm9yZGVyQnksIHNvcnRpbmdbMF0uZGlyZWN0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCldIDogbnVsbDtcbiAgICB9XG5cbiAgICBpc1ZhbGlkU29ydGluZyhzb3J0aW5nOiBQcm9jZXNzTGlzdENsb3VkU29ydGluZ01vZGVsW10pIHtcbiAgICAgICAgcmV0dXJuIHNvcnRpbmcubGVuZ3RoICYmIHNvcnRpbmdbMF0ub3JkZXJCeSAmJiBzb3J0aW5nWzBdLmRpcmVjdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhcmlhYmxlRGVmaW5pdGlvbnNSZXF1ZXN0TW9kZWwoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBkaXNwbGF5ZWRWYXJpYWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4gY29sdW1uLmN1c3RvbURhdGE/LmNvbHVtblR5cGUgPT09IFBST0NFU1NfTElTVF9DVVNUT01fVkFSSUFCTEVfQ09MVU1OICYmIGNvbHVtbi5pc0hpZGRlbiAhPT0gdHJ1ZSlcbiAgICAgICAgICAgIC5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlRGVmaW5pdGlvbnNQYXlsb2FkID0gY29sdW1uLmN1c3RvbURhdGEudmFyaWFibGVEZWZpbml0aW9uc1BheWxvYWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhcmlhYmxlRGVmaW5pdGlvbnNQYXlsb2FkO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKHZhcmlhYmxlc1BheWxvYWQsIHBheWxvYWQpID0+IFsuLi52YXJpYWJsZXNQYXlsb2FkLCAuLi5wYXlsb2FkXSwgW10pO1xuXG4gICAgICAgIHJldHVybiBkaXNwbGF5ZWRWYXJpYWJsZUNvbHVtbnMubGVuZ3RoID8gZGlzcGxheWVkVmFyaWFibGVDb2x1bW5zIDogdW5kZWZpbmVkO1xuICAgIH1cbn1cbiIsIjxhZGYtZGF0YXRhYmxlXG4gICAgICAgIFtyb3dzXT1cInJvd3NcIlxuICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgICAgW2RhdGFdPVwiZGF0YUFkYXB0ZXJcIlxuICAgICAgICBbc3RpY2t5SGVhZGVyXT1cInN0aWNreUhlYWRlclwiXG4gICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ1wiXG4gICAgICAgIFtzb3J0aW5nXT1cImZvcm1hdHRlZFNvcnRpbmdcIlxuICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgW211bHRpc2VsZWN0XT1cIm11bHRpc2VsZWN0XCJcbiAgICAgICAgW2FjdGlvbnNdPVwic2hvd0FjdGlvbnNcIlxuICAgICAgICBbYWN0aW9uc1Bvc2l0aW9uXT1cImFjdGlvbnNQb3NpdGlvblwiXG4gICAgICAgIFtjb250ZXh0TWVudV09XCJzaG93Q29udGV4dE1lbnVcIlxuICAgICAgICBbc2hvd01haW5EYXRhdGFibGVBY3Rpb25zXT1cInNob3dNYWluRGF0YXRhYmxlQWN0aW9uc1wiXG4gICAgICAgIFtzaG93UHJvdmlkZWRBY3Rpb25zXT1cInNob3dQcm92aWRlZEFjdGlvbnNcIlxuICAgICAgICBbaXNSZXNpemluZ0VuYWJsZWRdPVwiaXNSZXNpemluZ0VuYWJsZWRcIlxuICAgICAgICAoc2hvd1Jvd0FjdGlvbnNNZW51KT1cIm9uU2hvd1Jvd0FjdGlvbnNNZW51KCRldmVudClcIlxuICAgICAgICAoc2hvd1Jvd0NvbnRleHRNZW51KT1cIm9uU2hvd1Jvd0NvbnRleHRNZW51KCRldmVudClcIlxuICAgICAgICAoZXhlY3V0ZVJvd0FjdGlvbik9XCJvbkV4ZWN1dGVSb3dBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrKCRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAocm93LXNlbGVjdCk9XCJvblJvd1NlbGVjdCgkYW55KCRldmVudCkpXCJcbiAgICAgICAgKHJvdy11bnNlbGVjdCk9XCJvblJvd1Vuc2VsZWN0KCRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAocm93LWtleXVwKT1cIm9uUm93S2V5VXAoJGFueSgkZXZlbnQpKVwiXG4gICAgICAgIChzb3J0aW5nLWNoYW5nZWQpPVwib25Tb3J0aW5nQ2hhbmdlZCgkYW55KCRldmVudCkpXCJcbiAgICAgICAgKGNvbHVtbk9yZGVyQ2hhbmdlZCk9XCJvbkNvbHVtbk9yZGVyQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgKGNvbHVtbnNXaWR0aENoYW5nZWQpPVwib25Db2x1bW5zV2lkdGhDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIDxhZGYtbG9hZGluZy1jb250ZW50LXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjdXN0b21Mb2FkaW5nQ29udGVudFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNsb3VkLXByb2Nlc3MtbGlzdC1sb2FkaW5nLW1hcmdpblwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCIncHJpbWFyeSdcIlxuICAgICAgICAgICAgICAgICAgICBbbW9kZV09XCInaW5kZXRlcm1pbmF0ZSdcIiAvPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImFkZi1jdXN0b20tbG9hZGluZy1jb250ZW50LXRlbXBsYXRlXCIgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYWRmLWxvYWRpbmctY29udGVudC10ZW1wbGF0ZT5cbiAgICAgICAgPGFkZi1uby1jb250ZW50LXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxhZGYtZW1wdHktY29udGVudCAqbmdJZj1cIiFlbXB0eUN1c3RvbUNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiYXNzZXNzbWVudFwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQURGX0NMT1VEX1BST0NFU1NfTElTVC5NRVNTQUdFUy5USVRMRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbc3VidGl0bGVdPVwiJ0FERl9DTE9VRF9QUk9DRVNTX0xJU1QuTUVTU0FHRVMuU1VCVElUTEUnfCB0cmFuc2xhdGVcIiAvPlxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImFkZi1jdXN0b20tZW1wdHktY29udGVudC10ZW1wbGF0ZVwiIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2FkZi1uby1jb250ZW50LXRlbXBsYXRlPlxuXG4gICAgICAgIDxhZGYtbWFpbi1tZW51LWRhdGF0YWJsZS10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtbWFpbk1lbnVUcmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxhZGYtZGF0YXRhYmxlLWNvbHVtbi1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgW21haW5NZW51VHJpZ2dlcl09XCJtYWluTWVudVRyaWdnZXJcIlxuICAgICAgICAgICAgICAgICAgICAoc3VibWl0Q29sdW1uc1Zpc2liaWxpdHkpPVwib25Db2x1bW5zVmlzaWJpbGl0eUNoYW5nZSgkZXZlbnQpXCIgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYWRmLW1haW4tbWVudS1kYXRhdGFibGUtdGVtcGxhdGU+XG48L2FkZi1kYXRhdGFibGU+XG4iXX0=