nuxeo-development-framework 4.3.1 → 4.3.3

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 (214) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +4365 -3037
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/charts/chart.const.js +3 -0
  4. package/esm2015/lib/components/charts/chart.token.js +3 -0
  5. package/esm2015/lib/components/charts/charts.module.js +19 -0
  6. package/esm2015/lib/components/charts/components/base-chart.component.js +44 -0
  7. package/esm2015/lib/components/charts/components/chart.component.js +135 -0
  8. package/esm2015/lib/components/charts/components/data-chart.component.js +169 -0
  9. package/esm2015/lib/components/charts/components/index.js +4 -0
  10. package/esm2015/lib/components/charts/defaults/bar.js +18 -0
  11. package/esm2015/lib/components/charts/defaults/doughnut.js +18 -0
  12. package/esm2015/lib/components/charts/defaults/index.js +5 -0
  13. package/esm2015/lib/components/charts/defaults/line.js +36 -0
  14. package/esm2015/lib/components/charts/defaults/pie.js +20 -0
  15. package/esm2015/lib/components/charts/index.js +10 -0
  16. package/esm2015/lib/components/charts/models/index.js +5 -0
  17. package/esm2015/lib/components/charts/models/options.js +2 -0
  18. package/esm2015/lib/components/charts/models/plugins-options.js +2 -0
  19. package/esm2015/lib/components/charts/models/response.js +2 -0
  20. package/esm2015/lib/components/charts/models/statistic-request-config.js +2 -0
  21. package/esm2015/lib/components/charts/plugins/doughnut-center-text.js +25 -0
  22. package/esm2015/lib/components/charts/plugins/doughnut-empty-state.js +34 -0
  23. package/esm2015/lib/components/charts/plugins/index.js +4 -0
  24. package/esm2015/lib/components/charts/plugins/legend-margin.js +16 -0
  25. package/esm2015/lib/components/charts/services/index.js +2 -0
  26. package/esm2015/lib/components/charts/services/statistic.service.js +75 -0
  27. package/esm2015/lib/components/charts/utility/colors.js +79 -0
  28. package/esm2015/lib/components/charts/utility/common.js +7 -0
  29. package/esm2015/lib/components/charts/utility/index.js +3 -0
  30. package/esm2015/lib/components/comments/comments.module.js +9 -5
  31. package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +30 -23
  32. package/esm2015/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.js +28 -34
  33. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +22 -22
  34. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.js +16 -18
  35. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +6 -6
  36. package/esm2015/lib/components/correspondence-relation/components/versions/versions.component.js +3 -2
  37. package/esm2015/lib/components/correspondence-relation/correspondence-relation.module.js +33 -29
  38. package/esm2015/lib/components/correspondence-relation/services/correspondence-realation.service.js +32 -24
  39. package/esm2015/lib/components/diagrams/components/connection-label.component.js +1 -1
  40. package/esm2015/lib/components/diagrams/directive/diagram.directive.js +2 -3
  41. package/esm2015/lib/components/diagrams/editor/customize.js +11 -14
  42. package/esm2015/lib/components/diagrams/editor/overrides/connection-path.transformers.js +21 -34
  43. package/esm2015/lib/components/diagrams/editor/path-plugin.js +11 -10
  44. package/esm2015/lib/components/diagrams/models/base-node.model.js +2 -1
  45. package/esm2015/lib/components/diagrams/models/connection.model.js +1 -1
  46. package/esm2015/lib/components/diagrams/types/common.type.js +1 -1
  47. package/esm2015/lib/components/diagrams/types/diagram-config.type.js +1 -1
  48. package/esm2015/lib/components/diagrams/types/node-definition.js +1 -1
  49. package/esm2015/lib/components/diagrams/utilities/random.js +9 -3
  50. package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +9 -11
  51. package/esm2015/lib/components/documents/components/document-upload/document-upload.component.js +17 -7
  52. package/esm2015/lib/components/documents/components/documents/documents.component.js +1 -1
  53. package/esm2015/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.js +45 -40
  54. package/esm2015/lib/components/dynamic-chart/dynamic-chart.module.js +21 -17
  55. package/esm2015/lib/components/dynamic-chart/services/chart-data.service.js +98 -92
  56. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +22 -10
  57. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.js +8 -4
  58. package/esm2015/lib/components/dynamic-form/components/department-form/department-form.component.js +28 -29
  59. package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.js +16 -3
  60. package/esm2015/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.js +26 -18
  61. package/esm2015/lib/components/dynamic-form/components/dynamic-form-textarea/dynamic-form-textarea.component.js +2 -2
  62. package/esm2015/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.js +4 -2
  63. package/esm2015/lib/components/dynamic-form/dynamic-form.module.js +13 -10
  64. package/esm2015/lib/components/dynamic-search/dynamic-search/dynamic-search.component.js +3 -3
  65. package/esm2015/lib/components/dynamic-table/dynamic-table/dynamic-table.component.js +68 -29
  66. package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +60 -42
  67. package/esm2015/lib/components/file-manger/components/copy/copy.component.js +66 -36
  68. package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +40 -13
  69. package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +238 -200
  70. package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +14 -12
  71. package/esm2015/lib/components/file-manger/components/delete/delete.component.js +49 -20
  72. package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +45 -43
  73. package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +63 -36
  74. package/esm2015/lib/components/file-manger/components/move/move.component.js +61 -31
  75. package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +81 -81
  76. package/esm2015/lib/components/file-manger/components/rename/rename.component.js +58 -30
  77. package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +99 -66
  78. package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +95 -75
  79. package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +15 -11
  80. package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +54 -23
  81. package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +24 -24
  82. package/esm2015/lib/components/file-manger/file-manager.abstract.js +266 -264
  83. package/esm2015/lib/components/file-manger/file-manger.module.js +39 -35
  84. package/esm2015/lib/components/filter/filter/filter.component.js +1 -1
  85. package/esm2015/lib/components/notifications/components/base-notifications.component.js +2 -16
  86. package/esm2015/lib/components/notifications/components/notification-item/notification-item.component.js +3 -3
  87. package/esm2015/lib/components/notifications/components/notifications-button/notifications-button.component.js +24 -4
  88. package/esm2015/lib/components/notifications/containers/notifications-settings-container/notifications-settings-container.component.js +3 -2
  89. package/esm2015/lib/components/notifications/models/notification-message.mode.js +1 -1
  90. package/esm2015/lib/components/notifications/models/notifications-list-options.js +1 -1
  91. package/esm2015/lib/components/notifications/services/notifications.service.js +23 -17
  92. package/esm2015/lib/components/notifications/services/socket.service.js +13 -5
  93. package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +107 -90
  94. package/esm2015/lib/components/permissions/permissions/permissions.component.js +100 -57
  95. package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +36 -52
  96. package/esm2015/lib/components/permissions/permissions.module.js +23 -7
  97. package/esm2015/lib/components/select-users-by-department/select-users-by-departments/select-users-by-departments.component.js +1 -1
  98. package/esm2015/lib/components/spell-checker-field/spell-checker-field.module.js +37 -0
  99. package/esm2015/lib/components/spell-checker-field/spell-checker-text-field/spell-checker-text-field.component.js +88 -0
  100. package/esm2015/lib/components/table/dynamic-component.js +59 -0
  101. package/esm2015/lib/components/table/page-sizes-list/page-sizes-list.component.js +38 -0
  102. package/esm2015/lib/components/table/table/table.component.js +39 -21
  103. package/esm2015/lib/components/table/table.module.js +22 -18
  104. package/esm2015/lib/components/vocabulary/services/vocabulary-api.service.js +11 -6
  105. package/esm2015/lib/core/services/callApi/call-api.service.js +23 -6
  106. package/esm2015/lib/shared/components/base/base-selector.component.js +1 -1
  107. package/esm2015/lib/shared/components/base/base.component.js +5 -5
  108. package/esm2015/lib/shared/components/nuxeo-dialog/confirmation/ndf-confirmation-dialog.component.js +1 -1
  109. package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo-dialog.module.js +8 -4
  110. package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo.dialog.js +11 -7
  111. package/esm2015/lib/shared/services/base/http-base.service.js +10 -19
  112. package/esm2015/lib/shared-services/dialog-mangment.service.js +66 -21
  113. package/esm2015/lib/shared-services/shared-docs.service.js +20 -26
  114. package/esm2015/public-api.js +8 -2
  115. package/fesm2015/nuxeo-development-framework.js +3555 -2277
  116. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  117. package/lib/components/charts/chart.const.d.ts +2 -0
  118. package/lib/components/charts/chart.token.d.ts +8 -0
  119. package/lib/components/charts/charts.module.d.ts +9 -0
  120. package/lib/components/charts/components/base-chart.component.d.ts +21 -0
  121. package/lib/components/charts/components/chart.component.d.ts +28 -0
  122. package/lib/components/charts/components/data-chart.component.d.ts +39 -0
  123. package/lib/components/charts/components/index.d.ts +3 -0
  124. package/lib/components/charts/defaults/bar.d.ts +2 -0
  125. package/lib/components/charts/defaults/doughnut.d.ts +2 -0
  126. package/lib/components/charts/defaults/index.d.ts +4 -0
  127. package/lib/components/charts/defaults/line.d.ts +2 -0
  128. package/lib/components/charts/defaults/pie.d.ts +2 -0
  129. package/lib/components/charts/index.d.ts +9 -0
  130. package/lib/components/charts/models/index.d.ts +4 -0
  131. package/lib/components/charts/models/options.d.ts +12 -0
  132. package/lib/components/charts/models/plugins-options.d.ts +18 -0
  133. package/lib/components/charts/models/response.d.ts +5 -0
  134. package/lib/components/charts/models/statistic-request-config.d.ts +30 -0
  135. package/lib/components/charts/plugins/doughnut-center-text.d.ts +2 -0
  136. package/lib/components/charts/plugins/doughnut-empty-state.d.ts +2 -0
  137. package/lib/components/charts/plugins/index.d.ts +3 -0
  138. package/lib/components/charts/plugins/legend-margin.d.ts +2 -0
  139. package/lib/components/charts/services/index.d.ts +1 -0
  140. package/lib/components/charts/services/statistic.service.d.ts +23 -0
  141. package/lib/components/charts/utility/colors.d.ts +11 -0
  142. package/lib/components/charts/utility/common.d.ts +4 -0
  143. package/lib/components/charts/utility/index.d.ts +2 -0
  144. package/lib/components/comments/comments.module.d.ts +2 -1
  145. package/lib/components/comments/components/comment-item/comment-item.component.d.ts +3 -1
  146. package/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.d.ts +8 -5
  147. package/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.d.ts +8 -8
  148. package/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.d.ts +5 -5
  149. package/lib/components/correspondence-relation/correspondence-relation.module.d.ts +3 -2
  150. package/lib/components/diagrams/editor/customize.d.ts +7 -7
  151. package/lib/components/diagrams/editor/overrides/connection-path.transformers.d.ts +2 -5
  152. package/lib/components/diagrams/models/base-node.model.d.ts +1 -1
  153. package/lib/components/diagrams/models/connection.model.d.ts +2 -1
  154. package/lib/components/diagrams/types/common.type.d.ts +4 -0
  155. package/lib/components/diagrams/types/diagram-config.type.d.ts +7 -7
  156. package/lib/components/diagrams/types/node-definition.d.ts +1 -0
  157. package/lib/components/diagrams/utilities/random.d.ts +1 -1
  158. package/lib/components/documents/components/document-upload/document-upload.component.d.ts +3 -1
  159. package/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.d.ts +11 -10
  160. package/lib/components/dynamic-chart/dynamic-chart.module.d.ts +5 -6
  161. package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.d.ts +6 -2
  162. package/lib/components/dynamic-fields-renderer/dynamic-fields-renderer.module.d.ts +2 -1
  163. package/lib/components/dynamic-form/components/department-form/department-form.component.d.ts +4 -4
  164. package/lib/components/dynamic-form/components/dynamic-form-department/dynamic-form-department.component.d.ts +5 -1
  165. package/lib/components/dynamic-form/components/dynamic-form-department/services/department-management.service.d.ts +3 -1
  166. package/lib/components/dynamic-form/components/dynamic-form-treeview-select/dropdown-treeview-select.component.d.ts +5 -1
  167. package/lib/components/dynamic-form/dynamic-form.module.d.ts +2 -1
  168. package/lib/components/dynamic-table/dynamic-table/dynamic-table.component.d.ts +29 -11
  169. package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +11 -5
  170. package/lib/components/file-manger/components/copy/copy.component.d.ts +11 -4
  171. package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +9 -4
  172. package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +13 -19
  173. package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +6 -4
  174. package/lib/components/file-manger/components/delete/delete.component.d.ts +11 -4
  175. package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +9 -11
  176. package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +11 -5
  177. package/lib/components/file-manger/components/move/move.component.d.ts +11 -4
  178. package/lib/components/file-manger/components/publish-dialog/publish-dialog.component.d.ts +12 -10
  179. package/lib/components/file-manger/components/rename/rename.component.d.ts +11 -5
  180. package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +9 -8
  181. package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +6 -7
  182. package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +4 -3
  183. package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +11 -4
  184. package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +9 -8
  185. package/lib/components/file-manger/file-manager.abstract.d.ts +24 -22
  186. package/lib/components/file-manger/file-manger.module.d.ts +2 -1
  187. package/lib/components/notifications/components/base-notifications.component.d.ts +2 -8
  188. package/lib/components/notifications/components/notification-item/notification-item.component.d.ts +1 -1
  189. package/lib/components/notifications/components/notifications-button/notifications-button.component.d.ts +4 -1
  190. package/lib/components/notifications/models/notification-message.mode.d.ts +1 -0
  191. package/lib/components/notifications/models/notifications-list-options.d.ts +4 -0
  192. package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +8 -6
  193. package/lib/components/permissions/permissions/permissions.component.d.ts +3 -1
  194. package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +3 -3
  195. package/lib/components/permissions/permissions.module.d.ts +2 -1
  196. package/lib/components/spell-checker-field/spell-checker-field.module.d.ts +10 -0
  197. package/lib/components/spell-checker-field/spell-checker-text-field/spell-checker-text-field.component.d.ts +24 -0
  198. package/lib/components/table/dynamic-component.d.ts +20 -0
  199. package/lib/components/table/page-sizes-list/page-sizes-list.component.d.ts +15 -0
  200. package/lib/components/table/table/table.component.d.ts +15 -6
  201. package/lib/components/table/table.module.d.ts +14 -10
  202. package/lib/components/vocabulary/services/vocabulary-api.service.d.ts +2 -2
  203. package/lib/core/services/callApi/call-api.service.d.ts +8 -1
  204. package/lib/shared/components/base/base-selector.component.d.ts +4 -4
  205. package/lib/shared/components/base/base.component.d.ts +5 -5
  206. package/lib/shared/components/nuxeo-dialog/nuxeo-dialog.module.d.ts +2 -1
  207. package/lib/shared/components/nuxeo-dialog/nuxeo.dialog.d.ts +2 -1
  208. package/lib/shared/services/base/http-base.service.d.ts +3 -1
  209. package/lib/shared-services/dialog-mangment.service.d.ts +5 -1
  210. package/lib/shared-services/shared-docs.service.d.ts +3 -1
  211. package/package.json +3 -4
  212. package/public-api.d.ts +7 -1
  213. package/esm2015/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.js +0 -164
  214. package/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.d.ts +0 -33
@@ -2,17 +2,18 @@ import { Component, Inject, ViewEncapsulation } from '@angular/core';
2
2
  import { FormControl, Validators } from '@angular/forms';
3
3
  import { MAT_DIALOG_DATA } from '@angular/material/dialog';
4
4
  import { combineLatest, of, Subject } from 'rxjs';
5
- import { switchMap, takeUntil } from 'rxjs/operators';
5
+ import { switchMap, takeUntil, tap } from 'rxjs/operators';
6
6
  import { UserPreferenceValues } from '../../../../core/services/user/user-preferences.service';
7
7
  import { ConfirmationDialogComponent } from '../../../confirmation-dialog/confirmation-dialog/confirmation-dialog.component';
8
+ import { BaseDialogComponent } from '../../../../shared/components/base/base-dialog.component';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "@angular/material/dialog";
10
11
  import * as i2 from "@angular/forms";
11
12
  import * as i3 from "../../../../shared-services/shared-docs.service";
12
13
  import * as i4 from "../../../custom-toastr/services/custom-toastr.service";
13
- import * as i5 from "../../../../core/services/translation/translation.service";
14
- import * as i6 from "../../../../core/services/nuxeo/nuxeo.service";
15
- import * as i7 from "../../../../core/services/user/user-preferences.service";
14
+ import * as i5 from "../../../../core/services/nuxeo/nuxeo.service";
15
+ import * as i6 from "../../../../core/services/user/user-preferences.service";
16
+ import * as i7 from "../../../../shared/components/nuxeo-dialog/nuxeo.dialog";
16
17
  import * as i8 from "../../../select-users-by-department/select-users-by-departments/select-users-by-departments.component";
17
18
  import * as i9 from "@ng-select/ng-select";
18
19
  import * as i10 from "@angular/material/icon";
@@ -23,16 +24,16 @@ import * as i14 from "@angular/material/tooltip";
23
24
  import * as i15 from "../../../../directive/permissions/permissions.directive";
24
25
  import * as i16 from "@ngx-translate/core";
25
26
  import * as i17 from "../../../../pipes/localized-date.pipe";
26
- export class ShareDialogComponent {
27
- constructor(data, dialogRef, dialog, fb, shared, tosterService, translateService, nuxeoService, userPreferenceService) {
28
- var _a, _b, _c;
27
+ export class ShareDialogComponent extends BaseDialogComponent {
28
+ constructor(data, dialogRef, dialog, fb, shared, tosterService, nuxeoService, userPreferenceService, injector) {
29
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
30
+ super(injector);
29
31
  this.data = data;
30
32
  this.dialogRef = dialogRef;
31
33
  this.dialog = dialog;
32
34
  this.fb = fb;
33
35
  this.shared = shared;
34
36
  this.tosterService = tosterService;
35
- this.translateService = translateService;
36
37
  this.nuxeoService = nuxeoService;
37
38
  this.userPreferenceService = userPreferenceService;
38
39
  this.selectedUsers = [];
@@ -49,54 +50,81 @@ export class ShareDialogComponent {
49
50
  this.rights = [];
50
51
  this.copied = false;
51
52
  this.shareableUrl = '';
52
- this.isArabic = false;
53
53
  this.onDestroy$ = new Subject();
54
+ this.share = () => {
55
+ if (this.shareForm.invalid) {
56
+ alert(this.translateService.instant('share.select_user_to_share'));
57
+ }
58
+ else {
59
+ this.allowUsersToShare = [];
60
+ if (this.selectedItem.entity.properties.secrecyLevel &&
61
+ this.selectedItem.entity.properties.secrecyLevel != 'Normal') {
62
+ return this.checkIfCanViewSecret().pipe(tap((res) => {
63
+ if (!res.length) {
64
+ this.selectedUsers.forEach((element) => {
65
+ this.allowUsersToShare.push(element.properties.username);
66
+ });
67
+ this.doShare(this.allowUsersToShare);
68
+ }
69
+ }));
70
+ }
71
+ else {
72
+ this.selectedUsers.forEach((element) => {
73
+ this.allowUsersToShare.push(element.properties.username);
74
+ });
75
+ return of(this.allowUsersToShare).pipe(tap((allowUsersToShare) => this.doShare(allowUsersToShare)));
76
+ }
77
+ }
78
+ return of(null);
79
+ };
54
80
  if (this.userPreferenceService) {
55
81
  this.userPreferenceService
56
82
  .select(UserPreferenceValues.Locale)
57
83
  .pipe(takeUntil(this.onDestroy$))
58
84
  .subscribe((locale) => {
59
85
  this.locale = locale;
60
- (this.locale === 'en') ? this.isArabic = false : this.isArabic = true;
61
86
  });
62
87
  }
63
88
  this.rights = [
64
89
  {
65
- label: (this.locale === 'en') ? "Read" : "قراءة",
66
- value: "Read"
90
+ label: this.locale === 'en' ? 'Read' : 'قراءة',
91
+ value: 'Read'
67
92
  },
68
93
  {
69
- label: (this.locale === 'en') ? "ReadWrite" : "قراءة و تعديل",
70
- value: "ReadWrite"
94
+ label: this.locale === 'en' ? 'ReadWrite' : 'قراءة و تعديل',
95
+ value: 'ReadWrite'
71
96
  }
72
97
  ];
73
- this.currentUser = (_c = (_b = (_a = this.nuxeoService) === null || _a === void 0 ? void 0 : _a.nuxeoClient) === null || _b === void 0 ? void 0 : _b.user) === null || _c === void 0 ? void 0 : _c.properties.username;
98
+ this.currentUser =
99
+ (_c = (_b = (_a = this.nuxeoService) === null || _a === void 0 ? void 0 : _a.nuxeoClient) === null || _b === void 0 ? void 0 : _b.user) === null || _c === void 0 ? void 0 : _c.properties.username;
74
100
  this.selectedItem = data.selectedItem;
75
- if (this.selectedItem.entity.type === "Folder" || this.selectedItem.entity.type === "DmsFolder") {
101
+ if (((_d = this.selectedItem) === null || _d === void 0 ? void 0 : _d.entity.type) === 'Folder' ||
102
+ ((_e = this.selectedItem) === null || _e === void 0 ? void 0 : _e.entity.type) === 'DmsFolder') {
76
103
  this.shareableUrl = `${window.location.protocol}//${window.location.host}/dms/files?id=${this.selectedItem.entity.uid}`;
77
104
  }
78
105
  else {
79
- this.selectedItemType = this.selectedItem.entity.properties['file:content']['mime-type'];
80
- if (this.selectedItemType.includes('image')) {
106
+ this.selectedItemType =
107
+ (_f = this.selectedItem) === null || _f === void 0 ? void 0 : _f.entity.properties['file:content']['mime-type'];
108
+ if ((_g = this.selectedItemType) === null || _g === void 0 ? void 0 : _g.includes('image')) {
81
109
  this.typeToUrl = 'image';
82
110
  }
83
- else if (this.selectedItemType.includes('video')) {
111
+ else if ((_h = this.selectedItemType) === null || _h === void 0 ? void 0 : _h.includes('video')) {
84
112
  this.typeToUrl = 'video';
85
113
  }
86
114
  else {
87
115
  this.typeToUrl = 'file';
88
116
  }
89
- this.shareableUrl = `${window.location.protocol}//${window.location.host}/dms/share(viewer:view/${this.typeToUrl}/${this.selectedItem.entity.uid})?location=/share&formType=${this.selectedItem.entity.type}`;
117
+ this.shareableUrl = `${window.location.protocol}//${window.location.host}/dms/share(viewer:view/${this.typeToUrl}/${(_j = this.selectedItem) === null || _j === void 0 ? void 0 : _j.entity.uid})?location=/share&formType=${(_k = this.selectedItem) === null || _k === void 0 ? void 0 : _k.entity.type}`;
90
118
  }
91
119
  }
92
120
  ngOnInit() {
93
121
  this.shareForm = this.fb.group({
94
122
  depAnditsUsers: new FormControl('', Validators.required),
95
- rights: new FormControl('', Validators.required),
123
+ rights: new FormControl('', Validators.required)
96
124
  });
97
- this.shareForm.get('depAnditsUsers').valueChanges.subscribe(res => {
125
+ this.shareForm.get('depAnditsUsers').valueChanges.subscribe((res) => {
98
126
  if (res === null || res === void 0 ? void 0 : res.users) {
99
- (JSON.stringify(this.selectedUsers) != JSON.stringify(res.users))
127
+ JSON.stringify(this.selectedUsers) != JSON.stringify(res.users)
100
128
  ? this.setUser(res.users)
101
129
  : null;
102
130
  }
@@ -105,8 +133,9 @@ export class ShareDialogComponent {
105
133
  this.getMyShare();
106
134
  }
107
135
  removeFromForbiddenArr(event) {
108
- (this.forbiddenUsers.includes(event.label)) ?
109
- this.forbiddenUsers.splice(this.forbiddenUsers.indexOf(event.label), 1) : '';
136
+ this.forbiddenUsers.includes(event.label)
137
+ ? this.forbiddenUsers.splice(this.forbiddenUsers.indexOf(event.label), 1)
138
+ : '';
110
139
  }
111
140
  copy() {
112
141
  this.copied = true;
@@ -128,7 +157,11 @@ export class ShareDialogComponent {
128
157
  });
129
158
  }
130
159
  setRight(event) {
131
- (!this.sameCurrentUser && !this.isSharedBefore.length && this.shareForm.get('rights').value) ? this.disabled = false : this.disabled = true;
160
+ !this.sameCurrentUser &&
161
+ !this.isSharedBefore.length &&
162
+ this.shareForm.get('rights').value
163
+ ? (this.disabled = false)
164
+ : (this.disabled = true);
132
165
  }
133
166
  close() {
134
167
  this.dialogRef.close();
@@ -136,7 +169,7 @@ export class ShareDialogComponent {
136
169
  checkIfCanViewSecret() {
137
170
  this.forbiddenUsers = [];
138
171
  let arr = [];
139
- this.selectedUsers.map(element => {
172
+ this.selectedUsers.map((element) => {
140
173
  let context = {
141
174
  username: element.properties.username,
142
175
  secrecyLevel: this.selectedItem.entity.properties.secrecyLevel
@@ -146,7 +179,7 @@ export class ShareDialogComponent {
146
179
  })));
147
180
  });
148
181
  return combineLatest(arr).pipe(switchMap((res) => {
149
- res.forEach(e => {
182
+ res.forEach((e) => {
150
183
  if (!e.canViewSecretFiles) {
151
184
  this.forbiddenUsers.push(e.element.properties.fullName);
152
185
  }
@@ -159,56 +192,35 @@ export class ShareDialogComponent {
159
192
  users: users,
160
193
  mode: this.shareForm.get('rights').value
161
194
  };
162
- this.subscriptions$.concat([this.shared.shareDocumentWithUser(context, this.selectedItem.entity.uid).subscribe((res) => {
195
+ this.subscriptions$.concat([
196
+ this.shared
197
+ .shareDocumentWithUser(context, this.selectedItem.entity.uid)
198
+ .subscribe((res) => {
163
199
  if (res)
164
- this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.share_Doc_success");
200
+ this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.share_Doc_success');
165
201
  this.depUsers = [];
166
202
  this.shareForm.reset();
167
203
  this.disabled = true;
168
204
  this.getMyShare();
169
- }, err => {
205
+ }, (err) => {
170
206
  this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.share_Doc_fail');
171
207
  })
172
208
  ]);
173
209
  }
174
- share() {
175
- if (this.shareForm.invalid) {
176
- alert(this.translateService.instant("share.select_user_to_share"));
177
- }
178
- else {
179
- this.allowUsersToShare = [];
180
- if (this.selectedItem.entity.properties.secrecyLevel
181
- && this.selectedItem.entity.properties.secrecyLevel != "Normal") {
182
- this.checkIfCanViewSecret().subscribe(res => {
183
- if (!res.length) {
184
- this.selectedUsers.forEach(element => {
185
- this.allowUsersToShare.push(element.properties.username);
186
- });
187
- this.doShare(this.allowUsersToShare);
188
- }
189
- });
190
- }
191
- else {
192
- this.selectedUsers.forEach(element => {
193
- this.allowUsersToShare.push(element.properties.username);
194
- });
195
- this.doShare(this.allowUsersToShare);
196
- }
197
- }
198
- }
199
210
  openDialog(functionToDo, username, sharedMode) {
200
211
  let message;
201
- (functionToDo === "Rem_ALL_shares") ? message = "confirmDialog.Rem_All_shares"
202
- : message = "confirmDialog.Rem_custom_share";
212
+ functionToDo === 'Rem_ALL_shares'
213
+ ? (message = 'confirmDialog.Rem_All_shares')
214
+ : (message = 'confirmDialog.Rem_custom_share');
203
215
  const dialogRef = this.dialog.open(ConfirmationDialogComponent, {
204
216
  width: '510px',
205
217
  data: {
206
- title: this.translateService.instant("confirmDialog.confirm"),
218
+ title: this.translateService.instant('confirmDialog.confirm'),
207
219
  message: this.translateService.instant(message),
208
220
  confirmButton: `BUTTONS.Remove`,
209
- cancelButton: "BUTTONS.Cancel"
221
+ cancelButton: 'BUTTONS.Cancel'
210
222
  },
211
- disableClose: true,
223
+ disableClose: true
212
224
  });
213
225
  // const dialogRef = this.fuseConfirmationService.open(
214
226
  // {
@@ -230,13 +242,16 @@ export class ShareDialogComponent {
230
242
  // );
231
243
  dialogRef.afterClosed().subscribe((result) => {
232
244
  if (result) {
233
- if (functionToDo === "Rem_ALL_shares") {
234
- this.subscriptions$.concat([this.shared.removeAllSharesforDocs(this.selectedItem.entity.uid).subscribe((res) => {
245
+ if (functionToDo === 'Rem_ALL_shares') {
246
+ this.subscriptions$.concat([
247
+ this.shared
248
+ .removeAllSharesforDocs(this.selectedItem.entity.uid)
249
+ .subscribe((res) => {
235
250
  if (res) {
236
- this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.Rm_All_Shares_success");
251
+ this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.Rm_All_Shares_success');
237
252
  this.getMyShare();
238
253
  }
239
- }, err => {
254
+ }, (err) => {
240
255
  this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.Rm_All_Shares_fail');
241
256
  })
242
257
  ]);
@@ -247,12 +262,14 @@ export class ShareDialogComponent {
247
262
  mode: sharedMode
248
263
  };
249
264
  this.subscriptions$.concat([
250
- this.shared.removeCustomShare(context, this.selectedItem.entity.uid).subscribe((res) => {
265
+ this.shared
266
+ .removeCustomShare(context, this.selectedItem.entity.uid)
267
+ .subscribe((res) => {
251
268
  if (res) {
252
- this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.Rem_custom_share_success");
269
+ this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.Rem_custom_share_success');
253
270
  this.getMyShare();
254
271
  }
255
- }, err => {
272
+ }, (err) => {
256
273
  this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.Rem_custom_share_fail');
257
274
  })
258
275
  ]);
@@ -261,12 +278,15 @@ export class ShareDialogComponent {
261
278
  });
262
279
  }
263
280
  getMyShare() {
281
+ var _a;
264
282
  this.sharedListUser = this.sharedList = [];
265
283
  this.subscriptions$.concat([
266
- this.shared.getSharesByMe(this.selectedItem.entity.uid, true).subscribe((res) => {
284
+ this.shared
285
+ .getSharesByMe((_a = this.selectedItem) === null || _a === void 0 ? void 0 : _a.entity.uid, true)
286
+ .subscribe((res) => {
267
287
  this.sharedList = res;
268
288
  if (this.sharedList.length) {
269
- this.sharedList.forEach(element => {
289
+ this.sharedList.forEach((element) => {
270
290
  this.sharedListUser.push(element.user.properties.username);
271
291
  });
272
292
  }
@@ -274,11 +294,11 @@ export class ShareDialogComponent {
274
294
  ]);
275
295
  }
276
296
  ngOnDestroy() {
277
- this.subscriptions$.forEach(sub => sub.unsubscribe());
297
+ this.subscriptions$.forEach((sub) => sub.unsubscribe());
278
298
  }
279
299
  }
280
- ShareDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ShareDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i1.MatDialog }, { token: i2.FormBuilder }, { token: i3.SharedDocsService }, { token: i4.CustomToastrService }, { token: i5.TranslationService }, { token: i6.NuxeoService }, { token: i7.UserPreferencesService }], target: i0.ɵɵFactoryTarget.Component });
281
- ShareDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ShareDialogComponent, selector: "app-share-dialog", ngImport: i0, template: "<form [formGroup]=\"shareForm\" class=\"h-full p-5 overflow-auto\" SetRtl>\r\n\r\n <div class=\"flex flex-col justify-between h-full\">\r\n <!--Form Section-->\r\n <div class=\"add-permsion-wrapper\">\r\n <span class=\"text-gray-900 text-lg\">\r\n {{ \"share.shareDialogTitle\" | translate }}\r\n </span>\r\n <div class=\"mt-5 selectorsWrapper\">\r\n <app-select-users-by-departments\r\n formControlName=\"depAnditsUsers\"\r\n [allowMultipleUsers]= \"true\"\r\n [userLabel]=\"'share.users' | translate\"\r\n [depLabel]=\"'share.Dep' | translate\"\r\n [display]=\"'column'\">\r\n </app-select-users-by-departments>\r\n </div>\r\n <div *ngIf=\"forbiddenUsers.length\" class=\"flex\">\r\n <ng-container *ngFor=\"let p of forbiddenUsers; let i as index\">\r\n <span class=\"text-red-500 text-base\">\r\n {{p}}&nbsp;\r\n </span>\r\n </ng-container>\r\n <span class=\"text-red-500 text-base\">\r\n <p *ngIf=\"forbiddenUsers.length == 1\">\r\n {{ \"share.single_forbidden\" | translate }}\r\n </p>\r\n <p *ngIf=\"forbiddenUsers.length > 1\">\r\n {{ \"share.multi_forbidden\" | translate }}\r\n </p>\r\n </span>\r\n </div>\r\n <div *ngIf=\"sameCurrentUser\">\r\n <span class=\"text-red-500 text-base\">\r\n {{ \"share.shareWithLoggedInUser\" | translate }}\r\n </span>\r\n </div>\r\n <div *ngIf=\"isSharedBefore.length\" class=\"flex\">\r\n <span class=\"text-red-500 text-base\">\r\n {{ \"share.share_exists\" | translate }}\r\n <ng-container *ngFor=\"let p of isSharedBefore\">\r\n {{p}}\r\n </ng-container>\r\n {{ \"share.before\" | translate }}\r\n </span>\r\n </div>\r\n <div class=\"mt-4 rightsSelector\">\r\n <label class=\"text-base font-bold mb-0\">\r\n {{ \"share.Rights\" | translate }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-select \r\n [items]=\"rights\" \r\n bindLabel=\"label\"\r\n bindValue=\"value\"\r\n [placeholder]=\"'permission.rightsPlaceholder' | translate\"\r\n formControlName=\"rights\"\r\n (change)=\"setRight($event)\"\r\n >\r\n </ng-select>\r\n </div>\r\n <div *ngIf=\"sharedList.length\" class=\"mt-4\">\r\n <div>\r\n <label class=\"text-base font-bold mb-0\">\r\n {{ \"share.fileUrl\" | translate }}\r\n </label>\r\n <div class=\"flex relative\">\r\n <input \r\n #fileUrl\r\n [value]=\"shareableUrl\"\r\n disabled\r\n class=\"appearance-none block w-full bg-accent-100 text-gray-700 border border-gray-200 rounded py-2.5 px-4 \r\n leading-tight focus:outline-none focus:bg-white focus:border-gray-500\"\r\n type=\"text\"\r\n >\r\n <button class=\"absolute pt-2.5 bg-accent-100\"\r\n [matTooltip] = \"'BUTTONS.COPY' | translate\"\r\n [ngClass]=\"(locale === 'en') ? 'right-2' : 'left-2'\"\r\n [cdkCopyToClipboard]=\"fileUrl.value\"\r\n (click)=\"copy()\">\r\n <mat-icon svgIcon=\"mat_solid:content_copy\" class=\"icon-size-6\"></mat-icon>\r\n </button>\r\n <div *ngIf=\"copied\" class=\"flex absolute justify-around w-24 -mt-10 border \r\n border-red-700 h-7 rounded bg-gray-200\"\r\n [ngClass]=\"(locale === 'en') ? 'right-0' : 'left-0'\">\r\n <div class=\"w-3 h-3 justify-center bg-gray-200 transform rotate-45 border\r\n mt-5 borders-color\">\r\n </div>\r\n <span class=\"absolute font-extralight\">{{ \"share.copied\" | translate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!--Shares Section-->\r\n <div *ngIf=\"sharedList.length\">\r\n <div class=\"flex flex-row justify-between h-7 border-b-2 border-accent-100 mt-2\">\r\n <span class=\"text-base font-bold\">\r\n {{ \"share.shares\" | translate }}\r\n </span>\r\n <button mat-icon-button *permission=\"{name: 'canRemoveShare', entity: selectedItem.entity}\"\r\n matTooltip=\"{{'share.Rm_All_shares' | translate}}\" (click)=\"openDialog('Rem_ALL_shares')\">\r\n <mat-icon [svgIcon]=\"'heroicons_outline:trash'\"\r\n [ngClass]=\"(locale === 'en') ? 'mr-2' : 'ml-2'\"></mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"h-52 overflow-y-auto\">\r\n <div class=\"flex flex-row justify-between mt-2.5\">\r\n <span class=\"w-1/2 text-base font-bold\">{{\"share.shareWith\" | translate}}</span>\r\n <span class=\"w-1/4 text-base font-bold\">{{\"share.share_date\" | translate}}</span>\r\n <span class=\"w-1/4 text-base font-bold\">{{\"share.permission\" | translate}}</span>\r\n <span>&nbsp;</span>\r\n </div>\r\n <ng-container *ngFor=\"let d of sharedList\">\r\n <div class=\"flex flex-row justify-between mt-2.5\">\r\n <div class=\"flex flex-row w-1/2\">\r\n <div class=\"flex-0 w-8 h-8 rounded-full overflow-hidden\">\r\n <cts-avatar [user]=\"{\r\n properties: {\r\n firstName: d.user.properties?.firstName,\r\n lastName: d.user.properties?.lastName\r\n }\r\n }\">\r\n </cts-avatar>\r\n </div>\r\n <div class=\"flex flex-col -mt-2 px-2 break-all\">\r\n <span>{{d.user.fullName}}</span>\r\n <span>{{d.user.properties.email}}</span>\r\n </div>\r\n </div>\r\n <div class=\"w-1/4 mt-1.5 break-all px-2.5\">\r\n <span>{{d.sharedDate | localizedDate:\"dd MMMM yyyy\":(isArabic? 'ar-AR' : 'en-US')}}</span>\r\n </div>\r\n <div class=\"w-1/4 mt-1.5 break-all px-4\">\r\n <span>{{\"rights.\" + d.sharedMode | translate}}</span>\r\n </div>\r\n <div class=\"mt-1.5\">\r\n <button mat-icon-button *permission=\"{name: 'canRemoveShare', entity: selectedItem.entity}\"\r\n matTooltip=\"{{'share.Rm_custom_share' | translate}}\"\r\n (click)=\"openDialog('Rem_custom_share',d.user.properties.username,d.sharedMode)\">\r\n <i class=\"ms-Icon ms-Icon--ChromeClose\" aria-hidden=\"true\"\r\n [ngClass]=\"(locale === 'en') ? 'mr-2.5' : 'ml-2.5'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <!--Buttons Section-->\r\n <div class=\"flex flex-row justify-between mt-2 py-1\">\r\n <button class=\"submission-button\" [disabled]=\"disabled\" (click)=\"share()\">\r\n {{ \"share.shareButton\" | translate }}\r\n </button>\r\n <button class=\"cancelation-button\" (click)=\"close()\">\r\n {{ \"BUTTONS.Cancel\" | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n</form>", styles: [".share-dialog-wrapper .mat-dialog-container{overflow:hidden;padding:0!important}.share-dialog-wrapper .borders-color{--tw-border-opacity: 1;border-bottom-color:rgba(185,28,28,var(--tw-border-opacity))!important;border-right-color:rgba(185,28,28,var(--tw-border-opacity))!important}.share-dialog-wrapper .rightsSelector .ng-select-container .ng-value-container .ng-placeholder{font-size:12px;margin-top:3px}.share-dialog-wrapper .selectorsWrapper .dep-label,.share-dialog-wrapper .selectorsWrapper .users-label{@apply text-base font-bold mb-0;}\n"], components: [{ type: i8.SelectUsersByDepartmentsComponent, selector: "app-select-users-by-departments", inputs: ["display", "depLabel", "userLabel", "allowMultipleUsers"], outputs: ["formChanged"] }, { type: i9.NgSelectComponent, selector: "ng-select", inputs: ["markFirst", "dropdownPosition", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "bufferAmount", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "bindLabel", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "virtualScroll", "openOnEnter", "appendTo", "bindValue", "appearance", "maxSelectedItems", "groupBy", "groupValue", "tabIndex", "typeahead"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i11.AvatarComponent, selector: "cts-avatar", inputs: ["user"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i12.SetRtlDirective, selector: "[SetRtl]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltipPosition", "matTooltipDisabled", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i15.PermissionsDirective, selector: "[permission]", inputs: ["permission"] }], pipes: { "translate": i16.TranslatePipe, "localizedDate": i17.LocalizedDatePipe }, encapsulation: i0.ViewEncapsulation.None });
300
+ ShareDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ShareDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i1.MatDialog }, { token: i2.FormBuilder }, { token: i3.SharedDocsService }, { token: i4.CustomToastrService }, { token: i5.NuxeoService }, { token: i6.UserPreferencesService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
301
+ ShareDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ShareDialogComponent, selector: "app-share-dialog", usesInheritance: true, ngImport: i0, template: "<ndf-nuxeo-dialog dialogTitle=\"{{ 'CREATE.SHARE' | translate }}\">\r\n\t<ng-template #contentTemplate>\r\n\t\t<form [formGroup]=\"shareForm\" class=\"h-full p-5 overflow-auto\" SetRtl>\r\n\t\t\t<div class=\"flex flex-col justify-between h-full\">\r\n\t\t\t\t<!--Form Section-->\r\n\t\t\t\t<div class=\"add-permsion-wrapper\">\r\n\t\t\t\t\t<span class=\"text-gray-900 text-lg\">\r\n\t\t\t\t\t\t{{ 'share.shareDialogTitle' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<div class=\"mt-5 selectorsWrapper\">\r\n\t\t\t\t\t\t<app-select-users-by-departments\r\n\t\t\t\t\t\t\tformControlName=\"depAnditsUsers\"\r\n\t\t\t\t\t\t\t[allowMultipleUsers]=\"true\"\r\n\t\t\t\t\t\t\t[userLabel]=\"'share.users' | translate\"\r\n\t\t\t\t\t\t\t[depLabel]=\"'share.Dep' | translate\"\r\n\t\t\t\t\t\t\t[display]=\"'column'\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</app-select-users-by-departments>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"forbiddenUsers.length\" class=\"flex\">\r\n\t\t\t\t\t\t<ng-container *ngFor=\"let p of forbiddenUsers; let i; as: index\">\r\n\t\t\t\t\t\t\t<span class=\"text-red-500 text-base\"> {{ p }}&nbsp; </span>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t<span class=\"text-red-500 text-base\">\r\n\t\t\t\t\t\t\t<p *ngIf=\"forbiddenUsers.length == 1\">\r\n\t\t\t\t\t\t\t\t{{ 'share.single_forbidden' | translate }}\r\n\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t<p *ngIf=\"forbiddenUsers.length > 1\">\r\n\t\t\t\t\t\t\t\t{{ 'share.multi_forbidden' | translate }}\r\n\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"sameCurrentUser\">\r\n\t\t\t\t\t\t<span class=\"text-red-500 text-base\">\r\n\t\t\t\t\t\t\t{{ 'share.shareWithLoggedInUser' | translate }}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"isSharedBefore.length\" class=\"flex\">\r\n\t\t\t\t\t\t<span class=\"text-red-500 text-base\">\r\n\t\t\t\t\t\t\t{{ 'share.share_exists' | translate }}\r\n\t\t\t\t\t\t\t<ng-container *ngFor=\"let p of isSharedBefore\">\r\n\t\t\t\t\t\t\t\t{{ p }}\r\n\t\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t\t\t{{ 'share.before' | translate }}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"mt-4 rightsSelector\">\r\n\t\t\t\t\t\t<label class=\"text-base font-bold mb-0\">\r\n\t\t\t\t\t\t\t{{ 'share.Rights' | translate }}\r\n\t\t\t\t\t\t\t<span class=\"text-danger\">*</span>\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t<ng-select\r\n\t\t\t\t\t\t\t[items]=\"rights\"\r\n\t\t\t\t\t\t\tbindLabel=\"label\"\r\n\t\t\t\t\t\t\tbindValue=\"value\"\r\n\t\t\t\t\t\t\t[placeholder]=\"'permission.rightsPlaceholder' | translate\"\r\n\t\t\t\t\t\t\tformControlName=\"rights\"\r\n\t\t\t\t\t\t\t(change)=\"setRight($event)\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t</ng-select>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div *ngIf=\"sharedList.length\" class=\"mt-4\">\r\n\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t<label class=\"text-base font-bold mb-0\">\r\n\t\t\t\t\t\t\t\t{{ 'share.fileUrl' | translate }}\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t<div class=\"flex relative\">\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t#fileUrl\r\n\t\t\t\t\t\t\t\t\t[value]=\"shareableUrl\"\r\n\t\t\t\t\t\t\t\t\tdisabled\r\n\t\t\t\t\t\t\t\t\tclass=\"appearance-none block w-full bg-accent-100 text-gray-700 border border-gray-200 rounded py-2.5 px-4 leading-tight focus:outline-none focus:bg-white focus:border-gray-500\"\r\n\t\t\t\t\t\t\t\t\ttype=\"text\"\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tclass=\"absolute pt-2.5 bg-accent-100\"\r\n\t\t\t\t\t\t\t\t\t[matTooltip]=\"'BUTTONS.COPY' | translate\"\r\n\t\t\t\t\t\t\t\t\t[ngClass]=\"locale === 'en' ? 'right-2' : 'left-2'\"\r\n\t\t\t\t\t\t\t\t\t[cdkCopyToClipboard]=\"fileUrl.value\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"copy()\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t\t\t\t\tsvgIcon=\"mat_solid:content_copy\"\r\n\t\t\t\t\t\t\t\t\t\tclass=\"icon-size-6\"\r\n\t\t\t\t\t\t\t\t\t></mat-icon>\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"copied\"\r\n\t\t\t\t\t\t\t\t\tclass=\"flex absolute justify-around w-24 -mt-10 border border-red-700 h-7 rounded bg-gray-200\"\r\n\t\t\t\t\t\t\t\t\t[ngClass]=\"locale === 'en' ? 'right-0' : 'left-0'\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tclass=\"w-3 h-3 justify-center bg-gray-200 transform rotate-45 border mt-5 borders-color\"\r\n\t\t\t\t\t\t\t\t\t></div>\r\n\t\t\t\t\t\t\t\t\t<span class=\"absolute font-extralight\">{{\r\n\t\t\t\t\t\t\t\t\t\t'share.copied' | translate\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<!--Shares Section-->\r\n\t\t\t\t<div *ngIf=\"sharedList.length\">\r\n\t\t\t\t\t<div\r\n\t\t\t\t\t\tclass=\"flex flex-row justify-between h-7 border-b-2 border-accent-100 mt-2\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<span class=\"text-base font-bold\">\r\n\t\t\t\t\t\t\t{{ 'share.shares' | translate }}\r\n\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t\t\t*permission=\"{\r\n\t\t\t\t\t\t\t\tname: 'canRemoveShare',\r\n\t\t\t\t\t\t\t\tentity: selectedItem.entity\r\n\t\t\t\t\t\t\t}\"\r\n\t\t\t\t\t\t\tmatTooltip=\"{{ 'share.Rm_All_shares' | translate }}\"\r\n\t\t\t\t\t\t\t(click)=\"openDialog('Rem_ALL_shares')\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<mat-icon\r\n\t\t\t\t\t\t\t\t[svgIcon]=\"'heroicons_outline:trash'\"\r\n\t\t\t\t\t\t\t\t[ngClass]=\"locale === 'en' ? 'mr-2' : 'ml-2'\"\r\n\t\t\t\t\t\t\t></mat-icon>\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"h-52 overflow-y-auto\">\r\n\t\t\t\t\t\t<div class=\"flex flex-row justify-between mt-2.5\">\r\n\t\t\t\t\t\t\t<span class=\"w-1/2 text-base font-bold\">{{\r\n\t\t\t\t\t\t\t\t'share.shareWith' | translate\r\n\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t<span class=\"w-1/4 text-base font-bold\">{{\r\n\t\t\t\t\t\t\t\t'share.share_date' | translate\r\n\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t<span class=\"w-1/4 text-base font-bold\">{{\r\n\t\t\t\t\t\t\t\t'share.permission' | translate\r\n\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t<span>&nbsp;</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<ng-container *ngFor=\"let d of sharedList\">\r\n\t\t\t\t\t\t\t<div class=\"flex flex-row justify-between mt-2.5\">\r\n\t\t\t\t\t\t\t\t<div class=\"flex flex-row w-1/2\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"flex-0 w-8 h-8 rounded-full overflow-hidden\">\r\n\t\t\t\t\t\t\t\t\t\t<cts-avatar\r\n\t\t\t\t\t\t\t\t\t\t\t[user]=\"{\r\n\t\t\t\t\t\t\t\t\t\t\t\tproperties: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tfirstName: d.user.properties?.firstName,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tlastName: d.user.properties?.lastName\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\"\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</cts-avatar>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col -mt-2 px-2 break-all\">\r\n\t\t\t\t\t\t\t\t\t\t<span>{{ d.user.fullName }}</span>\r\n\t\t\t\t\t\t\t\t\t\t<span>{{ d.user.properties.email }}</span>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"w-1/4 mt-1.5 break-all px-2.5\">\r\n\t\t\t\t\t\t\t\t\t<span>{{\r\n\t\t\t\t\t\t\t\t\t\td.sharedDate\r\n\t\t\t\t\t\t\t\t\t\t\t| localizedDate\r\n\t\t\t\t\t\t\t\t\t\t\t\t: 'dd MMMM yyyy'\r\n\t\t\t\t\t\t\t\t\t\t\t\t: (isArabic ? 'ar-AR' : 'en-US')\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"w-1/4 mt-1.5 break-all px-4\">\r\n\t\t\t\t\t\t\t\t\t<span>{{ 'rights.' + d.sharedMode | translate }}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div class=\"mt-1.5\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\tmat-icon-button\r\n\t\t\t\t\t\t\t\t\t\t*permission=\"{\r\n\t\t\t\t\t\t\t\t\t\t\tname: 'canRemoveShare',\r\n\t\t\t\t\t\t\t\t\t\t\tentity: selectedItem.entity\r\n\t\t\t\t\t\t\t\t\t\t}\"\r\n\t\t\t\t\t\t\t\t\t\tmatTooltip=\"{{ 'share.Rm_custom_share' | translate }}\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"\r\n\t\t\t\t\t\t\t\t\t\t\topenDialog(\r\n\t\t\t\t\t\t\t\t\t\t\t\t'Rem_custom_share',\r\n\t\t\t\t\t\t\t\t\t\t\t\td.user.properties.username,\r\n\t\t\t\t\t\t\t\t\t\t\t\td.sharedMode\r\n\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<i\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"ms-Icon ms-Icon--ChromeClose\"\r\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\r\n\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"locale === 'en' ? 'mr-2.5' : 'ml-2.5'\"\r\n\t\t\t\t\t\t\t\t\t\t></i>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</ng-container>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</form>\r\n\t</ng-template>\r\n\r\n\t<ng-template #actionsTemplate let-dialog=\"dialog\">\r\n\t\t<button\r\n\t\t\tclass=\"submission-button\"\r\n\t\t\t[disabled]=\"disabled\"\r\n\t\t\t(click)=\"dialog.executeAction(share)\"\r\n\t\t>\r\n\t\t\t{{ 'share.shareButton' | translate }}\r\n\t\t</button>\r\n\t</ng-template>\r\n</ndf-nuxeo-dialog>\r\n", styles: [".share-dialog-wrapper .mat-dialog-container{overflow:hidden;padding:0!important}.share-dialog-wrapper .borders-color{--tw-border-opacity: 1;border-bottom-color:rgba(185,28,28,var(--tw-border-opacity))!important;border-right-color:rgba(185,28,28,var(--tw-border-opacity))!important}.share-dialog-wrapper .rightsSelector .ng-select-container .ng-value-container .ng-placeholder{font-size:12px;margin-top:3px}.share-dialog-wrapper .selectorsWrapper .dep-label,.share-dialog-wrapper .selectorsWrapper .users-label{@apply text-base font-bold mb-0;}\n"], components: [{ type: i7.NdfNuxeoDialog, selector: "ndf-nuxeo-dialog", inputs: ["dialogTitle", "subTitle", "panelClass", "loaderMode"] }, { type: i8.SelectUsersByDepartmentsComponent, selector: "app-select-users-by-departments", inputs: ["display", "depLabel", "userLabel", "allowMultipleUsers"], outputs: ["formChanged"] }, { type: i9.NgSelectComponent, selector: "ng-select", inputs: ["markFirst", "dropdownPosition", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "bufferAmount", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "bindLabel", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "virtualScroll", "openOnEnter", "appendTo", "bindValue", "appearance", "maxSelectedItems", "groupBy", "groupValue", "tabIndex", "typeahead"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i11.AvatarComponent, selector: "cts-avatar", inputs: ["user"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i12.SetRtlDirective, selector: "[SetRtl]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltipPosition", "matTooltipDisabled", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { type: i13.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i15.PermissionsDirective, selector: "[permission]", inputs: ["permission"] }], pipes: { "translate": i16.TranslatePipe, "localizedDate": i17.LocalizedDatePipe }, encapsulation: i0.ViewEncapsulation.None });
282
302
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ShareDialogComponent, decorators: [{
283
303
  type: Component,
284
304
  args: [{
@@ -290,5 +310,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
290
310
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
291
311
  type: Inject,
292
312
  args: [MAT_DIALOG_DATA]
293
- }] }, { type: i1.MatDialogRef }, { type: i1.MatDialog }, { type: i2.FormBuilder }, { type: i3.SharedDocsService }, { type: i4.CustomToastrService }, { type: i5.TranslationService }, { type: i6.NuxeoService }, { type: i7.UserPreferencesService }]; } });
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmUtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaGFyZS1kaWFsb2cvc2hhcmUtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaGFyZS1kaWFsb2cvc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFxQixpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQWUsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQTJCLE1BQU0sMEJBQTBCLENBQUM7QUFFcEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3RELE9BQU8sRUFBMEIsb0JBQW9CLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUN2SCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVU3SCxNQUFNLE9BQU8sb0JBQW9CO0lBd0IvQixZQUE0QyxJQUFJLEVBQ3RDLFNBQTZDLEVBQzdDLE1BQWtCLEVBQ2xCLEVBQWUsRUFDZixNQUF5QixFQUN6QixhQUFrQyxFQUNsQyxnQkFBb0MsRUFDcEMsWUFBMEIsRUFD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QUUsQ0FBQywrQkFBK0IsQ0FBQztvQkFDNUMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7aUJBQ3RDOzswQkF5QmMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTnV4ZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9udXhlby9udXhlby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclByZWZlcmVuY2VzU2VydmljZSwgVXNlclByZWZlcmVuY2VWYWx1ZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3VzZXIvdXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2hhcmVkRG9jc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvc2hhcmVkLWRvY3Muc2VydmljZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2hhcmUtZGlhbG9nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zaGFyZS1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTaGFyZURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgc2VsZWN0ZWRJdGVtOiBhbnk7XHJcbiAgc2VsZWN0ZWRJdGVtVHlwZTogYW55O1xyXG4gIHNoYXJlRm9ybTogRm9ybUdyb3VwO1xyXG4gIHNlbGVjdGVkVXNlcnMgPSBbXTtcclxuICBzdWJzY3JpcHRpb25zJDogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBteVNoYXJlZGF0YTogYW55ID0gW107XHJcbiAgc2hhcmVkTGlzdCA9IFtdO1xyXG4gIHNoYXJlZExpc3RVc2VyID0gW107XHJcbiAgZGVwVXNlcnMgPSBbXTtcclxuICBhbGxvd1VzZXJzVG9TaGFyZSA9IFtdO1xyXG4gIGZvcmJpZGRlblVzZXJzID0gW107XHJcbiAgaXNTaGFyZWRCZWZvcmUgPSBbXTtcclxuICBjdXJyZW50VXNlcjogYW55O1xyXG4gIHNhbWVDdXJyZW50VXNlciA9IGZhbHNlO1xyXG4gIGRpc2FibGVkID0gdHJ1ZTtcclxuICByaWdodHMgPSBbXTtcclxuICBjb3BpZWQgPSBmYWxzZTtcclxuICBzaGFyZWFibGVVcmwgPSAnJztcclxuICB0eXBlVG9Vcmw6IGFueTtcclxuICBpc0FyYWJpYyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgb25EZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgbG9jYWxlO1xyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YSxcclxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8U2hhcmVEaWFsb2dDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBkaWFsb2cgOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgc2hhcmVkOiBTaGFyZWREb2NzU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9zdGVyU2VydmljZTogQ3VzdG9tVG9hc3RyU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBudXhlb1NlcnZpY2U6IE51eGVvU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlKSB7XHJcbiAgICBpZiAodGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2UpIHtcclxuICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZVNlcnZpY2VcclxuICAgICAgICAuc2VsZWN0KFVzZXJQcmVmZXJlbmNlVmFsdWVzLkxvY2FsZSlcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChsb2NhbGUpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9jYWxlID0gbG9jYWxlO1xyXG4gICAgICAgICAgKHRoaXMubG9jYWxlID09PSAnZW4nKSA/IHRoaXMuaXNBcmFiaWMgPSBmYWxzZSA6IHRoaXMuaXNBcmFiaWMgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yaWdodHMgPSBbXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogKHRoaXMubG9jYWxlID09PSAnZW4nKSA/IFwiUmVhZFwiIDogXCLZgtix2KfYodipXCIsXHJcbiAgICAgICAgdmFsdWU6IFwiUmVhZFwiXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBsYWJlbDogKHRoaXMubG9jYWxlID09PSAnZW4nKSA/IFwiUmVhZFdyaXRlXCIgOiBcItmC2LHYp9ih2Kkg2Ygg2KrYudiv2YrZhFwiLFxyXG4gICAgICAgIHZhbHVlOiBcIlJlYWRXcml0ZVwiXHJcbiAgICAgIH1cclxuICAgIF07XHJcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy5udXhlb1NlcnZpY2U/Lm51eGVvQ2xpZW50Py51c2VyPy5wcm9wZXJ0aWVzLnVzZXJuYW1lO1xyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBkYXRhLnNlbGVjdGVkSXRlbTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudHlwZSA9PT0gXCJGb2xkZXJcIiB8fCB0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudHlwZSA9PT0gXCJEbXNGb2xkZXJcIikge1xyXG4gICAgICB0aGlzLnNoYXJlYWJsZVVybCA9IGAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L2Rtcy9maWxlcz9pZD0ke3RoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS51aWR9YFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1UeXBlID0gdGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnByb3BlcnRpZXNbJ2ZpbGU6Y29udGVudCddWydtaW1lLXR5cGUnXTtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtVHlwZS5pbmNsdWRlcygnaW1hZ2UnKSkge1xyXG4gICAgICAgIHRoaXMudHlwZVRvVXJsID0gJ2ltYWdlJ1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtVHlwZS5pbmNsdWRlcygndmlkZW8nKSkge1xyXG4gICAgICAgIHRoaXMudHlwZVRvVXJsID0gJ3ZpZGVvJ1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudHlwZVRvVXJsID0gJ2ZpbGUnXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zaGFyZWFibGVVcmwgPSBgJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9kbXMvc2hhcmUodmlld2VyOnZpZXcvJHt0aGlzLnR5cGVUb1VybH0vJHt0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudWlkfSk/bG9jYXRpb249L3NoYXJlJmZvcm1UeXBlPSR7dGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnR5cGV9YFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNoYXJlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBkZXBBbmRpdHNVc2VyczogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgcmlnaHRzOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNoYXJlRm9ybS5nZXQoJ2RlcEFuZGl0c1VzZXJzJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICBpZiAocmVzPy51c2Vycykge1xyXG4gICAgICAgIChKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkVXNlcnMpICE9IEpTT04uc3RyaW5naWZ5KHJlcy51c2VycykpXHJcbiAgICAgICAgICA/IHRoaXMuc2V0VXNlcihyZXMudXNlcnMpXHJcbiAgICAgICAgICA6IG51bGxcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMuc2hhcmVGb3JtLnJlc2V0KCk7XHJcbiAgICB0aGlzLmdldE15U2hhcmUoKTtcclxuICB9XHJcbiAgcmVtb3ZlRnJvbUZvcmJpZGRlbkFycihldmVudCkge1xyXG4gICAgKHRoaXMuZm9yYmlkZGVuVXNlcnMuaW5jbHVkZXMoZXZlbnQubGFiZWwpKSA/XHJcbiAgICAgIHRoaXMuZm9yYmlkZGVuVXNlcnMuc3BsaWNlKHRoaXMuZm9yYmlkZGVuVXNlcnMuaW5kZXhPZihldmVudC5sYWJlbCksIDEpIDogJyc7XHJcbiAgfVxyXG4gIGNvcHkoKSB7XHJcbiAgICB0aGlzLmNvcGllZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5jb3BpZWQgPSBmYWxzZTtcclxuICAgIH0sIDIwMDApXHJcbiAgfVxyXG4gIHNldFVzZXIodXNlcnMpIHtcclxuICAgIHRoaXMuaXNTaGFyZWRCZWZvcmUgPSBbXTtcclxuICAgIHRoaXMuc2FtZUN1cnJlbnRVc2VyID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSB1c2VycztcclxuICAgIHRoaXMuc2VsZWN0ZWRVc2Vycy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LnByb3BlcnRpZXMudXNlcm5hbWUgPT09IHRoaXMuY3VycmVudFVzZXIpIHtcclxuICAgICAgICB0aGlzLnNhbWVDdXJyZW50VXNlciA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuc2hhcmVkTGlzdFVzZXIuaW5jbHVkZXMoZWxlbWVudC5wcm9wZXJ0aWVzLnVzZXJuYW1lKSkge1xyXG4gICAgICAgIHRoaXMuaXNTaGFyZWRCZWZvcmUucHVzaChlbGVtZW50LnByb3BlcnRpZXMuZnVsbE5hbWUpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBzZXRSaWdodChldmVudCkge1xyXG4gICAgKCF0aGlzLnNhbWVDdXJyZW50VXNlciAmJiAhdGhpcy5pc1NoYXJlZEJlZm9yZS5sZW5ndGggJiYgdGhpcy5zaGFyZUZvcm0uZ2V0KCdyaWdodHMnKS52YWx1ZSkgPyB0aGlzLmRpc2FibGVkID0gZmFsc2UgOiB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZDYW5WaWV3U2VjcmV0KCkge1xyXG4gICAgdGhpcy5mb3JiaWRkZW5Vc2VycyA9IFtdO1xyXG4gICAgbGV0IGFyciA9IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFVzZXJzLm1hcChlbGVtZW50ID0+IHtcclxuICAgICAgbGV0IGNvbnRleHQgPSB7XHJcbiAgICAgICAgdXNlcm5hbWU6IGVsZW1lbnQucHJvcGVydGllcy51c2VybmFtZSxcclxuICAgICAgICBzZWNyZWN5TGV2ZWw6IHRoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS5wcm9wZXJ0aWVzLnNlY3JlY3lMZXZlbFxyXG4gICAgICB9XHJcbiAgICAgIGFyci5wdXNoKFxyXG4gICAgICAgIHRoaXMuc2hhcmVkLmNhblNlZVNlY3JldGRvY3MoY29udGV4dCkucGlwZShcclxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHsgZWxlbWVudCwgLi4ucmVzIH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gICAgfSlcclxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KGFycikucGlwZShcclxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHJlcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgaWYgKCFlLmNhblZpZXdTZWNyZXRGaWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLmZvcmJpZGRlblVzZXJzLnB1c2goZS5lbGVtZW50LnByb3BlcnRpZXMuZnVsbE5hbWUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gb2YodGhpcy5mb3JiaWRkZW5Vc2VycylcclxuICAgICAgfSkpXHJcbiAgfVxyXG4gIGRvU2hhcmUodXNlcnMpIHtcclxuICAgIGxldCBjb250ZXh0ID0ge1xyXG4gICAgICB1c2VyczogdXNlcnMsXHJcbiAgICAgIG1vZGU6IHRoaXMuc2hhcmVGb3JtLmdldCgncmlnaHRzJykudmFsdWVcclxuICAgIH1cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFt0aGlzLnNoYXJlZC5zaGFyZURvY3VtZW50V2l0aFVzZXIoY29udGV4dCwgdGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnVpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzKVxyXG4gICAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdzdWNjZXNzJywgJ1RPQVNURVIuU1VDQ0VTUycsIFwiVE9BU1RFUi5zaGFyZV9Eb2Nfc3VjY2Vzc1wiKTtcclxuICAgICAgdGhpcy5kZXBVc2VycyA9IFtdO1xyXG4gICAgICB0aGlzLnNoYXJlRm9ybS5yZXNldCgpO1xyXG4gICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5nZXRNeVNoYXJlKCk7XHJcbiAgICB9LCBlcnIgPT4ge1xyXG4gICAgICB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnZXJyb3InLCAnVE9BU1RFUi5FUlJPUicsICdUT0FTVEVSLnNoYXJlX0RvY19mYWlsJyk7XHJcbiAgICB9KVxyXG4gICAgXSlcclxuICB9XHJcblxyXG4gIHNoYXJlKCkge1xyXG4gICAgaWYgKHRoaXMuc2hhcmVGb3JtLmludmFsaWQpIHtcclxuICAgICAgYWxlcnQodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJzaGFyZS5zZWxlY3RfdXNlcl90b19zaGFyZVwiKSlcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmFsbG93VXNlcnNUb1NoYXJlID0gW107XHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkucHJvcGVydGllcy5zZWNyZWN5TGV2ZWxcclxuICAgICAgICAmJiB0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkucHJvcGVydGllcy5zZWNyZWN5TGV2ZWwgIT0gXCJOb3JtYWxcIikge1xyXG4gICAgICAgIHRoaXMuY2hlY2tJZkNhblZpZXdTZWNyZXQoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIGlmICghcmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmFsbG93VXNlcnNUb1NoYXJlLnB1c2goZWxlbWVudC5wcm9wZXJ0aWVzLnVzZXJuYW1lKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5kb1NoYXJlKHRoaXMuYWxsb3dVc2Vyc1RvU2hhcmUpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgIHRoaXMuYWxsb3dVc2Vyc1RvU2hhcmUucHVzaChlbGVtZW50LnByb3BlcnRpZXMudXNlcm5hbWUpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5kb1NoYXJlKHRoaXMuYWxsb3dVc2Vyc1RvU2hhcmUpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5EaWFsb2coZnVuY3Rpb25Ub0RvLCB1c2VybmFtZT8sIHNoYXJlZE1vZGU/KSB7XHJcbiAgICBsZXQgbWVzc2FnZTogYW55O1xyXG4gICAgKGZ1bmN0aW9uVG9EbyA9PT0gXCJSZW1fQUxMX3NoYXJlc1wiKSA/IG1lc3NhZ2UgPSBcImNvbmZpcm1EaWFsb2cuUmVtX0FsbF9zaGFyZXNcIlxyXG4gICAgICA6IG1lc3NhZ2UgPSBcImNvbmZpcm1EaWFsb2cuUmVtX2N1c3RvbV9zaGFyZVwiO1xyXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCAsIHtcclxuICAgICAgd2lkdGg6ICc1MTBweCcsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImNvbmZpcm1EaWFsb2cuY29uZmlybVwiKSxcclxuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KG1lc3NhZ2UpLFxyXG4gICAgICAgICAgY29uZmlybUJ1dHRvbiA6IGBCVVRUT05TLlJlbW92ZWAsXHJcbiAgICAgICAgICBjYW5jZWxCdXR0b24gOiBcIkJVVFRPTlMuQ2FuY2VsXCJcclxuICAgICAgfSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgfSlcclxuICAgIC8vIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZnVzZUNvbmZpcm1hdGlvblNlcnZpY2Uub3BlbihcclxuICAgIC8vICAge1xyXG4gICAgLy8gICAgIGRpc21pc3NpYmxlOiB0cnVlLFxyXG4gICAgLy8gICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImNvbmZpcm1EaWFsb2cuY29uZmlybVwiKSxcclxuICAgIC8vICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtZXNzYWdlKSxcclxuICAgIC8vICAgICBhY3Rpb25zOiB7XHJcbiAgICAvLyAgICAgICBjb25maXJtOiB7XHJcbiAgICAvLyAgICAgICAgIHNob3c6IHRydWUsXHJcbiAgICAvLyAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcIkJVVFRPTlMuUmVtb3ZlXCIpLFxyXG4gICAgLy8gICAgICAgICBjb2xvcjogXCJ3YXJuXCJcclxuICAgIC8vICAgICAgIH0sXHJcbiAgICAvLyAgICAgICBjYW5jZWw6IHtcclxuICAgIC8vICAgICAgICAgc2hvdzogdHJ1ZSxcclxuICAgIC8vICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwiQlVUVE9OUy5DYW5jZWxcIiksXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9XHJcbiAgICAvLyApO1xyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIGlmIChmdW5jdGlvblRvRG8gPT09IFwiUmVtX0FMTF9zaGFyZXNcIikge1xyXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zJC5jb25jYXQoW3RoaXMuc2hhcmVkLnJlbW92ZUFsbFNoYXJlc2ZvckRvY3ModGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnVpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ3N1Y2Nlc3MnLCAnVE9BU1RFUi5TVUNDRVNTJywgXCJUT0FTVEVSLlJtX0FsbF9TaGFyZXNfc3VjY2Vzc1wiKTtcclxuICAgICAgICAgICAgICB0aGlzLmdldE15U2hhcmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ2Vycm9yJywgJ1RPQVNURVIuRVJST1InLCAnVE9BU1RFUi5SbV9BbGxfU2hhcmVzX2ZhaWwnKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBdKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgY29udGV4dCA9IHtcclxuICAgICAgICAgICAgdXNlcjogdXNlcm5hbWUsXHJcbiAgICAgICAgICAgIG1vZGU6IHNoYXJlZE1vZGVcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFtcclxuICAgICAgICAgICAgdGhpcy5zaGFyZWQucmVtb3ZlQ3VzdG9tU2hhcmUoY29udGV4dCwgdGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnVpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdzdWNjZXNzJywgJ1RPQVNURVIuU1VDQ0VTUycsIFwiVE9BU1RFUi5SZW1fY3VzdG9tX3NoYXJlX3N1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldE15U2hhcmUoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ2Vycm9yJywgJ1RPQVNURVIuRVJST1InLCAnVE9BU1RFUi5SZW1fY3VzdG9tX3NoYXJlX2ZhaWwnKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIF0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldE15U2hhcmUoKSB7XHJcbiAgICB0aGlzLnNoYXJlZExpc3RVc2VyID0gdGhpcy5zaGFyZWRMaXN0ID0gW107XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkLmNvbmNhdChbXHJcbiAgICAgIHRoaXMuc2hhcmVkLmdldFNoYXJlc0J5TWUodGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnVpZCwgdHJ1ZSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLnNoYXJlZExpc3QgPSByZXM7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hhcmVkTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuc2hhcmVkTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNoYXJlZExpc3RVc2VyLnB1c2goZWxlbWVudC51c2VyLnByb3BlcnRpZXMudXNlcm5hbWUpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMkLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJzaGFyZUZvcm1cIiBjbGFzcz1cImgtZnVsbCBwLTUgb3ZlcmZsb3ctYXV0b1wiIFNldFJ0bD5cclxuXHJcbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGgtZnVsbFwiPlxyXG4gICAgPCEtLUZvcm0gU2VjdGlvbi0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImFkZC1wZXJtc2lvbi13cmFwcGVyXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LWxnXCI+XHJcbiAgICAgICAge3sgXCJzaGFyZS5zaGFyZURpYWxvZ1RpdGxlXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibXQtNSBzZWxlY3RvcnNXcmFwcGVyXCI+XHJcbiAgICAgICAgPGFwcC1zZWxlY3QtdXNlcnMtYnktZGVwYXJ0bWVudHNcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRlcEFuZGl0c1VzZXJzXCJcclxuICAgICAgICAgIFthbGxvd011bHRpcGxlVXNlcnNdPSBcInRydWVcIlxyXG4gICAgICAgICAgW3VzZXJMYWJlbF09XCInc2hhcmUudXNlcnMnICB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICBbZGVwTGFiZWxdPVwiJ3NoYXJlLkRlcCcgIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgIFtkaXNwbGF5XT1cIidjb2x1bW4nXCI+XHJcbiAgICAgICAgPC9hcHAtc2VsZWN0LXVzZXJzLWJ5LWRlcGFydG1lbnRzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cImZvcmJpZGRlblVzZXJzLmxlbmd0aFwiIGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgZm9yYmlkZGVuVXNlcnM7IGxldCBpIGFzIGluZGV4XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICAge3twfX0mbmJzcDtcclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICA8cCAqbmdJZj1cImZvcmJpZGRlblVzZXJzLmxlbmd0aCA9PSAxXCI+XHJcbiAgICAgICAgICAgIHt7IFwic2hhcmUuc2luZ2xlX2ZvcmJpZGRlblwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgIDxwICpuZ0lmPVwiZm9yYmlkZGVuVXNlcnMubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICB7eyBcInNoYXJlLm11bHRpX2ZvcmJpZGRlblwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzYW1lQ3VycmVudFVzZXJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgIHt7IFwic2hhcmUuc2hhcmVXaXRoTG9nZ2VkSW5Vc2VyXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNTaGFyZWRCZWZvcmUubGVuZ3RoXCIgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuICAgICAgICAgICAge3sgXCJzaGFyZS5zaGFyZV9leGlzdHNcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwIG9mIGlzU2hhcmVkQmVmb3JlXCI+XHJcbiAgICAgICAgICAgICAge3twfX1cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIHt7IFwic2hhcmUuYmVmb3JlXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC00IHJpZ2h0c1NlbGVjdG9yXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZCBtYi0wXCI+XHJcbiAgICAgICAgICB7eyBcInNoYXJlLlJpZ2h0c1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDxuZy1zZWxlY3QgXHJcbiAgICAgICAgICBbaXRlbXNdPVwicmlnaHRzXCIgXHJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXHJcbiAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3Blcm1pc3Npb24ucmlnaHRzUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJpZ2h0c1wiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cInNldFJpZ2h0KCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzaGFyZWRMaXN0Lmxlbmd0aFwiIGNsYXNzPVwibXQtNFwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1ib2xkIG1iLTBcIj5cclxuICAgICAgICAgICAge3sgXCJzaGFyZS5maWxlVXJsXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCByZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgI2ZpbGVVcmxcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwic2hhcmVhYmxlVXJsXCJcclxuICAgICAgICAgICAgICBkaXNhYmxlZFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXBwZWFyYW5jZS1ub25lIGJsb2NrIHctZnVsbCAgYmctYWNjZW50LTEwMCB0ZXh0LWdyYXktNzAwIGJvcmRlciBib3JkZXItZ3JheS0yMDAgcm91bmRlZCBweS0yLjUgcHgtNCBcclxuICAgICAgICAgICAgICBsZWFkaW5nLXRpZ2h0IGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpiZy13aGl0ZSBmb2N1czpib3JkZXItZ3JheS01MDBcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWJzb2x1dGUgcHQtMi41IGJnLWFjY2VudC0xMDBcIlxyXG4gICAgICAgICAgICAgIFttYXRUb29sdGlwXSA9IFwiJ0JVVFRPTlMuQ09QWScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIihsb2NhbGUgPT09ICdlbicpICA/ICdyaWdodC0yJyA6ICdsZWZ0LTInXCJcclxuICAgICAgICAgICAgICBbY2RrQ29weVRvQ2xpcGJvYXJkXT1cImZpbGVVcmwudmFsdWVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJjb3B5KClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cIm1hdF9zb2xpZDpjb250ZW50X2NvcHlcIiBjbGFzcz1cImljb24tc2l6ZS02XCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb3BpZWRcIiBjbGFzcz1cImZsZXggYWJzb2x1dGUganVzdGlmeS1hcm91bmQgdy0yNCAtbXQtMTAgYm9yZGVyIFxyXG4gICAgICAgICAgICBib3JkZXItcmVkLTcwMCBoLTcgcm91bmRlZCBiZy1ncmF5LTIwMFwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIihsb2NhbGUgPT09ICdlbicpICA/ICdyaWdodC0wJyA6ICdsZWZ0LTAnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMyBoLTMganVzdGlmeS1jZW50ZXIgYmctZ3JheS0yMDAgdHJhbnNmb3JtIHJvdGF0ZS00NSBib3JkZXJcclxuICAgICAgICAgICAgICAgbXQtNSBib3JkZXJzLWNvbG9yXCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhYnNvbHV0ZSBmb250LWV4dHJhbGlnaHRcIj57eyBcInNoYXJlLmNvcGllZFwiIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNoYXJlcyBTZWN0aW9uLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hhcmVkTGlzdC5sZW5ndGhcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIGgtNyBib3JkZXItYi0yIGJvcmRlci1hY2NlbnQtMTAwIG10LTJcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGRcIj5cclxuICAgICAgICAgIHt7IFwic2hhcmUuc2hhcmVzXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKnBlcm1pc3Npb249XCJ7bmFtZTogJ2NhblJlbW92ZVNoYXJlJywgZW50aXR5OiBzZWxlY3RlZEl0ZW0uZW50aXR5fVwiXHJcbiAgICAgICAgICBtYXRUb29sdGlwPVwie3snc2hhcmUuUm1fQWxsX3NoYXJlcycgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJvcGVuRGlhbG9nKCdSZW1fQUxMX3NoYXJlcycpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOnRyYXNoJ1wiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCIobG9jYWxlID09PSAnZW4nKSAgPyAnbXItMicgOiAnbWwtMidcIj48L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImgtNTIgb3ZlcmZsb3cteS1hdXRvXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuIG10LTIuNVwiPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LTEvMiB0ZXh0LWJhc2UgZm9udC1ib2xkXCI+e3tcInNoYXJlLnNoYXJlV2l0aFwiIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMS80IHRleHQtYmFzZSBmb250LWJvbGRcIj57e1wic2hhcmUuc2hhcmVfZGF0ZVwiIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMS80IHRleHQtYmFzZSBmb250LWJvbGRcIj57e1wic2hhcmUucGVybWlzc2lvblwiIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3Bhbj4mbmJzcDs8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZCBvZiBzaGFyZWRMaXN0XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtMi41XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHctMS8yXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMCB3LTggaC04IHJvdW5kZWQtZnVsbCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgIDxjdHMtYXZhdGFyIFt1c2VyXT1cIntcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICAgICAgICAgICAgZmlyc3ROYW1lOiBkLnVzZXIucHJvcGVydGllcz8uZmlyc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICBsYXN0TmFtZTogZC51c2VyLnByb3BlcnRpZXM/Lmxhc3ROYW1lXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9jdHMtYXZhdGFyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIC1tdC0yIHB4LTIgYnJlYWstYWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e2QudXNlci5mdWxsTmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3tkLnVzZXIucHJvcGVydGllcy5lbWFpbH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMS80IG10LTEuNSBicmVhay1hbGwgcHgtMi41XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3tkLnNoYXJlZERhdGUgIHwgbG9jYWxpemVkRGF0ZTpcImRkIE1NTU0geXl5eVwiOihpc0FyYWJpYz8gJ2FyLUFSJyA6ICdlbi1VUycpfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xLzQgbXQtMS41IGJyZWFrLWFsbCBweC00XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4+e3tcInJpZ2h0cy5cIiArIGQuc2hhcmVkTW9kZSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTEuNVwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpwZXJtaXNzaW9uPVwie25hbWU6ICdjYW5SZW1vdmVTaGFyZScsIGVudGl0eTogc2VsZWN0ZWRJdGVtLmVudGl0eX1cIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cInt7J3NoYXJlLlJtX2N1c3RvbV9zaGFyZScgfCB0cmFuc2xhdGV9fVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkRpYWxvZygnUmVtX2N1c3RvbV9zaGFyZScsZC51c2VyLnByb3BlcnRpZXMudXNlcm5hbWUsZC5zaGFyZWRNb2RlKVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtcy1JY29uIG1zLUljb24tLUNocm9tZUNsb3NlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIihsb2NhbGUgPT09ICdlbicpICA/ICdtci0yLjUnIDogJ21sLTIuNSdcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tQnV0dG9ucyBTZWN0aW9uLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtMiBweS0xXCI+XHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJzdWJtaXNzaW9uLWJ1dHRvblwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIChjbGljayk9XCJzaGFyZSgpXCI+XHJcbiAgICAgICAge3sgXCJzaGFyZS5zaGFyZUJ1dHRvblwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiY2FuY2VsYXRpb24tYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cclxuICAgICAgICB7eyBcIkJVVFRPTlMuQ2FuY2VsXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPiJdfQ==
313
+ }] }, { type: i1.MatDialogRef }, { type: i1.MatDialog }, { type: i2.FormBuilder }, { type: i3.SharedDocsService }, { type: i4.CustomToastrService }, { type: i5.NuxeoService }, { type: i6.UserPreferencesService }, { type: i0.Injector }]; } });
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmUtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaGFyZS1kaWFsb2cvc2hhcmUtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9zaGFyZS1kaWFsb2cvc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQ1QsTUFBTSxFQUlOLGlCQUFpQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRU4sV0FBVyxFQUVYLFVBQVUsRUFDVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFDTixlQUFlLEVBR2YsTUFBTSwwQkFBMEIsQ0FBQztBQUVsQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSzNELE9BQU8sRUFFTixvQkFBb0IsRUFDcEIsTUFBTSx5REFBeUQsQ0FBQztBQUNqRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnRkFBZ0YsQ0FBQztBQUU3SCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwREFBMEQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVMvRixNQUFNLE9BQU8sb0JBQ1osU0FBUSxtQkFBbUQ7SUF3QjNELFlBQ2lDLElBQUksRUFDNUIsU0FBNkMsRUFDN0MsTUFB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LEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7O2tIQXhVVyxvQkFBb0Isa0JBMEJ2QixlQUFlO3NHQTFCWixvQkFBb0IsK0VDekNqQyx3d1JBaU5BOzRGRHhLYSxvQkFBb0I7a0JBTmhDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsV0FBVyxFQUFFLCtCQUErQjtvQkFDNUMsU0FBUyxFQUFFLENBQUMsK0JBQStCLENBQUM7b0JBQzVDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUNyQzs7MEJBMkJFLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdEluamVjdCxcclxuXHRJbmplY3RvcixcclxuXHRPbkRlc3Ryb3ksXHJcblx0T25Jbml0LFxyXG5cdFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcblx0Rm9ybUJ1aWxkZXIsXHJcblx0Rm9ybUNvbnRyb2wsXHJcblx0Rm9ybUdyb3VwLFxyXG5cdFZhbGlkYXRvcnNcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcblx0TUFUX0RJQUxPR19EQVRBLFxyXG5cdE1hdERpYWxvZyxcclxuXHRNYXREaWFsb2dSZWZcclxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTnV4ZW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9udXhlby9udXhlby5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuXHRVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxyXG5cdFVzZXJQcmVmZXJlbmNlVmFsdWVzXHJcbn0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy91c2VyL3VzZXItcHJlZmVyZW5jZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNoYXJlZERvY3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkLXNlcnZpY2VzL3NoYXJlZC1kb2NzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvYmFzZS9iYXNlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEaWFsb2dBY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvbnV4ZW8tZGlhbG9nL21vZGVscy9kaWFsb2ctb3B0aW9uLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLXNoYXJlLWRpYWxvZycsXHJcblx0dGVtcGxhdGVVcmw6ICcuL3NoYXJlLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcblx0ZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2hhcmVEaWFsb2dDb21wb25lbnRcclxuXHRleHRlbmRzIEJhc2VEaWFsb2dDb21wb25lbnQ8U2hhcmVEaWFsb2dDb21wb25lbnQsIGFueSwgYW55PlxyXG5cdGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG5cdHNlbGVjdGVkSXRlbTogYW55O1xyXG5cdHNlbGVjdGVkSXRlbVR5cGU6IGFueTtcclxuXHRzaGFyZUZvcm06IEZvcm1Hcm91cDtcclxuXHRzZWxlY3RlZFVzZXJzID0gW107XHJcblx0c3Vic2NyaXB0aW9ucyQ6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblx0bXlTaGFyZWRhdGE6IGFueSA9IFtdO1xyXG5cdHNoYXJlZExpc3QgPSBbXTtcclxuXHRzaGFyZWRMaXN0VXNlciA9IFtdO1xyXG5cdGRlcFVzZXJzID0gW107XHJcblx0YWxsb3dVc2Vyc1RvU2hhcmUgPSBbXTtcclxuXHRmb3JiaWRkZW5Vc2VycyA9IFtdO1xyXG5cdGlzU2hhcmVkQmVmb3JlID0gW107XHJcblx0Y3VycmVudFVzZXI6IGFueTtcclxuXHRzYW1lQ3VycmVudFVzZXIgPSBmYWxzZTtcclxuXHRkaXNhYmxlZCA9IHRydWU7XHJcblx0cmlnaHRzID0gW107XHJcblx0Y29waWVkID0gZmFsc2U7XHJcblx0c2hhcmVhYmxlVXJsID0gJyc7XHJcblx0dHlwZVRvVXJsOiBhbnk7XHJcblx0cHJpdmF0ZSBvbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHRsb2NhbGU7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGEsXHJcblx0XHRwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFNoYXJlRGlhbG9nQ29tcG9uZW50PixcclxuXHRcdHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcblx0XHRwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuXHRcdHByaXZhdGUgc2hhcmVkOiBTaGFyZWREb2NzU2VydmljZSxcclxuXHRcdHByaXZhdGUgdG9zdGVyU2VydmljZTogQ3VzdG9tVG9hc3RyU2VydmljZSxcclxuXHRcdHByaXZhdGUgbnV4ZW9TZXJ2aWNlOiBOdXhlb1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIHVzZXJQcmVmZXJlbmNlU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcclxuXHRcdGluamVjdG9yOiBJbmplY3RvclxyXG5cdCkge1xyXG5cdFx0c3VwZXIoaW5qZWN0b3IpO1xyXG5cdFx0aWYgKHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlKSB7XHJcblx0XHRcdHRoaXMudXNlclByZWZlcmVuY2VTZXJ2aWNlXHJcblx0XHRcdFx0LnNlbGVjdChVc2VyUHJlZmVyZW5jZVZhbHVlcy5Mb2NhbGUpXHJcblx0XHRcdFx0LnBpcGUodGFrZVVudGlsKHRoaXMub25EZXN0cm95JCkpXHJcblx0XHRcdFx0LnN1YnNjcmliZSgobG9jYWxlKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmxvY2FsZSA9IGxvY2FsZTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdHRoaXMucmlnaHRzID0gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0bGFiZWw6IHRoaXMubG9jYWxlID09PSAnZW4nID8gJ1JlYWQnIDogJ9mC2LHYp9ih2KknLFxyXG5cdFx0XHRcdHZhbHVlOiAnUmVhZCdcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGxhYmVsOiB0aGlzLmxvY2FsZSA9PT0gJ2VuJyA/ICdSZWFkV3JpdGUnIDogJ9mC2LHYp9ih2Kkg2Ygg2KrYudiv2YrZhCcsXHJcblx0XHRcdFx0dmFsdWU6ICdSZWFkV3JpdGUnXHJcblx0XHRcdH1cclxuXHRcdF07XHJcblx0XHR0aGlzLmN1cnJlbnRVc2VyID1cclxuXHRcdFx0dGhpcy5udXhlb1NlcnZpY2U/Lm51eGVvQ2xpZW50Py51c2VyPy5wcm9wZXJ0aWVzLnVzZXJuYW1lO1xyXG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSBkYXRhLnNlbGVjdGVkSXRlbTtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0/LmVudGl0eS50eXBlID09PSAnRm9sZGVyJyB8fFxyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbT8uZW50aXR5LnR5cGUgPT09ICdEbXNGb2xkZXInXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy5zaGFyZWFibGVVcmwgPSBgJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9kbXMvZmlsZXM/aWQ9JHt0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudWlkfWA7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbVR5cGUgPVxyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtPy5lbnRpdHkucHJvcGVydGllc1snZmlsZTpjb250ZW50J11bJ21pbWUtdHlwZSddO1xyXG5cdFx0XHRpZiAodGhpcy5zZWxlY3RlZEl0ZW1UeXBlPy5pbmNsdWRlcygnaW1hZ2UnKSkge1xyXG5cdFx0XHRcdHRoaXMudHlwZVRvVXJsID0gJ2ltYWdlJztcclxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkSXRlbVR5cGU/LmluY2x1ZGVzKCd2aWRlbycpKSB7XHJcblx0XHRcdFx0dGhpcy50eXBlVG9VcmwgPSAndmlkZW8nO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMudHlwZVRvVXJsID0gJ2ZpbGUnO1xyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuc2hhcmVhYmxlVXJsID0gYCR7d2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vZG1zL3NoYXJlKHZpZXdlcjp2aWV3LyR7dGhpcy50eXBlVG9Vcmx9LyR7dGhpcy5zZWxlY3RlZEl0ZW0/LmVudGl0eS51aWR9KT9sb2NhdGlvbj0vc2hhcmUmZm9ybVR5cGU9JHt0aGlzLnNlbGVjdGVkSXRlbT8uZW50aXR5LnR5cGV9YDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zaGFyZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuXHRcdFx0ZGVwQW5kaXRzVXNlcnM6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcblx0XHRcdHJpZ2h0czogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLnNoYXJlRm9ybS5nZXQoJ2RlcEFuZGl0c1VzZXJzJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcblx0XHRcdGlmIChyZXM/LnVzZXJzKSB7XHJcblx0XHRcdFx0SlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZFVzZXJzKSAhPSBKU09OLnN0cmluZ2lmeShyZXMudXNlcnMpXHJcblx0XHRcdFx0XHQ/IHRoaXMuc2V0VXNlcihyZXMudXNlcnMpXHJcblx0XHRcdFx0XHQ6IG51bGw7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5zaGFyZUZvcm0ucmVzZXQoKTtcclxuXHRcdHRoaXMuZ2V0TXlTaGFyZSgpO1xyXG5cdH1cclxuXHRyZW1vdmVGcm9tRm9yYmlkZGVuQXJyKGV2ZW50KSB7XHJcblx0XHR0aGlzLmZvcmJpZGRlblVzZXJzLmluY2x1ZGVzKGV2ZW50LmxhYmVsKVxyXG5cdFx0XHQ/IHRoaXMuZm9yYmlkZGVuVXNlcnMuc3BsaWNlKHRoaXMuZm9yYmlkZGVuVXNlcnMuaW5kZXhPZihldmVudC5sYWJlbCksIDEpXHJcblx0XHRcdDogJyc7XHJcblx0fVxyXG5cdGNvcHkoKSB7XHJcblx0XHR0aGlzLmNvcGllZCA9IHRydWU7XHJcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0dGhpcy5jb3BpZWQgPSBmYWxzZTtcclxuXHRcdH0sIDIwMDApO1xyXG5cdH1cclxuXHRzZXRVc2VyKHVzZXJzKSB7XHJcblx0XHR0aGlzLmlzU2hhcmVkQmVmb3JlID0gW107XHJcblx0XHR0aGlzLnNhbWVDdXJyZW50VXNlciA9IGZhbHNlO1xyXG5cdFx0dGhpcy5zZWxlY3RlZFVzZXJzID0gdXNlcnM7XHJcblx0XHR0aGlzLnNlbGVjdGVkVXNlcnMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG5cdFx0XHRpZiAoZWxlbWVudC5wcm9wZXJ0aWVzLnVzZXJuYW1lID09PSB0aGlzLmN1cnJlbnRVc2VyKSB7XHJcblx0XHRcdFx0dGhpcy5zYW1lQ3VycmVudFVzZXIgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLnNoYXJlZExpc3RVc2VyLmluY2x1ZGVzKGVsZW1lbnQucHJvcGVydGllcy51c2VybmFtZSkpIHtcclxuXHRcdFx0XHR0aGlzLmlzU2hhcmVkQmVmb3JlLnB1c2goZWxlbWVudC5wcm9wZXJ0aWVzLmZ1bGxOYW1lKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHNldFJpZ2h0KGV2ZW50KSB7XHJcblx0XHQhdGhpcy5zYW1lQ3VycmVudFVzZXIgJiZcclxuXHRcdCF0aGlzLmlzU2hhcmVkQmVmb3JlLmxlbmd0aCAmJlxyXG5cdFx0dGhpcy5zaGFyZUZvcm0uZ2V0KCdyaWdodHMnKS52YWx1ZVxyXG5cdFx0XHQ/ICh0aGlzLmRpc2FibGVkID0gZmFsc2UpXHJcblx0XHRcdDogKHRoaXMuZGlzYWJsZWQgPSB0cnVlKTtcclxuXHR9XHJcblxyXG5cdGNsb3NlKCkge1xyXG5cdFx0dGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuXHR9XHJcblxyXG5cdGNoZWNrSWZDYW5WaWV3U2VjcmV0KCkge1xyXG5cdFx0dGhpcy5mb3JiaWRkZW5Vc2VycyA9IFtdO1xyXG5cdFx0bGV0IGFyciA9IFtdO1xyXG5cdFx0dGhpcy5zZWxlY3RlZFVzZXJzLm1hcCgoZWxlbWVudCkgPT4ge1xyXG5cdFx0XHRsZXQgY29udGV4dCA9IHtcclxuXHRcdFx0XHR1c2VybmFtZTogZWxlbWVudC5wcm9wZXJ0aWVzLnVzZXJuYW1lLFxyXG5cdFx0XHRcdHNlY3JlY3lMZXZlbDogdGhpcy5zZWxlY3RlZEl0ZW0uZW50aXR5LnByb3BlcnRpZXMuc2VjcmVjeUxldmVsXHJcblx0XHRcdH07XHJcblx0XHRcdGFyci5wdXNoKFxyXG5cdFx0XHRcdHRoaXMuc2hhcmVkLmNhblNlZVNlY3JldGRvY3MoY29udGV4dCkucGlwZShcclxuXHRcdFx0XHRcdHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIG9mKHsgZWxlbWVudCwgLi4ucmVzIH0pO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBjb21iaW5lTGF0ZXN0KGFycikucGlwZShcclxuXHRcdFx0c3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHRcdHJlcy5mb3JFYWNoKChlKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoIWUuY2FuVmlld1NlY3JldEZpbGVzKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZm9yYmlkZGVuVXNlcnMucHVzaChlLmVsZW1lbnQucHJvcGVydGllcy5mdWxsTmFtZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0cmV0dXJuIG9mKHRoaXMuZm9yYmlkZGVuVXNlcnMpO1xyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHR9XHJcblx0ZG9TaGFyZSh1c2Vycykge1xyXG5cdFx0bGV0IGNvbnRleHQgPSB7XHJcblx0XHRcdHVzZXJzOiB1c2VycyxcclxuXHRcdFx0bW9kZTogdGhpcy5zaGFyZUZvcm0uZ2V0KCdyaWdodHMnKS52YWx1ZVxyXG5cdFx0fTtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFtcclxuXHRcdFx0dGhpcy5zaGFyZWRcclxuXHRcdFx0XHQuc2hhcmVEb2N1bWVudFdpdGhVc2VyKGNvbnRleHQsIHRoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS51aWQpXHJcblx0XHRcdFx0LnN1YnNjcmliZShcclxuXHRcdFx0XHRcdChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAocmVzKVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMudG9zdGVyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdFx0XHRcdFx0J3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuU1VDQ0VTUycsXHJcblx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5zaGFyZV9Eb2Nfc3VjY2VzcydcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmRlcFVzZXJzID0gW107XHJcblx0XHRcdFx0XHRcdHRoaXMuc2hhcmVGb3JtLnJlc2V0KCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmdldE15U2hhcmUoKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHQoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMudG9zdGVyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdFx0XHRcdCdlcnJvcicsXHJcblx0XHRcdFx0XHRcdFx0J1RPQVNURVIuRVJST1InLFxyXG5cdFx0XHRcdFx0XHRcdCdUT0FTVEVSLnNoYXJlX0RvY19mYWlsJ1xyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdClcclxuXHRcdF0pO1xyXG5cdH1cclxuXHJcblx0c2hhcmU6IERpYWxvZ0FjdGlvblR5cGUgPSAoKSA9PiB7XHJcblx0XHRpZiAodGhpcy5zaGFyZUZvcm0uaW52YWxpZCkge1xyXG5cdFx0XHRhbGVydCh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnc2hhcmUuc2VsZWN0X3VzZXJfdG9fc2hhcmUnKSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmFsbG93VXNlcnNUb1NoYXJlID0gW107XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkucHJvcGVydGllcy5zZWNyZWN5TGV2ZWwgJiZcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkucHJvcGVydGllcy5zZWNyZWN5TGV2ZWwgIT0gJ05vcm1hbCdcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuY2hlY2tJZkNhblZpZXdTZWNyZXQoKS5waXBlKFxyXG5cdFx0XHRcdFx0dGFwKChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKCFyZXMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zZWxlY3RlZFVzZXJzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsb3dVc2Vyc1RvU2hhcmUucHVzaChlbGVtZW50LnByb3BlcnRpZXMudXNlcm5hbWUpO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZG9TaGFyZSh0aGlzLmFsbG93VXNlcnNUb1NoYXJlKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRVc2Vycy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmFsbG93VXNlcnNUb1NoYXJlLnB1c2goZWxlbWVudC5wcm9wZXJ0aWVzLnVzZXJuYW1lKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRyZXR1cm4gb2YodGhpcy5hbGxvd1VzZXJzVG9TaGFyZSkucGlwZShcclxuXHRcdFx0XHRcdHRhcCgoYWxsb3dVc2Vyc1RvU2hhcmUpID0+IHRoaXMuZG9TaGFyZShhbGxvd1VzZXJzVG9TaGFyZSkpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG9mKG51bGwpO1xyXG5cdH07XHJcblxyXG5cdG9wZW5EaWFsb2coZnVuY3Rpb25Ub0RvLCB1c2VybmFtZT8sIHNoYXJlZE1vZGU/KSB7XHJcblx0XHRsZXQgbWVzc2FnZTogYW55O1xyXG5cdFx0ZnVuY3Rpb25Ub0RvID09PSAnUmVtX0FMTF9zaGFyZXMnXHJcblx0XHRcdD8gKG1lc3NhZ2UgPSAnY29uZmlybURpYWxvZy5SZW1fQWxsX3NoYXJlcycpXHJcblx0XHRcdDogKG1lc3NhZ2UgPSAnY29uZmlybURpYWxvZy5SZW1fY3VzdG9tX3NoYXJlJyk7XHJcblx0XHRjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xyXG5cdFx0XHR3aWR0aDogJzUxMHB4JyxcclxuXHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnY29uZmlybURpYWxvZy5jb25maXJtJyksXHJcblx0XHRcdFx0bWVzc2FnZTogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQobWVzc2FnZSksXHJcblx0XHRcdFx0Y29uZmlybUJ1dHRvbjogYEJVVFRPTlMuUmVtb3ZlYCxcclxuXHRcdFx0XHRjYW5jZWxCdXR0b246ICdCVVRUT05TLkNhbmNlbCdcclxuXHRcdFx0fSxcclxuXHRcdFx0ZGlzYWJsZUNsb3NlOiB0cnVlXHJcblx0XHR9KTtcclxuXHRcdC8vIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZnVzZUNvbmZpcm1hdGlvblNlcnZpY2Uub3BlbihcclxuXHRcdC8vICAge1xyXG5cdFx0Ly8gICAgIGRpc21pc3NpYmxlOiB0cnVlLFxyXG5cdFx0Ly8gICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcImNvbmZpcm1EaWFsb2cuY29uZmlybVwiKSxcclxuXHRcdC8vICAgICBtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtZXNzYWdlKSxcclxuXHRcdC8vICAgICBhY3Rpb25zOiB7XHJcblx0XHQvLyAgICAgICBjb25maXJtOiB7XHJcblx0XHQvLyAgICAgICAgIHNob3c6IHRydWUsXHJcblx0XHQvLyAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcIkJVVFRPTlMuUmVtb3ZlXCIpLFxyXG5cdFx0Ly8gICAgICAgICBjb2xvcjogXCJ3YXJuXCJcclxuXHRcdC8vICAgICAgIH0sXHJcblx0XHQvLyAgICAgICBjYW5jZWw6IHtcclxuXHRcdC8vICAgICAgICAgc2hvdzogdHJ1ZSxcclxuXHRcdC8vICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFwiQlVUVE9OUy5DYW5jZWxcIiksXHJcblx0XHQvLyAgICAgICB9XHJcblx0XHQvLyAgICAgfVxyXG5cdFx0Ly8gICB9XHJcblx0XHQvLyApO1xyXG5cdFx0ZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuXHRcdFx0aWYgKHJlc3VsdCkge1xyXG5cdFx0XHRcdGlmIChmdW5jdGlvblRvRG8gPT09ICdSZW1fQUxMX3NoYXJlcycpIHtcclxuXHRcdFx0XHRcdHRoaXMuc3Vic2NyaXB0aW9ucyQuY29uY2F0KFtcclxuXHRcdFx0XHRcdFx0dGhpcy5zaGFyZWRcclxuXHRcdFx0XHRcdFx0XHQucmVtb3ZlQWxsU2hhcmVzZm9yRG9jcyh0aGlzLnNlbGVjdGVkSXRlbS5lbnRpdHkudWlkKVxyXG5cdFx0XHRcdFx0XHRcdC5zdWJzY3JpYmUoXHJcblx0XHRcdFx0XHRcdFx0XHQocmVzOiBhbnkpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHJlcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMudG9zdGVyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuU1VDQ0VTUycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5SbV9BbGxfU2hhcmVzX3N1Y2Nlc3MnXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdldE15U2hhcmUoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRcdChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0J2Vycm9yJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5FUlJPUicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuUm1fQWxsX1NoYXJlc19mYWlsJ1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdF0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRsZXQgY29udGV4dCA9IHtcclxuXHRcdFx0XHRcdFx0dXNlcjogdXNlcm5hbWUsXHJcblx0XHRcdFx0XHRcdG1vZGU6IHNoYXJlZE1vZGVcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR0aGlzLnN1YnNjcmlwdGlvbnMkLmNvbmNhdChbXHJcblx0XHRcdFx0XHRcdHRoaXMuc2hhcmVkXHJcblx0XHRcdFx0XHRcdFx0LnJlbW92ZUN1c3RvbVNoYXJlKGNvbnRleHQsIHRoaXMuc2VsZWN0ZWRJdGVtLmVudGl0eS51aWQpXHJcblx0XHRcdFx0XHRcdFx0LnN1YnNjcmliZShcclxuXHRcdFx0XHRcdFx0XHRcdChyZXM6IGFueSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocmVzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc3VjY2VzcycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5TVUNDRVNTJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdUT0FTVEVSLlJlbV9jdXN0b21fc2hhcmVfc3VjY2VzcydcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0TXlTaGFyZSgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHRcdFx0KGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnZXJyb3InLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdUT0FTVEVSLkVSUk9SJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5SZW1fY3VzdG9tX3NoYXJlX2ZhaWwnXHJcblx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGdldE15U2hhcmUoKSB7XHJcblx0XHR0aGlzLnNoYXJlZExpc3RVc2VyID0gdGhpcy5zaGFyZWRMaXN0ID0gW107XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMkLmNvbmNhdChbXHJcblx0XHRcdHRoaXMuc2hhcmVkXHJcblx0XHRcdFx0LmdldFNoYXJlc0J5TWUodGhpcy5zZWxlY3RlZEl0ZW0/LmVudGl0eS51aWQsIHRydWUpXHJcblx0XHRcdFx0LnN1YnNjcmliZSgocmVzKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnNoYXJlZExpc3QgPSByZXM7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5zaGFyZWRMaXN0Lmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNoYXJlZExpc3QuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2hhcmVkTGlzdFVzZXIucHVzaChlbGVtZW50LnVzZXIucHJvcGVydGllcy51c2VybmFtZSk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRdKTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zJC5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuXHR9XHJcbn1cclxuIiwiPG5kZi1udXhlby1kaWFsb2cgZGlhbG9nVGl0bGU9XCJ7eyAnQ1JFQVRFLlNIQVJFJyB8IHRyYW5zbGF0ZSB9fVwiPlxyXG5cdDxuZy10ZW1wbGF0ZSAjY29udGVudFRlbXBsYXRlPlxyXG5cdFx0PGZvcm0gW2Zvcm1Hcm91cF09XCJzaGFyZUZvcm1cIiBjbGFzcz1cImgtZnVsbCBwLTUgb3ZlcmZsb3ctYXV0b1wiIFNldFJ0bD5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGgtZnVsbFwiPlxyXG5cdFx0XHRcdDwhLS1Gb3JtIFNlY3Rpb24tLT5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWRkLXBlcm1zaW9uLXdyYXBwZXJcIj5cclxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LWxnXCI+XHJcblx0XHRcdFx0XHRcdHt7ICdzaGFyZS5zaGFyZURpYWxvZ1RpdGxlJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cIm10LTUgc2VsZWN0b3JzV3JhcHBlclwiPlxyXG5cdFx0XHRcdFx0XHQ8YXBwLXNlbGVjdC11c2Vycy1ieS1kZXBhcnRtZW50c1xyXG5cdFx0XHRcdFx0XHRcdGZvcm1Db250cm9sTmFtZT1cImRlcEFuZGl0c1VzZXJzXCJcclxuXHRcdFx0XHRcdFx0XHRbYWxsb3dNdWx0aXBsZVVzZXJzXT1cInRydWVcIlxyXG5cdFx0XHRcdFx0XHRcdFt1c2VyTGFiZWxdPVwiJ3NoYXJlLnVzZXJzJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0W2RlcExhYmVsXT1cIidzaGFyZS5EZXAnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdFx0XHRbZGlzcGxheV09XCInY29sdW1uJ1wiXHJcblx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0PC9hcHAtc2VsZWN0LXVzZXJzLWJ5LWRlcGFydG1lbnRzPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwiZm9yYmlkZGVuVXNlcnMubGVuZ3RoXCIgY2xhc3M9XCJmbGV4XCI+XHJcblx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgZm9yYmlkZGVuVXNlcnM7IGxldCBpOyBhczogaW5kZXhcIj5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj4ge3sgcCB9fSZuYnNwOyA8L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuXHRcdFx0XHRcdFx0XHQ8cCAqbmdJZj1cImZvcmJpZGRlblVzZXJzLmxlbmd0aCA9PSAxXCI+XHJcblx0XHRcdFx0XHRcdFx0XHR7eyAnc2hhcmUuc2luZ2xlX2ZvcmJpZGRlbicgfCB0cmFuc2xhdGUgfX1cclxuXHRcdFx0XHRcdFx0XHQ8L3A+XHJcblx0XHRcdFx0XHRcdFx0PHAgKm5nSWY9XCJmb3JiaWRkZW5Vc2Vycy5sZW5ndGggPiAxXCI+XHJcblx0XHRcdFx0XHRcdFx0XHR7eyAnc2hhcmUubXVsdGlfZm9yYmlkZGVuJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHRcdFx0XHRcdDwvcD5cclxuXHRcdFx0XHRcdFx0PC9zcGFuPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8ZGl2ICpuZ0lmPVwic2FtZUN1cnJlbnRVc2VyXCI+XHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGV4dC1yZWQtNTAwIHRleHQtYmFzZVwiPlxyXG5cdFx0XHRcdFx0XHRcdHt7ICdzaGFyZS5zaGFyZVdpdGhMb2dnZWRJblVzZXInIHwgdHJhbnNsYXRlIH19XHJcblx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiAqbmdJZj1cImlzU2hhcmVkQmVmb3JlLmxlbmd0aFwiIGNsYXNzPVwiZmxleFwiPlxyXG5cdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIj5cclxuXHRcdFx0XHRcdFx0XHR7eyAnc2hhcmUuc2hhcmVfZXhpc3RzJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgaXNTaGFyZWRCZWZvcmVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdHt7IHAgfX1cclxuXHRcdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdFx0XHR7eyAnc2hhcmUuYmVmb3JlJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHRcdFx0XHQ8L3NwYW4+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtdC00IHJpZ2h0c1NlbGVjdG9yXCI+XHJcblx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGQgbWItMFwiPlxyXG5cdFx0XHRcdFx0XHRcdHt7ICdzaGFyZS5SaWdodHMnIHwgdHJhbnNsYXRlIH19XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdDxuZy1zZWxlY3RcclxuXHRcdFx0XHRcdFx0XHRbaXRlbXNdPVwicmlnaHRzXCJcclxuXHRcdFx0XHRcdFx0XHRiaW5kTGFiZWw9XCJsYWJlbFwiXHJcblx0XHRcdFx0XHRcdFx0YmluZFZhbHVlPVwidmFsdWVcIlxyXG5cdFx0XHRcdFx0XHRcdFtwbGFjZWhvbGRlcl09XCIncGVybWlzc2lvbi5yaWdodHNQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdGZvcm1Db250cm9sTmFtZT1cInJpZ2h0c1wiXHJcblx0XHRcdFx0XHRcdFx0KGNoYW5nZSk9XCJzZXRSaWdodCgkZXZlbnQpXCJcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHQ8L25nLXNlbGVjdD5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiAqbmdJZj1cInNoYXJlZExpc3QubGVuZ3RoXCIgY2xhc3M9XCJtdC00XCI+XHJcblx0XHRcdFx0XHRcdDxkaXY+XHJcblx0XHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZCBtYi0wXCI+XHJcblx0XHRcdFx0XHRcdFx0XHR7eyAnc2hhcmUuZmlsZVVybCcgfCB0cmFuc2xhdGUgfX1cclxuXHRcdFx0XHRcdFx0XHQ8L2xhYmVsPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IHJlbGF0aXZlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8aW5wdXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0I2ZpbGVVcmxcclxuXHRcdFx0XHRcdFx0XHRcdFx0W3ZhbHVlXT1cInNoYXJlYWJsZVVybFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGRpc2FibGVkXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiYXBwZWFyYW5jZS1ub25lIGJsb2NrIHctZnVsbCBiZy1hY2NlbnQtMTAwIHRleHQtZ3JheS03MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCByb3VuZGVkIHB5LTIuNSBweC00IGxlYWRpbmctdGlnaHQgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOmJnLXdoaXRlIGZvY3VzOmJvcmRlci1ncmF5LTUwMFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJ0ZXh0XCJcclxuXHRcdFx0XHRcdFx0XHRcdC8+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiYWJzb2x1dGUgcHQtMi41IGJnLWFjY2VudC0xMDBcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRbbWF0VG9vbHRpcF09XCInQlVUVE9OUy5DT1BZJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cImxvY2FsZSA9PT0gJ2VuJyA/ICdyaWdodC0yJyA6ICdsZWZ0LTInXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W2Nka0NvcHlUb0NsaXBib2FyZF09XCJmaWxlVXJsLnZhbHVlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHkoKVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxtYXQtaWNvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN2Z0ljb249XCJtYXRfc29saWQ6Y29udGVudF9jb3B5XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImljb24tc2l6ZS02XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0PjwvbWF0LWljb24+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdFx0XHRcdFx0Km5nSWY9XCJjb3BpZWRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImZsZXggYWJzb2x1dGUganVzdGlmeS1hcm91bmQgdy0yNCAtbXQtMTAgYm9yZGVyIGJvcmRlci1yZWQtNzAwIGgtNyByb3VuZGVkIGJnLWdyYXktMjAwXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwibG9jYWxlID09PSAnZW4nID8gJ3JpZ2h0LTAnIDogJ2xlZnQtMCdcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ3LTMgaC0zIGp1c3RpZnktY2VudGVyIGJnLWdyYXktMjAwIHRyYW5zZm9ybSByb3RhdGUtNDUgYm9yZGVyIG10LTUgYm9yZGVycy1jb2xvclwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdD48L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJhYnNvbHV0ZSBmb250LWV4dHJhbGlnaHRcIj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdzaGFyZS5jb3BpZWQnIHwgdHJhbnNsYXRlXHJcblx0XHRcdFx0XHRcdFx0XHRcdH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PCEtLVNoYXJlcyBTZWN0aW9uLS0+XHJcblx0XHRcdFx0PGRpdiAqbmdJZj1cInNoYXJlZExpc3QubGVuZ3RoXCI+XHJcblx0XHRcdFx0XHQ8ZGl2XHJcblx0XHRcdFx0XHRcdGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gaC03IGJvcmRlci1iLTIgYm9yZGVyLWFjY2VudC0xMDAgbXQtMlwiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZFwiPlxyXG5cdFx0XHRcdFx0XHRcdHt7ICdzaGFyZS5zaGFyZXMnIHwgdHJhbnNsYXRlIH19XHJcblx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdG1hdC1pY29uLWJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdCpwZXJtaXNzaW9uPVwie1xyXG5cdFx0XHRcdFx0XHRcdFx0bmFtZTogJ2NhblJlbW92ZVNoYXJlJyxcclxuXHRcdFx0XHRcdFx0XHRcdGVudGl0eTogc2VsZWN0ZWRJdGVtLmVudGl0eVxyXG5cdFx0XHRcdFx0XHRcdH1cIlxyXG5cdFx0XHRcdFx0XHRcdG1hdFRvb2x0aXA9XCJ7eyAnc2hhcmUuUm1fQWxsX3NoYXJlcycgfCB0cmFuc2xhdGUgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdChjbGljayk9XCJvcGVuRGlhbG9nKCdSZW1fQUxMX3NoYXJlcycpXCJcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtaWNvblxyXG5cdFx0XHRcdFx0XHRcdFx0W3N2Z0ljb25dPVwiJ2hlcm9pY29uc19vdXRsaW5lOnRyYXNoJ1wiXHJcblx0XHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJsb2NhbGUgPT09ICdlbicgPyAnbXItMicgOiAnbWwtMidcIlxyXG5cdFx0XHRcdFx0XHRcdD48L21hdC1pY29uPlxyXG5cdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImgtNTIgb3ZlcmZsb3cteS1hdXRvXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBtdC0yLjVcIj5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInctMS8yIHRleHQtYmFzZSBmb250LWJvbGRcIj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0J3NoYXJlLnNoYXJlV2l0aCcgfCB0cmFuc2xhdGVcclxuXHRcdFx0XHRcdFx0XHR9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInctMS80IHRleHQtYmFzZSBmb250LWJvbGRcIj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0J3NoYXJlLnNoYXJlX2RhdGUnIHwgdHJhbnNsYXRlXHJcblx0XHRcdFx0XHRcdFx0fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJ3LTEvNCB0ZXh0LWJhc2UgZm9udC1ib2xkXCI+e3tcclxuXHRcdFx0XHRcdFx0XHRcdCdzaGFyZS5wZXJtaXNzaW9uJyB8IHRyYW5zbGF0ZVxyXG5cdFx0XHRcdFx0XHRcdH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuPiZuYnNwOzwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGQgb2Ygc2hhcmVkTGlzdFwiPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlbiBtdC0yLjVcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHctMS8yXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4LTAgdy04IGgtOCByb3VuZGVkLWZ1bGwgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGN0cy1hdmF0YXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFt1c2VyXT1cIntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydGllczoge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpcnN0TmFtZTogZC51c2VyLnByb3BlcnRpZXM/LmZpcnN0TmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYXN0TmFtZTogZC51c2VyLnByb3BlcnRpZXM/Lmxhc3ROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2N0cy1hdmF0YXI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCAtbXQtMiBweC0yIGJyZWFrLWFsbFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuPnt7IGQudXNlci5mdWxsTmFtZSB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj57eyBkLnVzZXIucHJvcGVydGllcy5lbWFpbCB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ3LTEvNCBtdC0xLjUgYnJlYWstYWxsIHB4LTIuNVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3Bhbj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGQuc2hhcmVkRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fCBsb2NhbGl6ZWREYXRlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogJ2RkIE1NTU0geXl5eSdcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiAoaXNBcmFiaWMgPyAnYXItQVInIDogJ2VuLVVTJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ3LTEvNCBtdC0xLjUgYnJlYWstYWxsIHB4LTRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4+e3sgJ3JpZ2h0cy4nICsgZC5zaGFyZWRNb2RlIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibXQtMS41XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXQtaWNvbi1idXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQqcGVybWlzc2lvbj1cIntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6ICdjYW5SZW1vdmVTaGFyZScsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbnRpdHk6IHNlbGVjdGVkSXRlbS5lbnRpdHlcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXRUb29sdGlwPVwie3sgJ3NoYXJlLlJtX2N1c3RvbV9zaGFyZScgfCB0cmFuc2xhdGUgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9wZW5EaWFsb2coXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdSZW1fY3VzdG9tX3NoYXJlJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZC51c2VyLnByb3BlcnRpZXMudXNlcm5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGQuc2hhcmVkTW9kZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8aVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJtcy1JY29uIG1zLUljb24tLUNocm9tZUNsb3NlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbbmdDbGFzc109XCJsb2NhbGUgPT09ICdlbicgPyAnbXItMi41JyA6ICdtbC0yLjUnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L25nLWNvbnRhaW5lcj5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZm9ybT5cclxuXHQ8L25nLXRlbXBsYXRlPlxyXG5cclxuXHQ8bmctdGVtcGxhdGUgI2FjdGlvbnNUZW1wbGF0ZSBsZXQtZGlhbG9nPVwiZGlhbG9nXCI+XHJcblx0XHQ8YnV0dG9uXHJcblx0XHRcdGNsYXNzPVwic3VibWlzc2lvbi1idXR0b25cIlxyXG5cdFx0XHRbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG5cdFx0XHQoY2xpY2spPVwiZGlhbG9nLmV4ZWN1dGVBY3Rpb24oc2hhcmUpXCJcclxuXHRcdD5cclxuXHRcdFx0e3sgJ3NoYXJlLnNoYXJlQnV0dG9uJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0PC9idXR0b24+XHJcblx0PC9uZy10ZW1wbGF0ZT5cclxuPC9uZGYtbnV4ZW8tZGlhbG9nPlxyXG4iXX0=