@bnsights/bbsf-admin-portal 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/{esm2020 → esm2022}/bnsights-bbsf-admin-portal.mjs +4 -4
- package/{esm2020 → esm2022}/lib/Pages/ActiveDirectories/active-directories.component.mjs +14 -14
- package/esm2022/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +421 -0
- package/esm2022/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +528 -0
- package/{esm2020 → esm2022}/lib/Pages/ActiveDirectories/active-directory-routing.module.mjs +29 -29
- package/esm2022/lib/Pages/ActiveDirectories/active-directory.module.mjs +108 -0
- package/esm2022/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +23 -0
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/aside/aside.component.mjs +65 -65
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/content/content.component.mjs +31 -31
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/footer/footer.component.mjs +32 -32
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/header/header.component.mjs +57 -57
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/header/page-title/page-title.component.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/scripts-init/scripts-init.component.mjs +58 -58
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/subheader/subheader.component.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/subheader/subheader.module.mjs +26 -26
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/toolbar/toolbar.component.mjs +41 -41
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/toolbar/toolbar.module.mjs +25 -25
- package/{esm2020 → esm2022}/lib/Pages/_layout/components/topbar/topbar.component.mjs +71 -71
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/activation/activation.component.mjs +92 -92
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/anonymouslayout-routing.module.mjs +37 -37
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/anonymouslayout.component.mjs +54 -54
- package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.module.mjs +100 -0
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/error/error.component.mjs +48 -48
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.mjs +59 -59
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/login/login.component.mjs +94 -94
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/rest-password/rest-password.component.mjs +90 -90
- package/{esm2020 → esm2022}/lib/Pages/anonymouslayout/upload-license/upload-license.component.mjs +71 -71
- package/{esm2020 → esm2022}/lib/Pages/authentication/auth-callback/auth-callback.component.mjs +43 -43
- package/{esm2020 → esm2022}/lib/Pages/authentication/authentication.component.mjs +15 -15
- package/{esm2020 → esm2022}/lib/Pages/authentication/authentication.module.mjs +41 -41
- package/{esm2020 → esm2022}/lib/Pages/authentication/authentication.routing.mjs +31 -31
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +330 -0
- package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +157 -0
- package/esm2022/lib/Pages/configurations/configuration/configuration.component.mjs +801 -0
- package/{esm2020 → esm2022}/lib/Pages/configurations/configurations.component.mjs +15 -15
- package/esm2022/lib/Pages/configurations/configurations.module.mjs +104 -0
- package/{esm2020 → esm2022}/lib/Pages/configurations/configurations.routing.mjs +41 -41
- package/{esm2020 → esm2022}/lib/Pages/configurations/index.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/core/auth.module.mjs +30 -30
- package/esm2022/lib/Pages/core/authentication/admin.guard.mjs +17 -0
- package/{esm2020 → esm2022}/lib/Pages/core/authentication/auth.guard.mjs +46 -46
- package/esm2022/lib/Pages/core/authentication/auth.service.mjs +147 -0
- package/esm2022/lib/Pages/departments/department/department.component.mjs +220 -0
- package/esm2022/lib/Pages/departments/department-info/department-info.component.mjs +185 -0
- package/{esm2020 → esm2022}/lib/Pages/departments/departments-routing.module.mjs +27 -27
- package/{esm2020 → esm2022}/lib/Pages/departments/departments.component.mjs +15 -15
- package/esm2022/lib/Pages/departments/departments.module.mjs +94 -0
- package/esm2022/lib/Pages/documents/add-document/add-document.component.mjs +136 -0
- package/esm2022/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +148 -0
- package/{esm2020 → esm2022}/lib/Pages/documents/document-template-info/document-template-info.component.mjs +332 -332
- package/esm2022/lib/Pages/documents/document-templates/document-templates.component.mjs +437 -0
- package/{esm2020 → esm2022}/lib/Pages/documents/documents.component.mjs +15 -15
- package/esm2022/lib/Pages/documents/documents.module.mjs +114 -0
- package/esm2022/lib/Pages/documents/documents.routing.mjs +37 -0
- package/esm2022/lib/Pages/documents/edit-document/edit-document.component.mjs +169 -0
- package/{esm2020 → esm2022}/lib/Pages/documents/edit-document-template/edit-document-template.component.mjs +123 -123
- package/{esm2020 → esm2022}/lib/Pages/empty-data/empty-data.component.mjs +31 -31
- package/{esm2020 → esm2022}/lib/Pages/empty-data/empty-data.module.mjs +28 -28
- package/esm2022/lib/Pages/helpCenter/help-center/help-center.component.mjs +294 -0
- package/esm2022/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +43 -0
- package/{esm2020 → esm2022}/lib/Pages/helpCenter/help-center-routing.module.mjs +31 -31
- package/esm2022/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +242 -0
- package/esm2022/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +243 -0
- package/esm2022/lib/Pages/helpCenter/help-center.module.mjs +99 -0
- package/{esm2020 → esm2022}/lib/Pages/helpCenter/help-centers.component.mjs +15 -15
- package/{esm2020 → esm2022}/lib/Pages/home/filter-pipe.mjs +23 -23
- package/esm2022/lib/Pages/home/home.component.mjs +158 -0
- package/esm2022/lib/Pages/home/home.module.mjs +48 -0
- package/esm2022/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +443 -0
- package/esm2022/lib/Pages/impersonation-rules/impersonation-rules.module.mjs +95 -0
- package/esm2022/lib/Pages/jobs/jobs/jobs.component.mjs +223 -0
- package/esm2022/lib/Pages/jobs/jobs.module.mjs +87 -0
- package/{esm2020 → esm2022}/lib/Pages/license/license/license.component.mjs +163 -163
- package/esm2022/lib/Pages/license/license.module.mjs +71 -0
- package/{esm2020 → esm2022}/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.mjs +215 -215
- package/esm2022/lib/Pages/localizations/localizations.component.mjs +516 -0
- package/esm2022/lib/Pages/localizations/localizations.module.mjs +79 -0
- package/{esm2020 → esm2022}/lib/Pages/logs/log/log.component.mjs +93 -93
- package/{esm2020 → esm2022}/lib/Pages/logs/logs-routing.module.mjs +27 -27
- package/{esm2020 → esm2022}/lib/Pages/logs/logs.component.mjs +15 -15
- package/esm2022/lib/Pages/logs/logs.module.mjs +87 -0
- package/esm2022/lib/Pages/lookups/lookup/lookup.component.mjs +367 -0
- package/esm2022/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +187 -0
- package/esm2022/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +297 -0
- package/{esm2020 → esm2022}/lib/Pages/lookups/lookups-routing.module.mjs +29 -29
- package/{esm2020 → esm2022}/lib/Pages/lookups/lookups.component.mjs +15 -15
- package/esm2022/lib/Pages/lookups/lookups.module.mjs +100 -0
- package/esm2022/lib/Pages/notifications/add-notification/add-notification.component.mjs +104 -0
- package/{esm2020 → esm2022}/lib/Pages/notifications/edit-email/edit-email.component.mjs +158 -158
- package/esm2022/lib/Pages/notifications/edit-notification/edit-notification.component.mjs +133 -0
- package/{esm2020 → esm2022}/lib/Pages/notifications/edit-sms/edit-sms.component.mjs +115 -115
- package/esm2022/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +148 -0
- package/esm2022/lib/Pages/notifications/notifications-routing.module.mjs +39 -0
- package/{esm2020 → esm2022}/lib/Pages/notifications/notifications.component.mjs +15 -15
- package/esm2022/lib/Pages/notifications/notifications.module.mjs +101 -0
- package/{esm2020 → esm2022}/lib/Pages/notifications/template-info/template-info.component.mjs +391 -391
- package/esm2022/lib/Pages/notifications/templates/templates.component.mjs +495 -0
- package/esm2022/lib/Pages/providers/provider/provider.component.mjs +615 -0
- package/{esm2020 → esm2022}/lib/Pages/providers/providers-routing.module.mjs +27 -27
- package/{esm2020 → esm2022}/lib/Pages/providers/providers.component.mjs +15 -15
- package/esm2022/lib/Pages/providers/providers.module.mjs +91 -0
- package/esm2022/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +334 -0
- package/{esm2020 → esm2022}/lib/Pages/publicHolidays/public-holidays-routing.module.mjs +25 -25
- package/{esm2020 → esm2022}/lib/Pages/publicHolidays/public-holidays.component.mjs +15 -15
- package/esm2022/lib/Pages/publicHolidays/public-holidays.module.mjs +94 -0
- package/esm2022/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +187 -0
- package/esm2022/lib/Pages/roles/permissions/permissions.component.mjs +226 -0
- package/esm2022/lib/Pages/roles/permissionsets/permissionsets.component.mjs +277 -0
- package/{esm2020 → esm2022}/lib/Pages/roles/roles-routing.module.mjs +29 -29
- package/{esm2020 → esm2022}/lib/Pages/roles/roles.component.mjs +15 -15
- package/esm2022/lib/Pages/roles/roles.module.mjs +105 -0
- package/esm2022/lib/Pages/sectors/sector/sector.component.mjs +193 -0
- package/esm2022/lib/Pages/sectors/sector-info/sector-info.component.mjs +180 -0
- package/esm2022/lib/Pages/sectors/sectors-department-info/sectors-department-info.component.mjs +187 -0
- package/{esm2020 → esm2022}/lib/Pages/sectors/sectors-routing.module.mjs +29 -29
- package/{esm2020 → esm2022}/lib/Pages/sectors/sectors.component.mjs +15 -15
- package/esm2022/lib/Pages/sectors/sectors.module.mjs +96 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/Enums/ADType.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/Enums/Enums.mjs +54 -54
- package/{esm2020 → esm2022}/lib/Pages/shared/Enums/ProviderType.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/Enums/WFActivityType.mjs +11 -11
- package/{esm2020 → esm2022}/lib/Pages/shared/Enums/configuration/ConditionRHSType.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/Enums/configuration/authentecation-configuration.mjs +18 -18
- package/{esm2020 → esm2022}/lib/Pages/shared/Pipes/survey-date.pipe.mjs +22 -22
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/AccountService.service.mjs +55 -55
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/ActiveDirectoryService.service.mjs +51 -51
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/AnonymousLayoutService.service.mjs +29 -29
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/ConfigurationsService.service.mjs +61 -61
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/DepartmentService.service.mjs +46 -46
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/DocumentTemplateService.service.mjs +81 -81
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.mjs +37 -37
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/ErrorService.service.mjs +15 -15
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/GlobalErrorHandler.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/HelpCenterService.service.mjs +47 -47
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/HttpErrorInterceptor.service.mjs +47 -47
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/ImpersonationRuleService.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/JobsService.service.mjs +21 -21
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/LicenseService.service.mjs +24 -24
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/LogsService.mjs +24 -24
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/LookupGroupsService.service.mjs +33 -33
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/LookupService.service.mjs +67 -67
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/PermissionSetService.service.mjs +50 -50
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/PermissionsService.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/PublicHolidayService.service.mjs +39 -39
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/SectorService.service.mjs +46 -46
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/TemplateService.service.mjs +90 -90
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkFlowVersionService.service.mjs +24 -24
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowActivityService.service.mjs +54 -54
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowInstanceService.service.mjs +24 -24
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowLogVariablesService.service.mjs +24 -24
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowService.service.mjs +38 -38
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/WorkflowVariablesService.service.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/data.service.mjs +27 -27
- package/esm2022/lib/Pages/shared/Services/injectionModuleService.service.mjs +163 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/localizationsService.service .mjs +77 -77
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/provider.service.mjs +62 -62
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/survey-question.service.mjs +57 -57
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/survey.service.mjs +140 -140
- package/{esm2020 → esm2022}/lib/Pages/shared/Services/userService.service.mjs +80 -80
- package/{esm2020 → esm2022}/lib/Pages/shared/base.service.mjs +19 -19
- package/{esm2020 → esm2022}/lib/Pages/shared/components/AdDirective.mjs +16 -16
- package/{esm2020 → esm2022}/lib/Pages/shared/components/external-url/external-url.component.mjs +168 -168
- package/{esm2020 → esm2022}/lib/Pages/shared/components/no-results/no-results.component.mjs +19 -19
- package/esm2022/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +192 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.mjs +48 -48
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.mjs +50 -50
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.mjs +217 -217
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.mjs +47 -47
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.mjs +49 -49
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.mjs +50 -50
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.mjs +624 -624
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.mjs +47 -47
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.mjs +683 -683
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/preview/preview.component.mjs +138 -138
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.mjs +102 -102
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/result-question/result.component.mjs +56 -56
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/survey-info.component.mjs +532 -532
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.mjs +113 -113
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.mjs +114 -114
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey/survey.component.mjs +292 -292
- package/esm2022/lib/Pages/shared/components/survey-form/survey-form.component.mjs +696 -0
- package/esm2022/lib/Pages/shared/components/survey-form-item/survey-form-item.component.mjs +84 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/components/survey-layout/survey-layout.component.mjs +15 -15
- package/{esm2020 → esm2022}/lib/Pages/shared/config/environment.mjs +11 -11
- package/esm2022/lib/Pages/shared/constants.mjs +130 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/filter/filter.component.mjs +14 -14
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ADModels/ADMappingModel.mjs +3 -3
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ADModels/ActiveDirectoryAddEditModel.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/models/AccountModels/forgotPasswordModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.mjs +50 -50
- package/{esm2020 → esm2022}/lib/Pages/shared/models/DepartmentModels/DepartmentModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/DocumentsModels/DocumentExportDTO.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/DocumentsModels/DocumentHeaderAndFooterTemplate.mjs +9 -9
- package/{esm2020 → esm2022}/lib/Pages/shared/models/DocumentsModels/DocumentTemplateDTO.mjs +9 -9
- package/{esm2020 → esm2022}/lib/Pages/shared/models/DocumentsModels/DocumentTemplateInfoDTO.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/HelpCenterModels/HelpCenterItemModel.mjs +11 -11
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ImpersonationRuleModels/ParticipantModel.mjs +8 -8
- package/{esm2020 → esm2022}/lib/Pages/shared/models/InjectedModuleModel/InjectedModule.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/models/JobModels/JobCountsModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/LicenseModel/LicenseModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/LocalizationModels/EditResourceModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/LocalizationModels/LocalizationReplaceTextModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/LocalizationModels/UploadJsonVM.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/Lookups/LookupGroupModel.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/models/Lookups/LookupItem.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/Lookups/LookupModel.mjs +8 -8
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/EmailHeaderAndFooterTemplate.mjs +10 -10
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/EmailTemplateInfoDTO.mjs +11 -11
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/EmailTemplateTesterModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/SMSTemplateInfoDTO.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/SMSTemplateTesterModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/SendEmailTemplateModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/TemplateDTO.mjs +9 -9
- package/{esm2020 → esm2022}/lib/Pages/shared/models/NotificationsModels/TemplateEditViewModel.mjs +8 -8
- package/{esm2020 → esm2022}/lib/Pages/shared/models/PermissionsModels/PermissionModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/PermissionsModels/PermissionSetModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/DefaultProviderModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/EmailProviderTesterModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/ProviderAttributeModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/ProviderModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/ProviderModels/SMSProviderTesterModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/PublicHolidayModels/PublicHolidayModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SectorModels/SectorModel.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/DeleteSurveyDTO.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/add-survey-submissio.mjs +13 -13
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/add-survey.mjs +10 -10
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/model.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-field-options.mjs +6 -6
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-filed-value.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-form-options.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-publish.mjs +4 -4
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-question-option.mjs +17 -17
- package/{esm2020 → esm2022}/lib/Pages/shared/models/SurveyModels/survey-question.mjs +10 -10
- package/esm2022/lib/Pages/shared/models/SurveyModels/survey-utils.mjs +8 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/ActivationModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/AddUserModel.mjs +36 -36
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/DropdownsResponseModel.mjs +11 -11
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/EditUserModel.mjs +8 -8
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/IdentityModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/UserSearchParamDTO.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/UserModels/UsersIDRequestModel.mjs +5 -5
- package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/VariableLookupModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFActivityModel.mjs +16 -16
- package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFActivityOutcomeModel.mjs +2 -2
- package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFCreationModel.mjs +7 -7
- package/{esm2020 → esm2022}/lib/Pages/shared/models/WorkflowModels/WFVariableModel.mjs +8 -8
- package/{esm2020 → esm2022}/lib/Pages/shared/models/user.registration.mjs +7 -7
- package/esm2022/lib/Pages/shared/modules/public-survey.module.mjs +68 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/modules/survey-routing.module.mjs +39 -39
- package/esm2022/lib/Pages/shared/modules/survey.module.mjs +129 -0
- package/esm2022/lib/Pages/shared/shared.module.mjs +31 -0
- package/{esm2020 → esm2022}/lib/Pages/shared/stylesbundle.service.mjs +44 -44
- package/{esm2020 → esm2022}/lib/Pages/start/index/index.component.mjs +25 -25
- package/{esm2020 → esm2022}/lib/Pages/start/start-routing.module.mjs +22 -22
- package/{esm2020 → esm2022}/lib/Pages/start/start.module.mjs +31 -31
- package/esm2022/lib/Pages/users/users.component.mjs +806 -0
- package/esm2022/lib/Pages/users/users.module.mjs +86 -0
- package/{esm2020 → esm2022}/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.mjs +535 -535
- package/{esm2020 → esm2022}/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.mjs +840 -840
- package/{esm2020 → esm2022}/lib/Pages/workflows/instance-info/instance-info.component.mjs +302 -302
- package/esm2022/lib/Pages/workflows/tabs/tabs.component.mjs +793 -0
- package/{esm2020 → esm2022}/lib/Pages/workflows/version-info/version-info.component.mjs +137 -137
- package/esm2022/lib/Pages/workflows/workflow/workflow.component.mjs +209 -0
- package/{esm2020 → esm2022}/lib/Pages/workflows/workflows-routing.module.mjs +35 -35
- package/{esm2020 → esm2022}/lib/Pages/workflows/workflows.component.mjs +15 -15
- package/esm2022/lib/Pages/workflows/workflows.module.mjs +103 -0
- package/{esm2020 → esm2022}/lib/_metronic/configs/default-layout.config.mjs +95 -95
- package/{esm2020 → esm2022}/lib/_metronic/core/_utils/DomHelpers.mjs +270 -270
- package/{esm2020 → esm2022}/lib/_metronic/core/_utils/ElementAnimateUtil.mjs +166 -166
- package/esm2022/lib/_metronic/core/_utils/EventHandlerUtil.mjs +90 -0
- package/esm2022/lib/_metronic/core/_utils/_DOMEventHandlerUtil.mjs +49 -0
- package/esm2022/lib/_metronic/core/_utils/_DataUtil.mjs +48 -0
- package/{esm2020 → esm2022}/lib/_metronic/core/_utils/_ElementStyleUtil.mjs +16 -16
- package/{esm2020 → esm2022}/lib/_metronic/core/_utils/_TypesHelpers.mjs +48 -48
- package/{esm2020 → esm2022}/lib/_metronic/core/_utils/models/OffsetModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/_metronic/core/_utils/models/ViewPortModel.mjs +1 -1
- package/{esm2020 → esm2022}/lib/_metronic/core/components/MenuComponent.mjs +827 -827
- package/{esm2020 → esm2022}/lib/_metronic/core/components/_CookieComponent.mjs +52 -52
- package/esm2022/lib/_metronic/core/components/_DrawerComponent.mjs +288 -0
- package/{esm2020 → esm2022}/lib/_metronic/core/components/_ScrollComponent.mjs +252 -252
- package/esm2022/lib/_metronic/core/components/_ScrollTopComponent.mjs +113 -0
- package/esm2022/lib/_metronic/core/components/_ToggleComponent.mjs +157 -0
- package/{esm2020 → esm2022}/lib/_metronic/core/services/layout-init.service.mjs +155 -155
- package/{esm2020 → esm2022}/lib/_metronic/core/services/layout.service.mjs +150 -150
- package/esm2022/lib/_metronic/core/services/page-info.service.mjs +119 -0
- package/esm2022/lib/masterlayout-routing.module.mjs +41 -0
- package/{esm2020 → esm2022}/lib/masterlayout.component.mjs +118 -118
- package/esm2022/lib/masterlayout.module.mjs +188 -0
- package/{esm2020 → esm2022}/public-api.mjs +48 -48
- package/{fesm2020 → fesm2022}/bnsights-bbsf-admin-portal.mjs +26884 -26881
- package/fesm2022/bnsights-bbsf-admin-portal.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/Pages/ActiveDirectories/active-directories.component.d.ts +8 -8
- package/lib/Pages/ActiveDirectories/active-directory/active-directory.component.d.ts +85 -87
- package/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.d.ts +97 -99
- package/lib/Pages/ActiveDirectories/active-directory-routing.module.d.ts +7 -7
- package/lib/Pages/ActiveDirectories/active-directory.module.d.ts +26 -26
- package/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.d.ts +13 -13
- package/lib/Pages/_layout/components/aside/aside.component.d.ts +24 -24
- package/lib/Pages/_layout/components/content/content.component.d.ts +13 -13
- package/lib/Pages/_layout/components/footer/footer.component.d.ts +14 -14
- package/lib/Pages/_layout/components/header/header.component.d.ts +24 -24
- package/lib/Pages/_layout/components/header/page-title/page-title.component.d.ts +22 -22
- package/lib/Pages/_layout/components/scripts-init/scripts-init.component.d.ts +18 -18
- package/lib/Pages/_layout/components/subheader/subheader.component.d.ts +17 -17
- package/lib/Pages/_layout/components/subheader/subheader.module.d.ts +9 -9
- package/lib/Pages/_layout/components/toolbar/toolbar.component.d.ts +18 -18
- package/lib/Pages/_layout/components/toolbar/toolbar.module.d.ts +10 -10
- package/lib/Pages/_layout/components/topbar/topbar.component.d.ts +44 -44
- package/lib/Pages/anonymouslayout/activation/activation.component.d.ts +32 -32
- package/lib/Pages/anonymouslayout/anonymouslayout-routing.module.d.ts +7 -7
- package/lib/Pages/anonymouslayout/anonymouslayout.component.d.ts +24 -24
- package/lib/Pages/anonymouslayout/anonymouslayout.module.d.ts +21 -21
- package/lib/Pages/anonymouslayout/error/error.component.d.ts +25 -25
- package/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.d.ts +24 -24
- package/lib/Pages/anonymouslayout/login/login.component.d.ts +36 -36
- package/lib/Pages/anonymouslayout/rest-password/rest-password.component.d.ts +32 -32
- package/lib/Pages/anonymouslayout/upload-license/upload-license.component.d.ts +25 -25
- package/lib/Pages/authentication/auth-callback/auth-callback.component.d.ts +21 -21
- package/lib/Pages/authentication/authentication.component.d.ts +8 -8
- package/lib/Pages/authentication/authentication.module.d.ts +12 -12
- package/lib/Pages/authentication/authentication.routing.d.ts +7 -7
- package/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.d.ts +75 -75
- package/lib/Pages/configurations/auth-configuration/auth-configuration.component.d.ts +57 -58
- package/lib/Pages/configurations/configuration/configuration.component.d.ts +127 -129
- package/lib/Pages/configurations/configurations.component.d.ts +8 -8
- package/lib/Pages/configurations/configurations.module.d.ts +24 -24
- package/lib/Pages/configurations/configurations.routing.d.ts +7 -7
- package/lib/Pages/configurations/index.d.ts +6 -6
- package/lib/Pages/core/auth.module.d.ts +8 -8
- package/lib/Pages/core/authentication/admin.guard.d.ts +9 -9
- package/lib/Pages/core/authentication/auth.guard.d.ts +14 -14
- package/lib/Pages/core/authentication/auth.service.d.ts +35 -35
- package/lib/Pages/departments/department/department.component.d.ts +66 -68
- package/lib/Pages/departments/department-info/department-info.component.d.ts +58 -60
- package/lib/Pages/departments/departments-routing.module.d.ts +7 -7
- package/lib/Pages/departments/departments.component.d.ts +8 -8
- package/lib/Pages/departments/departments.module.d.ts +21 -21
- package/lib/Pages/documents/{add/add.component.d.ts → add-document/add-document.component.d.ts} +40 -40
- package/lib/Pages/documents/document-master-layouts/document-master-layouts.component.d.ts +51 -53
- package/lib/Pages/documents/document-template-info/document-template-info.component.d.ts +67 -67
- package/lib/Pages/documents/document-templates/document-templates.component.d.ts +87 -89
- package/lib/Pages/documents/documents.component.d.ts +8 -8
- package/lib/Pages/documents/documents.module.d.ts +27 -27
- package/lib/Pages/documents/documents.routing.d.ts +7 -7
- package/lib/Pages/documents/{edit/edit.component.d.ts → edit-document/edit-document.component.d.ts} +42 -42
- package/lib/Pages/documents/edit-document-template/edit-document-template.component.d.ts +39 -39
- package/lib/Pages/empty-data/empty-data.component.d.ts +14 -14
- package/lib/Pages/empty-data/empty-data.module.d.ts +8 -8
- package/lib/Pages/helpCenter/help-center/help-center.component.d.ts +69 -71
- package/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.d.ts +23 -23
- package/lib/Pages/helpCenter/help-center-routing.module.d.ts +7 -7
- package/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.d.ts +65 -67
- package/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.d.ts +64 -66
- package/lib/Pages/helpCenter/help-center.module.d.ts +25 -25
- package/lib/Pages/helpCenter/help-centers.component.d.ts +8 -8
- package/lib/Pages/home/filter-pipe.d.ts +7 -7
- package/lib/Pages/home/home.component.d.ts +19 -19
- package/lib/Pages/home/home.module.d.ts +14 -14
- package/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.d.ts +86 -88
- package/lib/Pages/impersonation-rules/impersonation-rules.module.d.ts +19 -19
- package/lib/Pages/jobs/jobs/jobs.component.d.ts +76 -77
- package/lib/Pages/jobs/jobs.module.d.ts +17 -17
- package/lib/Pages/license/license/license.component.d.ts +59 -59
- package/lib/Pages/license/license.module.d.ts +15 -15
- package/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.d.ts +53 -53
- package/lib/Pages/localizations/localizations.component.d.ts +108 -110
- package/lib/Pages/localizations/localizations.module.d.ts +18 -18
- package/lib/Pages/logs/log/log.component.d.ts +34 -34
- package/lib/Pages/logs/logs-routing.module.d.ts +7 -7
- package/lib/Pages/logs/logs.component.d.ts +8 -8
- package/lib/Pages/logs/logs.module.d.ts +20 -20
- package/lib/Pages/lookups/lookup/lookup.component.d.ts +83 -85
- package/lib/Pages/lookups/lookup-group/lookup-group.component.d.ts +58 -60
- package/lib/Pages/lookups/lookup-item/lookup-item.component.d.ts +84 -86
- package/lib/Pages/lookups/lookups-routing.module.d.ts +7 -7
- package/lib/Pages/lookups/lookups.component.d.ts +8 -8
- package/lib/Pages/lookups/lookups.module.d.ts +24 -24
- package/lib/Pages/notifications/{add/add.component.d.ts → add-notification/add-notification.component.d.ts} +33 -33
- package/lib/Pages/notifications/edit-email/edit-email.component.d.ts +43 -43
- package/lib/Pages/notifications/{edit/edit.component.d.ts → edit-notification/edit-notification.component.d.ts} +35 -35
- package/lib/Pages/notifications/edit-sms/edit-sms.component.d.ts +37 -37
- package/lib/Pages/notifications/master-layouts/master-layouts.component.d.ts +51 -53
- package/lib/Pages/notifications/notifications-routing.module.d.ts +7 -7
- package/lib/Pages/notifications/notifications.component.d.ts +8 -8
- package/lib/Pages/notifications/notifications.module.d.ts +28 -28
- package/lib/Pages/notifications/template-info/template-info.component.d.ts +86 -86
- package/lib/Pages/notifications/templates/templates.component.d.ts +100 -102
- package/lib/Pages/providers/provider/provider.component.d.ts +118 -120
- package/lib/Pages/providers/providers-routing.module.d.ts +7 -7
- package/lib/Pages/providers/providers.component.d.ts +8 -8
- package/lib/Pages/providers/providers.module.d.ts +21 -21
- package/lib/Pages/publicHolidays/public-holiday/public-holiday.component.d.ts +73 -75
- package/lib/Pages/publicHolidays/public-holidays-routing.module.d.ts +7 -7
- package/lib/Pages/publicHolidays/public-holidays.component.d.ts +8 -8
- package/lib/Pages/publicHolidays/public-holidays.module.d.ts +21 -21
- package/lib/Pages/roles/permission-set-info/permission-set-info.component.d.ts +56 -58
- package/lib/Pages/roles/permissions/permissions.component.d.ts +63 -65
- package/lib/Pages/roles/permissionsets/permissionsets.component.d.ts +67 -69
- package/lib/Pages/roles/roles-routing.module.d.ts +7 -7
- package/lib/Pages/roles/roles.component.d.ts +8 -8
- package/lib/Pages/roles/roles.module.d.ts +24 -24
- package/lib/Pages/sectors/sector/sector.component.d.ts +62 -64
- package/lib/Pages/sectors/sector-info/sector-info.component.d.ts +60 -62
- package/lib/Pages/sectors/{department-info/department-info.component.d.ts → sectors-department-info/sectors-department-info.component.d.ts} +61 -63
- package/lib/Pages/sectors/sectors-routing.module.d.ts +7 -7
- package/lib/Pages/sectors/sectors.component.d.ts +8 -8
- package/lib/Pages/sectors/sectors.module.d.ts +23 -23
- package/lib/Pages/shared/Enums/ADType.d.ts +4 -4
- package/lib/Pages/shared/Enums/Enums.d.ts +47 -47
- package/lib/Pages/shared/Enums/ProviderType.d.ts +5 -5
- package/lib/Pages/shared/Enums/WFActivityType.d.ts +10 -10
- package/lib/Pages/shared/Enums/configuration/ConditionRHSType.d.ts +4 -4
- package/lib/Pages/shared/Enums/configuration/authentecation-configuration.d.ts +15 -15
- package/lib/Pages/shared/Pipes/survey-date.pipe.d.ts +12 -12
- package/lib/Pages/shared/Services/AccountService.service.d.ts +21 -21
- package/lib/Pages/shared/Services/ActiveDirectoryService.service.d.ts +18 -18
- package/lib/Pages/shared/Services/AnonymousLayoutService.service.d.ts +17 -17
- package/lib/Pages/shared/Services/ConfigurationsService.service.d.ts +20 -20
- package/lib/Pages/shared/Services/DepartmentService.service.d.ts +18 -18
- package/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.d.ts +15 -15
- package/lib/Pages/shared/Services/DocumentTemplateService.service.d.ts +26 -26
- package/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.d.ts +15 -15
- package/lib/Pages/shared/Services/ErrorService.service.d.ts +8 -8
- package/lib/Pages/shared/Services/GlobalErrorHandler.service.d.ts +10 -10
- package/lib/Pages/shared/Services/HelpCenterService.service.d.ts +18 -18
- package/lib/Pages/shared/Services/HttpErrorInterceptor.service.d.ts +12 -12
- package/lib/Pages/shared/Services/ImpersonationRuleService.service.d.ts +15 -15
- package/lib/Pages/shared/Services/JobsService.service.d.ts +10 -10
- package/lib/Pages/shared/Services/LicenseService.service.d.ts +12 -12
- package/lib/Pages/shared/Services/LogsService.d.ts +10 -10
- package/lib/Pages/shared/Services/LookupGroupsService.service.d.ts +14 -14
- package/lib/Pages/shared/Services/LookupService.service.d.ts +25 -25
- package/lib/Pages/shared/Services/PermissionSetService.service.d.ts +19 -19
- package/lib/Pages/shared/Services/PermissionsService.service.d.ts +15 -15
- package/lib/Pages/shared/Services/PublicHolidayService.service.d.ts +16 -16
- package/lib/Pages/shared/Services/SectorService.service.d.ts +18 -18
- package/lib/Pages/shared/Services/TemplateService.service.d.ts +34 -34
- package/lib/Pages/shared/Services/WorkFlowVersionService.service.d.ts +10 -10
- package/lib/Pages/shared/Services/WorkflowActivityService.service.d.ts +19 -19
- package/lib/Pages/shared/Services/WorkflowInstanceService.service.d.ts +10 -10
- package/lib/Pages/shared/Services/WorkflowLogVariablesService.service.d.ts +10 -10
- package/lib/Pages/shared/Services/WorkflowService.service.d.ts +15 -15
- package/lib/Pages/shared/Services/WorkflowVariablesService.service.d.ts +15 -15
- package/lib/Pages/shared/Services/data.service.d.ts +9 -9
- package/lib/Pages/shared/Services/injectionModuleService.service.d.ts +50 -50
- package/lib/Pages/shared/Services/localizationsService.service .d.ts +28 -28
- package/lib/Pages/shared/Services/provider.service.d.ts +25 -25
- package/lib/Pages/shared/Services/survey-question.service.d.ts +19 -19
- package/lib/Pages/shared/Services/survey.service.d.ts +38 -38
- package/lib/Pages/shared/Services/userService.service.d.ts +29 -29
- package/lib/Pages/shared/base.service.d.ts +4 -4
- package/lib/Pages/shared/components/AdDirective.d.ts +8 -8
- package/lib/Pages/shared/components/external-url/external-url.component.d.ts +61 -61
- package/lib/Pages/shared/components/no-results/no-results.component.d.ts +10 -10
- package/lib/Pages/shared/components/survey/add-survey/add-survey.component.d.ts +40 -40
- package/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.d.ts +19 -19
- package/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.d.ts +19 -19
- package/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.d.ts +43 -43
- package/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.d.ts +19 -19
- package/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.d.ts +19 -19
- package/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.d.ts +19 -19
- package/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.d.ts +83 -83
- package/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.d.ts +19 -19
- package/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.d.ts +84 -84
- package/lib/Pages/shared/components/survey/survey-info/preview/preview.component.d.ts +40 -40
- package/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.d.ts +31 -31
- package/lib/Pages/shared/components/survey/survey-info/result-question/result.component.d.ts +27 -27
- package/lib/Pages/shared/components/survey/survey-info/survey-info.component.d.ts +119 -119
- package/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.d.ts +39 -39
- package/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.d.ts +32 -32
- package/lib/Pages/shared/components/survey/survey.component.d.ts +65 -65
- package/lib/Pages/shared/components/survey-form/survey-form.component.d.ts +41 -41
- package/lib/Pages/shared/components/survey-form-item/survey-form-item.component.d.ts +23 -23
- package/lib/Pages/shared/components/survey-layout/survey-layout.component.d.ts +8 -8
- package/lib/Pages/shared/config/environment.d.ts +1 -1
- package/lib/Pages/shared/constants.d.ts +129 -129
- package/lib/Pages/shared/filter/filter.component.d.ts +8 -8
- package/lib/Pages/shared/models/ADModels/ADMappingModel.d.ts +6 -6
- package/lib/Pages/shared/models/ADModels/ActiveDirectoryAddEditModel.d.ts +28 -28
- package/lib/Pages/shared/models/AccountModels/forgotPasswordModel.d.ts +3 -3
- package/lib/Pages/shared/models/ConfigurationModels/ConfigurationModel.d.ts +64 -64
- package/lib/Pages/shared/models/DepartmentModels/DepartmentModel.d.ts +9 -9
- package/lib/Pages/shared/models/DepartmentModels/DepartmentUsersIDRequestModel.d.ts +4 -4
- package/lib/Pages/shared/models/DocumentsModels/DocumentExportDTO.d.ts +8 -8
- package/lib/Pages/shared/models/DocumentsModels/DocumentHeaderAndFooterTemplate.d.ts +16 -16
- package/lib/Pages/shared/models/DocumentsModels/DocumentTemplateDTO.d.ts +13 -13
- package/lib/Pages/shared/models/DocumentsModels/DocumentTemplateInfoDTO.d.ts +7 -7
- package/lib/Pages/shared/models/HelpCenterModels/HelpCenterItemModel.d.ts +17 -17
- package/lib/Pages/shared/models/ImpersonationRuleModels/ImpersonationRuleModel.d.ts +9 -9
- package/lib/Pages/shared/models/ImpersonationRuleModels/ParticipantModel.d.ts +15 -15
- package/lib/Pages/shared/models/InjectedModuleModel/InjectedModule.d.ts +5 -5
- package/lib/Pages/shared/models/JobModels/JobCountsModel.d.ts +8 -8
- package/lib/Pages/shared/models/LicenseModel/LicenseModel.d.ts +5 -5
- package/lib/Pages/shared/models/LocalizationModels/EditResourceModel.d.ts +7 -7
- package/lib/Pages/shared/models/LocalizationModels/LocalizationReplaceTextModel.d.ts +9 -9
- package/lib/Pages/shared/models/LocalizationModels/UploadJsonVM.d.ts +5 -5
- package/lib/Pages/shared/models/Lookups/LookupGroupModel.d.ts +5 -5
- package/lib/Pages/shared/models/Lookups/LookupItem.d.ts +13 -13
- package/lib/Pages/shared/models/Lookups/LookupModel.d.ts +13 -13
- package/lib/Pages/shared/models/NotificationsModels/EmailHeaderAndFooterTemplate.d.ts +9 -9
- package/lib/Pages/shared/models/NotificationsModels/EmailTemplateInfoDTO.d.ts +15 -15
- package/lib/Pages/shared/models/NotificationsModels/EmailTemplateTesterModel.d.ts +9 -9
- package/lib/Pages/shared/models/NotificationsModels/SMSTemplateInfoDTO.d.ts +9 -9
- package/lib/Pages/shared/models/NotificationsModels/SMSTemplateTesterModel.d.ts +9 -9
- package/lib/Pages/shared/models/NotificationsModels/SendEmailTemplateModel.d.ts +8 -8
- package/lib/Pages/shared/models/NotificationsModels/TemplateDTO.d.ts +22 -22
- package/lib/Pages/shared/models/NotificationsModels/TemplateEditViewModel.d.ts +11 -11
- package/lib/Pages/shared/models/PermissionsModels/PermissionModel.d.ts +8 -8
- package/lib/Pages/shared/models/PermissionsModels/PermissionSetModel.d.ts +10 -10
- package/lib/Pages/shared/models/PermissionsModels/PermissionSetUsersIDRequestModel.d.ts +4 -4
- package/lib/Pages/shared/models/ProviderModels/DefaultProviderModel.d.ts +6 -6
- package/lib/Pages/shared/models/ProviderModels/EmailProviderTesterModel.d.ts +7 -7
- package/lib/Pages/shared/models/ProviderModels/ProviderAttributeModel.d.ts +7 -7
- package/lib/Pages/shared/models/ProviderModels/ProviderModel.d.ts +13 -13
- package/lib/Pages/shared/models/ProviderModels/SMSProviderTesterModel.d.ts +6 -6
- package/lib/Pages/shared/models/PublicHolidayModels/PublicHolidayModel.d.ts +15 -15
- package/lib/Pages/shared/models/SectorModels/SectorDepartmentModel.d.ts +4 -4
- package/lib/Pages/shared/models/SectorModels/SectorModel.d.ts +6 -6
- package/lib/Pages/shared/models/SurveyModels/DeleteSurveyDTO.d.ts +3 -3
- package/lib/Pages/shared/models/SurveyModels/add-survey-submissio.d.ts +21 -21
- package/lib/Pages/shared/models/SurveyModels/add-survey.d.ts +18 -18
- package/lib/Pages/shared/models/SurveyModels/model.d.ts +3 -3
- package/lib/Pages/shared/models/SurveyModels/survey-field-options.d.ts +24 -24
- package/lib/Pages/shared/models/SurveyModels/survey-filed-value.d.ts +22 -22
- package/lib/Pages/shared/models/SurveyModels/survey-form-options.d.ts +8 -8
- package/lib/Pages/shared/models/SurveyModels/survey-publish.d.ts +15 -15
- package/lib/Pages/shared/models/SurveyModels/survey-question-option.d.ts +9 -9
- package/lib/Pages/shared/models/SurveyModels/survey-question.d.ts +21 -21
- package/lib/Pages/shared/models/SurveyModels/survey-utils.d.ts +5 -5
- package/lib/Pages/shared/models/UserModels/ActivationModel.d.ts +10 -10
- package/lib/Pages/shared/models/UserModels/AddUserModel.d.ts +33 -33
- package/lib/Pages/shared/models/UserModels/DropdownsResponseModel.d.ts +9 -9
- package/lib/Pages/shared/models/UserModels/EditUserModel.d.ts +25 -25
- package/lib/Pages/shared/models/UserModels/IdentityModel.d.ts +9 -9
- package/lib/Pages/shared/models/UserModels/UserSearchParamDTO.d.ts +8 -8
- package/lib/Pages/shared/models/UserModels/UsersIDRequestModel.d.ts +3 -3
- package/lib/Pages/shared/models/WorkflowModels/VariableLookupModel.d.ts +9 -9
- package/lib/Pages/shared/models/WorkflowModels/WFActivityModel.d.ts +40 -40
- package/lib/Pages/shared/models/WorkflowModels/WFActivityOutcomeModel.d.ts +13 -13
- package/lib/Pages/shared/models/WorkflowModels/WFActivityVariablesModel.d.ts +13 -13
- package/lib/Pages/shared/models/WorkflowModels/WFCreationModel.d.ts +10 -10
- package/lib/Pages/shared/models/WorkflowModels/WFVariableModel.d.ts +23 -23
- package/lib/Pages/shared/models/user.registration.d.ts +6 -6
- package/lib/Pages/shared/modules/public-survey.module.d.ts +15 -15
- package/lib/Pages/shared/modules/survey-routing.module.d.ts +7 -7
- package/lib/Pages/shared/modules/survey.module.d.ts +35 -35
- package/lib/Pages/shared/shared.module.d.ts +8 -8
- package/lib/Pages/shared/stylesbundle.service.d.ts +9 -9
- package/lib/Pages/start/index/index.component.d.ts +15 -15
- package/lib/Pages/start/start-routing.module.d.ts +7 -7
- package/lib/Pages/start/start.module.d.ts +11 -11
- package/lib/Pages/users/users.component.d.ts +138 -139
- package/lib/Pages/users/users.module.d.ts +18 -18
- package/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.d.ts +77 -77
- package/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.d.ts +82 -82
- package/lib/Pages/workflows/instance-info/instance-info.component.d.ts +81 -81
- package/lib/Pages/workflows/tabs/tabs.component.d.ts +126 -128
- package/lib/Pages/workflows/version-info/version-info.component.d.ts +41 -41
- package/lib/Pages/workflows/workflow/workflow.component.d.ts +54 -55
- package/lib/Pages/workflows/workflows-routing.module.d.ts +7 -7
- package/lib/Pages/workflows/workflows.component.d.ts +8 -8
- package/lib/Pages/workflows/workflows.module.d.ts +27 -27
- package/lib/_metronic/configs/default-layout.config.d.ts +139 -139
- package/lib/_metronic/core/_utils/DomHelpers.d.ts +26 -26
- package/lib/_metronic/core/_utils/ElementAnimateUtil.d.ts +13 -13
- package/lib/_metronic/core/_utils/EventHandlerUtil.d.ts +20 -20
- package/lib/_metronic/core/_utils/_DOMEventHandlerUtil.d.ts +6 -6
- package/lib/_metronic/core/_utils/_DataUtil.d.ts +8 -8
- package/lib/_metronic/core/_utils/_ElementStyleUtil.d.ts +5 -5
- package/lib/_metronic/core/_utils/_TypesHelpers.d.ts +10 -10
- package/lib/_metronic/core/_utils/models/OffsetModel.d.ts +4 -4
- package/lib/_metronic/core/_utils/models/ViewPortModel.d.ts +4 -4
- package/lib/_metronic/core/components/MenuComponent.d.ts +88 -88
- package/lib/_metronic/core/components/_CookieComponent.d.ts +25 -25
- package/lib/_metronic/core/components/_DrawerComponent.d.ts +49 -49
- package/lib/_metronic/core/components/_ScrollComponent.d.ts +31 -31
- package/lib/_metronic/core/components/_ScrollTopComponent.d.ts +24 -24
- package/lib/_metronic/core/components/_ToggleComponent.d.ts +36 -36
- package/lib/_metronic/core/services/layout-init.service.d.ts +18 -18
- package/lib/_metronic/core/services/layout.service.d.ts +38 -38
- package/lib/_metronic/core/services/page-info.service.d.ts +32 -32
- package/lib/masterlayout-routing.module.d.ts +11 -13
- package/lib/masterlayout.component.d.ts +63 -63
- package/lib/masterlayout.module.d.ts +34 -34
- package/package.json +25 -30
- package/public-api.d.ts +41 -41
- package/src/lib/assets/images/menu/Tools.svg +10 -4
- package/src/lib/assets/images/menu/authentication.svg +9 -0
- package/src/lib/assets/sass/style-rtl.scss +3 -3
- package/src/lib/assets/sass/style.scss +3 -3
- package/bnsights-bbsf-admin-portal-1.1.2.tgz +0 -0
- package/esm2020/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +0 -421
- package/esm2020/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +0 -528
- package/esm2020/lib/Pages/ActiveDirectories/active-directory.module.mjs +0 -108
- package/esm2020/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +0 -23
- package/esm2020/lib/Pages/anonymouslayout/anonymouslayout.module.mjs +0 -100
- package/esm2020/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +0 -330
- package/esm2020/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +0 -157
- package/esm2020/lib/Pages/configurations/configuration/configuration.component.mjs +0 -801
- package/esm2020/lib/Pages/configurations/configurations.module.mjs +0 -104
- package/esm2020/lib/Pages/core/authentication/admin.guard.mjs +0 -17
- package/esm2020/lib/Pages/core/authentication/auth.service.mjs +0 -147
- package/esm2020/lib/Pages/departments/department/department.component.mjs +0 -220
- package/esm2020/lib/Pages/departments/department-info/department-info.component.mjs +0 -185
- package/esm2020/lib/Pages/departments/departments.module.mjs +0 -94
- package/esm2020/lib/Pages/documents/add/add.component.mjs +0 -136
- package/esm2020/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +0 -148
- package/esm2020/lib/Pages/documents/document-templates/document-templates.component.mjs +0 -437
- package/esm2020/lib/Pages/documents/documents.module.mjs +0 -114
- package/esm2020/lib/Pages/documents/documents.routing.mjs +0 -37
- package/esm2020/lib/Pages/documents/edit/edit.component.mjs +0 -169
- package/esm2020/lib/Pages/helpCenter/help-center/help-center.component.mjs +0 -294
- package/esm2020/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +0 -43
- package/esm2020/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +0 -242
- package/esm2020/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +0 -243
- package/esm2020/lib/Pages/helpCenter/help-center.module.mjs +0 -98
- package/esm2020/lib/Pages/home/home.component.mjs +0 -153
- package/esm2020/lib/Pages/home/home.module.mjs +0 -48
- package/esm2020/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +0 -443
- package/esm2020/lib/Pages/impersonation-rules/impersonation-rules.module.mjs +0 -95
- package/esm2020/lib/Pages/jobs/jobs/jobs.component.mjs +0 -223
- package/esm2020/lib/Pages/jobs/jobs.module.mjs +0 -87
- package/esm2020/lib/Pages/license/license.module.mjs +0 -71
- package/esm2020/lib/Pages/localizations/localizations.component.mjs +0 -516
- package/esm2020/lib/Pages/localizations/localizations.module.mjs +0 -79
- package/esm2020/lib/Pages/logs/logs.module.mjs +0 -87
- package/esm2020/lib/Pages/lookups/lookup/lookup.component.mjs +0 -367
- package/esm2020/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +0 -187
- package/esm2020/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +0 -297
- package/esm2020/lib/Pages/lookups/lookups.module.mjs +0 -100
- package/esm2020/lib/Pages/notifications/add/add.component.mjs +0 -104
- package/esm2020/lib/Pages/notifications/edit/edit.component.mjs +0 -133
- package/esm2020/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +0 -148
- package/esm2020/lib/Pages/notifications/notifications-routing.module.mjs +0 -39
- package/esm2020/lib/Pages/notifications/notifications.module.mjs +0 -101
- package/esm2020/lib/Pages/notifications/templates/templates.component.mjs +0 -495
- package/esm2020/lib/Pages/providers/provider/provider.component.mjs +0 -615
- package/esm2020/lib/Pages/providers/providers.module.mjs +0 -91
- package/esm2020/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +0 -334
- package/esm2020/lib/Pages/publicHolidays/public-holidays.module.mjs +0 -94
- package/esm2020/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +0 -187
- package/esm2020/lib/Pages/roles/permissions/permissions.component.mjs +0 -226
- package/esm2020/lib/Pages/roles/permissionsets/permissionsets.component.mjs +0 -277
- package/esm2020/lib/Pages/roles/roles.module.mjs +0 -105
- package/esm2020/lib/Pages/sectors/department-info/department-info.component.mjs +0 -187
- package/esm2020/lib/Pages/sectors/sector/sector.component.mjs +0 -193
- package/esm2020/lib/Pages/sectors/sector-info/sector-info.component.mjs +0 -180
- package/esm2020/lib/Pages/sectors/sectors.module.mjs +0 -96
- package/esm2020/lib/Pages/shared/Enums/WFVariableDataType.mjs +0 -14
- package/esm2020/lib/Pages/shared/Services/injectionModuleService.service.mjs +0 -163
- package/esm2020/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +0 -192
- package/esm2020/lib/Pages/shared/components/survey-form/survey-form.component.mjs +0 -696
- package/esm2020/lib/Pages/shared/components/survey-form-item/survey-form-item.component.mjs +0 -84
- package/esm2020/lib/Pages/shared/constants.mjs +0 -130
- package/esm2020/lib/Pages/shared/models/SurveyModels/survey-utils.mjs +0 -8
- package/esm2020/lib/Pages/shared/modules/public-survey.module.mjs +0 -68
- package/esm2020/lib/Pages/shared/modules/survey.module.mjs +0 -126
- package/esm2020/lib/Pages/shared/shared.module.mjs +0 -31
- package/esm2020/lib/Pages/users/users.component.mjs +0 -806
- package/esm2020/lib/Pages/users/users.module.mjs +0 -86
- package/esm2020/lib/Pages/workflows/tabs/tabs.component.mjs +0 -793
- package/esm2020/lib/Pages/workflows/workflow/workflow.component.mjs +0 -209
- package/esm2020/lib/Pages/workflows/workflows.module.mjs +0 -103
- package/esm2020/lib/_metronic/core/_utils/EventHandlerUtil.mjs +0 -90
- package/esm2020/lib/_metronic/core/_utils/_DOMEventHandlerUtil.mjs +0 -49
- package/esm2020/lib/_metronic/core/_utils/_DataUtil.mjs +0 -48
- package/esm2020/lib/_metronic/core/components/_DrawerComponent.mjs +0 -290
- package/esm2020/lib/_metronic/core/components/_ScrollTopComponent.mjs +0 -113
- package/esm2020/lib/_metronic/core/components/_ToggleComponent.mjs +0 -157
- package/esm2020/lib/_metronic/core/services/page-info.service.mjs +0 -119
- package/esm2020/lib/masterlayout-routing.module.mjs +0 -45
- package/esm2020/lib/masterlayout.module.mjs +0 -188
- package/fesm2015/bnsights-bbsf-admin-portal.mjs +0 -27293
- package/fesm2015/bnsights-bbsf-admin-portal.mjs.map +0 -1
- package/fesm2020/bnsights-bbsf-admin-portal.mjs.map +0 -1
- package/lib/Pages/shared/Enums/WFVariableDataType.d.ts +0 -12
|
@@ -1,827 +1,827 @@
|
|
|
1
|
-
import { createPopper } from '@popperjs/core';
|
|
2
|
-
import { getAttributeValueByBreakpoint, getElementChild, getElementParents, getHighestZindex, insertAfterElement, throttle } from "../_utils/DomHelpers";
|
|
3
|
-
import { EventHandlerUtil } from "../_utils/EventHandlerUtil";
|
|
4
|
-
import { DataUtil } from "../_utils/_DataUtil";
|
|
5
|
-
import { DOMEventHandlerUtil } from "../_utils/_DOMEventHandlerUtil";
|
|
6
|
-
import { ElementStyleUtil } from "../_utils/_ElementStyleUtil";
|
|
7
|
-
import { getUniqueIdWithPrefix } from "../_utils/_TypesHelpers";
|
|
8
|
-
import { ElementAnimateUtil } from '../_utils/ElementAnimateUtil';
|
|
9
|
-
const defaultMenuOptions = {
|
|
10
|
-
dropdown: {
|
|
11
|
-
hoverTimeout: 200,
|
|
12
|
-
zindex: 105,
|
|
13
|
-
},
|
|
14
|
-
accordion: {
|
|
15
|
-
slideSpeed: 250,
|
|
16
|
-
expand: false,
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
class MenuComponent {
|
|
20
|
-
constructor(_element, options) {
|
|
21
|
-
this.triggerElement = null;
|
|
22
|
-
// Set external trigger element
|
|
23
|
-
this._setTriggerElement = () => {
|
|
24
|
-
const target = document.querySelector(`[data-kt-menu-target="#${this.element.getAttribute('id')}"`);
|
|
25
|
-
if (target) {
|
|
26
|
-
this.triggerElement = target;
|
|
27
|
-
}
|
|
28
|
-
else if (this.element.closest('[data-kt-menu-trigger]')) {
|
|
29
|
-
this.triggerElement = this.element.closest('[data-kt-menu-trigger]');
|
|
30
|
-
}
|
|
31
|
-
else if (this.element.parentNode &&
|
|
32
|
-
getElementChild(this.element.parentNode, '[data-kt-menu-trigger]')) {
|
|
33
|
-
const child = getElementChild(this.element.parentNode, '[data-kt-menu-trigger]');
|
|
34
|
-
if (child) {
|
|
35
|
-
this.triggerElement = child;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
if (this.triggerElement) {
|
|
39
|
-
DataUtil.set(this.triggerElement, 'menu', this);
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
// Test if menu has external trigger element
|
|
43
|
-
this._isTriggerElement = (item) => {
|
|
44
|
-
return this.triggerElement === item;
|
|
45
|
-
};
|
|
46
|
-
// Get item option(through html attributes)
|
|
47
|
-
this._getItemOption = (item, name) => {
|
|
48
|
-
let value = null;
|
|
49
|
-
if (item && item.hasAttribute('data-kt-menu-' + name)) {
|
|
50
|
-
const attr = item.getAttribute('data-kt-menu-' + name) || '';
|
|
51
|
-
value = getAttributeValueByBreakpoint(attr);
|
|
52
|
-
if (value !== null && String(value) === 'true') {
|
|
53
|
-
value = true;
|
|
54
|
-
}
|
|
55
|
-
else if (value !== null && String(value) === 'false') {
|
|
56
|
-
value = false;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
return value;
|
|
60
|
-
};
|
|
61
|
-
// Get item element
|
|
62
|
-
this._getItemElement = (_element) => {
|
|
63
|
-
// Element is the external trigger element
|
|
64
|
-
if (this._isTriggerElement(_element)) {
|
|
65
|
-
return _element;
|
|
66
|
-
}
|
|
67
|
-
// Element has item toggler attribute
|
|
68
|
-
if (_element.hasAttribute('data-kt-menu-trigger')) {
|
|
69
|
-
return _element;
|
|
70
|
-
}
|
|
71
|
-
// Element has item DOM reference in it's data storage
|
|
72
|
-
const itemElement = DataUtil.get(_element, 'item');
|
|
73
|
-
if (itemElement) {
|
|
74
|
-
return itemElement;
|
|
75
|
-
}
|
|
76
|
-
// Item is parent of element
|
|
77
|
-
const item = _element.closest('.menu-item[data-kt-menu-trigger]');
|
|
78
|
-
if (item) {
|
|
79
|
-
return item;
|
|
80
|
-
}
|
|
81
|
-
// Element's parent has item DOM reference in it's data storage
|
|
82
|
-
const sub = _element.closest('.menu-sub');
|
|
83
|
-
if (sub) {
|
|
84
|
-
const subItem = DataUtil.get(sub, 'item');
|
|
85
|
-
if (subItem) {
|
|
86
|
-
return subItem;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
// Get item parent element
|
|
91
|
-
this._getItemParentElement = (item) => {
|
|
92
|
-
const sub = item.closest('.menu-sub');
|
|
93
|
-
if (!sub) {
|
|
94
|
-
return null;
|
|
95
|
-
}
|
|
96
|
-
const subItem = DataUtil.get(sub, 'item');
|
|
97
|
-
if (subItem) {
|
|
98
|
-
return subItem;
|
|
99
|
-
}
|
|
100
|
-
const parentItem = sub.closest('.menu-item[data-kt-menu-trigger]');
|
|
101
|
-
if (sub && parentItem) {
|
|
102
|
-
return parentItem;
|
|
103
|
-
}
|
|
104
|
-
return null;
|
|
105
|
-
};
|
|
106
|
-
// Get item parent elements
|
|
107
|
-
this._getItemParentElements = (item) => {
|
|
108
|
-
const parents = [];
|
|
109
|
-
let parent;
|
|
110
|
-
let i = 0;
|
|
111
|
-
let buffer = item;
|
|
112
|
-
do {
|
|
113
|
-
parent = this._getItemParentElement(buffer);
|
|
114
|
-
if (parent) {
|
|
115
|
-
parents.push(parent);
|
|
116
|
-
buffer = parent;
|
|
117
|
-
}
|
|
118
|
-
i++;
|
|
119
|
-
} while (parent !== null && i < 20);
|
|
120
|
-
if (this.triggerElement) {
|
|
121
|
-
parents.unshift(this.triggerElement);
|
|
122
|
-
}
|
|
123
|
-
return parents;
|
|
124
|
-
};
|
|
125
|
-
// Prepare popper config for dropdown(see: https://popper.js.org/docs/v2/)
|
|
126
|
-
this._getDropdownPopperConfig = (item) => {
|
|
127
|
-
// Placement
|
|
128
|
-
const placementOption = this._getItemOption(item, 'placement');
|
|
129
|
-
let placement = 'right';
|
|
130
|
-
if (placementOption) {
|
|
131
|
-
placement = placementOption;
|
|
132
|
-
}
|
|
133
|
-
// Flip
|
|
134
|
-
const flipValue = this._getItemOption(item, 'flip');
|
|
135
|
-
const flip = flipValue ? flipValue.toString().split(',') : [];
|
|
136
|
-
// Offset
|
|
137
|
-
const offsetValue = this._getItemOption(item, 'offset');
|
|
138
|
-
const offset = offsetValue ? offsetValue.toString().split(',') : [];
|
|
139
|
-
// Strategy
|
|
140
|
-
const strategy = this._getItemOption(item, 'overflow') === true ? 'absolute' : 'fixed';
|
|
141
|
-
var altAxis = this._getItemOption(item, 'flip') !== false;
|
|
142
|
-
return {
|
|
143
|
-
placement: placement,
|
|
144
|
-
strategy: strategy,
|
|
145
|
-
modifiers: [{
|
|
146
|
-
name: 'offset',
|
|
147
|
-
options: {
|
|
148
|
-
offset: offset
|
|
149
|
-
}
|
|
150
|
-
}, {
|
|
151
|
-
name: 'preventOverflow',
|
|
152
|
-
options: {
|
|
153
|
-
altAxis: altAxis
|
|
154
|
-
}
|
|
155
|
-
}, {
|
|
156
|
-
name: 'flip',
|
|
157
|
-
options: {
|
|
158
|
-
flipVariations: false
|
|
159
|
-
}
|
|
160
|
-
}]
|
|
161
|
-
};
|
|
162
|
-
};
|
|
163
|
-
// Get item child element
|
|
164
|
-
this._getItemChildElement = (item) => {
|
|
165
|
-
let selector = item;
|
|
166
|
-
const subItem = DataUtil.get(item, 'sub');
|
|
167
|
-
if (subItem) {
|
|
168
|
-
selector = subItem;
|
|
169
|
-
}
|
|
170
|
-
if (selector) {
|
|
171
|
-
//element = selector.querySelector('.show.menu-item[data-kt-menu-trigger]');
|
|
172
|
-
const element = selector.querySelector('.menu-item[data-kt-menu-trigger]');
|
|
173
|
-
if (element) {
|
|
174
|
-
return element;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return null;
|
|
178
|
-
};
|
|
179
|
-
// Get item child elements
|
|
180
|
-
this._getItemChildElements = (item) => {
|
|
181
|
-
const children = [];
|
|
182
|
-
let child;
|
|
183
|
-
let i = 0;
|
|
184
|
-
let buffer = item;
|
|
185
|
-
do {
|
|
186
|
-
child = this._getItemChildElement(buffer);
|
|
187
|
-
if (child) {
|
|
188
|
-
children.push(child);
|
|
189
|
-
buffer = child;
|
|
190
|
-
}
|
|
191
|
-
i++;
|
|
192
|
-
} while (child !== null && i < 20);
|
|
193
|
-
return children;
|
|
194
|
-
};
|
|
195
|
-
// Get item sub element
|
|
196
|
-
this._getItemSubElement = (item) => {
|
|
197
|
-
if (!item) {
|
|
198
|
-
return null;
|
|
199
|
-
}
|
|
200
|
-
if (this._isTriggerElement(item)) {
|
|
201
|
-
return this.element;
|
|
202
|
-
}
|
|
203
|
-
if (item.classList.contains('menu-sub')) {
|
|
204
|
-
return item;
|
|
205
|
-
}
|
|
206
|
-
else if (DataUtil.has(item, 'sub')) {
|
|
207
|
-
return DataUtil.get(item, 'sub');
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
return getElementChild(item, '.menu-sub');
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
this._getCss = (el, styleProp) => {
|
|
214
|
-
const defaultView = (el.ownerDocument || document).defaultView;
|
|
215
|
-
if (!defaultView) {
|
|
216
|
-
return '';
|
|
217
|
-
}
|
|
218
|
-
// sanitize property name to css notation
|
|
219
|
-
// (hyphen separated words eg. font-Size)
|
|
220
|
-
styleProp = styleProp.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
221
|
-
return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);
|
|
222
|
-
};
|
|
223
|
-
// Get item sub type
|
|
224
|
-
this._getItemSubType = (element) => {
|
|
225
|
-
const sub = this._getItemSubElement(element);
|
|
226
|
-
if (sub && parseInt(this._getCss(sub, 'z-index')) > 0) {
|
|
227
|
-
return 'dropdown';
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
return 'accordion';
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
|
-
// Test if item's sub is shown
|
|
234
|
-
this._isItemSubShown = (item) => {
|
|
235
|
-
let sub = this._getItemSubElement(item);
|
|
236
|
-
if (sub) {
|
|
237
|
-
if (this._getItemSubType(item) === 'dropdown') {
|
|
238
|
-
return sub.classList.contains('show') && sub.hasAttribute('data-popper-placement');
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
return item.classList.contains('show');
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
return false;
|
|
245
|
-
};
|
|
246
|
-
// Test if item dropdown is permanent
|
|
247
|
-
this._isItemDropdownPermanent = (item) => {
|
|
248
|
-
return this._getItemOption(item, 'permanent') === true;
|
|
249
|
-
};
|
|
250
|
-
// Test if item's parent is shown
|
|
251
|
-
this._isItemParentShown = (item) => {
|
|
252
|
-
return getElementParents(item, '.menu-item.show').length > 0;
|
|
253
|
-
};
|
|
254
|
-
// Test of it is item sub element
|
|
255
|
-
this._isItemSubElement = (item) => {
|
|
256
|
-
return item.classList.contains('menu-sub');
|
|
257
|
-
};
|
|
258
|
-
// Test if item has sub
|
|
259
|
-
this._hasItemSub = (item) => {
|
|
260
|
-
return item.classList.contains('menu-item') && item.hasAttribute('data-kt-menu-trigger');
|
|
261
|
-
};
|
|
262
|
-
// Get link element
|
|
263
|
-
this._getItemLinkElement = (item) => {
|
|
264
|
-
return getElementChild(item, '.menu-link');
|
|
265
|
-
};
|
|
266
|
-
// Get toggle element
|
|
267
|
-
this._getItemToggleElement = (item) => {
|
|
268
|
-
if (this.triggerElement) {
|
|
269
|
-
return this.triggerElement;
|
|
270
|
-
}
|
|
271
|
-
return this._getItemLinkElement(item);
|
|
272
|
-
};
|
|
273
|
-
// Show item dropdown
|
|
274
|
-
this._showDropdown = (item) => {
|
|
275
|
-
if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.show') === false) {
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
// Hide all currently shown dropdowns except current one
|
|
279
|
-
MenuComponent.hideDropdowns(item);
|
|
280
|
-
// const toggle = this._isTriggerElement(item) ? item : this._getItemLinkElement(item);
|
|
281
|
-
const sub = this._getItemSubElement(item);
|
|
282
|
-
const width = this._getItemOption(item, 'width');
|
|
283
|
-
const height = this._getItemOption(item, 'height');
|
|
284
|
-
let zindex = this.options.dropdown.zindex;
|
|
285
|
-
const parentZindex = getHighestZindex(item); // update
|
|
286
|
-
// Apply a new z-index if dropdown's toggle element or it's parent has greater z-index // update
|
|
287
|
-
if (parentZindex !== null && parentZindex >= zindex) {
|
|
288
|
-
zindex = parentZindex + 1;
|
|
289
|
-
}
|
|
290
|
-
if (zindex) {
|
|
291
|
-
ElementStyleUtil.set(sub, 'z-index', zindex);
|
|
292
|
-
}
|
|
293
|
-
if (width) {
|
|
294
|
-
ElementStyleUtil.set(sub, 'width', width);
|
|
295
|
-
}
|
|
296
|
-
if (height) {
|
|
297
|
-
ElementStyleUtil.set(sub, 'height', height);
|
|
298
|
-
}
|
|
299
|
-
this.initDropdownPopper(item, sub);
|
|
300
|
-
item.classList.add('show');
|
|
301
|
-
item.classList.add('menu-dropdown');
|
|
302
|
-
sub.classList.add('show');
|
|
303
|
-
// Append the sub the the root of the menu
|
|
304
|
-
if (this._getItemOption(item, 'overflow') === true) {
|
|
305
|
-
document.body.appendChild(sub);
|
|
306
|
-
DataUtil.set(item, 'sub', sub);
|
|
307
|
-
DataUtil.set(sub, 'item', item);
|
|
308
|
-
DataUtil.set(sub, 'menu', this);
|
|
309
|
-
}
|
|
310
|
-
else {
|
|
311
|
-
DataUtil.set(sub, 'item', item);
|
|
312
|
-
}
|
|
313
|
-
EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.shown');
|
|
314
|
-
};
|
|
315
|
-
// Init dropdown popper(new)
|
|
316
|
-
this.initDropdownPopper = (item, sub) => {
|
|
317
|
-
// Setup popper instance
|
|
318
|
-
let reference;
|
|
319
|
-
const attach = this._getItemOption(item, 'attach');
|
|
320
|
-
if (attach) {
|
|
321
|
-
if (attach === 'parent') {
|
|
322
|
-
reference = item.parentNode;
|
|
323
|
-
}
|
|
324
|
-
else {
|
|
325
|
-
reference = document.querySelector(attach);
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
else {
|
|
329
|
-
reference = item;
|
|
330
|
-
}
|
|
331
|
-
if (reference) {
|
|
332
|
-
const popper = createPopper(reference, sub, this._getDropdownPopperConfig(item));
|
|
333
|
-
DataUtil.set(item, 'popper', popper);
|
|
334
|
-
}
|
|
335
|
-
};
|
|
336
|
-
// Hide item dropdown
|
|
337
|
-
this._hideDropdown = (item) => {
|
|
338
|
-
if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hide') === false) {
|
|
339
|
-
return;
|
|
340
|
-
}
|
|
341
|
-
const sub = this._getItemSubElement(item);
|
|
342
|
-
ElementStyleUtil.set(sub, 'z-index', '');
|
|
343
|
-
ElementStyleUtil.set(sub, 'width', '');
|
|
344
|
-
ElementStyleUtil.set(sub, 'height', '');
|
|
345
|
-
item.classList.remove('show');
|
|
346
|
-
item.classList.remove('menu-dropdown');
|
|
347
|
-
sub.classList.remove('show');
|
|
348
|
-
// Append the sub back to it's parent
|
|
349
|
-
if (this._getItemOption(item, 'overflow') === true) {
|
|
350
|
-
if (item.classList.contains('menu-item')) {
|
|
351
|
-
item.appendChild(sub);
|
|
352
|
-
}
|
|
353
|
-
else {
|
|
354
|
-
insertAfterElement(this.element, item);
|
|
355
|
-
}
|
|
356
|
-
DataUtil.remove(item, 'sub');
|
|
357
|
-
DataUtil.remove(sub, 'item');
|
|
358
|
-
DataUtil.remove(sub, 'menu');
|
|
359
|
-
}
|
|
360
|
-
if (DataUtil.has(item, 'popper') === true) {
|
|
361
|
-
DataUtil.get(item, 'popper').destroy();
|
|
362
|
-
DataUtil.remove(item, 'popper');
|
|
363
|
-
}
|
|
364
|
-
// Destroy popper(new)
|
|
365
|
-
this.destroyDropdownPopper(item);
|
|
366
|
-
EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden');
|
|
367
|
-
};
|
|
368
|
-
// Destroy dropdown popper(new)
|
|
369
|
-
this.destroyDropdownPopper = (item) => {
|
|
370
|
-
if (DataUtil.has(item, 'popper') === true) {
|
|
371
|
-
DataUtil.get(item, 'popper').destroy();
|
|
372
|
-
DataUtil.remove(item, 'popper');
|
|
373
|
-
}
|
|
374
|
-
EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden');
|
|
375
|
-
};
|
|
376
|
-
this._showAccordion = (item) => {
|
|
377
|
-
if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.show') === false) {
|
|
378
|
-
return;
|
|
379
|
-
}
|
|
380
|
-
if (this.options.accordion.expand === false) {
|
|
381
|
-
this._hideAccordions(item);
|
|
382
|
-
}
|
|
383
|
-
if (DataUtil.has(item, 'popper') === true) {
|
|
384
|
-
this._hideDropdown(item);
|
|
385
|
-
}
|
|
386
|
-
item.classList.add('hover'); // updateWW
|
|
387
|
-
item.classList.add('showing');
|
|
388
|
-
const subElement = this._getItemSubElement(item);
|
|
389
|
-
if (subElement) {
|
|
390
|
-
const sub = subElement;
|
|
391
|
-
ElementAnimateUtil.slideDown(sub, this.options.accordion.slideSpeed, () => {
|
|
392
|
-
item.classList.remove('showing');
|
|
393
|
-
item.classList.add('show');
|
|
394
|
-
sub.classList.add('show');
|
|
395
|
-
EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.shown');
|
|
396
|
-
});
|
|
397
|
-
}
|
|
398
|
-
};
|
|
399
|
-
this._hideAccordion = (item) => {
|
|
400
|
-
if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hide') === false) {
|
|
401
|
-
return;
|
|
402
|
-
}
|
|
403
|
-
const sub = this._getItemSubElement(item);
|
|
404
|
-
item.classList.add('hiding');
|
|
405
|
-
if (sub) {
|
|
406
|
-
ElementAnimateUtil.slideUp(sub, this.options.accordion.slideSpeed, () => {
|
|
407
|
-
item.classList.remove('hiding');
|
|
408
|
-
item.classList.remove('show');
|
|
409
|
-
sub.classList.remove('show');
|
|
410
|
-
item.classList.remove('hover'); // update
|
|
411
|
-
EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hidden');
|
|
412
|
-
});
|
|
413
|
-
}
|
|
414
|
-
};
|
|
415
|
-
// Hide all shown accordions of item
|
|
416
|
-
this._hideAccordions = (item) => {
|
|
417
|
-
const itemsToHide = this.element.querySelectorAll('.show[data-kt-menu-trigger]');
|
|
418
|
-
if (itemsToHide && itemsToHide.length > 0) {
|
|
419
|
-
for (var i = 0, len = itemsToHide.length; i < len; i++) {
|
|
420
|
-
const itemToHide = itemsToHide[i];
|
|
421
|
-
if (this._getItemSubType(itemToHide) === 'accordion' &&
|
|
422
|
-
itemToHide !== item &&
|
|
423
|
-
item.contains(itemToHide) === false &&
|
|
424
|
-
itemToHide.contains(item) === false) {
|
|
425
|
-
this._hideAccordion(itemToHide);
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
};
|
|
430
|
-
// Event Handlers
|
|
431
|
-
// Reset item state classes if item sub type changed
|
|
432
|
-
this._reset = (item) => {
|
|
433
|
-
if (this._hasItemSub(item) === false) {
|
|
434
|
-
return;
|
|
435
|
-
}
|
|
436
|
-
const sub = this._getItemSubElement(item);
|
|
437
|
-
// Reset sub state if sub type is changed during the window resize
|
|
438
|
-
if (DataUtil.has(item, 'type') && DataUtil.get(item, 'type') !== this._getItemSubType(item)) {
|
|
439
|
-
// updated
|
|
440
|
-
item.classList.remove('hover');
|
|
441
|
-
item.classList.remove('show');
|
|
442
|
-
item.classList.remove('show');
|
|
443
|
-
if (sub && sub.removeClass) {
|
|
444
|
-
sub.removeClass(sub, 'show');
|
|
445
|
-
}
|
|
446
|
-
} // updated
|
|
447
|
-
};
|
|
448
|
-
// TODO: not done
|
|
449
|
-
this._destroy = () => { };
|
|
450
|
-
// Update all item state classes if item sub type changed
|
|
451
|
-
this._update = () => {
|
|
452
|
-
const items = this.element.querySelectorAll('.menu-item[data-kt-menu-trigger]');
|
|
453
|
-
items.forEach((el) => this._reset(el));
|
|
454
|
-
};
|
|
455
|
-
// Hide item sub
|
|
456
|
-
this._hide = (item) => {
|
|
457
|
-
if (!item) {
|
|
458
|
-
return;
|
|
459
|
-
}
|
|
460
|
-
if (this._isItemSubShown(item) === false) {
|
|
461
|
-
return;
|
|
462
|
-
}
|
|
463
|
-
if (this._getItemSubType(item) === 'dropdown') {
|
|
464
|
-
this._hideDropdown(item);
|
|
465
|
-
}
|
|
466
|
-
else if (this._getItemSubType(item) === 'accordion') {
|
|
467
|
-
this._hideAccordion(item);
|
|
468
|
-
}
|
|
469
|
-
};
|
|
470
|
-
// Show item sub
|
|
471
|
-
this._show = (item) => {
|
|
472
|
-
if (!item) {
|
|
473
|
-
return;
|
|
474
|
-
}
|
|
475
|
-
if (this._isItemSubShown(item) === true) {
|
|
476
|
-
return;
|
|
477
|
-
}
|
|
478
|
-
if (this._getItemSubType(item) === 'dropdown') {
|
|
479
|
-
this._showDropdown(item); // // show current dropdown
|
|
480
|
-
}
|
|
481
|
-
else if (this._getItemSubType(item) === 'accordion') {
|
|
482
|
-
this._showAccordion(item);
|
|
483
|
-
}
|
|
484
|
-
// Remember last submenu type
|
|
485
|
-
DataUtil.set(item, 'type', this._getItemSubType(item)); // updated
|
|
486
|
-
};
|
|
487
|
-
// Toggle item sub
|
|
488
|
-
this._toggle = (item) => {
|
|
489
|
-
if (!item) {
|
|
490
|
-
return;
|
|
491
|
-
}
|
|
492
|
-
if (this._isItemSubShown(item) === true) {
|
|
493
|
-
this._hide(item);
|
|
494
|
-
}
|
|
495
|
-
else {
|
|
496
|
-
this._show(item);
|
|
497
|
-
}
|
|
498
|
-
};
|
|
499
|
-
// Mouseout handle
|
|
500
|
-
this._mouseout = (element, e) => {
|
|
501
|
-
const item = this._getItemElement(element);
|
|
502
|
-
if (!item) {
|
|
503
|
-
return;
|
|
504
|
-
}
|
|
505
|
-
if (this._getItemOption(item, 'trigger') !== 'hover') {
|
|
506
|
-
return;
|
|
507
|
-
}
|
|
508
|
-
const timeout = setTimeout(() => {
|
|
509
|
-
if (DataUtil.get(item, 'hover') === '1') {
|
|
510
|
-
this._hide(item);
|
|
511
|
-
}
|
|
512
|
-
}, this.options.dropdown.hoverTimeout);
|
|
513
|
-
DataUtil.set(item, 'hover', '1');
|
|
514
|
-
DataUtil.set(item, 'timeout', timeout);
|
|
515
|
-
};
|
|
516
|
-
// Mouseover handle
|
|
517
|
-
this._mouseover = (element, e) => {
|
|
518
|
-
const item = this._getItemElement(element);
|
|
519
|
-
if (!item) {
|
|
520
|
-
return;
|
|
521
|
-
}
|
|
522
|
-
if (this._getItemOption(item, 'trigger') !== 'hover') {
|
|
523
|
-
return;
|
|
524
|
-
}
|
|
525
|
-
if (DataUtil.get(item, 'hover') === '1') {
|
|
526
|
-
clearTimeout(DataUtil.get(item, 'timeout'));
|
|
527
|
-
DataUtil.remove(item, 'hover');
|
|
528
|
-
DataUtil.remove(item, 'timeout');
|
|
529
|
-
}
|
|
530
|
-
this._show(item);
|
|
531
|
-
};
|
|
532
|
-
// Dismiss handler
|
|
533
|
-
this._dismiss = (element, e) => {
|
|
534
|
-
const item = this._getItemElement(element);
|
|
535
|
-
const items = this._getItemChildElements(item);
|
|
536
|
-
//if ( item !== null && _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {
|
|
537
|
-
const itemSubType = this._getItemSubType(item);
|
|
538
|
-
if (item !== null && itemSubType === 'dropdown') {
|
|
539
|
-
this._hide(item); // hide items dropdown
|
|
540
|
-
// Hide all child elements as well
|
|
541
|
-
if (items.length > 0) {
|
|
542
|
-
for (let i = 0, len = items.length; i < len; i++) {
|
|
543
|
-
//if ( _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {
|
|
544
|
-
if (items[i] !== null && this._getItemSubType(items[i]) === 'dropdown') {
|
|
545
|
-
this._hide(items[i]);
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
};
|
|
551
|
-
// Link handler
|
|
552
|
-
this._link = (element, e) => {
|
|
553
|
-
if (EventHandlerUtil.trigger(this.element, 'kt.menu.link.click') === false) {
|
|
554
|
-
return;
|
|
555
|
-
}
|
|
556
|
-
// Dismiss all shown dropdowns
|
|
557
|
-
MenuComponent.hideDropdowns(undefined);
|
|
558
|
-
EventHandlerUtil.trigger(this.element, 'kt.menu.link.clicked');
|
|
559
|
-
};
|
|
560
|
-
this._click = (element, e) => {
|
|
561
|
-
e.preventDefault();
|
|
562
|
-
const item = this._getItemElement(element);
|
|
563
|
-
if (this._getItemOption(item, 'trigger') !== 'click') {
|
|
564
|
-
return;
|
|
565
|
-
}
|
|
566
|
-
if (this._getItemOption(item, 'toggle') === false) {
|
|
567
|
-
this._show(item);
|
|
568
|
-
}
|
|
569
|
-
else {
|
|
570
|
-
this._toggle(item);
|
|
571
|
-
}
|
|
572
|
-
};
|
|
573
|
-
///////////////////////
|
|
574
|
-
// ** Public API ** //
|
|
575
|
-
///////////////////////
|
|
576
|
-
this.click = (element, e) => {
|
|
577
|
-
return this._click(element, e);
|
|
578
|
-
};
|
|
579
|
-
this.link = (element, e) => {
|
|
580
|
-
return this._link(element, e);
|
|
581
|
-
};
|
|
582
|
-
this.dismiss = (element, e) => {
|
|
583
|
-
return this._dismiss(element, e);
|
|
584
|
-
};
|
|
585
|
-
this.mouseover = (element, e) => {
|
|
586
|
-
return this._mouseover(element, e);
|
|
587
|
-
};
|
|
588
|
-
this.mouseout = (element, e) => {
|
|
589
|
-
return this._mouseout(element, e);
|
|
590
|
-
};
|
|
591
|
-
// General Methods
|
|
592
|
-
this.getItemTriggerType = (item) => {
|
|
593
|
-
return this._getItemOption(item, 'trigger');
|
|
594
|
-
};
|
|
595
|
-
this.getItemSubType = (element) => {
|
|
596
|
-
return this._getItemSubType(element);
|
|
597
|
-
};
|
|
598
|
-
this.show = (item) => {
|
|
599
|
-
return this._show(item);
|
|
600
|
-
};
|
|
601
|
-
this.hide = (item) => {
|
|
602
|
-
return this._hide(item);
|
|
603
|
-
};
|
|
604
|
-
this.reset = (item) => {
|
|
605
|
-
return this._reset(item);
|
|
606
|
-
};
|
|
607
|
-
this.update = () => {
|
|
608
|
-
return this._update();
|
|
609
|
-
};
|
|
610
|
-
this.getElement = () => {
|
|
611
|
-
return this.element;
|
|
612
|
-
};
|
|
613
|
-
this.getItemLinkElement = (item) => {
|
|
614
|
-
return this._getItemLinkElement(item);
|
|
615
|
-
};
|
|
616
|
-
this.getItemToggleElement = (item) => {
|
|
617
|
-
return this._getItemToggleElement(item);
|
|
618
|
-
};
|
|
619
|
-
this.getItemSubElement = (item) => {
|
|
620
|
-
return this._getItemSubElement(item);
|
|
621
|
-
};
|
|
622
|
-
this.getItemParentElements = (item) => {
|
|
623
|
-
return this._getItemParentElements(item);
|
|
624
|
-
};
|
|
625
|
-
this.isItemSubShown = (item) => {
|
|
626
|
-
return this._isItemSubShown(item);
|
|
627
|
-
};
|
|
628
|
-
this.isItemParentShown = (item) => {
|
|
629
|
-
return this._isItemParentShown(item);
|
|
630
|
-
};
|
|
631
|
-
this.getTriggerElement = () => {
|
|
632
|
-
return this.triggerElement;
|
|
633
|
-
};
|
|
634
|
-
this.isItemDropdownPermanent = (item) => {
|
|
635
|
-
return this._isItemDropdownPermanent(item);
|
|
636
|
-
};
|
|
637
|
-
// Accordion Mode Methods
|
|
638
|
-
this.hideAccordions = (item) => {
|
|
639
|
-
return this._hideAccordions(item);
|
|
640
|
-
};
|
|
641
|
-
// Event API
|
|
642
|
-
this.on = (name, handler) => {
|
|
643
|
-
return EventHandlerUtil.on(this.element, name, handler);
|
|
644
|
-
};
|
|
645
|
-
this.one = (name, handler) => {
|
|
646
|
-
return EventHandlerUtil.one(this.element, name, handler);
|
|
647
|
-
};
|
|
648
|
-
this.off = (name) => {
|
|
649
|
-
return EventHandlerUtil.off(this.element, name);
|
|
650
|
-
};
|
|
651
|
-
this.element = _element;
|
|
652
|
-
this.options = Object.assign(defaultMenuOptions, options);
|
|
653
|
-
this.instanceUid = getUniqueIdWithPrefix('menu');
|
|
654
|
-
// this.element.setAttribute('data-kt-menu', 'true')
|
|
655
|
-
this._setTriggerElement();
|
|
656
|
-
this._update();
|
|
657
|
-
DataUtil.set(this.element, 'menu', this);
|
|
658
|
-
return this;
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
//
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
}
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
}
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
}
|
|
719
|
-
}
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
}
|
|
731
|
-
}
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
}
|
|
753
|
-
}
|
|
754
|
-
}
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
}
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
}
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
}
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
}
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
}
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
}
|
|
803
|
-
});
|
|
804
|
-
}
|
|
805
|
-
}
|
|
806
|
-
|
|
807
|
-
MenuComponent.
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
MenuComponent.
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
}
|
|
826
|
-
export { MenuComponent, defaultMenuOptions };
|
|
827
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVudUNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvX21ldHJvbmljL2NvcmUvY29tcG9uZW50cy9NZW51Q29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUE7QUFFN0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUN4SixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDOUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFhakUsTUFBTSxrQkFBa0IsR0FBZ0I7SUFDdEMsUUFBUSxFQUFFO1FBQ1IsWUFBWSxFQUFFLEdBQUc7UUFDakIsTUFBTSxFQUFFLEdBQUc7S0FDWjtJQUNELFNBQVMsRUFBRTtRQUNULFVBQVUsRUFBRSxHQUFHO1FBQ2YsTUFBTSxFQUFFLEtBQUs7S0FDZDtDQUNGLENBQUE7QUFvQkQsTUFBTSxhQUFhO0lBTWpCLFlBQVksUUFBcUIsRUFBRSxPQUFvQjtRQUZ2RCxtQkFBYyxHQUF1QixJQUFJLENBQUE7UUFhekMsK0JBQStCO1FBQ3ZCLHVCQUFrQixHQUFHLEdBQUcsRUFBRTtZQUNoQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENB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SSxFQUFFO1FBQ1QsSUFBSSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtLQUN4QztJQUNELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyxDQUFBO0FBR0gsT0FBTyxFQUFDLGFBQWEsRUFBRSxrQkFBa0IsRUFBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUG9wcGVyLCBWaXJ0dWFsRWxlbWVudCB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJ1xyXG5cclxuaW1wb3J0IHsgZ2V0QXR0cmlidXRlVmFsdWVCeUJyZWFrcG9pbnQsIGdldEVsZW1lbnRDaGlsZCwgZ2V0RWxlbWVudFBhcmVudHMsIGdldEhpZ2hlc3RaaW5kZXgsIGluc2VydEFmdGVyRWxlbWVudCwgdGhyb3R0bGUgfSBmcm9tIFwiLi4vX3V0aWxzL0RvbUhlbHBlcnNcIlxyXG5pbXBvcnQgeyBFdmVudEhhbmRsZXJVdGlsIH0gZnJvbSBcIi4uL191dGlscy9FdmVudEhhbmRsZXJVdGlsXCJcclxuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tIFwiLi4vX3V0aWxzL19EYXRhVXRpbFwiXHJcbmltcG9ydCB7IERPTUV2ZW50SGFuZGxlclV0aWwgfSBmcm9tIFwiLi4vX3V0aWxzL19ET01FdmVudEhhbmRsZXJVdGlsXCJcclxuaW1wb3J0IHsgRWxlbWVudFN0eWxlVXRpbCB9IGZyb20gXCIuLi9fdXRpbHMvX0VsZW1lbnRTdHlsZVV0aWxcIlxyXG5pbXBvcnQgeyBnZXRVbmlxdWVJZFdpdGhQcmVmaXggfSBmcm9tIFwiLi4vX3V0aWxzL19UeXBlc0hlbHBlcnNcIlxyXG5pbXBvcnQgeyBFbGVtZW50QW5pbWF0ZVV0aWwgfSBmcm9tICcuLi9fdXRpbHMvRWxlbWVudEFuaW1hdGVVdGlsJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZW51T3B0aW9ucyB7XHJcbiAgZHJvcGRvd246IHtcclxuICAgIGhvdmVyVGltZW91dDogbnVtYmVyXHJcbiAgICB6aW5kZXg6IG51bWJlclxyXG4gIH1cclxuICBhY2NvcmRpb246IHtcclxuICAgIHNsaWRlU3BlZWQ6IG51bWJlclxyXG4gICAgZXhwYW5kOiBib29sZWFuXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0TWVudU9wdGlvbnM6IE1lbnVPcHRpb25zID0ge1xyXG4gIGRyb3Bkb3duOiB7XHJcbiAgICBob3ZlclRpbWVvdXQ6IDIwMCxcclxuICAgIHppbmRleDogMTA1LFxyXG4gIH0sXHJcbiAgYWNjb3JkaW9uOiB7XHJcbiAgICBzbGlkZVNwZWVkOiAyNTAsXHJcbiAgICBleHBhbmQ6IGZhbHNlLFxyXG4gIH0sXHJcbn1cclxuXHJcbnR5cGUgUG9wcGVyUGxhY2VtZW50ID1cclxuICB8ICdyaWdodCdcclxuICB8ICdhdXRvJ1xyXG4gIHwgJ2F1dG8tc3RhcnQnXHJcbiAgfCAnYXV0by1lbmQnXHJcbiAgfCAndG9wJ1xyXG4gIHwgJ2JvdHRvbSdcclxuICB8ICdsZWZ0J1xyXG4gIHwgJ3RvcC1zdGFydCdcclxuICB8ICd0b3AtZW5kJ1xyXG4gIHwgJ2JvdHRvbS1zdGFydCdcclxuICB8ICdib3R0b20tZW5kJ1xyXG4gIHwgJ3JpZ2h0LXN0YXJ0J1xyXG4gIHwgJ3JpZ2h0LWVuZCdcclxuICB8ICdsZWZ0LXN0YXJ0J1xyXG4gIHwgJ2xlZnQtZW5kJ1xyXG4gIHwgdW5kZWZpbmVkXHJcblxyXG5jbGFzcyBNZW51Q29tcG9uZW50IHtcclxuICBlbGVtZW50OiBIVE1MRWxlbWVudFxyXG4gIG9wdGlvbnM6IE1lbnVPcHRpb25zXHJcbiAgaW5zdGFuY2VVaWQ6IHN0cmluZ1xyXG4gIHRyaWdnZXJFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsXHJcblxyXG4gIGNvbnN0cnVjdG9yKF9lbGVtZW50OiBIVE1MRWxlbWVudCwgb3B0aW9uczogTWVudU9wdGlvbnMpIHtcclxuICAgIHRoaXMuZWxlbWVudCA9IF9lbGVtZW50XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRNZW51T3B0aW9ucywgb3B0aW9ucylcclxuICAgIHRoaXMuaW5zdGFuY2VVaWQgPSBnZXRVbmlxdWVJZFdpdGhQcmVmaXgoJ21lbnUnKVxyXG4gICAgLy8gdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1rdC1tZW51JywgJ3RydWUnKVxyXG4gICAgdGhpcy5fc2V0VHJpZ2dlckVsZW1lbnQoKVxyXG4gICAgdGhpcy5fdXBkYXRlKClcclxuICAgIERhdGFVdGlsLnNldCh0aGlzLmVsZW1lbnQsICdtZW51JywgdGhpcylcclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuICAvLyBTZXQgZXh0ZXJuYWwgdHJpZ2dlciBlbGVtZW50XHJcbiAgcHJpdmF0ZSBfc2V0VHJpZ2dlckVsZW1lbnQgPSAoKSA9PiB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBgW2RhdGEta3QtbWVudS10YXJnZXQ9XCIjJHt0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpfVwiYFxyXG4gICAgKVxyXG5cclxuICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudCA9IHRhcmdldCBhcyBIVE1MRWxlbWVudFxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmVsZW1lbnQuY2xvc2VzdCgnW2RhdGEta3QtbWVudS10cmlnZ2VyXScpKSB7XHJcbiAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQgPSB0aGlzLmVsZW1lbnQuY2xvc2VzdCgnW2RhdGEta3QtbWVudS10cmlnZ2VyXScpIGFzIEhUTUxFbGVtZW50XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZSAmJlxyXG4gICAgICBnZXRFbGVtZW50Q2hpbGQodGhpcy5lbGVtZW50LnBhcmVudE5vZGUgYXMgSFRNTEVsZW1lbnQsICdbZGF0YS1rdC1tZW51LXRyaWdnZXJdJylcclxuICAgICkge1xyXG4gICAgICBjb25zdCBjaGlsZCA9IGdldEVsZW1lbnRDaGlsZChcclxuICAgICAgICB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZSBhcyBIVE1MRWxlbWVudCxcclxuICAgICAgICAnW2RhdGEta3QtbWVudS10cmlnZ2VyXSdcclxuICAgICAgKVxyXG4gICAgICBpZiAoY2hpbGQpIHtcclxuICAgICAgICB0aGlzLnRyaWdnZXJFbGVtZW50ID0gY2hpbGRcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyaWdnZXJFbGVtZW50KSB7XHJcbiAgICAgIERhdGFVdGlsLnNldCh0aGlzLnRyaWdnZXJFbGVtZW50LCAnbWVudScsIHRoaXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUZXN0IGlmIG1lbnUgaGFzIGV4dGVybmFsIHRyaWdnZXIgZWxlbWVudFxyXG4gIHByaXZhdGUgX2lzVHJpZ2dlckVsZW1lbnQgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLnRyaWdnZXJFbGVtZW50ID09PSBpdGVtXHJcbiAgfVxyXG5cclxuICAvLyBHZXQgaXRlbSBvcHRpb24odGhyb3VnaCBodG1sIGF0dHJpYnV0ZXMpXHJcbiAgcHJpdmF0ZSBfZ2V0SXRlbU9wdGlvbiA9IChpdGVtOiBIVE1MRWxlbWVudCwgbmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgdmFsdWUgPSBudWxsXHJcbiAgICBpZiAoaXRlbSAmJiBpdGVtLmhhc0F0dHJpYnV0ZSgnZGF0YS1rdC1tZW51LScgKyBuYW1lKSkge1xyXG4gICAgICBjb25zdCBhdHRyID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEta3QtbWVudS0nICsgbmFtZSkgfHwgJydcclxuICAgICAgdmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZUJ5QnJlYWtwb2ludChhdHRyKVxyXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgU3RyaW5nKHZhbHVlKSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgICAgdmFsdWUgPSB0cnVlXHJcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT09IG51bGwgJiYgU3RyaW5nKHZhbHVlKSA9PT0gJ2ZhbHNlJykge1xyXG4gICAgICAgIHZhbHVlID0gZmFsc2VcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlXHJcbiAgfVxyXG5cclxuICAvLyBHZXQgaXRlbSBlbGVtZW50XHJcbiAgcHJpdmF0ZSBfZ2V0SXRlbUVsZW1lbnQgPSAoX2VsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAvLyBFbGVtZW50IGlzIHRoZSBleHRlcm5hbCB0cmlnZ2VyIGVsZW1lbnRcclxuICAgIGlmICh0aGlzLl9pc1RyaWdnZXJFbGVtZW50KF9lbGVtZW50KSkge1xyXG4gICAgICByZXR1cm4gX2VsZW1lbnRcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbGVtZW50IGhhcyBpdGVtIHRvZ2dsZXIgYXR0cmlidXRlXHJcbiAgICBpZiAoX2VsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLWt0LW1lbnUtdHJpZ2dlcicpKSB7XHJcbiAgICAgIHJldHVybiBfZWxlbWVudFxyXG4gICAgfVxyXG5cclxuICAgIC8vIEVsZW1lbnQgaGFzIGl0ZW0gRE9NIHJlZmVyZW5jZSBpbiBpdCdzIGRhdGEgc3RvcmFnZVxyXG4gICAgY29uc3QgaXRlbUVsZW1lbnQgPSBEYXRhVXRpbC5nZXQoX2VsZW1lbnQsICdpdGVtJylcclxuICAgIGlmIChpdGVtRWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gaXRlbUVsZW1lbnRcclxuICAgIH1cclxuXHJcbiAgICAvLyBJdGVtIGlzIHBhcmVudCBvZiBlbGVtZW50XHJcbiAgICBjb25zdCBpdGVtID0gX2VsZW1lbnQuY2xvc2VzdCgnLm1lbnUtaXRlbVtkYXRhLWt0LW1lbnUtdHJpZ2dlcl0nKVxyXG4gICAgaWYgKGl0ZW0pIHtcclxuICAgICAgcmV0dXJuIGl0ZW1cclxuICAgIH1cclxuXHJcbiAgICAvLyBFbGVtZW50J3MgcGFyZW50IGhhcyBpdGVtIERPTSByZWZlcmVuY2UgaW4gaXQncyBkYXRhIHN0b3JhZ2VcclxuICAgIGNvbnN0IHN1YiA9IF9lbGVtZW50LmNsb3Nlc3QoJy5tZW51LXN1YicpXHJcbiAgICBpZiAoc3ViKSB7XHJcbiAgICAgIGNvbnN0IHN1Ykl0ZW0gPSBEYXRhVXRpbC5nZXQoc3ViIGFzIEhUTUxFbGVtZW50LCAnaXRlbScpXHJcbiAgICAgIGlmIChzdWJJdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1Ykl0ZW1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gR2V0IGl0ZW0gcGFyZW50IGVsZW1lbnRcclxuICBwcml2YXRlIF9nZXRJdGVtUGFyZW50RWxlbWVudCA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3Qgc3ViID0gaXRlbS5jbG9zZXN0KCcubWVudS1zdWInKVxyXG4gICAgaWYgKCFzdWIpIHtcclxuICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdWJJdGVtID0gRGF0YVV0aWwuZ2V0KHN1YiBhcyBIVE1MRWxlbWVudCwgJ2l0ZW0nKVxyXG4gICAgaWYgKHN1Ykl0ZW0pIHtcclxuICAgICAgcmV0dXJuIHN1Ykl0ZW1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJlbnRJdGVtID0gc3ViLmNsb3Nlc3QoJy5tZW51LWl0ZW1bZGF0YS1rdC1tZW51LXRyaWdnZXJdJylcclxuICAgIGlmIChzdWIgJiYgcGFyZW50SXRlbSkge1xyXG4gICAgICByZXR1cm4gcGFyZW50SXRlbVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICAvLyBHZXQgaXRlbSBwYXJlbnQgZWxlbWVudHNcclxuICBwcml2YXRlIF9nZXRJdGVtUGFyZW50RWxlbWVudHMgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHBhcmVudHMgPSBbXVxyXG4gICAgbGV0IHBhcmVudFxyXG4gICAgbGV0IGkgPSAwXHJcbiAgICBsZXQgYnVmZmVyID0gaXRlbVxyXG5cclxuICAgIGRvIHtcclxuICAgICAgcGFyZW50ID0gdGhpcy5fZ2V0SXRlbVBhcmVudEVsZW1lbnQoYnVmZmVyKVxyXG4gICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudClcclxuICAgICAgICBidWZmZXIgPSBwYXJlbnRcclxuICAgICAgfVxyXG5cclxuICAgICAgaSsrXHJcbiAgICB9IHdoaWxlIChwYXJlbnQgIT09IG51bGwgJiYgaSA8IDIwKVxyXG5cclxuICAgIGlmICh0aGlzLnRyaWdnZXJFbGVtZW50KSB7XHJcbiAgICAgIHBhcmVudHMudW5zaGlmdCh0aGlzLnRyaWdnZXJFbGVtZW50KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXJlbnRzXHJcbiAgfVxyXG5cclxuICAvLyBQcmVwYXJlIHBvcHBlciBjb25maWcgZm9yIGRyb3Bkb3duKHNlZTogaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxyXG4gIHByaXZhdGUgX2dldERyb3Bkb3duUG9wcGVyQ29uZmlnID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAvLyBQbGFjZW1lbnRcclxuICAgIGNvbnN0IHBsYWNlbWVudE9wdGlvbiA9IHRoaXMuX2dldEl0ZW1PcHRpb24oaXRlbSwgJ3BsYWNlbWVudCcpXHJcbiAgICBsZXQgcGxhY2VtZW50OiBQb3BwZXJQbGFjZW1lbnQgPSAncmlnaHQnXHJcbiAgICBpZiAocGxhY2VtZW50T3B0aW9uKSB7XHJcbiAgICAgIHBsYWNlbWVudCA9IHBsYWNlbWVudE9wdGlvbiBhcyBQb3BwZXJQbGFjZW1lbnRcclxuICAgIH1cclxuXHJcbiAgICAvLyBGbGlwXHJcbiAgICBjb25zdCBmbGlwVmFsdWUgPSB0aGlzLl9nZXRJdGVtT3B0aW9uKGl0ZW0sICdmbGlwJylcclxuICAgIGNvbnN0IGZsaXAgPSBmbGlwVmFsdWUgPyBmbGlwVmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLCcpIDogW11cclxuXHJcbiAgICAvLyBPZmZzZXRcclxuICAgIGNvbnN0IG9mZnNldFZhbHVlID0gdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAnb2Zmc2V0JylcclxuICAgIGNvbnN0IG9mZnNldCA9IG9mZnNldFZhbHVlID8gb2Zmc2V0VmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLCcpIDogW11cclxuXHJcbiAgICAvLyBTdHJhdGVneVxyXG4gICAgY29uc3Qgc3RyYXRlZ3k6ICdhYnNvbHV0ZScgfCAnZml4ZWQnIHwgdW5kZWZpbmVkID1cclxuICAgICAgdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAnb3ZlcmZsb3cnKSA9PT0gdHJ1ZSA/ICdhYnNvbHV0ZScgOiAnZml4ZWQnXHJcblxyXG4gICAgdmFyIGFsdEF4aXMgPSB0aGlzLl9nZXRJdGVtT3B0aW9uKGl0ZW0sICdmbGlwJykgIT09IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxyXG4gICAgICBzdHJhdGVneTogc3RyYXRlZ3ksXHJcbiAgICAgIG1vZGlmaWVyczogW3tcclxuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldFxyXG4gICAgICAgIH1cclxuICAgICAgfSwge1xyXG4gICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxyXG4gICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgIGFsdEF4aXM6IGFsdEF4aXNcclxuICAgICAgICB9XHJcbiAgICAgIH0sIHtcclxuICAgICAgICBuYW1lOiAnZmxpcCcsXHJcbiAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgZmxpcFZhcmlhdGlvbnM6IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBpdGVtIGNoaWxkIGVsZW1lbnRcclxuICBwcml2YXRlIF9nZXRJdGVtQ2hpbGRFbGVtZW50ID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBsZXQgc2VsZWN0b3IgPSBpdGVtXHJcblxyXG4gICAgY29uc3Qgc3ViSXRlbSA9IERhdGFVdGlsLmdldChpdGVtLCAnc3ViJylcclxuICAgIGlmIChzdWJJdGVtKSB7XHJcbiAgICAgIHNlbGVjdG9yID0gc3ViSXRlbVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWxlY3Rvcikge1xyXG4gICAgICAvL2VsZW1lbnQgPSBzZWxlY3Rvci5xdWVyeVNlbGVjdG9yKCcuc2hvdy5tZW51LWl0ZW1bZGF0YS1rdC1tZW51LXRyaWdnZXJdJyk7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBzZWxlY3Rvci5xdWVyeVNlbGVjdG9yKCcubWVudS1pdGVtW2RhdGEta3QtbWVudS10cmlnZ2VyXScpXHJcbiAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIC8vIEdldCBpdGVtIGNoaWxkIGVsZW1lbnRzXHJcbiAgcHJpdmF0ZSBfZ2V0SXRlbUNoaWxkRWxlbWVudHMgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gW11cclxuICAgIGxldCBjaGlsZFxyXG4gICAgbGV0IGkgPSAwXHJcbiAgICBsZXQgYnVmZmVyID0gaXRlbVxyXG4gICAgZG8ge1xyXG4gICAgICBjaGlsZCA9IHRoaXMuX2dldEl0ZW1DaGlsZEVsZW1lbnQoYnVmZmVyKVxyXG4gICAgICBpZiAoY2hpbGQpIHtcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKVxyXG4gICAgICAgIGJ1ZmZlciA9IGNoaWxkIGFzIEhUTUxFbGVtZW50XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGkrK1xyXG4gICAgfSB3aGlsZSAoY2hpbGQgIT09IG51bGwgJiYgaSA8IDIwKVxyXG5cclxuICAgIHJldHVybiBjaGlsZHJlblxyXG4gIH1cclxuXHJcbiAgLy8gR2V0IGl0ZW0gc3ViIGVsZW1lbnRcclxuICBwcml2YXRlIF9nZXRJdGVtU3ViRWxlbWVudCA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzVHJpZ2dlckVsZW1lbnQoaXRlbSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1zdWInKSkge1xyXG4gICAgICByZXR1cm4gaXRlbVxyXG4gICAgfSBlbHNlIGlmIChEYXRhVXRpbC5oYXMoaXRlbSwgJ3N1YicpKSB7XHJcbiAgICAgIHJldHVybiBEYXRhVXRpbC5nZXQoaXRlbSwgJ3N1YicpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZ2V0RWxlbWVudENoaWxkKGl0ZW0sICcubWVudS1zdWInKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Q3NzID0gKGVsOiBIVE1MRWxlbWVudCwgc3R5bGVQcm9wOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGRlZmF1bHRWaWV3ID0gKGVsLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQpLmRlZmF1bHRWaWV3XHJcbiAgICBpZiAoIWRlZmF1bHRWaWV3KSB7XHJcbiAgICAgIHJldHVybiAnJ1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNhbml0aXplIHByb3BlcnR5IG5hbWUgdG8gY3NzIG5vdGF0aW9uXHJcbiAgICAvLyAoaHlwaGVuIHNlcGFyYXRlZCB3b3JkcyBlZy4gZm9udC1TaXplKVxyXG4gICAgc3R5bGVQcm9wID0gc3R5bGVQcm9wLnJlcGxhY2UoLyhbQS1aXSkvZywgJy0kMScpLnRvTG93ZXJDYXNlKClcclxuXHJcbiAgICByZXR1cm4gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3ApXHJcbiAgfVxyXG5cclxuICAvLyBHZXQgaXRlbSBzdWIgdHlwZVxyXG4gIHByaXZhdGUgX2dldEl0ZW1TdWJUeXBlID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBzdWIgPSB0aGlzLl9nZXRJdGVtU3ViRWxlbWVudChlbGVtZW50KVxyXG4gICAgaWYgKHN1YiAmJiBwYXJzZUludCh0aGlzLl9nZXRDc3Moc3ViLCAnei1pbmRleCcpKSA+IDApIHtcclxuICAgICAgcmV0dXJuICdkcm9wZG93bidcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnYWNjb3JkaW9uJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gVGVzdCBpZiBpdGVtJ3Mgc3ViIGlzIHNob3duXHJcbiAgcHJpdmF0ZSBfaXNJdGVtU3ViU2hvd24gPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIGxldCBzdWIgPSB0aGlzLl9nZXRJdGVtU3ViRWxlbWVudChpdGVtKVxyXG4gICAgaWYgKHN1Yikge1xyXG4gICAgICBpZiAodGhpcy5fZ2V0SXRlbVN1YlR5cGUoaXRlbSkgPT09ICdkcm9wZG93bicpIHtcclxuICAgICAgICByZXR1cm4gc3ViLmNsYXNzTGlzdC5jb250YWlucygnc2hvdycpICYmIHN1Yi5oYXNBdHRyaWJ1dGUoJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCcpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdzaG93JylcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgLy8gVGVzdCBpZiBpdGVtIGRyb3Bkb3duIGlzIHBlcm1hbmVudFxyXG4gIHByaXZhdGUgX2lzSXRlbURyb3Bkb3duUGVybWFuZW50ID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAncGVybWFuZW50JykgPT09IHRydWVcclxuICB9XHJcblxyXG4gIC8vIFRlc3QgaWYgaXRlbSdzIHBhcmVudCBpcyBzaG93blxyXG4gIHByaXZhdGUgX2lzSXRlbVBhcmVudFNob3duID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gZ2V0RWxlbWVudFBhcmVudHMoaXRlbSwgJy5tZW51LWl0ZW0uc2hvdycpLmxlbmd0aCA+IDBcclxuICB9XHJcblxyXG4gIC8vIFRlc3Qgb2YgaXQgaXMgaXRlbSBzdWIgZWxlbWVudFxyXG4gIHByaXZhdGUgX2lzSXRlbVN1YkVsZW1lbnQgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiBpdGVtLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1zdWInKVxyXG4gIH1cclxuXHJcbiAgLy8gVGVzdCBpZiBpdGVtIGhhcyBzdWJcclxuICBwcml2YXRlIF9oYXNJdGVtU3ViID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtaXRlbScpICYmIGl0ZW0uaGFzQXR0cmlidXRlKCdkYXRhLWt0LW1lbnUtdHJpZ2dlcicpXHJcbiAgfVxyXG5cclxuICAvLyBHZXQgbGluayBlbGVtZW50XHJcbiAgcHJpdmF0ZSBfZ2V0SXRlbUxpbmtFbGVtZW50ID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gZ2V0RWxlbWVudENoaWxkKGl0ZW0sICcubWVudS1saW5rJylcclxuICB9XHJcblxyXG4gIC8vIEdldCB0b2dnbGUgZWxlbWVudFxyXG4gIHByaXZhdGUgX2dldEl0ZW1Ub2dnbGVFbGVtZW50ID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBpZiAodGhpcy50cmlnZ2VyRWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50cmlnZ2VyRWxlbWVudFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtTGlua0VsZW1lbnQoaXRlbSlcclxuICB9XHJcblxyXG4gIC8vIFNob3cgaXRlbSBkcm9wZG93blxyXG4gIHByaXZhdGUgX3Nob3dEcm9wZG93biA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKEV2ZW50SGFuZGxlclV0aWwudHJpZ2dlcih0aGlzLmVsZW1lbnQsICdrdC5tZW51LmRyb3Bkb3duLnNob3cnKSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGlkZSBhbGwgY3VycmVudGx5IHNob3duIGRyb3Bkb3ducyBleGNlcHQgY3VycmVudCBvbmVcclxuICAgIE1lbnVDb21wb25lbnQuaGlkZURyb3Bkb3ducyhpdGVtKVxyXG5cclxuICAgIC8vIGNvbnN0IHRvZ2dsZSA9IHRoaXMuX2lzVHJpZ2dlckVsZW1lbnQoaXRlbSkgPyBpdGVtIDogdGhpcy5fZ2V0SXRlbUxpbmtFbGVtZW50KGl0ZW0pO1xyXG4gICAgY29uc3Qgc3ViID0gdGhpcy5fZ2V0SXRlbVN1YkVsZW1lbnQoaXRlbSlcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAnd2lkdGgnKVxyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAnaGVpZ2h0JylcclxuXHJcbiAgICBsZXQgemluZGV4ID0gdGhpcy5vcHRpb25zLmRyb3Bkb3duLnppbmRleFxyXG4gICAgY29uc3QgcGFyZW50WmluZGV4ID0gZ2V0SGlnaGVzdFppbmRleChpdGVtKSAvLyB1cGRhdGVcclxuICAgIC8vIEFwcGx5IGEgbmV3IHotaW5kZXggaWYgZHJvcGRvd24ncyB0b2dnbGUgZWxlbWVudCBvciBpdCdzIHBhcmVudCBoYXMgZ3JlYXRlciB6LWluZGV4IC8vIHVwZGF0ZVxyXG4gICAgaWYgKHBhcmVudFppbmRleCAhPT0gbnVsbCAmJiBwYXJlbnRaaW5kZXggPj0gemluZGV4KSB7XHJcbiAgICAgIHppbmRleCA9IHBhcmVudFppbmRleCArIDFcclxuICAgIH1cclxuXHJcbiAgICBpZiAoemluZGV4KSB7XHJcbiAgICAgIEVsZW1lbnRTdHlsZVV0aWwuc2V0KHN1YiwgJ3otaW5kZXgnLCB6aW5kZXgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpZHRoKSB7XHJcbiAgICAgIEVsZW1lbnRTdHlsZVV0aWwuc2V0KHN1YiwgJ3dpZHRoJywgd2lkdGgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhlaWdodCkge1xyXG4gICAgICBFbGVtZW50U3R5bGVVdGlsLnNldChzdWIsICdoZWlnaHQnLCBoZWlnaHQpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0RHJvcGRvd25Qb3BwZXIoaXRlbSwgc3ViKVxyXG5cclxuICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnc2hvdycpXHJcbiAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ21lbnUtZHJvcGRvd24nKVxyXG4gICAgc3ViLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKVxyXG5cclxuICAgIC8vIEFwcGVuZCB0aGUgc3ViIHRoZSB0aGUgcm9vdCBvZiB0aGUgbWVudVxyXG4gICAgaWYgKHRoaXMuX2dldEl0ZW1PcHRpb24oaXRlbSwgJ292ZXJmbG93JykgPT09IHRydWUpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzdWIpXHJcbiAgICAgIERhdGFVdGlsLnNldChpdGVtLCAnc3ViJywgc3ViKVxyXG4gICAgICBEYXRhVXRpbC5zZXQoc3ViLCAnaXRlbScsIGl0ZW0pXHJcbiAgICAgIERhdGFVdGlsLnNldChzdWIsICdtZW51JywgdGhpcylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIERhdGFVdGlsLnNldChzdWIsICdpdGVtJywgaXRlbSlcclxuICAgIH1cclxuXHJcbiAgICBFdmVudEhhbmRsZXJVdGlsLnRyaWdnZXIodGhpcy5lbGVtZW50LCAna3QubWVudS5kcm9wZG93bi5zaG93bicpXHJcbiAgfVxyXG5cclxuICAvLyBJbml0IGRyb3Bkb3duIHBvcHBlcihuZXcpXHJcbiAgcHJpdmF0ZSBpbml0RHJvcGRvd25Qb3BwZXIgPSAoaXRlbTogSFRNTEVsZW1lbnQsIHN1YjogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIC8vIFNldHVwIHBvcHBlciBpbnN0YW5jZVxyXG4gICAgbGV0IHJlZmVyZW5jZVxyXG4gICAgY29uc3QgYXR0YWNoID0gdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAnYXR0YWNoJykgYXMgc3RyaW5nXHJcblxyXG4gICAgaWYgKGF0dGFjaCkge1xyXG4gICAgICBpZiAoYXR0YWNoID09PSAncGFyZW50Jykge1xyXG4gICAgICAgIHJlZmVyZW5jZSA9IGl0ZW0ucGFyZW50Tm9kZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlZmVyZW5jZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYXR0YWNoKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZWZlcmVuY2UgPSBpdGVtXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZSkge1xyXG4gICAgICBjb25zdCBwb3BwZXIgPSBjcmVhdGVQb3BwZXIoXHJcbiAgICAgICAgcmVmZXJlbmNlIGFzIEVsZW1lbnQgfCBWaXJ0dWFsRWxlbWVudCxcclxuICAgICAgICBzdWIsXHJcbiAgICAgICAgdGhpcy5fZ2V0RHJvcGRvd25Qb3BwZXJDb25maWcoaXRlbSlcclxuICAgICAgKVxyXG4gICAgICBEYXRhVXRpbC5zZXQoaXRlbSwgJ3BvcHBlcicsIHBvcHBlcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEhpZGUgaXRlbSBkcm9wZG93blxyXG4gIHByaXZhdGUgX2hpZGVEcm9wZG93biA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKEV2ZW50SGFuZGxlclV0aWwudHJpZ2dlcih0aGlzLmVsZW1lbnQsICdrdC5tZW51LmRyb3Bkb3duLmhpZGUnKSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3ViID0gdGhpcy5fZ2V0SXRlbVN1YkVsZW1lbnQoaXRlbSlcclxuICAgIEVsZW1lbnRTdHlsZVV0aWwuc2V0KHN1YiwgJ3otaW5kZXgnLCAnJylcclxuICAgIEVsZW1lbnRTdHlsZVV0aWwuc2V0KHN1YiwgJ3dpZHRoJywgJycpXHJcbiAgICBFbGVtZW50U3R5bGVVdGlsLnNldChzdWIsICdoZWlnaHQnLCAnJylcclxuICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpXHJcbiAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ21lbnUtZHJvcGRvd24nKVxyXG4gICAgc3ViLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKVxyXG5cclxuICAgIC8vIEFwcGVuZCB0aGUgc3ViIGJhY2sgdG8gaXQncyBwYXJlbnRcclxuICAgIGlmICh0aGlzLl9nZXRJdGVtT3B0aW9uKGl0ZW0sICdvdmVyZmxvdycpID09PSB0cnVlKSB7XHJcbiAgICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1pdGVtJykpIHtcclxuICAgICAgICBpdGVtLmFwcGVuZENoaWxkKHN1YilcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbnNlcnRBZnRlckVsZW1lbnQodGhpcy5lbGVtZW50LCBpdGVtKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBEYXRhVXRpbC5yZW1vdmUoaXRlbSwgJ3N1YicpXHJcbiAgICAgIERhdGFVdGlsLnJlbW92ZShzdWIsICdpdGVtJylcclxuICAgICAgRGF0YVV0aWwucmVtb3ZlKHN1YiwgJ21lbnUnKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChEYXRhVXRpbC5oYXMoaXRlbSwgJ3BvcHBlcicpID09PSB0cnVlKSB7XHJcbiAgICAgIERhdGFVdGlsLmdldChpdGVtLCAncG9wcGVyJykuZGVzdHJveSgpXHJcbiAgICAgIERhdGFVdGlsLnJlbW92ZShpdGVtLCAncG9wcGVyJylcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXN0cm95IHBvcHBlcihuZXcpXHJcbiAgICB0aGlzLmRlc3Ryb3lEcm9wZG93blBvcHBlcihpdGVtKVxyXG4gICAgRXZlbnRIYW5kbGVyVXRpbC50cmlnZ2VyKHRoaXMuZWxlbWVudCwgJ2t0Lm1lbnUuZHJvcGRvd24uaGlkZGVuJylcclxuICB9XHJcblxyXG4gIC8vIERlc3Ryb3kgZHJvcGRvd24gcG9wcGVyKG5ldylcclxuICBwcml2YXRlIGRlc3Ryb3lEcm9wZG93blBvcHBlciA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKERhdGFVdGlsLmhhcyhpdGVtLCAncG9wcGVyJykgPT09IHRydWUpIHtcclxuICAgICAgRGF0YVV0aWwuZ2V0KGl0ZW0sICdwb3BwZXInKS5kZXN0cm95KClcclxuICAgICAgRGF0YVV0aWwucmVtb3ZlKGl0ZW0sICdwb3BwZXInKVxyXG4gICAgfVxyXG5cclxuICAgIEV2ZW50SGFuZGxlclV0aWwudHJpZ2dlcih0aGlzLmVsZW1lbnQsICdrdC5tZW51LmRyb3Bkb3duLmhpZGRlbicpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG93QWNjb3JkaW9uID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBpZiAoRXZlbnRIYW5kbGVyVXRpbC50cmlnZ2VyKHRoaXMuZWxlbWVudCwgJ2t0Lm1lbnUuYWNjb3JkaW9uLnNob3cnKSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hY2NvcmRpb24uZXhwYW5kID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLl9oaWRlQWNjb3JkaW9ucyhpdGVtKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChEYXRhVXRpbC5oYXMoaXRlbSwgJ3BvcHBlcicpID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuX2hpZGVEcm9wZG93bihpdGVtKVxyXG4gICAgfVxyXG5cclxuICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnaG92ZXInKSAvLyB1cGRhdGVXV1xyXG4gICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdzaG93aW5nJylcclxuXHJcbiAgICBjb25zdCBzdWJFbGVtZW50ID0gdGhpcy5fZ2V0SXRlbVN1YkVsZW1lbnQoaXRlbSlcclxuICAgIGlmIChzdWJFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHN1YiA9IHN1YkVsZW1lbnQgYXMgSFRNTEVsZW1lbnRcclxuICAgICAgRWxlbWVudEFuaW1hdGVVdGlsLnNsaWRlRG93bihzdWIsIHRoaXMub3B0aW9ucy5hY2NvcmRpb24uc2xpZGVTcGVlZCwgKCkgPT4ge1xyXG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnc2hvd2luZycpXHJcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdzaG93JylcclxuICAgICAgICBzdWIuY2xhc3NMaXN0LmFkZCgnc2hvdycpXHJcbiAgICAgICAgRXZlbnRIYW5kbGVyVXRpbC50cmlnZ2VyKHRoaXMuZWxlbWVudCwgJ2t0Lm1lbnUuYWNjb3JkaW9uLnNob3duJylcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hpZGVBY2NvcmRpb24gPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIGlmIChFdmVudEhhbmRsZXJVdGlsLnRyaWdnZXIodGhpcy5lbGVtZW50LCAna3QubWVudS5hY2NvcmRpb24uaGlkZScpID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdWIgPSB0aGlzLl9nZXRJdGVtU3ViRWxlbWVudChpdGVtKVxyXG4gICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdoaWRpbmcnKVxyXG5cclxuICAgIGlmIChzdWIpIHtcclxuICAgICAgRWxlbWVudEFuaW1hdGVVdGlsLnNsaWRlVXAoc3ViLCB0aGlzLm9wdGlvbnMuYWNjb3JkaW9uLnNsaWRlU3BlZWQsICgpID0+IHtcclxuICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGluZycpXHJcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93JylcclxuICAgICAgICBzdWIuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpXHJcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdob3ZlcicpIC8vIHVwZGF0ZVxyXG4gICAgICAgIEV2ZW50SGFuZGxlclV0aWwudHJpZ2dlcih0aGlzLmVsZW1lbnQsICdrdC5tZW51LmFjY29yZGlvbi5oaWRkZW4nKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSGlkZSBhbGwgc2hvd24gYWNjb3JkaW9ucyBvZiBpdGVtXHJcbiAgcHJpdmF0ZSBfaGlkZUFjY29yZGlvbnMgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGl0ZW1zVG9IaWRlID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zaG93W2RhdGEta3QtbWVudS10cmlnZ2VyXScpXHJcbiAgICBpZiAoaXRlbXNUb0hpZGUgJiYgaXRlbXNUb0hpZGUubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaXRlbXNUb0hpZGUubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpdGVtVG9IaWRlID0gaXRlbXNUb0hpZGVbaV0gYXMgSFRNTEVsZW1lbnRcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5fZ2V0SXRlbVN1YlR5cGUoaXRlbVRvSGlkZSkgPT09ICdhY2NvcmRpb24nICYmXHJcbiAgICAgICAgICBpdGVtVG9IaWRlICE9PSBpdGVtICYmXHJcbiAgICAgICAgICBpdGVtLmNvbnRhaW5zKGl0ZW1Ub0hpZGUpID09PSBmYWxzZSAmJlxyXG4gICAgICAgICAgaXRlbVRvSGlkZS5jb250YWlucyhpdGVtKSA9PT0gZmFsc2VcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuX2hpZGVBY2NvcmRpb24oaXRlbVRvSGlkZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEV2ZW50IEhhbmRsZXJzXHJcbiAgLy8gUmVzZXQgaXRlbSBzdGF0ZSBjbGFzc2VzIGlmIGl0ZW0gc3ViIHR5cGUgY2hhbmdlZFxyXG4gIHByaXZhdGUgX3Jlc2V0ID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBpZiAodGhpcy5faGFzSXRlbVN1YihpdGVtKSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3ViID0gdGhpcy5fZ2V0SXRlbVN1YkVsZW1lbnQoaXRlbSlcclxuXHJcbiAgICAvLyBSZXNldCBzdWIgc3RhdGUgaWYgc3ViIHR5cGUgaXMgY2hhbmdlZCBkdXJpbmcgdGhlIHdpbmRvdyByZXNpemVcclxuICAgIGlmIChEYXRhVXRpbC5oYXMoaXRlbSwgJ3R5cGUnKSAmJiBEYXRhVXRpbC5nZXQoaXRlbSwgJ3R5cGUnKSAhPT0gdGhpcy5fZ2V0SXRlbVN1YlR5cGUoaXRlbSkpIHtcclxuICAgICAgLy8gdXBkYXRlZFxyXG4gICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2hvdmVyJylcclxuICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93JylcclxuICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93JylcclxuICAgICAgaWYgKHN1YiAmJiBzdWIucmVtb3ZlQ2xhc3MpIHtcclxuICAgICAgICBzdWIucmVtb3ZlQ2xhc3Moc3ViLCAnc2hvdycpXHJcbiAgICAgIH1cclxuICAgIH0gLy8gdXBkYXRlZFxyXG4gIH1cclxuXHJcbiAgLy8gVE9ETzogbm90IGRvbmVcclxuICBwcml2YXRlIF9kZXN0cm95ID0gKCkgPT4ge31cclxuXHJcbiAgLy8gVXBkYXRlIGFsbCBpdGVtIHN0YXRlIGNsYXNzZXMgaWYgaXRlbSBzdWIgdHlwZSBjaGFuZ2VkXHJcbiAgcHJpdmF0ZSBfdXBkYXRlID0gKCkgPT4ge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1lbnUtaXRlbVtkYXRhLWt0LW1lbnUtdHJpZ2dlcl0nKVxyXG4gICAgaXRlbXMuZm9yRWFjaCgoZWwpID0+IHRoaXMuX3Jlc2V0KGVsIGFzIEhUTUxFbGVtZW50KSlcclxuICB9XHJcblxyXG4gIC8vIEhpZGUgaXRlbSBzdWJcclxuICBwcml2YXRlIF9oaWRlID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzSXRlbVN1YlNob3duKGl0ZW0pID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZ2V0SXRlbVN1YlR5cGUoaXRlbSkgPT09ICdkcm9wZG93bicpIHtcclxuICAgICAgdGhpcy5faGlkZURyb3Bkb3duKGl0ZW0pXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2dldEl0ZW1TdWJUeXBlKGl0ZW0pID09PSAnYWNjb3JkaW9uJykge1xyXG4gICAgICB0aGlzLl9oaWRlQWNjb3JkaW9uKGl0ZW0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBTaG93IGl0ZW0gc3ViXHJcbiAgcHJpdmF0ZSBfc2hvdyA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc0l0ZW1TdWJTaG93bihpdGVtKSA9PT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZ2V0SXRlbVN1YlR5cGUoaXRlbSkgPT09ICdkcm9wZG93bicpIHtcclxuICAgICAgdGhpcy5fc2hvd0Ryb3Bkb3duKGl0ZW0pIC8vIC8vIHNob3cgY3VycmVudCBkcm9wZG93blxyXG4gICAgfSBlbHNlIGlmICh0aGlzLl9nZXRJdGVtU3ViVHlwZShpdGVtKSA9PT0gJ2FjY29yZGlvbicpIHtcclxuICAgICAgdGhpcy5fc2hvd0FjY29yZGlvbihpdGVtKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlbWVtYmVyIGxhc3Qgc3VibWVudSB0eXBlXHJcblxyXG4gICAgRGF0YVV0aWwuc2V0KGl0ZW0sICd0eXBlJywgdGhpcy5fZ2V0SXRlbVN1YlR5cGUoaXRlbSkpIC8vIHVwZGF0ZWRcclxuICB9XHJcblxyXG4gIC8vIFRvZ2dsZSBpdGVtIHN1YlxyXG4gIHByaXZhdGUgX3RvZ2dsZSA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc0l0ZW1TdWJTaG93bihpdGVtKSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLl9oaWRlKGl0ZW0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zaG93KGl0ZW0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBNb3VzZW91dCBoYW5kbGVcclxuICBwcml2YXRlIF9tb3VzZW91dCA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgZTogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuX2dldEl0ZW1FbGVtZW50KGVsZW1lbnQpXHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2dldEl0ZW1PcHRpb24oaXRlbSwgJ3RyaWdnZXInKSAhPT0gJ2hvdmVyJykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmIChEYXRhVXRpbC5nZXQoaXRlbSwgJ2hvdmVyJykgPT09ICcxJykge1xyXG4gICAgICAgIHRoaXMuX2hpZGUoaXRlbSlcclxuICAgICAgfVxyXG4gICAgfSwgdGhpcy5vcHRpb25zLmRyb3Bkb3duLmhvdmVyVGltZW91dClcclxuXHJcbiAgICBEYXRhVXRpbC5zZXQoaXRlbSwgJ2hvdmVyJywgJzEnKVxyXG4gICAgRGF0YVV0aWwuc2V0KGl0ZW0sICd0aW1lb3V0JywgdGltZW91dClcclxuICB9XHJcblxyXG4gIC8vIE1vdXNlb3ZlciBoYW5kbGVcclxuICBwcml2YXRlIF9tb3VzZW92ZXIgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIGU6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9nZXRJdGVtRWxlbWVudChlbGVtZW50KVxyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9nZXRJdGVtT3B0aW9uKGl0ZW0sICd0cmlnZ2VyJykgIT09ICdob3ZlcicpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKERhdGFVdGlsLmdldChpdGVtLCAnaG92ZXInKSA9PT0gJzEnKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dChEYXRhVXRpbC5nZXQoaXRlbSwgJ3RpbWVvdXQnKSlcclxuICAgICAgRGF0YVV0aWwucmVtb3ZlKGl0ZW0sICdob3ZlcicpXHJcbiAgICAgIERhdGFVdGlsLnJlbW92ZShpdGVtLCAndGltZW91dCcpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2hvdyhpdGVtKVxyXG4gIH1cclxuXHJcbiAgLy8gRGlzbWlzcyBoYW5kbGVyXHJcbiAgcHJpdmF0ZSBfZGlzbWlzcyA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgZTogRXZlbnQpID0+IHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9nZXRJdGVtRWxlbWVudChlbGVtZW50KVxyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9nZXRJdGVtQ2hpbGRFbGVtZW50cyhpdGVtKVxyXG4gICAgLy9pZiAoIGl0ZW0gIT09IG51bGwgJiYgX2dldEl0ZW1PcHRpb24oaXRlbSwgJ3RyaWdnZXInKSA9PT0gJ2NsaWNrJyAmJiAgX2dldEl0ZW1TdWJUeXBlKGl0ZW0pID09PSAnZHJvcGRvd24nICkge1xyXG4gICAgY29uc3QgaXRlbVN1YlR5cGUgPSB0aGlzLl9nZXRJdGVtU3ViVHlwZShpdGVtKVxyXG4gICAgaWYgKGl0ZW0gIT09IG51bGwgJiYgaXRlbVN1YlR5cGUgPT09ICdkcm9wZG93bicpIHtcclxuICAgICAgdGhpcy5faGlkZShpdGVtKSAvLyBoaWRlIGl0ZW1zIGRyb3Bkb3duXHJcblxyXG4gICAgICAvLyBIaWRlIGFsbCBjaGlsZCBlbGVtZW50cyBhcyB3ZWxsXHJcbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAvL2lmICggX2dldEl0ZW1PcHRpb24oaXRlbSwgJ3RyaWdnZXInKSA9PT0gJ2NsaWNrJyAmJiAgX2dldEl0ZW1TdWJUeXBlKGl0ZW0pID09PSAnZHJvcGRvd24nICkge1xyXG4gICAgICAgICAgaWYgKGl0ZW1zW2ldICE9PSBudWxsICYmIHRoaXMuX2dldEl0ZW1TdWJUeXBlKGl0ZW1zW2ldIGFzIEhUTUxFbGVtZW50KSA9PT0gJ2Ryb3Bkb3duJykge1xyXG4gICAgICAgICAgICB0aGlzLl9oaWRlKGl0ZW1zW2ldIGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTGluayBoYW5kbGVyXHJcbiAgcHJpdmF0ZSBfbGluayA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgZTogRXZlbnQpID0+IHtcclxuICAgIGlmIChFdmVudEhhbmRsZXJVdGlsLnRyaWdnZXIodGhpcy5lbGVtZW50LCAna3QubWVudS5saW5rLmNsaWNrJykgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIC8vIERpc21pc3MgYWxsIHNob3duIGRyb3Bkb3duc1xyXG4gICAgTWVudUNvbXBvbmVudC5oaWRlRHJvcGRvd25zKHVuZGVmaW5lZClcclxuICAgIEV2ZW50SGFuZGxlclV0aWwudHJpZ2dlcih0aGlzLmVsZW1lbnQsICdrdC5tZW51LmxpbmsuY2xpY2tlZCcpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGljayA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgZTogRXZlbnQpID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuX2dldEl0ZW1FbGVtZW50KGVsZW1lbnQpXHJcbiAgICBpZiAodGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAndHJpZ2dlcicpICE9PSAnY2xpY2snKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9nZXRJdGVtT3B0aW9uKGl0ZW0sICd0b2dnbGUnKSA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5fc2hvdyhpdGVtKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fdG9nZ2xlKGl0ZW0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIC8vICoqIFB1YmxpYyBBUEkgICoqIC8vXHJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBwdWJsaWMgY2xpY2sgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIGU6IEV2ZW50KSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xpY2soZWxlbWVudCwgZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsaW5rID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBlOiBFdmVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xpbmsoZWxlbWVudCwgZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkaXNtaXNzID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBlOiBFdmVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc21pc3MoZWxlbWVudCwgZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3VzZW92ZXIgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIGU6IEV2ZW50KSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW91c2VvdmVyKGVsZW1lbnQsIGUgYXMgTW91c2VFdmVudClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3VzZW91dCA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgZTogRXZlbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLl9tb3VzZW91dChlbGVtZW50LCBlIGFzIE1vdXNlRXZlbnQpXHJcbiAgfVxyXG5cclxuICAvLyBHZW5lcmFsIE1ldGhvZHNcclxuICBwdWJsaWMgZ2V0SXRlbVRyaWdnZXJUeXBlID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAndHJpZ2dlcicpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXRlbVN1YlR5cGUgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtU3ViVHlwZShlbGVtZW50KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3cgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLl9zaG93KGl0ZW0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlkZSA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hpZGUoaXRlbSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldCA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Jlc2V0KGl0ZW0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlID0gKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RWxlbWVudCA9ICgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLmVsZW1lbnRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJdGVtTGlua0VsZW1lbnQgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtTGlua0VsZW1lbnQoaXRlbSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJdGVtVG9nZ2xlRWxlbWVudCA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEl0ZW1Ub2dnbGVFbGVtZW50KGl0ZW0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXRlbVN1YkVsZW1lbnQgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtU3ViRWxlbWVudChpdGVtKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEl0ZW1QYXJlbnRFbGVtZW50cyA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEl0ZW1QYXJlbnRFbGVtZW50cyhpdGVtKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzSXRlbVN1YlNob3duID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNJdGVtU3ViU2hvd24oaXRlbSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0l0ZW1QYXJlbnRTaG93biA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzSXRlbVBhcmVudFNob3duKGl0ZW0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VHJpZ2dlckVsZW1lbnQgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy50cmlnZ2VyRWxlbWVudFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzSXRlbURyb3Bkb3duUGVybWFuZW50ID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNJdGVtRHJvcGRvd25QZXJtYW5lbnQoaXRlbSlcclxuICB9XHJcblxyXG4gIC8vIEFjY29yZGlvbiBNb2RlIE1ldGhvZHNcclxuICBwdWJsaWMgaGlkZUFjY29yZGlvbnMgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLl9oaWRlQWNjb3JkaW9ucyhpdGVtKVxyXG4gIH1cclxuXHJcbiAgLy8gRXZlbnQgQVBJXHJcbiAgcHVibGljIG9uID0gKG5hbWU6IHN0cmluZywgaGFuZGxlcjogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gRXZlbnRIYW5kbGVyVXRpbC5vbih0aGlzLmVsZW1lbnQsIG5hbWUsIGhhbmRsZXIpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25lID0gKG5hbWU6IHN0cmluZywgaGFuZGxlcjogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gRXZlbnRIYW5kbGVyVXRpbC5vbmUodGhpcy5lbGVtZW50LCBuYW1lLCBoYW5kbGVyKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9mZiA9IChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIHJldHVybiBFdmVudEhhbmRsZXJVdGlsLm9mZih0aGlzLmVsZW1lbnQsIG5hbWUpXHJcbiAgfVxyXG5cclxuICAvLyBwdWJsaWMgc3RhdGljIG1ldGhvZHNcclxuICAvLyBHZXQgS1RNZW51IGluc3RhbmNlIGJ5IGVsZW1lbnRcclxuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAvLyBFbGVtZW50IGhhcyBtZW51IERPTSByZWZlcmVuY2UgaW4gaXQncyBEQVRBIHN0b3JhZ2VcclxuICAgIGNvbnN0IGVsZW1lbnRNZW51ID0gRGF0YVV0aWwuZ2V0KGVsZW1lbnQsICdtZW51JylcclxuICAgIGlmIChlbGVtZW50TWVudSkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudE1lbnVcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbGVtZW50IGhhcyAubWVudSBwYXJlbnRcclxuICAgIGNvbnN0IG1lbnUgPSBlbGVtZW50LmNsb3Nlc3QoJy5tZW51JylcclxuICAgIGlmIChtZW51KSB7XHJcbiAgICAgIGNvbnN0IG1lbnVEYXRhID0gRGF0YVV0aWwuZ2V0KG1lbnUgYXMgSFRNTEVsZW1lbnQsICdtZW51JylcclxuICAgICAgaWYgKG1lbnVEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIG1lbnVEYXRhXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBFbGVtZW50IGhhcyBhIHBhcmVudCB3aXRoIERPTSByZWZlcmVuY2UgdG8gLm1lbnUgaW4gaXQncyBEQVRBIHN0b3JhZ2VcclxuICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbWVudS1saW5rJykpIHtcclxuICAgICAgY29uc3Qgc3ViID0gZWxlbWVudC5jbG9zZXN0KCcubWVudS1zdWInKVxyXG4gICAgICBpZiAoc3ViKSB7XHJcbiAgICAgICAgY29uc3Qgc3ViTWVudSA9IERhdGFVdGlsLmdldChzdWIgYXMgSFRNTEVsZW1lbnQsICdtZW51JylcclxuICAgICAgICBpZiAoc3ViTWVudSkge1xyXG4gICAgICAgICAgcmV0dXJuIHN1Yk1lbnVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgLy8gSGlkZSBhbGwgZHJvcGRvd25zIGFuZCBza2lwIG9uZSBpZiBwcm92aWRlZFxyXG4gIHB1YmxpYyBzdGF0aWMgaGlkZURyb3Bkb3ducyA9IChza2lwOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgY29uc3QgaXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2hvdy5tZW51LWRyb3Bkb3duW2RhdGEta3QtbWVudS10cmlnZ2VyXScpXHJcblxyXG4gICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldXHJcbiAgICAgICAgY29uc3QgbWVudSA9IE1lbnVDb21wb25lbnQuZ2V0SW5zdGFuY2UoaXRlbSBhcyBIVE1MRWxlbWVudClcclxuXHJcbiAgICAgICAgaWYgKG1lbnUgJiYgbWVudS5nZXRJdGVtU3ViVHlwZShpdGVtKSA9PT0gJ2Ryb3Bkb3duJykge1xyXG4gICAgICAgICAgaWYgKHNraXApIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIG1lbnUuZ2V0SXRlbVN1YkVsZW1lbnQoaXRlbSkuY29udGFpbnMoc2tpcCkgPT09IGZhbHNlICYmXHJcbiAgICAgICAgICAgICAgaXRlbS5jb250YWlucyhza2lwKSA9PT0gZmFsc2UgJiZcclxuICAgICAgICAgICAgICBpdGVtICE9PSBza2lwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIG1lbnUuaGlkZShpdGVtKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtZW51LmhpZGUoaXRlbSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgdXBkYXRlRHJvcGRvd25zID0gKCkgPT4ge1xyXG4gICAgY29uc3QgaXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2hvdy5tZW51LWRyb3Bkb3duW2RhdGEta3QtbWVudS10cmlnZ2VyXScpXHJcbiAgICBpZiAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldXHJcblxyXG4gICAgICAgIGlmIChEYXRhVXRpbC5oYXMoaXRlbSBhcyBIVE1MRWxlbWVudCwgJ3BvcHBlcicpKSB7XHJcbiAgICAgICAgICBEYXRhVXRpbC5nZXQoaXRlbSBhcyBIVE1MRWxlbWVudCwgJ3BvcHBlcicpLmZvcmNlVXBkYXRlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEdsb2JhbCBoYW5kbGVyc1xyXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSW5zdGFuY2VzID0gKHNlbGVjdG9yOiBzdHJpbmcpID0+IHtcclxuICAgIC8vIEluaXRpYWxpemUgbWVudXNcclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpLmZvckVhY2goKGVsKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1lbnVJdGVtID0gZWwgYXMgSFRNTEVsZW1lbnRcclxuICAgICAgbGV0IG1lbnVJbnN0YW5jZSA9IE1lbnVDb21wb25lbnQuZ2V0SW5zdGFuY2UobWVudUl0ZW0pXHJcbiAgICAgIGlmICghbWVudUluc3RhbmNlKSB7XHJcbiAgICAgICAgbWVudUluc3RhbmNlID0gbmV3IE1lbnVDb21wb25lbnQoZWwgYXMgSFRNTEVsZW1lbnQsIGRlZmF1bHRNZW51T3B0aW9ucylcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaW5pdEdsb2JhbEhhbmRsZXJzID0gKCkgPT4ge1xyXG4gICAgLy8gRHJvcGRvd24gaGFuZGxlclxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICBjb25zdCBtZW51SXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2hvdy5tZW51LWRyb3Bkb3duW2RhdGEta3QtbWVudS10cmlnZ2VyXScpXHJcbiAgICAgIGlmIChtZW51SXRlbXMgJiYgbWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IG1lbnVJdGVtc1tpXSBhcyBIVE1MRWxlbWVudFxyXG4gICAgICAgICAgY29uc3QgbWVudU9iaiA9IE1lbnVDb21wb25lbnQuZ2V0SW5zdGFuY2UoaXRlbSkgYXMgTWVudUNvbXBvbmVudFxyXG4gICAgICAgICAgaWYgKG1lbnVPYmogJiYgbWVudU9iai5nZXRJdGVtU3ViVHlwZShpdGVtKSA9PT0gJ2Ryb3Bkb3duJykge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICAgICAgICAgIGNvbnN0IG1lbnUgPSBtZW51T2JqLmdldEVsZW1lbnQoKVxyXG4gICAgICAgICAgICBjb25zdCBzdWIgPSBtZW51T2JqLmdldEl0ZW1TdWJFbGVtZW50KGl0ZW0pIGFzIEhUTUxFbGVtZW50XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09PSBlLnRhcmdldCB8fCBpdGVtLmNvbnRhaW5zKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdWIgJiYgKHN1YiA9PT0gZS50YXJnZXQgfHwgc3ViLmNvbnRhaW5zKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSkpIHtcclxuICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1lbnVPYmouaGlkZShpdGVtKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyBTdWIgdG9nZ2xlIGhhbmRsZXJcclxuICAgIERPTUV2ZW50SGFuZGxlclV0aWwub24oXHJcbiAgICAgIGRvY3VtZW50LmJvZHksXHJcbiAgICAgICcubWVudS1pdGVtW2RhdGEta3QtbWVudS10cmlnZ2VyXSA+IC5tZW51LWxpbmssIFtkYXRhLWt0LW1lbnUtdHJpZ2dlcl06bm90KC5tZW51LWl0ZW0pOm5vdChbZGF0YS1rdC1tZW51LXRyaWdnZXI9XCJhdXRvXCJdKScsXHJcbiAgICAgICdjbGljaycsXHJcbiAgICAgIGZ1bmN0aW9uICh0aGlzOiBIVE1MRWxlbWVudCwgZTogRXZlbnQpIHtcclxuICAgICAgICBjb25zdCBtZW51ID0gTWVudUNvbXBvbmVudC5nZXRJbnN0YW5jZSh0aGlzKSBhcyBNZW51Q29tcG9uZW50XHJcbiAgICAgICAgaWYgKG1lbnUpIHtcclxuICAgICAgICAgIHJldHVybiBtZW51LmNsaWNrKHRoaXMsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApXHJcblxyXG4gICAgLy8gLy8gTGluayBoYW5kbGVyXHJcbiAgICBET01FdmVudEhhbmRsZXJVdGlsLm9uKFxyXG4gICAgICBkb2N1bWVudC5ib2R5LFxyXG4gICAgICAnLm1lbnUtaXRlbTpub3QoW2RhdGEta3QtbWVudS10cmlnZ2VyXSkgPiAubWVudS1saW5rJyxcclxuICAgICAgJ2NsaWNrJyxcclxuICAgICAgZnVuY3Rpb24gKHRoaXM6IEhUTUxFbGVtZW50LCBlOiBFdmVudCkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgICBjb25zdCBtZW51ID0gTWVudUNvbXBvbmVudC5nZXRJbnN0YW5jZSh0aGlzKVxyXG4gICAgICAgIGlmIChtZW51ICYmIG1lbnUubGluaykge1xyXG4gICAgICAgICAgcmV0dXJuIG1lbnUubGluayh0aGlzLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKVxyXG5cclxuICAgIC8vIERpc21pc3MgaGFuZGxlclxyXG4gICAgRE9NRXZlbnRIYW5kbGVyVXRpbC5vbihcclxuICAgICAgZG9jdW1lbnQuYm9keSxcclxuICAgICAgJ1tkYXRhLWt0LW1lbnUtZGlzbWlzcz1cInRydWVcIl0nLFxyXG4gICAgICAnY2xpY2snLFxyXG4gICAgICBmdW5jdGlvbiAodGhpczogSFRNTEVsZW1lbnQsIGU6IEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgbWVudSA9IE1lbnVDb21wb25lbnQuZ2V0SW5zdGFuY2UodGhpcykgYXMgTWVudUNvbXBvbmVudFxyXG4gICAgICAgIGlmIChtZW51KSB7XHJcbiAgICAgICAgICByZXR1cm4gbWVudS5kaXNtaXNzKHRoaXMsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApXHJcblxyXG4gICAgLy8gTW91c2VvdmVyIGhhbmRsZXJcclxuICAgIERPTUV2ZW50SGFuZGxlclV0aWwub24oXHJcbiAgICAgIGRvY3VtZW50LmJvZHksXHJcbiAgICAgICdbZGF0YS1rdC1tZW51LXRyaWdnZXJdLCAubWVudS1zdWInLFxyXG4gICAgICAnbW91c2VvdmVyJyxcclxuICAgICAgZnVuY3Rpb24gKHRoaXM6IEhUTUxFbGVtZW50LCBlOiBFdmVudCkge1xyXG4gICAgICAgIGNvbnN0IG1lbnUgPSBNZW51Q29tcG9uZW50LmdldEluc3RhbmNlKHRoaXMpIGFzIE1lbnVDb21wb25lbnRcclxuICAgICAgICBpZiAobWVudSAmJiBtZW51LmdldEl0ZW1TdWJUeXBlKHRoaXMpID09PSAnZHJvcGRvd24nKSB7XHJcbiAgICAgICAgICByZXR1cm4gbWVudS5tb3VzZW92ZXIodGhpcywgZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIClcclxuXHJcbiAgICAvLyBNb3VzZW91dCBoYW5kbGVyXHJcbiAgICBET01FdmVudEhhbmRsZXJVdGlsLm9uKFxyXG4gICAgICBkb2N1bWVudC5ib2R5LFxyXG4gICAgICAnW2RhdGEta3QtbWVudS10cmlnZ2VyXSwgLm1lbnUtc3ViJyxcclxuICAgICAgJ21vdXNlb3V0JyxcclxuICAgICAgZnVuY3Rpb24gKHRoaXM6IEhUTUxFbGVtZW50LCBlOiBFdmVudCkge1xyXG4gICAgICAgIGNvbnN0IG1lbnUgPSBNZW51Q29tcG9uZW50LmdldEluc3RhbmNlKHRoaXMpIGFzIE1lbnVDb21wb25lbnRcclxuICAgICAgICBpZiAobWVudSAmJiBtZW51LmdldEl0ZW1TdWJUeXBlKHRoaXMpID09PSAnZHJvcGRvd24nKSB7XHJcbiAgICAgICAgICByZXR1cm4gbWVudS5tb3VzZW91dCh0aGlzLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKVxyXG5cclxuICAgIC8vIFJlc2l6ZSBoYW5kbGVyXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICBsZXQgdGltZXJcclxuICAgICAgdGhyb3R0bGUoXHJcbiAgICAgICAgdGltZXIsXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgLy8gTG9jYXRlIGFuZCB1cGRhdGUgRHJhd2VyIGluc3RhbmNlcyBvbiB3aW5kb3cgcmVzaXplXHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWt0LW1lbnU9XCJ0cnVlXCJdJylcclxuICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lbnUgPSBNZW51Q29tcG9uZW50LmdldEluc3RhbmNlKGVsIGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICAgICAgICBpZiAobWVudSkge1xyXG4gICAgICAgICAgICAgIG1lbnUudXBkYXRlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIDIwMFxyXG4gICAgICApXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBib290c3RyYXAgPSAoKSA9PiB7XHJcbiAgICBNZW51Q29tcG9uZW50LmluaXRHbG9iYWxIYW5kbGVycygpXHJcbiAgICBNZW51Q29tcG9uZW50LmNyZWF0ZUluc3RhbmNlcygnW2RhdGEta3QtbWVudT1cInRydWVcIl0nKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWluaXRpYWxpemF0aW9uID0gKCkgPT4ge1xyXG4gICAgTWVudUNvbXBvbmVudC5jcmVhdGVJbnN0YW5jZXMoJ1tkYXRhLWt0LW1lbnU9XCJ0cnVlXCJdJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSW5zYW5jZSA9IChcclxuICAgIHNlbGVjdG9yOiBzdHJpbmcsXHJcbiAgICBvcHRpb25zOiBNZW51T3B0aW9ucyA9IGRlZmF1bHRNZW51T3B0aW9uc1xyXG4gICk6IE1lbnVDb21wb25lbnQgfCB1bmRlZmluZWQgPT4ge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcihzZWxlY3RvcilcclxuICAgIGlmICghZWxlbWVudCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50IGFzIEhUTUxFbGVtZW50XHJcbiAgICBsZXQgbWVudSA9IE1lbnVDb21wb25lbnQuZ2V0SW5zdGFuY2UoaXRlbSlcclxuICAgIGlmICghbWVudSkge1xyXG4gICAgICBtZW51ID0gbmV3IE1lbnVDb21wb25lbnQoaXRlbSwgb3B0aW9ucylcclxuICAgIH1cclxuICAgIHJldHVybiBtZW51XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQge01lbnVDb21wb25lbnQsIGRlZmF1bHRNZW51T3B0aW9uc31cclxuXHJcbiJdfQ==
|
|
1
|
+
import { createPopper } from '@popperjs/core';
|
|
2
|
+
import { getAttributeValueByBreakpoint, getElementChild, getElementParents, getHighestZindex, insertAfterElement, throttle } from "../_utils/DomHelpers";
|
|
3
|
+
import { EventHandlerUtil } from "../_utils/EventHandlerUtil";
|
|
4
|
+
import { DataUtil } from "../_utils/_DataUtil";
|
|
5
|
+
import { DOMEventHandlerUtil } from "../_utils/_DOMEventHandlerUtil";
|
|
6
|
+
import { ElementStyleUtil } from "../_utils/_ElementStyleUtil";
|
|
7
|
+
import { getUniqueIdWithPrefix } from "../_utils/_TypesHelpers";
|
|
8
|
+
import { ElementAnimateUtil } from '../_utils/ElementAnimateUtil';
|
|
9
|
+
const defaultMenuOptions = {
|
|
10
|
+
dropdown: {
|
|
11
|
+
hoverTimeout: 200,
|
|
12
|
+
zindex: 105,
|
|
13
|
+
},
|
|
14
|
+
accordion: {
|
|
15
|
+
slideSpeed: 250,
|
|
16
|
+
expand: false,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
class MenuComponent {
|
|
20
|
+
constructor(_element, options) {
|
|
21
|
+
this.triggerElement = null;
|
|
22
|
+
// Set external trigger element
|
|
23
|
+
this._setTriggerElement = () => {
|
|
24
|
+
const target = document.querySelector(`[data-kt-menu-target="#${this.element.getAttribute('id')}"`);
|
|
25
|
+
if (target) {
|
|
26
|
+
this.triggerElement = target;
|
|
27
|
+
}
|
|
28
|
+
else if (this.element.closest('[data-kt-menu-trigger]')) {
|
|
29
|
+
this.triggerElement = this.element.closest('[data-kt-menu-trigger]');
|
|
30
|
+
}
|
|
31
|
+
else if (this.element.parentNode &&
|
|
32
|
+
getElementChild(this.element.parentNode, '[data-kt-menu-trigger]')) {
|
|
33
|
+
const child = getElementChild(this.element.parentNode, '[data-kt-menu-trigger]');
|
|
34
|
+
if (child) {
|
|
35
|
+
this.triggerElement = child;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (this.triggerElement) {
|
|
39
|
+
DataUtil.set(this.triggerElement, 'menu', this);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
// Test if menu has external trigger element
|
|
43
|
+
this._isTriggerElement = (item) => {
|
|
44
|
+
return this.triggerElement === item;
|
|
45
|
+
};
|
|
46
|
+
// Get item option(through html attributes)
|
|
47
|
+
this._getItemOption = (item, name) => {
|
|
48
|
+
let value = null;
|
|
49
|
+
if (item && item.hasAttribute('data-kt-menu-' + name)) {
|
|
50
|
+
const attr = item.getAttribute('data-kt-menu-' + name) || '';
|
|
51
|
+
value = getAttributeValueByBreakpoint(attr);
|
|
52
|
+
if (value !== null && String(value) === 'true') {
|
|
53
|
+
value = true;
|
|
54
|
+
}
|
|
55
|
+
else if (value !== null && String(value) === 'false') {
|
|
56
|
+
value = false;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return value;
|
|
60
|
+
};
|
|
61
|
+
// Get item element
|
|
62
|
+
this._getItemElement = (_element) => {
|
|
63
|
+
// Element is the external trigger element
|
|
64
|
+
if (this._isTriggerElement(_element)) {
|
|
65
|
+
return _element;
|
|
66
|
+
}
|
|
67
|
+
// Element has item toggler attribute
|
|
68
|
+
if (_element.hasAttribute('data-kt-menu-trigger')) {
|
|
69
|
+
return _element;
|
|
70
|
+
}
|
|
71
|
+
// Element has item DOM reference in it's data storage
|
|
72
|
+
const itemElement = DataUtil.get(_element, 'item');
|
|
73
|
+
if (itemElement) {
|
|
74
|
+
return itemElement;
|
|
75
|
+
}
|
|
76
|
+
// Item is parent of element
|
|
77
|
+
const item = _element.closest('.menu-item[data-kt-menu-trigger]');
|
|
78
|
+
if (item) {
|
|
79
|
+
return item;
|
|
80
|
+
}
|
|
81
|
+
// Element's parent has item DOM reference in it's data storage
|
|
82
|
+
const sub = _element.closest('.menu-sub');
|
|
83
|
+
if (sub) {
|
|
84
|
+
const subItem = DataUtil.get(sub, 'item');
|
|
85
|
+
if (subItem) {
|
|
86
|
+
return subItem;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
// Get item parent element
|
|
91
|
+
this._getItemParentElement = (item) => {
|
|
92
|
+
const sub = item.closest('.menu-sub');
|
|
93
|
+
if (!sub) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
const subItem = DataUtil.get(sub, 'item');
|
|
97
|
+
if (subItem) {
|
|
98
|
+
return subItem;
|
|
99
|
+
}
|
|
100
|
+
const parentItem = sub.closest('.menu-item[data-kt-menu-trigger]');
|
|
101
|
+
if (sub && parentItem) {
|
|
102
|
+
return parentItem;
|
|
103
|
+
}
|
|
104
|
+
return null;
|
|
105
|
+
};
|
|
106
|
+
// Get item parent elements
|
|
107
|
+
this._getItemParentElements = (item) => {
|
|
108
|
+
const parents = [];
|
|
109
|
+
let parent;
|
|
110
|
+
let i = 0;
|
|
111
|
+
let buffer = item;
|
|
112
|
+
do {
|
|
113
|
+
parent = this._getItemParentElement(buffer);
|
|
114
|
+
if (parent) {
|
|
115
|
+
parents.push(parent);
|
|
116
|
+
buffer = parent;
|
|
117
|
+
}
|
|
118
|
+
i++;
|
|
119
|
+
} while (parent !== null && i < 20);
|
|
120
|
+
if (this.triggerElement) {
|
|
121
|
+
parents.unshift(this.triggerElement);
|
|
122
|
+
}
|
|
123
|
+
return parents;
|
|
124
|
+
};
|
|
125
|
+
// Prepare popper config for dropdown(see: https://popper.js.org/docs/v2/)
|
|
126
|
+
this._getDropdownPopperConfig = (item) => {
|
|
127
|
+
// Placement
|
|
128
|
+
const placementOption = this._getItemOption(item, 'placement');
|
|
129
|
+
let placement = 'right';
|
|
130
|
+
if (placementOption) {
|
|
131
|
+
placement = placementOption;
|
|
132
|
+
}
|
|
133
|
+
// Flip
|
|
134
|
+
const flipValue = this._getItemOption(item, 'flip');
|
|
135
|
+
const flip = flipValue ? flipValue.toString().split(',') : [];
|
|
136
|
+
// Offset
|
|
137
|
+
const offsetValue = this._getItemOption(item, 'offset');
|
|
138
|
+
const offset = offsetValue ? offsetValue.toString().split(',') : [];
|
|
139
|
+
// Strategy
|
|
140
|
+
const strategy = this._getItemOption(item, 'overflow') === true ? 'absolute' : 'fixed';
|
|
141
|
+
var altAxis = this._getItemOption(item, 'flip') !== false;
|
|
142
|
+
return {
|
|
143
|
+
placement: placement,
|
|
144
|
+
strategy: strategy,
|
|
145
|
+
modifiers: [{
|
|
146
|
+
name: 'offset',
|
|
147
|
+
options: {
|
|
148
|
+
offset: offset
|
|
149
|
+
}
|
|
150
|
+
}, {
|
|
151
|
+
name: 'preventOverflow',
|
|
152
|
+
options: {
|
|
153
|
+
altAxis: altAxis
|
|
154
|
+
}
|
|
155
|
+
}, {
|
|
156
|
+
name: 'flip',
|
|
157
|
+
options: {
|
|
158
|
+
flipVariations: false
|
|
159
|
+
}
|
|
160
|
+
}]
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
// Get item child element
|
|
164
|
+
this._getItemChildElement = (item) => {
|
|
165
|
+
let selector = item;
|
|
166
|
+
const subItem = DataUtil.get(item, 'sub');
|
|
167
|
+
if (subItem) {
|
|
168
|
+
selector = subItem;
|
|
169
|
+
}
|
|
170
|
+
if (selector) {
|
|
171
|
+
//element = selector.querySelector('.show.menu-item[data-kt-menu-trigger]');
|
|
172
|
+
const element = selector.querySelector('.menu-item[data-kt-menu-trigger]');
|
|
173
|
+
if (element) {
|
|
174
|
+
return element;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return null;
|
|
178
|
+
};
|
|
179
|
+
// Get item child elements
|
|
180
|
+
this._getItemChildElements = (item) => {
|
|
181
|
+
const children = [];
|
|
182
|
+
let child;
|
|
183
|
+
let i = 0;
|
|
184
|
+
let buffer = item;
|
|
185
|
+
do {
|
|
186
|
+
child = this._getItemChildElement(buffer);
|
|
187
|
+
if (child) {
|
|
188
|
+
children.push(child);
|
|
189
|
+
buffer = child;
|
|
190
|
+
}
|
|
191
|
+
i++;
|
|
192
|
+
} while (child !== null && i < 20);
|
|
193
|
+
return children;
|
|
194
|
+
};
|
|
195
|
+
// Get item sub element
|
|
196
|
+
this._getItemSubElement = (item) => {
|
|
197
|
+
if (!item) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
if (this._isTriggerElement(item)) {
|
|
201
|
+
return this.element;
|
|
202
|
+
}
|
|
203
|
+
if (item.classList.contains('menu-sub')) {
|
|
204
|
+
return item;
|
|
205
|
+
}
|
|
206
|
+
else if (DataUtil.has(item, 'sub')) {
|
|
207
|
+
return DataUtil.get(item, 'sub');
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
return getElementChild(item, '.menu-sub');
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
this._getCss = (el, styleProp) => {
|
|
214
|
+
const defaultView = (el.ownerDocument || document).defaultView;
|
|
215
|
+
if (!defaultView) {
|
|
216
|
+
return '';
|
|
217
|
+
}
|
|
218
|
+
// sanitize property name to css notation
|
|
219
|
+
// (hyphen separated words eg. font-Size)
|
|
220
|
+
styleProp = styleProp.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
221
|
+
return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);
|
|
222
|
+
};
|
|
223
|
+
// Get item sub type
|
|
224
|
+
this._getItemSubType = (element) => {
|
|
225
|
+
const sub = this._getItemSubElement(element);
|
|
226
|
+
if (sub && parseInt(this._getCss(sub, 'z-index')) > 0) {
|
|
227
|
+
return 'dropdown';
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
return 'accordion';
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
// Test if item's sub is shown
|
|
234
|
+
this._isItemSubShown = (item) => {
|
|
235
|
+
let sub = this._getItemSubElement(item);
|
|
236
|
+
if (sub) {
|
|
237
|
+
if (this._getItemSubType(item) === 'dropdown') {
|
|
238
|
+
return sub.classList.contains('show') && sub.hasAttribute('data-popper-placement');
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
return item.classList.contains('show');
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return false;
|
|
245
|
+
};
|
|
246
|
+
// Test if item dropdown is permanent
|
|
247
|
+
this._isItemDropdownPermanent = (item) => {
|
|
248
|
+
return this._getItemOption(item, 'permanent') === true;
|
|
249
|
+
};
|
|
250
|
+
// Test if item's parent is shown
|
|
251
|
+
this._isItemParentShown = (item) => {
|
|
252
|
+
return getElementParents(item, '.menu-item.show').length > 0;
|
|
253
|
+
};
|
|
254
|
+
// Test of it is item sub element
|
|
255
|
+
this._isItemSubElement = (item) => {
|
|
256
|
+
return item.classList.contains('menu-sub');
|
|
257
|
+
};
|
|
258
|
+
// Test if item has sub
|
|
259
|
+
this._hasItemSub = (item) => {
|
|
260
|
+
return item.classList.contains('menu-item') && item.hasAttribute('data-kt-menu-trigger');
|
|
261
|
+
};
|
|
262
|
+
// Get link element
|
|
263
|
+
this._getItemLinkElement = (item) => {
|
|
264
|
+
return getElementChild(item, '.menu-link');
|
|
265
|
+
};
|
|
266
|
+
// Get toggle element
|
|
267
|
+
this._getItemToggleElement = (item) => {
|
|
268
|
+
if (this.triggerElement) {
|
|
269
|
+
return this.triggerElement;
|
|
270
|
+
}
|
|
271
|
+
return this._getItemLinkElement(item);
|
|
272
|
+
};
|
|
273
|
+
// Show item dropdown
|
|
274
|
+
this._showDropdown = (item) => {
|
|
275
|
+
if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.show') === false) {
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
// Hide all currently shown dropdowns except current one
|
|
279
|
+
MenuComponent.hideDropdowns(item);
|
|
280
|
+
// const toggle = this._isTriggerElement(item) ? item : this._getItemLinkElement(item);
|
|
281
|
+
const sub = this._getItemSubElement(item);
|
|
282
|
+
const width = this._getItemOption(item, 'width');
|
|
283
|
+
const height = this._getItemOption(item, 'height');
|
|
284
|
+
let zindex = this.options.dropdown.zindex;
|
|
285
|
+
const parentZindex = getHighestZindex(item); // update
|
|
286
|
+
// Apply a new z-index if dropdown's toggle element or it's parent has greater z-index // update
|
|
287
|
+
if (parentZindex !== null && parentZindex >= zindex) {
|
|
288
|
+
zindex = parentZindex + 1;
|
|
289
|
+
}
|
|
290
|
+
if (zindex) {
|
|
291
|
+
ElementStyleUtil.set(sub, 'z-index', zindex);
|
|
292
|
+
}
|
|
293
|
+
if (width) {
|
|
294
|
+
ElementStyleUtil.set(sub, 'width', width);
|
|
295
|
+
}
|
|
296
|
+
if (height) {
|
|
297
|
+
ElementStyleUtil.set(sub, 'height', height);
|
|
298
|
+
}
|
|
299
|
+
this.initDropdownPopper(item, sub);
|
|
300
|
+
item.classList.add('show');
|
|
301
|
+
item.classList.add('menu-dropdown');
|
|
302
|
+
sub.classList.add('show');
|
|
303
|
+
// Append the sub the the root of the menu
|
|
304
|
+
if (this._getItemOption(item, 'overflow') === true) {
|
|
305
|
+
document.body.appendChild(sub);
|
|
306
|
+
DataUtil.set(item, 'sub', sub);
|
|
307
|
+
DataUtil.set(sub, 'item', item);
|
|
308
|
+
DataUtil.set(sub, 'menu', this);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
DataUtil.set(sub, 'item', item);
|
|
312
|
+
}
|
|
313
|
+
EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.shown');
|
|
314
|
+
};
|
|
315
|
+
// Init dropdown popper(new)
|
|
316
|
+
this.initDropdownPopper = (item, sub) => {
|
|
317
|
+
// Setup popper instance
|
|
318
|
+
let reference;
|
|
319
|
+
const attach = this._getItemOption(item, 'attach');
|
|
320
|
+
if (attach) {
|
|
321
|
+
if (attach === 'parent') {
|
|
322
|
+
reference = item.parentNode;
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
reference = document.querySelector(attach);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
reference = item;
|
|
330
|
+
}
|
|
331
|
+
if (reference) {
|
|
332
|
+
const popper = createPopper(reference, sub, this._getDropdownPopperConfig(item));
|
|
333
|
+
DataUtil.set(item, 'popper', popper);
|
|
334
|
+
}
|
|
335
|
+
};
|
|
336
|
+
// Hide item dropdown
|
|
337
|
+
this._hideDropdown = (item) => {
|
|
338
|
+
if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hide') === false) {
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
const sub = this._getItemSubElement(item);
|
|
342
|
+
ElementStyleUtil.set(sub, 'z-index', '');
|
|
343
|
+
ElementStyleUtil.set(sub, 'width', '');
|
|
344
|
+
ElementStyleUtil.set(sub, 'height', '');
|
|
345
|
+
item.classList.remove('show');
|
|
346
|
+
item.classList.remove('menu-dropdown');
|
|
347
|
+
sub.classList.remove('show');
|
|
348
|
+
// Append the sub back to it's parent
|
|
349
|
+
if (this._getItemOption(item, 'overflow') === true) {
|
|
350
|
+
if (item.classList.contains('menu-item')) {
|
|
351
|
+
item.appendChild(sub);
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
insertAfterElement(this.element, item);
|
|
355
|
+
}
|
|
356
|
+
DataUtil.remove(item, 'sub');
|
|
357
|
+
DataUtil.remove(sub, 'item');
|
|
358
|
+
DataUtil.remove(sub, 'menu');
|
|
359
|
+
}
|
|
360
|
+
if (DataUtil.has(item, 'popper') === true) {
|
|
361
|
+
DataUtil.get(item, 'popper').destroy();
|
|
362
|
+
DataUtil.remove(item, 'popper');
|
|
363
|
+
}
|
|
364
|
+
// Destroy popper(new)
|
|
365
|
+
this.destroyDropdownPopper(item);
|
|
366
|
+
EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden');
|
|
367
|
+
};
|
|
368
|
+
// Destroy dropdown popper(new)
|
|
369
|
+
this.destroyDropdownPopper = (item) => {
|
|
370
|
+
if (DataUtil.has(item, 'popper') === true) {
|
|
371
|
+
DataUtil.get(item, 'popper').destroy();
|
|
372
|
+
DataUtil.remove(item, 'popper');
|
|
373
|
+
}
|
|
374
|
+
EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden');
|
|
375
|
+
};
|
|
376
|
+
this._showAccordion = (item) => {
|
|
377
|
+
if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.show') === false) {
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
if (this.options.accordion.expand === false) {
|
|
381
|
+
this._hideAccordions(item);
|
|
382
|
+
}
|
|
383
|
+
if (DataUtil.has(item, 'popper') === true) {
|
|
384
|
+
this._hideDropdown(item);
|
|
385
|
+
}
|
|
386
|
+
item.classList.add('hover'); // updateWW
|
|
387
|
+
item.classList.add('showing');
|
|
388
|
+
const subElement = this._getItemSubElement(item);
|
|
389
|
+
if (subElement) {
|
|
390
|
+
const sub = subElement;
|
|
391
|
+
ElementAnimateUtil.slideDown(sub, this.options.accordion.slideSpeed, () => {
|
|
392
|
+
item.classList.remove('showing');
|
|
393
|
+
item.classList.add('show');
|
|
394
|
+
sub.classList.add('show');
|
|
395
|
+
EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.shown');
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
this._hideAccordion = (item) => {
|
|
400
|
+
if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hide') === false) {
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
const sub = this._getItemSubElement(item);
|
|
404
|
+
item.classList.add('hiding');
|
|
405
|
+
if (sub) {
|
|
406
|
+
ElementAnimateUtil.slideUp(sub, this.options.accordion.slideSpeed, () => {
|
|
407
|
+
item.classList.remove('hiding');
|
|
408
|
+
item.classList.remove('show');
|
|
409
|
+
sub.classList.remove('show');
|
|
410
|
+
item.classList.remove('hover'); // update
|
|
411
|
+
EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hidden');
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
};
|
|
415
|
+
// Hide all shown accordions of item
|
|
416
|
+
this._hideAccordions = (item) => {
|
|
417
|
+
const itemsToHide = this.element.querySelectorAll('.show[data-kt-menu-trigger]');
|
|
418
|
+
if (itemsToHide && itemsToHide.length > 0) {
|
|
419
|
+
for (var i = 0, len = itemsToHide.length; i < len; i++) {
|
|
420
|
+
const itemToHide = itemsToHide[i];
|
|
421
|
+
if (this._getItemSubType(itemToHide) === 'accordion' &&
|
|
422
|
+
itemToHide !== item &&
|
|
423
|
+
item.contains(itemToHide) === false &&
|
|
424
|
+
itemToHide.contains(item) === false) {
|
|
425
|
+
this._hideAccordion(itemToHide);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
// Event Handlers
|
|
431
|
+
// Reset item state classes if item sub type changed
|
|
432
|
+
this._reset = (item) => {
|
|
433
|
+
if (this._hasItemSub(item) === false) {
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
const sub = this._getItemSubElement(item);
|
|
437
|
+
// Reset sub state if sub type is changed during the window resize
|
|
438
|
+
if (DataUtil.has(item, 'type') && DataUtil.get(item, 'type') !== this._getItemSubType(item)) {
|
|
439
|
+
// updated
|
|
440
|
+
item.classList.remove('hover');
|
|
441
|
+
item.classList.remove('show');
|
|
442
|
+
item.classList.remove('show');
|
|
443
|
+
if (sub && sub.removeClass) {
|
|
444
|
+
sub.removeClass(sub, 'show');
|
|
445
|
+
}
|
|
446
|
+
} // updated
|
|
447
|
+
};
|
|
448
|
+
// TODO: not done
|
|
449
|
+
this._destroy = () => { };
|
|
450
|
+
// Update all item state classes if item sub type changed
|
|
451
|
+
this._update = () => {
|
|
452
|
+
const items = this.element.querySelectorAll('.menu-item[data-kt-menu-trigger]');
|
|
453
|
+
items.forEach((el) => this._reset(el));
|
|
454
|
+
};
|
|
455
|
+
// Hide item sub
|
|
456
|
+
this._hide = (item) => {
|
|
457
|
+
if (!item) {
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
if (this._isItemSubShown(item) === false) {
|
|
461
|
+
return;
|
|
462
|
+
}
|
|
463
|
+
if (this._getItemSubType(item) === 'dropdown') {
|
|
464
|
+
this._hideDropdown(item);
|
|
465
|
+
}
|
|
466
|
+
else if (this._getItemSubType(item) === 'accordion') {
|
|
467
|
+
this._hideAccordion(item);
|
|
468
|
+
}
|
|
469
|
+
};
|
|
470
|
+
// Show item sub
|
|
471
|
+
this._show = (item) => {
|
|
472
|
+
if (!item) {
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
if (this._isItemSubShown(item) === true) {
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
478
|
+
if (this._getItemSubType(item) === 'dropdown') {
|
|
479
|
+
this._showDropdown(item); // // show current dropdown
|
|
480
|
+
}
|
|
481
|
+
else if (this._getItemSubType(item) === 'accordion') {
|
|
482
|
+
this._showAccordion(item);
|
|
483
|
+
}
|
|
484
|
+
// Remember last submenu type
|
|
485
|
+
DataUtil.set(item, 'type', this._getItemSubType(item)); // updated
|
|
486
|
+
};
|
|
487
|
+
// Toggle item sub
|
|
488
|
+
this._toggle = (item) => {
|
|
489
|
+
if (!item) {
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
if (this._isItemSubShown(item) === true) {
|
|
493
|
+
this._hide(item);
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
this._show(item);
|
|
497
|
+
}
|
|
498
|
+
};
|
|
499
|
+
// Mouseout handle
|
|
500
|
+
this._mouseout = (element, e) => {
|
|
501
|
+
const item = this._getItemElement(element);
|
|
502
|
+
if (!item) {
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
505
|
+
if (this._getItemOption(item, 'trigger') !== 'hover') {
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
const timeout = setTimeout(() => {
|
|
509
|
+
if (DataUtil.get(item, 'hover') === '1') {
|
|
510
|
+
this._hide(item);
|
|
511
|
+
}
|
|
512
|
+
}, this.options.dropdown.hoverTimeout);
|
|
513
|
+
DataUtil.set(item, 'hover', '1');
|
|
514
|
+
DataUtil.set(item, 'timeout', timeout);
|
|
515
|
+
};
|
|
516
|
+
// Mouseover handle
|
|
517
|
+
this._mouseover = (element, e) => {
|
|
518
|
+
const item = this._getItemElement(element);
|
|
519
|
+
if (!item) {
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
if (this._getItemOption(item, 'trigger') !== 'hover') {
|
|
523
|
+
return;
|
|
524
|
+
}
|
|
525
|
+
if (DataUtil.get(item, 'hover') === '1') {
|
|
526
|
+
clearTimeout(DataUtil.get(item, 'timeout'));
|
|
527
|
+
DataUtil.remove(item, 'hover');
|
|
528
|
+
DataUtil.remove(item, 'timeout');
|
|
529
|
+
}
|
|
530
|
+
this._show(item);
|
|
531
|
+
};
|
|
532
|
+
// Dismiss handler
|
|
533
|
+
this._dismiss = (element, e) => {
|
|
534
|
+
const item = this._getItemElement(element);
|
|
535
|
+
const items = this._getItemChildElements(item);
|
|
536
|
+
//if ( item !== null && _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {
|
|
537
|
+
const itemSubType = this._getItemSubType(item);
|
|
538
|
+
if (item !== null && itemSubType === 'dropdown') {
|
|
539
|
+
this._hide(item); // hide items dropdown
|
|
540
|
+
// Hide all child elements as well
|
|
541
|
+
if (items.length > 0) {
|
|
542
|
+
for (let i = 0, len = items.length; i < len; i++) {
|
|
543
|
+
//if ( _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {
|
|
544
|
+
if (items[i] !== null && this._getItemSubType(items[i]) === 'dropdown') {
|
|
545
|
+
this._hide(items[i]);
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
};
|
|
551
|
+
// Link handler
|
|
552
|
+
this._link = (element, e) => {
|
|
553
|
+
if (EventHandlerUtil.trigger(this.element, 'kt.menu.link.click') === false) {
|
|
554
|
+
return;
|
|
555
|
+
}
|
|
556
|
+
// Dismiss all shown dropdowns
|
|
557
|
+
MenuComponent.hideDropdowns(undefined);
|
|
558
|
+
EventHandlerUtil.trigger(this.element, 'kt.menu.link.clicked');
|
|
559
|
+
};
|
|
560
|
+
this._click = (element, e) => {
|
|
561
|
+
e.preventDefault();
|
|
562
|
+
const item = this._getItemElement(element);
|
|
563
|
+
if (this._getItemOption(item, 'trigger') !== 'click') {
|
|
564
|
+
return;
|
|
565
|
+
}
|
|
566
|
+
if (this._getItemOption(item, 'toggle') === false) {
|
|
567
|
+
this._show(item);
|
|
568
|
+
}
|
|
569
|
+
else {
|
|
570
|
+
this._toggle(item);
|
|
571
|
+
}
|
|
572
|
+
};
|
|
573
|
+
///////////////////////
|
|
574
|
+
// ** Public API ** //
|
|
575
|
+
///////////////////////
|
|
576
|
+
this.click = (element, e) => {
|
|
577
|
+
return this._click(element, e);
|
|
578
|
+
};
|
|
579
|
+
this.link = (element, e) => {
|
|
580
|
+
return this._link(element, e);
|
|
581
|
+
};
|
|
582
|
+
this.dismiss = (element, e) => {
|
|
583
|
+
return this._dismiss(element, e);
|
|
584
|
+
};
|
|
585
|
+
this.mouseover = (element, e) => {
|
|
586
|
+
return this._mouseover(element, e);
|
|
587
|
+
};
|
|
588
|
+
this.mouseout = (element, e) => {
|
|
589
|
+
return this._mouseout(element, e);
|
|
590
|
+
};
|
|
591
|
+
// General Methods
|
|
592
|
+
this.getItemTriggerType = (item) => {
|
|
593
|
+
return this._getItemOption(item, 'trigger');
|
|
594
|
+
};
|
|
595
|
+
this.getItemSubType = (element) => {
|
|
596
|
+
return this._getItemSubType(element);
|
|
597
|
+
};
|
|
598
|
+
this.show = (item) => {
|
|
599
|
+
return this._show(item);
|
|
600
|
+
};
|
|
601
|
+
this.hide = (item) => {
|
|
602
|
+
return this._hide(item);
|
|
603
|
+
};
|
|
604
|
+
this.reset = (item) => {
|
|
605
|
+
return this._reset(item);
|
|
606
|
+
};
|
|
607
|
+
this.update = () => {
|
|
608
|
+
return this._update();
|
|
609
|
+
};
|
|
610
|
+
this.getElement = () => {
|
|
611
|
+
return this.element;
|
|
612
|
+
};
|
|
613
|
+
this.getItemLinkElement = (item) => {
|
|
614
|
+
return this._getItemLinkElement(item);
|
|
615
|
+
};
|
|
616
|
+
this.getItemToggleElement = (item) => {
|
|
617
|
+
return this._getItemToggleElement(item);
|
|
618
|
+
};
|
|
619
|
+
this.getItemSubElement = (item) => {
|
|
620
|
+
return this._getItemSubElement(item);
|
|
621
|
+
};
|
|
622
|
+
this.getItemParentElements = (item) => {
|
|
623
|
+
return this._getItemParentElements(item);
|
|
624
|
+
};
|
|
625
|
+
this.isItemSubShown = (item) => {
|
|
626
|
+
return this._isItemSubShown(item);
|
|
627
|
+
};
|
|
628
|
+
this.isItemParentShown = (item) => {
|
|
629
|
+
return this._isItemParentShown(item);
|
|
630
|
+
};
|
|
631
|
+
this.getTriggerElement = () => {
|
|
632
|
+
return this.triggerElement;
|
|
633
|
+
};
|
|
634
|
+
this.isItemDropdownPermanent = (item) => {
|
|
635
|
+
return this._isItemDropdownPermanent(item);
|
|
636
|
+
};
|
|
637
|
+
// Accordion Mode Methods
|
|
638
|
+
this.hideAccordions = (item) => {
|
|
639
|
+
return this._hideAccordions(item);
|
|
640
|
+
};
|
|
641
|
+
// Event API
|
|
642
|
+
this.on = (name, handler) => {
|
|
643
|
+
return EventHandlerUtil.on(this.element, name, handler);
|
|
644
|
+
};
|
|
645
|
+
this.one = (name, handler) => {
|
|
646
|
+
return EventHandlerUtil.one(this.element, name, handler);
|
|
647
|
+
};
|
|
648
|
+
this.off = (name) => {
|
|
649
|
+
return EventHandlerUtil.off(this.element, name);
|
|
650
|
+
};
|
|
651
|
+
this.element = _element;
|
|
652
|
+
this.options = Object.assign(defaultMenuOptions, options);
|
|
653
|
+
this.instanceUid = getUniqueIdWithPrefix('menu');
|
|
654
|
+
// this.element.setAttribute('data-kt-menu', 'true')
|
|
655
|
+
this._setTriggerElement();
|
|
656
|
+
this._update();
|
|
657
|
+
DataUtil.set(this.element, 'menu', this);
|
|
658
|
+
return this;
|
|
659
|
+
}
|
|
660
|
+
// public static methods
|
|
661
|
+
// Get KTMenu instance by element
|
|
662
|
+
static { this.getInstance = (element) => {
|
|
663
|
+
// Element has menu DOM reference in it's DATA storage
|
|
664
|
+
const elementMenu = DataUtil.get(element, 'menu');
|
|
665
|
+
if (elementMenu) {
|
|
666
|
+
return elementMenu;
|
|
667
|
+
}
|
|
668
|
+
// Element has .menu parent
|
|
669
|
+
const menu = element.closest('.menu');
|
|
670
|
+
if (menu) {
|
|
671
|
+
const menuData = DataUtil.get(menu, 'menu');
|
|
672
|
+
if (menuData) {
|
|
673
|
+
return menuData;
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
// Element has a parent with DOM reference to .menu in it's DATA storage
|
|
677
|
+
if (element.classList.contains('menu-link')) {
|
|
678
|
+
const sub = element.closest('.menu-sub');
|
|
679
|
+
if (sub) {
|
|
680
|
+
const subMenu = DataUtil.get(sub, 'menu');
|
|
681
|
+
if (subMenu) {
|
|
682
|
+
return subMenu;
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
return null;
|
|
687
|
+
}; }
|
|
688
|
+
// Hide all dropdowns and skip one if provided
|
|
689
|
+
static { this.hideDropdowns = (skip) => {
|
|
690
|
+
const items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]');
|
|
691
|
+
if (items && items.length > 0) {
|
|
692
|
+
for (let i = 0, len = items.length; i < len; i++) {
|
|
693
|
+
const item = items[i];
|
|
694
|
+
const menu = MenuComponent.getInstance(item);
|
|
695
|
+
if (menu && menu.getItemSubType(item) === 'dropdown') {
|
|
696
|
+
if (skip) {
|
|
697
|
+
if (menu.getItemSubElement(item).contains(skip) === false &&
|
|
698
|
+
item.contains(skip) === false &&
|
|
699
|
+
item !== skip) {
|
|
700
|
+
menu.hide(item);
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
else {
|
|
704
|
+
menu.hide(item);
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
}; }
|
|
710
|
+
static { this.updateDropdowns = () => {
|
|
711
|
+
const items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]');
|
|
712
|
+
if (items && items.length > 0) {
|
|
713
|
+
for (var i = 0, len = items.length; i < len; i++) {
|
|
714
|
+
var item = items[i];
|
|
715
|
+
if (DataUtil.has(item, 'popper')) {
|
|
716
|
+
DataUtil.get(item, 'popper').forceUpdate();
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
}; }
|
|
721
|
+
// Global handlers
|
|
722
|
+
static { this.createInstances = (selector) => {
|
|
723
|
+
// Initialize menus
|
|
724
|
+
document.querySelectorAll(selector).forEach((el) => {
|
|
725
|
+
const menuItem = el;
|
|
726
|
+
let menuInstance = MenuComponent.getInstance(menuItem);
|
|
727
|
+
if (!menuInstance) {
|
|
728
|
+
menuInstance = new MenuComponent(el, defaultMenuOptions);
|
|
729
|
+
}
|
|
730
|
+
});
|
|
731
|
+
}; }
|
|
732
|
+
static { this.initGlobalHandlers = () => {
|
|
733
|
+
// Dropdown handler
|
|
734
|
+
document.addEventListener('click', (e) => {
|
|
735
|
+
const menuItems = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]');
|
|
736
|
+
if (menuItems && menuItems.length > 0) {
|
|
737
|
+
for (let i = 0; i < menuItems.length; i++) {
|
|
738
|
+
const item = menuItems[i];
|
|
739
|
+
const menuObj = MenuComponent.getInstance(item);
|
|
740
|
+
if (menuObj && menuObj.getItemSubType(item) === 'dropdown') {
|
|
741
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
742
|
+
const menu = menuObj.getElement();
|
|
743
|
+
const sub = menuObj.getItemSubElement(item);
|
|
744
|
+
if (item === e.target || item.contains(e.target)) {
|
|
745
|
+
continue;
|
|
746
|
+
}
|
|
747
|
+
if (sub && (sub === e.target || sub.contains(e.target))) {
|
|
748
|
+
continue;
|
|
749
|
+
}
|
|
750
|
+
menuObj.hide(item);
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
});
|
|
755
|
+
// Sub toggle handler
|
|
756
|
+
DOMEventHandlerUtil.on(document.body, '.menu-item[data-kt-menu-trigger] > .menu-link, [data-kt-menu-trigger]:not(.menu-item):not([data-kt-menu-trigger="auto"])', 'click', function (e) {
|
|
757
|
+
const menu = MenuComponent.getInstance(this);
|
|
758
|
+
if (menu) {
|
|
759
|
+
return menu.click(this, e);
|
|
760
|
+
}
|
|
761
|
+
});
|
|
762
|
+
// // Link handler
|
|
763
|
+
DOMEventHandlerUtil.on(document.body, '.menu-item:not([data-kt-menu-trigger]) > .menu-link', 'click', function (e) {
|
|
764
|
+
e.stopPropagation();
|
|
765
|
+
const menu = MenuComponent.getInstance(this);
|
|
766
|
+
if (menu && menu.link) {
|
|
767
|
+
return menu.link(this, e);
|
|
768
|
+
}
|
|
769
|
+
});
|
|
770
|
+
// Dismiss handler
|
|
771
|
+
DOMEventHandlerUtil.on(document.body, '[data-kt-menu-dismiss="true"]', 'click', function (e) {
|
|
772
|
+
const menu = MenuComponent.getInstance(this);
|
|
773
|
+
if (menu) {
|
|
774
|
+
return menu.dismiss(this, e);
|
|
775
|
+
}
|
|
776
|
+
});
|
|
777
|
+
// Mouseover handler
|
|
778
|
+
DOMEventHandlerUtil.on(document.body, '[data-kt-menu-trigger], .menu-sub', 'mouseover', function (e) {
|
|
779
|
+
const menu = MenuComponent.getInstance(this);
|
|
780
|
+
if (menu && menu.getItemSubType(this) === 'dropdown') {
|
|
781
|
+
return menu.mouseover(this, e);
|
|
782
|
+
}
|
|
783
|
+
});
|
|
784
|
+
// Mouseout handler
|
|
785
|
+
DOMEventHandlerUtil.on(document.body, '[data-kt-menu-trigger], .menu-sub', 'mouseout', function (e) {
|
|
786
|
+
const menu = MenuComponent.getInstance(this);
|
|
787
|
+
if (menu && menu.getItemSubType(this) === 'dropdown') {
|
|
788
|
+
return menu.mouseout(this, e);
|
|
789
|
+
}
|
|
790
|
+
});
|
|
791
|
+
// Resize handler
|
|
792
|
+
window.addEventListener('resize', () => {
|
|
793
|
+
let timer;
|
|
794
|
+
throttle(timer, () => {
|
|
795
|
+
// Locate and update Drawer instances on window resize
|
|
796
|
+
const elements = document.querySelectorAll('[data-kt-menu="true"]');
|
|
797
|
+
elements.forEach((el) => {
|
|
798
|
+
const menu = MenuComponent.getInstance(el);
|
|
799
|
+
if (menu) {
|
|
800
|
+
menu.update();
|
|
801
|
+
}
|
|
802
|
+
});
|
|
803
|
+
}, 200);
|
|
804
|
+
});
|
|
805
|
+
}; }
|
|
806
|
+
static { this.bootstrap = () => {
|
|
807
|
+
MenuComponent.initGlobalHandlers();
|
|
808
|
+
MenuComponent.createInstances('[data-kt-menu="true"]');
|
|
809
|
+
}; }
|
|
810
|
+
static { this.reinitialization = () => {
|
|
811
|
+
MenuComponent.createInstances('[data-kt-menu="true"]');
|
|
812
|
+
}; }
|
|
813
|
+
static { this.createInsance = (selector, options = defaultMenuOptions) => {
|
|
814
|
+
const element = document.body.querySelector(selector);
|
|
815
|
+
if (!element) {
|
|
816
|
+
return;
|
|
817
|
+
}
|
|
818
|
+
const item = element;
|
|
819
|
+
let menu = MenuComponent.getInstance(item);
|
|
820
|
+
if (!menu) {
|
|
821
|
+
menu = new MenuComponent(item, options);
|
|
822
|
+
}
|
|
823
|
+
return menu;
|
|
824
|
+
}; }
|
|
825
|
+
}
|
|
826
|
+
export { MenuComponent, defaultMenuOptions };
|
|
827
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVudUNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtYWRtaW4tcG9ydGFsL3NyYy9saWIvX21ldHJvbmljL2NvcmUvY29tcG9uZW50cy9NZW51Q29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQWtCLE1BQU0sZ0JBQWdCLENBQUE7QUFFN0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUN4SixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUE7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNkJBQTZCLENBQUE7QUFDOUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUE7QUFhakUsTUFBTSxrQkFBa0IsR0FBZ0I7SUFDdEMsUUFBUSxFQUFFO1FBQ1IsWUFBWSxFQUFFLEdBQUc7UUFDakIsTUFBTSxFQUFFLEdBQUc7S0FDWjtJQUNELFNBQVMsRUFBRTtRQUNULFVBQVUsRUFBRSxHQUFHO1FBQ2YsTUFBTSxFQUFFLEtBQUs7S0FDZDtDQUNGLENBQUE7QUFvQkQsTUFBTSxhQUFhO0lBTWpCLFlBQVksUUFBcUIsRUFBRSxPQUFvQjtRQUZ2RCxtQkFBYyxHQUF1QixJQUFJLENBQUE7UUFhekMsK0JBQStCO1FBQ3ZCLHVCQUFrQixHQUFHLEdBQUcsRUFBRTtZQUNoQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENB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O1FBQ25DLElBQUksSUFBSSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDMUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULElBQUksR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7U0FDeEM7UUFDRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUMsQUFkMEIsQ0FjMUI7O0FBR0gsT0FBTyxFQUFDLGFBQWEsRUFBRSxrQkFBa0IsRUFBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUG9wcGVyLCBWaXJ0dWFsRWxlbWVudCB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJ1xyXG5cclxuaW1wb3J0IHsgZ2V0QXR0cmlidXRlVmFsdWVCeUJyZWFrcG9pbnQsIGdldEVsZW1lbnRDaGlsZCwgZ2V0RWxlbWVudFBhcmVudHMsIGdldEhpZ2hlc3RaaW5kZXgsIGluc2VydEFmdGVyRWxlbWVudCwgdGhyb3R0bGUgfSBmcm9tIFwiLi4vX3V0aWxzL0RvbUhlbHBlcnNcIlxyXG5pbXBvcnQgeyBFdmVudEhhbmRsZXJVdGlsIH0gZnJvbSBcIi4uL191dGlscy9FdmVudEhhbmRsZXJVdGlsXCJcclxuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tIFwiLi4vX3V0aWxzL19EYXRhVXRpbFwiXHJcbmltcG9ydCB7IERPTUV2ZW50SGFuZGxlclV0aWwgfSBmcm9tIFwiLi4vX3V0aWxzL19ET01FdmVudEhhbmRsZXJVdGlsXCJcclxuaW1wb3J0IHsgRWxlbWVudFN0eWxlVXRpbCB9IGZyb20gXCIuLi9fdXRpbHMvX0VsZW1lbnRTdHlsZVV0aWxcIlxyXG5pbXBvcnQgeyBnZXRVbmlxdWVJZFdpdGhQcmVmaXggfSBmcm9tIFwiLi4vX3V0aWxzL19UeXBlc0hlbHBlcnNcIlxyXG5pbXBvcnQgeyBFbGVtZW50QW5pbWF0ZVV0aWwgfSBmcm9tICcuLi9fdXRpbHMvRWxlbWVudEFuaW1hdGVVdGlsJ1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZW51T3B0aW9ucyB7XHJcbiAgZHJvcGRvd246IHtcclxuICAgIGhvdmVyVGltZW91dDogbnVtYmVyXHJcbiAgICB6aW5kZXg6IG51bWJlclxyXG4gIH1cclxuICBhY2NvcmRpb246IHtcclxuICAgIHNsaWRlU3BlZWQ6IG51bWJlclxyXG4gICAgZXhwYW5kOiBib29sZWFuXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0TWVudU9wdGlvbnM6IE1lbnVPcHRpb25zID0ge1xyXG4gIGRyb3Bkb3duOiB7XHJcbiAgICBob3ZlclRpbWVvdXQ6IDIwMCxcclxuICAgIHppbmRleDogMTA1LFxyXG4gIH0sXHJcbiAgYWNjb3JkaW9uOiB7XHJcbiAgICBzbGlkZVNwZWVkOiAyNTAsXHJcbiAgICBleHBhbmQ6IGZhbHNlLFxyXG4gIH0sXHJcbn1cclxuXHJcbnR5cGUgUG9wcGVyUGxhY2VtZW50ID1cclxuICB8ICdyaWdodCdcclxuICB8ICdhdXRvJ1xyXG4gIHwgJ2F1dG8tc3RhcnQnXHJcbiAgfCAnYXV0by1lbmQnXHJcbiAgfCAndG9wJ1xyXG4gIHwgJ2JvdHRvbSdcclxuICB8ICdsZWZ0J1xyXG4gIHwgJ3RvcC1zdGFydCdcclxuICB8ICd0b3AtZW5kJ1xyXG4gIHwgJ2JvdHRvbS1zdGFydCdcclxuICB8ICdib3R0b20tZW5kJ1xyXG4gIHwgJ3JpZ2h0LXN0YXJ0J1xyXG4gIHwgJ3JpZ2h0LWVuZCdcclxuICB8ICdsZWZ0LXN0YXJ0J1xyXG4gIHwgJ2xlZnQtZW5kJ1xyXG4gIHwgdW5kZWZpbmVkXHJcblxyXG5jbGFzcyBNZW51Q29tcG9uZW50IHtcclxuICBlbGVtZW50OiBIVE1MRWxlbWVudFxyXG4gIG9wdGlvbnM6IE1lbnVPcHRpb25zXHJcbiAgaW5zdGFuY2VVaWQ6IHN0cmluZ1xyXG4gIHRyaWdnZXJFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsXHJcblxyXG4gIGNvbnN0cnVjdG9yKF9lbGVtZW50OiBIVE1MRWxlbWVudCwgb3B0aW9uczogTWVudU9wdGlvbnMpIHtcclxuICAgIHRoaXMuZWxlbWVudCA9IF9lbGVtZW50XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRNZW51T3B0aW9ucywgb3B0aW9ucylcclxuICAgIHRoaXMuaW5zdGFuY2VVaWQgPSBnZXRVbmlxdWVJZFdpdGhQcmVmaXgoJ21lbnUnKVxyXG4gICAgLy8gdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1rdC1tZW51JywgJ3RydWUnKVxyXG4gICAgdGhpcy5fc2V0VHJpZ2dlckVsZW1lbnQoKVxyXG4gICAgdGhpcy5fdXBkYXRlKClcclxuICAgIERhdGFVdGlsLnNldCh0aGlzLmVsZW1lbnQsICdtZW51JywgdGhpcylcclxuICAgIHJldHVybiB0aGlzXHJcbiAgfVxyXG5cclxuICAvLyBTZXQgZXh0ZXJuYWwgdHJpZ2dlciBlbGVtZW50XHJcbiAgcHJpdmF0ZSBfc2V0VHJpZ2dlckVsZW1lbnQgPSAoKSA9PiB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBgW2RhdGEta3QtbWVudS10YXJnZXQ9XCIjJHt0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpfVwiYFxyXG4gICAgKVxyXG5cclxuICAgIGlmICh0YXJnZXQpIHtcclxuICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudCA9IHRhcmdldCBhcyBIVE1MRWxlbWVudFxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmVsZW1lbnQuY2xvc2VzdCgnW2RhdGEta3QtbWVudS10cmlnZ2VyXScpKSB7XHJcbiAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQgPSB0aGlzLmVsZW1lbnQuY2xvc2VzdCgnW2RhdGEta3QtbWVudS10cmlnZ2VyXScpIGFzIEhUTUxFbGVtZW50XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZSAmJlxyXG4gICAgICBnZXRFbGVtZW50Q2hpbGQodGhpcy5lbGVtZW50LnBhcmVudE5vZGUgYXMgSFRNTEVsZW1lbnQsICdbZGF0YS1rdC1tZW51LXRyaWdnZXJdJylcclxuICAgICkge1xyXG4gICAgICBjb25zdCBjaGlsZCA9IGdldEVsZW1lbnRDaGlsZChcclxuICAgICAgICB0aGlzLmVsZW1lbnQucGFyZW50Tm9kZSBhcyBIVE1MRWxlbWVudCxcclxuICAgICAgICAnW2RhdGEta3QtbWVudS10cmlnZ2VyXSdcclxuICAgICAgKVxyXG4gICAgICBpZiAoY2hpbGQpIHtcclxuICAgICAgICB0aGlzLnRyaWdnZXJFbGVtZW50ID0gY2hpbGRcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyaWdnZXJFbGVtZW50KSB7XHJcbiAgICAgIERhdGFVdGlsLnNldCh0aGlzLnRyaWdnZXJFbGVtZW50LCAnbWVudScsIHRoaXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUZXN0IGlmIG1lbnUgaGFzIGV4dGVybmFsIHRyaWdnZXIgZWxlbWVudFxyXG4gIHByaXZhdGUgX2lzVHJpZ2dlckVsZW1lbnQgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLnRyaWdnZXJFbGVtZW50ID09PSBpdGVtXHJcbiAgfVxyXG5cclxuICAvLyBHZXQgaXRlbSBvcHRpb24odGhyb3VnaCBodG1sIGF0dHJpYnV0ZXMpXHJcbiAgcHJpdmF0ZSBfZ2V0SXRlbU9wdGlvbiA9IChpdGVtOiBIVE1MRWxlbWVudCwgbmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICBsZXQgdmFsdWUgPSBudWxsXHJcbiAgICBpZiAoaXRlbSAmJiBpdGVtLmhhc0F0dHJpYnV0ZSgnZGF0YS1rdC1tZW51LScgKyBuYW1lKSkge1xyXG4gICAgICBjb25zdCBhdHRyID0gaXRlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEta3QtbWVudS0nICsgbmFtZSkgfHwgJydcclxuICAgICAgdmFsdWUgPSBnZXRBdHRyaWJ1dGVWYWx1ZUJ5QnJlYWtwb2ludChhdHRyKVxyXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgU3RyaW5nKHZhbHVlKSA9PT0gJ3RydWUnKSB7XHJcbiAgICAgICAgdmFsdWUgPSB0cnVlXHJcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgIT09IG51bGwgJiYgU3RyaW5nKHZhbHVlKSA9PT0gJ2ZhbHNlJykge1xyXG4gICAgICAgIHZhbHVlID0gZmFsc2VcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlXHJcbiAgfVxyXG5cclxuICAvLyBHZXQgaXRlbSBlbGVtZW50XHJcbiAgcHJpdmF0ZSBfZ2V0SXRlbUVsZW1lbnQgPSAoX2VsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAvLyBFbGVtZW50IGlzIHRoZSBleHRlcm5hbCB0cmlnZ2VyIGVsZW1lbnRcclxuICAgIGlmICh0aGlzLl9pc1RyaWdnZXJFbGVtZW50KF9lbGVtZW50KSkge1xyXG4gICAgICByZXR1cm4gX2VsZW1lbnRcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbGVtZW50IGhhcyBpdGVtIHRvZ2dsZXIgYXR0cmlidXRlXHJcbiAgICBpZiAoX2VsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLWt0LW1lbnUtdHJpZ2dlcicpKSB7XHJcbiAgICAgIHJldHVybiBfZWxlbWVudFxyXG4gICAgfVxyXG5cclxuICAgIC8vIEVsZW1lbnQgaGFzIGl0ZW0gRE9NIHJlZmVyZW5jZSBpbiBpdCdzIGRhdGEgc3RvcmFnZVxyXG4gICAgY29uc3QgaXRlbUVsZW1lbnQgPSBEYXRhVXRpbC5nZXQoX2VsZW1lbnQsICdpdGVtJylcclxuICAgIGlmIChpdGVtRWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gaXRlbUVsZW1lbnRcclxuICAgIH1cclxuXHJcbiAgICAvLyBJdGVtIGlzIHBhcmVudCBvZiBlbGVtZW50XHJcbiAgICBjb25zdCBpdGVtID0gX2VsZW1lbnQuY2xvc2VzdCgnLm1lbnUtaXRlbVtkYXRhLWt0LW1lbnUtdHJpZ2dlcl0nKVxyXG4gICAgaWYgKGl0ZW0pIHtcclxuICAgICAgcmV0dXJuIGl0ZW1cclxuICAgIH1cclxuXHJcbiAgICAvLyBFbGVtZW50J3MgcGFyZW50IGhhcyBpdGVtIERPTSByZWZlcmVuY2UgaW4gaXQncyBkYXRhIHN0b3JhZ2VcclxuICAgIGNvbnN0IHN1YiA9IF9lbGVtZW50LmNsb3Nlc3QoJy5tZW51LXN1YicpXHJcbiAgICBpZiAoc3ViKSB7XHJcbiAgICAgIGNvbnN0IHN1Ykl0ZW0gPSBEYXRhVXRpbC5nZXQoc3ViIGFzIEhUTUxFbGVtZW50LCAnaXRlbScpXHJcbiAgICAgIGlmIChzdWJJdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1Ykl0ZW1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gR2V0IGl0ZW0gcGFyZW50IGVsZW1lbnRcclxuICBwcml2YXRlIF9nZXRJdGVtUGFyZW50RWxlbWVudCA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3Qgc3ViID0gaXRlbS5jbG9zZXN0KCcubWVudS1zdWInKVxyXG4gICAgaWYgKCFzdWIpIHtcclxuICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdWJJdGVtID0gRGF0YVV0aWwuZ2V0KHN1YiBhcyBIVE1MRWxlbWVudCwgJ2l0ZW0nKVxyXG4gICAgaWYgKHN1Ykl0ZW0pIHtcclxuICAgICAgcmV0dXJuIHN1Ykl0ZW1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJlbnRJdGVtID0gc3ViLmNsb3Nlc3QoJy5tZW51LWl0ZW1bZGF0YS1rdC1tZW51LXRyaWdnZXJdJylcclxuICAgIGlmIChzdWIgJiYgcGFyZW50SXRlbSkge1xyXG4gICAgICByZXR1cm4gcGFyZW50SXRlbVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICAvLyBHZXQgaXRlbSBwYXJlbnQgZWxlbWVudHNcclxuICBwcml2YXRlIF9nZXRJdGVtUGFyZW50RWxlbWVudHMgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHBhcmVudHMgPSBbXVxyXG4gICAgbGV0IHBhcmVudFxyXG4gICAgbGV0IGkgPSAwXHJcbiAgICBsZXQgYnVmZmVyID0gaXRlbVxyXG5cclxuICAgIGRvIHtcclxuICAgICAgcGFyZW50ID0gdGhpcy5fZ2V0SXRlbVBhcmVudEVsZW1lbnQoYnVmZmVyKVxyXG4gICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgcGFyZW50cy5wdXNoKHBhcmVudClcclxuICAgICAgICBidWZmZXIgPSBwYXJlbnRcclxuICAgICAgfVxyXG5cclxuICAgICAgaSsrXHJcbiAgICB9IHdoaWxlIChwYXJlbnQgIT09IG51bGwgJiYgaSA8IDIwKVxyXG5cclxuICAgIGlmICh0aGlzLnRyaWdnZXJFbGVtZW50KSB7XHJcbiAgICAgIHBhcmVudHMudW5zaGlmdCh0aGlzLnRyaWdnZXJFbGVtZW50KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXJlbnRzXHJcbiAgfVxyXG5cclxuICAvLyBQcmVwYXJlIHBvcHBlciBjb25maWcgZm9yIGRyb3Bkb3duKHNlZTogaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxyXG4gIHByaXZhdGUgX2dldERyb3Bkb3duUG9wcGVyQ29uZmlnID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAvLyBQbGFjZW1lbnRcclxuICAgIGNvbnN0IHBsYWNlbWVudE9wdGlvbiA9IHRoaXMuX2dldEl0ZW1PcHRpb24oaXRlbSwgJ3BsYWNlbWVudCcpXHJcbiAgICBsZXQgcGxhY2VtZW50OiBQb3BwZXJQbGFjZW1lbnQgPSAncmlnaHQnXHJcbiAgICBpZiAocGxhY2VtZW50T3B0aW9uKSB7XHJcbiAgICAgIHBsYWNlbWVudCA9IHBsYWNlbWVudE9wdGlvbiBhcyBQb3BwZXJQbGFjZW1lbnRcclxuICAgIH1cclxuXHJcbiAgICAvLyBGbGlwXHJcbiAgICBjb25zdCBmbGlwVmFsdWUgPSB0aGlzLl9nZXRJdGVtT3B0aW9uKGl0ZW0sICdmbGlwJylcclxuICAgIGNvbnN0IGZsaXAgPSBmbGlwVmFsdWUgPyBmbGlwVmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLCcpIDogW11cclxuXHJcbiAgICAvLyBPZmZzZXRcclxuICAgIGNvbnN0IG9mZnNldFZhbHVlID0gdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAnb2Zmc2V0JylcclxuICAgIGNvbnN0IG9mZnNldCA9IG9mZnNldFZhbHVlID8gb2Zmc2V0VmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLCcpIDogW11cclxuXHJcbiAgICAvLyBTdHJhdGVneVxyXG4gICAgY29uc3Qgc3RyYXRlZ3k6ICdhYnNvbHV0ZScgfCAnZml4ZWQnIHwgdW5kZWZpbmVkID1cclxuICAgICAgdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAnb3ZlcmZsb3cnKSA9PT0gdHJ1ZSA/ICdhYnNvbHV0ZScgOiAnZml4ZWQnXHJcblxyXG4gICAgdmFyIGFsdEF4aXMgPSB0aGlzLl9nZXRJdGVtT3B0aW9uKGl0ZW0sICdmbGlwJykgIT09IGZhbHNlO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxyXG4gICAgICBzdHJhdGVneTogc3RyYXRlZ3ksXHJcbiAgICAgIG1vZGlmaWVyczogW3tcclxuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcclxuICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICBvZmZzZXQ6IG9mZnNldFxyXG4gICAgICAgIH1cclxuICAgICAgfSwge1xyXG4gICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxyXG4gICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgIGFsdEF4aXM6IGFsdEF4aXNcclxuICAgICAgICB9XHJcbiAgICAgIH0sIHtcclxuICAgICAgICBuYW1lOiAnZmxpcCcsXHJcbiAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgZmxpcFZhcmlhdGlvbnM6IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICB9XVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIEdldCBpdGVtIGNoaWxkIGVsZW1lbnRcclxuICBwcml2YXRlIF9nZXRJdGVtQ2hpbGRFbGVtZW50ID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBsZXQgc2VsZWN0b3IgPSBpdGVtXHJcblxyXG4gICAgY29uc3Qgc3ViSXRlbSA9IERhdGFVdGlsLmdldChpdGVtLCAnc3ViJylcclxuICAgIGlmIChzdWJJdGVtKSB7XHJcbiAgICAgIHNlbGVjdG9yID0gc3ViSXRlbVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWxlY3Rvcikge1xyXG4gICAgICAvL2VsZW1lbnQgPSBzZWxlY3Rvci5xdWVyeVNlbGVjdG9yKCcuc2hvdy5tZW51LWl0ZW1bZGF0YS1rdC1tZW51LXRyaWdnZXJdJyk7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBzZWxlY3Rvci5xdWVyeVNlbGVjdG9yKCcubWVudS1pdGVtW2RhdGEta3QtbWVudS10cmlnZ2VyXScpXHJcbiAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIC8vIEdldCBpdGVtIGNoaWxkIGVsZW1lbnRzXHJcbiAgcHJpdmF0ZSBfZ2V0SXRlbUNoaWxkRWxlbWVudHMgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGNoaWxkcmVuID0gW11cclxuICAgIGxldCBjaGlsZFxyXG4gICAgbGV0IGkgPSAwXHJcbiAgICBsZXQgYnVmZmVyID0gaXRlbVxyXG4gICAgZG8ge1xyXG4gICAgICBjaGlsZCA9IHRoaXMuX2dldEl0ZW1DaGlsZEVsZW1lbnQoYnVmZmVyKVxyXG4gICAgICBpZiAoY2hpbGQpIHtcclxuICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKVxyXG4gICAgICAgIGJ1ZmZlciA9IGNoaWxkIGFzIEhUTUxFbGVtZW50XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGkrK1xyXG4gICAgfSB3aGlsZSAoY2hpbGQgIT09IG51bGwgJiYgaSA8IDIwKVxyXG5cclxuICAgIHJldHVybiBjaGlsZHJlblxyXG4gIH1cclxuXHJcbiAgLy8gR2V0IGl0ZW0gc3ViIGVsZW1lbnRcclxuICBwcml2YXRlIF9nZXRJdGVtU3ViRWxlbWVudCA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzVHJpZ2dlckVsZW1lbnQoaXRlbSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFxyXG4gICAgfVxyXG5cclxuICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1zdWInKSkge1xyXG4gICAgICByZXR1cm4gaXRlbVxyXG4gICAgfSBlbHNlIGlmIChEYXRhVXRpbC5oYXMoaXRlbSwgJ3N1YicpKSB7XHJcbiAgICAgIHJldHVybiBEYXRhVXRpbC5nZXQoaXRlbSwgJ3N1YicpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZ2V0RWxlbWVudENoaWxkKGl0ZW0sICcubWVudS1zdWInKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Q3NzID0gKGVsOiBIVE1MRWxlbWVudCwgc3R5bGVQcm9wOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IGRlZmF1bHRWaWV3ID0gKGVsLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQpLmRlZmF1bHRWaWV3XHJcbiAgICBpZiAoIWRlZmF1bHRWaWV3KSB7XHJcbiAgICAgIHJldHVybiAnJ1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNhbml0aXplIHByb3BlcnR5IG5hbWUgdG8gY3NzIG5vdGF0aW9uXHJcbiAgICAvLyAoaHlwaGVuIHNlcGFyYXRlZCB3b3JkcyBlZy4gZm9udC1TaXplKVxyXG4gICAgc3R5bGVQcm9wID0gc3R5bGVQcm9wLnJlcGxhY2UoLyhbQS1aXSkvZywgJy0kMScpLnRvTG93ZXJDYXNlKClcclxuXHJcbiAgICByZXR1cm4gZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3ApXHJcbiAgfVxyXG5cclxuICAvLyBHZXQgaXRlbSBzdWIgdHlwZVxyXG4gIHByaXZhdGUgX2dldEl0ZW1TdWJUeXBlID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBzdWIgPSB0aGlzLl9nZXRJdGVtU3ViRWxlbWVudChlbGVtZW50KVxyXG4gICAgaWYgKHN1YiAmJiBwYXJzZUludCh0aGlzLl9nZXRDc3Moc3ViLCAnei1pbmRleCcpKSA+IDApIHtcclxuICAgICAgcmV0dXJuICdkcm9wZG93bidcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnYWNjb3JkaW9uJ1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gVGVzdCBpZiBpdGVtJ3Mgc3ViIGlzIHNob3duXHJcbiAgcHJpdmF0ZSBfaXNJdGVtU3ViU2hvd24gPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIGxldCBzdWIgPSB0aGlzLl9nZXRJdGVtU3ViRWxlbWVudChpdGVtKVxyXG4gICAgaWYgKHN1Yikge1xyXG4gICAgICBpZiAodGhpcy5fZ2V0SXRlbVN1YlR5cGUoaXRlbSkgPT09ICdkcm9wZG93bicpIHtcclxuICAgICAgICByZXR1cm4gc3ViLmNsYXNzTGlzdC5jb250YWlucygnc2hvdycpICYmIHN1Yi5oYXNBdHRyaWJ1dGUoJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCcpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKCdzaG93JylcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxuXHJcbiAgLy8gVGVzdCBpZiBpdGVtIGRyb3Bkb3duIGlzIHBlcm1hbmVudFxyXG4gIHByaXZhdGUgX2lzSXRlbURyb3Bkb3duUGVybWFuZW50ID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAncGVybWFuZW50JykgPT09IHRydWVcclxuICB9XHJcblxyXG4gIC8vIFRlc3QgaWYgaXRlbSdzIHBhcmVudCBpcyBzaG93blxyXG4gIHByaXZhdGUgX2lzSXRlbVBhcmVudFNob3duID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gZ2V0RWxlbWVudFBhcmVudHMoaXRlbSwgJy5tZW51LWl0ZW0uc2hvdycpLmxlbmd0aCA+IDBcclxuICB9XHJcblxyXG4gIC8vIFRlc3Qgb2YgaXQgaXMgaXRlbSBzdWIgZWxlbWVudFxyXG4gIHByaXZhdGUgX2lzSXRlbVN1YkVsZW1lbnQgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiBpdGVtLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1zdWInKVxyXG4gIH1cclxuXHJcbiAgLy8gVGVzdCBpZiBpdGVtIGhhcyBzdWJcclxuICBwcml2YXRlIF9oYXNJdGVtU3ViID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gaXRlbS5jbGFzc0xpc3QuY29udGFpbnMoJ21lbnUtaXRlbScpICYmIGl0ZW0uaGFzQXR0cmlidXRlKCdkYXRhLWt0LW1lbnUtdHJpZ2dlcicpXHJcbiAgfVxyXG5cclxuICAvLyBHZXQgbGluayBlbGVtZW50XHJcbiAgcHJpdmF0ZSBfZ2V0SXRlbUxpbmtFbGVtZW50ID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gZ2V0RWxlbWVudENoaWxkKGl0ZW0sICcubWVudS1saW5rJylcclxuICB9XHJcblxyXG4gIC8vIEdldCB0b2dnbGUgZWxlbWVudFxyXG4gIHByaXZhdGUgX2dldEl0ZW1Ub2dnbGVFbGVtZW50ID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBpZiAodGhpcy50cmlnZ2VyRWxlbWVudCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50cmlnZ2VyRWxlbWVudFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtTGlua0VsZW1lbnQoaXRlbSlcclxuICB9XHJcblxyXG4gIC8vIFNob3cgaXRlbSBkcm9wZG93blxyXG4gIHByaXZhdGUgX3Nob3dEcm9wZG93biA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKEV2ZW50SGFuZGxlclV0aWwudHJpZ2dlcih0aGlzLmVsZW1lbnQsICdrdC5tZW51LmRyb3Bkb3duLnNob3cnKSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGlkZSBhbGwgY3VycmVudGx5IHNob3duIGRyb3Bkb3ducyBleGNlcHQgY3VycmVudCBvbmVcclxuICAgIE1lbnVDb21wb25lbnQuaGlkZURyb3Bkb3ducyhpdGVtKVxyXG5cclxuICAgIC8vIGNvbnN0IHRvZ2dsZSA9IHRoaXMuX2lzVHJpZ2dlckVsZW1lbnQoaXRlbSkgPyBpdGVtIDogdGhpcy5fZ2V0SXRlbUxpbmtFbGVtZW50KGl0ZW0pO1xyXG4gICAgY29uc3Qgc3ViID0gdGhpcy5fZ2V0SXRlbVN1YkVsZW1lbnQoaXRlbSlcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAnd2lkdGgnKVxyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAnaGVpZ2h0JylcclxuXHJcbiAgICBsZXQgemluZGV4ID0gdGhpcy5vcHRpb25zLmRyb3Bkb3duLnppbmRleFxyXG4gICAgY29uc3QgcGFyZW50WmluZGV4ID0gZ2V0SGlnaGVzdFppbmRleChpdGVtKSAvLyB1cGRhdGVcclxuICAgIC8vIEFwcGx5IGEgbmV3IHotaW5kZXggaWYgZHJvcGRvd24ncyB0b2dnbGUgZWxlbWVudCBvciBpdCdzIHBhcmVudCBoYXMgZ3JlYXRlciB6LWluZGV4IC8vIHVwZGF0ZVxyXG4gICAgaWYgKHBhcmVudFppbmRleCAhPT0gbnVsbCAmJiBwYXJlbnRaaW5kZXggPj0gemluZGV4KSB7XHJcbiAgICAgIHppbmRleCA9IHBhcmVudFppbmRleCArIDFcclxuICAgIH1cclxuXHJcbiAgICBpZiAoemluZGV4KSB7XHJcbiAgICAgIEVsZW1lbnRTdHlsZVV0aWwuc2V0KHN1YiwgJ3otaW5kZXgnLCB6aW5kZXgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHdpZHRoKSB7XHJcbiAgICAgIEVsZW1lbnRTdHlsZVV0aWwuc2V0KHN1YiwgJ3dpZHRoJywgd2lkdGgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGhlaWdodCkge1xyXG4gICAgICBFbGVtZW50U3R5bGVVdGlsLnNldChzdWIsICdoZWlnaHQnLCBoZWlnaHQpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0RHJvcGRvd25Qb3BwZXIoaXRlbSwgc3ViKVxyXG5cclxuICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnc2hvdycpXHJcbiAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ21lbnUtZHJvcGRvd24nKVxyXG4gICAgc3ViLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKVxyXG5cclxuICAgIC8vIEFwcGVuZCB0aGUgc3ViIHRoZSB0aGUgcm9vdCBvZiB0aGUgbWVudVxyXG4gICAgaWYgKHRoaXMuX2dldEl0ZW1PcHRpb24oaXRlbSwgJ292ZXJmbG93JykgPT09IHRydWUpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzdWIpXHJcbiAgICAgIERhdGFVdGlsLnNldChpdGVtLCAnc3ViJywgc3ViKVxyXG4gICAgICBEYXRhVXRpbC5zZXQoc3ViLCAnaXRlbScsIGl0ZW0pXHJcbiAgICAgIERhdGFVdGlsLnNldChzdWIsICdtZW51JywgdGhpcylcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIERhdGFVdGlsLnNldChzdWIsICdpdGVtJywgaXRlbSlcclxuICAgIH1cclxuXHJcbiAgICBFdmVudEhhbmRsZXJVdGlsLnRyaWdnZXIodGhpcy5lbGVtZW50LCAna3QubWVudS5kcm9wZG93bi5zaG93bicpXHJcbiAgfVxyXG5cclxuICAvLyBJbml0IGRyb3Bkb3duIHBvcHBlcihuZXcpXHJcbiAgcHJpdmF0ZSBpbml0RHJvcGRvd25Qb3BwZXIgPSAoaXRlbTogSFRNTEVsZW1lbnQsIHN1YjogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIC8vIFNldHVwIHBvcHBlciBpbnN0YW5jZVxyXG4gICAgbGV0IHJlZmVyZW5jZVxyXG4gICAgY29uc3QgYXR0YWNoID0gdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAnYXR0YWNoJykgYXMgc3RyaW5nXHJcblxyXG4gICAgaWYgKGF0dGFjaCkge1xyXG4gICAgICBpZiAoYXR0YWNoID09PSAncGFyZW50Jykge1xyXG4gICAgICAgIHJlZmVyZW5jZSA9IGl0ZW0ucGFyZW50Tm9kZVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlZmVyZW5jZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYXR0YWNoKVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZWZlcmVuY2UgPSBpdGVtXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlZmVyZW5jZSkge1xyXG4gICAgICBjb25zdCBwb3BwZXIgPSBjcmVhdGVQb3BwZXIoXHJcbiAgICAgICAgcmVmZXJlbmNlIGFzIEVsZW1lbnQgfCBWaXJ0dWFsRWxlbWVudCxcclxuICAgICAgICBzdWIsXHJcbiAgICAgICAgdGhpcy5fZ2V0RHJvcGRvd25Qb3BwZXJDb25maWcoaXRlbSlcclxuICAgICAgKVxyXG4gICAgICBEYXRhVXRpbC5zZXQoaXRlbSwgJ3BvcHBlcicsIHBvcHBlcilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEhpZGUgaXRlbSBkcm9wZG93blxyXG4gIHByaXZhdGUgX2hpZGVEcm9wZG93biA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKEV2ZW50SGFuZGxlclV0aWwudHJpZ2dlcih0aGlzLmVsZW1lbnQsICdrdC5tZW51LmRyb3Bkb3duLmhpZGUnKSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3ViID0gdGhpcy5fZ2V0SXRlbVN1YkVsZW1lbnQoaXRlbSlcclxuICAgIEVsZW1lbnRTdHlsZVV0aWwuc2V0KHN1YiwgJ3otaW5kZXgnLCAnJylcclxuICAgIEVsZW1lbnRTdHlsZVV0aWwuc2V0KHN1YiwgJ3dpZHRoJywgJycpXHJcbiAgICBFbGVtZW50U3R5bGVVdGlsLnNldChzdWIsICdoZWlnaHQnLCAnJylcclxuICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpXHJcbiAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ21lbnUtZHJvcGRvd24nKVxyXG4gICAgc3ViLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKVxyXG5cclxuICAgIC8vIEFwcGVuZCB0aGUgc3ViIGJhY2sgdG8gaXQncyBwYXJlbnRcclxuICAgIGlmICh0aGlzLl9nZXRJdGVtT3B0aW9uKGl0ZW0sICdvdmVyZmxvdycpID09PSB0cnVlKSB7XHJcbiAgICAgIGlmIChpdGVtLmNsYXNzTGlzdC5jb250YWlucygnbWVudS1pdGVtJykpIHtcclxuICAgICAgICBpdGVtLmFwcGVuZENoaWxkKHN1YilcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbnNlcnRBZnRlckVsZW1lbnQodGhpcy5lbGVtZW50LCBpdGVtKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBEYXRhVXRpbC5yZW1vdmUoaXRlbSwgJ3N1YicpXHJcbiAgICAgIERhdGFVdGlsLnJlbW92ZShzdWIsICdpdGVtJylcclxuICAgICAgRGF0YVV0aWwucmVtb3ZlKHN1YiwgJ21lbnUnKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChEYXRhVXRpbC5oYXMoaXRlbSwgJ3BvcHBlcicpID09PSB0cnVlKSB7XHJcbiAgICAgIERhdGFVdGlsLmdldChpdGVtLCAncG9wcGVyJykuZGVzdHJveSgpXHJcbiAgICAgIERhdGFVdGlsLnJlbW92ZShpdGVtLCAncG9wcGVyJylcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXN0cm95IHBvcHBlcihuZXcpXHJcbiAgICB0aGlzLmRlc3Ryb3lEcm9wZG93blBvcHBlcihpdGVtKVxyXG4gICAgRXZlbnRIYW5kbGVyVXRpbC50cmlnZ2VyKHRoaXMuZWxlbWVudCwgJ2t0Lm1lbnUuZHJvcGRvd24uaGlkZGVuJylcclxuICB9XHJcblxyXG4gIC8vIERlc3Ryb3kgZHJvcGRvd24gcG9wcGVyKG5ldylcclxuICBwcml2YXRlIGRlc3Ryb3lEcm9wZG93blBvcHBlciA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKERhdGFVdGlsLmhhcyhpdGVtLCAncG9wcGVyJykgPT09IHRydWUpIHtcclxuICAgICAgRGF0YVV0aWwuZ2V0KGl0ZW0sICdwb3BwZXInKS5kZXN0cm95KClcclxuICAgICAgRGF0YVV0aWwucmVtb3ZlKGl0ZW0sICdwb3BwZXInKVxyXG4gICAgfVxyXG5cclxuICAgIEV2ZW50SGFuZGxlclV0aWwudHJpZ2dlcih0aGlzLmVsZW1lbnQsICdrdC5tZW51LmRyb3Bkb3duLmhpZGRlbicpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG93QWNjb3JkaW9uID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBpZiAoRXZlbnRIYW5kbGVyVXRpbC50cmlnZ2VyKHRoaXMuZWxlbWVudCwgJ2t0Lm1lbnUuYWNjb3JkaW9uLnNob3cnKSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5hY2NvcmRpb24uZXhwYW5kID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLl9oaWRlQWNjb3JkaW9ucyhpdGVtKVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChEYXRhVXRpbC5oYXMoaXRlbSwgJ3BvcHBlcicpID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuX2hpZGVEcm9wZG93bihpdGVtKVxyXG4gICAgfVxyXG5cclxuICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgnaG92ZXInKSAvLyB1cGRhdGVXV1xyXG4gICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdzaG93aW5nJylcclxuXHJcbiAgICBjb25zdCBzdWJFbGVtZW50ID0gdGhpcy5fZ2V0SXRlbVN1YkVsZW1lbnQoaXRlbSlcclxuICAgIGlmIChzdWJFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHN1YiA9IHN1YkVsZW1lbnQgYXMgSFRNTEVsZW1lbnRcclxuICAgICAgRWxlbWVudEFuaW1hdGVVdGlsLnNsaWRlRG93bihzdWIsIHRoaXMub3B0aW9ucy5hY2NvcmRpb24uc2xpZGVTcGVlZCwgKCkgPT4ge1xyXG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgnc2hvd2luZycpXHJcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdzaG93JylcclxuICAgICAgICBzdWIuY2xhc3NMaXN0LmFkZCgnc2hvdycpXHJcbiAgICAgICAgRXZlbnRIYW5kbGVyVXRpbC50cmlnZ2VyKHRoaXMuZWxlbWVudCwgJ2t0Lm1lbnUuYWNjb3JkaW9uLnNob3duJylcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hpZGVBY2NvcmRpb24gPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIGlmIChFdmVudEhhbmRsZXJVdGlsLnRyaWdnZXIodGhpcy5lbGVtZW50LCAna3QubWVudS5hY2NvcmRpb24uaGlkZScpID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdWIgPSB0aGlzLl9nZXRJdGVtU3ViRWxlbWVudChpdGVtKVxyXG4gICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdoaWRpbmcnKVxyXG5cclxuICAgIGlmIChzdWIpIHtcclxuICAgICAgRWxlbWVudEFuaW1hdGVVdGlsLnNsaWRlVXAoc3ViLCB0aGlzLm9wdGlvbnMuYWNjb3JkaW9uLnNsaWRlU3BlZWQsICgpID0+IHtcclxuICAgICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGluZycpXHJcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93JylcclxuICAgICAgICBzdWIuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpXHJcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdob3ZlcicpIC8vIHVwZGF0ZVxyXG4gICAgICAgIEV2ZW50SGFuZGxlclV0aWwudHJpZ2dlcih0aGlzLmVsZW1lbnQsICdrdC5tZW51LmFjY29yZGlvbi5oaWRkZW4nKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSGlkZSBhbGwgc2hvd24gYWNjb3JkaW9ucyBvZiBpdGVtXHJcbiAgcHJpdmF0ZSBfaGlkZUFjY29yZGlvbnMgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGl0ZW1zVG9IaWRlID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zaG93W2RhdGEta3QtbWVudS10cmlnZ2VyXScpXHJcbiAgICBpZiAoaXRlbXNUb0hpZGUgJiYgaXRlbXNUb0hpZGUubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaXRlbXNUb0hpZGUubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpdGVtVG9IaWRlID0gaXRlbXNUb0hpZGVbaV0gYXMgSFRNTEVsZW1lbnRcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5fZ2V0SXRlbVN1YlR5cGUoaXRlbVRvSGlkZSkgPT09ICdhY2NvcmRpb24nICYmXHJcbiAgICAgICAgICBpdGVtVG9IaWRlICE9PSBpdGVtICYmXHJcbiAgICAgICAgICBpdGVtLmNvbnRhaW5zKGl0ZW1Ub0hpZGUpID09PSBmYWxzZSAmJlxyXG4gICAgICAgICAgaXRlbVRvSGlkZS5jb250YWlucyhpdGVtKSA9PT0gZmFsc2VcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuX2hpZGVBY2NvcmRpb24oaXRlbVRvSGlkZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEV2ZW50IEhhbmRsZXJzXHJcbiAgLy8gUmVzZXQgaXRlbSBzdGF0ZSBjbGFzc2VzIGlmIGl0ZW0gc3ViIHR5cGUgY2hhbmdlZFxyXG4gIHByaXZhdGUgX3Jlc2V0ID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBpZiAodGhpcy5faGFzSXRlbVN1YihpdGVtKSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3ViID0gdGhpcy5fZ2V0SXRlbVN1YkVsZW1lbnQoaXRlbSlcclxuXHJcbiAgICAvLyBSZXNldCBzdWIgc3RhdGUgaWYgc3ViIHR5cGUgaXMgY2hhbmdlZCBkdXJpbmcgdGhlIHdpbmRvdyByZXNpemVcclxuICAgIGlmIChEYXRhVXRpbC5oYXMoaXRlbSwgJ3R5cGUnKSAmJiBEYXRhVXRpbC5nZXQoaXRlbSwgJ3R5cGUnKSAhPT0gdGhpcy5fZ2V0SXRlbVN1YlR5cGUoaXRlbSkpIHtcclxuICAgICAgLy8gdXBkYXRlZFxyXG4gICAgICBpdGVtLmNsYXNzTGlzdC5yZW1vdmUoJ2hvdmVyJylcclxuICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93JylcclxuICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93JylcclxuICAgICAgaWYgKHN1YiAmJiBzdWIucmVtb3ZlQ2xhc3MpIHtcclxuICAgICAgICBzdWIucmVtb3ZlQ2xhc3Moc3ViLCAnc2hvdycpXHJcbiAgICAgIH1cclxuICAgIH0gLy8gdXBkYXRlZFxyXG4gIH1cclxuXHJcbiAgLy8gVE9ETzogbm90IGRvbmVcclxuICBwcml2YXRlIF9kZXN0cm95ID0gKCkgPT4ge31cclxuXHJcbiAgLy8gVXBkYXRlIGFsbCBpdGVtIHN0YXRlIGNsYXNzZXMgaWYgaXRlbSBzdWIgdHlwZSBjaGFuZ2VkXHJcbiAgcHJpdmF0ZSBfdXBkYXRlID0gKCkgPT4ge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm1lbnUtaXRlbVtkYXRhLWt0LW1lbnUtdHJpZ2dlcl0nKVxyXG4gICAgaXRlbXMuZm9yRWFjaCgoZWwpID0+IHRoaXMuX3Jlc2V0KGVsIGFzIEhUTUxFbGVtZW50KSlcclxuICB9XHJcblxyXG4gIC8vIEhpZGUgaXRlbSBzdWJcclxuICBwcml2YXRlIF9oaWRlID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzSXRlbVN1YlNob3duKGl0ZW0pID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZ2V0SXRlbVN1YlR5cGUoaXRlbSkgPT09ICdkcm9wZG93bicpIHtcclxuICAgICAgdGhpcy5faGlkZURyb3Bkb3duKGl0ZW0pXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2dldEl0ZW1TdWJUeXBlKGl0ZW0pID09PSAnYWNjb3JkaW9uJykge1xyXG4gICAgICB0aGlzLl9oaWRlQWNjb3JkaW9uKGl0ZW0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBTaG93IGl0ZW0gc3ViXHJcbiAgcHJpdmF0ZSBfc2hvdyA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc0l0ZW1TdWJTaG93bihpdGVtKSA9PT0gdHJ1ZSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZ2V0SXRlbVN1YlR5cGUoaXRlbSkgPT09ICdkcm9wZG93bicpIHtcclxuICAgICAgdGhpcy5fc2hvd0Ryb3Bkb3duKGl0ZW0pIC8vIC8vIHNob3cgY3VycmVudCBkcm9wZG93blxyXG4gICAgfSBlbHNlIGlmICh0aGlzLl9nZXRJdGVtU3ViVHlwZShpdGVtKSA9PT0gJ2FjY29yZGlvbicpIHtcclxuICAgICAgdGhpcy5fc2hvd0FjY29yZGlvbihpdGVtKVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlbWVtYmVyIGxhc3Qgc3VibWVudSB0eXBlXHJcblxyXG4gICAgRGF0YVV0aWwuc2V0KGl0ZW0sICd0eXBlJywgdGhpcy5fZ2V0SXRlbVN1YlR5cGUoaXRlbSkpIC8vIHVwZGF0ZWRcclxuICB9XHJcblxyXG4gIC8vIFRvZ2dsZSBpdGVtIHN1YlxyXG4gIHByaXZhdGUgX3RvZ2dsZSA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc0l0ZW1TdWJTaG93bihpdGVtKSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLl9oaWRlKGl0ZW0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zaG93KGl0ZW0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBNb3VzZW91dCBoYW5kbGVcclxuICBwcml2YXRlIF9tb3VzZW91dCA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgZTogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuX2dldEl0ZW1FbGVtZW50KGVsZW1lbnQpXHJcbiAgICBpZiAoIWl0ZW0pIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2dldEl0ZW1PcHRpb24oaXRlbSwgJ3RyaWdnZXInKSAhPT0gJ2hvdmVyJykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmIChEYXRhVXRpbC5nZXQoaXRlbSwgJ2hvdmVyJykgPT09ICcxJykge1xyXG4gICAgICAgIHRoaXMuX2hpZGUoaXRlbSlcclxuICAgICAgfVxyXG4gICAgfSwgdGhpcy5vcHRpb25zLmRyb3Bkb3duLmhvdmVyVGltZW91dClcclxuXHJcbiAgICBEYXRhVXRpbC5zZXQoaXRlbSwgJ2hvdmVyJywgJzEnKVxyXG4gICAgRGF0YVV0aWwuc2V0KGl0ZW0sICd0aW1lb3V0JywgdGltZW91dClcclxuICB9XHJcblxyXG4gIC8vIE1vdXNlb3ZlciBoYW5kbGVcclxuICBwcml2YXRlIF9tb3VzZW92ZXIgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIGU6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9nZXRJdGVtRWxlbWVudChlbGVtZW50KVxyXG4gICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9nZXRJdGVtT3B0aW9uKGl0ZW0sICd0cmlnZ2VyJykgIT09ICdob3ZlcicpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKERhdGFVdGlsLmdldChpdGVtLCAnaG92ZXInKSA9PT0gJzEnKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dChEYXRhVXRpbC5nZXQoaXRlbSwgJ3RpbWVvdXQnKSlcclxuICAgICAgRGF0YVV0aWwucmVtb3ZlKGl0ZW0sICdob3ZlcicpXHJcbiAgICAgIERhdGFVdGlsLnJlbW92ZShpdGVtLCAndGltZW91dCcpXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2hvdyhpdGVtKVxyXG4gIH1cclxuXHJcbiAgLy8gRGlzbWlzcyBoYW5kbGVyXHJcbiAgcHJpdmF0ZSBfZGlzbWlzcyA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgZTogRXZlbnQpID0+IHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9nZXRJdGVtRWxlbWVudChlbGVtZW50KVxyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9nZXRJdGVtQ2hpbGRFbGVtZW50cyhpdGVtKVxyXG4gICAgLy9pZiAoIGl0ZW0gIT09IG51bGwgJiYgX2dldEl0ZW1PcHRpb24oaXRlbSwgJ3RyaWdnZXInKSA9PT0gJ2NsaWNrJyAmJiAgX2dldEl0ZW1TdWJUeXBlKGl0ZW0pID09PSAnZHJvcGRvd24nICkge1xyXG4gICAgY29uc3QgaXRlbVN1YlR5cGUgPSB0aGlzLl9nZXRJdGVtU3ViVHlwZShpdGVtKVxyXG4gICAgaWYgKGl0ZW0gIT09IG51bGwgJiYgaXRlbVN1YlR5cGUgPT09ICdkcm9wZG93bicpIHtcclxuICAgICAgdGhpcy5faGlkZShpdGVtKSAvLyBoaWRlIGl0ZW1zIGRyb3Bkb3duXHJcblxyXG4gICAgICAvLyBIaWRlIGFsbCBjaGlsZCBlbGVtZW50cyBhcyB3ZWxsXHJcbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAvL2lmICggX2dldEl0ZW1PcHRpb24oaXRlbSwgJ3RyaWdnZXInKSA9PT0gJ2NsaWNrJyAmJiAgX2dldEl0ZW1TdWJUeXBlKGl0ZW0pID09PSAnZHJvcGRvd24nICkge1xyXG4gICAgICAgICAgaWYgKGl0ZW1zW2ldICE9PSBudWxsICYmIHRoaXMuX2dldEl0ZW1TdWJUeXBlKGl0ZW1zW2ldIGFzIEhUTUxFbGVtZW50KSA9PT0gJ2Ryb3Bkb3duJykge1xyXG4gICAgICAgICAgICB0aGlzLl9oaWRlKGl0ZW1zW2ldIGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTGluayBoYW5kbGVyXHJcbiAgcHJpdmF0ZSBfbGluayA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgZTogRXZlbnQpID0+IHtcclxuICAgIGlmIChFdmVudEhhbmRsZXJVdGlsLnRyaWdnZXIodGhpcy5lbGVtZW50LCAna3QubWVudS5saW5rLmNsaWNrJykgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIC8vIERpc21pc3MgYWxsIHNob3duIGRyb3Bkb3duc1xyXG4gICAgTWVudUNvbXBvbmVudC5oaWRlRHJvcGRvd25zKHVuZGVmaW5lZClcclxuICAgIEV2ZW50SGFuZGxlclV0aWwudHJpZ2dlcih0aGlzLmVsZW1lbnQsICdrdC5tZW51LmxpbmsuY2xpY2tlZCcpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbGljayA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgZTogRXZlbnQpID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuX2dldEl0ZW1FbGVtZW50KGVsZW1lbnQpXHJcbiAgICBpZiAodGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAndHJpZ2dlcicpICE9PSAnY2xpY2snKSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9nZXRJdGVtT3B0aW9uKGl0ZW0sICd0b2dnbGUnKSA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5fc2hvdyhpdGVtKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fdG9nZ2xlKGl0ZW0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIC8vICoqIFB1YmxpYyBBUEkgICoqIC8vXHJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBwdWJsaWMgY2xpY2sgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIGU6IEV2ZW50KSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2xpY2soZWxlbWVudCwgZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsaW5rID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBlOiBFdmVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xpbmsoZWxlbWVudCwgZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkaXNtaXNzID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBlOiBFdmVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc21pc3MoZWxlbWVudCwgZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3VzZW92ZXIgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQsIGU6IEV2ZW50KSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW91c2VvdmVyKGVsZW1lbnQsIGUgYXMgTW91c2VFdmVudClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3VzZW91dCA9IChlbGVtZW50OiBIVE1MRWxlbWVudCwgZTogRXZlbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLl9tb3VzZW91dChlbGVtZW50LCBlIGFzIE1vdXNlRXZlbnQpXHJcbiAgfVxyXG5cclxuICAvLyBHZW5lcmFsIE1ldGhvZHNcclxuICBwdWJsaWMgZ2V0SXRlbVRyaWdnZXJUeXBlID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZ2V0SXRlbU9wdGlvbihpdGVtLCAndHJpZ2dlcicpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXRlbVN1YlR5cGUgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtU3ViVHlwZShlbGVtZW50KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3cgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLl9zaG93KGl0ZW0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGlkZSA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hpZGUoaXRlbSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldCA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Jlc2V0KGl0ZW0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlID0gKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3VwZGF0ZSgpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RWxlbWVudCA9ICgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLmVsZW1lbnRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJdGVtTGlua0VsZW1lbnQgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtTGlua0VsZW1lbnQoaXRlbSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJdGVtVG9nZ2xlRWxlbWVudCA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEl0ZW1Ub2dnbGVFbGVtZW50KGl0ZW0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXRlbVN1YkVsZW1lbnQgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtU3ViRWxlbWVudChpdGVtKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEl0ZW1QYXJlbnRFbGVtZW50cyA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldEl0ZW1QYXJlbnRFbGVtZW50cyhpdGVtKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzSXRlbVN1YlNob3duID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNJdGVtU3ViU2hvd24oaXRlbSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0l0ZW1QYXJlbnRTaG93biA9IChpdGVtOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzSXRlbVBhcmVudFNob3duKGl0ZW0pXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VHJpZ2dlckVsZW1lbnQgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy50cmlnZ2VyRWxlbWVudFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzSXRlbURyb3Bkb3duUGVybWFuZW50ID0gKGl0ZW06IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNJdGVtRHJvcGRvd25QZXJtYW5lbnQoaXRlbSlcclxuICB9XHJcblxyXG4gIC8vIEFjY29yZGlvbiBNb2RlIE1ldGhvZHNcclxuICBwdWJsaWMgaGlkZUFjY29yZGlvbnMgPSAoaXRlbTogSFRNTEVsZW1lbnQpID0+IHtcclxuICAgIHJldHVybiB0aGlzLl9oaWRlQWNjb3JkaW9ucyhpdGVtKVxyXG4gIH1cclxuXHJcbiAgLy8gRXZlbnQgQVBJXHJcbiAgcHVibGljIG9uID0gKG5hbWU6IHN0cmluZywgaGFuZGxlcjogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gRXZlbnRIYW5kbGVyVXRpbC5vbih0aGlzLmVsZW1lbnQsIG5hbWUsIGhhbmRsZXIpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25lID0gKG5hbWU6IHN0cmluZywgaGFuZGxlcjogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gRXZlbnRIYW5kbGVyVXRpbC5vbmUodGhpcy5lbGVtZW50LCBuYW1lLCBoYW5kbGVyKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG9mZiA9IChuYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIHJldHVybiBFdmVudEhhbmRsZXJVdGlsLm9mZih0aGlzLmVsZW1lbnQsIG5hbWUpXHJcbiAgfVxyXG5cclxuICAvLyBwdWJsaWMgc3RhdGljIG1ldGhvZHNcclxuICAvLyBHZXQgS1RNZW51IGluc3RhbmNlIGJ5IGVsZW1lbnRcclxuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAvLyBFbGVtZW50IGhhcyBtZW51IERPTSByZWZlcmVuY2UgaW4gaXQncyBEQVRBIHN0b3JhZ2VcclxuICAgIGNvbnN0IGVsZW1lbnRNZW51ID0gRGF0YVV0aWwuZ2V0KGVsZW1lbnQsICdtZW51JylcclxuICAgIGlmIChlbGVtZW50TWVudSkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudE1lbnVcclxuICAgIH1cclxuXHJcbiAgICAvLyBFbGVtZW50IGhhcyAubWVudSBwYXJlbnRcclxuICAgIGNvbnN0IG1lbnUgPSBlbGVtZW50LmNsb3Nlc3QoJy5tZW51JylcclxuICAgIGlmIChtZW51KSB7XHJcbiAgICAgIGNvbnN0IG1lbnVEYXRhID0gRGF0YVV0aWwuZ2V0KG1lbnUgYXMgSFRNTEVsZW1lbnQsICdtZW51JylcclxuICAgICAgaWYgKG1lbnVEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIG1lbnVEYXRhXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBFbGVtZW50IGhhcyBhIHBhcmVudCB3aXRoIERPTSByZWZlcmVuY2UgdG8gLm1lbnUgaW4gaXQncyBEQVRBIHN0b3JhZ2VcclxuICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbWVudS1saW5rJykpIHtcclxuICAgICAgY29uc3Qgc3ViID0gZWxlbWVudC5jbG9zZXN0KCcubWVudS1zdWInKVxyXG4gICAgICBpZiAoc3ViKSB7XHJcbiAgICAgICAgY29uc3Qgc3ViTWVudSA9IERhdGFVdGlsLmdldChzdWIgYXMgSFRNTEVsZW1lbnQsICdtZW51JylcclxuICAgICAgICBpZiAoc3ViTWVudSkge1xyXG4gICAgICAgICAgcmV0dXJuIHN1Yk1lbnVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgLy8gSGlkZSBhbGwgZHJvcGRvd25zIGFuZCBza2lwIG9uZSBpZiBwcm92aWRlZFxyXG4gIHB1YmxpYyBzdGF0aWMgaGlkZURyb3Bkb3ducyA9IChza2lwOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCkgPT4ge1xyXG4gICAgY29uc3QgaXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2hvdy5tZW51LWRyb3Bkb3duW2RhdGEta3QtbWVudS10cmlnZ2VyXScpXHJcblxyXG4gICAgaWYgKGl0ZW1zICYmIGl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2ldXHJcbiAgICAgICAgY29uc3QgbWVudSA9IE1lbnVDb21wb25lbnQuZ2V0SW5zdGFuY2UoaXRlbSBhcyBIVE1MRWxlbWVudClcclxuXHJcbiAgICAgICAgaWYgKG1lbnUgJiYgbWVudS5nZXRJdGVtU3ViVHlwZShpdGVtKSA9PT0gJ2Ryb3Bkb3duJykge1xyXG4gICAgICAgICAgaWYgKHNraXApIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIG1lbnUuZ2V0SXRlbVN1YkVsZW1lbnQoaXRlbSkuY29udGFpbnMoc2tpcCkgPT09IGZhbHNlICYmXHJcbiAgICAgICAgICAgICAgaXRlbS5jb250YWlucyhza2lwKSA9PT0gZmFsc2UgJiZcclxuICAgICAgICAgICAgICBpdGVtICE9PSBza2lwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIG1lbnUuaGlkZShpdGVtKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtZW51LmhpZGUoaXRlbSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgdXBkYXRlRHJvcGRvd25zID0gKCkgPT4ge1xyXG4gICAgY29uc3QgaXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2hvdy5tZW51LWRyb3Bkb3duW2RhdGEta3QtbWVudS10cmlnZ2VyXScpXHJcbiAgICBpZiAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gaXRlbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW2ldXHJcblxyXG4gICAgICAgIGlmIChEYXRhVXRpbC5oYXMoaXRlbSBhcyBIVE1MRWxlbWVudCwgJ3BvcHBlcicpKSB7XHJcbiAgICAgICAgICBEYXRhVXRpbC5nZXQoaXRlbSBhcyBIVE1MRWxlbWVudCwgJ3BvcHBlcicpLmZvcmNlVXBkYXRlKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEdsb2JhbCBoYW5kbGVyc1xyXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSW5zdGFuY2VzID0gKHNlbGVjdG9yOiBzdHJpbmcpID0+IHtcclxuICAgIC8vIEluaXRpYWxpemUgbWVudXNcclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpLmZvckVhY2goKGVsKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1lbnVJdGVtID0gZWwgYXMgSFRNTEVsZW1lbnRcclxuICAgICAgbGV0IG1lbnVJbnN0YW5jZSA9IE1lbnVDb21wb25lbnQuZ2V0SW5zdGFuY2UobWVudUl0ZW0pXHJcbiAgICAgIGlmICghbWVudUluc3RhbmNlKSB7XHJcbiAgICAgICAgbWVudUluc3RhbmNlID0gbmV3IE1lbnVDb21wb25lbnQoZWwgYXMgSFRNTEVsZW1lbnQsIGRlZmF1bHRNZW51T3B0aW9ucylcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaW5pdEdsb2JhbEhhbmRsZXJzID0gKCkgPT4ge1xyXG4gICAgLy8gRHJvcGRvd24gaGFuZGxlclxyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xyXG4gICAgICBjb25zdCBtZW51SXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2hvdy5tZW51LWRyb3Bkb3duW2RhdGEta3QtbWVudS10cmlnZ2VyXScpXHJcbiAgICAgIGlmIChtZW51SXRlbXMgJiYgbWVudUl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IG1lbnVJdGVtc1tpXSBhcyBIVE1MRWxlbWVudFxyXG4gICAgICAgICAgY29uc3QgbWVudU9iaiA9IE1lbnVDb21wb25lbnQuZ2V0SW5zdGFuY2UoaXRlbSkgYXMgTWVudUNvbXBvbmVudFxyXG4gICAgICAgICAgaWYgKG1lbnVPYmogJiYgbWVudU9iai5nZXRJdGVtU3ViVHlwZShpdGVtKSA9PT0gJ2Ryb3Bkb3duJykge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICAgICAgICAgIGNvbnN0IG1lbnUgPSBtZW51T2JqLmdldEVsZW1lbnQoKVxyXG4gICAgICAgICAgICBjb25zdCBzdWIgPSBtZW51T2JqLmdldEl0ZW1TdWJFbGVtZW50KGl0ZW0pIGFzIEhUTUxFbGVtZW50XHJcbiAgICAgICAgICAgIGlmIChpdGVtID09PSBlLnRhcmdldCB8fCBpdGVtLmNvbnRhaW5zKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzdWIgJiYgKHN1YiA9PT0gZS50YXJnZXQgfHwgc3ViLmNvbnRhaW5zKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSkpIHtcclxuICAgICAgICAgICAgICBjb250aW51ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG1lbnVPYmouaGlkZShpdGVtKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICAvLyBTdWIgdG9nZ2xlIGhhbmRsZXJcclxuICAgIERPTUV2ZW50SGFuZGxlclV0aWwub24oXHJcbiAgICAgIGRvY3VtZW50LmJvZHksXHJcbiAgICAgICcubWVudS1pdGVtW2RhdGEta3QtbWVudS10cmlnZ2VyXSA+IC5tZW51LWxpbmssIFtkYXRhLWt0LW1lbnUtdHJpZ2dlcl06bm90KC5tZW51LWl0ZW0pOm5vdChbZGF0YS1rdC1tZW51LXRyaWdnZXI9XCJhdXRvXCJdKScsXHJcbiAgICAgICdjbGljaycsXHJcbiAgICAgIGZ1bmN0aW9uICh0aGlzOiBIVE1MRWxlbWVudCwgZTogRXZlbnQpIHtcclxuICAgICAgICBjb25zdCBtZW51ID0gTWVudUNvbXBvbmVudC5nZXRJbnN0YW5jZSh0aGlzKSBhcyBNZW51Q29tcG9uZW50XHJcbiAgICAgICAgaWYgKG1lbnUpIHtcclxuICAgICAgICAgIHJldHVybiBtZW51LmNsaWNrKHRoaXMsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApXHJcblxyXG4gICAgLy8gLy8gTGluayBoYW5kbGVyXHJcbiAgICBET01FdmVudEhhbmRsZXJVdGlsLm9uKFxyXG4gICAgICBkb2N1bWVudC5ib2R5LFxyXG4gICAgICAnLm1lbnUtaXRlbTpub3QoW2RhdGEta3QtbWVudS10cmlnZ2VyXSkgPiAubWVudS1saW5rJyxcclxuICAgICAgJ2NsaWNrJyxcclxuICAgICAgZnVuY3Rpb24gKHRoaXM6IEhUTUxFbGVtZW50LCBlOiBFdmVudCkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgICAgICBjb25zdCBtZW51ID0gTWVudUNvbXBvbmVudC5nZXRJbnN0YW5jZSh0aGlzKVxyXG4gICAgICAgIGlmIChtZW51ICYmIG1lbnUubGluaykge1xyXG4gICAgICAgICAgcmV0dXJuIG1lbnUubGluayh0aGlzLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKVxyXG5cclxuICAgIC8vIERpc21pc3MgaGFuZGxlclxyXG4gICAgRE9NRXZlbnRIYW5kbGVyVXRpbC5vbihcclxuICAgICAgZG9jdW1lbnQuYm9keSxcclxuICAgICAgJ1tkYXRhLWt0LW1lbnUtZGlzbWlzcz1cInRydWVcIl0nLFxyXG4gICAgICAnY2xpY2snLFxyXG4gICAgICBmdW5jdGlvbiAodGhpczogSFRNTEVsZW1lbnQsIGU6IEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgbWVudSA9IE1lbnVDb21wb25lbnQuZ2V0SW5zdGFuY2UodGhpcykgYXMgTWVudUNvbXBvbmVudFxyXG4gICAgICAgIGlmIChtZW51KSB7XHJcbiAgICAgICAgICByZXR1cm4gbWVudS5kaXNtaXNzKHRoaXMsIGUpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApXHJcblxyXG4gICAgLy8gTW91c2VvdmVyIGhhbmRsZXJcclxuICAgIERPTUV2ZW50SGFuZGxlclV0aWwub24oXHJcbiAgICAgIGRvY3VtZW50LmJvZHksXHJcbiAgICAgICdbZGF0YS1rdC1tZW51LXRyaWdnZXJdLCAubWVudS1zdWInLFxyXG4gICAgICAnbW91c2VvdmVyJyxcclxuICAgICAgZnVuY3Rpb24gKHRoaXM6IEhUTUxFbGVtZW50LCBlOiBFdmVudCkge1xyXG4gICAgICAgIGNvbnN0IG1lbnUgPSBNZW51Q29tcG9uZW50LmdldEluc3RhbmNlKHRoaXMpIGFzIE1lbnVDb21wb25lbnRcclxuICAgICAgICBpZiAobWVudSAmJiBtZW51LmdldEl0ZW1TdWJUeXBlKHRoaXMpID09PSAnZHJvcGRvd24nKSB7XHJcbiAgICAgICAgICByZXR1cm4gbWVudS5tb3VzZW92ZXIodGhpcywgZSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIClcclxuXHJcbiAgICAvLyBNb3VzZW91dCBoYW5kbGVyXHJcbiAgICBET01FdmVudEhhbmRsZXJVdGlsLm9uKFxyXG4gICAgICBkb2N1bWVudC5ib2R5LFxyXG4gICAgICAnW2RhdGEta3QtbWVudS10cmlnZ2VyXSwgLm1lbnUtc3ViJyxcclxuICAgICAgJ21vdXNlb3V0JyxcclxuICAgICAgZnVuY3Rpb24gKHRoaXM6IEhUTUxFbGVtZW50LCBlOiBFdmVudCkge1xyXG4gICAgICAgIGNvbnN0IG1lbnUgPSBNZW51Q29tcG9uZW50LmdldEluc3RhbmNlKHRoaXMpIGFzIE1lbnVDb21wb25lbnRcclxuICAgICAgICBpZiAobWVudSAmJiBtZW51LmdldEl0ZW1TdWJUeXBlKHRoaXMpID09PSAnZHJvcGRvd24nKSB7XHJcbiAgICAgICAgICByZXR1cm4gbWVudS5tb3VzZW91dCh0aGlzLCBlKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKVxyXG5cclxuICAgIC8vIFJlc2l6ZSBoYW5kbGVyXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICBsZXQgdGltZXJcclxuICAgICAgdGhyb3R0bGUoXHJcbiAgICAgICAgdGltZXIsXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgLy8gTG9jYXRlIGFuZCB1cGRhdGUgRHJhd2VyIGluc3RhbmNlcyBvbiB3aW5kb3cgcmVzaXplXHJcbiAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWt0LW1lbnU9XCJ0cnVlXCJdJylcclxuICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lbnUgPSBNZW51Q29tcG9uZW50LmdldEluc3RhbmNlKGVsIGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICAgICAgICBpZiAobWVudSkge1xyXG4gICAgICAgICAgICAgIG1lbnUudXBkYXRlKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9LFxyXG4gICAgICAgIDIwMFxyXG4gICAgICApXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBib290c3RyYXAgPSAoKSA9PiB7XHJcbiAgICBNZW51Q29tcG9uZW50LmluaXRHbG9iYWxIYW5kbGVycygpXHJcbiAgICBNZW51Q29tcG9uZW50LmNyZWF0ZUluc3RhbmNlcygnW2RhdGEta3QtbWVudT1cInRydWVcIl0nKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWluaXRpYWxpemF0aW9uID0gKCkgPT4ge1xyXG4gICAgTWVudUNvbXBvbmVudC5jcmVhdGVJbnN0YW5jZXMoJ1tkYXRhLWt0LW1lbnU9XCJ0cnVlXCJdJylcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlSW5zYW5jZSA9IChcclxuICAgIHNlbGVjdG9yOiBzdHJpbmcsXHJcbiAgICBvcHRpb25zOiBNZW51T3B0aW9ucyA9IGRlZmF1bHRNZW51T3B0aW9uc1xyXG4gICk6IE1lbnVDb21wb25lbnQgfCB1bmRlZmluZWQgPT4ge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcihzZWxlY3RvcilcclxuICAgIGlmICghZWxlbWVudCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50IGFzIEhUTUxFbGVtZW50XHJcbiAgICBsZXQgbWVudSA9IE1lbnVDb21wb25lbnQuZ2V0SW5zdGFuY2UoaXRlbSlcclxuICAgIGlmICghbWVudSkge1xyXG4gICAgICBtZW51ID0gbmV3IE1lbnVDb21wb25lbnQoaXRlbSwgb3B0aW9ucylcclxuICAgIH1cclxuICAgIHJldHVybiBtZW51XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQge01lbnVDb21wb25lbnQsIGRlZmF1bHRNZW51T3B0aW9uc31cclxuXHJcbiJdfQ==
|