nuxeo-development-framework 4.2.7 → 4.2.9

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 (172) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +2664 -3347
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/comments/comments.module.js +5 -9
  4. package/esm2015/lib/components/comments/components/comment-item/comment-item.component.js +23 -30
  5. package/esm2015/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.js +34 -28
  6. package/esm2015/lib/components/confirm-caller/confirm-caller.dialog.js +77 -0
  7. package/esm2015/lib/components/confirm-caller/confirm-caller.module.js +28 -0
  8. package/esm2015/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.js +29 -0
  9. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.js +35 -31
  10. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.js +41 -41
  11. package/esm2015/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.js +34 -30
  12. package/esm2015/lib/components/correspondence-relation/components/versions/versions.component.js +3 -3
  13. package/esm2015/lib/components/correspondence-relation/correspondence-relation.module.js +2 -6
  14. package/esm2015/lib/components/correspondence-relation/services/correspondence-realation.service.js +24 -32
  15. package/esm2015/lib/components/diagrams/components/connection-label.component.js +1 -1
  16. package/esm2015/lib/components/diagrams/directive/diagram.directive.js +3 -2
  17. package/esm2015/lib/components/diagrams/editor/customize.js +4 -1
  18. package/esm2015/lib/components/diagrams/editor/overrides/connection-path.transformers.js +34 -21
  19. package/esm2015/lib/components/diagrams/editor/path-plugin.js +10 -11
  20. package/esm2015/lib/components/diagrams/models/base-node.model.js +1 -2
  21. package/esm2015/lib/components/diagrams/models/connection.model.js +1 -1
  22. package/esm2015/lib/components/diagrams/types/common.type.js +1 -1
  23. package/esm2015/lib/components/diagrams/types/diagram-config.type.js +1 -1
  24. package/esm2015/lib/components/diagrams/types/node-definition.js +1 -1
  25. package/esm2015/lib/components/diagrams/utilities/random.js +3 -9
  26. package/esm2015/lib/components/documents/components/attachments-list/attachments-list.component.js +9 -11
  27. package/esm2015/lib/components/documents/components/document-list/documents-list.component.js +29 -30
  28. package/esm2015/lib/components/documents/documents.module.js +6 -2
  29. package/esm2015/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.js +40 -45
  30. package/esm2015/lib/components/dynamic-chart/dynamic-chart.module.js +17 -21
  31. package/esm2015/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.js +164 -0
  32. package/esm2015/lib/components/dynamic-chart/services/chart-data.service.js +92 -98
  33. package/esm2015/lib/components/dynamic-fields-renderer/dynamic-fields-renderer/dynamic-fields-renderer.component.js +2 -2
  34. package/esm2015/lib/components/dynamic-form/components/department-form/department-form.component.js +29 -28
  35. package/esm2015/lib/components/dynamic-form/dynamic-form.module.js +10 -13
  36. package/esm2015/lib/components/file-manger/components/add-to-collection/add-to-collection.component.js +42 -58
  37. package/esm2015/lib/components/file-manger/components/copy/copy.component.js +36 -65
  38. package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +13 -39
  39. package/esm2015/lib/components/file-manger/components/create-modal/create-modal.component.js +200 -238
  40. package/esm2015/lib/components/file-manger/components/creation-type/creation-type.component.js +12 -14
  41. package/esm2015/lib/components/file-manger/components/delete/delete.component.js +20 -48
  42. package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +43 -45
  43. package/esm2015/lib/components/file-manger/components/loan-request/loan-request.component.js +36 -62
  44. package/esm2015/lib/components/file-manger/components/move/move.component.js +31 -60
  45. package/esm2015/lib/components/file-manger/components/publish-dialog/publish-dialog.component.js +81 -81
  46. package/esm2015/lib/components/file-manger/components/rename/rename.component.js +30 -57
  47. package/esm2015/lib/components/file-manger/components/scan-modal/scan-modal.component.js +66 -99
  48. package/esm2015/lib/components/file-manger/components/share-dialog/share-dialog.component.js +75 -95
  49. package/esm2015/lib/components/file-manger/components/template-modal/template-modal.component.js +11 -15
  50. package/esm2015/lib/components/file-manger/components/transfer-doc/transfer-doc.component.js +23 -53
  51. package/esm2015/lib/components/file-manger/components/update-modal/update-modal.component.js +24 -24
  52. package/esm2015/lib/components/file-manger/file-manager.abstract.js +19 -21
  53. package/esm2015/lib/components/file-manger/file-manger.module.js +6 -10
  54. package/esm2015/lib/components/notifications/components/base-notifications.component.js +16 -2
  55. package/esm2015/lib/components/notifications/components/notification-item/notification-item.component.js +3 -3
  56. package/esm2015/lib/components/notifications/containers/notifications-settings-container/notifications-settings-container.component.js +1 -2
  57. package/esm2015/lib/components/notifications/services/notifications.service.js +17 -23
  58. package/esm2015/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.js +90 -107
  59. package/esm2015/lib/components/permissions/permissions/permissions.component.js +57 -100
  60. package/esm2015/lib/components/permissions/permissions-template/permissions-template.component.js +52 -36
  61. package/esm2015/lib/components/permissions/permissions.module.js +7 -23
  62. package/esm2015/lib/shared/components/nuxeo-dialog/nuxeo.dialog.js +22 -22
  63. package/esm2015/lib/shared-services/dialog-mangment.service.js +23 -27
  64. package/esm2015/lib/shared-services/shared-docs.service.js +27 -22
  65. package/esm2015/public-api.js +5 -4
  66. package/fesm2015/nuxeo-development-framework.js +1843 -2523
  67. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  68. package/lib/components/comments/comments.module.d.ts +1 -2
  69. package/lib/components/comments/components/comment-item/comment-item.component.d.ts +1 -3
  70. package/lib/components/comments/components/edit-delete-modal/edit-delete-modal.component.d.ts +5 -8
  71. package/lib/components/confirm-caller/confirm-caller.dialog.d.ts +46 -0
  72. package/lib/components/confirm-caller/confirm-caller.module.d.ts +17 -0
  73. package/lib/components/confirm-caller/confirm-dialog/confirm-dialog.component.d.ts +12 -0
  74. package/lib/components/correspondence-relation/components/correspondence-relation/correspondence-relation.component.d.ts +2 -4
  75. package/lib/components/correspondence-relation/components/correspondence-relation-create-form/correspondence-relation-create-form.component.d.ts +4 -6
  76. package/lib/components/correspondence-relation/components/correspondence-relation-list/correspondence-relation-list.component.d.ts +2 -4
  77. package/lib/components/correspondence-relation/correspondence-relation.module.d.ts +2 -3
  78. package/lib/components/diagrams/editor/overrides/connection-path.transformers.d.ts +5 -2
  79. package/lib/components/diagrams/models/base-node.model.d.ts +1 -1
  80. package/lib/components/diagrams/models/connection.model.d.ts +1 -2
  81. package/lib/components/diagrams/types/common.type.d.ts +0 -4
  82. package/lib/components/diagrams/types/diagram-config.type.d.ts +1 -1
  83. package/lib/components/diagrams/types/node-definition.d.ts +0 -1
  84. package/lib/components/diagrams/utilities/random.d.ts +1 -1
  85. package/lib/components/documents/components/document-list/documents-list.component.d.ts +1 -3
  86. package/lib/components/documents/documents.module.d.ts +14 -13
  87. package/lib/components/dynamic-chart/dynamic-chart/dynamic-chart.component.d.ts +10 -11
  88. package/lib/components/dynamic-chart/dynamic-chart.module.d.ts +6 -5
  89. package/lib/components/dynamic-chart/dynamic-single-chart/dynamic-single-chart.component.d.ts +33 -0
  90. package/lib/components/dynamic-form/components/department-form/department-form.component.d.ts +4 -4
  91. package/lib/components/dynamic-form/dynamic-form.module.d.ts +1 -2
  92. package/lib/components/file-manger/components/add-to-collection/add-to-collection.component.d.ts +5 -11
  93. package/lib/components/file-manger/components/copy/copy.component.d.ts +4 -11
  94. package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +4 -9
  95. package/lib/components/file-manger/components/create-modal/create-modal.component.d.ts +19 -13
  96. package/lib/components/file-manger/components/creation-type/creation-type.component.d.ts +4 -6
  97. package/lib/components/file-manger/components/delete/delete.component.d.ts +4 -11
  98. package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +11 -9
  99. package/lib/components/file-manger/components/loan-request/loan-request.component.d.ts +5 -11
  100. package/lib/components/file-manger/components/move/move.component.d.ts +4 -11
  101. package/lib/components/file-manger/components/publish-dialog/publish-dialog.component.d.ts +10 -12
  102. package/lib/components/file-manger/components/rename/rename.component.d.ts +5 -11
  103. package/lib/components/file-manger/components/scan-modal/scan-modal.component.d.ts +8 -9
  104. package/lib/components/file-manger/components/share-dialog/share-dialog.component.d.ts +7 -6
  105. package/lib/components/file-manger/components/template-modal/template-modal.component.d.ts +3 -4
  106. package/lib/components/file-manger/components/transfer-doc/transfer-doc.component.d.ts +4 -11
  107. package/lib/components/file-manger/components/update-modal/update-modal.component.d.ts +8 -9
  108. package/lib/components/file-manger/file-manager.abstract.d.ts +0 -2
  109. package/lib/components/file-manger/file-manger.module.d.ts +1 -2
  110. package/lib/components/notifications/components/base-notifications.component.d.ts +8 -2
  111. package/lib/components/notifications/components/notification-item/notification-item.component.d.ts +1 -1
  112. package/lib/components/permissions/add-permissions-dialog/add-permissions-dialog.component.d.ts +6 -8
  113. package/lib/components/permissions/permissions/permissions.component.d.ts +1 -3
  114. package/lib/components/permissions/permissions-template/permissions-template.component.d.ts +3 -3
  115. package/lib/components/permissions/permissions.module.d.ts +1 -2
  116. package/lib/shared/components/nuxeo-dialog/nuxeo.dialog.d.ts +5 -5
  117. package/lib/shared-services/dialog-mangment.service.d.ts +3 -3
  118. package/lib/shared-services/shared-docs.service.d.ts +2 -4
  119. package/package.json +4 -3
  120. package/public-api.d.ts +4 -3
  121. package/esm2015/lib/components/charts/chart.const.js +0 -3
  122. package/esm2015/lib/components/charts/chart.token.js +0 -3
  123. package/esm2015/lib/components/charts/charts.module.js +0 -19
  124. package/esm2015/lib/components/charts/components/base-chart.component.js +0 -44
  125. package/esm2015/lib/components/charts/components/chart.component.js +0 -131
  126. package/esm2015/lib/components/charts/components/data-chart.component.js +0 -164
  127. package/esm2015/lib/components/charts/components/index.js +0 -4
  128. package/esm2015/lib/components/charts/defaults/bar.js +0 -18
  129. package/esm2015/lib/components/charts/defaults/doughnut.js +0 -18
  130. package/esm2015/lib/components/charts/defaults/index.js +0 -5
  131. package/esm2015/lib/components/charts/defaults/line.js +0 -36
  132. package/esm2015/lib/components/charts/defaults/pie.js +0 -20
  133. package/esm2015/lib/components/charts/index.js +0 -9
  134. package/esm2015/lib/components/charts/models/index.js +0 -5
  135. package/esm2015/lib/components/charts/models/options.js +0 -2
  136. package/esm2015/lib/components/charts/models/plugins-options.js +0 -2
  137. package/esm2015/lib/components/charts/models/response.js +0 -2
  138. package/esm2015/lib/components/charts/models/statistic-request-config.js +0 -2
  139. package/esm2015/lib/components/charts/plugins/doughnut-center-text.js +0 -21
  140. package/esm2015/lib/components/charts/plugins/doughnut-empty-state.js +0 -30
  141. package/esm2015/lib/components/charts/plugins/index.js +0 -3
  142. package/esm2015/lib/components/charts/services/index.js +0 -2
  143. package/esm2015/lib/components/charts/services/statistic.service.js +0 -17
  144. package/esm2015/lib/components/charts/utility/colors.js +0 -79
  145. package/esm2015/lib/components/charts/utility/common.js +0 -7
  146. package/esm2015/lib/components/charts/utility/index.js +0 -3
  147. package/lib/components/charts/chart.const.d.ts +0 -2
  148. package/lib/components/charts/chart.token.d.ts +0 -8
  149. package/lib/components/charts/charts.module.d.ts +0 -9
  150. package/lib/components/charts/components/base-chart.component.d.ts +0 -21
  151. package/lib/components/charts/components/chart.component.d.ts +0 -28
  152. package/lib/components/charts/components/data-chart.component.d.ts +0 -32
  153. package/lib/components/charts/components/index.d.ts +0 -3
  154. package/lib/components/charts/defaults/bar.d.ts +0 -2
  155. package/lib/components/charts/defaults/doughnut.d.ts +0 -2
  156. package/lib/components/charts/defaults/index.d.ts +0 -4
  157. package/lib/components/charts/defaults/line.d.ts +0 -2
  158. package/lib/components/charts/defaults/pie.d.ts +0 -2
  159. package/lib/components/charts/index.d.ts +0 -8
  160. package/lib/components/charts/models/index.d.ts +0 -4
  161. package/lib/components/charts/models/options.d.ts +0 -11
  162. package/lib/components/charts/models/plugins-options.d.ts +0 -15
  163. package/lib/components/charts/models/response.d.ts +0 -5
  164. package/lib/components/charts/models/statistic-request-config.d.ts +0 -28
  165. package/lib/components/charts/plugins/doughnut-center-text.d.ts +0 -2
  166. package/lib/components/charts/plugins/doughnut-empty-state.d.ts +0 -2
  167. package/lib/components/charts/plugins/index.d.ts +0 -2
  168. package/lib/components/charts/services/index.d.ts +0 -1
  169. package/lib/components/charts/services/statistic.service.d.ts +0 -9
  170. package/lib/components/charts/utility/colors.d.ts +0 -11
  171. package/lib/components/charts/utility/common.d.ts +0 -4
  172. package/lib/components/charts/utility/index.d.ts +0 -2
@@ -1,25 +1,20 @@
1
1
  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
- import { of } from 'rxjs';
5
- import { BaseDialogComponent } from '../../../shared/components/base/base-dialog.component';
6
- import { tap } from 'rxjs/operators';
7
4
  import * as i0 from "@angular/core";
8
5
  import * as i1 from "@angular/material/dialog";
9
6
  import * as i2 from "../permission.service";
10
7
  import * as i3 from "../../custom-toastr/services/custom-toastr.service";
11
8
  import * as i4 from "@angular/forms";
12
9
  import * as i5 from "../../../core/services/translation/translation.service";
13
- import * as i6 from "../../../shared/components/nuxeo-dialog/nuxeo.dialog";
14
- import * as i7 from "@ng-select/ng-select";
15
- import * as i8 from "../../avatar/avatar/avatar.component";
10
+ import * as i6 from "@ng-select/ng-select";
11
+ import * as i7 from "../../avatar/avatar/avatar.component";
12
+ import * as i8 from "@angular/material/progress-spinner";
16
13
  import * as i9 from "../../../directive/rtl/set-rtl.directive";
17
14
  import * as i10 from "@angular/common";
18
15
  import * as i11 from "@ngx-translate/core";
19
- export class AddPermissionsDialogComponent extends BaseDialogComponent {
20
- constructor(dialogRef, permissionService, tosterService, fb, translate, data, injector) {
21
- var _a;
22
- super(injector);
16
+ export class AddPermissionsDialogComponent {
17
+ constructor(dialogRef, permissionService, tosterService, fb, translate, data) {
23
18
  this.dialogRef = dialogRef;
24
19
  this.permissionService = permissionService;
25
20
  this.tosterService = tosterService;
@@ -37,99 +32,17 @@ export class AddPermissionsDialogComponent extends BaseDialogComponent {
37
32
  this.updating = false;
38
33
  this.createAndAdd = false;
39
34
  this.refreshUsers = false;
40
- this.createandAddAnother = (permissionForm, newPermission) => {
41
- if (this.permissionForm.invalid) {
42
- alert(this.translate.instant('permission.FILL_REQUIRED_FIELD'));
43
- return of(null);
44
- }
45
- else {
46
- this.createAndAdd = true;
47
- this.newPermission = Object.assign(Object.assign({}, newPermission), { permission: newPermission.permission, users: newPermission.users, acl: 'local', blockInheritance: true, notify: true });
48
- return this.permissionService
49
- .addNewLocalPermissions(this.id, this.newPermission)
50
- .pipe(tap((res) => {
51
- if (res) {
52
- this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.ADD_PERMISSION_SUCCESS');
53
- this.permissionService.createAndAddAnother.emit();
54
- this.refreshUserArray(newPermission.users);
55
- this.permissionForm.reset();
56
- this.timeFrame = 'Permanent';
57
- this.createAndAdd = false;
58
- }
59
- }, (err) => {
60
- this.createAndAdd = false;
61
- this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.ADD_PERMISSION_FAIL');
62
- }));
63
- }
64
- };
65
- this.create = (newPermission) => {
66
- /*
67
- newPermission = {
68
- begin:null,
69
- end:null,
70
- permission: Read,ReadWrite....etc,
71
- users:["fm_user"]....etc
72
- }
73
- */
74
- if (this.permissionForm.invalid) {
75
- alert(this.translate.instant('permission.FILL_REQUIRED_FIELD'));
76
- return of(null);
77
- }
78
- else {
79
- this.creating = true;
80
- this.newPermission = Object.assign(Object.assign({}, newPermission), { permission: newPermission.permission, comment: '', email: null, notify: true });
81
- return this.permissionService
82
- .addNewLocalPermissions(this.id, this.newPermission)
83
- .pipe(tap((res) => {
84
- if (res) {
85
- this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.ADD_PERMISSION_SUCCESS');
86
- this.cancel(true);
87
- }
88
- }, (err) => {
89
- this.creating = false;
90
- this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.ADD_PERMISSION_FAIL');
91
- }));
92
- }
93
- };
94
- this.edit = (newPermission) => {
95
- this.permissionForm.get('users').setValue([this.username]);
96
- if (this.timeFrame == 'Permanent') {
97
- this.editableBegin = this.editableEnd = null;
98
- }
99
- if (this.permissionForm.invalid) {
100
- alert(this.translate.instant('permission.FILL_REQUIRED_FIELD'));
101
- return of(null);
102
- }
103
- else {
104
- this.updating = true;
105
- this.newPermission = Object.assign(Object.assign({}, newPermission), { permission: newPermission.permission, begin: this.editableBegin, end: this.editableEnd, comment: '', email: null, notify: false, username: this.username.properties.username, id: this.aclId });
106
- return this.permissionService
107
- .editLocalPermissions(this.id, this.newPermission)
108
- .pipe(tap((res) => {
109
- if (res) {
110
- this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.EDIT_PERMISSION_SUCCESS');
111
- this.cancel(true);
112
- }
113
- }, (err) => {
114
- this.updating = false;
115
- this.tosterService.show('error', 'TOASTER.ERROR', 'TOASTER.EDIT_PERMISSION_FAIL');
116
- }));
117
- }
118
- };
119
35
  this.id = data.id;
120
- (_a = data.rights) === null || _a === void 0 ? void 0 : _a.map((e) => {
36
+ data.rights.map(e => {
121
37
  if ([
122
- 'Consumer',
123
- 'Editor',
124
- 'Contributor',
125
- 'Collaborator',
126
- 'Coordinator',
127
- 'DocumentController'
38
+ "Consumer",
39
+ "Editor",
40
+ "Contributor",
41
+ "Collaborator",
42
+ "Coordinator",
43
+ "DocumentController"
128
44
  ].includes(e)) {
129
- this.rights.push({
130
- label: this.translate.instant(`rights.${e}`),
131
- value: e
132
- });
45
+ this.rights.push({ label: this.translate.instant(`rights.${e}`), value: e });
133
46
  }
134
47
  });
135
48
  this.state = data.state || null;
@@ -144,7 +57,7 @@ export class AddPermissionsDialogComponent extends BaseDialogComponent {
144
57
  begin: new FormControl(null),
145
58
  end: new FormControl(null),
146
59
  permission: new FormControl('', Validators.required),
147
- users: new FormControl('', Validators.required)
60
+ users: new FormControl('', Validators.required),
148
61
  }, { validator: this.checkDates });
149
62
  //(this.editableBegin == null && this.editableEnd == null) ? this.timeFrame = 'Permanent' : this.timeFrame = 'Date-Based'
150
63
  }
@@ -154,12 +67,34 @@ export class AddPermissionsDialogComponent extends BaseDialogComponent {
154
67
  }
155
68
  return null;
156
69
  }
70
+ createandAddAnother(permissionForm, newPermission) {
71
+ if (this.permissionForm.invalid) {
72
+ alert(this.translate.instant("permission.FILL_REQUIRED_FIELD"));
73
+ }
74
+ else {
75
+ this.createAndAdd = true;
76
+ this.newPermission = Object.assign(Object.assign({}, newPermission), { permission: newPermission.permission, users: newPermission.users, acl: "local", blockInheritance: true, notify: true });
77
+ this.subscriptions$.concat([this.permissionService.addNewLocalPermissions(this.id, this.newPermission).subscribe(res => {
78
+ if (res) {
79
+ this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.ADD_PERMISSION_SUCCESS");
80
+ this.permissionService.createAndAddAnother.emit();
81
+ this.refreshUserArray(newPermission.users);
82
+ this.permissionForm.reset();
83
+ this.timeFrame = 'Permanent';
84
+ this.createAndAdd = false;
85
+ }
86
+ }, err => {
87
+ this.createAndAdd = false;
88
+ this.tosterService.show('error', 'TOASTER.ERROR', "TOASTER.ADD_PERMISSION_FAIL");
89
+ })]);
90
+ }
91
+ }
157
92
  refreshUserArray(users) {
158
93
  this.refreshUsers = true;
159
94
  let tempArr = [];
160
95
  tempArr.push(...this.permissionService.departmentUsers);
161
96
  this.permissionService.departmentUsers = [];
162
- users.forEach((element) => {
97
+ users.forEach(element => {
163
98
  tempArr.forEach((user, index) => {
164
99
  if (user.properties.username === element) {
165
100
  tempArr.splice(index, 1);
@@ -171,15 +106,63 @@ export class AddPermissionsDialogComponent extends BaseDialogComponent {
171
106
  this.refreshUsers = false;
172
107
  }, 200);
173
108
  }
109
+ create(newPermission) {
110
+ /*
111
+ newPermission = {
112
+ begin:null,
113
+ end:null,
114
+ permission: Read,ReadWrite....etc,
115
+ users:["fm_user"]....etc
116
+ }
117
+ */
118
+ if (this.permissionForm.invalid) {
119
+ alert(this.translate.instant("permission.FILL_REQUIRED_FIELD"));
120
+ }
121
+ else {
122
+ this.creating = true;
123
+ this.newPermission = Object.assign(Object.assign({}, newPermission), { permission: newPermission.permission, comment: "", email: null, notify: true });
124
+ this.subscriptions$.concat([this.permissionService.addNewLocalPermissions(this.id, this.newPermission).subscribe(res => {
125
+ if (res) {
126
+ this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.ADD_PERMISSION_SUCCESS");
127
+ this.cancel(true);
128
+ }
129
+ }, err => {
130
+ this.creating = false;
131
+ this.tosterService.show('error', 'TOASTER.ERROR', "TOASTER.ADD_PERMISSION_FAIL");
132
+ })]);
133
+ }
134
+ }
135
+ edit(newPermission) {
136
+ this.permissionForm.get('users').setValue([this.username]);
137
+ if (this.timeFrame == 'Permanent') {
138
+ this.editableBegin = this.editableEnd = null;
139
+ }
140
+ if (this.permissionForm.invalid) {
141
+ alert(this.translate.instant("permission.FILL_REQUIRED_FIELD"));
142
+ }
143
+ else {
144
+ this.updating = true;
145
+ this.newPermission = Object.assign(Object.assign({}, newPermission), { permission: newPermission.permission, begin: this.editableBegin, end: this.editableEnd, comment: "", email: null, notify: false, username: this.username.properties.username, id: this.aclId });
146
+ this.subscriptions$.concat([this.permissionService.editLocalPermissions(this.id, this.newPermission).subscribe(res => {
147
+ if (res) {
148
+ this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.EDIT_PERMISSION_SUCCESS");
149
+ this.cancel(true);
150
+ }
151
+ }, err => {
152
+ this.updating = false;
153
+ this.tosterService.show('error', 'TOASTER.ERROR', "TOASTER.EDIT_PERMISSION_FAIL");
154
+ })]);
155
+ }
156
+ }
174
157
  cancel(result) {
175
158
  this.dialogRef.close(result);
176
159
  }
177
160
  ngOnDestroy() {
178
- this.subscriptions$.forEach((e) => e.unsubscribe());
161
+ this.subscriptions$.forEach(e => e.unsubscribe());
179
162
  }
180
163
  }
181
- AddPermissionsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AddPermissionsDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: i2.PermissionService }, { token: i3.CustomToastrService }, { token: i4.FormBuilder }, { token: i5.TranslationService }, { token: MAT_DIALOG_DATA }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
182
- AddPermissionsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AddPermissionsDialogComponent, selector: "app-add-permissions-dialog", usesInheritance: true, ngImport: i0, template: "<ndf-nuxeo-dialog dialogTitle=\"{{ 'CREATE.createFile' | translate }}\">\r\n\t<ng-template #contentTemplate>\r\n\t\t<form [formGroup]=\"permissionForm\" class=\"h-full\" SetRtl>\r\n\t\t\t<div class=\"flex flex-col h-full\">\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\" *ngIf=\"state == 'update'\">\r\n\t\t\t\t\t\t{{ 'permission.edit_permission' | translate }}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t\t<span class=\"text-gray-900 text-lg\" *ngIf=\"state !== 'update'\">\r\n\t\t\t\t\t\t{{ 'permission.add_new_permission' | translate }}\r\n\t\t\t\t\t</span>\r\n\r\n\t\t\t\t\t<div class=\"user-select mt-5\" *ngIf=\"state != 'update'\">\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{{ 'permission.username' | 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]=\"permissionService.departmentUsers\"\r\n\t\t\t\t\t\t\t[placeholder]=\"'permission.placeholder' | translate\"\r\n\t\t\t\t\t\t\t[multiple]=\"true\"\r\n\t\t\t\t\t\t\t[loading]=\"refreshUsers\"\r\n\t\t\t\t\t\t\tbindLabel=\"displayLabel\"\r\n\t\t\t\t\t\t\tbindValue=\"properties.username\"\r\n\t\t\t\t\t\t\tformControlName=\"users\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t<ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\r\n\t\t\t\t\t\t\t\t<div class=\"ng-option disabled\">\r\n\t\t\t\t\t\t\t\t\t{{ 'permission.ngSelect_resultNotFound' | translate }}\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</ng-template>\r\n\t\t\t\t\t\t\t<ng-template ng-option-tmp let-item=\"item\" let-index=\"index\">\r\n\t\t\t\t\t\t\t\t<div class=\"flex flex-col h-full\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-row\">\r\n\t\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\t<cts-avatar\r\n\t\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\t\tproperties: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tfirstName: item.properties.firstName,\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlastName: item.properties.lastName\r\n\t\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\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\t</cts-avatar>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col pt-0 px-2\">\r\n\t\t\t\t\t\t\t\t\t\t\t<span>{{ item.displayLabel }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t<span\r\n\t\t\t\t\t\t\t\t\t\t\t\t>{{ item.properties.email }}-{{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\titem.properties.username\r\n\t\t\t\t\t\t\t\t\t\t\t\t}}</span\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</div>\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</ng-template>\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 class=\"mt-3 rights-select\">\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{{ 'permission.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\t[placeholder]=\"'permission.rightsPlaceholder' | translate\"\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\tformControlName=\"permission\"\r\n\t\t\t\t\t\t\t[(ngModel)]=\"editableRight\"\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</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\t*ngIf=\"state != 'update'\"\r\n\t\t\t[disabled]=\"createAndAdd\"\r\n\t\t\tclass=\"submission-button\"\r\n\t\t\t(click)=\"dialog.executeAction(create, [permissionForm.value])\"\r\n\t\t>\r\n\t\t\t<span *ngIf=\"!creating; else loader\">{{\r\n\t\t\t\t'permission.create' | translate\r\n\t\t\t}}</span>\r\n\t\t</button>\r\n\t\t<button\r\n\t\t\tclass=\"submission-button\"\r\n\t\t\t(click)=\"dialog.executeAction(edit, [permissionForm.value])\"\r\n\t\t\t*ngIf=\"state == 'update'\"\r\n\t\t>\r\n\t\t\t<span *ngIf=\"!updating; else loader\">{{\r\n\t\t\t\t'permission.update' | translate\r\n\t\t\t}}</span>\r\n\t\t</button>\r\n\t\t<button\r\n\t\t\t*ngIf=\"state != 'update'\"\r\n\t\t\tclass=\"submission-button w-44\"\r\n\t\t\t(click)=\"\r\n\t\t\t\tdialog.executeAction(createandAddAnother, [\r\n\t\t\t\t\tpermissionForm,\r\n\t\t\t\t\tpermissionForm.value\r\n\t\t\t\t])\r\n\t\t\t\"\r\n\t\t>\r\n\t\t\t<span *ngIf=\"!createAndAdd; else loader\">{{\r\n\t\t\t\t'permission.createAndAdd' | translate\r\n\t\t\t}}</span>\r\n\t\t</button>\r\n\t</ng-template>\r\n</ndf-nuxeo-dialog>\r\n", styles: [".form-radio{appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;user-select:none;flex-shrink:0;border-radius:100%;height:1em;width:1em;color:#4299e1;background-color:#fff;border-color:#e2e8f0;border-width:1px}.form-radio:checked{background-image:url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media not print{.form-radio::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-radio:focus{outline:none;box-shadow:0 0 0 3px #4299e180;border-color:#63b3ed}.select-label{color:#8f98aa;font-size:12px;margin-bottom:0}.user-select .ng-select-container,.rights-select .ng-select-container{border:1px solid #ccc!important;border-radius:5px!important;background-color:#8f98aa1a!important}.user-select .ng-select-container .ng-value-container,.rights-select .ng-select-container .ng-value-container{padding:unset!important}.user-select .ng-select-container .ng-value-container .ng-placeholder,.rights-select .ng-select-container .ng-value-container .ng-placeholder{font-size:12px}.user-select .ng-select-container .ng-value-container .ng-value,.rights-select .ng-select-container .ng-value-container .ng-value{color:#495057}.user-select .ng-select-container .ng-arrow-wrapper,.rights-select .ng-select-container .ng-arrow-wrapper{padding:0 20px}.user-select .ng-select-container .ng-input,.rights-select .ng-select-container .ng-input{left:10px;right:10px;width:auto}.user-select .ng-select-container .ng-value-container .ng-placeholder{padding-top:4px!important}.ng-select-disabled .ng-select-container{background-color:#e9ecef!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .option-wrapper .check-box-wrapper{position:relative}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .option-wrapper .check-box-wrapper input{visibility:hidden;width:20px;height:20px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .option-wrapper .check-box-wrapper .icon-wrapper{position:absolute;top:0px;left:0px;width:20px;height:20px;border:1px solid blue;display:flex;justify-content:center;align-items:center}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .option-wrapper .check-box-wrapper .icon-wrapper .icon{color:#00f;display:none;justify-content:center;align-items:center;font-weight:bold}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option-selected .option-wrapper .check-box-wrapper .icon-wrapper .icon{display:flex}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option-selected .option-wrapper .label-wrapper{color:#00f}.ng-select .ng-select-focused:not(.ng-select-opened) .ng-select-container{border-color:#ccc;box-shadow:none}.add-permsion-wrapper{height:calc(100% - 50px);overflow:auto}\n"], components: [{ type: i6.NdfNuxeoDialog, selector: "ndf-nuxeo-dialog", inputs: ["dialogTitle", "subTitle", "loaderMode"] }, { type: i7.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: i8.AvatarComponent, selector: "cts-avatar", inputs: ["user"] }], directives: [{ type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.SetRtlDirective, selector: "[SetRtl]" }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i7.ɵl, selector: "[ng-notfound-tmp]" }, { type: i7.ɵf, selector: "[ng-option-tmp]" }], pipes: { "translate": i11.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
164
+ AddPermissionsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AddPermissionsDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: i2.PermissionService }, { token: i3.CustomToastrService }, { token: i4.FormBuilder }, { token: i5.TranslationService }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
165
+ AddPermissionsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AddPermissionsDialogComponent, selector: "app-add-permissions-dialog", ngImport: i0, template: "<form [formGroup]=\"permissionForm\" class=\"h-full\" SetRtl>\r\n\r\n <div class=\"flex flex-col h-full\">\r\n <div class=\"add-permsion-wrapper\">\r\n <span class=\"text-gray-900 text-lg\" *ngIf=\"state == 'update'\">\r\n {{ \"permission.edit_permission\" | translate }}\r\n </span>\r\n <span class=\"text-gray-900 text-lg\" *ngIf=\"state !== 'update'\">\r\n {{ \"permission.add_new_permission\" | translate }}\r\n </span>\r\n \r\n <div class=\"user-select mt-5\" *ngIf=\"state != 'update'\">\r\n <label class=\"text-base font-bold mb-0\">\r\n {{ 'permission.username' | translate}}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-select \r\n [items]=\"permissionService.departmentUsers\"\r\n [placeholder]=\"'permission.placeholder' | translate\"\r\n [multiple]=\"true\"\r\n [loading]=\"refreshUsers\"\r\n bindLabel=\"displayLabel\"\r\n bindValue=\"properties.username\"\r\n formControlName=\"users\"\r\n >\r\n <ng-template ng-notfound-tmp let-searchTerm=\"searchTerm\">\r\n <div class=\"ng-option disabled\">\r\n {{'permission.ngSelect_resultNotFound' | translate}}\r\n </div>\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\">\r\n <div class=\"flex flex-col h-full\">\r\n <div class=\"flex flex-row\">\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: item.properties.firstName,\r\n lastName: item.properties.lastName\r\n }\r\n }\">\r\n </cts-avatar>\r\n </div>\r\n <div class=\"flex flex-col pt-0 px-2\">\r\n <span>{{item.displayLabel}}</span>\r\n <span>{{item.properties.email}}-{{item.properties.username}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n <div class=\"mt-3 rights-select\">\r\n <label class=\"text-base font-bold mb-0\">\r\n {{ \"permission.Rights\" | translate }}\r\n <span class=\"text-danger\">*</span>\r\n </label>\r\n <ng-select \r\n [items]=\"rights\"\r\n [placeholder]=\"'permission.rightsPlaceholder' | translate\"\r\n bindLabel=\"label\"\r\n bindValue=\"value\"\r\n formControlName=\"permission\" \r\n [(ngModel)]=\"editableRight\"\r\n >\r\n </ng-select>\r\n </div>\r\n \r\n <!--<div class=\"flex flex-row mt-5\">\r\n <span class=\"text-gray-900 text-base font-bold\">\r\n {{ \"permission.timeframe\" | translate }}\r\n <span class=\"text-danger\">*</span>:</span>\r\n <div class=\"mx-2\">\r\n <label class=\"inline-flex items-center\">\r\n <input type=\"radio\" class=\"form-radio\" name=\"radio\" value=\"Permanent\" [checked]=\"timeFrame == 'Permanent'\"\r\n (click)=\"timeFrame = 'Permanent'\" />\r\n <span class=\"mx-2 mt-1 text-gray-900 text-sm font-bold\">{{\r\n \"permission.permanent\" | translate\r\n }}</span>\r\n </label>\r\n </div>\r\n <div rtl>\r\n <label class=\"inline-flex items-center\">\r\n <input type=\"radio\" class=\"form-radio\" name=\"radio\" value=\"Date-Based\" [checked]=\"timeFrame == 'Date-Based'\"\r\n (click)=\"timeFrame = 'Date-Based'\" />\r\n <span class=\"mx-2 mt-1 text-gray-900 text-sm font-bold\">{{\r\n \"permission.Date_based\" | translate\r\n }}</span>\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col mt-2\">\r\n <label class=\"text-base font-bold text-gray-900 mb-0\">{{ \"permission.from\" | translate }}</label>\r\n <cts-dynamic-form-hijri-dateitem \r\n formControlName=\"begin\" \r\n [isDisabled]=\"timeFrame == 'Permanent'\"\r\n [(ngModel)]=\"editableBegin\">\r\n </cts-dynamic-form-hijri-dateitem>\r\n <label class=\"text-base font-bold text-gray-900 mb-0\">{{ \"permission.to\" | translate }}</label>\r\n <cts-dynamic-form-hijri-dateitem \r\n formControlName=\"end\" \r\n [isDisabled]=\"timeFrame == 'Permanent'\"\r\n [(ngModel)]=\"editableEnd\">\r\n </cts-dynamic-form-hijri-dateitem>\r\n <div *ngIf=\"permissionForm?.errors?.notValid\">\r\n <span class=\"text-red-500 text-base -mt-3 \">{{\r\n \"permission.endStartError\" | translate\r\n }}</span>\r\n </div>\r\n </div>-->\r\n </div>\r\n\r\n <div class=\"flex flex-row justify-between mt-5 flex-wrap\">\r\n <div class=\"d-flex\">\r\n <button *ngIf=\"state != 'update'\" [disabled]=\"createAndAdd\" class=\"submission-button\"\r\n (click)=\"create(permissionForm.value)\">\r\n <span *ngIf=\"!creating;else loader\">{{ \"permission.create\" | translate }}</span>\r\n </button>\r\n <button class=\"submission-button\" (click)=\"edit(permissionForm.value)\" *ngIf=\"state == 'update'\">\r\n <span *ngIf=\"!updating;else loader\">{{ \"permission.update\" | translate }}</span>\r\n </button>\r\n <button *ngIf=\"state != 'update'\" class=\"submission-button w-44\" (click)=\"\r\n createandAddAnother(permissionForm, permissionForm.value)\r\n \">\r\n <span *ngIf=\"!createAndAdd;else loader\">{{ \"permission.createAndAdd\" | translate }}</span>\r\n </button>\r\n </div>\r\n <div>\r\n <button class=\"cancelation-button mb-3\" (click)=\"cancel(false)\">\r\n {{ \"BUTTONS.Cancel\" | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<ng-template #loader>\r\n <mat-spinner [value]=\"90\" [strokeWidth]=\"3\" overlay=\"true\" [diameter]=\"25\" color=\"warn\">\r\n </mat-spinner>\r\n</ng-template>\r\n", styles: [".form-radio{appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;user-select:none;flex-shrink:0;border-radius:100%;height:1em;width:1em;color:#4299e1;background-color:#fff;border-color:#e2e8f0;border-width:1px}.form-radio:checked{background-image:url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media not print{.form-radio::-ms-check{border-width:1px;color:transparent;background:inherit;border-color:inherit;border-radius:inherit}}.form-radio:focus{outline:none;box-shadow:0 0 0 3px #4299e180;border-color:#63b3ed}.select-label{color:#8f98aa;font-size:12px;margin-bottom:0}.user-select .ng-select-container,.rights-select .ng-select-container{border:1px solid #ccc!important;border-radius:5px!important;background-color:#8f98aa1a!important}.user-select .ng-select-container .ng-value-container,.rights-select .ng-select-container .ng-value-container{padding:unset!important}.user-select .ng-select-container .ng-value-container .ng-placeholder,.rights-select .ng-select-container .ng-value-container .ng-placeholder{font-size:12px}.user-select .ng-select-container .ng-value-container .ng-value,.rights-select .ng-select-container .ng-value-container .ng-value{color:#495057}.user-select .ng-select-container .ng-arrow-wrapper,.rights-select .ng-select-container .ng-arrow-wrapper{padding:0 20px}.user-select .ng-select-container .ng-input,.rights-select .ng-select-container .ng-input{left:10px;right:10px;width:auto}.user-select .ng-select-container .ng-value-container .ng-placeholder{padding-top:4px!important}.ng-select-disabled .ng-select-container{background-color:#e9ecef!important}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .option-wrapper .check-box-wrapper{position:relative}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .option-wrapper .check-box-wrapper input{visibility:hidden;width:20px;height:20px}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .option-wrapper .check-box-wrapper .icon-wrapper{position:absolute;top:0px;left:0px;width:20px;height:20px;border:1px solid blue;display:flex;justify-content:center;align-items:center}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option .option-wrapper .check-box-wrapper .icon-wrapper .icon{color:#00f;display:none;justify-content:center;align-items:center;font-weight:bold}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option-selected .option-wrapper .check-box-wrapper .icon-wrapper .icon{display:flex}.ng-dropdown-panel .ng-dropdown-panel-items .ng-option-selected .option-wrapper .label-wrapper{color:#00f}.ng-select .ng-select-focused:not(.ng-select-opened) .ng-select-container{border-color:#ccc;box-shadow:none}.add-permsion-wrapper{height:calc(100% - 50px);overflow:auto}\n"], components: [{ type: i6.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: i7.AvatarComponent, selector: "cts-avatar", inputs: ["user"] }, { type: i8.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.SetRtlDirective, selector: "[SetRtl]" }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.ɵl, selector: "[ng-notfound-tmp]" }, { type: i6.ɵf, selector: "[ng-option-tmp]" }], pipes: { "translate": i11.TranslatePipe }, encapsulation: i0.ViewEncapsulation.None });
183
166
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AddPermissionsDialogComponent, decorators: [{
184
167
  type: Component,
185
168
  args: [{
@@ -191,5 +174,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
191
174
  }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: i2.PermissionService }, { type: i3.CustomToastrService }, { type: i4.FormBuilder }, { type: i5.TranslationService }, { type: undefined, decorators: [{
192
175
  type: Inject,
193
176
  args: [MAT_DIALOG_DATA]
194
- }] }, { type: i0.Injector }]; } });
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXBlcm1pc3Npb25zLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb25zL2FkZC1wZXJtaXNzaW9ucy1kaWFsb2cvYWRkLXBlcm1pc3Npb25zLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb25zL2FkZC1wZXJtaXNzaW9ucy1kaWFsb2cvYWRkLXBlcm1pc3Npb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFLTixpQkFBaUIsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVOLFdBQVcsRUFFWCxVQUFVLEVBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxFQUFFLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBSXhDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBRTVGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVFyQyxNQUFNLE9BQU8sNkJBQ1osU0FBUSxtQkFBNEQ7SUFtQnBFLFlBQ1MsU0FBc0QsRUFDdkQsaUJBQW9DLEVBQ25DLGFBQWtDLEVBQ2xDLEVBQWUsRUFDZixTQUE2QixFQUNaLElBQUksRUFDN0IsUUFBa0I7O1FBRWxCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQVJSLGNBQVMsR0FBVCxTQUFTLENBQTZDO1FBQ3ZELHNC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QyxDQUFDO0lBQ1QsQ0FBQztJQWlHRCxNQUFNLENBQUMsTUFBTTtRQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7OzJIQWhQVyw2QkFBNkIsK0tBMEJoQyxlQUFlOytHQTFCWiw2QkFBNkIseUZDL0IxQyx5OElBa0hBOzRGRG5GYSw2QkFBNkI7a0JBTnpDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLDRCQUE0QjtvQkFDdEMsV0FBVyxFQUFFLHlDQUF5QztvQkFDdEQsU0FBUyxFQUFFLENBQUMseUNBQXlDLENBQUM7b0JBQ3RELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUNyQzs7MEJBMkJFLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdEluamVjdCxcclxuXHRJbmplY3RvcixcclxuXHRPbkRlc3Ryb3ksXHJcblx0T25Jbml0LFxyXG5cdFZpZXdDaGlsZCxcclxuXHRWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG5cdEZvcm1CdWlsZGVyLFxyXG5cdEZvcm1Db250cm9sLFxyXG5cdEZvcm1Hcm91cCxcclxuXHRWYWxpZGF0b3JzXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE5nU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnQG5nLXNlbGVjdC9uZy1zZWxlY3QnO1xyXG5pbXBvcnQgeyBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vcGVybWlzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2Jhc2UvYmFzZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGlhbG9nQWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL251eGVvLWRpYWxvZy9tb2RlbHMvZGlhbG9nLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLWFkZC1wZXJtaXNzaW9ucy1kaWFsb2cnLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9hZGQtcGVybWlzc2lvbnMtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9hZGQtcGVybWlzc2lvbnMtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcblx0ZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkUGVybWlzc2lvbnNEaWFsb2dDb21wb25lbnRcclxuXHRleHRlbmRzIEJhc2VEaWFsb2dDb21wb25lbnQ8QWRkUGVybWlzc2lvbnNEaWFsb2dDb21wb25lbnQsIGFueSwgYW55PlxyXG5cdGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG5cdHJpZ2h0cyA9IFtdO1xyXG5cdGlkID0gbnVsbDtcclxuXHR0aW1lRnJhbWUgPSAnUGVybWFuZW50JztcclxuXHRuZXdQZXJtaXNzaW9uID0ge307XHJcblx0c3RhdGUgPSBudWxsO1xyXG5cdGFjbElkID0gbnVsbDtcclxuXHR1c2VybmFtZSA9IG51bGw7XHJcblx0ZWRpdGFibGVSaWdodDsgLy90byBwYXNzIFJpZ2h0cyB0byBkaWFsb2cgaWYgd2UgYXJlIGluIHVwZGF0ZSBtb2RlXHJcblx0ZWRpdGFibGVCZWdpbjsgLy90byBwYXNzIGJlZ2luRGF0ZSB0byBkaWFsb2cgaWYgd2UgYXJlIGluIHVwZGF0ZSBtb2RlXHJcblx0ZWRpdGFibGVFbmQ7IC8vdG8gcGFzcyBlbmREYXRlIHRvIGRpYWxvZyBpZiB3ZSBhcmUgaW4gdXBkYXRlIG1vZGVcclxuXHRzdWJzY3JpcHRpb25zJDogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHRwZXJtaXNzaW9uRm9ybTogRm9ybUdyb3VwO1xyXG5cdGNyZWF0aW5nID0gZmFsc2U7XHJcblx0dXBkYXRpbmcgPSBmYWxzZTtcclxuXHRjcmVhdGVBbmRBZGQgPSBmYWxzZTtcclxuXHRyZWZyZXNoVXNlcnMgPSBmYWxzZTtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QWRkUGVybWlzc2lvbnNEaWFsb2dDb21wb25lbnQ+LFxyXG5cdFx0cHVibGljIHBlcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcclxuXHRcdHByaXZhdGUgdG9zdGVyU2VydmljZTogQ3VzdG9tVG9hc3RyU2VydmljZSxcclxuXHRcdHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG5cdFx0cHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0aW9uU2VydmljZSxcclxuXHRcdEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBkYXRhLFxyXG5cdFx0aW5qZWN0b3I6IEluamVjdG9yXHJcblx0KSB7XHJcblx0XHRzdXBlcihpbmplY3Rvcik7XHJcblx0XHR0aGlzLmlkID0gZGF0YS5pZDtcclxuXHRcdGRhdGEucmlnaHRzPy5tYXAoKGUpID0+IHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdFtcclxuXHRcdFx0XHRcdCdDb25zdW1lcicsXHJcblx0XHRcdFx0XHQnRWRpdG9yJyxcclxuXHRcdFx0XHRcdCdDb250cmlidXRvcicsXHJcblx0XHRcdFx0XHQnQ29sbGFib3JhdG9yJyxcclxuXHRcdFx0XHRcdCdDb29yZGluYXRvcicsXHJcblx0XHRcdFx0XHQnRG9jdW1lbnRDb250cm9sbGVyJ1xyXG5cdFx0XHRcdF0uaW5jbHVkZXMoZSlcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0dGhpcy5yaWdodHMucHVzaCh7XHJcblx0XHRcdFx0XHRsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgcmlnaHRzLiR7ZX1gKSxcclxuXHRcdFx0XHRcdHZhbHVlOiBlXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5zdGF0ZSA9IGRhdGEuc3RhdGUgfHwgbnVsbDtcclxuXHRcdHRoaXMuYWNsSWQgPSBkYXRhLmFjbElkIHx8IG51bGw7XHJcblx0XHR0aGlzLnVzZXJuYW1lID0gZGF0YS51c2VybmFtZSB8fCBudWxsO1xyXG5cdFx0dGhpcy5lZGl0YWJsZVJpZ2h0ID0gZGF0YS5lZGl0YWJsZVJpZ2h0IHx8IG51bGw7XHJcblx0XHR0aGlzLmVkaXRhYmxlQmVnaW4gPSBkYXRhLmVkaXRhYmxlQmVnaW4gfHwgbnVsbDtcclxuXHRcdHRoaXMuZWRpdGFibGVFbmQgPSBkYXRhLmVkaXRhYmxlRW5kIHx8IG51bGw7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMucGVybWlzc2lvbkZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0YmVnaW46IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuXHRcdFx0XHRlbmQ6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuXHRcdFx0XHRwZXJtaXNzaW9uOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG5cdFx0XHRcdHVzZXJzOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcblx0XHRcdH0sXHJcblx0XHRcdHsgdmFsaWRhdG9yOiB0aGlzLmNoZWNrRGF0ZXMgfVxyXG5cdFx0KTtcclxuXHRcdC8vKHRoaXMuZWRpdGFibGVCZWdpbiA9PSBudWxsICYmIHRoaXMuZWRpdGFibGVFbmQgPT0gbnVsbCkgPyB0aGlzLnRpbWVGcmFtZSA9ICdQZXJtYW5lbnQnIDogdGhpcy50aW1lRnJhbWUgPSAnRGF0ZS1CYXNlZCdcclxuXHR9XHJcblx0Y2hlY2tEYXRlcyhncm91cDogRm9ybUdyb3VwKSB7XHJcblx0XHRpZiAoZ3JvdXAuY29udHJvbHMuZW5kLnZhbHVlIDwgZ3JvdXAuY29udHJvbHMuYmVnaW4udmFsdWUpIHtcclxuXHRcdFx0cmV0dXJuIHsgbm90VmFsaWQ6IHRydWUgfTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBudWxsO1xyXG5cdH1cclxuXHRjcmVhdGVhbmRBZGRBbm90aGVyOiBEaWFsb2dBY3Rpb25UeXBlID0gKFxyXG5cdFx0cGVybWlzc2lvbkZvcm0sXHJcblx0XHRuZXdQZXJtaXNzaW9uOiBhbnlcclxuXHQpID0+IHtcclxuXHRcdGlmICh0aGlzLnBlcm1pc3Npb25Gb3JtLmludmFsaWQpIHtcclxuXHRcdFx0YWxlcnQodGhpcy50cmFuc2xhdGUuaW5zdGFudCgncGVybWlzc2lvbi5GSUxMX1JFUVVJUkVEX0ZJRUxEJykpO1xyXG5cdFx0XHRyZXR1cm4gb2YobnVsbCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmNyZWF0ZUFuZEFkZCA9IHRydWU7XHJcblx0XHRcdHRoaXMubmV3UGVybWlzc2lvbiA9IHtcclxuXHRcdFx0XHQuLi5uZXdQZXJtaXNzaW9uLFxyXG5cdFx0XHRcdHBlcm1pc3Npb246IG5ld1Blcm1pc3Npb24ucGVybWlzc2lvbixcclxuXHRcdFx0XHR1c2VyczogbmV3UGVybWlzc2lvbi51c2VycyxcclxuXHRcdFx0XHRhY2w6ICdsb2NhbCcsXHJcblx0XHRcdFx0YmxvY2tJbmhlcml0YW5jZTogdHJ1ZSxcclxuXHRcdFx0XHRub3RpZnk6IHRydWVcclxuXHRcdFx0fTtcclxuXHRcdFx0cmV0dXJuIHRoaXMucGVybWlzc2lvblNlcnZpY2VcclxuXHRcdFx0XHQuYWRkTmV3TG9jYWxQZXJtaXNzaW9ucyh0aGlzLmlkLCB0aGlzLm5ld1Blcm1pc3Npb24pXHJcblx0XHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0XHR0YXAoXHJcblx0XHRcdFx0XHRcdChyZXMpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRpZiAocmVzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0J3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5TVUNDRVNTJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuQUREX1BFUk1JU1NJT05fU1VDQ0VTUydcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmNyZWF0ZUFuZEFkZEFub3RoZXIuZW1pdCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5yZWZyZXNoVXNlckFycmF5KG5ld1Blcm1pc3Npb24udXNlcnMpO1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5wZXJtaXNzaW9uRm9ybS5yZXNldCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy50aW1lRnJhbWUgPSAnUGVybWFuZW50JztcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY3JlYXRlQW5kQWRkID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHQoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jcmVhdGVBbmRBZGQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdyhcclxuXHRcdFx0XHRcdFx0XHRcdCdlcnJvcicsXHJcblx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5FUlJPUicsXHJcblx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5BRERfUEVSTUlTU0lPTl9GQUlMJ1xyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH07XHJcblx0cmVmcmVzaFVzZXJBcnJheSh1c2Vycykge1xyXG5cdFx0dGhpcy5yZWZyZXNoVXNlcnMgPSB0cnVlO1xyXG5cdFx0bGV0IHRlbXBBcnIgPSBbXTtcclxuXHRcdHRlbXBBcnIucHVzaCguLi50aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmRlcGFydG1lbnRVc2Vycyk7XHJcblx0XHR0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmRlcGFydG1lbnRVc2VycyA9IFtdO1xyXG5cdFx0dXNlcnMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG5cdFx0XHR0ZW1wQXJyLmZvckVhY2goKHVzZXIsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0aWYgKHVzZXIucHJvcGVydGllcy51c2VybmFtZSA9PT0gZWxlbWVudCkge1xyXG5cdFx0XHRcdFx0dGVtcEFyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMucGVybWlzc2lvblNlcnZpY2UuZGVwYXJ0bWVudFVzZXJzID0gdGVtcEFycjtcclxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHR0aGlzLnJlZnJlc2hVc2VycyA9IGZhbHNlO1xyXG5cdFx0fSwgMjAwKTtcclxuXHR9XHJcblx0Y3JlYXRlOiBEaWFsb2dBY3Rpb25UeXBlID0gKG5ld1Blcm1pc3Npb246IGFueSkgPT4ge1xyXG5cdFx0LypcclxuICAgIG5ld1Blcm1pc3Npb24gPSB7XHJcbiAgICAgIGJlZ2luOm51bGwsXHJcbiAgICAgIGVuZDpudWxsLFxyXG4gICAgICBwZXJtaXNzaW9uOiBSZWFkLFJlYWRXcml0ZS4uLi5ldGMsXHJcbiAgICAgIHVzZXJzOltcImZtX3VzZXJcIl0uLi4uZXRjXHJcbiAgICB9XHJcbiAgICAqL1xyXG5cdFx0aWYgKHRoaXMucGVybWlzc2lvbkZvcm0uaW52YWxpZCkge1xyXG5cdFx0XHRhbGVydCh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdwZXJtaXNzaW9uLkZJTExfUkVRVUlSRURfRklFTEQnKSk7XHJcblx0XHRcdHJldHVybiBvZihudWxsKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuY3JlYXRpbmcgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLm5ld1Blcm1pc3Npb24gPSB7XHJcblx0XHRcdFx0Li4ubmV3UGVybWlzc2lvbixcclxuXHRcdFx0XHRwZXJtaXNzaW9uOiBuZXdQZXJtaXNzaW9uLnBlcm1pc3Npb24sXHJcblx0XHRcdFx0Y29tbWVudDogJycsXHJcblx0XHRcdFx0ZW1haWw6IG51bGwsXHJcblx0XHRcdFx0bm90aWZ5OiB0cnVlXHJcblx0XHRcdH07XHJcblx0XHRcdHJldHVybiB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlXHJcblx0XHRcdFx0LmFkZE5ld0xvY2FsUGVybWlzc2lvbnModGhpcy5pZCwgdGhpcy5uZXdQZXJtaXNzaW9uKVxyXG5cdFx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdFx0dGFwKFxyXG5cdFx0XHRcdFx0XHQocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJlcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdzdWNjZXNzJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuU1VDQ0VTUycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdUT0FTVEVSLkFERF9QRVJNSVNTSU9OX1NVQ0NFU1MnXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5jYW5jZWwodHJ1ZSk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0XHQoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jcmVhdGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudG9zdGVyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdFx0XHRcdFx0J2Vycm9yJyxcclxuXHRcdFx0XHRcdFx0XHRcdCdUT0FTVEVSLkVSUk9SJyxcclxuXHRcdFx0XHRcdFx0XHRcdCdUT0FTVEVSLkFERF9QRVJNSVNTSU9OX0ZBSUwnXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHRcdCk7XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0ZWRpdDogRGlhbG9nQWN0aW9uVHlwZSA9IChuZXdQZXJtaXNzaW9uOiBhbnkpID0+IHtcclxuXHRcdHRoaXMucGVybWlzc2lvbkZvcm0uZ2V0KCd1c2VycycpLnNldFZhbHVlKFt0aGlzLnVzZXJuYW1lXSk7XHJcblx0XHRpZiAodGhpcy50aW1lRnJhbWUgPT0gJ1Blcm1hbmVudCcpIHtcclxuXHRcdFx0dGhpcy5lZGl0YWJsZUJlZ2luID0gdGhpcy5lZGl0YWJsZUVuZCA9IG51bGw7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5wZXJtaXNzaW9uRm9ybS5pbnZhbGlkKSB7XHJcblx0XHRcdGFsZXJ0KHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3Blcm1pc3Npb24uRklMTF9SRVFVSVJFRF9GSUVMRCcpKTtcclxuXHRcdFx0cmV0dXJuIG9mKG51bGwpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy51cGRhdGluZyA9IHRydWU7XHJcblx0XHRcdHRoaXMubmV3UGVybWlzc2lvbiA9IHtcclxuXHRcdFx0XHQuLi5uZXdQZXJtaXNzaW9uLFxyXG5cdFx0XHRcdHBlcm1pc3Npb246IG5ld1Blcm1pc3Npb24ucGVybWlzc2lvbixcclxuXHRcdFx0XHRiZWdpbjogdGhpcy5lZGl0YWJsZUJlZ2luLFxyXG5cdFx0XHRcdGVuZDogdGhpcy5lZGl0YWJsZUVuZCxcclxuXHRcdFx0XHRjb21tZW50OiAnJyxcclxuXHRcdFx0XHRlbWFpbDogbnVsbCxcclxuXHRcdFx0XHRub3RpZnk6IGZhbHNlLFxyXG5cdFx0XHRcdHVzZXJuYW1lOiB0aGlzLnVzZXJuYW1lLnByb3BlcnRpZXMudXNlcm5hbWUsXHJcblx0XHRcdFx0aWQ6IHRoaXMuYWNsSWRcclxuXHRcdFx0fTtcclxuXHRcdFx0cmV0dXJuIHRoaXMucGVybWlzc2lvblNlcnZpY2VcclxuXHRcdFx0XHQuZWRpdExvY2FsUGVybWlzc2lvbnModGhpcy5pZCwgdGhpcy5uZXdQZXJtaXNzaW9uKVxyXG5cdFx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdFx0dGFwKFxyXG5cdFx0XHRcdFx0XHQocmVzKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHJlcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdzdWNjZXNzJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0J1RPQVNURVIuU1VDQ0VTUycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdUT0FTVEVSLkVESVRfUEVSTUlTU0lPTl9TVUNDRVNTJ1xyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuY2FuY2VsKHRydWUpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0KGVycikgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudXBkYXRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdyhcclxuXHRcdFx0XHRcdFx0XHRcdCdlcnJvcicsXHJcblx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5FUlJPUicsXHJcblx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5FRElUX1BFUk1JU1NJT05fRkFJTCdcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdFx0KTtcclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRjYW5jZWwocmVzdWx0KSB7XHJcblx0XHR0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMkLmZvckVhY2goKGUpID0+IGUudW5zdWJzY3JpYmUoKSk7XHJcblx0fVxyXG59XHJcbiIsIjxuZGYtbnV4ZW8tZGlhbG9nIGRpYWxvZ1RpdGxlPVwie3sgJ0NSRUFURS5jcmVhdGVGaWxlJyB8IHRyYW5zbGF0ZSB9fVwiPlxyXG5cdDxuZy10ZW1wbGF0ZSAjY29udGVudFRlbXBsYXRlPlxyXG5cdFx0PGZvcm0gW2Zvcm1Hcm91cF09XCJwZXJtaXNzaW9uRm9ybVwiIGNsYXNzPVwiaC1mdWxsXCIgU2V0UnRsPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBoLWZ1bGxcIj5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiYWRkLXBlcm1zaW9uLXdyYXBwZXJcIj5cclxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LWxnXCIgKm5nSWY9XCJzdGF0ZSA9PSAndXBkYXRlJ1wiPlxyXG5cdFx0XHRcdFx0XHR7eyAncGVybWlzc2lvbi5lZGl0X3Blcm1pc3Npb24nIHwgdHJhbnNsYXRlIH19XHJcblx0XHRcdFx0XHQ8L3NwYW4+XHJcblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRleHQtZ3JheS05MDAgdGV4dC1sZ1wiICpuZ0lmPVwic3RhdGUgIT09ICd1cGRhdGUnXCI+XHJcblx0XHRcdFx0XHRcdHt7ICdwZXJtaXNzaW9uLmFkZF9uZXdfcGVybWlzc2lvbicgfCB0cmFuc2xhdGUgfX1cclxuXHRcdFx0XHRcdDwvc3Bhbj5cclxuXHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwidXNlci1zZWxlY3QgbXQtNVwiICpuZ0lmPVwic3RhdGUgIT0gJ3VwZGF0ZSdcIj5cclxuXHRcdFx0XHRcdFx0PGxhYmVsIGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZCBtYi0wXCI+XHJcblx0XHRcdFx0XHRcdFx0e3sgJ3Blcm1pc3Npb24udXNlcm5hbWUnIHwgdHJhbnNsYXRlIH19XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvbGFiZWw+XHJcblx0XHRcdFx0XHRcdDxuZy1zZWxlY3RcclxuXHRcdFx0XHRcdFx0XHRbaXRlbXNdPVwicGVybWlzc2lvblNlcnZpY2UuZGVwYXJ0bWVudFVzZXJzXCJcclxuXHRcdFx0XHRcdFx0XHRbcGxhY2Vob2xkZXJdPVwiJ3Blcm1pc3Npb24ucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdFx0XHRbbXVsdGlwbGVdPVwidHJ1ZVwiXHJcblx0XHRcdFx0XHRcdFx0W2xvYWRpbmddPVwicmVmcmVzaFVzZXJzXCJcclxuXHRcdFx0XHRcdFx0XHRiaW5kTGFiZWw9XCJkaXNwbGF5TGFiZWxcIlxyXG5cdFx0XHRcdFx0XHRcdGJpbmRWYWx1ZT1cInByb3BlcnRpZXMudXNlcm5hbWVcIlxyXG5cdFx0XHRcdFx0XHRcdGZvcm1Db250cm9sTmFtZT1cInVzZXJzXCJcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBuZy1ub3Rmb3VuZC10bXAgbGV0LXNlYXJjaFRlcm09XCJzZWFyY2hUZXJtXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibmctb3B0aW9uIGRpc2FibGVkXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdHt7ICdwZXJtaXNzaW9uLm5nU2VsZWN0X3Jlc3VsdE5vdEZvdW5kJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaC1mdWxsXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZsZXgtMCB3LTggaC04IHJvdW5kZWQtZnVsbCBvdmVyZmxvdy1oaWRkZW5cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxjdHMtYXZhdGFyXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFt1c2VyXT1cIntcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0aWVzOiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaXJzdE5hbWU6IGl0ZW0ucHJvcGVydGllcy5maXJzdE5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYXN0TmFtZTogaXRlbS5wcm9wZXJ0aWVzLmxhc3ROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvY3RzLWF2YXRhcj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBwdC0wIHB4LTJcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuPnt7IGl0ZW0uZGlzcGxheUxhYmVsIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Pnt7IGl0ZW0ucHJvcGVydGllcy5lbWFpbCB9fS17e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW0ucHJvcGVydGllcy51c2VybmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fTwvc3BhblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHRcdFx0XHRcdDwvbmctc2VsZWN0PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibXQtMyByaWdodHMtc2VsZWN0XCI+XHJcblx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGQgbWItMFwiPlxyXG5cdFx0XHRcdFx0XHRcdHt7ICdwZXJtaXNzaW9uLlJpZ2h0cycgfCB0cmFuc2xhdGUgfX1cclxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0XHRcdFx0PG5nLXNlbGVjdFxyXG5cdFx0XHRcdFx0XHRcdFtpdGVtc109XCJyaWdodHNcIlxyXG5cdFx0XHRcdFx0XHRcdFtwbGFjZWhvbGRlcl09XCIncGVybWlzc2lvbi5yaWdodHNQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdGJpbmRMYWJlbD1cImxhYmVsXCJcclxuXHRcdFx0XHRcdFx0XHRiaW5kVmFsdWU9XCJ2YWx1ZVwiXHJcblx0XHRcdFx0XHRcdFx0Zm9ybUNvbnRyb2xOYW1lPVwicGVybWlzc2lvblwiXHJcblx0XHRcdFx0XHRcdFx0WyhuZ01vZGVsKV09XCJlZGl0YWJsZVJpZ2h0XCJcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHQ8L25nLXNlbGVjdD5cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvZm9ybT5cclxuXHQ8L25nLXRlbXBsYXRlPlxyXG5cclxuXHQ8bmctdGVtcGxhdGUgI2FjdGlvbnNUZW1wbGF0ZSBsZXQtZGlhbG9nPVwiZGlhbG9nXCI+XHJcblx0XHQ8YnV0dG9uXHJcblx0XHRcdCpuZ0lmPVwic3RhdGUgIT0gJ3VwZGF0ZSdcIlxyXG5cdFx0XHRbZGlzYWJsZWRdPVwiY3JlYXRlQW5kQWRkXCJcclxuXHRcdFx0Y2xhc3M9XCJzdWJtaXNzaW9uLWJ1dHRvblwiXHJcblx0XHRcdChjbGljayk9XCJkaWFsb2cuZXhlY3V0ZUFjdGlvbihjcmVhdGUsIFtwZXJtaXNzaW9uRm9ybS52YWx1ZV0pXCJcclxuXHRcdD5cclxuXHRcdFx0PHNwYW4gKm5nSWY9XCIhY3JlYXRpbmc7IGVsc2UgbG9hZGVyXCI+e3tcclxuXHRcdFx0XHQncGVybWlzc2lvbi5jcmVhdGUnIHwgdHJhbnNsYXRlXHJcblx0XHRcdH19PC9zcGFuPlxyXG5cdFx0PC9idXR0b24+XHJcblx0XHQ8YnV0dG9uXHJcblx0XHRcdGNsYXNzPVwic3VibWlzc2lvbi1idXR0b25cIlxyXG5cdFx0XHQoY2xpY2spPVwiZGlhbG9nLmV4ZWN1dGVBY3Rpb24oZWRpdCwgW3Blcm1pc3Npb25Gb3JtLnZhbHVlXSlcIlxyXG5cdFx0XHQqbmdJZj1cInN0YXRlID09ICd1cGRhdGUnXCJcclxuXHRcdD5cclxuXHRcdFx0PHNwYW4gKm5nSWY9XCIhdXBkYXRpbmc7IGVsc2UgbG9hZGVyXCI+e3tcclxuXHRcdFx0XHQncGVybWlzc2lvbi51cGRhdGUnIHwgdHJhbnNsYXRlXHJcblx0XHRcdH19PC9zcGFuPlxyXG5cdFx0PC9idXR0b24+XHJcblx0XHQ8YnV0dG9uXHJcblx0XHRcdCpuZ0lmPVwic3RhdGUgIT0gJ3VwZGF0ZSdcIlxyXG5cdFx0XHRjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uIHctNDRcIlxyXG5cdFx0XHQoY2xpY2spPVwiXHJcblx0XHRcdFx0ZGlhbG9nLmV4ZWN1dGVBY3Rpb24oY3JlYXRlYW5kQWRkQW5vdGhlciwgW1xyXG5cdFx0XHRcdFx0cGVybWlzc2lvbkZvcm0sXHJcblx0XHRcdFx0XHRwZXJtaXNzaW9uRm9ybS52YWx1ZVxyXG5cdFx0XHRcdF0pXHJcblx0XHRcdFwiXHJcblx0XHQ+XHJcblx0XHRcdDxzcGFuICpuZ0lmPVwiIWNyZWF0ZUFuZEFkZDsgZWxzZSBsb2FkZXJcIj57e1xyXG5cdFx0XHRcdCdwZXJtaXNzaW9uLmNyZWF0ZUFuZEFkZCcgfCB0cmFuc2xhdGVcclxuXHRcdFx0fX08L3NwYW4+XHJcblx0XHQ8L2J1dHRvbj5cclxuXHQ8L25nLXRlbXBsYXRlPlxyXG48L25kZi1udXhlby1kaWFsb2c+XHJcbiJdfQ==
177
+ }] }]; } });
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXBlcm1pc3Npb25zLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb25zL2FkZC1wZXJtaXNzaW9ucy1kaWFsb2cvYWRkLXBlcm1pc3Npb25zLWRpYWxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL3Blcm1pc3Npb25zL2FkZC1wZXJtaXNzaW9ucy1kaWFsb2cvYWRkLXBlcm1pc3Npb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBZ0MsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFlLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBY3pFLE1BQU0sT0FBTyw2QkFBNkI7SUFpQnhDLFlBQ1UsU0FBc0QsRUFDdkQsaUJBQW9DLEVBQ25DLGFBQWtDLEVBQ2xDLEVBQWUsRUFDZixTQUE2QixFQUNaLElBQUk7UUFMckIsY0FBUyxHQUFULFNBQVMsQ0FBNkM7UUFDdkQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNuQyxrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFDbEMsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGNBQVMsR0FBVCxTQUFTLENBQW9CO1FBckJ2QyxXQUFNLEdBQUMsRUFBRSxDQUFDO1FBQ1YsT0FBRSxHQUFHLElBQUksQ0FBQztRQUNWLGNBQVMsR0FBRSxXQUFXLENBQUM7UUFD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QUM7b0JBQ3RELGFBQWEsRUFBQyxpQkFBaUIsQ0FBQyxJQUFJO2lCQUNyQzs7MEJBd0JJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBOZ1NlbGVjdENvbXBvbmVudCB9IGZyb20gJ0BuZy1zZWxlY3Qvbmctc2VsZWN0JztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vcGVybWlzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1hZGQtcGVybWlzc2lvbnMtZGlhbG9nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLXBlcm1pc3Npb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYWRkLXBlcm1pc3Npb25zLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246Vmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkUGVybWlzc2lvbnNEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcmlnaHRzPVtdO1xyXG4gIGlkID0gbnVsbDtcclxuICB0aW1lRnJhbWU9ICdQZXJtYW5lbnQnO1xyXG4gIG5ld1Blcm1pc3Npb24gPSB7fVxyXG4gIHN0YXRlID0gbnVsbDtcclxuICBhY2xJZCA9IG51bGw7XHJcbiAgdXNlcm5hbWUgPSBudWxsO1xyXG4gIGVkaXRhYmxlUmlnaHQ7Ly90byBwYXNzIFJpZ2h0cyB0byBkaWFsb2cgaWYgd2UgYXJlIGluIHVwZGF0ZSBtb2RlXHJcbiAgZWRpdGFibGVCZWdpbjsvL3RvIHBhc3MgYmVnaW5EYXRlIHRvIGRpYWxvZyBpZiB3ZSBhcmUgaW4gdXBkYXRlIG1vZGVcclxuICBlZGl0YWJsZUVuZDsvL3RvIHBhc3MgZW5kRGF0ZSB0byBkaWFsb2cgaWYgd2UgYXJlIGluIHVwZGF0ZSBtb2RlXHJcbiAgc3Vic2NyaXB0aW9ucyQ6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcGVybWlzc2lvbkZvcm06IEZvcm1Hcm91cDtcclxuICBjcmVhdGluZyA9IGZhbHNlO1xyXG4gIHVwZGF0aW5nID0gZmFsc2U7XHJcbiAgY3JlYXRlQW5kQWRkID0gZmFsc2U7XHJcbiAgcmVmcmVzaFVzZXJzID0gZmFsc2U7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPEFkZFBlcm1pc3Npb25zRGlhbG9nQ29tcG9uZW50PixcclxuICAgIHB1YmxpYyBwZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvc3RlclNlcnZpY2U6IEN1c3RvbVRvYXN0clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgZGF0YSkge1xyXG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XHJcbiAgICBkYXRhLnJpZ2h0cy5tYXAoZSA9PiB7XHJcbiAgICAgIGlmIChbXHJcbiAgICAgICAgXCJDb25zdW1lclwiLFxyXG4gICAgICAgIFwiRWRpdG9yXCIsXHJcbiAgICAgICAgXCJDb250cmlidXRvclwiLFxyXG4gICAgICAgIFwiQ29sbGFib3JhdG9yXCIsXHJcbiAgICAgICAgXCJDb29yZGluYXRvclwiLFxyXG4gICAgICAgIFwiRG9jdW1lbnRDb250cm9sbGVyXCJcclxuICAgICAgXS5pbmNsdWRlcyhlKSkge1xyXG4gICAgICAgIHRoaXMucmlnaHRzLnB1c2goeyBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChgcmlnaHRzLiR7ZX1gKSwgdmFsdWU6IGUgfSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMuc3RhdGUgPSBkYXRhLnN0YXRlIHx8IG51bGw7XHJcbiAgICB0aGlzLmFjbElkID0gZGF0YS5hY2xJZCB8fCBudWxsO1xyXG4gICAgdGhpcy51c2VybmFtZSA9IGRhdGEudXNlcm5hbWUgfHwgbnVsbDtcclxuICAgIHRoaXMuZWRpdGFibGVSaWdodCA9IGRhdGEuZWRpdGFibGVSaWdodCB8fCBudWxsO1xyXG4gICAgdGhpcy5lZGl0YWJsZUJlZ2luID0gZGF0YS5lZGl0YWJsZUJlZ2luIHx8IG51bGw7XHJcbiAgICB0aGlzLmVkaXRhYmxlRW5kID0gZGF0YS5lZGl0YWJsZUVuZCB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGJlZ2luOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgIGVuZDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICBwZXJtaXNzaW9uOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICB1c2VyczogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgIH0sIHsgdmFsaWRhdG9yOiB0aGlzLmNoZWNrRGF0ZXMgfSk7XHJcbiAgICAvLyh0aGlzLmVkaXRhYmxlQmVnaW4gPT0gbnVsbCAmJiB0aGlzLmVkaXRhYmxlRW5kID09IG51bGwpID8gdGhpcy50aW1lRnJhbWUgPSAnUGVybWFuZW50JyA6IHRoaXMudGltZUZyYW1lID0gJ0RhdGUtQmFzZWQnXHJcblxyXG4gIH1cclxuICBjaGVja0RhdGVzKGdyb3VwOiBGb3JtR3JvdXApIHtcclxuICAgIGlmIChncm91cC5jb250cm9scy5lbmQudmFsdWUgPCBncm91cC5jb250cm9scy5iZWdpbi52YWx1ZSkge1xyXG4gICAgICByZXR1cm4geyBub3RWYWxpZDogdHJ1ZSB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgY3JlYXRlYW5kQWRkQW5vdGhlcihwZXJtaXNzaW9uRm9ybSwgbmV3UGVybWlzc2lvbjogYW55KSB7XHJcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9uRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIGFsZXJ0KHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJwZXJtaXNzaW9uLkZJTExfUkVRVUlSRURfRklFTERcIikpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNyZWF0ZUFuZEFkZCA9IHRydWU7XHJcbiAgICAgIHRoaXMubmV3UGVybWlzc2lvbiA9IHtcclxuICAgICAgICAuLi5uZXdQZXJtaXNzaW9uLFxyXG4gICAgICAgIHBlcm1pc3Npb246IG5ld1Blcm1pc3Npb24ucGVybWlzc2lvbixcclxuICAgICAgICB1c2VyczogbmV3UGVybWlzc2lvbi51c2VycyxcclxuICAgICAgICBhY2w6IFwibG9jYWxcIixcclxuICAgICAgICBibG9ja0luaGVyaXRhbmNlOiB0cnVlLFxyXG4gICAgICAgIG5vdGlmeTogdHJ1ZSxcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMkLmNvbmNhdChbdGhpcy5wZXJtaXNzaW9uU2VydmljZS5hZGROZXdMb2NhbFBlcm1pc3Npb25zKHRoaXMuaWQsIHRoaXMubmV3UGVybWlzc2lvbikuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ3N1Y2Nlc3MnLCAnVE9BU1RFUi5TVUNDRVNTJywgXCJUT0FTVEVSLkFERF9QRVJNSVNTSU9OX1NVQ0NFU1NcIik7XHJcbiAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmNyZWF0ZUFuZEFkZEFub3RoZXIuZW1pdCgpO1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoVXNlckFycmF5KG5ld1Blcm1pc3Npb24udXNlcnMpO1xyXG4gICAgICAgICAgdGhpcy5wZXJtaXNzaW9uRm9ybS5yZXNldCgpO1xyXG4gICAgICAgICAgdGhpcy50aW1lRnJhbWUgPSAnUGVybWFuZW50JztcclxuICAgICAgICAgIHRoaXMuY3JlYXRlQW5kQWRkID1mYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVyciA9PiB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVBbmRBZGQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnZXJyb3InLCAnVE9BU1RFUi5FUlJPUicsIFwiVE9BU1RFUi5BRERfUEVSTUlTU0lPTl9GQUlMXCIpXHJcbiAgICAgIH0pXSlcclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIHJlZnJlc2hVc2VyQXJyYXkodXNlcnMpIHtcclxuICAgIHRoaXMucmVmcmVzaFVzZXJzID0gdHJ1ZTtcclxuICAgIGxldCB0ZW1wQXJyPSBbXTtcclxuICAgIHRlbXBBcnIucHVzaCguLi50aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmRlcGFydG1lbnRVc2Vycyk7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmRlcGFydG1lbnRVc2VycyA9IFtdO1xyXG4gICAgICB1c2Vycy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIHRlbXBBcnIuZm9yRWFjaCgodXNlcixpbmRleCkgPT4ge1xyXG4gICAgICAgICAgaWYodXNlci5wcm9wZXJ0aWVzLnVzZXJuYW1lID09PSBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRlbXBBcnIuc3BsaWNlKGluZGV4LDEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmRlcGFydG1lbnRVc2VycyA9IHRlbXBBcnI7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZWZyZXNoVXNlcnMgPSBmYWxzZTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG4gIGNyZWF0ZShuZXdQZXJtaXNzaW9uOiBhbnkpIHtcclxuICAgIC8qXHJcbiAgICBuZXdQZXJtaXNzaW9uID0ge1xyXG4gICAgICBiZWdpbjpudWxsLFxyXG4gICAgICBlbmQ6bnVsbCxcclxuICAgICAgcGVybWlzc2lvbjogUmVhZCxSZWFkV3JpdGUuLi4uZXRjLFxyXG4gICAgICB1c2VyczpbXCJmbV91c2VyXCJdLi4uLmV0Y1xyXG4gICAgfVxyXG4gICAgKi9cclxuICBpZiAodGhpcy5wZXJtaXNzaW9uRm9ybS5pbnZhbGlkKSB7XHJcbiAgICBhbGVydCh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwicGVybWlzc2lvbi5GSUxMX1JFUVVJUkVEX0ZJRUxEXCIpKVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuY3JlYXRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLm5ld1Blcm1pc3Npb24gPSB7XHJcbiAgICAgICAgLi4ubmV3UGVybWlzc2lvbixcclxuICAgICAgICBwZXJtaXNzaW9uOiBuZXdQZXJtaXNzaW9uLnBlcm1pc3Npb24sXHJcbiAgICAgICAgY29tbWVudDogXCJcIixcclxuICAgICAgICBlbWFpbDogbnVsbCxcclxuICAgICAgICBub3RpZnk6IHRydWUsXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zJC5jb25jYXQoW3RoaXMucGVybWlzc2lvblNlcnZpY2UuYWRkTmV3TG9jYWxQZXJtaXNzaW9ucyh0aGlzLmlkLCB0aGlzLm5ld1Blcm1pc3Npb24pLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdzdWNjZXNzJywgJ1RPQVNURVIuU1VDQ0VTUycsIFwiVE9BU1RFUi5BRERfUEVSTUlTU0lPTl9TVUNDRVNTXCIpO1xyXG4gICAgICAgICAgdGhpcy5jYW5jZWwodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnIgPT4ge1xyXG4gICAgICAgIHRoaXMuY3JlYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnZXJyb3InLCAnVE9BU1RFUi5FUlJPUicsIFwiVE9BU1RFUi5BRERfUEVSTUlTU0lPTl9GQUlMXCIpXHJcbiAgICAgIH1cclxuICAgICAgKV0pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgZWRpdChuZXdQZXJtaXNzaW9uOiBhbnkpIHtcclxuICAgIHRoaXMucGVybWlzc2lvbkZvcm0uZ2V0KCd1c2VycycpLnNldFZhbHVlKFt0aGlzLnVzZXJuYW1lXSlcclxuICAgIGlmKHRoaXMudGltZUZyYW1lID09ICdQZXJtYW5lbnQnKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0YWJsZUJlZ2luID0gdGhpcy5lZGl0YWJsZUVuZCA9IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9uRm9ybS5pbnZhbGlkKSB7IFxyXG4gICAgICBhbGVydCh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwicGVybWlzc2lvbi5GSUxMX1JFUVVJUkVEX0ZJRUxEXCIpKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy51cGRhdGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMubmV3UGVybWlzc2lvbiA9IHtcclxuICAgICAgICAuLi5uZXdQZXJtaXNzaW9uLFxyXG4gICAgICAgIHBlcm1pc3Npb246IG5ld1Blcm1pc3Npb24ucGVybWlzc2lvbixcclxuICAgICAgICBiZWdpbjp0aGlzLmVkaXRhYmxlQmVnaW4sXHJcbiAgICAgICAgZW5kOnRoaXMuZWRpdGFibGVFbmQsXHJcbiAgICAgICAgY29tbWVudDogXCJcIixcclxuICAgICAgICBlbWFpbDogbnVsbCxcclxuICAgICAgICBub3RpZnk6IGZhbHNlLFxyXG4gICAgICAgIHVzZXJuYW1lOiB0aGlzLnVzZXJuYW1lLnByb3BlcnRpZXMudXNlcm5hbWUsXHJcbiAgICAgICAgaWQ6IHRoaXMuYWNsSWRcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMkLmNvbmNhdChbdGhpcy5wZXJtaXNzaW9uU2VydmljZS5lZGl0TG9jYWxQZXJtaXNzaW9ucyh0aGlzLmlkLCB0aGlzLm5ld1Blcm1pc3Npb24pLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgIHRoaXMudG9zdGVyU2VydmljZS5zaG93KCdzdWNjZXNzJywgJ1RPQVNURVIuU1VDQ0VTUycsIFwiVE9BU1RFUi5FRElUX1BFUk1JU1NJT05fU1VDQ0VTU1wiKTtcclxuICAgICAgICAgIHRoaXMuY2FuY2VsKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b3N0ZXJTZXJ2aWNlLnNob3coJ2Vycm9yJywgJ1RPQVNURVIuRVJST1InLCBcIlRPQVNURVIuRURJVF9QRVJNSVNTSU9OX0ZBSUxcIilcclxuICAgICAgfVxyXG4gICAgICApXSlcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgY2FuY2VsKHJlc3VsdCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UocmVzdWx0KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zJC5mb3JFYWNoKGUgPT4gZS51bnN1YnNjcmliZSgpKVxyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cInBlcm1pc3Npb25Gb3JtXCIgY2xhc3M9XCJoLWZ1bGxcIiBTZXRSdGw+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGgtZnVsbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImFkZC1wZXJtc2lvbi13cmFwcGVyXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LWxnXCIgKm5nSWY9XCJzdGF0ZSA9PSAndXBkYXRlJ1wiPlxyXG4gICAgICAgIHt7IFwicGVybWlzc2lvbi5lZGl0X3Blcm1pc3Npb25cIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTkwMCB0ZXh0LWxnXCIgKm5nSWY9XCJzdGF0ZSAhPT0gJ3VwZGF0ZSdcIj5cclxuICAgICAgICB7eyBcInBlcm1pc3Npb24uYWRkX25ld19wZXJtaXNzaW9uXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgPC9zcGFuPlxyXG4gIFxyXG4gICAgICA8ZGl2IGNsYXNzPVwidXNlci1zZWxlY3QgbXQtNVwiICpuZ0lmPVwic3RhdGUgIT0gJ3VwZGF0ZSdcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1ib2xkIG1iLTBcIj5cclxuICAgICAgICAgIHt7ICdwZXJtaXNzaW9uLnVzZXJuYW1lJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICA8c3BhbiAgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8bmctc2VsZWN0IFxyXG4gICAgICAgICAgW2l0ZW1zXT1cInBlcm1pc3Npb25TZXJ2aWNlLmRlcGFydG1lbnRVc2Vyc1wiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3Blcm1pc3Npb24ucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcclxuICAgICAgICAgIFtsb2FkaW5nXT1cInJlZnJlc2hVc2Vyc1wiXHJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJkaXNwbGF5TGFiZWxcIlxyXG4gICAgICAgICAgYmluZFZhbHVlPVwicHJvcGVydGllcy51c2VybmFtZVwiXHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ1c2Vyc1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1ub3Rmb3VuZC10bXAgbGV0LXNlYXJjaFRlcm09XCJzZWFyY2hUZXJtXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibmctb3B0aW9uIGRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAge3sncGVybWlzc2lvbi5uZ1NlbGVjdF9yZXN1bHROb3RGb3VuZCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGgtZnVsbFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0wIHctOCBoLTggcm91bmRlZC1mdWxsIG92ZXJmbG93LWhpZGRlblwiID5cclxuICAgICAgICAgICAgICAgICAgPGN0cy1hdmF0YXIgW3VzZXJdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogaXRlbS5wcm9wZXJ0aWVzLmZpcnN0TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGxhc3ROYW1lOiBpdGVtLnByb3BlcnRpZXMubGFzdE5hbWVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgPC9jdHMtYXZhdGFyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCAgcHQtMCBweC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7aXRlbS5kaXNwbGF5TGFiZWx9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tpdGVtLnByb3BlcnRpZXMuZW1haWx9fS17e2l0ZW0ucHJvcGVydGllcy51c2VybmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIHJpZ2h0cy1zZWxlY3RcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1ib2xkIG1iLTBcIj5cclxuICAgICAgICAgIHt7IFwicGVybWlzc2lvbi5SaWdodHNcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8bmctc2VsZWN0IFxyXG4gICAgICAgICAgW2l0ZW1zXT1cInJpZ2h0c1wiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3Blcm1pc3Npb24ucmlnaHRzUGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgIGJpbmRMYWJlbD1cImxhYmVsXCJcclxuICAgICAgICAgIGJpbmRWYWx1ZT1cInZhbHVlXCJcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBlcm1pc3Npb25cIiBcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGFibGVSaWdodFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICA8L2Rpdj5cclxuICBcclxuICAgICAgPCEtLTxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IG10LTVcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZ3JheS05MDAgdGV4dC1iYXNlIGZvbnQtYm9sZFwiPlxyXG4gICAgICAgICAge3sgXCJwZXJtaXNzaW9uLnRpbWVmcmFtZVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj46PC9zcGFuPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteC0yXCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwiZm9ybS1yYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwiUGVybWFuZW50XCIgW2NoZWNrZWRdPVwidGltZUZyYW1lID09ICdQZXJtYW5lbnQnXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwidGltZUZyYW1lID0gJ1Blcm1hbmVudCdcIiAvPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTIgbXQtMSB0ZXh0LWdyYXktOTAwIHRleHQtc20gZm9udC1ib2xkXCI+e3tcclxuICAgICAgICAgICAgICBcInBlcm1pc3Npb24ucGVybWFuZW50XCIgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBydGw+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIGNsYXNzPVwiZm9ybS1yYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwiRGF0ZS1CYXNlZFwiIFtjaGVja2VkXT1cInRpbWVGcmFtZSA9PSAnRGF0ZS1CYXNlZCdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0aW1lRnJhbWUgPSAnRGF0ZS1CYXNlZCdcIiAvPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTIgbXQtMSB0ZXh0LWdyYXktOTAwIHRleHQtc20gZm9udC1ib2xkXCI+e3tcclxuICAgICAgICAgICAgICBcInBlcm1pc3Npb24uRGF0ZV9iYXNlZFwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgbXQtMlwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGQgdGV4dC1ncmF5LTkwMCBtYi0wXCI+e3sgXCJwZXJtaXNzaW9uLmZyb21cIiB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgPGN0cy1keW5hbWljLWZvcm0taGlqcmktZGF0ZWl0ZW0gXHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJiZWdpblwiIFxyXG4gICAgICAgICAgW2lzRGlzYWJsZWRdPVwidGltZUZyYW1lID09ICdQZXJtYW5lbnQnXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGFibGVCZWdpblwiPlxyXG4gICAgICAgIDwvY3RzLWR5bmFtaWMtZm9ybS1oaWpyaS1kYXRlaXRlbT5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1ib2xkIHRleHQtZ3JheS05MDAgbWItMFwiPnt7IFwicGVybWlzc2lvbi50b1wiIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cclxuICAgICAgICA8Y3RzLWR5bmFtaWMtZm9ybS1oaWpyaS1kYXRlaXRlbSBcclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVuZFwiIFxyXG4gICAgICAgICAgW2lzRGlzYWJsZWRdPVwidGltZUZyYW1lID09ICdQZXJtYW5lbnQnXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGFibGVFbmRcIj5cclxuICAgICAgICA8L2N0cy1keW5hbWljLWZvcm0taGlqcmktZGF0ZWl0ZW0+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cInBlcm1pc3Npb25Gb3JtPy5lcnJvcnM/Lm5vdFZhbGlkXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2UgLW10LTMgXCI+e3tcclxuICAgICAgICAgICAgXCJwZXJtaXNzaW9uLmVuZFN0YXJ0RXJyb3JcIiB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+LS0+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW4gbXQtNSBmbGV4LXdyYXBcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzdGF0ZSAhPSAndXBkYXRlJ1wiIFtkaXNhYmxlZF09XCJjcmVhdGVBbmRBZGRcIiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uXCJcclxuICAgICAgICAgIChjbGljayk9XCJjcmVhdGUocGVybWlzc2lvbkZvcm0udmFsdWUpXCI+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjcmVhdGluZztlbHNlIGxvYWRlclwiPnt7IFwicGVybWlzc2lvbi5jcmVhdGVcIiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwic3VibWlzc2lvbi1idXR0b25cIiAoY2xpY2spPVwiZWRpdChwZXJtaXNzaW9uRm9ybS52YWx1ZSlcIiAqbmdJZj1cInN0YXRlID09ICd1cGRhdGUnXCI+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiF1cGRhdGluZztlbHNlIGxvYWRlclwiPnt7IFwicGVybWlzc2lvbi51cGRhdGVcIiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic3RhdGUgIT0gJ3VwZGF0ZSdcIiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uIHctNDRcIiAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVhbmRBZGRBbm90aGVyKHBlcm1pc3Npb25Gb3JtLCBwZXJtaXNzaW9uRm9ybS52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgXCI+XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjcmVhdGVBbmRBZGQ7ZWxzZSBsb2FkZXJcIj57eyBcInBlcm1pc3Npb24uY3JlYXRlQW5kQWRkXCIgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWxhdGlvbi1idXR0b24gbWItM1wiIChjbGljayk9XCJjYW5jZWwoZmFsc2UpXCI+XHJcbiAgICAgICAgICB7eyBcIkJVVFRPTlMuQ2FuY2VsXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPlxyXG5cclxuPG5nLXRlbXBsYXRlICNsb2FkZXI+XHJcbiAgPG1hdC1zcGlubmVyIFt2YWx1ZV09XCI5MFwiIFtzdHJva2VXaWR0aF09XCIzXCIgb3ZlcmxheT1cInRydWVcIiBbZGlhbWV0ZXJdPVwiMjVcIiBjb2xvcj1cIndhcm5cIj5cclxuICA8L21hdC1zcGlubmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=