@thetradeengineorg1/snova-shell-module 0.0.1
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 +24 -0
- package/bundles/thetradeengineorg1-snova-shell-module.umd.js +13896 -0
- package/bundles/thetradeengineorg1-snova-shell-module.umd.js.map +1 -0
- package/esm2015/lib/globaldependencies/components/componentbase.js +538 -0
- package/esm2015/lib/globaldependencies/constants/feature-ids.js +449 -0
- package/esm2015/lib/globaldependencies/constants/localstorage-properties.js +38 -0
- package/esm2015/lib/globaldependencies/helpers/dom.helper.js +70 -0
- package/esm2015/lib/globaldependencies/helpers/fontawesome-icons.js +144 -0
- package/esm2015/lib/globaldependencies/helpers/moment-utc-date-adapter.js +37 -0
- package/esm2015/lib/globaldependencies/helpers/window.helper.js +32 -0
- package/esm2015/lib/globaldependencies/intercepter/jwt.interceptor.js +40 -0
- package/esm2015/lib/globaldependencies/pipes/fetchSizedAndCachedImage.pipe.js +36 -0
- package/esm2015/lib/globaldependencies/pipes/highLightText.pipe.js +24 -0
- package/esm2015/lib/globaldependencies/pipes/orderby-pipe.js +24 -0
- package/esm2015/lib/globaldependencies/pipes/removeSpecialCharacters.pipe.js +22 -0
- package/esm2015/lib/globaldependencies/pipes/sanitize.pipe.js +24 -0
- package/esm2015/lib/globaldependencies/pipes/softlabels.pipes.js +346 -0
- package/esm2015/lib/globaldependencies/pipes/utctolocaltime.pipe.js +23 -0
- package/esm2015/lib/globaldependencies/pipes/utctolocaltimewithdate.pipe.js +25 -0
- package/esm2015/lib/globaldependencies/pipes/workflowstatus.pipes.js +27 -0
- package/esm2015/lib/shell-components/components/Payments/account.component.js +50 -0
- package/esm2015/lib/shell-components/components/Payments/company-information.js +262 -0
- package/esm2015/lib/shell-components/components/Payments/company-plans.component.js +138 -0
- package/esm2015/lib/shell-components/components/Payments/document.component.js +57 -0
- package/esm2015/lib/shell-components/components/Payments/payment-method.component.js +32 -0
- package/esm2015/lib/shell-components/components/Payments/product-service.component.js +143 -0
- package/esm2015/lib/shell-components/components/Payments/purchase-more-licenses.js +152 -0
- package/esm2015/lib/shell-components/components/Payments/transactions.component.js +60 -0
- package/esm2015/lib/shell-components/components/admin-layout/admin-layout.component.js +250 -0
- package/esm2015/lib/shell-components/components/all-work-items-dialog/all-work-items-dialog.component.js +89 -0
- package/esm2015/lib/shell-components/components/confirmation-dialog/confirmation-dialog.component.js +90 -0
- package/esm2015/lib/shell-components/components/export-import-configuration/export-configuration.component.js +357 -0
- package/esm2015/lib/shell-components/components/feed-time/feed-time-dialog.component.js +85 -0
- package/esm2015/lib/shell-components/components/feed-time/feed-time.component.js +83 -0
- package/esm2015/lib/shell-components/components/header-side/header-side.component.js +1642 -0
- package/esm2015/lib/shell-components/components/header-top/header-top.component.js +93 -0
- package/esm2015/lib/shell-components/components/lives/lives-welcome-page.js +26 -0
- package/esm2015/lib/shell-components/components/menu/menu.component.js +2478 -0
- package/esm2015/lib/shell-components/components/menu/searchTask.enum.js +10 -0
- package/esm2015/lib/shell-components/components/notifications/announcement-dialog.component.js +73 -0
- package/esm2015/lib/shell-components/components/notifications/notifications.component.js +449 -0
- package/esm2015/lib/shell-components/components/sidebar-top/sidebar-top.component.js +33 -0
- package/esm2015/lib/shell-components/components/sidenav/side-bar.component.js +81 -0
- package/esm2015/lib/shell-components/components/sidenav/sidenav.component.js +43 -0
- package/esm2015/lib/shell-components/components/submit-feedback/submit-feedback.component.js +71 -0
- package/esm2015/lib/shell-components/constants/api-urls.js +1052 -0
- package/esm2015/lib/shell-components/constants/available-languages.js +25 -0
- package/esm2015/lib/shell-components/constants/channel-names.js +38 -0
- package/esm2015/lib/shell-components/constants/menu-categories.js +6 -0
- package/esm2015/lib/shell-components/constants/notification-routes.js +6 -0
- package/esm2015/lib/shell-components/constants/notification-type-ids.js +42 -0
- package/esm2015/lib/shell-components/enum/recentSearchType.enum.js +13 -0
- package/esm2015/lib/shell-components/models/AppMenuItemModel.js +3 -0
- package/esm2015/lib/shell-components/models/AppNotification.js +17 -0
- package/esm2015/lib/shell-components/models/AssetAssignedNotificationModel.js +12 -0
- package/esm2015/lib/shell-components/models/ChannelUpdateModel.js +3 -0
- package/esm2015/lib/shell-components/models/EmployeeStatusModel.js +3 -0
- package/esm2015/lib/shell-components/models/IAdjust-screen-options.js +2 -0
- package/esm2015/lib/shell-components/models/IBadge.js +2 -0
- package/esm2015/lib/shell-components/models/IChildItem.js +2 -0
- package/esm2015/lib/shell-components/models/ILayout-change-options.js +2 -0
- package/esm2015/lib/shell-components/models/IMenuItem.js +2 -0
- package/esm2015/lib/shell-components/models/IlayoutConf.js +2 -0
- package/esm2015/lib/shell-components/models/IntroModel.js +3 -0
- package/esm2015/lib/shell-components/models/MessageDetails.js +3 -0
- package/esm2015/lib/shell-components/models/MessageTypingDetails.js +3 -0
- package/esm2015/lib/shell-components/models/NewProjectCreatedNotificationModel.js +10 -0
- package/esm2015/lib/shell-components/models/NewProjectFeatureNotificationModel.js +10 -0
- package/esm2015/lib/shell-components/models/NotificationsOutPutModel.js +22 -0
- package/esm2015/lib/shell-components/models/ProjectSearchCriteriaInputModel.js +3 -0
- package/esm2015/lib/shell-components/models/RecentSearchModel.js +5 -0
- package/esm2015/lib/shell-components/models/ReportConfigAssignedNotification.js +11 -0
- package/esm2015/lib/shell-components/models/ReportSubmittedNotification.js +12 -0
- package/esm2015/lib/shell-components/models/RoleUpdatedNotification.js +9 -0
- package/esm2015/lib/shell-components/models/UserStoryAssignedNotification.js +13 -0
- package/esm2015/lib/shell-components/models/archiveUserStoryModel.js +10 -0
- package/esm2015/lib/shell-components/models/companieslist.model.js +3 -0
- package/esm2015/lib/shell-components/models/company-model.js +7 -0
- package/esm2015/lib/shell-components/models/company-payment-model.js +3 -0
- package/esm2015/lib/shell-components/models/dragedWidget.js +3 -0
- package/esm2015/lib/shell-components/models/employee-List.js +3 -0
- package/esm2015/lib/shell-components/models/employee.js +4 -0
- package/esm2015/lib/shell-components/models/entityRoleFeature.js +3 -0
- package/esm2015/lib/shell-components/models/export-configuration-model.js +3 -0
- package/esm2015/lib/shell-components/models/export-data.module.js +8 -0
- package/esm2015/lib/shell-components/models/goalApprovedNotificationModel.js +9 -0
- package/esm2015/lib/shell-components/models/import-configuration-model.js +3 -0
- package/esm2015/lib/shell-components/models/initialStatusofUsers.js +3 -0
- package/esm2015/lib/shell-components/models/invoiceOutput-model.js +3 -0
- package/esm2015/lib/shell-components/models/leaveApplicationNotifiction.js +9 -0
- package/esm2015/lib/shell-components/models/multiChartsScheduling.js +11 -0
- package/esm2015/lib/shell-components/models/parkUserStoryInputModel.js +10 -0
- package/esm2015/lib/shell-components/models/project.js +3 -0
- package/esm2015/lib/shell-components/models/recentSearchApiModel.js +3 -0
- package/esm2015/lib/shell-components/models/searchCriteriaInputModelBase.js +3 -0
- package/esm2015/lib/shell-components/models/shellModulesInfo.js +7 -0
- package/esm2015/lib/shell-components/models/softlabels-model.js +7 -0
- package/esm2015/lib/shell-components/models/sprintReplanRequestedModel.js +9 -0
- package/esm2015/lib/shell-components/models/sprintStartedNotificationModel.js +9 -0
- package/esm2015/lib/shell-components/models/store-model.js +3 -0
- package/esm2015/lib/shell-components/models/store-search-model.js +4 -0
- package/esm2015/lib/shell-components/models/themes.model.js +3 -0
- package/esm2015/lib/shell-components/models/timesheetenabledisable.js +4 -0
- package/esm2015/lib/shell-components/models/user.js +8 -0
- package/esm2015/lib/shell-components/models/userStory.js +3 -0
- package/esm2015/lib/shell-components/models/userStoryCommentNotificationModel.js +9 -0
- package/esm2015/lib/shell-components/models/userStoryUpdateNotificationModel.js +9 -0
- package/esm2015/lib/shell-components/models/userstory-custom-fields.model.js +3 -0
- package/esm2015/lib/shell-components/models/validation.model.js +2 -0
- package/esm2015/lib/shell-components/models/widgetlist.js +6 -0
- package/esm2015/lib/shell-components/models/workspaceList.js +3 -0
- package/esm2015/lib/shell-components/services/authentication.service.js +96 -0
- package/esm2015/lib/shell-components/services/chat.service.js +67 -0
- package/esm2015/lib/shell-components/services/common-used.service.js +263 -0
- package/esm2015/lib/shell-components/services/feature.service.js +101 -0
- package/esm2015/lib/shell-components/services/google-analytics.service.js +24 -0
- package/esm2015/lib/shell-components/services/layout.service.js +68 -0
- package/esm2015/lib/shell-components/services/payment.service.js +103 -0
- package/esm2015/lib/shell-components/services/recentSearch.service.js +90 -0
- package/esm2015/lib/shell-components/services/shell.modules.service.js +24 -0
- package/esm2015/lib/shell-components/services/signalr.service.js +113 -0
- package/esm2015/lib/shell-components/services/theme.service.js +161 -0
- package/esm2015/lib/shell-components/shell.module.js +436 -0
- package/esm2015/lib/shell-components/shell.routing.js +16 -0
- package/esm2015/lib/shell-components/store/actions/authentication.actions.js +260 -0
- package/esm2015/lib/shell-components/store/actions/chat.actions.js +248 -0
- package/esm2015/lib/shell-components/store/actions/menuitems.actions.js +39 -0
- package/esm2015/lib/shell-components/store/actions/notification-validator.action.js +19 -0
- package/esm2015/lib/shell-components/store/actions/notifications.actions.js +74 -0
- package/esm2015/lib/shell-components/store/effects/authentication.effects.js +503 -0
- package/esm2015/lib/shell-components/store/effects/chat.effects.js +139 -0
- package/esm2015/lib/shell-components/store/effects/index.js +13 -0
- package/esm2015/lib/shell-components/store/effects/menuitems.effects.js +53 -0
- package/esm2015/lib/shell-components/store/effects/notification-validator.effects.js +56 -0
- package/esm2015/lib/shell-components/store/effects/notifications.effects.js +116 -0
- package/esm2015/lib/shell-components/store/reducers/authentication.reducers.js +86 -0
- package/esm2015/lib/shell-components/store/reducers/chat.reducers.js +68 -0
- package/esm2015/lib/shell-components/store/reducers/index.js +80 -0
- package/esm2015/lib/shell-components/store/reducers/menuitems.reducers.js +56 -0
- package/esm2015/lib/shell-components/store/reducers/notification-validator.reducers.js +13 -0
- package/esm2015/lib/shell-components/store/reducers/notifications.reducers.js +38 -0
- package/esm2015/public-api.js +90 -0
- package/esm2015/store/reducers/index.js +47 -0
- package/esm2015/thetradeengineorg1-snova-shell-module.js +5 -0
- package/fesm2015/thetradeengineorg1-snova-shell-module.js +12808 -0
- package/fesm2015/thetradeengineorg1-snova-shell-module.js.map +1 -0
- package/lib/globaldependencies/components/componentbase.d.ts +455 -0
- package/lib/globaldependencies/constants/feature-ids.d.ts +448 -0
- package/lib/globaldependencies/constants/localstorage-properties.d.ts +37 -0
- package/lib/globaldependencies/helpers/dom.helper.d.ts +7 -0
- package/lib/globaldependencies/helpers/fontawesome-icons.d.ts +1 -0
- package/lib/globaldependencies/helpers/moment-utc-date-adapter.d.ts +9 -0
- package/lib/globaldependencies/helpers/window.helper.d.ts +12 -0
- package/lib/globaldependencies/intercepter/jwt.interceptor.d.ts +11 -0
- package/lib/globaldependencies/pipes/fetchSizedAndCachedImage.pipe.d.ts +8 -0
- package/lib/globaldependencies/pipes/highLightText.pipe.d.ts +8 -0
- package/lib/globaldependencies/pipes/orderby-pipe.d.ts +9 -0
- package/lib/globaldependencies/pipes/removeSpecialCharacters.pipe.d.ts +8 -0
- package/lib/globaldependencies/pipes/sanitize.pipe.d.ts +11 -0
- package/lib/globaldependencies/pipes/softlabels.pipes.d.ts +8 -0
- package/lib/globaldependencies/pipes/utctolocaltime.pipe.d.ts +8 -0
- package/lib/globaldependencies/pipes/utctolocaltimewithdate.pipe.d.ts +8 -0
- package/lib/globaldependencies/pipes/workflowstatus.pipes.d.ts +8 -0
- package/lib/shell-components/components/Payments/account.component.d.ts +14 -0
- package/lib/shell-components/components/Payments/company-information.d.ts +62 -0
- package/lib/shell-components/components/Payments/company-plans.component.d.ts +47 -0
- package/lib/shell-components/components/Payments/document.component.d.ts +20 -0
- package/lib/shell-components/components/Payments/payment-method.component.d.ts +15 -0
- package/lib/shell-components/components/Payments/product-service.component.d.ts +48 -0
- package/lib/shell-components/components/Payments/purchase-more-licenses.d.ts +37 -0
- package/lib/shell-components/components/Payments/transactions.component.d.ts +28 -0
- package/lib/shell-components/components/admin-layout/admin-layout.component.d.ts +67 -0
- package/lib/shell-components/components/all-work-items-dialog/all-work-items-dialog.component.d.ts +32 -0
- package/lib/shell-components/components/confirmation-dialog/confirmation-dialog.component.d.ts +32 -0
- package/lib/shell-components/components/export-import-configuration/export-configuration.component.d.ts +60 -0
- package/lib/shell-components/components/feed-time/feed-time-dialog.component.d.ts +33 -0
- package/lib/shell-components/components/feed-time/feed-time.component.d.ts +27 -0
- package/lib/shell-components/components/header-side/header-side.component.d.ts +216 -0
- package/lib/shell-components/components/header-top/header-top.component.d.ts +40 -0
- package/lib/shell-components/components/lives/lives-welcome-page.d.ts +14 -0
- package/lib/shell-components/components/menu/menu.component.d.ts +220 -0
- package/lib/shell-components/components/menu/searchTask.enum.d.ts +8 -0
- package/lib/shell-components/components/notifications/announcement-dialog.component.d.ts +27 -0
- package/lib/shell-components/components/notifications/notifications.component.d.ts +53 -0
- package/lib/shell-components/components/sidebar-top/sidebar-top.component.d.ts +10 -0
- package/lib/shell-components/components/sidenav/side-bar.component.d.ts +23 -0
- package/lib/shell-components/components/sidenav/sidenav.component.d.ts +17 -0
- package/lib/shell-components/components/submit-feedback/submit-feedback.component.d.ts +25 -0
- package/lib/shell-components/constants/api-urls.d.ts +1051 -0
- package/lib/shell-components/constants/available-languages.d.ts +7 -0
- package/lib/shell-components/constants/channel-names.d.ts +37 -0
- package/lib/shell-components/constants/menu-categories.d.ts +5 -0
- package/lib/shell-components/constants/notification-routes.d.ts +5 -0
- package/lib/shell-components/constants/notification-type-ids.d.ts +41 -0
- package/lib/shell-components/enum/recentSearchType.enum.d.ts +11 -0
- package/lib/shell-components/models/AppMenuItemModel.d.ts +12 -0
- package/lib/shell-components/models/AppNotification.d.ts +12 -0
- package/lib/shell-components/models/AssetAssignedNotificationModel.d.ts +10 -0
- package/lib/shell-components/models/ChannelUpdateModel.d.ts +47 -0
- package/lib/shell-components/models/EmployeeStatusModel.d.ts +11 -0
- package/lib/shell-components/models/IAdjust-screen-options.d.ts +4 -0
- package/lib/shell-components/models/IBadge.d.ts +4 -0
- package/lib/shell-components/models/IChildItem.d.ts +7 -0
- package/lib/shell-components/models/ILayout-change-options.d.ts +4 -0
- package/lib/shell-components/models/IMenuItem.d.ts +14 -0
- package/lib/shell-components/models/IlayoutConf.d.ts +10 -0
- package/lib/shell-components/models/IntroModel.d.ts +3 -0
- package/lib/shell-components/models/MessageDetails.d.ts +55 -0
- package/lib/shell-components/models/MessageTypingDetails.d.ts +9 -0
- package/lib/shell-components/models/NewProjectCreatedNotificationModel.d.ts +8 -0
- package/lib/shell-components/models/NewProjectFeatureNotificationModel.d.ts +8 -0
- package/lib/shell-components/models/NotificationsOutPutModel.d.ts +41 -0
- package/lib/shell-components/models/ProjectSearchCriteriaInputModel.d.ts +10 -0
- package/lib/shell-components/models/RecentSearchModel.d.ts +14 -0
- package/lib/shell-components/models/ReportConfigAssignedNotification.d.ts +9 -0
- package/lib/shell-components/models/ReportSubmittedNotification.d.ts +10 -0
- package/lib/shell-components/models/RoleUpdatedNotification.d.ts +7 -0
- package/lib/shell-components/models/UserStoryAssignedNotification.d.ts +8 -0
- package/lib/shell-components/models/archiveUserStoryModel.d.ts +7 -0
- package/lib/shell-components/models/companieslist.model.d.ts +8 -0
- package/lib/shell-components/models/company-model.d.ts +31 -0
- package/lib/shell-components/models/company-payment-model.d.ts +18 -0
- package/lib/shell-components/models/dragedWidget.d.ts +16 -0
- package/lib/shell-components/models/employee-List.d.ts +8 -0
- package/lib/shell-components/models/employee.d.ts +60 -0
- package/lib/shell-components/models/entityRoleFeature.d.ts +9 -0
- package/lib/shell-components/models/export-configuration-model.d.ts +8 -0
- package/lib/shell-components/models/export-data.module.d.ts +6 -0
- package/lib/shell-components/models/goalApprovedNotificationModel.d.ts +8 -0
- package/lib/shell-components/models/import-configuration-model.d.ts +3 -0
- package/lib/shell-components/models/initialStatusofUsers.d.ts +5 -0
- package/lib/shell-components/models/invoiceOutput-model.d.ts +9 -0
- package/lib/shell-components/models/leaveApplicationNotifiction.d.ts +7 -0
- package/lib/shell-components/models/multiChartsScheduling.d.ts +9 -0
- package/lib/shell-components/models/parkUserStoryInputModel.d.ts +7 -0
- package/lib/shell-components/models/project.d.ts +28 -0
- package/lib/shell-components/models/recentSearchApiModel.d.ts +6 -0
- package/lib/shell-components/models/searchCriteriaInputModelBase.d.ts +10 -0
- package/lib/shell-components/models/shellModulesInfo.d.ts +16 -0
- package/lib/shell-components/models/softlabels-model.d.ts +66 -0
- package/lib/shell-components/models/sprintReplanRequestedModel.d.ts +7 -0
- package/lib/shell-components/models/sprintStartedNotificationModel.d.ts +7 -0
- package/lib/shell-components/models/store-model.d.ts +13 -0
- package/lib/shell-components/models/store-search-model.d.ts +7 -0
- package/lib/shell-components/models/themes.model.d.ts +9 -0
- package/lib/shell-components/models/timesheetenabledisable.d.ts +16 -0
- package/lib/shell-components/models/user.d.ts +40 -0
- package/lib/shell-components/models/userStory.d.ts +188 -0
- package/lib/shell-components/models/userStoryCommentNotificationModel.d.ts +6 -0
- package/lib/shell-components/models/userStoryUpdateNotificationModel.d.ts +6 -0
- package/lib/shell-components/models/userstory-custom-fields.model.d.ts +6 -0
- package/lib/shell-components/models/validation.model.d.ts +5 -0
- package/lib/shell-components/models/widgetlist.d.ts +28 -0
- package/lib/shell-components/models/workspaceList.d.ts +19 -0
- package/lib/shell-components/services/authentication.service.d.ts +18 -0
- package/lib/shell-components/services/chat.service.d.ts +16 -0
- package/lib/shell-components/services/common-used.service.d.ts +45 -0
- package/lib/shell-components/services/feature.service.d.ts +19 -0
- package/lib/shell-components/services/google-analytics.service.d.ts +9 -0
- package/lib/shell-components/services/layout.service.d.ts +23 -0
- package/lib/shell-components/services/payment.service.d.ts +19 -0
- package/lib/shell-components/services/recentSearch.service.d.ts +16 -0
- package/lib/shell-components/services/shell.modules.service.d.ts +9 -0
- package/lib/shell-components/services/signalr.service.d.ts +25 -0
- package/lib/shell-components/services/theme.service.d.ts +14 -0
- package/lib/shell-components/shell.module.d.ts +117 -0
- package/lib/shell-components/shell.routing.d.ts +2 -0
- package/lib/shell-components/store/actions/authentication.actions.d.ts +327 -0
- package/lib/shell-components/store/actions/chat.actions.d.ts +399 -0
- package/lib/shell-components/store/actions/menuitems.actions.d.ts +51 -0
- package/lib/shell-components/store/actions/notification-validator.action.d.ts +25 -0
- package/lib/shell-components/store/actions/notifications.actions.d.ts +116 -0
- package/lib/shell-components/store/effects/authentication.effects.d.ts +54 -0
- package/lib/shell-components/store/effects/chat.effects.d.ts +30 -0
- package/lib/shell-components/store/effects/index.d.ts +1 -0
- package/lib/shell-components/store/effects/menuitems.effects.d.ts +17 -0
- package/lib/shell-components/store/effects/notification-validator.effects.d.ts +21 -0
- package/lib/shell-components/store/effects/notifications.effects.d.ts +23 -0
- package/lib/shell-components/store/reducers/authentication.reducers.d.ts +30 -0
- package/lib/shell-components/store/reducers/chat.reducers.d.ts +17 -0
- package/lib/shell-components/store/reducers/index.d.ts +59 -0
- package/lib/shell-components/store/reducers/menuitems.reducers.d.ts +11 -0
- package/lib/shell-components/store/reducers/notification-validator.reducers.d.ts +5 -0
- package/lib/shell-components/store/reducers/notifications.reducers.d.ts +10 -0
- package/package.json +22 -0
- package/public-api.d.ts +80 -0
- package/store/reducers/index.d.ts +24 -0
- package/thetradeengineorg1-snova-shell-module.d.ts +5 -0
|
@@ -0,0 +1,2478 @@
|
|
|
1
|
+
import { Component, ViewChildren, ViewChild, Input, Output, EventEmitter, HostListener, Inject } from "@angular/core";
|
|
2
|
+
import { Subject } from "rxjs";
|
|
3
|
+
import { debounceTime, distinctUntilChanged } from "rxjs/operators";
|
|
4
|
+
import { select } from "@ngrx/store";
|
|
5
|
+
import * as sharedModuleReducers from "./../../store/reducers/index";
|
|
6
|
+
import { tap } from "rxjs/operators";
|
|
7
|
+
import { GetAllMenuItemsTriggered } from "../../store/actions/menuitems.actions";
|
|
8
|
+
import { NavigationEnd } from "@angular/router";
|
|
9
|
+
import * as moment from "moment";
|
|
10
|
+
import { SearchTaskType } from "./searchTask.enum";
|
|
11
|
+
import { FormGroup, FormControl, Validators } from '@angular/forms';
|
|
12
|
+
import * as _ from 'underscore';
|
|
13
|
+
import { LocalStorageProperties } from '../../../globaldependencies/constants/localstorage-properties';
|
|
14
|
+
import { EmployeeListModel } from '../../models/employee';
|
|
15
|
+
import { EmployeeListInput } from '../../models/employee-List';
|
|
16
|
+
import { CustomAppBaseComponent } from '../../../globaldependencies/components/componentbase';
|
|
17
|
+
import { WidgetList } from '../../models/widgetlist';
|
|
18
|
+
import { WorkspaceList } from '../../models/workspaceList';
|
|
19
|
+
import { WINDOW } from '../../../globaldependencies/helpers/window.helper';
|
|
20
|
+
import { MenuCategories } from '../../constants/menu-categories';
|
|
21
|
+
import { FeatureIds } from '../../../globaldependencies/constants/feature-ids';
|
|
22
|
+
import '../../../globaldependencies/helpers/fontawesome-icons';
|
|
23
|
+
import { RecentSearchType } from '../../enum/recentSearchType.enum';
|
|
24
|
+
import * as i0 from "@angular/core";
|
|
25
|
+
import * as i1 from "@ngrx/store";
|
|
26
|
+
import * as i2 from "ngx-cookie-service";
|
|
27
|
+
import * as i3 from "@angular/router";
|
|
28
|
+
import * as i4 from "ngx-toastr";
|
|
29
|
+
import * as i5 from "@ngx-translate/core";
|
|
30
|
+
import * as i6 from "../../services/authentication.service";
|
|
31
|
+
import * as i7 from "@angular/material/dialog";
|
|
32
|
+
import * as i8 from "../../services/recentSearch.service";
|
|
33
|
+
import * as i9 from "@angular/common";
|
|
34
|
+
import * as i10 from "../../services/theme.service";
|
|
35
|
+
import * as i11 from "@ngrx/effects";
|
|
36
|
+
import * as i12 from "../../services/google-analytics.service";
|
|
37
|
+
import * as i13 from "../../services/common-used.service";
|
|
38
|
+
import * as i14 from "@angular/material/button";
|
|
39
|
+
import * as i15 from "@angular/material/icon";
|
|
40
|
+
import * as i16 from "@angular/material/menu";
|
|
41
|
+
import * as i17 from "@fortawesome/angular-fontawesome";
|
|
42
|
+
import * as i18 from "@angular/material/progress-bar";
|
|
43
|
+
import * as i19 from "@snovasys/snova-avatar";
|
|
44
|
+
import * as i20 from "@ncstate/sat-popover";
|
|
45
|
+
import * as i21 from "@angular/material/card";
|
|
46
|
+
import * as i22 from "@angular/material/form-field";
|
|
47
|
+
import * as i23 from "@angular/material/select";
|
|
48
|
+
import * as i24 from "@angular/material/core";
|
|
49
|
+
import * as i25 from "@angular/material/progress-spinner";
|
|
50
|
+
import * as i26 from "@angular/flex-layout/extended";
|
|
51
|
+
import * as i27 from "@angular/flex-layout/flex";
|
|
52
|
+
import * as i28 from "@angular/material/tooltip";
|
|
53
|
+
import * as i29 from "@angular/forms";
|
|
54
|
+
import * as i30 from "@angular/material/input";
|
|
55
|
+
import * as i31 from "../../../globaldependencies/pipes/softlabels.pipes";
|
|
56
|
+
import * as i32 from "../../../globaldependencies/pipes/highLightText.pipe";
|
|
57
|
+
import * as i33 from "../../../globaldependencies/pipes/removeSpecialCharacters.pipe";
|
|
58
|
+
import * as i34 from "../../../globaldependencies/pipes/fetchSizedAndCachedImage.pipe";
|
|
59
|
+
import * as i35 from "ngx-timeago";
|
|
60
|
+
/** @dynamic */
|
|
61
|
+
export class MenuComponent extends CustomAppBaseComponent {
|
|
62
|
+
constructor(store, cookieService, routes, toastr, translateService, authenticationService, route, dialog, rss, location, themeService, actionUpdates$, cdRef, window, googleAnalyticsService, commonService) {
|
|
63
|
+
super();
|
|
64
|
+
this.store = store;
|
|
65
|
+
this.cookieService = cookieService;
|
|
66
|
+
this.routes = routes;
|
|
67
|
+
this.toastr = toastr;
|
|
68
|
+
this.translateService = translateService;
|
|
69
|
+
this.authenticationService = authenticationService;
|
|
70
|
+
this.route = route;
|
|
71
|
+
this.dialog = dialog;
|
|
72
|
+
this.rss = rss;
|
|
73
|
+
this.location = location;
|
|
74
|
+
this.themeService = themeService;
|
|
75
|
+
this.actionUpdates$ = actionUpdates$;
|
|
76
|
+
this.cdRef = cdRef;
|
|
77
|
+
this.window = window;
|
|
78
|
+
this.googleAnalyticsService = googleAnalyticsService;
|
|
79
|
+
this.commonService = commonService;
|
|
80
|
+
this.isOpened = new EventEmitter();
|
|
81
|
+
this.openNewDashboard = new EventEmitter();
|
|
82
|
+
this.focus = false;
|
|
83
|
+
this.items = [];
|
|
84
|
+
this.menuItemName = "";
|
|
85
|
+
this.subLevels = [];
|
|
86
|
+
this.adminTools = [];
|
|
87
|
+
this.allsearches = [];
|
|
88
|
+
this.recentSearches = [];
|
|
89
|
+
this.projectRoleText = "Project role configuration";
|
|
90
|
+
this.disableWorkspace = false;
|
|
91
|
+
this.disableWorkspaceDelete = false;
|
|
92
|
+
this.disableWorkspacehide = false;
|
|
93
|
+
this.employeeList = [];
|
|
94
|
+
this.loadedEmployeeList = [];
|
|
95
|
+
this.selectedEmployeeIndex = null;
|
|
96
|
+
this.projectList = [];
|
|
97
|
+
this.ngDestroyed$ = new Subject();
|
|
98
|
+
this.userStoryList = [];
|
|
99
|
+
this.userStorySearchList = [];
|
|
100
|
+
this.goalSearchList = [];
|
|
101
|
+
this.selectedRoleIds = [];
|
|
102
|
+
this.delayTimeInput = new Subject();
|
|
103
|
+
this.loadingSearchMenuData = false;
|
|
104
|
+
//this.onFocus();
|
|
105
|
+
// let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
|
|
106
|
+
// this.cookieService.set(LocalStorageProperties.SearchClick, JSON.stringify(false), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
|
|
107
|
+
this.canAccess_feature_CanEditOtherEmployeeDetails$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_CanEditOtherEmployeeDetails }));
|
|
108
|
+
this.canAccess_feature_CanEditOtherEmployeeDetails$.subscribe(result => {
|
|
109
|
+
this.canAccess_feature_CanEditOtherEmployeeDetails = result;
|
|
110
|
+
});
|
|
111
|
+
this.initializeWorkspaceForm();
|
|
112
|
+
this.routes.events.subscribe(val => {
|
|
113
|
+
if (this.location.path() != "") {
|
|
114
|
+
this.url = this.location.path();
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
// this.widgetService.selectedWorkspace.subscribe(id => {
|
|
118
|
+
// this.selectedDashboard = id;
|
|
119
|
+
// });
|
|
120
|
+
// this.actionUpdates$
|
|
121
|
+
// .pipe(
|
|
122
|
+
// takeUntil(this.ngDestroyed$),
|
|
123
|
+
// ofType(AuthenticationActionTypes.GetCompanyThemeCompleted),
|
|
124
|
+
// tap(() => {
|
|
125
|
+
//this.themeModel$ = this.store.pipe(select(sharedModuleReducers.getThemeModel));
|
|
126
|
+
//this.themeModel$.subscribe(x => this.themeModel = x);
|
|
127
|
+
// this.getTheme();
|
|
128
|
+
let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
|
|
129
|
+
this.themeModel = this.cookieService.check('CompanyTheme') ? JSON.parse(this.cookieService.get("CompanyTheme")) : null;
|
|
130
|
+
this.themeService.changeTheme(this.themeModel);
|
|
131
|
+
this.cookieService.set(LocalStorageProperties.CompanyMainLogo, this.themeModel.companyMainLogo, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
|
|
132
|
+
this.cookieService.set(LocalStorageProperties.CompanyMiniLogo, this.themeModel.companyMiniLogo, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
|
|
133
|
+
this.themeModel = this.cookieService.check('CompanyTheme') ? JSON.parse(this.cookieService.get("CompanyTheme")) : null;
|
|
134
|
+
var companySettingsModel = JSON.parse(localStorage.getItem(LocalStorageProperties.CompanySettings));
|
|
135
|
+
this.companyMainLogo = companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo").value : this.companyMainLogo;
|
|
136
|
+
this.companyMiniLogo = companySettingsModel.find(x => x.key.toLowerCase() == "minilogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "minilogo").value : this.companyMiniLogo;
|
|
137
|
+
document.getElementById("shortcut-fav-icon").setAttribute("href", this.themeModel.companyMiniLogo);
|
|
138
|
+
this.themeBaseColor = localStorage.getItem('themeColor');
|
|
139
|
+
// // this.themeModel = this.cookieService.check('CompanyTheme') ? JSON.parse(this.cookieService.get("CompanyTheme")) : null;
|
|
140
|
+
// // if (this.themeModel && this.themeModel.companyThemeId !== "00000000-0000-0000-0000-000000000000") {
|
|
141
|
+
// // this.themeService.changeTheme(this.themeModel);
|
|
142
|
+
// // this.cookieService.set(LocalStorageProperties.CompanyMainLogo, this.themeModel.companyMainLogo, null);
|
|
143
|
+
// // this.cookieService.set(LocalStorageProperties.CompanyMiniLogo, this.themeModel.companyMiniLogo, null);
|
|
144
|
+
// // }
|
|
145
|
+
// // else {
|
|
146
|
+
// // var themeModel = new ThemeModel()
|
|
147
|
+
// // themeModel.companyThemeId = "0929D35A-3573-4B06-93FB-C7D46AAFA918";
|
|
148
|
+
// // // themeModel.companyMiniLogo = "assets/images/Logo-favicon.png";
|
|
149
|
+
// // // themeModel.companyMainLogo = "assets/images/Main-Logo.png";
|
|
150
|
+
// // this.themeModel = themeModel;
|
|
151
|
+
// // this.themeService.changeTheme(themeModel);
|
|
152
|
+
// // this.cookieService.set(LocalStorageProperties.CompanyMainLogo, this.themeModel.companyMainLogo, null);
|
|
153
|
+
// // this.cookieService.set(LocalStorageProperties.CompanyMiniLogo, this.themeModel.companyMiniLogo, null);
|
|
154
|
+
// // }
|
|
155
|
+
// // this.companyMainLogo = this.cookieService.get(LocalStorageProperties.CompanyMainLogo);
|
|
156
|
+
// // this.companyMiniLogo = this.cookieService.get(LocalStorageProperties.CompanyMiniLogo);
|
|
157
|
+
// // //this.changeFavIcon();
|
|
158
|
+
// // this.themeBaseColor = localStorage.getItem('themeColor');
|
|
159
|
+
//this.cdRef.detectChanges();
|
|
160
|
+
// })
|
|
161
|
+
// )
|
|
162
|
+
// .subscribe();
|
|
163
|
+
// this.actionUpdates$
|
|
164
|
+
// .pipe(
|
|
165
|
+
// takeUntil(this.ngDestroyed$),
|
|
166
|
+
// ofType(WorkspacesActionTypes.LoadWorkspaceByIdCompleted),
|
|
167
|
+
// tap((data: any) => {
|
|
168
|
+
// var workspacesList = data.searchWorkspacesSuccess;
|
|
169
|
+
// this.dashboardUpdateInProgress = false;
|
|
170
|
+
// // this.closeAddWorkspaceDialog();
|
|
171
|
+
// this.disableWorkspace = false;
|
|
172
|
+
// if (workspacesList.length > 0) {
|
|
173
|
+
// this.workspaces.push(workspacesList[0]);
|
|
174
|
+
// this.display = false;
|
|
175
|
+
// this.isOpened.emit(this.display);
|
|
176
|
+
// this.openNewDashboard.emit(workspacesList[0].workspaceId)
|
|
177
|
+
// }
|
|
178
|
+
// })
|
|
179
|
+
// ).subscribe();
|
|
180
|
+
//this.getAllProjects();
|
|
181
|
+
this.delayTimeInput.pipe(debounceTime(2000), distinctUntilChanged())
|
|
182
|
+
.subscribe(value => {
|
|
183
|
+
this.SearchItem(value);
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
set reloadAll(data) {
|
|
187
|
+
if (data) {
|
|
188
|
+
this.adminTools = [];
|
|
189
|
+
this.tools = [];
|
|
190
|
+
this.ngOnInit();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
getTheme() {
|
|
194
|
+
this.authenticationService.getThemes().subscribe((response) => {
|
|
195
|
+
if (response.success) {
|
|
196
|
+
let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
|
|
197
|
+
this.cookieService.set('CompanyTheme', JSON.stringify(response.data), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
|
|
198
|
+
this.themeModel = this.cookieService.check('CompanyTheme') ? JSON.parse(this.cookieService.get("CompanyTheme")) : null;
|
|
199
|
+
this.themeService.changeTheme(this.themeModel);
|
|
200
|
+
this.cookieService.set(LocalStorageProperties.CompanyMainLogo, this.themeModel.companyMainLogo, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
|
|
201
|
+
this.cookieService.set(LocalStorageProperties.CompanyMiniLogo, this.themeModel.companyMiniLogo, null, environment.cookiePath, this.window.location.hostname, false, "Strict");
|
|
202
|
+
this.siteUrl = response.data.registrerSiteAddress;
|
|
203
|
+
this.themeModel = this.cookieService.check('CompanyTheme') ? JSON.parse(this.cookieService.get("CompanyTheme")) : null;
|
|
204
|
+
var companySettingsModel = JSON.parse(localStorage.getItem(LocalStorageProperties.CompanySettings));
|
|
205
|
+
this.companyMainLogo = companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo").value : this.companyMainLogo;
|
|
206
|
+
this.companyMiniLogo = companySettingsModel.find(x => x.key.toLowerCase() == "minilogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "minilogo").value : this.companyMiniLogo;
|
|
207
|
+
if (this.companyMainLogo == "" || this.companyMainLogo == null || this.companyMainLogo == undefined) {
|
|
208
|
+
this.companyMainLogo = response.data.companyMainLogo;
|
|
209
|
+
}
|
|
210
|
+
if (this.companyMiniLogo == "" || this.companyMiniLogo == null || this.companyMiniLogo == undefined) {
|
|
211
|
+
this.companyMiniLogo = response.data.companyMiniLogo;
|
|
212
|
+
}
|
|
213
|
+
document.getElementById("shortcut-fav-icon").setAttribute("href", this.themeModel.companyMiniLogo);
|
|
214
|
+
this.themeBaseColor = localStorage.getItem('themeColor');
|
|
215
|
+
this.cdRef.detectChanges();
|
|
216
|
+
}
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
keyOpenEvent() {
|
|
220
|
+
this.element.nativeElement.focus();
|
|
221
|
+
this.display = true;
|
|
222
|
+
this.searchByText = false;
|
|
223
|
+
this.searchById = false;
|
|
224
|
+
this.isOpened.emit(this.display);
|
|
225
|
+
this.onFocus();
|
|
226
|
+
}
|
|
227
|
+
keyCloseEvent() {
|
|
228
|
+
this.element.nativeElement.blur();
|
|
229
|
+
this.display = false;
|
|
230
|
+
this.searchText = '';
|
|
231
|
+
this.searchByText = false;
|
|
232
|
+
this.searchById = false;
|
|
233
|
+
this.isOpened.emit(this.display);
|
|
234
|
+
}
|
|
235
|
+
remoteSearchByText() {
|
|
236
|
+
this.searchById = false;
|
|
237
|
+
this.searchByText = true;
|
|
238
|
+
this.element.nativeElement.focus();
|
|
239
|
+
//this.display = true;
|
|
240
|
+
this.isOpened.emit(this.display);
|
|
241
|
+
}
|
|
242
|
+
remoteSearchById() {
|
|
243
|
+
this.searchByText = false;
|
|
244
|
+
this.searchById = true;
|
|
245
|
+
this.element.nativeElement.focus();
|
|
246
|
+
//this.display = true;
|
|
247
|
+
this.isOpened.emit(this.display);
|
|
248
|
+
}
|
|
249
|
+
convertToLocalTime(time) {
|
|
250
|
+
var utcDate = moment.utc(time).format();
|
|
251
|
+
var localDate = moment.utc(utcDate).local().format();
|
|
252
|
+
return localDate;
|
|
253
|
+
}
|
|
254
|
+
initializeWorkspaceForm() {
|
|
255
|
+
this.selectedRoleIds = null;
|
|
256
|
+
this.disableWorkspace = false;
|
|
257
|
+
this.disableWorkspacehide = false;
|
|
258
|
+
this.workspaceForm = new FormGroup({
|
|
259
|
+
workspaceName: new FormControl(null, Validators.compose([
|
|
260
|
+
Validators.required,
|
|
261
|
+
Validators.maxLength(50)
|
|
262
|
+
])),
|
|
263
|
+
selectedRoles: new FormControl(null, Validators.compose([
|
|
264
|
+
Validators.required
|
|
265
|
+
])),
|
|
266
|
+
description: new FormControl(null, Validators.compose([
|
|
267
|
+
Validators.maxLength(1000)
|
|
268
|
+
])),
|
|
269
|
+
editRoleIds: new FormControl(null, []),
|
|
270
|
+
deleteRoleIds: new FormControl(null, [])
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
ngOnInit() {
|
|
274
|
+
super.ngOnInit();
|
|
275
|
+
this.defaultDashboardId = this.cookieService.check(LocalStorageProperties.DefaultDashboard) ? JSON.parse(this.cookieService.get(LocalStorageProperties.DefaultDashboard)) : null;
|
|
276
|
+
;
|
|
277
|
+
//this.store.dispatch(new GetCompanyThemeTriggered());
|
|
278
|
+
this.adminTools = [];
|
|
279
|
+
// var dashboards = JSON.parse(localStorage.getItem(LocalStorageProperties.Dashboards));
|
|
280
|
+
// if (dashboards && dashboards != "null") {
|
|
281
|
+
// this.workspaces = this.workspacesForLoop = dashboards;
|
|
282
|
+
// }
|
|
283
|
+
// var menuItems = JSON.parse(localStorage.getItem(LocalStorageProperties.MenuItems))
|
|
284
|
+
// if (menuItems && menuItems != "null") {
|
|
285
|
+
// this.menuItem = menuItems;
|
|
286
|
+
// this.items = this.menuItem.filter(item => item.type != "dropDown");
|
|
287
|
+
// this.itemClicked = this.items[0];
|
|
288
|
+
// }
|
|
289
|
+
// var widgets = JSON.parse(localStorage.getItem(LocalStorageProperties.FavouriteWidgets));
|
|
290
|
+
// if (widgets && widgets != "null") {
|
|
291
|
+
// this.widgets = this.originalWidgets = widgets;
|
|
292
|
+
// }
|
|
293
|
+
// var recentSearches = JSON.parse(localStorage.getItem(LocalStorageProperties.RecentSearches));
|
|
294
|
+
// if (recentSearches && recentSearches != "null") {
|
|
295
|
+
// this.allsearches = this.recentSearches = recentSearches;
|
|
296
|
+
// }
|
|
297
|
+
// this.loadWidgetsList();
|
|
298
|
+
// this.loadWorkspacesList();
|
|
299
|
+
this.getSoftLabelConfigurations();
|
|
300
|
+
this.getCompanySettings();
|
|
301
|
+
this.menuItems$ = this.store.pipe(select(sharedModuleReducers.getCurrentActiveMenuCategoryMenuItems), tap(menuList => console.log(menuList)));
|
|
302
|
+
// this.menuItems$.subscribe(x => {
|
|
303
|
+
// var a = x;
|
|
304
|
+
// var b = this.menuItem.filter(item => item.type != "dropDown");
|
|
305
|
+
// //this.itemClicked = this.items[0];
|
|
306
|
+
// //this.menusfetchInProgress = false;
|
|
307
|
+
// });
|
|
308
|
+
// this.store.dispatch(new GetAllMenuItemsTriggered(MenuCategories.Main));
|
|
309
|
+
var companySettingsModel = JSON.parse(localStorage.getItem(LocalStorageProperties.CompanySettings));
|
|
310
|
+
this.companyMainLogo = companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo").value : this.companyMainLogo;
|
|
311
|
+
this.companyMiniLogo = companySettingsModel.find(x => x.key.toLowerCase() == "minilogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "minilogo").value : this.companyMiniLogo;
|
|
312
|
+
if (this.companyMainLogo == "" || this.companyMainLogo == null || this.companyMainLogo == undefined) {
|
|
313
|
+
this.companyMainLogo = this.cookieService.get(LocalStorageProperties.CompanyMainLogo);
|
|
314
|
+
}
|
|
315
|
+
if (this.companyMiniLogo == "" || this.companyMiniLogo == null || this.companyMiniLogo == undefined) {
|
|
316
|
+
this.companyMiniLogo = this.cookieService.get(LocalStorageProperties.CompanyMiniLogo);
|
|
317
|
+
}
|
|
318
|
+
if (document.getElementById('shortcut-fav-icon')) {
|
|
319
|
+
document.getElementById('shortcut-fav-icon').setAttribute("href", this.companyMiniLogo);
|
|
320
|
+
}
|
|
321
|
+
//this.getRecentSearches();
|
|
322
|
+
this.selectedList = [];
|
|
323
|
+
// this.custapp = {
|
|
324
|
+
// name: "Custom applications",
|
|
325
|
+
// link: "/applications/custom-applications",
|
|
326
|
+
// permission: this.canAccess_feature_AddOrUpdateApplications$
|
|
327
|
+
// }
|
|
328
|
+
// this.forms = {
|
|
329
|
+
// name: "Forms",
|
|
330
|
+
// link: "/applications/view-forms",
|
|
331
|
+
// permission: this.canAccess_feature_ViewForms$
|
|
332
|
+
// }
|
|
333
|
+
// this.projectRoleConfiguration = {
|
|
334
|
+
// name: "Project role configuration",
|
|
335
|
+
// link: "/rolemanagement/entityrolemanagement",
|
|
336
|
+
// permission: this.canAccess_feature_ManageProjectRolePermissions$
|
|
337
|
+
// }
|
|
338
|
+
// this.roleConfiguration = {
|
|
339
|
+
// name: "Role configuration",
|
|
340
|
+
// link: "/rolemanagement/rolemanagement",
|
|
341
|
+
// permission: this.canAccess_feature_ViewRoles$
|
|
342
|
+
// }
|
|
343
|
+
// this.canAccess_feature_AddOrUpdateApplications$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_AddOrUpdateApplications }));
|
|
344
|
+
// this.canAccess_feature_AddOrUpdateApplications$.subscribe((result) => {
|
|
345
|
+
// this.canAccess_feature_AddOrUpdateApplications = result;
|
|
346
|
+
// if (result) {
|
|
347
|
+
// this.adminTools.some((flow) => flow.name == 'Custom applications') ? null : this.adminTools.push(this.custapp);
|
|
348
|
+
// }
|
|
349
|
+
// })
|
|
350
|
+
// this.canAccess_feature_AddOrUpdateForm$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_AddOrUpdateForm }));
|
|
351
|
+
// this.canAccess_feature_AddOrUpdateForm$.subscribe((result) => {
|
|
352
|
+
// this.canAccess_feature_AddOrUpdateForm = result;
|
|
353
|
+
// if (result) {
|
|
354
|
+
// this.adminTools.some((flow) => flow.name == 'Forms') ? null : this.adminTools.push(this.forms);
|
|
355
|
+
// }
|
|
356
|
+
// })
|
|
357
|
+
// this.canAccess_feature_ViewForms$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_ViewForms })); // //this.route.url.subscribe((url) => this.url = url.toString());
|
|
358
|
+
// this.canAccess_feature_ViewForms$.subscribe((result) => {
|
|
359
|
+
// this.canAccess_feature_ViewForms = result;
|
|
360
|
+
// if (result) {
|
|
361
|
+
// this.adminTools.some((flow) => flow.name == 'Forms') ? null : this.adminTools.push(this.forms);
|
|
362
|
+
// }
|
|
363
|
+
// })
|
|
364
|
+
// this.canAccess_feature_ManageProjectRolePermissions$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_ManageProjectRolePermissions }));
|
|
365
|
+
// this.canAccess_feature_ManageProjectRolePermissions$.subscribe((result) => {
|
|
366
|
+
// this.canAccess_feature_ManageProjectRolePermissions = result;
|
|
367
|
+
// if (result) {
|
|
368
|
+
// this.adminTools.some((flow) => flow.name == 'Project role configuration') ? null : this.adminTools.push(this.projectRoleConfiguration);
|
|
369
|
+
// }
|
|
370
|
+
// })
|
|
371
|
+
// this.canAccess_feature_ViewRoles$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_ViewRoles }));
|
|
372
|
+
// this.canAccess_feature_ViewRoles$.subscribe((result) => {
|
|
373
|
+
// this.canAccess_feature_ViewRoles = result;
|
|
374
|
+
// if (result) {
|
|
375
|
+
// this.adminTools.some((flow) => flow.name == 'Role configuration') ? null : this.adminTools.push(this.roleConfiguration);
|
|
376
|
+
// }
|
|
377
|
+
// })
|
|
378
|
+
// this.canAccess_feature_CanEditOtherEmployeeDetails$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_CanEditOtherEmployeeDetails }));
|
|
379
|
+
// this.canAccess_feature_CanEditOtherEmployeeDetails$.subscribe(result => {
|
|
380
|
+
// this.canAccess_feature_CanEditOtherEmployeeDetails = result;
|
|
381
|
+
// if (result) {
|
|
382
|
+
// // this.getAllEmployees();
|
|
383
|
+
// }
|
|
384
|
+
// })
|
|
385
|
+
this.tools = this.adminTools;
|
|
386
|
+
//this.selectedRowIndex = 0;
|
|
387
|
+
//this.getAllEmployees();
|
|
388
|
+
// this.loadWidgetsList(null);
|
|
389
|
+
// this.loadWorkspacesList();
|
|
390
|
+
this.userStorySearchList = [];
|
|
391
|
+
this.goalSearchList = [];
|
|
392
|
+
// if(this.items.length>0) {
|
|
393
|
+
// this.selectedRowIndex = 0; this.itemClicked = this.items[0];
|
|
394
|
+
// } else if(this.tools.length>0) {
|
|
395
|
+
// this.t=0; this.itemClicked = this.tools[0];
|
|
396
|
+
// } else if(this.workspaces.length>0) {
|
|
397
|
+
// this.ws = 0; this.itemClicked =this.workspaces[0];
|
|
398
|
+
// }
|
|
399
|
+
this.SearchItem = _.debounce(this.SearchItem, 1000);
|
|
400
|
+
this.routes.events
|
|
401
|
+
.subscribe((event) => {
|
|
402
|
+
if (event instanceof NavigationEnd) {
|
|
403
|
+
this.routerActive();
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
openInfo(infoPopOver) {
|
|
408
|
+
infoPopOver.openPopover();
|
|
409
|
+
}
|
|
410
|
+
// getAllProjects() {
|
|
411
|
+
// const projectSearchResult = new ProjectSearchCriteriaInputModel();
|
|
412
|
+
// projectSearchResult.isArchived = false;
|
|
413
|
+
// this.commonService.searchProjects(projectSearchResult).subscribe((response: any) => {
|
|
414
|
+
// if (response.success == true) {
|
|
415
|
+
// if (response.data) {
|
|
416
|
+
// this.projectSearchResults = response.data;
|
|
417
|
+
// }
|
|
418
|
+
// }
|
|
419
|
+
// else {
|
|
420
|
+
// this.validationMessage = response.apiResponseMessages[0].message;
|
|
421
|
+
// this.projectSearchResults = [];
|
|
422
|
+
// this.toastr.error(this.validationMessage);
|
|
423
|
+
// }
|
|
424
|
+
// })
|
|
425
|
+
// }
|
|
426
|
+
getCompanySettings() {
|
|
427
|
+
let companySettingsModel = [];
|
|
428
|
+
this.companySettingsMOdel$ = this.store.pipe(select(sharedModuleReducers.getCompanySettings));
|
|
429
|
+
this.companySettingsMOdel$.subscribe((x) => companySettingsModel = x);
|
|
430
|
+
let bugBoardResult = companySettingsModel.filter(item => item.key.trim() == "EnableBugBoard");
|
|
431
|
+
if (bugBoardResult && bugBoardResult.length > 0) {
|
|
432
|
+
this.isEnableBugBoard = bugBoardResult[0].value == "1" ? true : false;
|
|
433
|
+
}
|
|
434
|
+
this.companyMainLogo = companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo").value : this.companyMainLogo;
|
|
435
|
+
this.companyMiniLogo = companySettingsModel.find(x => x.key.toLowerCase() == "minilogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "minilogo").value : this.companyMiniLogo;
|
|
436
|
+
if (document.getElementById('shortcut-fav-icon')) {
|
|
437
|
+
document.getElementById('shortcut-fav-icon').setAttribute("href", this.companyMiniLogo);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
loadSearchData() {
|
|
441
|
+
var menuItems = JSON.parse(localStorage.getItem(LocalStorageProperties.MenuItems));
|
|
442
|
+
if (menuItems && menuItems != "null") {
|
|
443
|
+
this.menuItem = menuItems;
|
|
444
|
+
this.items = this.menuItem.filter(item => item.type != "dropDown");
|
|
445
|
+
this.itemClicked = this.items[0];
|
|
446
|
+
}
|
|
447
|
+
var widgets = JSON.parse(localStorage.getItem(LocalStorageProperties.FavouriteWidgets));
|
|
448
|
+
if (widgets && widgets != "null") {
|
|
449
|
+
this.widgets = this.originalWidgets = widgets;
|
|
450
|
+
}
|
|
451
|
+
var recentSearches = JSON.parse(localStorage.getItem(LocalStorageProperties.RecentSearches));
|
|
452
|
+
if (recentSearches && recentSearches != "null") {
|
|
453
|
+
this.allsearches = this.recentSearches = recentSearches;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
translateapplicationname(item) {
|
|
457
|
+
if (item == null) {
|
|
458
|
+
return null;
|
|
459
|
+
}
|
|
460
|
+
var localvariable = item.trim();
|
|
461
|
+
var name = this.translateService.instant("APP." + localvariable);
|
|
462
|
+
if (name.indexOf("APP.") != -1) {
|
|
463
|
+
return item;
|
|
464
|
+
}
|
|
465
|
+
else {
|
|
466
|
+
return name;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
onFocus() {
|
|
470
|
+
if (!this.searchById && !this.searchByText) {
|
|
471
|
+
var retrieveDashboards = true;
|
|
472
|
+
var dashboards = localStorage.getItem(LocalStorageProperties.Dashboards);
|
|
473
|
+
if (dashboards && dashboards != "null") {
|
|
474
|
+
retrieveDashboards = false;
|
|
475
|
+
this.workspacesForLoop = JSON.parse(dashboards);
|
|
476
|
+
if (this.searchText) {
|
|
477
|
+
this.workspaces = this.workspacesForLoop.filter(item => item.workspaceName
|
|
478
|
+
.toLowerCase()
|
|
479
|
+
.includes(this.searchText.toLowerCase()) !==
|
|
480
|
+
false);
|
|
481
|
+
}
|
|
482
|
+
else {
|
|
483
|
+
this.workspaces = this.workspacesForLoop;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
if (!(this.cookieService.check(LocalStorageProperties.SearchClick) && JSON.parse(this.cookieService.get(LocalStorageProperties.SearchClick)) == true)) {
|
|
487
|
+
let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
|
|
488
|
+
this.cookieService.set(LocalStorageProperties.SearchClick, JSON.stringify(true), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
|
|
489
|
+
// this.loadWidgetsList(null);
|
|
490
|
+
// this.loadWorkspacesList();
|
|
491
|
+
// this.getAllMenuItems();
|
|
492
|
+
this.loadingSearchMenuData = true;
|
|
493
|
+
this.rss.searchMenuData(retrieveDashboards)
|
|
494
|
+
.subscribe((res) => {
|
|
495
|
+
if (res.success && res.data) {
|
|
496
|
+
if (res.data.workspaces) {
|
|
497
|
+
this.workspaces = res.data.workspaces;
|
|
498
|
+
localStorage.setItem(LocalStorageProperties.Dashboards, JSON.stringify(this.workspaces));
|
|
499
|
+
this.workspacesForLoop = this.workspaces;
|
|
500
|
+
//this.defaultDashboard = this.workspaces.find(i => i.isDefault == true);
|
|
501
|
+
}
|
|
502
|
+
if (res.data.widgets) {
|
|
503
|
+
this.originalWidgets = res.data.widgets.sort((a, b) => a.widgetName.toLowerCase() > b.widgetName.toLowerCase() ? 1 : -1);
|
|
504
|
+
this.widgets = this.originalWidgets;
|
|
505
|
+
localStorage.setItem(LocalStorageProperties.FavouriteWidgets, JSON.stringify(this.widgets));
|
|
506
|
+
}
|
|
507
|
+
if (res.data.menuItems) {
|
|
508
|
+
// var applications = res.data.menuItems.filter(function (x) {
|
|
509
|
+
// return (
|
|
510
|
+
// x.menuCategory &&
|
|
511
|
+
// MenuCategories.Main &&
|
|
512
|
+
// x.menuCategory.toLowerCase() === MenuCategories.Main.toLowerCase()
|
|
513
|
+
// );
|
|
514
|
+
// })
|
|
515
|
+
this.menuItem = res.data.menuItems;
|
|
516
|
+
localStorage.setItem(LocalStorageProperties.MenuItems, JSON.stringify(this.menuItem));
|
|
517
|
+
this.items = this.menuItem.filter(item => item.type != "dropDown");
|
|
518
|
+
//this.itemClicked = this.items[0];
|
|
519
|
+
}
|
|
520
|
+
if (res.data.recentSearch) {
|
|
521
|
+
this.allsearches = res.data.recentSearch;
|
|
522
|
+
this.recentSearches = this.allsearches;
|
|
523
|
+
localStorage.setItem(LocalStorageProperties.RecentSearches, JSON.stringify(this.allsearches));
|
|
524
|
+
}
|
|
525
|
+
let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
|
|
526
|
+
this.cookieService.set(LocalStorageProperties.LoadFavouriteWidgets, JSON.stringify(false), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
|
|
527
|
+
this.cookieService.set(LocalStorageProperties.LoadRecentSearches, JSON.stringify(false), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
|
|
528
|
+
this.routerActive();
|
|
529
|
+
}
|
|
530
|
+
this.loadingSearchMenuData = false;
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
else {
|
|
534
|
+
this.loadSearchData();
|
|
535
|
+
}
|
|
536
|
+
// else {
|
|
537
|
+
// if (!(this.cookieService.check(LocalStorageProperties.LoadFavouriteWidgets) && JSON.parse(this.cookieService.get(LocalStorageProperties.LoadFavouriteWidgets)) == false)) {
|
|
538
|
+
// this.loadWidgetsList(null, true);
|
|
539
|
+
// let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
|
|
540
|
+
// this.cookieService.set(LocalStorageProperties.LoadFavouriteWidgets, JSON.stringify(false), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
|
|
541
|
+
// }
|
|
542
|
+
// if (!(this.cookieService.check(LocalStorageProperties.LoadRecentSearches) && JSON.parse(this.cookieService.get(LocalStorageProperties.LoadRecentSearches)) == false)) {
|
|
543
|
+
// this.getRecentSearches();
|
|
544
|
+
// let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
|
|
545
|
+
// this.cookieService.set(LocalStorageProperties.LoadRecentSearches, JSON.stringify(false), null, environment.cookiePath, this.window.location.hostname, false, "Strict");
|
|
546
|
+
// }
|
|
547
|
+
// this.routerActive();
|
|
548
|
+
// }
|
|
549
|
+
this.routerActive();
|
|
550
|
+
}
|
|
551
|
+
this.display = true;
|
|
552
|
+
this.isOpened.emit(this.display);
|
|
553
|
+
}
|
|
554
|
+
routerActive() {
|
|
555
|
+
if (this.routes.url.includes("dashboard-management/dashboard") && this.routes.url.split("/")[3]) {
|
|
556
|
+
var dashboardId = this.routes.url.split("/")[3];
|
|
557
|
+
if (dashboardId && this.workspaces.length > 0) {
|
|
558
|
+
var index = this.workspaces.findIndex(i => i.workspaceId == dashboardId);
|
|
559
|
+
this.ws = index;
|
|
560
|
+
this.selectedRowIndex = this.wd = this.rs = null;
|
|
561
|
+
this.itemClicked = this.workspaces[this.ws];
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
else if (this.routes.url.includes("dashboard-management/widgets") && this.routes.url.split("/")[3]) {
|
|
565
|
+
var widgetId = this.routes.url.split("/")[3];
|
|
566
|
+
if (widgetId && this.widgets.length > 0) {
|
|
567
|
+
var index = this.widgets.findIndex(i => i.widgetId == widgetId);
|
|
568
|
+
if (index > 0) {
|
|
569
|
+
this.wd = index;
|
|
570
|
+
this.selectedRowIndex = this.ws = this.rs = null;
|
|
571
|
+
this.itemClicked = this.widgets[this.wd];
|
|
572
|
+
}
|
|
573
|
+
else if (this.recentSearches && this.recentSearches.length > 0) {
|
|
574
|
+
var indexRs = this.recentSearches.findIndex(i => i.itemId == widgetId);
|
|
575
|
+
this.rs = indexRs;
|
|
576
|
+
this.selectedRowIndex = this.ws = this.wd = null;
|
|
577
|
+
this.itemClicked = this.recentSearches[this.rs];
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
else if (this.items.length > 0) {
|
|
582
|
+
var index = this.items.findIndex(i => this.routes.url == "/" + i.state);
|
|
583
|
+
this.selectedRowIndex = index;
|
|
584
|
+
this.ws = this.wd = this.rs = null;
|
|
585
|
+
this.itemClicked = this.items[this.selectedRowIndex];
|
|
586
|
+
this.cdRef.detectChanges();
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
loadWorkspacesList() {
|
|
590
|
+
this.workspacesfetchInProgress = true;
|
|
591
|
+
var workspacelist = new WorkspaceList();
|
|
592
|
+
workspacelist.workspaceId = "null";
|
|
593
|
+
workspacelist.isHidden = false;
|
|
594
|
+
this.commonService.GetWorkspaceList(workspacelist).subscribe((result) => {
|
|
595
|
+
this.workspaces = result.data;
|
|
596
|
+
localStorage.setItem(LocalStorageProperties.Dashboards, JSON.stringify(result.data));
|
|
597
|
+
this.workspacesForLoop = this.workspaces;
|
|
598
|
+
this.defaultDashboard = this.workspaces.find(i => i.isDefault == true);
|
|
599
|
+
this.workspacesfetchInProgress = false;
|
|
600
|
+
});
|
|
601
|
+
// this.store.dispatch(new LoadWorkspacesListTriggered(this.workspacelist));
|
|
602
|
+
}
|
|
603
|
+
;
|
|
604
|
+
openApps() {
|
|
605
|
+
this.routes.navigate(["app-store/widgets"]);
|
|
606
|
+
}
|
|
607
|
+
loadWidgetsList(searchText, store = false) {
|
|
608
|
+
this.widgetsfetchInProgress = true;
|
|
609
|
+
this.widget = new WidgetList();
|
|
610
|
+
this.widget.widgetId = "null";
|
|
611
|
+
this.widget.isArchived = false;
|
|
612
|
+
this.widget.pageNumber = null;
|
|
613
|
+
this.widget.pageSize = null;
|
|
614
|
+
this.widget.sortDirectionAsc = true;
|
|
615
|
+
this.widget.isFavouriteWidget = true;
|
|
616
|
+
if (searchText)
|
|
617
|
+
this.widget.searchText = searchText;
|
|
618
|
+
this.commonService.GetWidgetsBasedOnUser(this.widget).subscribe((result) => {
|
|
619
|
+
this.widgets = [];
|
|
620
|
+
if (result.success) {
|
|
621
|
+
this.originalWidgets = result.data.sort((a, b) => a.widgetName.toLowerCase() > b.widgetName.toLowerCase() ? 1 : -1);
|
|
622
|
+
this.widgets = this.originalWidgets;
|
|
623
|
+
if (store) {
|
|
624
|
+
localStorage.setItem(LocalStorageProperties.FavouriteWidgets, JSON.stringify(this.widgets));
|
|
625
|
+
}
|
|
626
|
+
this.widgetsfetchInProgress = false;
|
|
627
|
+
this.cdRef.detectChanges();
|
|
628
|
+
}
|
|
629
|
+
});
|
|
630
|
+
var companySettingsModel = JSON.parse(localStorage.getItem(LocalStorageProperties.CompanySettings));
|
|
631
|
+
this.companyMainLogo = companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "mainlogo").value : this.companyMainLogo;
|
|
632
|
+
this.companyMiniLogo = companySettingsModel.find(x => x.key.toLowerCase() == "minilogo") != null ? companySettingsModel.find(x => x.key.toLowerCase() == "minilogo").value : this.companyMiniLogo;
|
|
633
|
+
// this.companyMainLogo = this.cookieService.get(LocalStorageProperties.CompanyMainLogo);
|
|
634
|
+
// this.companyMiniLogo = this.cookieService.get(LocalStorageProperties.CompanyMiniLogo);
|
|
635
|
+
if (this.companyMainLogo == "" || this.companyMainLogo == null || this.companyMainLogo == undefined) {
|
|
636
|
+
this.companyMainLogo = this.cookieService.get(LocalStorageProperties.CompanyMainLogo);
|
|
637
|
+
}
|
|
638
|
+
if (this.companyMiniLogo == "" || this.companyMiniLogo == null || this.companyMiniLogo == undefined) {
|
|
639
|
+
this.companyMiniLogo = this.cookieService.get(LocalStorageProperties.CompanyMiniLogo);
|
|
640
|
+
}
|
|
641
|
+
if (document.getElementById('shortcut-fav-icon')) {
|
|
642
|
+
document.getElementById('shortcut-fav-icon').setAttribute("href", this.companyMiniLogo);
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
getAllEmployees() {
|
|
646
|
+
this.canAccess_feature_CanEditOtherEmployeeDetails$ = this.store.pipe(select(sharedModuleReducers.doesUserHavePermission, { featureId: FeatureIds.Feature_CanEditOtherEmployeeDetails }));
|
|
647
|
+
this.canAccess_feature_CanEditOtherEmployeeDetails$.subscribe(result => {
|
|
648
|
+
this.canAccess_feature_CanEditOtherEmployeeDetails = result;
|
|
649
|
+
});
|
|
650
|
+
let employeeSpentTime = new EmployeeListInput();
|
|
651
|
+
employeeSpentTime.sortDirectionAsc = true;
|
|
652
|
+
employeeSpentTime.isActive = true;
|
|
653
|
+
// this.hrDashboarService.GetAllEmployees(employeeSpentTime).subscribe((result: any) => {
|
|
654
|
+
// if (result.success) {
|
|
655
|
+
// this.loadedEmployeeList = result.data;
|
|
656
|
+
// if (!(this.canAccess_feature_CanEditOtherEmployeeDetails)) {
|
|
657
|
+
// var currentUserId = this.cookieService.get(LocalStorageProperties.CurrentUserId);
|
|
658
|
+
// this.loadedEmployeeList = this.loadedEmployeeList.filter(x => (x.userId.toLowerCase() == currentUserId.toLowerCase()));
|
|
659
|
+
// }
|
|
660
|
+
// this.employeeList = this.loadedEmployeeList;
|
|
661
|
+
// }
|
|
662
|
+
// })
|
|
663
|
+
const employeeListSearchResult = new EmployeeListModel();
|
|
664
|
+
employeeListSearchResult.sortDirectionAsc = true;
|
|
665
|
+
this.commonService.getAllEmployees(employeeListSearchResult).subscribe((result) => {
|
|
666
|
+
if (result.success) {
|
|
667
|
+
this.loadedEmployeeList = result.data;
|
|
668
|
+
if (!(this.canAccess_feature_CanEditOtherEmployeeDetails)) {
|
|
669
|
+
var currentUserId = this.cookieService.get(LocalStorageProperties.CurrentUserId);
|
|
670
|
+
this.loadedEmployeeList = this.loadedEmployeeList.filter(x => (x.userId.toLowerCase() == currentUserId.toLowerCase()));
|
|
671
|
+
}
|
|
672
|
+
this.employeeList = this.loadedEmployeeList;
|
|
673
|
+
}
|
|
674
|
+
});
|
|
675
|
+
}
|
|
676
|
+
// ngAfterViewInit() {
|
|
677
|
+
// this.e = this.element.nativeElement;
|
|
678
|
+
// let outSideClick = this.e.addEventListener('blur',()=>{
|
|
679
|
+
// this.display = false;
|
|
680
|
+
// });
|
|
681
|
+
// }
|
|
682
|
+
OpenMenuItems(openMenuPopUp) {
|
|
683
|
+
openMenuPopUp.openPopover();
|
|
684
|
+
}
|
|
685
|
+
openLevel2Menu(link, event) {
|
|
686
|
+
this.stateLvl1 = link;
|
|
687
|
+
this.subLevels = event;
|
|
688
|
+
}
|
|
689
|
+
openLevel3Menu(link1, link2, event) {
|
|
690
|
+
this.level3Link1 = link1;
|
|
691
|
+
this.level3Link2 = link2;
|
|
692
|
+
this.subLevelsForLevel2 = event;
|
|
693
|
+
}
|
|
694
|
+
getAllMenuItems() {
|
|
695
|
+
this.menusfetchInProgress = true;
|
|
696
|
+
this.store.dispatch(new GetAllMenuItemsTriggered(MenuCategories.Main));
|
|
697
|
+
const userReference = localStorage.getItem(LocalStorageProperties.UserReferenceId);
|
|
698
|
+
this.defaultDashboardId = this.cookieService.check(LocalStorageProperties.DefaultDashboard) ? JSON.parse(this.cookieService.get(LocalStorageProperties.DefaultDashboard)) : null;
|
|
699
|
+
;
|
|
700
|
+
if (this.defaultDashboardId && userReference != "null" && userReference != null) {
|
|
701
|
+
this.routes.navigateByUrl("dashboard-management/dashboard/" + this.defaultDashboardId + "/form/" + userReference);
|
|
702
|
+
}
|
|
703
|
+
else if (this.defaultDashboardId) {
|
|
704
|
+
this.routes.navigateByUrl("dashboard-management/dashboard/" + this.defaultDashboardId);
|
|
705
|
+
}
|
|
706
|
+
// this.routes.navigateByUrl("lives/welcome");
|
|
707
|
+
}
|
|
708
|
+
navigateToUrl(workspaceId) {
|
|
709
|
+
const userReference = localStorage.getItem(LocalStorageProperties.UserReferenceId);
|
|
710
|
+
if (userReference != "null" && userReference != null) {
|
|
711
|
+
this.routes.navigateByUrl("dashboard-management/dashboard/" + workspaceId + "/form/" + userReference);
|
|
712
|
+
}
|
|
713
|
+
else {
|
|
714
|
+
this.routes.navigateByUrl("dashboard-management/dashboard/" + workspaceId);
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
getSoftLabelConfigurations() {
|
|
718
|
+
this.softLabels = JSON.parse(localStorage.getItem('SoftLabels'));
|
|
719
|
+
this.cdRef.markForCheck();
|
|
720
|
+
}
|
|
721
|
+
getSearchMenuItems() {
|
|
722
|
+
if (this.searchByText) {
|
|
723
|
+
this.searchByTextLoading = true;
|
|
724
|
+
this.rss.getSearchMenuItems({ searchText: this.searchText, searchUniqueId: null })
|
|
725
|
+
.subscribe((response) => {
|
|
726
|
+
if (response.success && response.data != null && response.data != undefined) {
|
|
727
|
+
if (response.data.length > 0) {
|
|
728
|
+
if (this.searchText) {
|
|
729
|
+
this.projectList = response.data.filter(us => us.itemType == SearchTaskType.Project);
|
|
730
|
+
this.userStorySearchList = response.data.filter(us => (us.itemType == SearchTaskType.workItemORBug) || (us.itemType == SearchTaskType.adhoc));
|
|
731
|
+
this.goalSearchList = response.data.filter(us => us.itemType == SearchTaskType.goal || (us.itemType == SearchTaskType.sprint));
|
|
732
|
+
const users = response.data.filter(us => us.itemType == SearchTaskType.Employee);
|
|
733
|
+
this.loadedEmployeeList = users;
|
|
734
|
+
if (!(this.canAccess_feature_CanEditOtherEmployeeDetails)) {
|
|
735
|
+
var currentUserId = this.cookieService.get(LocalStorageProperties.CurrentUserId);
|
|
736
|
+
this.loadedEmployeeList = this.loadedEmployeeList.filter((x) => (x.itemId.toLowerCase() == currentUserId.toLowerCase()));
|
|
737
|
+
}
|
|
738
|
+
this.employeeList = this.loadedEmployeeList;
|
|
739
|
+
if (this.projectList && this.projectList.length > 0) {
|
|
740
|
+
this.ws = this.t = this.rs = this.wd = this.selectedRowIndex = this.goalIndex = this.users = this.selectedEmployeeIndex = null;
|
|
741
|
+
this.projectIndex = 0;
|
|
742
|
+
this.itemClicked = this.projectList[0];
|
|
743
|
+
}
|
|
744
|
+
else if (this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
745
|
+
this.ws = this.t = this.rs = this.wd = this.selectedRowIndex = this.goalIndex = this.selectedEmployeeIndex = null;
|
|
746
|
+
this.users = 0;
|
|
747
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
748
|
+
}
|
|
749
|
+
else if (this.goalSearchList && this.goalSearchList.length > 0) {
|
|
750
|
+
this.ws = this.t = this.rs = this.wd = this.selectedRowIndex = this.users = this.projectIndex = this.selectedEmployeeIndex = null;
|
|
751
|
+
this.goalIndex = 0;
|
|
752
|
+
this.itemClicked = this.goalSearchList[0];
|
|
753
|
+
}
|
|
754
|
+
else if (this.employeeList && this.employeeList.length > 0) {
|
|
755
|
+
this.ws = this.t = this.rs = this.wd = this.selectedRowIndex = this.users = this.projectIndex = this.goalIndex = null;
|
|
756
|
+
this.selectedEmployeeIndex = 0;
|
|
757
|
+
this.itemClicked = this.employeeList[0];
|
|
758
|
+
}
|
|
759
|
+
else {
|
|
760
|
+
this.users = this.goalIndex = this.projectIndex = this.selectedEmployeeIndex = null;
|
|
761
|
+
}
|
|
762
|
+
this.cdRef.detectChanges();
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
else {
|
|
766
|
+
this.userStorySearchList = [];
|
|
767
|
+
this.goalSearchList = [];
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
this.searchByTextLoading = false;
|
|
771
|
+
});
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
onProjectSelect(item, event) {
|
|
775
|
+
if (event.which == 1) {
|
|
776
|
+
this.searchText = '';
|
|
777
|
+
this.projectList = [];
|
|
778
|
+
this.InsertSearch(item.itemName, RecentSearchType.project, item.itemId);
|
|
779
|
+
this.routes.navigateByUrl("projects/projectstatus/" + item.itemId + "/active-goals");
|
|
780
|
+
}
|
|
781
|
+
else {
|
|
782
|
+
return;
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
SearchItem(event) {
|
|
786
|
+
this.userStorySearchList = [];
|
|
787
|
+
this.goalSearchList = [];
|
|
788
|
+
this.themeBaseColor = localStorage.getItem('themeColor');
|
|
789
|
+
var element = !!document.getElementById("style-1");
|
|
790
|
+
element ? document.getElementById("style-1").scrollTop = 0 : null;
|
|
791
|
+
var elem = !!document.getElementById("style-2");
|
|
792
|
+
elem ? document.getElementById("style-2").scrollTop = 0 : null;
|
|
793
|
+
var emp = !!document.getElementById("style-3");
|
|
794
|
+
emp ? document.getElementById("style-3").scrollTop = 0 : null;
|
|
795
|
+
var widget = !!document.getElementById("style-4");
|
|
796
|
+
widget ? document.getElementById("style-4").scrollTop = 0 : null;
|
|
797
|
+
//this.display = true;
|
|
798
|
+
this.isOpened.emit(this.display);
|
|
799
|
+
if (event.target.value) {
|
|
800
|
+
if (this.searchByText) {
|
|
801
|
+
return this.getSearchMenuItems();
|
|
802
|
+
}
|
|
803
|
+
else if (this.searchById) {
|
|
804
|
+
return;
|
|
805
|
+
}
|
|
806
|
+
this.items = this.menuItem.filter(item => item.menu.toLowerCase().includes(event.target.value.toLowerCase()) !==
|
|
807
|
+
false && item.type != "dropDown");
|
|
808
|
+
this.workspaces = this.workspacesForLoop.filter(item => item.workspaceName
|
|
809
|
+
.toLowerCase()
|
|
810
|
+
.includes(event.target.value.toLowerCase()) !==
|
|
811
|
+
false);
|
|
812
|
+
this.adminTools ? this.tools = this.adminTools.filter(item => item.name.toLowerCase().includes(event.target.value.toLowerCase()) !==
|
|
813
|
+
false) : null;
|
|
814
|
+
//this.loadWidgetsList(event.target.value);
|
|
815
|
+
this.originalWidgets ? this.widgets = this.originalWidgets.filter(item => item.widgetName.toLowerCase().includes(event.target.value.toLowerCase()) !==
|
|
816
|
+
false) : null;
|
|
817
|
+
this.employeeList = this.loadedEmployeeList.length > 0 ? (this.loadedEmployeeList.filter(x => ((x.fullName.toLowerCase().includes(event.target.value.toLowerCase()) !== false)
|
|
818
|
+
|| (x.employeeNumber.toLowerCase().includes(event.target.value.toLowerCase()) !== false)
|
|
819
|
+
|| (x.surName.toLowerCase().includes(event.target.value.toLowerCase()) !== false)))) : null;
|
|
820
|
+
// this.allsearches ? this.recentSearches = this.allsearches.filter(
|
|
821
|
+
// item =>
|
|
822
|
+
// item.recentSearch.toLowerCase().indexOf(event.target.value.toLowerCase()) !== -1
|
|
823
|
+
// ) : null;
|
|
824
|
+
this.allsearches ? this.recentSearches = this.allsearches.filter(item => item.recentSearch.toLowerCase().includes(event.target.value.toLowerCase()) !==
|
|
825
|
+
false) : null;
|
|
826
|
+
if (event.target.value && event.target.value.search('-') > 0) {
|
|
827
|
+
this.rss.searchGoalTasks(event.target.value).subscribe((response) => {
|
|
828
|
+
if (response.success && response.data != null && response.data != undefined) {
|
|
829
|
+
if (response.data.length > 0) {
|
|
830
|
+
if (this.searchText) {
|
|
831
|
+
this.userStorySearchList = response.data.filter(us => (us.type == SearchTaskType.workItemORBug) || (us.type == SearchTaskType.adhoc));
|
|
832
|
+
this.goalSearchList = response.data.filter(us => us.type == SearchTaskType.goal || (us.type == SearchTaskType.sprint));
|
|
833
|
+
if (!((this.items.length > 0 && this.items) || (this.tools && this.tools.length > 0) || (this.workspaces && this.workspaces.length > 0) || (this.widgets && this.widgets.length > 0))) {
|
|
834
|
+
if (this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
835
|
+
this.ws = this.t = this.rs = this.wd = this.selectedRowIndex = this.goalIndex = null;
|
|
836
|
+
this.users = 0;
|
|
837
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
838
|
+
}
|
|
839
|
+
else if (this.goalSearchList && this.goalSearchList.length > 0) {
|
|
840
|
+
this.ws = this.t = this.rs = this.wd = this.selectedRowIndex = this.users = null;
|
|
841
|
+
this.goalIndex = 0;
|
|
842
|
+
this.itemClicked = this.goalSearchList[0];
|
|
843
|
+
}
|
|
844
|
+
else {
|
|
845
|
+
this.users = this.goalIndex = null;
|
|
846
|
+
}
|
|
847
|
+
this.cdRef.detectChanges();
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
else {
|
|
852
|
+
this.userStorySearchList = [];
|
|
853
|
+
this.goalSearchList = [];
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
});
|
|
857
|
+
}
|
|
858
|
+
// const userStorySearchCriteriaTemp = new UserStorySearchCriteriaInputModel();
|
|
859
|
+
// userStorySearchCriteriaTemp.pageSize = 1000;
|
|
860
|
+
// userStorySearchCriteriaTemp.searchText = event.target.value;
|
|
861
|
+
// //.replace(/\s/g, "");
|
|
862
|
+
// // if (event.target.value.indexOf('-')) {
|
|
863
|
+
// this.userService.searchUserStories(userStorySearchCriteriaTemp).subscribe((response: any) => {
|
|
864
|
+
// this.userStorySearchList = [];
|
|
865
|
+
// let companySettingsModel = [];
|
|
866
|
+
// if (response.success && response.data != null && response.data != undefined && response.data.length > 0) {
|
|
867
|
+
// var userStoriesList = response.data;
|
|
868
|
+
// this.companySettingsMOdel$ = this.store.pipe(select(sharedModuleReducers.getCompanySettings));
|
|
869
|
+
// this.companySettingsMOdel$.subscribe((x) => companySettingsModel = x);
|
|
870
|
+
// let bugBoardResult = companySettingsModel.filter(item => item.key.trim() == "EnableBugBoard");
|
|
871
|
+
// if (bugBoardResult.length > 0) {
|
|
872
|
+
// this.isEnableBugBoard = bugBoardResult[0].value == "1" ? true : false;
|
|
873
|
+
// }
|
|
874
|
+
// if (!this.isEnableBugBoard) {
|
|
875
|
+
// userStoriesList = userStoriesList.map((x) => x.isBug == false);
|
|
876
|
+
// }
|
|
877
|
+
// this.userStorySearchList = userStoriesList.map(function (item) {
|
|
878
|
+
// return {
|
|
879
|
+
// goalId: item.goalId,
|
|
880
|
+
// goalName: item.goalName,
|
|
881
|
+
// goalShortName: item.goalShortName,
|
|
882
|
+
// goalUniqueName: item.goalUniqueName,
|
|
883
|
+
// projectId: item.projectId,
|
|
884
|
+
// projectName: item.projectName,
|
|
885
|
+
// sprintId: item.sprintId,
|
|
886
|
+
// sprintName: item.sprintName,
|
|
887
|
+
// userStoryId: item.userStoryId,
|
|
888
|
+
// userStoryName: item.userStoryName,
|
|
889
|
+
// userStoryStatusName: item.userStoryStatusName,
|
|
890
|
+
// userStoryTypeName: item.userStoryTypeName,
|
|
891
|
+
// userStoryUniqueName: item.userStoryUniqueName
|
|
892
|
+
// }
|
|
893
|
+
// });
|
|
894
|
+
// this.cdRef.detectChanges();
|
|
895
|
+
// }
|
|
896
|
+
// });
|
|
897
|
+
// // }
|
|
898
|
+
// let searchGoals = new GoalSearchCriteriaApiInputModel();
|
|
899
|
+
// searchGoals.searchText = event.target.value;
|
|
900
|
+
// //.replace(/\s/g, "");
|
|
901
|
+
// //if (event.target.value.indexOf('-')) {
|
|
902
|
+
// this.userService.searchGoals(searchGoals).subscribe((response: any) => {
|
|
903
|
+
// this.goalSearchList = [];
|
|
904
|
+
// if (response.success && response.data != null && response.data != undefined && response.data.length > 0) {
|
|
905
|
+
// this.goalSearchList = response.data.map(function (item) {
|
|
906
|
+
// return {
|
|
907
|
+
// goalId: item.goalId,
|
|
908
|
+
// goalName: item.goalName,
|
|
909
|
+
// goalShortName: item.goalShortName,
|
|
910
|
+
// goalUniqueName: item.goalUniqueName,
|
|
911
|
+
// projectId: item.projectId,
|
|
912
|
+
// projectName: item.projectName
|
|
913
|
+
// }
|
|
914
|
+
// });
|
|
915
|
+
// this.cdRef.detectChanges();
|
|
916
|
+
// }
|
|
917
|
+
// })
|
|
918
|
+
// //}
|
|
919
|
+
// if (!(this.items.length > 0) && !(this.employeeList.length > 0) && !(this.recentSearches.length > 0) && !(this.widgets.length > 0) && !(this.tools.length > 0) && !(this.workspaces.length > 0)) {
|
|
920
|
+
if (!(this.items.length > 0) && !(this.recentSearches.length > 0) && !(this.widgets.length > 0) && !(this.tools.length > 0) && !(this.workspaces.length > 0)) {
|
|
921
|
+
this.itemClicked = this.t = this.ws = this.wd = this.selectedRowIndex = this.selectedEmployeeIndex = this.rs = this.goalIndex = this.users = null;
|
|
922
|
+
}
|
|
923
|
+
if (this.items && this.items.length > 0) {
|
|
924
|
+
this.selectedRowIndex = 0;
|
|
925
|
+
this.wd = this.ws = this.rs = this.goalIndex = this.users = this.selectedEmployeeIndex = null;
|
|
926
|
+
this.t = null;
|
|
927
|
+
this.itemClicked = this.items[0];
|
|
928
|
+
}
|
|
929
|
+
else if (this.tools && this.tools.length > 0) {
|
|
930
|
+
this.selectedRowIndex = this.goalIndex = this.selectedEmployeeIndex = this.users = null;
|
|
931
|
+
this.wd = this.ws = this.rs = null;
|
|
932
|
+
this.t = 0;
|
|
933
|
+
this.itemClicked = this.tools[0];
|
|
934
|
+
}
|
|
935
|
+
else if (this.workspaces &&
|
|
936
|
+
this.workspaces.length > 0) {
|
|
937
|
+
this.selectedRowIndex = this.goalIndex = this.selectedEmployeeIndex = this.users = null;
|
|
938
|
+
this.wd = this.t = this.rs = null;
|
|
939
|
+
this.ws = 0;
|
|
940
|
+
this.itemClicked = this.workspaces[0];
|
|
941
|
+
}
|
|
942
|
+
else if (this.widgets &&
|
|
943
|
+
this.widgets.length > 0) {
|
|
944
|
+
this.selectedRowIndex = this.goalIndex = this.selectedEmployeeIndex = this.users = null;
|
|
945
|
+
this.ws = this.t = this.rs = null;
|
|
946
|
+
this.wd = 0;
|
|
947
|
+
this.itemClicked = this.widgets[0];
|
|
948
|
+
}
|
|
949
|
+
else if (this.employeeList &&
|
|
950
|
+
this.employeeList.length > 0) {
|
|
951
|
+
this.selectedRowIndex = null;
|
|
952
|
+
this.ws = this.t = this.wd = this.rs = this.goalIndex = this.users = null;
|
|
953
|
+
this.selectedEmployeeIndex = 0;
|
|
954
|
+
this.itemClicked = this.employeeList[0];
|
|
955
|
+
}
|
|
956
|
+
else if (this.recentSearches &&
|
|
957
|
+
this.recentSearches.length > 0) {
|
|
958
|
+
this.selectedRowIndex = null;
|
|
959
|
+
this.ws = this.t = this.wd = this.users = this.goalIndex = null;
|
|
960
|
+
this.rs = 0;
|
|
961
|
+
this.itemClicked = this.recentSearches[0];
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
else {
|
|
965
|
+
if (this.menuItem) {
|
|
966
|
+
this.items = this.menuItem
|
|
967
|
+
.filter(item => item.type != "dropDown");
|
|
968
|
+
}
|
|
969
|
+
else {
|
|
970
|
+
this.items = [];
|
|
971
|
+
}
|
|
972
|
+
this.workspaces = this.workspacesForLoop;
|
|
973
|
+
this.tools = this.adminTools;
|
|
974
|
+
this.widgets = this.originalWidgets;
|
|
975
|
+
this.userStorySearchList = [];
|
|
976
|
+
this.goalSearchList = [];
|
|
977
|
+
this.projectList = [];
|
|
978
|
+
this.recentSearches = this.allsearches;
|
|
979
|
+
//this.employeeList = (this.loadedEmployeeList && this.loadedEmployeeList.length > 0) ? this.loadedEmployeeList : [];
|
|
980
|
+
this.employeeList = [];
|
|
981
|
+
// this.ws = this.wd = this.rs = this.t = this.users = this.goalIndex = null;
|
|
982
|
+
// this.selectedRowIndex = 0;
|
|
983
|
+
// this.itemClicked = this.items.length > 0 ? this.items[0] : null;
|
|
984
|
+
this.searchText == "" ? (this.searchText = undefined) : null;
|
|
985
|
+
}
|
|
986
|
+
this.cdRef.detectChanges();
|
|
987
|
+
}
|
|
988
|
+
closeSearch(event) {
|
|
989
|
+
this.searchText = '';
|
|
990
|
+
this.items = this.menuItem
|
|
991
|
+
.filter(item => item.type != "dropDown")
|
|
992
|
+
.sort((a, b) => (a.menu.toLowerCase() > b.menu.toLowerCase() ? 1 : -1));
|
|
993
|
+
this.workspaces = this.workspacesForLoop;
|
|
994
|
+
this.widgets = this.originalWidgets;
|
|
995
|
+
this.tools = this.adminTools;
|
|
996
|
+
this.recentSearches = this.allsearches;
|
|
997
|
+
this.ws = this.wd = this.rs = this.t = this.users = this.selectedEmployeeIndex = this.goalIndex = null;
|
|
998
|
+
this.selectedRowIndex = 0;
|
|
999
|
+
this.itemClicked = this.items[0];
|
|
1000
|
+
this.display = true;
|
|
1001
|
+
this.userStorySearchList = [];
|
|
1002
|
+
this.goalSearchList = [];
|
|
1003
|
+
this.projectList = [];
|
|
1004
|
+
this.element.nativeElement.focus();
|
|
1005
|
+
this.employeeList = this.loadedEmployeeList.length > 0 ? this.loadedEmployeeList : [];
|
|
1006
|
+
this.isOpened.emit(this.display);
|
|
1007
|
+
}
|
|
1008
|
+
navigate(event, item) {
|
|
1009
|
+
if (this.searchById) {
|
|
1010
|
+
this.searchByTextLoading = true;
|
|
1011
|
+
this.rss.getSearchMenuItems({ searchText: null, searchUniqueId: this.searchText })
|
|
1012
|
+
.subscribe((res) => {
|
|
1013
|
+
if (res.success) {
|
|
1014
|
+
if (res.data.length > 0) {
|
|
1015
|
+
this.redirectToRoute(res.data[0]);
|
|
1016
|
+
}
|
|
1017
|
+
else {
|
|
1018
|
+
this.toastr.warning('Given Id is not valid, please provide correct id to navigate');
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
else if (!res.success) {
|
|
1022
|
+
this.toastr.error(res.apiResponseMessages[0].message);
|
|
1023
|
+
}
|
|
1024
|
+
this.searchByTextLoading = false;
|
|
1025
|
+
});
|
|
1026
|
+
}
|
|
1027
|
+
else if (item) {
|
|
1028
|
+
this.redirectToRoute(item);
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
redirectToRoute(item) {
|
|
1032
|
+
var name;
|
|
1033
|
+
if (this.searchByText || this.searchById) {
|
|
1034
|
+
if (item.itemType && (item.itemType == SearchTaskType.workItemORBug) || (item.itemType == SearchTaskType.adhoc)) {
|
|
1035
|
+
this.searchText = '';
|
|
1036
|
+
this.element.nativeElement.blur();
|
|
1037
|
+
//this.InsertSearch(item.uniquenName);
|
|
1038
|
+
//if (this.projectSearchResults.filter(element => element.projectId == item.projectId).length > 0) {
|
|
1039
|
+
if (item.itemType == SearchTaskType.workItemORBug) {
|
|
1040
|
+
this.InsertSearch(this.searchById ? item.itemUniqueName : item.itemName, RecentSearchType.workItemOrBug, item.itemId);
|
|
1041
|
+
this.routes.navigate(["projects/workitem", item.itemUniqueName], { fragment: 'unique' });
|
|
1042
|
+
}
|
|
1043
|
+
else {
|
|
1044
|
+
this.InsertSearch(this.searchById ? item.itemUniqueName : item.itemName, RecentSearchType.adhoc, item.itemId);
|
|
1045
|
+
this.routes.navigate(["dashboard/adhoc-workitem", item.itemId]);
|
|
1046
|
+
}
|
|
1047
|
+
// }
|
|
1048
|
+
}
|
|
1049
|
+
else if (item.itemType && (item.itemType == SearchTaskType.goal || item.itemType == SearchTaskType.sprint)) {
|
|
1050
|
+
this.searchText = '';
|
|
1051
|
+
this.element.nativeElement.blur();
|
|
1052
|
+
//if (this.projectSearchResults.filter(element => element.projectId == item.projectId).length > 0) {
|
|
1053
|
+
if (item.itemType == SearchTaskType.goal) {
|
|
1054
|
+
this.InsertSearch(this.searchById ? item.itemUniqueName : item.itemName, RecentSearchType.goal, item.itemId);
|
|
1055
|
+
this.routes.navigate(["projects/goal", item.itemUniqueName], { fragment: 'unique' });
|
|
1056
|
+
}
|
|
1057
|
+
else {
|
|
1058
|
+
this.InsertSearch(this.searchById ? item.itemUniqueName : item.itemName, RecentSearchType.sprint, item.itemId);
|
|
1059
|
+
this.routes.navigate(["projects/sprint", item.itemUniqueName], { fragment: 'unique' });
|
|
1060
|
+
}
|
|
1061
|
+
// }
|
|
1062
|
+
}
|
|
1063
|
+
else if (item.itemType == SearchTaskType.Employee) {
|
|
1064
|
+
this.searchText = '';
|
|
1065
|
+
this.element.nativeElement.blur();
|
|
1066
|
+
this.InsertSearch(this.searchById ? item.itemUniqueName : item.itemName, RecentSearchType.employee, item.itemId);
|
|
1067
|
+
this.routes.navigateByUrl("/dashboard/profile/" + item.itemId + "/overview");
|
|
1068
|
+
}
|
|
1069
|
+
else if (item.itemType == SearchTaskType.Project) {
|
|
1070
|
+
this.searchText = '';
|
|
1071
|
+
this.InsertSearch(this.searchById ? item.itemUniqueName : item.itemName, RecentSearchType.project, item.itemId);
|
|
1072
|
+
this.element.nativeElement.blur();
|
|
1073
|
+
this.routes.navigateByUrl("projects/projectstatus/" + item.itemId + "/active-goals");
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
else if (item.menu) {
|
|
1077
|
+
this.searchText = '';
|
|
1078
|
+
this.element.nativeElement.blur();
|
|
1079
|
+
name = item.menu;
|
|
1080
|
+
this.routes.navigate([item.state]);
|
|
1081
|
+
this.InsertSearch(name, RecentSearchType.menu, item.id);
|
|
1082
|
+
}
|
|
1083
|
+
// else if (item.permission) {
|
|
1084
|
+
// this.searchText = '';
|
|
1085
|
+
// this.element.nativeElement.blur();
|
|
1086
|
+
// name = item.name;
|
|
1087
|
+
// this.InsertSearch(name, Rece);
|
|
1088
|
+
// this.routes.navigate([item.link]);
|
|
1089
|
+
// }
|
|
1090
|
+
else if (item.workspaceId) {
|
|
1091
|
+
this.searchText = '';
|
|
1092
|
+
this.element.nativeElement.blur();
|
|
1093
|
+
name = item.workspaceName;
|
|
1094
|
+
this.InsertSearch(name, RecentSearchType.dashboard, item.workspaceId);
|
|
1095
|
+
const userReference = localStorage.getItem(LocalStorageProperties.UserReferenceId);
|
|
1096
|
+
if (userReference != "null" && userReference != null) {
|
|
1097
|
+
this.routes.navigateByUrl("dashboard-management/dashboard/" + item.workspaceId + "/form/" + userReference);
|
|
1098
|
+
}
|
|
1099
|
+
else {
|
|
1100
|
+
this.routes.navigateByUrl("dashboard-management/dashboard/" + item.workspaceId);
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
else if (item.widgetId) {
|
|
1104
|
+
this.searchText = '';
|
|
1105
|
+
this.element.nativeElement.blur();
|
|
1106
|
+
name = item.widgetName;
|
|
1107
|
+
this.InsertSearch(name, RecentSearchType.widget, item.widgetId);
|
|
1108
|
+
this.RedirectToApp(item);
|
|
1109
|
+
}
|
|
1110
|
+
else {
|
|
1111
|
+
this.SearchRecentItem(item, event);
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
InsertSearch(name, recentSearchType, id) {
|
|
1115
|
+
this.rss.insertRecentSearch({ name: name, recentSearchType: recentSearchType, itemId: id }).subscribe((response) => {
|
|
1116
|
+
if (response.success) {
|
|
1117
|
+
// this.recentSearches.includes(name)
|
|
1118
|
+
// ? (this.recentSearches.splice(this.recentSearches.indexOf(name), 1),
|
|
1119
|
+
// this.recentSearches.splice(0, 0, name))
|
|
1120
|
+
// : this.recentSearches.unshift(name);
|
|
1121
|
+
this.getRecentSearches();
|
|
1122
|
+
}
|
|
1123
|
+
});
|
|
1124
|
+
}
|
|
1125
|
+
SearchRecentItem(search, event) {
|
|
1126
|
+
this.display = true;
|
|
1127
|
+
this.isOpened.emit(this.display);
|
|
1128
|
+
if (search.recentSearchType == RecentSearchType.menu) {
|
|
1129
|
+
var item = this.items.filter(item => item.menu.toLowerCase() == search.recentSearch.toLowerCase());
|
|
1130
|
+
item.length > 0 ? this.navigate(event, item[0]) : null;
|
|
1131
|
+
}
|
|
1132
|
+
else if (search.recentSearchType == RecentSearchType.dashboard) {
|
|
1133
|
+
this.searchText = '';
|
|
1134
|
+
this.element.nativeElement.blur();
|
|
1135
|
+
this.InsertSearch(search.recentSearch, RecentSearchType.dashboard, search.itemId);
|
|
1136
|
+
const userReference = localStorage.getItem(LocalStorageProperties.UserReferenceId);
|
|
1137
|
+
if (userReference != "null" && userReference != null) {
|
|
1138
|
+
this.routes.navigateByUrl("dashboard-management/dashboard/" + search.itemId + "/form/" + userReference);
|
|
1139
|
+
}
|
|
1140
|
+
else {
|
|
1141
|
+
this.routes.navigateByUrl("dashboard-management/dashboard/" + search.itemId);
|
|
1142
|
+
}
|
|
1143
|
+
}
|
|
1144
|
+
else if (search.recentSearchType == RecentSearchType.widget) {
|
|
1145
|
+
this.searchText = '';
|
|
1146
|
+
this.element.nativeElement.blur();
|
|
1147
|
+
this.InsertSearch(search.recentSearch, RecentSearchType.widget, search.itemId);
|
|
1148
|
+
this.routes.navigate(["dashboard-management/widgets", search.itemId]);
|
|
1149
|
+
}
|
|
1150
|
+
else if (search.recentSearchType == RecentSearchType.adhoc) {
|
|
1151
|
+
this.searchText = '';
|
|
1152
|
+
this.element.nativeElement.blur();
|
|
1153
|
+
this.InsertSearch(search.recentSearch, RecentSearchType.adhoc, search.itemId);
|
|
1154
|
+
this.routes.navigate(["dashboard/adhoc-workitem", search.itemId]);
|
|
1155
|
+
}
|
|
1156
|
+
else if (search.recentSearchType == RecentSearchType.workItemOrBug) {
|
|
1157
|
+
this.searchText = '';
|
|
1158
|
+
this.element.nativeElement.blur();
|
|
1159
|
+
this.InsertSearch(search.recentSearch, RecentSearchType.workItemOrBug, search.itemId);
|
|
1160
|
+
this.routes.navigate(["projects/workitem", search.itemUniqueName], { fragment: 'unique' });
|
|
1161
|
+
}
|
|
1162
|
+
else if (search.recentSearchType == RecentSearchType.goal) {
|
|
1163
|
+
this.searchText = '';
|
|
1164
|
+
this.element.nativeElement.blur();
|
|
1165
|
+
this.InsertSearch(search.recentSearch, RecentSearchType.goal, search.itemId);
|
|
1166
|
+
this.routes.navigate(["projects/goal", search.itemUniqueName], { fragment: 'unique' });
|
|
1167
|
+
}
|
|
1168
|
+
else if (search.recentSearchType == RecentSearchType.sprint) {
|
|
1169
|
+
this.searchText = '';
|
|
1170
|
+
this.element.nativeElement.blur();
|
|
1171
|
+
this.InsertSearch(search.recentSearch, RecentSearchType.sprint, search.itemId);
|
|
1172
|
+
this.routes.navigate(["projects/sprint", search.itemUniqueName], { fragment: 'unique' });
|
|
1173
|
+
}
|
|
1174
|
+
else if (search.recentSearchType == RecentSearchType.project) {
|
|
1175
|
+
this.searchText = '';
|
|
1176
|
+
this.element.nativeElement.blur();
|
|
1177
|
+
this.InsertSearch(search.recentSearch, RecentSearchType.project, search.itemId);
|
|
1178
|
+
this.routes.navigateByUrl("projects/projectstatus/" + search.itemId + "/active-goals");
|
|
1179
|
+
}
|
|
1180
|
+
else if (search.recentSearchType == RecentSearchType.employee) {
|
|
1181
|
+
this.searchText = '';
|
|
1182
|
+
this.element.nativeElement.blur();
|
|
1183
|
+
this.InsertSearch(search.recentSearch, RecentSearchType.employee, search.itemId);
|
|
1184
|
+
this.routes.navigateByUrl("/dashboard/profile/" + search.itemId + "/overview");
|
|
1185
|
+
}
|
|
1186
|
+
event.stopPropagation();
|
|
1187
|
+
event.preventDefault();
|
|
1188
|
+
}
|
|
1189
|
+
selectMenu(event, click) {
|
|
1190
|
+
if (click.which == 1 && event.workspaceId != undefined) {
|
|
1191
|
+
this.display = false;
|
|
1192
|
+
this.searchByText = false;
|
|
1193
|
+
this.searchById = false;
|
|
1194
|
+
this.isOpened.emit(this.display);
|
|
1195
|
+
this.searchText = '';
|
|
1196
|
+
const userReference = localStorage.getItem(LocalStorageProperties.UserReferenceId);
|
|
1197
|
+
if (userReference != "null" && userReference != null) {
|
|
1198
|
+
this.routes.navigateByUrl("dashboard-management/dashboard/" + event.workspaceId + "/form/" + userReference);
|
|
1199
|
+
}
|
|
1200
|
+
else {
|
|
1201
|
+
this.routes.navigateByUrl("dashboard-management/dashboard/" + event.workspaceId);
|
|
1202
|
+
}
|
|
1203
|
+
this.selectedDashboard = event.workspaceId;
|
|
1204
|
+
this.element.nativeElement.blur();
|
|
1205
|
+
this.menuItemName = event.workspaceName;
|
|
1206
|
+
this.rss
|
|
1207
|
+
.insertRecentSearch({ name: event.workspaceName, recentSearchType: RecentSearchType.dashboard, itemId: event.workspaceId })
|
|
1208
|
+
.subscribe((response) => {
|
|
1209
|
+
if (response.success) {
|
|
1210
|
+
// this.recentSearches.includes(event.workspaceName)
|
|
1211
|
+
// ? (this.recentSearches.splice(
|
|
1212
|
+
// this.recentSearches.indexOf(event.workspaceName),
|
|
1213
|
+
// 1
|
|
1214
|
+
// ),
|
|
1215
|
+
// this.recentSearches.splice(0, 0, event.workspaceName))
|
|
1216
|
+
// : this.recentSearches.unshift(event.workspaceName);
|
|
1217
|
+
this.getRecentSearches();
|
|
1218
|
+
}
|
|
1219
|
+
});
|
|
1220
|
+
}
|
|
1221
|
+
else {
|
|
1222
|
+
return;
|
|
1223
|
+
}
|
|
1224
|
+
}
|
|
1225
|
+
selectEmployee(event, click) {
|
|
1226
|
+
if (click.which == 1) {
|
|
1227
|
+
this.display = false;
|
|
1228
|
+
this.searchByText = false;
|
|
1229
|
+
this.searchById = false;
|
|
1230
|
+
this.isOpened.emit(this.display);
|
|
1231
|
+
this.searchText = '';
|
|
1232
|
+
this.routes.navigateByUrl("/dashboard/profile/" + event.itemId + "/overview");
|
|
1233
|
+
this.selectedDashboard = event.workspaceId;
|
|
1234
|
+
this.selectedEmployee = event.itemId;
|
|
1235
|
+
this.element.nativeElement.blur();
|
|
1236
|
+
this.menuItemName = event.itemName;
|
|
1237
|
+
this.rss
|
|
1238
|
+
.insertRecentSearch({ name: event.itemName, recentSearchType: RecentSearchType.employee, itemId: event.itemId })
|
|
1239
|
+
.subscribe((response) => {
|
|
1240
|
+
if (response.success) {
|
|
1241
|
+
this.rss.getRecentSearch().subscribe((responseData) => {
|
|
1242
|
+
if (responseData.success) {
|
|
1243
|
+
this.allsearches = responseData.data;
|
|
1244
|
+
localStorage.setItem(LocalStorageProperties.RecentSearches, JSON.stringify(this.allsearches));
|
|
1245
|
+
this.recentSearches = responseData.data;
|
|
1246
|
+
}
|
|
1247
|
+
});
|
|
1248
|
+
}
|
|
1249
|
+
});
|
|
1250
|
+
}
|
|
1251
|
+
else {
|
|
1252
|
+
return;
|
|
1253
|
+
}
|
|
1254
|
+
}
|
|
1255
|
+
selectAdimnTool(link, event, item) {
|
|
1256
|
+
if (event.which == 1) {
|
|
1257
|
+
this.display = false;
|
|
1258
|
+
this.searchByText = false;
|
|
1259
|
+
this.searchById = false;
|
|
1260
|
+
this.isOpened.emit(this.display);
|
|
1261
|
+
this.searchText = '';
|
|
1262
|
+
this.routes.navigate([link]);
|
|
1263
|
+
this.element.nativeElement.blur();
|
|
1264
|
+
this.rss.insertRecentSearch({ name: item.menu, recentSearchType: RecentSearchType.menu, itemId: item.id }).subscribe((response) => {
|
|
1265
|
+
if (response.success) {
|
|
1266
|
+
// this.recentSearches.includes(name)
|
|
1267
|
+
// ? (this.recentSearches.splice(this.recentSearches.indexOf(name), 1),
|
|
1268
|
+
// this.recentSearches.splice(0, 0, name))
|
|
1269
|
+
// : this.recentSearches.unshift(name);
|
|
1270
|
+
this.getRecentSearches();
|
|
1271
|
+
}
|
|
1272
|
+
});
|
|
1273
|
+
}
|
|
1274
|
+
else {
|
|
1275
|
+
return;
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
OnSelect(widget, event) {
|
|
1279
|
+
if (event.which == 1) {
|
|
1280
|
+
this.searchText = '';
|
|
1281
|
+
this.RedirectToApp(widget);
|
|
1282
|
+
this.rss
|
|
1283
|
+
.insertRecentSearch({ name: widget.widgetName, recentSearchType: RecentSearchType.widget, itemId: widget.widgetId })
|
|
1284
|
+
.subscribe((response) => {
|
|
1285
|
+
if (response.success) {
|
|
1286
|
+
// this.recentSearches.includes(widget.widgetName)
|
|
1287
|
+
// ? (this.recentSearches.splice(
|
|
1288
|
+
// this.recentSearches.indexOf(widget.widgetName),
|
|
1289
|
+
// 1
|
|
1290
|
+
// ),
|
|
1291
|
+
// this.recentSearches.splice(0, 0, widget.widgetName))
|
|
1292
|
+
// : this.recentSearches.unshift(widget.widgetName);
|
|
1293
|
+
this.getRecentSearches();
|
|
1294
|
+
}
|
|
1295
|
+
});
|
|
1296
|
+
}
|
|
1297
|
+
else {
|
|
1298
|
+
return;
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
getRecentSearches() {
|
|
1302
|
+
this.recentSearchesfetchInProgress = true;
|
|
1303
|
+
this.rss.getRecentSearch().subscribe((responseData) => {
|
|
1304
|
+
if (responseData.success) {
|
|
1305
|
+
this.allsearches = responseData.data;
|
|
1306
|
+
this.recentSearches = responseData.data;
|
|
1307
|
+
localStorage.setItem(LocalStorageProperties.RecentSearches, JSON.stringify(this.allsearches));
|
|
1308
|
+
this.recentSearchesfetchInProgress = false;
|
|
1309
|
+
this.cdRef.detectChanges();
|
|
1310
|
+
}
|
|
1311
|
+
});
|
|
1312
|
+
}
|
|
1313
|
+
RedirectToApp(widget) {
|
|
1314
|
+
this.routes.navigate(["dashboard-management/widgets", widget.widgetId]);
|
|
1315
|
+
}
|
|
1316
|
+
OnGoalSelect(goal, event) {
|
|
1317
|
+
if (event.which == 1) {
|
|
1318
|
+
this.searchText = '';
|
|
1319
|
+
this.RedirectToGoal(goal);
|
|
1320
|
+
}
|
|
1321
|
+
else {
|
|
1322
|
+
return;
|
|
1323
|
+
}
|
|
1324
|
+
}
|
|
1325
|
+
RedirectToGoal(goal) {
|
|
1326
|
+
//if (this.projectSearchResults.filter(item => item.projectId == goal.projectId).length > 0) {
|
|
1327
|
+
if (goal.itemType == SearchTaskType.goal) {
|
|
1328
|
+
this.InsertSearch(goal.itemName, RecentSearchType.goal, goal.itemId);
|
|
1329
|
+
this.routes.navigate(["projects/goal", goal.itemUniqueName], { fragment: 'unique' });
|
|
1330
|
+
}
|
|
1331
|
+
else {
|
|
1332
|
+
this.InsertSearch(goal.itemName, RecentSearchType.sprint, goal.itemId);
|
|
1333
|
+
this.routes.navigate(["projects/sprint", goal.itemUniqueName], { fragment: 'unique' });
|
|
1334
|
+
}
|
|
1335
|
+
this.goalSearchList = [];
|
|
1336
|
+
this.display = true;
|
|
1337
|
+
this.isOpened.emit(this.display);
|
|
1338
|
+
}
|
|
1339
|
+
// }
|
|
1340
|
+
OnUserStorySelect(userStory, event) {
|
|
1341
|
+
if (event.which == 1) {
|
|
1342
|
+
this.searchText = '';
|
|
1343
|
+
this.RedirectToUserStory(userStory);
|
|
1344
|
+
}
|
|
1345
|
+
else {
|
|
1346
|
+
return;
|
|
1347
|
+
}
|
|
1348
|
+
}
|
|
1349
|
+
RedirectToUserStory(userStory) {
|
|
1350
|
+
//if (this.projectSearchResults.filter(item => item.projectId == userStory.projectId).length > 0) {
|
|
1351
|
+
if (userStory.itemType == SearchTaskType.workItemORBug) {
|
|
1352
|
+
this.InsertSearch(userStory.itemName, RecentSearchType.workItemOrBug, userStory.itemId);
|
|
1353
|
+
this.routes.navigate(["projects/workitem", userStory.itemUniqueName], { fragment: 'unique' });
|
|
1354
|
+
}
|
|
1355
|
+
else {
|
|
1356
|
+
this.InsertSearch(userStory.itemName, RecentSearchType.adhoc, userStory.itemId);
|
|
1357
|
+
this.routes.navigate(["dashboard/adhoc-workitem", userStory.itemId]);
|
|
1358
|
+
}
|
|
1359
|
+
this.userStorySearchList = [];
|
|
1360
|
+
this.display = true;
|
|
1361
|
+
this.isOpened.emit(this.display);
|
|
1362
|
+
}
|
|
1363
|
+
// }
|
|
1364
|
+
Set() {
|
|
1365
|
+
this.display = false;
|
|
1366
|
+
this.isOpened.emit(this.display);
|
|
1367
|
+
// if (
|
|
1368
|
+
// this.searchText == undefined ||
|
|
1369
|
+
// this.searchText == null ||
|
|
1370
|
+
// this.searchText === ""
|
|
1371
|
+
// ) {
|
|
1372
|
+
// this.ws = this.wd = this.rs = this.selectedEmployeeIndex = this.t = null;
|
|
1373
|
+
// this.selectedRowIndex = 0;
|
|
1374
|
+
// this.itemClicked = this.items[0];
|
|
1375
|
+
// }
|
|
1376
|
+
}
|
|
1377
|
+
arrowDownEventForSearchByText() {
|
|
1378
|
+
if (this.itemClicked.itemType == SearchTaskType.Project && this.projectIndex < this.projectList.length - 1) {
|
|
1379
|
+
document.getElementById("style-7").scrollTop += 45;
|
|
1380
|
+
this.projectIndex++;
|
|
1381
|
+
this.itemClicked = this.projectList[this.projectIndex];
|
|
1382
|
+
}
|
|
1383
|
+
else if (this.itemClicked.itemType == SearchTaskType.Project && this.projectIndex == this.projectList.length - 1 && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
1384
|
+
document.getElementById("style-5").scrollTop = 0;
|
|
1385
|
+
this.selectedEmployeeIndex = this.projectIndex = this.goalIndex = null;
|
|
1386
|
+
this.users = 0;
|
|
1387
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
1388
|
+
}
|
|
1389
|
+
else if (this.itemClicked.itemType == SearchTaskType.Project && this.projectIndex == this.projectList.length - 1 && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
1390
|
+
document.getElementById("style-6").scrollTop = 0;
|
|
1391
|
+
this.selectedEmployeeIndex = this.projectIndex = this.users = null;
|
|
1392
|
+
this.goalIndex = 0;
|
|
1393
|
+
this.itemClicked = this.goalSearchList[0];
|
|
1394
|
+
}
|
|
1395
|
+
else if (this.itemClicked.itemType == SearchTaskType.Project && this.projectIndex == this.projectList.length - 1 && this.employeeList && this.employeeList.length > 0) {
|
|
1396
|
+
document.getElementById("style-4").scrollTop = 0;
|
|
1397
|
+
this.goalIndex = this.projectIndex = this.users = null;
|
|
1398
|
+
this.selectedEmployeeIndex = 0;
|
|
1399
|
+
this.itemClicked = this.employeeList[0];
|
|
1400
|
+
}
|
|
1401
|
+
else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.users < this.userStorySearchList.length - 1) {
|
|
1402
|
+
document.getElementById("style-5").scrollTop += 45;
|
|
1403
|
+
this.users++;
|
|
1404
|
+
this.itemClicked = this.userStorySearchList[this.users];
|
|
1405
|
+
}
|
|
1406
|
+
else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.users == this.userStorySearchList.length - 1
|
|
1407
|
+
&& this.goalSearchList && this.goalSearchList.length > 0) {
|
|
1408
|
+
document.getElementById("style-6").scrollTop += 45;
|
|
1409
|
+
this.selectedEmployeeIndex = this.projectIndex = this.users = null;
|
|
1410
|
+
this.goalIndex = 0;
|
|
1411
|
+
this.itemClicked = this.goalSearchList[0];
|
|
1412
|
+
}
|
|
1413
|
+
else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.users == this.userStorySearchList.length - 1
|
|
1414
|
+
&& this.employeeList && this.employeeList.length > 0) {
|
|
1415
|
+
document.getElementById("style-4").scrollTop = 0;
|
|
1416
|
+
this.goalIndex = this.projectIndex = this.users = null;
|
|
1417
|
+
this.selectedEmployeeIndex = 0;
|
|
1418
|
+
this.itemClicked = this.employeeList[0];
|
|
1419
|
+
}
|
|
1420
|
+
else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.goalIndex < this.goalSearchList.length - 1) {
|
|
1421
|
+
document.getElementById("style-6").scrollTop += 45;
|
|
1422
|
+
this.goalIndex++;
|
|
1423
|
+
this.itemClicked = this.goalSearchList[this.goalIndex];
|
|
1424
|
+
}
|
|
1425
|
+
else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.goalIndex == this.goalSearchList.length - 1
|
|
1426
|
+
&& this.employeeList && this.employeeList.length > 0) {
|
|
1427
|
+
document.getElementById("style-4").scrollTop = 0;
|
|
1428
|
+
this.goalIndex = this.projectIndex = this.users = null;
|
|
1429
|
+
this.selectedEmployeeIndex = 0;
|
|
1430
|
+
this.itemClicked = this.employeeList[0];
|
|
1431
|
+
}
|
|
1432
|
+
else if (this.itemClicked.itemType == SearchTaskType.Employee && this.selectedEmployeeIndex < this.employeeList.length - 1) {
|
|
1433
|
+
document.getElementById("style-4").scrollTop += 45;
|
|
1434
|
+
this.selectedEmployeeIndex++;
|
|
1435
|
+
this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
|
|
1436
|
+
}
|
|
1437
|
+
}
|
|
1438
|
+
arrowDownEvent() {
|
|
1439
|
+
// if (
|
|
1440
|
+
// this.searchText != undefined ||
|
|
1441
|
+
// this.searchText != null ||
|
|
1442
|
+
// this.searchText === ""
|
|
1443
|
+
// ) {
|
|
1444
|
+
// return;
|
|
1445
|
+
// }
|
|
1446
|
+
if (this.searchByText && this.searchText) {
|
|
1447
|
+
this.arrowDownEventForSearchByText();
|
|
1448
|
+
}
|
|
1449
|
+
else if (this.itemClicked.menu &&
|
|
1450
|
+
this.selectedRowIndex < this.items.length - 1) {
|
|
1451
|
+
//this.menuElement.nativeElement.scrollBy(0, 100);
|
|
1452
|
+
document.getElementById("style-1").scrollTop += 45;
|
|
1453
|
+
this.selectedRowIndex++;
|
|
1454
|
+
this.itemClicked = this.items[this.selectedRowIndex];
|
|
1455
|
+
// this.highlight(nextrow);
|
|
1456
|
+
}
|
|
1457
|
+
else if (this.itemClicked.workspaceId &&
|
|
1458
|
+
this.ws < this.workspaces.length - 1) {
|
|
1459
|
+
this.ws++;
|
|
1460
|
+
document.getElementById("style-2").scrollTop += 41;
|
|
1461
|
+
this.itemClicked = this.workspaces[this.ws];
|
|
1462
|
+
// this.highlight(nextrow);
|
|
1463
|
+
}
|
|
1464
|
+
else if (this.itemClicked.widgetId && this.wd < this.widgets.length - 1) {
|
|
1465
|
+
document.getElementById("style-3").scrollTop += 48;
|
|
1466
|
+
this.wd++;
|
|
1467
|
+
this.itemClicked = this.widgets[this.wd];
|
|
1468
|
+
}
|
|
1469
|
+
else if (this.itemClicked.employeeNumber && this.selectedEmployeeIndex < this.employeeList.length - 1) {
|
|
1470
|
+
document.getElementById("style-4").scrollTop += 45;
|
|
1471
|
+
this.selectedEmployeeIndex++;
|
|
1472
|
+
this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
|
|
1473
|
+
// this.highlight(nextrow);
|
|
1474
|
+
}
|
|
1475
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.users < this.userStorySearchList.length - 1) {
|
|
1476
|
+
document.getElementById("style-5").scrollTop += 45;
|
|
1477
|
+
this.users++;
|
|
1478
|
+
this.itemClicked = this.userStorySearchList[this.users];
|
|
1479
|
+
}
|
|
1480
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.goalIndex < this.goalSearchList.length - 1) {
|
|
1481
|
+
document.getElementById("style-6").scrollTop += 45;
|
|
1482
|
+
this.goalIndex++;
|
|
1483
|
+
this.itemClicked = this.goalSearchList[this.goalIndex];
|
|
1484
|
+
}
|
|
1485
|
+
else if (this.itemClicked.recentSearch && this.rs < 8) {
|
|
1486
|
+
this.rs++;
|
|
1487
|
+
this.itemClicked = this.recentSearches[this.rs];
|
|
1488
|
+
}
|
|
1489
|
+
else if (this.itemClicked.menu && this.selectedRowIndex == this.items.length - 1 && this.workspaces && this.workspaces.length > 0) {
|
|
1490
|
+
document.getElementById("style-2").scrollTop = 0;
|
|
1491
|
+
this.t = null;
|
|
1492
|
+
this.wd = this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.users = this.goalIndex = null;
|
|
1493
|
+
this.ws = 0;
|
|
1494
|
+
this.itemClicked = this.workspaces[0];
|
|
1495
|
+
}
|
|
1496
|
+
else if (this.itemClicked.menu && this.selectedRowIndex == this.items.length - 1 && this.widgets && this.widgets.length > 0) {
|
|
1497
|
+
this.selectedRowIndex = null;
|
|
1498
|
+
document.getElementById("style-3").scrollTop = 0;
|
|
1499
|
+
this.t = this.ws = this.rs = this.selectedEmployeeIndex = this.users = this.goalIndex = null;
|
|
1500
|
+
this.wd = 0;
|
|
1501
|
+
this.itemClicked = this.widgets[0];
|
|
1502
|
+
}
|
|
1503
|
+
else if (this.itemClicked.menu && this.selectedRowIndex == this.items.length - 1 && this.employeeList && this.employeeList.length > 0) {
|
|
1504
|
+
this.t = null;
|
|
1505
|
+
document.getElementById("style-4").scrollTop = 0;
|
|
1506
|
+
this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.users = this.goalIndex = null;
|
|
1507
|
+
this.selectedEmployeeIndex = 0;
|
|
1508
|
+
this.itemClicked = this.employeeList[0];
|
|
1509
|
+
}
|
|
1510
|
+
else if (this.itemClicked.menu && this.selectedRowIndex == this.items.length - 1 && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
1511
|
+
this.t = null;
|
|
1512
|
+
document.getElementById("style-5").scrollTop = 0;
|
|
1513
|
+
this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.goalIndex = null;
|
|
1514
|
+
this.users = 0;
|
|
1515
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
1516
|
+
}
|
|
1517
|
+
else if (this.itemClicked.menu && this.selectedRowIndex == this.items.length - 1 && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
1518
|
+
this.t = null;
|
|
1519
|
+
document.getElementById("style-6").scrollTop = 0;
|
|
1520
|
+
this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
|
|
1521
|
+
this.goalIndex = 0;
|
|
1522
|
+
this.itemClicked = this.goalSearchList[0];
|
|
1523
|
+
}
|
|
1524
|
+
else if (this.itemClicked.menu && this.selectedRowIndex == this.items.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
|
|
1525
|
+
this.t = null;
|
|
1526
|
+
this.wd = this.goalIndex = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
|
|
1527
|
+
this.rs = 0;
|
|
1528
|
+
this.itemClicked = this.recentSearches[0];
|
|
1529
|
+
}
|
|
1530
|
+
else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.widgets && this.widgets.length > 0) {
|
|
1531
|
+
this.selectedRowIndex = null;
|
|
1532
|
+
document.getElementById("style-3").scrollTop = 0;
|
|
1533
|
+
this.t = this.ws = this.rs = this.selectedEmployeeIndex = this.users = this.goalIndex = null;
|
|
1534
|
+
this.wd = 0;
|
|
1535
|
+
this.itemClicked = this.widgets[0];
|
|
1536
|
+
}
|
|
1537
|
+
else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.employeeList && this.employeeList.length > 0) {
|
|
1538
|
+
this.t = null;
|
|
1539
|
+
document.getElementById("style-4").scrollTop = 0;
|
|
1540
|
+
this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.users = this.goalIndex = null;
|
|
1541
|
+
this.selectedEmployeeIndex = 0;
|
|
1542
|
+
this.itemClicked = this.employeeList[0];
|
|
1543
|
+
}
|
|
1544
|
+
else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
1545
|
+
this.t = null;
|
|
1546
|
+
document.getElementById("style-5").scrollTop = 0;
|
|
1547
|
+
this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.goalIndex = null;
|
|
1548
|
+
this.users = 0;
|
|
1549
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
1550
|
+
}
|
|
1551
|
+
else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
1552
|
+
this.t = null;
|
|
1553
|
+
document.getElementById("style-6").scrollTop = 0;
|
|
1554
|
+
this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
|
|
1555
|
+
this.goalIndex = 0;
|
|
1556
|
+
this.itemClicked = this.goalSearchList[0];
|
|
1557
|
+
}
|
|
1558
|
+
else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
|
|
1559
|
+
this.t = null;
|
|
1560
|
+
this.wd = this.goalIndex = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
|
|
1561
|
+
this.rs = 0;
|
|
1562
|
+
this.itemClicked = this.recentSearches[0];
|
|
1563
|
+
}
|
|
1564
|
+
else if (this.itemClicked.widgetId && this.wd == this.widgets.length - 1 && this.employeeList && this.employeeList.length > 0) {
|
|
1565
|
+
this.t = null;
|
|
1566
|
+
document.getElementById("style-4").scrollTop = 0;
|
|
1567
|
+
this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.users = this.goalIndex = null;
|
|
1568
|
+
this.selectedEmployeeIndex = 0;
|
|
1569
|
+
this.itemClicked = this.employeeList[0];
|
|
1570
|
+
}
|
|
1571
|
+
else if (this.itemClicked.widgetId && this.wd == this.widgets.length - 1 && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
1572
|
+
this.t = null;
|
|
1573
|
+
document.getElementById("style-5").scrollTop = 0;
|
|
1574
|
+
this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.goalIndex = null;
|
|
1575
|
+
this.users = 0;
|
|
1576
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
1577
|
+
}
|
|
1578
|
+
else if (this.itemClicked.widgetId && this.wd == this.widgets.length - 1 && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
1579
|
+
this.t = null;
|
|
1580
|
+
document.getElementById("style-6").scrollTop = 0;
|
|
1581
|
+
this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
|
|
1582
|
+
this.goalIndex = 0;
|
|
1583
|
+
this.itemClicked = this.goalSearchList[0];
|
|
1584
|
+
}
|
|
1585
|
+
else if (this.itemClicked.widgetId && this.wd == this.widgets.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
|
|
1586
|
+
this.t = null;
|
|
1587
|
+
this.wd = this.goalIndex = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
|
|
1588
|
+
this.rs = 0;
|
|
1589
|
+
this.itemClicked = this.recentSearches[0];
|
|
1590
|
+
}
|
|
1591
|
+
else if (this.itemClicked.employeeNumber && this.selectedEmployeeIndex == this.employeeList.length - 1 && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
1592
|
+
this.t = null;
|
|
1593
|
+
document.getElementById("style-5").scrollTop = 0;
|
|
1594
|
+
this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.goalIndex = null;
|
|
1595
|
+
this.users = 0;
|
|
1596
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
1597
|
+
}
|
|
1598
|
+
else if (this.itemClicked.employeeNumber && this.selectedEmployeeIndex == this.employeeList.length - 1 && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
1599
|
+
this.t = null;
|
|
1600
|
+
document.getElementById("style-6").scrollTop = 0;
|
|
1601
|
+
this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
|
|
1602
|
+
this.goalIndex = 0;
|
|
1603
|
+
this.itemClicked = this.goalSearchList[0];
|
|
1604
|
+
}
|
|
1605
|
+
else if (this.itemClicked.employeeNumber && this.selectedEmployeeIndex == this.employeeList.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
|
|
1606
|
+
this.t = null;
|
|
1607
|
+
this.wd = this.goalIndex = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
|
|
1608
|
+
this.rs = 0;
|
|
1609
|
+
this.itemClicked = this.recentSearches[0];
|
|
1610
|
+
}
|
|
1611
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) &&
|
|
1612
|
+
this.users == this.userStorySearchList.length - 1 && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
1613
|
+
this.t = null;
|
|
1614
|
+
document.getElementById("style-6").scrollTop = 0;
|
|
1615
|
+
this.wd = this.rs = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
|
|
1616
|
+
this.goalIndex = 0;
|
|
1617
|
+
this.itemClicked = this.goalSearchList[0];
|
|
1618
|
+
}
|
|
1619
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) &&
|
|
1620
|
+
this.users == this.userStorySearchList.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
|
|
1621
|
+
this.t = null;
|
|
1622
|
+
this.wd = this.goalIndex = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
|
|
1623
|
+
this.rs = 0;
|
|
1624
|
+
this.itemClicked = this.recentSearches[0];
|
|
1625
|
+
}
|
|
1626
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) &&
|
|
1627
|
+
this.goalIndex == this.goalSearchList.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
|
|
1628
|
+
this.t = null;
|
|
1629
|
+
this.wd = this.goalIndex = this.selectedRowIndex = this.t = this.ws = this.selectedEmployeeIndex = this.users = null;
|
|
1630
|
+
this.rs = 0;
|
|
1631
|
+
this.itemClicked = this.recentSearches[0];
|
|
1632
|
+
}
|
|
1633
|
+
// else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.widgets && this.widgets.length > 0) {
|
|
1634
|
+
// document.getElementById("style-4").scrollTop = 0;
|
|
1635
|
+
// this.t = null;
|
|
1636
|
+
// this.ws = this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = null;
|
|
1637
|
+
// this.wd = 0;
|
|
1638
|
+
// this.itemClicked = this.widgets[0];
|
|
1639
|
+
// } else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.employeeList && this.employeeList.length > 0) {
|
|
1640
|
+
// document.getElementById("style-3").scrollTop = 0;
|
|
1641
|
+
// this.wd = null;
|
|
1642
|
+
// this.ws = this.rs = this.selectedRowIndex = null;
|
|
1643
|
+
// this.selectedEmployeeIndex = 0;
|
|
1644
|
+
// this.itemClicked = this.employeeList[0];
|
|
1645
|
+
// } else if (this.itemClicked.workspaceId && this.ws == this.workspaces.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
|
|
1646
|
+
// this.wd = null;
|
|
1647
|
+
// this.ws = this.rs = this.selectedEmployeeIndex = this.selectedRowIndex = null;
|
|
1648
|
+
// this.rs = 0;
|
|
1649
|
+
// this.itemClicked = this.recentSearches[0];
|
|
1650
|
+
// } else if (this.itemClicked.widgetId && this.wd == 8 && this.employeeList && this.employeeList.length > 0) {
|
|
1651
|
+
// document.getElementById("style-3").scrollTop = 0;
|
|
1652
|
+
// this.wd = null;
|
|
1653
|
+
// this.ws = this.rs = this.selectedRowIndex = null;
|
|
1654
|
+
// this.rs = null;
|
|
1655
|
+
// this.selectedEmployeeIndex = 0
|
|
1656
|
+
// this.itemClicked = this.employeeList[0];
|
|
1657
|
+
// }
|
|
1658
|
+
// else if (this.itemClicked.widgetId && this.wd == 8 && this.recentSearches && this.recentSearches.length > 0) {
|
|
1659
|
+
// this.wd = null;
|
|
1660
|
+
// this.ws = this.rs = this.selectedEmployeeIndex = this.selectedRowIndex = null;
|
|
1661
|
+
// this.rs = 0;
|
|
1662
|
+
// this.itemClicked = this.recentSearches[0];
|
|
1663
|
+
// }
|
|
1664
|
+
// else if (this.itemClicked.fullName && this.selectedEmployeeIndex == this.employeeList.length - 1 && this.recentSearches && this.recentSearches.length > 0) {
|
|
1665
|
+
// this.wd = null;
|
|
1666
|
+
// this.ws = this.rs = this.selectedEmployeeIndex = this.selectedRowIndex = null;
|
|
1667
|
+
// this.rs = 0;
|
|
1668
|
+
// this.itemClicked = this.recentSearches[0];
|
|
1669
|
+
// }
|
|
1670
|
+
// else {
|
|
1671
|
+
// if (this.rs !== null && this.rs !== undefined && this.recentSearches.length > 8 && this.rs < 8) {
|
|
1672
|
+
// this.rs++;
|
|
1673
|
+
// this.itemClicked = this.recentSearches[this.rs];
|
|
1674
|
+
// // this.highlight(nextrow);
|
|
1675
|
+
// }
|
|
1676
|
+
// else if (this.rs !== null && this.rs !== undefined && (this.recentSearches.length) - 1 > this.rs && this.rs < 8) {
|
|
1677
|
+
// this.rs++;
|
|
1678
|
+
// this.itemClicked = this.recentSearches[this.rs];
|
|
1679
|
+
// }
|
|
1680
|
+
// }
|
|
1681
|
+
}
|
|
1682
|
+
arrowUpEventForSearchByText() {
|
|
1683
|
+
if (this.itemClicked.itemType == SearchTaskType.Project && this.projectIndex > 0) {
|
|
1684
|
+
this.projectIndex--;
|
|
1685
|
+
document.getElementById("style-7").scrollTop -= 45;
|
|
1686
|
+
this.itemClicked = this.projectList[this.projectIndex];
|
|
1687
|
+
}
|
|
1688
|
+
else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.itemClicked.itemId == this.userStorySearchList[0].itemId && this.users == 0 && this.projectList && this.projectList.length > 0) {
|
|
1689
|
+
this.selectedEmployeeIndex = this.users = this.goalIndex = null;
|
|
1690
|
+
this.projectIndex = this.projectList.length - 1;
|
|
1691
|
+
this.itemClicked = this.projectList[this.projectIndex];
|
|
1692
|
+
document.getElementById("style-7").scrollTop = document.getElementById("style-7").scrollHeight;
|
|
1693
|
+
}
|
|
1694
|
+
else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.users > 0) {
|
|
1695
|
+
this.users--;
|
|
1696
|
+
document.getElementById("style-5").scrollTop -= 45;
|
|
1697
|
+
this.itemClicked = this.userStorySearchList[this.users];
|
|
1698
|
+
}
|
|
1699
|
+
else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.itemClicked.itemId == this.goalSearchList[0].itemId && this.goalIndex == 0 && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
1700
|
+
this.projectIndex = this.goalIndex = this.selectedEmployeeIndex = null;
|
|
1701
|
+
this.users = this.userStorySearchList.length - 1;
|
|
1702
|
+
this.itemClicked = this.userStorySearchList[this.users];
|
|
1703
|
+
document.getElementById("style-5").scrollTop = document.getElementById("style-5").scrollHeight;
|
|
1704
|
+
}
|
|
1705
|
+
else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.itemClicked.itemId == this.goalSearchList[0].itemId && this.goalIndex == 0 && this.projectList && this.projectList.length > 0) {
|
|
1706
|
+
this.selectedEmployeeIndex = this.users = this.goalIndex = null;
|
|
1707
|
+
this.projectIndex = this.projectList.length - 1;
|
|
1708
|
+
this.itemClicked = this.projectList[this.projectIndex];
|
|
1709
|
+
document.getElementById("style-7").scrollTop = document.getElementById("style-7").scrollHeight;
|
|
1710
|
+
}
|
|
1711
|
+
else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.goalIndex > 0) {
|
|
1712
|
+
this.goalIndex--;
|
|
1713
|
+
document.getElementById("style-6").scrollTop -= 45;
|
|
1714
|
+
this.itemClicked = this.goalSearchList[this.goalIndex];
|
|
1715
|
+
}
|
|
1716
|
+
else if (this.itemClicked.itemType == SearchTaskType.Employee && this.itemClicked.itemId == this.employeeList[0].itemId && this.selectedEmployeeIndex == 0 && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
1717
|
+
this.projectIndex = this.selectedEmployeeIndex = this.users = null;
|
|
1718
|
+
this.goalIndex = this.goalSearchList.length - 1;
|
|
1719
|
+
this.itemClicked = this.goalSearchList[this.goalIndex];
|
|
1720
|
+
document.getElementById("style-6").scrollTop = document.getElementById("style-6").scrollHeight;
|
|
1721
|
+
}
|
|
1722
|
+
else if (this.itemClicked.itemType == SearchTaskType.Employee && this.itemClicked.itemId == this.employeeList[0].itemId && this.selectedEmployeeIndex == 0 && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
1723
|
+
this.projectIndex = this.goalIndex = this.selectedEmployeeIndex = null;
|
|
1724
|
+
this.users = this.userStorySearchList.length - 1;
|
|
1725
|
+
this.itemClicked = this.userStorySearchList[this.users];
|
|
1726
|
+
document.getElementById("style-5").scrollTop = document.getElementById("style-5").scrollHeight;
|
|
1727
|
+
}
|
|
1728
|
+
else if (this.itemClicked.itemType == SearchTaskType.Employee && this.itemClicked.itemId == this.employeeList[0].itemId && this.selectedEmployeeIndex == 0 && this.projectList && this.projectList.length > 0) {
|
|
1729
|
+
this.selectedEmployeeIndex = this.users = this.goalIndex = null;
|
|
1730
|
+
this.projectIndex = this.projectList.length - 1;
|
|
1731
|
+
this.itemClicked = this.projectList[this.projectIndex];
|
|
1732
|
+
document.getElementById("style-7").scrollTop = document.getElementById("style-7").scrollHeight;
|
|
1733
|
+
}
|
|
1734
|
+
else if (this.itemClicked.itemType == SearchTaskType.Employee && this.selectedEmployeeIndex > 0) {
|
|
1735
|
+
this.selectedEmployeeIndex--;
|
|
1736
|
+
document.getElementById("style-4").scrollTop -= 45;
|
|
1737
|
+
this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
arrowUpEvent() {
|
|
1741
|
+
// if (
|
|
1742
|
+
// this.searchText != undefined ||
|
|
1743
|
+
// this.searchText != null ||
|
|
1744
|
+
// this.searchText === ""
|
|
1745
|
+
// ) {
|
|
1746
|
+
// return;
|
|
1747
|
+
// }
|
|
1748
|
+
if (this.searchByText && this.searchText) {
|
|
1749
|
+
this.arrowUpEventForSearchByText();
|
|
1750
|
+
}
|
|
1751
|
+
//From menus
|
|
1752
|
+
else if (this.itemClicked.menu && this.selectedRowIndex > 0) {
|
|
1753
|
+
this.selectedRowIndex--;
|
|
1754
|
+
document.getElementById("style-1").scrollTop -= 45;
|
|
1755
|
+
this.itemClicked = this.items[this.selectedRowIndex];
|
|
1756
|
+
}
|
|
1757
|
+
//From workspaces
|
|
1758
|
+
else if (this.itemClicked.workspaceId &&
|
|
1759
|
+
this.itemClicked.workspaceId == this.workspaces[0].workspaceId && this.ws == 0 &&
|
|
1760
|
+
this.items && this.items.length > 0) {
|
|
1761
|
+
this.ws = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = null;
|
|
1762
|
+
this.selectedRowIndex = this.items.length - 1;
|
|
1763
|
+
this.itemClicked = this.items[this.selectedRowIndex];
|
|
1764
|
+
document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
|
|
1765
|
+
}
|
|
1766
|
+
else if (this.itemClicked.workspaceId && this.ws > 0) {
|
|
1767
|
+
document.getElementById("style-2").scrollTop -= 41;
|
|
1768
|
+
this.ws--;
|
|
1769
|
+
this.itemClicked = this.workspaces[this.ws];
|
|
1770
|
+
}
|
|
1771
|
+
//From widgets
|
|
1772
|
+
else if (this.itemClicked.widgetId && this.wd > 0) {
|
|
1773
|
+
document.getElementById("style-3").scrollTop -= 48;
|
|
1774
|
+
this.wd--;
|
|
1775
|
+
this.itemClicked = this.widgets[this.wd];
|
|
1776
|
+
}
|
|
1777
|
+
else if (this.itemClicked.widgetId && this.itemClicked.widgetId == this.widgets[0].widgetId && this.wd == 0 &&
|
|
1778
|
+
this.workspaces && this.workspaces.length > 0) {
|
|
1779
|
+
this.selectedRowIndex = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1780
|
+
this.ws = this.workspaces.length - 1;
|
|
1781
|
+
this.itemClicked = this.workspaces[this.ws];
|
|
1782
|
+
document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
|
|
1783
|
+
}
|
|
1784
|
+
else if (this.itemClicked.widgetId && this.itemClicked.widgetId == this.widgets[0].widgetId && this.wd == 0 &&
|
|
1785
|
+
this.items && this.items.length > 0) {
|
|
1786
|
+
this.ws = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1787
|
+
this.selectedRowIndex = this.items.length - 1;
|
|
1788
|
+
this.itemClicked = this.items[this.selectedRowIndex];
|
|
1789
|
+
document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
|
|
1790
|
+
}
|
|
1791
|
+
//From Employees
|
|
1792
|
+
else if (this.itemClicked.employeeNumber && this.selectedEmployeeIndex > 0) {
|
|
1793
|
+
document.getElementById("style-4").scrollTop -= 45;
|
|
1794
|
+
this.selectedEmployeeIndex--;
|
|
1795
|
+
this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
|
|
1796
|
+
}
|
|
1797
|
+
else if (this.itemClicked.employeeNumber && this.itemClicked.employeeNumber == this.employeeList[0].employeeNumber && this.selectedEmployeeIndex == 0 &&
|
|
1798
|
+
this.widgets && this.widgets.length > 0) {
|
|
1799
|
+
this.ws = this.t = this.selectedRowIndex = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1800
|
+
this.wd = this.widgets.length - 1;
|
|
1801
|
+
this.itemClicked = this.widgets[this.wd];
|
|
1802
|
+
document.getElementById("style-3").scrollTop = document.getElementById("style-3").scrollHeight;
|
|
1803
|
+
}
|
|
1804
|
+
else if (this.itemClicked.employeeNumber && this.itemClicked.employeeNumber == this.employeeList[0].employeeNumber && this.selectedEmployeeIndex == 0 &&
|
|
1805
|
+
this.workspaces && this.workspaces.length > 0) {
|
|
1806
|
+
this.selectedRowIndex = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1807
|
+
this.ws = this.workspaces.length - 1;
|
|
1808
|
+
this.itemClicked = this.workspaces[this.ws];
|
|
1809
|
+
document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
|
|
1810
|
+
}
|
|
1811
|
+
else if (this.itemClicked.employeeNumber && this.itemClicked.employeeNumber == this.employeeList[0].employeeNumber && this.selectedEmployeeIndex == 0 &&
|
|
1812
|
+
this.workspaces && this.workspaces.length > 0) {
|
|
1813
|
+
this.ws = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1814
|
+
this.selectedRowIndex = this.items.length - 1;
|
|
1815
|
+
this.itemClicked = this.items[this.selectedRowIndex];
|
|
1816
|
+
document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
|
|
1817
|
+
}
|
|
1818
|
+
//From WI/Bug NEED TO DO
|
|
1819
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
|
|
1820
|
+
&& this.users > 0) {
|
|
1821
|
+
document.getElementById("style-5").scrollTop -= 45;
|
|
1822
|
+
this.users--;
|
|
1823
|
+
this.itemClicked = this.userStorySearchList[this.users];
|
|
1824
|
+
}
|
|
1825
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) &&
|
|
1826
|
+
this.users == 0 && this.employeeList && this.employeeList.length > 0) {
|
|
1827
|
+
this.ws = this.t = this.selectedRowIndex = this.users = this.wd = this.goalIndex = this.rs = null;
|
|
1828
|
+
this.selectedEmployeeIndex = this.employeeList.length - 1;
|
|
1829
|
+
this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
|
|
1830
|
+
document.getElementById("style-4").scrollTop = document.getElementById("style-4").scrollHeight;
|
|
1831
|
+
}
|
|
1832
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) &&
|
|
1833
|
+
this.users == 0 && this.widgets && this.widgets.length > 0) {
|
|
1834
|
+
this.selectedRowIndex = this.t = this.ws = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1835
|
+
this.wd = this.widgets.length - 1;
|
|
1836
|
+
this.itemClicked = this.widgets[this.wd];
|
|
1837
|
+
document.getElementById("style-3").scrollTop = document.getElementById("style-3").scrollHeight;
|
|
1838
|
+
}
|
|
1839
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) &&
|
|
1840
|
+
this.users == 0 && this.workspaces && this.workspaces.length > 0) {
|
|
1841
|
+
this.selectedRowIndex = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1842
|
+
this.ws = this.workspaces.length - 1;
|
|
1843
|
+
this.itemClicked = this.workspaces[this.ws];
|
|
1844
|
+
document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
|
|
1845
|
+
}
|
|
1846
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) &&
|
|
1847
|
+
this.users == 0 && this.workspaces && this.workspaces.length > 0) {
|
|
1848
|
+
this.ws = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1849
|
+
this.selectedRowIndex = this.items.length - 1;
|
|
1850
|
+
this.itemClicked = this.items[this.selectedRowIndex];
|
|
1851
|
+
document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
|
|
1852
|
+
}
|
|
1853
|
+
//From goal/sprint
|
|
1854
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint)
|
|
1855
|
+
&& this.goalIndex > 0) {
|
|
1856
|
+
document.getElementById("style-6").scrollTop -= 45;
|
|
1857
|
+
this.goalIndex--;
|
|
1858
|
+
this.itemClicked = this.goalSearchList[this.goalIndex];
|
|
1859
|
+
}
|
|
1860
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) &&
|
|
1861
|
+
this.goalIndex == 0 && this.userStoryList && this.userStoryList.length > 0) {
|
|
1862
|
+
this.ws = this.t = this.selectedRowIndex = this.selectedEmployeeIndex = this.wd = this.goalIndex = this.rs = null;
|
|
1863
|
+
this.users = this.employeeList.length - 1;
|
|
1864
|
+
this.itemClicked = this.userStoryList[this.users];
|
|
1865
|
+
document.getElementById("style-5").scrollTop = document.getElementById("style-5").scrollHeight;
|
|
1866
|
+
}
|
|
1867
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) &&
|
|
1868
|
+
this.goalIndex == 0 && this.employeeList && this.employeeList.length > 0) {
|
|
1869
|
+
this.ws = this.t = this.selectedRowIndex = this.users = this.wd = this.goalIndex = this.rs = null;
|
|
1870
|
+
this.selectedEmployeeIndex = this.employeeList.length - 1;
|
|
1871
|
+
this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
|
|
1872
|
+
document.getElementById("style-4").scrollTop = document.getElementById("style-4").scrollHeight;
|
|
1873
|
+
}
|
|
1874
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) &&
|
|
1875
|
+
this.goalIndex == 0 && this.widgets && this.widgets.length > 0) {
|
|
1876
|
+
this.selectedRowIndex = this.t = this.ws = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1877
|
+
this.wd = this.widgets.length - 1;
|
|
1878
|
+
this.itemClicked = this.widgets[this.wd];
|
|
1879
|
+
document.getElementById("style-3").scrollTop = document.getElementById("style-3").scrollHeight;
|
|
1880
|
+
}
|
|
1881
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemTypetype == SearchTaskType.sprint) &&
|
|
1882
|
+
this.goalIndex == 0 && this.workspaces && this.workspaces.length > 0) {
|
|
1883
|
+
this.selectedRowIndex = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1884
|
+
this.ws = this.workspaces.length - 1;
|
|
1885
|
+
this.itemClicked = this.workspaces[this.ws];
|
|
1886
|
+
document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
|
|
1887
|
+
}
|
|
1888
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) &&
|
|
1889
|
+
this.goalIndex == 0 && this.workspaces && this.workspaces.length > 0) {
|
|
1890
|
+
this.ws = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1891
|
+
this.selectedRowIndex = this.items.length - 1;
|
|
1892
|
+
this.itemClicked = this.items[this.selectedRowIndex];
|
|
1893
|
+
document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
|
|
1894
|
+
}
|
|
1895
|
+
//From recent searches
|
|
1896
|
+
else if (this.itemClicked.recentSearch && this.rs > 0) {
|
|
1897
|
+
this.rs--;
|
|
1898
|
+
this.itemClicked = this.recentSearches[this.rs];
|
|
1899
|
+
}
|
|
1900
|
+
else if (this.itemClicked.recentSearch && this.rs == 0 &&
|
|
1901
|
+
this.goalSearchList && this.goalSearchList.length > 0) {
|
|
1902
|
+
this.ws = this.t = this.selectedRowIndex = this.users = this.selectedEmployeeIndex = this.wd = this.rs = null;
|
|
1903
|
+
this.goalIndex = this.goalSearchList.length - 1;
|
|
1904
|
+
this.itemClicked = this.goalSearchList[this.goalIndex];
|
|
1905
|
+
document.getElementById("style-6").scrollTop = document.getElementById("style-6").scrollHeight;
|
|
1906
|
+
}
|
|
1907
|
+
else if (this.itemClicked.recentSearch && this.rs == 0 &&
|
|
1908
|
+
this.userStoryList && this.userStoryList.length > 0) {
|
|
1909
|
+
this.ws = this.t = this.selectedRowIndex = this.wd = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1910
|
+
this.users = this.userStoryList.length - 1;
|
|
1911
|
+
this.itemClicked = this.userStoryList[this.users];
|
|
1912
|
+
document.getElementById("style-5").scrollTop = document.getElementById("style-5").scrollHeight;
|
|
1913
|
+
}
|
|
1914
|
+
else if (this.itemClicked.recentSearch && this.rs == 0 &&
|
|
1915
|
+
this.employeeList && this.employeeList.length > 0) {
|
|
1916
|
+
this.ws = this.t = this.selectedRowIndex = this.wd = this.wd = this.goalIndex = this.rs = null;
|
|
1917
|
+
this.selectedEmployeeIndex = this.employeeList.length - 1;
|
|
1918
|
+
this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
|
|
1919
|
+
document.getElementById("style-4").scrollTop = document.getElementById("style-4").scrollHeight;
|
|
1920
|
+
}
|
|
1921
|
+
else if (this.itemClicked.recentSearch && this.rs == 0 &&
|
|
1922
|
+
this.widgets && this.widgets.length > 0) {
|
|
1923
|
+
this.ws = this.t = this.selectedRowIndex = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1924
|
+
this.wd = this.widgets.length - 1;
|
|
1925
|
+
this.itemClicked = this.widgets[this.wd];
|
|
1926
|
+
document.getElementById("style-3").scrollTop = document.getElementById("style-3").scrollHeight;
|
|
1927
|
+
}
|
|
1928
|
+
else if (this.itemClicked.recentSearch && this.rs == 0 &&
|
|
1929
|
+
this.workspaces && this.workspaces.length > 0) {
|
|
1930
|
+
this.selectedRowIndex = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1931
|
+
this.ws = this.workspaces.length - 1;
|
|
1932
|
+
this.itemClicked = this.workspaces[this.ws];
|
|
1933
|
+
document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
|
|
1934
|
+
}
|
|
1935
|
+
else if (this.itemClicked.recentSearch && this.rs == 0 &&
|
|
1936
|
+
this.workspaces && this.workspaces.length > 0) {
|
|
1937
|
+
this.ws = this.t = this.wd = this.users = this.selectedEmployeeIndex = this.goalIndex = this.rs = null;
|
|
1938
|
+
this.selectedRowIndex = this.items.length - 1;
|
|
1939
|
+
this.itemClicked = this.items[this.selectedRowIndex];
|
|
1940
|
+
document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
|
|
1941
|
+
}
|
|
1942
|
+
// else if (this.itemClicked.recentSearch && this.rs == 0 && this.employeeList && this.employeeList.length > 0) {
|
|
1943
|
+
// document.getElementById("style-3").scrollTop = document.getElementById("style-3").scrollHeight;
|
|
1944
|
+
// this.selectedEmployeeIndex = this.employeeList.length - 1;
|
|
1945
|
+
// this.rs = this.t = this.ws = this.wd = this.selectedRowIndex = null;
|
|
1946
|
+
// this.itemClicked = this.employeeList[this.selectedEmployeeIndex];
|
|
1947
|
+
// } else if (this.itemClicked.recentSearch && this.rs == 0 && this.widgets && this.widgets.length > 0) {
|
|
1948
|
+
// this.wd = this.widgets.length - 1;
|
|
1949
|
+
// this.rs = this.selectedRowIndex = this.t = this.selectedEmployeeIndex = this.ws = null;
|
|
1950
|
+
// this.itemClicked = this.widgets[this.wd];
|
|
1951
|
+
// } else if (this.itemClicked.recentSearch && this.rs == 0 && this.workspaces && this.workspaces.length > 0) {
|
|
1952
|
+
// this.ws = this.workspaces.length - 1;
|
|
1953
|
+
// this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.t = this.wd = null;
|
|
1954
|
+
// this.itemClicked = this.workspaces[this.ws];
|
|
1955
|
+
// } else if (this.itemClicked.recentSearch && this.rs == 0 && this.tools && this.tools.length > 0) {
|
|
1956
|
+
// this.t = this.tools.length - 1;
|
|
1957
|
+
// this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.ws = this.wd = null;
|
|
1958
|
+
// this.itemClicked = this.workspaces[this.t];
|
|
1959
|
+
// } else if (this.itemClicked.recentSearch && this.rs == 0 && this.items && this.items.length > 0) {
|
|
1960
|
+
// this.selectedRowIndex = this.items.length - 1;
|
|
1961
|
+
// this.rs = this.t = this.ws = this.selectedEmployeeIndex = this.wd = null;
|
|
1962
|
+
// this.itemClicked = this.items[this.t];
|
|
1963
|
+
// } else if (this.itemClicked.fullName && this.selectedEmployeeIndex == 0 && this.widgets && this.widgets.length > 0) {
|
|
1964
|
+
// document.getElementById("style-4").scrollTop = document.getElementById("style-4").scrollHeight;
|
|
1965
|
+
// this.wd = 8;
|
|
1966
|
+
// this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.t = this.ws = null;
|
|
1967
|
+
// this.itemClicked = this.widgets[this.wd];
|
|
1968
|
+
// } else if (this.itemClicked.fullName && this.selectedEmployeeIndex == 0 && this.workspaces && this.workspaces.length > 0) {
|
|
1969
|
+
// this.ws = this.workspaces.length - 1;
|
|
1970
|
+
// this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.t = this.wd = null;
|
|
1971
|
+
// this.itemClicked = this.workspaces[this.ws];
|
|
1972
|
+
// } else if (this.itemClicked.fullName && this.selectedEmployeeIndex == 0 && this.tools && this.tools.length > 0) {
|
|
1973
|
+
// this.t = this.tools.length - 1;
|
|
1974
|
+
// this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.ws = this.wd = null;
|
|
1975
|
+
// this.itemClicked = this.workspaces[this.t];
|
|
1976
|
+
// } else if (this.itemClicked.fullName && this.selectedEmployeeIndex == 0 && this.items && this.items.length > 0) {
|
|
1977
|
+
// this.selectedRowIndex = this.items.length - 1;
|
|
1978
|
+
// this.rs = this.t = this.ws = this.selectedEmployeeIndex = this.wd = null;
|
|
1979
|
+
// this.itemClicked = this.items[this.t];
|
|
1980
|
+
// } else if (this.itemClicked.widgetId && this.wd == 0 && this.workspaces && this.workspaces.length > 0) {
|
|
1981
|
+
// document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
|
|
1982
|
+
// this.ws = this.workspaces.length - 1;
|
|
1983
|
+
// this.rs = this.selectedRowIndex = this.t = this.wd = null;
|
|
1984
|
+
// this.itemClicked = this.workspaces[this.ws];
|
|
1985
|
+
// document.getElementById("style-2").scrollTop = document.getElementById("style-2").scrollHeight;
|
|
1986
|
+
// } else if (this.itemClicked.widgetId && this.wd == 0 && this.tools && this.tools.length > 0) {
|
|
1987
|
+
// this.t = this.tools.length - 1;
|
|
1988
|
+
// this.rs = this.selectedRowIndex = this.ws = this.wd = null;
|
|
1989
|
+
// this.itemClicked = this.workspaces[this.t];
|
|
1990
|
+
// } else if (this.itemClicked.widgetId && this.wd == 0 && this.items && this.items.length > 0) {
|
|
1991
|
+
// this.selectedRowIndex = this.items.length - 1;
|
|
1992
|
+
// this.rs = this.t = this.ws = this.wd = null;
|
|
1993
|
+
// this.itemClicked = this.items[this.t];
|
|
1994
|
+
// } else if (this.itemClicked.workspaceId && this.ws == 0 && this.tools && this.tools.length > 0) {
|
|
1995
|
+
// this.t = this.tools.length - 1;
|
|
1996
|
+
// this.rs = this.selectedRowIndex = this.ws = this.wd = null;
|
|
1997
|
+
// this.itemClicked = this.tools[this.t];
|
|
1998
|
+
// } else if (this.itemClicked.workspaceId && this.ws == 0 && this.items && this.items.length > 0) {
|
|
1999
|
+
// this.selectedRowIndex = this.items.length - 1;
|
|
2000
|
+
// this.rs = this.t = this.ws = this.wd = null;
|
|
2001
|
+
// this.itemClicked = this.items[this.selectedRowIndex];
|
|
2002
|
+
// } else if (this.itemClicked.permission && this.t == 0 && this.items && this.items.length > 0) {
|
|
2003
|
+
// this.selectedRowIndex = this.items.length - 1;
|
|
2004
|
+
// this.rs = this.t = this.ws = this.wd = null;
|
|
2005
|
+
// document.getElementById("style-1").scrollTop = document.getElementById("style-1").scrollHeight;
|
|
2006
|
+
// this.itemClicked = this.items[this.selectedRowIndex];
|
|
2007
|
+
// } else {
|
|
2008
|
+
// if (this.rs !== null && this.rs !== undefined && this.rs > 0) {
|
|
2009
|
+
// this.rs--;
|
|
2010
|
+
// this.itemClicked = this.recentSearches[this.rs];
|
|
2011
|
+
// // this.highlight(nextrow);
|
|
2012
|
+
// }
|
|
2013
|
+
// }
|
|
2014
|
+
}
|
|
2015
|
+
arrowLeftEventForSearchByText() {
|
|
2016
|
+
if (this.itemClicked.itemType == SearchTaskType.Project) {
|
|
2017
|
+
return;
|
|
2018
|
+
}
|
|
2019
|
+
else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.projectList && this.projectList.length > 0) {
|
|
2020
|
+
document.getElementById("style-7").scrollTop = 0;
|
|
2021
|
+
this.users = this.goalIndex = this.selectedEmployeeIndex = null;
|
|
2022
|
+
this.projectIndex = 0;
|
|
2023
|
+
this.itemClicked = this.projectList[0];
|
|
2024
|
+
}
|
|
2025
|
+
else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
2026
|
+
document.getElementById("style-5").scrollTop = 0;
|
|
2027
|
+
this.projectIndex = this.goalIndex = this.selectedEmployeeIndex = null;
|
|
2028
|
+
this.users = 0;
|
|
2029
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
2030
|
+
}
|
|
2031
|
+
else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.projectList && this.projectList.length > 0) {
|
|
2032
|
+
document.getElementById("style-7").scrollTop = 0;
|
|
2033
|
+
this.users = this.goalIndex = this.selectedEmployeeIndex = null;
|
|
2034
|
+
this.projectIndex = 0;
|
|
2035
|
+
this.itemClicked = this.projectList[0];
|
|
2036
|
+
}
|
|
2037
|
+
else if (this.itemClicked.itemType == SearchTaskType.Employee && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
2038
|
+
document.getElementById("style-6").scrollTop = 0;
|
|
2039
|
+
this.projectIndex = this.users = this.selectedEmployeeIndex = null;
|
|
2040
|
+
this.goalIndex = 0;
|
|
2041
|
+
this.itemClicked = this.goalSearchList[0];
|
|
2042
|
+
}
|
|
2043
|
+
else if (this.itemClicked.itemType == SearchTaskType.Employee && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
2044
|
+
document.getElementById("style-5").scrollTop = 0;
|
|
2045
|
+
this.projectIndex = this.goalIndex = this.selectedEmployeeIndex = null;
|
|
2046
|
+
this.users = 0;
|
|
2047
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
2048
|
+
}
|
|
2049
|
+
else if (this.itemClicked.itemType == SearchTaskType.Employee && this.projectList && this.projectList.length > 0) {
|
|
2050
|
+
document.getElementById("style-7").scrollTop = 0;
|
|
2051
|
+
this.users = this.goalIndex = this.selectedEmployeeIndex = null;
|
|
2052
|
+
this.projectIndex = 0;
|
|
2053
|
+
this.itemClicked = this.projectList[0];
|
|
2054
|
+
}
|
|
2055
|
+
}
|
|
2056
|
+
arrowLeftEvent() {
|
|
2057
|
+
// if (
|
|
2058
|
+
// this.searchText != undefined ||
|
|
2059
|
+
// this.searchText != null ||
|
|
2060
|
+
// this.searchText === ""
|
|
2061
|
+
// ) {
|
|
2062
|
+
// return;
|
|
2063
|
+
// }
|
|
2064
|
+
if (this.searchByText && this.searchText) {
|
|
2065
|
+
this.arrowLeftEventForSearchByText();
|
|
2066
|
+
}
|
|
2067
|
+
else if (this.itemClicked.menu) {
|
|
2068
|
+
return;
|
|
2069
|
+
}
|
|
2070
|
+
//From workspaces
|
|
2071
|
+
else if (this.itemClicked.workspaceId && this.items && this.items.length > 0) {
|
|
2072
|
+
document.getElementById("style-1").scrollTop = 0;
|
|
2073
|
+
this.t = this.wd = this.ws = this.rs = this.selectedEmployeeIndex = this.users = this.goalIndex = null;
|
|
2074
|
+
this.selectedRowIndex = 0;
|
|
2075
|
+
this.itemClicked = this.items[0];
|
|
2076
|
+
}
|
|
2077
|
+
//from widgets
|
|
2078
|
+
else if (this.itemClicked.widgetId && this.workspaces && this.workspaces.length > 0) {
|
|
2079
|
+
this.selectedRowIndex = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2080
|
+
this.ws = 0;
|
|
2081
|
+
document.getElementById("style-2").scrollTop = 0;
|
|
2082
|
+
this.itemClicked = this.workspaces[0];
|
|
2083
|
+
}
|
|
2084
|
+
else if (this.itemClicked.widgetId && this.items && this.items.length > 0) {
|
|
2085
|
+
this.ws = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2086
|
+
this.selectedRowIndex = 0;
|
|
2087
|
+
document.getElementById("style-1").scrollTop = 0;
|
|
2088
|
+
this.itemClicked = this.items[0];
|
|
2089
|
+
}
|
|
2090
|
+
//From employees
|
|
2091
|
+
else if (this.itemClicked.employeeNumber && this.widgets && this.widgets.length > 0) {
|
|
2092
|
+
this.selectedRowIndex = this.selectedEmployeeIndex = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2093
|
+
this.wd = 0;
|
|
2094
|
+
document.getElementById("style-3").scrollTop = 0;
|
|
2095
|
+
this.itemClicked = this.widgets[0];
|
|
2096
|
+
}
|
|
2097
|
+
else if (this.itemClicked.employeeNumber && this.workspaces && this.workspaces.length > 0) {
|
|
2098
|
+
this.selectedRowIndex = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2099
|
+
this.ws = 0;
|
|
2100
|
+
document.getElementById("style-2").scrollTop = 0;
|
|
2101
|
+
this.itemClicked = this.workspaces[0];
|
|
2102
|
+
}
|
|
2103
|
+
else if (this.itemClicked.employeeNumber && this.items && this.items.length > 0) {
|
|
2104
|
+
this.ws = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2105
|
+
this.selectedRowIndex = 0;
|
|
2106
|
+
document.getElementById("style-1").scrollTop = 0;
|
|
2107
|
+
this.itemClicked = this.items[0];
|
|
2108
|
+
}
|
|
2109
|
+
//From WI/Bug
|
|
2110
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
|
|
2111
|
+
&& this.employeeList && this.employeeList.length > 0) {
|
|
2112
|
+
this.selectedRowIndex = this.wd = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2113
|
+
this.selectedEmployeeIndex = 0;
|
|
2114
|
+
document.getElementById("style-4").scrollTop = 0;
|
|
2115
|
+
this.itemClicked = this.employeeList[0];
|
|
2116
|
+
}
|
|
2117
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
|
|
2118
|
+
&& this.widgets && this.widgets.length > 0) {
|
|
2119
|
+
this.selectedRowIndex = this.selectedEmployeeIndex = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2120
|
+
this.wd = 0;
|
|
2121
|
+
document.getElementById("style-3").scrollTop = 0;
|
|
2122
|
+
this.itemClicked = this.widgets[0];
|
|
2123
|
+
}
|
|
2124
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
|
|
2125
|
+
&& this.workspaces && this.workspaces.length > 0) {
|
|
2126
|
+
this.selectedRowIndex = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2127
|
+
this.ws = 0;
|
|
2128
|
+
document.getElementById("style-2").scrollTop = 0;
|
|
2129
|
+
this.itemClicked = this.workspaces[0];
|
|
2130
|
+
}
|
|
2131
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
|
|
2132
|
+
&& this.items && this.items.length > 0) {
|
|
2133
|
+
this.ws = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2134
|
+
this.selectedRowIndex = 0;
|
|
2135
|
+
document.getElementById("style-1").scrollTop = 0;
|
|
2136
|
+
this.itemClicked = this.items[0];
|
|
2137
|
+
}
|
|
2138
|
+
//From Goal/Sprint
|
|
2139
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint)
|
|
2140
|
+
&& this.userStoryList && this.userStoryList.length > 0) {
|
|
2141
|
+
this.selectedRowIndex = this.wd = this.ws = this.t = this.rs = this.selectedEmployeeIndex = this.goalIndex = null;
|
|
2142
|
+
this.users = 0;
|
|
2143
|
+
document.getElementById("style-5").scrollTop = 0;
|
|
2144
|
+
this.itemClicked = this.userStoryList[0];
|
|
2145
|
+
}
|
|
2146
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint)
|
|
2147
|
+
&& this.employeeList && this.employeeList.length > 0) {
|
|
2148
|
+
this.selectedRowIndex = this.wd = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2149
|
+
this.selectedEmployeeIndex = 0;
|
|
2150
|
+
document.getElementById("style-4").scrollTop = 0;
|
|
2151
|
+
this.itemClicked = this.employeeList[0];
|
|
2152
|
+
}
|
|
2153
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint)
|
|
2154
|
+
&& this.widgets && this.widgets.length > 0) {
|
|
2155
|
+
this.selectedRowIndex = this.selectedEmployeeIndex = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2156
|
+
this.wd = 0;
|
|
2157
|
+
document.getElementById("style-3").scrollTop = 0;
|
|
2158
|
+
this.itemClicked = this.widgets[0];
|
|
2159
|
+
}
|
|
2160
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint)
|
|
2161
|
+
&& this.workspaces && this.workspaces.length > 0) {
|
|
2162
|
+
this.selectedRowIndex = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2163
|
+
this.ws = 0;
|
|
2164
|
+
document.getElementById("style-2").scrollTop = 0;
|
|
2165
|
+
this.itemClicked = this.workspaces[0];
|
|
2166
|
+
}
|
|
2167
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint)
|
|
2168
|
+
&& this.items && this.items.length > 0) {
|
|
2169
|
+
this.ws = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2170
|
+
this.selectedRowIndex = 0;
|
|
2171
|
+
document.getElementById("style-1").scrollTop = 0;
|
|
2172
|
+
this.itemClicked = this.items[0];
|
|
2173
|
+
}
|
|
2174
|
+
//From recent searches
|
|
2175
|
+
else if (this.itemClicked.recentSearch
|
|
2176
|
+
&& this.goalSearchList && this.goalSearchList.length > 0) {
|
|
2177
|
+
this.selectedRowIndex = this.wd = this.ws = this.t = this.rs = this.selectedEmployeeIndex = this.users = null;
|
|
2178
|
+
this.goalIndex = 0;
|
|
2179
|
+
document.getElementById("style-6").scrollTop = 0;
|
|
2180
|
+
this.itemClicked = this.goalSearchList[0];
|
|
2181
|
+
}
|
|
2182
|
+
else if (this.itemClicked.recentSearch
|
|
2183
|
+
&& this.userStoryList && this.userStoryList.length > 0) {
|
|
2184
|
+
this.selectedRowIndex = this.wd = this.ws = this.t = this.rs = this.selectedEmployeeIndex = this.goalIndex = null;
|
|
2185
|
+
this.users = 0;
|
|
2186
|
+
document.getElementById("style-5").scrollTop = 0;
|
|
2187
|
+
this.itemClicked = this.userStoryList[0];
|
|
2188
|
+
}
|
|
2189
|
+
else if (this.itemClicked.recentSearch
|
|
2190
|
+
&& this.employeeList && this.employeeList.length > 0) {
|
|
2191
|
+
this.selectedRowIndex = this.wd = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2192
|
+
this.selectedEmployeeIndex = 0;
|
|
2193
|
+
document.getElementById("style-4").scrollTop = 0;
|
|
2194
|
+
this.itemClicked = this.employeeList[0];
|
|
2195
|
+
}
|
|
2196
|
+
else if (this.itemClicked.recentSearch
|
|
2197
|
+
&& this.widgets && this.widgets.length > 0) {
|
|
2198
|
+
this.selectedRowIndex = this.selectedEmployeeIndex = this.ws = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2199
|
+
this.wd = 0;
|
|
2200
|
+
document.getElementById("style-3").scrollTop = 0;
|
|
2201
|
+
this.itemClicked = this.widgets[0];
|
|
2202
|
+
}
|
|
2203
|
+
else if (this.itemClicked.recentSearch
|
|
2204
|
+
&& this.workspaces && this.workspaces.length > 0) {
|
|
2205
|
+
this.selectedRowIndex = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2206
|
+
this.ws = 0;
|
|
2207
|
+
document.getElementById("style-2").scrollTop = 0;
|
|
2208
|
+
this.itemClicked = this.workspaces[0];
|
|
2209
|
+
}
|
|
2210
|
+
else if (this.itemClicked.recentSearch
|
|
2211
|
+
&& this.items && this.items.length > 0) {
|
|
2212
|
+
this.ws = this.selectedEmployeeIndex = this.wd = this.t = this.rs = this.users = this.goalIndex = null;
|
|
2213
|
+
this.selectedRowIndex = 0;
|
|
2214
|
+
document.getElementById("style-1").scrollTop = 0;
|
|
2215
|
+
this.itemClicked = this.items[0];
|
|
2216
|
+
}
|
|
2217
|
+
}
|
|
2218
|
+
arrowRightEventForSearchByText() {
|
|
2219
|
+
if (this.itemClicked.itemType == SearchTaskType.Project && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
2220
|
+
this.projectIndex = this.goalIndex = this.selectedEmployeeIndex = null;
|
|
2221
|
+
this.users = 0;
|
|
2222
|
+
document.getElementById("style-5").scrollTop = 0;
|
|
2223
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
2224
|
+
}
|
|
2225
|
+
else if (this.itemClicked.itemType == SearchTaskType.Project && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
2226
|
+
this.projectIndex = this.users = this.selectedEmployeeIndex = null;
|
|
2227
|
+
this.goalIndex = 0;
|
|
2228
|
+
document.getElementById("style-6").scrollTop = 0;
|
|
2229
|
+
this.itemClicked = this.goalSearchList[0];
|
|
2230
|
+
}
|
|
2231
|
+
else if (this.itemClicked.itemType == SearchTaskType.Project && this.employeeList && this.employeeList.length > 0) {
|
|
2232
|
+
this.projectIndex = this.users = this.goalIndex = null;
|
|
2233
|
+
this.selectedEmployeeIndex = 0;
|
|
2234
|
+
document.getElementById("style-4").scrollTop = 0;
|
|
2235
|
+
this.itemClicked = this.employeeList[0];
|
|
2236
|
+
}
|
|
2237
|
+
else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
2238
|
+
this.projectIndex = this.users = this.selectedEmployeeIndex = null;
|
|
2239
|
+
this.goalIndex = 0;
|
|
2240
|
+
document.getElementById("style-6").scrollTop = 0;
|
|
2241
|
+
this.itemClicked = this.goalSearchList[0];
|
|
2242
|
+
}
|
|
2243
|
+
else if ((this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc) && this.employeeList && this.employeeList.length > 0) {
|
|
2244
|
+
this.projectIndex = this.users = this.goalIndex = null;
|
|
2245
|
+
this.selectedEmployeeIndex = 0;
|
|
2246
|
+
document.getElementById("style-4").scrollTop = 0;
|
|
2247
|
+
this.itemClicked = this.employeeList[0];
|
|
2248
|
+
this.itemClicked = this.goalSearchList[0];
|
|
2249
|
+
}
|
|
2250
|
+
else if ((this.itemClicked.itemType == SearchTaskType.goal || this.itemClicked.itemType == SearchTaskType.sprint) && this.employeeList && this.employeeList.length > 0) {
|
|
2251
|
+
this.projectIndex = this.users = this.goalIndex = null;
|
|
2252
|
+
this.selectedEmployeeIndex = 0;
|
|
2253
|
+
this.itemClicked = this.employeeList[0];
|
|
2254
|
+
}
|
|
2255
|
+
}
|
|
2256
|
+
arrowRightEvent() {
|
|
2257
|
+
// if (
|
|
2258
|
+
// this.searchText == undefined ||
|
|
2259
|
+
// this.searchText == null ||
|
|
2260
|
+
// this.searchText === ""
|
|
2261
|
+
// ) {
|
|
2262
|
+
// return;
|
|
2263
|
+
// }
|
|
2264
|
+
if (this.searchByText && this.searchText) {
|
|
2265
|
+
this.arrowRightEventForSearchByText();
|
|
2266
|
+
}
|
|
2267
|
+
else if (this.itemClicked.recentSearch) {
|
|
2268
|
+
return;
|
|
2269
|
+
}
|
|
2270
|
+
//From menus
|
|
2271
|
+
else if (this.itemClicked.menu && this.workspaces && this.workspaces.length > 0) {
|
|
2272
|
+
this.t = null;
|
|
2273
|
+
document.getElementById("style-2").scrollTop = 0;
|
|
2274
|
+
this.wd = this.selectedRowIndex = this.selectedEmployeeIndex = this.rs = this.users = this.goalIndex = null;
|
|
2275
|
+
this.ws = 0;
|
|
2276
|
+
this.itemClicked = this.workspaces[0];
|
|
2277
|
+
}
|
|
2278
|
+
else if (this.itemClicked.menu && this.widgets && this.widgets.length > 0) {
|
|
2279
|
+
this.wd = 0;
|
|
2280
|
+
document.getElementById("style-3").scrollTop = 0;
|
|
2281
|
+
this.ws = this.rs = this.selectedRowIndex = this.selectedEmployeeIndex = this.t = this.users = this.goalIndex = null;
|
|
2282
|
+
this.itemClicked = this.widgets[0];
|
|
2283
|
+
}
|
|
2284
|
+
else if (this.itemClicked.menu && this.employeeList && this.employeeList.length > 0) {
|
|
2285
|
+
this.selectedEmployeeIndex = 0;
|
|
2286
|
+
this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.users = this.goalIndex = null;
|
|
2287
|
+
this.itemClicked = this.employeeList[0];
|
|
2288
|
+
}
|
|
2289
|
+
else if (this.itemClicked.menu && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
2290
|
+
this.users = 0;
|
|
2291
|
+
this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.goalIndex = null;
|
|
2292
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
2293
|
+
}
|
|
2294
|
+
else if (this.itemClicked.menu && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
2295
|
+
this.goalIndex = 0;
|
|
2296
|
+
this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.users = null;
|
|
2297
|
+
this.itemClicked = this.goalSearchList[0];
|
|
2298
|
+
}
|
|
2299
|
+
else if (this.itemClicked.menu && this.recentSearches && this.recentSearches.length > 0) {
|
|
2300
|
+
this.rs = 0;
|
|
2301
|
+
this.ws = this.wd = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
|
|
2302
|
+
this.itemClicked = this.recentSearches[0];
|
|
2303
|
+
}
|
|
2304
|
+
//From workspaces
|
|
2305
|
+
else if (this.itemClicked.workspaceId && this.widgets && this.widgets.length > 0) {
|
|
2306
|
+
this.wd = 0;
|
|
2307
|
+
document.getElementById("style-3").scrollTop = 0;
|
|
2308
|
+
this.ws = this.rs = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
|
|
2309
|
+
this.itemClicked = this.widgets[0];
|
|
2310
|
+
}
|
|
2311
|
+
else if (this.itemClicked.workspaceId && this.employeeList && this.employeeList.length > 0) {
|
|
2312
|
+
this.selectedEmployeeIndex = 0;
|
|
2313
|
+
this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.users = this.goalIndex = null;
|
|
2314
|
+
this.itemClicked = this.employeeList[0];
|
|
2315
|
+
}
|
|
2316
|
+
else if (this.itemClicked.workspaceId && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
2317
|
+
this.users = 0;
|
|
2318
|
+
this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.goalIndex = null;
|
|
2319
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
2320
|
+
}
|
|
2321
|
+
else if (this.itemClicked.workspaceId && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
2322
|
+
this.goalIndex = 0;
|
|
2323
|
+
this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.users = null;
|
|
2324
|
+
this.itemClicked = this.goalSearchList[0];
|
|
2325
|
+
}
|
|
2326
|
+
else if (this.itemClicked.workspaceId && this.recentSearches && this.recentSearches.length > 0) {
|
|
2327
|
+
this.rs = 0;
|
|
2328
|
+
this.ws = this.wd = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
|
|
2329
|
+
this.itemClicked = this.recentSearches[0];
|
|
2330
|
+
}
|
|
2331
|
+
//From widgets
|
|
2332
|
+
else if (this.itemClicked.widgetId && this.employeeList && this.employeeList.length > 0) {
|
|
2333
|
+
this.selectedEmployeeIndex = 0;
|
|
2334
|
+
this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.users = this.goalIndex = null;
|
|
2335
|
+
this.itemClicked = this.employeeList[0];
|
|
2336
|
+
}
|
|
2337
|
+
else if (this.itemClicked.widgetId && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
2338
|
+
this.users = 0;
|
|
2339
|
+
this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.goalIndex = null;
|
|
2340
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
2341
|
+
}
|
|
2342
|
+
else if (this.itemClicked.widgetId && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
2343
|
+
this.goalIndex = 0;
|
|
2344
|
+
this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.users = null;
|
|
2345
|
+
this.itemClicked = this.goalSearchList[0];
|
|
2346
|
+
}
|
|
2347
|
+
else if (this.itemClicked.widgetId && this.recentSearches && this.recentSearches.length > 0) {
|
|
2348
|
+
this.rs = 0;
|
|
2349
|
+
this.ws = this.wd = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
|
|
2350
|
+
this.itemClicked = this.recentSearches[0];
|
|
2351
|
+
}
|
|
2352
|
+
//From Employees
|
|
2353
|
+
else if (this.itemClicked.employeeNumber && this.userStorySearchList && this.userStorySearchList.length > 0) {
|
|
2354
|
+
this.users = 0;
|
|
2355
|
+
this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.goalIndex = null;
|
|
2356
|
+
this.itemClicked = this.userStorySearchList[0];
|
|
2357
|
+
}
|
|
2358
|
+
else if (this.itemClicked.employeeNumber && this.goalSearchList && this.goalSearchList.length > 0) {
|
|
2359
|
+
this.goalIndex = 0;
|
|
2360
|
+
this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.users = null;
|
|
2361
|
+
this.itemClicked = this.goalSearchList[0];
|
|
2362
|
+
}
|
|
2363
|
+
else if (this.itemClicked.employeeNumber && this.recentSearches && this.recentSearches.length > 0) {
|
|
2364
|
+
this.rs = 0;
|
|
2365
|
+
this.ws = this.wd = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
|
|
2366
|
+
this.itemClicked = this.recentSearches[0];
|
|
2367
|
+
}
|
|
2368
|
+
//From WI/Bug
|
|
2369
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
|
|
2370
|
+
&& this.goalSearchList && this.goalSearchList.length > 0) {
|
|
2371
|
+
this.goalIndex = 0;
|
|
2372
|
+
this.ws = this.rs = this.selectedRowIndex = this.wd = this.t = this.selectedEmployeeIndex = this.users = null;
|
|
2373
|
+
this.itemClicked = this.goalSearchList[0];
|
|
2374
|
+
}
|
|
2375
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.workItemORBug || this.itemClicked.itemType == SearchTaskType.adhoc)
|
|
2376
|
+
&& this.recentSearches && this.recentSearches.length > 0) {
|
|
2377
|
+
this.rs = 0;
|
|
2378
|
+
this.ws = this.wd = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
|
|
2379
|
+
this.itemClicked = this.recentSearches[0];
|
|
2380
|
+
}
|
|
2381
|
+
//From Goal/Sprint
|
|
2382
|
+
else if (this.itemClicked.itemType && (this.itemClicked.itemType == SearchTaskType.sprint || this.itemClicked.itemType == SearchTaskType.goal)
|
|
2383
|
+
&& this.recentSearches && this.recentSearches.length > 0) {
|
|
2384
|
+
this.rs = 0;
|
|
2385
|
+
this.ws = this.wd = this.selectedEmployeeIndex = this.selectedRowIndex = this.t = this.users = this.goalIndex = null;
|
|
2386
|
+
this.itemClicked = this.recentSearches[0];
|
|
2387
|
+
}
|
|
2388
|
+
}
|
|
2389
|
+
openWorkspaceForm() {
|
|
2390
|
+
this.addWorkSpacePopOver.open();
|
|
2391
|
+
this.display = true;
|
|
2392
|
+
this.isOpened.emit(this.display);
|
|
2393
|
+
this.getAllRoles();
|
|
2394
|
+
}
|
|
2395
|
+
getAllRoles() {
|
|
2396
|
+
this.commonService.GetallRoles().subscribe((responseData) => {
|
|
2397
|
+
this.rolesDropDown = responseData.data;
|
|
2398
|
+
this.rolesDropDown.forEach((p) => {
|
|
2399
|
+
const id = p.roleId.toLowerCase();
|
|
2400
|
+
p.roleId = id;
|
|
2401
|
+
});
|
|
2402
|
+
});
|
|
2403
|
+
}
|
|
2404
|
+
ngOnDestroy() {
|
|
2405
|
+
this.ngDestroyed$.next();
|
|
2406
|
+
this.ngDestroyed$.complete();
|
|
2407
|
+
}
|
|
2408
|
+
compareSelectedRolesFn() { }
|
|
2409
|
+
compareEditSelectedRolesFn() { }
|
|
2410
|
+
compareDeleteSelectedRolesFn() { }
|
|
2411
|
+
upsertWorkspace() { }
|
|
2412
|
+
toggleAllRolesSelected() { }
|
|
2413
|
+
toggleEditAllRolesSelected() { }
|
|
2414
|
+
toggleDeleteAllRolesSelected() { }
|
|
2415
|
+
closeAddWorkspaceDialog() { }
|
|
2416
|
+
}
|
|
2417
|
+
MenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: MenuComponent, deps: [{ token: i1.Store }, { token: i2.CookieService }, { token: i3.Router }, { token: i4.ToastrService }, { token: i5.TranslateService }, { token: i6.AuthenticationService }, { token: i3.ActivatedRoute }, { token: i7.MatDialog }, { token: i8.RecentSearchService }, { token: i9.Location }, { token: i10.ThemeService }, { token: i11.Actions }, { token: i0.ChangeDetectorRef }, { token: WINDOW }, { token: i12.GoogleAnalyticsService }, { token: i13.CommonService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2418
|
+
MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.1", type: MenuComponent, selector: "app-menu", inputs: { reloadAll: ["reload", "reloadAll"] }, outputs: { isOpened: "isOpened", openNewDashboard: "openNewDashboard" }, host: { listeners: { "document:keydown.control.q": "keyOpenEvent()", "document:keydown.control.m": "keyCloseEvent()", "document:keydown.control.b": "remoteSearchByText()", "document:keydown.control.y": "remoteSearchById()" } }, viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }, { propertyName: "element", first: true, predicate: ["element"], descendants: true }, { propertyName: "workspaceElement", first: true, predicate: ["workspaceElement"], descendants: true }, { propertyName: "menuElement", first: true, predicate: ["menuElement"], descendants: true }, { propertyName: "addWorkSpacePopOver", first: true, predicate: ["addWorkspace"], descendants: true }, { propertyName: "allSelected", first: true, predicate: ["allSelected"], descendants: true }, { propertyName: "allEditSelected", first: true, predicate: ["allEditSelected"], descendants: true }, { propertyName: "allDeleteSelected", first: true, predicate: ["allDeleteSelected"], descendants: true }, { propertyName: "infoPopOver", first: true, predicate: ["infoPopOver"], descendants: true }, { propertyName: "openMenuPopOver", predicate: ["openMenuPopUp"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<button type=\"submit\" class=\"visibles\" mat-icon-button [matMenuTriggerFor]=\"menus\" fxHide.gt-xs fxShow>\r\n <mat-icon class=\"newMenu\">menu</mat-icon>\r\n</button>\r\n<div fxFlex class=\"newLogo default-bg top-logo-bg newminilogo zoom-image-hover\" fxHide.gt-xs fxShow>\r\n <img src=\"{{companyMiniLogo}}\" alt=\"\" id=\"mini-logo-topbar\" style=\"width:30px; height:30px;\"\r\n (click)=\"getAllMenuItems()\" />\r\n</div>\r\n<div fxFlex class=\"newLogo top-logo-bg apps-button zoom-image-hover\" style=\"left: 0px;\" fxHide fxShow.gt-xs>\r\n <img src=\"{{companyMainLogo}}\" style=\"cursor: pointer;left: 20px;left: 20px;position: relative;\" id=\"main-logo-topbar\"\r\n class=\"img-height-main-logo-topbar\" (click)=\"getAllMenuItems()\" />\r\n</div>\r\n\r\n<!-- \r\n<mat-menu #menus=\"matMenu\" class=\"filter-panel\" (click)=\"$event.stopPropagation()\">\r\n <div *ngFor=\"let item of(menuItems$ | async)\">\r\n <div *ngIf=\"item.type === 'dropDown'\">\r\n <button mat-menu-item [matMenuTriggerFor]=\"levelTwoMenu\" (mouseover)=\"openLevel2Menu(item.state,item.sub)\">\r\n <mat-icon>{{ item.icon }}</mat-icon>{{ item.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n <div *ngIf=\"item.type == 'link'\">\r\n <button mat-menu-item routerLink=\"/{{ item.state }}\">\r\n <mat-icon>{{ item.icon }}</mat-icon>{{ item.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n\r\n<mat-menu #levelTwoMenu=\"matMenu\">\r\n <div *ngFor=\"let itemLvl2 of subLevels\">\r\n <div *ngIf=\"itemLvl2.type === 'dropDown'\">\r\n <button mat-menu-item [matMenuTriggerFor]=\"levelThreeMenu\"\r\n (mouseover)=\"openLevel3Menu(stateLvl1,itemLvl2.state,item.sub)\">\r\n {{ itemLvl2.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n <div *ngIf=\"itemLvl2.type == 'applicationlink'\">\r\n <button mat-menu-item routerLink=\"/{{ itemLvl2.state }}\">\r\n {{ itemLvl2.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n <div *ngIf=\"itemLvl2.type == 'link'\">\r\n <button mat-menu-item routerLink=\"/{{stateLvl1}}/{{ itemLvl2.state }}\">\r\n {{ itemLvl2.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n\r\n<mat-menu #levelThreeMenu=\"matMenu\">\r\n <div *ngFor=\"let itemLvl3 of subLevelsForLevel2\">\r\n <button mat-menu-item routerLink=\"/{{ level3Link1 }}/{{ level3Link2 }}/{{itemLvl3.state}}\">\r\n {{ itemLvl3.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n</mat-menu> -->\r\n\r\n<mat-menu #menus=\"matMenu\" yPosition=\"below\" class=\"filter-panel\" (click)=\"$event.stopPropagation()\"\r\n style=\"height:auto\">\r\n <div *ngFor=\"let item of items\">\r\n <div *ngIf=\"item.type == 'link' || item.type == 'applicationlink'\">\r\n <button mat-menu-item routerLink=\"/{{ item.state }}\" (click)=\"selectMenu(item,$event)\"\r\n routerLinkActive=\"item-active\">\r\n <mat-icon>{{ item.icon }}</mat-icon>{{ item.menu | softLabelsPipe : softLabels}}\r\n </button>\r\n </div>\r\n </div>\r\n</mat-menu>\r\n\r\n\r\n<div style=\"position: relative;\r\nleft: 90%\" class=\"store-icom mat-icon-button\" *ngIf=\"canAccess_feature_DragApps\"\r\n [ngClass]=\"this.routes.url.includes('/app-store/widgets') ? 'icon_active_class' : ''\">\r\n <fa-icon icon=\"store\" style=\"font-size: 20px !important;\" matTooltipClass=\"tooltipClass-mat\"\r\n matTooltip=\"{{ 'APP.APPSTORE' | translate}}\" (click)=\"openApps()\"\r\n class=\"mat-color-accent cursor-pointer theme-navbar-icon-color\"></fa-icon>\r\n</div>\r\n\r\n<div class=\"SearchBox dropdown\" style=\"position: absolute !important;\">\r\n <span class=\"mat-color-accent input-group-addon\" *ngIf=\"searchByText\">@ </span>\r\n <span class=\"mat-color-accent input-group-addon\" *ngIf=\"searchById\"># </span>\r\n <input type=\"text\" class=\"SearchBox-input dropbtn\" placeholder=\"{{ 'APP.STARTHEREORCLICKCONTROL+Q' | translate}}\"\r\n [class.hide-placeholder]=\"searchByText || searchById\" autocomplete=\"off\" #element [(ngModel)]=\"searchText\"\r\n (input)=\"SearchItem($event)\" (click)=\"SearchItem($event)\" (focus)=\"onFocus()\" (blur)=\"Set();\"\r\n (keydown.enter)=\"navigate($event, itemClicked)\" (keydown.arrowdown)=\"arrowDownEvent()\"\r\n (keydown.arrowup)=\"arrowUpEvent()\" (keydown.arrowleft)=\"arrowLeftEvent()\" (keydown.arrowright)=\"arrowRightEvent()\">\r\n\r\n <button class=\"SearchBox-button\">\r\n <span class=\"close_icon_search\">\r\n <span *ngIf=\"!searchText\"></span>\r\n <mat-icon *ngIf=\"searchText\" class=\"icon-button mr-05\" aria-hidden=\"false\" (click)=\"closeSearch($event)\"\r\n style=\"cursor:pointer\">\r\n close</mat-icon>\r\n </span>\r\n <mat-icon class=\"SearchBox-icon icon-color mt-lg-n2 mr-05 info-class\" [satPopoverAnchorFor]=\"p\"\r\n #infoPopOver=\"satPopoverAnchor\" color=\"primary\" (click)=\"openInfo(infoPopOver)\">info</mat-icon>\r\n <mat-icon class=\"SearchBox-icon icon-color mt-lg-n2\" color=\"primary\">search</mat-icon>\r\n </button>\r\n <div class=\"dropdown-content\" [ngClass]=\"{'d-block' : display, 'd-none' : !display}\">\r\n <mat-progress-bar color=\"primary\" mode=\"indeterminate\"\r\n *ngIf=\"loadingSearchMenuData || recentSearchesfetchInProgress || widgetsfetchInProgress\">\r\n </mat-progress-bar>\r\n <div class=\"row rowselect\">\r\n <div class=\"column columnselect-next pl-05\" *ngIf=\"items && (items.length>0) && !(searchById || searchByText)\">\r\n <div class=\"in-header\">{{ 'SHELL.APPLICATIONS' | translate}}</div>\r\n <div id=\"style-1\" style=\"background-color: white !important; height: 445px !important; overflow: auto;\">\r\n <ng-container *ngIf=\"items && items.length>0\">\r\n <div *ngFor=\"let item of items; let i = index;\"\r\n [style.background-color]=\"selectedRowIndex == i ? themeBaseColor : 'white'\">\r\n <div *ngIf=\"item.type == 'link' || item.type == 'applicationlink'\">\r\n <button mat-menu-item routerLink=\"/{{ item.state }}\"\r\n [ngClass]=\"selectedRowIndex == i ? 'color-text' : 'color-text1'\"\r\n (mousedown)=\"selectAdimnTool(item.state, $event, item)\" routerLinkActive=\"item-active\"\r\n [routerLinkActiveOptions]=\"{exact:\r\n true}\" matTooltipClass=\"tooltipClass-mat\"\r\n matTooltip=\"{{ translateapplicationname(item.menu | softLabelsPipe : softLabels)}}\">\r\n <mat-icon class=\"icon-color\" [ngClass]=\"selectedRowIndex == i ? 'color-text' : 'color-text1'\">\r\n {{ item.icon }}</mat-icon><span\r\n [innerHTML]=\"translateapplicationname(item.menu) | softLabelsPipe : softLabels | highLightText : searchText\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column pl-05\" *ngIf=\"!(searchById || searchByText)\">\r\n\r\n <div class=\"columnselect-next ml-0\" *ngIf=\"workspaces && (workspaces.length>0)\">\r\n <div class=\"in-header\">{{ 'SHELL.DASHBOARDS' | translate}}\r\n <fa-icon icon=\"plus-square\"\r\n *ngIf=\"canAccess_feature_AddDashboard\" matTooltip=\"{{ 'APP.ADDDASHBOARD' | translate}}\"\r\n (click)=\"initializeWorkspaceForm();openWorkspaceForm();\" class=\"mat-color-accent cursor-pointer\"\r\n [satPopoverAnchorFor]=\"addWorkspace\">\r\n </fa-icon> \r\n </div>\r\n <div id=\"style-2\" style=\"background-color: white !important; height: 445px !important; overflow: auto;\">\r\n <ng-container *ngIf=\"workspaces && workspaces.length>0\">\r\n <div *ngFor=\"let wc of workspaces; let i = index\"\r\n [style.background-color]=\"ws == i ? themeBaseColor : 'white'\" class=\"scroll\" #workspaceElement>\r\n <button mat-menu-item (mousedown)=\"selectMenu(wc,$event)\"\r\n [ngClass]=\"ws == i ? 'color-text' : 'color-text1'\" (click)=\"navigateToUrl(wc.workspaceId)\"\r\n routerLink=\"/dashboard-management/dashboard/{{ wc.workspaceId }}\" routerLinkActive=\"item-active\"\r\n matTooltipClass=\"tooltipClass-mat\" matTooltip=\"{{wc.workspaceName}}\">\r\n <span [innerHTML]=\"wc.workspaceName | highLightText : searchText \"></span>\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column columnselect-apps ml-0\" *ngIf=\"widgets && widgets.length>0 && !(searchById || searchByText)\">\r\n <div class=\"in-header\">{{ 'SHELL.FAVOURITEAPPS' | translate}}</div>\r\n <div style=\"background-color: white !important; height: 445px !important; overflow: auto;\" id=\"style-3\">\r\n <div *ngFor=\"let widget of widgets; let i = index\"\r\n [style.background-color]=\"wd == i ? themeBaseColor : 'white'\">\r\n <button mat-menu-item routerLinkActive=\"item-active\" [routerLinkActiveOptions]=\"{exact:\r\n true}\" routerLink=\"/dashboard-management/widgets/{{ widget.widgetId }}\"\r\n [ngClass]=\"wd == i ? 'color-text' : 'color-text1'\" (mousedown)=\"OnSelect(widget,$event)\"\r\n matTooltipClass=\"tooltipClass-mat\" matTooltip=\"{{widget.widgetName | softLabelsPipe : softLabels}}\">\r\n <span [innerHTML]=\"widget.widgetName | softLabelsPipe : softLabels | highLightText : searchText\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"columnselect-next ml-0\" *ngIf=\"projectList && projectList.length>0 && searchText && searchByText\">\r\n <div class=\"in-header\">Projects</div>\r\n <div class=\"scroll\" id=\"style-7\"\r\n style=\"background-color: white !important; height: 445px !important; overflow: auto;\">\r\n <div *ngFor=\"let project of projectList; let i = index\"\r\n [style.background-color]=\"projectIndex == i ? themeBaseColor : 'white'\">\r\n <button mat-menu-item routerLinkActive=\"item-active\" [routerLinkActiveOptions]=\"{exact:\r\n true}\" [ngClass]=\"projectIndex == i ? 'color-text' : 'color-text1'\"\r\n (mousedown)=\"onProjectSelect(project,$event)\" matTooltipClass=\"tooltipClass-mat\"\r\n matTooltip=\"{{project.itemName | softLabelsPipe : softLabels}}\">\r\n <span [innerHTML]=\"project.itemName | softLabelsPipe : softLabels | highLightText : searchText\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"columnselect-next ml-0\"\r\n *ngIf=\"userStorySearchList && userStorySearchList.length>0 && searchText && searchByText\">\r\n <div class=\"in-header\" *ngIf=\"isEnableBugBoard\">{{ 'SHELL.WIBUG' | translate}}</div>\r\n <div class=\"in-header\" *ngIf=\"!isEnableBugBoard\">{{ 'SHELL.WI'| translate}}</div>\r\n <div class=\"scroll\" id=\"style-5\"\r\n style=\"background-color: white !important; height: 445px !important; overflow: auto;\">\r\n <div *ngFor=\"let userStory of userStorySearchList; let i = index\"\r\n [style.background-color]=\"users == i ? themeBaseColor : 'white'\">\r\n <button mat-menu-item routerLinkActive=\"item-active\" [routerLinkActiveOptions]=\"{exact:\r\n true}\" [ngClass]=\"users == i ? 'color-text' : 'color-text1'\" (mousedown)=\"OnUserStorySelect(userStory,$event)\"\r\n matTooltipClass=\"tooltipClass-mat\" matTooltip=\"{{userStory.itemName | softLabelsPipe : softLabels}}\">\r\n <span [innerHTML]=\"userStory.itemName | softLabelsPipe : softLabels | highLightText : searchText\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"columnselect-next ml-0\"\r\n *ngIf=\"goalSearchList && goalSearchList.length>0 && searchText && searchByText\">\r\n <div class=\"in-header\">{{ 'SHELL.GOALSPRINT' | translate }}</div>\r\n <div class=\"scroll\" id=\"style-6\"\r\n style=\"background-color: white !important; height: 445px !important; overflow: auto;\">\r\n <div *ngFor=\"let goal of goalSearchList; let i = index\"\r\n [style.background-color]=\"goalIndex == i ? themeBaseColor : 'white'\">\r\n <button mat-menu-item routerLinkActive=\"item-active\" [routerLinkActiveOptions]=\"{exact:\r\n true}\" [ngClass]=\"goalIndex == i ? 'color-text' : 'color-text1'\" (mousedown)=\"OnGoalSelect(goal,$event)\"\r\n matTooltipClass=\"tooltipClass-mat\" matTooltip=\"{{goal.itemName | softLabelsPipe : softLabels}}\">\r\n <span [innerHTML]=\"goal.itemName | softLabelsPipe : softLabels | highLightText : searchText\"></span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column columnselect-apps ml-0\"\r\n *ngIf=\"(employeeList && employeeList.length > 0) && searchText && searchByText\">\r\n <div class=\"in-header\">Employees</div>\r\n <div id=\"style-4\" style=\"background-color: white !important; height: 445px !important; overflow: auto;\">\r\n <div *ngFor=\"let employee of employeeList; let i = index\" style=\"background-color: white;\"\r\n [style.background-color]=\"selectedEmployeeIndex == i ? themeBaseColor : 'white'\" #workspaceElement>\r\n <button mat-menu-item (mousedown)=\"selectEmployee(employee,$event)\"\r\n [ngClass]=\"selectedEmployeeIndex == i ? 'color-text' : 'color-text1'\"\r\n routerLink=\"/dashboard/profile/{{ employee.itemId }}/overview\" routerLinkActive=\"item-active\"\r\n matTooltipClass=\"tooltipClass-mat\" matTooltip=\"{{employee.itemName}}\">\r\n <div fxLayout=\"row\">\r\n <app-avatar [name]=\"employee.itemName | removeSpecialCharacters\" fxLayoutAlign=\"start center\"\r\n matTooltip=\"{{ employee.itemName }}\" [src]=\"employee.profileImage | fetchSizedAndCachedImage: '20':''\"\r\n [isRound]=\"true\" size=\"20\" (click)=\"profilePage(employee.userId);$event.stopPropagation();\">\r\n </app-avatar> \r\n <div class=\"ml-05\">\r\n <span [innerHTML]=\"employee.itemName | highLightText : searchText\"></span>\r\n \r\n </div>\r\n </div>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"column columnselect-apps ml-0\"\r\n *ngIf=\"recentSearches && (recentSearches.length>0) && !(searchById || searchByText)\">\r\n <div class=\"in-header\">{{ 'SHELL.RECENTSEARCHS' | translate}}</div>\r\n <div style=\"background-color: white !important; height: 445px !important\">\r\n <div *ngFor=\"let search of recentSearches | slice:0:9 let i = index\"\r\n [style.background-color]=\"rs == i ? themeBaseColor : 'white'\">\r\n <button mat-menu-item [ngClass]=\"rs == i ? 'color-text' : 'color-text1'\"\r\n (mousedown)=\"searchText=search.recentSearch;SearchRecentItem(search,$event)\"\r\n matTooltipClass=\"tooltipClass-mat\" matTooltip=\"{{search.recentSearch | softLabelsPipe : softLabels}} \r\n ({{ convertToLocalTime(search.createdDateTime) | timeago }})\">\r\n <span [innerHTML]=\"search.recentSearch | softLabelsPipe : softLabels | highLightText : searchText\"></span>\r\n ({{ convertToLocalTime(search.createdDateTime) | timeago }})\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- <div class=\"text-center in-header \" *ngIf=\"!searchText && searchById\">\r\n Please enter unique id and click enter for navigating to corresping page\r\n </div>\r\n \r\n <div class=\"text-center in-header \" *ngIf=\"!searchText && searchByText\" >\r\n Please enter text to retreive data by filtering\r\n </div> -->\r\n \r\n\r\n <sat-popover backdropClass=\"backdrop-color\" hasBackdrop #addWorkspace verticalAlign=\"below\" horizontalAlign=\"end\"\r\n [interactiveClose]=\"false\">\r\n <mat-card class=\"filter-data p-0\">\r\n <mat-card-title class=\"text-center\">\r\n <div class=\"card-title-text mat-bg-primary p-05 mb-1\">\r\n {{ 'APP.ADDDASHBOARDTITLE' | translate }}\r\n </div>\r\n </mat-card-title>\r\n <mat-card-content>\r\n <form [formGroup]=\"workspaceForm\" novalidate (submit)=\"workspaceForm.valid && upsertWorkspace()\">\r\n <div class=\"card-content\">\r\n <mat-form-field class=\"full-width\">\r\n <input matInput placeholder=\"{{ 'HRMANAGAMENT.NAME' | translate}}*\" formControlName=\"workspaceName\" />\r\n <mat-error\r\n *ngIf=\"workspaceForm.get('workspaceName').hasError('required') && workspaceForm.get('workspaceName').touched \">\r\n {{ 'APP.DASHBOARDNAMEREQUIRED' | translate }}\r\n </mat-error>\r\n <mat-error *ngIf=\"workspaceForm.get('workspaceName').hasError('maxlength')\">\r\n {{ 'APP.DASHBOARDNAMELENGTHEXCEED' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field class=\"full-width\">\r\n <textarea matInput formControlName=\"description\" rows=\"2\"\r\n placeholder=\"{{ 'COMPANYSETTINGS.DESCRIPTION' | translate }}\"></textarea>\r\n <mat-error\r\n *ngIf=\"workspaceForm.get('description').hasError('maxlength') && workspaceForm.get('description').touched\">\r\n {{ 'APP.CUSTOMAPPDESCRIPTIONMAXLENGTHERROR' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field class=\"full-width\" (click)=\"$event.stopPropagation();\">\r\n <mat-select formControlName=\"selectedRoles\" [compareWith]=\"compareSelectedRolesFn\"\r\n placeholder=\"{{ 'WIDGETS.VIEWROLES' | translate }}\" multiple required>\r\n <mat-option #allSelected (click)=\"toggleAllRolesSelected()\" [value]=\"0\">\r\n {{ 'PERMISSIONMANAGEMENT.SELECTALL' | translate }}</mat-option>\r\n <mat-option [value]=\"roles.roleId\" *ngFor=\"let roles of rolesDropDown\" #allSelected\r\n (click)=\"toggleRolesPerOne(allSelected.value)\">\r\n {{ roles.roleName }}\r\n </mat-option>\r\n </mat-select>\r\n <mat-error\r\n *ngIf=\"workspaceForm.get('selectedRoles').hasError('required') && workspaceForm.get('selectedRoles').touched\">\r\n {{ 'APP.SELECTANYROLE' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n <mat-form-field class=\"full-width\">\r\n <mat-select formControlName=\"editRoleIds\" [compareWith]=\"compareEditSelectedRolesFn\"\r\n placeholder=\"{{ 'WIDGETS.EDITROLES' | translate }}\" multiple>\r\n <mat-option #allEditSelected (click)=\"toggleEditAllRolesSelected()\" [value]=\"0\">\r\n {{ 'PERMISSIONMANAGEMENT.SELECTALL' | translate }}</mat-option>\r\n <mat-option [value]=\"role.roleId\" *ngFor=\"let role of rolesDropDown\" #allEditSelected\r\n (click)=\"toggleEditRolesPerOne()\">\r\n {{ role.roleName }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field class=\"full-width\">\r\n <mat-select formControlName=\"deleteRoleIds\" [compareWith]=\"compareDeleteSelectedRolesFn\"\r\n placeholder=\"{{ 'WIDGETS.DELETEROLES' | translate }}\" multiple>\r\n <mat-option #allDeleteSelected (click)=\"toggleDeleteAllRolesSelected()\" [value]=\"0\">\r\n {{ 'PERMISSIONMANAGEMENT.SELECTALL' | translate }}</mat-option>\r\n <mat-option [value]=\"role.roleId\" *ngFor=\"let role of rolesDropDown\" #allDeleteSelected\r\n (click)=\"toggleDeleteRolesPerOne()\">\r\n {{ role.roleName }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"text-center\">\r\n <button class=\"mr-1\" mat-button mat-raised-button color=\"primary\" type=\"button\" (click)=\"upsertWorkspace()\"\r\n [disabled]=\"!workspaceForm.valid\">\r\n <mat-progress-bar color=\"primary\" mode=\"indeterminate\" *ngIf=\"dashboardUpdateInProgress\">\r\n </mat-progress-bar>\r\n <fa-icon class=\"mr-05\" icon=\"plus\"></fa-icon> {{ 'SAVE' | translate }}\r\n </button>\r\n <button mat-button mat-raised-button type=\"button\" (click)=\"closeAddWorkspaceDialog()\">\r\n <fa-icon class=\"mr-05\" icon=\"times\"></fa-icon> {{ 'CANCEL' | translate }}\r\n </button>\r\n </div>\r\n </form>\r\n </mat-card-content>\r\n </mat-card>\r\n </sat-popover>\r\n\r\n\r\n <sat-popover #p hasBackdrop [interactiveClose]=\"true\" verticalAlign=\"above\">\r\n <div class=\"tooltip-wrapper\">\r\n <table>\r\n <tr>\r\n <td>Ctrl + Q: </td>\r\n <td> </td>\r\n <td> {{ 'SHELL.TOOPENSEARCHMENU' | translate}}</td>\r\n </tr>\r\n <tr>\r\n <td>Ctrl + B: </td>\r\n <td> </td>\r\n <td> {{ 'SHELL.TOOPENGOALSANDUSERS' | translate}}</td>\r\n </tr>\r\n <tr>\r\n <td>Ctrl + Y: </td>\r\n <td> </td>\r\n <td> {{ 'SHELL.TOSEARCHBYID' | translate}}</td>\r\n </tr>\r\n <tr>\r\n <td>Ctrl + M: </td>\r\n <td> </td>\r\n <td> {{ 'SHELL.TOCLOSEMENU' | translate}}</td>\r\n </tr>\r\n </table>\r\n </div>\r\n </sat-popover>\r\n\r\n <mat-spinner *ngIf=\"searchByTextLoading && display\" class=\"spinner-class\" [diameter]=\"100\"></mat-spinner>", components: [{ type: i14.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i16.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i16.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i17.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "listItem", "rotate", "fixedWidth", "transform"] }, { type: i18.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "mode", "value", "bufferValue"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i19.SnovasysAvatarComponent, selector: "app-avatar", inputs: ["avatarClass", "name", "src", "isRound", "size"] }, { type: i20.SatPopover, selector: "sat-popover", inputs: ["backdropClass", "horizontalAlign", "xAlign", "verticalAlign", "yAlign", "forceAlignment", "lockAlignment", "autoFocus", "restoreFocus", "scrollStrategy", "hasBackdrop", "interactiveClose", "openTransition", "closeTransition"], outputs: ["opened", "closed", "afterOpen", "afterClose", "backdropClicked", "overlayKeydown"] }, { type: i21.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i22.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i23.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i24.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i25.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i26.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { type: i16.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["matMenuTriggerRestoreFocus", "mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { type: i27.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "routerLinkActive"], exportAs: ["routerLinkActive"] }, { type: i3.RouterLink, selector: ":not(a):not(area)[routerLink]", inputs: ["routerLink", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i26.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i28.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i29.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i29.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i29.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i20.SatPopoverAnchor, selector: "[satPopoverAnchorFor]", inputs: ["satPopoverAnchorFor"], outputs: ["popoverOpened", "popoverClosed"], exportAs: ["satPopoverAnchor"] }, { type: i27.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i27.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i21.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i21.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i29.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i29.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i29.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i30.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i29.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i22.MatError, selector: "mat-error", inputs: ["id"] }, { type: i29.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }], pipes: { "softLabelsPipe": i31.SoftLabelPipe, "translate": i5.TranslatePipe, "highLightText": i32.HighLightTextPipe, "removeSpecialCharacters": i33.RemoveSpecialCharactersPipe, "fetchSizedAndCachedImage": i34.FetchSizedAndCachedImagePipe, "slice": i9.SlicePipe, "timeago": i35.TimeagoPipe } });
|
|
2419
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: MenuComponent, decorators: [{
|
|
2420
|
+
type: Component,
|
|
2421
|
+
args: [{
|
|
2422
|
+
selector: "app-menu",
|
|
2423
|
+
templateUrl: "./menu.component.html"
|
|
2424
|
+
}]
|
|
2425
|
+
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.CookieService }, { type: i3.Router }, { type: i4.ToastrService }, { type: i5.TranslateService }, { type: i6.AuthenticationService }, { type: i3.ActivatedRoute }, { type: i7.MatDialog }, { type: i8.RecentSearchService }, { type: i9.Location }, { type: i10.ThemeService }, { type: i11.Actions }, { type: i0.ChangeDetectorRef }, { type: Window, decorators: [{
|
|
2426
|
+
type: Inject,
|
|
2427
|
+
args: [WINDOW]
|
|
2428
|
+
}] }, { type: i12.GoogleAnalyticsService }, { type: i13.CommonService }]; }, propDecorators: { openMenuPopOver: [{
|
|
2429
|
+
type: ViewChildren,
|
|
2430
|
+
args: ["openMenuPopUp"]
|
|
2431
|
+
}], menuTrigger: [{
|
|
2432
|
+
type: ViewChild,
|
|
2433
|
+
args: ["menuTrigger"]
|
|
2434
|
+
}], element: [{
|
|
2435
|
+
type: ViewChild,
|
|
2436
|
+
args: ["element"]
|
|
2437
|
+
}], workspaceElement: [{
|
|
2438
|
+
type: ViewChild,
|
|
2439
|
+
args: ["workspaceElement"]
|
|
2440
|
+
}], menuElement: [{
|
|
2441
|
+
type: ViewChild,
|
|
2442
|
+
args: ["menuElement"]
|
|
2443
|
+
}], addWorkSpacePopOver: [{
|
|
2444
|
+
type: ViewChild,
|
|
2445
|
+
args: ["addWorkspace"]
|
|
2446
|
+
}], allSelected: [{
|
|
2447
|
+
type: ViewChild,
|
|
2448
|
+
args: ["allSelected"]
|
|
2449
|
+
}], allEditSelected: [{
|
|
2450
|
+
type: ViewChild,
|
|
2451
|
+
args: ["allEditSelected"]
|
|
2452
|
+
}], allDeleteSelected: [{
|
|
2453
|
+
type: ViewChild,
|
|
2454
|
+
args: ["allDeleteSelected"]
|
|
2455
|
+
}], infoPopOver: [{
|
|
2456
|
+
type: ViewChild,
|
|
2457
|
+
args: ['infoPopOver']
|
|
2458
|
+
}], isOpened: [{
|
|
2459
|
+
type: Output
|
|
2460
|
+
}], openNewDashboard: [{
|
|
2461
|
+
type: Output
|
|
2462
|
+
}], reloadAll: [{
|
|
2463
|
+
type: Input,
|
|
2464
|
+
args: ["reload"]
|
|
2465
|
+
}], keyOpenEvent: [{
|
|
2466
|
+
type: HostListener,
|
|
2467
|
+
args: ['document:keydown.control.q', []]
|
|
2468
|
+
}], keyCloseEvent: [{
|
|
2469
|
+
type: HostListener,
|
|
2470
|
+
args: ['document:keydown.control.m', []]
|
|
2471
|
+
}], remoteSearchByText: [{
|
|
2472
|
+
type: HostListener,
|
|
2473
|
+
args: ['document:keydown.control.b', []]
|
|
2474
|
+
}], remoteSearchById: [{
|
|
2475
|
+
type: HostListener,
|
|
2476
|
+
args: ['document:keydown.control.y', []]
|
|
2477
|
+
}] } });
|
|
2478
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGVsbC1tb2R1bGUtY29tcG9uZW50cy9zaGVsbC1jb21wb25lbnRzL3NyYy9saWIvc2hlbGwtY29tcG9uZW50cy9jb21wb25lbnRzL21lbnUvbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGVsbC1tb2R1bGUtY29tcG9uZW50cy9zaGVsbC1jb21wb25lbnRzL3NyYy9saWIvc2hlbGwtY29tcG9uZW50cy9jb21wb25lbnRzL21lbnUvbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQWUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQXNCLFlBQVksRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFLLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFtQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRixPQUFPLEVBQVMsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzVDLE9BQU8sS0FBSyxvQkFBb0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFJakYsT0FBTyxFQUEwQixhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU14RSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUdqQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENB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QVU7b0JBQ3BCLFdBQVcsRUFBRSx1QkFBdUI7aUJBQ3JDOytaQWtJbUMsTUFBTTswQkFBckMsTUFBTTsyQkFBQyxNQUFNOytHQTdIZSxlQUFlO3NCQUE3QyxZQUFZO3VCQUFDLGVBQWU7Z0JBQ0gsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNGLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDVyxnQkFBZ0I7c0JBQTlDLFNBQVM7dUJBQUMsa0JBQWtCO2dCQUNILFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDRyxtQkFBbUI7c0JBQTdDLFNBQVM7dUJBQUMsY0FBYztnQkFDUyxXQUFXO3NCQUE1QyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ2MsZUFBZTtzQkFBcEQsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ1ksaUJBQWlCO3NCQUF4RCxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDSixXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ2QsUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBd0VILFNBQVM7c0JBRFosS0FBSzt1QkFBQyxRQUFRO2dCQThLZixZQUFZO3NCQURYLFlBQVk7dUJBQUMsNEJBQTRCLEVBQUUsRUFBRTtnQkFXOUMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLDRCQUE0QixFQUFFLEVBQUU7Z0JBVzlDLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyw0QkFBNEIsRUFBRSxFQUFFO2dCQVU5QyxnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyw0QkFBNEIsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGRyZW4sIFZpZXdDaGlsZCwgVGVtcGxhdGVSZWYsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgRWxlbWVudFJlZiwgT25Jbml0LCBIb3N0TGlzdGVuZXIsIENoYW5nZURldGVjdG9yUmVmLCBJbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgdGFrZSwgdGFrZVVudGlsLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IFN0b3JlLCBzZWxlY3QgfSBmcm9tIFwiQG5ncngvc3RvcmVcIjtcclxuLy8gaW1wb3J0IHsgU3RhdGUgfSBmcm9tIFwiYXBwL3NoYXJlZC9zdG9yZS9yZWR1Y2Vycy9tZW51aXRlbXMucmVkdWNlcnNcIjtcclxuaW1wb3J0IHsgU3RhdGUgfSBmcm9tIFwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvaW5kZXhcIjtcclxuaW1wb3J0ICogYXMgc2hhcmVkTW9kdWxlUmVkdWNlcnMgZnJvbSBcIi4vLi4vLi4vc3RvcmUvcmVkdWNlcnMvaW5kZXhcIjtcclxuaW1wb3J0IHsgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEdldEFsbE1lbnVJdGVtc1RyaWdnZXJlZCB9IGZyb20gXCIuLi8uLi9zdG9yZS9hY3Rpb25zL21lbnVpdGVtcy5hY3Rpb25zXCI7XHJcbmltcG9ydCB7IE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcclxuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXRcIjtcclxuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gXCJuZ3gtY29va2llLXNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciwgTmF2aWdhdGlvbkVuZCB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHsgTWF0T3B0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2NvcmVcIjtcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyXCI7XHJcbmltcG9ydCB7IFJlY2VudFNlYXJjaFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcmVjZW50U2VhcmNoLnNlcnZpY2VcIjtcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcywgR2V0Q29tcGFueVRoZW1lVHJpZ2dlcmVkIH0gZnJvbSBcIi4uLy4uL3N0b3JlL2FjdGlvbnMvYXV0aGVudGljYXRpb24uYWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBvZlR5cGUsIEFjdGlvbnMgfSBmcm9tIFwiQG5ncngvZWZmZWN0c1wiO1xyXG5pbXBvcnQgeyBTZWFyY2hUYXNrVHlwZSB9IGZyb20gXCIuL3NlYXJjaFRhc2suZW51bVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTYXRQb3BvdmVyIH0gZnJvbSAnQG5jc3RhdGUvc2F0LXBvcG92ZXInO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ3VuZGVyc2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLXVzZWQuc2VydmljZSc7XHJcbmltcG9ydCB7IExvY2FsU3RvcmFnZVByb3BlcnRpZXMgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxkZXBlbmRlbmNpZXMvY29uc3RhbnRzL2xvY2Fsc3RvcmFnZS1wcm9wZXJ0aWVzJztcclxuaW1wb3J0IHsgRW1wbG95ZWVMaXN0TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZW1wbG95ZWUnO1xyXG5pbXBvcnQgeyBFbXBsb3llZUxpc3RJbnB1dCB9IGZyb20gJy4uLy4uL21vZGVscy9lbXBsb3llZS1MaXN0JztcclxuaW1wb3J0IHsgQ3VzdG9tQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbGRlcGVuZGVuY2llcy9jb21wb25lbnRzL2NvbXBvbmVudGJhc2UnO1xyXG5pbXBvcnQgeyBTb2Z0TGFiZWxDb25maWd1cmF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvc29mdGxhYmVscy1tb2RlbCc7XHJcbmltcG9ydCB7IElNZW51SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9JTWVudUl0ZW0nO1xyXG5pbXBvcnQgeyBVc2VyU3RvcnkgfSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlclN0b3J5JztcclxuaW1wb3J0IHsgV2lkZ2V0TGlzdCB9IGZyb20gJy4uLy4uL21vZGVscy93aWRnZXRsaXN0JztcclxuaW1wb3J0IHsgRHJhZ2VkV2lkZ2V0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RyYWdlZFdpZGdldCc7XHJcbmltcG9ydCB7IFdvcmtzcGFjZUxpc3QgfSBmcm9tICcuLi8uLi9tb2RlbHMvd29ya3NwYWNlTGlzdCc7XHJcbmltcG9ydCB7IFJlY2VudFNlYXJjaE1vZGVsLCBTZWFyY2hUYXNrVHlwZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1JlY2VudFNlYXJjaE1vZGVsJztcclxuaW1wb3J0IHsgVGhlbWVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy90aGVtZXMubW9kZWwnO1xyXG5pbXBvcnQgeyBXSU5ET1cgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWxkZXBlbmRlbmNpZXMvaGVscGVycy93aW5kb3cuaGVscGVyJztcclxuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGhlbWUuc2VydmljZSc7XHJcbmltcG9ydCB7IEdvb2dsZUFuYWx5dGljc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nb29nbGUtYW5hbHl0aWNzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9qZWN0U2VhcmNoQ3JpdGVyaWFJbnB1dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL1Byb2plY3RTZWFyY2hDcml0ZXJpYUlucHV0TW9kZWwnO1xyXG5pbXBvcnQgeyBNZW51Q2F0ZWdvcmllcyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9tZW51LWNhdGVnb3JpZXMnO1xyXG5pbXBvcnQgeyBGZWF0dXJlSWRzIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsZGVwZW5kZW5jaWVzL2NvbnN0YW50cy9mZWF0dXJlLWlkcyc7XHJcbmltcG9ydCAnLi4vLi4vLi4vZ2xvYmFsZGVwZW5kZW5jaWVzL2hlbHBlcnMvZm9udGF3ZXNvbWUtaWNvbnMnO1xyXG5pbXBvcnQgeyBSZWNlbnRTZWFyY2hUeXBlIH0gZnJvbSAnLi4vLi4vZW51bS9yZWNlbnRTZWFyY2hUeXBlLmVudW0nO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSBcIm5neC10b2FzdHJcIjtcclxuaW1wb3J0IHsgdHJpZ2dlciwgc3R5bGUsIGFuaW1hdGUsIHRyYW5zaXRpb24gfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlXCI7XHJcblxyXG4vKiogQGR5bmFtaWMgKi9cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImFwcC1tZW51XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9tZW51LmNvbXBvbmVudC5odG1sXCJcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGV4dGVuZHMgQ3VzdG9tQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgW3g6IHN0cmluZ106IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbihcIm9wZW5NZW51UG9wVXBcIikgb3Blbk1lbnVQb3BPdmVyO1xyXG4gIEBWaWV3Q2hpbGQoXCJtZW51VHJpZ2dlclwiKSBtZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXI7XHJcbiAgQFZpZXdDaGlsZChcImVsZW1lbnRcIikgZWxlbWVudDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwid29ya3NwYWNlRWxlbWVudFwiKSB3b3Jrc3BhY2VFbGVtZW50OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoXCJtZW51RWxlbWVudFwiKSBtZW51RWxlbWVudDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwiYWRkV29ya3NwYWNlXCIpIGFkZFdvcmtTcGFjZVBvcE92ZXI6IFNhdFBvcG92ZXI7XHJcbiAgQFZpZXdDaGlsZChcImFsbFNlbGVjdGVkXCIpIHByaXZhdGUgYWxsU2VsZWN0ZWQ6IE1hdE9wdGlvbjtcclxuICBAVmlld0NoaWxkKFwiYWxsRWRpdFNlbGVjdGVkXCIpIHByaXZhdGUgYWxsRWRpdFNlbGVjdGVkOiBNYXRPcHRpb247XHJcbiAgQFZpZXdDaGlsZChcImFsbERlbGV0ZVNlbGVjdGVkXCIpIHByaXZhdGUgYWxsRGVsZXRlU2VsZWN0ZWQ6IE1hdE9wdGlvbjtcclxuICBAVmlld0NoaWxkKCdpbmZvUG9wT3ZlcicpIGluZm9Qb3BPdmVyOiBUZW1wbGF0ZVJlZjxhbnk+XHJcbiAgQE91dHB1dCgpIGlzT3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIG9wZW5OZXdEYXNoYm9hcmQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBlOiBFbGVtZW50O1xyXG4gIHNlYXJjaFRleHQ6IHN0cmluZztcclxuICBmb2N1czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNvZnRMYWJlbHM6IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbFtdO1xyXG4gIHB1YmxpYyBtZW51SXRlbXMkOiBPYnNlcnZhYmxlPElNZW51SXRlbVtdPjtcclxuICB1c2VyU3Rvcmllc0xpc3QkOiBPYnNlcnZhYmxlPFVzZXJTdG9yeVtdPjtcclxuICBtZW51SXRlbTogSU1lbnVJdGVtW107XHJcbiAgaXRlbXMgPSBbXTtcclxuICBtZW51SXRlbU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcbiAgd2lkZ2V0czogV2lkZ2V0TGlzdFtdO1xyXG4gIG9yaWdpbmFsV2lkZ2V0czogV2lkZ2V0TGlzdFtdO1xyXG4gIHNlbGVjdGVkTGlzdDogRHJhZ2VkV2lkZ2V0W107XHJcbiAgd2lkZ2V0OiBXaWRnZXRMaXN0O1xyXG4gIHNlbGVjdGVkQXBwczogYW55O1xyXG4gIHVybDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkRGFzaGJvYXJkOiBhbnk7XHJcbiAgZGVmYXVsdERhc2hib2FyZDogYW55O1xyXG4gIHN1YkxldmVsczogc3RyaW5nW10gPSBbXTtcclxuICBzdGF0ZUx2bDE6IHN0cmluZztcclxuICBsZXZlbDNMaW5rMTogc3RyaW5nO1xyXG4gIGxldmVsM0xpbmsyOiBzdHJpbmc7XHJcbiAgc3ViTGV2ZWxzRm9yTGV2ZWwyOiBzdHJpbmc7XHJcbiAgY29tcGFueU1haW5Mb2dvOiBzdHJpbmc7XHJcbiAgY29tcGFueU1pbmlMb2dvOiBzdHJpbmc7XHJcbiAgcm9sZXNEcm9wRG93bjogYW55W107XHJcbiAgd29ya3NwYWNlc0xpc3QkOiBPYnNlcnZhYmxlPFdvcmtzcGFjZUxpc3RbXT47XHJcbiAgd29ya3NwYWNlczogV29ya3NwYWNlTGlzdFtdO1xyXG4gIHdvcmtzcGFjZXNGb3JMb29wOiBhbnk7XHJcbiAgZGlzcGxheTogYm9vbGVhbjtcclxuICBhZG1pblRvb2xzOiBhbnkgPSBbXTtcclxuICB0b29sczogYW55O1xyXG4gIHNlbGVjdGVkUm93SW5kZXg6IGFueTtcclxuICBpdGVtQ2xpY2tlZDogYW55O1xyXG4gIHQ6IGFueTtcclxuICB3ZDogYW55O1xyXG4gIHdzOiBhbnk7XHJcbiAgcnM6IGFueTtcclxuICBhbGxzZWFyY2hlczogUmVjZW50U2VhcmNoTW9kZWxbXSA9IFtdO1xyXG4gIHJlY2VudFNlYXJjaGVzOiBSZWNlbnRTZWFyY2hNb2RlbFtdID0gW107XHJcbiAgcHJvamVjdFJvbGVUZXh0OiBzdHJpbmcgPSBcIlByb2plY3Qgcm9sZSBjb25maWd1cmF0aW9uXCI7XHJcbiAgY2FuQWNjZXNzX2ZlYXR1cmVfQWRkT3JVcGRhdGVBcHBsaWNhdGlvbnM6IEJvb2xlYW47XHJcbiAgY2FuQWNjZXNzX2ZlYXR1cmVfQWRkT3JVcGRhdGVGb3JtOiBCb29sZWFuO1xyXG4gIGNhbkFjY2Vzc19mZWF0dXJlX1ZpZXdGb3JtczogQm9vbGVhbjtcclxuICBjYW5BY2Nlc3NfZmVhdHVyZV9NYW5hZ2VQcm9qZWN0Um9sZVBlcm1pc3Npb25zOiBCb29sZWFuO1xyXG4gIGNhbkFjY2Vzc19mZWF0dXJlX1ZpZXdSb2xlczogQm9vbGVhbjtcclxuICBjYW5BY2Nlc3NfZmVhdHVyZV9BZGRPclVwZGF0ZUFwcGxpY2F0aW9ucyQ6IE9ic2VydmFibGU8Qm9vbGVhbj47XHJcbiAgY2FuQWNjZXNzX2ZlYXR1cmVfQWRkT3JVcGRhdGVGb3JtJDogT2JzZXJ2YWJsZTxCb29sZWFuPjtcclxuICBjYW5BY2Nlc3NfZmVhdHVyZV9WaWV3Rm9ybXMkOiBPYnNlcnZhYmxlPEJvb2xlYW4+XHJcbiAgY2FuQWNjZXNzX2ZlYXR1cmVfTWFuYWdlUHJvamVjdFJvbGVQZXJtaXNzaW9ucyQ6IE9ic2VydmFibGU8Qm9vbGVhbj5cclxuICBjYW5BY2Nlc3NfZmVhdHVyZV9WaWV3Um9sZXMkOiBPYnNlcnZhYmxlPEJvb2xlYW4+O1xyXG4gIGNvbXBhbnlTZXR0aW5nc01PZGVsJDogT2JzZXJ2YWJsZTxhbnlbXT47XHJcbiAgZGlzYWJsZVdvcmtzcGFjZSA9IGZhbHNlO1xyXG4gIGRpc2FibGVXb3Jrc3BhY2VEZWxldGUgPSBmYWxzZTtcclxuICBkaXNhYmxlV29ya3NwYWNlaGlkZSA9IGZhbHNlO1xyXG4gIGZvcm1zOiBhbnk7XHJcbiAgY3VzdGFwcDogYW55O1xyXG4gIHByb2plY3RSb2xlQ29uZmlndXJhdGlvbjogYW55O1xyXG4gIHJvbGVDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgdGhlbWVNb2RlbDogVGhlbWVNb2RlbDtcclxuICBlbXBsb3llZUxpc3Q6IGFueVtdID0gW107XHJcbiAgdGhlbWVNb2RlbCQ6IE9ic2VydmFibGU8VGhlbWVNb2RlbD47XHJcbiAgdGhlbWVCYXNlQ29sb3I6IHN0cmluZztcclxuICBzZWxlY3RlZEVtcGxveWVlOiBzdHJpbmc7XHJcbiAgbG9hZGVkRW1wbG95ZWVMaXN0OiBFbXBsb3llZUxpc3RNb2RlbFtdID0gW107XHJcbiAgc2VsZWN0ZWRFbXBsb3llZUluZGV4OiBudW1iZXIgPSBudWxsO1xyXG4gIHZpZXdFbXBsb3llZVBlcm1pc3Npb246IGJvb2xlYW47XHJcbiAgY2FuQWNjZXNzX2ZlYXR1cmVfQ2FuRWRpdE90aGVyRW1wbG95ZWVEZXRhaWxzOiBCb29sZWFuO1xyXG4gIHByb2plY3RMaXN0OiBhbnkgPSBbXTtcclxuICBwcm9qZWN0SW5kZXg6IGFueTtcclxuICBzZWFyY2hCeVRleHRMb2FkaW5nOiBib29sZWFuO1xyXG4gIEBJbnB1dChcInJlbG9hZFwiKVxyXG4gIHNldCByZWxvYWRBbGwoZGF0YTogYm9vbGVhbikge1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgdGhpcy5hZG1pblRvb2xzID0gW107XHJcbiAgICAgIHRoaXMudG9vbHMgPSBbXTtcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgbmdEZXN0cm95ZWQkID0gbmV3IFN1YmplY3QoKTtcclxuICB1c2VyU3RvcnlMaXN0OiBhbnkgPSBbXTtcclxuICB1c2VyU3RvcnlTZWFyY2hMaXN0OiBhbnkgPSBbXTtcclxuICBnb2FsU2VhcmNoTGlzdDogYW55ID0gW107XHJcbiAgaXNFbmFibGVCdWdCb2FyZDogYm9vbGVhbjtcclxuICBzZWxlY3RlZFJvbGVJZHM6IHN0cmluZ1tdID0gW107XHJcbiAgZGFzaGJvYXJkVXBkYXRlSW5Qcm9ncmVzczogYm9vbGVhbjtcclxuICB1c2VyczogYW55O1xyXG4gIGdvYWxJbmRleDogYW55O1xyXG4gIHdvcmtzcGFjZUZvcm06IEZvcm1Hcm91cDtcclxuICBwcm9qZWN0U2VhcmNoUmVzdWx0czogYW55O1xyXG4gIGRlbGF5VGltZUlucHV0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gIG1lbnVzZmV0Y2hJblByb2dyZXNzOiBib29sZWFuO1xyXG4gIHdvcmtzcGFjZXNmZXRjaEluUHJvZ3Jlc3M6IGJvb2xlYW47XHJcbiAgd2lkZ2V0c2ZldGNoSW5Qcm9ncmVzczogYm9vbGVhbjtcclxuICByZWNlbnRTZWFyY2hlc2ZldGNoSW5Qcm9ncmVzczogYm9vbGVhbjtcclxuICBzZWFyY2hUYXNrczogU2VhcmNoVGFza1R5cGVNb2RlbDtcclxuICBsb2FkaW5nU2VhcmNoTWVudURhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkZWZhdWx0RGFzaGJvYXJkSWQ6IHN0cmluZztcclxuICBzZWFyY2hCeUlkOiBib29sZWFuO1xyXG4gIHNlYXJjaEJ5VGV4dDogYm9vbGVhbjtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPFN0YXRlPixcclxuICAgIHByaXZhdGUgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcclxuICAgIHB1YmxpYyByb3V0ZXM6IFJvdXRlcixcclxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHJzczogUmVjZW50U2VhcmNoU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aW9uVXBkYXRlcyQ6IEFjdGlvbnMsXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEBJbmplY3QoV0lORE9XKSBwcml2YXRlIHdpbmRvdzogV2luZG93LFxyXG4gICAgcHJpdmF0ZSBnb29nbGVBbmFseXRpY3NTZXJ2aWNlOiBHb29nbGVBbmFseXRpY3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgLy90aGlzLm9uRm9jdXMoKTtcclxuXHJcbiAgICAvLyBsZXQgZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW52aXJvbm1lbnQpKTtcclxuICAgIC8vIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5TZWFyY2hDbGljaywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9DYW5FZGl0T3RoZXJFbXBsb3llZURldGFpbHMkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5kb2VzVXNlckhhdmVQZXJtaXNzaW9uLCB7IGZlYXR1cmVJZDogRmVhdHVyZUlkcy5GZWF0dXJlX0NhbkVkaXRPdGhlckVtcGxveWVlRGV0YWlscyB9KSk7XHJcbiAgICB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX0NhbkVkaXRPdGhlckVtcGxveWVlRGV0YWlscyQuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfQ2FuRWRpdE90aGVyRW1wbG95ZWVEZXRhaWxzID0gcmVzdWx0O1xyXG4gICAgfSlcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVdvcmtzcGFjZUZvcm0oKTtcclxuICAgIHRoaXMucm91dGVzLmV2ZW50cy5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgaWYgKHRoaXMubG9jYXRpb24ucGF0aCgpICE9IFwiXCIpIHtcclxuICAgICAgICB0aGlzLnVybCA9IHRoaXMubG9jYXRpb24ucGF0aCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMud2lkZ2V0U2VydmljZS5zZWxlY3RlZFdvcmtzcGFjZS5zdWJzY3JpYmUoaWQgPT4ge1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkRGFzaGJvYXJkID0gaWQ7XHJcbiAgICAvLyB9KTtcclxuICAgIC8vIHRoaXMuYWN0aW9uVXBkYXRlcyRcclxuICAgIC8vICAgLnBpcGUoXHJcbiAgICAvLyAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgIC8vICAgICBvZlR5cGUoQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5HZXRDb21wYW55VGhlbWVDb21wbGV0ZWQpLFxyXG4gICAgLy8gICAgIHRhcCgoKSA9PiB7XHJcbiAgICAvL3RoaXMudGhlbWVNb2RlbCQgPSB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNoYXJlZE1vZHVsZVJlZHVjZXJzLmdldFRoZW1lTW9kZWwpKTtcclxuICAgIC8vdGhpcy50aGVtZU1vZGVsJC5zdWJzY3JpYmUoeCA9PiB0aGlzLnRoZW1lTW9kZWwgPSB4KTtcclxuICAgIC8vIHRoaXMuZ2V0VGhlbWUoKTtcclxuICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgdGhpcy50aGVtZU1vZGVsID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKCdDb21wYW55VGhlbWUnKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlUaGVtZVwiKSkgOiBudWxsO1xyXG4gICAgdGhpcy50aGVtZVNlcnZpY2UuY2hhbmdlVGhlbWUodGhpcy50aGVtZU1vZGVsKTtcclxuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TWFpbkxvZ28sIHRoaXMudGhlbWVNb2RlbC5jb21wYW55TWFpbkxvZ28sIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueU1pbmlMb2dvLCB0aGlzLnRoZW1lTW9kZWwuY29tcGFueU1pbmlMb2dvLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgdGhpcy50aGVtZU1vZGVsID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKCdDb21wYW55VGhlbWUnKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlUaGVtZVwiKSkgOiBudWxsO1xyXG5cclxuICAgIHZhciBjb21wYW55U2V0dGluZ3NNb2RlbCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55U2V0dGluZ3MpKTtcclxuXHJcbiAgICB0aGlzLmNvbXBhbnlNYWluTG9nbyA9IGNvbXBhbnlTZXR0aW5nc01vZGVsLmZpbmQoeCA9PiB4LmtleS50b0xvd2VyQ2FzZSgpID09IFwibWFpbmxvZ29cIikgIT0gbnVsbCA/IGNvbXBhbnlTZXR0aW5nc01vZGVsLmZpbmQoeCA9PiB4LmtleS50b0xvd2VyQ2FzZSgpID09IFwibWFpbmxvZ29cIikudmFsdWUgOiB0aGlzLmNvbXBhbnlNYWluTG9nbztcclxuICAgIHRoaXMuY29tcGFueU1pbmlMb2dvID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtaW5pbG9nb1wiKSAhPSBudWxsID8gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtaW5pbG9nb1wiKS52YWx1ZSA6IHRoaXMuY29tcGFueU1pbmlMb2dvO1xyXG5cclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2hvcnRjdXQtZmF2LWljb25cIikuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB0aGlzLnRoZW1lTW9kZWwuY29tcGFueU1pbmlMb2dvKTtcclxuICAgIHRoaXMudGhlbWVCYXNlQ29sb3IgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGhlbWVDb2xvcicpO1xyXG4gICAgLy8gLy8gdGhpcy50aGVtZU1vZGVsID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKCdDb21wYW55VGhlbWUnKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlUaGVtZVwiKSkgOiBudWxsO1xyXG4gICAgLy8gLy8gaWYgKHRoaXMudGhlbWVNb2RlbCAmJiB0aGlzLnRoZW1lTW9kZWwuY29tcGFueVRoZW1lSWQgIT09IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIpIHtcclxuICAgIC8vIC8vICAgdGhpcy50aGVtZVNlcnZpY2UuY2hhbmdlVGhlbWUodGhpcy50aGVtZU1vZGVsKTtcclxuICAgIC8vIC8vICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlNYWluTG9nbywgdGhpcy50aGVtZU1vZGVsLmNvbXBhbnlNYWluTG9nbywgbnVsbCk7XHJcbiAgICAvLyAvLyAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TWluaUxvZ28sIHRoaXMudGhlbWVNb2RlbC5jb21wYW55TWluaUxvZ28sIG51bGwpO1xyXG4gICAgLy8gLy8gfVxyXG4gICAgLy8gLy8gZWxzZSB7XHJcbiAgICAvLyAvLyAgIHZhciB0aGVtZU1vZGVsID0gbmV3IFRoZW1lTW9kZWwoKVxyXG4gICAgLy8gLy8gICB0aGVtZU1vZGVsLmNvbXBhbnlUaGVtZUlkID0gXCIwOTI5RDM1QS0zNTczLTRCMDYtOTNGQi1DN0Q0NkFBRkE5MThcIjtcclxuICAgIC8vIC8vICAgLy8gdGhlbWVNb2RlbC5jb21wYW55TWluaUxvZ28gPSBcImFzc2V0cy9pbWFnZXMvTG9nby1mYXZpY29uLnBuZ1wiO1xyXG4gICAgLy8gLy8gICAvLyB0aGVtZU1vZGVsLmNvbXBhbnlNYWluTG9nbyA9IFwiYXNzZXRzL2ltYWdlcy9NYWluLUxvZ28ucG5nXCI7XHJcbiAgICAvLyAvLyAgIHRoaXMudGhlbWVNb2RlbCA9IHRoZW1lTW9kZWw7XHJcbiAgICAvLyAvLyAgIHRoaXMudGhlbWVTZXJ2aWNlLmNoYW5nZVRoZW1lKHRoZW1lTW9kZWwpO1xyXG4gICAgLy8gLy8gICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueU1haW5Mb2dvLCB0aGlzLnRoZW1lTW9kZWwuY29tcGFueU1haW5Mb2dvLCBudWxsKTtcclxuICAgIC8vIC8vICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlNaW5pTG9nbywgdGhpcy50aGVtZU1vZGVsLmNvbXBhbnlNaW5pTG9nbywgbnVsbCk7XHJcbiAgICAvLyAvLyB9XHJcbiAgICAvLyAvLyB0aGlzLmNvbXBhbnlNYWluTG9nbyA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TWFpbkxvZ28pO1xyXG4gICAgLy8gLy8gdGhpcy5jb21wYW55TWluaUxvZ28gPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueU1pbmlMb2dvKTtcclxuICAgIC8vIC8vIC8vdGhpcy5jaGFuZ2VGYXZJY29uKCk7XHJcbiAgICAvLyAvLyB0aGlzLnRoZW1lQmFzZUNvbG9yID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RoZW1lQ29sb3InKTtcclxuICAgIC8vdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAvLyAgIH0pXHJcbiAgICAvLyApXHJcbiAgICAvLyAuc3Vic2NyaWJlKCk7XHJcblxyXG5cclxuICAgIC8vIHRoaXMuYWN0aW9uVXBkYXRlcyRcclxuICAgIC8vICAgLnBpcGUoXHJcbiAgICAvLyAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgIC8vICAgICBvZlR5cGUoV29ya3NwYWNlc0FjdGlvblR5cGVzLkxvYWRXb3Jrc3BhY2VCeUlkQ29tcGxldGVkKSxcclxuICAgIC8vICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgdmFyIHdvcmtzcGFjZXNMaXN0ID0gZGF0YS5zZWFyY2hXb3Jrc3BhY2VzU3VjY2VzcztcclxuICAgIC8vICAgICAgIHRoaXMuZGFzaGJvYXJkVXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgLy8gdGhpcy5jbG9zZUFkZFdvcmtzcGFjZURpYWxvZygpO1xyXG4gICAgLy8gICAgICAgdGhpcy5kaXNhYmxlV29ya3NwYWNlID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICBpZiAod29ya3NwYWNlc0xpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLndvcmtzcGFjZXMucHVzaCh3b3Jrc3BhY2VzTGlzdFswXSk7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuZGlzcGxheSA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICB0aGlzLmlzT3BlbmVkLmVtaXQodGhpcy5kaXNwbGF5KTtcclxuICAgIC8vICAgICAgICAgdGhpcy5vcGVuTmV3RGFzaGJvYXJkLmVtaXQod29ya3NwYWNlc0xpc3RbMF0ud29ya3NwYWNlSWQpXHJcbiAgICAvLyAgICAgICB9XHJcblxyXG4gICAgLy8gICAgIH0pXHJcbiAgICAvLyAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgLy90aGlzLmdldEFsbFByb2plY3RzKCk7XHJcblxyXG4gICAgdGhpcy5kZWxheVRpbWVJbnB1dC5waXBlKFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMjAwMCksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXHJcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMuU2VhcmNoSXRlbSh2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIGdldFRoZW1lKCkge1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuZ2V0VGhlbWVzKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XHJcbiAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldCgnQ29tcGFueVRoZW1lJywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSksIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgdGhpcy50aGVtZU1vZGVsID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKCdDb21wYW55VGhlbWUnKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlUaGVtZVwiKSkgOiBudWxsO1xyXG4gICAgICAgIHRoaXMudGhlbWVTZXJ2aWNlLmNoYW5nZVRoZW1lKHRoaXMudGhlbWVNb2RlbCk7XHJcbiAgICAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlNYWluTG9nbywgdGhpcy50aGVtZU1vZGVsLmNvbXBhbnlNYWluTG9nbywgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueU1pbmlMb2dvLCB0aGlzLnRoZW1lTW9kZWwuY29tcGFueU1pbmlMb2dvLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgIHRoaXMuc2l0ZVVybCA9IHJlc3BvbnNlLmRhdGEucmVnaXN0cmVyU2l0ZUFkZHJlc3M7XHJcbiAgICAgICAgdGhpcy50aGVtZU1vZGVsID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKCdDb21wYW55VGhlbWUnKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChcIkNvbXBhbnlUaGVtZVwiKSkgOiBudWxsO1xyXG5cclxuICAgICAgICB2YXIgY29tcGFueVNldHRpbmdzTW9kZWwgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueVNldHRpbmdzKSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29tcGFueU1haW5Mb2dvID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtYWlubG9nb1wiKSAhPSBudWxsID8gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtYWlubG9nb1wiKS52YWx1ZSA6IHRoaXMuY29tcGFueU1haW5Mb2dvO1xyXG4gICAgICAgIHRoaXMuY29tcGFueU1pbmlMb2dvID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtaW5pbG9nb1wiKSAhPSBudWxsID8gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtaW5pbG9nb1wiKS52YWx1ZSA6IHRoaXMuY29tcGFueU1pbmlMb2dvO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb21wYW55TWFpbkxvZ28gPT0gXCJcIiB8fCB0aGlzLmNvbXBhbnlNYWluTG9nbyA9PSBudWxsIHx8IHRoaXMuY29tcGFueU1haW5Mb2dvID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgdGhpcy5jb21wYW55TWFpbkxvZ28gPSByZXNwb25zZS5kYXRhLmNvbXBhbnlNYWluTG9nbztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGFueU1pbmlMb2dvID09IFwiXCIgfHwgdGhpcy5jb21wYW55TWluaUxvZ28gPT0gbnVsbCB8fCB0aGlzLmNvbXBhbnlNaW5pTG9nbyA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHRoaXMuY29tcGFueU1pbmlMb2dvID0gcmVzcG9uc2UuZGF0YS5jb21wYW55TWluaUxvZ287XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2hvcnRjdXQtZmF2LWljb25cIikuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB0aGlzLnRoZW1lTW9kZWwuY29tcGFueU1pbmlMb2dvKTtcclxuICAgICAgICB0aGlzLnRoZW1lQmFzZUNvbG9yID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RoZW1lQ29sb3InKTtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmNvbnRyb2wucScsIFtdKVxyXG4gIGtleU9wZW5FdmVudCgpIHtcclxuICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICB0aGlzLmRpc3BsYXkgPSB0cnVlO1xyXG4gICAgdGhpcy5zZWFyY2hCeVRleHQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VhcmNoQnlJZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc09wZW5lZC5lbWl0KHRoaXMuZGlzcGxheSk7XHJcbiAgICB0aGlzLm9uRm9jdXMoKVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5jb250cm9sLm0nLCBbXSlcclxuICBrZXlDbG9zZUV2ZW50KCkge1xyXG4gICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgdGhpcy5kaXNwbGF5ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgIHRoaXMuc2VhcmNoQnlUZXh0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlYXJjaEJ5SWQgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5jb250cm9sLmInLCBbXSlcclxuICByZW1vdGVTZWFyY2hCeVRleHQoKSB7XHJcbiAgICB0aGlzLnNlYXJjaEJ5SWQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VhcmNoQnlUZXh0ID0gdHJ1ZVxyXG4gICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIC8vdGhpcy5kaXNwbGF5ID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5jb250cm9sLnknLCBbXSlcclxuICByZW1vdGVTZWFyY2hCeUlkKCkge1xyXG4gICAgdGhpcy5zZWFyY2hCeVRleHQgPSBmYWxzZVxyXG4gICAgdGhpcy5zZWFyY2hCeUlkID0gdHJ1ZTtcclxuICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAvL3RoaXMuZGlzcGxheSA9IHRydWU7XHJcbiAgICB0aGlzLmlzT3BlbmVkLmVtaXQodGhpcy5kaXNwbGF5KTtcclxuICB9XHJcblxyXG4gIGNvbnZlcnRUb0xvY2FsVGltZSh0aW1lKSB7XHJcbiAgICB2YXIgdXRjRGF0ZSA9IG1vbWVudC51dGModGltZSkuZm9ybWF0KCk7XHJcbiAgICB2YXIgbG9jYWxEYXRlID0gbW9tZW50LnV0Yyh1dGNEYXRlKS5sb2NhbCgpLmZvcm1hdCgpO1xyXG4gICAgcmV0dXJuIGxvY2FsRGF0ZTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVXb3Jrc3BhY2VGb3JtKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvbGVJZHMgPSBudWxsO1xyXG4gICAgdGhpcy5kaXNhYmxlV29ya3NwYWNlID0gZmFsc2U7XHJcbiAgICB0aGlzLmRpc2FibGVXb3Jrc3BhY2VoaWRlID0gZmFsc2U7XHJcbiAgICB0aGlzLndvcmtzcGFjZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgd29ya3NwYWNlTmFtZTogbmV3IEZvcm1Db250cm9sKG51bGwsXHJcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCg1MClcclxuICAgICAgICBdKVxyXG4gICAgICApLFxyXG4gICAgICBzZWxlY3RlZFJvbGVzOiBuZXcgRm9ybUNvbnRyb2wobnVsbCxcclxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgIF0pXHJcbiAgICAgICksXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBuZXcgRm9ybUNvbnRyb2wobnVsbCxcclxuICAgICAgICBWYWxpZGF0b3JzLmNvbXBvc2UoW1xyXG4gICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwMClcclxuICAgICAgICBdKVxyXG4gICAgICApLFxyXG4gICAgICBlZGl0Um9sZUlkczogbmV3IEZvcm1Db250cm9sKG51bGwsIFtdKSxcclxuICAgICAgZGVsZXRlUm9sZUlkczogbmV3IEZvcm1Db250cm9sKG51bGwsIFtdKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG4gICAgdGhpcy5kZWZhdWx0RGFzaGJvYXJkSWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EZWZhdWx0RGFzaGJvYXJkKSA/IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRlZmF1bHREYXNoYm9hcmQpKSA6IG51bGw7O1xyXG5cclxuICAgIC8vdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgR2V0Q29tcGFueVRoZW1lVHJpZ2dlcmVkKCkpO1xyXG4gICAgdGhpcy5hZG1pblRvb2xzID0gW107XHJcbiAgICAvLyB2YXIgZGFzaGJvYXJkcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EYXNoYm9hcmRzKSk7XHJcbiAgICAvLyBpZiAoZGFzaGJvYXJkcyAmJiBkYXNoYm9hcmRzICE9IFwibnVsbFwiKSB7XHJcbiAgICAvLyAgIHRoaXMud29ya3NwYWNlcyA9IHRoaXMud29ya3NwYWNlc0Zvckxvb3AgPSBkYXNoYm9hcmRzO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gdmFyIG1lbnVJdGVtcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5NZW51SXRlbXMpKVxyXG4gICAgLy8gaWYgKG1lbnVJdGVtcyAmJiBtZW51SXRlbXMgIT0gXCJudWxsXCIpIHtcclxuICAgIC8vICAgdGhpcy5tZW51SXRlbSA9IG1lbnVJdGVtcztcclxuICAgIC8vICAgdGhpcy5pdGVtcyA9IHRoaXMubWVudUl0ZW0uZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlICE9IFwiZHJvcERvd25cIik7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gdmFyIHdpZGdldHMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRmF2b3VyaXRlV2lkZ2V0cykpO1xyXG4gICAgLy8gaWYgKHdpZGdldHMgJiYgd2lkZ2V0cyAhPSBcIm51bGxcIikge1xyXG4gICAgLy8gICB0aGlzLndpZGdldHMgPSB0aGlzLm9yaWdpbmFsV2lkZ2V0cyA9IHdpZGdldHM7XHJcbiAgICAvLyB9XHJcbiAgICAvLyB2YXIgcmVjZW50U2VhcmNoZXMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuUmVjZW50U2VhcmNoZXMpKTtcclxuICAgIC8vIGlmIChyZWNlbnRTZWFyY2hlcyAmJiByZWNlbnRTZWFyY2hlcyAhPSBcIm51bGxcIikge1xyXG4gICAgLy8gICB0aGlzLmFsbHNlYXJjaGVzID0gdGhpcy5yZWNlbnRTZWFyY2hlcyA9IHJlY2VudFNlYXJjaGVzO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5sb2FkV2lkZ2V0c0xpc3QoKTtcclxuICAgIC8vICB0aGlzLmxvYWRXb3Jrc3BhY2VzTGlzdCgpO1xyXG4gICAgdGhpcy5nZXRTb2Z0TGFiZWxDb25maWd1cmF0aW9ucygpO1xyXG4gICAgdGhpcy5nZXRDb21wYW55U2V0dGluZ3MoKTtcclxuICAgIHRoaXMubWVudUl0ZW1zJCA9IHRoaXMuc3RvcmUucGlwZShcclxuICAgICAgc2VsZWN0KHNoYXJlZE1vZHVsZVJlZHVjZXJzLmdldEN1cnJlbnRBY3RpdmVNZW51Q2F0ZWdvcnlNZW51SXRlbXMpLFxyXG4gICAgICB0YXAobWVudUxpc3QgPT4gY29uc29sZS5sb2cobWVudUxpc3QpKVxyXG4gICAgKTtcclxuICAgIC8vIHRoaXMubWVudUl0ZW1zJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAvLyAgIHZhciBhID0geDtcclxuICAgIC8vICAgdmFyIGIgPSB0aGlzLm1lbnVJdGVtLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSAhPSBcImRyb3BEb3duXCIpO1xyXG5cclxuICAgIC8vICAgLy90aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1swXTtcclxuICAgIC8vICAgLy90aGlzLm1lbnVzZmV0Y2hJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgICAvLyB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBHZXRBbGxNZW51SXRlbXNUcmlnZ2VyZWQoTWVudUNhdGVnb3JpZXMuTWFpbikpO1xyXG5cclxuICAgIHZhciBjb21wYW55U2V0dGluZ3NNb2RlbCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55U2V0dGluZ3MpKTtcclxuXHJcbiAgICB0aGlzLmNvbXBhbnlNYWluTG9nbyA9IGNvbXBhbnlTZXR0aW5nc01vZGVsLmZpbmQoeCA9PiB4LmtleS50b0xvd2VyQ2FzZSgpID09IFwibWFpbmxvZ29cIikgIT0gbnVsbCA/IGNvbXBhbnlTZXR0aW5nc01vZGVsLmZpbmQoeCA9PiB4LmtleS50b0xvd2VyQ2FzZSgpID09IFwibWFpbmxvZ29cIikudmFsdWUgOiB0aGlzLmNvbXBhbnlNYWluTG9nbztcclxuICAgIHRoaXMuY29tcGFueU1pbmlMb2dvID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtaW5pbG9nb1wiKSAhPSBudWxsID8gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtaW5pbG9nb1wiKS52YWx1ZSA6IHRoaXMuY29tcGFueU1pbmlMb2dvO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbXBhbnlNYWluTG9nbyA9PSBcIlwiIHx8IHRoaXMuY29tcGFueU1haW5Mb2dvID09IG51bGwgfHwgdGhpcy5jb21wYW55TWFpbkxvZ28gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuY29tcGFueU1haW5Mb2dvID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlNYWluTG9nbyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb21wYW55TWluaUxvZ28gPT0gXCJcIiB8fCB0aGlzLmNvbXBhbnlNaW5pTG9nbyA9PSBudWxsIHx8IHRoaXMuY29tcGFueU1pbmlMb2dvID09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmNvbXBhbnlNaW5pTG9nbyA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TWluaUxvZ28pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hvcnRjdXQtZmF2LWljb24nKSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2hvcnRjdXQtZmF2LWljb24nKS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHRoaXMuY29tcGFueU1pbmlMb2dvKTtcclxuICAgIH1cclxuICAgIC8vdGhpcy5nZXRSZWNlbnRTZWFyY2hlcygpO1xyXG4gICAgdGhpcy5zZWxlY3RlZExpc3QgPSBbXTtcclxuXHJcbiAgICAvLyB0aGlzLmN1c3RhcHAgPSB7XHJcbiAgICAvLyAgIG5hbWU6IFwiQ3VzdG9tIGFwcGxpY2F0aW9uc1wiLFxyXG4gICAgLy8gICBsaW5rOiBcIi9hcHBsaWNhdGlvbnMvY3VzdG9tLWFwcGxpY2F0aW9uc1wiLFxyXG4gICAgLy8gICBwZXJtaXNzaW9uOiB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX0FkZE9yVXBkYXRlQXBwbGljYXRpb25zJFxyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5mb3JtcyA9IHtcclxuICAgIC8vICAgbmFtZTogXCJGb3Jtc1wiLFxyXG4gICAgLy8gICBsaW5rOiBcIi9hcHBsaWNhdGlvbnMvdmlldy1mb3Jtc1wiLFxyXG4gICAgLy8gICBwZXJtaXNzaW9uOiB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX1ZpZXdGb3JtcyRcclxuICAgIC8vIH1cclxuICAgIC8vIHRoaXMucHJvamVjdFJvbGVDb25maWd1cmF0aW9uID0ge1xyXG4gICAgLy8gICBuYW1lOiBcIlByb2plY3Qgcm9sZSBjb25maWd1cmF0aW9uXCIsXHJcbiAgICAvLyAgIGxpbms6IFwiL3JvbGVtYW5hZ2VtZW50L2VudGl0eXJvbGVtYW5hZ2VtZW50XCIsXHJcbiAgICAvLyAgIHBlcm1pc3Npb246IHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfTWFuYWdlUHJvamVjdFJvbGVQZXJtaXNzaW9ucyRcclxuICAgIC8vIH1cclxuICAgIC8vIHRoaXMucm9sZUNvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAvLyAgIG5hbWU6IFwiUm9sZSBjb25maWd1cmF0aW9uXCIsXHJcbiAgICAvLyAgIGxpbms6IFwiL3JvbGVtYW5hZ2VtZW50L3JvbGVtYW5hZ2VtZW50XCIsXHJcbiAgICAvLyAgIHBlcm1pc3Npb246IHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfVmlld1JvbGVzJFxyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9BZGRPclVwZGF0ZUFwcGxpY2F0aW9ucyQgPSB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNoYXJlZE1vZHVsZVJlZHVjZXJzLmRvZXNVc2VySGF2ZVBlcm1pc3Npb24sIHsgZmVhdHVyZUlkOiBGZWF0dXJlSWRzLkZlYXR1cmVfQWRkT3JVcGRhdGVBcHBsaWNhdGlvbnMgfSkpO1xyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9BZGRPclVwZGF0ZUFwcGxpY2F0aW9ucyQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgIC8vICAgdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9BZGRPclVwZGF0ZUFwcGxpY2F0aW9ucyA9IHJlc3VsdDtcclxuICAgIC8vICAgaWYgKHJlc3VsdCkge1xyXG4gICAgLy8gICAgIHRoaXMuYWRtaW5Ub29scy5zb21lKChmbG93KSA9PiBmbG93Lm5hbWUgPT0gJ0N1c3RvbSBhcHBsaWNhdGlvbnMnKSA/IG51bGwgOiB0aGlzLmFkbWluVG9vbHMucHVzaCh0aGlzLmN1c3RhcHApO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KVxyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9BZGRPclVwZGF0ZUZvcm0kID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5kb2VzVXNlckhhdmVQZXJtaXNzaW9uLCB7IGZlYXR1cmVJZDogRmVhdHVyZUlkcy5GZWF0dXJlX0FkZE9yVXBkYXRlRm9ybSB9KSk7XHJcbiAgICAvLyB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX0FkZE9yVXBkYXRlRm9ybSQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgIC8vICAgdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9BZGRPclVwZGF0ZUZvcm0gPSByZXN1bHQ7XHJcbiAgICAvLyAgIGlmIChyZXN1bHQpIHtcclxuICAgIC8vICAgICB0aGlzLmFkbWluVG9vbHMuc29tZSgoZmxvdykgPT4gZmxvdy5uYW1lID09ICdGb3JtcycpID8gbnVsbCA6IHRoaXMuYWRtaW5Ub29scy5wdXNoKHRoaXMuZm9ybXMpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KVxyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9WaWV3Rm9ybXMkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5kb2VzVXNlckhhdmVQZXJtaXNzaW9uLCB7IGZlYXR1cmVJZDogRmVhdHVyZUlkcy5GZWF0dXJlX1ZpZXdGb3JtcyB9KSk7ICAgIC8vIC8vdGhpcy5yb3V0ZS51cmwuc3Vic2NyaWJlKCh1cmwpID0+IHRoaXMudXJsID0gdXJsLnRvU3RyaW5nKCkpO1xyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9WaWV3Rm9ybXMkLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfVmlld0Zvcm1zID0gcmVzdWx0O1xyXG4gICAgLy8gICBpZiAocmVzdWx0KSB7XHJcbiAgICAvLyAgICAgdGhpcy5hZG1pblRvb2xzLnNvbWUoKGZsb3cpID0+IGZsb3cubmFtZSA9PSAnRm9ybXMnKSA/IG51bGwgOiB0aGlzLmFkbWluVG9vbHMucHVzaCh0aGlzLmZvcm1zKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSlcclxuICAgIC8vIHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfTWFuYWdlUHJvamVjdFJvbGVQZXJtaXNzaW9ucyQgPSB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNoYXJlZE1vZHVsZVJlZHVjZXJzLmRvZXNVc2VySGF2ZVBlcm1pc3Npb24sIHsgZmVhdHVyZUlkOiBGZWF0dXJlSWRzLkZlYXR1cmVfTWFuYWdlUHJvamVjdFJvbGVQZXJtaXNzaW9ucyB9KSk7XHJcbiAgICAvLyB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX01hbmFnZVByb2plY3RSb2xlUGVybWlzc2lvbnMkLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfTWFuYWdlUHJvamVjdFJvbGVQZXJtaXNzaW9ucyA9IHJlc3VsdDtcclxuICAgIC8vICAgaWYgKHJlc3VsdCkge1xyXG4gICAgLy8gICAgIHRoaXMuYWRtaW5Ub29scy5zb21lKChmbG93KSA9PiBmbG93Lm5hbWUgPT0gJ1Byb2plY3Qgcm9sZSBjb25maWd1cmF0aW9uJykgPyBudWxsIDogdGhpcy5hZG1pblRvb2xzLnB1c2godGhpcy5wcm9qZWN0Um9sZUNvbmZpZ3VyYXRpb24pO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KVxyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9WaWV3Um9sZXMkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5kb2VzVXNlckhhdmVQZXJtaXNzaW9uLCB7IGZlYXR1cmVJZDogRmVhdHVyZUlkcy5GZWF0dXJlX1ZpZXdSb2xlcyB9KSk7XHJcbiAgICAvLyB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX1ZpZXdSb2xlcyQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgIC8vICAgdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9WaWV3Um9sZXMgPSByZXN1bHQ7XHJcbiAgICAvLyAgIGlmIChyZXN1bHQpIHtcclxuICAgIC8vICAgICB0aGlzLmFkbWluVG9vbHMuc29tZSgoZmxvdykgPT4gZmxvdy5uYW1lID09ICdSb2xlIGNvbmZpZ3VyYXRpb24nKSA/IG51bGwgOiB0aGlzLmFkbWluVG9vbHMucHVzaCh0aGlzLnJvbGVDb25maWd1cmF0aW9uKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSlcclxuICAgIC8vIHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfQ2FuRWRpdE90aGVyRW1wbG95ZWVEZXRhaWxzJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2hhcmVkTW9kdWxlUmVkdWNlcnMuZG9lc1VzZXJIYXZlUGVybWlzc2lvbiwgeyBmZWF0dXJlSWQ6IEZlYXR1cmVJZHMuRmVhdHVyZV9DYW5FZGl0T3RoZXJFbXBsb3llZURldGFpbHMgfSkpO1xyXG4gICAgLy8gdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9DYW5FZGl0T3RoZXJFbXBsb3llZURldGFpbHMkLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgLy8gICB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX0NhbkVkaXRPdGhlckVtcGxveWVlRGV0YWlscyA9IHJlc3VsdDtcclxuICAgIC8vICAgaWYgKHJlc3VsdCkge1xyXG4gICAgLy8gICAgLy8gdGhpcy5nZXRBbGxFbXBsb3llZXMoKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSlcclxuICAgIHRoaXMudG9vbHMgPSB0aGlzLmFkbWluVG9vbHM7XHJcbiAgICAvL3RoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IDA7XHJcbiAgICAvL3RoaXMuZ2V0QWxsRW1wbG95ZWVzKCk7XHJcbiAgICAvLyB0aGlzLmxvYWRXaWRnZXRzTGlzdChudWxsKTtcclxuICAgIC8vIHRoaXMubG9hZFdvcmtzcGFjZXNMaXN0KCk7XHJcbiAgICB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgPSBbXTtcclxuICAgIHRoaXMuZ29hbFNlYXJjaExpc3QgPSBbXTtcclxuICAgIC8vIGlmKHRoaXMuaXRlbXMubGVuZ3RoPjApIHtcclxuICAgIC8vICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gMDsgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbMF07XHJcbiAgICAvLyB9IGVsc2UgaWYodGhpcy50b29scy5sZW5ndGg+MCkge1xyXG4gICAgLy8gICB0aGlzLnQ9MDsgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudG9vbHNbMF07XHJcbiAgICAvLyB9IGVsc2UgaWYodGhpcy53b3Jrc3BhY2VzLmxlbmd0aD4wKSB7XHJcbiAgICAvLyAgIHRoaXMud3MgPSAwOyB0aGlzLml0ZW1DbGlja2VkID10aGlzLndvcmtzcGFjZXNbMF07XHJcbiAgICAvLyB9ICBcclxuXHJcbiAgICB0aGlzLlNlYXJjaEl0ZW0gPSBfLmRlYm91bmNlKHRoaXMuU2VhcmNoSXRlbSwgMTAwMCk7XHJcbiAgICB0aGlzLnJvdXRlcy5ldmVudHNcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlckFjdGl2ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3BlbkluZm8oaW5mb1BvcE92ZXIpIHtcclxuICAgIGluZm9Qb3BPdmVyLm9wZW5Qb3BvdmVyKCk7XHJcbiAgfVxyXG5cclxuICAvLyBnZXRBbGxQcm9qZWN0cygpIHtcclxuICAvLyAgIGNvbnN0IHByb2plY3RTZWFyY2hSZXN1bHQgPSBuZXcgUHJvamVjdFNlYXJjaENyaXRlcmlhSW5wdXRNb2RlbCgpO1xyXG4gIC8vICAgcHJvamVjdFNlYXJjaFJlc3VsdC5pc0FyY2hpdmVkID0gZmFsc2U7XHJcbiAgLy8gICB0aGlzLmNvbW1vblNlcnZpY2Uuc2VhcmNoUHJvamVjdHMocHJvamVjdFNlYXJjaFJlc3VsdCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgLy8gICAgIGlmIChyZXNwb25zZS5zdWNjZXNzID09IHRydWUpIHtcclxuICAvLyAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xyXG4gIC8vICAgICAgICAgdGhpcy5wcm9qZWN0U2VhcmNoUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGVsc2Uge1xyXG4gIC8vICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSByZXNwb25zZS5hcGlSZXNwb25zZU1lc3NhZ2VzWzBdLm1lc3NhZ2U7XHJcbiAgLy8gICAgICAgdGhpcy5wcm9qZWN0U2VhcmNoUmVzdWx0cyA9IFtdO1xyXG4gIC8vICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KVxyXG4gIC8vIH1cclxuXHJcbiAgZ2V0Q29tcGFueVNldHRpbmdzKCkge1xyXG4gICAgbGV0IGNvbXBhbnlTZXR0aW5nc01vZGVsID0gW107XHJcbiAgICB0aGlzLmNvbXBhbnlTZXR0aW5nc01PZGVsJCA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2hhcmVkTW9kdWxlUmVkdWNlcnMuZ2V0Q29tcGFueVNldHRpbmdzKSk7XHJcbiAgICB0aGlzLmNvbXBhbnlTZXR0aW5nc01PZGVsJC5zdWJzY3JpYmUoKHgpID0+IGNvbXBhbnlTZXR0aW5nc01vZGVsID0geCk7XHJcbiAgICBsZXQgYnVnQm9hcmRSZXN1bHQgPSBjb21wYW55U2V0dGluZ3NNb2RlbC5maWx0ZXIoaXRlbSA9PiBpdGVtLmtleS50cmltKCkgPT0gXCJFbmFibGVCdWdCb2FyZFwiKTtcclxuICAgIGlmIChidWdCb2FyZFJlc3VsdCAmJiBidWdCb2FyZFJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaXNFbmFibGVCdWdCb2FyZCA9IGJ1Z0JvYXJkUmVzdWx0WzBdLnZhbHVlID09IFwiMVwiID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29tcGFueU1haW5Mb2dvID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtYWlubG9nb1wiKSAhPSBudWxsID8gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtYWlubG9nb1wiKS52YWx1ZSA6IHRoaXMuY29tcGFueU1haW5Mb2dvO1xyXG4gICAgdGhpcy5jb21wYW55TWluaUxvZ28gPSBjb21wYW55U2V0dGluZ3NNb2RlbC5maW5kKHggPT4geC5rZXkudG9Mb3dlckNhc2UoKSA9PSBcIm1pbmlsb2dvXCIpICE9IG51bGwgPyBjb21wYW55U2V0dGluZ3NNb2RlbC5maW5kKHggPT4geC5rZXkudG9Mb3dlckNhc2UoKSA9PSBcIm1pbmlsb2dvXCIpLnZhbHVlIDogdGhpcy5jb21wYW55TWluaUxvZ287XHJcblxyXG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaG9ydGN1dC1mYXYtaWNvbicpKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaG9ydGN1dC1mYXYtaWNvbicpLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdGhpcy5jb21wYW55TWluaUxvZ28pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZFNlYXJjaERhdGEoKSB7XHJcbiAgICB2YXIgbWVudUl0ZW1zID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLk1lbnVJdGVtcykpXHJcbiAgICBpZiAobWVudUl0ZW1zICYmIG1lbnVJdGVtcyAhPSBcIm51bGxcIikge1xyXG4gICAgICB0aGlzLm1lbnVJdGVtID0gbWVudUl0ZW1zO1xyXG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5tZW51SXRlbS5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgIT0gXCJkcm9wRG93blwiKTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbMF07XHJcbiAgICB9XHJcbiAgICB2YXIgd2lkZ2V0cyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5GYXZvdXJpdGVXaWRnZXRzKSk7XHJcbiAgICBpZiAod2lkZ2V0cyAmJiB3aWRnZXRzICE9IFwibnVsbFwiKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMub3JpZ2luYWxXaWRnZXRzID0gd2lkZ2V0cztcclxuICAgIH1cclxuICAgIHZhciByZWNlbnRTZWFyY2hlcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5SZWNlbnRTZWFyY2hlcykpO1xyXG4gICAgaWYgKHJlY2VudFNlYXJjaGVzICYmIHJlY2VudFNlYXJjaGVzICE9IFwibnVsbFwiKSB7XHJcbiAgICAgIHRoaXMuYWxsc2VhcmNoZXMgPSB0aGlzLnJlY2VudFNlYXJjaGVzID0gcmVjZW50U2VhcmNoZXM7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHRyYW5zbGF0ZWFwcGxpY2F0aW9ubmFtZShpdGVtKSB7XHJcbiAgICBpZiAoaXRlbSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdmFyIGxvY2FsdmFyaWFibGUgPSBpdGVtLnRyaW0oKTtcclxuICAgIHZhciBuYW1lID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXCJBUFAuXCIgKyBsb2NhbHZhcmlhYmxlKTtcclxuICAgIGlmIChuYW1lLmluZGV4T2YoXCJBUFAuXCIpICE9IC0xKSB7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Gb2N1cygpIHtcclxuICAgIGlmICghdGhpcy5zZWFyY2hCeUlkICYmICF0aGlzLnNlYXJjaEJ5VGV4dCkge1xyXG4gICAgICB2YXIgcmV0cmlldmVEYXNoYm9hcmRzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgdmFyIGRhc2hib2FyZHMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRhc2hib2FyZHMpO1xyXG4gICAgICBpZiAoZGFzaGJvYXJkcyAmJiBkYXNoYm9hcmRzICE9IFwibnVsbFwiKSB7XHJcbiAgICAgICAgcmV0cmlldmVEYXNoYm9hcmRzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy53b3Jrc3BhY2VzRm9yTG9vcCA9IEpTT04ucGFyc2UoZGFzaGJvYXJkcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkge1xyXG4gICAgICAgICAgdGhpcy53b3Jrc3BhY2VzID0gdGhpcy53b3Jrc3BhY2VzRm9yTG9vcC5maWx0ZXIoXHJcbiAgICAgICAgICAgIGl0ZW0gPT5cclxuICAgICAgICAgICAgICBpdGVtLndvcmtzcGFjZU5hbWVcclxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpICE9PVxyXG4gICAgICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLndvcmtzcGFjZXMgPSB0aGlzLndvcmtzcGFjZXNGb3JMb29wO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoISh0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5TZWFyY2hDbGljaykgJiYgSlNPTi5wYXJzZSh0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuU2VhcmNoQ2xpY2spKSA9PSB0cnVlKSkge1xyXG4gICAgICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5TZWFyY2hDbGljaywgSlNPTi5zdHJpbmdpZnkodHJ1ZSksIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgICAgLy8gdGhpcy5sb2FkV2lkZ2V0c0xpc3QobnVsbCk7XHJcbiAgICAgICAgLy8gdGhpcy5sb2FkV29ya3NwYWNlc0xpc3QoKTtcclxuICAgICAgICAvLyB0aGlzLmdldEFsbE1lbnVJdGVtcygpO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmdTZWFyY2hNZW51RGF0YSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yc3Muc2VhcmNoTWVudURhdGEocmV0cmlldmVEYXNoYm9hcmRzKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzICYmIHJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLndvcmtzcGFjZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMud29ya3NwYWNlcyA9IHJlcy5kYXRhLndvcmtzcGFjZXM7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkRhc2hib2FyZHMsIEpTT04uc3RyaW5naWZ5KHRoaXMud29ya3NwYWNlcykpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53b3Jrc3BhY2VzRm9yTG9vcCA9IHRoaXMud29ya3NwYWNlcztcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5kZWZhdWx0RGFzaGJvYXJkID0gdGhpcy53b3Jrc3BhY2VzLmZpbmQoaSA9PiBpLmlzRGVmYXVsdCA9PSB0cnVlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLndpZGdldHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxXaWRnZXRzID0gcmVzLmRhdGEud2lkZ2V0cy5zb3J0KChhLCBiKSA9PlxyXG4gICAgICAgICAgICAgICAgICBhLndpZGdldE5hbWUudG9Mb3dlckNhc2UoKSA+IGIud2lkZ2V0TmFtZS50b0xvd2VyQ2FzZSgpID8gMSA6IC0xXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy5vcmlnaW5hbFdpZGdldHM7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkZhdm91cml0ZVdpZGdldHMsIEpTT04uc3RyaW5naWZ5KHRoaXMud2lkZ2V0cykpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocmVzLmRhdGEubWVudUl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgYXBwbGljYXRpb25zID0gcmVzLmRhdGEubWVudUl0ZW1zLmZpbHRlcihmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgLy8gICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIHgubWVudUNhdGVnb3J5ICYmXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgTWVudUNhdGVnb3JpZXMuTWFpbiAmJlxyXG4gICAgICAgICAgICAgICAgLy8gICAgIHgubWVudUNhdGVnb3J5LnRvTG93ZXJDYXNlKCkgPT09IE1lbnVDYXRlZ29yaWVzLk1haW4udG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgLy8gICApO1xyXG4gICAgICAgICAgICAgICAgLy8gfSlcclxuICAgICAgICAgICAgICAgIHRoaXMubWVudUl0ZW0gPSByZXMuZGF0YS5tZW51SXRlbXM7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLk1lbnVJdGVtcywgSlNPTi5zdHJpbmdpZnkodGhpcy5tZW51SXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMubWVudUl0ZW0uZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlICE9IFwiZHJvcERvd25cIik7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAocmVzLmRhdGEucmVjZW50U2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsbHNlYXJjaGVzID0gcmVzLmRhdGEucmVjZW50U2VhcmNoO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNlbnRTZWFyY2hlcyA9IHRoaXMuYWxsc2VhcmNoZXM7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlJlY2VudFNlYXJjaGVzLCBKU09OLnN0cmluZ2lmeSh0aGlzLmFsbHNlYXJjaGVzKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Mb2FkRmF2b3VyaXRlV2lkZ2V0cywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpLCBudWxsLCBlbnZpcm9ubWVudC5jb29raWVQYXRoLCB0aGlzLndpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwgZmFsc2UsIFwiU3RyaWN0XCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Mb2FkUmVjZW50U2VhcmNoZXMsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgICAgICAgICB0aGlzLnJvdXRlckFjdGl2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1NlYXJjaE1lbnVEYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvYWRTZWFyY2hEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gZWxzZSB7XHJcbiAgICAgIC8vICAgaWYgKCEodGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuTG9hZEZhdm91cml0ZVdpZGdldHMpICYmIEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkxvYWRGYXZvdXJpdGVXaWRnZXRzKSkgPT0gZmFsc2UpKSB7XHJcbiAgICAgIC8vICAgICB0aGlzLmxvYWRXaWRnZXRzTGlzdChudWxsLCB0cnVlKTtcclxuICAgICAgLy8gICAgIGxldCBlbnZpcm9ubWVudCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5FbnZpcm9ubWVudCkpO1xyXG4gICAgICAvLyAgICAgdGhpcy5jb29raWVTZXJ2aWNlLnNldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkxvYWRGYXZvdXJpdGVXaWRnZXRzLCBKU09OLnN0cmluZ2lmeShmYWxzZSksIG51bGwsIGVudmlyb25tZW50LmNvb2tpZVBhdGgsIHRoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLCBmYWxzZSwgXCJTdHJpY3RcIik7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyAgIGlmICghKHRoaXMuY29va2llU2VydmljZS5jaGVjayhMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkxvYWRSZWNlbnRTZWFyY2hlcykgJiYgSlNPTi5wYXJzZSh0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuTG9hZFJlY2VudFNlYXJjaGVzKSkgPT0gZmFsc2UpKSB7XHJcbiAgICAgIC8vICAgICB0aGlzLmdldFJlY2VudFNlYXJjaGVzKCk7XHJcbiAgICAgIC8vICAgICBsZXQgZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW52aXJvbm1lbnQpKTtcclxuICAgICAgLy8gICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Mb2FkUmVjZW50U2VhcmNoZXMsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSwgbnVsbCwgZW52aXJvbm1lbnQuY29va2llUGF0aCwgdGhpcy53aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsIGZhbHNlLCBcIlN0cmljdFwiKTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vICAgdGhpcy5yb3V0ZXJBY3RpdmUoKTtcclxuICAgICAgLy8gfVxyXG4gICAgICB0aGlzLnJvdXRlckFjdGl2ZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaXNwbGF5ID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gIH1cclxuXHJcbiAgcm91dGVyQWN0aXZlKCkge1xyXG4gICAgaWYgKHRoaXMucm91dGVzLnVybC5pbmNsdWRlcyhcImRhc2hib2FyZC1tYW5hZ2VtZW50L2Rhc2hib2FyZFwiKSAmJiB0aGlzLnJvdXRlcy51cmwuc3BsaXQoXCIvXCIpWzNdKSB7XHJcbiAgICAgIHZhciBkYXNoYm9hcmRJZCA9IHRoaXMucm91dGVzLnVybC5zcGxpdChcIi9cIilbM107XHJcbiAgICAgIGlmIChkYXNoYm9hcmRJZCAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMud29ya3NwYWNlcy5maW5kSW5kZXgoaSA9PiBpLndvcmtzcGFjZUlkID09IGRhc2hib2FyZElkKTtcclxuICAgICAgICB0aGlzLndzID0gaW5kZXg7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbdGhpcy53c107XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5yb3V0ZXMudXJsLmluY2x1ZGVzKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvd2lkZ2V0c1wiKSAmJiB0aGlzLnJvdXRlcy51cmwuc3BsaXQoXCIvXCIpWzNdKSB7XHJcbiAgICAgIHZhciB3aWRnZXRJZCA9IHRoaXMucm91dGVzLnVybC5zcGxpdChcIi9cIilbM107XHJcbiAgICAgIGlmICh3aWRnZXRJZCAmJiB0aGlzLndpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMud2lkZ2V0cy5maW5kSW5kZXgoaSA9PiBpLndpZGdldElkID09IHdpZGdldElkKTtcclxuICAgICAgICBpZiAoaW5kZXggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLndkID0gaW5kZXg7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndzID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzW3RoaXMud2RdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZWNlbnRTZWFyY2hlcyAmJiB0aGlzLnJlY2VudFNlYXJjaGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHZhciBpbmRleFJzID0gdGhpcy5yZWNlbnRTZWFyY2hlcy5maW5kSW5kZXgoaSA9PiBpLml0ZW1JZCA9PSB3aWRnZXRJZClcclxuICAgICAgICAgIHRoaXMucnMgPSBpbmRleFJzO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53cyA9IHRoaXMud2QgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbdGhpcy5yc107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB2YXIgaW5kZXggPSB0aGlzLml0ZW1zLmZpbmRJbmRleChpID0+IHRoaXMucm91dGVzLnVybCA9PSBcIi9cIiArIGkuc3RhdGUpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSBpbmRleDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbdGhpcy5zZWxlY3RlZFJvd0luZGV4XTtcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkV29ya3NwYWNlc0xpc3QoKSB7XHJcbiAgICB0aGlzLndvcmtzcGFjZXNmZXRjaEluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgdmFyIHdvcmtzcGFjZWxpc3QgPSBuZXcgV29ya3NwYWNlTGlzdCgpO1xyXG4gICAgd29ya3NwYWNlbGlzdC53b3Jrc3BhY2VJZCA9IFwibnVsbFwiO1xyXG4gICAgd29ya3NwYWNlbGlzdC5pc0hpZGRlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5jb21tb25TZXJ2aWNlLkdldFdvcmtzcGFjZUxpc3Qod29ya3NwYWNlbGlzdCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLndvcmtzcGFjZXMgPSByZXN1bHQuZGF0YTtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EYXNoYm9hcmRzLCBKU09OLnN0cmluZ2lmeShyZXN1bHQuZGF0YSkpO1xyXG4gICAgICB0aGlzLndvcmtzcGFjZXNGb3JMb29wID0gdGhpcy53b3Jrc3BhY2VzO1xyXG4gICAgICB0aGlzLmRlZmF1bHREYXNoYm9hcmQgPSB0aGlzLndvcmtzcGFjZXMuZmluZChpID0+IGkuaXNEZWZhdWx0ID09IHRydWUpO1xyXG4gICAgICB0aGlzLndvcmtzcGFjZXNmZXRjaEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gICAgLy8gdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTG9hZFdvcmtzcGFjZXNMaXN0VHJpZ2dlcmVkKHRoaXMud29ya3NwYWNlbGlzdCkpO1xyXG4gIH07XHJcblxyXG4gIG9wZW5BcHBzKCkge1xyXG4gICAgdGhpcy5yb3V0ZXMubmF2aWdhdGUoW1wiYXBwLXN0b3JlL3dpZGdldHNcIl0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFdpZGdldHNMaXN0KHNlYXJjaFRleHQsIHN0b3JlID0gZmFsc2UpIHtcclxuICAgIHRoaXMud2lkZ2V0c2ZldGNoSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB0aGlzLndpZGdldCA9IG5ldyBXaWRnZXRMaXN0KCk7XHJcbiAgICB0aGlzLndpZGdldC53aWRnZXRJZCA9IFwibnVsbFwiO1xyXG4gICAgdGhpcy53aWRnZXQuaXNBcmNoaXZlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy53aWRnZXQucGFnZU51bWJlciA9IG51bGw7XHJcbiAgICB0aGlzLndpZGdldC5wYWdlU2l6ZSA9IG51bGw7XHJcbiAgICB0aGlzLndpZGdldC5zb3J0RGlyZWN0aW9uQXNjID0gdHJ1ZTtcclxuICAgIHRoaXMud2lkZ2V0LmlzRmF2b3VyaXRlV2lkZ2V0ID0gdHJ1ZTtcclxuICAgIGlmIChzZWFyY2hUZXh0KVxyXG4gICAgICB0aGlzLndpZGdldC5zZWFyY2hUZXh0ID0gc2VhcmNoVGV4dDtcclxuXHJcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuR2V0V2lkZ2V0c0Jhc2VkT25Vc2VyKHRoaXMud2lkZ2V0KS5zdWJzY3JpYmUoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMud2lkZ2V0cyA9IFtdO1xyXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsV2lkZ2V0cyA9IHJlc3VsdC5kYXRhLnNvcnQoKGEsIGIpID0+XHJcbiAgICAgICAgICBhLndpZGdldE5hbWUudG9Mb3dlckNhc2UoKSA+IGIud2lkZ2V0TmFtZS50b0xvd2VyQ2FzZSgpID8gMSA6IC0xXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLndpZGdldHMgPSB0aGlzLm9yaWdpbmFsV2lkZ2V0cztcclxuICAgICAgICBpZiAoc3RvcmUpIHtcclxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRmF2b3VyaXRlV2lkZ2V0cywgSlNPTi5zdHJpbmdpZnkodGhpcy53aWRnZXRzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2lkZ2V0c2ZldGNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgdmFyIGNvbXBhbnlTZXR0aW5nc01vZGVsID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlTZXR0aW5ncykpO1xyXG5cclxuICAgIHRoaXMuY29tcGFueU1haW5Mb2dvID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtYWlubG9nb1wiKSAhPSBudWxsID8gY29tcGFueVNldHRpbmdzTW9kZWwuZmluZCh4ID0+IHgua2V5LnRvTG93ZXJDYXNlKCkgPT0gXCJtYWlubG9nb1wiKS52YWx1ZSA6IHRoaXMuY29tcGFueU1haW5Mb2dvO1xyXG4gICAgdGhpcy5jb21wYW55TWluaUxvZ28gPSBjb21wYW55U2V0dGluZ3NNb2RlbC5maW5kKHggPT4geC5rZXkudG9Mb3dlckNhc2UoKSA9PSBcIm1pbmlsb2dvXCIpICE9IG51bGwgPyBjb21wYW55U2V0dGluZ3NNb2RlbC5maW5kKHggPT4geC5rZXkudG9Mb3dlckNhc2UoKSA9PSBcIm1pbmlsb2dvXCIpLnZhbHVlIDogdGhpcy5jb21wYW55TWluaUxvZ287XHJcbiAgICAvLyB0aGlzLmNvbXBhbnlNYWluTG9nbyA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TWFpbkxvZ28pO1xyXG4gICAgLy8gdGhpcy5jb21wYW55TWluaUxvZ28gPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueU1pbmlMb2dvKTtcclxuXHJcbiAgICBpZiAodGhpcy5jb21wYW55TWFpbkxvZ28gPT0gXCJcIiB8fCB0aGlzLmNvbXBhbnlNYWluTG9nbyA9PSBudWxsIHx8IHRoaXMuY29tcGFueU1haW5Mb2dvID09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmNvbXBhbnlNYWluTG9nbyA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Db21wYW55TWFpbkxvZ28pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY29tcGFueU1pbmlMb2dvID09IFwiXCIgfHwgdGhpcy5jb21wYW55TWluaUxvZ28gPT0gbnVsbCB8fCB0aGlzLmNvbXBhbnlNaW5pTG9nbyA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jb21wYW55TWluaUxvZ28gPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueU1pbmlMb2dvKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nob3J0Y3V0LWZhdi1pY29uJykpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nob3J0Y3V0LWZhdi1pY29uJykuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCB0aGlzLmNvbXBhbnlNaW5pTG9nbyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0QWxsRW1wbG95ZWVzKCkge1xyXG4gICAgdGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9DYW5FZGl0T3RoZXJFbXBsb3llZURldGFpbHMkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5kb2VzVXNlckhhdmVQZXJtaXNzaW9uLCB7IGZlYXR1cmVJZDogRmVhdHVyZUlkcy5GZWF0dXJlX0NhbkVkaXRPdGhlckVtcGxveWVlRGV0YWlscyB9KSk7XHJcbiAgICB0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX0NhbkVkaXRPdGhlckVtcGxveWVlRGV0YWlscyQuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfQ2FuRWRpdE90aGVyRW1wbG95ZWVEZXRhaWxzID0gcmVzdWx0O1xyXG4gICAgfSlcclxuICAgIGxldCBlbXBsb3llZVNwZW50VGltZSA9IG5ldyBFbXBsb3llZUxpc3RJbnB1dCgpO1xyXG4gICAgZW1wbG95ZWVTcGVudFRpbWUuc29ydERpcmVjdGlvbkFzYyA9IHRydWU7XHJcbiAgICBlbXBsb3llZVNwZW50VGltZS5pc0FjdGl2ZSA9IHRydWU7XHJcbiAgICAvLyB0aGlzLmhyRGFzaGJvYXJTZXJ2aWNlLkdldEFsbEVtcGxveWVlcyhlbXBsb3llZVNwZW50VGltZSkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgLy8gICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgIC8vICAgICB0aGlzLmxvYWRlZEVtcGxveWVlTGlzdCA9IHJlc3VsdC5kYXRhO1xyXG4gICAgLy8gICAgIGlmICghKHRoaXMuY2FuQWNjZXNzX2ZlYXR1cmVfQ2FuRWRpdE90aGVyRW1wbG95ZWVEZXRhaWxzKSkge1xyXG4gICAgLy8gICAgICAgdmFyIGN1cnJlbnRVc2VySWQgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudFVzZXJJZCk7XHJcbiAgICAvLyAgICAgICB0aGlzLmxvYWRlZEVtcGxveWVlTGlzdCA9IHRoaXMubG9hZGVkRW1wbG95ZWVMaXN0LmZpbHRlcih4ID0+ICh4LnVzZXJJZC50b0xvd2VyQ2FzZSgpID09IGN1cnJlbnRVc2VySWQudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICB0aGlzLmVtcGxveWVlTGlzdCA9IHRoaXMubG9hZGVkRW1wbG95ZWVMaXN0O1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KVxyXG5cclxuICAgIGNvbnN0IGVtcGxveWVlTGlzdFNlYXJjaFJlc3VsdCA9IG5ldyBFbXBsb3llZUxpc3RNb2RlbCgpO1xyXG4gICAgZW1wbG95ZWVMaXN0U2VhcmNoUmVzdWx0LnNvcnREaXJlY3Rpb25Bc2MgPSB0cnVlO1xyXG4gICAgdGhpcy5jb21tb25TZXJ2aWNlLmdldEFsbEVtcGxveWVlcyhlbXBsb3llZUxpc3RTZWFyY2hSZXN1bHQpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkZWRFbXBsb3llZUxpc3QgPSByZXN1bHQuZGF0YTtcclxuICAgICAgICBpZiAoISh0aGlzLmNhbkFjY2Vzc19mZWF0dXJlX0NhbkVkaXRPdGhlckVtcGxveWVlRGV0YWlscykpIHtcclxuICAgICAgICAgIHZhciBjdXJyZW50VXNlcklkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWRFbXBsb3llZUxpc3QgPSB0aGlzLmxvYWRlZEVtcGxveWVlTGlzdC5maWx0ZXIoeCA9PiAoeC51c2VySWQudG9Mb3dlckNhc2UoKSA9PSBjdXJyZW50VXNlcklkLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5lbXBsb3llZUxpc3QgPSB0aGlzLmxvYWRlZEVtcGxveWVlTGlzdDtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgLy8gbmdBZnRlclZpZXdJbml0KCkge1xyXG4gIC8vICAgdGhpcy5lID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgLy8gICBsZXQgb3V0U2lkZUNsaWNrID0gIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywoKT0+e1xyXG4gIC8vICAgICB0aGlzLmRpc3BsYXkgPSBmYWxzZTtcclxuICAvLyB9KTtcclxuICAvLyB9XHJcblxyXG4gIE9wZW5NZW51SXRlbXMob3Blbk1lbnVQb3BVcCkge1xyXG4gICAgb3Blbk1lbnVQb3BVcC5vcGVuUG9wb3ZlcigpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkxldmVsMk1lbnUobGluaywgZXZlbnQpIHtcclxuICAgIHRoaXMuc3RhdGVMdmwxID0gbGluaztcclxuICAgIHRoaXMuc3ViTGV2ZWxzID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBvcGVuTGV2ZWwzTWVudShsaW5rMSwgbGluazIsIGV2ZW50KSB7XHJcbiAgICB0aGlzLmxldmVsM0xpbmsxID0gbGluazE7XHJcbiAgICB0aGlzLmxldmVsM0xpbmsyID0gbGluazI7XHJcbiAgICB0aGlzLnN1YkxldmVsc0ZvckxldmVsMiA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsTWVudUl0ZW1zKCkge1xyXG4gICAgdGhpcy5tZW51c2ZldGNoSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBHZXRBbGxNZW51SXRlbXNUcmlnZ2VyZWQoTWVudUNhdGVnb3JpZXMuTWFpbikpO1xyXG4gICAgY29uc3QgdXNlclJlZmVyZW5jZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlclJlZmVyZW5jZUlkKTtcclxuICAgIHRoaXMuZGVmYXVsdERhc2hib2FyZElkID0gdGhpcy5jb29raWVTZXJ2aWNlLmNoZWNrKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRGVmYXVsdERhc2hib2FyZCkgPyBKU09OLnBhcnNlKHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5EZWZhdWx0RGFzaGJvYXJkKSkgOiBudWxsOztcclxuICAgIGlmICh0aGlzLmRlZmF1bHREYXNoYm9hcmRJZCAmJiB1c2VyUmVmZXJlbmNlICE9IFwibnVsbFwiICYmIHVzZXJSZWZlcmVuY2UgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvZGFzaGJvYXJkL1wiICsgdGhpcy5kZWZhdWx0RGFzaGJvYXJkSWQgKyBcIi9mb3JtL1wiICsgdXNlclJlZmVyZW5jZSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdERhc2hib2FyZElkKSB7XHJcbiAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyB0aGlzLmRlZmF1bHREYXNoYm9hcmRJZCk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFwibGl2ZXMvd2VsY29tZVwiKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9Vcmwod29ya3NwYWNlSWQpIHtcclxuICAgIGNvbnN0IHVzZXJSZWZlcmVuY2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJSZWZlcmVuY2VJZCk7XHJcbiAgICBpZiAodXNlclJlZmVyZW5jZSAhPSBcIm51bGxcIiAmJiB1c2VyUmVmZXJlbmNlICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGVCeVVybChcImRhc2hib2FyZC1tYW5hZ2VtZW50L2Rhc2hib2FyZC9cIiArIHdvcmtzcGFjZUlkICsgXCIvZm9ybS9cIiArIHVzZXJSZWZlcmVuY2UpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGVCeVVybChcImRhc2hib2FyZC1tYW5hZ2VtZW50L2Rhc2hib2FyZC9cIiArIHdvcmtzcGFjZUlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNvZnRMYWJlbENvbmZpZ3VyYXRpb25zKCkge1xyXG4gICAgdGhpcy5zb2Z0TGFiZWxzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU29mdExhYmVscycpKTtcclxuICAgIHRoaXMuY2RSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hNZW51SXRlbXMoKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hCeVRleHQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hCeVRleHRMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yc3MuZ2V0U2VhcmNoTWVudUl0ZW1zKHsgc2VhcmNoVGV4dDogdGhpcy5zZWFyY2hUZXh0LCBzZWFyY2hVbmlxdWVJZDogbnVsbCB9KVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEgIT0gbnVsbCAmJiByZXNwb25zZS5kYXRhICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0TGlzdCA9IHJlc3BvbnNlLmRhdGEuZmlsdGVyKHVzID0+IHVzLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLlByb2plY3QpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ID0gcmVzcG9uc2UuZGF0YS5maWx0ZXIodXMgPT4gKHVzLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcpIHx8ICh1cy5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5hZGhvYykpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb2FsU2VhcmNoTGlzdCA9IHJlc3BvbnNlLmRhdGEuZmlsdGVyKHVzID0+IHVzLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgKHVzLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcnMgPSByZXNwb25zZS5kYXRhLmZpbHRlcih1cyA9PiB1cy5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5FbXBsb3llZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZEVtcGxveWVlTGlzdCA9IHVzZXJzO1xyXG4gICAgICAgICAgICAgICAgaWYgKCEodGhpcy5jYW5BY2Nlc3NfZmVhdHVyZV9DYW5FZGl0T3RoZXJFbXBsb3llZURldGFpbHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VXNlcklkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkN1cnJlbnRVc2VySWQpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZEVtcGxveWVlTGlzdCA9IHRoaXMubG9hZGVkRW1wbG95ZWVMaXN0LmZpbHRlcigoeDogYW55KSA9PiAoeC5pdGVtSWQudG9Mb3dlckNhc2UoKSA9PSBjdXJyZW50VXNlcklkLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZW1wbG95ZWVMaXN0ID0gdGhpcy5sb2FkZWRFbXBsb3llZUxpc3Q7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9qZWN0TGlzdCAmJiB0aGlzLnByb2plY3RMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLndkID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb2plY3RJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnByb2plY3RMaXN0WzBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy53ZCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnVzZXJzID0gMDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFswXTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLndkID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy51c2VycyA9IHRoaXMucHJvamVjdEluZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy53ZCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudXNlcnMgPSB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbMF07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgPSBbXTtcclxuICAgICAgICAgICAgICB0aGlzLmdvYWxTZWFyY2hMaXN0ID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoQnlUZXh0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblByb2plY3RTZWxlY3QoaXRlbSwgZXZlbnQpIHtcclxuICAgIGlmIChldmVudC53aGljaCA9PSAxKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLnByb2plY3RMaXN0ID0gW107XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKGl0ZW0uaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUucHJvamVjdCwgaXRlbS5pdGVtSWQpO1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFwicHJvamVjdHMvcHJvamVjdHN0YXR1cy9cIiArIGl0ZW0uaXRlbUlkICsgXCIvYWN0aXZlLWdvYWxzXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgU2VhcmNoSXRlbShldmVudCkge1xyXG4gICAgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ID0gW107XHJcbiAgICB0aGlzLmdvYWxTZWFyY2hMaXN0ID0gW107XHJcbiAgICB0aGlzLnRoZW1lQmFzZUNvbG9yID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RoZW1lQ29sb3InKTtcclxuICAgIHZhciBlbGVtZW50ID1cclxuICAgICAgISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIik7XHJcbiAgICBlbGVtZW50ID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbFRvcCA9IDAgOiBudWxsO1xyXG4gICAgdmFyIGVsZW0gPVxyXG4gICAgICAhIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKTtcclxuICAgIGVsZW0gPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsVG9wID0gMCA6IG51bGw7XHJcbiAgICB2YXIgZW1wID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIik7XHJcbiAgICBlbXAgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIikuc2Nyb2xsVG9wID0gMCA6IG51bGw7XHJcbiAgICB2YXIgd2lkZ2V0ID0gISFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIik7XHJcbiAgICB3aWRnZXQgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMCA6IG51bGw7XHJcbiAgICAvL3RoaXMuZGlzcGxheSA9IHRydWU7XHJcbiAgICB0aGlzLmlzT3BlbmVkLmVtaXQodGhpcy5kaXNwbGF5KTtcclxuICAgIGlmIChldmVudC50YXJnZXQudmFsdWUpIHtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoQnlUZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VhcmNoTWVudUl0ZW1zKCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5zZWFyY2hCeUlkKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLm1lbnVJdGVtLmZpbHRlcihcclxuICAgICAgICBpdGVtID0+XHJcbiAgICAgICAgICBpdGVtLm1lbnUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC50YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKSkgIT09XHJcbiAgICAgICAgICBmYWxzZSAmJiBpdGVtLnR5cGUgIT0gXCJkcm9wRG93blwiXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMud29ya3NwYWNlcyA9IHRoaXMud29ya3NwYWNlc0Zvckxvb3AuZmlsdGVyKFxyXG4gICAgICAgIGl0ZW0gPT5cclxuICAgICAgICAgIGl0ZW0ud29ya3NwYWNlTmFtZVxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAuaW5jbHVkZXMoZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PVxyXG4gICAgICAgICAgZmFsc2VcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5hZG1pblRvb2xzID8gdGhpcy50b29scyA9IHRoaXMuYWRtaW5Ub29scy5maWx0ZXIoXHJcbiAgICAgICAgaXRlbSA9PlxyXG4gICAgICAgICAgaXRlbS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PVxyXG4gICAgICAgICAgZmFsc2VcclxuICAgICAgKSA6IG51bGw7XHJcbiAgICAgIC8vdGhpcy5sb2FkV2lkZ2V0c0xpc3QoZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgdGhpcy5vcmlnaW5hbFdpZGdldHMgPyB0aGlzLndpZGdldHMgPSB0aGlzLm9yaWdpbmFsV2lkZ2V0cy5maWx0ZXIoXHJcbiAgICAgICAgaXRlbSA9PlxyXG4gICAgICAgICAgaXRlbS53aWRnZXROYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PVxyXG4gICAgICAgICAgZmFsc2VcclxuICAgICAgKSA6IG51bGw7XHJcbiAgICAgIHRoaXMuZW1wbG95ZWVMaXN0ID0gdGhpcy5sb2FkZWRFbXBsb3llZUxpc3QubGVuZ3RoID4gMCA/ICh0aGlzLmxvYWRlZEVtcGxveWVlTGlzdC5maWx0ZXIoeCA9PlxyXG4gICAgICAoKHguZnVsbE5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC50YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKSkgIT09IGZhbHNlKVxyXG4gICAgICAgIHx8ICh4LmVtcGxveWVlTnVtYmVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PSBmYWxzZSlcclxuICAgICAgICB8fCAoeC5zdXJOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PSBmYWxzZSkpXHJcbiAgICAgICkpIDogbnVsbDtcclxuICAgICAgLy8gdGhpcy5hbGxzZWFyY2hlcyA/IHRoaXMucmVjZW50U2VhcmNoZXMgPSB0aGlzLmFsbHNlYXJjaGVzLmZpbHRlcihcclxuICAgICAgLy8gICBpdGVtID0+XHJcbiAgICAgIC8vICAgICBpdGVtLnJlY2VudFNlYXJjaC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZXZlbnQudGFyZ2V0LnZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PSAtMVxyXG4gICAgICAvLyApIDogbnVsbDtcclxuICAgICAgdGhpcy5hbGxzZWFyY2hlcyA/IHRoaXMucmVjZW50U2VhcmNoZXMgPSB0aGlzLmFsbHNlYXJjaGVzLmZpbHRlcihcclxuICAgICAgICBpdGVtID0+XHJcbiAgICAgICAgICBpdGVtLnJlY2VudFNlYXJjaC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnRhcmdldC52YWx1ZS50b0xvd2VyQ2FzZSgpKSAhPT1cclxuICAgICAgICAgIGZhbHNlXHJcbiAgICAgICkgOiBudWxsO1xyXG5cclxuICAgICAgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSAmJiBldmVudC50YXJnZXQudmFsdWUuc2VhcmNoKCctJykgPiAwKSB7XHJcbiAgICAgICAgdGhpcy5yc3Muc2VhcmNoR29hbFRhc2tzKGV2ZW50LnRhcmdldC52YWx1ZSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhICE9IG51bGwgJiYgcmVzcG9uc2UuZGF0YSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCA9IHJlc3BvbnNlLmRhdGEuZmlsdGVyKHVzID0+ICh1cy50eXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcpIHx8ICh1cy50eXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvYWxTZWFyY2hMaXN0ID0gcmVzcG9uc2UuZGF0YS5maWx0ZXIodXMgPT4gdXMudHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8ICh1cy50eXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoKHRoaXMuaXRlbXMubGVuZ3RoID4gMCAmJiB0aGlzLml0ZW1zKSB8fCAodGhpcy50b29scyAmJiB0aGlzLnRvb2xzLmxlbmd0aCA+IDApIHx8ICh0aGlzLndvcmtzcGFjZXMgJiYgdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApIHx8ICh0aGlzLndpZGdldHMgJiYgdGhpcy53aWRnZXRzLmxlbmd0aCA+IDApKSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLndkID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3RbMF07XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndzID0gdGhpcy50ID0gdGhpcy5ycyA9IHRoaXMud2QgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgdGhpcy5nb2FsU2VhcmNoTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAvLyAgIGNvbnN0IHVzZXJTdG9yeVNlYXJjaENyaXRlcmlhVGVtcCA9IG5ldyBVc2VyU3RvcnlTZWFyY2hDcml0ZXJpYUlucHV0TW9kZWwoKTtcclxuICAgICAgLy8gICB1c2VyU3RvcnlTZWFyY2hDcml0ZXJpYVRlbXAucGFnZVNpemUgPSAxMDAwO1xyXG4gICAgICAvLyAgIHVzZXJTdG9yeVNlYXJjaENyaXRlcmlhVGVtcC5zZWFyY2hUZXh0ID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAvLyAgIC8vLnJlcGxhY2UoL1xccy9nLCBcIlwiKTtcclxuXHJcbiAgICAgIC8vICAvLyBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlLmluZGV4T2YoJy0nKSkge1xyXG4gICAgICAvLyAgICAgdGhpcy51c2VyU2VydmljZS5zZWFyY2hVc2VyU3Rvcmllcyh1c2VyU3RvcnlTZWFyY2hDcml0ZXJpYVRlbXApLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG5cclxuICAgICAgLy8gICAgICAgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ID0gW107XHJcbiAgICAgIC8vICAgICAgIGxldCBjb21wYW55U2V0dGluZ3NNb2RlbCA9IFtdO1xyXG5cclxuICAgICAgLy8gICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSAhPSBudWxsICYmIHJlc3BvbnNlLmRhdGEgIT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlLmRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyAgICAgICAgIHZhciB1c2VyU3Rvcmllc0xpc3QgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAvLyAgICAgICAgIHRoaXMuY29tcGFueVNldHRpbmdzTU9kZWwkID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzaGFyZWRNb2R1bGVSZWR1Y2Vycy5nZXRDb21wYW55U2V0dGluZ3MpKTtcclxuICAgICAgLy8gICAgICAgICB0aGlzLmNvbXBhbnlTZXR0aW5nc01PZGVsJC5zdWJzY3JpYmUoKHgpID0+IGNvbXBhbnlTZXR0aW5nc01vZGVsID0geCk7XHJcbiAgICAgIC8vICAgICAgICAgbGV0IGJ1Z0JvYXJkUmVzdWx0ID0gY29tcGFueVNldHRpbmdzTW9kZWwuZmlsdGVyKGl0ZW0gPT4gaXRlbS5rZXkudHJpbSgpID09IFwiRW5hYmxlQnVnQm9hcmRcIik7XHJcbiAgICAgIC8vICAgICAgICAgaWYgKGJ1Z0JvYXJkUmVzdWx0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gICAgICAgICAgIHRoaXMuaXNFbmFibGVCdWdCb2FyZCA9IGJ1Z0JvYXJkUmVzdWx0WzBdLnZhbHVlID09IFwiMVwiID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAvLyAgICAgICAgIH1cclxuICAgICAgLy8gICAgICAgICBpZiAoIXRoaXMuaXNFbmFibGVCdWdCb2FyZCkge1xyXG4gICAgICAvLyAgICAgICAgICAgdXNlclN0b3JpZXNMaXN0ID0gdXNlclN0b3JpZXNMaXN0Lm1hcCgoeCkgPT4geC5pc0J1ZyA9PSBmYWxzZSk7XHJcbiAgICAgIC8vICAgICAgICAgfVxyXG5cclxuICAgICAgLy8gICAgICAgICB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgPSB1c2VyU3Rvcmllc0xpc3QubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgIC8vICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAvLyAgICAgICAgICAgICBnb2FsSWQ6IGl0ZW0uZ29hbElkLFxyXG4gICAgICAvLyAgICAgICAgICAgICBnb2FsTmFtZTogaXRlbS5nb2FsTmFtZSxcclxuICAgICAgLy8gICAgICAgICAgICAgZ29hbFNob3J0TmFtZTogaXRlbS5nb2FsU2hvcnROYW1lLFxyXG4gICAgICAvLyAgICAgICAgICAgICBnb2FsVW5pcXVlTmFtZTogaXRlbS5nb2FsVW5pcXVlTmFtZSxcclxuICAgICAgLy8gICAgICAgICAgICAgcHJvamVjdElkOiBpdGVtLnByb2plY3RJZCxcclxuICAgICAgLy8gICAgICAgICAgICAgcHJvamVjdE5hbWU6IGl0ZW0ucHJvamVjdE5hbWUsXHJcbiAgICAgIC8vICAgICAgICAgICAgIHNwcmludElkOiBpdGVtLnNwcmludElkLFxyXG4gICAgICAvLyAgICAgICAgICAgICBzcHJpbnROYW1lOiBpdGVtLnNwcmludE5hbWUsXHJcbiAgICAgIC8vICAgICAgICAgICAgIHVzZXJTdG9yeUlkOiBpdGVtLnVzZXJTdG9yeUlkLFxyXG4gICAgICAvLyAgICAgICAgICAgICB1c2VyU3RvcnlOYW1lOiBpdGVtLnVzZXJTdG9yeU5hbWUsXHJcbiAgICAgIC8vICAgICAgICAgICAgIHVzZXJTdG9yeVN0YXR1c05hbWU6IGl0ZW0udXNlclN0b3J5U3RhdHVzTmFtZSxcclxuICAgICAgLy8gICAgICAgICAgICAgdXNlclN0b3J5VHlwZU5hbWU6IGl0ZW0udXNlclN0b3J5VHlwZU5hbWUsXHJcbiAgICAgIC8vICAgICAgICAgICAgIHVzZXJTdG9yeVVuaXF1ZU5hbWU6IGl0ZW0udXNlclN0b3J5VW5pcXVlTmFtZVxyXG4gICAgICAvLyAgICAgICAgICAgfVxyXG4gICAgICAvLyAgICAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgfSk7XHJcbiAgICAgIC8vICAvLyB9XHJcblxyXG4gICAgICAvLyAgIGxldCBzZWFyY2hHb2FscyA9IG5ldyBHb2FsU2VhcmNoQ3JpdGVyaWFBcGlJbnB1dE1vZGVsKCk7XHJcbiAgICAgIC8vICAgc2VhcmNoR29hbHMuc2VhcmNoVGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcclxuICAgICAgLy8gICAvLy5yZXBsYWNlKC9cXHMvZywgXCJcIik7XHJcbiAgICAgIC8vICAgLy9pZiAoZXZlbnQudGFyZ2V0LnZhbHVlLmluZGV4T2YoJy0nKSkge1xyXG4gICAgICAvLyAgIHRoaXMudXNlclNlcnZpY2Uuc2VhcmNoR29hbHMoc2VhcmNoR29hbHMpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAvLyAgICAgdGhpcy5nb2FsU2VhcmNoTGlzdCA9IFtdO1xyXG5cclxuICAgICAgLy8gICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEgIT0gbnVsbCAmJiByZXNwb25zZS5kYXRhICE9IHVuZGVmaW5lZCAmJiByZXNwb25zZS5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gICAgICAgdGhpcy5nb2FsU2VhcmNoTGlzdCA9IHJlc3BvbnNlLmRhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgIC8vICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgLy8gICAgICAgICAgIGdvYWxJZDogaXRlbS5nb2FsSWQsXHJcbiAgICAgIC8vICAgICAgICAgICBnb2FsTmFtZTogaXRlbS5nb2FsTmFtZSxcclxuICAgICAgLy8gICAgICAgICAgIGdvYWxTaG9ydE5hbWU6IGl0ZW0uZ29hbFNob3J0TmFtZSxcclxuICAgICAgLy8gICAgICAgICAgIGdvYWxVbmlxdWVOYW1lOiBpdGVtLmdvYWxVbmlxdWVOYW1lLFxyXG4gICAgICAvLyAgICAgICAgICAgcHJvamVjdElkOiBpdGVtLnByb2plY3RJZCxcclxuICAgICAgLy8gICAgICAgICAgIHByb2plY3ROYW1lOiBpdGVtLnByb2plY3ROYW1lXHJcbiAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAvLyAgICAgICB9KTtcclxuXHJcbiAgICAgIC8vICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAvLyAgICAgfVxyXG5cclxuICAgICAgLy8gICB9KVxyXG4gICAgICAvLyAvL31cclxuXHJcbiAgICAgIC8vIGlmICghKHRoaXMuaXRlbXMubGVuZ3RoID4gMCkgJiYgISh0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSAmJiAhKHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkgJiYgISh0aGlzLndpZGdldHMubGVuZ3RoID4gMCkgJiYgISh0aGlzLnRvb2xzLmxlbmd0aCA+IDApICYmICEodGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgIGlmICghKHRoaXMuaXRlbXMubGVuZ3RoID4gMCkgJiYgISh0aGlzLnJlY2VudFNlYXJjaGVzLmxlbmd0aCA+IDApICYmICEodGhpcy53aWRnZXRzLmxlbmd0aCA+IDApICYmICEodGhpcy50b29scy5sZW5ndGggPiAwKSAmJiAhKHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy53ZCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5ycyA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy51c2VycyA9IG51bGxcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMud2QgPSB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMudG9vbHMgJiYgdGhpcy50b29scy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMud2QgPSB0aGlzLndzID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy50ID0gMDtcclxuICAgICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy50b29sc1swXTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLndvcmtzcGFjZXMgJiZcclxuICAgICAgICB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMud3MgPSAwO1xyXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbMF07XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgdGhpcy53aWRnZXRzICYmXHJcbiAgICAgICAgdGhpcy53aWRnZXRzLmxlbmd0aCA+IDBcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgICB0aGlzLndkID0gMDtcclxuICAgICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzWzBdO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIHRoaXMuZW1wbG95ZWVMaXN0ICYmXHJcbiAgICAgICAgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSBudWxsO1xyXG4gICAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLndkID0gdGhpcy5ycyA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy51c2VycyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwO1xyXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICB0aGlzLnJlY2VudFNlYXJjaGVzICYmXHJcbiAgICAgICAgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMud2QgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICAgIHRoaXMucnMgPSAwO1xyXG4gICAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5tZW51SXRlbSkge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLm1lbnVJdGVtXHJcbiAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS50eXBlICE9IFwiZHJvcERvd25cIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMud29ya3NwYWNlcyA9IHRoaXMud29ya3NwYWNlc0Zvckxvb3A7XHJcbiAgICAgIHRoaXMudG9vbHMgPSB0aGlzLmFkbWluVG9vbHM7XHJcbiAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMub3JpZ2luYWxXaWRnZXRzO1xyXG4gICAgICB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgPSBbXTtcclxuICAgICAgdGhpcy5nb2FsU2VhcmNoTGlzdCA9IFtdO1xyXG4gICAgICB0aGlzLnByb2plY3RMaXN0ID0gW107XHJcbiAgICAgIHRoaXMucmVjZW50U2VhcmNoZXMgPSB0aGlzLmFsbHNlYXJjaGVzO1xyXG4gICAgICAvL3RoaXMuZW1wbG95ZWVMaXN0ID0gKHRoaXMubG9hZGVkRW1wbG95ZWVMaXN0ICYmIHRoaXMubG9hZGVkRW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApID8gdGhpcy5sb2FkZWRFbXBsb3llZUxpc3QgOiBbXTtcclxuICAgICAgdGhpcy5lbXBsb3llZUxpc3QgPSBbXTtcclxuICAgICAgLy8gdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy50ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gMDtcclxuICAgICAgLy8gdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXMubGVuZ3RoID4gMCA/IHRoaXMuaXRlbXNbMF0gOiBudWxsO1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHQgPT0gXCJcIiA/ICh0aGlzLnNlYXJjaFRleHQgPSB1bmRlZmluZWQpIDogbnVsbDtcclxuICAgIH1cclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VTZWFyY2goZXZlbnQpIHtcclxuICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgdGhpcy5pdGVtcyA9IHRoaXMubWVudUl0ZW1cclxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSAhPSBcImRyb3BEb3duXCIpXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5tZW51LnRvTG93ZXJDYXNlKCkgPiBiLm1lbnUudG9Mb3dlckNhc2UoKSA/IDEgOiAtMSkpO1xyXG4gICAgdGhpcy53b3Jrc3BhY2VzID0gdGhpcy53b3Jrc3BhY2VzRm9yTG9vcDtcclxuICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMub3JpZ2luYWxXaWRnZXRzO1xyXG4gICAgdGhpcy50b29scyA9IHRoaXMuYWRtaW5Ub29scztcclxuICAgIHRoaXMucmVjZW50U2VhcmNoZXMgPSB0aGlzLmFsbHNlYXJjaGVzO1xyXG4gICAgdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy50ID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gMDtcclxuICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgdGhpcy5kaXNwbGF5ID0gdHJ1ZTtcclxuICAgIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5nb2FsU2VhcmNoTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5wcm9qZWN0TGlzdCA9IFtdO1xyXG4gICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgIHRoaXMuZW1wbG95ZWVMaXN0ID0gdGhpcy5sb2FkZWRFbXBsb3llZUxpc3QubGVuZ3RoID4gMCA/IHRoaXMubG9hZGVkRW1wbG95ZWVMaXN0IDogW107XHJcbiAgICB0aGlzLmlzT3BlbmVkLmVtaXQodGhpcy5kaXNwbGF5KTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlKGV2ZW50LCBpdGVtKSB7XHJcbiAgICBpZiAodGhpcy5zZWFyY2hCeUlkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoQnlUZXh0TG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMucnNzLmdldFNlYXJjaE1lbnVJdGVtcyh7IHNlYXJjaFRleHQ6IG51bGwsIHNlYXJjaFVuaXF1ZUlkOiB0aGlzLnNlYXJjaFRleHQgfSlcclxuICAgICAgICAuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWRpcmVjdFRvUm91dGUocmVzLmRhdGFbMF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoJ0dpdmVuIElkIGlzIG5vdCB2YWxpZCwgcGxlYXNlIHByb3ZpZGUgY29ycmVjdCBpZCB0byBuYXZpZ2F0ZScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCFyZXMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXMuYXBpUmVzcG9uc2VNZXNzYWdlc1swXS5tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoQnlUZXh0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoaXRlbSkge1xyXG4gICAgICB0aGlzLnJlZGlyZWN0VG9Sb3V0ZShpdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZGlyZWN0VG9Sb3V0ZShpdGVtKSB7XHJcbiAgICB2YXIgbmFtZTtcclxuICAgIGlmICh0aGlzLnNlYXJjaEJ5VGV4dCB8fCB0aGlzLnNlYXJjaEJ5SWQpIHtcclxuICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgJiYgKGl0ZW0uaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZykgfHwgKGl0ZW0uaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICAgIC8vdGhpcy5JbnNlcnRTZWFyY2goaXRlbS51bmlxdWVuTmFtZSk7XHJcbiAgICAgICAgLy9pZiAodGhpcy5wcm9qZWN0U2VhcmNoUmVzdWx0cy5maWx0ZXIoZWxlbWVudCA9PiBlbGVtZW50LnByb2plY3RJZCA9PSBpdGVtLnByb2plY3RJZCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGlmIChpdGVtLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcpIHtcclxuICAgICAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKHRoaXMuc2VhcmNoQnlJZCA/IGl0ZW0uaXRlbVVuaXF1ZU5hbWUgOiBpdGVtLml0ZW1OYW1lLCBSZWNlbnRTZWFyY2hUeXBlLndvcmtJdGVtT3JCdWcsIGl0ZW0uaXRlbUlkKTtcclxuICAgICAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFtcInByb2plY3RzL3dvcmtpdGVtXCIsIGl0ZW0uaXRlbVVuaXF1ZU5hbWVdLCB7IGZyYWdtZW50OiAndW5pcXVlJyB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5JbnNlcnRTZWFyY2godGhpcy5zZWFyY2hCeUlkID8gaXRlbS5pdGVtVW5pcXVlTmFtZSA6IGl0ZW0uaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUuYWRob2MsIGl0ZW0uaXRlbUlkKTtcclxuICAgICAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFtcImRhc2hib2FyZC9hZGhvYy13b3JraXRlbVwiLCBpdGVtLml0ZW1JZF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS5pdGVtVHlwZSAmJiAoaXRlbS5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IGl0ZW0uaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgICAvL2lmICh0aGlzLnByb2plY3RTZWFyY2hSZXN1bHRzLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQucHJvamVjdElkID09IGl0ZW0ucHJvamVjdElkKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCkge1xyXG4gICAgICAgICAgdGhpcy5JbnNlcnRTZWFyY2godGhpcy5zZWFyY2hCeUlkID8gaXRlbS5pdGVtVW5pcXVlTmFtZSA6IGl0ZW0uaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUuZ29hbCwgaXRlbS5pdGVtSWQpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGUoW1wicHJvamVjdHMvZ29hbFwiLCBpdGVtLml0ZW1VbmlxdWVOYW1lXSwgeyBmcmFnbWVudDogJ3VuaXF1ZScgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKHRoaXMuc2VhcmNoQnlJZCA/IGl0ZW0uaXRlbVVuaXF1ZU5hbWUgOiBpdGVtLml0ZW1OYW1lLCBSZWNlbnRTZWFyY2hUeXBlLnNwcmludCwgaXRlbS5pdGVtSWQpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGUoW1wicHJvamVjdHMvc3ByaW50XCIsIGl0ZW0uaXRlbVVuaXF1ZU5hbWVdLCB7IGZyYWdtZW50OiAndW5pcXVlJyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGl0ZW0uaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuRW1wbG95ZWUpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgICAgdGhpcy5JbnNlcnRTZWFyY2godGhpcy5zZWFyY2hCeUlkID8gaXRlbS5pdGVtVW5pcXVlTmFtZSA6IGl0ZW0uaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUuZW1wbG95ZWUsIGl0ZW0uaXRlbUlkKTtcclxuICAgICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFxyXG4gICAgICAgICAgXCIvZGFzaGJvYXJkL3Byb2ZpbGUvXCIgKyBpdGVtLml0ZW1JZCArIFwiL292ZXJ2aWV3XCJcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW0uaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuUHJvamVjdCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKHRoaXMuc2VhcmNoQnlJZCA/IGl0ZW0uaXRlbVVuaXF1ZU5hbWUgOiBpdGVtLml0ZW1OYW1lLCBSZWNlbnRTZWFyY2hUeXBlLnByb2plY3QsIGl0ZW0uaXRlbUlkKTtcclxuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGVCeVVybChcInByb2plY3RzL3Byb2plY3RzdGF0dXMvXCIgKyBpdGVtLml0ZW1JZCArIFwiL2FjdGl2ZS1nb2Fsc1wiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYgKGl0ZW0ubWVudSkge1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICBuYW1lID0gaXRlbS5tZW51O1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZShbaXRlbS5zdGF0ZV0pO1xyXG4gICAgICB0aGlzLkluc2VydFNlYXJjaChuYW1lLCBSZWNlbnRTZWFyY2hUeXBlLm1lbnUsIGl0ZW0uaWQpO1xyXG4gICAgfVxyXG4gICAgLy8gZWxzZSBpZiAoaXRlbS5wZXJtaXNzaW9uKSB7XHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgLy8gICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAvLyAgIG5hbWUgPSBpdGVtLm5hbWU7XHJcbiAgICAvLyAgIHRoaXMuSW5zZXJ0U2VhcmNoKG5hbWUsIFJlY2UpO1xyXG4gICAgLy8gICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZShbaXRlbS5saW5rXSk7XHJcbiAgICAvLyB9IFxyXG4gICAgZWxzZSBpZiAoaXRlbS53b3Jrc3BhY2VJZCkge1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICBuYW1lID0gaXRlbS53b3Jrc3BhY2VOYW1lO1xyXG4gICAgICB0aGlzLkluc2VydFNlYXJjaChuYW1lLCBSZWNlbnRTZWFyY2hUeXBlLmRhc2hib2FyZCwgaXRlbS53b3Jrc3BhY2VJZCk7XHJcbiAgICAgIGNvbnN0IHVzZXJSZWZlcmVuY2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJSZWZlcmVuY2VJZCk7XHJcbiAgICAgIGlmICh1c2VyUmVmZXJlbmNlICE9IFwibnVsbFwiICYmIHVzZXJSZWZlcmVuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyBpdGVtLndvcmtzcGFjZUlkICsgXCIvZm9ybS9cIiArIHVzZXJSZWZlcmVuY2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyBpdGVtLndvcmtzcGFjZUlkKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChpdGVtLndpZGdldElkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgIG5hbWUgPSBpdGVtLndpZGdldE5hbWU7XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKG5hbWUsIFJlY2VudFNlYXJjaFR5cGUud2lkZ2V0LCBpdGVtLndpZGdldElkKTtcclxuICAgICAgdGhpcy5SZWRpcmVjdFRvQXBwKGl0ZW0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuU2VhcmNoUmVjZW50SXRlbShpdGVtLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgSW5zZXJ0U2VhcmNoKG5hbWUsIHJlY2VudFNlYXJjaFR5cGUsIGlkKSB7XHJcbiAgICB0aGlzLnJzcy5pbnNlcnRSZWNlbnRTZWFyY2goeyBuYW1lOiBuYW1lLCByZWNlbnRTZWFyY2hUeXBlOiByZWNlbnRTZWFyY2hUeXBlLCBpdGVtSWQ6IGlkIH0pLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgIC8vIHRoaXMucmVjZW50U2VhcmNoZXMuaW5jbHVkZXMobmFtZSlcclxuICAgICAgICAvLyAgID8gKHRoaXMucmVjZW50U2VhcmNoZXMuc3BsaWNlKHRoaXMucmVjZW50U2VhcmNoZXMuaW5kZXhPZihuYW1lKSwgMSksXHJcbiAgICAgICAgLy8gICAgIHRoaXMucmVjZW50U2VhcmNoZXMuc3BsaWNlKDAsIDAsIG5hbWUpKVxyXG4gICAgICAgIC8vICAgOiB0aGlzLnJlY2VudFNlYXJjaGVzLnVuc2hpZnQobmFtZSk7XHJcbiAgICAgICAgdGhpcy5nZXRSZWNlbnRTZWFyY2hlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIFNlYXJjaFJlY2VudEl0ZW0oc2VhcmNoLCBldmVudCkge1xyXG4gICAgdGhpcy5kaXNwbGF5ID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gICAgaWYgKHNlYXJjaC5yZWNlbnRTZWFyY2hUeXBlID09IFJlY2VudFNlYXJjaFR5cGUubWVudSkge1xyXG4gICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXMuZmlsdGVyKFxyXG4gICAgICAgIGl0ZW0gPT5cclxuICAgICAgICAgIGl0ZW0ubWVudS50b0xvd2VyQ2FzZSgpID09IHNlYXJjaC5yZWNlbnRTZWFyY2gudG9Mb3dlckNhc2UoKVxyXG4gICAgICApO1xyXG4gICAgICBpdGVtLmxlbmd0aCA+IDAgPyB0aGlzLm5hdmlnYXRlKGV2ZW50LCBpdGVtWzBdKSA6IG51bGxcclxuICAgIH0gZWxzZSBpZiAoc2VhcmNoLnJlY2VudFNlYXJjaFR5cGUgPT0gUmVjZW50U2VhcmNoVHlwZS5kYXNoYm9hcmQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgdGhpcy5JbnNlcnRTZWFyY2goc2VhcmNoLnJlY2VudFNlYXJjaCwgUmVjZW50U2VhcmNoVHlwZS5kYXNoYm9hcmQsIHNlYXJjaC5pdGVtSWQpO1xyXG4gICAgICBjb25zdCB1c2VyUmVmZXJlbmNlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyUmVmZXJlbmNlSWQpO1xyXG4gICAgICBpZiAodXNlclJlZmVyZW5jZSAhPSBcIm51bGxcIiAmJiB1c2VyUmVmZXJlbmNlICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvZGFzaGJvYXJkL1wiICsgc2VhcmNoLml0ZW1JZCArIFwiL2Zvcm0vXCIgKyB1c2VyUmVmZXJlbmNlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvZGFzaGJvYXJkL1wiICsgc2VhcmNoLml0ZW1JZCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoc2VhcmNoLnJlY2VudFNlYXJjaFR5cGUgPT0gUmVjZW50U2VhcmNoVHlwZS53aWRnZXQpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgdGhpcy5JbnNlcnRTZWFyY2goc2VhcmNoLnJlY2VudFNlYXJjaCwgUmVjZW50U2VhcmNoVHlwZS53aWRnZXQsIHNlYXJjaC5pdGVtSWQpO1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZShcclxuICAgICAgICBbXCJkYXNoYm9hcmQtbWFuYWdlbWVudC93aWRnZXRzXCIsIHNlYXJjaC5pdGVtSWRdXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaC5yZWNlbnRTZWFyY2hUeXBlID09IFJlY2VudFNlYXJjaFR5cGUuYWRob2MpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgdGhpcy5JbnNlcnRTZWFyY2goc2VhcmNoLnJlY2VudFNlYXJjaCwgUmVjZW50U2VhcmNoVHlwZS5hZGhvYywgc2VhcmNoLml0ZW1JZCk7XHJcbiAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFtcImRhc2hib2FyZC9hZGhvYy13b3JraXRlbVwiLCBzZWFyY2guaXRlbUlkXSk7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaC5yZWNlbnRTZWFyY2hUeXBlID09IFJlY2VudFNlYXJjaFR5cGUud29ya0l0ZW1PckJ1Zykge1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICB0aGlzLkluc2VydFNlYXJjaChzZWFyY2gucmVjZW50U2VhcmNoLCBSZWNlbnRTZWFyY2hUeXBlLndvcmtJdGVtT3JCdWcsIHNlYXJjaC5pdGVtSWQpO1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZShbXCJwcm9qZWN0cy93b3JraXRlbVwiLCBzZWFyY2guaXRlbVVuaXF1ZU5hbWVdLCB7IGZyYWdtZW50OiAndW5pcXVlJyB9KTtcclxuICAgIH0gZWxzZSBpZiAoc2VhcmNoLnJlY2VudFNlYXJjaFR5cGUgPT0gUmVjZW50U2VhcmNoVHlwZS5nb2FsKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKHNlYXJjaC5yZWNlbnRTZWFyY2gsIFJlY2VudFNlYXJjaFR5cGUuZ29hbCwgc2VhcmNoLml0ZW1JZCk7XHJcbiAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFtcInByb2plY3RzL2dvYWxcIiwgc2VhcmNoLml0ZW1VbmlxdWVOYW1lXSwgeyBmcmFnbWVudDogJ3VuaXF1ZScgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaC5yZWNlbnRTZWFyY2hUeXBlID09IFJlY2VudFNlYXJjaFR5cGUuc3ByaW50KSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKHNlYXJjaC5yZWNlbnRTZWFyY2gsIFJlY2VudFNlYXJjaFR5cGUuc3ByaW50LCBzZWFyY2guaXRlbUlkKTtcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGUoW1wicHJvamVjdHMvc3ByaW50XCIsIHNlYXJjaC5pdGVtVW5pcXVlTmFtZV0sIHsgZnJhZ21lbnQ6ICd1bmlxdWUnIH0pO1xyXG4gICAgfSBlbHNlIGlmIChzZWFyY2gucmVjZW50U2VhcmNoVHlwZSA9PSBSZWNlbnRTZWFyY2hUeXBlLnByb2plY3QpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgdGhpcy5JbnNlcnRTZWFyY2goc2VhcmNoLnJlY2VudFNlYXJjaCwgUmVjZW50U2VhcmNoVHlwZS5wcm9qZWN0LCBzZWFyY2guaXRlbUlkKTtcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGVCeVVybChcInByb2plY3RzL3Byb2plY3RzdGF0dXMvXCIgKyBzZWFyY2guaXRlbUlkICsgXCIvYWN0aXZlLWdvYWxzXCIpO1xyXG4gICAgfSBlbHNlIGlmIChzZWFyY2gucmVjZW50U2VhcmNoVHlwZSA9PSBSZWNlbnRTZWFyY2hUeXBlLmVtcGxveWVlKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKHNlYXJjaC5yZWNlbnRTZWFyY2gsIFJlY2VudFNlYXJjaFR5cGUuZW1wbG95ZWUsIHNlYXJjaC5pdGVtSWQpO1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFxyXG4gICAgICAgIFwiL2Rhc2hib2FyZC9wcm9maWxlL1wiICsgc2VhcmNoLml0ZW1JZCArIFwiL292ZXJ2aWV3XCJcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE1lbnUoZXZlbnQsIGNsaWNrKSB7XHJcbiAgICBpZiAoY2xpY2sud2hpY2ggPT0gMSAmJiBldmVudC53b3Jrc3BhY2VJZCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VhcmNoQnlUZXh0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2VhcmNoQnlJZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzT3BlbmVkLmVtaXQodGhpcy5kaXNwbGF5KTtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIGNvbnN0IHVzZXJSZWZlcmVuY2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJSZWZlcmVuY2VJZCk7XHJcbiAgICAgIGlmICh1c2VyUmVmZXJlbmNlICE9IFwibnVsbFwiICYmIHVzZXJSZWZlcmVuY2UgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlQnlVcmwoXCJkYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQvXCIgKyBldmVudC53b3Jrc3BhY2VJZCArIFwiL2Zvcm0vXCIgKyB1c2VyUmVmZXJlbmNlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZUJ5VXJsKFwiZGFzaGJvYXJkLW1hbmFnZW1lbnQvZGFzaGJvYXJkL1wiICsgZXZlbnQud29ya3NwYWNlSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXNoYm9hcmQgPSBldmVudC53b3Jrc3BhY2VJZDtcclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICB0aGlzLm1lbnVJdGVtTmFtZSA9IGV2ZW50LndvcmtzcGFjZU5hbWU7XHJcbiAgICAgIHRoaXMucnNzXHJcbiAgICAgICAgLmluc2VydFJlY2VudFNlYXJjaCh7IG5hbWU6IGV2ZW50LndvcmtzcGFjZU5hbWUsIHJlY2VudFNlYXJjaFR5cGU6IFJlY2VudFNlYXJjaFR5cGUuZGFzaGJvYXJkLCBpdGVtSWQ6IGV2ZW50LndvcmtzcGFjZUlkIH0pXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy5yZWNlbnRTZWFyY2hlcy5pbmNsdWRlcyhldmVudC53b3Jrc3BhY2VOYW1lKVxyXG4gICAgICAgICAgICAvLyAgID8gKHRoaXMucmVjZW50U2VhcmNoZXMuc3BsaWNlKFxyXG4gICAgICAgICAgICAvLyAgICAgICB0aGlzLnJlY2VudFNlYXJjaGVzLmluZGV4T2YoZXZlbnQud29ya3NwYWNlTmFtZSksXHJcbiAgICAgICAgICAgIC8vICAgICAgIDFcclxuICAgICAgICAgICAgLy8gICAgICksXHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnJlY2VudFNlYXJjaGVzLnNwbGljZSgwLCAwLCBldmVudC53b3Jrc3BhY2VOYW1lKSlcclxuICAgICAgICAgICAgLy8gICA6IHRoaXMucmVjZW50U2VhcmNoZXMudW5zaGlmdChldmVudC53b3Jrc3BhY2VOYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRSZWNlbnRTZWFyY2hlcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0RW1wbG95ZWUoZXZlbnQsIGNsaWNrKSB7XHJcbiAgICBpZiAoY2xpY2sud2hpY2ggPT0gMSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hCeVRleHQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hCeUlkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGVCeVVybChcclxuICAgICAgICBcIi9kYXNoYm9hcmQvcHJvZmlsZS9cIiArIGV2ZW50Lml0ZW1JZCArIFwiL292ZXJ2aWV3XCJcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZERhc2hib2FyZCA9IGV2ZW50LndvcmtzcGFjZUlkO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWUgPSBldmVudC5pdGVtSWQ7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcclxuICAgICAgdGhpcy5tZW51SXRlbU5hbWUgPSBldmVudC5pdGVtTmFtZTtcclxuICAgICAgdGhpcy5yc3NcclxuICAgICAgICAuaW5zZXJ0UmVjZW50U2VhcmNoKHsgbmFtZTogZXZlbnQuaXRlbU5hbWUsIHJlY2VudFNlYXJjaFR5cGU6IFJlY2VudFNlYXJjaFR5cGUuZW1wbG95ZWUsIGl0ZW1JZDogZXZlbnQuaXRlbUlkIH0pXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgdGhpcy5yc3MuZ2V0UmVjZW50U2VhcmNoKCkuc3Vic2NyaWJlKChyZXNwb25zZURhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZURhdGEuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGxzZWFyY2hlcyA9IHJlc3BvbnNlRGF0YS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5SZWNlbnRTZWFyY2hlcywgSlNPTi5zdHJpbmdpZnkodGhpcy5hbGxzZWFyY2hlcykpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNlbnRTZWFyY2hlcyA9IHJlc3BvbnNlRGF0YS5kYXRhO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0QWRpbW5Ub29sKGxpbmssIGV2ZW50LCBpdGVtKSB7XHJcbiAgICBpZiAoZXZlbnQud2hpY2ggPT0gMSkge1xyXG4gICAgICB0aGlzLmRpc3BsYXkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hCeVRleHQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zZWFyY2hCeUlkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSAnJztcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGUoW2xpbmtdKTtcclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICB0aGlzLnJzcy5pbnNlcnRSZWNlbnRTZWFyY2goeyBuYW1lOiBpdGVtLm1lbnUsIHJlY2VudFNlYXJjaFR5cGU6IFJlY2VudFNlYXJjaFR5cGUubWVudSwgaXRlbUlkOiBpdGVtLmlkIH0pLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAvLyB0aGlzLnJlY2VudFNlYXJjaGVzLmluY2x1ZGVzKG5hbWUpXHJcbiAgICAgICAgICAvLyAgID8gKHRoaXMucmVjZW50U2VhcmNoZXMuc3BsaWNlKHRoaXMucmVjZW50U2VhcmNoZXMuaW5kZXhPZihuYW1lKSwgMSksXHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5yZWNlbnRTZWFyY2hlcy5zcGxpY2UoMCwgMCwgbmFtZSkpXHJcbiAgICAgICAgICAvLyAgIDogdGhpcy5yZWNlbnRTZWFyY2hlcy51bnNoaWZ0KG5hbWUpO1xyXG4gICAgICAgICAgdGhpcy5nZXRSZWNlbnRTZWFyY2hlcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgT25TZWxlY3Qod2lkZ2V0LCBldmVudCkge1xyXG4gICAgaWYgKGV2ZW50LndoaWNoID09IDEpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMuUmVkaXJlY3RUb0FwcCh3aWRnZXQpO1xyXG4gICAgICB0aGlzLnJzc1xyXG4gICAgICAgIC5pbnNlcnRSZWNlbnRTZWFyY2goeyBuYW1lOiB3aWRnZXQud2lkZ2V0TmFtZSwgcmVjZW50U2VhcmNoVHlwZTogUmVjZW50U2VhcmNoVHlwZS53aWRnZXQsIGl0ZW1JZDogd2lkZ2V0LndpZGdldElkIH0pXHJcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy5yZWNlbnRTZWFyY2hlcy5pbmNsdWRlcyh3aWRnZXQud2lkZ2V0TmFtZSlcclxuICAgICAgICAgICAgLy8gICA/ICh0aGlzLnJlY2VudFNlYXJjaGVzLnNwbGljZShcclxuICAgICAgICAgICAgLy8gICAgICAgdGhpcy5yZWNlbnRTZWFyY2hlcy5pbmRleE9mKHdpZGdldC53aWRnZXROYW1lKSxcclxuICAgICAgICAgICAgLy8gICAgICAgMVxyXG4gICAgICAgICAgICAvLyAgICAgKSxcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMucmVjZW50U2VhcmNoZXMuc3BsaWNlKDAsIDAsIHdpZGdldC53aWRnZXROYW1lKSlcclxuICAgICAgICAgICAgLy8gICA6IHRoaXMucmVjZW50U2VhcmNoZXMudW5zaGlmdCh3aWRnZXQud2lkZ2V0TmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UmVjZW50U2VhcmNoZXMoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBnZXRSZWNlbnRTZWFyY2hlcygpIHtcclxuICAgIHRoaXMucmVjZW50U2VhcmNoZXNmZXRjaEluUHJvZ3Jlc3MgPSB0cnVlO1xyXG4gICAgdGhpcy5yc3MuZ2V0UmVjZW50U2VhcmNoKCkuc3Vic2NyaWJlKChyZXNwb25zZURhdGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2VEYXRhLnN1Y2Nlc3MpIHtcclxuICAgICAgICB0aGlzLmFsbHNlYXJjaGVzID0gcmVzcG9uc2VEYXRhLmRhdGE7XHJcbiAgICAgICAgdGhpcy5yZWNlbnRTZWFyY2hlcyA9IHJlc3BvbnNlRGF0YS5kYXRhO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuUmVjZW50U2VhcmNoZXMsIEpTT04uc3RyaW5naWZ5KHRoaXMuYWxsc2VhcmNoZXMpKTtcclxuICAgICAgICB0aGlzLnJlY2VudFNlYXJjaGVzZmV0Y2hJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgUmVkaXJlY3RUb0FwcCh3aWRnZXQpIHtcclxuICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFxyXG4gICAgICBbXCJkYXNoYm9hcmQtbWFuYWdlbWVudC93aWRnZXRzXCIsIHdpZGdldC53aWRnZXRJZF1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIE9uR29hbFNlbGVjdChnb2FsLCBldmVudCkge1xyXG4gICAgaWYgKGV2ZW50LndoaWNoID09IDEpIHtcclxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XHJcbiAgICAgIHRoaXMuUmVkaXJlY3RUb0dvYWwoZ29hbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBSZWRpcmVjdFRvR29hbChnb2FsKSB7XHJcbiAgICAvL2lmICh0aGlzLnByb2plY3RTZWFyY2hSZXN1bHRzLmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvamVjdElkID09IGdvYWwucHJvamVjdElkKS5sZW5ndGggPiAwKSB7XHJcbiAgICBpZiAoZ29hbC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsKSB7XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKGdvYWwuaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUuZ29hbCwgZ29hbC5pdGVtSWQpO1xyXG4gICAgICB0aGlzLnJvdXRlcy5uYXZpZ2F0ZShbXCJwcm9qZWN0cy9nb2FsXCIsIGdvYWwuaXRlbVVuaXF1ZU5hbWVdLCB7IGZyYWdtZW50OiAndW5pcXVlJyB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuSW5zZXJ0U2VhcmNoKGdvYWwuaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUuc3ByaW50LCBnb2FsLml0ZW1JZCk7XHJcbiAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFtcInByb2plY3RzL3NwcmludFwiLCBnb2FsLml0ZW1VbmlxdWVOYW1lXSwgeyBmcmFnbWVudDogJ3VuaXF1ZScgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdvYWxTZWFyY2hMaXN0ID0gW107XHJcbiAgICB0aGlzLmRpc3BsYXkgPSB0cnVlO1xyXG4gICAgdGhpcy5pc09wZW5lZC5lbWl0KHRoaXMuZGlzcGxheSk7XHJcbiAgfVxyXG4gIC8vICB9XHJcblxyXG4gIE9uVXNlclN0b3J5U2VsZWN0KHVzZXJTdG9yeSwgZXZlbnQpIHtcclxuICAgIGlmIChldmVudC53aGljaCA9PSAxKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLlJlZGlyZWN0VG9Vc2VyU3RvcnkodXNlclN0b3J5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFJlZGlyZWN0VG9Vc2VyU3RvcnkodXNlclN0b3J5KSB7XHJcbiAgICAvL2lmICh0aGlzLnByb2plY3RTZWFyY2hSZXN1bHRzLmZpbHRlcihpdGVtID0+IGl0ZW0ucHJvamVjdElkID09IHVzZXJTdG9yeS5wcm9qZWN0SWQpLmxlbmd0aCA+IDApIHtcclxuICAgIGlmICh1c2VyU3RvcnkuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1Zykge1xyXG4gICAgICB0aGlzLkluc2VydFNlYXJjaCh1c2VyU3RvcnkuaXRlbU5hbWUsIFJlY2VudFNlYXJjaFR5cGUud29ya0l0ZW1PckJ1ZywgdXNlclN0b3J5Lml0ZW1JZCk7XHJcbiAgICAgIHRoaXMucm91dGVzLm5hdmlnYXRlKFtcInByb2plY3RzL3dvcmtpdGVtXCIsIHVzZXJTdG9yeS5pdGVtVW5pcXVlTmFtZV0sIHsgZnJhZ21lbnQ6ICd1bmlxdWUnIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5JbnNlcnRTZWFyY2godXNlclN0b3J5Lml0ZW1OYW1lLCBSZWNlbnRTZWFyY2hUeXBlLmFkaG9jLCB1c2VyU3RvcnkuaXRlbUlkKTtcclxuICAgICAgdGhpcy5yb3V0ZXMubmF2aWdhdGUoW1wiZGFzaGJvYXJkL2FkaG9jLXdvcmtpdGVtXCIsIHVzZXJTdG9yeS5pdGVtSWRdKTtcclxuICAgIH1cclxuICAgIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5kaXNwbGF5ID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNPcGVuZWQuZW1pdCh0aGlzLmRpc3BsYXkpO1xyXG4gIH1cclxuICAvLyB9XHJcblxyXG4gIFNldCgpIHtcclxuICAgIHRoaXMuZGlzcGxheSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc09wZW5lZC5lbWl0KHRoaXMuZGlzcGxheSk7XHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCA9PSB1bmRlZmluZWQgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ID09IG51bGwgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ID09PSBcIlwiXHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnQgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAwO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1swXTtcclxuICAgIC8vIH1cclxuICB9XHJcbiAgYXJyb3dEb3duRXZlbnRGb3JTZWFyY2hCeVRleHQoKSB7XHJcbiAgICBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5Qcm9qZWN0ICYmIHRoaXMucHJvamVjdEluZGV4IDwgdGhpcy5wcm9qZWN0TGlzdC5sZW5ndGggLSAxKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtN1wiKS5zY3JvbGxUb3AgKz0gNDU7XHJcbiAgICAgIHRoaXMucHJvamVjdEluZGV4Kys7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnByb2plY3RMaXN0W3RoaXMucHJvamVjdEluZGV4XTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5Qcm9qZWN0ICYmIHRoaXMucHJvamVjdEluZGV4ID09IHRoaXMucHJvamVjdExpc3QubGVuZ3RoIC0gMSAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS01XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLlByb2plY3QgJiYgdGhpcy5wcm9qZWN0SW5kZXggPT0gdGhpcy5wcm9qZWN0TGlzdC5sZW5ndGggLSAxICYmIHRoaXMuZ29hbFNlYXJjaExpc3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMucHJvamVjdEluZGV4ID0gdGhpcy51c2VycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuUHJvamVjdCAmJiB0aGlzLnByb2plY3RJbmRleCA9PSB0aGlzLnByb2plY3RMaXN0Lmxlbmd0aCAtIDEgJiYgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAoKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZyB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKSAmJiB0aGlzLnVzZXJzIDwgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS01XCIpLnNjcm9sbFRvcCArPSA0NTtcclxuICAgICAgdGhpcy51c2VycysrO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0W3RoaXMudXNlcnNdO1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmIHRoaXMudXNlcnMgPT0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCAtIDFcclxuICAgICAgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbFRvcCArPSA0NTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmIHRoaXMudXNlcnMgPT0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCAtIDFcclxuICAgICAgJiYgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAoKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiYgdGhpcy5nb2FsSW5kZXggPCB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbFRvcCArPSA0NTtcclxuICAgICAgdGhpcy5nb2FsSW5kZXgrKztcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbdGhpcy5nb2FsSW5kZXhdO1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSAmJiB0aGlzLmdvYWxJbmRleCA9PSB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCAtIDFcclxuICAgICAgJiYgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5FbXBsb3llZSAmJiB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA8IHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS00XCIpLnNjcm9sbFRvcCArPSA0NTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXgrKztcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0W3RoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4XTtcclxuICAgIH1cclxuICB9XHJcbiAgYXJyb3dEb3duRXZlbnQoKSB7XHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCAhPSB1bmRlZmluZWQgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ICE9IG51bGwgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ID09PSBcIlwiXHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG4gICAgaWYgKHRoaXMuc2VhcmNoQnlUZXh0ICYmIHRoaXMuc2VhcmNoVGV4dCkge1xyXG4gICAgICB0aGlzLmFycm93RG93bkV2ZW50Rm9yU2VhcmNoQnlUZXh0KCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZC5tZW51ICYmXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoIC0gMVxyXG4gICAgKSB7XHJcbiAgICAgIC8vdGhpcy5tZW51RWxlbWVudC5uYXRpdmVFbGVtZW50LnNjcm9sbEJ5KDAsIDEwMCk7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgKz0gNDU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCsrO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkUm93SW5kZXhdO1xyXG4gICAgICAvLyB0aGlzLmhpZ2hsaWdodChuZXh0cm93KTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiZcclxuICAgICAgdGhpcy53cyA8IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxXHJcbiAgICApIHtcclxuICAgICAgdGhpcy53cysrO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsVG9wICs9IDQxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMud3NdO1xyXG4gICAgICAvLyB0aGlzLmhpZ2hsaWdodChuZXh0cm93KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53aWRnZXRJZCAmJiB0aGlzLndkIDwgdGhpcy53aWRnZXRzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0zXCIpLnNjcm9sbFRvcCArPSA0ODtcclxuICAgICAgdGhpcy53ZCsrO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzW3RoaXMud2RdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4IDwgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoIC0gMSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wICs9IDQ1O1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCsrO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXhdO1xyXG4gICAgICAvLyB0aGlzLmhpZ2hsaWdodChuZXh0cm93KTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmIHRoaXMudXNlcnMgPCB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QubGVuZ3RoIC0gMSkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wICs9IDQ1O1xyXG4gICAgICB0aGlzLnVzZXJzKys7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3RbdGhpcy51c2Vyc107XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiYgdGhpcy5nb2FsSW5kZXggPCB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbFRvcCArPSA0NTtcclxuICAgICAgdGhpcy5nb2FsSW5kZXgrKztcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbdGhpcy5nb2FsSW5kZXhdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzIDwgOCkge1xyXG4gICAgICB0aGlzLnJzKys7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzW3RoaXMucnNdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLm1lbnUgJiYgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID09IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSAmJiB0aGlzLndvcmtzcGFjZXMgJiYgdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLndzID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud29ya3NwYWNlc1swXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5tZW51ICYmIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9PSB0aGlzLml0ZW1zLmxlbmd0aCAtIDEgJiYgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IG51bGw7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53ZCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQubWVudSAmJiB0aGlzLnNlbGVjdGVkUm93SW5kZXggPT0gdGhpcy5pdGVtcy5sZW5ndGggLSAxICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50ID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS00XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy53cyA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLm1lbnUgJiYgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID09IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50ID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS01XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy53cyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLnVzZXJzID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5tZW51ICYmIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9PSB0aGlzLml0ZW1zLmxlbmd0aCAtIDEgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50ID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy53cyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQubWVudSAmJiB0aGlzLnNlbGVjdGVkUm93SW5kZXggPT0gdGhpcy5pdGVtcy5sZW5ndGggLSAxICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnJzID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy53cyA9PSB0aGlzLndvcmtzcGFjZXMubGVuZ3RoIC0gMSAmJiB0aGlzLndpZGdldHMgJiYgdGhpcy53aWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0zXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud2lkZ2V0c1swXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53b3Jrc3BhY2VJZCAmJiB0aGlzLndzID09IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50ID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS00XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy53cyA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndvcmtzcGFjZUlkICYmIHRoaXMud3MgPT0gdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCAtIDEgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy51c2VycyA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy53cyA9PSB0aGlzLndvcmtzcGFjZXMubGVuZ3RoIC0gMSAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0ICYmIHRoaXMuZ29hbFNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy53ZCA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53b3Jrc3BhY2VJZCAmJiB0aGlzLndzID09IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnJzID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy53ZCA9PSB0aGlzLndpZGdldHMubGVuZ3RoIC0gMSAmJiB0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53aWRnZXRJZCAmJiB0aGlzLndkID09IHRoaXMud2lkZ2V0cy5sZW5ndGggLSAxICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy53ZCA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMud2QgPT0gdGhpcy53aWRnZXRzLmxlbmd0aCAtIDEgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50ID0gbnVsbDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy53cyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy53ZCA9PSB0aGlzLndpZGdldHMubGVuZ3RoIC0gMSAmJiB0aGlzLnJlY2VudFNlYXJjaGVzICYmIHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5ycyA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID09IHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCAtIDEgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy51c2VycyA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuZW1wbG95ZWVOdW1iZXIgJiYgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPT0gdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoIC0gMSAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0ICYmIHRoaXMuZ29hbFNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy53ZCA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5lbXBsb3llZU51bWJlciAmJiB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggLSAxICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnJzID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZyB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKSAmJlxyXG4gICAgICB0aGlzLnVzZXJzID09IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggLSAxICYmIHRoaXMuZ29hbFNlYXJjaExpc3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudCA9IG51bGw7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5hZGhvYykgJiZcclxuICAgICAgdGhpcy51c2VycyA9PSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QubGVuZ3RoIC0gMSAmJiB0aGlzLnJlY2VudFNlYXJjaGVzICYmIHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5ycyA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5zcHJpbnQpICYmXHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID09IHRoaXMuZ29hbFNlYXJjaExpc3QubGVuZ3RoIC0gMSAmJiB0aGlzLnJlY2VudFNlYXJjaGVzICYmIHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5ycyA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvLyBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndvcmtzcGFjZUlkICYmIHRoaXMud3MgPT0gdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCAtIDEgJiYgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgLy8gICB0aGlzLnQgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy53ZCA9IDA7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbMF07XHJcbiAgICAvLyB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy53cyA9PSB0aGlzLndvcmtzcGFjZXMubGVuZ3RoIC0gMSAmJiB0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgLy8gICB0aGlzLndkID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIC8vIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53b3Jrc3BhY2VJZCAmJiB0aGlzLndzID09IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5ycyA9IDA7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgLy8gfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMud2QgPT0gOCAmJiB0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgLy8gICB0aGlzLndkID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLnJzID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwXHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIC8vIH1cclxuICAgIC8vIGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy53ZCA9PSA4ICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5ycyA9IDA7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5mdWxsTmFtZSAmJiB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggLSAxICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5ycyA9IDA7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICAvLyAgIGlmICh0aGlzLnJzICE9PSBudWxsICYmIHRoaXMucnMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnJlY2VudFNlYXJjaGVzLmxlbmd0aCA+IDggJiYgdGhpcy5ycyA8IDgpIHtcclxuICAgIC8vICAgICB0aGlzLnJzKys7XHJcbiAgICAvLyAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbdGhpcy5yc107XHJcbiAgICAvLyAgICAgLy8gdGhpcy5oaWdobGlnaHQobmV4dHJvdyk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgZWxzZSBpZiAodGhpcy5ycyAhPT0gbnVsbCAmJiB0aGlzLnJzICE9PSB1bmRlZmluZWQgJiYgKHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoKSAtIDEgPiB0aGlzLnJzICYmIHRoaXMucnMgPCA4KSB7XHJcbiAgICAvLyAgICAgdGhpcy5ycysrO1xyXG4gICAgLy8gICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzW3RoaXMucnNdO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcblxyXG5cclxuICB9XHJcbiAgYXJyb3dVcEV2ZW50Rm9yU2VhcmNoQnlUZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuUHJvamVjdCAmJiB0aGlzLnByb2plY3RJbmRleCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXgtLTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS03XCIpLnNjcm9sbFRvcCAtPSA0NTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucHJvamVjdExpc3RbdGhpcy5wcm9qZWN0SW5kZXhdO1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmIHRoaXMuaXRlbUNsaWNrZWQuaXRlbUlkID09IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFswXS5pdGVtSWQgJiYgdGhpcy51c2VycyA9PSAwICYmIHRoaXMucHJvamVjdExpc3QgJiYgdGhpcy5wcm9qZWN0TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLnByb2plY3RMaXN0Lmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnByb2plY3RMaXN0W3RoaXMucHJvamVjdEluZGV4XTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS03XCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtN1wiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKCh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5hZGhvYykgJiYgdGhpcy51c2VycyA+IDApIHtcclxuICAgICAgdGhpcy51c2Vycy0tO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wIC09IDQ1O1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0W3RoaXMudXNlcnNdO1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSAmJiB0aGlzLml0ZW1DbGlja2VkLml0ZW1JZCA9PSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdLml0ZW1JZCAmJiB0aGlzLmdvYWxJbmRleCA9PSAwICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLnVzZXJzID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3RbdGhpcy51c2Vyc107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSAmJiB0aGlzLml0ZW1DbGlja2VkLml0ZW1JZCA9PSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdLml0ZW1JZCAmJiB0aGlzLmdvYWxJbmRleCA9PSAwICYmIHRoaXMucHJvamVjdExpc3QgJiYgdGhpcy5wcm9qZWN0TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLnByb2plY3RMaXN0Lmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnByb2plY3RMaXN0W3RoaXMucHJvamVjdEluZGV4XTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS03XCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtN1wiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKCh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5zcHJpbnQpICYmIHRoaXMuZ29hbEluZGV4ID4gMCkge1xyXG4gICAgICB0aGlzLmdvYWxJbmRleC0tO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsVG9wIC09IDQ1O1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFt0aGlzLmdvYWxJbmRleF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuRW1wbG95ZWUgJiYgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtSWQgPT0gdGhpcy5lbXBsb3llZUxpc3RbMF0uaXRlbUlkICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID09IDAgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IHRoaXMuZ29hbFNlYXJjaExpc3QubGVuZ3RoIC0gMTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbdGhpcy5nb2FsSW5kZXhdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5FbXBsb3llZSAmJiB0aGlzLml0ZW1DbGlja2VkLml0ZW1JZCA9PSB0aGlzLmVtcGxveWVlTGlzdFswXS5pdGVtSWQgJiYgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPT0gMCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy51c2VycyA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0W3RoaXMudXNlcnNdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS01XCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5FbXBsb3llZSAmJiB0aGlzLml0ZW1DbGlja2VkLml0ZW1JZCA9PSB0aGlzLmVtcGxveWVlTGlzdFswXS5pdGVtSWQgJiYgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPT0gMCAmJiB0aGlzLnByb2plY3RMaXN0ICYmIHRoaXMucHJvamVjdExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMucHJvamVjdEluZGV4ID0gdGhpcy5wcm9qZWN0TGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5wcm9qZWN0TGlzdFt0aGlzLnByb2plY3RJbmRleF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtN1wiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTdcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLkVtcGxveWVlICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleC0tO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wIC09IDQ1O1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXhdO1xyXG4gICAgfVxyXG4gIH1cclxuICBhcnJvd1VwRXZlbnQoKSB7XHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCAhPSB1bmRlZmluZWQgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ICE9IG51bGwgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ID09PSBcIlwiXHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfSBcclxuICAgIGlmICh0aGlzLnNlYXJjaEJ5VGV4dCAmJiB0aGlzLnNlYXJjaFRleHQpIHtcclxuICAgICAgdGhpcy5hcnJvd1VwRXZlbnRGb3JTZWFyY2hCeVRleHQoKTtcclxuICAgIH1cclxuICAgIC8vRnJvbSBtZW51c1xyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5tZW51ICYmIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4LS07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgLT0gNDU7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zW3RoaXMuc2VsZWN0ZWRSb3dJbmRleF07XHJcbiAgICB9XHJcbiAgICAvL0Zyb20gd29ya3NwYWNlc1xyXG4gICAgZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiZcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZC53b3Jrc3BhY2VJZCA9PSB0aGlzLndvcmtzcGFjZXNbMF0ud29ya3NwYWNlSWQgJiYgdGhpcy53cyA9PSAwICYmXHJcbiAgICAgIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwXHJcbiAgICApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMud2QgPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbdGhpcy5zZWxlY3RlZFJvd0luZGV4XTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy53cyA+IDApIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbFRvcCAtPSA0MTtcclxuICAgICAgdGhpcy53cy0tO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMud3NdO1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIHdpZGdldHMgICAgXHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMud2QgPiAwKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgLT0gNDg7XHJcbiAgICAgIHRoaXMud2QtLTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud2lkZ2V0c1t0aGlzLndkXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53aWRnZXRJZCAmJiB0aGlzLml0ZW1DbGlja2VkLndpZGdldElkID09IHRoaXMud2lkZ2V0c1swXS53aWRnZXRJZCAmJiB0aGlzLndkID09IDAgJiZcclxuICAgICAgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud2QgPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbdGhpcy53c107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgPT0gdGhpcy53aWRnZXRzWzBdLndpZGdldElkICYmIHRoaXMud2QgPT0gMCAmJlxyXG4gICAgICB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLndzID0gdGhpcy50ID0gdGhpcy53ZCA9IHRoaXMudXNlcnMgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbdGhpcy5zZWxlY3RlZFJvd0luZGV4XTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9XHJcbiAgICAvL0Zyb20gRW1wbG95ZWVzICAgXHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wIC09IDQ1O1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleC0tO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXhdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMuaXRlbUNsaWNrZWQuZW1wbG95ZWVOdW1iZXIgPT0gdGhpcy5lbXBsb3llZUxpc3RbMF0uZW1wbG95ZWVOdW1iZXIgJiYgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPT0gMCAmJlxyXG4gICAgICB0aGlzLndpZGdldHMgJiYgdGhpcy53aWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudXNlcnMgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgIHRoaXMud2QgPSB0aGlzLndpZGdldHMubGVuZ3RoIC0gMTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud2lkZ2V0c1t0aGlzLndkXTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0zXCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuZW1wbG95ZWVOdW1iZXIgJiYgdGhpcy5pdGVtQ2xpY2tlZC5lbXBsb3llZU51bWJlciA9PSB0aGlzLmVtcGxveWVlTGlzdFswXS5lbXBsb3llZU51bWJlciAmJiB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSAwICYmXHJcbiAgICAgIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndkID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMud3NdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5lbXBsb3llZU51bWJlciAmJiB0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyID09IHRoaXMuZW1wbG95ZWVMaXN0WzBdLmVtcGxveWVlTnVtYmVyICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID09IDAgJiZcclxuICAgICAgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLndkID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkUm93SW5kZXhdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH1cclxuICAgIC8vRnJvbSBXSS9CdWcgICAgICAgICBORUVEIFRPIERPIFxyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpXHJcbiAgICAgICYmIHRoaXMudXNlcnMgPiAwKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgLT0gNDU7XHJcbiAgICAgIHRoaXMudXNlcnMtLTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFt0aGlzLnVzZXJzXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmXHJcbiAgICAgIHRoaXMudXNlcnMgPT0gMCAmJiB0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy53ZCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoIC0gMTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0W3RoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4XTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS00XCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZyB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKSAmJlxyXG4gICAgICB0aGlzLnVzZXJzID09IDAgJiYgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy53aWRnZXRzLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbdGhpcy53ZF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5hZGhvYykgJiZcclxuICAgICAgdGhpcy51c2VycyA9PSAwICYmIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndkID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMud3NdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmXHJcbiAgICAgIHRoaXMudXNlcnMgPT0gMCAmJiB0aGlzLndvcmtzcGFjZXMgJiYgdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMud2QgPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zW3RoaXMuc2VsZWN0ZWRSb3dJbmRleF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIGdvYWwvc3ByaW50XHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5zcHJpbnQpXHJcbiAgICAgICYmIHRoaXMuZ29hbEluZGV4ID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsVG9wIC09IDQ1O1xyXG4gICAgICB0aGlzLmdvYWxJbmRleC0tO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFt0aGlzLmdvYWxJbmRleF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiZcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPT0gMCAmJiB0aGlzLnVzZXJTdG9yeUxpc3QgJiYgdGhpcy51c2VyU3RvcnlMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy53ZCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgIHRoaXMudXNlcnMgPSB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlMaXN0W3RoaXMudXNlcnNdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS01XCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSAmJlxyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9PSAwICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudXNlcnMgPSB0aGlzLndkID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXhdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS00XCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSAmJlxyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9PSAwICYmIHRoaXMud2lkZ2V0cyAmJiB0aGlzLndpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy53ZCA9IHRoaXMud2lkZ2V0cy5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzW3RoaXMud2RdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0zXCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGV0eXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiZcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPT0gMCAmJiB0aGlzLndvcmtzcGFjZXMgJiYgdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy53ZCA9IHRoaXMudXNlcnMgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLndvcmtzcGFjZXMubGVuZ3RoIC0gMTtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud29ya3NwYWNlc1t0aGlzLndzXTtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiZcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPT0gMCAmJiB0aGlzLndvcmtzcGFjZXMgJiYgdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMudCA9IHRoaXMud2QgPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zW3RoaXMuc2VsZWN0ZWRSb3dJbmRleF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIHJlY2VudCBzZWFyY2hlc1xyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5yZWNlbnRTZWFyY2ggJiYgdGhpcy5ycyA+IDApIHtcclxuICAgICAgdGhpcy5ycy0tO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5yZWNlbnRTZWFyY2hlc1t0aGlzLnJzXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5yZWNlbnRTZWFyY2ggJiYgdGhpcy5ycyA9PSAwICYmXHJcbiAgICAgIHRoaXMuZ29hbFNlYXJjaExpc3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLndkID0gdGhpcy5ycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFt0aGlzLmdvYWxJbmRleF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNlwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiZcclxuICAgICAgdGhpcy51c2VyU3RvcnlMaXN0ICYmIHRoaXMudXNlclN0b3J5TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnVzZXJzID0gdGhpcy51c2VyU3RvcnlMaXN0Lmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeUxpc3RbdGhpcy51c2Vyc107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiZcclxuICAgICAgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLndzID0gdGhpcy50ID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMud2QgPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFt0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiZcclxuICAgICAgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gdGhpcy53aWRnZXRzLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbdGhpcy53ZF07XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiZcclxuICAgICAgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud2QgPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMucnMgPSBudWxsO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbdGhpcy53c107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiZcclxuICAgICAgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLndkID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnJzID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkUm93SW5kZXhdO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbEhlaWdodDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5yZWNlbnRTZWFyY2ggJiYgdGhpcy5ycyA9PSAwICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0zXCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoIC0gMTtcclxuICAgIC8vICAgdGhpcy5ycyA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLndkID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0W3RoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4XTtcclxuICAgIC8vIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5yZWNlbnRTZWFyY2ggJiYgdGhpcy5ycyA9PSAwICYmIHRoaXMud2lkZ2V0cyAmJiB0aGlzLndpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICB0aGlzLndkID0gdGhpcy53aWRnZXRzLmxlbmd0aCAtIDE7XHJcbiAgICAvLyAgIHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud3MgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzW3RoaXMud2RdO1xyXG4gICAgLy8gfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiYgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIHRoaXMud3MgPSB0aGlzLndvcmtzcGFjZXMubGVuZ3RoIC0gMTtcclxuICAgIC8vICAgdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy50ID0gdGhpcy53ZCA9IG51bGw7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbdGhpcy53c107XHJcbiAgICAvLyB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQucmVjZW50U2VhcmNoICYmIHRoaXMucnMgPT0gMCAmJiB0aGlzLnRvb2xzICYmIHRoaXMudG9vbHMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICB0aGlzLnQgPSB0aGlzLnRvb2xzLmxlbmd0aCAtIDE7XHJcbiAgICAvLyAgIHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud3MgPSB0aGlzLndkID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud29ya3NwYWNlc1t0aGlzLnRdO1xyXG4gICAgLy8gfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaCAmJiB0aGlzLnJzID09IDAgJiYgdGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5pdGVtcy5sZW5ndGggLSAxO1xyXG4gICAgLy8gICB0aGlzLnJzID0gdGhpcy50ID0gdGhpcy53cyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy53ZCA9IG51bGw7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zW3RoaXMudF07XHJcbiAgICAvLyB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuZnVsbE5hbWUgJiYgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPT0gMCAmJiB0aGlzLndpZGdldHMgJiYgdGhpcy53aWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS00XCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICAvLyAgIHRoaXMud2QgPSA4O1xyXG4gICAgLy8gICB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnQgPSB0aGlzLndzID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMud2lkZ2V0c1t0aGlzLndkXTtcclxuICAgIC8vIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5mdWxsTmFtZSAmJiB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSAwICYmIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICB0aGlzLndzID0gdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCAtIDE7XHJcbiAgICAvLyAgIHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudCA9IHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMud3NdO1xyXG4gICAgLy8gfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmZ1bGxOYW1lICYmIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID09IDAgJiYgdGhpcy50b29scyAmJiB0aGlzLnRvb2xzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgdGhpcy50ID0gdGhpcy50b29scy5sZW5ndGggLSAxO1xyXG4gICAgLy8gICB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLndzID0gdGhpcy53ZCA9IG51bGw7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbdGhpcy50XTtcclxuICAgIC8vIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5mdWxsTmFtZSAmJiB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSAwICYmIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTtcclxuICAgIC8vICAgdGhpcy5ycyA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1t0aGlzLnRdO1xyXG4gICAgLy8gfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMud2QgPT0gMCAmJiB0aGlzLndvcmtzcGFjZXMgJiYgdGhpcy53b3Jrc3BhY2VzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbFRvcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxIZWlnaHQ7XHJcbiAgICAvLyAgIHRoaXMud3MgPSB0aGlzLndvcmtzcGFjZXMubGVuZ3RoIC0gMTtcclxuICAgIC8vICAgdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMud3NdO1xyXG4gICAgLy8gICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsVG9wID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbEhlaWdodDtcclxuICAgIC8vIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53aWRnZXRJZCAmJiB0aGlzLndkID09IDAgJiYgdGhpcy50b29scyAmJiB0aGlzLnRvb2xzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgdGhpcy50ID0gdGhpcy50b29scy5sZW5ndGggLSAxO1xyXG4gICAgLy8gICB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53cyA9IHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzW3RoaXMudF07XHJcbiAgICAvLyB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy53ZCA9PSAwICYmIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTtcclxuICAgIC8vICAgdGhpcy5ycyA9IHRoaXMudCA9IHRoaXMud3MgPSB0aGlzLndkID0gbnVsbDtcclxuICAgIC8vICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbdGhpcy50XTtcclxuICAgIC8vIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53b3Jrc3BhY2VJZCAmJiB0aGlzLndzID09IDAgJiYgdGhpcy50b29scyAmJiB0aGlzLnRvb2xzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgdGhpcy50ID0gdGhpcy50b29scy5sZW5ndGggLSAxO1xyXG4gICAgLy8gICB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53cyA9IHRoaXMud2QgPSBudWxsO1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy50b29sc1t0aGlzLnRdO1xyXG4gICAgLy8gfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndvcmtzcGFjZUlkICYmIHRoaXMud3MgPT0gMCAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICAvLyAgIHRoaXMucnMgPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy53ZCA9IG51bGw7XHJcbiAgICAvLyAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zW3RoaXMuc2VsZWN0ZWRSb3dJbmRleF07XHJcbiAgICAvLyB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQucGVybWlzc2lvbiAmJiB0aGlzLnQgPT0gMCAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLml0ZW1zLmxlbmd0aCAtIDE7XHJcbiAgICAvLyAgIHRoaXMucnMgPSB0aGlzLnQgPSB0aGlzLndzID0gdGhpcy53ZCA9IG51bGw7XHJcbiAgICAvLyAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIikuc2Nyb2xsSGVpZ2h0O1xyXG4gICAgLy8gICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1t0aGlzLnNlbGVjdGVkUm93SW5kZXhdO1xyXG4gICAgLy8gfSBlbHNlIHtcclxuICAgIC8vICAgaWYgKHRoaXMucnMgIT09IG51bGwgJiYgdGhpcy5ycyAhPT0gdW5kZWZpbmVkICYmIHRoaXMucnMgPiAwKSB7XHJcbiAgICAvLyAgICAgdGhpcy5ycy0tO1xyXG4gICAgLy8gICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzW3RoaXMucnNdO1xyXG4gICAgLy8gICAgIC8vIHRoaXMuaGlnaGxpZ2h0KG5leHRyb3cpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIGFycm93TGVmdEV2ZW50Rm9yU2VhcmNoQnlUZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuUHJvamVjdCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpICYmIHRoaXMucHJvamVjdExpc3QgJiYgdGhpcy5wcm9qZWN0TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtN1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IG51bGxcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5wcm9qZWN0TGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAoKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsXHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICgodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KSAmJiB0aGlzLnByb2plY3RMaXN0ICYmIHRoaXMucHJvamVjdExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTdcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsXHJcbiAgICAgIHRoaXMucHJvamVjdEluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucHJvamVjdExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuRW1wbG95ZWUgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS02XCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMucHJvamVjdEluZGV4ID0gdGhpcy51c2VycyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbFxyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLkVtcGxveWVlICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbFxyXG4gICAgICB0aGlzLnVzZXJzID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5FbXBsb3llZSAmJiB0aGlzLnByb2plY3RMaXN0ICYmIHRoaXMucHJvamVjdExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTdcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsXHJcbiAgICAgIHRoaXMucHJvamVjdEluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucHJvamVjdExpc3RbMF07XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFycm93TGVmdEV2ZW50KCkge1xyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICB0aGlzLnNlYXJjaFRleHQgIT0gdW5kZWZpbmVkIHx8XHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCAhPSBudWxsIHx8XHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCA9PT0gXCJcIlxyXG4gICAgLy8gKSB7XHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuICAgIGlmICh0aGlzLnNlYXJjaEJ5VGV4dCAmJiB0aGlzLnNlYXJjaFRleHQpIHtcclxuICAgICAgdGhpcy5hcnJvd0xlZnRFdmVudEZvclNlYXJjaEJ5VGV4dCgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5tZW51KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vRnJvbSB3b3Jrc3BhY2VzXHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndvcmtzcGFjZUlkICYmIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLnQgPSB0aGlzLndkID0gdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgfVxyXG4gICAgLy9mcm9tIHdpZGdldHNcclxuICAgIGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLndzID0gMDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy53cyA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTFcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuaXRlbXNbMF07XHJcbiAgICB9XHJcbiAgICAvL0Zyb20gZW1wbG95ZWVzXHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMud2lkZ2V0cyAmJiB0aGlzLndpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53ZCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53cyA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gMDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIFdJL0J1Z1xyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpXHJcbiAgICAgICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpXHJcbiAgICAgICYmIHRoaXMud2lkZ2V0cyAmJiB0aGlzLndpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53ZCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5hZGhvYylcclxuICAgICAgJiYgdGhpcy53b3Jrc3BhY2VzICYmIHRoaXMud29ya3NwYWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLndzID0gMDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0yXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndvcmtzcGFjZXNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZyB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKVxyXG4gICAgICAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy5ycyA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1swXTtcclxuICAgIH1cclxuICAgIC8vRnJvbSBHb2FsL1NwcmludFxyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5nb2FsIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuc3ByaW50KVxyXG4gICAgICAmJiB0aGlzLnVzZXJTdG9yeUxpc3QgJiYgdGhpcy51c2VyU3RvcnlMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5TGlzdFswXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludClcclxuICAgICAgJiYgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy53cyA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbMF07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5zcHJpbnQpXHJcbiAgICAgICYmIHRoaXMud2lkZ2V0cyAmJiB0aGlzLndpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53ZCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtM1wiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53aWRnZXRzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5zcHJpbnQpXHJcbiAgICAgICYmIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53cyA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5zcHJpbnQpXHJcbiAgICAgICYmIHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gMDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0xXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLml0ZW1zWzBdO1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIHJlY2VudCBzZWFyY2hlc1xyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5yZWNlbnRTZWFyY2hcclxuICAgICAgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTZcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaFxyXG4gICAgICAmJiB0aGlzLnVzZXJTdG9yeUxpc3QgJiYgdGhpcy51c2VyU3RvcnlMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTVcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5TGlzdFswXTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQucmVjZW50U2VhcmNoXHJcbiAgICAgICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMud3MgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5yZWNlbnRTZWFyY2hcclxuICAgICAgJiYgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy53cyA9IHRoaXMudCA9IHRoaXMucnMgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLndkID0gMDtcclxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHlsZS0zXCIpLnNjcm9sbFRvcCA9IDA7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQucmVjZW50U2VhcmNoXHJcbiAgICAgICYmIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnJzID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy53cyA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLnJlY2VudFNlYXJjaFxyXG4gICAgICAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLndzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy5ycyA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtMVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5pdGVtc1swXTtcclxuICAgIH1cclxuICB9XHJcbiAgYXJyb3dSaWdodEV2ZW50Rm9yU2VhcmNoQnlUZXh0KCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuUHJvamVjdCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy51c2VycyA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNVwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLlByb2plY3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5Qcm9qZWN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNFwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKCh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLndvcmtJdGVtT1JCdWcgfHwgdGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS5hZGhvYykgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5wcm9qZWN0SW5kZXggPSB0aGlzLnVzZXJzID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3R5bGUtNlwiKS5zY3JvbGxUb3AgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAoKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZyB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKSAmJiB0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucHJvamVjdEluZGV4ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTRcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAoKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuZ29hbCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCkgJiYgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnByb2plY3RJbmRleCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gMDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgfVxyXG4gIH1cclxuICBhcnJvd1JpZ2h0RXZlbnQoKSB7XHJcbiAgICAvLyBpZiAoXHJcbiAgICAvLyAgIHRoaXMuc2VhcmNoVGV4dCA9PSB1bmRlZmluZWQgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ID09IG51bGwgfHxcclxuICAgIC8vICAgdGhpcy5zZWFyY2hUZXh0ID09PSBcIlwiXHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfSBcclxuICAgIGlmICh0aGlzLnNlYXJjaEJ5VGV4dCAmJiB0aGlzLnNlYXJjaFRleHQpIHtcclxuICAgICAgdGhpcy5hcnJvd1JpZ2h0RXZlbnRGb3JTZWFyY2hCeVRleHQoKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQucmVjZW50U2VhcmNoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vRnJvbSBtZW51c1xyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5tZW51ICYmIHRoaXMud29ya3NwYWNlcyAmJiB0aGlzLndvcmtzcGFjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnQgPSBudWxsO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTJcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy53ZCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5ycyA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMud3MgPSAwO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy53b3Jrc3BhY2VzWzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLm1lbnUgJiYgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud2QgPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQubWVudSAmJiB0aGlzLmVtcGxveWVlTGlzdCAmJiB0aGlzLmVtcGxveWVlTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZW1wbG95ZWVMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLm1lbnUgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5tZW51ICYmIHRoaXMuZ29hbFNlYXJjaExpc3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQubWVudSAmJiB0aGlzLnJlY2VudFNlYXJjaGVzICYmIHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnJzID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIHdvcmtzcGFjZXNcclxuICAgIGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy53aWRnZXRzICYmIHRoaXMud2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMud2QgPSAwO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0eWxlLTNcIikuc2Nyb2xsVG9wID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLndpZGdldHNbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy5lbXBsb3llZUxpc3QgJiYgdGhpcy5lbXBsb3llZUxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmVtcGxveWVlTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53b3Jrc3BhY2VJZCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy51c2VycyA9IDA7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndvcmtzcGFjZUlkICYmIHRoaXMuZ29hbFNlYXJjaExpc3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud29ya3NwYWNlSWQgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcyAmJiB0aGlzLnJlY2VudFNlYXJjaGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5ycyA9IDA7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLndkID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLnQgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5yZWNlbnRTZWFyY2hlc1swXTtcclxuICAgIH1cclxuICAgIC8vRnJvbSB3aWRnZXRzXHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMuZW1wbG95ZWVMaXN0ICYmIHRoaXMuZW1wbG95ZWVMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnVzZXJzID0gdGhpcy5nb2FsSW5kZXggPSBudWxsO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5lbXBsb3llZUxpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQud2lkZ2V0SWQgJiYgdGhpcy51c2VyU3RvcnlTZWFyY2hMaXN0ICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMudXNlcnMgPSAwO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC53aWRnZXRJZCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0ICYmIHRoaXMuZ29hbFNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmdvYWxJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMud3MgPSB0aGlzLnJzID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy53ZCA9IHRoaXMudCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy51c2VycyA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLmdvYWxTZWFyY2hMaXN0WzBdO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLndpZGdldElkICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucnMgPSAwO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy53ZCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbMF07XHJcbiAgICB9XHJcbiAgICAvL0Zyb20gRW1wbG95ZWVzXHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLmVtcGxveWVlTnVtYmVyICYmIHRoaXMudXNlclN0b3J5U2VhcmNoTGlzdCAmJiB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnVzZXJzID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnVzZXJTdG9yeVNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuZW1wbG95ZWVOdW1iZXIgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdCAmJiB0aGlzLmdvYWxTZWFyY2hMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5nb2FsSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy5ycyA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMud2QgPSB0aGlzLnQgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMudXNlcnMgPSBudWxsO1xyXG4gICAgICB0aGlzLml0ZW1DbGlja2VkID0gdGhpcy5nb2FsU2VhcmNoTGlzdFswXTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5lbXBsb3llZU51bWJlciAmJiB0aGlzLnJlY2VudFNlYXJjaGVzICYmIHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnJzID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIFdJL0J1Z1xyXG4gICAgZWxzZSBpZiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSAmJiAodGhpcy5pdGVtQ2xpY2tlZC5pdGVtVHlwZSA9PSBTZWFyY2hUYXNrVHlwZS53b3JrSXRlbU9SQnVnIHx8IHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUuYWRob2MpXHJcbiAgICAgICYmIHRoaXMuZ29hbFNlYXJjaExpc3QgJiYgdGhpcy5nb2FsU2VhcmNoTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZ29hbEluZGV4ID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMucnMgPSB0aGlzLnNlbGVjdGVkUm93SW5kZXggPSB0aGlzLndkID0gdGhpcy50ID0gdGhpcy5zZWxlY3RlZEVtcGxveWVlSW5kZXggPSB0aGlzLnVzZXJzID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMuZ29hbFNlYXJjaExpc3RbMF07XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgJiYgKHRoaXMuaXRlbUNsaWNrZWQuaXRlbVR5cGUgPT0gU2VhcmNoVGFza1R5cGUud29ya0l0ZW1PUkJ1ZyB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmFkaG9jKVxyXG4gICAgICAmJiB0aGlzLnJlY2VudFNlYXJjaGVzICYmIHRoaXMucmVjZW50U2VhcmNoZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnJzID0gMDtcclxuICAgICAgdGhpcy53cyA9IHRoaXMud2QgPSB0aGlzLnNlbGVjdGVkRW1wbG95ZWVJbmRleCA9IHRoaXMuc2VsZWN0ZWRSb3dJbmRleCA9IHRoaXMudCA9IHRoaXMudXNlcnMgPSB0aGlzLmdvYWxJbmRleCA9IG51bGw7XHJcbiAgICAgIHRoaXMuaXRlbUNsaWNrZWQgPSB0aGlzLnJlY2VudFNlYXJjaGVzWzBdO1xyXG4gICAgfVxyXG4gICAgLy9Gcm9tIEdvYWwvU3ByaW50XHJcbiAgICBlbHNlIGlmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlICYmICh0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLnNwcmludCB8fCB0aGlzLml0ZW1DbGlja2VkLml0ZW1UeXBlID09IFNlYXJjaFRhc2tUeXBlLmdvYWwpXHJcbiAgICAgICYmIHRoaXMucmVjZW50U2VhcmNoZXMgJiYgdGhpcy5yZWNlbnRTZWFyY2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucnMgPSAwO1xyXG4gICAgICB0aGlzLndzID0gdGhpcy53ZCA9IHRoaXMuc2VsZWN0ZWRFbXBsb3llZUluZGV4ID0gdGhpcy5zZWxlY3RlZFJvd0luZGV4ID0gdGhpcy50ID0gdGhpcy51c2VycyA9IHRoaXMuZ29hbEluZGV4ID0gbnVsbDtcclxuICAgICAgdGhpcy5pdGVtQ2xpY2tlZCA9IHRoaXMucmVjZW50U2VhcmNoZXNbMF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuV29ya3NwYWNlRm9ybSgpIHtcclxuICAgIHRoaXMuYWRkV29ya1NwYWNlUG9wT3Zlci5vcGVuKCk7XHJcbiAgICB0aGlzLmRpc3BsYXkgPSB0cnVlO1xyXG4gICAgdGhpcy5pc09wZW5lZC5lbWl0KHRoaXMuZGlzcGxheSk7XHJcbiAgICB0aGlzLmdldEFsbFJvbGVzKCk7XHJcbiAgfVxyXG5cclxuICBnZXRBbGxSb2xlcygpIHtcclxuICAgIHRoaXMuY29tbW9uU2VydmljZS5HZXRhbGxSb2xlcygpLnN1YnNjcmliZSgocmVzcG9uc2VEYXRhOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5yb2xlc0Ryb3BEb3duID0gcmVzcG9uc2VEYXRhLmRhdGE7XHJcbiAgICAgIHRoaXMucm9sZXNEcm9wRG93bi5mb3JFYWNoKChwKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaWQgPSBwLnJvbGVJZC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIHAucm9sZUlkID0gaWQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMubmdEZXN0cm95ZWQkLm5leHQoKTtcclxuICAgIHRoaXMubmdEZXN0cm95ZWQkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBjb21wYXJlU2VsZWN0ZWRSb2xlc0ZuKCkgeyB9XHJcbiAgY29tcGFyZUVkaXRTZWxlY3RlZFJvbGVzRm4oKSB7IH1cclxuICBjb21wYXJlRGVsZXRlU2VsZWN0ZWRSb2xlc0ZuKCkgeyB9XHJcbiAgdXBzZXJ0V29ya3NwYWNlKCkgeyB9XHJcbiAgdG9nZ2xlQWxsUm9sZXNTZWxlY3RlZCgpIHsgfVxyXG4gIHRvZ2dsZUVkaXRBbGxSb2xlc1NlbGVjdGVkKCkgeyB9XHJcbiAgdG9nZ2xlRGVsZXRlQWxsUm9sZXNTZWxlY3RlZCgpIHsgfVxyXG4gIGNsb3NlQWRkV29ya3NwYWNlRGlhbG9nKCkgeyB9XHJcbn1cclxuIiwiPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJ2aXNpYmxlc1wiIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudXNcIiBmeEhpZGUuZ3QteHMgZnhTaG93PlxyXG4gIDxtYXQtaWNvbiBjbGFzcz1cIm5ld01lbnVcIj5tZW51PC9tYXQtaWNvbj5cclxuPC9idXR0b24+XHJcbjxkaXYgZnhGbGV4IGNsYXNzPVwibmV3TG9nbyBkZWZhdWx0LWJnIHRvcC1sb2dvLWJnIG5ld21pbmlsb2dvIHpvb20taW1hZ2UtaG92ZXJcIiBmeEhpZGUuZ3QteHMgZnhTaG93PlxyXG4gIDxpbWcgc3JjPVwie3tjb21wYW55TWluaUxvZ299fVwiIGFsdD1cIlwiIGlkPVwibWluaS1sb2dvLXRvcGJhclwiIHN0eWxlPVwid2lkdGg6MzBweDsgaGVpZ2h0OjMwcHg7XCJcclxuICAgIChjbGljayk9XCJnZXRBbGxNZW51SXRlbXMoKVwiIC8+XHJcbjwvZGl2PlxyXG48ZGl2IGZ4RmxleCBjbGFzcz1cIm5ld0xvZ28gIHRvcC1sb2dvLWJnIGFwcHMtYnV0dG9uIHpvb20taW1hZ2UtaG92ZXJcIiBzdHlsZT1cImxlZnQ6IDBweDtcIiBmeEhpZGUgZnhTaG93Lmd0LXhzPlxyXG4gIDxpbWcgc3JjPVwie3tjb21wYW55TWFpbkxvZ299fVwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO2xlZnQ6IDIwcHg7bGVmdDogMjBweDtwb3NpdGlvbjogcmVsYXRpdmU7XCIgaWQ9XCJtYWluLWxvZ28tdG9wYmFyXCJcclxuICAgIGNsYXNzPVwiaW1nLWhlaWdodC1tYWluLWxvZ28tdG9wYmFyXCIgKGNsaWNrKT1cImdldEFsbE1lbnVJdGVtcygpXCIgLz5cclxuPC9kaXY+XHJcblxyXG48IS0tIFxyXG48bWF0LW1lbnUgI21lbnVzPVwibWF0TWVudVwiIGNsYXNzPVwiZmlsdGVyLXBhbmVsXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YobWVudUl0ZW1zJCB8IGFzeW5jKVwiPlxyXG4gICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ2Ryb3BEb3duJ1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImxldmVsVHdvTWVudVwiIChtb3VzZW92ZXIpPVwib3BlbkxldmVsMk1lbnUoaXRlbS5zdGF0ZSxpdGVtLnN1YilcIj5cclxuICAgICAgICA8bWF0LWljb24+e3sgaXRlbS5pY29uIH19PC9tYXQtaWNvbj57eyBpdGVtLm1lbnUgfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHN9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnbGluaydcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIHJvdXRlckxpbms9XCIve3sgaXRlbS5zdGF0ZSB9fVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj57eyBpdGVtLmljb24gfX08L21hdC1pY29uPnt7IGl0ZW0ubWVudSB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVsc319XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LW1lbnU+XHJcblxyXG48bWF0LW1lbnUgI2xldmVsVHdvTWVudT1cIm1hdE1lbnVcIj5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtTHZsMiBvZiBzdWJMZXZlbHNcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJpdGVtTHZsMi50eXBlID09PSAnZHJvcERvd24nXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwibGV2ZWxUaHJlZU1lbnVcIlxyXG4gICAgICAgIChtb3VzZW92ZXIpPVwib3BlbkxldmVsM01lbnUoc3RhdGVMdmwxLGl0ZW1MdmwyLnN0YXRlLGl0ZW0uc3ViKVwiPlxyXG4gICAgICAgIHt7IGl0ZW1MdmwyLm1lbnUgfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHN9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIml0ZW1MdmwyLnR5cGUgPT0gJ2FwcGxpY2F0aW9ubGluaydcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIHJvdXRlckxpbms9XCIve3sgaXRlbUx2bDIuc3RhdGUgfX1cIj5cclxuICAgICAgICB7eyBpdGVtTHZsMi5tZW51IHwgc29mdExhYmVsc1BpcGUgOiBzb2Z0TGFiZWxzfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJpdGVtTHZsMi50eXBlID09ICdsaW5rJ1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gcm91dGVyTGluaz1cIi97e3N0YXRlTHZsMX19L3t7IGl0ZW1MdmwyLnN0YXRlIH19XCI+XHJcbiAgICAgICAge3sgaXRlbUx2bDIubWVudSB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVsc319XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LW1lbnU+XHJcblxyXG48bWF0LW1lbnUgI2xldmVsVGhyZWVNZW51PVwibWF0TWVudVwiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW1MdmwzIG9mIHN1YkxldmVsc0ZvckxldmVsMlwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIHJvdXRlckxpbms9XCIve3sgbGV2ZWwzTGluazEgfX0ve3sgbGV2ZWwzTGluazIgfX0ve3tpdGVtTHZsMy5zdGF0ZX19XCI+XHJcbiAgICAgIHt7IGl0ZW1MdmwzLm1lbnUgfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHN9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LW1lbnU+IC0tPlxyXG5cclxuPG1hdC1tZW51ICNtZW51cz1cIm1hdE1lbnVcIiB5UG9zaXRpb249XCJiZWxvd1wiIGNsYXNzPVwiZmlsdGVyLXBhbmVsXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgc3R5bGU9XCJoZWlnaHQ6YXV0b1wiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXNcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ2xpbmsnIHx8IGl0ZW0udHlwZSA9PSAnYXBwbGljYXRpb25saW5rJ1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gcm91dGVyTGluaz1cIi97eyBpdGVtLnN0YXRlIH19XCIgKGNsaWNrKT1cInNlbGVjdE1lbnUoaXRlbSwkZXZlbnQpXCJcclxuICAgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiaXRlbS1hY3RpdmVcIj5cclxuICAgICAgICA8bWF0LWljb24+e3sgaXRlbS5pY29uIH19PC9tYXQtaWNvbj57eyBpdGVtLm1lbnUgfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHN9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L21hdC1tZW51PlxyXG5cclxuXHJcbjxkaXYgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XHJcbmxlZnQ6IDkwJVwiIGNsYXNzPVwic3RvcmUtaWNvbSBtYXQtaWNvbi1idXR0b25cIiAqbmdJZj1cImNhbkFjY2Vzc19mZWF0dXJlX0RyYWdBcHBzXCJcclxuICBbbmdDbGFzc109XCJ0aGlzLnJvdXRlcy51cmwuaW5jbHVkZXMoJy9hcHAtc3RvcmUvd2lkZ2V0cycpID8gJ2ljb25fYWN0aXZlX2NsYXNzJyA6ICcnXCI+XHJcbiAgPGZhLWljb24gaWNvbj1cInN0b3JlXCIgc3R5bGU9XCJmb250LXNpemU6IDIwcHggIWltcG9ydGFudDtcIiBtYXRUb29sdGlwQ2xhc3M9XCJ0b29sdGlwQ2xhc3MtbWF0XCJcclxuICAgIG1hdFRvb2x0aXA9XCJ7eyAnQVBQLkFQUFNUT1JFJyB8IHRyYW5zbGF0ZX19XCIgKGNsaWNrKT1cIm9wZW5BcHBzKClcIlxyXG4gICAgY2xhc3M9XCJtYXQtY29sb3ItYWNjZW50IGN1cnNvci1wb2ludGVyIHRoZW1lLW5hdmJhci1pY29uLWNvbG9yXCI+PC9mYS1pY29uPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJTZWFyY2hCb3ggZHJvcGRvd25cIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1wiPlxyXG4gIDxzcGFuIGNsYXNzPVwibWF0LWNvbG9yLWFjY2VudCBpbnB1dC1ncm91cC1hZGRvblwiICpuZ0lmPVwic2VhcmNoQnlUZXh0XCI+QCAmbmJzcDs8L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJtYXQtY29sb3ItYWNjZW50IGlucHV0LWdyb3VwLWFkZG9uXCIgKm5nSWY9XCJzZWFyY2hCeUlkXCI+IyAmbmJzcDs8L3NwYW4+XHJcbiAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJTZWFyY2hCb3gtaW5wdXQgZHJvcGJ0blwiIHBsYWNlaG9sZGVyPVwie3sgJ0FQUC5TVEFSVEhFUkVPUkNMSUNLQ09OVFJPTCtRJyB8IHRyYW5zbGF0ZX19XCJcclxuICAgIFtjbGFzcy5oaWRlLXBsYWNlaG9sZGVyXT1cInNlYXJjaEJ5VGV4dCB8fCBzZWFyY2hCeUlkXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgI2VsZW1lbnQgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcclxuICAgIChpbnB1dCk9XCJTZWFyY2hJdGVtKCRldmVudClcIiAoY2xpY2spPVwiU2VhcmNoSXRlbSgkZXZlbnQpXCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIChibHVyKT1cIlNldCgpO1wiXHJcbiAgICAoa2V5ZG93bi5lbnRlcik9XCJuYXZpZ2F0ZSgkZXZlbnQsIGl0ZW1DbGlja2VkKVwiIChrZXlkb3duLmFycm93ZG93bik9XCJhcnJvd0Rvd25FdmVudCgpXCJcclxuICAgIChrZXlkb3duLmFycm93dXApPVwiYXJyb3dVcEV2ZW50KClcIiAoa2V5ZG93bi5hcnJvd2xlZnQpPVwiYXJyb3dMZWZ0RXZlbnQoKVwiIChrZXlkb3duLmFycm93cmlnaHQpPVwiYXJyb3dSaWdodEV2ZW50KClcIj5cclxuXHJcbiAgPGJ1dHRvbiBjbGFzcz1cIlNlYXJjaEJveC1idXR0b25cIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiY2xvc2VfaWNvbl9zZWFyY2hcIj5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIhc2VhcmNoVGV4dFwiPjwvc3Bhbj5cclxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwic2VhcmNoVGV4dFwiIGNsYXNzPVwiaWNvbi1idXR0b24gbXItMDVcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgKGNsaWNrKT1cImNsb3NlU2VhcmNoKCRldmVudClcIlxyXG4gICAgICAgIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXJcIj5cclxuICAgICAgICBjbG9zZTwvbWF0LWljb24+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJTZWFyY2hCb3gtaWNvbiBpY29uLWNvbG9yIG10LWxnLW4yIG1yLTA1IGluZm8tY2xhc3NcIiBbc2F0UG9wb3ZlckFuY2hvckZvcl09XCJwXCJcclxuICAgICAgI2luZm9Qb3BPdmVyPVwic2F0UG9wb3ZlckFuY2hvclwiIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJvcGVuSW5mbyhpbmZvUG9wT3ZlcilcIj5pbmZvPC9tYXQtaWNvbj5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cIlNlYXJjaEJveC1pY29uIGljb24tY29sb3IgbXQtbGctbjJcIiBjb2xvcj1cInByaW1hcnlcIj5zZWFyY2g8L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1jb250ZW50XCIgW25nQ2xhc3NdPVwieydkLWJsb2NrJyA6IGRpc3BsYXksICAnZC1ub25lJyA6ICFkaXNwbGF5fVwiPlxyXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgY29sb3I9XCJwcmltYXJ5XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAqbmdJZj1cImxvYWRpbmdTZWFyY2hNZW51RGF0YSB8fCByZWNlbnRTZWFyY2hlc2ZldGNoSW5Qcm9ncmVzcyB8fCB3aWRnZXRzZmV0Y2hJblByb2dyZXNzXCI+XHJcbiAgICA8L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IHJvd3NlbGVjdFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbnNlbGVjdC1uZXh0IHBsLTA1XCIgKm5nSWY9XCJpdGVtcyAmJiAoaXRlbXMubGVuZ3RoPjApICYmICEoc2VhcmNoQnlJZCB8fCBzZWFyY2hCeVRleHQpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluLWhlYWRlclwiPnt7ICdTSEVMTC5BUFBMSUNBVElPTlMnIHwgdHJhbnNsYXRlfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGlkPVwic3R5bGUtMVwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDsgaGVpZ2h0OiA0NDVweCAhaW1wb3J0YW50OyBvdmVyZmxvdzogYXV0bztcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtcyAmJiBpdGVtcy5sZW5ndGg+MFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaSA9IGluZGV4O1wiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwic2VsZWN0ZWRSb3dJbmRleCA9PSBpID8gdGhlbWVCYXNlQ29sb3IgOiAnd2hpdGUnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnbGluaycgfHwgaXRlbS50eXBlID09ICdhcHBsaWNhdGlvbmxpbmsnXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gcm91dGVyTGluaz1cIi97eyBpdGVtLnN0YXRlIH19XCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRSb3dJbmRleCA9PSBpID8gJ2NvbG9yLXRleHQnIDogJ2NvbG9yLXRleHQxJ1wiXHJcbiAgICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwic2VsZWN0QWRpbW5Ub29sKGl0ZW0uc3RhdGUsICRldmVudCwgaXRlbSlcIiByb3V0ZXJMaW5rQWN0aXZlPVwiaXRlbS1hY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2V4YWN0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRydWV9XCIgbWF0VG9vbHRpcENsYXNzPVwidG9vbHRpcENsYXNzLW1hdFwiXHJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7eyB0cmFuc2xhdGVhcHBsaWNhdGlvbm5hbWUoaXRlbS5tZW51IHwgc29mdExhYmVsc1BpcGUgOiBzb2Z0TGFiZWxzKX19XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImljb24tY29sb3JcIiBbbmdDbGFzc109XCJzZWxlY3RlZFJvd0luZGV4ID09IGkgPyAnY29sb3ItdGV4dCcgOiAnY29sb3ItdGV4dDEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5pY29uIH19PC9tYXQtaWNvbj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwidHJhbnNsYXRlYXBwbGljYXRpb25uYW1lKGl0ZW0ubWVudSkgfCAgc29mdExhYmVsc1BpcGUgOiBzb2Z0TGFiZWxzIHwgaGlnaExpZ2h0VGV4dCA6IHNlYXJjaFRleHRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIHBsLTA1XCIgKm5nSWY9XCIhKHNlYXJjaEJ5SWQgfHwgc2VhcmNoQnlUZXh0KVwiPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uc2VsZWN0LW5leHQgbWwtMFwiICpuZ0lmPVwid29ya3NwYWNlcyAmJiAod29ya3NwYWNlcy5sZW5ndGg+MClcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbi1oZWFkZXJcIj57eyAnU0hFTEwuREFTSEJPQVJEUycgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwicGx1cy1zcXVhcmVcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FuQWNjZXNzX2ZlYXR1cmVfQWRkRGFzaGJvYXJkXCIgbWF0VG9vbHRpcD1cInt7ICdBUFAuQUREREFTSEJPQVJEJyB8IHRyYW5zbGF0ZX19XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiaW5pdGlhbGl6ZVdvcmtzcGFjZUZvcm0oKTtvcGVuV29ya3NwYWNlRm9ybSgpO1wiIGNsYXNzPVwibWF0LWNvbG9yLWFjY2VudCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgW3NhdFBvcG92ZXJBbmNob3JGb3JdPVwiYWRkV29ya3NwYWNlXCI+XHJcbiAgICAgICAgICAgIDwvZmEtaWNvbj4gXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgaWQ9XCJzdHlsZS0yXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OyBoZWlnaHQ6IDQ0NXB4ICFpbXBvcnRhbnQ7IG92ZXJmbG93OiBhdXRvO1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwid29ya3NwYWNlcyAmJiB3b3Jrc3BhY2VzLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgd2Mgb2Ygd29ya3NwYWNlczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ3cyA9PSBpID8gdGhlbWVCYXNlQ29sb3IgOiAnd2hpdGUnXCIgY2xhc3M9XCJzY3JvbGxcIiAjd29ya3NwYWNlRWxlbWVudD5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAobW91c2Vkb3duKT1cInNlbGVjdE1lbnUod2MsJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIndzID09IGkgPyAnY29sb3ItdGV4dCcgOiAnY29sb3ItdGV4dDEnXCIgKGNsaWNrKT1cIm5hdmlnYXRlVG9Vcmwod2Mud29ya3NwYWNlSWQpXCJcclxuICAgICAgICAgICAgICAgICAgcm91dGVyTGluaz1cIi9kYXNoYm9hcmQtbWFuYWdlbWVudC9kYXNoYm9hcmQve3sgd2Mud29ya3NwYWNlSWQgfX1cIiByb3V0ZXJMaW5rQWN0aXZlPVwiaXRlbS1hY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJ0b29sdGlwQ2xhc3MtbWF0XCIgbWF0VG9vbHRpcD1cInt7d2Mud29ya3NwYWNlTmFtZX19XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwid2Mud29ya3NwYWNlTmFtZSB8IGhpZ2hMaWdodFRleHQgOiBzZWFyY2hUZXh0IFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gY29sdW1uc2VsZWN0LWFwcHMgbWwtMFwiICpuZ0lmPVwid2lkZ2V0cyAmJiB3aWRnZXRzLmxlbmd0aD4wICAmJiAhKHNlYXJjaEJ5SWQgfHwgc2VhcmNoQnlUZXh0KVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbi1oZWFkZXJcIj57eyAnU0hFTEwuRkFWT1VSSVRFQVBQUycgfCB0cmFuc2xhdGV9fTwvZGl2PlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OyBoZWlnaHQ6IDQ0NXB4ICFpbXBvcnRhbnQ7IG92ZXJmbG93OiBhdXRvO1wiIGlkPVwic3R5bGUtM1wiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgd2lkZ2V0IG9mIHdpZGdldHM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJ3ZCA9PSBpID8gdGhlbWVCYXNlQ29sb3IgOiAnd2hpdGUnXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSByb3V0ZXJMaW5rQWN0aXZlPVwiaXRlbS1hY3RpdmVcIiBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2V4YWN0OlxyXG4gICAgICAgICAgdHJ1ZX1cIiByb3V0ZXJMaW5rPVwiL2Rhc2hib2FyZC1tYW5hZ2VtZW50L3dpZGdldHMve3sgd2lkZ2V0LndpZGdldElkIH19XCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ3ZCA9PSBpID8gJ2NvbG9yLXRleHQnIDogJ2NvbG9yLXRleHQxJ1wiIChtb3VzZWRvd24pPVwiT25TZWxlY3Qod2lkZ2V0LCRldmVudClcIlxyXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cInRvb2x0aXBDbGFzcy1tYXRcIiBtYXRUb29sdGlwPVwie3t3aWRnZXQud2lkZ2V0TmFtZSB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVsc319XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJ3aWRnZXQud2lkZ2V0TmFtZSB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVscyB8IGhpZ2hMaWdodFRleHQgOiBzZWFyY2hUZXh0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zZWxlY3QtbmV4dCBtbC0wXCIgKm5nSWY9XCJwcm9qZWN0TGlzdCAmJiBwcm9qZWN0TGlzdC5sZW5ndGg+MCAmJiBzZWFyY2hUZXh0ICYmIHNlYXJjaEJ5VGV4dFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbi1oZWFkZXJcIj5Qcm9qZWN0czwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxcIiBpZD1cInN0eWxlLTdcIlxyXG4gICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OyBoZWlnaHQ6IDQ0NXB4ICFpbXBvcnRhbnQ7IG92ZXJmbG93OiBhdXRvO1wiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcHJvamVjdCBvZiBwcm9qZWN0TGlzdDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInByb2plY3RJbmRleCA9PSBpID8gdGhlbWVCYXNlQ29sb3IgOiAnd2hpdGUnXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSByb3V0ZXJMaW5rQWN0aXZlPVwiaXRlbS1hY3RpdmVcIiBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwie2V4YWN0OlxyXG4gICAgICAgdHJ1ZX1cIiBbbmdDbGFzc109XCJwcm9qZWN0SW5kZXggPT0gaSA/ICdjb2xvci10ZXh0JyA6ICdjb2xvci10ZXh0MSdcIlxyXG4gICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Qcm9qZWN0U2VsZWN0KHByb2plY3QsJGV2ZW50KVwiIG1hdFRvb2x0aXBDbGFzcz1cInRvb2x0aXBDbGFzcy1tYXRcIlxyXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJ7e3Byb2plY3QuaXRlbU5hbWUgfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHN9fVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwicHJvamVjdC5pdGVtTmFtZSB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVscyB8IGhpZ2hMaWdodFRleHQgOiBzZWFyY2hUZXh0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5zZWxlY3QtbmV4dCBtbC0wXCJcclxuICAgICAgICAqbmdJZj1cInVzZXJTdG9yeVNlYXJjaExpc3QgJiYgdXNlclN0b3J5U2VhcmNoTGlzdC5sZW5ndGg+MCAmJiBzZWFyY2hUZXh0ICYmIHNlYXJjaEJ5VGV4dFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbi1oZWFkZXJcIiAqbmdJZj1cImlzRW5hYmxlQnVnQm9hcmRcIj57eyAnU0hFTEwuV0lCVUcnIHwgdHJhbnNsYXRlfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW4taGVhZGVyXCIgKm5nSWY9XCIhaXNFbmFibGVCdWdCb2FyZFwiPnt7ICdTSEVMTC5XSSd8IHRyYW5zbGF0ZX19PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbFwiIGlkPVwic3R5bGUtNVwiXHJcbiAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7IGhlaWdodDogNDQ1cHggIWltcG9ydGFudDsgb3ZlcmZsb3c6IGF1dG87XCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB1c2VyU3Rvcnkgb2YgdXNlclN0b3J5U2VhcmNoTGlzdDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInVzZXJzID09IGkgPyB0aGVtZUJhc2VDb2xvciA6ICd3aGl0ZSdcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIHJvdXRlckxpbmtBY3RpdmU9XCJpdGVtLWFjdGl2ZVwiIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJ7ZXhhY3Q6XHJcbiAgICAgICAgIHRydWV9XCIgW25nQ2xhc3NdPVwidXNlcnMgPT0gaSA/ICdjb2xvci10ZXh0JyA6ICdjb2xvci10ZXh0MSdcIiAobW91c2Vkb3duKT1cIk9uVXNlclN0b3J5U2VsZWN0KHVzZXJTdG9yeSwkZXZlbnQpXCJcclxuICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJ0b29sdGlwQ2xhc3MtbWF0XCIgbWF0VG9vbHRpcD1cInt7dXNlclN0b3J5Lml0ZW1OYW1lIHwgc29mdExhYmVsc1BpcGUgOiBzb2Z0TGFiZWxzfX1cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cInVzZXJTdG9yeS5pdGVtTmFtZSB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVscyB8IGhpZ2hMaWdodFRleHQgOiBzZWFyY2hUZXh0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uc2VsZWN0LW5leHQgbWwtMFwiXHJcbiAgICAgICAgKm5nSWY9XCJnb2FsU2VhcmNoTGlzdCAmJiBnb2FsU2VhcmNoTGlzdC5sZW5ndGg+MCAmJiBzZWFyY2hUZXh0ICYmIHNlYXJjaEJ5VGV4dFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbi1oZWFkZXJcIj57eyAnU0hFTEwuR09BTFNQUklOVCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsXCIgaWQ9XCJzdHlsZS02XCJcclxuICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDsgaGVpZ2h0OiA0NDVweCAhaW1wb3J0YW50OyBvdmVyZmxvdzogYXV0bztcIj5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGdvYWwgb2YgZ29hbFNlYXJjaExpc3Q7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJnb2FsSW5kZXggPT0gaSA/IHRoZW1lQmFzZUNvbG9yIDogJ3doaXRlJ1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gcm91dGVyTGlua0FjdGl2ZT1cIml0ZW0tYWN0aXZlXCIgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIntleGFjdDpcclxuICAgICAgICAgdHJ1ZX1cIiBbbmdDbGFzc109XCJnb2FsSW5kZXggPT0gaSA/ICdjb2xvci10ZXh0JyA6ICdjb2xvci10ZXh0MSdcIiAobW91c2Vkb3duKT1cIk9uR29hbFNlbGVjdChnb2FsLCRldmVudClcIlxyXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cInRvb2x0aXBDbGFzcy1tYXRcIiBtYXRUb29sdGlwPVwie3tnb2FsLml0ZW1OYW1lIHwgc29mdExhYmVsc1BpcGUgOiBzb2Z0TGFiZWxzfX1cIj5cclxuICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cImdvYWwuaXRlbU5hbWUgfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHMgfCBoaWdoTGlnaHRUZXh0IDogc2VhcmNoVGV4dFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbnNlbGVjdC1hcHBzIG1sLTBcIlxyXG4gICAgICAgICpuZ0lmPVwiKGVtcGxveWVlTGlzdCAmJiBlbXBsb3llZUxpc3QubGVuZ3RoID4gMCkgJiYgc2VhcmNoVGV4dCAmJiBzZWFyY2hCeVRleHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW4taGVhZGVyXCI+RW1wbG95ZWVzPC9kaXY+XHJcbiAgICAgICAgPGRpdiBpZD1cInN0eWxlLTRcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7IGhlaWdodDogNDQ1cHggIWltcG9ydGFudDsgb3ZlcmZsb3c6IGF1dG87XCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbXBsb3llZSBvZiBlbXBsb3llZUxpc3Q7IGxldCBpID0gaW5kZXhcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSBpID8gdGhlbWVCYXNlQ29sb3IgOiAnd2hpdGUnXCIgI3dvcmtzcGFjZUVsZW1lbnQ+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAobW91c2Vkb3duKT1cInNlbGVjdEVtcGxveWVlKGVtcGxveWVlLCRldmVudClcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlbGVjdGVkRW1wbG95ZWVJbmRleCA9PSBpID8gJ2NvbG9yLXRleHQnIDogJ2NvbG9yLXRleHQxJ1wiXHJcbiAgICAgICAgICAgICAgcm91dGVyTGluaz1cIi9kYXNoYm9hcmQvcHJvZmlsZS97eyBlbXBsb3llZS5pdGVtSWQgfX0vb3ZlcnZpZXdcIiByb3V0ZXJMaW5rQWN0aXZlPVwiaXRlbS1hY3RpdmVcIlxyXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cInRvb2x0aXBDbGFzcy1tYXRcIiBtYXRUb29sdGlwPVwie3tlbXBsb3llZS5pdGVtTmFtZX19XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1hdmF0YXIgW25hbWVdPVwiZW1wbG95ZWUuaXRlbU5hbWUgfCByZW1vdmVTcGVjaWFsQ2hhcmFjdGVyc1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3sgZW1wbG95ZWUuaXRlbU5hbWUgfX1cIiBbc3JjXT1cImVtcGxveWVlLnByb2ZpbGVJbWFnZSB8IGZldGNoU2l6ZWRBbmRDYWNoZWRJbWFnZTogJzIwJzonJ1wiXHJcbiAgICAgICAgICAgICAgICAgIFtpc1JvdW5kXT1cInRydWVcIiBzaXplPVwiMjBcIiAoY2xpY2spPVwicHJvZmlsZVBhZ2UoZW1wbG95ZWUudXNlcklkKTskZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1hdmF0YXI+IFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTA1XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiZW1wbG95ZWUuaXRlbU5hbWUgfCBoaWdoTGlnaHRUZXh0IDogc2VhcmNoVGV4dFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW5zZWxlY3QtYXBwcyBtbC0wXCJcclxuICAgICAgICAqbmdJZj1cInJlY2VudFNlYXJjaGVzICYmIChyZWNlbnRTZWFyY2hlcy5sZW5ndGg+MCkgICYmICEoc2VhcmNoQnlJZCB8fCBzZWFyY2hCeVRleHQpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluLWhlYWRlclwiPnt7ICdTSEVMTC5SRUNFTlRTRUFSQ0hTJyB8IHRyYW5zbGF0ZX19PC9kaXY+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7IGhlaWdodDogNDQ1cHggIWltcG9ydGFudFwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgc2VhcmNoIG9mIHJlY2VudFNlYXJjaGVzIHwgc2xpY2U6MDo5IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJycyA9PSBpID8gdGhlbWVCYXNlQ29sb3IgOiAnd2hpdGUnXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbbmdDbGFzc109XCJycyA9PSBpID8gJ2NvbG9yLXRleHQnIDogJ2NvbG9yLXRleHQxJ1wiXHJcbiAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJzZWFyY2hUZXh0PXNlYXJjaC5yZWNlbnRTZWFyY2g7U2VhcmNoUmVjZW50SXRlbShzZWFyY2gsJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwidG9vbHRpcENsYXNzLW1hdFwiIG1hdFRvb2x0aXA9XCJ7e3NlYXJjaC5yZWNlbnRTZWFyY2ggfCBzb2Z0TGFiZWxzUGlwZSA6IHNvZnRMYWJlbHN9fSBcclxuICAgICAgICAgICh7eyBjb252ZXJ0VG9Mb2NhbFRpbWUoc2VhcmNoLmNyZWF0ZWREYXRlVGltZSkgfCB0aW1lYWdvIH19KVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwic2VhcmNoLnJlY2VudFNlYXJjaCB8IHNvZnRMYWJlbHNQaXBlIDogc29mdExhYmVscyB8IGhpZ2hMaWdodFRleHQgOiBzZWFyY2hUZXh0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICh7eyBjb252ZXJ0VG9Mb2NhbFRpbWUoc2VhcmNoLmNyZWF0ZWREYXRlVGltZSkgfCB0aW1lYWdvIH19KVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIGluLWhlYWRlciBcIiAqbmdJZj1cIiFzZWFyY2hUZXh0ICYmIHNlYXJjaEJ5SWRcIj5cclxuICAgICAgUGxlYXNlIGVudGVyIHVuaXF1ZSBpZCBhbmQgY2xpY2sgZW50ZXIgZm9yIG5hdmlnYXRpbmcgdG8gY29ycmVzcGluZyBwYWdlXHJcbiAgPC9kaXY+XHJcbiAgXHJcbiAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIGluLWhlYWRlciBcIiAqbmdJZj1cIiFzZWFyY2hUZXh0ICYmIHNlYXJjaEJ5VGV4dFwiID5cclxuICAgIFBsZWFzZSBlbnRlciB0ZXh0IHRvIHJldHJlaXZlIGRhdGEgYnkgZmlsdGVyaW5nXHJcbiAgPC9kaXY+IC0tPlxyXG4gIFxyXG5cclxuICA8c2F0LXBvcG92ZXIgYmFja2Ryb3BDbGFzcz1cImJhY2tkcm9wLWNvbG9yXCIgaGFzQmFja2Ryb3AgI2FkZFdvcmtzcGFjZSB2ZXJ0aWNhbEFsaWduPVwiYmVsb3dcIiBob3Jpem9udGFsQWxpZ249XCJlbmRcIlxyXG4gICAgW2ludGVyYWN0aXZlQ2xvc2VdPVwiZmFsc2VcIj5cclxuICAgIDxtYXQtY2FyZCBjbGFzcz1cImZpbHRlci1kYXRhIHAtMFwiPlxyXG4gICAgICA8bWF0LWNhcmQtdGl0bGUgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlLXRleHQgbWF0LWJnLXByaW1hcnkgcC0wNSBtYi0xXCI+XHJcbiAgICAgICAgICB7eyAnQVBQLkFERERBU0hCT0FSRFRJVExFJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1jYXJkLXRpdGxlPlxyXG4gICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cIndvcmtzcGFjZUZvcm1cIiBub3ZhbGlkYXRlIChzdWJtaXQpPVwid29ya3NwYWNlRm9ybS52YWxpZCAmJiB1cHNlcnRXb3Jrc3BhY2UoKVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwie3sgJ0hSTUFOQUdBTUVOVC5OQU1FJyB8IHRyYW5zbGF0ZX19KlwiIGZvcm1Db250cm9sTmFtZT1cIndvcmtzcGFjZU5hbWVcIiAvPlxyXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwid29ya3NwYWNlRm9ybS5nZXQoJ3dvcmtzcGFjZU5hbWUnKS5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiB3b3Jrc3BhY2VGb3JtLmdldCgnd29ya3NwYWNlTmFtZScpLnRvdWNoZWQgXCI+XHJcbiAgICAgICAgICAgICAgICB7eyAnQVBQLkRBU0hCT0FSRE5BTUVSRVFVSVJFRCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwid29ya3NwYWNlRm9ybS5nZXQoJ3dvcmtzcGFjZU5hbWUnKS5oYXNFcnJvcignbWF4bGVuZ3RoJylcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdBUFAuREFTSEJPQVJETkFNRUxFTkdUSEVYQ0VFRCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiIHJvd3M9XCIyXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ0NPTVBBTllTRVRUSU5HUy5ERVNDUklQVElPTicgfCB0cmFuc2xhdGUgfX1cIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwid29ya3NwYWNlRm9ybS5nZXQoJ2Rlc2NyaXB0aW9uJykuaGFzRXJyb3IoJ21heGxlbmd0aCcpICYmIHdvcmtzcGFjZUZvcm0uZ2V0KCdkZXNjcmlwdGlvbicpLnRvdWNoZWRcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdBUFAuQ1VTVE9NQVBQREVTQ1JJUFRJT05NQVhMRU5HVEhFUlJPUicgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0ZWRSb2xlc1wiIFtjb21wYXJlV2l0aF09XCJjb21wYXJlU2VsZWN0ZWRSb2xlc0ZuXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1dJREdFVFMuVklFV1JPTEVTJyB8IHRyYW5zbGF0ZSB9fVwiIG11bHRpcGxlIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gI2FsbFNlbGVjdGVkIChjbGljayk9XCJ0b2dnbGVBbGxSb2xlc1NlbGVjdGVkKClcIiBbdmFsdWVdPVwiMFwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyAnUEVSTUlTU0lPTk1BTkFHRU1FTlQuU0VMRUNUQUxMJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJyb2xlcy5yb2xlSWRcIiAqbmdGb3I9XCJsZXQgcm9sZXMgb2Ygcm9sZXNEcm9wRG93blwiICNhbGxTZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUm9sZXNQZXJPbmUoYWxsU2VsZWN0ZWQudmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvbGVzLnJvbGVOYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwid29ya3NwYWNlRm9ybS5nZXQoJ3NlbGVjdGVkUm9sZXMnKS5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiB3b3Jrc3BhY2VGb3JtLmdldCgnc2VsZWN0ZWRSb2xlcycpLnRvdWNoZWRcIj5cclxuICAgICAgICAgICAgICAgIHt7ICdBUFAuU0VMRUNUQU5ZUk9MRScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImVkaXRSb2xlSWRzXCIgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVFZGl0U2VsZWN0ZWRSb2xlc0ZuXCJcclxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1dJREdFVFMuRURJVFJPTEVTJyB8IHRyYW5zbGF0ZSB9fVwiIG11bHRpcGxlPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gI2FsbEVkaXRTZWxlY3RlZCAoY2xpY2spPVwidG9nZ2xlRWRpdEFsbFJvbGVzU2VsZWN0ZWQoKVwiIFt2YWx1ZV09XCIwXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7ICdQRVJNSVNTSU9OTUFOQUdFTUVOVC5TRUxFQ1RBTEwnIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInJvbGUucm9sZUlkXCIgKm5nRm9yPVwibGV0IHJvbGUgb2Ygcm9sZXNEcm9wRG93blwiICNhbGxFZGl0U2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUVkaXRSb2xlc1Blck9uZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvbGUucm9sZU5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJkZWxldGVSb2xlSWRzXCIgW2NvbXBhcmVXaXRoXT1cImNvbXBhcmVEZWxldGVTZWxlY3RlZFJvbGVzRm5cIlxyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnV0lER0VUUy5ERUxFVEVST0xFUycgfCB0cmFuc2xhdGUgfX1cIiBtdWx0aXBsZT5cclxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICNhbGxEZWxldGVTZWxlY3RlZCAoY2xpY2spPVwidG9nZ2xlRGVsZXRlQWxsUm9sZXNTZWxlY3RlZCgpXCIgW3ZhbHVlXT1cIjBcIj5cclxuICAgICAgICAgICAgICAgICAge3sgJ1BFUk1JU1NJT05NQU5BR0VNRU5ULlNFTEVDVEFMTCcgfCB0cmFuc2xhdGUgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwicm9sZS5yb2xlSWRcIiAqbmdGb3I9XCJsZXQgcm9sZSBvZiByb2xlc0Ryb3BEb3duXCIgI2FsbERlbGV0ZVNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEZWxldGVSb2xlc1Blck9uZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHJvbGUucm9sZU5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibXItMVwiIG1hdC1idXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ1cHNlcnRXb3Jrc3BhY2UoKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF3b3Jrc3BhY2VGb3JtLnZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgY29sb3I9XCJwcmltYXJ5XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAqbmdJZj1cImRhc2hib2FyZFVwZGF0ZUluUHJvZ3Jlc3NcIj5cclxuICAgICAgICAgICAgICA8L21hdC1wcm9ncmVzcy1iYXI+XHJcbiAgICAgICAgICAgICAgPGZhLWljb24gY2xhc3M9XCJtci0wNVwiIGljb249XCJwbHVzXCI+PC9mYS1pY29uPiB7eyAnU0FWRScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlQWRkV29ya3NwYWNlRGlhbG9nKClcIj5cclxuICAgICAgICAgICAgICA8ZmEtaWNvbiBjbGFzcz1cIm1yLTA1XCIgaWNvbj1cInRpbWVzXCI+PC9mYS1pY29uPiB7eyAnQ0FOQ0VMJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgICAgPC9tYXQtY2FyZC1jb250ZW50PlxyXG4gICAgPC9tYXQtY2FyZD5cclxuICA8L3NhdC1wb3BvdmVyPlxyXG5cclxuXHJcbiAgPHNhdC1wb3BvdmVyICNwIGhhc0JhY2tkcm9wIFtpbnRlcmFjdGl2ZUNsb3NlXT1cInRydWVcIiB2ZXJ0aWNhbEFsaWduPVwiYWJvdmVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLXdyYXBwZXJcIj5cclxuICAgICAgPHRhYmxlPlxyXG4gICAgICAgIDx0cj5cclxuICAgICAgICAgIDx0ZD5DdHJsICsgUTogPC90ZD5cclxuICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPlxyXG4gICAgICAgICAgPHRkPiB7eyAnU0hFTEwuVE9PUEVOU0VBUkNITUVOVScgfCB0cmFuc2xhdGV9fTwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8dGQ+Q3RybCArIEI6IDwvdGQ+XHJcbiAgICAgICAgICA8dGQ+Jm5ic3A7PC90ZD5cclxuICAgICAgICAgIDx0ZD4ge3sgJ1NIRUxMLlRPT1BFTkdPQUxTQU5EVVNFUlMnIHwgdHJhbnNsYXRlfX08L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRkPkN0cmwgKyBZOiA8L3RkPlxyXG4gICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+XHJcbiAgICAgICAgICA8dGQ+IHt7ICdTSEVMTC5UT1NFQVJDSEJZSUQnIHwgdHJhbnNsYXRlfX08L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPHRkPkN0cmwgKyBNOiA8L3RkPlxyXG4gICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+XHJcbiAgICAgICAgICA8dGQ+IHt7ICdTSEVMTC5UT0NMT1NFTUVOVScgfCB0cmFuc2xhdGV9fTwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gIDwvc2F0LXBvcG92ZXI+XHJcblxyXG4gIDxtYXQtc3Bpbm5lciAqbmdJZj1cInNlYXJjaEJ5VGV4dExvYWRpbmcgJiYgZGlzcGxheVwiIGNsYXNzPVwic3Bpbm5lci1jbGFzc1wiIFtkaWFtZXRlcl09XCIxMDBcIj48L21hdC1zcGlubmVyPiJdfQ==
|