@bnsights/bbsf-admin-portal 1.1.49 → 1.1.50
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.
- package/README.md +4 -0
- package/bnsights-bbsf-admin-portal-1.1.50.tgz +0 -0
- package/esm2022/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +3 -3
- package/esm2022/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +1 -1
- package/esm2022/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +16 -9
- package/esm2022/lib/Pages/_layout/components/aside/aside.component.mjs +3 -3
- package/esm2022/lib/Pages/_layout/components/topbar/topbar.component.mjs +15 -22
- package/esm2022/lib/Pages/anonymouslayout/activation/activation.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.module.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/change-password/change-password.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/login/login.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/rest-password/rest-password.component.mjs +1 -1
- package/esm2022/lib/Pages/anonymouslayout/upload-license/upload-license.component.mjs +1 -1
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +4 -4
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +3 -3
- package/esm2022/lib/Pages/configurations/configuration/configuration.component.mjs +167 -99
- package/esm2022/lib/Pages/core/authentication/admin.guard.mjs +7 -4
- package/esm2022/lib/Pages/core/authentication/auth.guard.mjs +1 -1
- package/esm2022/lib/Pages/departments/department/department.component.mjs +108 -30
- package/esm2022/lib/Pages/departments/department-info/department-info.component.mjs +1 -1
- package/esm2022/lib/Pages/documents/add-document/add-document.component.mjs +1 -1
- package/esm2022/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +1 -1
- package/esm2022/lib/Pages/documents/document-template-info/document-template-info.component.mjs +1 -1
- package/esm2022/lib/Pages/documents/edit-document/edit-document.component.mjs +1 -1
- package/esm2022/lib/Pages/documents/edit-document-template/edit-document-template.component.mjs +1 -1
- package/esm2022/lib/Pages/helpCenter/help-center/help-center.component.mjs +96 -15
- package/esm2022/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +1 -1
- package/esm2022/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +1 -1
- package/esm2022/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +1 -1
- package/esm2022/lib/Pages/home/home.component.mjs +17 -6
- package/esm2022/lib/Pages/home/home.module.mjs +1 -1
- package/esm2022/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +1 -1
- package/esm2022/lib/Pages/jobs/jobs/jobs.component.mjs +1 -1
- package/esm2022/lib/Pages/license/license/license.component.mjs +1 -1
- package/esm2022/lib/Pages/license/license.module.mjs +1 -1
- package/esm2022/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.mjs +1 -1
- package/esm2022/lib/Pages/localizations/localizations.component.mjs +1 -1
- package/esm2022/lib/Pages/localizations/localizations.module.mjs +1 -1
- package/esm2022/lib/Pages/logs/log/log.component.mjs +1 -1
- package/esm2022/lib/Pages/lookups/lookup/lookup.component.mjs +1 -1
- package/esm2022/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +1 -1
- package/esm2022/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +1 -1
- package/esm2022/lib/Pages/notifications/add-notification/add-notification.component.mjs +85 -58
- package/esm2022/lib/Pages/notifications/edit-email/edit-email.component.mjs +1 -1
- package/esm2022/lib/Pages/notifications/edit-notification/edit-notification.component.mjs +55 -26
- package/esm2022/lib/Pages/notifications/edit-sms/edit-sms.component.mjs +1 -1
- package/esm2022/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +68 -16
- package/esm2022/lib/Pages/notifications/notifications.module.mjs +2 -2
- package/esm2022/lib/Pages/notifications/notifications.routing.mjs +66 -0
- package/esm2022/lib/Pages/notifications/template-info/template-info.component.mjs +1 -1
- package/esm2022/lib/Pages/notifications/templates/templates.component.mjs +105 -58
- package/esm2022/lib/Pages/organization/add-organization/add-organization.component.mjs +107 -0
- package/esm2022/lib/Pages/organization/add-organization/index.mjs +2 -0
- package/esm2022/lib/Pages/organization/edit-organization/edit-organization.component.mjs +115 -0
- package/esm2022/lib/Pages/organization/edit-organization/index.mjs +2 -0
- package/esm2022/lib/Pages/organization/index.mjs +7 -0
- package/esm2022/lib/Pages/organization/list-organization/index.mjs +2 -0
- package/esm2022/lib/Pages/organization/list-organization/list-organization.component.mjs +181 -0
- package/esm2022/lib/Pages/organization/organization.component.mjs +15 -0
- package/esm2022/lib/Pages/organization/organization.module.mjs +89 -0
- package/esm2022/lib/Pages/organization/organization.routing.mjs +36 -0
- package/esm2022/lib/Pages/providers/provider/provider.component.mjs +98 -43
- package/esm2022/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +1 -1
- package/esm2022/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +3 -3
- package/esm2022/lib/Pages/roles/permissions/permissions.component.mjs +73 -33
- package/esm2022/lib/Pages/roles/permissionsets/permissionsets.component.mjs +166 -105
- package/esm2022/lib/Pages/roles/roles-routing.module.mjs +24 -7
- package/esm2022/lib/Pages/sectors/sector/sector.component.mjs +83 -16
- package/esm2022/lib/Pages/sectors/sector-info/sector-info.component.mjs +2 -1
- package/esm2022/lib/Pages/sectors/sectors-department-info/sectors-department-info.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/ActiveDirectoryService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/AnonymousLayoutService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/ConfigurationsService.service.mjs +4 -1
- package/esm2022/lib/Pages/shared/Services/DepartmentService.service.mjs +7 -3
- package/esm2022/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/DocumentTemplateService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.mjs +6 -1
- package/esm2022/lib/Pages/shared/Services/HelpCenterService.service.mjs +7 -3
- package/esm2022/lib/Pages/shared/Services/ImpersonationRuleService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/JobsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LicenseService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LogsService.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LookupGroupsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/LookupService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/PermissionSetService.service.mjs +7 -3
- package/esm2022/lib/Pages/shared/Services/PermissionsService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/PublicHolidayService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/SectorService.service.mjs +4 -1
- package/esm2022/lib/Pages/shared/Services/TemplateService.service.mjs +4 -3
- package/esm2022/lib/Pages/shared/Services/WorkFlowVersionService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowActivityService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowInstanceService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowLogVariablesService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/WorkflowVariablesService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/injectionModuleService.service.mjs +52 -22
- package/esm2022/lib/Pages/shared/Services/localizationsService.service .mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/organization.service.mjs +36 -0
- package/esm2022/lib/Pages/shared/Services/provider.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/survey-question.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/survey.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/Services/userService.service.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/external-url/external-url.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/preview/preview.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/result-question/result.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/components/survey-form-item/survey-form-item.component.mjs +1 -1
- package/esm2022/lib/Pages/shared/config.service.mjs +17 -0
- package/esm2022/lib/Pages/shared/constants.mjs +2 -1
- package/esm2022/lib/Pages/shared/index.mjs +14 -0
- package/esm2022/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.mjs +36 -3
- package/esm2022/lib/Pages/shared/models/DepartmentModels/DepartmentModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/DocumentsModels/DocumentHeaderAndFooterTemplate.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/DocumentsModels/DocumentTemplateDTO.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/DocumentsModels/DocumentTemplateInfoDTO.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/HelpCenterModels/HelpCenterItemModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/ImpersonationRuleModels/ParticipantModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/InjectedModuleModel/InjectedModule.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/LicenseModel/LicenseModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/LocalizationModels/EditResourceModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/LocalizationModels/UploadJsonVM.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/Lookups/LookupGroupModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/Lookups/LookupItem.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/Lookups/LookupModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/NotificationsModels/EmailHeaderAndFooterTemplate.mjs +9 -6
- package/esm2022/lib/Pages/shared/models/NotificationsModels/EmailTemplateInfoDTO.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/NotificationsModels/EmailTemplateTesterModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/NotificationsModels/SMSTemplateInfoDTO.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/NotificationsModels/SMSTemplateTesterModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/NotificationsModels/SendEmailTemplateModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/NotificationsModels/TemplateDTO.mjs +1 -2
- package/esm2022/lib/Pages/shared/models/NotificationsModels/TemplateEditViewModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/PermissionsModels/PermissionModel.mjs +17 -3
- package/esm2022/lib/Pages/shared/models/PermissionsModels/PermissionSetModel.mjs +17 -3
- package/esm2022/lib/Pages/shared/models/PublicHolidayModels/PublicHolidayModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/SectorModels/SectorModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/SurveyModels/add-survey-submissio.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/SurveyModels/survey-field-options.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/SurveyModels/survey-question-option.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/SurveyModels/survey-question.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/UserModels/AddUserModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/UserModels/DropdownsResponseModel.mjs +3 -1
- package/esm2022/lib/Pages/shared/models/UserModels/EditUserModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/UserModels/ExportedFileDTO.mjs +3 -0
- package/esm2022/lib/Pages/shared/models/UserModels/FilteredUsersRequestModel.mjs +9 -0
- package/esm2022/lib/Pages/shared/models/UserModels/UserListingViewModel.mjs +8 -0
- package/esm2022/lib/Pages/shared/models/UserModels/UserModelDTO.mjs +41 -0
- package/esm2022/lib/Pages/shared/models/UserModels/UserSearchParamDTO.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/UserModels/UsersCountsDTO.mjs +3 -0
- package/esm2022/lib/Pages/shared/models/UserModels/index.mjs +13 -0
- package/esm2022/lib/Pages/shared/models/WorkflowModels/VariableLookupModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/WorkflowModels/WFActivityModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/WorkflowModels/WFCreationModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/WorkflowModels/WFVariableModel.mjs +1 -1
- package/esm2022/lib/Pages/shared/models/index.mjs +24 -0
- package/esm2022/lib/Pages/shared/models/organization/organization.model.mjs +15 -0
- package/esm2022/lib/Pages/shared/modules/public-survey.module.mjs +1 -1
- package/esm2022/lib/Pages/shared/modules/survey.module.mjs +1 -1
- package/esm2022/lib/Pages/users/users.component.mjs +143 -60
- package/esm2022/lib/Pages/users/users.module.mjs +1 -1
- package/esm2022/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.mjs +1 -1
- package/esm2022/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.mjs +1 -1
- package/esm2022/lib/Pages/workflows/instance-info/instance-info.component.mjs +1 -1
- package/esm2022/lib/Pages/workflows/tabs/tabs.component.mjs +1 -1
- package/esm2022/lib/Pages/workflows/version-info/version-info.component.mjs +1 -1
- package/esm2022/lib/Pages/workflows/workflow/workflow.component.mjs +1 -1
- package/esm2022/lib/masterlayout.component.mjs +8 -14
- package/esm2022/lib/masterlayout.module.mjs +2 -25
- package/esm2022/lib/masterlayout.routing.mjs +43 -0
- package/fesm2022/bnsights-bbsf-admin-portal.mjs +2516 -1136
- package/fesm2022/bnsights-bbsf-admin-portal.mjs.map +1 -1
- package/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.d.ts +5 -2
- package/lib/Pages/_layout/components/topbar/topbar.component.d.ts +2 -8
- package/lib/Pages/configurations/configuration/configuration.component.d.ts +21 -8
- package/lib/Pages/core/authentication/admin.guard.d.ts +3 -2
- package/lib/Pages/departments/department/department.component.d.ts +15 -3
- package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +16 -3
- package/lib/Pages/home/home.component.d.ts +5 -2
- package/lib/Pages/notifications/add-notification/add-notification.component.d.ts +16 -5
- package/lib/Pages/notifications/edit-notification/edit-notification.component.d.ts +15 -4
- package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +17 -5
- package/lib/Pages/notifications/notifications.module.d.ts +1 -1
- package/lib/Pages/notifications/templates/templates.component.d.ts +13 -3
- package/lib/Pages/organization/add-organization/add-organization.component.d.ts +36 -0
- package/lib/Pages/organization/add-organization/index.d.ts +1 -0
- package/lib/Pages/organization/edit-organization/edit-organization.component.d.ts +36 -0
- package/lib/Pages/organization/edit-organization/index.d.ts +1 -0
- package/lib/Pages/organization/index.d.ts +6 -0
- package/lib/Pages/organization/list-organization/index.d.ts +1 -0
- package/lib/Pages/organization/list-organization/list-organization.component.d.ts +59 -0
- package/lib/Pages/organization/organization.component.d.ts +8 -0
- package/lib/Pages/organization/organization.module.d.ts +24 -0
- package/lib/Pages/organization/organization.routing.d.ts +7 -0
- package/lib/Pages/providers/provider/provider.component.d.ts +17 -8
- package/lib/Pages/roles/permissions/permissions.component.d.ts +14 -5
- package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +21 -8
- package/lib/Pages/sectors/sector/sector.component.d.ts +12 -1
- package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +2 -1
- package/lib/Pages/shared/Services/DepartmentService.service.d.ts +2 -1
- package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +2 -0
- package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +2 -1
- package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +2 -1
- package/lib/Pages/shared/Services/SectorService.service.d.ts +1 -0
- package/lib/Pages/shared/Services/TemplateService.service.d.ts +1 -1
- package/lib/Pages/shared/Services/injectionModuleService.service.d.ts +2 -0
- package/lib/Pages/shared/Services/organization.service.d.ts +17 -0
- package/lib/Pages/shared/Services/userService.service.d.ts +4 -1
- package/lib/Pages/shared/config.service.d.ts +8 -0
- package/lib/Pages/shared/constants.d.ts +1 -0
- package/lib/Pages/shared/index.d.ts +5 -0
- package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +32 -28
- package/lib/Pages/shared/models/DepartmentModels/DepartmentModel.d.ts +1 -0
- package/lib/Pages/shared/models/HelpCenterModels/HelpCenterItemModel.d.ts +1 -0
- package/lib/Pages/shared/models/NotificationsModels/EmailHeaderAndFooterTemplate.d.ts +8 -6
- package/lib/Pages/shared/models/NotificationsModels/TemplateDTO.d.ts +0 -1
- package/lib/Pages/shared/models/PermissionsModels/PermissionModel.d.ts +17 -5
- package/lib/Pages/shared/models/PermissionsModels/PermissionSetModel.d.ts +20 -8
- package/lib/Pages/shared/models/SectorModels/SectorModel.d.ts +1 -0
- package/lib/Pages/shared/models/UserModels/DropdownsResponseModel.d.ts +2 -0
- package/lib/Pages/shared/models/UserModels/EditUserModel.d.ts +1 -0
- package/lib/Pages/shared/models/UserModels/ExportedFileDTO.d.ts +4 -0
- package/lib/Pages/shared/models/UserModels/FilteredUsersRequestModel.d.ts +7 -0
- package/lib/Pages/shared/models/UserModels/UserListingViewModel.d.ts +10 -0
- package/lib/Pages/shared/models/UserModels/UserModelDTO.d.ts +38 -0
- package/lib/Pages/shared/models/UserModels/UserSearchParamDTO.d.ts +1 -0
- package/lib/Pages/shared/models/UserModels/UsersCountsDTO.d.ts +5 -0
- package/lib/Pages/shared/models/UserModels/index.d.ts +12 -0
- package/lib/Pages/shared/models/index.d.ts +2 -0
- package/lib/Pages/shared/models/organization/organization.model.d.ts +22 -0
- package/lib/Pages/users/users.component.d.ts +17 -7
- package/lib/masterlayout.component.d.ts +1 -2
- package/lib/masterlayout.module.d.ts +1 -1
- package/package.json +7 -7
- package/src/lib/assets/images/menu/organization.svg +16 -0
- package/src/lib/assets/sass/custom-styles.scss +2 -2
- package/src/lib/assets/sass/style.scss +1 -0
- package/bnsights-bbsf-admin-portal-1.1.49.tgz +0 -0
- package/esm2022/lib/Pages/notifications/notifications-routing.module.mjs +0 -39
- package/esm2022/lib/masterlayout-routing.module.mjs +0 -41
- /package/lib/Pages/notifications/{notifications-routing.module.d.ts → notifications.routing.d.ts} +0 -0
- /package/lib/{masterlayout-routing.module.d.ts → masterlayout.routing.d.ts} +0 -0
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Component, ViewChild } from '@angular/core';
|
|
2
2
|
import { FormGroup } from '@angular/forms';
|
|
3
|
-
import { ConfirmationModalOptions, DropdownOptions, EnglishArabicDTO, FilterItem, FilterType, FormOptions, InputType, MultiLingualTextBoxOptions, PagingOptions, TextBoxOptions } from '@bnsights/bbsf-controls';
|
|
3
|
+
import { ConfirmationModalOptions, DropdownOptions, EnglishArabicDTO, FilterItem, FilterType, FormOptions, InputType, MultiLingualTextBoxOptions, PagingOptions, PermissionSets, TextBoxOptions } from '@bnsights/bbsf-controls';
|
|
4
4
|
import { PageInfoService } from '../../../_metronic/core/services/page-info.service';
|
|
5
5
|
import { PermissionSetModel } from '../../shared/models/PermissionsModels/PermissionSetModel';
|
|
6
|
+
import { Constants } from '../../shared';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
import * as i1 from "../../../_metronic/core/services/page-info.service";
|
|
8
9
|
import * as i2 from "@bnsights/bbsf-utilities";
|
|
@@ -10,21 +11,26 @@ import * as i3 from "../../shared/Services/PermissionSetService.service";
|
|
|
10
11
|
import * as i4 from "@ng-bootstrap/ng-bootstrap";
|
|
11
12
|
import * as i5 from "@angular/router";
|
|
12
13
|
import * as i6 from "@angular/common";
|
|
13
|
-
import * as i7 from "
|
|
14
|
-
import * as i8 from "
|
|
15
|
-
import * as i9 from "@
|
|
16
|
-
import * as i10 from "
|
|
17
|
-
import * as i11 from "
|
|
14
|
+
import * as i7 from "@angular/forms";
|
|
15
|
+
import * as i8 from "ng-block-ui";
|
|
16
|
+
import * as i9 from "@bnsights/bbsf-controls";
|
|
17
|
+
import * as i10 from "@angular/material/menu";
|
|
18
|
+
import * as i11 from "ng-inline-svg-2";
|
|
19
|
+
import * as i12 from "../../empty-data/empty-data.component";
|
|
18
20
|
export class PermissionsetsComponent {
|
|
19
|
-
constructor(pageInfoService, utilityService, environmentService, permissionSetService, modalService, requestHandlerService) {
|
|
21
|
+
constructor(pageInfoService, utilityService, environmentService, permissionSetService, modalService, requestHandlerService, authService) {
|
|
20
22
|
this.pageInfoService = pageInfoService;
|
|
21
23
|
this.utilityService = utilityService;
|
|
22
24
|
this.environmentService = environmentService;
|
|
23
25
|
this.permissionSetService = permissionSetService;
|
|
24
26
|
this.modalService = modalService;
|
|
25
27
|
this.requestHandlerService = requestHandlerService;
|
|
28
|
+
this.authService = authService;
|
|
26
29
|
//Page requirements
|
|
27
30
|
this.ApiUrl = this.permissionSetService.ApiUrl;
|
|
31
|
+
this.permissionSets = PermissionSets;
|
|
32
|
+
this.isMultiTenancyAllowed = false;
|
|
33
|
+
this.isSuperAdmin = false;
|
|
28
34
|
this.permissionList = [];
|
|
29
35
|
this.organizationList = [];
|
|
30
36
|
this.filterForm = new FormGroup({});
|
|
@@ -32,20 +38,23 @@ export class PermissionsetsComponent {
|
|
|
32
38
|
this.showFilter = false;
|
|
33
39
|
this.permissionSetPagingResult = [];
|
|
34
40
|
this.filteredPermissionSetPagingResult = [];
|
|
41
|
+
this.permissionSetPaging = new PagingOptions();
|
|
35
42
|
this.isFilterLoaded = false;
|
|
36
|
-
|
|
43
|
+
this.isFilterDataLoaded = false;
|
|
44
|
+
this.showPageContent = false;
|
|
45
|
+
//#region Add Model Controls
|
|
37
46
|
this.addPermissionSetForm = new FormGroup({});
|
|
38
|
-
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region Edit Model Controls
|
|
39
49
|
this.editPermissionSetForm = new FormGroup({});
|
|
40
50
|
this.deleteControlLoaded = false;
|
|
41
51
|
this.getAddPermissionSetModel = () => {
|
|
42
|
-
let paramArray = [];
|
|
43
52
|
let ResultModel = this.addPermissionSetForm.value;
|
|
44
53
|
let AddPermissionSetModel = new PermissionSetModel();
|
|
45
54
|
if (this.ProductionMode == false)
|
|
46
|
-
AddPermissionSetModel.
|
|
47
|
-
AddPermissionSetModel.
|
|
48
|
-
AddPermissionSetModel.
|
|
55
|
+
AddPermissionSetModel.sysName = ResultModel.SysName;
|
|
56
|
+
AddPermissionSetModel.name = ResultModel.Name;
|
|
57
|
+
AddPermissionSetModel.organizationID_GUID = ResultModel[this.organization.name];
|
|
49
58
|
let Ids = [];
|
|
50
59
|
if (ResultModel.PermissionIDs != null) {
|
|
51
60
|
for (let index = 0; index < ResultModel.PermissionIDs.length; index++) {
|
|
@@ -53,24 +62,23 @@ export class PermissionsetsComponent {
|
|
|
53
62
|
Ids.push(element);
|
|
54
63
|
}
|
|
55
64
|
}
|
|
56
|
-
AddPermissionSetModel.
|
|
57
|
-
AddPermissionSetModel.
|
|
58
|
-
|
|
59
|
-
return paramArray;
|
|
65
|
+
AddPermissionSetModel.permissionIDs = Ids;
|
|
66
|
+
AddPermissionSetModel.activeDirectoryGroup = ResultModel.ActiveDirectoryGroup;
|
|
67
|
+
return Array(AddPermissionSetModel);
|
|
60
68
|
};
|
|
61
|
-
this.getAddPermissionSetFunction = (
|
|
62
|
-
return this.permissionSetService.addPermissionSet(
|
|
69
|
+
this.getAddPermissionSetFunction = (addModel) => {
|
|
70
|
+
return this.permissionSetService.addPermissionSet(addModel);
|
|
63
71
|
};
|
|
64
72
|
this.getEditPermissionSetModel = () => {
|
|
65
73
|
let paramArray = [];
|
|
66
74
|
let ResultModel = this.editPermissionSetForm.value;
|
|
67
75
|
let EditPermissionSetModel = new PermissionSetModel();
|
|
68
|
-
EditPermissionSetModel.
|
|
69
|
-
EditPermissionSetModel.
|
|
76
|
+
EditPermissionSetModel.iD_GUID = this.editPermissionSetId;
|
|
77
|
+
EditPermissionSetModel.name = ResultModel.Name;
|
|
70
78
|
if (this.ProductionMode == false)
|
|
71
|
-
EditPermissionSetModel.
|
|
72
|
-
EditPermissionSetModel.
|
|
73
|
-
EditPermissionSetModel.
|
|
79
|
+
EditPermissionSetModel.sysName = ResultModel.SysName;
|
|
80
|
+
EditPermissionSetModel.activeDirectoryGroup = ResultModel.ActiveDirectoryGroup;
|
|
81
|
+
EditPermissionSetModel.organizationID_GUID = ResultModel[this.editOrganization.name];
|
|
74
82
|
let Ids = [];
|
|
75
83
|
if (ResultModel.PermissionIDs != null) {
|
|
76
84
|
for (let index = 0; index < ResultModel.PermissionIDs.length; index++) {
|
|
@@ -78,7 +86,7 @@ export class PermissionsetsComponent {
|
|
|
78
86
|
Ids.push(element);
|
|
79
87
|
}
|
|
80
88
|
}
|
|
81
|
-
EditPermissionSetModel.
|
|
89
|
+
EditPermissionSetModel.permissionIDs = Ids;
|
|
82
90
|
paramArray.push(EditPermissionSetModel);
|
|
83
91
|
return paramArray;
|
|
84
92
|
};
|
|
@@ -91,6 +99,7 @@ export class PermissionsetsComponent {
|
|
|
91
99
|
}
|
|
92
100
|
ngOnInit() {
|
|
93
101
|
//Page header (breadcrumb and title)
|
|
102
|
+
this.showPageContent = true;
|
|
94
103
|
PageInfoService.PageTitle = this.utilityService.getResourceValue("PermissionSets");
|
|
95
104
|
PageInfoService.PageBreadcrumbs = [
|
|
96
105
|
{ title: this.utilityService.getResourceValue("Home"), path: '/Admin/Home', isSeparator: false, isActive: false },
|
|
@@ -99,85 +108,118 @@ export class PermissionsetsComponent {
|
|
|
99
108
|
this.pageInfoService.calculateTitle();
|
|
100
109
|
this.pageInfoService.calculateBreadcrumbs();
|
|
101
110
|
this.ProductionMode = this.environmentService.getProductionMode();
|
|
102
|
-
|
|
111
|
+
this.isMultiTenancyAllowed = this.environmentService.getAllowMultiTenancy();
|
|
112
|
+
this.currentUserProfile = this.authService.getCurrentUser().profile;
|
|
113
|
+
this.isSuperAdmin = this.currentUserProfile.permissionSetSID == this.permissionSets.Admin;
|
|
103
114
|
this.initializePage();
|
|
104
115
|
}
|
|
105
|
-
|
|
116
|
+
//#region initialize page
|
|
106
117
|
initializePage() {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
this.permissionSetPaging.
|
|
125
|
-
this.permissionSetPaging.
|
|
126
|
-
this.
|
|
127
|
-
|
|
118
|
+
// TextBox inti
|
|
119
|
+
this.searchTextBox = new TextBoxOptions();
|
|
120
|
+
this.searchTextBox.name = "searchTextBox";
|
|
121
|
+
this.searchTextBox.hideLabel = true;
|
|
122
|
+
this.searchTextBox.type = InputType.Text;
|
|
123
|
+
this.searchTextBox.placeholder = this.utilityService.getResourceValue("SearchByName");
|
|
124
|
+
this.organizationOptions = new DropdownOptions();
|
|
125
|
+
this.organizationOptions.name = "organization";
|
|
126
|
+
this.organizationOptions.labelKey = "Organizations";
|
|
127
|
+
this.organizationOptions.singleSelection = true;
|
|
128
|
+
this.organizationOptions.allowSearchFilter = true;
|
|
129
|
+
this.textInputFilter = new FilterItem();
|
|
130
|
+
this.textInputFilter.formControlName = this.searchTextBox.name;
|
|
131
|
+
this.textInputFilter.actionParameterName = "searchText";
|
|
132
|
+
this.textInputFilter.isFormControl = true;
|
|
133
|
+
this.textInputFilter.filterType = FilterType.TextBox;
|
|
134
|
+
if (this.isMultiTenancyAllowed && this.isSuperAdmin) {
|
|
135
|
+
this.permissionSetPaging.filters = this.permissionSetPaging.filters ?? [];
|
|
136
|
+
this.permissionSetPaging.dropdownFiltersControlNames = this.permissionSetPaging.dropdownFiltersControlNames ?? [];
|
|
137
|
+
this.organizationsFilter = new FilterItem();
|
|
138
|
+
this.organizationsFilter.formControlName = this.organizationOptions.name;
|
|
139
|
+
this.organizationsFilter.actionParameterName = "organizationId";
|
|
140
|
+
this.organizationsFilter.isFormControl = true;
|
|
141
|
+
this.organizationsFilter.filterType = FilterType.DropdownList;
|
|
142
|
+
this.permissionSetPaging.filters.push(this.organizationsFilter);
|
|
143
|
+
this.permissionSetPaging.dropdownFiltersControlNames.push(this.organizationsFilter.formControlName);
|
|
144
|
+
}
|
|
145
|
+
this.permissionSetPaging.actionPostURL = this.ApiUrl + 'GetPermissionSetsByFilter';
|
|
146
|
+
this.permissionSetPaging.onKeyPressFiltersControlNames = [this.searchTextBox.name];
|
|
147
|
+
this.permissionSetPaging.filters.push(this.textInputFilter);
|
|
148
|
+
this.permissionSetPaging.resetFilterButtonName = 'permissionSetResetButton';
|
|
149
|
+
this.isFilterLoaded = true;
|
|
150
|
+
}
|
|
151
|
+
loadLists() {
|
|
152
|
+
if (!this.isFilterDataLoaded) {
|
|
153
|
+
this.permissionSetService.loadDropdownForFilters().subscribe((organizationList) => {
|
|
154
|
+
let filterOrganizationList = [{
|
|
155
|
+
key: Constants.NotAssignedToOrganization,
|
|
156
|
+
value: this.utilityService.getResourceValue("NotAssigned"),
|
|
157
|
+
}].concat(organizationList);
|
|
158
|
+
let organizationsElement = this.organizationDDL;
|
|
159
|
+
organizationsElement.updateDataSource(filterOrganizationList);
|
|
160
|
+
this.isFilterDataLoaded = true;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
128
163
|
}
|
|
129
|
-
|
|
164
|
+
//#endregion
|
|
165
|
+
//#region Paging functions
|
|
130
166
|
setPermissionSetListResult(result) {
|
|
131
167
|
this.permissionSetPagingResult = result;
|
|
168
|
+
this.showPageContent = true;
|
|
132
169
|
this.filteredPermissionSetPagingResult = this.permissionSetPagingResult;
|
|
133
170
|
}
|
|
134
|
-
|
|
171
|
+
//#endregion
|
|
172
|
+
//#region Start add PermissionSet Part
|
|
135
173
|
showAddPermissionSetModal(AddPermissionSetModal) {
|
|
136
|
-
this.
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
174
|
+
this.permissionSetService.loadAddEditDropdown().subscribe((result) => {
|
|
175
|
+
this.organizationList = result.organizations;
|
|
176
|
+
this.permissionList = result.permissions;
|
|
177
|
+
this.utilityService.startBlockUI();
|
|
178
|
+
this.addPermissionSetForm = new FormGroup({});
|
|
179
|
+
this.addPermissionSetFormOptions = new FormOptions();
|
|
180
|
+
this.addPermissionSetFormOptions.formGroup = this.addPermissionSetForm;
|
|
181
|
+
this.addPermissionSetFormOptions.getModelFunction = this.getAddPermissionSetModel;
|
|
182
|
+
this.addPermissionSetFormOptions.serviceSubmitFunction = this.getAddPermissionSetFunction;
|
|
183
|
+
this.addPermissionSetFormOptions.pagingReference = this.pagingElement;
|
|
184
|
+
this.multiLingualName = new MultiLingualTextBoxOptions();
|
|
185
|
+
this.multiLingualName.name = "Name";
|
|
186
|
+
this.multiLingualName.arabicLabelKey = "NameInArabic";
|
|
187
|
+
this.multiLingualName.englishLabelKey = "NameInEnglish";
|
|
188
|
+
this.multiLingualName.isRequired = true;
|
|
189
|
+
this.multiLingualName.maxLength = 100;
|
|
190
|
+
this.activeDirectoryGroup = new TextBoxOptions();
|
|
191
|
+
this.activeDirectoryGroup.name = "ActiveDirectoryGroup";
|
|
192
|
+
this.activeDirectoryGroup.labelKey = "ActiveDirectoryGroup";
|
|
193
|
+
this.activeDirectoryGroup.type = InputType.Text;
|
|
194
|
+
this.activeDirectoryGroup.value = null;
|
|
195
|
+
this.activeDirectoryGroup.maxLength = 64;
|
|
196
|
+
this.sysName = new TextBoxOptions();
|
|
197
|
+
this.sysName.name = "SysName";
|
|
198
|
+
this.sysName.labelKey = "SysName";
|
|
199
|
+
this.sysName.type = InputType.Text;
|
|
200
|
+
this.sysName.value = null;
|
|
201
|
+
this.sysName.maxLength = 100;
|
|
202
|
+
this.permissions = new DropdownOptions();
|
|
203
|
+
this.permissions.name = "PermissionIDs";
|
|
204
|
+
this.permissions.labelKey = "Permissions";
|
|
205
|
+
this.permissions.selectedItems = null;
|
|
206
|
+
this.permissions.singleSelection = false;
|
|
207
|
+
this.permissions.allowSearchFilter = true;
|
|
208
|
+
this.permissions.dataSource = this.permissionList;
|
|
209
|
+
this.organization = new DropdownOptions();
|
|
210
|
+
this.organization.name = "OrganizationID_GUID";
|
|
211
|
+
this.organization.labelKey = "Organization";
|
|
212
|
+
this.organization.selectedItems = null;
|
|
213
|
+
this.organization.dataSource = this.organizationList;
|
|
214
|
+
this.organization.singleSelection = true;
|
|
215
|
+
this.organization.allowSearchFilter = true;
|
|
216
|
+
this.organization.isRequired = false;
|
|
217
|
+
this.modalService.open(AddPermissionSetModal);
|
|
218
|
+
this.utilityService.stopBlockUI();
|
|
219
|
+
});
|
|
178
220
|
}
|
|
179
|
-
|
|
180
|
-
|
|
221
|
+
//#endregion
|
|
222
|
+
//#region Start of PermissionSet edit part
|
|
181
223
|
showEditPermissionSetModal(permissionSetID, editPermissionSetModal) {
|
|
182
224
|
this.editPermissionSetForm = new FormGroup({});
|
|
183
225
|
this.editPermissionSetFormOptions = new FormOptions();
|
|
@@ -187,6 +229,9 @@ export class PermissionsetsComponent {
|
|
|
187
229
|
this.editPermissionSetFormOptions.pagingReference = this.pagingElement;
|
|
188
230
|
this.permissionSetService.getPermissionSet(permissionSetID).subscribe((result) => {
|
|
189
231
|
let PermissionSet = result.model;
|
|
232
|
+
let lists = result.lists;
|
|
233
|
+
this.organizationList = lists.organizations;
|
|
234
|
+
this.permissionList = lists.permissions;
|
|
190
235
|
let name = new EnglishArabicDTO();
|
|
191
236
|
name.arabic = PermissionSet.name.arabic;
|
|
192
237
|
name.english = PermissionSet.name.english;
|
|
@@ -219,9 +264,9 @@ export class PermissionsetsComponent {
|
|
|
219
264
|
this.editPermissions.name = "PermissionIDs";
|
|
220
265
|
this.editPermissions.labelKey = "Permissions";
|
|
221
266
|
this.editPermissions.selectedItems = selectedPermissionList;
|
|
222
|
-
this.editPermissions.dataSource = this.permissionList;
|
|
223
267
|
this.editPermissions.singleSelection = false;
|
|
224
268
|
this.editPermissions.allowSearchFilter = true;
|
|
269
|
+
this.editPermissions.dataSource = this.permissionList;
|
|
225
270
|
this.editOrganization = new DropdownOptions();
|
|
226
271
|
this.editOrganization.name = "OrganizationID_GUID";
|
|
227
272
|
this.editOrganization.labelKey = "Organization";
|
|
@@ -229,12 +274,12 @@ export class PermissionsetsComponent {
|
|
|
229
274
|
this.editOrganization.dataSource = this.organizationList;
|
|
230
275
|
this.editOrganization.singleSelection = true;
|
|
231
276
|
this.editOrganization.allowSearchFilter = true;
|
|
232
|
-
this.editOrganization.isRequired =
|
|
277
|
+
this.editOrganization.isRequired = false;
|
|
233
278
|
this.modalService.open(editPermissionSetModal);
|
|
234
279
|
});
|
|
235
280
|
}
|
|
236
|
-
|
|
237
|
-
|
|
281
|
+
//#endregion
|
|
282
|
+
//#region Start of delete PermissionSet part
|
|
238
283
|
showDeletePermissionSetModal(PermissionSetId) {
|
|
239
284
|
this.deleteControlLoaded = false;
|
|
240
285
|
this.deletedPermissionSetId = PermissionSetId;
|
|
@@ -250,28 +295,44 @@ export class PermissionsetsComponent {
|
|
|
250
295
|
this.ConfirmationModalControl.showModal();
|
|
251
296
|
}, 200);
|
|
252
297
|
}
|
|
253
|
-
|
|
298
|
+
//#endregion
|
|
299
|
+
//#region helpers
|
|
254
300
|
filterPermissionSetList(searchValue) {
|
|
255
301
|
if (searchValue)
|
|
256
302
|
this.filteredPermissionSetPagingResult = this.permissionSetPagingResult.filter(item => item.permissionSetName.toLowerCase().includes(searchValue.toLowerCase()));
|
|
257
303
|
else
|
|
258
304
|
this.filteredPermissionSetPagingResult = this.permissionSetPagingResult;
|
|
259
305
|
}
|
|
260
|
-
|
|
306
|
+
onChangeOrganization(id, permissionsDDL, isAdd = false) {
|
|
307
|
+
this.permissionSetService.loadAddEditDropdown(id).subscribe((result) => {
|
|
308
|
+
if (isAdd) {
|
|
309
|
+
this.permissions.selectedItems = null;
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
this.editPermissions.selectedItems = null;
|
|
313
|
+
}
|
|
314
|
+
permissionsDDL.updateDataSource(result.permissions);
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
//#endregion
|
|
318
|
+
//#region Destroy Observable
|
|
261
319
|
ngOnDestroy() {
|
|
262
320
|
this.requestHandlerService.destroyHandler();
|
|
263
321
|
}
|
|
264
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PermissionsetsComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token: i2.EnvironmentService }, { token: i3.PermissionSetService }, { token: i4.NgbModal }, { token: i2.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
265
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: PermissionsetsComponent, selector: "lib-permissionsets", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["PermissionSetPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }], ngImport: i0, template: "<block-ui>\r\n <!-- Subheader -->\r\n <!-- Page Content -->\r\n <div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"isFilterLoaded\">\r\n <!-- (OnChange)=\"filterPermissionSetList($event)\" -->\r\n\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"permissionSetForm\"></BBSF-TextBox>\r\n \r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddPermissionSetModal(AddPermissionSetModal)\">\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 <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\" *ngIf=\"!ProductionMode\">{{utilityService.getResourceValue(\"SysName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"UsersCount\")}}</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 PermissionSet of filteredPermissionSetPagingResult\">\r\n\r\n <td>\r\n <a href=\"javascript:void(0)\" [routerLink]=\"['/Admin/Roles/PermissionSetInfo',PermissionSet.iD_GUID]\" routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\">{{PermissionSet.permissionSetName}}</a>\r\n\r\n\r\n </td>\r\n <td *ngIf=\"!ProductionMode\">{{PermissionSet.sysName}}</td>\r\n <td>{{PermissionSet.usersCount}}</td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showEditPermissionSetModal(PermissionSet.iD_GUID,EditPermissionSetModal)\">\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)=\"showDeletePermissionSetModal(PermissionSet.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=\"filteredPermissionSetPagingResult.length == 0\">\r\n <td [attr.colspan]=\"ProductionMode ? '3' : '4'\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\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)=\"setPermissionSetListResult($event)\" *ngIf=\"isFilterLoaded\"\r\n [options]=\"permissionSetPaging\" [group]=\"permissionSetForm\" #PermissionSetPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- Add Modal -->\r\n <ng-template #AddPermissionSetModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"AddPermissionSet\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"addPermissionSetFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"multiLingualName\" [group]=\"addPermissionSetForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"activeDirectoryGroup\" [group]=\"addPermissionSetForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextBox *ngIf=\"!ProductionMode\" [options]=\"sysName\" [group]=\"addPermissionSetForm\">\r\n </BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"permissions\" [group]=\"addPermissionSetForm\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"organization\" [group]=\"addPermissionSetForm\">\r\n </BBSF-DropdownList>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #ClosePermissionSetModal id=\"ClosePermissionSetModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n\r\n\r\n <!-- Edit Modal -->\r\n <ng-template #EditPermissionSetModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"EditPermissionSet\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"editPermissionSetFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"editMultiLingualName\" [group]=\"editPermissionSetForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"editActiveDirectoryGroup\" [group]=\"editPermissionSetForm\">\r\n </BBSF-TextBox>\r\n <div *ngIf=\"!ProductionMode\">\r\n <BBSF-TextBox [options]=\"editSysName\" [group]=\"editPermissionSetForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <BBSF-DropdownList [options]=\"editPermissions\" [group]=\"editPermissionSetForm\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"editOrganization\" [group]=\"editPermissionSetForm\">\r\n </BBSF-DropdownList>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseEditPermissionSetModal id=\"CloseEditPermissionSetModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n\r\n <!--delete Modal-->\r\n <BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"deleteConfirmationOptions\" id=\"ConfirmationModalControl\"\r\n #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n", dependencies: [{ kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "component", type: i8.MultiLingualTextBoxComponent, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i8.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { kind: "component", type: i8.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["onChange", "onClear"] }, { kind: "component", type: i8.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i8.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["onChange"] }, { kind: "component", type: i8.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { kind: "directive", type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "component", type: i9.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i9.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i10.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i11.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
|
|
322
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PermissionsetsComponent, deps: [{ token: i1.PageInfoService }, { token: i2.UtilityService }, { token: i2.EnvironmentService }, { token: i3.PermissionSetService }, { token: i4.NgbModal }, { token: i2.RequestHandlerService }, { token: i2.AuthService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
323
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: PermissionsetsComponent, selector: "lib-permissionsets", viewQueries: [{ propertyName: "pagingElement", first: true, predicate: ["PermissionSetPagingViewElement"], descendants: true }, { propertyName: "ConfirmationModalControl", first: true, predicate: ["ConfirmationModalControl"], descendants: true }, { propertyName: "organizationDDL", first: true, predicate: ["organizationDDL"], descendants: true }], ngImport: i0, template: "<block-ui>\r\n <!-- Subheader -->\r\n <!-- Page Content -->\r\n <div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"isFilterLoaded\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"permissionSetForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div\r\n *ngIf=\"isMultiTenancyAllowed && isSuperAdmin\"\r\n ngbDropdown\r\n class=\"d-inline-block\"\r\n [ngStyle]=\"{ display: showPageContent == true ? 'block' : 'none' }\">\r\n <button\r\n (click)=\"loadLists()\"\r\n ngbDropdownToggle\r\n href=\"javascript:;\"\r\n type=\"button\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n id=\"FiltersDropdown\"\r\n title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{ utilityService.getResourceValue('Filter') }}\r\n </button>\r\n <div\r\n *ngIf=\"isFilterLoaded\"\r\n ngbDropdownMenu\r\n aria-labelledby=\"FiltersDropdown\"\r\n class=\"filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 dropdown-menu dropdown-menu-right\">\r\n <form [formGroup]=\"permissionSetForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\" *ngIf=\"isMultiTenancyAllowed && isSuperAdmin\">\r\n <div>\r\n <BBSF-DropdownList #organizationDDL [options]=\"organizationOptions\" [group]=\"permissionSetForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" name=\"permissionSetResetButton\">\r\n {{ utilityService.getResourceValue('Reset') }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- begin::Menu -->\r\n\r\n <button\r\n *ngIf=\"isSuperAdmin\"\r\n type=\"button\"\r\n class=\"btn btn-sm btn-primary\"\r\n title=\"Add\"\r\n (click)=\"showAddPermissionSetModal(AddPermissionSetModal)\">\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 <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150px\" *ngIf=\"!ProductionMode\">{{ utilityService.getResourceValue('SysName') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('UsersCount') }}</th>\r\n <th class=\"min-w-150\" *ngIf=\"isMultiTenancyAllowed && isSuperAdmin\">{{ utilityService.getResourceValue('Organization') }}</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 <tr *ngFor=\"let PermissionSet of filteredPermissionSetPagingResult\">\r\n <td>\r\n <a\r\n href=\"javascript:void(0)\"\r\n [routerLink]=\"['/Admin/Roles/PermissionSetInfo', PermissionSet.iD_GUID]\"\r\n routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\"\r\n >{{ PermissionSet.permissionSetName }}</a\r\n >\r\n </td>\r\n <td *ngIf=\"!ProductionMode\">{{ PermissionSet.sysName }}</td>\r\n <td>{{ PermissionSet.usersCount }}</td>\r\n <td *ngIf=\"isMultiTenancyAllowed && isSuperAdmin\">{{ PermissionSet.currentOrganizationName ?? '-' }}</td>\r\n <td>\r\n <div *ngIf=\"isSuperAdmin\">\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 class=\"mat-menu-content\" #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem (click)=\"showEditPermissionSetModal(PermissionSet.iD_GUID, EditPermissionSetModal)\">\r\n <span class=\"drop-link px-3\">{{ utilityService.getResourceValue('Edit') }}</span>\r\n </a>\r\n <a ngbDropdownItem class=\"drop-item px-3\" (click)=\"showDeletePermissionSetModal(PermissionSet.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=\"filteredPermissionSetPagingResult.length == 0\">\r\n <td [attr.colspan]=\"ProductionMode ? '3' : '4'\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!--end::Permission list-->\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging\r\n (Items)=\"setPermissionSetListResult($event)\"\r\n *ngIf=\"isFilterLoaded\"\r\n [options]=\"permissionSetPaging\"\r\n [group]=\"permissionSetForm\"\r\n #PermissionSetPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- #region Add Modal -->\r\n <ng-template #AddPermissionSetModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('AddPermissionSet') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"addPermissionSetFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"multiLingualName\" [group]=\"addPermissionSetForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"activeDirectoryGroup\" [group]=\"addPermissionSetForm\"> </BBSF-TextBox>\r\n <BBSF-TextBox *ngIf=\"!ProductionMode\" [options]=\"sysName\" [group]=\"addPermissionSetForm\"> </BBSF-TextBox>\r\n <BBSF-DropdownList\r\n *ngIf=\"isMultiTenancyAllowed && isSuperAdmin\"\r\n [options]=\"organization\"\r\n [group]=\"addPermissionSetForm\"\r\n (onChange)=\"onChangeOrganization($event,addPermissionsDDL, true)\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList #addPermissionsDDL [options]=\"permissions\" [group]=\"addPermissionSetForm\"> </BBSF-DropdownList>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n #ClosePermissionSetModal\r\n id=\"ClosePermissionSetModal\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n 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 <!-- #endregion -->\r\n\r\n <!-- #region Edit Modal -->\r\n <ng-template #EditPermissionSetModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('EditPermissionSet') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"editPermissionSetFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"editMultiLingualName\" [group]=\"editPermissionSetForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"editActiveDirectoryGroup\" [group]=\"editPermissionSetForm\"> </BBSF-TextBox>\r\n <div *ngIf=\"!ProductionMode\">\r\n <BBSF-TextBox [options]=\"editSysName\" [group]=\"editPermissionSetForm\"> </BBSF-TextBox>\r\n </div>\r\n <BBSF-DropdownList\r\n *ngIf=\"isMultiTenancyAllowed && isSuperAdmin\"\r\n [options]=\"editOrganization\"\r\n [group]=\"editPermissionSetForm\"\r\n (onChange)=\"onChangeOrganization($event,editPermissionsDDL)\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList #editPermissionsDDL [options]=\"editPermissions\" [group]=\"editPermissionSetForm\"> </BBSF-DropdownList>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n #CloseEditPermissionSetModal\r\n id=\"CloseEditPermissionSetModal\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n 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 <!-- #endregion -->\r\n\r\n <!--delete Modal-->\r\n <BBSF-ConfirmationModal\r\n *ngIf=\"deleteControlLoaded\"\r\n [options]=\"deleteConfirmationOptions\"\r\n id=\"ConfirmationModalControl\"\r\n #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n</block-ui>\r\n", dependencies: [{ kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i8.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "component", type: i9.MultiLingualTextBoxComponent, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i9.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { kind: "component", type: i9.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["onChange", "onClear"] }, { kind: "component", type: i9.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i9.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["onChange"] }, { kind: "component", type: i9.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { kind: "directive", type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "popperOptions", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { kind: "directive", type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { kind: "directive", type: i4.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { kind: "directive", type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["tabindex", "disabled"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i11.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i12.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
|
|
266
324
|
}
|
|
267
325
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: PermissionsetsComponent, decorators: [{
|
|
268
326
|
type: Component,
|
|
269
|
-
args: [{ selector: 'lib-permissionsets', template: "<block-ui>\r\n <!-- Subheader -->\r\n <!-- Page Content -->\r\n <div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"isFilterLoaded\">\r\n <!-- (OnChange)=\"filterPermissionSetList($event)\" -->\r\n\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"permissionSetForm\"></BBSF-TextBox>\r\n \r\n </div>\r\n <div class=\"card-toolbar\">\r\n <!-- begin::Menu -->\r\n\r\n <button type=\"button\" class=\"btn btn-sm btn-primary\" title=\"Add\" (click)=\"showAddPermissionSetModal(AddPermissionSetModal)\">\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 <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\" *ngIf=\"!ProductionMode\">{{utilityService.getResourceValue(\"SysName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"UsersCount\")}}</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 PermissionSet of filteredPermissionSetPagingResult\">\r\n\r\n <td>\r\n <a href=\"javascript:void(0)\" [routerLink]=\"['/Admin/Roles/PermissionSetInfo',PermissionSet.iD_GUID]\" routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\">{{PermissionSet.permissionSetName}}</a>\r\n\r\n\r\n </td>\r\n <td *ngIf=\"!ProductionMode\">{{PermissionSet.sysName}}</td>\r\n <td>{{PermissionSet.usersCount}}</td>\r\n <td>\r\n <div>\r\n <button mat-button [matMenuTriggerFor]=\"menu\" class=\"btn btn-sm btn-icon btn-light btn-active-light-primary\">\r\n <i class=\"fa fa-ellipsis-h\" aria-hidden=\"true\"></i>\r\n </button>\r\n <mat-menu #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem\r\n (click)=\"showEditPermissionSetModal(PermissionSet.iD_GUID,EditPermissionSetModal)\">\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)=\"showDeletePermissionSetModal(PermissionSet.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=\"filteredPermissionSetPagingResult.length == 0\">\r\n <td [attr.colspan]=\"ProductionMode ? '3' : '4'\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\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)=\"setPermissionSetListResult($event)\" *ngIf=\"isFilterLoaded\"\r\n [options]=\"permissionSetPaging\" [group]=\"permissionSetForm\" #PermissionSetPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <!-- Add Modal -->\r\n <ng-template #AddPermissionSetModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"AddPermissionSet\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"addPermissionSetFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"multiLingualName\" [group]=\"addPermissionSetForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"activeDirectoryGroup\" [group]=\"addPermissionSetForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextBox *ngIf=\"!ProductionMode\" [options]=\"sysName\" [group]=\"addPermissionSetForm\">\r\n </BBSF-TextBox>\r\n <BBSF-DropdownList [options]=\"permissions\" [group]=\"addPermissionSetForm\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"organization\" [group]=\"addPermissionSetForm\">\r\n </BBSF-DropdownList>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #ClosePermissionSetModal id=\"ClosePermissionSetModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n\r\n\r\n <!-- Edit Modal -->\r\n <ng-template #EditPermissionSetModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{utilityService.getResourceValue(\"EditPermissionSet\")}}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"editPermissionSetFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"editMultiLingualName\" [group]=\"editPermissionSetForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"editActiveDirectoryGroup\" [group]=\"editPermissionSetForm\">\r\n </BBSF-TextBox>\r\n <div *ngIf=\"!ProductionMode\">\r\n <BBSF-TextBox [options]=\"editSysName\" [group]=\"editPermissionSetForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <BBSF-DropdownList [options]=\"editPermissions\" [group]=\"editPermissionSetForm\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList [options]=\"editOrganization\" [group]=\"editPermissionSetForm\">\r\n </BBSF-DropdownList>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" #CloseEditPermissionSetModal id=\"CloseEditPermissionSetModal\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-light me-3 btn-sm\" (click)=\"modal.dismiss()\">{{utilityService.getResourceValue(\"CancelLabel\")}} </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n\r\n </div>\r\n </ng-template>\r\n\r\n\r\n <!--delete Modal-->\r\n <BBSF-ConfirmationModal *ngIf=\"deleteControlLoaded\" [options]=\"deleteConfirmationOptions\" id=\"ConfirmationModalControl\"\r\n #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n" }]
|
|
270
|
-
}], ctorParameters: () => [{ type: i1.PageInfoService }, { type: i2.UtilityService }, { type: i2.EnvironmentService }, { type: i3.PermissionSetService }, { type: i4.NgbModal }, { type: i2.RequestHandlerService }], propDecorators: { pagingElement: [{
|
|
327
|
+
args: [{ selector: 'lib-permissionsets', template: "<block-ui>\r\n <!-- Subheader -->\r\n <!-- Page Content -->\r\n <div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-header border-0 pt-5\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"isFilterLoaded\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"permissionSetForm\"></BBSF-TextBox>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <div\r\n *ngIf=\"isMultiTenancyAllowed && isSuperAdmin\"\r\n ngbDropdown\r\n class=\"d-inline-block\"\r\n [ngStyle]=\"{ display: showPageContent == true ? 'block' : 'none' }\">\r\n <button\r\n (click)=\"loadLists()\"\r\n ngbDropdownToggle\r\n href=\"javascript:;\"\r\n type=\"button\"\r\n class=\"btn btn-sm btn-light-primary me-3\"\r\n id=\"FiltersDropdown\"\r\n title=\"Filter\">\r\n <i class=\"fas fa-filter me-1\"></i>\r\n {{ utilityService.getResourceValue('Filter') }}\r\n </button>\r\n <div\r\n *ngIf=\"isFilterLoaded\"\r\n ngbDropdownMenu\r\n aria-labelledby=\"FiltersDropdown\"\r\n class=\"filter-container menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-800 menu-state-bg-light-primary w-250px w-md-500px fw-bold py-3 dropdown-menu dropdown-menu-right\">\r\n <form [formGroup]=\"permissionSetForm\">\r\n <div class=\"px-7 py-5\">\r\n <div class=\"row\" *ngIf=\"isMultiTenancyAllowed && isSuperAdmin\">\r\n <div>\r\n <BBSF-DropdownList #organizationDDL [options]=\"organizationOptions\" [group]=\"permissionSetForm\"></BBSF-DropdownList>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-end\">\r\n <button class=\"btn btn-light btn-active-light-primary pv-reset btn-sm\" name=\"permissionSetResetButton\">\r\n {{ utilityService.getResourceValue('Reset') }}\r\n </button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- begin::Menu -->\r\n\r\n <button\r\n *ngIf=\"isSuperAdmin\"\r\n type=\"button\"\r\n class=\"btn btn-sm btn-primary\"\r\n title=\"Add\"\r\n (click)=\"showAddPermissionSetModal(AddPermissionSetModal)\">\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 <th class=\"min-w-150px\">{{ utilityService.getResourceValue('Name') }}</th>\r\n <th class=\"min-w-150px\" *ngIf=\"!ProductionMode\">{{ utilityService.getResourceValue('SysName') }}</th>\r\n <th class=\"min-w-150px\">{{ utilityService.getResourceValue('UsersCount') }}</th>\r\n <th class=\"min-w-150\" *ngIf=\"isMultiTenancyAllowed && isSuperAdmin\">{{ utilityService.getResourceValue('Organization') }}</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 <tr *ngFor=\"let PermissionSet of filteredPermissionSetPagingResult\">\r\n <td>\r\n <a\r\n href=\"javascript:void(0)\"\r\n [routerLink]=\"['/Admin/Roles/PermissionSetInfo', PermissionSet.iD_GUID]\"\r\n routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\"\r\n >{{ PermissionSet.permissionSetName }}</a\r\n >\r\n </td>\r\n <td *ngIf=\"!ProductionMode\">{{ PermissionSet.sysName }}</td>\r\n <td>{{ PermissionSet.usersCount }}</td>\r\n <td *ngIf=\"isMultiTenancyAllowed && isSuperAdmin\">{{ PermissionSet.currentOrganizationName ?? '-' }}</td>\r\n <td>\r\n <div *ngIf=\"isSuperAdmin\">\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 class=\"mat-menu-content\" #menu=\"matMenu\">\r\n <a class=\"drop-item px-3\" ngbDropdownItem (click)=\"showEditPermissionSetModal(PermissionSet.iD_GUID, EditPermissionSetModal)\">\r\n <span class=\"drop-link px-3\">{{ utilityService.getResourceValue('Edit') }}</span>\r\n </a>\r\n <a ngbDropdownItem class=\"drop-item px-3\" (click)=\"showDeletePermissionSetModal(PermissionSet.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=\"filteredPermissionSetPagingResult.length == 0\">\r\n <td [attr.colspan]=\"ProductionMode ? '3' : '4'\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <!--end::Permission list-->\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging\r\n (Items)=\"setPermissionSetListResult($event)\"\r\n *ngIf=\"isFilterLoaded\"\r\n [options]=\"permissionSetPaging\"\r\n [group]=\"permissionSetForm\"\r\n #PermissionSetPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- #region Add Modal -->\r\n <ng-template #AddPermissionSetModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('AddPermissionSet') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"addPermissionSetFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"multiLingualName\" [group]=\"addPermissionSetForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"activeDirectoryGroup\" [group]=\"addPermissionSetForm\"> </BBSF-TextBox>\r\n <BBSF-TextBox *ngIf=\"!ProductionMode\" [options]=\"sysName\" [group]=\"addPermissionSetForm\"> </BBSF-TextBox>\r\n <BBSF-DropdownList\r\n *ngIf=\"isMultiTenancyAllowed && isSuperAdmin\"\r\n [options]=\"organization\"\r\n [group]=\"addPermissionSetForm\"\r\n (onChange)=\"onChangeOrganization($event,addPermissionsDDL, true)\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList #addPermissionsDDL [options]=\"permissions\" [group]=\"addPermissionSetForm\"> </BBSF-DropdownList>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n #ClosePermissionSetModal\r\n id=\"ClosePermissionSetModal\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n 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 <!-- #endregion -->\r\n\r\n <!-- #region Edit Modal -->\r\n <ng-template #EditPermissionSetModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" (click)=\"modal.dismiss()\" class=\"btn btn-sm btn-icon btn-active-color-primary\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">{{ utilityService.getResourceValue('EditPermissionSet') }}</h1>\r\n </div>\r\n <BBSF-Form [options]=\"editPermissionSetFormOptions\">\r\n <BBSF-MultiLingualTextBox [options]=\"editMultiLingualName\" [group]=\"editPermissionSetForm\"></BBSF-MultiLingualTextBox>\r\n <BBSF-TextBox [options]=\"editActiveDirectoryGroup\" [group]=\"editPermissionSetForm\"> </BBSF-TextBox>\r\n <div *ngIf=\"!ProductionMode\">\r\n <BBSF-TextBox [options]=\"editSysName\" [group]=\"editPermissionSetForm\"> </BBSF-TextBox>\r\n </div>\r\n <BBSF-DropdownList\r\n *ngIf=\"isMultiTenancyAllowed && isSuperAdmin\"\r\n [options]=\"editOrganization\"\r\n [group]=\"editPermissionSetForm\"\r\n (onChange)=\"onChangeOrganization($event,editPermissionsDDL)\">\r\n </BBSF-DropdownList>\r\n <BBSF-DropdownList #editPermissionsDDL [options]=\"editPermissions\" [group]=\"editPermissionSetForm\"> </BBSF-DropdownList>\r\n <div class=\"text-center pt-7\">\r\n <button\r\n type=\"button\"\r\n #CloseEditPermissionSetModal\r\n id=\"CloseEditPermissionSetModal\"\r\n data-dismiss=\"modal\"\r\n aria-label=\"Close\"\r\n 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 <!-- #endregion -->\r\n\r\n <!--delete Modal-->\r\n <BBSF-ConfirmationModal\r\n *ngIf=\"deleteControlLoaded\"\r\n [options]=\"deleteConfirmationOptions\"\r\n id=\"ConfirmationModalControl\"\r\n #ConfirmationModalControl></BBSF-ConfirmationModal>\r\n</block-ui>\r\n" }]
|
|
328
|
+
}], ctorParameters: () => [{ type: i1.PageInfoService }, { type: i2.UtilityService }, { type: i2.EnvironmentService }, { type: i3.PermissionSetService }, { type: i4.NgbModal }, { type: i2.RequestHandlerService }, { type: i2.AuthService }], propDecorators: { pagingElement: [{
|
|
271
329
|
type: ViewChild,
|
|
272
330
|
args: ['PermissionSetPagingViewElement', { static: false }]
|
|
273
331
|
}], ConfirmationModalControl: [{
|
|
274
332
|
type: ViewChild,
|
|
275
333
|
args: ['ConfirmationModalControl', { static: false }]
|
|
334
|
+
}], organizationDDL: [{
|
|
335
|
+
type: ViewChild,
|
|
336
|
+
args: ['organizationDDL', { static: false }]
|
|
276
337
|
}] } });
|
|
277
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnNldHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9yb2xlcy9wZXJtaXNzaW9uc2V0cy9wZXJtaXNzaW9uc2V0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3JvbGVzL3Blcm1pc3Npb25zZXRzL3Blcm1pc3Npb25zZXRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQThCLHdCQUF3QixFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLEVBQW1CLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5UCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDckYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMERBQTBELENBQUM7Ozs7Ozs7Ozs7Ozs7QUFXOUYsTUFBTSxPQUFPLHVCQUF1QjtJQWdEbEMsWUFDVSxlQUFnQyxFQUNqQyxjQUE4QixFQUM3QixrQkFBc0MsRUFDdEMsb0JBQTBDLEVBQzFDLFlBQXNCLEVBQ3RCLHFCQUE0QztRQUw1QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDakMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzdCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxpQkFBWSxH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Qyx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM1QyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBS0QsaUVBQWlFO0lBRWpFLHVCQUF1QixDQUFDLFdBQVc7UUFDakMsSUFBSSxXQUFXO1lBQ2IsSUFBSSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7O1lBRWpLLElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUE7SUFDM0UsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzlDLENBQUM7OEdBdFVVLHVCQUF1QjtrR0FBdkIsdUJBQXVCLGtUQ2ZwQywrdVFBZ0tBOzsyRkRqSmEsdUJBQXVCO2tCQUpuQyxTQUFTOytCQUNFLG9CQUFvQjtnUEFxQmtDLGFBQWE7c0JBQTVFLFNBQVM7dUJBQUMsZ0NBQWdDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQTJCSix3QkFBd0I7c0JBQWpGLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWxDb21wb25lbnQsIENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucywgRHJvcGRvd25PcHRpb25zLCBFbmdsaXNoQXJhYmljRFRPLCBGaWx0ZXJJdGVtLCBGaWx0ZXJUeXBlLCBGb3JtT3B0aW9ucywgSW5wdXRUeXBlLCBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucywgUGFnaW5nQ29tcG9uZW50LCBQYWdpbmdPcHRpb25zLCBUZXh0Qm94T3B0aW9ucyB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uU2V0TW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1Blcm1pc3Npb25zTW9kZWxzL1Blcm1pc3Npb25TZXRNb2RlbCc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSwgRW52aXJvbm1lbnRTZXJ2aWNlLCBSZXF1ZXN0SGFuZGxlclNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1Blcm1pc3Npb25TZXRTZXJ2aWNlLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXBlcm1pc3Npb25zZXRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbnNldHMuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uc2V0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvL1BhZ2UgcmVxdWlyZW1lbnRzXHJcbiAgQXBpVXJsID0gdGhpcy5wZXJtaXNzaW9uU2V0U2VydmljZS5BcGlVcmxcclxuICBQcm9kdWN0aW9uTW9kZTogYm9vbGVhbjtcclxuXHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgY29tcG9uZW50c1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIHBlcm1pc3Npb25MaXN0ID0gW107XHJcbiAgb3JnYW5pemF0aW9uTGlzdCA9IFtdO1xyXG4gIGZpbHRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBwZXJtaXNzaW9uU2V0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwZXJtaXNzaW9uU2V0UGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIGZpbHRlcmVkUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBwZXJtaXNzaW9uU2V0UGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIHRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBpc0ZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ1Blcm1pc3Npb25TZXRQYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwYWdpbmdFbGVtZW50OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuXHJcblxyXG4gIC8vQWRkIE1vZGVsIENvbnRyb2xzXHJcbiAgYWRkUGVybWlzc2lvblNldEZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBhZGRQZXJtaXNzaW9uU2V0Rm9ybU9wdGlvbnM6IEZvcm1PcHRpb25zXHJcbiAgbXVsdGlMaW5ndWFsTmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnNcclxuICBzeXNOYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBhY3RpdmVEaXJlY3RvcnlHcm91cDogVGV4dEJveE9wdGlvbnM7XHJcbiAgcGVybWlzc2lvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBvcmdhbml6YXRpb246IERyb3Bkb3duT3B0aW9ucztcclxuXHJcbiAgLy9FZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgZWRpdFBlcm1pc3Npb25TZXRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgZWRpdFBlcm1pc3Npb25TZXRGb3JtT3B0aW9uczogRm9ybU9wdGlvbnNcclxuICBlZGl0TXVsdGlMaW5ndWFsTmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnNcclxuICBlZGl0U3lzTmFtZTogVGV4dEJveE9wdGlvbnM7XHJcbiAgZWRpdEFjdGl2ZURpcmVjdG9yeUdyb3VwOiBUZXh0Qm94T3B0aW9ucztcclxuICBlZGl0UGVybWlzc2lvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBlZGl0T3JnYW5pemF0aW9uOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgcGVybWlzc2lvblNldElkOiBzdHJpbmc7XHJcbiAgZWRpdFBlcm1pc3Npb25TZXRJZDogc3RyaW5nO1xyXG5cclxuICAvL2RlbGV0ZSAgTW9kZWwgQ29udHJvbHNcclxuICBkZWxldGVkUGVybWlzc2lvblNldElkOiBzdHJpbmc7XHJcbiAgZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIGRlbGV0ZUNvbnRyb2xMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdDb25maXJtYXRpb25Nb2RhbENvbnRyb2wnLCB7IHN0YXRpYzogZmFsc2UgfSkgQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudDtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mb1NlcnZpY2U6IFBhZ2VJbmZvU2VydmljZSxcclxuICAgIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVudmlyb25tZW50U2VydmljZTogRW52aXJvbm1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uU2V0U2VydmljZTogUGVybWlzc2lvblNldFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIHJlcXVlc3RIYW5kbGVyU2VydmljZTogUmVxdWVzdEhhbmRsZXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vUGFnZSBoZWFkZXIgKGJyZWFkY3J1bWIgYW5kIHRpdGxlKVxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlBlcm1pc3Npb25TZXRzXCIpXHJcbiAgICBQYWdlSW5mb1NlcnZpY2UuUGFnZUJyZWFkY3J1bWJzID0gW1xyXG4gICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiAnJywgcGF0aDogJycsIGlzU2VwYXJhdG9yOiB0cnVlLCBpc0FjdGl2ZTogZmFsc2UgfVxyXG4gICAgXTtcclxuICAgIHRoaXMucGFnZUluZm9TZXJ2aWNlLmNhbGN1bGF0ZVRpdGxlKCk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVCcmVhZGNydW1icygpO1xyXG4gICAgdGhpcy5Qcm9kdWN0aW9uTW9kZSA9IHRoaXMuZW52aXJvbm1lbnRTZXJ2aWNlLmdldFByb2R1Y3Rpb25Nb2RlKClcclxuICAgIC8vaW5pdGlhbGl6ZSBwYWdlXHJcbiAgICB0aGlzLmluaXRpYWxpemVQYWdlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9pbml0aWFsaXplIHBhZ2VcclxuICBpbml0aWFsaXplUGFnZSgpIHtcclxuICAgIHRoaXMucGVybWlzc2lvblNldFNlcnZpY2UubG9hZERyb3Bkb3duKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgbGV0IGRyb3Bkb3duUmVzcG9uc2VNb2RlbCA9IHJlc3VsdDtcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25MaXN0ID0gZHJvcGRvd25SZXNwb25zZU1vZGVsW1wib3JnYW5pemF0aW9uTGlzdFwiXTtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uTGlzdCA9IGRyb3Bkb3duUmVzcG9uc2VNb2RlbFtcInBlcm1pc3Npb25MaXN0XCJdO1xyXG4gICAgICAvLyBUZXh0Qm94IGludGlcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5uYW1lID0gXCJzZWFyY2hUZXh0Qm94XCJcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC50eXBlID0gSW5wdXRUeXBlLlRleHRcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94LnBsYWNlaG9sZGVyID0gdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiU2VhcmNoQnlOYW1lXCIpO1xyXG5cclxuICAgICAgdGhpcy50ZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgICB0aGlzLnRleHRJbnB1dEZpbHRlci5mb3JtQ29udHJvbE5hbWUgPSBcInNlYXJjaFRleHRCb3hcIlxyXG4gICAgICB0aGlzLnRleHRJbnB1dEZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJzZWFyY2hUZXh0XCJcclxuICAgICAgdGhpcy50ZXh0SW5wdXRGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWVcclxuICAgICAgdGhpcy50ZXh0SW5wdXRGaWx0ZXIuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveFxyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0UGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0UGFnaW5nLmFjdGlvblBvc3RVUkwgPSB0aGlzLkFwaVVybCArICdHZXRQZXJtaXNzaW9uU2V0c0J5RmlsdGVyJztcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0UGFnaW5nLm9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVGV4dEJveFwiXVxyXG4gICAgICB0aGlzLnBlcm1pc3Npb25TZXRQYWdpbmcuZmlsdGVycyA9IFt0aGlzLnRleHRJbnB1dEZpbHRlcl1cclxuICAgICAgdGhpcy5pc0ZpbHRlckxvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vUGFnaW5nIGZ1bmN0aW9uc1xyXG4gIHNldFBlcm1pc3Npb25TZXRMaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0UGFnaW5nUmVzdWx0ID0gcmVzdWx0XHJcbiAgICB0aGlzLmZpbHRlcmVkUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdCA9IHRoaXMucGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdDtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy8vLyBTdGFydCBhZGQgUGVybWlzc2lvblNldCBQYXJ0Ly8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIHNob3dBZGRQZXJtaXNzaW9uU2V0TW9kYWwoQWRkUGVybWlzc2lvblNldE1vZGFsKSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0YXJ0QmxvY2tVSSgpO1xyXG4gICAgdGhpcy5hZGRQZXJtaXNzaW9uU2V0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgIHRoaXMuYWRkUGVybWlzc2lvblNldEZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zKCk7XHJcbiAgICB0aGlzLmFkZFBlcm1pc3Npb25TZXRGb3JtT3B0aW9ucy5mb3JtR3JvdXAgPSB0aGlzLmFkZFBlcm1pc3Npb25TZXRGb3JtXHJcbiAgICB0aGlzLmFkZFBlcm1pc3Npb25TZXRGb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRQZXJtaXNzaW9uU2V0TW9kZWw7XHJcbiAgICB0aGlzLmFkZFBlcm1pc3Npb25TZXRGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZFBlcm1pc3Npb25TZXRGdW5jdGlvbjtcclxuICAgIHRoaXMuYWRkUGVybWlzc2lvblNldEZvcm1PcHRpb25zLnBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudFxyXG5cclxuICAgIHRoaXMubXVsdGlMaW5ndWFsTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5tdWx0aUxpbmd1YWxOYW1lLm5hbWUgPSBcIk5hbWVcIjtcclxuICAgIHRoaXMubXVsdGlMaW5ndWFsTmFtZS5hcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbE5hbWUuZW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbE5hbWUuaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbE5hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlRGlyZWN0b3J5R3JvdXAgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuYWN0aXZlRGlyZWN0b3J5R3JvdXAubmFtZSA9IFwiQWN0aXZlRGlyZWN0b3J5R3JvdXBcIjtcclxuICAgIHRoaXMuYWN0aXZlRGlyZWN0b3J5R3JvdXAubGFiZWxLZXkgPSBcIkFjdGl2ZURpcmVjdG9yeUdyb3VwXCI7XHJcbiAgICB0aGlzLmFjdGl2ZURpcmVjdG9yeUdyb3VwLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuYWN0aXZlRGlyZWN0b3J5R3JvdXAudmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5hY3RpdmVEaXJlY3RvcnlHcm91cC5tYXhMZW5ndGggPSA2NDtcclxuXHJcblxyXG4gICAgdGhpcy5zeXNOYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLnN5c05hbWUubmFtZSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgdGhpcy5zeXNOYW1lLmxhYmVsS2V5ID0gXCJTeXNOYW1lXCI7XHJcbiAgICB0aGlzLnN5c05hbWUudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5zeXNOYW1lLnZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuc3lzTmFtZS5tYXhMZW5ndGggPSAxMDA7XHJcblxyXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMucGVybWlzc2lvbnMubmFtZSA9IFwiUGVybWlzc2lvbklEc1wiXHJcbiAgICB0aGlzLnBlcm1pc3Npb25zLmxhYmVsS2V5ID0gXCJQZXJtaXNzaW9uc1wiXHJcbiAgICB0aGlzLnBlcm1pc3Npb25zLnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9ucy5kYXRhU291cmNlID0gdGhpcy5wZXJtaXNzaW9uTGlzdFxyXG4gICAgdGhpcy5wZXJtaXNzaW9ucy5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgIHRoaXMucGVybWlzc2lvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuXHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbiA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uLm5hbWUgPSBcIk9yZ2FuaXphdGlvbklEX0dVSURcIlxyXG4gICAgdGhpcy5vcmdhbml6YXRpb24ubGFiZWxLZXkgPSBcIk9yZ2FuaXphdGlvblwiXHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbi5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uLmRhdGFTb3VyY2UgPSB0aGlzLm9yZ2FuaXphdGlvbkxpc3RcclxuICAgIHRoaXMub3JnYW5pemF0aW9uLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbi5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEFkZFBlcm1pc3Npb25TZXRNb2RhbCk7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0QWRkUGVybWlzc2lvblNldE1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLmFkZFBlcm1pc3Npb25TZXRGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBBZGRQZXJtaXNzaW9uU2V0TW9kZWw6IFBlcm1pc3Npb25TZXRNb2RlbCA9IG5ldyBQZXJtaXNzaW9uU2V0TW9kZWwoKTtcclxuICAgIGlmICh0aGlzLlByb2R1Y3Rpb25Nb2RlID09IGZhbHNlKVxyXG4gICAgICBBZGRQZXJtaXNzaW9uU2V0TW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLlN5c05hbWU7XHJcblxyXG4gICAgQWRkUGVybWlzc2lvblNldE1vZGVsLk5hbWUgPSBSZXN1bHRNb2RlbC5OYW1lO1xyXG4gICAgQWRkUGVybWlzc2lvblNldE1vZGVsLk9yZ2FuaXphdGlvbklEX0dVSUQgPSBSZXN1bHRNb2RlbC5Pcmdhbml6YXRpb25JRF9HVUlEO1xyXG4gICAgbGV0IElkcyA9IFtdO1xyXG4gICAgaWYgKFJlc3VsdE1vZGVsLlBlcm1pc3Npb25JRHMgIT0gbnVsbCkge1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgUmVzdWx0TW9kZWwuUGVybWlzc2lvbklEcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gUmVzdWx0TW9kZWwuUGVybWlzc2lvbklEc1tpbmRleF07XHJcbiAgICAgICAgSWRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIEFkZFBlcm1pc3Npb25TZXRNb2RlbC5QZXJtaXNzaW9uSURzID0gSWRzO1xyXG4gICAgQWRkUGVybWlzc2lvblNldE1vZGVsLkFjdGl2ZURpcmVjdG9yeUdyb3VwID0gUmVzdWx0TW9kZWwuQWN0aXZlRGlyZWN0b3J5R3JvdXA7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goQWRkUGVybWlzc2lvblNldE1vZGVsKTtcclxuICAgIHJldHVybiBwYXJhbUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0QWRkUGVybWlzc2lvblNldEZ1bmN0aW9uID0gKEFkZE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25TZXRTZXJ2aWNlLmFkZFBlcm1pc3Npb25TZXQoQWRkTW9kZWwpO1xyXG4gIH1cclxuICAvLy8vLy8vLy8vLy8gRW5kIG9mIGFkZCBQZXJtaXNzaW9uU2V0IHBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy9TdGFydCBvZiBQZXJtaXNzaW9uU2V0IHBhcnQvLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgc2hvd0VkaXRQZXJtaXNzaW9uU2V0TW9kYWwocGVybWlzc2lvblNldElEOiBzdHJpbmcsIGVkaXRQZXJtaXNzaW9uU2V0TW9kYWwpIHtcclxuXHJcbiAgICB0aGlzLmVkaXRQZXJtaXNzaW9uU2V0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgIHRoaXMuZWRpdFBlcm1pc3Npb25TZXRGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgdGhpcy5lZGl0UGVybWlzc2lvblNldEZvcm1PcHRpb25zLmZvcm1Hcm91cCA9IHRoaXMuZWRpdFBlcm1pc3Npb25TZXRGb3JtXHJcbiAgICB0aGlzLmVkaXRQZXJtaXNzaW9uU2V0Rm9ybU9wdGlvbnMuZ2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0RWRpdFBlcm1pc3Npb25TZXRNb2RlbDtcclxuICAgIHRoaXMuZWRpdFBlcm1pc3Npb25TZXRGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEVkaXRQZXJtaXNzaW9uU2V0RnVuY3Rpb247XHJcbiAgICB0aGlzLmVkaXRQZXJtaXNzaW9uU2V0Rm9ybU9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50XHJcblxyXG5cclxuICAgIHRoaXMucGVybWlzc2lvblNldFNlcnZpY2UuZ2V0UGVybWlzc2lvblNldChwZXJtaXNzaW9uU2V0SUQpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgbGV0IFBlcm1pc3Npb25TZXQgPSByZXN1bHQubW9kZWwgYXMgYW55O1xyXG4gICAgICBsZXQgbmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIG5hbWUuYXJhYmljID0gUGVybWlzc2lvblNldC5uYW1lLmFyYWJpYztcclxuICAgICAgbmFtZS5lbmdsaXNoID0gUGVybWlzc2lvblNldC5uYW1lLmVuZ2xpc2g7XHJcblxyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxOYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuZWRpdE11bHRpTGluZ3VhbE5hbWUubmFtZSA9IFwiTmFtZVwiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxOYW1lLmFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsTmFtZS5lbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsTmFtZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsTmFtZS52YWx1ZSA9IG5hbWU7XHJcbiAgICAgIHRoaXMuZWRpdE11bHRpTGluZ3VhbE5hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuXHJcbiAgICAgIHRoaXMuZWRpdFBlcm1pc3Npb25TZXRJZCA9IFBlcm1pc3Npb25TZXQuaURfR1VJRFxyXG5cclxuICAgICAgdGhpcy5lZGl0QWN0aXZlRGlyZWN0b3J5R3JvdXAgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5lZGl0QWN0aXZlRGlyZWN0b3J5R3JvdXAubmFtZSA9IFwiQWN0aXZlRGlyZWN0b3J5R3JvdXBcIjtcclxuICAgICAgdGhpcy5lZGl0QWN0aXZlRGlyZWN0b3J5R3JvdXAubGFiZWxLZXkgPSBcIkFjdGl2ZURpcmVjdG9yeUdyb3VwXCI7XHJcbiAgICAgIHRoaXMuZWRpdEFjdGl2ZURpcmVjdG9yeUdyb3VwLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5lZGl0QWN0aXZlRGlyZWN0b3J5R3JvdXAudmFsdWUgPSBQZXJtaXNzaW9uU2V0LmFjdGl2ZURpcmVjdG9yeUdyb3VwO1xyXG4gICAgICB0aGlzLmVkaXRBY3RpdmVEaXJlY3RvcnlHcm91cC5tYXhMZW5ndGggPSA2NDtcclxuXHJcbiAgICAgIHRoaXMuZWRpdFN5c05hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5lZGl0U3lzTmFtZS5uYW1lID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgIHRoaXMuZWRpdFN5c05hbWUubGFiZWxLZXkgPSBcIlN5c05hbWVcIjtcclxuICAgICAgdGhpcy5lZGl0U3lzTmFtZS50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuZWRpdFN5c05hbWUudmFsdWUgPSBQZXJtaXNzaW9uU2V0LnN5c05hbWU7XHJcbiAgICAgIHRoaXMuZWRpdFN5c05hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgICAgbGV0IHNlbGVjdGVkUGVybWlzc2lvbkxpc3QgPSBbXTtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFBlcm1pc3Npb25TZXQucGVybWlzc2lvbklEcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBQZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9uTGlzdC5maWx0ZXIoKGl0ZW0pID0+IHsgcmV0dXJuIGl0ZW0ua2V5Py50b0xvd2VyQ2FzZSgpID09IFBlcm1pc3Npb25TZXQucGVybWlzc2lvbklEc1tpbmRleF0/LnRvTG93ZXJDYXNlKCk7IH0pLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkudG9Mb3dlckNhc2UoKSlbMF07XHJcbiAgICAgICAgc2VsZWN0ZWRQZXJtaXNzaW9uTGlzdC5wdXNoKFBlcm1pc3Npb24pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZWRpdFBlcm1pc3Npb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmVkaXRQZXJtaXNzaW9ucy5uYW1lID0gXCJQZXJtaXNzaW9uSURzXCJcclxuICAgICAgdGhpcy5lZGl0UGVybWlzc2lvbnMubGFiZWxLZXkgPSBcIlBlcm1pc3Npb25zXCJcclxuICAgICAgdGhpcy5lZGl0UGVybWlzc2lvbnMuc2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGVkUGVybWlzc2lvbkxpc3Q7XHJcbiAgICAgIHRoaXMuZWRpdFBlcm1pc3Npb25zLmRhdGFTb3VyY2UgPSB0aGlzLnBlcm1pc3Npb25MaXN0XHJcbiAgICAgIHRoaXMuZWRpdFBlcm1pc3Npb25zLnNpbmdsZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmVkaXRQZXJtaXNzaW9ucy5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLmVkaXRPcmdhbml6YXRpb24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuZWRpdE9yZ2FuaXphdGlvbi5uYW1lID0gXCJPcmdhbml6YXRpb25JRF9HVUlEXCJcclxuICAgICAgdGhpcy5lZGl0T3JnYW5pemF0aW9uLmxhYmVsS2V5ID0gXCJPcmdhbml6YXRpb25cIlxyXG4gICAgICB0aGlzLmVkaXRPcmdhbml6YXRpb24uc2VsZWN0ZWRJdGVtcyA9IFBlcm1pc3Npb25TZXQub3JnYW5pemF0aW9uSURfR1VJRD8udG9Mb3dlckNhc2UoKTtcclxuICAgICAgdGhpcy5lZGl0T3JnYW5pemF0aW9uLmRhdGFTb3VyY2UgPSB0aGlzLm9yZ2FuaXphdGlvbkxpc3RcclxuICAgICAgdGhpcy5lZGl0T3JnYW5pemF0aW9uLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuZWRpdE9yZ2FuaXphdGlvbi5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuZWRpdE9yZ2FuaXphdGlvbi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihlZGl0UGVybWlzc2lvblNldE1vZGFsKTtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIGdldEVkaXRQZXJtaXNzaW9uU2V0TW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuZWRpdFBlcm1pc3Npb25TZXRGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBFZGl0UGVybWlzc2lvblNldE1vZGVsOiBQZXJtaXNzaW9uU2V0TW9kZWwgPSBuZXcgUGVybWlzc2lvblNldE1vZGVsKCk7XHJcbiAgICBFZGl0UGVybWlzc2lvblNldE1vZGVsLklEX0dVSUQgPSB0aGlzLmVkaXRQZXJtaXNzaW9uU2V0SWQ7XHJcbiAgICBFZGl0UGVybWlzc2lvblNldE1vZGVsLk5hbWUgPSBSZXN1bHRNb2RlbC5OYW1lO1xyXG4gICAgaWYgKHRoaXMuUHJvZHVjdGlvbk1vZGUgPT0gZmFsc2UpXHJcbiAgICAgIEVkaXRQZXJtaXNzaW9uU2V0TW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLlN5c05hbWU7XHJcblxyXG4gICAgRWRpdFBlcm1pc3Npb25TZXRNb2RlbC5BY3RpdmVEaXJlY3RvcnlHcm91cCA9IFJlc3VsdE1vZGVsLkFjdGl2ZURpcmVjdG9yeUdyb3VwO1xyXG4gICAgRWRpdFBlcm1pc3Npb25TZXRNb2RlbC5Pcmdhbml6YXRpb25JRF9HVUlEID0gUmVzdWx0TW9kZWwuT3JnYW5pemF0aW9uSURfR1VJRDtcclxuICAgIGxldCBJZHMgPSBbXTtcclxuICAgIGlmIChSZXN1bHRNb2RlbC5QZXJtaXNzaW9uSURzICE9IG51bGwpIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IFJlc3VsdE1vZGVsLlBlcm1pc3Npb25JRHMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IFJlc3VsdE1vZGVsLlBlcm1pc3Npb25JRHNbaW5kZXhdO1xyXG4gICAgICAgIElkcy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBFZGl0UGVybWlzc2lvblNldE1vZGVsLlBlcm1pc3Npb25JRHMgPSBJZHM7XHJcbiAgICBwYXJhbUFycmF5LnB1c2goRWRpdFBlcm1pc3Npb25TZXRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldEVkaXRQZXJtaXNzaW9uU2V0RnVuY3Rpb24gPSAoRWRpdFBlcm1pc3Npb25TZXRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uU2V0U2VydmljZS5lZGl0UGVybWlzc2lvblNldChFZGl0UGVybWlzc2lvblNldE1vZGVsKVxyXG4gIH1cclxuICAvLy8vLy8vLy8vL0VuZCBvZiBlZGl0IFBlcm1pc3Npb25TZXQgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG4gIC8vLy8vLy8vLy8vU3RhcnQgb2YgZGVsZXRlIFBlcm1pc3Npb25TZXQgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBzaG93RGVsZXRlUGVybWlzc2lvblNldE1vZGFsKFBlcm1pc3Npb25TZXRJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRlbGV0ZUNvbnRyb2xMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuZGVsZXRlZFBlcm1pc3Npb25TZXRJZCA9IFBlcm1pc3Npb25TZXRJZDtcclxuICAgIC8vYXJyYXkgc2VudCB0byBzZXJ2aWNlIGZ1bmN0aW9uXHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIHBhcmFtQXJyYXkucHVzaCh0aGlzLmRlbGV0ZWRQZXJtaXNzaW9uU2V0SWQpO1xyXG5cclxuICAgIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucyA9IG5ldyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMoKTtcclxuICAgIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmRlbGV0ZVBlcm1pc3Npb25TZXQ7XHJcbiAgICB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuc2VydmljZVN1Ym1pdE1vZGVsID0gcGFyYW1BcnJheTtcclxuICAgIHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uT3B0aW9ucy5wYWdpbmdSZWZlcmVuY2UgPSB0aGlzLnBhZ2luZ0VsZW1lbnQ7XHJcblxyXG4gICAgdGhpcy5kZWxldGVDb250cm9sTG9hZGVkID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLkNvbmZpcm1hdGlvbk1vZGFsQ29udHJvbC5zaG93TW9kYWwoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVQZXJtaXNzaW9uU2V0ID0gKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvblNldFNlcnZpY2UuZGVsZXRlUGVybWlzc2lvblNldChpZClcclxuICB9XHJcbiAgLy8vLy8vLy8vLy9FbmQgb2YgZGVsZXRlIFBlcm1pc3Npb25TZXQgcGFydC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbiAgZmlsdGVyUGVybWlzc2lvblNldExpc3Qoc2VhcmNoVmFsdWUpIHtcclxuICAgIGlmIChzZWFyY2hWYWx1ZSlcclxuICAgICAgdGhpcy5maWx0ZXJlZFBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQgPSB0aGlzLnBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQuZmlsdGVyKGl0ZW0gPT4gaXRlbS5wZXJtaXNzaW9uU2V0TmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5maWx0ZXJlZFBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHQgPSB0aGlzLnBlcm1pc3Npb25TZXRQYWdpbmdSZXN1bHRcclxuICB9XHJcblxyXG4gIC8vLy8vLy8vLy8vRGVzdHJveSBPYnNlcnZhYmxlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWVzdEhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3lIYW5kbGVyKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxibG9jay11aT5cclxuICA8IS0tIFN1YmhlYWRlciAtLT5cclxuICA8IS0tIFBhZ2UgQ29udGVudCAtLT5cclxuICA8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJpc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgICAgPCEtLSAgKE9uQ2hhbmdlKT1cImZpbHRlclBlcm1pc3Npb25TZXRMaXN0KCRldmVudClcIiAtLT5cclxuXHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cInNlYXJjaFRleHRCb3hcIiBbZ3JvdXBdPVwicGVybWlzc2lvblNldEZvcm1cIj48L0JCU0YtVGV4dEJveD5cclxuICAgICAgIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgIDwhLS0gYmVnaW46Ok1lbnUgLS0+XHJcblxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgdGl0bGU9XCJBZGRcIiAoY2xpY2spPVwic2hvd0FkZFBlcm1pc3Npb25TZXRNb2RhbChBZGRQZXJtaXNzaW9uU2V0TW9kYWwpXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXBsdXMgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDwhLS0gZW5kOjpNZW51IC0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgIDwhLS1iZWdpbjo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCIgKm5nSWY9XCIhUHJvZHVjdGlvbk1vZGVcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTeXNOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJVc2Vyc0NvdW50XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFjdGlvblwiKX19PC90aD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuXHJcbiAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBQZXJtaXNzaW9uU2V0IG9mIGZpbHRlcmVkUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL1JvbGVzL1Blcm1pc3Npb25TZXRJbmZvJyxQZXJtaXNzaW9uU2V0LmlEX0dVSURdXCIgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1kYXJrXCI+e3tQZXJtaXNzaW9uU2V0LnBlcm1pc3Npb25TZXROYW1lfX08L2E+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCIhUHJvZHVjdGlvbk1vZGVcIj57e1Blcm1pc3Npb25TZXQuc3lzTmFtZX19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD57e1Blcm1pc3Npb25TZXQudXNlcnNDb3VudH19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWxpZ2h0IGJ0bi1hY3RpdmUtbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy1oXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcC1pdGVtIHB4LTNcIiBuZ2JEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdFBlcm1pc3Npb25TZXRNb2RhbChQZXJtaXNzaW9uU2V0LmlEX0dVSUQsRWRpdFBlcm1pc3Npb25TZXRNb2RhbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYkRyb3Bkb3duSXRlbSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93RGVsZXRlUGVybWlzc2lvblNldE1vZGFsKFBlcm1pc3Npb25TZXQuaURfR1VJRClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRlbGV0ZVwiKX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cImZpbHRlcmVkUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiUHJvZHVjdGlvbk1vZGUgPyAnMycgOiAnNCdcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgPCEtLWVuZDo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIGJvcmRlci0wXCI+XHJcbiAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRQZXJtaXNzaW9uU2V0TGlzdFJlc3VsdCgkZXZlbnQpXCIgKm5nSWY9XCJpc0ZpbHRlckxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInBlcm1pc3Npb25TZXRQYWdpbmdcIiBbZ3JvdXBdPVwicGVybWlzc2lvblNldEZvcm1cIiAjUGVybWlzc2lvblNldFBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgIDwvQkJTRi1QYWdpbmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbiAgPCEtLSBBZGQgTW9kYWwgLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNBZGRQZXJtaXNzaW9uU2V0TW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRQZXJtaXNzaW9uU2V0XCIpfX08L2gxPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJhZGRQZXJtaXNzaW9uU2V0Rm9ybU9wdGlvbnNcIj5cclxuICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIm11bHRpTGluZ3VhbE5hbWVcIiBbZ3JvdXBdPVwiYWRkUGVybWlzc2lvblNldEZvcm1cIj48L0JCU0YtTXVsdGlMaW5ndWFsVGV4dEJveD5cclxuICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cImFjdGl2ZURpcmVjdG9yeUdyb3VwXCIgW2dyb3VwXT1cImFkZFBlcm1pc3Npb25TZXRGb3JtXCI+XHJcbiAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgPEJCU0YtVGV4dEJveCAqbmdJZj1cIiFQcm9kdWN0aW9uTW9kZVwiIFtvcHRpb25zXT1cInN5c05hbWVcIiBbZ3JvdXBdPVwiYWRkUGVybWlzc2lvblNldEZvcm1cIj5cclxuICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwicGVybWlzc2lvbnNcIiBbZ3JvdXBdPVwiYWRkUGVybWlzc2lvblNldEZvcm1cIj5cclxuICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJvcmdhbml6YXRpb25cIiBbZ3JvdXBdPVwiYWRkUGVybWlzc2lvblNldEZvcm1cIj5cclxuICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjQ2xvc2VQZXJtaXNzaW9uU2V0TW9kYWwgaWQ9XCJDbG9zZVBlcm1pc3Npb25TZXRNb2RhbFwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IG1lLTMgYnRuLXNtXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX0gPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L0JCU0YtRm9ybT5cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcblxyXG4gIDwhLS0gRWRpdCBNb2RhbCAtLT5cclxuICA8bmctdGVtcGxhdGUgI0VkaXRQZXJtaXNzaW9uU2V0TW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBwYi0wIGJvcmRlci0wIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gc3ZnLWljb24tMVwiPlxyXG4gICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi0xMyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJFZGl0UGVybWlzc2lvblNldFwiKX19PC9oMT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiZWRpdFBlcm1pc3Npb25TZXRGb3JtT3B0aW9uc1wiPlxyXG4gICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwiZWRpdE11bHRpTGluZ3VhbE5hbWVcIiBbZ3JvdXBdPVwiZWRpdFBlcm1pc3Npb25TZXRGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJlZGl0QWN0aXZlRGlyZWN0b3J5R3JvdXBcIiBbZ3JvdXBdPVwiZWRpdFBlcm1pc3Npb25TZXRGb3JtXCI+XHJcbiAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFQcm9kdWN0aW9uTW9kZVwiPlxyXG4gICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJlZGl0U3lzTmFtZVwiIFtncm91cF09XCJlZGl0UGVybWlzc2lvblNldEZvcm1cIj5cclxuICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCBbb3B0aW9uc109XCJlZGl0UGVybWlzc2lvbnNcIiBbZ3JvdXBdPVwiZWRpdFBlcm1pc3Npb25TZXRGb3JtXCI+XHJcbiAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwiZWRpdE9yZ2FuaXphdGlvblwiIFtncm91cF09XCJlZGl0UGVybWlzc2lvblNldEZvcm1cIj5cclxuICAgICAgICA8L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjQ2xvc2VFZGl0UGVybWlzc2lvblNldE1vZGFsIGlkPVwiQ2xvc2VFZGl0UGVybWlzc2lvblNldE1vZGFsXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fSA8L2J1dHRvbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvQkJTRi1Gb3JtPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG5cclxuIDwhLS1kZWxldGUgTW9kYWwtLT5cclxuIDxCQlNGLUNvbmZpcm1hdGlvbk1vZGFsICpuZ0lmPVwiZGVsZXRlQ29udHJvbExvYWRlZFwiIFtvcHRpb25zXT1cImRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnNcIiBpZD1cIkNvbmZpcm1hdGlvbk1vZGFsQ29udHJvbFwiXHJcbiAjQ29uZmlybWF0aW9uTW9kYWxDb250cm9sPjwvQkJTRi1Db25maXJtYXRpb25Nb2RhbD5cclxuIl19
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnNldHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy9yb2xlcy9wZXJtaXNzaW9uc2V0cy9wZXJtaXNzaW9uc2V0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3JvbGVzL3Blcm1pc3Npb25zZXRzL3Blcm1pc3Npb25zZXRzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQThCLHdCQUF3QixFQUF5QixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixFQUFtQixhQUFhLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JTLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUs5RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7Ozs7Ozs7OztBQU96QyxNQUFNLE9BQU8sdUJBQXVCO0lBNERsQyxZQUNVLGVBQWdDLEVBQ2pDLGNBQThCLEVBQzdCLGtCQUFzQyxFQUN0QyxvQkFBMEMsRUFDMUMsWUFBc0IsRUFDdEIscUJBQTRDLEVBQzVDLFdBQXdCO1FBTnhCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNqQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDN0IsdUJBQWtC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QUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVk7SUFFWiw0QkFBNEI7SUFDNUIsV0FBVztRQUNULElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QyxDQUFDOzhHQTdZVSx1QkFBdUI7a0dBQXZCLHVCQUF1Qix1WkNoQnBDLHVvV0ErTkE7OzJGRC9NYSx1QkFBdUI7a0JBSm5DLFNBQVM7K0JBQ0Usb0JBQW9COzBRQThCa0MsYUFBYTtzQkFBNUUsU0FBUzt1QkFBQyxnQ0FBZ0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBOEJKLHdCQUF3QjtzQkFBakYsU0FBUzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ1AsZUFBZTtzQkFBL0QsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zLCBEcm9wZG93bkxpc3RDb21wb25lbnQsIERyb3Bkb3duT3B0aW9ucywgRW5nbGlzaEFyYWJpY0RUTywgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgRm9ybU9wdGlvbnMsIElucHV0VHlwZSwgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMsIFBhZ2luZ0NvbXBvbmVudCwgUGFnaW5nT3B0aW9ucywgUGVybWlzc2lvblNldHMsIFRleHRCb3hPcHRpb25zIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXRNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvUGVybWlzc2lvbnNNb2RlbHMvUGVybWlzc2lvblNldE1vZGVsJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSwgQXV0aFNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1Blcm1pc3Npb25TZXRTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXBlcm1pc3Npb25zZXRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGVybWlzc2lvbnNldHMuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uc2V0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvL1BhZ2UgcmVxdWlyZW1lbnRzXHJcbiAgQXBpVXJsID0gdGhpcy5wZXJtaXNzaW9uU2V0U2VydmljZS5BcGlVcmw7XHJcbiAgUHJvZHVjdGlvbk1vZGU6IGJvb2xlYW47XHJcbiAgY3VycmVudFVzZXJQcm9maWxlOiBhbnk7XHJcbiAgcGVybWlzc2lvblNldHMgPSBQZXJtaXNzaW9uU2V0cztcclxuICBpc011bHRpVGVuYW5jeUFsbG93ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1N1cGVyQWRtaW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIC8vRmlsdGVyIGFuZCBwYWdpbmcgY29tcG9uZW50c1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIHBlcm1pc3Npb25MaXN0ID0gW107XHJcbiAgb3JnYW5pemF0aW9uTGlzdCA9IFtdO1xyXG4gIGZpbHRlckZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBwZXJtaXNzaW9uU2V0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwZXJtaXNzaW9uU2V0UGFnaW5nUmVzdWx0OiBQZXJtaXNzaW9uU2V0TW9kZWxbXSA9IFtdO1xyXG4gIGZpbHRlcmVkUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdDogUGVybWlzc2lvblNldE1vZGVsW10gPSBbXTtcclxuICBwZXJtaXNzaW9uU2V0UGFnaW5nOiBQYWdpbmdPcHRpb25zID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICB0ZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgb3JnYW5pemF0aW9uT3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIG9yZ2FuaXphdGlvbnNGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgaXNGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0ZpbHRlckRhdGFMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93UGFnZUNvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnUGVybWlzc2lvblNldFBhZ2luZ1ZpZXdFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhZ2luZ0VsZW1lbnQ6IFBhZ2luZ0NvbXBvbmVudDxhbnk+O1xyXG5cclxuXHJcbiAgLy8jcmVnaW9uIEFkZCBNb2RlbCBDb250cm9sc1xyXG4gIGFkZFBlcm1pc3Npb25TZXRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgYWRkUGVybWlzc2lvblNldEZvcm1PcHRpb25zOiBGb3JtT3B0aW9ucztcclxuICBtdWx0aUxpbmd1YWxOYW1lOiBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucztcclxuICBzeXNOYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBhY3RpdmVEaXJlY3RvcnlHcm91cDogVGV4dEJveE9wdGlvbnM7XHJcbiAgcGVybWlzc2lvbnM6IERyb3Bkb3duT3B0aW9ucztcclxuICBvcmdhbml6YXRpb246IERyb3Bkb3duT3B0aW9ucztcclxuICAvLyNlbmRyZWdpb25cclxuXHJcblxyXG4gIC8vI3JlZ2lvbiBFZGl0IE1vZGVsIENvbnRyb2xzXHJcbiAgZWRpdFBlcm1pc3Npb25TZXRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgZWRpdFBlcm1pc3Npb25TZXRGb3JtT3B0aW9uczogRm9ybU9wdGlvbnM7XHJcbiAgZWRpdE11bHRpTGluZ3VhbE5hbWU6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gIGVkaXRTeXNOYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBlZGl0QWN0aXZlRGlyZWN0b3J5R3JvdXA6IFRleHRCb3hPcHRpb25zO1xyXG4gIGVkaXRQZXJtaXNzaW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIHBlcm1pc3Npb25TZXRJZDogc3RyaW5nO1xyXG4gIGVkaXRQZXJtaXNzaW9uU2V0SWQ6IHN0cmluZztcclxuICBlZGl0T3JnYW5pemF0aW9uOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vZGVsZXRlICBNb2RlbCBDb250cm9sc1xyXG4gIGRlbGV0ZWRQZXJtaXNzaW9uU2V0SWQ6IHN0cmluZztcclxuICBkZWxldGVDb25maXJtYXRpb25PcHRpb25zOiBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnM7XHJcbiAgZGVsZXRlQ29udHJvbExvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ0NvbmZpcm1hdGlvbk1vZGFsQ29udHJvbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBDb25maXJtYXRpb25Nb2RhbENvbnRyb2w6IENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ29yZ2FuaXphdGlvbkRETCcsIHsgc3RhdGljOiBmYWxzZSB9KSBvcmdhbml6YXRpb25EREw6IERyb3Bkb3duTGlzdENvbXBvbmVudDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHBhZ2VJbmZvU2VydmljZTogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBlcm1pc3Npb25TZXRTZXJ2aWNlOiBQZXJtaXNzaW9uU2V0U2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcmVxdWVzdEhhbmRsZXJTZXJ2aWNlOiBSZXF1ZXN0SGFuZGxlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy9QYWdlIGhlYWRlciAoYnJlYWRjcnVtYiBhbmQgdGl0bGUpXHJcbiAgICB0aGlzLnNob3dQYWdlQ29udGVudCA9IHRydWU7XHJcblxyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VUaXRsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlBlcm1pc3Npb25TZXRzXCIpO1xyXG4gICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgeyB0aXRsZTogdGhpcy51dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiSG9tZVwiKSwgcGF0aDogJy9BZG1pbi9Ib21lJywgaXNTZXBhcmF0b3I6IGZhbHNlLCBpc0FjdGl2ZTogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogJycsIHBhdGg6ICcnLCBpc1NlcGFyYXRvcjogdHJ1ZSwgaXNBY3RpdmU6IGZhbHNlIH1cclxuICAgIF07XHJcbiAgICB0aGlzLnBhZ2VJbmZvU2VydmljZS5jYWxjdWxhdGVUaXRsZSgpO1xyXG4gICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuICAgIHRoaXMuUHJvZHVjdGlvbk1vZGUgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRQcm9kdWN0aW9uTW9kZSgpO1xyXG4gICAgdGhpcy5pc011bHRpVGVuYW5jeUFsbG93ZWQgPSB0aGlzLmVudmlyb25tZW50U2VydmljZS5nZXRBbGxvd011bHRpVGVuYW5jeSgpO1xyXG4gICAgdGhpcy5jdXJyZW50VXNlclByb2ZpbGUgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkucHJvZmlsZTtcclxuICAgIHRoaXMuaXNTdXBlckFkbWluID0gdGhpcy5jdXJyZW50VXNlclByb2ZpbGUucGVybWlzc2lvblNldFNJRCA9PSB0aGlzLnBlcm1pc3Npb25TZXRzLkFkbWluO1xyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2UoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGluaXRpYWxpemUgcGFnZVxyXG4gIGluaXRpYWxpemVQYWdlKCkge1xyXG4gICAgICAvLyBUZXh0Qm94IGludGlcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0Qm94ID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5uYW1lID0gXCJzZWFyY2hUZXh0Qm94XCI7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dEJveC5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHRCb3gudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHRCb3gucGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVcIik7XHJcblxyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbk9wdGlvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uT3B0aW9ucy5uYW1lID0gXCJvcmdhbml6YXRpb25cIjtcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25PcHRpb25zLmxhYmVsS2V5ID0gXCJPcmdhbml6YXRpb25zXCI7XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uT3B0aW9ucy5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbk9wdGlvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy50ZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgICB0aGlzLnRleHRJbnB1dEZpbHRlci5mb3JtQ29udHJvbE5hbWUgPSB0aGlzLnNlYXJjaFRleHRCb3gubmFtZTtcclxuICAgICAgdGhpcy50ZXh0SW5wdXRGaWx0ZXIuYWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiO1xyXG4gICAgICB0aGlzLnRleHRJbnB1dEZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgICAgdGhpcy50ZXh0SW5wdXRGaWx0ZXIuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveDtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiB0aGlzLmlzU3VwZXJBZG1pbikge1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvblNldFBhZ2luZy5maWx0ZXJzID0gdGhpcy5wZXJtaXNzaW9uU2V0UGFnaW5nLmZpbHRlcnMgPz8gW107XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0UGFnaW5nLmRyb3Bkb3duRmlsdGVyc0NvbnRyb2xOYW1lcyA9IHRoaXMucGVybWlzc2lvblNldFBhZ2luZy5kcm9wZG93bkZpbHRlcnNDb250cm9sTmFtZXMgPz8gW107XHJcblxyXG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25zRmlsdGVyLmZvcm1Db250cm9sTmFtZSA9IHRoaXMub3JnYW5pemF0aW9uT3B0aW9ucy5uYW1lO1xyXG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJvcmdhbml6YXRpb25JZFwiO1xyXG4gICAgICAgIHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvbnNGaWx0ZXIuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuRHJvcGRvd25MaXN0O1xyXG5cclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXRQYWdpbmcuZmlsdGVycy5wdXNoKHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlcik7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0UGFnaW5nLmRyb3Bkb3duRmlsdGVyc0NvbnRyb2xOYW1lcy5wdXNoKHRoaXMub3JnYW5pemF0aW9uc0ZpbHRlci5mb3JtQ29udHJvbE5hbWUpO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0UGFnaW5nLmFjdGlvblBvc3RVUkwgPSB0aGlzLkFwaVVybCArICdHZXRQZXJtaXNzaW9uU2V0c0J5RmlsdGVyJztcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0UGFnaW5nLm9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW3RoaXMuc2VhcmNoVGV4dEJveC5uYW1lXTtcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uU2V0UGFnaW5nLmZpbHRlcnMucHVzaCh0aGlzLnRleHRJbnB1dEZpbHRlcik7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvblNldFBhZ2luZy5yZXNldEZpbHRlckJ1dHRvbk5hbWUgPSAncGVybWlzc2lvblNldFJlc2V0QnV0dG9uJztcclxuICAgICAgdGhpcy5pc0ZpbHRlckxvYWRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBsb2FkTGlzdHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNGaWx0ZXJEYXRhTG9hZGVkKSB7XHJcbiAgICAgIHRoaXMucGVybWlzc2lvblNldFNlcnZpY2UubG9hZERyb3Bkb3duRm9yRmlsdGVycygpLnN1YnNjcmliZSgob3JnYW5pemF0aW9uTGlzdDphbnkpID0+IHtcclxuICAgICAgICBsZXQgZmlsdGVyT3JnYW5pemF0aW9uTGlzdCA9IFt7XHJcbiAgICAgICAgICBrZXk6IENvbnN0YW50cy5Ob3RBc3NpZ25lZFRvT3JnYW5pemF0aW9uLFxyXG4gICAgICAgICAgdmFsdWU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5vdEFzc2lnbmVkXCIpLFxyXG4gICAgICAgIH1dLmNvbmNhdChvcmdhbml6YXRpb25MaXN0KTtcclxuICAgICAgICBsZXQgb3JnYW5pemF0aW9uc0VsZW1lbnQgPSB0aGlzLm9yZ2FuaXphdGlvbkRETDtcclxuICAgICAgICBvcmdhbml6YXRpb25zRWxlbWVudC51cGRhdGVEYXRhU291cmNlKGZpbHRlck9yZ2FuaXphdGlvbkxpc3QpO1xyXG5cclxuICAgICAgICB0aGlzLmlzRmlsdGVyRGF0YUxvYWRlZCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFBhZ2luZyBmdW5jdGlvbnNcclxuICBzZXRQZXJtaXNzaW9uU2V0TGlzdFJlc3VsdChyZXN1bHQpIHtcclxuICAgIHRoaXMucGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdCA9IHJlc3VsdDtcclxuICAgIHRoaXMuc2hvd1BhZ2VDb250ZW50ID0gdHJ1ZTtcclxuICAgIHRoaXMuZmlsdGVyZWRQZXJtaXNzaW9uU2V0UGFnaW5nUmVzdWx0ID0gdGhpcy5wZXJtaXNzaW9uU2V0UGFnaW5nUmVzdWx0O1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFN0YXJ0IGFkZCBQZXJtaXNzaW9uU2V0IFBhcnRcclxuICBzaG93QWRkUGVybWlzc2lvblNldE1vZGFsKEFkZFBlcm1pc3Npb25TZXRNb2RhbCkge1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0U2VydmljZS5sb2FkQWRkRWRpdERyb3Bkb3duKCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbkxpc3QgPSByZXN1bHQub3JnYW5pemF0aW9ucztcclxuICAgICAgdGhpcy5wZXJtaXNzaW9uTGlzdD1yZXN1bHQucGVybWlzc2lvbnNcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLmFkZFBlcm1pc3Npb25TZXRGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gICAgdGhpcy5hZGRQZXJtaXNzaW9uU2V0Rm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgIHRoaXMuYWRkUGVybWlzc2lvblNldEZvcm1PcHRpb25zLmZvcm1Hcm91cCA9IHRoaXMuYWRkUGVybWlzc2lvblNldEZvcm07XHJcbiAgICB0aGlzLmFkZFBlcm1pc3Npb25TZXRGb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRBZGRQZXJtaXNzaW9uU2V0TW9kZWw7XHJcbiAgICB0aGlzLmFkZFBlcm1pc3Npb25TZXRGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZFBlcm1pc3Npb25TZXRGdW5jdGlvbjtcclxuICAgIHRoaXMuYWRkUGVybWlzc2lvblNldEZvcm1PcHRpb25zLnBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuXHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbE5hbWUgPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMubXVsdGlMaW5ndWFsTmFtZS5uYW1lID0gXCJOYW1lXCI7XHJcbiAgICB0aGlzLm11bHRpTGluZ3VhbE5hbWUuYXJhYmljTGFiZWxLZXkgPSBcIk5hbWVJbkFyYWJpY1wiO1xyXG4gICAgdGhpcy5tdWx0aUxpbmd1YWxOYW1lLmVuZ2xpc2hMYWJlbEtleSA9IFwiTmFtZUluRW5nbGlzaFwiO1xyXG4gICAgdGhpcy5tdWx0aUxpbmd1YWxOYW1lLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5tdWx0aUxpbmd1YWxOYW1lLm1heExlbmd0aCA9IDEwMDtcclxuXHJcbiAgICB0aGlzLmFjdGl2ZURpcmVjdG9yeUdyb3VwID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICB0aGlzLmFjdGl2ZURpcmVjdG9yeUdyb3VwLm5hbWUgPSBcIkFjdGl2ZURpcmVjdG9yeUdyb3VwXCI7XHJcbiAgICB0aGlzLmFjdGl2ZURpcmVjdG9yeUdyb3VwLmxhYmVsS2V5ID0gXCJBY3RpdmVEaXJlY3RvcnlHcm91cFwiO1xyXG4gICAgdGhpcy5hY3RpdmVEaXJlY3RvcnlHcm91cC50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB0aGlzLmFjdGl2ZURpcmVjdG9yeUdyb3VwLnZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuYWN0aXZlRGlyZWN0b3J5R3JvdXAubWF4TGVuZ3RoID0gNjQ7XHJcblxyXG5cclxuICAgIHRoaXMuc3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5zeXNOYW1lLm5hbWUgPSBcIlN5c05hbWVcIjtcclxuICAgIHRoaXMuc3lzTmFtZS5sYWJlbEtleSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgdGhpcy5zeXNOYW1lLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuc3lzTmFtZS52YWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLnN5c05hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgIHRoaXMucGVybWlzc2lvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25zLm5hbWUgPSBcIlBlcm1pc3Npb25JRHNcIjtcclxuICAgIHRoaXMucGVybWlzc2lvbnMubGFiZWxLZXkgPSBcIlBlcm1pc3Npb25zXCI7XHJcbiAgICB0aGlzLnBlcm1pc3Npb25zLnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9ucy5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgIHRoaXMucGVybWlzc2lvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5wZXJtaXNzaW9ucy5kYXRhU291cmNlPXRoaXMucGVybWlzc2lvbkxpc3Q7XHJcblxyXG4gICAgdGhpcy5vcmdhbml6YXRpb24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbi5uYW1lID0gXCJPcmdhbml6YXRpb25JRF9HVUlEXCI7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbi5sYWJlbEtleSA9IFwiT3JnYW5pemF0aW9uXCI7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbi5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uLmRhdGFTb3VyY2UgPSB0aGlzLm9yZ2FuaXphdGlvbkxpc3Q7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvbi5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5vcmdhbml6YXRpb24uYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5vcmdhbml6YXRpb24uaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWRkUGVybWlzc2lvblNldE1vZGFsKTtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RvcEJsb2NrVUkoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWRkUGVybWlzc2lvblNldE1vZGVsID0gKCk6IFBlcm1pc3Npb25TZXRNb2RlbFtdID0+IHtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuYWRkUGVybWlzc2lvblNldEZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgbGV0IEFkZFBlcm1pc3Npb25TZXRNb2RlbDogUGVybWlzc2lvblNldE1vZGVsID0gbmV3IFBlcm1pc3Npb25TZXRNb2RlbCgpO1xyXG4gICAgaWYgKHRoaXMuUHJvZHVjdGlvbk1vZGUgPT0gZmFsc2UpXHJcbiAgICAgIEFkZFBlcm1pc3Npb25TZXRNb2RlbC5zeXNOYW1lID0gUmVzdWx0TW9kZWwuU3lzTmFtZTtcclxuXHJcbiAgICBBZGRQZXJtaXNzaW9uU2V0TW9kZWwubmFtZSA9IFJlc3VsdE1vZGVsLk5hbWU7XHJcbiAgICBBZGRQZXJtaXNzaW9uU2V0TW9kZWwub3JnYW5pemF0aW9uSURfR1VJRCA9IFJlc3VsdE1vZGVsW3RoaXMub3JnYW5pemF0aW9uLm5hbWVdO1xyXG4gICAgbGV0IElkcyA9IFtdO1xyXG4gICAgaWYgKFJlc3VsdE1vZGVsLlBlcm1pc3Npb25JRHMgIT0gbnVsbCkge1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgUmVzdWx0TW9kZWwuUGVybWlzc2lvbklEcy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gUmVzdWx0TW9kZWwuUGVybWlzc2lvbklEc1tpbmRleF07XHJcbiAgICAgICAgSWRzLnB1c2goZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIEFkZFBlcm1pc3Npb25TZXRNb2RlbC5wZXJtaXNzaW9uSURzID0gSWRzO1xyXG4gICAgQWRkUGVybWlzc2lvblNldE1vZGVsLmFjdGl2ZURpcmVjdG9yeUdyb3VwID0gUmVzdWx0TW9kZWwuQWN0aXZlRGlyZWN0b3J5R3JvdXA7XHJcbiAgICByZXR1cm4gQXJyYXkoQWRkUGVybWlzc2lvblNldE1vZGVsKTtcclxuICB9O1xyXG5cclxuICBnZXRBZGRQZXJtaXNzaW9uU2V0RnVuY3Rpb24gPSAoYWRkTW9kZWw6IFBlcm1pc3Npb25TZXRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9uU2V0U2VydmljZS5hZGRQZXJtaXNzaW9uU2V0KGFkZE1vZGVsKTtcclxuICB9O1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIFN0YXJ0IG9mIFBlcm1pc3Npb25TZXQgZWRpdCBwYXJ0XHJcbiAgc2hvd0VkaXRQZXJtaXNzaW9uU2V0TW9kYWwocGVybWlzc2lvblNldElEOiBzdHJpbmcsIGVkaXRQZXJtaXNzaW9uU2V0TW9kYWwpIHtcclxuXHJcbiAgICB0aGlzLmVkaXRQZXJtaXNzaW9uU2V0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG5cclxuICAgIHRoaXMuZWRpdFBlcm1pc3Npb25TZXRGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgdGhpcy5lZGl0UGVybWlzc2lvblNldEZvcm1PcHRpb25zLmZvcm1Hcm91cCA9IHRoaXMuZWRpdFBlcm1pc3Npb25TZXRGb3JtO1xyXG4gICAgdGhpcy5lZGl0UGVybWlzc2lvblNldEZvcm1PcHRpb25zLmdldE1vZGVsRnVuY3Rpb24gPSB0aGlzLmdldEVkaXRQZXJtaXNzaW9uU2V0TW9kZWw7XHJcbiAgICB0aGlzLmVkaXRQZXJtaXNzaW9uU2V0Rm9ybU9wdGlvbnMuc2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0UGVybWlzc2lvblNldEZ1bmN0aW9uO1xyXG4gICAgdGhpcy5lZGl0UGVybWlzc2lvblNldEZvcm1PcHRpb25zLnBhZ2luZ1JlZmVyZW5jZSA9IHRoaXMucGFnaW5nRWxlbWVudDtcclxuXHJcblxyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0U2VydmljZS5nZXRQZXJtaXNzaW9uU2V0KHBlcm1pc3Npb25TZXRJRCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgUGVybWlzc2lvblNldCA9IHJlc3VsdC5tb2RlbDtcclxuICAgICAgbGV0IGxpc3RzID0gcmVzdWx0Lmxpc3RzO1xyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvbkxpc3QgPSBsaXN0cy5vcmdhbml6YXRpb25zO1xyXG4gICAgICB0aGlzLnBlcm1pc3Npb25MaXN0PWxpc3RzLnBlcm1pc3Npb25zXHJcblxyXG4gICAgICBsZXQgbmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIG5hbWUuYXJhYmljID0gUGVybWlzc2lvblNldC5uYW1lLmFyYWJpYztcclxuICAgICAgbmFtZS5lbmdsaXNoID0gUGVybWlzc2lvblNldC5uYW1lLmVuZ2xpc2g7XHJcblxyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxOYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuZWRpdE11bHRpTGluZ3VhbE5hbWUubmFtZSA9IFwiTmFtZVwiO1xyXG4gICAgICB0aGlzLmVkaXRNdWx0aUxpbmd1YWxOYW1lLmFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsTmFtZS5lbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsTmFtZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5lZGl0TXVsdGlMaW5ndWFsTmFtZS52YWx1ZSA9IG5hbWU7XHJcbiAgICAgIHRoaXMuZWRpdE11bHRpTGluZ3VhbE5hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuXHJcbiAgICAgIHRoaXMuZWRpdFBlcm1pc3Npb25TZXRJZCA9IFBlcm1pc3Npb25TZXQuaURfR1VJRDtcclxuXHJcbiAgICAgIHRoaXMuZWRpdEFjdGl2ZURpcmVjdG9yeUdyb3VwID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuZWRpdEFjdGl2ZURpcmVjdG9yeUdyb3VwLm5hbWUgPSBcIkFjdGl2ZURpcmVjdG9yeUdyb3VwXCI7XHJcbiAgICAgIHRoaXMuZWRpdEFjdGl2ZURpcmVjdG9yeUdyb3VwLmxhYmVsS2V5ID0gXCJBY3RpdmVEaXJlY3RvcnlHcm91cFwiO1xyXG4gICAgICB0aGlzLmVkaXRBY3RpdmVEaXJlY3RvcnlHcm91cC50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIHRoaXMuZWRpdEFjdGl2ZURpcmVjdG9yeUdyb3VwLnZhbHVlID0gUGVybWlzc2lvblNldC5hY3RpdmVEaXJlY3RvcnlHcm91cDtcclxuICAgICAgdGhpcy5lZGl0QWN0aXZlRGlyZWN0b3J5R3JvdXAubWF4TGVuZ3RoID0gNjQ7XHJcblxyXG4gICAgICB0aGlzLmVkaXRTeXNOYW1lID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuZWRpdFN5c05hbWUubmFtZSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgICB0aGlzLmVkaXRTeXNOYW1lLmxhYmVsS2V5ID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgIHRoaXMuZWRpdFN5c05hbWUudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLmVkaXRTeXNOYW1lLnZhbHVlID0gUGVybWlzc2lvblNldC5zeXNOYW1lO1xyXG4gICAgICB0aGlzLmVkaXRTeXNOYW1lLm1heExlbmd0aCA9IDEwMDtcclxuXHJcbiAgICAgIGxldCBzZWxlY3RlZFBlcm1pc3Npb25MaXN0ID0gW107XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBQZXJtaXNzaW9uU2V0LnBlcm1pc3Npb25JRHMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgUGVybWlzc2lvbiA9IHRoaXMucGVybWlzc2lvbkxpc3QuZmlsdGVyKChpdGVtKSA9PiB7IHJldHVybiBpdGVtLmtleT8udG9Mb3dlckNhc2UoKSA9PSBQZXJtaXNzaW9uU2V0LnBlcm1pc3Npb25JRHNbaW5kZXhdPy50b0xvd2VyQ2FzZSgpOyB9KS5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5LnRvTG93ZXJDYXNlKCkpWzBdO1xyXG4gICAgICAgIHNlbGVjdGVkUGVybWlzc2lvbkxpc3QucHVzaChQZXJtaXNzaW9uKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5lZGl0UGVybWlzc2lvbnMgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuZWRpdFBlcm1pc3Npb25zLm5hbWUgPSBcIlBlcm1pc3Npb25JRHNcIjtcclxuICAgICAgdGhpcy5lZGl0UGVybWlzc2lvbnMubGFiZWxLZXkgPSBcIlBlcm1pc3Npb25zXCI7XHJcbiAgICAgIHRoaXMuZWRpdFBlcm1pc3Npb25zLnNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZFBlcm1pc3Npb25MaXN0O1xyXG4gICAgICB0aGlzLmVkaXRQZXJtaXNzaW9ucy5zaW5nbGVTZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5lZGl0UGVybWlzc2lvbnMuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLmVkaXRQZXJtaXNzaW9ucy5kYXRhU291cmNlPXRoaXMucGVybWlzc2lvbkxpc3Q7XHJcblxyXG4gICAgICB0aGlzLmVkaXRPcmdhbml6YXRpb24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuZWRpdE9yZ2FuaXphdGlvbi5uYW1lID0gXCJPcmdhbml6YXRpb25JRF9HVUlEXCI7XHJcbiAgICAgIHRoaXMuZWRpdE9yZ2FuaXphdGlvbi5sYWJlbEtleSA9IFwiT3JnYW5pemF0aW9uXCI7XHJcbiAgICAgIHRoaXMuZWRpdE9yZ2FuaXphdGlvbi5zZWxlY3RlZEl0ZW1zID0gUGVybWlzc2lvblNldC5vcmdhbml6YXRpb25JRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB0aGlzLmVkaXRPcmdhbml6YXRpb24uZGF0YVNvdXJjZSA9IHRoaXMub3JnYW5pemF0aW9uTGlzdDtcclxuICAgICAgdGhpcy5lZGl0T3JnYW5pemF0aW9uLnNpbmdsZVNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICAgIHRoaXMuZWRpdE9yZ2FuaXphdGlvbi5hbGxvd1NlYXJjaEZpbHRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMuZWRpdE9yZ2FuaXphdGlvbi5pc1JlcXVpcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGVkaXRQZXJtaXNzaW9uU2V0TW9kYWwpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0RWRpdFBlcm1pc3Npb25TZXRNb2RlbCA9ICgpID0+IHtcclxuICAgIGxldCBwYXJhbUFycmF5OiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IFJlc3VsdE1vZGVsID0gdGhpcy5lZGl0UGVybWlzc2lvblNldEZvcm0udmFsdWUgYXMgYW55O1xyXG4gICAgbGV0IEVkaXRQZXJtaXNzaW9uU2V0TW9kZWw6IFBlcm1pc3Npb25TZXRNb2RlbCA9IG5ldyBQZXJtaXNzaW9uU2V0TW9kZWwoKTtcclxuICAgIEVkaXRQZXJtaXNzaW9uU2V0TW9kZWwuaURfR1VJRCA9IHRoaXMuZWRpdFBlcm1pc3Npb25TZXRJZDtcclxuICAgIEVkaXRQZXJtaXNzaW9uU2V0TW9kZWwubmFtZSA9IFJlc3VsdE1vZGVsLk5hbWU7XHJcbiAgICBpZiAodGhpcy5Qcm9kdWN0aW9uTW9kZSA9PSBmYWxzZSlcclxuICAgICAgRWRpdFBlcm1pc3Npb25TZXRNb2RlbC5zeXNOYW1lID0gUmVzdWx0TW9kZWwuU3lzTmFtZTtcclxuXHJcbiAgICBFZGl0UGVybWlzc2lvblNldE1vZGVsLmFjdGl2ZURpcmVjdG9yeUdyb3VwID0gUmVzdWx0TW9kZWwuQWN0aXZlRGlyZWN0b3J5R3JvdXA7XHJcbiAgICBFZGl0UGVybWlzc2lvblNldE1vZGVsLm9yZ2FuaXphdGlvbklEX0dVSUQgPSBSZXN1bHRNb2RlbFt0aGlzLmVkaXRPcmdhbml6YXRpb24ubmFtZV07XHJcbiAgICBsZXQgSWRzID0gW107XHJcbiAgICBpZiAoUmVzdWx0TW9kZWwuUGVybWlzc2lvbklEcyAhPSBudWxsKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBSZXN1bHRNb2RlbC5QZXJtaXNzaW9uSURzLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBSZXN1bHRNb2RlbC5QZXJtaXNzaW9uSURzW2luZGV4XTtcclxuICAgICAgICBJZHMucHVzaChlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgRWRpdFBlcm1pc3Npb25TZXRNb2RlbC5wZXJtaXNzaW9uSURzID0gSWRzO1xyXG4gICAgcGFyYW1BcnJheS5wdXNoKEVkaXRQZXJtaXNzaW9uU2V0TW9kZWwpO1xyXG4gICAgcmV0dXJuIHBhcmFtQXJyYXk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0RWRpdFBlcm1pc3Npb25TZXRGdW5jdGlvbiA9IChFZGl0UGVybWlzc2lvblNldE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25TZXRTZXJ2aWNlLmVkaXRQZXJtaXNzaW9uU2V0KEVkaXRQZXJtaXNzaW9uU2V0TW9kZWwpO1xyXG4gIH07XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBTdGFydCBvZiBkZWxldGUgUGVybWlzc2lvblNldCBwYXJ0XHJcbiAgc2hvd0RlbGV0ZVBlcm1pc3Npb25TZXRNb2RhbChQZXJtaXNzaW9uU2V0SWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5kZWxldGVDb250cm9sTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmRlbGV0ZWRQZXJtaXNzaW9uU2V0SWQgPSBQZXJtaXNzaW9uU2V0SWQ7XHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2godGhpcy5kZWxldGVkUGVybWlzc2lvblNldElkKTtcclxuXHJcbiAgICB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMgPSBuZXcgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zKCk7XHJcbiAgICB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMuc2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5kZWxldGVQZXJtaXNzaW9uU2V0O1xyXG4gICAgdGhpcy5kZWxldGVDb25maXJtYXRpb25PcHRpb25zLnNlcnZpY2VTdWJtaXRNb2RlbCA9IHBhcmFtQXJyYXk7XHJcbiAgICB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvbk9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5wYWdpbmdFbGVtZW50O1xyXG5cclxuICAgIHRoaXMuZGVsZXRlQ29udHJvbExvYWRlZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5Db25maXJtYXRpb25Nb2RhbENvbnRyb2wuc2hvd01vZGFsKCk7XHJcbiAgICB9LCAyMDApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlUGVybWlzc2lvblNldCA9IChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25TZXRTZXJ2aWNlLmRlbGV0ZVBlcm1pc3Npb25TZXQoaWQpO1xyXG4gIH07XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gaGVscGVyc1xyXG5cclxuICBmaWx0ZXJQZXJtaXNzaW9uU2V0TGlzdChzZWFyY2hWYWx1ZSkge1xyXG4gICAgaWYgKHNlYXJjaFZhbHVlKVxyXG4gICAgICB0aGlzLmZpbHRlcmVkUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdCA9IHRoaXMucGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdC5maWx0ZXIoaXRlbSA9PiBpdGVtLnBlcm1pc3Npb25TZXROYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVmFsdWUudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmZpbHRlcmVkUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdCA9IHRoaXMucGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdDtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlT3JnYW5pemF0aW9uKGlkOiBhbnkscGVybWlzc2lvbnNEREw6RHJvcGRvd25MaXN0Q29tcG9uZW50LCBpc0FkZDogYm9vbGVhbj1mYWxzZSkge1xyXG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0U2VydmljZS5sb2FkQWRkRWRpdERyb3Bkb3duKGlkKS5zdWJzY3JpYmUoKHJlc3VsdDphbnkpID0+IHtcclxuICAgICAgaWYgKGlzQWRkKSB7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9ucy5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmVkaXRQZXJtaXNzaW9ucy5zZWxlY3RlZEl0ZW1zID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBwZXJtaXNzaW9uc0RETC51cGRhdGVEYXRhU291cmNlKHJlc3VsdC5wZXJtaXNzaW9ucyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gRGVzdHJveSBPYnNlcnZhYmxlXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlcXVlc3RIYW5kbGVyU2VydmljZS5kZXN0cm95SGFuZGxlcigpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8YmxvY2stdWk+XHJcbiAgPCEtLSBTdWJoZWFkZXIgLS0+XHJcbiAgPCEtLSBQYWdlIENvbnRlbnQgLS0+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1jdXN0b20taFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCIgKm5nSWY9XCJpc0ZpbHRlckxvYWRlZFwiPlxyXG4gICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJzZWFyY2hUZXh0Qm94XCIgW2dyb3VwXT1cInBlcm1pc3Npb25TZXRGb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlUZW5hbmN5QWxsb3dlZCAmJiBpc1N1cGVyQWRtaW5cIlxyXG4gICAgICAgICAgICBuZ2JEcm9wZG93blxyXG4gICAgICAgICAgICBjbGFzcz1cImQtaW5saW5lLWJsb2NrXCJcclxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyBkaXNwbGF5OiBzaG93UGFnZUNvbnRlbnQgPT0gdHJ1ZSA/ICdibG9jaycgOiAnbm9uZScgfVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRMaXN0cygpXCJcclxuICAgICAgICAgICAgICBuZ2JEcm9wZG93blRvZ2dsZVxyXG4gICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeSBtZS0zXCJcclxuICAgICAgICAgICAgICBpZD1cIkZpbHRlcnNEcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJGaWx0ZXJcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWx0ZXIgbWUtMVwiPjwvaT5cclxuICAgICAgICAgICAgICB7eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdGaWx0ZXInKSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgICAgIG5nYkRyb3Bkb3duTWVudVxyXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT1cIkZpbHRlcnNEcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItY29udGFpbmVyIG1lbnUgbWVudS1zdWIgbWVudS1zdWItZHJvcGRvd24gbWVudS1jb2x1bW4gbWVudS1yb3VuZGVkIG1lbnUtZ3JheS04MDAgbWVudS1zdGF0ZS1iZy1saWdodC1wcmltYXJ5IHctMjUwcHggdy1tZC01MDBweCBmdy1ib2xkIHB5LTMgZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJwZXJtaXNzaW9uU2V0Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTcgcHktNVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJpc011bHRpVGVuYW5jeUFsbG93ZWQgJiYgaXNTdXBlckFkbWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAjb3JnYW5pemF0aW9uRERMIFtvcHRpb25zXT1cIm9yZ2FuaXphdGlvbk9wdGlvbnNcIiBbZ3JvdXBdPVwicGVybWlzc2lvblNldEZvcm1cIj48L0JCU0YtRHJvcGRvd25MaXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLWFjdGl2ZS1saWdodC1wcmltYXJ5IHB2LXJlc2V0IGJ0bi1zbVwiIG5hbWU9XCJwZXJtaXNzaW9uU2V0UmVzZXRCdXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ1Jlc2V0JykgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBiZWdpbjo6TWVudSAtLT5cclxuXHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNTdXBlckFkbWluXCJcclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgIHRpdGxlPVwiQWRkXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNob3dBZGRQZXJtaXNzaW9uU2V0TW9kYWwoQWRkUGVybWlzc2lvblNldE1vZGFsKVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1wbHVzIG1lLTFcIj48L2k+XHJcbiAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0FkZCcpIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8IS0tIGVuZDo6TWVudSAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHktM1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICA8IS0tYmVnaW46OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ05hbWUnKSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU3lzTmFtZScpIH19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnVXNlcnNDb3VudCcpIH19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MFwiICpuZ0lmPVwiaXNNdWx0aVRlbmFuY3lBbGxvd2VkICYmIGlzU3VwZXJBZG1pblwiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ09yZ2FuaXphdGlvbicpIH19PC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTUwcHhcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdBY3Rpb24nKSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBQZXJtaXNzaW9uU2V0IG9mIGZpbHRlcmVkUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL1JvbGVzL1Blcm1pc3Npb25TZXRJbmZvJywgUGVybWlzc2lvblNldC5pRF9HVUlEXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhcmtcIlxyXG4gICAgICAgICAgICAgICAgICAgID57eyBQZXJtaXNzaW9uU2V0LnBlcm1pc3Npb25TZXROYW1lIH19PC9hXHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCIhUHJvZHVjdGlvbk1vZGVcIj57eyBQZXJtaXNzaW9uU2V0LnN5c05hbWUgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7IFBlcm1pc3Npb25TZXQudXNlcnNDb3VudCB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJpc011bHRpVGVuYW5jeUFsbG93ZWQgJiYgaXNTdXBlckFkbWluXCI+e3sgUGVybWlzc2lvblNldC5jdXJyZW50T3JnYW5pemF0aW9uTmFtZSA/PyAnLScgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNTdXBlckFkbWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1saWdodCBidG4tYWN0aXZlLWxpZ2h0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgY2xhc3M9XCJtYXQtbWVudS1jb250ZW50XCIgI21lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3AtaXRlbSBweC0zXCIgbmdiRHJvcGRvd25JdGVtIChjbGljayk9XCJzaG93RWRpdFBlcm1pc3Npb25TZXRNb2RhbChQZXJtaXNzaW9uU2V0LmlEX0dVSUQsIEVkaXRQZXJtaXNzaW9uU2V0TW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcC1saW5rIHB4LTNcIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdFZGl0JykgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JEcm9wZG93bkl0ZW0gY2xhc3M9XCJkcm9wLWl0ZW0gcHgtM1wiIChjbGljayk9XCJzaG93RGVsZXRlUGVybWlzc2lvblNldE1vZGFsKFBlcm1pc3Npb25TZXQuaURfR1VJRClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wLWxpbmsgcHgtM1wiPnt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0RlbGV0ZScpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgIDx0ciAqbmdJZj1cImZpbHRlcmVkUGVybWlzc2lvblNldFBhZ2luZ1Jlc3VsdC5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiUHJvZHVjdGlvbk1vZGUgPyAnMycgOiAnNCdcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgPCEtLWVuZDo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICA8QkJTRi1QYWdpbmdcclxuICAgICAgICAgIChJdGVtcyk9XCJzZXRQZXJtaXNzaW9uU2V0TGlzdFJlc3VsdCgkZXZlbnQpXCJcclxuICAgICAgICAgICpuZ0lmPVwiaXNGaWx0ZXJMb2FkZWRcIlxyXG4gICAgICAgICAgW29wdGlvbnNdPVwicGVybWlzc2lvblNldFBhZ2luZ1wiXHJcbiAgICAgICAgICBbZ3JvdXBdPVwicGVybWlzc2lvblNldEZvcm1cIlxyXG4gICAgICAgICAgI1Blcm1pc3Npb25TZXRQYWdpbmdWaWV3RWxlbWVudD5cclxuICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tICNyZWdpb24gQWRkIE1vZGFsIC0tPlxyXG4gIDxuZy10ZW1wbGF0ZSAjQWRkUGVybWlzc2lvblNldE1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQWRkUGVybWlzc2lvblNldCcpIH19PC9oMT5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiYWRkUGVybWlzc2lvblNldEZvcm1PcHRpb25zXCI+XHJcbiAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEJveCBbb3B0aW9uc109XCJtdWx0aUxpbmd1YWxOYW1lXCIgW2dyb3VwXT1cImFkZFBlcm1pc3Npb25TZXRGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJhY3RpdmVEaXJlY3RvcnlHcm91cFwiIFtncm91cF09XCJhZGRQZXJtaXNzaW9uU2V0Rm9ybVwiPiA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8QkJTRi1UZXh0Qm94ICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCIgW29wdGlvbnNdPVwic3lzTmFtZVwiIFtncm91cF09XCJhZGRQZXJtaXNzaW9uU2V0Rm9ybVwiPiA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3RcclxuICAgICAgICAgICpuZ0lmPVwiaXNNdWx0aVRlbmFuY3lBbGxvd2VkICYmIGlzU3VwZXJBZG1pblwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJvcmdhbml6YXRpb25cIlxyXG4gICAgICAgICAgW2dyb3VwXT1cImFkZFBlcm1pc3Npb25TZXRGb3JtXCJcclxuICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNoYW5nZU9yZ2FuaXphdGlvbigkZXZlbnQsYWRkUGVybWlzc2lvbnNEREwsIHRydWUpXCI+XHJcbiAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI2FkZFBlcm1pc3Npb25zRERMIFtvcHRpb25zXT1cInBlcm1pc3Npb25zXCIgW2dyb3VwXT1cImFkZFBlcm1pc3Npb25TZXRGb3JtXCI+IDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICNDbG9zZVBlcm1pc3Npb25TZXRNb2RhbFxyXG4gICAgICAgICAgICBpZD1cIkNsb3NlUGVybWlzc2lvblNldE1vZGFsXCJcclxuICAgICAgICAgICAgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XHJcbiAgICAgICAgICAgIHt7IHV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoJ0NhbmNlbExhYmVsJykgfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnU2F2ZUxhYmVsJykgfX08L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9CQlNGLUZvcm0+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgPCEtLSAjcmVnaW9uIEVkaXQgTW9kYWwgLS0+XHJcbiAgPG5nLXRlbXBsYXRlICNFZGl0UGVybWlzc2lvblNldE1vZGFsIGxldC1tb2RhbD5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJleGFtcGxlTW9kYWxMYWJlbFwiPjwvaDU+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4taWNvbiBidG4tYWN0aXZlLWNvbG9yLXByaW1hcnlcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbmxpbmVTVkddPVwiJy4vc3JjL2Fzc2V0cy9pbWFnZXMvYXJyMDYxLnN2ZydcIj48L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICA8aDEgY2xhc3M9XCJtYi0zXCI+e3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnRWRpdFBlcm1pc3Npb25TZXQnKSB9fTwvaDE+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8QkJTRi1Gb3JtIFtvcHRpb25zXT1cImVkaXRQZXJtaXNzaW9uU2V0Rm9ybU9wdGlvbnNcIj5cclxuICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cImVkaXRNdWx0aUxpbmd1YWxOYW1lXCIgW2dyb3VwXT1cImVkaXRQZXJtaXNzaW9uU2V0Rm9ybVwiPjwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwiZWRpdEFjdGl2ZURpcmVjdG9yeUdyb3VwXCIgW2dyb3VwXT1cImVkaXRQZXJtaXNzaW9uU2V0Rm9ybVwiPiA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIVByb2R1Y3Rpb25Nb2RlXCI+XHJcbiAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cImVkaXRTeXNOYW1lXCIgW2dyb3VwXT1cImVkaXRQZXJtaXNzaW9uU2V0Rm9ybVwiPiA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3RcclxuICAgICAgICAgICpuZ0lmPVwiaXNNdWx0aVRlbmFuY3lBbGxvd2VkICYmIGlzU3VwZXJBZG1pblwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJlZGl0T3JnYW5pemF0aW9uXCJcclxuICAgICAgICAgIFtncm91cF09XCJlZGl0UGVybWlzc2lvblNldEZvcm1cIlxyXG4gICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlT3JnYW5pemF0aW9uKCRldmVudCxlZGl0UGVybWlzc2lvbnNEREwpXCI+XHJcbiAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgI2VkaXRQZXJtaXNzaW9uc0RETCBbb3B0aW9uc109XCJlZGl0UGVybWlzc2lvbnNcIiBbZ3JvdXBdPVwiZWRpdFBlcm1pc3Npb25TZXRGb3JtXCI+IDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICNDbG9zZUVkaXRQZXJtaXNzaW9uU2V0TW9kYWxcclxuICAgICAgICAgICAgaWQ9XCJDbG9zZUVkaXRQZXJtaXNzaW9uU2V0TW9kYWxcIlxyXG4gICAgICAgICAgICBkYXRhLWRpc21pc3M9XCJtb2RhbFwiXHJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBtZS0zIGJ0bi1zbVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAge3sgdXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSgnQ2FuY2VsTGFiZWwnKSB9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57eyB1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKCdTYXZlTGFiZWwnKSB9fTwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L0JCU0YtRm9ybT5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbiAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICA8IS0tZGVsZXRlIE1vZGFsLS0+XHJcbiAgPEJCU0YtQ29uZmlybWF0aW9uTW9kYWxcclxuICAgICpuZ0lmPVwiZGVsZXRlQ29udHJvbExvYWRlZFwiXHJcbiAgICBbb3B0aW9uc109XCJkZWxldGVDb25maXJtYXRpb25PcHRpb25zXCJcclxuICAgIGlkPVwiQ29uZmlybWF0aW9uTW9kYWxDb250cm9sXCJcclxuICAgICNDb25maXJtYXRpb25Nb2RhbENvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG48L2Jsb2NrLXVpPlxyXG4iXX0=
|