@bnsights/bbsf-admin-portal 1.0.26 → 1.0.30

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 (163) hide show
  1. package/README.md +11 -3
  2. package/bnsights-bbsf-admin-portal-1.0.30.tgz +0 -0
  3. package/bundles/bnsights-bbsf-admin-portal.umd.js +1945 -1154
  4. package/bundles/bnsights-bbsf-admin-portal.umd.js.map +1 -1
  5. package/esm2015/lib/Pages/ActiveDirectories/active-directory/active-directory.component.js +1 -2
  6. package/esm2015/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.js +1 -2
  7. package/esm2015/lib/Pages/_layout/components/footer/footer.component.js +11 -2
  8. package/esm2015/lib/Pages/authentication/auth-callback/auth-callback.component.js +1 -2
  9. package/esm2015/lib/Pages/configurations/configuration/configuration.component.js +61 -66
  10. package/esm2015/lib/Pages/departments/department/department.component.js +5 -5
  11. package/esm2015/lib/Pages/departments/department-info/department-info.component.js +3 -3
  12. package/esm2015/lib/Pages/helpCenter/help-center/help-center.component.js +20 -23
  13. package/esm2015/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.js +6 -6
  14. package/esm2015/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.js +6 -6
  15. package/esm2015/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.js +51 -55
  16. package/esm2015/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.js +204 -0
  17. package/esm2015/lib/Pages/localizations/localizations.component.js +4 -3
  18. package/esm2015/lib/Pages/localizations/localizations.module.js +6 -6
  19. package/esm2015/lib/Pages/lookups/lookup/lookup.component.js +9 -8
  20. package/esm2015/lib/Pages/lookups/lookup-group/lookup-group.component.js +4 -4
  21. package/esm2015/lib/Pages/lookups/lookup-item/lookup-item.component.js +7 -9
  22. package/esm2015/lib/Pages/notifications/edit/edit.component.js +5 -5
  23. package/esm2015/lib/Pages/notifications/edit-email/edit-email.component.js +16 -20
  24. package/esm2015/lib/Pages/notifications/edit-sms/edit-sms.component.js +11 -14
  25. package/esm2015/lib/Pages/notifications/master-layouts/master-layouts.component.js +2 -2
  26. package/esm2015/lib/Pages/notifications/notifications-routing.module.js +5 -3
  27. package/esm2015/lib/Pages/notifications/template-info/template-info.component.js +20 -24
  28. package/esm2015/lib/Pages/notifications/templates/templates.component.js +18 -21
  29. package/esm2015/lib/Pages/providers/provider/provider.component.js +112 -28
  30. package/esm2015/lib/Pages/publicHolidays/public-holiday/public-holiday.component.js +11 -11
  31. package/esm2015/lib/Pages/roles/permission-set-info/permission-set-info.component.js +3 -3
  32. package/esm2015/lib/Pages/roles/permissions/permissions.component.js +8 -7
  33. package/esm2015/lib/Pages/roles/permissionsets/permissionsets.component.js +11 -10
  34. package/esm2015/lib/Pages/sectors/department-info/department-info.component.js +2 -2
  35. package/esm2015/lib/Pages/sectors/sector/sector.component.js +4 -5
  36. package/esm2015/lib/Pages/sectors/sector-info/sector-info.component.js +3 -3
  37. package/esm2015/lib/Pages/shared/Enums/ProviderType.js +7 -0
  38. package/esm2015/lib/Pages/shared/Services/WorkflowActivityService.service.js +1 -1
  39. package/esm2015/lib/Pages/shared/Services/localizationsService.service .js +7 -1
  40. package/esm2015/lib/Pages/shared/Services/provider.service.js +7 -1
  41. package/esm2015/lib/Pages/shared/config/environment.js +2 -2
  42. package/esm2015/lib/Pages/shared/constants.js +130 -0
  43. package/esm2015/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.js +1 -1
  44. package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentModel.js +2 -5
  45. package/esm2015/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.js +1 -1
  46. package/esm2015/lib/Pages/shared/models/HelpCenterModels/HelpCenterItemModel.js +1 -1
  47. package/esm2015/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.js +1 -1
  48. package/esm2015/lib/Pages/shared/models/ImpersonationRuleModels/ParticipantModel.js +1 -1
  49. package/esm2015/lib/Pages/shared/models/LocalizationModels/LocalizationReplaceTextModel.js +6 -0
  50. package/esm2015/lib/Pages/shared/models/Lookups/LookupGroupModel.js +1 -1
  51. package/esm2015/lib/Pages/shared/models/Lookups/LookupItem.js +1 -1
  52. package/esm2015/lib/Pages/shared/models/Lookups/LookupModel.js +1 -1
  53. package/esm2015/lib/Pages/shared/models/NotificationsModels/EmailHeaderAndFooterTemplate.js +1 -1
  54. package/esm2015/lib/Pages/shared/models/NotificationsModels/EmailTemplateInfoDTO.js +1 -1
  55. package/esm2015/lib/Pages/shared/models/NotificationsModels/EmailTemplateTesterModel.js +1 -1
  56. package/esm2015/lib/Pages/shared/models/NotificationsModels/SMSTemplateInfoDTO.js +1 -1
  57. package/esm2015/lib/Pages/shared/models/NotificationsModels/SMSTemplateTesterModel.js +1 -1
  58. package/esm2015/lib/Pages/shared/models/NotificationsModels/SendEmailTemplateModel.js +1 -1
  59. package/esm2015/lib/Pages/shared/models/NotificationsModels/TemplateDTO.js +1 -1
  60. package/esm2015/lib/Pages/shared/models/NotificationsModels/TemplateEditViewModel.js +1 -1
  61. package/esm2015/lib/Pages/shared/models/PermissionsModels/PermissionModel.js +1 -1
  62. package/esm2015/lib/Pages/shared/models/PermissionsModels/PermissionSetModel.js +1 -1
  63. package/esm2015/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.js +1 -1
  64. package/esm2015/lib/Pages/shared/models/ProviderModels/DefaultProviderModel.js +1 -1
  65. package/esm2015/lib/Pages/shared/models/ProviderModels/EmailProviderTesterModel.js +3 -0
  66. package/esm2015/lib/Pages/shared/models/ProviderModels/ProviderModel.js +1 -1
  67. package/esm2015/lib/Pages/shared/models/ProviderModels/SMSProviderTesterModel.js +3 -0
  68. package/esm2015/lib/Pages/shared/models/PublicHolidayModels/PublicHolidayModel.js +1 -1
  69. package/esm2015/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.js +1 -1
  70. package/esm2015/lib/Pages/shared/models/SectorModels/SectorModel.js +1 -1
  71. package/esm2015/lib/Pages/shared/models/UserModels/AddUserModel.js +1 -3
  72. package/esm2015/lib/Pages/shared/models/UserModels/EditUserModel.js +1 -1
  73. package/esm2015/lib/Pages/shared/models/WorkflowModels/VariableLookupModel.js +1 -1
  74. package/esm2015/lib/Pages/shared/models/WorkflowModels/WFActivityModel.js +1 -1
  75. package/esm2015/lib/Pages/shared/models/WorkflowModels/WFActivityOutcomeModel.js +1 -1
  76. package/esm2015/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.js +1 -1
  77. package/esm2015/lib/Pages/shared/models/WorkflowModels/WFCreationModel.js +1 -1
  78. package/esm2015/lib/Pages/shared/models/WorkflowModels/WFVariableModel.js +1 -1
  79. package/esm2015/lib/Pages/users/users.component.js +14 -15
  80. package/esm2015/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.js +33 -32
  81. package/esm2015/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.js +75 -99
  82. package/esm2015/lib/Pages/workflows/tabs/tabs.component.js +25 -25
  83. package/esm2015/lib/Pages/workflows/workflow/workflow.component.js +5 -5
  84. package/fesm2015/bnsights-bbsf-admin-portal.js +1754 -1109
  85. package/fesm2015/bnsights-bbsf-admin-portal.js.map +1 -1
  86. package/lib/Pages/_layout/components/footer/footer.component.d.ts +2 -0
  87. package/lib/Pages/configurations/configuration/configuration.component.d.ts +5 -6
  88. package/lib/Pages/departments/department/department.component.d.ts +2 -2
  89. package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +2 -2
  90. package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +2 -2
  91. package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +2 -2
  92. package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +4 -4
  93. package/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.d.ts +51 -0
  94. package/lib/Pages/localizations/localizations.module.d.ts +12 -11
  95. package/lib/Pages/lookups/lookup/lookup.component.d.ts +1 -1
  96. package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +1 -1
  97. package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +1 -2
  98. package/lib/Pages/notifications/edit/edit.component.d.ts +1 -2
  99. package/lib/Pages/notifications/edit-email/edit-email.component.d.ts +1 -2
  100. package/lib/Pages/notifications/edit-sms/edit-sms.component.d.ts +1 -2
  101. package/lib/Pages/notifications/template-info/template-info.component.d.ts +1 -1
  102. package/lib/Pages/notifications/templates/templates.component.d.ts +2 -2
  103. package/lib/Pages/providers/provider/provider.component.d.ts +28 -6
  104. package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +2 -2
  105. package/lib/Pages/roles/permissions/permissions.component.d.ts +1 -1
  106. package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +1 -1
  107. package/lib/Pages/sectors/sector/sector.component.d.ts +1 -1
  108. package/lib/Pages/shared/Enums/ProviderType.d.ts +5 -0
  109. package/lib/Pages/shared/Services/WorkflowActivityService.service.d.ts +2 -2
  110. package/lib/Pages/shared/Services/localizationsService.service .d.ts +3 -0
  111. package/lib/Pages/shared/Services/provider.service.d.ts +4 -0
  112. package/lib/Pages/shared/constants.d.ts +129 -0
  113. package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +8 -9
  114. package/lib/Pages/shared/models/DepartmentModels/DepartmentModel.d.ts +1 -2
  115. package/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.d.ts +1 -1
  116. package/lib/Pages/shared/models/HelpCenterModels/HelpCenterItemModel.d.ts +3 -5
  117. package/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.d.ts +1 -1
  118. package/lib/Pages/shared/models/ImpersonationRuleModels/ParticipantModel.d.ts +4 -4
  119. package/lib/Pages/shared/models/LocalizationModels/LocalizationReplaceTextModel.d.ts +9 -0
  120. package/lib/Pages/shared/models/Lookups/LookupGroupModel.d.ts +1 -2
  121. package/lib/Pages/shared/models/Lookups/LookupItem.d.ts +3 -4
  122. package/lib/Pages/shared/models/Lookups/LookupModel.d.ts +3 -4
  123. package/lib/Pages/shared/models/NotificationsModels/EmailHeaderAndFooterTemplate.d.ts +1 -2
  124. package/lib/Pages/shared/models/NotificationsModels/EmailTemplateInfoDTO.d.ts +3 -3
  125. package/lib/Pages/shared/models/NotificationsModels/EmailTemplateTesterModel.d.ts +1 -1
  126. package/lib/Pages/shared/models/NotificationsModels/SMSTemplateInfoDTO.d.ts +2 -2
  127. package/lib/Pages/shared/models/NotificationsModels/SMSTemplateTesterModel.d.ts +1 -1
  128. package/lib/Pages/shared/models/NotificationsModels/SendEmailTemplateModel.d.ts +1 -1
  129. package/lib/Pages/shared/models/NotificationsModels/TemplateDTO.d.ts +5 -6
  130. package/lib/Pages/shared/models/NotificationsModels/TemplateEditViewModel.d.ts +1 -2
  131. package/lib/Pages/shared/models/PermissionsModels/PermissionModel.d.ts +2 -2
  132. package/lib/Pages/shared/models/PermissionsModels/PermissionSetModel.d.ts +3 -3
  133. package/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.d.ts +1 -1
  134. package/lib/Pages/shared/models/ProviderModels/DefaultProviderModel.d.ts +2 -2
  135. package/lib/Pages/shared/models/ProviderModels/EmailProviderTesterModel.d.ts +7 -0
  136. package/lib/Pages/shared/models/ProviderModels/ProviderModel.d.ts +3 -3
  137. package/lib/Pages/shared/models/ProviderModels/SMSProviderTesterModel.d.ts +6 -0
  138. package/lib/Pages/shared/models/PublicHolidayModels/PublicHolidayModel.d.ts +2 -3
  139. package/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.d.ts +1 -1
  140. package/lib/Pages/shared/models/SectorModels/SectorModel.d.ts +1 -2
  141. package/lib/Pages/shared/models/UserModels/AddUserModel.d.ts +3 -3
  142. package/lib/Pages/shared/models/UserModels/EditUserModel.d.ts +2 -2
  143. package/lib/Pages/shared/models/WorkflowModels/VariableLookupModel.d.ts +2 -3
  144. package/lib/Pages/shared/models/WorkflowModels/WFActivityModel.d.ts +10 -11
  145. package/lib/Pages/shared/models/WorkflowModels/WFActivityOutcomeModel.d.ts +3 -3
  146. package/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.d.ts +3 -3
  147. package/lib/Pages/shared/models/WorkflowModels/WFCreationModel.d.ts +1 -3
  148. package/lib/Pages/shared/models/WorkflowModels/WFVariableModel.d.ts +3 -3
  149. package/lib/Pages/users/users.component.d.ts +2 -2
  150. package/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.d.ts +1 -1
  151. package/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.d.ts +3 -4
  152. package/lib/Pages/workflows/tabs/tabs.component.d.ts +4 -4
  153. package/lib/Pages/workflows/workflow/workflow.component.d.ts +2 -2
  154. package/package.json +3 -3
  155. package/bnsights-bbsf-admin-portal-1.0.26.tgz +0 -0
  156. package/esm2015/lib/Pages/shared/Enums/ConfigurationScope.js +0 -8
  157. package/esm2015/lib/Pages/shared/Enums/ConfigurationType.js +0 -8
  158. package/esm2015/lib/Pages/shared/Enums/ConfigurationValueSource.js +0 -6
  159. package/esm2015/lib/Pages/shared/Enums/ParticipantType.js +0 -8
  160. package/lib/Pages/shared/Enums/ConfigurationScope.d.ts +0 -5
  161. package/lib/Pages/shared/Enums/ConfigurationType.d.ts +0 -6
  162. package/lib/Pages/shared/Enums/ConfigurationValueSource.d.ts +0 -4
  163. package/lib/Pages/shared/Enums/ParticipantType.d.ts +0 -6
@@ -4,7 +4,7 @@ import { FormGroup } from '@angular/forms';
4
4
  import { AutocompleteDTO, AutocompleteOptions, CheckBoxOptions, ConfirmationModalOptions, DatePickerOptions, DropdownOptions, FilterItem, FilterType, ForceDirection, FormOptions, InputType, PagingActionMode, PagingOptions, PickerType, SelectMode, StartView, TextBoxOptions } from '@bnsights/bbsf-controls';
5
5
  import { ImpersonationRuleModel } from '../../shared/models/ImpersonationRuleModels/ImpersonationRuleModel';
6
6
  import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
7
- import { ParticipantType } from '../../shared/Enums/ParticipantType';
7
+ import { ParticipantType } from '../../shared/constants';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@bnsights/bbsf-utilities";
10
10
  import * as i2 from "../../../_metronic/core/services/page-info.service";
@@ -56,18 +56,18 @@ export class ImpersonationRulesComponent {
56
56
  let paramArray = [];
57
57
  let ResultModel = this.AddImpersonationForm.value;
58
58
  let AddModel = new ImpersonationRuleModel();
59
- AddModel.SourceParticipantDTO.ParticipantTypeItemID = Number(ResultModel.AddSourceParticipantType);
60
- AddModel.DestinationParticipantDTO.ParticipantTypeItemID = Number(ResultModel.AddDestinationParticipantType);
59
+ AddModel.SourceParticipantDTO.ParticipantTypeItemID_GUID = ResultModel.AddSourceParticipantType;
60
+ AddModel.DestinationParticipantDTO.ParticipantTypeItemID_GUID = ResultModel.AddDestinationParticipantType;
61
61
  AddModel.ExpiresAt = ResultModel.AddExpiresAt;
62
62
  AddModel.IsActive = ResultModel.AddIsActive;
63
63
  if (ResultModel.AddDestinationUserAutoComplete != null && ResultModel.AddDestinationUserAutoComplete != undefined)
64
- AddModel.DestinationParticipantDTO.UserID = Number(ResultModel.AddDestinationUserAutoComplete.key);
64
+ AddModel.DestinationParticipantDTO.UserID_GUID = ResultModel.AddDestinationUserAutoComplete.key;
65
65
  else
66
- AddModel.DestinationParticipantDTO.PermissionSetID = Number(ResultModel.AddDestinationPermissionSetList);
66
+ AddModel.DestinationParticipantDTO.PermissionSetID_GUID = ResultModel.AddDestinationPermissionSetList;
67
67
  if (ResultModel.AddSourceUserAutoComplete != null && ResultModel.AddSourceUserAutoComplete != undefined)
68
- AddModel.SourceParticipantDTO.UserID = Number(ResultModel.AddSourceUserAutoComplete.key);
68
+ AddModel.SourceParticipantDTO.UserID_GUID = ResultModel.AddSourceUserAutoComplete.key;
69
69
  else
70
- AddModel.SourceParticipantDTO.PermissionSetID = Number(ResultModel.AddSourcePermissionSetList);
70
+ AddModel.SourceParticipantDTO.PermissionSetID_GUID = ResultModel.AddSourcePermissionSetList;
71
71
  paramArray.push(AddModel);
72
72
  return paramArray;
73
73
  };
@@ -78,23 +78,21 @@ export class ImpersonationRulesComponent {
78
78
  let paramArray = [];
79
79
  let ResultModel = this.EditImpersonationForm.value;
80
80
  let EditModel = new ImpersonationRuleModel();
81
- EditModel.ID = this.ImpersonationId;
82
- EditModel.DestinationParticipantDTO.ID = this.DestinationParticipantId;
83
- EditModel.SourceParticipantDTO.ID = this.SourceParticipantId;
84
- EditModel.SourceParticipantDTO.ParticipantTypeItemID = Number(ResultModel.EditSourceParticipantType);
85
- EditModel.DestinationParticipantDTO.ParticipantTypeItemID = Number(ResultModel.EditDestinationParticipantType);
81
+ EditModel.ID_GUID = this.ImpersonationId;
82
+ EditModel.DestinationParticipantDTO.ID_GUID = this.DestinationParticipantId;
83
+ EditModel.SourceParticipantDTO.ID_GUID = this.SourceParticipantId;
84
+ EditModel.SourceParticipantDTO.ParticipantTypeItemID_GUID = ResultModel.EditSourceParticipantType;
85
+ EditModel.DestinationParticipantDTO.ParticipantTypeItemID_GUID = ResultModel.EditDestinationParticipantType;
86
86
  EditModel.ExpiresAt = ResultModel.EditExpiresAt;
87
87
  EditModel.IsActive = ResultModel.EditIsActive;
88
- console.log("Data:");
89
- console.log(ResultModel);
90
- if (EditModel.DestinationParticipantDTO.ParticipantTypeItemID == ParticipantType.User)
91
- EditModel.DestinationParticipantDTO.UserID = Number(ResultModel.EditDestinationUserAutoComplete.key);
88
+ if (EditModel.DestinationParticipantDTO.ParticipantTypeItemID_GUID == ParticipantType.User)
89
+ EditModel.DestinationParticipantDTO.UserID_GUID = ResultModel.EditDestinationUserAutoComplete.key;
92
90
  else
93
- EditModel.DestinationParticipantDTO.PermissionSetID = Number(ResultModel.EditDestinationPermissionSetList);
94
- if (EditModel.SourceParticipantDTO.ParticipantTypeItemID == ParticipantType.User)
95
- EditModel.SourceParticipantDTO.UserID = Number(ResultModel.EditSourceUserAutoComplete.key);
91
+ EditModel.DestinationParticipantDTO.PermissionSetID_GUID = ResultModel.EditDestinationPermissionSetList;
92
+ if (EditModel.SourceParticipantDTO.ParticipantTypeItemID_GUID == ParticipantType.User)
93
+ EditModel.SourceParticipantDTO.UserID_GUID = ResultModel.EditSourceUserAutoComplete.key;
96
94
  else
97
- EditModel.SourceParticipantDTO.PermissionSetID = Number(ResultModel.EditSourcePermissionSetList);
95
+ EditModel.SourceParticipantDTO.PermissionSetID_GUID = ResultModel.EditSourcePermissionSetList;
98
96
  paramArray.push(EditModel);
99
97
  return paramArray;
100
98
  };
@@ -244,14 +242,13 @@ export class ImpersonationRulesComponent {
244
242
  });
245
243
  }
246
244
  addDestinationParticipantOnChange(key) {
247
- let sourceItem = this.ParticipantTypeList.filter((item) => { return parseInt(item.key) == key; }).map((item) => item)[0];
248
- //console.log(sourceItem)
249
- switch (sourceItem.value) {
250
- case "PermissionSet":
245
+ key = key === null || key === void 0 ? void 0 : key.toLowerCase();
246
+ switch (key) {
247
+ case ParticipantType.PermissionSet:
251
248
  this.AddShowDestinationPermissionList = true;
252
249
  this.AddShowDestinationUserAutoComplete = false;
253
250
  break;
254
- case "User":
251
+ case ParticipantType.User:
255
252
  this.AddShowDestinationPermissionList = false;
256
253
  this.AddShowDestinationUserAutoComplete = true;
257
254
  break;
@@ -260,14 +257,13 @@ export class ImpersonationRulesComponent {
260
257
  }
261
258
  }
262
259
  addSourceParticipantOnChange(key) {
263
- let sourceItem = this.ParticipantTypeList.filter((item) => { return parseInt(item.key) == key; }).map((item) => item)[0];
264
- //console.log(sourceItem)
265
- switch (sourceItem.value) {
266
- case "PermissionSet":
260
+ key = key === null || key === void 0 ? void 0 : key.toLowerCase();
261
+ switch (key) {
262
+ case ParticipantType.PermissionSet:
267
263
  this.AddShowSourcePermissionList = true;
268
264
  this.AddShowSourceUserAutoComplete = false;
269
265
  break;
270
- case "User":
266
+ case ParticipantType.User:
271
267
  this.AddShowSourcePermissionList = false;
272
268
  this.AddShowSourceUserAutoComplete = true;
273
269
  break;
@@ -276,9 +272,10 @@ export class ImpersonationRulesComponent {
276
272
  }
277
273
  }
278
274
  //Edit impersonation rule functions
279
- showEditImpersonationModal(impersonationID, impersonationIDEnc, editImpersonationModal) {
275
+ showEditImpersonationModal(impersonationID, editImpersonationModal) {
280
276
  this.ImpersonationId = impersonationID;
281
- this.ImpersonationRuleService.getEditImpersonationRule(impersonationIDEnc).subscribe((result) => {
277
+ this.ImpersonationRuleService.getEditImpersonationRule(this.ImpersonationId).subscribe((result) => {
278
+ var _a, _b, _c, _d, _e;
282
279
  let resultObj = result;
283
280
  let impersonation = resultObj.model;
284
281
  let lists = resultObj.lists;
@@ -295,17 +292,17 @@ export class ImpersonationRulesComponent {
295
292
  this.EditShowDestinationUserAutoComplete = false;
296
293
  this.EditShowSourcePermissionList = false;
297
294
  this.EditShowSourceUserAutoComplete = false;
298
- if (impersonation.sourceParticipantDTO.participantTypeItemID != null && impersonation.destinationParticipantDTO.participantTypeItemID) {
299
- this.editDestinationParticipantOnChange(impersonation.destinationParticipantDTO.participantTypeItemID);
300
- this.editSourceParticipantOnChange(impersonation.sourceParticipantDTO.participantTypeItemID);
295
+ if (impersonation.sourceParticipantDTO.participantTypeItemID_GUID != null && impersonation.destinationParticipantDTO.participantTypeItemID_GUID) {
296
+ this.editDestinationParticipantOnChange(impersonation.destinationParticipantDTO.participantTypeItemID_GUID);
297
+ this.editSourceParticipantOnChange(impersonation.sourceParticipantDTO.participantTypeItemID_GUID);
301
298
  }
302
299
  this.utilityService.startBlockUI();
303
- this.SourceParticipantId = impersonation.sourceParticipantDTO.id;
304
- this.DestinationParticipantId = impersonation.destinationParticipantDTO.id;
300
+ this.SourceParticipantId = impersonation.sourceParticipantDTO.iD_GUID;
301
+ this.DestinationParticipantId = impersonation.destinationParticipantDTO.iD_GUID;
305
302
  this.EditSourceParticipantType = new DropdownOptions();
306
303
  this.EditSourceParticipantType.Name = "EditSourceParticipantType";
307
304
  this.EditSourceParticipantType.LabelKey = "SourceParticipantType";
308
- this.EditSourceParticipantType.SelectedItems = this.ParticipantTypeList.filter((item) => { return parseInt(item.key) == impersonation.sourceParticipantDTO.participantTypeItemID; }).map((item) => item.key)[0];
305
+ this.EditSourceParticipantType.SelectedItems = (_a = impersonation.sourceParticipantDTO.participantTypeItemID_GUID) === null || _a === void 0 ? void 0 : _a.toLowerCase();
309
306
  this.EditSourceParticipantType.DataSource = this.ParticipantTypeList;
310
307
  this.EditSourceParticipantType.SingleSelection = true;
311
308
  this.EditSourceParticipantType.AllowSearchFilter = true;
@@ -313,20 +310,19 @@ export class ImpersonationRulesComponent {
313
310
  this.EditDestinationParticipantType = new DropdownOptions();
314
311
  this.EditDestinationParticipantType.Name = "EditDestinationParticipantType";
315
312
  this.EditDestinationParticipantType.LabelKey = "DestinationParticipantType";
316
- this.EditDestinationParticipantType.SelectedItems = this.ParticipantTypeList.filter((item) => { return parseInt(item.key) == impersonation.destinationParticipantDTO.participantTypeItemID; }).map((item) => item.key)[0];
317
- ;
313
+ this.EditDestinationParticipantType.SelectedItems = (_b = impersonation.destinationParticipantDTO.participantTypeItemID_GUID) === null || _b === void 0 ? void 0 : _b.toLowerCase();
318
314
  this.EditDestinationParticipantType.DataSource = this.ParticipantTypeList;
319
315
  this.EditDestinationParticipantType.SingleSelection = true;
320
316
  this.EditDestinationParticipantType.AllowSearchFilter = true;
321
317
  this.EditDestinationParticipantType.IsRequired = true;
322
318
  let sourcePermissionSetSelectedItem;
323
319
  let sourceUserModel = new AutocompleteDTO();
324
- if (impersonation.sourceParticipantDTO.participantTypeItemID == ParticipantType.User) {
325
- sourceUserModel.key = impersonation.sourceParticipantDTO.userID;
320
+ if (((_c = impersonation.sourceParticipantDTO.participantTypeItemID_GUID) === null || _c === void 0 ? void 0 : _c.toLowerCase()) == ParticipantType.User) {
321
+ sourceUserModel.key = impersonation.sourceParticipantDTO.userID_GUID;
326
322
  sourceUserModel.value = impersonation.sourceParticipantDTO.participantNameStr;
327
323
  }
328
324
  else {
329
- sourcePermissionSetSelectedItem = this.PermissionSetList.filter((item) => { return parseInt(item.key) == impersonation.sourceParticipantDTO.permissionSetID; }).map((item) => item.key)[0];
325
+ sourcePermissionSetSelectedItem = (_d = impersonation.sourceParticipantDTO.permissionSetID_GUID) === null || _d === void 0 ? void 0 : _d.toLowerCase();
330
326
  }
331
327
  this.EditSourcePermissionSetList = new DropdownOptions();
332
328
  this.EditSourcePermissionSetList.Name = "EditSourcePermissionSetList";
@@ -347,11 +343,11 @@ export class ImpersonationRulesComponent {
347
343
  let destinationPermissionSetSelectedItem;
348
344
  let destinationUserModel = new AutocompleteDTO();
349
345
  if (impersonation.destinationParticipantDTO.participantTypeItemID == ParticipantType.User) {
350
- destinationUserModel.key = impersonation.destinationParticipantDTO.userID;
346
+ destinationUserModel.key = impersonation.destinationParticipantDTO.userID_GUID;
351
347
  destinationUserModel.value = impersonation.destinationParticipantDTO.participantNameStr;
352
348
  }
353
349
  else {
354
- destinationPermissionSetSelectedItem = this.PermissionSetList.filter((item) => { return parseInt(item.key) == impersonation.destinationParticipantDTO.permissionSetID; }).map((item) => item.key)[0];
350
+ destinationPermissionSetSelectedItem = (_e = impersonation.destinationParticipantDTO.permissionSetID_GUID) === null || _e === void 0 ? void 0 : _e.toLowerCase();
355
351
  }
356
352
  this.EditDestinationPermissionSetList = new DropdownOptions();
357
353
  this.EditDestinationPermissionSetList.Name = "EditDestinationPermissionSetList";
@@ -387,13 +383,13 @@ export class ImpersonationRulesComponent {
387
383
  });
388
384
  }
389
385
  editDestinationParticipantOnChange(key) {
390
- let sourceItem = this.ParticipantTypeList.filter((item) => { return parseInt(item.key) == key; }).map((item) => item)[0];
391
- switch (sourceItem.value) {
392
- case "PermissionSet":
386
+ key = key === null || key === void 0 ? void 0 : key.toLowerCase();
387
+ switch (key) {
388
+ case ParticipantType.PermissionSet:
393
389
  this.EditShowDestinationPermissionList = true;
394
390
  this.EditShowDestinationUserAutoComplete = false;
395
391
  break;
396
- case "User":
392
+ case ParticipantType.User:
397
393
  this.EditShowDestinationPermissionList = false;
398
394
  this.EditShowDestinationUserAutoComplete = true;
399
395
  break;
@@ -402,13 +398,13 @@ export class ImpersonationRulesComponent {
402
398
  }
403
399
  }
404
400
  editSourceParticipantOnChange(key) {
405
- let sourceItem = this.ParticipantTypeList.filter((item) => { return parseInt(item.key) == key; }).map((item) => item)[0];
406
- switch (sourceItem.value) {
407
- case "PermissionSet":
401
+ key = key === null || key === void 0 ? void 0 : key.toLowerCase();
402
+ switch (key) {
403
+ case ParticipantType.PermissionSet:
408
404
  this.EditShowSourcePermissionList = true;
409
405
  this.EditShowSourceUserAutoComplete = false;
410
406
  break;
411
- case "User":
407
+ case ParticipantType.User:
412
408
  this.EditShowSourcePermissionList = false;
413
409
  this.EditShowSourceUserAutoComplete = true;
414
410
  break;
@@ -437,7 +433,7 @@ export class ImpersonationRulesComponent {
437
433
  }
438
434
  }
439
435
  ImpersonationRulesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ImpersonationRulesComponent, deps: [{ token: i1.AuthService }, { token: i2.PageInfoService }, { token: i1.UtilityService }, { token: i1.BBSFTranslateService }, { token: i1.EnvironmentService }, { token: i3.ImpersonationRuleService }, { token: i4.NgbModal }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component });
440
- ImpersonationRulesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: ImpersonationRulesComponent, selector: "lib-impersonation-rules", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["ImpersonationPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\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]=\"ImpersonationForm\">\r\n <!--(OnChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"ImpersonationForm\"></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)=\"showAddImpersonationModal(AddImpersonationModal)\">\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::Permission 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\r\n <th class=\"min-w-150px\"> [{{utilityService.getResourceValue(\"ParticipantType\")}}]{{utilityService.getResourceValue(\"Source\")}}</th>\r\n <th class=\"min-w-150px\"> [{{utilityService.getResourceValue(\"ParticipantType\")}}]{{utilityService.getResourceValue(\"Destination\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ExpiresAt\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Active\")}}</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 Impersonation of clientSidePagingResult\">\r\n\r\n <td>\r\n <span class=\"text-dark\">\r\n [{{Impersonation.sourceParticipantDTO.participantTypeItemNameStr}}] {{Impersonation.sourceParticipantDTO.participantNameStr}}\r\n </span>\r\n\r\n </td>\r\n <td> [{{Impersonation.destinationParticipantDTO.participantTypeItemNameStr}}] {{Impersonation.destinationParticipantDTO.participantNameStr}}</td>\r\n\r\n <td>{{Impersonation.expiresAt}}</td>\r\n <td>{{Impersonation.isActive}}</td>\r\n\r\n <td>\r\n\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)=\"showEditImpersonationModal(Impersonation.id,Impersonation.idEncrypted,EditImpersonationModal)\">\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)=\"showDeleteImpersonationModal(Impersonation.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=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"5\">\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::Permission list-->\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setImpersonationListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"ImpersonationPaging\" [group]=\"ImpersonationForm\" #ImpersonationPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n<!-- Add Modal -->\r\n<ng-template #AddImpersonationModal 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(\"Add\")}} {{utilityService.getResourceValue(\"ImpersonationRule\")}}</h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"AddImpersonationFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddSourceParticipantType\" (OnChange)=\"addSourceParticipantOnChange($event)\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddSourcePermissionSetList\" *ngIf=\"AddShowSourcePermissionList\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"AddSourceUserAutoComplete\" *ngIf=\"AddShowSourceUserAutoComplete\" [group]=\"AddImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddDestinationParticipantType\" (OnChange)=\"addDestinationParticipantOnChange($event)\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddDestinationPermissionSetList\" *ngIf=\"AddShowDestinationPermissionList\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"AddDestinationUserAutoComplete\" *ngIf=\"AddShowDestinationUserAutoComplete\" [group]=\"AddImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"AddIsActive\" [group]=\"AddImpersonationForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DateTimePicker [options]=\"AddExpiresAt\" [group]=\"AddImpersonationForm\">\r\n\r\n </BBSF-DateTimePicker>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button CloseImpersonationModal id=\"CloseImpersonationModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </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 </div>\r\n</ng-template>\r\n\r\n<!--Edit Modal-->\r\n<ng-template #EditImpersonationModal 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(\"Edit\")}} {{utilityService.getResourceValue(\"ImpersonationRule\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditImpersonationFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditSourceParticipantType\" (OnChange)=\"editSourceParticipantOnChange($event)\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditSourcePermissionSetList\" *ngIf=\"EditShowSourcePermissionList\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"EditSourceUserAutoComplete\" *ngIf=\"EditShowSourceUserAutoComplete\" [group]=\"EditImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditDestinationParticipantType\" (OnChange)=\"editDestinationParticipantOnChange($event)\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditDestinationPermissionSetList\" *ngIf=\"EditShowDestinationPermissionList\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"EditDestinationUserAutoComplete\" *ngIf=\"EditShowDestinationUserAutoComplete\" [group]=\"EditImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"EditIsActive\" [group]=\"EditImpersonationForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DateTimePicker [options]=\"EditExpiresAt\" [group]=\"EditImpersonationForm\">\r\n\r\n </BBSF-DateTimePicker>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditImpersonationModal id=\"CloseEditImpersonationModal\" 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=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\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\" #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.TextboxComponent, 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.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i6.FormComponent, selector: "BBSF-Form", inputs: ["options"] }, { type: i6.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i6.AutocompleteTextBoxComponent, selector: "BBSF-AutocompleteTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.DateInputComponent, selector: "BBSF-DateTimePicker", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }], 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"] }] });
436
+ ImpersonationRulesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: ImpersonationRulesComponent, selector: "lib-impersonation-rules", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["ImpersonationPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\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]=\"ImpersonationForm\">\r\n <!--(OnChange)=\"searchClientSide($event)\" -->\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"ImpersonationForm\"></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)=\"showAddImpersonationModal(AddImpersonationModal)\">\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::Permission 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\r\n <th class=\"min-w-150px\"> [{{utilityService.getResourceValue(\"ParticipantType\")}}]{{utilityService.getResourceValue(\"Source\")}}</th>\r\n <th class=\"min-w-150px\"> [{{utilityService.getResourceValue(\"ParticipantType\")}}]{{utilityService.getResourceValue(\"Destination\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"ExpiresAt\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Active\")}}</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 Impersonation of clientSidePagingResult\">\r\n\r\n <td>\r\n <span class=\"text-dark\">\r\n [{{Impersonation.sourceParticipantDTO.participantTypeItemNameStr}}] {{Impersonation.sourceParticipantDTO.participantNameStr}}\r\n </span>\r\n\r\n </td>\r\n <td> [{{Impersonation.destinationParticipantDTO.participantTypeItemNameStr}}] {{Impersonation.destinationParticipantDTO.participantNameStr}}</td>\r\n\r\n <td>{{Impersonation.expiresAt}}</td>\r\n <td>{{Impersonation.isActive}}</td>\r\n\r\n <td>\r\n\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)=\"showEditImpersonationModal(Impersonation.iD_GUID,EditImpersonationModal)\">\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)=\"showDeleteImpersonationModal(Impersonation.iD_GUID)\">\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=\"clientSidePagingResult.length == 0\">\r\n <td colspan=\"5\">\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::Permission list-->\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setImpersonationListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"ImpersonationPaging\" [group]=\"ImpersonationForm\" #ImpersonationPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n<!-- Add Modal -->\r\n<ng-template #AddImpersonationModal 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(\"Add\")}} {{utilityService.getResourceValue(\"ImpersonationRule\")}}</h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"AddImpersonationFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddSourceParticipantType\" (OnChange)=\"addSourceParticipantOnChange($event)\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddSourcePermissionSetList\" *ngIf=\"AddShowSourcePermissionList\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"AddSourceUserAutoComplete\" *ngIf=\"AddShowSourceUserAutoComplete\" [group]=\"AddImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddDestinationParticipantType\" (OnChange)=\"addDestinationParticipantOnChange($event)\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"AddDestinationPermissionSetList\" *ngIf=\"AddShowDestinationPermissionList\" [group]=\"AddImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"AddDestinationUserAutoComplete\" *ngIf=\"AddShowDestinationUserAutoComplete\" [group]=\"AddImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"AddIsActive\" [group]=\"AddImpersonationForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DateTimePicker [options]=\"AddExpiresAt\" [group]=\"AddImpersonationForm\">\r\n\r\n </BBSF-DateTimePicker>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button CloseImpersonationModal id=\"CloseImpersonationModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </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 </div>\r\n</ng-template>\r\n\r\n<!--Edit Modal-->\r\n<ng-template #EditImpersonationModal 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(\"Edit\")}} {{utilityService.getResourceValue(\"ImpersonationRule\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditImpersonationFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditSourceParticipantType\" (OnChange)=\"editSourceParticipantOnChange($event)\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditSourcePermissionSetList\" *ngIf=\"EditShowSourcePermissionList\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"EditSourceUserAutoComplete\" *ngIf=\"EditShowSourceUserAutoComplete\" [group]=\"EditImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditDestinationParticipantType\" (OnChange)=\"editDestinationParticipantOnChange($event)\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList [options]=\"EditDestinationPermissionSetList\" *ngIf=\"EditShowDestinationPermissionList\" [group]=\"EditImpersonationForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-AutocompleteTextBox [options]=\"EditDestinationUserAutoComplete\" *ngIf=\"EditShowDestinationUserAutoComplete\" [group]=\"EditImpersonationForm\">\r\n </BBSF-AutocompleteTextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-CheckBox [options]=\"EditIsActive\" [group]=\"EditImpersonationForm\">\r\n </BBSF-CheckBox>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DateTimePicker [options]=\"EditExpiresAt\" [group]=\"EditImpersonationForm\">\r\n\r\n </BBSF-DateTimePicker>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditImpersonationModal id=\"CloseEditImpersonationModal\" 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=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\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\" #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n", components: [{ type: i5.BlockUIComponent, selector: "block-ui", inputs: ["name", "template", "message", "delayStart", "delayStop"] }, { type: i6.TextboxComponent, 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.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { type: i6.FormComponent, selector: "BBSF-Form", inputs: ["options"] }, { type: i6.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["OnChange", "onClear"] }, { type: i6.AutocompleteTextBoxComponent, selector: "BBSF-AutocompleteTextBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.DateInputComponent, selector: "BBSF-DateTimePicker", inputs: ["group", "options"], outputs: ["OnChange"] }, { type: i6.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }], 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"] }] });
441
437
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: ImpersonationRulesComponent, decorators: [{
442
438
  type: Component,
443
439
  args: [{
@@ -451,4 +447,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImpo
451
447
  type: ViewChild,
452
448
  args: ['ConfirmationModalControl', { static: false }]
453
449
  }] } });
454
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wZXJzb25hdGlvbi1ydWxlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2ltcGVyc29uYXRpb24tcnVsZXMvaW1wZXJzb25hdGlvbi1ydWxlcy9pbXBlcnNvbmF0aW9uLXJ1bGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvaW1wZXJzb25hdGlvbi1ydWxlcy9pbXBlcnNvbmF0aW9uLXJ1bGVzL2ltcGVyc29uYXRpb24tcnVsZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbFQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFFNUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBS3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU9yRSxNQUFNLE9BQU8sMkJBQTJCO0lBNkR0QyxZQUFvQixXQUF3QixFQUFVLGVBQWdDLEVBQVMsY0FBOEIsRUFDbkgs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QUEyQjtrQkFKdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUseUJBQXlCO29CQUNuQyxXQUFXLEVBQUUsc0NBQXNDO2lCQUNwRDttVUFjaUUsYUFBYTtzQkFBNUUsU0FBUzt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBOENKLHdCQUF3QjtzQkFBakYsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXV0b2NvbXBsZXRlRFRPLCBBdXRvY29tcGxldGVPcHRpb25zLCBDaGVja0JveE9wdGlvbnMsIENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucywgRGF0ZVBpY2tlck9wdGlvbnMsIERyb3Bkb3duT3B0aW9ucywgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgRm9yY2VEaXJlY3Rpb24sIEZvcm1PcHRpb25zLCBJbnB1dFR5cGUsIFBhZ2luZ0FjdGlvbk1vZGUsIFBhZ2luZ09wdGlvbnMsIFBpY2tlclR5cGUsIFNlbGVjdE1vZGUsIFN0YXJ0VmlldywgVGV4dEJveE9wdGlvbnMgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IEltcGVyc29uYXRpb25SdWxlTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL0ltcGVyc29uYXRpb25SdWxlTW9kZWxzL0ltcGVyc29uYXRpb25SdWxlTW9kZWwnO1xyXG5pbXBvcnQgeyBJbXBlcnNvbmF0aW9uUnVsZVNlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9JbXBlcnNvbmF0aW9uUnVsZVNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19tZXRyb25pYy9jb3JlL3NlcnZpY2VzL3BhZ2UtaW5mby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSwgQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIEVudmlyb25tZW50U2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgUGFnaW5nQ29tcG9uZW50IH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMvbGliL2NvbnRyb2xzL1BhZ2luZy9QYWdpbmcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQYXJ0aWNpcGFudFR5cGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvRW51bXMvUGFydGljaXBhbnRUeXBlJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scy9saWIvY29udHJvbHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWltcGVyc29uYXRpb24tcnVsZXMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbXBlcnNvbmF0aW9uLXJ1bGVzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1wZXJzb25hdGlvblJ1bGVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvL1BhZ2UgcmVxdWlyZW1lbnRzXHJcbiAgU2hvd1BhZ2VDb250ZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQXBpVXJsID0gXCIvYXBpL2FkbWluL0ltcGVyc29uYXRpb25SdWxlL1wiXHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgY29tcG9uZW50c1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIFRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBJbXBlcnNvbmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEltcGVyc29uYXRpb25QYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBJbXBlcnNvbmF0aW9uUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIElzRmlsdGVyTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnSW1wZXJzb25hdGlvblBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuICAvL1JlcXVpcmVkIGxpc3RzXHJcbiAgUGVybWlzc2lvblNldExpc3Q6IGFueVtdID0gW107XHJcbiAgUGFydGljaXBhbnRUeXBlTGlzdDogYW55W10gPSBbXTtcclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBBZGRJbXBlcnNvbmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEFkZEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBBZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGU6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFNvdXJjZVVzZXJBdXRvQ29tcGxldGU6IEF1dG9jb21wbGV0ZU9wdGlvbnM7XHJcbiAgQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlOiBBdXRvY29tcGxldGVPcHRpb25zO1xyXG4gIEFkZElzQWN0aXZlOiBDaGVja0JveE9wdGlvbnM7XHJcbiAgQWRkRXhwaXJlc0F0OiBEYXRlUGlja2VyT3B0aW9ucztcclxuICBBZGRTaG93U291cmNlUGVybWlzc2lvbkxpc3Q6Ym9vbGVhbj1mYWxzZTtcclxuICBBZGRTaG93U291cmNlVXNlckF1dG9Db21wbGV0ZTpib29sZWFuPWZhbHNlO1xyXG4gIEFkZFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0OmJvb2xlYW49ZmFsc2U7XHJcbiAgQWRkU2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZTpib29sZWFuPWZhbHNlO1xyXG5cclxuXHJcbiAgLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgRWRpdEltcGVyc29uYXRpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgRWRpdEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBFZGl0U291cmNlUGFydGljaXBhbnRUeXBlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3Q6IERyb3Bkb3duT3B0aW9ucztcclxuICBFZGl0U291cmNlVXNlckF1dG9Db21wbGV0ZTogQXV0b2NvbXBsZXRlT3B0aW9ucztcclxuICBFZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlOiBBdXRvY29tcGxldGVPcHRpb25zO1xyXG4gIEVkaXRJc0FjdGl2ZTogQ2hlY2tCb3hPcHRpb25zO1xyXG4gIEVkaXRFeHBpcmVzQXQ6IERhdGVQaWNrZXJPcHRpb25zO1xyXG4gIEVkaXRTaG93U291cmNlUGVybWlzc2lvbkxpc3Q6Ym9vbGVhbj1mYWxzZTtcclxuICBFZGl0U2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGU6Ym9vbGVhbj1mYWxzZTtcclxuICBFZGl0U2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3Q6Ym9vbGVhbj1mYWxzZTtcclxuICBFZGl0U2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZTpib29sZWFuPWZhbHNlO1xyXG4gIEltcGVyc29uYXRpb25JZDogbnVtYmVyO1xyXG4gIFNvdXJjZVBhcnRpY2lwYW50SWQ6IG51bWJlcjtcclxuICBEZXN0aW5hdGlvblBhcnRpY2lwYW50SWQ6IG51bWJlcjtcclxuXHJcbiAgLy9kZWxldGUgIE1vZGVsIENvbnRyb2xzXHJcbiAgZGVsZXRlSW1wZXJzb25hdGlvblJ1bGVJZDogc3RyaW5nO1xyXG4gIERlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnM6IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucztcclxuICBkZWxldGVDb250cm9sTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgnQ29uZmlybWF0aW9uTW9kYWxDb250cm9sJywgeyBzdGF0aWM6IGZhbHNlIH0pIENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbDogQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLCBwdWJsaWMgdXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBiYnNmVHJhbnNsYXRlU2VydmljZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIEltcGVyc29uYXRpb25SdWxlU2VydmljZTogSW1wZXJzb25hdGlvblJ1bGVTZXJ2aWNlLCBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQ9dHJ1ZTtcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGU9dGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSW1wZXJzb25hdGlvblJ1bGVzXCIpXHJcbiAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZUJyZWFkY3J1bWJzPVtcclxuICAgICAgIHt0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSG9tZVwiKSAsIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlfSxcclxuICAgICAgIHt0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlfVxyXG5cclxuICAgIF07XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIHRoaXMuYmJzZlRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpPT57XHJcbiAgICAgIHRoaXMubmdPbkluaXQoKTtcclxuICAgIH0pXHJcbiAgICB0aGlzLmluaXRpYWxpemVQYWdlKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuICAgIC8vIFRleHRCb3ggaW5pdFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guSGlkZUxhYmVsID0gdHJ1ZVxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlR5cGUgPSBJbnB1dFR5cGUuVGV4dFxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LlBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lXCIpXHJcblxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuRm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkFjdGlvblBhcmFtZXRlck5hbWUgPSBcInNlYXJjaFRleHRcIlxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuSXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3hcclxuXHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25QYWdpbmcgPSBuZXcgUGFnaW5nT3B0aW9ucygpO1xyXG4gICAgdGhpcy5JbXBlcnNvbmF0aW9uUGFnaW5nLkFjdGlvblBvc3RVUkwgPSB0aGlzLkFwaVVybCArICdHZXRJbXBlcnNvbmF0aW9uUnVsZUJ5RmlsdGVyJztcclxuICAgIHRoaXMuSW1wZXJzb25hdGlvblBhZ2luZy5PbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcInNlYXJjaFRleHRCb3hcIl1cclxuICAgIHRoaXMuSW1wZXJzb25hdGlvblBhZ2luZy5GaWx0ZXJzID0gW3RoaXMuVGV4dElucHV0RmlsdGVyXVxyXG4gICAgdGhpcy5JbXBlcnNvbmF0aW9uUGFnaW5nLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLy9QYWdpbmcgZnVuY3Rpb25zXHJcbiAgc2V0SW1wZXJzb25hdGlvbkxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25QYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgICB0aGlzLlNob3dQYWdlQ29udGVudCA9IHRydWU7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKClcclxuICB9XHJcblxyXG4gIHNlYXJjaENsaWVudFNpZGUoc2VhcmNoVmFsdWUpIHtcclxuICAgIGlmIChzZWFyY2hWYWx1ZSlcclxuICAgICAgdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0ID0gdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0LmZpbHRlcihcclxuICAgICAgICBmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgdmFyIHNvdXJjZVBhcnRpY2lwYW50TmFtZSA9IGl0ZW0uc291cmNlUGFydGljaXBhbnREVE8ucGFydGljaXBhbnROYW1lO1xyXG4gICAgICAgICAgdmFyIGRlc3RpbmF0aW9uUGFydGljaXBhbnROYW1lID0gaXRlbS5kZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLnBhcnRpY2lwYW50TmFtZTtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHNvdXJjZVBhcnRpY2lwYW50TmFtZS5lbmdsaXNoLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSlcclxuICAgICAgICAgICAgfHwgc291cmNlUGFydGljaXBhbnROYW1lLmFyYWJpYy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgIHx8IGRlc3RpbmF0aW9uUGFydGljaXBhbnROYW1lLmFyYWJpYy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgIHx8IGRlc3RpbmF0aW9uUGFydGljaXBhbnROYW1lLmFyYWJpYy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICB9KVxyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmNsaWVudFNpZGVQYWdpbmdSZXN1bHQgPSB0aGlzLkltcGVyc29uYXRpb25QYWdpbmdSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvL0FkZCBpbXBlcnNvbmF0aW9uIHJ1bGUgZnVuY3Rpb25zXHJcbiAgc2hvd0FkZEltcGVyc29uYXRpb25Nb2RhbChBZGRJbXBlcnNvbmF0aW9uTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcblxyXG4gICAgdGhpcy5JbXBlcnNvbmF0aW9uUnVsZVNlcnZpY2UubG9hZEFkZERyb3Bkb3ducygpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCBEcm9wZG93bkxpc3RzID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgdGhpcy5QZXJtaXNzaW9uU2V0TGlzdCA9IERyb3Bkb3duTGlzdHMucGVybWlzc2lvbkxpc3Q7XHJcbiAgICAgIHRoaXMuUGFydGljaXBhbnRUeXBlTGlzdCA9IERyb3Bkb3duTGlzdHMucGFydGljaXBhbnRUeXBlTGlzdDtcclxuICAgICAgdGhpcy5BZGRJbXBlcnNvbmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcblxyXG4gICAgICB0aGlzLkFkZEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucy5Gb3JtR3JvdXAgPSB0aGlzLkFkZEltcGVyc29uYXRpb25Gb3JtXHJcbiAgICAgIHRoaXMuQWRkSW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEFkZEltcGVyc29uYXRpb25SdWxlTW9kZWw7XHJcbiAgICAgIHRoaXMuQWRkSW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkSW1wZXJzb25hdGlvblJ1bGVGdW5jdGlvbjtcclxuICAgICAgdGhpcy5BZGRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcblxyXG4gICAgICB0aGlzLkFkZFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuQWRkU2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkFkZFNob3dTb3VyY2VQZXJtaXNzaW9uTGlzdCA9IGZhbHNlXHJcbiAgICAgIHRoaXMuQWRkU2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGUgPSBmYWxzZVxyXG5cclxuICAgICAgdGhpcy5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGFydGljaXBhbnRUeXBlLk5hbWUgPSBcIkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZVwiXHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGFydGljaXBhbnRUeXBlLkxhYmVsS2V5ID0gXCJTb3VyY2VQYXJ0aWNpcGFudFR5cGVcIlxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZS5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuRGF0YVNvdXJjZSA9IHRoaXMuUGFydGljaXBhbnRUeXBlTGlzdFxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGFydGljaXBhbnRUeXBlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5OYW1lID0gXCJBZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZVwiXHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuTGFiZWxLZXkgPSBcIkRlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlXCJcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5EYXRhU291cmNlID0gdGhpcy5QYXJ0aWNpcGFudFR5cGVMaXN0XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0Lk5hbWUgPSBcIkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0XCJcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdC5MYWJlbEtleSA9IFwiU291cmNlUGVybWlzc2lvblNldExpc3RcIlxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LkRhdGFTb3VyY2UgPSB0aGlzLlBlcm1pc3Npb25TZXRMaXN0XHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGVybWlzc2lvblNldExpc3QuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGVybWlzc2lvblNldExpc3QuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5OYW1lID0gXCJBZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0XCJcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LkxhYmVsVmFsdWUgPSBcIkRlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3RcIlxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuTGFiZWxLZXkgPSBcIkRlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3RcIlxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5EYXRhU291cmNlID0gdGhpcy5QZXJtaXNzaW9uU2V0TGlzdFxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5BZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gbmV3IEF1dG9jb21wbGV0ZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLk5hbWUgPSBcIkFkZFNvdXJjZVVzZXJBdXRvQ29tcGxldGVcIjtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLkxhYmVsS2V5ID0gXCJVc2VyXCI7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLlZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLkZvcmNlRGlyZWN0aW9uID0gRm9yY2VEaXJlY3Rpb24uRW5nbGlzaDtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLkFjdGlvblVSTCA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgdGhpcy5BcGlVcmwgKyBcIkF1dG9Db21wbGV0ZVVzZXJcIlxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVVzZXJBdXRvQ29tcGxldGUuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG5cclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUgPSBuZXcgQXV0b2NvbXBsZXRlT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5OYW1lID0gXCJBZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGVcIjtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuTGFiZWxLZXkgPSBcIlVzZXJcIjtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuVmFsdWUgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5BY3Rpb25VUkwgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIHRoaXMuQXBpVXJsICsgXCJBdXRvQ29tcGxldGVVc2VyXCJcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG5cclxuICAgICAgdGhpcy5BZGRJc0FjdGl2ZSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRJc0FjdGl2ZS5OYW1lID0gXCJBZGRJc0FjdGl2ZVwiXHJcbiAgICAgIHRoaXMuQWRkSXNBY3RpdmUuTGFiZWxLZXkgPSBcIkFjdGl2ZVwiXHJcbiAgICAgIHRoaXMuQWRkSXNBY3RpdmUuSXNEaXNhYmxlZCA9IHRydWVcclxuICAgICAgdGhpcy5BZGRJc0FjdGl2ZS5WYWx1ZSA9IHRydWVcclxuXHJcbiAgICAgIHRoaXMuQWRkRXhwaXJlc0F0ID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkRXhwaXJlc0F0Lk5hbWUgPSBcIkFkZEV4cGlyZXNBdFwiXHJcbiAgICAgIHRoaXMuQWRkRXhwaXJlc0F0LkxhYmVsS2V5ID0gXCJFeHBpcmVzQXRcIlxyXG4gICAgICB0aGlzLkFkZEV4cGlyZXNBdC5Jc1JlcXVpcmVkID0gdHJ1ZVxyXG4gICAgICB0aGlzLkFkZEV4cGlyZXNBdC5TdGFydFZpZXcgPSBTdGFydFZpZXcuTW9udGhcclxuICAgICAgdGhpcy5BZGRFeHBpcmVzQXQuUGlja2VyVHlwZSA9IFBpY2tlclR5cGUuQ2FsZW5kYXJcclxuICAgICAgdGhpcy5BZGRFeHBpcmVzQXQuU2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlXHJcblxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEFkZEltcGVyc29uYXRpb25Nb2RhbCk7XHJcbiAgICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0pO1xyXG5cclxuXHJcbiAgfVxyXG4gIGdldEFkZEltcGVyc29uYXRpb25SdWxlTW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuQWRkSW1wZXJzb25hdGlvbkZvcm0udmFsdWU7XHJcblxyXG4gICAgbGV0IEFkZE1vZGVsOiBJbXBlcnNvbmF0aW9uUnVsZU1vZGVsID0gbmV3IEltcGVyc29uYXRpb25SdWxlTW9kZWwoKTtcclxuICAgIEFkZE1vZGVsLlNvdXJjZVBhcnRpY2lwYW50RFRPLlBhcnRpY2lwYW50VHlwZUl0ZW1JRCA9IE51bWJlcihSZXN1bHRNb2RlbC5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUpXHJcbiAgICBBZGRNb2RlbC5EZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlBhcnRpY2lwYW50VHlwZUl0ZW1JRCA9IE51bWJlcihSZXN1bHRNb2RlbC5BZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZSlcclxuICAgIEFkZE1vZGVsLkV4cGlyZXNBdCA9IFJlc3VsdE1vZGVsLkFkZEV4cGlyZXNBdFxyXG4gICAgQWRkTW9kZWwuSXNBY3RpdmUgPSBSZXN1bHRNb2RlbC5BZGRJc0FjdGl2ZVxyXG4gICAgaWYgKFJlc3VsdE1vZGVsLkFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZSAhPSBudWxsICYmIFJlc3VsdE1vZGVsLkFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIEFkZE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uVXNlcklEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5rZXkpXHJcbiAgICBlbHNlXHJcbiAgICAgIEFkZE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGVybWlzc2lvblNldElEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QpXHJcbiAgICBpZiAoUmVzdWx0TW9kZWwuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZSAhPSBudWxsICYmIFJlc3VsdE1vZGVsLkFkZFNvdXJjZVVzZXJBdXRvQ29tcGxldGUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICBBZGRNb2RlbC5Tb3VyY2VQYXJ0aWNpcGFudERUTy5Vc2VySUQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5rZXkpXHJcbiAgICBlbHNlXHJcbiAgICAgIEFkZE1vZGVsLlNvdXJjZVBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRCA9IE51bWJlcihSZXN1bHRNb2RlbC5BZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdClcclxuICAgIHBhcmFtQXJyYXkucHVzaChBZGRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEFkZEltcGVyc29uYXRpb25SdWxlRnVuY3Rpb24gPSAoQWRkTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuSW1wZXJzb25hdGlvblJ1bGVTZXJ2aWNlLmFkZEltcGVyc29uYXRpb25SdWxlKEFkZE1vZGVsKVxyXG4gIH1cclxuXHJcblxyXG4gIGFkZERlc3RpbmF0aW9uUGFydGljaXBhbnRPbkNoYW5nZShrZXkpIHtcclxuICAgIGxldCBzb3VyY2VJdGVtID0gdGhpcy5QYXJ0aWNpcGFudFR5cGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IGtleTsgfSkubWFwKChpdGVtKSA9PiBpdGVtKVswXTtcclxuICAgIC8vY29uc29sZS5sb2coc291cmNlSXRlbSlcclxuXHJcbiAgICBzd2l0Y2ggKHNvdXJjZUl0ZW0udmFsdWUpIHtcclxuICAgICAgY2FzZSBcIlBlcm1pc3Npb25TZXRcIjpcclxuICAgICAgICB0aGlzLkFkZFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkFkZFNob3dEZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlVzZXJcIjpcclxuICAgICAgICB0aGlzLkFkZFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5BZGRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgYWRkU291cmNlUGFydGljaXBhbnRPbkNoYW5nZShrZXkpIHtcclxuICAgIGxldCBzb3VyY2VJdGVtID0gdGhpcy5QYXJ0aWNpcGFudFR5cGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IGtleTsgfSkubWFwKChpdGVtKSA9PiBpdGVtKVswXTtcclxuICAgIC8vY29uc29sZS5sb2coc291cmNlSXRlbSlcclxuXHJcbiAgICBzd2l0Y2ggKHNvdXJjZUl0ZW0udmFsdWUpIHtcclxuICAgICAgY2FzZSBcIlBlcm1pc3Npb25TZXRcIjpcclxuICAgICAgICB0aGlzLkFkZFNob3dTb3VyY2VQZXJtaXNzaW9uTGlzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5BZGRTaG93U291cmNlVXNlckF1dG9Db21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiVXNlclwiOlxyXG4gICAgICAgIHRoaXMuQWRkU2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5BZGRTaG93U291cmNlVXNlckF1dG9Db21wbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9FZGl0IGltcGVyc29uYXRpb24gcnVsZSBmdW5jdGlvbnNcclxuICBzaG93RWRpdEltcGVyc29uYXRpb25Nb2RhbChpbXBlcnNvbmF0aW9uSUQ6IG51bWJlciwgaW1wZXJzb25hdGlvbklERW5jOiBzdHJpbmcsIGVkaXRJbXBlcnNvbmF0aW9uTW9kYWwpIHtcclxuICAgIHRoaXMuSW1wZXJzb25hdGlvbklkID0gaW1wZXJzb25hdGlvbklEO1xyXG5cclxuICAgIHRoaXMuSW1wZXJzb25hdGlvblJ1bGVTZXJ2aWNlLmdldEVkaXRJbXBlcnNvbmF0aW9uUnVsZShpbXBlcnNvbmF0aW9uSURFbmMpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBsZXQgaW1wZXJzb25hdGlvbiA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgbGV0IGxpc3RzID0gcmVzdWx0T2JqLmxpc3RzO1xyXG4gICAgICB0aGlzLlBlcm1pc3Npb25TZXRMaXN0ID0gbGlzdHMucGVybWlzc2lvbkxpc3Q7XHJcbiAgICAgIHRoaXMuUGFydGljaXBhbnRUeXBlTGlzdCA9IGxpc3RzLnBhcnRpY2lwYW50VHlwZUxpc3Q7XHJcblxyXG4gICAgICB0aGlzLkVkaXRJbXBlcnNvbmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pXHJcblxyXG4gICAgICB0aGlzLkVkaXRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLkZvcm1Hcm91cCA9IHRoaXMuRWRpdEltcGVyc29uYXRpb25Gb3JtXHJcbiAgICAgIHRoaXMuRWRpdEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0SW1wZXJzb25hdGlvblJ1bGVNb2RlbDtcclxuICAgICAgdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdEltcGVyc29uYXRpb25SdWxlRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuRWRpdEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucy5QYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnRcclxuICAgICAgdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLlBhZ2luZ0FjdGlvbk1vZGUgPSBQYWdpbmdBY3Rpb25Nb2RlLlVwZGF0ZVxyXG5cclxuICAgICAgdGhpcy5FZGl0U2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3QgPSBmYWxzZTtcclxuICAgICAgdGhpcy5FZGl0U2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRTaG93U291cmNlUGVybWlzc2lvbkxpc3QgPSBmYWxzZVxyXG4gICAgICB0aGlzLkVkaXRTaG93U291cmNlVXNlckF1dG9Db21wbGV0ZSA9IGZhbHNlXHJcblxyXG4gICAgICBpZiAoaW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSUQgIT0gbnVsbCAmJiBpbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGFydGljaXBhbnRUeXBlSXRlbUlEKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudE9uQ2hhbmdlKGltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSUQpO1xyXG4gICAgICAgIHRoaXMuZWRpdFNvdXJjZVBhcnRpY2lwYW50T25DaGFuZ2UoaW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSUQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG5cclxuICAgICAgdGhpcy5Tb3VyY2VQYXJ0aWNpcGFudElkID0gaW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5pZDtcclxuICAgICAgdGhpcy5EZXN0aW5hdGlvblBhcnRpY2lwYW50SWQgPSBpbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uaWQ7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGFydGljaXBhbnRUeXBlLk5hbWUgPSBcIkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGVcIlxyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuTGFiZWxLZXkgPSBcIlNvdXJjZVBhcnRpY2lwYW50VHlwZVwiXHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZS5TZWxlY3RlZEl0ZW1zID0gdGhpcy5QYXJ0aWNpcGFudFR5cGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IGltcGVyc29uYXRpb24uc291cmNlUGFydGljaXBhbnREVE8ucGFydGljaXBhbnRUeXBlSXRlbUlEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGFydGljaXBhbnRUeXBlLkRhdGFTb3VyY2UgPSB0aGlzLlBhcnRpY2lwYW50VHlwZUxpc3RcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGFydGljaXBhbnRUeXBlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5OYW1lID0gXCJFZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGVcIlxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5MYWJlbEtleSA9IFwiRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGVcIlxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5TZWxlY3RlZEl0ZW1zID0gdGhpcy5QYXJ0aWNpcGFudFR5cGVMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IGltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSUQ7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpWzBdOztcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuRGF0YVNvdXJjZSA9IHRoaXMuUGFydGljaXBhbnRUeXBlTGlzdFxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgbGV0IHNvdXJjZVBlcm1pc3Npb25TZXRTZWxlY3RlZEl0ZW07XHJcbiAgICAgIGxldCBzb3VyY2VVc2VyTW9kZWwgPSBuZXcgQXV0b2NvbXBsZXRlRFRPKCk7XHJcbiAgICAgIGlmIChpbXBlcnNvbmF0aW9uLnNvdXJjZVBhcnRpY2lwYW50RFRPLnBhcnRpY2lwYW50VHlwZUl0ZW1JRCA9PSBQYXJ0aWNpcGFudFR5cGUuVXNlcikge1xyXG4gICAgICAgIHNvdXJjZVVzZXJNb2RlbC5rZXkgPSBpbXBlcnNvbmF0aW9uLnNvdXJjZVBhcnRpY2lwYW50RFRPLnVzZXJJRFxyXG4gICAgICAgIHNvdXJjZVVzZXJNb2RlbC52YWx1ZSA9IGltcGVyc29uYXRpb24uc291cmNlUGFydGljaXBhbnREVE8ucGFydGljaXBhbnROYW1lU3RyO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHNvdXJjZVBlcm1pc3Npb25TZXRTZWxlY3RlZEl0ZW0gPSB0aGlzLlBlcm1pc3Npb25TZXRMaXN0LmZpbHRlcigoaXRlbSkgPT4geyByZXR1cm4gcGFyc2VJbnQoaXRlbS5rZXkpID09IGltcGVyc29uYXRpb24uc291cmNlUGFydGljaXBhbnREVE8ucGVybWlzc2lvblNldElEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGVybWlzc2lvblNldExpc3QuTmFtZSA9IFwiRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0XCJcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGVybWlzc2lvblNldExpc3QuTGFiZWxLZXkgPSBcIlNvdXJjZVBlcm1pc3Npb25TZXRMaXN0XCJcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGVybWlzc2lvblNldExpc3QuU2VsZWN0ZWRJdGVtcyA9IHNvdXJjZVBlcm1pc3Npb25TZXRTZWxlY3RlZEl0ZW07XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LkRhdGFTb3VyY2UgPSB0aGlzLlBlcm1pc3Npb25TZXRMaXN0XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGVybWlzc2lvblNldExpc3QuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gbmV3IEF1dG9jb21wbGV0ZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlVXNlckF1dG9Db21wbGV0ZS5OYW1lID0gXCJFZGl0U291cmNlVXNlckF1dG9Db21wbGV0ZVwiO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLkxhYmVsS2V5ID0gXCJVc2VyXCI7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVVzZXJBdXRvQ29tcGxldGUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLlNlbGVjdGVkVmFsdWUgPSBzb3VyY2VVc2VyTW9kZWw7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVVzZXJBdXRvQ29tcGxldGUuQWN0aW9uVVJMID0gdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyB0aGlzLkFwaVVybCArIFwiQXV0b0NvbXBsZXRlVXNlclwiXHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVVzZXJBdXRvQ29tcGxldGUuVmFsaWRhdGlvblRva2VuID0gdGhpcy5hdXRoU2VydmljZS5hdXRob3JpemF0aW9uSGVhZGVyVmFsdWUoKVxyXG5cclxuICAgICAgbGV0IGRlc3RpbmF0aW9uUGVybWlzc2lvblNldFNlbGVjdGVkSXRlbTtcclxuICAgICAgbGV0IGRlc3RpbmF0aW9uVXNlck1vZGVsID0gbmV3IEF1dG9jb21wbGV0ZURUTygpO1xyXG4gICAgICBpZiAoaW1wZXJzb25hdGlvbi5kZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLnBhcnRpY2lwYW50VHlwZUl0ZW1JRCA9PSBQYXJ0aWNpcGFudFR5cGUuVXNlcikge1xyXG4gICAgICAgIGRlc3RpbmF0aW9uVXNlck1vZGVsLmtleSA9IGltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy51c2VySURcclxuICAgICAgICBkZXN0aW5hdGlvblVzZXJNb2RlbC52YWx1ZSA9IGltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudE5hbWVTdHI7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZGVzdGluYXRpb25QZXJtaXNzaW9uU2V0U2VsZWN0ZWRJdGVtID0gdGhpcy5QZXJtaXNzaW9uU2V0TGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIHBhcnNlSW50KGl0ZW0ua2V5KSA9PSBpbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGVybWlzc2lvblNldElEOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVswXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0Lk5hbWUgPSBcIkVkaXREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0XCJcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5MYWJlbEtleSA9IFwiRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdFwiXHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuU2VsZWN0ZWRJdGVtcyA9IGRlc3RpbmF0aW9uUGVybWlzc2lvblNldFNlbGVjdGVkSXRlbVxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LkRhdGFTb3VyY2UgPSB0aGlzLlBlcm1pc3Npb25TZXRMaXN0XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuSXNSZXF1aXJlZCA9IHRydWU7XHJcblxyXG5cclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gbmV3IEF1dG9jb21wbGV0ZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLk5hbWUgPSBcIkVkaXREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGVcIjtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLkxhYmVsS2V5ID0gXCJVc2VyXCI7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5UeXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLlNlbGVjdGVkVmFsdWUgPSBkZXN0aW5hdGlvblVzZXJNb2RlbFxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuQWN0aW9uVVJMID0gdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyB0aGlzLkFwaVVybCArIFwiQXV0b0NvbXBsZXRlVXNlclwiXHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5WYWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpXHJcblxyXG4gICAgICB0aGlzLkVkaXRJc0FjdGl2ZSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0SXNBY3RpdmUuTmFtZSA9IFwiRWRpdElzQWN0aXZlXCJcclxuICAgICAgdGhpcy5FZGl0SXNBY3RpdmUuTGFiZWxLZXkgPSBcIkFjdGl2ZVwiXHJcbiAgICAgIHRoaXMuRWRpdElzQWN0aXZlLklzRGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgIHRoaXMuRWRpdElzQWN0aXZlLlZhbHVlID0gdHJ1ZVxyXG5cclxuICAgICAgdGhpcy5FZGl0RXhwaXJlc0F0ID0gbmV3IERhdGVQaWNrZXJPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdEV4cGlyZXNBdC5OYW1lID0gXCJFZGl0RXhwaXJlc0F0XCJcclxuICAgICAgdGhpcy5FZGl0RXhwaXJlc0F0LkxhYmVsS2V5ID0gXCJFeHBpcmVzQXRcIlxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQuSXNSZXF1aXJlZCA9IHRydWVcclxuICAgICAgdGhpcy5FZGl0RXhwaXJlc0F0LlZhbHVlID0gaW1wZXJzb25hdGlvbi5leHBpcmVzQXRcclxuICAgICAgdGhpcy5FZGl0RXhwaXJlc0F0LlN0YXJ0VmlldyA9IFN0YXJ0Vmlldy5Nb250aFxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQuUGlja2VyVHlwZSA9IFBpY2tlclR5cGUuQ2FsZW5kYXJcclxuICAgICAgdGhpcy5FZGl0RXhwaXJlc0F0LlNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZVxyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihlZGl0SW1wZXJzb25hdGlvbk1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXRFZGl0SW1wZXJzb25hdGlvblJ1bGVNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm0udmFsdWU7XHJcblxyXG4gICAgbGV0IEVkaXRNb2RlbDogSW1wZXJzb25hdGlvblJ1bGVNb2RlbCA9IG5ldyBJbXBlcnNvbmF0aW9uUnVsZU1vZGVsKCk7XHJcbiAgICBFZGl0TW9kZWwuSUQgPSB0aGlzLkltcGVyc29uYXRpb25JZFxyXG4gICAgRWRpdE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uSUQgPSB0aGlzLkRlc3RpbmF0aW9uUGFydGljaXBhbnRJZFxyXG4gICAgRWRpdE1vZGVsLlNvdXJjZVBhcnRpY2lwYW50RFRPLklEID0gdGhpcy5Tb3VyY2VQYXJ0aWNpcGFudElkXHJcbiAgICBFZGl0TW9kZWwuU291cmNlUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGUpXHJcbiAgICBFZGl0TW9kZWwuRGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSUQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlKVxyXG4gICAgRWRpdE1vZGVsLkV4cGlyZXNBdCA9IFJlc3VsdE1vZGVsLkVkaXRFeHBpcmVzQXRcclxuICAgIEVkaXRNb2RlbC5Jc0FjdGl2ZSA9IFJlc3VsdE1vZGVsLkVkaXRJc0FjdGl2ZVxyXG4gICAgY29uc29sZS5sb2coXCJEYXRhOlwiKTtcclxuICAgIGNvbnNvbGUubG9nKFJlc3VsdE1vZGVsKTtcclxuICAgIGlmIChFZGl0TW9kZWwuRGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSUQgPT0gUGFydGljaXBhbnRUeXBlLlVzZXIpXHJcbiAgICAgIEVkaXRNb2RlbC5EZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlVzZXJJRCA9IE51bWJlcihSZXN1bHRNb2RlbC5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLmtleSlcclxuICAgIGVsc2VcclxuICAgICAgRWRpdE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGVybWlzc2lvblNldElEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0KVxyXG4gICAgaWYgKEVkaXRNb2RlbC5Tb3VyY2VQYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSUQgPT0gUGFydGljaXBhbnRUeXBlLlVzZXIpXHJcbiAgICAgIEVkaXRNb2RlbC5Tb3VyY2VQYXJ0aWNpcGFudERUTy5Vc2VySUQgPSBOdW1iZXIoUmVzdWx0TW9kZWwuRWRpdFNvdXJjZVVzZXJBdXRvQ29tcGxldGUua2V5KVxyXG4gICAgZWxzZVxyXG4gICAgICBFZGl0TW9kZWwuU291cmNlUGFydGljaXBhbnREVE8uUGVybWlzc2lvblNldElEID0gTnVtYmVyKFJlc3VsdE1vZGVsLkVkaXRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdClcclxuICAgIHBhcmFtQXJyYXkucHVzaChFZGl0TW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRFZGl0SW1wZXJzb25hdGlvblJ1bGVGdW5jdGlvbiA9IChFZGl0TW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuSW1wZXJzb25hdGlvblJ1bGVTZXJ2aWNlLmVkaXRJbXBlcnNvbmF0aW9uUnVsZShFZGl0TW9kZWwpXHJcbiAgfVxyXG5cclxuICBlZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudE9uQ2hhbmdlKGtleSkge1xyXG4gICAgbGV0IHNvdXJjZUl0ZW0gPSB0aGlzLlBhcnRpY2lwYW50VHlwZUxpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBwYXJzZUludChpdGVtLmtleSkgPT0ga2V5OyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0pWzBdO1xyXG4gICAgc3dpdGNoIChzb3VyY2VJdGVtLnZhbHVlKSB7XHJcbiAgICAgIGNhc2UgXCJQZXJtaXNzaW9uU2V0XCI6XHJcbiAgICAgICAgdGhpcy5FZGl0U2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRWRpdFNob3dEZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIlVzZXJcIjpcclxuICAgICAgICB0aGlzLkVkaXRTaG93RGVzdGluYXRpb25QZXJtaXNzaW9uTGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuRWRpdFNob3dEZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGVkaXRTb3VyY2VQYXJ0aWNpcGFudE9uQ2hhbmdlKGtleSkge1xyXG4gICAgbGV0IHNvdXJjZUl0ZW0gPSB0aGlzLlBhcnRpY2lwYW50VHlwZUxpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBwYXJzZUludChpdGVtLmtleSkgPT0ga2V5OyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0pWzBdO1xyXG4gICAgc3dpdGNoIChzb3VyY2VJdGVtLnZhbHVlKSB7XHJcbiAgICAgIGNhc2UgXCJQZXJtaXNzaW9uU2V0XCI6XHJcbiAgICAgICAgdGhpcy5FZGl0U2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkVkaXRTaG93U291cmNlVXNlckF1dG9Db21wbGV0ZSA9IGZhbHNlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiVXNlclwiOlxyXG4gICAgICAgIHRoaXMuRWRpdFNob3dTb3VyY2VQZXJtaXNzaW9uTGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuRWRpdFNob3dTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vRGVsZXRlIEltcGVyc29uYXRpb25SdWxlXHJcbiAgc2hvd0RlbGV0ZUltcGVyc29uYXRpb25Nb2RhbChpbXBlcnNvbmF0aW9uUnVsZUlEOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGVsZXRlSW1wZXJzb25hdGlvblJ1bGVJZCA9IGltcGVyc29uYXRpb25SdWxlSUQ7XHJcblxyXG4gICAgLy9hcnJheSBzZW50IHRvIHNlcnZpY2UgZnVuY3Rpb25cclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgcGFyYW1BcnJheS5wdXNoKHRoaXMuZGVsZXRlSW1wZXJzb25hdGlvblJ1bGVJZCk7XHJcblxyXG4gICAgdGhpcy5EZWxldGVDb25maXJtYXRpb25PcHRpb25zID0gbmV3IENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucygpO1xyXG4gICAgdGhpcy5EZWxldGVDb25maXJtYXRpb25PcHRpb25zLlNlcnZpY2VTdWJtaXRGdW5jdGlvbiA9IHRoaXMuZGVsZXRlSW1wZXJzb25hdGlvbjtcclxuICAgIHRoaXMuRGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5TZXJ2aWNlU3VibWl0TW9kZWwgPSBwYXJhbUFycmF5O1xyXG4gICAgdGhpcy5EZWxldGVDb25maXJtYXRpb25PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuXHJcbiAgICB0aGlzLmRlbGV0ZUNvbnRyb2xMb2FkZWQgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuQ29uZmlybWF0aW9uTW9kYWxDb250cm9sLnNob3dNb2RhbCgpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUltcGVyc29uYXRpb24gPSAoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5JbXBlcnNvbmF0aW9uUnVsZVNlcnZpY2UuZGVsZXRlSW1wZXJzb25hdGlvblJ1bGUoaWQpO1xyXG4gIH1cclxuXHJcbiAgLy9PbiBkZXN0cm95XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGJsb2NrLXVpPjwvYmxvY2stdWk+XHJcbjwhLS0gUGFnZSBDb250ZW50IC0tPlxyXG48ZGl2ICpuZ0lmPVwiU2hvd1BhZ2VDb250ZW50XCIgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj5cclxuICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWN1c3RvbS1oXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIj5cclxuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIkltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICAgPCEtLShPbkNoYW5nZSk9XCJzZWFyY2hDbGllbnRTaWRlKCRldmVudClcIiAtLT5cclxuICAgICAgICAgIDxCQlNGLVRleHRCb3ggIFtvcHRpb25zXT1cInNlYXJjaFRleHRCb3hcIiBbZ3JvdXBdPVwiSW1wZXJzb25hdGlvbkZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgPCEtLSBiZWdpbjo6TWVudSAtLT5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiB0aXRsZT1cIkFkZFwiIChjbGljayk9XCJzaG93QWRkSW1wZXJzb25hdGlvbk1vZGFsKEFkZEltcGVyc29uYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwhLS0gZW5kOjpNZW51IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPiBbe3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUGFydGljaXBhbnRUeXBlXCIpfX1de3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU291cmNlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+IFt7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQYXJ0aWNpcGFudFR5cGVcIil9fV17e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZXN0aW5hdGlvblwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkV4cGlyZXNBdFwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGl2ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgIDx0Ym9keSBpZD1cImxpc3RpbmdDb250YWluZXJcIiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG5cclxuICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBJbXBlcnNvbmF0aW9uIG9mIGNsaWVudFNpZGVQYWdpbmdSZXN1bHRcIj5cclxuXHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhcmtcIj5cclxuICAgICAgICAgICAgICAgICAgW3t7SW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtTmFtZVN0cn19XSB7e0ltcGVyc29uYXRpb24uc291cmNlUGFydGljaXBhbnREVE8ucGFydGljaXBhbnROYW1lU3RyfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+ICBbe3tJbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGFydGljaXBhbnRUeXBlSXRlbU5hbWVTdHJ9fV0ge3tJbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGFydGljaXBhbnROYW1lU3RyfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgICA8dGQ+e3tJbXBlcnNvbmF0aW9uLmV4cGlyZXNBdH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3tJbXBlcnNvbmF0aW9uLmlzQWN0aXZlfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgICA8dGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLWhcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiIG5nYkRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdEltcGVyc29uYXRpb25Nb2RhbChJbXBlcnNvbmF0aW9uLmlkLEltcGVyc29uYXRpb24uaWRFbmNyeXB0ZWQsRWRpdEltcGVyc29uYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0RlbGV0ZUltcGVyc29uYXRpb25Nb2RhbChJbXBlcnNvbmF0aW9uLmlkRW5jcnlwdGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZVwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0ciAqbmdJZj1cImNsaWVudFNpZGVQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItZW1wdHktZGF0YT48L2xpYi1lbXB0eS1kYXRhPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcblxyXG4gICAgICAgIDwhLS1lbmQ6OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICA8QkJTRi1QYWdpbmcgKEl0ZW1zKT1cInNldEltcGVyc29uYXRpb25MaXN0UmVzdWx0KCRldmVudClcIiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIkltcGVyc29uYXRpb25QYWdpbmdcIiBbZ3JvdXBdPVwiSW1wZXJzb25hdGlvbkZvcm1cIiAjSW1wZXJzb25hdGlvblBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuPCEtLSBBZGQgTW9kYWwgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjQWRkSW1wZXJzb25hdGlvbk1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJJbXBlcnNvbmF0aW9uUnVsZVwiKX19PC9oMT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiQWRkSW1wZXJzb25hdGlvbkZvcm1PcHRpb25zXCI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZVwiIChPbkNoYW5nZSk9XCJhZGRTb3VyY2VQYXJ0aWNpcGFudE9uQ2hhbmdlKCRldmVudClcIiBbZ3JvdXBdPVwiQWRkSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0XCIgKm5nSWY9XCJBZGRTaG93U291cmNlUGVybWlzc2lvbkxpc3RcIiBbZ3JvdXBdPVwiQWRkSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtQXV0b2NvbXBsZXRlVGV4dEJveCBbb3B0aW9uc109XCJBZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlXCIgKm5nSWY9XCJBZGRTaG93U291cmNlVXNlckF1dG9Db21wbGV0ZVwiIFtncm91cF09XCJBZGRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLUF1dG9jb21wbGV0ZVRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZVwiIChPbkNoYW5nZSk9XCJhZGREZXN0aW5hdGlvblBhcnRpY2lwYW50T25DaGFuZ2UoJGV2ZW50KVwiIFtncm91cF09XCJBZGRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdFwiICpuZ0lmPVwiQWRkU2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3RcIiBbZ3JvdXBdPVwiQWRkSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtQXV0b2NvbXBsZXRlVGV4dEJveCBbb3B0aW9uc109XCJBZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGVcIiAqbmdJZj1cIkFkZFNob3dEZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGVcIiBbZ3JvdXBdPVwiQWRkSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1BdXRvY29tcGxldGVUZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIkFkZElzQWN0aXZlXCIgW2dyb3VwXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURhdGVUaW1lUGlja2VyIFtvcHRpb25zXT1cIkFkZEV4cGlyZXNBdFwiIFtncm91cF09XCJBZGRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG5cclxuICAgICAgICAgIDwvQkJTRi1EYXRlVGltZVBpY2tlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBDbG9zZUltcGVyc29uYXRpb25Nb2RhbCBpZD1cIkNsb3NlSW1wZXJzb25hdGlvbk1vZGFsXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS1FZGl0IE1vZGFsLS0+XHJcbjxuZy10ZW1wbGF0ZSAjRWRpdEltcGVyc29uYXRpb25Nb2RhbCBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHNjcm9sbC15IHB4LTEwIHB4LWxnLTE1IHB0LTAgcGItMTVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRWRpdFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkltcGVyc29uYXRpb25SdWxlXCIpfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cIkVkaXRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnNcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0U291cmNlUGFydGljaXBhbnRUeXBlXCIgKE9uQ2hhbmdlKT1cImVkaXRTb3VyY2VQYXJ0aWNpcGFudE9uQ2hhbmdlKCRldmVudClcIiBbZ3JvdXBdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0U291cmNlUGVybWlzc2lvblNldExpc3RcIiAqbmdJZj1cIkVkaXRTaG93U291cmNlUGVybWlzc2lvbkxpc3RcIiBbZ3JvdXBdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLUF1dG9jb21wbGV0ZVRleHRCb3ggW29wdGlvbnNdPVwiRWRpdFNvdXJjZVVzZXJBdXRvQ29tcGxldGVcIiAqbmdJZj1cIkVkaXRTaG93U291cmNlVXNlckF1dG9Db21wbGV0ZVwiIFtncm91cF09XCJFZGl0SW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1BdXRvY29tcGxldGVUZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGVcIiAoT25DaGFuZ2UpPVwiZWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRPbkNoYW5nZSgkZXZlbnQpXCIgW2dyb3VwXT1cIkVkaXRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3RcIiAqbmdJZj1cIkVkaXRTaG93RGVzdGluYXRpb25QZXJtaXNzaW9uTGlzdFwiIFtncm91cF09XCJFZGl0SW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtQXV0b2NvbXBsZXRlVGV4dEJveCBbb3B0aW9uc109XCJFZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlXCIgKm5nSWY9XCJFZGl0U2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZVwiIFtncm91cF09XCJFZGl0SW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1BdXRvY29tcGxldGVUZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIkVkaXRJc0FjdGl2ZVwiIFtncm91cF09XCJFZGl0SW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRGF0ZVRpbWVQaWNrZXIgW29wdGlvbnNdPVwiRWRpdEV4cGlyZXNBdFwiIFtncm91cF09XCJFZGl0SW1wZXJzb25hdGlvbkZvcm1cIj5cclxuXHJcbiAgICAgICAgICA8L0JCU0YtRGF0ZVRpbWVQaWNrZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgIDxidXR0b24gI0Nsb3NlRWRpdEltcGVyc29uYXRpb25Nb2RhbCBpZD1cIkNsb3NlRWRpdEltcGVyc29uYXRpb25Nb2RhbFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSAgbWUtM1wiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9CQlNGLUZvcm0+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuPCEtLWRlbGV0ZSBNb2RhbC0tPlxyXG48QkJTRi1Db25maXJtYXRpb25Nb2RhbCAqbmdJZj1cImRlbGV0ZUNvbnRyb2xMb2FkZWRcIiBbb3B0aW9uc109XCJEZWxldGVDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJDb25maXJtYXRpb25Nb2RhbENvbnRyb2xcIiAjQ29uZmlybWF0aW9uTW9kYWxDb250cm9sPjwvQkJTRi1Db25maXJtYXRpb25Nb2RhbD5cclxuXHJcbiJdfQ==
450
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wZXJzb25hdGlvbi1ydWxlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL2ltcGVyc29uYXRpb24tcnVsZXMvaW1wZXJzb25hdGlvbi1ydWxlcy9pbXBlcnNvbmF0aW9uLXJ1bGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvUGFnZXMvaW1wZXJzb25hdGlvbi1ydWxlcy9pbXBlcnNvbmF0aW9uLXJ1bGVzL2ltcGVyc29uYXRpb24tcnVsZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbFQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFFNUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBTXJGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU16RCxNQUFNLE9BQU8sMkJBQTJCO0lBNkR0QyxZQUFvQixXQUF3QixFQUFVLGVBQWdDLEVBQVMsY0FBOEIsRUFDbkgs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Q0FBQyxhQUFhLENBQUM7UUFFcEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNoQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzVDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFNRCxZQUFZO0lBQ1osV0FBVztRQUNULElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QyxDQUFDOzt5SEFyZlUsMkJBQTJCOzZHQUEzQiwyQkFBMkIsdVRDakJ4Qyxrb1dBd09BOzRGRHZOYSwyQkFBMkI7a0JBSnZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsV0FBVyxFQUFFLHNDQUFzQztpQkFDcEQ7bVVBY2lFLGFBQWE7c0JBQTVFLFNBQVM7dUJBQUMsZ0NBQWdDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQThDSix3QkFBd0I7c0JBQWpGLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEF1dG9jb21wbGV0ZURUTywgQXV0b2NvbXBsZXRlT3B0aW9ucywgQ2hlY2tCb3hPcHRpb25zLCBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMsIERhdGVQaWNrZXJPcHRpb25zLCBEcm9wZG93bk9wdGlvbnMsIEZpbHRlckl0ZW0sIEZpbHRlclR5cGUsIEZvcmNlRGlyZWN0aW9uLCBGb3JtT3B0aW9ucywgSW5wdXRUeXBlLCBQYWdpbmdBY3Rpb25Nb2RlLCBQYWdpbmdPcHRpb25zLCBQaWNrZXJUeXBlLCBTZWxlY3RNb2RlLCBTdGFydFZpZXcsIFRleHRCb3hPcHRpb25zIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBJbXBlcnNvbmF0aW9uUnVsZU1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9JbXBlcnNvbmF0aW9uUnVsZU1vZGVscy9JbXBlcnNvbmF0aW9uUnVsZU1vZGVsJztcclxuaW1wb3J0IHsgSW1wZXJzb25hdGlvblJ1bGVTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zaGFyZWQvU2VydmljZXMvSW1wZXJzb25hdGlvblJ1bGVTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSwgVXRpbGl0eVNlcnZpY2UsIEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IFBhZ2luZ0NvbXBvbmVudCB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzL2xpYi9jb250cm9scy9QYWdpbmcvUGFnaW5nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scy9saWIvY29udHJvbHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUGFydGljaXBhbnRUeXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NvbnN0YW50cyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1pbXBlcnNvbmF0aW9uLXJ1bGVzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW1wZXJzb25hdGlvbi1ydWxlcy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEltcGVyc29uYXRpb25SdWxlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgLy9QYWdlIHJlcXVpcmVtZW50c1xyXG4gIFNob3dQYWdlQ29udGVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEFwaVVybCA9IFwiL2FwaS9hZG1pbi9JbXBlcnNvbmF0aW9uUnVsZS9cIlxyXG5cclxuICAvL0ZpbHRlciBhbmQgcGFnaW5nIGNvbXBvbmVudHNcclxuICBzZWFyY2hUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgSW1wZXJzb25hdGlvbkZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBJbXBlcnNvbmF0aW9uUGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIGNsaWVudFNpZGVQYWdpbmdSZXN1bHQ6IGFueVtdID0gW107XHJcbiAgSW1wZXJzb25hdGlvblBhZ2luZzogUGFnaW5nT3B0aW9ucztcclxuICBJc0ZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ0ltcGVyc29uYXRpb25QYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwYWdpbmdFbGVtZW50OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuXHJcbiAgLy9SZXF1aXJlZCBsaXN0c1xyXG4gIFBlcm1pc3Npb25TZXRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIFBhcnRpY2lwYW50VHlwZUxpc3Q6IGFueVtdID0gW107XHJcblxyXG4gIC8vQWRkIE1vZGVsIENvbnRyb2xzXHJcbiAgQWRkSW1wZXJzb25hdGlvbkZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBBZGRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnM7XHJcbiAgQWRkU291cmNlUGFydGljaXBhbnRUeXBlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGU6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3Q6IERyb3Bkb3duT3B0aW9ucztcclxuICBBZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlOiBBdXRvY29tcGxldGVPcHRpb25zO1xyXG4gIEFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZTogQXV0b2NvbXBsZXRlT3B0aW9ucztcclxuICBBZGRJc0FjdGl2ZTogQ2hlY2tCb3hPcHRpb25zO1xyXG4gIEFkZEV4cGlyZXNBdDogRGF0ZVBpY2tlck9wdGlvbnM7XHJcbiAgQWRkU2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQWRkU2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBBZGRTaG93RGVzdGluYXRpb25QZXJtaXNzaW9uTGlzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEFkZFNob3dEZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIC8vRWRpdCBNb2RlbCBDb250cm9sc1xyXG4gIEVkaXRJbXBlcnNvbmF0aW9uRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEVkaXRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnM7XHJcbiAgRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIEVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIEVkaXRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdDogRHJvcGRvd25PcHRpb25zO1xyXG4gIEVkaXREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0OiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFNvdXJjZVVzZXJBdXRvQ29tcGxldGU6IEF1dG9jb21wbGV0ZU9wdGlvbnM7XHJcbiAgRWRpdERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZTogQXV0b2NvbXBsZXRlT3B0aW9ucztcclxuICBFZGl0SXNBY3RpdmU6IENoZWNrQm94T3B0aW9ucztcclxuICBFZGl0RXhwaXJlc0F0OiBEYXRlUGlja2VyT3B0aW9ucztcclxuICBFZGl0U2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgRWRpdFNob3dTb3VyY2VVc2VyQXV0b0NvbXBsZXRlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgRWRpdFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgRWRpdFNob3dEZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBJbXBlcnNvbmF0aW9uSWQ6IHN0cmluZztcclxuICBTb3VyY2VQYXJ0aWNpcGFudElkOiBzdHJpbmc7XHJcbiAgRGVzdGluYXRpb25QYXJ0aWNpcGFudElkOiBzdHJpbmc7XHJcblxyXG4gIC8vZGVsZXRlICBNb2RlbCBDb250cm9sc1xyXG4gIGRlbGV0ZUltcGVyc29uYXRpb25SdWxlSWQ6IHN0cmluZztcclxuICBEZWxldGVDb25maXJtYXRpb25PcHRpb25zOiBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnM7XHJcbiAgZGVsZXRlQ29udHJvbExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ0NvbmZpcm1hdGlvbk1vZGFsQ29udHJvbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDb25maXJtYXRpb25Nb2RhbENvbnRyb2w6IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBwYWdlSW5mb1NlcnZpY2U6IFBhZ2VJbmZvU2VydmljZSwgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBwcml2YXRlIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBJbXBlcnNvbmF0aW9uUnVsZVNlcnZpY2U6IEltcGVyc29uYXRpb25SdWxlU2VydmljZSwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLCBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlKSB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuU2hvd1BhZ2VDb250ZW50ID0gdHJ1ZTtcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJJbXBlcnNvbmF0aW9uUnVsZXNcIilcclxuICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlQnJlYWRjcnVtYnMgPSBbXHJcbiAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkhvbWVcIiksIHBhdGg6ICcvQWRtaW4vSG9tZScsIGlzU2VwYXJhdG9yOiBmYWxzZSwgaXNBY3RpdmU6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgXTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZVRpdGxlKCk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG4gICAgdGhpcy5iYnNmVHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5pbml0aWFsaXplUGFnZSgpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVBhZ2UoKSB7XHJcbiAgICAvLyBUZXh0Qm94IGluaXRcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94Lk5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94LkhpZGVMYWJlbCA9IHRydWVcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5UeXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC5QbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKVxyXG5cclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyID0gbmV3IEZpbHRlckl0ZW0oKTtcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLkZvcm1Db250cm9sTmFtZSA9IFwic2VhcmNoVGV4dEJveFwiXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5BY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJzZWFyY2hUZXh0XCJcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLklzRm9ybUNvbnRyb2wgPSB0cnVlXHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5GaWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94XHJcblxyXG4gICAgdGhpcy5JbXBlcnNvbmF0aW9uUGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuSW1wZXJzb25hdGlvblBhZ2luZy5BY3Rpb25Qb3N0VVJMID0gdGhpcy5BcGlVcmwgKyAnR2V0SW1wZXJzb25hdGlvblJ1bGVCeUZpbHRlcic7XHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25QYWdpbmcuT25LZXlQcmVzc0ZpbHRlcnNDb250cm9sTmFtZXMgPSBbXCJzZWFyY2hUZXh0Qm94XCJdXHJcbiAgICB0aGlzLkltcGVyc29uYXRpb25QYWdpbmcuRmlsdGVycyA9IFt0aGlzLlRleHRJbnB1dEZpbHRlcl1cclxuICAgIHRoaXMuSW1wZXJzb25hdGlvblBhZ2luZy5WYWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpXHJcbiAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vUGFnaW5nIGZ1bmN0aW9uc1xyXG4gIHNldEltcGVyc29uYXRpb25MaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy5JbXBlcnNvbmF0aW9uUGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gICAgdGhpcy5TaG93UGFnZUNvbnRlbnQgPSB0cnVlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpXHJcbiAgfVxyXG5cclxuICBzZWFyY2hDbGllbnRTaWRlKHNlYXJjaFZhbHVlKSB7XHJcbiAgICBpZiAoc2VhcmNoVmFsdWUpXHJcbiAgICAgIHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdCA9IHRoaXMuY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdC5maWx0ZXIoXHJcbiAgICAgICAgZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgIHZhciBzb3VyY2VQYXJ0aWNpcGFudE5hbWUgPSBpdGVtLnNvdXJjZVBhcnRpY2lwYW50RFRPLnBhcnRpY2lwYW50TmFtZTtcclxuICAgICAgICAgIHZhciBkZXN0aW5hdGlvblBhcnRpY2lwYW50TmFtZSA9IGl0ZW0uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudE5hbWU7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBzb3VyY2VQYXJ0aWNpcGFudE5hbWUuZW5nbGlzaC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpXHJcbiAgICAgICAgICAgIHx8IHNvdXJjZVBhcnRpY2lwYW50TmFtZS5hcmFiaWMudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICB8fCBkZXN0aW5hdGlvblBhcnRpY2lwYW50TmFtZS5hcmFiaWMudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKVxyXG4gICAgICAgICAgICB8fCBkZXN0aW5hdGlvblBhcnRpY2lwYW50TmFtZS5hcmFiaWMudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgfSlcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jbGllbnRTaWRlUGFnaW5nUmVzdWx0ID0gdGhpcy5JbXBlcnNvbmF0aW9uUGFnaW5nUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy9BZGQgaW1wZXJzb25hdGlvbiBydWxlIGZ1bmN0aW9uc1xyXG4gIHNob3dBZGRJbXBlcnNvbmF0aW9uTW9kYWwoQWRkSW1wZXJzb25hdGlvbk1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG5cclxuICAgIHRoaXMuSW1wZXJzb25hdGlvblJ1bGVTZXJ2aWNlLmxvYWRBZGREcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgRHJvcGRvd25MaXN0cyA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIHRoaXMuUGVybWlzc2lvblNldExpc3QgPSBEcm9wZG93bkxpc3RzLnBlcm1pc3Npb25MaXN0O1xyXG4gICAgICB0aGlzLlBhcnRpY2lwYW50VHlwZUxpc3QgPSBEcm9wZG93bkxpc3RzLnBhcnRpY2lwYW50VHlwZUxpc3Q7XHJcbiAgICAgIHRoaXMuQWRkSW1wZXJzb25hdGlvbkZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KVxyXG5cclxuICAgICAgdGhpcy5BZGRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy5BZGRJbXBlcnNvbmF0aW9uRm9ybVxyXG4gICAgICB0aGlzLkFkZEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucy5HZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRJbXBlcnNvbmF0aW9uUnVsZU1vZGVsO1xyXG4gICAgICB0aGlzLkFkZEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucy5TZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZEltcGVyc29uYXRpb25SdWxlRnVuY3Rpb247XHJcbiAgICAgIHRoaXMuQWRkSW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudFxyXG5cclxuICAgICAgdGhpcy5BZGRTaG93RGVzdGluYXRpb25QZXJtaXNzaW9uTGlzdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkFkZFNob3dEZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5BZGRTaG93U291cmNlUGVybWlzc2lvbkxpc3QgPSBmYWxzZVxyXG4gICAgICB0aGlzLkFkZFNob3dTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gZmFsc2VcclxuXHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGFydGljaXBhbnRUeXBlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZS5OYW1lID0gXCJBZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGVcIlxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZS5MYWJlbEtleSA9IFwiU291cmNlUGFydGljaXBhbnRUeXBlXCJcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGFydGljaXBhbnRUeXBlLkRhdGFTb3VyY2UgPSB0aGlzLlBhcnRpY2lwYW50VHlwZUxpc3RcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuTmFtZSA9IFwiQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGVcIlxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLkxhYmVsS2V5ID0gXCJEZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZVwiXHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuU2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuRGF0YVNvdXJjZSA9IHRoaXMuUGFydGljaXBhbnRUeXBlTGlzdFxyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5BZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdCA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdC5OYW1lID0gXCJBZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdFwiXHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGVybWlzc2lvblNldExpc3QuTGFiZWxLZXkgPSBcIlNvdXJjZVBlcm1pc3Npb25TZXRMaXN0XCJcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdC5TZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdC5EYXRhU291cmNlID0gdGhpcy5QZXJtaXNzaW9uU2V0TGlzdFxyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlUGVybWlzc2lvblNldExpc3QuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0ID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuTmFtZSA9IFwiQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdFwiXHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5MYWJlbFZhbHVlID0gXCJEZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0XCJcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LkxhYmVsS2V5ID0gXCJEZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0XCJcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LlNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLkFkZERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuRGF0YVNvdXJjZSA9IHRoaXMuUGVybWlzc2lvblNldExpc3RcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LlNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZSA9IG5ldyBBdXRvY29tcGxldGVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5OYW1lID0gXCJBZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlXCI7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5MYWJlbEtleSA9IFwiVXNlclwiO1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVVzZXJBdXRvQ29tcGxldGUuVHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkFkZFNvdXJjZVVzZXJBdXRvQ29tcGxldGUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5Gb3JjZURpcmVjdGlvbiA9IEZvcmNlRGlyZWN0aW9uLkVuZ2xpc2g7XHJcbiAgICAgIHRoaXMuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5BY3Rpb25VUkwgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIHRoaXMuQXBpVXJsICsgXCJBdXRvQ29tcGxldGVVc2VyXCJcclxuICAgICAgdGhpcy5BZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gbmV3IEF1dG9jb21wbGV0ZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuTmFtZSA9IFwiQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlXCI7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLkxhYmVsS2V5ID0gXCJVc2VyXCI7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuSXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLlZhbHVlID0gbnVsbDtcclxuICAgICAgdGhpcy5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuQWN0aW9uVVJMID0gdGhpcy5lbnZpcm9ubWVudFNlcnZpY2UuZ2V0QXBpVXJsKCkgKyB0aGlzLkFwaVVybCArIFwiQXV0b0NvbXBsZXRlVXNlclwiXHJcbiAgICAgIHRoaXMuQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICAgIHRoaXMuQWRkSXNBY3RpdmUgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkSXNBY3RpdmUuTmFtZSA9IFwiQWRkSXNBY3RpdmVcIlxyXG4gICAgICB0aGlzLkFkZElzQWN0aXZlLkxhYmVsS2V5ID0gXCJBY3RpdmVcIlxyXG4gICAgICB0aGlzLkFkZElzQWN0aXZlLklzRGlzYWJsZWQgPSB0cnVlXHJcbiAgICAgIHRoaXMuQWRkSXNBY3RpdmUuVmFsdWUgPSB0cnVlXHJcblxyXG4gICAgICB0aGlzLkFkZEV4cGlyZXNBdCA9IG5ldyBEYXRlUGlja2VyT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZEV4cGlyZXNBdC5OYW1lID0gXCJBZGRFeHBpcmVzQXRcIlxyXG4gICAgICB0aGlzLkFkZEV4cGlyZXNBdC5MYWJlbEtleSA9IFwiRXhwaXJlc0F0XCJcclxuICAgICAgdGhpcy5BZGRFeHBpcmVzQXQuSXNSZXF1aXJlZCA9IHRydWVcclxuICAgICAgdGhpcy5BZGRFeHBpcmVzQXQuU3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoXHJcbiAgICAgIHRoaXMuQWRkRXhwaXJlc0F0LlBpY2tlclR5cGUgPSBQaWNrZXJUeXBlLkNhbGVuZGFyXHJcbiAgICAgIHRoaXMuQWRkRXhwaXJlc0F0LlNlbGVjdE1vZGUgPSBTZWxlY3RNb2RlLlNpbmdsZVxyXG5cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRJbXBlcnNvbmF0aW9uTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KTtcclxuXHJcblxyXG4gIH1cclxuICBnZXRBZGRJbXBlcnNvbmF0aW9uUnVsZU1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZEltcGVyc29uYXRpb25Gb3JtLnZhbHVlO1xyXG5cclxuICAgIGxldCBBZGRNb2RlbDogSW1wZXJzb25hdGlvblJ1bGVNb2RlbCA9IG5ldyBJbXBlcnNvbmF0aW9uUnVsZU1vZGVsKCk7XHJcbiAgICBBZGRNb2RlbC5Tb3VyY2VQYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCA9IFJlc3VsdE1vZGVsLkFkZFNvdXJjZVBhcnRpY2lwYW50VHlwZVxyXG4gICAgQWRkTW9kZWwuRGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCA9IFJlc3VsdE1vZGVsLkFkZERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlXHJcbiAgICBBZGRNb2RlbC5FeHBpcmVzQXQgPSBSZXN1bHRNb2RlbC5BZGRFeHBpcmVzQXRcclxuICAgIEFkZE1vZGVsLklzQWN0aXZlID0gUmVzdWx0TW9kZWwuQWRkSXNBY3RpdmVcclxuICAgIGlmIChSZXN1bHRNb2RlbC5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUgIT0gbnVsbCAmJiBSZXN1bHRNb2RlbC5BZGREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUgIT0gdW5kZWZpbmVkKVxyXG4gICAgICBBZGRNb2RlbC5EZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEID0gUmVzdWx0TW9kZWwuQWRkRGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLmtleVxyXG4gICAgZWxzZVxyXG4gICAgICBBZGRNb2RlbC5EZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlBlcm1pc3Npb25TZXRJRF9HVUlEID0gUmVzdWx0TW9kZWwuQWRkRGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdFxyXG5cclxuICAgIGlmIChSZXN1bHRNb2RlbC5BZGRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlICE9IG51bGwgJiYgUmVzdWx0TW9kZWwuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIEFkZE1vZGVsLlNvdXJjZVBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEID0gUmVzdWx0TW9kZWwuQWRkU291cmNlVXNlckF1dG9Db21wbGV0ZS5rZXlcclxuICAgIGVsc2VcclxuICAgICAgQWRkTW9kZWwuU291cmNlUGFydGljaXBhbnREVE8uUGVybWlzc2lvblNldElEX0dVSUQgPSBSZXN1bHRNb2RlbC5BZGRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdFxyXG4gICAgcGFyYW1BcnJheS5wdXNoKEFkZE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0QWRkSW1wZXJzb25hdGlvblJ1bGVGdW5jdGlvbiA9IChBZGRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5JbXBlcnNvbmF0aW9uUnVsZVNlcnZpY2UuYWRkSW1wZXJzb25hdGlvblJ1bGUoQWRkTW9kZWwpXHJcbiAgfVxyXG5cclxuXHJcbiAgYWRkRGVzdGluYXRpb25QYXJ0aWNpcGFudE9uQ2hhbmdlKGtleSkge1xyXG4gICAga2V5ID0ga2V5Py50b0xvd2VyQ2FzZSgpO1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgY2FzZSBQYXJ0aWNpcGFudFR5cGUuUGVybWlzc2lvblNldDpcclxuICAgICAgICB0aGlzLkFkZFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkFkZFNob3dEZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQYXJ0aWNpcGFudFR5cGUuVXNlcjpcclxuICAgICAgICB0aGlzLkFkZFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5BZGRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgYWRkU291cmNlUGFydGljaXBhbnRPbkNoYW5nZShrZXkpIHtcclxuICAgIGtleSA9IGtleT8udG9Mb3dlckNhc2UoKTtcclxuICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgIGNhc2UgUGFydGljaXBhbnRUeXBlLlBlcm1pc3Npb25TZXQ6XHJcbiAgICAgICAgdGhpcy5BZGRTaG93U291cmNlUGVybWlzc2lvbkxpc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuQWRkU2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQYXJ0aWNpcGFudFR5cGUuVXNlcjpcclxuICAgICAgICB0aGlzLkFkZFNob3dTb3VyY2VQZXJtaXNzaW9uTGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQWRkU2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vRWRpdCBpbXBlcnNvbmF0aW9uIHJ1bGUgZnVuY3Rpb25zXHJcbiAgc2hvd0VkaXRJbXBlcnNvbmF0aW9uTW9kYWwoaW1wZXJzb25hdGlvbklEOiBzdHJpbmcsIGVkaXRJbXBlcnNvbmF0aW9uTW9kYWwpIHtcclxuICAgIHRoaXMuSW1wZXJzb25hdGlvbklkID0gaW1wZXJzb25hdGlvbklEO1xyXG5cclxuICAgIHRoaXMuSW1wZXJzb25hdGlvblJ1bGVTZXJ2aWNlLmdldEVkaXRJbXBlcnNvbmF0aW9uUnVsZSh0aGlzLkltcGVyc29uYXRpb25JZCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IHJlc3VsdE9iaiA9IHJlc3VsdCBhcyBhbnk7XHJcbiAgICAgIGxldCBpbXBlcnNvbmF0aW9uID0gcmVzdWx0T2JqLm1vZGVsO1xyXG4gICAgICBsZXQgbGlzdHMgPSByZXN1bHRPYmoubGlzdHM7XHJcbiAgICAgIHRoaXMuUGVybWlzc2lvblNldExpc3QgPSBsaXN0cy5wZXJtaXNzaW9uTGlzdDtcclxuICAgICAgdGhpcy5QYXJ0aWNpcGFudFR5cGVMaXN0ID0gbGlzdHMucGFydGljaXBhbnRUeXBlTGlzdDtcclxuXHJcbiAgICAgIHRoaXMuRWRpdEltcGVyc29uYXRpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSlcclxuXHJcbiAgICAgIHRoaXMuRWRpdEltcGVyc29uYXRpb25Gb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMuRm9ybUdyb3VwID0gdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm1cclxuICAgICAgdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLkdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRJbXBlcnNvbmF0aW9uUnVsZU1vZGVsO1xyXG4gICAgICB0aGlzLkVkaXRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0SW1wZXJzb25hdGlvblJ1bGVGdW5jdGlvbjtcclxuICAgICAgdGhpcy5FZGl0SW1wZXJzb25hdGlvbkZvcm1PcHRpb25zLlBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudFxyXG4gICAgICB0aGlzLkVkaXRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnMuUGFnaW5nQWN0aW9uTW9kZSA9IFBhZ2luZ0FjdGlvbk1vZGUuVXBkYXRlXHJcblxyXG4gICAgICB0aGlzLkVkaXRTaG93RGVzdGluYXRpb25QZXJtaXNzaW9uTGlzdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLkVkaXRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuRWRpdFNob3dTb3VyY2VQZXJtaXNzaW9uTGlzdCA9IGZhbHNlXHJcbiAgICAgIHRoaXMuRWRpdFNob3dTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gZmFsc2VcclxuXHJcbiAgICAgIGlmIChpbXBlcnNvbmF0aW9uLnNvdXJjZVBhcnRpY2lwYW50RFRPLnBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEICE9IG51bGwgJiYgaW1wZXJzb25hdGlvbi5kZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLnBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudE9uQ2hhbmdlKGltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCk7XHJcbiAgICAgICAgdGhpcy5lZGl0U291cmNlUGFydGljaXBhbnRPbkNoYW5nZShpbXBlcnNvbmF0aW9uLnNvdXJjZVBhcnRpY2lwYW50RFRPLnBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuXHJcbiAgICAgIHRoaXMuU291cmNlUGFydGljaXBhbnRJZCA9IGltcGVyc29uYXRpb24uc291cmNlUGFydGljaXBhbnREVE8uaURfR1VJRDtcclxuICAgICAgdGhpcy5EZXN0aW5hdGlvblBhcnRpY2lwYW50SWQgPSBpbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uaURfR1VJRDtcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGFydGljaXBhbnRUeXBlID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuTmFtZSA9IFwiRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZVwiXHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBhcnRpY2lwYW50VHlwZS5MYWJlbEtleSA9IFwiU291cmNlUGFydGljaXBhbnRUeXBlXCJcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGFydGljaXBhbnRUeXBlLlNlbGVjdGVkSXRlbXMgPSBpbXBlcnNvbmF0aW9uLnNvdXJjZVBhcnRpY2lwYW50RFRPLnBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuRGF0YVNvdXJjZSA9IHRoaXMuUGFydGljaXBhbnRUeXBlTGlzdFxyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGFydGljaXBhbnRUeXBlLkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlUGFydGljaXBhbnRUeXBlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLk5hbWUgPSBcIkVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZVwiXHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLkxhYmVsS2V5ID0gXCJEZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZVwiXHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLlNlbGVjdGVkSXRlbXMgPSBpbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlLkRhdGFTb3VyY2UgPSB0aGlzLlBhcnRpY2lwYW50VHlwZUxpc3RcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuU2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudFR5cGUuQWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIGxldCBzb3VyY2VQZXJtaXNzaW9uU2V0U2VsZWN0ZWRJdGVtO1xyXG4gICAgICBsZXQgc291cmNlVXNlck1vZGVsID0gbmV3IEF1dG9jb21wbGV0ZURUTygpO1xyXG4gICAgICBpZiAoaW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRD8udG9Mb3dlckNhc2UoKSA9PSBQYXJ0aWNpcGFudFR5cGUuVXNlcikge1xyXG4gICAgICAgIHNvdXJjZVVzZXJNb2RlbC5rZXkgPSBpbXBlcnNvbmF0aW9uLnNvdXJjZVBhcnRpY2lwYW50RFRPLnVzZXJJRF9HVUlEXHJcbiAgICAgICAgc291cmNlVXNlck1vZGVsLnZhbHVlID0gaW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudE5hbWVTdHI7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc291cmNlUGVybWlzc2lvblNldFNlbGVjdGVkSXRlbSA9IGltcGVyc29uYXRpb24uc291cmNlUGFydGljaXBhbnREVE8ucGVybWlzc2lvblNldElEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5FZGl0U291cmNlUGVybWlzc2lvblNldExpc3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0Lk5hbWUgPSBcIkVkaXRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdFwiXHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LkxhYmVsS2V5ID0gXCJTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdFwiXHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LlNlbGVjdGVkSXRlbXMgPSBzb3VyY2VQZXJtaXNzaW9uU2V0U2VsZWN0ZWRJdGVtO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdC5EYXRhU291cmNlID0gdGhpcy5QZXJtaXNzaW9uU2V0TGlzdFxyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdC5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdC5BbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVBlcm1pc3Npb25TZXRMaXN0LklzUmVxdWlyZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5FZGl0U291cmNlVXNlckF1dG9Db21wbGV0ZSA9IG5ldyBBdXRvY29tcGxldGVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFNvdXJjZVVzZXJBdXRvQ29tcGxldGUuTmFtZSA9IFwiRWRpdFNvdXJjZVVzZXJBdXRvQ29tcGxldGVcIjtcclxuICAgICAgdGhpcy5FZGl0U291cmNlVXNlckF1dG9Db21wbGV0ZS5MYWJlbEtleSA9IFwiVXNlclwiO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5FZGl0U291cmNlVXNlckF1dG9Db21wbGV0ZS5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0U291cmNlVXNlckF1dG9Db21wbGV0ZS5TZWxlY3RlZFZhbHVlID0gc291cmNlVXNlck1vZGVsO1xyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLkFjdGlvblVSTCA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldEFwaVVybCgpICsgdGhpcy5BcGlVcmwgKyBcIkF1dG9Db21wbGV0ZVVzZXJcIlxyXG4gICAgICB0aGlzLkVkaXRTb3VyY2VVc2VyQXV0b0NvbXBsZXRlLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICAgIGxldCBkZXN0aW5hdGlvblBlcm1pc3Npb25TZXRTZWxlY3RlZEl0ZW07XHJcbiAgICAgIGxldCBkZXN0aW5hdGlvblVzZXJNb2RlbCA9IG5ldyBBdXRvY29tcGxldGVEVE8oKTtcclxuICAgICAgaWYgKGltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtSUQgPT0gUGFydGljaXBhbnRUeXBlLlVzZXIpIHtcclxuICAgICAgICBkZXN0aW5hdGlvblVzZXJNb2RlbC5rZXkgPSBpbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8udXNlcklEX0dVSURcclxuICAgICAgICBkZXN0aW5hdGlvblVzZXJNb2RlbC52YWx1ZSA9IGltcGVyc29uYXRpb24uZGVzdGluYXRpb25QYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudE5hbWVTdHI7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZGVzdGluYXRpb25QZXJtaXNzaW9uU2V0U2VsZWN0ZWRJdGVtID0gaW1wZXJzb25hdGlvbi5kZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLnBlcm1pc3Npb25TZXRJRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuTmFtZSA9IFwiRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3RcIlxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LkxhYmVsS2V5ID0gXCJEZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0XCJcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5TZWxlY3RlZEl0ZW1zID0gZGVzdGluYXRpb25QZXJtaXNzaW9uU2V0U2VsZWN0ZWRJdGVtXHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uUGVybWlzc2lvblNldExpc3QuRGF0YVNvdXJjZSA9IHRoaXMuUGVybWlzc2lvblNldExpc3RcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5TaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0LkFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdC5Jc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUgPSBuZXcgQXV0b2NvbXBsZXRlT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuTmFtZSA9IFwiRWRpdERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZVwiO1xyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuTGFiZWxLZXkgPSBcIlVzZXJcIjtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLlR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLklzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGUuU2VsZWN0ZWRWYWx1ZSA9IGRlc3RpbmF0aW9uVXNlck1vZGVsXHJcbiAgICAgIHRoaXMuRWRpdERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5BY3Rpb25VUkwgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBcGlVcmwoKSArIHRoaXMuQXBpVXJsICsgXCJBdXRvQ29tcGxldGVVc2VyXCJcclxuICAgICAgdGhpcy5FZGl0RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlLlZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKClcclxuXHJcbiAgICAgIHRoaXMuRWRpdElzQWN0aXZlID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRJc0FjdGl2ZS5OYW1lID0gXCJFZGl0SXNBY3RpdmVcIlxyXG4gICAgICB0aGlzLkVkaXRJc0FjdGl2ZS5MYWJlbEtleSA9IFwiQWN0aXZlXCJcclxuICAgICAgdGhpcy5FZGl0SXNBY3RpdmUuSXNEaXNhYmxlZCA9IHRydWVcclxuICAgICAgdGhpcy5FZGl0SXNBY3RpdmUuVmFsdWUgPSB0cnVlXHJcblxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQgPSBuZXcgRGF0ZVBpY2tlck9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0RXhwaXJlc0F0Lk5hbWUgPSBcIkVkaXRFeHBpcmVzQXRcIlxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQuTGFiZWxLZXkgPSBcIkV4cGlyZXNBdFwiXHJcbiAgICAgIHRoaXMuRWRpdEV4cGlyZXNBdC5Jc1JlcXVpcmVkID0gdHJ1ZVxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQuVmFsdWUgPSBpbXBlcnNvbmF0aW9uLmV4cGlyZXNBdFxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQuU3RhcnRWaWV3ID0gU3RhcnRWaWV3Lk1vbnRoXHJcbiAgICAgIHRoaXMuRWRpdEV4cGlyZXNBdC5QaWNrZXJUeXBlID0gUGlja2VyVHlwZS5DYWxlbmRhclxyXG4gICAgICB0aGlzLkVkaXRFeHBpcmVzQXQuU2VsZWN0TW9kZSA9IFNlbGVjdE1vZGUuU2luZ2xlXHJcblxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGVkaXRJbXBlcnNvbmF0aW9uTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKClcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIGdldEVkaXRJbXBlcnNvbmF0aW9uUnVsZU1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkVkaXRJbXBlcnNvbmF0aW9uRm9ybS52YWx1ZTtcclxuXHJcbiAgICBsZXQgRWRpdE1vZGVsOiBJbXBlcnNvbmF0aW9uUnVsZU1vZGVsID0gbmV3IEltcGVyc29uYXRpb25SdWxlTW9kZWwoKTtcclxuICAgIEVkaXRNb2RlbC5JRF9HVUlEID0gdGhpcy5JbXBlcnNvbmF0aW9uSWRcclxuICAgIEVkaXRNb2RlbC5EZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLklEX0dVSUQgPSB0aGlzLkRlc3RpbmF0aW9uUGFydGljaXBhbnRJZFxyXG4gICAgRWRpdE1vZGVsLlNvdXJjZVBhcnRpY2lwYW50RFRPLklEX0dVSUQgPSB0aGlzLlNvdXJjZVBhcnRpY2lwYW50SWRcclxuICAgIEVkaXRNb2RlbC5Tb3VyY2VQYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCA9IFJlc3VsdE1vZGVsLkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGVcclxuICAgIEVkaXRNb2RlbC5EZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlBhcnRpY2lwYW50VHlwZUl0ZW1JRF9HVUlEID0gUmVzdWx0TW9kZWwuRWRpdERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlXHJcbiAgICBFZGl0TW9kZWwuRXhwaXJlc0F0ID0gUmVzdWx0TW9kZWwuRWRpdEV4cGlyZXNBdFxyXG4gICAgRWRpdE1vZGVsLklzQWN0aXZlID0gUmVzdWx0TW9kZWwuRWRpdElzQWN0aXZlXHJcbiAgICBpZiAoRWRpdE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGFydGljaXBhbnRUeXBlSXRlbUlEX0dVSUQgPT0gUGFydGljaXBhbnRUeXBlLlVzZXIpXHJcbiAgICAgIEVkaXRNb2RlbC5EZXN0aW5hdGlvblBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEID0gUmVzdWx0TW9kZWwuRWRpdERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZS5rZXlcclxuICAgIGVsc2VcclxuICAgICAgRWRpdE1vZGVsLkRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8uUGVybWlzc2lvblNldElEX0dVSUQgPSBSZXN1bHRNb2RlbC5FZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdFxyXG4gICAgaWYgKEVkaXRNb2RlbC5Tb3VyY2VQYXJ0aWNpcGFudERUTy5QYXJ0aWNpcGFudFR5cGVJdGVtSURfR1VJRCA9PSBQYXJ0aWNpcGFudFR5cGUuVXNlcilcclxuICAgICAgRWRpdE1vZGVsLlNvdXJjZVBhcnRpY2lwYW50RFRPLlVzZXJJRF9HVUlEID0gUmVzdWx0TW9kZWwuRWRpdFNvdXJjZVVzZXJBdXRvQ29tcGxldGUua2V5XHJcbiAgICBlbHNlXHJcbiAgICAgIEVkaXRNb2RlbC5Tb3VyY2VQYXJ0aWNpcGFudERUTy5QZXJtaXNzaW9uU2V0SURfR1VJRCA9IFJlc3VsdE1vZGVsLkVkaXRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdFxyXG4gICAgcGFyYW1BcnJheS5wdXNoKEVkaXRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEVkaXRJbXBlcnNvbmF0aW9uUnVsZUZ1bmN0aW9uID0gKEVkaXRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5JbXBlcnNvbmF0aW9uUnVsZVNlcnZpY2UuZWRpdEltcGVyc29uYXRpb25SdWxlKEVkaXRNb2RlbClcclxuICB9XHJcblxyXG4gIGVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50T25DaGFuZ2Uoa2V5KSB7XHJcbiAgICBrZXkgPSBrZXk/LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlIFBhcnRpY2lwYW50VHlwZS5QZXJtaXNzaW9uU2V0OlxyXG4gICAgICAgIHRoaXMuRWRpdFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLkVkaXRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUGFydGljaXBhbnRUeXBlLlVzZXI6XHJcbiAgICAgICAgdGhpcy5FZGl0U2hvd0Rlc3RpbmF0aW9uUGVybWlzc2lvbkxpc3QgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkVkaXRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRTb3VyY2VQYXJ0aWNpcGFudE9uQ2hhbmdlKGtleSkge1xyXG4gICAga2V5ID0ga2V5Py50b0xvd2VyQ2FzZSgpO1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgY2FzZSBQYXJ0aWNpcGFudFR5cGUuUGVybWlzc2lvblNldDpcclxuICAgICAgICB0aGlzLkVkaXRTaG93U291cmNlUGVybWlzc2lvbkxpc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuRWRpdFNob3dTb3VyY2VVc2VyQXV0b0NvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgUGFydGljaXBhbnRUeXBlLlVzZXI6XHJcbiAgICAgICAgdGhpcy5FZGl0U2hvd1NvdXJjZVBlcm1pc3Npb25MaXN0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5FZGl0U2hvd1NvdXJjZVVzZXJBdXRvQ29tcGxldGUgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9EZWxldGUgSW1wZXJzb25hdGlvblJ1bGVcclxuICBzaG93RGVsZXRlSW1wZXJzb25hdGlvbk1vZGFsKGltcGVyc29uYXRpb25SdWxlSUQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVJbXBlcnNvbmF0aW9uUnVsZUlkID0gaW1wZXJzb25hdGlvblJ1bGVJRDtcclxuXHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2godGhpcy5kZWxldGVJbXBlcnNvbmF0aW9uUnVsZUlkKTtcclxuXHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuU2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5kZWxldGVJbXBlcnNvbmF0aW9uO1xyXG4gICAgdGhpcy5EZWxldGVDb25maXJtYXRpb25PcHRpb25zLlNlcnZpY2VTdWJtaXRNb2RlbCA9IHBhcmFtQXJyYXk7XHJcbiAgICB0aGlzLkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuUGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG5cclxuICAgIHRoaXMuZGVsZXRlQ29udHJvbExvYWRlZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbENvbnRyb2wuc2hvd01vZGFsKCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlSW1wZXJzb25hdGlvbiA9IChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLkltcGVyc29uYXRpb25SdWxlU2VydmljZS5kZWxldGVJbXBlcnNvbmF0aW9uUnVsZShpZCk7XHJcbiAgfVxyXG5cclxuICAvL09uIGRlc3Ryb3lcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWVzdEhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3lIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuPCEtLSBQYWdlIENvbnRlbnQgLS0+XHJcbjxkaXYgKm5nSWY9XCJTaG93UGFnZUNvbnRlbnRcIiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJJc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwhLS0oT25DaGFuZ2UpPVwic2VhcmNoQ2xpZW50U2lkZSgkZXZlbnQpXCIgLS0+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInNlYXJjaFRleHRCb3hcIiBbZ3JvdXBdPVwiSW1wZXJzb25hdGlvbkZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgPCEtLSBiZWdpbjo6TWVudSAtLT5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiB0aXRsZT1cIkFkZFwiIChjbGljayk9XCJzaG93QWRkSW1wZXJzb25hdGlvbk1vZGFsKEFkZEltcGVyc29uYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgbWUtMVwiPjwvaT5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgIDwhLS0gZW5kOjpNZW51IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPiBbe3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUGFydGljaXBhbnRUeXBlXCIpfX1de3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU291cmNlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+IFt7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQYXJ0aWNpcGFudFR5cGVcIil9fV17e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJEZXN0aW5hdGlvblwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkV4cGlyZXNBdFwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGl2ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aW9uXCIpfX08L3RoPlxyXG4gICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgIDx0Ym9keSBpZD1cImxpc3RpbmdDb250YWluZXJcIiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG5cclxuICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBJbXBlcnNvbmF0aW9uIG9mIGNsaWVudFNpZGVQYWdpbmdSZXN1bHRcIj5cclxuXHJcbiAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhcmtcIj5cclxuICAgICAgICAgICAgICAgICAgW3t7SW1wZXJzb25hdGlvbi5zb3VyY2VQYXJ0aWNpcGFudERUTy5wYXJ0aWNpcGFudFR5cGVJdGVtTmFtZVN0cn19XSB7e0ltcGVyc29uYXRpb24uc291cmNlUGFydGljaXBhbnREVE8ucGFydGljaXBhbnROYW1lU3RyfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+ICBbe3tJbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGFydGljaXBhbnRUeXBlSXRlbU5hbWVTdHJ9fV0ge3tJbXBlcnNvbmF0aW9uLmRlc3RpbmF0aW9uUGFydGljaXBhbnREVE8ucGFydGljaXBhbnROYW1lU3RyfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgICA8dGQ+e3tJbXBlcnNvbmF0aW9uLmV4cGlyZXNBdH19PC90ZD5cclxuICAgICAgICAgICAgICA8dGQ+e3tJbXBlcnNvbmF0aW9uLmlzQWN0aXZlfX08L3RkPlxyXG5cclxuICAgICAgICAgICAgICA8dGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLWhcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiIG5nYkRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdEltcGVyc29uYXRpb25Nb2RhbChJbXBlcnNvbmF0aW9uLmlEX0dVSUQsRWRpdEltcGVyc29uYXRpb25Nb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0RlbGV0ZUltcGVyc29uYXRpb25Nb2RhbChJbXBlcnNvbmF0aW9uLmlEX0dVSUQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3AtbGluayBweC0zXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGVsZXRlXCIpfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPHRyICpuZ0lmPVwiY2xpZW50U2lkZVBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICAgICAgPCEtLWVuZDo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0SW1wZXJzb25hdGlvbkxpc3RSZXN1bHQoJGV2ZW50KVwiICpuZ0lmPVwiSXNGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiSW1wZXJzb25hdGlvblBhZ2luZ1wiIFtncm91cF09XCJJbXBlcnNvbmF0aW9uRm9ybVwiICNJbXBlcnNvbmF0aW9uUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG48IS0tIEFkZCBNb2RhbCAtLT5cclxuPG5nLXRlbXBsYXRlICNBZGRJbXBlcnNvbmF0aW9uTW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgPGgxIGNsYXNzPVwibWItM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkltcGVyc29uYXRpb25SdWxlXCIpfX08L2gxPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJBZGRJbXBlcnNvbmF0aW9uRm9ybU9wdGlvbnNcIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkU291cmNlUGFydGljaXBhbnRUeXBlXCIgKE9uQ2hhbmdlKT1cImFkZFNvdXJjZVBhcnRpY2lwYW50T25DaGFuZ2UoJGV2ZW50KVwiIFtncm91cF09XCJBZGRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiQWRkU291cmNlUGVybWlzc2lvblNldExpc3RcIiAqbmdJZj1cIkFkZFNob3dTb3VyY2VQZXJtaXNzaW9uTGlzdFwiIFtncm91cF09XCJBZGRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1BdXRvY29tcGxldGVUZXh0Qm94IFtvcHRpb25zXT1cIkFkZFNvdXJjZVVzZXJBdXRvQ29tcGxldGVcIiAqbmdJZj1cIkFkZFNob3dTb3VyY2VVc2VyQXV0b0NvbXBsZXRlXCIgW2dyb3VwXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtQXV0b2NvbXBsZXRlVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkFkZERlc3RpbmF0aW9uUGFydGljaXBhbnRUeXBlXCIgKE9uQ2hhbmdlKT1cImFkZERlc3RpbmF0aW9uUGFydGljaXBhbnRPbkNoYW5nZSgkZXZlbnQpXCIgW2dyb3VwXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJBZGREZXN0aW5hdGlvblBlcm1pc3Npb25TZXRMaXN0XCIgKm5nSWY9XCJBZGRTaG93RGVzdGluYXRpb25QZXJtaXNzaW9uTGlzdFwiIFtncm91cF09XCJBZGRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1BdXRvY29tcGxldGVUZXh0Qm94IFtvcHRpb25zXT1cIkFkZERlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZVwiICpuZ0lmPVwiQWRkU2hvd0Rlc3RpbmF0aW9uVXNlckF1dG9Db21wbGV0ZVwiIFtncm91cF09XCJBZGRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLUF1dG9jb21wbGV0ZVRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwiQWRkSXNBY3RpdmVcIiBbZ3JvdXBdPVwiQWRkSW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRGF0ZVRpbWVQaWNrZXIgW29wdGlvbnNdPVwiQWRkRXhwaXJlc0F0XCIgW2dyb3VwXT1cIkFkZEltcGVyc29uYXRpb25Gb3JtXCI+XHJcblxyXG4gICAgICAgICAgPC9CQlNGLURhdGVUaW1lUGlja2VyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICA8YnV0dG9uIENsb3NlSW1wZXJzb25hdGlvbk1vZGFsIGlkPVwiQ2xvc2VJbXBlcnNvbmF0aW9uTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvQkJTRi1Gb3JtPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLUVkaXQgTW9kYWwtLT5cclxuPG5nLXRlbXBsYXRlICNFZGl0SW1wZXJzb25hdGlvbk1vZGFsIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0XCIpfX0ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSW1wZXJzb25hdGlvblJ1bGVcIil9fTwvaDE+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtT3B0aW9uc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRTb3VyY2VQYXJ0aWNpcGFudFR5cGVcIiAoT25DaGFuZ2UpPVwiZWRpdFNvdXJjZVBhcnRpY2lwYW50T25DaGFuZ2UoJGV2ZW50KVwiIFtncm91cF09XCJFZGl0SW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXRTb3VyY2VQZXJtaXNzaW9uU2V0TGlzdFwiICpuZ0lmPVwiRWRpdFNob3dTb3VyY2VQZXJtaXNzaW9uTGlzdFwiIFtncm91cF09XCJFZGl0SW1wZXJzb25hdGlvbkZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtQXV0b2NvbXBsZXRlVGV4dEJveCBbb3B0aW9uc109XCJFZGl0U291cmNlVXNlckF1dG9Db21wbGV0ZVwiICpuZ0lmPVwiRWRpdFNob3dTb3VyY2VVc2VyQXV0b0NvbXBsZXRlXCIgW2dyb3VwXT1cIkVkaXRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLUF1dG9jb21wbGV0ZVRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtRHJvcGRvd25MaXN0IFtvcHRpb25zXT1cIkVkaXREZXN0aW5hdGlvblBhcnRpY2lwYW50VHlwZVwiIChPbkNoYW5nZSk9XCJlZGl0RGVzdGluYXRpb25QYXJ0aWNpcGFudE9uQ2hhbmdlKCRldmVudClcIiBbZ3JvdXBdPVwiRWRpdEltcGVyc29uYXRpb25Gb3JtXCI+XHJcbiAgICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJFZGl0RGVzdGluYXRpb25QZXJtaXNzaW9uU2V0TGlzdFwiICpuZ0lmPVwiRWRpdFNob3dEZXN0aW5hdGlvblBlcm1pc3Npb25MaXN0XCIgW2dyb3VwXT1cIkVkaXRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1BdXRvY29tcGxldGVUZXh0Qm94IFtvcHRpb25zXT1cIkVkaXREZXN0aW5hdGlvblVzZXJBdXRvQ29tcGxldGVcIiAqbmdJZj1cIkVkaXRTaG93RGVzdGluYXRpb25Vc2VyQXV0b0NvbXBsZXRlXCIgW2dyb3VwXT1cIkVkaXRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLUF1dG9jb21wbGV0ZVRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW29wdGlvbnNdPVwiRWRpdElzQWN0aXZlXCIgW2dyb3VwXT1cIkVkaXRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG4gICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICA8QkJTRi1EYXRlVGltZVBpY2tlciBbb3B0aW9uc109XCJFZGl0RXhwaXJlc0F0XCIgW2dyb3VwXT1cIkVkaXRJbXBlcnNvbmF0aW9uRm9ybVwiPlxyXG5cclxuICAgICAgICAgIDwvQkJTRi1EYXRlVGltZVBpY2tlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAjQ2xvc2VFZGl0SW1wZXJzb25hdGlvbk1vZGFsIGlkPVwiQ2xvc2VFZGl0SW1wZXJzb25hdGlvbk1vZGFsXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtICBtZS0zXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJDYW5jZWxMYWJlbFwiKX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2F2ZUxhYmVsXCIpfX08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L0JCU0YtRm9ybT5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48IS0tZGVsZXRlIE1vZGFsLS0+XHJcbjxCQlNGLUNvbmZpcm1hdGlvbk1vZGFsICpuZ0lmPVwiZGVsZXRlQ29udHJvbExvYWRlZFwiIFtvcHRpb25zXT1cIkRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnNcIiBpZD1cIkNvbmZpcm1hdGlvbk1vZGFsQ29udHJvbFwiICNDb25maXJtYXRpb25Nb2RhbENvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG5cclxuIl19