@bnsights/bbsf-admin-portal 1.0.0 → 1.0.5

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 (155) hide show
  1. package/bnsights-bbsf-admin-portal-1.0.5.tgz +0 -0
  2. package/bundles/bnsights-bbsf-admin-portal.umd.js +19694 -20386
  3. package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
  4. package/esm2015/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.js +2 -2
  5. package/esm2015/lib/Pages/account/account-routing.module.js +3 -1
  6. package/esm2015/lib/Pages/account/account.component.js +15 -6
  7. package/esm2015/lib/Pages/account/account.module.js +16 -8
  8. package/esm2015/lib/Pages/account/forgot-password/forgot-password.component.js +48 -0
  9. package/esm2015/lib/Pages/configurations/configuration/configuration.component.js +392 -387
  10. package/esm2015/lib/Pages/core/authentication/auth.service.js +1 -2
  11. package/esm2015/lib/Pages/departments/department/department.component.js +59 -98
  12. package/esm2015/lib/Pages/departments/department-info/department-info.component.js +85 -94
  13. package/esm2015/lib/Pages/departments/departments.module.js +4 -1
  14. package/esm2015/lib/Pages/helpCenter/help-center/help-center.component.js +224 -223
  15. package/esm2015/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.js +137 -146
  16. package/esm2015/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.js +136 -153
  17. package/esm2015/lib/Pages/home/home.component.js +32 -26
  18. package/esm2015/lib/Pages/home/home.module.js +5 -10
  19. package/esm2015/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.js +336 -317
  20. package/esm2015/lib/Pages/jobs/jobs/jobs.component.js +168 -227
  21. package/esm2015/lib/Pages/license/license/license.component.js +68 -99
  22. package/esm2015/lib/Pages/localizations/localizations.component.js +378 -341
  23. package/esm2015/lib/Pages/logs/log/log.component.js +18 -27
  24. package/esm2015/lib/Pages/lookups/lookup/lookup.component.js +297 -288
  25. package/esm2015/lib/Pages/lookups/lookup-group/lookup-group.component.js +143 -165
  26. package/esm2015/lib/Pages/lookups/lookup-item/lookup-item.component.js +234 -233
  27. package/esm2015/lib/Pages/lookups/lookups-routing.module.js +2 -2
  28. package/esm2015/lib/Pages/notifications/add/add.component.js +83 -76
  29. package/esm2015/lib/Pages/notifications/edit/edit.component.js +60 -63
  30. package/esm2015/lib/Pages/notifications/edit-email/edit-email.component.js +128 -126
  31. package/esm2015/lib/Pages/notifications/edit-sms/edit-sms.component.js +87 -85
  32. package/esm2015/lib/Pages/notifications/master-layouts/master-layouts.component.js +57 -58
  33. package/esm2015/lib/Pages/notifications/notifications-routing.module.js +1 -3
  34. package/esm2015/lib/Pages/notifications/notifications.module.js +3 -4
  35. package/esm2015/lib/Pages/notifications/template-info/template-info.component.js +232 -228
  36. package/esm2015/lib/Pages/notifications/templates/templates.component.js +347 -310
  37. package/esm2015/lib/Pages/providers/provider/provider.component.js +54 -52
  38. package/esm2015/lib/Pages/publicHolidays/public-holiday/public-holiday.component.js +268 -270
  39. package/esm2015/lib/Pages/roles/permission-set-info/permission-set-info.component.js +136 -152
  40. package/esm2015/lib/Pages/roles/permissions/permissions.component.js +182 -218
  41. package/esm2015/lib/Pages/roles/permissionsets/permissionsets.component.js +219 -254
  42. package/esm2015/lib/Pages/sectors/department-info/department-info.component.js +134 -142
  43. package/esm2015/lib/Pages/sectors/sector/sector.component.js +127 -144
  44. package/esm2015/lib/Pages/sectors/sector-info/sector-info.component.js +123 -139
  45. package/esm2015/lib/Pages/shared/Enums/ConfigurationScope.js +8 -0
  46. package/esm2015/lib/Pages/shared/Enums/ConfigurationType.js +8 -0
  47. package/esm2015/lib/Pages/shared/Enums/ConfigurationValueSource.js +6 -0
  48. package/esm2015/lib/Pages/shared/Enums/ParticipantType.js +8 -0
  49. package/esm2015/lib/Pages/shared/Services/AccountService.service.js +21 -0
  50. package/esm2015/lib/Pages/shared/Services/ConfigurationsService.service.js +15 -12
  51. package/esm2015/lib/Pages/shared/Services/DepartmentService.service.js +5 -8
  52. package/esm2015/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.js +10 -9
  53. package/esm2015/lib/Pages/shared/Services/HelpCenterService.service.js +10 -7
  54. package/esm2015/lib/Pages/shared/Services/ImpersonationRuleService.service.js +14 -8
  55. package/esm2015/lib/Pages/shared/Services/LicenseService.service.js +3 -3
  56. package/esm2015/lib/Pages/shared/Services/LogsService.js +1 -1
  57. package/esm2015/lib/Pages/shared/Services/LookupGroupsService.service.js +11 -5
  58. package/esm2015/lib/Pages/shared/Services/LookupService.service.js +31 -15
  59. package/esm2015/lib/Pages/shared/Services/PermissionSetService.service.js +18 -8
  60. package/esm2015/lib/Pages/shared/Services/PermissionsService.service.js +12 -9
  61. package/esm2015/lib/Pages/shared/Services/PublicHolidayService.service.js +9 -3
  62. package/esm2015/lib/Pages/shared/Services/SectorService.service.js +18 -13
  63. package/esm2015/lib/Pages/shared/Services/TemplateService.service.js +36 -29
  64. package/esm2015/lib/Pages/shared/Services/localizationsService.service .js +23 -13
  65. package/esm2015/lib/Pages/shared/Services/provider.service.js +5 -7
  66. package/esm2015/lib/Pages/shared/Services/userService.service.js +10 -2
  67. package/esm2015/lib/Pages/shared/models/AccountModels/forgotPasswordModel.js +6 -0
  68. package/esm2015/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.js +1 -1
  69. package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.js +1 -1
  70. package/esm2015/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.js +1 -1
  71. package/esm2015/lib/Pages/shared/models/Lookups/LookupItem.js +1 -1
  72. package/esm2015/lib/Pages/shared/models/Lookups/LookupModel.js +1 -2
  73. package/esm2015/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.js +1 -1
  74. package/esm2015/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.js +1 -1
  75. package/esm2015/lib/Pages/users/users.component.js +398 -409
  76. package/esm2015/lib/masterlayout-routing.module.js +5 -4
  77. package/esm2015/lib/masterlayout.component.js +22 -32
  78. package/esm2015/lib/masterlayout.module.js +25 -19
  79. package/fesm2015/bnsights-bbsf-admin-portal.js +17295 -17401
  80. package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
  81. package/lib/Pages/account/account.component.d.ts +5 -1
  82. package/lib/Pages/account/account.module.d.ts +8 -6
  83. package/lib/Pages/account/forgot-password/forgot-password.component.d.ts +20 -0
  84. package/lib/Pages/configurations/configuration/configuration.component.d.ts +39 -31
  85. package/lib/Pages/departments/department/department.component.d.ts +19 -15
  86. package/lib/Pages/departments/department-info/department-info.component.d.ts +31 -28
  87. package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +34 -32
  88. package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +31 -34
  89. package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +30 -35
  90. package/lib/Pages/home/home.component.d.ts +4 -4
  91. package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +43 -42
  92. package/lib/Pages/jobs/jobs/jobs.component.d.ts +56 -62
  93. package/lib/Pages/license/license/license.component.d.ts +25 -23
  94. package/lib/Pages/localizations/localizations.component.d.ts +77 -65
  95. package/lib/Pages/logs/log/log.component.d.ts +7 -11
  96. package/lib/Pages/lookups/lookup/lookup.component.d.ts +64 -59
  97. package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +44 -45
  98. package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +62 -56
  99. package/lib/Pages/notifications/add/add.component.d.ts +13 -11
  100. package/lib/Pages/notifications/edit/edit.component.d.ts +14 -14
  101. package/lib/Pages/notifications/edit-email/edit-email.component.d.ts +18 -20
  102. package/lib/Pages/notifications/edit-sms/edit-sms.component.d.ts +15 -16
  103. package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +24 -25
  104. package/lib/Pages/notifications/notifications.module.d.ts +15 -16
  105. package/lib/Pages/notifications/template-info/template-info.component.d.ts +32 -32
  106. package/lib/Pages/notifications/templates/templates.component.d.ts +54 -46
  107. package/lib/Pages/providers/provider/provider.component.d.ts +13 -12
  108. package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +29 -27
  109. package/lib/Pages/roles/permission-set-info/permission-set-info.component.d.ts +39 -40
  110. package/lib/Pages/roles/permissions/permissions.component.d.ts +49 -54
  111. package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +53 -55
  112. package/lib/Pages/sectors/department-info/department-info.component.d.ts +41 -44
  113. package/lib/Pages/sectors/sector/sector.component.d.ts +35 -33
  114. package/lib/Pages/sectors/sector-info/sector-info.component.d.ts +40 -44
  115. package/lib/Pages/shared/Enums/ConfigurationScope.d.ts +5 -0
  116. package/lib/Pages/shared/Enums/ConfigurationType.d.ts +6 -0
  117. package/lib/Pages/shared/Enums/ConfigurationValueSource.d.ts +4 -0
  118. package/lib/Pages/shared/Enums/ParticipantType.d.ts +6 -0
  119. package/lib/Pages/shared/Services/AccountService.service.d.ts +10 -0
  120. package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +7 -8
  121. package/lib/Pages/shared/Services/DepartmentService.service.d.ts +2 -2
  122. package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +5 -5
  123. package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +2 -1
  124. package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +5 -5
  125. package/lib/Pages/shared/Services/LicenseService.service.d.ts +2 -2
  126. package/lib/Pages/shared/Services/LookupGroupsService.service.d.ts +4 -4
  127. package/lib/Pages/shared/Services/LookupService.service.d.ts +14 -11
  128. package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +8 -7
  129. package/lib/Pages/shared/Services/PermissionsService.service.d.ts +5 -6
  130. package/lib/Pages/shared/Services/PublicHolidayService.service.d.ts +2 -2
  131. package/lib/Pages/shared/Services/SectorService.service.d.ts +7 -7
  132. package/lib/Pages/shared/Services/TemplateService.service.d.ts +20 -19
  133. package/lib/Pages/shared/Services/localizationsService.service .d.ts +12 -11
  134. package/lib/Pages/shared/Services/provider.service.d.ts +1 -1
  135. package/lib/Pages/shared/Services/userService.service.d.ts +2 -0
  136. package/lib/Pages/shared/models/AccountModels/forgotPasswordModel.d.ts +3 -0
  137. package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +0 -1
  138. package/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.d.ts +1 -1
  139. package/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.d.ts +0 -2
  140. package/lib/Pages/shared/models/Lookups/LookupModel.d.ts +1 -1
  141. package/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.d.ts +1 -1
  142. package/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.d.ts +1 -1
  143. package/lib/Pages/users/users.component.d.ts +54 -68
  144. package/lib/masterlayout.component.d.ts +4 -5
  145. package/lib/masterlayout.module.d.ts +8 -9
  146. package/package.json +5 -3
  147. package/src/lib/assets/sass/core/components/_variables.scss +1 -1
  148. package/src/lib/assets/sass/custom-styles-rtl.scss +5 -0
  149. package/src/lib/assets/sass/custom-styles.scss +153 -0
  150. package/src/lib/assets/sass/style-rtl.scss +2 -0
  151. package/src/lib/assets/sass/style.scss +2 -2
  152. package/bnsights-bbsf-admin-portal-0.0.1.tgz +0 -0
  153. package/bnsights-bbsf-admin-portal-1.0.0.tgz +0 -0
  154. package/esm2015/lib/Pages/notifications/edit-template/edit-template.component.js +0 -35
  155. package/lib/Pages/notifications/edit-template/edit-template.component.d.ts +0 -35
@@ -1,14 +1,11 @@
1
- import { __awaiter, __decorate } from "tslib";
2
1
  import { Component, ViewChild } from '@angular/core';
3
2
  import { FormGroup } from '@angular/forms';
4
- import { EnglishArabicDTO, FilterItem, FilterType, InputType, MultiLingualTextBoxOptions, PagingOptions, TextBoxOptions } from '@bnsights/bbsf-controls';
5
- import { BlockUI } from 'ng-block-ui';
3
+ import { ConfirmationModalOptions, EnglishArabicDTO, FilterItem, FilterType, FormOptions, InputType, MultiLingualTextBoxOptions, PagingOptions, TextBoxOptions } from '@bnsights/bbsf-controls';
6
4
  import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
7
5
  import { LookupGroupModel } from '../../shared/models/Lookups/LookupGroupModel';
8
- import { UsersIDRequestModel } from '../../shared/models/UserModels/UsersIDRequestModel';
9
6
  import * as i0 from "@angular/core";
10
- import * as i1 from "@bnsights/bbsf-utilities";
11
- import * as i2 from "../../../_metronic/core/services/page-info.service";
7
+ import * as i1 from "../../../_metronic/core/services/page-info.service";
8
+ import * as i2 from "@bnsights/bbsf-utilities";
12
9
  import * as i3 from "../../shared/Services/LookupGroupsService.service";
13
10
  import * as i4 from "@ng-bootstrap/ng-bootstrap";
14
11
  import * as i5 from "ng-block-ui";
@@ -16,203 +13,184 @@ import * as i6 from "@bnsights/bbsf-controls";
16
13
  import * as i7 from "@angular/material/menu";
17
14
  import * as i8 from "../../empty-data/empty-data.component";
18
15
  import * as i9 from "@angular/common";
19
- import * as i10 from "@angular/forms";
20
- import * as i11 from "ng-inline-svg";
16
+ import * as i10 from "ng-inline-svg";
21
17
  export class LookupGroupComponent {
22
- constructor(authService, pageInfoService, utilityService, bbsfTranslateService, environmentService, LookupGroupsService, modalService) {
23
- this.authService = authService;
18
+ constructor(pageInfoService, utilityService, lookupGroupsService, modalService, requestHandlerService) {
24
19
  this.pageInfoService = pageInfoService;
25
20
  this.utilityService = utilityService;
26
- this.bbsfTranslateService = bbsfTranslateService;
27
- this.environmentService = environmentService;
28
- this.LookupGroupsService = LookupGroupsService;
21
+ this.lookupGroupsService = lookupGroupsService;
29
22
  this.modalService = modalService;
30
- this.SubheaderTitle = this.utilityService.getResourceValue('LookupGroups');
31
- this.ShowToolbar = true;
32
- this.ShowbreadCrumb = false;
33
- this.ApiUrl = "/api/admin/LookupGroup/";
34
- this.LookupGroupsForm = new FormGroup({});
23
+ this.requestHandlerService = requestHandlerService;
24
+ //Page requirements
25
+ this.ApiUrl = this.lookupGroupsService.ApiUrl;
26
+ this.lookupGroupsForm = new FormGroup({});
35
27
  this.showFilter = false;
36
- this.LookupGroupsPagingResult = [];
37
- this.IsFilterLoaded = false;
28
+ this.lookupGroupsPagingResult = [];
29
+ this.filteredLookupGroupsPagingResult = [];
30
+ this.isFilterLoaded = false;
38
31
  //Add Model Controls
39
- this.AddLookupGroupForm = new FormGroup({});
32
+ this.addLookupGroupForm = new FormGroup({});
40
33
  //Edit Model Controls
41
- this.EditLookupGroupForm = new FormGroup({});
42
- //delete Model Controls
43
- this.deleteLookupGroupList = [];
44
- this.ConfirmationModalType = 0;
45
- this.ConfirmationMessage = "";
46
- this.ShowPageContent = false;
47
- this.language = "";
34
+ this.editLookupGroupForm = new FormGroup({});
35
+ this.deleteControlLoaded = false;
36
+ this.getAddLookupGroupModel = () => {
37
+ let paramArray = [];
38
+ let ResultModel = this.addLookupGroupForm.value;
39
+ let AddModel = new LookupGroupModel();
40
+ AddModel.Name.Arabic = ResultModel.Name.ArabicValue;
41
+ AddModel.Name.English = ResultModel.Name.EnglishValue;
42
+ paramArray.push(AddModel);
43
+ return paramArray;
44
+ };
45
+ this.getAddLookupGroupFunction = (AddModel) => {
46
+ return this.lookupGroupsService.addLookupGroup(AddModel);
47
+ };
48
+ this.getEditLookupGroupModel = () => {
49
+ let paramArray = [];
50
+ let ResultModel = this.editLookupGroupForm.value;
51
+ let EditModel = new LookupGroupModel();
52
+ EditModel.Id = this.lookupGroupId;
53
+ EditModel.Name.English = ResultModel.EditName.EnglishValue;
54
+ EditModel.Name.Arabic = ResultModel.EditName.ArabicValue;
55
+ paramArray.push(EditModel);
56
+ return paramArray;
57
+ };
58
+ this.getEditLookupGroupFunction = (EditModel) => {
59
+ return this.lookupGroupsService.editLookupGroup(EditModel);
60
+ };
61
+ this.deleteLookupGroup = (id) => {
62
+ return this.lookupGroupsService.deleteLookupGroup(id);
63
+ };
48
64
  }
49
65
  ngOnInit() {
50
- return __awaiter(this, void 0, void 0, function* () {
51
- this.ShowPageContent = true;
52
- PageInfoService.PageTitle = this.utilityService.getResourceValue("LookupGroups");
53
- PageInfoService.PageBreadcrumbs = [
54
- { title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
55
- { title: '', path: '', isSeparator: true, isActive: false }
56
- ];
57
- this.pageInfoService.calculateTitle();
58
- this.pageInfoService.calculateBreadcrumbs();
59
- this.bbsfTranslateService.onLangChange.subscribe((event) => {
60
- this.language = event.lang;
61
- this.ngOnInit();
62
- });
63
- this.language = yield this.utilityService.getCurrentLanguage();
64
- this.ProductionMode = this.environmentService.getProductionMode();
65
- this.LoadList();
66
- });
67
- }
68
- ReinitializePermissionsPaging() {
69
- let element = this.input;
70
- element.ReinitializePaging();
71
- }
72
- UpdatePermissionsPaging() {
73
- let element = this.input;
74
- element.UpdatePaging();
66
+ //Page header (breadcrumb and title)
67
+ PageInfoService.PageTitle = this.utilityService.getResourceValue("LookupGroups");
68
+ PageInfoService.PageBreadcrumbs = [
69
+ { title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
70
+ { title: '', path: '', isSeparator: true, isActive: false }
71
+ ];
72
+ this.pageInfoService.calculateTitle();
73
+ this.pageInfoService.calculateBreadcrumbs();
74
+ //initialize page
75
+ this.initializePage();
75
76
  }
77
+ //Paging functions
76
78
  setLookupGroupListResult(result) {
77
- this.LookupGroupsPagingResult = result;
78
- this.ShowPageContent = true;
79
+ this.lookupGroupsPagingResult = result;
80
+ this.filteredLookupGroupsPagingResult = this.lookupGroupsPagingResult;
79
81
  this.utilityService.stopBlockUI();
80
82
  }
83
+ //Filter functions
81
84
  resetFilters() {
82
- this.LookupGroupsForm.controls["searchTextBox"].setValue(null);
83
- let element = this.input;
85
+ this.lookupGroupsForm.controls["searchTextBox"].setValue(null);
86
+ let element = this.pagingElement;
84
87
  element.ReinitializePaging();
85
88
  }
86
- LoadList() {
89
+ initializePage() {
87
90
  this.searchTextBox = new TextBoxOptions();
88
91
  this.searchTextBox.Name = "searchTextBox";
89
92
  this.searchTextBox.HideLabel = true;
90
93
  this.searchTextBox.Type = InputType.Text;
91
94
  this.searchTextBox.Placeholder = this.utilityService.getResourceValue("SearchByName");
92
- this.TextInputFilter = new FilterItem();
93
- this.TextInputFilter.FormControlName = "searchTextBox";
94
- this.TextInputFilter.ActionParameterName = "searchText";
95
- this.TextInputFilter.IsFormControl = true;
96
- this.TextInputFilter.FilterType = FilterType.TextBox;
97
- this.LookupGroupsPaging = new PagingOptions();
98
- this.LookupGroupsPaging.ActionPostURL = this.environmentService.getApiUrl() + this.ApiUrl + 'GetLookupGroupsByFilter';
99
- this.LookupGroupsPaging.OnKeyPressFiltersControlNames = ["searchTextBox"];
100
- this.LookupGroupsPaging.Filters = [this.TextInputFilter];
101
- this.LookupGroupsPaging.ValidationToken = this.authService.authorizationHeaderValue();
102
- setTimeout(() => {
103
- this.IsFilterLoaded = true;
104
- }, 10);
95
+ this.textInputFilter = new FilterItem();
96
+ this.textInputFilter.FormControlName = "searchTextBox";
97
+ this.textInputFilter.ActionParameterName = "searchText";
98
+ this.textInputFilter.IsFormControl = true;
99
+ this.textInputFilter.FilterType = FilterType.TextBox;
100
+ this.lookupGroupsPaging = new PagingOptions();
101
+ this.lookupGroupsPaging.ActionPostURL = this.ApiUrl + 'GetLookupGroupsByFilter';
102
+ this.lookupGroupsPaging.OnKeyPressFiltersControlNames = ["searchTextBox"];
103
+ this.lookupGroupsPaging.Filters = [this.textInputFilter];
104
+ this.isFilterLoaded = true;
105
105
  }
106
+ ///////////// Start add Lookup Group Part//////////////////////
106
107
  showAddLookupGroupModal(AddLookupGroupModal) {
107
108
  this.utilityService.startBlockUI();
108
- this.AddLookupGroupForm = new FormGroup({});
109
- this.MultiLingualName = new MultiLingualTextBoxOptions();
110
- this.MultiLingualName.Name = "Name";
111
- this.MultiLingualName.ArabicLabelKey = "NameInArabic";
112
- this.MultiLingualName.EnglishLabelKey = "NameInEnglish";
113
- this.MultiLingualName.IsRequired = true;
114
- this.MultiLingualName.Value = null;
109
+ this.addLookupGroupForm = new FormGroup({});
110
+ this.addLookupGroupFormOptions = new FormOptions();
111
+ this.addLookupGroupFormOptions.FormGroup = this.addLookupGroupForm;
112
+ this.addLookupGroupFormOptions.GetModelFunction = this.getAddLookupGroupModel;
113
+ this.addLookupGroupFormOptions.ServiceSubmitFunction = this.getAddLookupGroupFunction;
114
+ this.addLookupGroupFormOptions.PagingReference = this.pagingElement;
115
+ this.multiLingualName = new MultiLingualTextBoxOptions();
116
+ this.multiLingualName.Name = "Name";
117
+ this.multiLingualName.ArabicLabelKey = "NameInArabic";
118
+ this.multiLingualName.EnglishLabelKey = "NameInEnglish";
119
+ this.multiLingualName.IsRequired = true;
120
+ this.multiLingualName.Value = null;
115
121
  this.modalService.open(AddLookupGroupModal);
116
122
  this.utilityService.stopBlockUI();
117
123
  }
118
- addLookupGroup() {
119
- if (this.AddLookupGroupForm.invalid) {
120
- return;
121
- }
122
- else {
123
- let ResultModel = this.AddLookupGroupForm.value;
124
- let AddLookupGroupModel = new LookupGroupModel();
125
- AddLookupGroupModel.Name.Arabic = ResultModel.Name.ArabicValue;
126
- AddLookupGroupModel.Name.English = ResultModel.Name.EnglishValue;
127
- this.LookupGroupsService.AddLookupGroup(AddLookupGroupModel).subscribe((result) => {
128
- this.modalService.dismissAll();
129
- let element = this.input;
130
- element.ReinitializePaging();
131
- }, (error) => {
132
- });
133
- }
134
- }
135
- showEditLookupGroupModal(LookupGroup, EditLookupGroupModal) {
136
- this.utilityService.startBlockUI();
137
- this.EditLookupGroupForm = new FormGroup({});
138
- let Name = new EnglishArabicDTO();
139
- Name.Arabic = LookupGroup.name.arabic;
140
- Name.English = LookupGroup.name.english;
141
- this.EditMultiLingualName = new MultiLingualTextBoxOptions();
142
- this.EditMultiLingualName.Name = "EditName";
143
- this.EditMultiLingualName.ArabicLabelKey = "NameInArabic";
144
- this.EditMultiLingualName.EnglishLabelKey = "NameInEnglish";
145
- this.EditMultiLingualName.IsRequired = true;
146
- this.EditMultiLingualName.Value = Name;
147
- this.LookupGroupId = LookupGroup.id;
148
- this.modalService.open(EditLookupGroupModal);
149
- this.utilityService.stopBlockUI();
124
+ //////////// End of add Lookup Group part///////////////////////
125
+ ///////////Start of edit Lookup part//////////////////////
126
+ showEditLookupGroupModal(lookupGroupID, editLookupGroupModal) {
127
+ this.editLookupGroupForm = new FormGroup({});
128
+ this.editLookupGroupFormOptions = new FormOptions();
129
+ this.editLookupGroupFormOptions.FormGroup = this.editLookupGroupForm;
130
+ this.editLookupGroupFormOptions.GetModelFunction = this.getEditLookupGroupModel;
131
+ this.editLookupGroupFormOptions.ServiceSubmitFunction = this.getEditLookupGroupFunction;
132
+ this.editLookupGroupFormOptions.PagingReference = this.pagingElement;
133
+ this.lookupGroupsService.getLookupGroup(lookupGroupID).subscribe((result) => {
134
+ let LookupGroup = result.model;
135
+ let name = new EnglishArabicDTO();
136
+ name.Arabic = LookupGroup.name.arabic;
137
+ name.English = LookupGroup.name.english;
138
+ this.editMultiLingualName = new MultiLingualTextBoxOptions();
139
+ this.editMultiLingualName.Name = "EditName";
140
+ this.editMultiLingualName.ArabicLabelKey = "NameInArabic";
141
+ this.editMultiLingualName.EnglishLabelKey = "NameInEnglish";
142
+ this.editMultiLingualName.IsRequired = true;
143
+ this.editMultiLingualName.Value = name;
144
+ this.lookupGroupId = LookupGroup.id;
145
+ this.modalService.open(editLookupGroupModal);
146
+ });
150
147
  }
151
- editLookupGroup() {
152
- if (this.EditLookupGroupForm.invalid) {
153
- return;
154
- }
155
- else {
156
- let ResultModel = this.EditLookupGroupForm.value;
157
- let EditLookupGroupModel = new LookupGroupModel();
158
- EditLookupGroupModel.Id = this.LookupGroupId;
159
- EditLookupGroupModel.Name.English = ResultModel.EditName.EnglishValue;
160
- EditLookupGroupModel.Name.Arabic = ResultModel.EditName.ArabicValue;
161
- this.LookupGroupsService.EditLookupGroup(EditLookupGroupModel).subscribe((result) => {
162
- this.modalService.dismissAll();
163
- let element = this.input;
164
- element.UpdatePaging();
165
- }, (error) => {
166
- });
167
- }
148
+ ///////////End of edit LookupGroup part//////////////////////
149
+ ///////////Start of delete LookupGroup part//////////////////////
150
+ showDeleteLookupGroupModal(lookupGroupId) {
151
+ this.deleteControlLoaded = false;
152
+ this.deletedLookupGroupId = lookupGroupId;
153
+ //array sent to service function
154
+ let paramArray = [];
155
+ paramArray.push(this.deletedLookupGroupId);
156
+ this.deleteConfirmationOptions = new ConfirmationModalOptions();
157
+ this.deleteConfirmationOptions.ServiceSubmitFunction = this.deleteLookupGroup;
158
+ this.deleteConfirmationOptions.ServiceSubmitModel = paramArray;
159
+ this.deleteConfirmationOptions.PagingReference = this.pagingElement;
160
+ this.deleteControlLoaded = true;
161
+ setTimeout(() => {
162
+ this.ConfirmationModalControl.showModal();
163
+ }, 200);
168
164
  }
169
- showDeleteLookupGroupModal(LookupGroup, DeleteLookupGroupModal) {
170
- this.utilityService.startBlockUI();
171
- this.deleteLookupGroupList = [];
172
- this.deleteLookupGroupList.push(LookupGroup);
173
- this.modalService.open(DeleteLookupGroupModal);
174
- this.utilityService.stopBlockUI();
165
+ ///////////End of delete LookupGroup part//////////////////////
166
+ /**FunctionName:filterLookupGroupList*/
167
+ /**Declaration:function to filter LookupGroupList in client-side */
168
+ /**Parameters:*/
169
+ /**searchValue: current value of search box*/
170
+ filterLookupGroupList(searchValue) {
171
+ if (searchValue)
172
+ this.filteredLookupGroupsPagingResult = this.lookupGroupsPagingResult.filter(item => item.lookupGroupName.toLowerCase().includes(searchValue.toLowerCase()));
173
+ else
174
+ this.filteredLookupGroupsPagingResult = this.lookupGroupsPagingResult;
175
175
  }
176
- deleteLookupGroup() {
177
- let UsersIDModel = new UsersIDRequestModel();
178
- for (let index = 0; index < this.deleteLookupGroupList.length; index++) {
179
- const element = this.deleteLookupGroupList[index];
180
- UsersIDModel.UsersIDs.push(element.id);
181
- }
182
- this.LookupGroupsService.DeleteLookupGroup(UsersIDModel).subscribe((result) => {
183
- this.deleteLookupGroupList = [];
184
- this.modalService.dismissAll();
185
- let element = this.input;
186
- element.ReinitializePaging();
187
- }, (error) => {
188
- });
176
+ ///////////Destroy Observable //////////////////////
177
+ ngOnDestroy() {
178
+ this.requestHandlerService.destroyHandler();
189
179
  }
190
180
  }
191
- LookupGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: LookupGroupComponent, deps: [{ token: i1.AuthService }, { token: i2.PageInfoService }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i1.EnvironmentService }, { token: i3.LookupGroupsService }, { token: i4.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
192
- LookupGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: LookupGroupComponent, selector: "lib-lookup-group", viewQueries: [{ propertyName: "input", first: true, predicate: ["LookupGroupPagingViewElement"], descendants: true }, { propertyName: "CloseLookupGroupModal", first: true, predicate: ["CloseLookupGroupModal"], descendants: true }, { propertyName: "CloseEditLookupGroupModal", first: true, predicate: ["CloseEditLookupGroupModal"], descendants: true }, { propertyName: "CloseDeleteLookupGroupModal", first: true, predicate: ["CloseDeleteLookupGroupModal"], descendants: true }, { propertyName: "CloseConfirmationModal", first: true, predicate: ["CloseConfirmationModal"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n\r\n <!-- Page Content -->\r\n <div *ngIf=\"ShowPageContent\" class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"LookupGroupsForm\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"LookupGroupsForm\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddLookupGroupModal(AddLookupGroupModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!--begin::LookupGroups list-->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let LookupGroup of LookupGroupsPagingResult\">\r\n\r\n <td>\r\n <span *ngIf=\"language=='en'\" class=\"text-dark\">{{LookupGroup.name.english}}</span>\r\n <span *ngIf=\"language=='ar'\" class=\"text-dark\">{{LookupGroup.name.arabic}}</span>\r\n </td>\r\n\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showEditLookupGroupModal(LookupGroup,EditLookupGroupModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </a>\r\n <a ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showDeleteLookupGroupModal(LookupGroup,deleteLookupGroupModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"LookupGroupsPagingResult.length == 0\">\r\n <td colspan=\"2\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!--end::LookupGroups list-->\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setLookupGroupListResult($event)\" *ngIf=\"IsFilterLoaded\" [options]=\"LookupGroupsPaging\"\r\n [group]=\"LookupGroupsForm\" #LookupGroupPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- Add Modal -->\r\n <ng-template #AddLookupGroupModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"LookupGroup\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"AddLookupGroupForm\" (ngSubmit)=\"addLookupGroup()\">\r\n <BBSF-MultiLingualTextBox [options]=\"MultiLingualName\" [group]=\"AddLookupGroupForm\"></BBSF-MultiLingualTextBox>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseLookupGroupModal id=\"CloseLookupGroupModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n\r\n\r\n <!-- Edit Modal -->\r\n <ng-template #EditLookupGroupModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"LookupGroup\")}}</h1>\r\n </div>\r\n <form [formGroup]=\"EditLookupGroupForm\" (ngSubmit)=\"editLookupGroup()\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditMultiLingualName\" [group]=\"EditLookupGroupForm\"></BBSF-MultiLingualTextBox>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseEditLookupGroupModal id=\"CloseEditLookupGroupModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n\r\n <!-- Delete Modal -->\r\n <ng-template #deleteLookupGroupModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"Delete\")}} {{utilityService.getResourceValue(\"LookupGroup\")}}</h1>\r\n </div>\r\n <div class=\"notice d-flex bg-light-danger rounded border-danger border border-dashed mb-10 p-6\">\r\n <span class=\"svg-icon svg-icon-2tx svg-icon-danger me-4\">\r\n <span [inlineSVG]=\"'./src/assets/images/gen044.svg'\"></span>\r\n </span>\r\n\r\n <div class=\"d-flex flex-stack flex-grow-1\">\r\n <div class=\"fw-bold\">\r\n <div class=\"fs-6 text-gray-700\">\r\n {{utilityService.getResourceValue(\"Delete_Question\")}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseDeleteLookupGroupModal id=\"CloseDeleteLookupGroupModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3 \" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"button\" (click)=\"deleteLookupGroup()\"\r\n class=\"btn btn-light-danger btn-sm \">\r\n {{utilityService.getResourceValue(\"Delete\")}}\r\n </button>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n\r\n\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i6.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i6.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
193
- __decorate([
194
- BlockUI()
195
- ], LookupGroupComponent.prototype, "blockUI", void 0);
181
+ LookupGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: LookupGroupComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token: i3.LookupGroupsService }, { token: i4.NgbModal }, { token: i2.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
182
+ LookupGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: LookupGroupComponent, selector: "lib-lookup-group", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["LookupGroupPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n\r\n <!-- Page Content -->\r\n <div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"isFilterLoaded\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" (OnChange)=\"filterLookupGroupList($event)\" [group]=\"lookupGroupsForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddLookupGroupModal(AddLookupGroupModal)\">\r\n <i class=\"fas fa-plus me-1\"></i>\r\n {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n\r\n <!-- end::Menu -->\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3\">\r\n <div class=\"table-responsive\">\r\n <!--begin::LookupGroups list-->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let LookupGroup of filteredLookupGroupsPagingResult\">\r\n\r\n <td>\r\n <span class=\"text-dark\">{{LookupGroup.lookupGroupName}}</span>\r\n </td>\r\n\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showEditLookupGroupModal(LookupGroup.idEncrypted,EditLookupGroupModal)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Edit\")}}</span>\r\n </a>\r\n <a ngbDropdownItem class=\"drop-item px-3\"\r\n (click)=\"showDeleteLookupGroupModal(LookupGroup.idEncrypted)\">\r\n <span class=\"drop-link px-3\">{{utilityService.getResourceValue(\"Delete\")}}</span>\r\n </a>\r\n </mat-menu>\r\n </div>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"filteredLookupGroupsPagingResult.length == 0\">\r\n <td colspan=\"2\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!--end::LookupGroups list-->\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setLookupGroupListResult($event)\" *ngIf=\"isFilterLoaded\" [options]=\"lookupGroupsPaging\"\r\n [group]=\"lookupGroupsForm\" #LookupGroupPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- Add Modal -->\r\n <ng-template #AddLookupGroupModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"LookupGroup\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"addLookupGroupFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"multiLingualName\" [group]=\"addLookupGroupForm\"></BBSF-MultiLingualTextBox>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseLookupGroupModal id=\"CloseLookupGroupModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n\r\n\r\n <!-- Edit Modal -->\r\n <ng-template #EditLookupGroupModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"LookupGroup\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"editLookupGroupFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"editMultiLingualName\" [group]=\"editLookupGroupForm\"></BBSF-MultiLingualTextBox>\r\n\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseEditLookupGroupModal id=\"CloseEditLookupGroupModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n\r\n <!--delete Modal-->\r\n<BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"deleteConfirmationOptions\" id=\"ConfirmationModalControl\"\r\n#ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n\r\n\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.ɵd, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }, { type: i6.ɵs, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i6.ɵv, selector: "BBSF-Form", inputs: ["options"] }, { type: i6.ɵc, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ɵw, selector: "BBSF-ConfirmationModal", inputs: ["options"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "forceEvalStyles", "evalScripts", "inlineSVG", "setSVGAttributes", "removeSVGAttributes", "fallbackImgUrl", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }] });
196
183
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: LookupGroupComponent, decorators: [{
197
184
  type: Component,
198
185
  args: [{
199
186
  selector: 'lib-lookup-group',
200
187
  templateUrl: './lookup-group.component.html'
201
188
  }]
202
- }], ctorParameters: function () { return [{ type: i1.AuthService }, { type: i2.PageInfoService }, { type: i1.UtilityService }, { type: i1.BBSFTranslateService }, { type: i1.EnvironmentService }, { type: i3.LookupGroupsService }, { type: i4.NgbModal }]; }, propDecorators: { input: [{
189
+ }], ctorParameters: function () { return [{ type: i1.PageInfoService }, { type: i2.UtilityService }, { type: i3.LookupGroupsService }, { type: i4.NgbModal }, { type: i2.RequestHandlerService }]; }, propDecorators: { pagingElement: [{
203
190
  type: ViewChild,
204
191
  args: ['LookupGroupPagingViewElement', { static: false }]
205
- }], CloseLookupGroupModal: [{
206
- type: ViewChild,
207
- args: ['CloseLookupGroupModal', { static: false }]
208
- }], CloseEditLookupGroupModal: [{
209
- type: ViewChild,
210
- args: ['CloseEditLookupGroupModal', { static: false }]
211
- }], CloseDeleteLookupGroupModal: [{
212
- type: ViewChild,
213
- args: ['CloseDeleteLookupGroupModal', { static: false }]
214
- }], CloseConfirmationModal: [{
192
+ }], ConfirmationModalControl: [{
215
193
  type: ViewChild,
216
- args: ['CloseConfirmationModal', { static: false }]
217
- }], blockUI: [] } });
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvbG9va3Vwcy9sb29rdXAtZ3JvdXAvbG9va3VwLWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvbG9va3Vwcy9sb29rdXAtZ3JvdXAvbG9va3VwLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFzQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekosT0FBTyxFQUFFLE9BQU8sRUFBYSxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDaEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7Ozs7Ozs7QUFTekYsTUFBTSxPQUFPLG9CQUFvQjtJQWlEL0IsWUFBb0IsV0FBdUIsRUFBUyxlQUErQixFQUFTLGNBQTZCLEVBQVMsb0JBQXlDLEVBQVMsa0JBQXFDLEVBQVMsbUJBQXdDLEVBQVUsWUFBc0I7UUFBdFIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFBUyxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFBUyxtQkFBYyxHQUFkLGNBQWMsQ0FB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QW9CO3NHQUFwQixvQkFBb0IseW9CQ2ZqQyxvbVJBaUxBO0FEdEhhO0lBQVYsT0FBTyxFQUFFO3FEQUFvQjs0RkE1Q25CLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixXQUFXLEVBQUUsK0JBQStCO2lCQUM3QzswUkFnQitELEtBQUs7c0JBQWxFLFNBQVM7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQU9KLHFCQUFxQjtzQkFBM0UsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBT0sseUJBQXlCO3NCQUFuRixTQUFTO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFJSSwyQkFBMkI7c0JBQXZGLFNBQVM7dUJBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQVFILHNCQUFzQjtzQkFBN0UsU0FBUzt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRzNDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRW5nbGlzaEFyYWJpY0RUTywgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucywgUGFnaW5nT3B0aW9ucywgVGV4dEJveE9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IEJsb2NrVUksIE5nQmxvY2tVSSB9IGZyb20gJ25nLWJsb2NrLXVpJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb29rdXBHcm91cE1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Mb29rdXBzL0xvb2t1cEdyb3VwTW9kZWwnO1xyXG5pbXBvcnQgeyBVc2Vyc0lEUmVxdWVzdE1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Vc2VyTW9kZWxzL1VzZXJzSURSZXF1ZXN0TW9kZWwnO1xyXG5pbXBvcnQgeyBMb29rdXBHcm91cHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL0xvb2t1cEdyb3Vwc1NlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSwgVXRpbGl0eVNlcnZpY2UsIEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItbG9va3VwLWdyb3VwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbG9va3VwLWdyb3VwLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9va3VwR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIFN1YmhlYWRlclRpdGxlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdMb29rdXBHcm91cHMnKTtcclxuICBcclxuXHJcbiAgU2hvd1Rvb2xiYXIgPSB0cnVlOyBTaG93YnJlYWRDcnVtYiA9IGZhbHNlO1xyXG5cclxuICBBcGlVcmwgPSBcIi9hcGkvYWRtaW4vTG9va3VwR3JvdXAvXCJcclxuICBzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBMb29rdXBHcm91cHNGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIExvb2t1cEdyb3Vwc1BhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBMb29rdXBHcm91cHNQYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgUHJvZHVjdGlvbk1vZGU6IGJvb2xlYW47XHJcbiAgQFZpZXdDaGlsZCgnTG9va3VwR3JvdXBQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBpbnB1dDogRWxlbWVudFJlZjtcclxuXHJcblxyXG4gICAvL0FkZCBNb2RlbCBDb250cm9sc1xyXG4gICBBZGRMb29rdXBHcm91cEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgTXVsdGlMaW5ndWFsTmFtZTpNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9uc1xyXG5cclxuICAgQFZpZXdDaGlsZCgnQ2xvc2VMb29rdXBHcm91cE1vZGFsJywgeyBzdGF0aWM6IGZhbHNlIH0pIENsb3NlTG9va3VwR3JvdXBNb2RhbDogRWxlbWVudFJlZjtcclxuXHJcblxyXG4gICAvL0VkaXQgTW9kZWwgQ29udHJvbHNcclxuICBFZGl0TG9va3VwR3JvdXBGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRWRpdE11bHRpTGluZ3VhbE5hbWU6TXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnNcclxuICBMb29rdXBHcm91cElkOiBudW1iZXI7XHJcbiAgQFZpZXdDaGlsZCgnQ2xvc2VFZGl0TG9va3VwR3JvdXBNb2RhbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDbG9zZUVkaXRMb29rdXBHcm91cE1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuICAvL2RlbGV0ZSAgTW9kZWwgQ29udHJvbHNcclxuICBkZWxldGVMb29rdXBHcm91cExpc3Q6IGFueVtdID0gW11cclxuICBAVmlld0NoaWxkKCdDbG9zZURlbGV0ZUxvb2t1cEdyb3VwTW9kYWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ2xvc2VEZWxldGVMb29rdXBHcm91cE1vZGFsOiBFbGVtZW50UmVmO1xyXG5cclxuXHJcblxyXG4gIC8vQ29uZmlybWF0aW9uICBNb2RlbCBDb250cm9sc1xyXG4gIElzT3BlbkNvbmZpcm1hdGlvbk1vZGFsOiBib29sZWFuO1xyXG4gIENvbmZpcm1hdGlvbk1vZGFsVHlwZTogbnVtYmVyID0gMDtcclxuICBDb25maXJtYXRpb25NZXNzYWdlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBWaWV3Q2hpbGQoJ0Nsb3NlQ29uZmlybWF0aW9uTW9kYWwnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ2xvc2VDb25maXJtYXRpb25Nb2RhbDogRWxlbWVudFJlZjtcclxuXHJcbiAgLy8gRGVjb3JhdG9yIHdpcmVzIHVwIGJsb2NrVUkgaW5zdGFuY2VcclxuICBAQmxvY2tVSSgpIGJsb2NrVUk6IE5nQmxvY2tVSTtcclxuICBTaG93UGFnZUNvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgbGFuZ3VhZ2U6c3RyaW5nPVwiXCJcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhdXRoU2VydmljZTpBdXRoU2VydmljZSxwcml2YXRlIHBhZ2VJbmZvU2VydmljZTpQYWdlSW5mb1NlcnZpY2UsIHB1YmxpYyB1dGlsaXR5U2VydmljZTpVdGlsaXR5U2VydmljZSxwcml2YXRlIGJic2ZUcmFuc2xhdGVTZXJ2aWNlOkJCU0ZUcmFuc2xhdGVTZXJ2aWNlLHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOkVudmlyb25tZW50U2VydmljZSxwcml2YXRlIExvb2t1cEdyb3Vwc1NlcnZpY2U6IExvb2t1cEdyb3Vwc1NlcnZpY2UsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbClcclxuICB7IFxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudD10cnVlO1xyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkxvb2t1cEdyb3Vwc1wiKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icz1bXHJcbiAgICAgICB7dGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIikgLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZX0sXHJcbiAgICAgICB7dGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZX1cclxuXHJcbiAgICBdO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZUJyZWFkY3J1bWJzKCk7XHJcbiAgICB0aGlzLmJic2ZUcmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50KT0+e1xyXG4gICAgICB0aGlzLmxhbmd1YWdlID0gZXZlbnQubGFuZztcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSlcclxuICAgIHRoaXMubGFuZ3VhZ2UgPSBhd2FpdCB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldEN1cnJlbnRMYW5ndWFnZSgpO1xyXG4gICAgdGhpcy5Qcm9kdWN0aW9uTW9kZSA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldFByb2R1Y3Rpb25Nb2RlKClcclxuICAgIHRoaXMuTG9hZExpc3QoKTtcclxuICB9XHJcblxyXG5cclxuICBSZWluaXRpYWxpemVQZXJtaXNzaW9uc1BhZ2luZygpIHtcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICBlbGVtZW50LlJlaW5pdGlhbGl6ZVBhZ2luZygpO1xyXG4gIH1cclxuXHJcbiAgVXBkYXRlUGVybWlzc2lvbnNQYWdpbmcoKSB7XHJcbiAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgZWxlbWVudC5VcGRhdGVQYWdpbmcoKTtcclxuICB9XHJcblxyXG4gIHNldExvb2t1cEdyb3VwTGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMuTG9va3VwR3JvdXBzUGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcblxyXG4gIHJlc2V0RmlsdGVycygpIHtcclxuICAgdGhpcy5Mb29rdXBHcm91cHNGb3JtLmNvbnRyb2xzW1wic2VhcmNoVGV4dEJveFwiXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICBlbGVtZW50LlJlaW5pdGlhbGl6ZVBhZ2luZygpO1xyXG4gIH1cclxuXHJcbiAgTG9hZExpc3QoKSB7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lXCIpXHJcblxyXG4gICAgICB0aGlzLlRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5Jc0Zvcm1Db250cm9sID0gdHJ1ZVxyXG4gICAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgICB0aGlzLkxvb2t1cEdyb3Vwc1BhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuTG9va3VwR3JvdXBzUGFnaW5nLkFjdGlvblBvc3RVUkwgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIHRoaXMuQXBpVXJsICsgJ0dldExvb2t1cEdyb3Vwc0J5RmlsdGVyJztcclxuICAgICAgdGhpcy5Mb29rdXBHcm91cHNQYWdpbmcuT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJzZWFyY2hUZXh0Qm94XCJdXHJcbiAgICAgIHRoaXMuTG9va3VwR3JvdXBzUGFnaW5nLkZpbHRlcnMgPSBbdGhpcy5UZXh0SW5wdXRGaWx0ZXJdXHJcbiAgICAgIHRoaXMuTG9va3VwR3JvdXBzUGFnaW5nLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB9LCAxMCk7XHJcbiAgICBcclxuICB9XHJcblxyXG4gIHNob3dBZGRMb29rdXBHcm91cE1vZGFsKEFkZExvb2t1cEdyb3VwTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLkFkZExvb2t1cEdyb3VwRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICBcclxuICAgIHRoaXMuTXVsdGlMaW5ndWFsTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5NdWx0aUxpbmd1YWxOYW1lLk5hbWUgPSBcIk5hbWVcIjtcclxuICAgIHRoaXMuTXVsdGlMaW5ndWFsTmFtZS5BcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICB0aGlzLk11bHRpTGluZ3VhbE5hbWUuRW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLk11bHRpTGluZ3VhbE5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLk11bHRpTGluZ3VhbE5hbWUuVmFsdWUgPSBudWxsO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWRkTG9va3VwR3JvdXBNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuICBhZGRMb29rdXBHcm91cCgpIHtcclxuICAgIGlmICh0aGlzLkFkZExvb2t1cEdyb3VwRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZExvb2t1cEdyb3VwRm9ybS52YWx1ZTtcclxuICAgICAgbGV0IEFkZExvb2t1cEdyb3VwTW9kZWw6TG9va3VwR3JvdXBNb2RlbD0gbmV3IExvb2t1cEdyb3VwTW9kZWwoKSA7XHJcbiAgICAgIEFkZExvb2t1cEdyb3VwTW9kZWwuTmFtZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5OYW1lLkFyYWJpY1ZhbHVlO1xyXG4gICAgICBBZGRMb29rdXBHcm91cE1vZGVsLk5hbWUuRW5nbGlzaCA9IFJlc3VsdE1vZGVsLk5hbWUuRW5nbGlzaFZhbHVlO1xyXG4gICAgICB0aGlzLkxvb2t1cEdyb3Vwc1NlcnZpY2UuQWRkTG9va3VwR3JvdXAoQWRkTG9va3VwR3JvdXBNb2RlbCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLmlucHV0IGFzIGFueTtcclxuICAgICAgICBlbGVtZW50LlJlaW5pdGlhbGl6ZVBhZ2luZygpO1xyXG4gICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICBcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzaG93RWRpdExvb2t1cEdyb3VwTW9kYWwoTG9va3VwR3JvdXA6IGFueSxFZGl0TG9va3VwR3JvdXBNb2RhbCkge1xyXG5cclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLkVkaXRMb29rdXBHcm91cEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgICBsZXQgTmFtZT1uZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgTmFtZS5BcmFiaWM9TG9va3VwR3JvdXAubmFtZS5hcmFiaWM7XHJcbiAgICBOYW1lLkVuZ2xpc2g9TG9va3VwR3JvdXAubmFtZS5lbmdsaXNoO1xyXG5cclxuICAgIHRoaXMuRWRpdE11bHRpTGluZ3VhbE5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuRWRpdE11bHRpTGluZ3VhbE5hbWUuTmFtZSA9IFwiRWRpdE5hbWVcIjtcclxuICAgIHRoaXMuRWRpdE11bHRpTGluZ3VhbE5hbWUuQXJhYmljTGFiZWxLZXkgPSBcIk5hbWVJbkFyYWJpY1wiO1xyXG4gICAgdGhpcy5FZGl0TXVsdGlMaW5ndWFsTmFtZS5FbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgIHRoaXMuRWRpdE11bHRpTGluZ3VhbE5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLkVkaXRNdWx0aUxpbmd1YWxOYW1lLlZhbHVlID0gTmFtZTtcclxuXHJcbiAgICB0aGlzLkxvb2t1cEdyb3VwSWQgPSBMb29rdXBHcm91cC5pZFxyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRWRpdExvb2t1cEdyb3VwTW9kYWwpO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICB9XHJcblxyXG4gIGVkaXRMb29rdXBHcm91cCgpIHtcclxuICAgIGlmICh0aGlzLkVkaXRMb29rdXBHcm91cEZvcm0uaW52YWxpZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0TG9va3VwR3JvdXBGb3JtLnZhbHVlO1xyXG4gICAgICBsZXQgRWRpdExvb2t1cEdyb3VwTW9kZWwgPSBuZXcgTG9va3VwR3JvdXBNb2RlbCgpO1xyXG4gICAgICBFZGl0TG9va3VwR3JvdXBNb2RlbC5JZCA9IHRoaXMuTG9va3VwR3JvdXBJZDtcclxuICAgICAgRWRpdExvb2t1cEdyb3VwTW9kZWwuTmFtZS5FbmdsaXNoID0gUmVzdWx0TW9kZWwuRWRpdE5hbWUuRW5nbGlzaFZhbHVlO1xyXG4gICAgICBFZGl0TG9va3VwR3JvdXBNb2RlbC5OYW1lLkFyYWJpYyA9IFJlc3VsdE1vZGVsLkVkaXROYW1lLkFyYWJpY1ZhbHVlO1xyXG4gICAgICB0aGlzLkxvb2t1cEdyb3Vwc1NlcnZpY2UuRWRpdExvb2t1cEdyb3VwKEVkaXRMb29rdXBHcm91cE1vZGVsKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXMuaW5wdXQgYXMgYW55O1xyXG4gICAgICAgIGVsZW1lbnQuVXBkYXRlUGFnaW5nKCk7XHJcbiAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHNob3dEZWxldGVMb29rdXBHcm91cE1vZGFsKExvb2t1cEdyb3VwOiBhbnksIERlbGV0ZUxvb2t1cEdyb3VwTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLmRlbGV0ZUxvb2t1cEdyb3VwTGlzdCA9IFtdXHJcbiAgICB0aGlzLmRlbGV0ZUxvb2t1cEdyb3VwTGlzdC5wdXNoKExvb2t1cEdyb3VwKTtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRGVsZXRlTG9va3VwR3JvdXBNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgZGVsZXRlTG9va3VwR3JvdXAoKSB7XHJcbiAgICBsZXQgIFVzZXJzSURNb2RlbDpVc2Vyc0lEUmVxdWVzdE1vZGVsPSBuZXcgVXNlcnNJRFJlcXVlc3RNb2RlbCgpIDtcclxuICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5kZWxldGVMb29rdXBHcm91cExpc3QubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kZWxldGVMb29rdXBHcm91cExpc3RbaW5kZXhdO1xyXG4gICAgICAgVXNlcnNJRE1vZGVsLlVzZXJzSURzLnB1c2goZWxlbWVudC5pZClcclxuICAgICAgIFxyXG4gICAgIH1cclxuICAgIHRoaXMuTG9va3VwR3JvdXBzU2VydmljZS5EZWxldGVMb29rdXBHcm91cChVc2Vyc0lETW9kZWwgKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICB0aGlzLmRlbGV0ZUxvb2t1cEdyb3VwTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgIGxldCBlbGVtZW50ID0gdGhpcy5pbnB1dCBhcyBhbnk7XHJcbiAgICAgIGVsZW1lbnQuUmVpbml0aWFsaXplUGFnaW5nKCk7XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbn1cclxuIiwiPGJsb2NrLXVpPjwvYmxvY2stdWk+XHJcblxyXG4gIDwhLS0gUGFnZSBDb250ZW50IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJTaG93UGFnZUNvbnRlbnRcIiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJMb29rdXBHcm91cHNGb3JtXCI+XHJcbiAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJMb29rdXBHcm91cHNGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgPCEtLSBiZWdpbjo6TWVudSAtLT5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIHRpdGxlPVwiQWRkXCIgIChjbGljayk9XCJzaG93QWRkTG9va3VwR3JvdXBNb2RhbChBZGRMb29rdXBHcm91cE1vZGFsKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICA8IS0tYmVnaW46Okxvb2t1cEdyb3VwcyBsaXN0LS0+XHJcbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcblxyXG4gICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgTG9va3VwR3JvdXAgb2YgTG9va3VwR3JvdXBzUGFnaW5nUmVzdWx0XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImxhbmd1YWdlPT0nZW4nXCIgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e0xvb2t1cEdyb3VwLm5hbWUuZW5nbGlzaH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImxhbmd1YWdlPT0nYXInXCIgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e0xvb2t1cEdyb3VwLm5hbWUuYXJhYmljfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy1oXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIiBuZ2JEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdExvb2t1cEdyb3VwTW9kYWwoTG9va3VwR3JvdXAsRWRpdExvb2t1cEdyb3VwTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0RlbGV0ZUxvb2t1cEdyb3VwTW9kYWwoTG9va3VwR3JvdXAsZGVsZXRlTG9va3VwR3JvdXBNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZVwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cIkxvb2t1cEdyb3Vwc1BhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICAgICAgICA8IS0tZW5kOjpMb29rdXBHcm91cHMgbGlzdC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0TG9va3VwR3JvdXBMaXN0UmVzdWx0KCRldmVudClcIiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCIgW29wdGlvbnNdPVwiTG9va3VwR3JvdXBzUGFnaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkxvb2t1cEdyb3Vwc0Zvcm1cIiAjTG9va3VwR3JvdXBQYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDwhLS0gQWRkIE1vZGFsIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjQWRkTG9va3VwR3JvdXBNb2RhbCBsZXQtbW9kYWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkxvb2t1cEdyb3VwXCIpfX08L2gxPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJBZGRMb29rdXBHcm91cEZvcm1cIiAobmdTdWJtaXQpPVwiYWRkTG9va3VwR3JvdXAoKVwiPlxyXG4gICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwiTXVsdGlMaW5ndWFsTmFtZVwiIFtncm91cF09XCJBZGRMb29rdXBHcm91cEZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNDbG9zZUxvb2t1cEdyb3VwTW9kYWwgaWQ9XCJDbG9zZUxvb2t1cEdyb3VwTW9kYWxcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19IDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9mb3JtPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuXHJcbiAgPCEtLSBFZGl0IE1vZGFsIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjRWRpdExvb2t1cEdyb3VwTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX0ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTG9va3VwR3JvdXBcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIkVkaXRMb29rdXBHcm91cEZvcm1cIiAobmdTdWJtaXQpPVwiZWRpdExvb2t1cEdyb3VwKClcIj5cclxuICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRNdWx0aUxpbmd1YWxOYW1lXCIgW2dyb3VwXT1cIkVkaXRMb29rdXBHcm91cEZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNDbG9zZUVkaXRMb29rdXBHcm91cE1vZGFsIGlkPVwiQ2xvc2VFZGl0TG9va3VwR3JvdXBNb2RhbFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX0gPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Zvcm0+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gIDwhLS0gRGVsZXRlICBNb2RhbCAtLT5cclxuICA8bmctdGVtcGxhdGUgI2RlbGV0ZUxvb2t1cEdyb3VwTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJMb29rdXBHcm91cFwiKX19PC9oMT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJub3RpY2UgZC1mbGV4IGJnLWxpZ2h0LWRhbmdlciByb3VuZGVkIGJvcmRlci1kYW5nZXIgYm9yZGVyIGJvcmRlci1kYXNoZWQgbWItMTAgcC02XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0ydHggc3ZnLWljb24tZGFuZ2VyIG1lLTRcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvZ2VuMDQ0LnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtc3RhY2sgZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1ib2xkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IHRleHQtZ3JheS03MDBcIj5cclxuICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZWxldGVfUXVlc3Rpb25cIil9fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uICNDbG9zZURlbGV0ZUxvb2t1cEdyb3VwTW9kYWwgaWQ9XCJDbG9zZURlbGV0ZUxvb2t1cEdyb3VwTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gbWUtMyBcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZGVsZXRlTG9va3VwR3JvdXAoKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlnaHQtZGFuZ2VyIGJ0bi1zbSBcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZVwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG5cclxuIl19
194
+ args: ['ConfirmationModalControl', { static: false }]
195
+ }] } });
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvbG9va3Vwcy9sb29rdXAtZ3JvdXAvbG9va3VwLWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvbG9va3Vwcy9sb29rdXAtZ3JvdXAvbG9va3VwLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXNCLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaE0sT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7Ozs7Ozs7QUFZaEYsTUFBTSxPQUFPLG9CQUFvQjtJQW9DL0IsWUFFWSxlQUFnQyxFQUNoQyxjQUE4QixFQUM5QixtQkFBd0MsRUFDeEMsWUFBc0IsRUFDdEIscUJBQTJDO1FBSjNDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0QiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBdkN4RCxtQkFBbUI7UUFD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QywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMsIEVuZ2xpc2hBcmFiaWNEVE8sIEZpbHRlckl0ZW0sIEZpbHRlclR5cGUsIEZvcm1PcHRpb25zLCBJbnB1dFR5cGUsIE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zLCBQYWdpbmdPcHRpb25zLCBUZXh0Qm94T3B0aW9ucyB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb29rdXBHcm91cE1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Mb29rdXBzL0xvb2t1cEdyb3VwTW9kZWwnO1xyXG5pbXBvcnQgeyBMb29rdXBHcm91cHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL0xvb2t1cEdyb3Vwc1NlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgUGFnaW5nQ29tcG9uZW50IH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMvbGliL2NvbnRyb2xzL1BhZ2luZy9QYWdpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzL2xpYi9jb250cm9scy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItbG9va3VwLWdyb3VwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbG9va3VwLWdyb3VwLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9va3VwR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsT25EZXN0cm95IHtcclxuXHJcblxyXG4gLy9QYWdlIHJlcXVpcmVtZW50c1xyXG4gIEFwaVVybCA9IHRoaXMubG9va3VwR3JvdXBzU2VydmljZS5BcGlVcmxcclxuXHJcbiAgIC8vRmlsdGVyIGFuZCBwYWdpbmcgY29tcG9uZW50c1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIGxvb2t1cEdyb3Vwc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBzaG93RmlsdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbG9va3VwR3JvdXBzUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIGZpbHRlcmVkTG9va3VwR3JvdXBzUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIGxvb2t1cEdyb3Vwc1BhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICB0ZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgaXNGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcm9kdWN0aW9uTW9kZTogYm9vbGVhbjtcclxuICBAVmlld0NoaWxkKCdMb29rdXBHcm91cFBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDtcclxuXHJcblxyXG4gIC8vQWRkIE1vZGVsIENvbnRyb2xzXHJcbiAgYWRkTG9va3VwR3JvdXBGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgYWRkTG9va3VwR3JvdXBGb3JtT3B0aW9uczogRm9ybU9wdGlvbnNcclxuICBtdWx0aUxpbmd1YWxOYW1lOiBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9uc1xyXG5cclxuICAvL0VkaXQgTW9kZWwgQ29udHJvbHNcclxuICBlZGl0TG9va3VwR3JvdXBGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgZWRpdExvb2t1cEdyb3VwRm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgZWRpdE11bHRpTGluZ3VhbE5hbWU6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zXHJcbiAgbG9va3VwR3JvdXBJZDogbnVtYmVyO1xyXG5cclxuICAvL2RlbGV0ZSAgTW9kZWwgQ29udHJvbHNcclxuICBkZWxldGVkTG9va3VwR3JvdXBJZDogc3RyaW5nO1xyXG4gIGRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnM6IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucztcclxuICBkZWxldGVDb250cm9sTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnQ29uZmlybWF0aW9uTW9kYWxDb250cm9sJywgeyBzdGF0aWM6IGZhbHNlIH0pIENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbDogQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yXHJcbiAgICAoXHJcbiAgICAgIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICAgIHB1YmxpYyAgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIGxvb2t1cEdyb3Vwc1NlcnZpY2U6IExvb2t1cEdyb3Vwc1NlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgICAgcHJpdmF0ZSByZXF1ZXN0SGFuZGxlclNlcnZpY2U6UmVxdWVzdEhhbmRsZXJTZXJ2aWNlXHJcbiAgICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy9QYWdlIGhlYWRlciAoYnJlYWRjcnVtYiBhbmQgdGl0bGUpXHJcbiAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZVRpdGxlID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTG9va3VwR3JvdXBzXCIpXHJcbiAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZUJyZWFkY3J1bWJzID0gW1xyXG4gICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2UgfVxyXG5cclxuICAgIF07XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIC8vaW5pdGlhbGl6ZSBwYWdlXHJcbiAgICB0aGlzLmluaXRpYWxpemVQYWdlKCk7XHJcbiAgfVxyXG5cclxuIC8vUGFnaW5nIGZ1bmN0aW9uc1xyXG4gIHNldExvb2t1cEdyb3VwTGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMubG9va3VwR3JvdXBzUGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy5maWx0ZXJlZExvb2t1cEdyb3Vwc1BhZ2luZ1Jlc3VsdCA9IHRoaXMubG9va3VwR3JvdXBzUGFnaW5nUmVzdWx0O1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gIH1cclxuICAgXHJcbiAvL0ZpbHRlciBmdW5jdGlvbnNcclxuICByZXNldEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmxvb2t1cEdyb3Vwc0Zvcm0uY29udHJvbHNbXCJzZWFyY2hUZXh0Qm94XCJdLnNldFZhbHVlKG51bGwpO1xyXG4gICAgbGV0IGVsZW1lbnQgPSB0aGlzLnBhZ2luZ0VsZW1lbnQgYXMgYW55O1xyXG4gICAgZWxlbWVudC5SZWluaXRpYWxpemVQYWdpbmcoKTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVQYWdlKCkge1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lXCIpXHJcblxyXG4gICAgdGhpcy50ZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy50ZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMudGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgdGhpcy50ZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMudGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLmxvb2t1cEdyb3Vwc1BhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLmxvb2t1cEdyb3Vwc1BhZ2luZy5BY3Rpb25Qb3N0VVJMID10aGlzLkFwaVVybCArICdHZXRMb29rdXBHcm91cHNCeUZpbHRlcic7XHJcbiAgICB0aGlzLmxvb2t1cEdyb3Vwc1BhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInNlYXJjaFRleHRCb3hcIl1cclxuICAgIHRoaXMubG9va3VwR3JvdXBzUGFnaW5nLkZpbHRlcnMgPSBbdGhpcy50ZXh0SW5wdXRGaWx0ZXJdXHJcblxyXG4gICAgdGhpcy5pc0ZpbHRlckxvYWRlZCA9IHRydWU7XHJcblxyXG4gIH1cclxuXHJcbiAgIC8vLy8vLy8vLy8vLy8gU3RhcnQgYWRkIExvb2t1cCBHcm91cCBQYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIHNob3dBZGRMb29rdXBHcm91cE1vZGFsKEFkZExvb2t1cEdyb3VwTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLmFkZExvb2t1cEdyb3VwRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgIHRoaXMuYWRkTG9va3VwR3JvdXBGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgdGhpcy5hZGRMb29rdXBHcm91cEZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuYWRkTG9va3VwR3JvdXBGb3JtXHJcbiAgICB0aGlzLmFkZExvb2t1cEdyb3VwRm9ybU9wdGlvbnMuR2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkTG9va3VwR3JvdXBNb2RlbDtcclxuICAgIHRoaXMuYWRkTG9va3VwR3JvdXBGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZExvb2t1cEdyb3VwRnVuY3Rpb247XHJcbiAgICB0aGlzLmFkZExvb2t1cEdyb3VwRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcblxyXG5cclxuICAgIHRoaXMubXVsdGlMaW5ndWFsTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5tdWx0aUxpbmd1YWxOYW1lLk5hbWUgPSBcIk5hbWVcIjtcclxuICAgIHRoaXMubXVsdGlMaW5ndWFsTmFtZS5BcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbE5hbWUuRW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbE5hbWUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbE5hbWUuVmFsdWUgPSBudWxsO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWRkTG9va3VwR3JvdXBNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG4gIFxyXG5cclxuICBnZXRBZGRMb29rdXBHcm91cE1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLmFkZExvb2t1cEdyb3VwRm9ybS52YWx1ZTtcclxuICAgIGxldCBBZGRNb2RlbDogTG9va3VwR3JvdXBNb2RlbCA9IG5ldyBMb29rdXBHcm91cE1vZGVsKCk7XHJcbiAgICBBZGRNb2RlbC5OYW1lLkFyYWJpYyA9IFJlc3VsdE1vZGVsLk5hbWUuQXJhYmljVmFsdWU7XHJcbiAgICBBZGRNb2RlbC5OYW1lLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5OYW1lLkVuZ2xpc2hWYWx1ZTtcclxuICAgIHBhcmFtQXJyYXkucHVzaChBZGRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEFkZExvb2t1cEdyb3VwRnVuY3Rpb24gPSAoQWRkTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9va3VwR3JvdXBzU2VydmljZS5hZGRMb29rdXBHcm91cChBZGRNb2RlbCk7XHJcbiAgfVxyXG4gIC8vLy8vLy8vLy8vLyBFbmQgb2YgYWRkIExvb2t1cCBHcm91cCBwYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG4gIC8vLy8vLy8vLy8vU3RhcnQgb2YgZWRpdCBMb29rdXAgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBzaG93RWRpdExvb2t1cEdyb3VwTW9kYWwobG9va3VwR3JvdXBJRDogYW55LCBlZGl0TG9va3VwR3JvdXBNb2RhbCkge1xyXG5cclxuICAgIHRoaXMuZWRpdExvb2t1cEdyb3VwRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgIHRoaXMuZWRpdExvb2t1cEdyb3VwRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMuZWRpdExvb2t1cEdyb3VwRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy5lZGl0TG9va3VwR3JvdXBGb3JtXHJcbiAgICB0aGlzLmVkaXRMb29rdXBHcm91cEZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRMb29rdXBHcm91cE1vZGVsO1xyXG4gICAgdGhpcy5lZGl0TG9va3VwR3JvdXBGb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEVkaXRMb29rdXBHcm91cEZ1bmN0aW9uO1xyXG4gICAgdGhpcy5lZGl0TG9va3VwR3JvdXBGb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuXHJcblxyXG5cclxuICAgIHRoaXMubG9va3VwR3JvdXBzU2VydmljZS5nZXRMb29rdXBHcm91cChsb29rdXBHcm91cElEKS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgIGxldCBMb29rdXBHcm91cCA9IHJlc3VsdC5tb2RlbCBhcyBhbnk7XHJcbiAgICAgIGxldCBuYW1lID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgbmFtZS5BcmFiaWMgPSBMb29rdXBHcm91cC5uYW1lLmFyYWJpYztcclxuICAgICAgbmFtZS5FbmdsaXNoID0gTG9va3VwR3JvdXAubmFtZS5lbmdsaXNoO1xyXG5cclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxOYW1lLk5hbWUgPSBcIkVkaXROYW1lXCI7XHJcbiAgICAgIHRoaXMuZWRpdE11bHRpTGluZ3VhbE5hbWUuQXJhYmljTGFiZWxLZXkgPSBcIk5hbWVJbkFyYWJpY1wiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxOYW1lLkVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxOYW1lLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxOYW1lLlZhbHVlID0gbmFtZTtcclxuXHJcbiAgICAgIHRoaXMubG9va3VwR3JvdXBJZCA9TG9va3VwR3JvdXAuaWRcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihlZGl0TG9va3VwR3JvdXBNb2RhbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG4gIFxyXG4gIGdldEVkaXRMb29rdXBHcm91cE1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLmVkaXRMb29rdXBHcm91cEZvcm0udmFsdWU7XHJcbiAgICBsZXQgRWRpdE1vZGVsID0gbmV3IExvb2t1cEdyb3VwTW9kZWwoKTtcclxuICAgIEVkaXRNb2RlbC5JZCA9IHRoaXMubG9va3VwR3JvdXBJZDtcclxuICAgIEVkaXRNb2RlbC5OYW1lLkVuZ2xpc2ggPSBSZXN1bHRNb2RlbC5FZGl0TmFtZS5FbmdsaXNoVmFsdWU7XHJcbiAgICBFZGl0TW9kZWwuTmFtZS5BcmFiaWMgPSBSZXN1bHRNb2RlbC5FZGl0TmFtZS5BcmFiaWNWYWx1ZTtcclxuICAgIHBhcmFtQXJyYXkucHVzaChFZGl0TW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRFZGl0TG9va3VwR3JvdXBGdW5jdGlvbiA9IChFZGl0TW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9va3VwR3JvdXBzU2VydmljZS5lZGl0TG9va3VwR3JvdXAoRWRpdE1vZGVsKVxyXG4gIH1cclxuICAvLy8vLy8vLy8vL0VuZCBvZiBlZGl0IExvb2t1cEdyb3VwIHBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuICAgLy8vLy8vLy8vLy9TdGFydCBvZiBkZWxldGUgTG9va3VwR3JvdXAgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgc2hvd0RlbGV0ZUxvb2t1cEdyb3VwTW9kYWwobG9va3VwR3JvdXBJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRlbGV0ZUNvbnRyb2xMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuZGVsZXRlZExvb2t1cEdyb3VwSWQgPSBsb29rdXBHcm91cElkO1xyXG4gICAgLy9hcnJheSBzZW50IHRvIHNlcnZpY2UgZnVuY3Rpb25cclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgcGFyYW1BcnJheS5wdXNoKHRoaXMuZGVsZXRlZExvb2t1cEdyb3VwSWQpO1xyXG5cclxuICAgIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucyA9IG5ldyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMoKTtcclxuICAgIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmRlbGV0ZUxvb2t1cEdyb3VwO1xyXG4gICAgdGhpcy5kZWxldGVDb25maXJtYXRpb25PcHRpb25zLlNlcnZpY2VTdWJtaXRNb2RlbCA9IHBhcmFtQXJyYXk7XHJcbiAgICB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG5cclxuICAgIHRoaXMuZGVsZXRlQ29udHJvbExvYWRlZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbENvbnRyb2wuc2hvd01vZGFsKCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlTG9va3VwR3JvdXAgPSAoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5sb29rdXBHcm91cHNTZXJ2aWNlLmRlbGV0ZUxvb2t1cEdyb3VwKGlkKVxyXG4gIH1cclxuICAgLy8vLy8vLy8vLy9FbmQgb2YgZGVsZXRlIExvb2t1cEdyb3VwIHBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuICBcclxuICAvKipGdW5jdGlvbk5hbWU6ZmlsdGVyTG9va3VwR3JvdXBMaXN0Ki9cclxuICAvKipEZWNsYXJhdGlvbjpmdW5jdGlvbiB0byBmaWx0ZXIgTG9va3VwR3JvdXBMaXN0IGluIGNsaWVudC1zaWRlICovXHJcbiAgLyoqUGFyYW1ldGVyczoqL1xyXG4gIC8qKnNlYXJjaFZhbHVlOiBjdXJyZW50IHZhbHVlIG9mIHNlYXJjaCBib3gqL1xyXG4gIGZpbHRlckxvb2t1cEdyb3VwTGlzdChzZWFyY2hWYWx1ZSl7XHJcbiAgICBpZihzZWFyY2hWYWx1ZSlcclxuICAgIHRoaXMuZmlsdGVyZWRMb29rdXBHcm91cHNQYWdpbmdSZXN1bHQ9IHRoaXMubG9va3VwR3JvdXBzUGFnaW5nUmVzdWx0LmZpbHRlcihpdGVtID0+IGl0ZW0ubG9va3VwR3JvdXBOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgZWxzZVxyXG4gICAgdGhpcy5maWx0ZXJlZExvb2t1cEdyb3Vwc1BhZ2luZ1Jlc3VsdD0gdGhpcy5sb29rdXBHcm91cHNQYWdpbmdSZXN1bHRcclxuICB9XHJcblxyXG4gIC8vLy8vLy8vLy8vRGVzdHJveSBPYnNlcnZhYmxlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWVzdEhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3lIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuXHJcbiAgPCEtLSBQYWdlIENvbnRlbnQgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJpc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInNlYXJjaFRleHRCb3hcIiAgIChPbkNoYW5nZSk9XCJmaWx0ZXJMb29rdXBHcm91cExpc3QoJGV2ZW50KVwiIFtncm91cF09XCJsb29rdXBHcm91cHNGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgPCEtLSBiZWdpbjo6TWVudSAtLT5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIHRpdGxlPVwiQWRkXCIgIChjbGljayk9XCJzaG93QWRkTG9va3VwR3JvdXBNb2RhbChBZGRMb29rdXBHcm91cE1vZGFsKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICA8IS0tYmVnaW46Okxvb2t1cEdyb3VwcyBsaXN0LS0+XHJcbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBY3Rpb25cIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcblxyXG4gICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgTG9va3VwR3JvdXAgb2YgZmlsdGVyZWRMb29rdXBHcm91cHNQYWdpbmdSZXN1bHRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYXJrXCI+e3tMb29rdXBHcm91cC5sb29rdXBHcm91cE5hbWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tbGlnaHQgYnRuLWFjdGl2ZS1saWdodC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLWhcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiIG5nYkRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dFZGl0TG9va3VwR3JvdXBNb2RhbChMb29rdXBHcm91cC5pZEVuY3J5cHRlZCxFZGl0TG9va3VwR3JvdXBNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGVsZXRlTG9va3VwR3JvdXBNb2RhbChMb29rdXBHcm91cC5pZEVuY3J5cHRlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZVwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cImZpbHRlcmVkTG9va3VwR3JvdXBzUGFnaW5nUmVzdWx0Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjJcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICAgIDwhLS1lbmQ6Okxvb2t1cEdyb3VwcyBsaXN0LS0+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRMb29rdXBHcm91cExpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiaXNGaWx0ZXJMb2FkZWRcIiBbb3B0aW9uc109XCJsb29rdXBHcm91cHNQYWdpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwibG9va3VwR3JvdXBzRm9ybVwiICNMb29rdXBHcm91cFBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbiAgPCEtLSBBZGQgTW9kYWwgLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNBZGRMb29rdXBHcm91cE1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX0ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTG9va3VwR3JvdXBcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cImFkZExvb2t1cEdyb3VwRm9ybU9wdGlvbnNcIj5cclxuICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIm11bHRpTGluZ3VhbE5hbWVcIiBbZ3JvdXBdPVwiYWRkTG9va3VwR3JvdXBGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjQ2xvc2VMb29rdXBHcm91cE1vZGFsIGlkPVwiQ2xvc2VMb29rdXBHcm91cE1vZGFsXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fSA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvQkJTRi1Gb3JtPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuXHJcbiAgPCEtLSBFZGl0IE1vZGFsIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjRWRpdExvb2t1cEdyb3VwTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX0ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTG9va3VwR3JvdXBcIil9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cImVkaXRMb29rdXBHcm91cEZvcm1PcHRpb25zXCI+XHJcbiAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEJveCBbb3B0aW9uc109XCJlZGl0TXVsdGlMaW5ndWFsTmFtZVwiIFtncm91cF09XCJlZGl0TG9va3VwR3JvdXBGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjQ2xvc2VFZGl0TG9va3VwR3JvdXBNb2RhbCBpZD1cIkNsb3NlRWRpdExvb2t1cEdyb3VwTW9kYWxcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19IDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9CQlNGLUZvcm0+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG4gPCEtLWRlbGV0ZSBNb2RhbC0tPlxyXG48QkJTRi1Db25maXJtYXRpb25Nb2RhbCAqbmdJZj1cImRlbGV0ZUNvbnRyb2xMb2FkZWRcIiBbb3B0aW9uc109XCJkZWxldGVDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJDb25maXJtYXRpb25Nb2RhbENvbnRyb2xcIlxyXG4jQ29uZmlybWF0aW9uTW9kYWxDb250cm9sPjwvQkJTRi1Db25maXJtYXRpb25Nb2RhbD5cclxuXHJcblxyXG5cclxuIl19