@sunbird-cb/toc 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/esm2022/lib/_collection/_common/attendance-card/attendance-card.component.mjs +55 -0
- package/esm2022/lib/_collection/_common/attendance-card/attendance-card.module.mjs +126 -0
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.component.mjs +32 -0
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.module.mjs +85 -0
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.component.mjs +100 -0
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.module.mjs +48 -0
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.component.mjs +120 -0
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.module.mjs +92 -0
- package/esm2022/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.mjs +48 -0
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.component.mjs +25 -0
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.module.mjs +41 -0
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover-card.component.mjs +89 -0
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.module.mjs +42 -0
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.servive.mjs +41 -0
- package/esm2022/lib/_collection/_common/connection-name/connection-name.component.mjs +78 -0
- package/esm2022/lib/_collection/_common/connection-name/connection-name.module.mjs +45 -0
- package/esm2022/lib/_collection/_common/connection-name/profile-v2.model.mjs +2 -0
- package/esm2022/lib/_collection/_common/content-progress/content-progress.component.mjs +70 -0
- package/esm2022/lib/_collection/_common/content-progress/content-progress.module.mjs +28 -0
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.mjs +187 -0
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.mjs +86 -0
- package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +31 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +941 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.mjs +183 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.mjs +327 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.mjs +297 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +223 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +591 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.mjs +16 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.mjs +43 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.mjs +133 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.mjs +66 -0
- package/esm2022/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.mjs +278 -0
- package/esm2022/lib/_collection/_common/content-toc/content-services/handle-claim.service.mjs +21 -0
- package/esm2022/lib/_collection/_common/content-toc/content-services/review-component-data.service.mjs +21 -0
- package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +847 -0
- package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +219 -0
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +209 -0
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.module.mjs +26 -0
- package/esm2022/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.mjs +19 -0
- package/esm2022/lib/_collection/_common/content-toc/pipes/truncate.pipe.mjs +23 -0
- package/esm2022/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.mjs +113 -0
- package/esm2022/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.mjs +110 -0
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.component.mjs +26 -0
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.module.mjs +19 -0
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.mjs +67 -0
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.mjs +28 -0
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.component.mjs +77 -0
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.model.mjs +2 -0
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.module.mjs +61 -0
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.module.mjs +20 -0
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.mjs +73 -0
- package/esm2022/lib/_collection/_common/player-brief/player-brief.component.mjs +139 -0
- package/esm2022/lib/_collection/_common/player-brief/player-brief.module.mjs +71 -0
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.component.mjs +34 -0
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.module.mjs +56 -0
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.component.mjs +25 -0
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.module.mjs +37 -0
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.mjs +32 -0
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner.module.mjs +30 -0
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +38 -0
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.mjs +51 -0
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.component.mjs +115 -0
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.model.mjs +12 -0
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.module.mjs +51 -0
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.service.mjs +61 -0
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.component.mjs +87 -0
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.module.mjs +36 -0
- package/esm2022/lib/_collection/_common/user-image/user-image.component.mjs +62 -0
- package/esm2022/lib/_collection/_common/user-image/user-image.module.mjs +24 -0
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.component.mjs +192 -0
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.module.mjs +44 -0
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.service.mjs +99 -0
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.component.mjs +58 -0
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.module.mjs +67 -0
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.component.mjs +112 -0
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.model.mjs +2 -0
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.module.mjs +69 -0
- package/esm2022/lib/_collection-api.mjs +57 -0
- package/esm2022/lib/_constants/widget-content.constants.mjs +19 -0
- package/esm2022/lib/_directives/tooltip.directive.mjs +68 -0
- package/esm2022/lib/_models/common.model.mjs +2 -0
- package/esm2022/lib/_models/error.model.mjs +2 -0
- package/esm2022/lib/_pipes/highlight.pipe.mjs +24 -0
- package/esm2022/lib/_services/rating.service.mjs +89 -0
- package/esm2022/lib/_services/samuhik-charcha.service.mjs +29 -0
- package/esm2022/lib/_services/viewer-route-util.mjs +103 -0
- package/esm2022/lib/_services/widget-content.model.mjs +246 -0
- package/esm2022/lib/_services/widget-content.service.mjs +589 -0
- package/esm2022/lib/_shared/translate-loader.factory.mjs +9 -0
- package/esm2022/lib/app-toc-lib.module.mjs +499 -0
- package/esm2022/lib/collection.config.mjs +161 -0
- package/esm2022/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.mjs +37 -0
- package/esm2022/lib/components/app-toc-banner/app-toc-banner.component.mjs +1436 -0
- package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +475 -0
- package/esm2022/lib/components/app-toc-cios-home/consent-dialog.component.mjs +119 -0
- package/esm2022/lib/components/app-toc-cohorts/app-toc-cohorts.component.mjs +80 -0
- package/esm2022/lib/components/app-toc-content-card/app-toc-content-card.component.mjs +249 -0
- package/esm2022/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.mjs +39 -0
- package/esm2022/lib/components/app-toc-discussion/app-toc-discussion.component.mjs +58 -0
- package/esm2022/lib/components/app-toc-home/app-toc-home.component.mjs +2229 -0
- package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +2796 -0
- package/esm2022/lib/components/app-toc-overview/app-toc-overview.component.mjs +157 -0
- package/esm2022/lib/components/app-toc-session-card/app-toc-session-card.component.mjs +48 -0
- package/esm2022/lib/components/app-toc-sessions/app-toc-sessions.component.mjs +47 -0
- package/esm2022/lib/components/app-toc-single-page/app-toc-single-page.component.mjs +766 -0
- package/esm2022/lib/components/completion-survey-form/completion-survey-form.component.mjs +243 -0
- package/esm2022/lib/components/create-batch-dialog/create-batch-dialog.component.mjs +116 -0
- package/esm2022/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.mjs +44 -0
- package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +1838 -0
- package/esm2022/lib/components/enroll-questionnaire/enroll-questionnaire.component.mjs +236 -0
- package/esm2022/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.mjs +213 -0
- package/esm2022/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.mjs +36 -0
- package/esm2022/lib/components/public-survey-form/public-survey-form.component.mjs +256 -0
- package/esm2022/lib/components/survey-form-question/survey-form-question.component.mjs +133 -0
- package/esm2022/lib/components/survey-form-section/survey-form-section.component.mjs +36 -0
- package/esm2022/lib/models/app-toc-analytics.model.mjs +2 -0
- package/esm2022/lib/models/app-toc.model.mjs +38 -0
- package/esm2022/lib/models/auto-complete.model.mjs +2 -0
- package/esm2022/lib/models/card-content.model.mjs +13 -0
- package/esm2022/lib/models/content-strip-with-tabs.model.mjs +2 -0
- package/esm2022/lib/models/discussion-forum.model.mjs +14 -0
- package/esm2022/lib/models/goal.model.mjs +2 -0
- package/esm2022/lib/models/meta-tag.model.mjs +8 -0
- package/esm2022/lib/models/playlist.model.mjs +2 -0
- package/esm2022/lib/models/profile-revamp.model.mjs +2 -0
- package/esm2022/lib/models/rating.model.mjs +2 -0
- package/esm2022/lib/models/user-profile.model.mjs +21 -0
- package/esm2022/lib/resolvers/app-toc-cios-resolver.service.mjs +24 -0
- package/esm2022/lib/resolvers/app-toc-cios-user-enroll-resolver.service.mjs +24 -0
- package/esm2022/lib/resolvers/app-toc-content-read-resolver.service.mjs +60 -0
- package/esm2022/lib/resolvers/app-toc-ext-public-resolver.service.mjs +25 -0
- package/esm2022/lib/resolvers/app-toc-resolver.service.mjs +106 -0
- package/esm2022/lib/resolvers/config-resolver.service.mjs +25 -0
- package/esm2022/lib/resolvers/profile-resolver.service.mjs +25 -0
- package/esm2022/lib/resolvers/restricted-features-resolver.service.mjs +25 -0
- package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +51 -0
- package/esm2022/lib/routes/app-toc-home/app-toc-home.directive.mjs +16 -0
- package/esm2022/lib/routes/app-toc-home/app-toc-home.service.mjs +18 -0
- package/esm2022/lib/services/access-control.service.mjs +56 -0
- package/esm2022/lib/services/action.service.mjs +23 -0
- package/esm2022/lib/services/app-toc-v2.service.mjs +47 -0
- package/esm2022/lib/services/app-toc.service.mjs +1001 -0
- package/esm2022/lib/services/certificate.service.mjs +69 -0
- package/esm2022/lib/services/discuss-utils.service.mjs +58 -0
- package/esm2022/lib/services/editor.service.mjs +34 -0
- package/esm2022/lib/services/load-check.service.mjs +21 -0
- package/esm2022/lib/services/loader.service.mjs +33 -0
- package/esm2022/lib/services/mobile-apps.service.mjs +67 -0
- package/esm2022/lib/services/netcore.service.mjs +56 -0
- package/esm2022/lib/services/nps-grid.service.mjs +31 -0
- package/esm2022/lib/services/otp.service.mjs +43 -0
- package/esm2022/lib/services/profile-v2.service.mjs +43 -0
- package/esm2022/lib/services/reset-ratings.service.mjs +19 -0
- package/esm2022/lib/services/resource-download-helper.service.mjs +64 -0
- package/esm2022/lib/services/timer.service.mjs +23 -0
- package/esm2022/lib/services/title-tag.service.mjs +71 -0
- package/esm2022/lib/services/user-profile.service.mjs +55 -0
- package/esm2022/lib/services/viewer-data.service.mjs +64 -0
- package/esm2022/lib/services/viewer-util.service.mjs +500 -0
- package/esm2022/lib/share-toc/share-toc/share-toc.component.mjs +291 -0
- package/esm2022/lib/share-toc/share-toc.module.mjs +119 -0
- package/esm2022/public-api.mjs +56 -0
- package/esm2022/sunbird-cb-toc.mjs +5 -0
- package/fesm2022/sunbird-cb-toc.mjs +23517 -0
- package/fesm2022/sunbird-cb-toc.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +17 -0
- package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts.map +1 -0
- package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +32 -0
- package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts.map +1 -0
- package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +16 -0
- package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts.map +1 -0
- package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +21 -0
- package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts.map +1 -0
- package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +23 -0
- package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts.map +1 -0
- package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +16 -0
- package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts.map +1 -0
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +23 -0
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts.map +1 -0
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +23 -0
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts.map +1 -0
- package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +10 -0
- package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts.map +1 -0
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +12 -0
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts.map +1 -0
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +13 -0
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts.map +1 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +19 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts.map +1 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +15 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts.map +1 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +12 -0
- package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts.map +1 -0
- package/lib/_collection/_common/connection-name/connection-name.component.d.ts +18 -0
- package/lib/_collection/_common/connection-name/connection-name.component.d.ts.map +1 -0
- package/lib/_collection/_common/connection-name/connection-name.module.d.ts +15 -0
- package/lib/_collection/_common/connection-name/connection-name.module.d.ts.map +1 -0
- package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +200 -0
- package/lib/_collection/_common/connection-name/profile-v2.model.d.ts.map +1 -0
- package/lib/_collection/_common/content-progress/content-progress.component.d.ts +17 -0
- package/lib/_collection/_common/content-progress/content-progress.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-progress/content-progress.module.d.ts +11 -0
- package/lib/_collection/_common/content-progress/content-progress.module.d.ts.map +1 -0
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +39 -0
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +20 -0
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +12 -0
- package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +184 -0
- package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +42 -0
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +55 -0
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +48 -0
- package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +49 -0
- package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +92 -0
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +9 -0
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +17 -0
- package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +41 -0
- package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +22 -0
- package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +46 -0
- package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +11 -0
- package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +11 -0
- package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts +129 -0
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/content-toc.module.d.ts +52 -0
- package/lib/_collection/_common/content-toc/content-toc.module.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +30 -0
- package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +10 -0
- package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +8 -0
- package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +8 -0
- package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +29 -0
- package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts.map +1 -0
- package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +25 -0
- package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts.map +1 -0
- package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +15 -0
- package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts.map +1 -0
- package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +10 -0
- package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts.map +1 -0
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +13 -0
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts.map +1 -0
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +11 -0
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts.map +1 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +23 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts.map +1 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +9 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts.map +1 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +19 -0
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts.map +1 -0
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +9 -0
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts.map +1 -0
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +17 -0
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts.map +1 -0
- package/lib/_collection/_common/player-brief/player-brief.component.d.ts +36 -0
- package/lib/_collection/_common/player-brief/player-brief.component.d.ts.map +1 -0
- package/lib/_collection/_common/player-brief/player-brief.module.d.ts +20 -0
- package/lib/_collection/_common/player-brief/player-brief.module.d.ts.map +1 -0
- package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +15 -0
- package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts.map +1 -0
- package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +14 -0
- package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts.map +1 -0
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +12 -0
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +12 -0
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts.map +1 -0
- package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +16 -0
- package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts.map +1 -0
- package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +11 -0
- package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts.map +1 -0
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +17 -0
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts.map +1 -0
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +12 -0
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts.map +1 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +35 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts.map +1 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +18 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts.map +1 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +16 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts.map +1 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +16 -0
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts.map +1 -0
- package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +22 -0
- package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts.map +1 -0
- package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +13 -0
- package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts.map +1 -0
- package/lib/_collection/_common/user-image/user-image.component.d.ts +22 -0
- package/lib/_collection/_common/user-image/user-image.component.d.ts.map +1 -0
- package/lib/_collection/_common/user-image/user-image.module.d.ts +10 -0
- package/lib/_collection/_common/user-image/user-image.module.d.ts.map +1 -0
- package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +48 -0
- package/lib/_collection/btn-page-back/btn-page-back.component.d.ts.map +1 -0
- package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +15 -0
- package/lib/_collection/btn-page-back/btn-page-back.module.d.ts.map +1 -0
- package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +23 -0
- package/lib/_collection/btn-page-back/btn-page-back.service.d.ts.map +1 -0
- package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +20 -0
- package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts.map +1 -0
- package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +16 -0
- package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts.map +1 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +26 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts.map +1 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +22 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts.map +1 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +19 -0
- package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts.map +1 -0
- package/lib/_collection-api.d.ts +35 -0
- package/lib/_collection-api.d.ts.map +1 -0
- package/lib/_constants/widget-content.constants.d.ts +8 -0
- package/lib/_constants/widget-content.constants.d.ts.map +1 -0
- package/lib/_directives/tooltip.directive.d.ts +18 -0
- package/lib/_directives/tooltip.directive.d.ts.map +1 -0
- package/lib/_models/common.model.d.ts +4 -0
- package/lib/_models/common.model.d.ts.map +1 -0
- package/lib/_models/error.model.d.ts +6 -0
- package/lib/_models/error.model.d.ts.map +1 -0
- package/lib/_pipes/highlight.pipe.d.ts +11 -0
- package/lib/_pipes/highlight.pipe.d.ts.map +1 -0
- package/lib/_services/rating.service.d.ts +19 -0
- package/lib/_services/rating.service.d.ts.map +1 -0
- package/lib/_services/samuhik-charcha.service.d.ts +14 -0
- package/lib/_services/samuhik-charcha.service.d.ts.map +1 -0
- package/lib/_services/viewer-route-util.d.ts +9 -0
- package/lib/_services/viewer-route-util.d.ts.map +1 -0
- package/lib/_services/widget-content.model.d.ts +515 -0
- package/lib/_services/widget-content.model.d.ts.map +1 -0
- package/lib/_services/widget-content.service.d.ts +101 -0
- package/lib/_services/widget-content.service.d.ts.map +1 -0
- package/lib/_shared/translate-loader.factory.d.ts +8 -0
- package/lib/_shared/translate-loader.factory.d.ts.map +1 -0
- package/lib/app-toc-lib.module.d.ts +89 -0
- package/lib/app-toc-lib.module.d.ts.map +1 -0
- package/lib/collection.config.d.ts +160 -0
- package/lib/collection.config.d.ts.map +1 -0
- package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +18 -0
- package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts.map +1 -0
- package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +226 -0
- package/lib/components/app-toc-banner/app-toc-banner.component.d.ts.map +1 -0
- package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +79 -0
- package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts.map +1 -0
- package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +23 -0
- package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts.map +1 -0
- package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +32 -0
- package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts.map +1 -0
- package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +48 -0
- package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts.map +1 -0
- package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +15 -0
- package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts.map +1 -0
- package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +22 -0
- package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts.map +1 -0
- package/lib/components/app-toc-home/app-toc-home.component.d.ts +315 -0
- package/lib/components/app-toc-home/app-toc-home.component.d.ts.map +1 -0
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +386 -0
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts.map +1 -0
- package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +48 -0
- package/lib/components/app-toc-overview/app-toc-overview.component.d.ts.map +1 -0
- package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +23 -0
- package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts.map +1 -0
- package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +15 -0
- package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts.map +1 -0
- package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +150 -0
- package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts.map +1 -0
- package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +43 -0
- package/lib/components/completion-survey-form/completion-survey-form.component.d.ts.map +1 -0
- package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +28 -0
- package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts.map +1 -0
- package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +16 -0
- package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts.map +1 -0
- package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +196 -0
- package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts.map +1 -0
- package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +45 -0
- package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts.map +1 -0
- package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +55 -0
- package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts.map +1 -0
- package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +19 -0
- package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts.map +1 -0
- package/lib/components/public-survey-form/public-survey-form.component.d.ts +44 -0
- package/lib/components/public-survey-form/public-survey-form.component.d.ts.map +1 -0
- package/lib/components/survey-form-question/survey-form-question.component.d.ts +21 -0
- package/lib/components/survey-form-question/survey-form-question.component.d.ts.map +1 -0
- package/lib/components/survey-form-section/survey-form-section.component.d.ts +14 -0
- package/lib/components/survey-form-section/survey-form-section.component.d.ts.map +1 -0
- package/lib/models/app-toc-analytics.model.d.ts +153 -0
- package/lib/models/app-toc-analytics.model.d.ts.map +1 -0
- package/lib/models/app-toc.model.d.ts +85 -0
- package/lib/models/app-toc.model.d.ts.map +1 -0
- package/lib/models/auto-complete.model.d.ts +28 -0
- package/lib/models/auto-complete.model.d.ts.map +1 -0
- package/lib/models/card-content.model.d.ts +20 -0
- package/lib/models/card-content.model.d.ts.map +1 -0
- package/lib/models/content-strip-with-tabs.model.d.ts +45 -0
- package/lib/models/content-strip-with-tabs.model.d.ts.map +1 -0
- package/lib/models/discussion-forum.model.d.ts +41 -0
- package/lib/models/discussion-forum.model.d.ts.map +1 -0
- package/lib/models/goal.model.d.ts +23 -0
- package/lib/models/goal.model.d.ts.map +1 -0
- package/lib/models/meta-tag.model.d.ts +7 -0
- package/lib/models/meta-tag.model.d.ts.map +1 -0
- package/lib/models/playlist.model.d.ts +24 -0
- package/lib/models/playlist.model.d.ts.map +1 -0
- package/lib/models/profile-revamp.model.d.ts +15 -0
- package/lib/models/profile-revamp.model.d.ts.map +1 -0
- package/lib/models/rating.model.d.ts +18 -0
- package/lib/models/rating.model.d.ts.map +1 -0
- package/lib/models/user-profile.model.d.ts +38 -0
- package/lib/models/user-profile.model.d.ts.map +1 -0
- package/lib/resolvers/app-toc-cios-resolver.service.d.ts +13 -0
- package/lib/resolvers/app-toc-cios-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +13 -0
- package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +17 -0
- package/lib/resolvers/app-toc-content-read-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +13 -0
- package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/app-toc-resolver.service.d.ts +17 -0
- package/lib/resolvers/app-toc-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/config-resolver.service.d.ts +12 -0
- package/lib/resolvers/config-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/profile-resolver.service.d.ts +12 -0
- package/lib/resolvers/profile-resolver.service.d.ts.map +1 -0
- package/lib/resolvers/restricted-features-resolver.service.d.ts +12 -0
- package/lib/resolvers/restricted-features-resolver.service.d.ts.map +1 -0
- package/lib/routes/app-toc-home/app-toc-home.component.d.ts +20 -0
- package/lib/routes/app-toc-home/app-toc-home.component.d.ts.map +1 -0
- package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +9 -0
- package/lib/routes/app-toc-home/app-toc-home.directive.d.ts.map +1 -0
- package/lib/routes/app-toc-home/app-toc-home.service.d.ts +9 -0
- package/lib/routes/app-toc-home/app-toc-home.service.d.ts.map +1 -0
- package/lib/services/access-control.service.d.ts +30 -0
- package/lib/services/access-control.service.d.ts.map +1 -0
- package/lib/services/action.service.d.ts +10 -0
- package/lib/services/action.service.d.ts.map +1 -0
- package/lib/services/app-toc-v2.service.d.ts +8 -0
- package/lib/services/app-toc-v2.service.d.ts.map +1 -0
- package/lib/services/app-toc.service.d.ts +131 -0
- package/lib/services/app-toc.service.d.ts.map +1 -0
- package/lib/services/certificate.service.d.ts +43 -0
- package/lib/services/certificate.service.d.ts.map +1 -0
- package/lib/services/discuss-utils.service.d.ts +34 -0
- package/lib/services/discuss-utils.service.d.ts.map +1 -0
- package/lib/services/editor.service.d.ts +18 -0
- package/lib/services/editor.service.d.ts.map +1 -0
- package/lib/services/load-check.service.d.ts +9 -0
- package/lib/services/load-check.service.d.ts.map +1 -0
- package/lib/services/loader.service.d.ts +17 -0
- package/lib/services/loader.service.d.ts.map +1 -0
- package/lib/services/mobile-apps.service.d.ts +39 -0
- package/lib/services/mobile-apps.service.d.ts.map +1 -0
- package/lib/services/netcore.service.d.ts +34 -0
- package/lib/services/netcore.service.d.ts.map +1 -0
- package/lib/services/nps-grid.service.d.ts +16 -0
- package/lib/services/nps-grid.service.d.ts.map +1 -0
- package/lib/services/otp.service.d.ts +21 -0
- package/lib/services/otp.service.d.ts.map +1 -0
- package/lib/services/profile-v2.service.d.ts +21 -0
- package/lib/services/profile-v2.service.d.ts.map +1 -0
- package/lib/services/reset-ratings.service.d.ts +9 -0
- package/lib/services/reset-ratings.service.d.ts.map +1 -0
- package/lib/services/resource-download-helper.service.d.ts +30 -0
- package/lib/services/resource-download-helper.service.d.ts.map +1 -0
- package/lib/services/timer.service.d.ts +10 -0
- package/lib/services/timer.service.d.ts.map +1 -0
- package/lib/services/title-tag.service.d.ts +22 -0
- package/lib/services/title-tag.service.d.ts.map +1 -0
- package/lib/services/user-profile.service.d.ts +25 -0
- package/lib/services/user-profile.service.d.ts.map +1 -0
- package/lib/services/viewer-data.service.d.ts +59 -0
- package/lib/services/viewer-data.service.d.ts.map +1 -0
- package/lib/services/viewer-util.service.d.ts +63 -0
- package/lib/services/viewer-util.service.d.ts.map +1 -0
- package/lib/share-toc/share-toc/share-toc.component.d.ts +57 -0
- package/lib/share-toc/share-toc/share-toc.component.d.ts.map +1 -0
- package/lib/share-toc/share-toc.module.d.ts +33 -0
- package/lib/share-toc/share-toc.module.d.ts.map +1 -0
- package/package.json +36 -0
- package/public-api.d.ts +44 -0
- package/public-api.d.ts.map +1 -0
- package/sunbird-cb-toc.d.ts.map +1 -0
|
@@ -0,0 +1,1436 @@
|
|
|
1
|
+
import { Component, EventEmitter, Inject, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { NavigationEnd } from '@angular/router';
|
|
3
|
+
import { NsContent } from '../../_services/widget-content.model';
|
|
4
|
+
import { viewerRouteGenerator } from '../../_services/viewer-route-util';
|
|
5
|
+
import { WsEvents } from '@sunbird-cb/utils-v2';
|
|
6
|
+
import { ConfirmDialogComponent } from '../../_collection/_common/confirm-dialog/confirm-dialog.component';
|
|
7
|
+
import { AccessControlService } from '../../services/access-control.service';
|
|
8
|
+
import { AppTocDialogIntroVideoComponent } from '../app-toc-dialog-intro-video/app-toc-dialog-intro-video.component';
|
|
9
|
+
import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';
|
|
10
|
+
import dayjs from 'dayjs';
|
|
11
|
+
import * as lodash from 'lodash';
|
|
12
|
+
// tslint:disable-next-line
|
|
13
|
+
import _ from 'lodash';
|
|
14
|
+
import { DatePipe } from '@angular/common';
|
|
15
|
+
import isSameOrBefore from 'dayjs/plugin/isSameOrBefore';
|
|
16
|
+
import isSameOrAfter from 'dayjs/plugin/isSameOrAfter';
|
|
17
|
+
import { EnrollQuestionnaireComponent } from '../enroll-questionnaire/enroll-questionnaire.component';
|
|
18
|
+
import { ENTER } from '@angular/cdk/keycodes';
|
|
19
|
+
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
|
20
|
+
import { EnrollProfileFormComponent } from '../enroll-profile-form/enroll-profile-form.component';
|
|
21
|
+
import * as i0 from "@angular/core";
|
|
22
|
+
import * as i1 from "@angular/platform-browser";
|
|
23
|
+
import * as i2 from "@angular/router";
|
|
24
|
+
import * as i3 from "@angular/material/legacy-dialog";
|
|
25
|
+
import * as i4 from "../../services/app-toc.service";
|
|
26
|
+
import * as i5 from "../../_services/widget-content.service";
|
|
27
|
+
import * as i6 from "@sunbird-cb/utils-v2";
|
|
28
|
+
import * as i7 from "../../services/mobile-apps.service";
|
|
29
|
+
import * as i8 from "@angular/material/legacy-snack-bar";
|
|
30
|
+
import * as i9 from "../../services/title-tag.service";
|
|
31
|
+
import * as i10 from "../../services/action.service";
|
|
32
|
+
import * as i11 from "@angular/common";
|
|
33
|
+
import * as i12 from "@ngx-translate/core";
|
|
34
|
+
import * as i13 from "../../_collection/_common/user-autocomplete/user-autocomplete.service";
|
|
35
|
+
import * as i14 from "../../services/timer.service";
|
|
36
|
+
import * as i15 from "@angular/forms";
|
|
37
|
+
import * as i16 from "@angular/material/icon";
|
|
38
|
+
import * as i17 from "@angular/material/legacy-button";
|
|
39
|
+
import * as i18 from "@angular/material/legacy-form-field";
|
|
40
|
+
import * as i19 from "@angular/material/legacy-menu";
|
|
41
|
+
import * as i20 from "@angular/material/legacy-chips";
|
|
42
|
+
import * as i21 from "@angular/material/legacy-progress-spinner";
|
|
43
|
+
import * as i22 from "@angular/material/legacy-select";
|
|
44
|
+
import * as i23 from "@angular/material/legacy-core";
|
|
45
|
+
import * as i24 from "@angular/material/legacy-autocomplete";
|
|
46
|
+
dayjs.extend(isSameOrBefore);
|
|
47
|
+
dayjs.extend(isSameOrAfter);
|
|
48
|
+
export class AppTocBannerComponent {
|
|
49
|
+
constructor(sanitizer, router, route, dialog, tocSvc, contentSvc, utilitySvc, mobileAppsSvc, snackBar, configSvc, tagSvc, actionSVC, logger, datePipe, translate, userAutoComplete, events, langtranslations, timerService, environment) {
|
|
50
|
+
this.sanitizer = sanitizer;
|
|
51
|
+
this.router = router;
|
|
52
|
+
this.route = route;
|
|
53
|
+
this.dialog = dialog;
|
|
54
|
+
this.tocSvc = tocSvc;
|
|
55
|
+
this.contentSvc = contentSvc;
|
|
56
|
+
this.utilitySvc = utilitySvc;
|
|
57
|
+
this.mobileAppsSvc = mobileAppsSvc;
|
|
58
|
+
this.snackBar = snackBar;
|
|
59
|
+
this.configSvc = configSvc;
|
|
60
|
+
this.tagSvc = tagSvc;
|
|
61
|
+
this.actionSVC = actionSVC;
|
|
62
|
+
this.logger = logger;
|
|
63
|
+
this.datePipe = datePipe;
|
|
64
|
+
this.translate = translate;
|
|
65
|
+
this.userAutoComplete = userAutoComplete;
|
|
66
|
+
this.events = events;
|
|
67
|
+
this.langtranslations = langtranslations;
|
|
68
|
+
this.timerService = timerService;
|
|
69
|
+
this.environment = environment;
|
|
70
|
+
this.show = false;
|
|
71
|
+
this.banners = null;
|
|
72
|
+
this.content = null;
|
|
73
|
+
this.resumeData = null;
|
|
74
|
+
this.analytics = null;
|
|
75
|
+
this.forPreview = false;
|
|
76
|
+
this.batchData = null;
|
|
77
|
+
this.userEnrollmentList = null;
|
|
78
|
+
this.withdrawOrEnroll = new EventEmitter();
|
|
79
|
+
this.contentReadData = null;
|
|
80
|
+
this.clickToShare = false;
|
|
81
|
+
this.programEnrollCall = new EventEmitter();
|
|
82
|
+
this.nsContent = NsContent;
|
|
83
|
+
this.batchControl = new UntypedFormControl('', Validators.required);
|
|
84
|
+
this.primaryCategory = NsContent.EPrimaryCategory;
|
|
85
|
+
this.WFBlendedProgramStatus = NsContent.WFBlendedProgramStatus;
|
|
86
|
+
this.WFSTATUS_MSG_MAPPING = NsContent.WFSTATUS_MSG_MAPPING;
|
|
87
|
+
this.contentProgress = 0;
|
|
88
|
+
this.bannerUrl = null;
|
|
89
|
+
this.routePath = 'overview';
|
|
90
|
+
this.validPaths = new Set(['overview', 'contents', 'analytics']);
|
|
91
|
+
this.routerParamSubscription = null;
|
|
92
|
+
this.routeSubscription = null;
|
|
93
|
+
this.batchWFDataSubscription = null;
|
|
94
|
+
this.firstResourceLink = null;
|
|
95
|
+
this.resumeDataLink = null;
|
|
96
|
+
this.isAssessVisible = false;
|
|
97
|
+
this.isPracticeVisible = false;
|
|
98
|
+
this.editButton = false;
|
|
99
|
+
this.reviewButton = false;
|
|
100
|
+
this.analyticsDataClient = null;
|
|
101
|
+
this.btnPlaylistConfig = null;
|
|
102
|
+
this.btnGoalsConfig = null;
|
|
103
|
+
this.isRegistrationSupported = false;
|
|
104
|
+
this.showRejected = false;
|
|
105
|
+
this.checkRegistrationSources = new Set([
|
|
106
|
+
'SkillSoft Digitalization',
|
|
107
|
+
'SkillSoft Leadership',
|
|
108
|
+
'Pluralsight',
|
|
109
|
+
]);
|
|
110
|
+
this.isUserRegistered = false;
|
|
111
|
+
this.actionBtnStatus = 'wait';
|
|
112
|
+
this.showIntranetMessage = false;
|
|
113
|
+
this.showTakeAssessment = null;
|
|
114
|
+
this.externalContentFetchStatus = 'done';
|
|
115
|
+
this.registerForExternal = false;
|
|
116
|
+
this.isGoalsEnabled = false;
|
|
117
|
+
this.tocConfig = null;
|
|
118
|
+
this.defaultSLogo = '';
|
|
119
|
+
this.disableEnrollBtn = false;
|
|
120
|
+
this.helpEmail = '';
|
|
121
|
+
this.difference = 0;
|
|
122
|
+
this.serverDate = new Date();
|
|
123
|
+
this.canShare = false;
|
|
124
|
+
this.enableShare = false;
|
|
125
|
+
this.selectable = true;
|
|
126
|
+
this.removable = true;
|
|
127
|
+
this.addOnBlur = true;
|
|
128
|
+
this.separatorKeysCodes = [ENTER];
|
|
129
|
+
this.userCtrl = new UntypedFormControl('');
|
|
130
|
+
this.users = [];
|
|
131
|
+
this.allUsers = [];
|
|
132
|
+
this.doptEligibleServicesList = [];
|
|
133
|
+
this.maxEmailsLimit = 30;
|
|
134
|
+
this.showLoader = false;
|
|
135
|
+
this.langtranslations.languageSelectedObservable.subscribe(() => {
|
|
136
|
+
if (localStorage.getItem('websiteLanguage')) {
|
|
137
|
+
this.translate.setDefaultLang('en');
|
|
138
|
+
const lang = localStorage.getItem('websiteLanguage');
|
|
139
|
+
this.translate.use(lang);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
this.helpEmail = this.environment.helpEmail;
|
|
143
|
+
this.shareForm = new UntypedFormGroup({
|
|
144
|
+
review: new UntypedFormControl(null, [Validators.minLength(1), Validators.maxLength(2000)]),
|
|
145
|
+
});
|
|
146
|
+
this.userCtrl.valueChanges.pipe(debounceTime(200), distinctUntilChanged()).subscribe((res) => {
|
|
147
|
+
if (res) {
|
|
148
|
+
this.filteredUsers = [];
|
|
149
|
+
// this.allUsers = []
|
|
150
|
+
this.getUsersToShare(res);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
ngOnInit() {
|
|
155
|
+
// this.serverDate = new Date().getTime()
|
|
156
|
+
this.serverDateSubscription = this.tocSvc.serverDate.subscribe(serverDate => {
|
|
157
|
+
this.serverDate = serverDate;
|
|
158
|
+
this.clearAndCallTimer();
|
|
159
|
+
});
|
|
160
|
+
this.route.data.subscribe(data => {
|
|
161
|
+
this.tocConfig = data.pageData.data;
|
|
162
|
+
if (this.content && this.isPostAssessment) {
|
|
163
|
+
this.tocSvc.fetchPostAssessmentStatus(this.content.identifier).subscribe(res => {
|
|
164
|
+
const assessmentData = res.result;
|
|
165
|
+
for (const o of assessmentData) {
|
|
166
|
+
if (o.contentId === (this.content && this.content.identifier)) {
|
|
167
|
+
this.showTakeAssessment = o;
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
if (this.content && this.content.identifier) {
|
|
174
|
+
// this.tocSvc.fetchGetContentData(this.content.identifier).subscribe(res => {
|
|
175
|
+
// this.contentReadData = res.result.content
|
|
176
|
+
// })
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
const instanceConfig = this.configSvc.instanceConfig;
|
|
180
|
+
if (instanceConfig && instanceConfig.logos && instanceConfig.logos.defaultSourceLogo) {
|
|
181
|
+
this.defaultSLogo = instanceConfig.logos.defaultSourceLogo;
|
|
182
|
+
}
|
|
183
|
+
if (this.configSvc.restrictedFeatures) {
|
|
184
|
+
this.isGoalsEnabled = !this.configSvc.restrictedFeatures.has('goals');
|
|
185
|
+
}
|
|
186
|
+
this.routeSubscription = this.route.queryParamMap.subscribe(qParamsMap => {
|
|
187
|
+
const contextId = qParamsMap.get('contextId');
|
|
188
|
+
const contextPath = qParamsMap.get('contextPath');
|
|
189
|
+
if (contextId && contextPath) {
|
|
190
|
+
this.contextId = contextId;
|
|
191
|
+
this.contextPath = contextPath;
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
this.batchWFDataSubscription = this.tocSvc.setWFDataSubject.subscribe(() => {
|
|
195
|
+
this.setBatchControl();
|
|
196
|
+
}, () => {
|
|
197
|
+
// tslint:disable-next-line: no-console
|
|
198
|
+
console.log('error on batchWFDataSubscription');
|
|
199
|
+
});
|
|
200
|
+
if (this.configSvc.restrictedFeatures) {
|
|
201
|
+
this.isRegistrationSupported = this.configSvc.restrictedFeatures.has('registrationExternal');
|
|
202
|
+
this.showIntranetMessage = !this.configSvc.restrictedFeatures.has('showIntranetMessageDesktop');
|
|
203
|
+
}
|
|
204
|
+
this.selectedBatchSubscription = this.tocSvc.getSelectedBatch.subscribe(batchData => {
|
|
205
|
+
this.selectedBatchData = batchData;
|
|
206
|
+
});
|
|
207
|
+
this.checkRegistrationStatus();
|
|
208
|
+
this.routerParamSubscription = this.router.events.subscribe((routerEvent) => {
|
|
209
|
+
if (routerEvent instanceof NavigationEnd) {
|
|
210
|
+
this.assignPathAndUpdateBanner(routerEvent.url);
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
if (this.configSvc.restrictedFeatures) {
|
|
214
|
+
this.isGoalsEnabled = !this.configSvc.restrictedFeatures.has('goals');
|
|
215
|
+
}
|
|
216
|
+
if (this.content) {
|
|
217
|
+
this.btnPlaylistConfig = {
|
|
218
|
+
contentId: this.content.identifier,
|
|
219
|
+
contentName: this.content.name,
|
|
220
|
+
contentType: this.content.contentType,
|
|
221
|
+
primaryCategory: this.content.primaryCategory,
|
|
222
|
+
mode: 'dialog',
|
|
223
|
+
};
|
|
224
|
+
this.btnGoalsConfig = {
|
|
225
|
+
contentId: this.content.identifier,
|
|
226
|
+
contentName: this.content.name,
|
|
227
|
+
contentType: this.content.contentType,
|
|
228
|
+
primaryCategory: this.content.primaryCategory,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
if (this.content && ![
|
|
232
|
+
NsContent.ECourseCategory.MODERATED_COURSE,
|
|
233
|
+
NsContent.ECourseCategory.MODERATED_ASSESSEMENT,
|
|
234
|
+
NsContent.ECourseCategory.MODERATED_PROGRAM,
|
|
235
|
+
NsContent.ECourseCategory.INVITE_ONLY_PROGRAM,
|
|
236
|
+
].includes(this.content.courseCategory)) {
|
|
237
|
+
this.canShare = true;
|
|
238
|
+
if (this.configSvc.userProfile) {
|
|
239
|
+
this.rootOrgId = this.configSvc.userProfile.rootOrgId;
|
|
240
|
+
this.userProfile = this.configSvc.userProfile;
|
|
241
|
+
this.userProfileObject = this.configSvc.unMappedUser;
|
|
242
|
+
// this.getUsersToShare('')
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
getUsersToShare(queryStr) {
|
|
247
|
+
this.showLoader = true;
|
|
248
|
+
this.userAutoComplete.searchUser(queryStr, this.rootOrgId).subscribe(data => {
|
|
249
|
+
if (data.result && data.result.response) {
|
|
250
|
+
this.apiResponse = data.result.response.content;
|
|
251
|
+
let name = '';
|
|
252
|
+
let pEmail = '';
|
|
253
|
+
this.apiResponse.forEach((apiData) => {
|
|
254
|
+
apiData.firstName.split(' ').forEach((d) => {
|
|
255
|
+
name = name + d.substr(0, 1).toUpperCase();
|
|
256
|
+
});
|
|
257
|
+
if (apiData.profileDetails && apiData.profileDetails.personalDetails) {
|
|
258
|
+
pEmail = apiData.profileDetails.personalDetails.primaryEmail;
|
|
259
|
+
if (!this.allUsers.filter(user => user.email.toLowerCase().includes(pEmail.toLowerCase())).length) {
|
|
260
|
+
this.allUsers.push({
|
|
261
|
+
maskedEmail: apiData.maskedEmail,
|
|
262
|
+
id: apiData.identifier,
|
|
263
|
+
name: apiData.firstName,
|
|
264
|
+
iconText: name,
|
|
265
|
+
email: pEmail,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
this.showLoader = false;
|
|
271
|
+
}
|
|
272
|
+
if (this.allUsers.length === 0) {
|
|
273
|
+
this.filteredUsers = [];
|
|
274
|
+
}
|
|
275
|
+
this.filteredUsers = this.filterSharedUsers(queryStr);
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
get showIntranetMsg() {
|
|
279
|
+
if (this.isMobile) {
|
|
280
|
+
return true;
|
|
281
|
+
}
|
|
282
|
+
return this.showIntranetMessage;
|
|
283
|
+
}
|
|
284
|
+
get getBatchDuration() {
|
|
285
|
+
const startDate = dayjs(dayjs(this.batchControl.value.startDate).format('YYYY-MM-DD'));
|
|
286
|
+
const endDate = dayjs(dayjs(this.batchControl.value.endDate).format('YYYY-MM-DD'));
|
|
287
|
+
// adding 1 to include the start date
|
|
288
|
+
return (endDate.diff(startDate, 'days') + 1);
|
|
289
|
+
}
|
|
290
|
+
get showStart() {
|
|
291
|
+
return this.tocSvc.showStartButton(this.content);
|
|
292
|
+
}
|
|
293
|
+
get isPostAssessment() {
|
|
294
|
+
if (!(this.tocConfig && this.tocConfig.postAssessment)) {
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
if (this.content) {
|
|
298
|
+
return (this.content.primaryCategory === NsContent.EPrimaryCategory.COURSE &&
|
|
299
|
+
this.content.learningMode === 'Instructor-Led');
|
|
300
|
+
}
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
get isMobile() {
|
|
304
|
+
return this.utilitySvc.isMobile;
|
|
305
|
+
}
|
|
306
|
+
get showSubtitleOnBanner() {
|
|
307
|
+
return this.tocSvc.subtitleOnBanners;
|
|
308
|
+
}
|
|
309
|
+
getDoptEligibleServicesList() {
|
|
310
|
+
if (this.selectedBatch && this.selectedBatch.batchAttributes
|
|
311
|
+
&& this.selectedBatch.batchAttributes.cadreList
|
|
312
|
+
&& this.selectedBatch.batchAttributes.cadreList.length > 0) {
|
|
313
|
+
this.doptEligibleServicesList = this.selectedBatch.batchAttributes.cadreList;
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
this.doptEligibleServicesList = [];
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
ngOnChanges(_changes) {
|
|
320
|
+
this.assignPathAndUpdateBanner(this.router.url);
|
|
321
|
+
if (this.content) {
|
|
322
|
+
this.fetchExternalContentAccess();
|
|
323
|
+
this.modifySensibleContentRating();
|
|
324
|
+
this.assignPathAndUpdateBanner(this.router.url);
|
|
325
|
+
this.getLearningUrls();
|
|
326
|
+
this.setBatchControl();
|
|
327
|
+
}
|
|
328
|
+
if (this.resumeData && this.resumeData.length > 0 && this.content) {
|
|
329
|
+
let resumeDataV2;
|
|
330
|
+
if (this.content.completionPercentage === 100) {
|
|
331
|
+
resumeDataV2 = this.getResumeDataFromList('start');
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
resumeDataV2 = this.getResumeDataFromList();
|
|
335
|
+
}
|
|
336
|
+
if (!resumeDataV2.mimeType) {
|
|
337
|
+
resumeDataV2.mimeType = this.getMimeType(this.content, resumeDataV2.identifier);
|
|
338
|
+
}
|
|
339
|
+
this.resumeDataLink = viewerRouteGenerator(resumeDataV2.identifier, resumeDataV2.mimeType, this.isResource ? undefined : this.content.identifier, this.isResource ? undefined : this.content.contentType, this.forPreview, 'Learning Resource', this.getBatchId(), this.content.name);
|
|
340
|
+
this.actionSVC.setUpdateCompGroupO = this.resumeDataLink;
|
|
341
|
+
}
|
|
342
|
+
this.batchControlUnsubscribe = this.batchControl.valueChanges.subscribe((batch) => {
|
|
343
|
+
this.selectedBatch = batch;
|
|
344
|
+
if (batch) {
|
|
345
|
+
if (this.checkRejected(batch)) {
|
|
346
|
+
this.showRejected = true;
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
this.showRejected = false;
|
|
351
|
+
return;
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
requestToWithdrawDialog() {
|
|
355
|
+
const confirmDialog = this.dialog.open(ConfirmDialogComponent, {
|
|
356
|
+
width: '434px',
|
|
357
|
+
data: {
|
|
358
|
+
title: 'Are you sure you want to withdraw your request?',
|
|
359
|
+
message: 'You will miss the learning opportunity if you withdraw your enrolment.',
|
|
360
|
+
acceptButton: 'Withdraw',
|
|
361
|
+
cancelButton: 'Cancel',
|
|
362
|
+
},
|
|
363
|
+
disableClose: true,
|
|
364
|
+
panelClass: ['animate__animated', 'animate__slideInLeft'],
|
|
365
|
+
});
|
|
366
|
+
confirmDialog.afterClosed().subscribe(result => {
|
|
367
|
+
if (result) {
|
|
368
|
+
// tslint:disable-next-line:max-line-length
|
|
369
|
+
this.requestAndWithDrawEnroll(this.batchData.workFlow.wfItem.currentStatus, this.WFBlendedProgramStatus.WITHDRAW, this.batchData.workFlow.wfItem.wfId);
|
|
370
|
+
}
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
openConformationDialog(message) {
|
|
374
|
+
this.dialog.open(ConfirmDialogComponent, {
|
|
375
|
+
width: '600px',
|
|
376
|
+
data: {
|
|
377
|
+
message: message,
|
|
378
|
+
acceptButton: 'Ok',
|
|
379
|
+
disableClose: true
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
openRequestToEnroll(batchData) {
|
|
384
|
+
const confirmDialog = this.dialog.open(ConfirmDialogComponent, {
|
|
385
|
+
width: '434px',
|
|
386
|
+
data: {
|
|
387
|
+
title: 'You’re one step away from enrolling!',
|
|
388
|
+
// tslint:disable-next-line:max-line-length
|
|
389
|
+
message: `This batch is active from ${this.datePipe.transform(batchData.startDate, 'dd-MM-yyyy')} - ${this.datePipe.transform(batchData.endDate, 'dd-MM-yyyy')}, kindly go through the content and be prepared.`,
|
|
390
|
+
acceptButton: 'Confirm',
|
|
391
|
+
cancelButton: 'Cancel',
|
|
392
|
+
},
|
|
393
|
+
disableClose: true,
|
|
394
|
+
panelClass: ['animate__animated', 'animate__slideInLeft'],
|
|
395
|
+
});
|
|
396
|
+
confirmDialog.afterClosed().subscribe(result => {
|
|
397
|
+
if (result) {
|
|
398
|
+
this.requestAndWithDrawEnroll('INITIATE', 'INITIATE');
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
callBPSurevy(batchData) {
|
|
403
|
+
if (this.content) {
|
|
404
|
+
const sID = this.content.wfSurveyLink.split('surveys/');
|
|
405
|
+
const surveyId = sID[1];
|
|
406
|
+
const courseId = this.content.identifier;
|
|
407
|
+
const courseName = this.content.name;
|
|
408
|
+
const wfClientVersion = _.get(this.content, 'wfClientVersion', '0');
|
|
409
|
+
const apiData = {
|
|
410
|
+
// tslint:disable-next-line:prefer-template
|
|
411
|
+
getAPI: '/apis/proxies/v8/forms/getFormById?id=' + surveyId,
|
|
412
|
+
// tslint:disable-next-line:prefer-template
|
|
413
|
+
postAPI: '/apis/proxies/v8/forms/v1/saveFormSubmit',
|
|
414
|
+
getAllApplications: '/apis/proxies/v8/forms/getAllApplications',
|
|
415
|
+
customizedHeader: {},
|
|
416
|
+
};
|
|
417
|
+
const enrollQuestionnaire = this.dialog.open(EnrollQuestionnaireComponent, {
|
|
418
|
+
width: '920px',
|
|
419
|
+
maxHeight: '85vh',
|
|
420
|
+
data: {
|
|
421
|
+
surveyId,
|
|
422
|
+
courseId,
|
|
423
|
+
courseName,
|
|
424
|
+
apiData,
|
|
425
|
+
batchData,
|
|
426
|
+
wfClientVersion
|
|
427
|
+
},
|
|
428
|
+
disableClose: false,
|
|
429
|
+
panelClass: ['animate__animated', 'animate__slideInLeft'],
|
|
430
|
+
});
|
|
431
|
+
enrollQuestionnaire.afterClosed().subscribe(result => {
|
|
432
|
+
if (result) {
|
|
433
|
+
this.openRequestToEnroll(batchData);
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
callBPProfileSurevy(batchData) {
|
|
439
|
+
if (this.content) {
|
|
440
|
+
const doptorgID = this.environment.doptOrg;
|
|
441
|
+
const isDoptContent = _.get(this.content, 'createdFor', []).includes(doptorgID);
|
|
442
|
+
// const isDptUser = _.get(this.userProfileObject, 'rootOrgId') === doptorgID
|
|
443
|
+
this.getDoptEligibleServicesList();
|
|
444
|
+
const userProfileObject = this.configSvc?.unMappedUser || {};
|
|
445
|
+
const civilServiceName = _.get(userProfileObject, 'profileDetails.cadreDetails.civilServiceName', '');
|
|
446
|
+
if (this.doptEligibleServicesList && this.doptEligibleServicesList.length > 0) {
|
|
447
|
+
if (!civilServiceName) {
|
|
448
|
+
this.openConformationDialog(`This program has eligibility criteria. Please update your service details in your profile before requesting to enroll.`);
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
else if (!this.doptEligibleServicesList.includes(civilServiceName)) {
|
|
452
|
+
this.openConformationDialog(`You are not eligible for the ${this.content.name} with the current service in your profile. If your service details are incorrect, please update your profile and apply.`);
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
const courseName = this.content.name;
|
|
457
|
+
// const showDoptChanges = (isDoptContent && isDptUser) ? true : false
|
|
458
|
+
const profileForm = this.dialog.open(EnrollProfileFormComponent, {
|
|
459
|
+
width: '920px',
|
|
460
|
+
maxHeight: '85vh',
|
|
461
|
+
data: {
|
|
462
|
+
courseName,
|
|
463
|
+
batchData,
|
|
464
|
+
showDoptChanges: isDoptContent,
|
|
465
|
+
},
|
|
466
|
+
disableClose: false,
|
|
467
|
+
panelClass: ['animate__animated', 'animate__slideInLeft'],
|
|
468
|
+
});
|
|
469
|
+
profileForm.afterClosed().subscribe(result => {
|
|
470
|
+
if (result) {
|
|
471
|
+
if (this.content && this.content.wfSurveyLink) {
|
|
472
|
+
this.callBPSurevy(batchData);
|
|
473
|
+
}
|
|
474
|
+
else {
|
|
475
|
+
this.openRequestToEnroll(batchData);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
requestToEnrollDialog() {
|
|
482
|
+
const batchData = this.batchControl.value;
|
|
483
|
+
if (this.content && this.content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM) {
|
|
484
|
+
// conflicts check start
|
|
485
|
+
const userList = this.userEnrollmentList && this.userEnrollmentList.filter(ele => {
|
|
486
|
+
if (ele.content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM) {
|
|
487
|
+
if (!(dayjs(batchData.startDate).isBefore(dayjs(ele.batch.startDate)) &&
|
|
488
|
+
dayjs(batchData.endDate).isBefore(dayjs(ele.batch.startDate)) ||
|
|
489
|
+
dayjs(batchData.startDate).isAfter(dayjs(ele.batch.endDate)) &&
|
|
490
|
+
dayjs(batchData.endDate).isAfter(dayjs(ele.batch.endDate)))) {
|
|
491
|
+
return true;
|
|
492
|
+
}
|
|
493
|
+
return false;
|
|
494
|
+
}
|
|
495
|
+
return false;
|
|
496
|
+
});
|
|
497
|
+
// conflicts check end
|
|
498
|
+
if (userList && userList.length === 0) {
|
|
499
|
+
if (this.content && batchData.batchAttributes && batchData.batchAttributes.userProfileFileds) {
|
|
500
|
+
this.callBPProfileSurevy(batchData);
|
|
501
|
+
}
|
|
502
|
+
else if (this.content && this.content.wfSurveyLink) {
|
|
503
|
+
this.callBPSurevy(batchData);
|
|
504
|
+
}
|
|
505
|
+
else {
|
|
506
|
+
this.openRequestToEnroll(batchData);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
else {
|
|
510
|
+
if (userList && userList.length > 0) {
|
|
511
|
+
this.openSnackbar(`You cannot enroll in this blended program because it conflicts with your existing blended program.`);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
else {
|
|
516
|
+
this.programEnrollCall.emit(batchData);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
requestAndWithDrawEnroll(state, action, wfIdValue) {
|
|
520
|
+
let userId = '';
|
|
521
|
+
let rootOrgId = '';
|
|
522
|
+
let username = '';
|
|
523
|
+
let departmentName = '';
|
|
524
|
+
if (this.configSvc.userProfile) {
|
|
525
|
+
userId = this.configSvc.userProfile.userId || '';
|
|
526
|
+
rootOrgId = this.configSvc.userProfile.rootOrgId || '';
|
|
527
|
+
username = this.configSvc.userProfile.firstName || '';
|
|
528
|
+
departmentName = this.configSvc.userProfile.departmentName || '';
|
|
529
|
+
}
|
|
530
|
+
const req = {
|
|
531
|
+
rootOrgId,
|
|
532
|
+
userId,
|
|
533
|
+
state,
|
|
534
|
+
action,
|
|
535
|
+
actorUserId: userId,
|
|
536
|
+
applicationId: this.selectedBatch.batchId,
|
|
537
|
+
serviceName: 'blendedprogram',
|
|
538
|
+
courseId: this.selectedBatch.courseId,
|
|
539
|
+
deptName: departmentName,
|
|
540
|
+
...(wfIdValue ? { wfId: wfIdValue } : null),
|
|
541
|
+
updateFieldValues: [
|
|
542
|
+
{
|
|
543
|
+
toValue: {
|
|
544
|
+
name: username,
|
|
545
|
+
},
|
|
546
|
+
},
|
|
547
|
+
],
|
|
548
|
+
};
|
|
549
|
+
this.contentSvc.enrollAndUnenrollUserToBatchWF(req, action).then((data) => {
|
|
550
|
+
if (data && data.result && data.result.status === 'OK') {
|
|
551
|
+
this.batchData.workFlow = {
|
|
552
|
+
wfInitiated: true,
|
|
553
|
+
batch: this.selectedBatch,
|
|
554
|
+
wfItem: { currentStatus: data.result.data.status },
|
|
555
|
+
};
|
|
556
|
+
this.withdrawOrEnroll.emit(action);
|
|
557
|
+
this.getBatchUserCount(this.selectedBatch);
|
|
558
|
+
this.openSnackbar(`Request ${action === this.WFBlendedProgramStatus.WITHDRAW ? 'withdrawn' : 'sent'} Successfully!`);
|
|
559
|
+
this.disableEnrollBtn = false;
|
|
560
|
+
}
|
|
561
|
+
else {
|
|
562
|
+
this.openSnackbar('Something went wrong, please try again later!');
|
|
563
|
+
this.disableEnrollBtn = false;
|
|
564
|
+
}
|
|
565
|
+
}, (error) => {
|
|
566
|
+
this.openSnackbar(_.get(error, 'error.params.errmsg') ||
|
|
567
|
+
_.get(error, 'error.result.errmsg') ||
|
|
568
|
+
'Something went wrong, please try again later!');
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
getMimeType(content, identifier) {
|
|
572
|
+
if (content.identifier === identifier) {
|
|
573
|
+
return content.mimeType;
|
|
574
|
+
}
|
|
575
|
+
if (content && content.children) {
|
|
576
|
+
if (content.children.length === 0) {
|
|
577
|
+
// big blunder in data
|
|
578
|
+
this.logger.log(content.identifier, 'Wrong mime types for resume');
|
|
579
|
+
return content.mimeType;
|
|
580
|
+
}
|
|
581
|
+
const flatList = [];
|
|
582
|
+
const getAllItemsPerChildren = (item) => {
|
|
583
|
+
flatList.push(item);
|
|
584
|
+
if (item.children) {
|
|
585
|
+
return item.children.map((i) => getAllItemsPerChildren(i));
|
|
586
|
+
}
|
|
587
|
+
return;
|
|
588
|
+
};
|
|
589
|
+
getAllItemsPerChildren(this.content);
|
|
590
|
+
const chld = _.first(_.filter(flatList, { identifier }));
|
|
591
|
+
return chld.mimeType;
|
|
592
|
+
}
|
|
593
|
+
// return chld.mimeType
|
|
594
|
+
return NsContent.EMimeTypes.UNKNOWN;
|
|
595
|
+
}
|
|
596
|
+
getBatchId() {
|
|
597
|
+
let batchId = '';
|
|
598
|
+
if (this.batchData && this.batchData.content) {
|
|
599
|
+
for (const batch of this.batchData.content) {
|
|
600
|
+
batchId = batch.batchId;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
return batchId;
|
|
604
|
+
}
|
|
605
|
+
handleEnrollmentEndDate(batch) {
|
|
606
|
+
const enrollmentEndDate = dayjs(lodash.get(batch, 'enrollmentEndDate')).format('YYYY-MM-DD');
|
|
607
|
+
const systemDate = dayjs(this.serverDate).format('YYYY-MM-DD');
|
|
608
|
+
return (enrollmentEndDate && enrollmentEndDate !== 'Invalid Date') ?
|
|
609
|
+
(dayjs(enrollmentEndDate).isSame(systemDate, 'day') || dayjs(enrollmentEndDate).isAfter(systemDate)) : false;
|
|
610
|
+
}
|
|
611
|
+
checkRejected(batch) {
|
|
612
|
+
if (batch &&
|
|
613
|
+
this.batchData &&
|
|
614
|
+
this.batchData.workFlow &&
|
|
615
|
+
this.batchData.workFlow.wfItem) {
|
|
616
|
+
// tslint:disable-next-line:max-line-length
|
|
617
|
+
if (batch.batchId === this.batchData.workFlow.wfItem.applicationId && (this.batchData.workFlow.wfItem.currentStatus === this.WFBlendedProgramStatus.REJECTED || this.batchData.workFlow.wfItem.currentStatus === this.WFBlendedProgramStatus.REMOVED)) {
|
|
618
|
+
return true;
|
|
619
|
+
}
|
|
620
|
+
return false;
|
|
621
|
+
}
|
|
622
|
+
return false;
|
|
623
|
+
}
|
|
624
|
+
checkWithdrawn(batch) {
|
|
625
|
+
if (batch &&
|
|
626
|
+
this.batchData &&
|
|
627
|
+
this.batchData.workFlow &&
|
|
628
|
+
this.batchData.workFlow.wfItem) {
|
|
629
|
+
// tslint:disable-next-line:max-line-length
|
|
630
|
+
if (this.selectedBatch.batchId === this.batchData.workFlow.wfItem.applicationId && (this.batchData.workFlow.wfItem.currentStatus === this.WFBlendedProgramStatus.WITHDRAWN || this.batchData.workFlow.wfItem.currentStatus === this.WFBlendedProgramStatus.WITHDRAWN)) {
|
|
631
|
+
return true;
|
|
632
|
+
}
|
|
633
|
+
return false;
|
|
634
|
+
}
|
|
635
|
+
return false;
|
|
636
|
+
}
|
|
637
|
+
batchChange(event) {
|
|
638
|
+
this.clearAndCallTimer();
|
|
639
|
+
if (event && event.value) {
|
|
640
|
+
const batchData = {
|
|
641
|
+
content: [event.value],
|
|
642
|
+
};
|
|
643
|
+
this.getBatchUserCount(event.value);
|
|
644
|
+
if (this.selectedBatchData && this.selectedBatchData.content) {
|
|
645
|
+
this.selectedBatchData = {
|
|
646
|
+
...this.selectedBatchData,
|
|
647
|
+
...batchData,
|
|
648
|
+
};
|
|
649
|
+
}
|
|
650
|
+
else {
|
|
651
|
+
this.selectedBatchData = {
|
|
652
|
+
...batchData,
|
|
653
|
+
};
|
|
654
|
+
}
|
|
655
|
+
if (this.checkRejected(event.value)) {
|
|
656
|
+
this.showRejected = true;
|
|
657
|
+
this.setbatchDateToCountDown(event.value.startDate);
|
|
658
|
+
this.tocSvc.getSelectedBatchData(this.selectedBatchData);
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
661
|
+
this.setbatchDateToCountDown(event.value.startDate);
|
|
662
|
+
this.tocSvc.getSelectedBatchData(this.selectedBatchData);
|
|
663
|
+
}
|
|
664
|
+
this.showRejected = false;
|
|
665
|
+
this.checkBatchStartDate();
|
|
666
|
+
return;
|
|
667
|
+
}
|
|
668
|
+
checkBatchStartDate() {
|
|
669
|
+
const batchStartDate = this.selectedBatchData && this.selectedBatchData.content
|
|
670
|
+
&& this.selectedBatchData.content[0] && this.selectedBatchData.content[0].startDate;
|
|
671
|
+
const workFlow = this.batchData && this.batchData.workFlow && this.batchData.workFlow.wfItem
|
|
672
|
+
&& this.batchData.workFlow.wfItem.currentStatus;
|
|
673
|
+
const now = dayjs(this.serverDate).format('YYYY-MM-DD');
|
|
674
|
+
const dateExtended = dayjs(now).isSameOrAfter(dayjs(batchStartDate));
|
|
675
|
+
if (dateExtended && (workFlow && (workFlow !== this.WFBlendedProgramStatus.APPROVED)
|
|
676
|
+
&& workFlow !== this.WFBlendedProgramStatus.WITHDRAWN)) {
|
|
677
|
+
const confirmDialog = this.dialog.open(ConfirmDialogComponent, {
|
|
678
|
+
width: '434px',
|
|
679
|
+
data: {
|
|
680
|
+
title: 'Request not approved',
|
|
681
|
+
message: 'Don\'t worry; withdraw this and request another batch.',
|
|
682
|
+
acceptButton: 'Withdraw',
|
|
683
|
+
cancelButton: 'Cancel',
|
|
684
|
+
},
|
|
685
|
+
disableClose: true,
|
|
686
|
+
panelClass: ['animate__animated', 'animate__slideInLeft'],
|
|
687
|
+
});
|
|
688
|
+
confirmDialog.afterClosed().subscribe(result => {
|
|
689
|
+
if (result) {
|
|
690
|
+
// tslint:disable-next-line:max-line-length
|
|
691
|
+
this.requestAndWithDrawEnroll(this.batchData.workFlow.wfItem.currentStatus, this.WFBlendedProgramStatus.WITHDRAW, this.batchData.workFlow.wfItem.wfId);
|
|
692
|
+
}
|
|
693
|
+
});
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
setBatchControl() {
|
|
697
|
+
// on first load select first value in the batch list if its having valid enrollment Date
|
|
698
|
+
if (this.content && (this.content.primaryCategory === this.primaryCategory.BLENDED_PROGRAM ||
|
|
699
|
+
this.content.primaryCategory === this.primaryCategory.PROGRAM)) {
|
|
700
|
+
if (this.batchData && this.batchData.content.length) {
|
|
701
|
+
if (!this.batchData.workFlow || (this.batchData.workFlow && !this.batchData.workFlow.wfInitiated)) {
|
|
702
|
+
const batch = this.batchData.content.find((el) => {
|
|
703
|
+
if (this.handleEnrollmentEndDate(el)) {
|
|
704
|
+
return el;
|
|
705
|
+
}
|
|
706
|
+
});
|
|
707
|
+
if (batch) {
|
|
708
|
+
this.batchControl.setValue(batch);
|
|
709
|
+
this.setbatchDateToCountDown(batch.startDate);
|
|
710
|
+
}
|
|
711
|
+
this.getBatchUserCount(this.batchControl.value);
|
|
712
|
+
const batchData = {
|
|
713
|
+
content: [this.batchControl.value],
|
|
714
|
+
};
|
|
715
|
+
if (this.selectedBatchData && this.selectedBatchData.content) {
|
|
716
|
+
this.selectedBatchData = {
|
|
717
|
+
...this.selectedBatchData,
|
|
718
|
+
...batchData,
|
|
719
|
+
};
|
|
720
|
+
}
|
|
721
|
+
else {
|
|
722
|
+
this.selectedBatchData = {
|
|
723
|
+
...batchData,
|
|
724
|
+
};
|
|
725
|
+
}
|
|
726
|
+
this.tocSvc.getSelectedBatchData(this.selectedBatchData);
|
|
727
|
+
}
|
|
728
|
+
else {
|
|
729
|
+
const batch = this.batchData.content.find((el) => {
|
|
730
|
+
if (el.batchId === this.batchData.workFlow.wfItem.applicationId) {
|
|
731
|
+
return el;
|
|
732
|
+
}
|
|
733
|
+
});
|
|
734
|
+
this.selectedBatch = batch;
|
|
735
|
+
this.batchControl.patchValue(batch);
|
|
736
|
+
this.batchChange({ value: batch });
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
}
|
|
741
|
+
clearAndCallTimer() {
|
|
742
|
+
if (this.timerIntervalClear) {
|
|
743
|
+
clearInterval(this.timerIntervalClear);
|
|
744
|
+
}
|
|
745
|
+
this.callTimer();
|
|
746
|
+
}
|
|
747
|
+
// setting batch start date
|
|
748
|
+
setbatchDateToCountDown(batchStartDate) {
|
|
749
|
+
this.targetDate = new Date(batchStartDate);
|
|
750
|
+
const convertedDate = dayjs(batchStartDate).format('YYYY-MM-DD HH:mm:ss');
|
|
751
|
+
this.targetTime = new Date(convertedDate).getTime();
|
|
752
|
+
}
|
|
753
|
+
openSnackbar(primaryMsg, duration = 5000) {
|
|
754
|
+
this.snackBar.open(primaryMsg, 'X', {
|
|
755
|
+
duration,
|
|
756
|
+
});
|
|
757
|
+
}
|
|
758
|
+
get disableWithdrawnBtn() {
|
|
759
|
+
if (this.batchData &&
|
|
760
|
+
this.batchData.workFlow &&
|
|
761
|
+
this.batchData.workFlow.wfItem) {
|
|
762
|
+
const status = this.batchData.workFlow.wfItem.currentStatus;
|
|
763
|
+
if (NsContent.WFBlendedProgramApprovalTypes.TWO_STEP_MDO_PC === this.batchData.workFlow.wfItem.serviceName &&
|
|
764
|
+
status === this.WFBlendedProgramStatus.SEND_FOR_PC_APPROVAL) {
|
|
765
|
+
return true;
|
|
766
|
+
}
|
|
767
|
+
if (NsContent.WFBlendedProgramApprovalTypes.TWO_STEP_PC_MDO === this.batchData.workFlow.wfItem.serviceName &&
|
|
768
|
+
status === this.WFBlendedProgramStatus.SEND_FOR_MDO_APPROVAL) {
|
|
769
|
+
return true;
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
return false;
|
|
773
|
+
}
|
|
774
|
+
get showInstructorLedMsg() {
|
|
775
|
+
return (this.showActionButtons &&
|
|
776
|
+
this.content &&
|
|
777
|
+
this.content.learningMode === 'Instructor-Led' &&
|
|
778
|
+
!this.content.children.length &&
|
|
779
|
+
!this.content.artifactUrl);
|
|
780
|
+
}
|
|
781
|
+
get getWFMsg() {
|
|
782
|
+
if (this.batchData &&
|
|
783
|
+
this.batchData.workFlow &&
|
|
784
|
+
this.batchData.workFlow.wfItem) {
|
|
785
|
+
const status = this.batchData.workFlow.wfItem.currentStatus;
|
|
786
|
+
const msg = this.WFSTATUS_MSG_MAPPING[status];
|
|
787
|
+
return this.tocConfig[msg];
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
get showIcon() {
|
|
791
|
+
if (this.batchData &&
|
|
792
|
+
this.batchData.workFlow &&
|
|
793
|
+
this.batchData.workFlow.wfItem) {
|
|
794
|
+
const status = this.batchData.workFlow.wfItem.currentStatus;
|
|
795
|
+
if (status === this.WFBlendedProgramStatus.APPROVED ||
|
|
796
|
+
status === this.WFBlendedProgramStatus.SEND_FOR_MDO_APPROVAL ||
|
|
797
|
+
status === this.WFBlendedProgramStatus.SEND_FOR_PC_APPROVAL ||
|
|
798
|
+
status === this.WFBlendedProgramStatus.WITHDRAWN ||
|
|
799
|
+
status === this.WFBlendedProgramStatus.REJECTED ||
|
|
800
|
+
status === this.WFBlendedProgramStatus.REMOVED) {
|
|
801
|
+
return true;
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
return false;
|
|
805
|
+
}
|
|
806
|
+
get showMsg() {
|
|
807
|
+
if (this.batchData &&
|
|
808
|
+
this.batchData.workFlow &&
|
|
809
|
+
this.batchData.workFlow.wfItem) {
|
|
810
|
+
const status = this.batchData.workFlow.wfItem.currentStatus;
|
|
811
|
+
if (status === this.WFBlendedProgramStatus.APPROVED ||
|
|
812
|
+
status === this.WFBlendedProgramStatus.SEND_FOR_MDO_APPROVAL ||
|
|
813
|
+
status === this.WFBlendedProgramStatus.SEND_FOR_PC_APPROVAL ||
|
|
814
|
+
(status === this.WFBlendedProgramStatus.WITHDRAWN && this.checkWithdrawn(this.batchData)) ||
|
|
815
|
+
(status === this.WFBlendedProgramStatus.REMOVED && this.showRejected) ||
|
|
816
|
+
(status === this.WFBlendedProgramStatus.REJECTED && this.showRejected)) {
|
|
817
|
+
return true;
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
return false;
|
|
821
|
+
}
|
|
822
|
+
get WFIcon() {
|
|
823
|
+
if (this.batchData &&
|
|
824
|
+
this.batchData.workFlow &&
|
|
825
|
+
this.batchData.workFlow.wfItem) {
|
|
826
|
+
const status = this.batchData.workFlow.wfItem.currentStatus;
|
|
827
|
+
if (status === this.WFBlendedProgramStatus.APPROVED ||
|
|
828
|
+
status === this.WFBlendedProgramStatus.SEND_FOR_MDO_APPROVAL ||
|
|
829
|
+
status === this.WFBlendedProgramStatus.SEND_FOR_PC_APPROVAL ||
|
|
830
|
+
status === this.WFBlendedProgramStatus.WITHDRAWN) {
|
|
831
|
+
return 'circle';
|
|
832
|
+
}
|
|
833
|
+
if (status === this.WFBlendedProgramStatus.REJECTED ||
|
|
834
|
+
status === this.WFBlendedProgramStatus.REMOVED) {
|
|
835
|
+
return 'info';
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
return '';
|
|
839
|
+
}
|
|
840
|
+
get iconColor() {
|
|
841
|
+
if (this.batchData &&
|
|
842
|
+
this.batchData.workFlow &&
|
|
843
|
+
this.batchData.workFlow.wfItem) {
|
|
844
|
+
const status = this.batchData.workFlow.wfItem.currentStatus;
|
|
845
|
+
if (status === this.WFBlendedProgramStatus.APPROVED || status === this.WFBlendedProgramStatus.WITHDRAWN) {
|
|
846
|
+
return 'ws-mat-green-text';
|
|
847
|
+
}
|
|
848
|
+
if (status === this.WFBlendedProgramStatus.SEND_FOR_MDO_APPROVAL ||
|
|
849
|
+
status === this.WFBlendedProgramStatus.SEND_FOR_PC_APPROVAL) {
|
|
850
|
+
return 'ws-mat-orange-text';
|
|
851
|
+
}
|
|
852
|
+
return '';
|
|
853
|
+
}
|
|
854
|
+
return ' ';
|
|
855
|
+
}
|
|
856
|
+
get isHeaderHidden() {
|
|
857
|
+
return this.isResource && this.content && !this.content.artifactUrl.length;
|
|
858
|
+
}
|
|
859
|
+
get showActionButtons() {
|
|
860
|
+
return (this.actionBtnStatus !== 'wait' &&
|
|
861
|
+
this.content &&
|
|
862
|
+
this.content.status !== 'Deleted' &&
|
|
863
|
+
this.content.status !== 'Expired');
|
|
864
|
+
}
|
|
865
|
+
get showButtonContainer() {
|
|
866
|
+
return (this.actionBtnStatus === 'grant' &&
|
|
867
|
+
!(this.isMobile && this.content && this.content.isInIntranet) &&
|
|
868
|
+
!(this.content &&
|
|
869
|
+
this.content.contentType === 'Course' &&
|
|
870
|
+
this.content.children.length === 0 &&
|
|
871
|
+
!this.content.artifactUrl) &&
|
|
872
|
+
!(this.content && this.content.contentType === 'Resource' && !this.content.artifactUrl));
|
|
873
|
+
}
|
|
874
|
+
get isResource() {
|
|
875
|
+
if (this.content) {
|
|
876
|
+
const isResource = this.content.contentType === NsContent.EContentTypes.KNOWLEDGE_ARTIFACT ||
|
|
877
|
+
this.content.contentType === NsContent.EContentTypes.RESOURCE || !this.content.children.length;
|
|
878
|
+
if (isResource) {
|
|
879
|
+
this.mobileAppsSvc.sendViewerData(this.content);
|
|
880
|
+
}
|
|
881
|
+
return isResource;
|
|
882
|
+
}
|
|
883
|
+
return false;
|
|
884
|
+
}
|
|
885
|
+
getBatchUserCount(batchData) {
|
|
886
|
+
if (batchData && batchData.batchId) {
|
|
887
|
+
const req = {
|
|
888
|
+
serviceName: 'blendedprogram',
|
|
889
|
+
applicationStatus: '',
|
|
890
|
+
applicationIds: [
|
|
891
|
+
batchData.batchId,
|
|
892
|
+
],
|
|
893
|
+
limit: 100,
|
|
894
|
+
offset: 0,
|
|
895
|
+
};
|
|
896
|
+
const usercount = {
|
|
897
|
+
enrolled: 0,
|
|
898
|
+
totalApplied: 0,
|
|
899
|
+
rejected: 0,
|
|
900
|
+
};
|
|
901
|
+
this.contentSvc.fetchBlendedUserCOUNT(req).then((res) => {
|
|
902
|
+
if (res.result && res.result.data) {
|
|
903
|
+
res.result.data.forEach((ele) => {
|
|
904
|
+
if (ele.currentStatus === 'APPROVED') {
|
|
905
|
+
usercount.enrolled = ele.statusCount;
|
|
906
|
+
}
|
|
907
|
+
else if (ele.currentStatus === 'REJECTED') {
|
|
908
|
+
usercount.rejected = ele.statusCount;
|
|
909
|
+
}
|
|
910
|
+
if (ele.currentStatus !== 'WITHDRAWN') {
|
|
911
|
+
usercount.totalApplied = usercount.totalApplied + ele.statusCount;
|
|
912
|
+
}
|
|
913
|
+
});
|
|
914
|
+
if (this.selectedBatchData) {
|
|
915
|
+
this.selectedBatchData = {
|
|
916
|
+
...this.selectedBatchData,
|
|
917
|
+
userCount: usercount,
|
|
918
|
+
};
|
|
919
|
+
}
|
|
920
|
+
this.tocSvc.getSelectedBatchData(this.selectedBatchData);
|
|
921
|
+
}
|
|
922
|
+
});
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
getResumeDataFromList(type) {
|
|
926
|
+
if (!type) {
|
|
927
|
+
// tslint:disable-next-line:max-line-length
|
|
928
|
+
const lastItem = this.resumeData && this.resumeData.sort((a, b) => new Date(b.lastAccessTime).getTime() - new Date(a.lastAccessTime).getTime()).shift();
|
|
929
|
+
return {
|
|
930
|
+
identifier: lastItem.contentId,
|
|
931
|
+
mimeType: lastItem.progressdetails && lastItem.progressdetails.mimeType,
|
|
932
|
+
};
|
|
933
|
+
}
|
|
934
|
+
const firstItem = this.resumeData && this.resumeData.length && this.resumeData[0];
|
|
935
|
+
return {
|
|
936
|
+
identifier: firstItem.contentId,
|
|
937
|
+
mimeType: firstItem.progressdetails && firstItem.progressdetails.mimeType,
|
|
938
|
+
};
|
|
939
|
+
}
|
|
940
|
+
modifySensibleContentRating() {
|
|
941
|
+
if (this.content &&
|
|
942
|
+
this.content.averageRating &&
|
|
943
|
+
typeof this.content.averageRating !== 'number') {
|
|
944
|
+
this.content.averageRating = this.content.averageRating[this.configSvc.rootOrg || ''];
|
|
945
|
+
}
|
|
946
|
+
if (this.content && this.content.totalRating && typeof this.content.totalRating !== 'number') {
|
|
947
|
+
this.content.totalRating = this.content.totalRating[this.configSvc.rootOrg || ''];
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
getLearningUrls() {
|
|
951
|
+
if (this.content) {
|
|
952
|
+
if (!this.forPreview) {
|
|
953
|
+
// this.progressSvc.getProgressFor(this.content.identifier).subscribe(data => {
|
|
954
|
+
// this.contentProgress = data
|
|
955
|
+
// })
|
|
956
|
+
}
|
|
957
|
+
this.isPracticeVisible = Boolean(this.tocSvc.filterToc(this.content, NsContent.EFilterCategory.PRACTICE));
|
|
958
|
+
this.isAssessVisible = Boolean(this.tocSvc.filterToc(this.content, NsContent.EFilterCategory.ASSESS));
|
|
959
|
+
const firstPlayableContent = this.contentSvc.getFirstChildInHierarchy(this.content);
|
|
960
|
+
this.firstResourceLink = viewerRouteGenerator(firstPlayableContent.identifier, firstPlayableContent.mimeType, this.isResource ? undefined : this.content.identifier, this.isResource ? undefined : this.content.contentType, this.forPreview, this.content.primaryCategory, this.getBatchId());
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
assignPathAndUpdateBanner(url) {
|
|
964
|
+
const path = url.split('/').pop();
|
|
965
|
+
if (path && this.validPaths.has(path)) {
|
|
966
|
+
this.routePath = path;
|
|
967
|
+
this.updateBannerUrl();
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
updateBannerUrl() {
|
|
971
|
+
if (this.banners) {
|
|
972
|
+
this.bannerUrl = this.sanitizer.bypassSecurityTrustStyle(`url(${this.banners[this.routePath]})`);
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
playIntroVideo() {
|
|
976
|
+
if (this.content) {
|
|
977
|
+
this.dialog.open(AppTocDialogIntroVideoComponent, {
|
|
978
|
+
data: this.content.introductoryVideo,
|
|
979
|
+
height: '350px',
|
|
980
|
+
width: '620px',
|
|
981
|
+
});
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
get sanitizedIntroductoryVideoIcon() {
|
|
985
|
+
if (this.content && this.content.introductoryVideoIcon) {
|
|
986
|
+
return this.sanitizer.bypassSecurityTrustStyle(`url(${this.content.introductoryVideoIcon})`);
|
|
987
|
+
}
|
|
988
|
+
return null;
|
|
989
|
+
}
|
|
990
|
+
fetchExternalContentAccess() {
|
|
991
|
+
if (this.content && this.content.registrationUrl) {
|
|
992
|
+
if (!this.forPreview) {
|
|
993
|
+
this.externalContentFetchStatus = 'fetching';
|
|
994
|
+
this.registerForExternal = false;
|
|
995
|
+
this.tocSvc.fetchExternalContentAccess(this.content.identifier).subscribe(data => {
|
|
996
|
+
this.externalContentFetchStatus = 'done';
|
|
997
|
+
this.registerForExternal = data.hasAccess;
|
|
998
|
+
}, _error => {
|
|
999
|
+
this.externalContentFetchStatus = 'done';
|
|
1000
|
+
this.registerForExternal = false;
|
|
1001
|
+
});
|
|
1002
|
+
}
|
|
1003
|
+
else {
|
|
1004
|
+
this.externalContentFetchStatus = 'done';
|
|
1005
|
+
this.registerForExternal = true;
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
getRatingIcon(ratingIndex) {
|
|
1010
|
+
if (this.content && this.content.averageRating) {
|
|
1011
|
+
const avgRating = this.content.averageRating;
|
|
1012
|
+
const ratingFloor = Math.floor(avgRating);
|
|
1013
|
+
if (ratingIndex <= ratingFloor) {
|
|
1014
|
+
return 'star';
|
|
1015
|
+
}
|
|
1016
|
+
if (ratingFloor === ratingIndex - 1 && avgRating % 1 >= 0.29 && avgRating % 1 < 0.71) {
|
|
1017
|
+
return 'star_half';
|
|
1018
|
+
}
|
|
1019
|
+
if (ratingFloor === ratingIndex - 1 && avgRating % 1 > 0.71) {
|
|
1020
|
+
return 'star';
|
|
1021
|
+
}
|
|
1022
|
+
if (ratingFloor === ratingIndex - 1 && avgRating % 1 < 0.29) {
|
|
1023
|
+
return 'star_border';
|
|
1024
|
+
}
|
|
1025
|
+
}
|
|
1026
|
+
return 'star_border';
|
|
1027
|
+
}
|
|
1028
|
+
checkRegistrationStatus() {
|
|
1029
|
+
const source = (this.content && this.content.sourceShortName) || '';
|
|
1030
|
+
if (!this.forPreview &&
|
|
1031
|
+
!this.isRegistrationSupported &&
|
|
1032
|
+
this.checkRegistrationSources.has(source)) {
|
|
1033
|
+
this.contentSvc
|
|
1034
|
+
.getRegistrationStatus(source)
|
|
1035
|
+
.then(res => {
|
|
1036
|
+
if (res.hasAccess) {
|
|
1037
|
+
this.actionBtnStatus = 'grant';
|
|
1038
|
+
}
|
|
1039
|
+
else {
|
|
1040
|
+
this.actionBtnStatus = 'reject';
|
|
1041
|
+
if (res.registrationUrl && this.content) {
|
|
1042
|
+
this.content.registrationUrl = res.registrationUrl;
|
|
1043
|
+
}
|
|
1044
|
+
}
|
|
1045
|
+
})
|
|
1046
|
+
.catch(_err => { });
|
|
1047
|
+
}
|
|
1048
|
+
else {
|
|
1049
|
+
this.actionBtnStatus = 'grant';
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
generateQuery(type) {
|
|
1053
|
+
if (this.firstResourceLink && (type === 'START' || type === 'START_OVER')) {
|
|
1054
|
+
let qParams = {
|
|
1055
|
+
...this.firstResourceLink.queryParams,
|
|
1056
|
+
viewMode: type,
|
|
1057
|
+
batchId: this.getBatchId(),
|
|
1058
|
+
};
|
|
1059
|
+
if (this.contextId && this.contextPath) {
|
|
1060
|
+
qParams = {
|
|
1061
|
+
...qParams,
|
|
1062
|
+
collectionId: this.contextId,
|
|
1063
|
+
collectionType: this.contextPath,
|
|
1064
|
+
};
|
|
1065
|
+
}
|
|
1066
|
+
if (this.forPreview) {
|
|
1067
|
+
delete qParams.viewMode;
|
|
1068
|
+
}
|
|
1069
|
+
return qParams;
|
|
1070
|
+
}
|
|
1071
|
+
if (this.resumeDataLink && type === 'RESUME') {
|
|
1072
|
+
let qParams = {
|
|
1073
|
+
...this.resumeDataLink.queryParams,
|
|
1074
|
+
batchId: this.getBatchId(),
|
|
1075
|
+
viewMode: 'RESUME',
|
|
1076
|
+
};
|
|
1077
|
+
if (this.contextId && this.contextPath) {
|
|
1078
|
+
qParams = {
|
|
1079
|
+
...qParams,
|
|
1080
|
+
collectionId: this.contextId,
|
|
1081
|
+
collectionType: this.contextPath,
|
|
1082
|
+
};
|
|
1083
|
+
}
|
|
1084
|
+
if (this.forPreview) {
|
|
1085
|
+
delete qParams.viewMode;
|
|
1086
|
+
}
|
|
1087
|
+
return qParams;
|
|
1088
|
+
}
|
|
1089
|
+
if (this.forPreview) {
|
|
1090
|
+
return {};
|
|
1091
|
+
}
|
|
1092
|
+
return {
|
|
1093
|
+
batchId: this.getBatchId(),
|
|
1094
|
+
viewMode: type,
|
|
1095
|
+
};
|
|
1096
|
+
}
|
|
1097
|
+
get isInIFrame() {
|
|
1098
|
+
try {
|
|
1099
|
+
return window.self !== window.top;
|
|
1100
|
+
}
|
|
1101
|
+
catch (e) {
|
|
1102
|
+
return true;
|
|
1103
|
+
}
|
|
1104
|
+
}
|
|
1105
|
+
getBgColor(tagTitle) {
|
|
1106
|
+
const bgColor = this.tagSvc.stringToColor(tagTitle.toLowerCase());
|
|
1107
|
+
const color = this.tagSvc.getContrast(bgColor);
|
|
1108
|
+
return { color, 'background-color': bgColor };
|
|
1109
|
+
}
|
|
1110
|
+
getTargetTime() {
|
|
1111
|
+
if (this.selectedBatch.startDate) {
|
|
1112
|
+
this.targetDate = new Date(this.selectedBatch.startDate);
|
|
1113
|
+
const convertedDate = dayjs(this.selectedBatch.startDate).format('YYYY-MM-DD HH:mm:ss');
|
|
1114
|
+
return new Date(convertedDate).getTime();
|
|
1115
|
+
}
|
|
1116
|
+
// this.targetTime = ''
|
|
1117
|
+
return '';
|
|
1118
|
+
}
|
|
1119
|
+
callTimer() {
|
|
1120
|
+
// this.targetTime = this.getTargetTime()
|
|
1121
|
+
if (this.serverDate) {
|
|
1122
|
+
// let timerInterval = timer(1000, 1000)
|
|
1123
|
+
// setTimeout(()=>{
|
|
1124
|
+
// if (this.timerIntervalClear) {
|
|
1125
|
+
// this.timerIntervalClear.unsubscribe()
|
|
1126
|
+
// }
|
|
1127
|
+
// this.timerIntervalClear = timerInterval.subscribe((t: any) => {
|
|
1128
|
+
// console.log(this.selectedBatch.startDate,'----')
|
|
1129
|
+
// console.log(this.batchControl.value.startDate,'hiiii')
|
|
1130
|
+
// this.targetDate = new Date(this.selectedBatch.startDate)
|
|
1131
|
+
// const convertedDate = dayjs(this.selectedBatch.startDate).format('YYYY-MM-DD HH:mm:ss')
|
|
1132
|
+
// this.targetTime = ''
|
|
1133
|
+
// this.targetTime=new Date(convertedDate).getTime()
|
|
1134
|
+
// this.timerFunc(t,this.serverDate + t * 1000)
|
|
1135
|
+
// })
|
|
1136
|
+
// },100)
|
|
1137
|
+
let t = 0;
|
|
1138
|
+
if (this.timerIntervalClear) {
|
|
1139
|
+
clearInterval(this.timerIntervalClear);
|
|
1140
|
+
}
|
|
1141
|
+
this.timerIntervalClear = setInterval(() => {
|
|
1142
|
+
this.targetTime = '';
|
|
1143
|
+
if (this.batchControl && this.batchControl.value && this.batchControl.value.startDate) {
|
|
1144
|
+
// console.log(this.selectedBatch.startDate,'----')
|
|
1145
|
+
this.targetDate = new Date(this.batchControl.value.startDate);
|
|
1146
|
+
const convertedDate = dayjs(this.batchControl.value.startDate).format('YYYY-MM-DD HH:mm:ss');
|
|
1147
|
+
this.targetTime = new Date(convertedDate).getTime();
|
|
1148
|
+
}
|
|
1149
|
+
this.timerFunc(this.serverDate + t * 1000);
|
|
1150
|
+
t = t + 1;
|
|
1151
|
+
}, 1000);
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1154
|
+
timerFunc(serverDate) {
|
|
1155
|
+
// serverDate = serverDate + timeer
|
|
1156
|
+
if (serverDate && this.targetTime) {
|
|
1157
|
+
let timerLocal = {
|
|
1158
|
+
days: 0,
|
|
1159
|
+
hours: 0,
|
|
1160
|
+
min: 0,
|
|
1161
|
+
seconds: 0,
|
|
1162
|
+
};
|
|
1163
|
+
// serverDate = serverDate + 1000
|
|
1164
|
+
this.date = new Date(serverDate);
|
|
1165
|
+
this.now = this.date.getTime();
|
|
1166
|
+
this.difference = this.targetTime - this.now;
|
|
1167
|
+
this.difference = this.difference / (1000 * 60 * 60 * 24);
|
|
1168
|
+
this.days = Math.floor(this.difference);
|
|
1169
|
+
this.hours = 23 - this.date.getHours();
|
|
1170
|
+
this.minutes = 60 - this.date.getMinutes();
|
|
1171
|
+
this.seconds = 60 - this.date.getSeconds();
|
|
1172
|
+
Number(this.hours);
|
|
1173
|
+
!isNaN(this.days)
|
|
1174
|
+
? (this.days = Math.floor(this.difference))
|
|
1175
|
+
: (this.days = `<img src="https://i.gifer.com/VAyR.gif" />`);
|
|
1176
|
+
timerLocal = {
|
|
1177
|
+
days: this.days,
|
|
1178
|
+
hours: this.hours,
|
|
1179
|
+
min: this.minutes,
|
|
1180
|
+
seconds: this.seconds,
|
|
1181
|
+
};
|
|
1182
|
+
this.timerService.setTimerData(timerLocal);
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
get showDisableMsg() {
|
|
1186
|
+
const allBatches = this.batchData.content;
|
|
1187
|
+
const status = [];
|
|
1188
|
+
if (allBatches) {
|
|
1189
|
+
allBatches.forEach((ele) => {
|
|
1190
|
+
if (!this.handleEnrollmentEndDate(ele) || this.disableEnrollBtn) {
|
|
1191
|
+
status.push(ele);
|
|
1192
|
+
}
|
|
1193
|
+
});
|
|
1194
|
+
return status.length === allBatches.length;
|
|
1195
|
+
}
|
|
1196
|
+
return false;
|
|
1197
|
+
}
|
|
1198
|
+
get findMessage() {
|
|
1199
|
+
if (this.showDisableMsg) {
|
|
1200
|
+
const msg = this.WFSTATUS_MSG_MAPPING.EXPIRED;
|
|
1201
|
+
return this.tocConfig[msg];
|
|
1202
|
+
}
|
|
1203
|
+
return '';
|
|
1204
|
+
}
|
|
1205
|
+
onClickOfShare() {
|
|
1206
|
+
this.enableShare = true;
|
|
1207
|
+
this.raiseTelemetry('shareContent');
|
|
1208
|
+
}
|
|
1209
|
+
add(event) {
|
|
1210
|
+
// this.getUsersToShare(event.value)
|
|
1211
|
+
if (event.value && this.matAutocomplete && !this.matAutocomplete.isOpen) {
|
|
1212
|
+
const input = event.input;
|
|
1213
|
+
const value = event.value;
|
|
1214
|
+
if (this.users.length === this.maxEmailsLimit) {
|
|
1215
|
+
this.openSnackbar(this.translateLabels('maxLimit', 'contentSharing', ''));
|
|
1216
|
+
return;
|
|
1217
|
+
}
|
|
1218
|
+
if (this.users.includes(value.trim())) {
|
|
1219
|
+
this.openSnackbar(this.translateLabels('dulicateEmail', 'contentSharing', ''));
|
|
1220
|
+
return;
|
|
1221
|
+
}
|
|
1222
|
+
// tslint:disable-next-line: max-line-length
|
|
1223
|
+
const ePattern = new RegExp(/^(?!.*\.\.)(?!.*\._)(?!.*\._\.)(?!.*\.\.$)(?!.*\.$)[a-zA-Z0-9_]+(?:\.[a-zA-Z0-9_]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/);
|
|
1224
|
+
if (ePattern.test(value)) {
|
|
1225
|
+
if ((value || '').trim()) {
|
|
1226
|
+
this.users.push(value.trim());
|
|
1227
|
+
}
|
|
1228
|
+
if (input) {
|
|
1229
|
+
input.value = '';
|
|
1230
|
+
}
|
|
1231
|
+
this.userCtrl.setValue('');
|
|
1232
|
+
const el = document.getElementsByClassName('mat-chip-list-wrapper');
|
|
1233
|
+
if (el != null) {
|
|
1234
|
+
setTimeout(() => {
|
|
1235
|
+
el[0].scrollTop = el[0].scrollHeight;
|
|
1236
|
+
}, 200);
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
else {
|
|
1240
|
+
this.openSnackbar(this.translateLabels('invalidEmail', 'contentSharing', ''));
|
|
1241
|
+
return;
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
}
|
|
1245
|
+
remove(user) {
|
|
1246
|
+
const index = this.users.indexOf(user);
|
|
1247
|
+
if (index >= 0) {
|
|
1248
|
+
this.users.splice(index, 1);
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
selected(event) {
|
|
1252
|
+
if (this.users.length === this.maxEmailsLimit) {
|
|
1253
|
+
this.openSnackbar(this.translateLabels('maxLimit', 'contentSharing', ''));
|
|
1254
|
+
return;
|
|
1255
|
+
}
|
|
1256
|
+
if (this.users.includes(event.option.value)) {
|
|
1257
|
+
this.openSnackbar(this.translateLabels('dulicateUser', 'contentSharing', ''));
|
|
1258
|
+
return;
|
|
1259
|
+
}
|
|
1260
|
+
this.users.push(event.option.value);
|
|
1261
|
+
if (this.userInput) {
|
|
1262
|
+
this.userInput.nativeElement.value = '';
|
|
1263
|
+
}
|
|
1264
|
+
this.userCtrl.setValue('');
|
|
1265
|
+
const el = document.getElementsByClassName('mat-chip-list-wrapper');
|
|
1266
|
+
if (el != null) {
|
|
1267
|
+
setTimeout(() => {
|
|
1268
|
+
el[0].scrollTop = el[0].scrollHeight;
|
|
1269
|
+
}, 200);
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
filterSharedUsers(value) {
|
|
1273
|
+
if (value) {
|
|
1274
|
+
const filterValue = value.toLowerCase();
|
|
1275
|
+
return this.allUsers.filter(user => user.name.toLowerCase().includes(filterValue));
|
|
1276
|
+
}
|
|
1277
|
+
return [];
|
|
1278
|
+
}
|
|
1279
|
+
submitSharing() {
|
|
1280
|
+
let courseId = '';
|
|
1281
|
+
let courseName = '';
|
|
1282
|
+
let coursePosterImageUrl = '';
|
|
1283
|
+
let courseProvider = '';
|
|
1284
|
+
let primaryCategory = '';
|
|
1285
|
+
if (this.configSvc.userProfile) {
|
|
1286
|
+
courseProvider = this.configSvc.userProfile.rootOrgName || '';
|
|
1287
|
+
}
|
|
1288
|
+
if (this.content) {
|
|
1289
|
+
courseId = this.content.identifier,
|
|
1290
|
+
courseName = this.content.name,
|
|
1291
|
+
coursePosterImageUrl = this.content.posterImage || '',
|
|
1292
|
+
primaryCategory = this.content.primaryCategory;
|
|
1293
|
+
}
|
|
1294
|
+
const obj = {
|
|
1295
|
+
request: {
|
|
1296
|
+
courseId,
|
|
1297
|
+
courseName,
|
|
1298
|
+
coursePosterImageUrl,
|
|
1299
|
+
courseProvider,
|
|
1300
|
+
primaryCategory,
|
|
1301
|
+
recipients: '',
|
|
1302
|
+
},
|
|
1303
|
+
};
|
|
1304
|
+
const recipients = [];
|
|
1305
|
+
this.users.forEach((selectedUser) => {
|
|
1306
|
+
if (selectedUser.includes('@') && selectedUser.includes('.')) {
|
|
1307
|
+
recipients.push({ email: selectedUser });
|
|
1308
|
+
}
|
|
1309
|
+
else {
|
|
1310
|
+
const selectedUserObj = this.allUsers.filter(user => user.name === selectedUser);
|
|
1311
|
+
if (selectedUserObj.length) {
|
|
1312
|
+
recipients.push({ userId: selectedUserObj[0].id, email: selectedUserObj[0].email });
|
|
1313
|
+
}
|
|
1314
|
+
}
|
|
1315
|
+
});
|
|
1316
|
+
if (recipients.length) {
|
|
1317
|
+
obj.request.recipients = recipients;
|
|
1318
|
+
this.tocSvc.shareContent(obj).subscribe(result => {
|
|
1319
|
+
if (result.responseCode === 'OK') {
|
|
1320
|
+
this.openSnackbar(this.translateLabels('success', 'contentSharing', ''));
|
|
1321
|
+
}
|
|
1322
|
+
this.users = [];
|
|
1323
|
+
this.filteredUsers = [];
|
|
1324
|
+
this.allUsers = [];
|
|
1325
|
+
this.enableShare = false;
|
|
1326
|
+
this.userCtrl.setValue('');
|
|
1327
|
+
}, error => {
|
|
1328
|
+
// tslint:disable
|
|
1329
|
+
console.log(error);
|
|
1330
|
+
this.openSnackbar(this.translateLabels('error', 'contentSharing', ''));
|
|
1331
|
+
});
|
|
1332
|
+
}
|
|
1333
|
+
}
|
|
1334
|
+
onClose() {
|
|
1335
|
+
this.enableShare = false;
|
|
1336
|
+
this.users = [];
|
|
1337
|
+
this.filteredUsers = [];
|
|
1338
|
+
this.allUsers = [];
|
|
1339
|
+
this.userCtrl.setValue('');
|
|
1340
|
+
this.raiseTelemetry('shareClose');
|
|
1341
|
+
}
|
|
1342
|
+
copyToClipboard() {
|
|
1343
|
+
const textArea = document.createElement('textarea');
|
|
1344
|
+
textArea.value = window.location.href;
|
|
1345
|
+
document.body.appendChild(textArea);
|
|
1346
|
+
//textArea.focus()
|
|
1347
|
+
textArea.select();
|
|
1348
|
+
document.execCommand('copy');
|
|
1349
|
+
document.body.removeChild(textArea);
|
|
1350
|
+
this.openSnackbar(this.translateLabels('linkCopied', 'contentSharing', ''));
|
|
1351
|
+
this.raiseTelemetry('copyToClipboard');
|
|
1352
|
+
}
|
|
1353
|
+
raiseTelemetry(subType) {
|
|
1354
|
+
this.events.raiseInteractTelemetry({
|
|
1355
|
+
type: 'click',
|
|
1356
|
+
subType: subType,
|
|
1357
|
+
id: this.content ? this.content.identifier : '',
|
|
1358
|
+
}, {
|
|
1359
|
+
id: this.content ? this.content.identifier : '',
|
|
1360
|
+
type: this.content ? this.content.primaryCategory : '',
|
|
1361
|
+
}, {
|
|
1362
|
+
pageIdExt: `btn-${subType}`,
|
|
1363
|
+
module: WsEvents.EnumTelemetrymodules.CONTENT,
|
|
1364
|
+
});
|
|
1365
|
+
}
|
|
1366
|
+
translateLabels(label, type, subtype) {
|
|
1367
|
+
return this.langtranslations.translateActualLabel(label, type, subtype);
|
|
1368
|
+
}
|
|
1369
|
+
ngOnDestroy() {
|
|
1370
|
+
this.tocSvc.analyticsFetchStatus = 'none';
|
|
1371
|
+
if (this.routerParamSubscription) {
|
|
1372
|
+
this.routerParamSubscription.unsubscribe();
|
|
1373
|
+
}
|
|
1374
|
+
if (this.routeSubscription) {
|
|
1375
|
+
this.routeSubscription.unsubscribe();
|
|
1376
|
+
}
|
|
1377
|
+
if (this.batchWFDataSubscription) {
|
|
1378
|
+
this.batchWFDataSubscription.unsubscribe();
|
|
1379
|
+
}
|
|
1380
|
+
if (this.selectedBatchSubscription) {
|
|
1381
|
+
this.selectedBatchSubscription.unsubscribe();
|
|
1382
|
+
}
|
|
1383
|
+
if (this.timerIntervalClear) {
|
|
1384
|
+
clearInterval(this.timerIntervalClear);
|
|
1385
|
+
// this.timerIntervalClear.unsubscribe()
|
|
1386
|
+
this.targetTime = '';
|
|
1387
|
+
}
|
|
1388
|
+
if (this.selectedBatchSubscription) {
|
|
1389
|
+
this.batchControlUnsubscribe.unsubscribe();
|
|
1390
|
+
}
|
|
1391
|
+
this.batchControl.setValue({});
|
|
1392
|
+
this.batchControl.updateValueAndValidity();
|
|
1393
|
+
this.selectedBatch = {};
|
|
1394
|
+
}
|
|
1395
|
+
translateLabel(label, type) {
|
|
1396
|
+
return this.langtranslations.translateLabel(label, type, '');
|
|
1397
|
+
}
|
|
1398
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocBannerComponent, deps: [{ token: i1.DomSanitizer }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.MatLegacyDialog }, { token: i4.AppTocService }, { token: i5.WidgetContentService }, { token: i6.UtilityService }, { token: i7.MobileAppsService }, { token: i8.MatLegacySnackBar }, { token: i6.ConfigurationsService }, { token: i9.TitleTagService }, { token: i10.ActionService }, { token: i6.LoggerService }, { token: i11.DatePipe }, { token: i12.TranslateService }, { token: i13.UserAutocompleteService }, { token: i6.EventService }, { token: i6.MultilingualTranslationsService }, { token: i14.TimerService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1399
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AppTocBannerComponent, selector: "ws-app-toc-banner", inputs: { banners: "banners", content: "content", resumeData: "resumeData", analytics: "analytics", forPreview: "forPreview", batchData: "batchData", userEnrollmentList: "userEnrollmentList", contentReadData: "contentReadData", clickToShare: "clickToShare" }, outputs: { withdrawOrEnroll: "withdrawOrEnroll", programEnrollCall: "programEnrollCall" }, providers: [AccessControlService, DatePipe], viewQueries: [{ propertyName: "userInput", first: true, predicate: ["userInput"], descendants: true }, { propertyName: "matAutocomplete", first: true, predicate: ["auto"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"header-synopsis fixed-width margin-top-xl\" [ngClass]=\"{ 'header-synopsis-gradient': bannerUrl }\"\n *ngIf=\"show\">\n <div class=\"flex flex-row\">\n <div class=\"flex-auto\">\n <div class=\"header-title flex-col sm:flex-row\">\n <!-- image -->\n <div *ngIf=\"content?.posterImage\" class=\"float-left\">\n <img [src]=\"content?.posterImage | pipePublicURL\" [id]=\"'source_' + content.identifier\" class=\"app-icon\"\n [wsUtilsDefaultThumbnail]=\"defaultSLogo\" [alt]=\"content.sourceName || iGOT\" />\n </div>\n <div *ngIf=\"!content?.posterImage\" class=\"float-left\">\n <ng-container *ngIf=\"content?.appIcon; else defaultImg\">\n <img [src]=\"content?.appIcon | pipePublicURL\" [id]=\"'source_' + content.identifier\" class=\"app-icon\"\n [wsUtilsDefaultThumbnail]=\"defaultSLogo\" [alt]=\"content.sourceName || iGOT\" />\n </ng-container>\n <ng-template #defaultImg>\n <img src=\"/assets/instances/eagle/app_logos/default.png\" [id]=\"'source_' + content.identifier\"\n class=\"app-icon\" [alt]=\"content.sourceName || iGOT\" />\n </ng-template>\n </div>\n <div class=\"sm:ml-5 flex flex-auto\" [id]=\"'m-c-'+ content.identifier\">\n <div class=\"sm:ml-5 flex flex-col flex-auto\">\n <h1 class=\"mat-headline margin-remove-bottom padding-bottom-xs hidden sm:block\"\n [title]=\"contentReadData?.name\">\n {{ contentReadData?.name }}\n <div class=\"float-right cursor-pointer flex\" (click)=\"onClickOfShare()\" *ngIf=\"canShare\">\n <mat-icon class=\"ws-mat-accent-text padding-top-xs\">share</mat-icon>\n </div>\n </h1>\n <h1 class=\"mat-headline margin-remove-bottom padding-bottom-xs block sm:hidden\"\n [title]=\"contentReadData?.name\">\n {{ contentReadData?.name }}\n </h1>\n <span *ngIf=\"contentProgress === 1\" class=\"margin-left-s\">\n <mat-icon class=\"ws-mat-accent-text\">check_circle</mat-icon>\n </span>\n <div *ngIf=\"content?.primaryCategory\" class=\"apIcon float-left mb-4\">\n <img src=\"/assets/icons/content/course.svg\" [id]=\"'source_' + content.identifier\" class=\"source-icon\"\n [wsUtilsDefaultThumbnail]=\"defaultSLogo\" [alt]=\"content.sourceName || iGOT\" />\n <span>{{ translateLabel(content?.primaryCategory, 'searchfilters') }}</span>\n </div>\n <div *ngIf=\"content?.appIcon\" class=\"apIcon float-left mb-4\">\n <img [src]=\"content?.creatorLogo | pipePublicURL\" [id]=\"'source_' + content.identifier\"\n class=\"source-icon\" [wsUtilsDefaultThumbnail]=\"defaultSLogo\" [alt]=\"content.sourceName || iGOT\" />\n </div>\n <div [ngSwitch]=\"routePath\" class=\"header-meta\" [ngClass]=\"{ 'header-meta-banner': bannerUrl }\">\n <!-- Overview Section -->\n <div class=\"banner-overview-container\" [hidden]=\"!content?.purpose && showSubtitleOnBanner\"\n *ngSwitchCase=\"'overview'\">\n <h3 class=\"overview-description mat-body-1\" *ngIf=\"showSubtitleOnBanner\" i18n-title title=\"Subtitle\">\n {{ content?.source | pipeLimitTo: 250 }}\n </h3>\n <p class=\"overview-description mat-body-1\" *ngIf=\"!showSubtitleOnBanner\" i18n-title title=\"Description\">\n {{ content?.instructions | pipeLimitTo: 450 }}\n </p>\n <div *ngIf=\"sanitizedIntroductoryVideoIcon\" class=\"overview-intro ws-mat-primary-lite-background\"\n [style.backgroundImage]=\"sanitizedIntroductoryVideoIcon\" role=\"button\" (click)=\"playIntroVideo()\">\n <mat-icon role=\"button\" class=\"overview-intro-overlay\">play_arrow</mat-icon>\n </div>\n </div>\n <!-- Toc Section -->\n <div *ngSwitchCase=\"'contents'\">\n <!-- Contents Banner -->\n </div>\n <!-- Analytics Section -->\n <div class=\"banner-overview-container mat-body-1\" [hidden]=\"!content?.purpose && showSubtitleOnBanner\"\n *ngSwitchCase=\"'analytics'\">\n <h3 class=\"overview-description mat-body-1\" *ngIf=\"showSubtitleOnBanner\" i18n-title title=\"Subtitle\">\n {{ content?.purpose | pipeLimitTo: 250 }}\n </h3>\n <p class=\"overview-description mat-body-1\" *ngIf=\"!showSubtitleOnBanner\" i18n-title title=\"Description\">\n {{ content?.instructions | pipeLimitTo: 450 }}\n </p>\n <div *ngIf=\"sanitizedIntroductoryVideoIcon\" class=\"overview-intro ws-mat-primary-lite-background\"\n [style.backgroundImage]=\"sanitizedIntroductoryVideoIcon\" role=\"button\" (click)=\"playIntroVideo()\">\n <mat-icon role=\"button\" class=\"overview-intro-overlay\">play_arrow</mat-icon>\n </div>\n </div>\n </div>\n <div *ngIf=\"content?.averageRating\" class=\"flex items-center rating margin-bottom-m\">\n <span class=\"rating-number mat-body-2\">{{ content?.averageRating }} </span>\n <mat-icon class=\"mat-icon material-icons\" *ngFor=\"let rating of [1, 2, 3, 4, 5]\">\n {{ getRatingIcon(rating) }}</mat-icon>\n <span class=\"margin-left-xs rating-count mat-body-2\" *ngIf=\"content?.totalRating\">\n ( {{ content?.totalRating | pipeCountTransform }} )</span>\n </div>\n <div *ngIf=\"!content?.averageRating\" class=\"flex items-center rating margin-bottom-m\">\n <span class=\"rating-number mat-body-2\"> 0.0 </span>\n <mat-icon class=\"mat-icon material-icons\" *ngFor=\"let rating of [1, 2, 3, 4, 5]\">\n {{ getRatingIcon(rating) }}</mat-icon>\n <span class=\"margin-left-xs rating-count mat-body-2\" *ngIf=\"!content?.totalRating\">\n ( {{ 0 | pipeCountTransform }} )</span>\n </div>\n <!-- tags -->\n <div class=\"tags margin-bottom-s\" *ngIf=\"content?.keywords && content?.keywords?.length > 0\">\n <span *ngFor=\"let tag of content.keywords\" class=\"tag\">\n {{tag}}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<ng-container *ngIf=\"content?.primaryCategory === primaryCategory.BLENDED_PROGRAM\">\n <div class=\"batch-div\">\n <div class=\"request-block\">\n <ng-container *ngIf=\"content\" [ngTemplateOutlet]=\"batchDropdown\"></ng-container>\n <ng-container\n *ngIf=\"batchData && !batchData?.enrolled && batchData?.workFlow?.wfInitiated &&\n (batchData?.workFlow?.wfItem?.currentStatus !== WFBlendedProgramStatus.REJECTED) && (batchData?.workFlow?.wfItem?.currentStatus !== WFBlendedProgramStatus.REMOVED) &&\n (batchData?.workFlow?.wfItem?.currentStatus !== WFBlendedProgramStatus.WITHDRAWN) &&\n (batchData?.workFlow?.wfItem?.currentStatus !== WFBlendedProgramStatus.APPROVED) && batchData?.content?.length\">\n <p class=\"margin-remove-bottom mat-body-1 padding-m bg-white\">\n {{batchData?.workFlow?.batch?.name}} - ({{batchData?.workFlow?.batch?.startDate | date: 'dd-MM-yyyy'}} -\n {{batchData?.workFlow?.batch?.endDate | date: 'dd-MM-yyyy' || 'present'}})\n </p>\n <ng-container>\n <button class=\"withdraw-batch\" (click)=\"!disableWithdrawnBtn && requestToWithdrawDialog()\"\n [disabled]=\"disableWithdrawnBtn\" [ngClass]=\"{ 'disable-btn': disableWithdrawnBtn }\">\n <ng-container> {{ 'apptocbanner.withDrawYourRequest' | translate }} </ng-container>\n </button>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"batchData && batchData?.enrolled && batchData?.content?.length\">\n <h3 class=\"margin-remove-bottom p-4 bg-white mat-body-1\" *ngFor=\"let batch of batchData.content\">\n {{batch?.name}} ({{batch?.startDate | date: 'dd-MM-yyyy' }} - {{batch?.endDate | date: 'dd-MM-yyyy' ||\n 'present'}})\n </h3>\n <ng-container [ngTemplateOutlet]=\"statusMsg\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"batchData && !batchData?.enrolled && !batchData?.content?.length\">\n <h3 class=\"margin-remove-bottom mat-body-2 ws-default-text\">\n No batches\n </h3>\n </ng-container>\n </div>\n <!-- <ng-container *ngIf=\"batchData && batchData?.content?.length && batchData?.content[0]?.batchAttributes?.batchLocationDetails\">\n <div class=\"flex items-center location-wrapper\">\n <div>\n <mat-icon class=\"location-icon\">\n location_on</mat-icon>\n </div>\n <div class=\"loc-details\">\n {{batchData?.content[0]?.batchAttributes?.batchLocationDetails}}\n </div>\n </div>\n </ng-container> -->\n </div>\n <ng-container *ngIf=\"batchData && !batchData?.enrolled && batchData?.content?.length\"\n [ngTemplateOutlet]=\"statusMsg\"></ng-container>\n</ng-container>\n<ng-container *ngIf=\"content?.courseCategory === nsContent.ECourseCategory.MODERATED_PROGRAM\">\n <div class=\"request-batch\">\n <div class=\"batch-div\">\n <ng-container *ngIf=\"content\" [ngTemplateOutlet]=\"batchDropdown\"></ng-container>\n </div>\n </div>\n</ng-container>\n<!-- <div class=\"header-synopsis fixed-width margin-top-l\" [ngClass]=\"{ 'header-synopsis-gradient': bannerUrl }\" *ngIf=\"content && batchControl?.value?.batchAttributes?.batchLocationDetails\">\n <ng-container *ngIf=\"content?.primaryCategory === primaryCategory.BLENDED_PROGRAM\">\n <h2>{{'apptocbanner.batchLocation' | translate}}</h2>\n <p>{{batchControl?.value?.batchAttributes?.batchLocationDetails}}</p>\n </ng-container>\n</div> -->\n\n<mat-menu #actionMenu=\"matMenu\">\n <div mat-menu-item>\n <ng-container *ngIf=\"content\" [ngTemplateOutlet]=\"actions\"></ng-container>\n </div>\n</mat-menu>\n\n<ng-template #actions>\n <a i18n-aria-label aria-label=\"Take Action\" mat-icon-button *ngIf=\"reviewButton\"\n [routerLink]=\"['/author/editor/' + content?.identifier]\">\n <mat-icon>publish</mat-icon>\n </a>\n <ws-widget-btn-content-download id=\"prevfordownload\" [forPreview]=\"forPreview\"\n [widgetData]=\"content | pipePartialContent : ['identifier', 'contentType', 'resourceType', 'mimeType', 'downloadUrl', 'isExternal', 'artifactUrl']\">\n </ws-widget-btn-content-download>\n <ws-widget-btn-content-share id=\"prevforshare\" [forPreview]=\"forPreview\" [widgetData]=\"content\">\n </ws-widget-btn-content-share>\n <ws-widget-btn-kb [forPreview]=\"forPreview\" id=\"prev\" [contentId]=\"content?.identifier\"\n [contentName]=\"contentReadData?.name\" [contentType]=\"content?.contentType\" [status]=\"content?.status\">\n </ws-widget-btn-kb>\n <ws-widget-btn-goals [forPreview]=\"forPreview\" id=\"goalsforprev\" *ngIf=\"isGoalsEnabled && btnGoalsConfig\"\n [widgetData]=\"btnGoalsConfig\">\n </ws-widget-btn-goals>\n <ws-widget-btn-playlist [forPreview]=\"forPreview\" id=\"playlistforprev\" *ngIf=\"btnPlaylistConfig\"\n [widgetData]=\"btnPlaylistConfig\">\n </ws-widget-btn-playlist>\n <ws-widget-btn-content-feedback-v2 [forPreview]=\"forPreview\" id=\"feedbackforprev\"\n [widgetData]=\"content | pipePartialContent: ['identifier', 'name']\">\n </ws-widget-btn-content-feedback-v2>\n</ng-template>\n<ng-template #authView>{{'apptocbanner.view' | translate}}</ng-template>\n<ng-template #statusMsg>\n <div class=\"status-container mt-2 mb-2\"\n *ngIf=\"content?.primaryCategory === primaryCategory.BLENDED_PROGRAM && batchData?.workFlow?.wfInitiated\">\n <div class=\"flex\" *ngIf=\"showMsg\">\n <ng-container *ngIf=\"showIcon\">\n <mat-icon class=\"mr-4\" [ngClass]=\"iconColor\" *ngIf=\"WFIcon === 'circle'\">check_circle</mat-icon>\n <mat-icon class=\"mr-4 ws-mat-red-text visibility-show\" style=\"transform: rotate(180deg);\"\n *ngIf=\"WFIcon === 'info'\">info</mat-icon>\n </ng-container>\n <div class=\"mat-body-1\">{{ getWFMsg }}</div>\n </div>\n </div>\n <div class=\"status-container mt-5\"\n *ngIf=\"content?.primaryCategory === primaryCategory.BLENDED_PROGRAM && showDisableMsg && !showMsg && findMessage.length > 0\">\n <div class=\"flex\">\n <ng-container>\n <mat-icon class=\"mr-3 ws-mat-red-text\" style=\"transform: rotate(180deg);\">info</mat-icon>\n </ng-container>\n <div class=\"mat-body-1\">\n <p class=\"margin-remove-bottom \">{{findMessage}}</p>\n </div>\n </div>\n </div>\n</ng-template>\n\n<div class=\"share-container\" *ngIf=\"enableShare\">\n <div *ngIf=\"showLoader\" class=\"text-center my-2 loader\">\n <mat-spinner class=\"inline-block\"></mat-spinner>\n </div>\n <div class=\"cursor-pointer close-share-dialog\"><mat-icon (click)=\"onClose()\" class=\"close-icon\">close</mat-icon></div>\n <div class=\"share-modal\">\n <div class=\"karmasahayogi-icon\"><img alt=\"karmasahayogi-icon\" src=\"/assets/icons/KarmaSahayogi.svg\"></div>\n <div class=\"content-div\">\n <div class=\"triangle-left hidden md:block\"></div>\n <div class=\"contnet\">\n <section class=\"w-full flex align-center justify-between \">\n <div class=\"mb-2\">\n <h2 class=\"mat-headline margin-remove-bottom ws-mat-black-text\">{{'contentSharing.header' | translate}}</h2>\n </div>\n </section>\n <form [formGroup]=\"shareForm\">\n <div class=\"mat-body-2\">\n <div class=\"md-5\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-chip-list #chipList aria-label=\"user selection\" appearance=\"outline\">\n <mat-chip *ngFor=\"let user of users\" [selectable]=\"selectable\" [removable]=\"removable\"\n (removed)=\"remove(user)\">\n {{user}}\n <mat-icon matChipRemove *ngIf=\"removable\">close</mat-icon>\n </mat-chip>\n <input tabindex=\"-1\" class=\"inputTextBox\"\n placeholder=\"{{users.length === 0 ? translateLabels('placehoderText', 'contentSharing') : ''}}\"\n #userInput formControlName=\"review\" [formControl]=\"userCtrl\" [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"addOnBlur\" (matChipInputTokenEnd)=\"add($event)\">\n </mat-chip-list>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n <mat-option *ngFor=\"let user of filteredUsers\" [value]=\"user.name\">\n <div class=\"flex\">\n <div class=\"iconDiv\">\n <span class=\"iconText\">{{user.iconText.substring(0,2)}}</span>\n </div>\n <div>\n <div>{{user.name}}</div>\n <div class=\"emailText\">{{user.maskedEmail}}</div>\n </div>\n </div>\n </mat-option>\n </mat-autocomplete>\n <mat-hint align=\"start\" class=\"left-over-emails\">{{'contentSharing.note' | translate}}</mat-hint>\n <mat-hint align=\"end\" class=\"left-over-emails\">{{ users.length }} /{{maxEmailsLimit}}\n {{'contentSharing.remaingEmails' | translate}}</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"flex mt-5\">\n <div class=\"flex flex-1 flex-end\">\n <span class=\"copy-link-btn cursor-pointer\" (click)=\"copyToClipboard()\">{{'contentSharing.copyLink' |\n translate}} <mat-icon>link</mat-icon></span>\n <button mat-stroked-button type=\"submit\"\n [ngClass]=\"{'disable-send-btn': users.length === 0 || users.length}\"\n class=\"text-white ws-mat-primary-background flex-auto-display send-btn\"\n [disabled]=\"userCtrl.value.length || users.length === 0 || users.length > maxEmailsLimit\"\n (click)=\"submitSharing()\">\n {{'contentSharing.send' | translate}} <mat-icon>send</mat-icon>\n </button>\n </div>\n </div>\n\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #batchDropdown>\n <form class=\"flex flex-col gap-4\">\n <ng-container *ngIf=\"batchData && !batchData?.enrolled\n && (!batchData.workFlow?.wfInitiated || (batchData.workFlow?.wfInitiated && batchData?.workFlow?.wfItem?.currentStatus === WFBlendedProgramStatus.REJECTED || batchData?.workFlow?.wfItem?.currentStatus === WFBlendedProgramStatus.WITHDRAWN || batchData?.workFlow?.wfItem?.currentStatus === WFBlendedProgramStatus.REMOVED))\n && batchData?.content?.length\">\n <mat-form-field appearance=\"outline\" class=\"w-full batch-form-field\">\n <mat-select #batchControlData [formControl]=\"batchControl\" required autoSelctFirstOption\n (selectionChange)=\"batchChange($event)\" panelClass=\"batch-dropdown\">\n <mat-option *ngFor=\"let batch of batchData.content; let i=index\" [value]=\"batch\" selected=\"index === 0\"\n [disabled]=\"!handleEnrollmentEndDate(batch) || disableEnrollBtn \">\n <div class=\"flex flex-row items-center gap-2\">\n <div class=\"flex-1 text-sm batch-timings\">\n {{ batch.name }} ( {{ batch.startDate | date: 'd MMM, yyyy' }} - {{ batch.endDate | date: 'd MMM, yyyy'\n || 'present' }} )\n </div>\n <div class=\"expired\" *ngIf=\"!handleEnrollmentEndDate(batch) || disableEnrollBtn\">\n Expired\n </div>\n </div>\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"batchControl.hasError('required')\">Please choose a batch to start course</mat-error>\n </mat-form-field>\n <div class=\"flex flex-wrap gap-3\">\n <ng-container *ngIf=\"!showRejected\">\n <div class=\"flex-1\">\n <div class=\"flex flex-col gap-1\" *ngIf=\"selectedBatch && selectedBatch.enrollmentEndDate \">\n <p class=\"text-xs leading-4 mb-0\">Last enroll date</p>\n <p class=\"font-bold mb-0\">{{ selectedBatch.enrollmentEndDate | date: 'd MMM, y' }}</p>\n </div>\n </div>\n <div class=\"flex flex-row justify-center items-center\">\n <button class=\"enroll-button\"\n [ngClass]=\"{ 'disable-btn': disableEnrollBtn || batchControl.hasError('required') || !handleEnrollmentEndDate(selectedBatch) }\"\n [disabled]=\"disableEnrollBtn || batchControl.hasError('required')|| !handleEnrollmentEndDate(selectedBatch)\"\n (click)=\"requestToEnrollDialog()\">\n <ng-container>\n Request to enroll\n </ng-container>\n </button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"showRejected && content?.primaryCategory === primaryCategory.BLENDED_PROGRAM\">\n <h3 class=\"margin-remove-bottom mat-body-2 ws-default-text\">\n Your enrollment request is {{batchData?.workFlow?.wfItem?.currentStatus === WFBlendedProgramStatus.REMOVED\n ?'removed':'rejected'}}.</h3>\n </ng-container>\n </div>\n </ng-container>\n </form>\n</ng-template>", styles: [".button,.batch-div .enroll-button,.batch-div .withdraw-batch{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}.batch-div{border-radius:8px;background-color:#fdead5;max-width:400px;margin:0 auto}.batch-div .request-block{padding:16px}.batch-div .batch-details{padding:16px;border:1px solid #FF9800;border-radius:8px;background-color:#fff;cursor:pointer}.batch-div .batch-enrolled{font-weight:700;color:#4caf50;font-size:.75rem}.batch-div .withdraw-batch{color:#000000de;border:1px solid rgba(0,0,0,.8705882353);background-color:#fff;width:100%;margin-top:16px}.batch-div .enroll-button{color:#fff;background-color:#ff9800;border:1px solid #FF9800}::ng-deep .batch-dropdown{margin-top:3rem!important}::ng-deep .batch-dropdown .mat-option{height:fit-content!important;padding:12px 16px!important}::ng-deep .batch-form-field{height:64px}::ng-deep .batch-form-field .mat-form-field-wrapper{margin:0;padding-bottom:0;height:inherit}::ng-deep .batch-form-field .mat-form-field-wrapper .mat-form-field-flex{height:inherit}::ng-deep .batch-form-field .mat-form-field-outline{border-radius:8px;height:inherit}::ng-deep .batch-form-field .mat-form-field-infix{display:flex;align-items:center;font-size:14px;border-top:.35rem solid transparent;padding:8px 0;height:44px}::ng-deep .batch-form-field .mat-form-field-infix .mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:translateY(0)!important}::ng-deep .batch-form-field .mat-form-field-subscript-wrapper{padding:8px 4px!important}::ng-deep .batch-form-field .mat-form-field-subscript-wrapper .mat-error{margin-top:6px}::ng-deep .batch-form-field .mat-select-value-text{white-space:pre-line!important;line-height:21px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.disable-btn{opacity:.5}.mb-0{margin-bottom:0!important}.batch-timings{text-transform:uppercase;line-height:20px}.header-synopsis{padding:32px 64px}@media only screen and (max-width: 599px){.header-synopsis{padding:32px 24px}}.app-icon{height:180px;width:280px;border-radius:4px}.banner-container{position:relative;background-repeat:no-repeat;background-position:center;background-size:cover}.header-synopsis-gradient{background:inherit}.category-text{margin-left:8px}.fixed-width{max-width:1230px;display:block;margin:0 auto;padding:0!important}@media only screen and (min-width: 600px) and (max-width: 959px){.fixed-width{padding:0 15px!important}}@media only screen and (max-width: 599px){.fixed-width{padding:0 15px!important}}.fluid-width{width:100%}.header-synopsis{box-sizing:border-box}.header-synopsis .apIcon{background-color:#fff;margin-right:16px;padding:4px 8px;border-radius:16px;display:flex;align-items:center;justify-content:flex-start}.header-synopsis .apIcon img{height:15px;object-fit:contain}.header-synopsis .apIcon span{opacity:1;color:#0009;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.header-synopsis .header-title{display:flex}.header-synopsis .header-title .text-truncate-title{max-width:100%;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}.header-synopsis .rating .mat-icon{width:16px;height:16px;display:inline-table;color:#f69953;font-size:18px}.header-synopsis .rating .rating-number{letter-spacing:0px;color:#f69953}.header-synopsis .rating .rating-count{letter-spacing:.36px;color:#f69953}.header-synopsis .rating .rating mat-icon{color:#f69953}.header-synopsis .header-meta{line-height:1.5}.header-synopsis .resumeButton{height:52px;min-width:160px;display:flex;align-items:center;justify-content:center;background:#34d6a4 0% 0% no-repeat padding-box;box-shadow:0 10px 30px #9993;color:#fff!important}.header-synopsis .resumeButton ::ng-deep .mat-button-wrapper{letter-spacing:0px;color:#fff;text-transform:capitalize}.header-synopsis .header-actions{display:flex}.header-synopsis .header-actions .custom-button{background:#0074b6 0% 0% no-repeat padding-box;border-radius:4px}.header-synopsis .header-actions.top{margin-top:0;margin-bottom:40px}.header-synopsis .header-actions .action-btns{margin-left:auto;order:2}.banner-overview-container{display:flex;justify-content:space-between}.banner-overview-container .overview-description{flex:1;min-width:1px;margin-right:24px;margin-bottom:12px;opacity:1;color:#000000de;font-size:16px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:24px}@media only screen and (max-width: 599px){.banner-overview-container .overview-description{margin-right:0}}.banner-overview-container .overview-intro{width:240px;height:135px;border:1px solid;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover;background-attachment:fixed;position:relative}.banner-overview-container .overview-intro .overview-intro-overlay{cursor:pointer;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;width:48px;height:48px;font-size:48px;background-color:#00000080;border-radius:50%;padding:8px}.banner-overview-container .overview-intro .overview-intro-overlay:active{background-color:#000000b3}@media only screen and (max-width: 599px){.banner-overview-container .overview-intro{display:none}}.analytics-meta{font-weight:500;margin-bottom:12px;line-height:1.2}.hidden-block-xs{display:block}@media only screen and (max-width: 599px){.hidden-block-xs{display:none}}.visible-block-xs{display:none}@media only screen and (max-width: 599px){.visible-block-xs{display:block}}.hidden-block-s{display:block}@media only screen and (min-width: 600px) and (max-width: 959px){.hidden-block-s{display:none}}.visible-block-s{display:none}@media only screen and (min-width: 600px) and (max-width: 959px){.visible-block-s{display:block}}.info-msg{color:#fff!important}.info-msg mat-icon{color:#fff!important}.tags{display:flex;flex:1;flex-direction:row;flex-wrap:wrap;position:relative;z-index:1}.tags .tag{display:inline-block;border-radius:100px 4px 4px 100px;padding:1px 12px;width:auto;justify-content:space-between;margin:0 8px 8px 0;background-color:#0000000a;border:1px solid rgba(0,0,0,.08);box-sizing:border-box}.batch-container{max-width:435px;border-radius:4px;width:40%}.custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px;max-width:auto!important;height:42px!important}.sticky-banner{z-index:999;position:sticky;top:128px}.sticky-banner .header-title h1{font:normal normal 300 24px/35px}.sticky-banner .overview-description{font:normal normal 300 14px/21px}.batch-wrapper{display:flex;justify-content:space-between;gap:25px;width:100%}.batch-timer{width:60%;background-color:#fff;align-items:center}.batch-timer .timer-title{opacity:1;color:#0006;font-size:14px;font-weight:700;font-style:normal;letter-spacing:.25px;text-align:left;line-height:20px}.batch-timer .time-wrapper div p.count{border-radius:4px;background-color:#000000de;opacity:1;color:#fff;font-size:36px;font-weight:600;font-style:normal;letter-spacing:-.2px;text-align:center;line-height:48px;width:67px;height:47px;margin-bottom:4px}.batch-timer .time-wrapper div p.time-label{opacity:1;color:#000000de;font-size:10px;font-weight:400;font-style:normal;letter-spacing:.5px;text-align:center;line-height:12px}.batch-timer .time-wrapper span{padding:8px;font-size:36px}.batch-timer .help{width:100%}.batch-timer .help .batch-duration-wrap{padding:0 24px}.batch-timer .help .batch-duration-wrap .duration-days{opacity:1;color:#000000de;font-family:Montserrat-SemiBold;font-size:36px;font-weight:600;font-style:normal;letter-spacing:-.2px;text-align:left;line-height:48px;padding-bottom:16px}.batch-info{opacity:1;color:#000000de;font-size:14px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:20px;padding:26px}.disable-send-btn[disabled]{background-color:#000!important}@media (max-width: 768px){.batch-wrapper{flex-wrap:wrap}.batch-timer{width:100%;flex-wrap:wrap;justify-content:center}.batch-container{width:100%}}.share-container{position:fixed;height:100vh;background:#131313a3;width:100vw;top:0;left:0;z-index:1000}.share-modal{display:flex;align-items:center;justify-content:center;height:inherit;width:inherit}.karmasahayogi-icon{position:absolute;bottom:-5px;left:calc(50% - 464px)}.triangle-left{transform:translateY(100%);position:absolute;bottom:28%;left:-24px;width:0;height:0;border-top:24px solid transparent;border-right:48px solid #ffffff;border-bottom:24px solid transparent}.contnet{background-color:#fff;width:612px;border-radius:12px;padding:16px}.content-div{position:relative}.copy-link-btn{display:flex;align-items:center;margin-right:20px;color:red;color:#0074b6!important;font-weight:600}.copy-link-btn:hover{background-color:none!important}.send-btn{border-radius:20px}.send-btn .mat-icon{margin-bottom:2.5px}::ng-deep .mat-chip-list-wrapper{height:100px;overflow:auto;display:block!important;scroll-behavior:smooth}.iconText{border-radius:50%;background-color:#000;color:#fff;width:30px;display:inline-block;text-align:center;height:30px;display:flex;align-items:center;justify-content:center}.iconDiv{margin-right:8px}.emailText{opacity:.6}button:disabled{pointer-events:none;opacity:.5;color:#000}::ng-deep .mat-autocomplete-panel{z-index:99999}::ng-deep .cdk-overlay-pane{z-index:9999!important}::ng-deep .close-icon{background-color:#000;color:#fff;border-radius:16px;padding:4px}::ng-deep .mat-chip-input{padding-bottom:8px!important}::ng-deep .theme-igot.day-mode .mat-chip.mat-standard-chip{color:#0074b6!important}::ng-deep .theme-igot.day-mode .mat-chip.mat-standard-chip mat-icon{color:#0074b6!important}::ng-deep .inputTextBox{width:95%!important;overflow-x:hidden}.close-share-dialog{position:absolute;right:30px;top:30px}.left-over-emails{font-weight:600}.loader{position:absolute;top:42%;left:45%;z-index:1000}@media (max-width: 768px){.content-div{width:100%}.contnet{width:unset;margin-bottom:18%}.left-over-emails{display:none}.karmasahayogi-icon{left:8%;bottom:20%}.share-modal{align-items:self-end}}@media only screen and (min-device-width: 820px) and (max-device-width: 1180px){.karmasahayogi-icon{left:calc(50% - 387px)}.content{width:500px}}@media only screen and (min-device-width: 768px) and (max-device-width: 819px){.triangle-left{display:none}}.location-wrapper{padding:16px;border-top:1px solid rgba(0,0,0,.16)}.location-wrapper .location-icon{color:#1b4ca1;height:32px;width:32px;font-size:32px;padding-right:8px}.location-wrapper .loc-details{opacity:1;color:#000000de;font-family:Lato-Bold;font-size:14px;font-weight:700;font-style:Bold;letter-spacing:.25px;text-align:left;line-height:20px}.visibility-show{overflow:visible!important}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i11.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i11.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i15.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i15.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i15.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i15.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i15.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i15.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i15.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i16.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i17.MatLegacyButton, 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"] }, { kind: "component", type: i17.MatLegacyAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-icon-button], a[mat-fab], a[mat-mini-fab], a[mat-stroked-button], a[mat-flat-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: i18.MatLegacyError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i18.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i18.MatLegacyHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: i19.MatLegacyMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i19.MatLegacyMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "component", type: i20.MatLegacyChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i20.MatLegacyChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i20.MatLegacyChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i20.MatLegacyChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i21.MatLegacyProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i22.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i23.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i6.DefaultThumbnailDirective, selector: "[wsUtilsDefaultThumbnail]", inputs: ["wsUtilsDefaultThumbnail", "src"] }, { kind: "component", type: i24.MatLegacyAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i24.MatLegacyAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "pipe", type: i11.DatePipe, name: "date" }, { kind: "pipe", type: i6.PipeLimitToPipe, name: "pipeLimitTo" }, { kind: "pipe", type: i6.PipeCountTransformPipe, name: "pipeCountTransform" }, { kind: "pipe", type: i6.PipePartialContentPipe, name: "pipePartialContent" }, { kind: "pipe", type: i6.PipePublicURL, name: "pipePublicURL" }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }] }); }
|
|
1400
|
+
}
|
|
1401
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AppTocBannerComponent, decorators: [{
|
|
1402
|
+
type: Component,
|
|
1403
|
+
args: [{ selector: 'ws-app-toc-banner', providers: [AccessControlService, DatePipe], template: "<div class=\"header-synopsis fixed-width margin-top-xl\" [ngClass]=\"{ 'header-synopsis-gradient': bannerUrl }\"\n *ngIf=\"show\">\n <div class=\"flex flex-row\">\n <div class=\"flex-auto\">\n <div class=\"header-title flex-col sm:flex-row\">\n <!-- image -->\n <div *ngIf=\"content?.posterImage\" class=\"float-left\">\n <img [src]=\"content?.posterImage | pipePublicURL\" [id]=\"'source_' + content.identifier\" class=\"app-icon\"\n [wsUtilsDefaultThumbnail]=\"defaultSLogo\" [alt]=\"content.sourceName || iGOT\" />\n </div>\n <div *ngIf=\"!content?.posterImage\" class=\"float-left\">\n <ng-container *ngIf=\"content?.appIcon; else defaultImg\">\n <img [src]=\"content?.appIcon | pipePublicURL\" [id]=\"'source_' + content.identifier\" class=\"app-icon\"\n [wsUtilsDefaultThumbnail]=\"defaultSLogo\" [alt]=\"content.sourceName || iGOT\" />\n </ng-container>\n <ng-template #defaultImg>\n <img src=\"/assets/instances/eagle/app_logos/default.png\" [id]=\"'source_' + content.identifier\"\n class=\"app-icon\" [alt]=\"content.sourceName || iGOT\" />\n </ng-template>\n </div>\n <div class=\"sm:ml-5 flex flex-auto\" [id]=\"'m-c-'+ content.identifier\">\n <div class=\"sm:ml-5 flex flex-col flex-auto\">\n <h1 class=\"mat-headline margin-remove-bottom padding-bottom-xs hidden sm:block\"\n [title]=\"contentReadData?.name\">\n {{ contentReadData?.name }}\n <div class=\"float-right cursor-pointer flex\" (click)=\"onClickOfShare()\" *ngIf=\"canShare\">\n <mat-icon class=\"ws-mat-accent-text padding-top-xs\">share</mat-icon>\n </div>\n </h1>\n <h1 class=\"mat-headline margin-remove-bottom padding-bottom-xs block sm:hidden\"\n [title]=\"contentReadData?.name\">\n {{ contentReadData?.name }}\n </h1>\n <span *ngIf=\"contentProgress === 1\" class=\"margin-left-s\">\n <mat-icon class=\"ws-mat-accent-text\">check_circle</mat-icon>\n </span>\n <div *ngIf=\"content?.primaryCategory\" class=\"apIcon float-left mb-4\">\n <img src=\"/assets/icons/content/course.svg\" [id]=\"'source_' + content.identifier\" class=\"source-icon\"\n [wsUtilsDefaultThumbnail]=\"defaultSLogo\" [alt]=\"content.sourceName || iGOT\" />\n <span>{{ translateLabel(content?.primaryCategory, 'searchfilters') }}</span>\n </div>\n <div *ngIf=\"content?.appIcon\" class=\"apIcon float-left mb-4\">\n <img [src]=\"content?.creatorLogo | pipePublicURL\" [id]=\"'source_' + content.identifier\"\n class=\"source-icon\" [wsUtilsDefaultThumbnail]=\"defaultSLogo\" [alt]=\"content.sourceName || iGOT\" />\n </div>\n <div [ngSwitch]=\"routePath\" class=\"header-meta\" [ngClass]=\"{ 'header-meta-banner': bannerUrl }\">\n <!-- Overview Section -->\n <div class=\"banner-overview-container\" [hidden]=\"!content?.purpose && showSubtitleOnBanner\"\n *ngSwitchCase=\"'overview'\">\n <h3 class=\"overview-description mat-body-1\" *ngIf=\"showSubtitleOnBanner\" i18n-title title=\"Subtitle\">\n {{ content?.source | pipeLimitTo: 250 }}\n </h3>\n <p class=\"overview-description mat-body-1\" *ngIf=\"!showSubtitleOnBanner\" i18n-title title=\"Description\">\n {{ content?.instructions | pipeLimitTo: 450 }}\n </p>\n <div *ngIf=\"sanitizedIntroductoryVideoIcon\" class=\"overview-intro ws-mat-primary-lite-background\"\n [style.backgroundImage]=\"sanitizedIntroductoryVideoIcon\" role=\"button\" (click)=\"playIntroVideo()\">\n <mat-icon role=\"button\" class=\"overview-intro-overlay\">play_arrow</mat-icon>\n </div>\n </div>\n <!-- Toc Section -->\n <div *ngSwitchCase=\"'contents'\">\n <!-- Contents Banner -->\n </div>\n <!-- Analytics Section -->\n <div class=\"banner-overview-container mat-body-1\" [hidden]=\"!content?.purpose && showSubtitleOnBanner\"\n *ngSwitchCase=\"'analytics'\">\n <h3 class=\"overview-description mat-body-1\" *ngIf=\"showSubtitleOnBanner\" i18n-title title=\"Subtitle\">\n {{ content?.purpose | pipeLimitTo: 250 }}\n </h3>\n <p class=\"overview-description mat-body-1\" *ngIf=\"!showSubtitleOnBanner\" i18n-title title=\"Description\">\n {{ content?.instructions | pipeLimitTo: 450 }}\n </p>\n <div *ngIf=\"sanitizedIntroductoryVideoIcon\" class=\"overview-intro ws-mat-primary-lite-background\"\n [style.backgroundImage]=\"sanitizedIntroductoryVideoIcon\" role=\"button\" (click)=\"playIntroVideo()\">\n <mat-icon role=\"button\" class=\"overview-intro-overlay\">play_arrow</mat-icon>\n </div>\n </div>\n </div>\n <div *ngIf=\"content?.averageRating\" class=\"flex items-center rating margin-bottom-m\">\n <span class=\"rating-number mat-body-2\">{{ content?.averageRating }} </span>\n <mat-icon class=\"mat-icon material-icons\" *ngFor=\"let rating of [1, 2, 3, 4, 5]\">\n {{ getRatingIcon(rating) }}</mat-icon>\n <span class=\"margin-left-xs rating-count mat-body-2\" *ngIf=\"content?.totalRating\">\n ( {{ content?.totalRating | pipeCountTransform }} )</span>\n </div>\n <div *ngIf=\"!content?.averageRating\" class=\"flex items-center rating margin-bottom-m\">\n <span class=\"rating-number mat-body-2\"> 0.0 </span>\n <mat-icon class=\"mat-icon material-icons\" *ngFor=\"let rating of [1, 2, 3, 4, 5]\">\n {{ getRatingIcon(rating) }}</mat-icon>\n <span class=\"margin-left-xs rating-count mat-body-2\" *ngIf=\"!content?.totalRating\">\n ( {{ 0 | pipeCountTransform }} )</span>\n </div>\n <!-- tags -->\n <div class=\"tags margin-bottom-s\" *ngIf=\"content?.keywords && content?.keywords?.length > 0\">\n <span *ngFor=\"let tag of content.keywords\" class=\"tag\">\n {{tag}}\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n<ng-container *ngIf=\"content?.primaryCategory === primaryCategory.BLENDED_PROGRAM\">\n <div class=\"batch-div\">\n <div class=\"request-block\">\n <ng-container *ngIf=\"content\" [ngTemplateOutlet]=\"batchDropdown\"></ng-container>\n <ng-container\n *ngIf=\"batchData && !batchData?.enrolled && batchData?.workFlow?.wfInitiated &&\n (batchData?.workFlow?.wfItem?.currentStatus !== WFBlendedProgramStatus.REJECTED) && (batchData?.workFlow?.wfItem?.currentStatus !== WFBlendedProgramStatus.REMOVED) &&\n (batchData?.workFlow?.wfItem?.currentStatus !== WFBlendedProgramStatus.WITHDRAWN) &&\n (batchData?.workFlow?.wfItem?.currentStatus !== WFBlendedProgramStatus.APPROVED) && batchData?.content?.length\">\n <p class=\"margin-remove-bottom mat-body-1 padding-m bg-white\">\n {{batchData?.workFlow?.batch?.name}} - ({{batchData?.workFlow?.batch?.startDate | date: 'dd-MM-yyyy'}} -\n {{batchData?.workFlow?.batch?.endDate | date: 'dd-MM-yyyy' || 'present'}})\n </p>\n <ng-container>\n <button class=\"withdraw-batch\" (click)=\"!disableWithdrawnBtn && requestToWithdrawDialog()\"\n [disabled]=\"disableWithdrawnBtn\" [ngClass]=\"{ 'disable-btn': disableWithdrawnBtn }\">\n <ng-container> {{ 'apptocbanner.withDrawYourRequest' | translate }} </ng-container>\n </button>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"batchData && batchData?.enrolled && batchData?.content?.length\">\n <h3 class=\"margin-remove-bottom p-4 bg-white mat-body-1\" *ngFor=\"let batch of batchData.content\">\n {{batch?.name}} ({{batch?.startDate | date: 'dd-MM-yyyy' }} - {{batch?.endDate | date: 'dd-MM-yyyy' ||\n 'present'}})\n </h3>\n <ng-container [ngTemplateOutlet]=\"statusMsg\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"batchData && !batchData?.enrolled && !batchData?.content?.length\">\n <h3 class=\"margin-remove-bottom mat-body-2 ws-default-text\">\n No batches\n </h3>\n </ng-container>\n </div>\n <!-- <ng-container *ngIf=\"batchData && batchData?.content?.length && batchData?.content[0]?.batchAttributes?.batchLocationDetails\">\n <div class=\"flex items-center location-wrapper\">\n <div>\n <mat-icon class=\"location-icon\">\n location_on</mat-icon>\n </div>\n <div class=\"loc-details\">\n {{batchData?.content[0]?.batchAttributes?.batchLocationDetails}}\n </div>\n </div>\n </ng-container> -->\n </div>\n <ng-container *ngIf=\"batchData && !batchData?.enrolled && batchData?.content?.length\"\n [ngTemplateOutlet]=\"statusMsg\"></ng-container>\n</ng-container>\n<ng-container *ngIf=\"content?.courseCategory === nsContent.ECourseCategory.MODERATED_PROGRAM\">\n <div class=\"request-batch\">\n <div class=\"batch-div\">\n <ng-container *ngIf=\"content\" [ngTemplateOutlet]=\"batchDropdown\"></ng-container>\n </div>\n </div>\n</ng-container>\n<!-- <div class=\"header-synopsis fixed-width margin-top-l\" [ngClass]=\"{ 'header-synopsis-gradient': bannerUrl }\" *ngIf=\"content && batchControl?.value?.batchAttributes?.batchLocationDetails\">\n <ng-container *ngIf=\"content?.primaryCategory === primaryCategory.BLENDED_PROGRAM\">\n <h2>{{'apptocbanner.batchLocation' | translate}}</h2>\n <p>{{batchControl?.value?.batchAttributes?.batchLocationDetails}}</p>\n </ng-container>\n</div> -->\n\n<mat-menu #actionMenu=\"matMenu\">\n <div mat-menu-item>\n <ng-container *ngIf=\"content\" [ngTemplateOutlet]=\"actions\"></ng-container>\n </div>\n</mat-menu>\n\n<ng-template #actions>\n <a i18n-aria-label aria-label=\"Take Action\" mat-icon-button *ngIf=\"reviewButton\"\n [routerLink]=\"['/author/editor/' + content?.identifier]\">\n <mat-icon>publish</mat-icon>\n </a>\n <ws-widget-btn-content-download id=\"prevfordownload\" [forPreview]=\"forPreview\"\n [widgetData]=\"content | pipePartialContent : ['identifier', 'contentType', 'resourceType', 'mimeType', 'downloadUrl', 'isExternal', 'artifactUrl']\">\n </ws-widget-btn-content-download>\n <ws-widget-btn-content-share id=\"prevforshare\" [forPreview]=\"forPreview\" [widgetData]=\"content\">\n </ws-widget-btn-content-share>\n <ws-widget-btn-kb [forPreview]=\"forPreview\" id=\"prev\" [contentId]=\"content?.identifier\"\n [contentName]=\"contentReadData?.name\" [contentType]=\"content?.contentType\" [status]=\"content?.status\">\n </ws-widget-btn-kb>\n <ws-widget-btn-goals [forPreview]=\"forPreview\" id=\"goalsforprev\" *ngIf=\"isGoalsEnabled && btnGoalsConfig\"\n [widgetData]=\"btnGoalsConfig\">\n </ws-widget-btn-goals>\n <ws-widget-btn-playlist [forPreview]=\"forPreview\" id=\"playlistforprev\" *ngIf=\"btnPlaylistConfig\"\n [widgetData]=\"btnPlaylistConfig\">\n </ws-widget-btn-playlist>\n <ws-widget-btn-content-feedback-v2 [forPreview]=\"forPreview\" id=\"feedbackforprev\"\n [widgetData]=\"content | pipePartialContent: ['identifier', 'name']\">\n </ws-widget-btn-content-feedback-v2>\n</ng-template>\n<ng-template #authView>{{'apptocbanner.view' | translate}}</ng-template>\n<ng-template #statusMsg>\n <div class=\"status-container mt-2 mb-2\"\n *ngIf=\"content?.primaryCategory === primaryCategory.BLENDED_PROGRAM && batchData?.workFlow?.wfInitiated\">\n <div class=\"flex\" *ngIf=\"showMsg\">\n <ng-container *ngIf=\"showIcon\">\n <mat-icon class=\"mr-4\" [ngClass]=\"iconColor\" *ngIf=\"WFIcon === 'circle'\">check_circle</mat-icon>\n <mat-icon class=\"mr-4 ws-mat-red-text visibility-show\" style=\"transform: rotate(180deg);\"\n *ngIf=\"WFIcon === 'info'\">info</mat-icon>\n </ng-container>\n <div class=\"mat-body-1\">{{ getWFMsg }}</div>\n </div>\n </div>\n <div class=\"status-container mt-5\"\n *ngIf=\"content?.primaryCategory === primaryCategory.BLENDED_PROGRAM && showDisableMsg && !showMsg && findMessage.length > 0\">\n <div class=\"flex\">\n <ng-container>\n <mat-icon class=\"mr-3 ws-mat-red-text\" style=\"transform: rotate(180deg);\">info</mat-icon>\n </ng-container>\n <div class=\"mat-body-1\">\n <p class=\"margin-remove-bottom \">{{findMessage}}</p>\n </div>\n </div>\n </div>\n</ng-template>\n\n<div class=\"share-container\" *ngIf=\"enableShare\">\n <div *ngIf=\"showLoader\" class=\"text-center my-2 loader\">\n <mat-spinner class=\"inline-block\"></mat-spinner>\n </div>\n <div class=\"cursor-pointer close-share-dialog\"><mat-icon (click)=\"onClose()\" class=\"close-icon\">close</mat-icon></div>\n <div class=\"share-modal\">\n <div class=\"karmasahayogi-icon\"><img alt=\"karmasahayogi-icon\" src=\"/assets/icons/KarmaSahayogi.svg\"></div>\n <div class=\"content-div\">\n <div class=\"triangle-left hidden md:block\"></div>\n <div class=\"contnet\">\n <section class=\"w-full flex align-center justify-between \">\n <div class=\"mb-2\">\n <h2 class=\"mat-headline margin-remove-bottom ws-mat-black-text\">{{'contentSharing.header' | translate}}</h2>\n </div>\n </section>\n <form [formGroup]=\"shareForm\">\n <div class=\"mat-body-2\">\n <div class=\"md-5\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-chip-list #chipList aria-label=\"user selection\" appearance=\"outline\">\n <mat-chip *ngFor=\"let user of users\" [selectable]=\"selectable\" [removable]=\"removable\"\n (removed)=\"remove(user)\">\n {{user}}\n <mat-icon matChipRemove *ngIf=\"removable\">close</mat-icon>\n </mat-chip>\n <input tabindex=\"-1\" class=\"inputTextBox\"\n placeholder=\"{{users.length === 0 ? translateLabels('placehoderText', 'contentSharing') : ''}}\"\n #userInput formControlName=\"review\" [formControl]=\"userCtrl\" [matAutocomplete]=\"auto\"\n [matChipInputFor]=\"chipList\" [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"addOnBlur\" (matChipInputTokenEnd)=\"add($event)\">\n </mat-chip-list>\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected($event)\">\n <mat-option *ngFor=\"let user of filteredUsers\" [value]=\"user.name\">\n <div class=\"flex\">\n <div class=\"iconDiv\">\n <span class=\"iconText\">{{user.iconText.substring(0,2)}}</span>\n </div>\n <div>\n <div>{{user.name}}</div>\n <div class=\"emailText\">{{user.maskedEmail}}</div>\n </div>\n </div>\n </mat-option>\n </mat-autocomplete>\n <mat-hint align=\"start\" class=\"left-over-emails\">{{'contentSharing.note' | translate}}</mat-hint>\n <mat-hint align=\"end\" class=\"left-over-emails\">{{ users.length }} /{{maxEmailsLimit}}\n {{'contentSharing.remaingEmails' | translate}}</mat-hint>\n </mat-form-field>\n </div>\n <div class=\"flex mt-5\">\n <div class=\"flex flex-1 flex-end\">\n <span class=\"copy-link-btn cursor-pointer\" (click)=\"copyToClipboard()\">{{'contentSharing.copyLink' |\n translate}} <mat-icon>link</mat-icon></span>\n <button mat-stroked-button type=\"submit\"\n [ngClass]=\"{'disable-send-btn': users.length === 0 || users.length}\"\n class=\"text-white ws-mat-primary-background flex-auto-display send-btn\"\n [disabled]=\"userCtrl.value.length || users.length === 0 || users.length > maxEmailsLimit\"\n (click)=\"submitSharing()\">\n {{'contentSharing.send' | translate}} <mat-icon>send</mat-icon>\n </button>\n </div>\n </div>\n\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #batchDropdown>\n <form class=\"flex flex-col gap-4\">\n <ng-container *ngIf=\"batchData && !batchData?.enrolled\n && (!batchData.workFlow?.wfInitiated || (batchData.workFlow?.wfInitiated && batchData?.workFlow?.wfItem?.currentStatus === WFBlendedProgramStatus.REJECTED || batchData?.workFlow?.wfItem?.currentStatus === WFBlendedProgramStatus.WITHDRAWN || batchData?.workFlow?.wfItem?.currentStatus === WFBlendedProgramStatus.REMOVED))\n && batchData?.content?.length\">\n <mat-form-field appearance=\"outline\" class=\"w-full batch-form-field\">\n <mat-select #batchControlData [formControl]=\"batchControl\" required autoSelctFirstOption\n (selectionChange)=\"batchChange($event)\" panelClass=\"batch-dropdown\">\n <mat-option *ngFor=\"let batch of batchData.content; let i=index\" [value]=\"batch\" selected=\"index === 0\"\n [disabled]=\"!handleEnrollmentEndDate(batch) || disableEnrollBtn \">\n <div class=\"flex flex-row items-center gap-2\">\n <div class=\"flex-1 text-sm batch-timings\">\n {{ batch.name }} ( {{ batch.startDate | date: 'd MMM, yyyy' }} - {{ batch.endDate | date: 'd MMM, yyyy'\n || 'present' }} )\n </div>\n <div class=\"expired\" *ngIf=\"!handleEnrollmentEndDate(batch) || disableEnrollBtn\">\n Expired\n </div>\n </div>\n </mat-option>\n </mat-select>\n <mat-error *ngIf=\"batchControl.hasError('required')\">Please choose a batch to start course</mat-error>\n </mat-form-field>\n <div class=\"flex flex-wrap gap-3\">\n <ng-container *ngIf=\"!showRejected\">\n <div class=\"flex-1\">\n <div class=\"flex flex-col gap-1\" *ngIf=\"selectedBatch && selectedBatch.enrollmentEndDate \">\n <p class=\"text-xs leading-4 mb-0\">Last enroll date</p>\n <p class=\"font-bold mb-0\">{{ selectedBatch.enrollmentEndDate | date: 'd MMM, y' }}</p>\n </div>\n </div>\n <div class=\"flex flex-row justify-center items-center\">\n <button class=\"enroll-button\"\n [ngClass]=\"{ 'disable-btn': disableEnrollBtn || batchControl.hasError('required') || !handleEnrollmentEndDate(selectedBatch) }\"\n [disabled]=\"disableEnrollBtn || batchControl.hasError('required')|| !handleEnrollmentEndDate(selectedBatch)\"\n (click)=\"requestToEnrollDialog()\">\n <ng-container>\n Request to enroll\n </ng-container>\n </button>\n </div>\n </ng-container>\n <ng-container *ngIf=\"showRejected && content?.primaryCategory === primaryCategory.BLENDED_PROGRAM\">\n <h3 class=\"margin-remove-bottom mat-body-2 ws-default-text\">\n Your enrollment request is {{batchData?.workFlow?.wfItem?.currentStatus === WFBlendedProgramStatus.REMOVED\n ?'removed':'rejected'}}.</h3>\n </ng-container>\n </div>\n </ng-container>\n </form>\n</ng-template>", styles: [".button,.batch-div .enroll-button,.batch-div .withdraw-batch{border-radius:64px;letter-spacing:.25px;padding:12px 36px;font-weight:700;cursor:pointer;text-align:center}.batch-div{border-radius:8px;background-color:#fdead5;max-width:400px;margin:0 auto}.batch-div .request-block{padding:16px}.batch-div .batch-details{padding:16px;border:1px solid #FF9800;border-radius:8px;background-color:#fff;cursor:pointer}.batch-div .batch-enrolled{font-weight:700;color:#4caf50;font-size:.75rem}.batch-div .withdraw-batch{color:#000000de;border:1px solid rgba(0,0,0,.8705882353);background-color:#fff;width:100%;margin-top:16px}.batch-div .enroll-button{color:#fff;background-color:#ff9800;border:1px solid #FF9800}::ng-deep .batch-dropdown{margin-top:3rem!important}::ng-deep .batch-dropdown .mat-option{height:fit-content!important;padding:12px 16px!important}::ng-deep .batch-form-field{height:64px}::ng-deep .batch-form-field .mat-form-field-wrapper{margin:0;padding-bottom:0;height:inherit}::ng-deep .batch-form-field .mat-form-field-wrapper .mat-form-field-flex{height:inherit}::ng-deep .batch-form-field .mat-form-field-outline{border-radius:8px;height:inherit}::ng-deep .batch-form-field .mat-form-field-infix{display:flex;align-items:center;font-size:14px;border-top:.35rem solid transparent;padding:8px 0;height:44px}::ng-deep .batch-form-field .mat-form-field-infix .mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:translateY(0)!important}::ng-deep .batch-form-field .mat-form-field-subscript-wrapper{padding:8px 4px!important}::ng-deep .batch-form-field .mat-form-field-subscript-wrapper .mat-error{margin-top:6px}::ng-deep .batch-form-field .mat-select-value-text{white-space:pre-line!important;line-height:21px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.disable-btn{opacity:.5}.mb-0{margin-bottom:0!important}.batch-timings{text-transform:uppercase;line-height:20px}.header-synopsis{padding:32px 64px}@media only screen and (max-width: 599px){.header-synopsis{padding:32px 24px}}.app-icon{height:180px;width:280px;border-radius:4px}.banner-container{position:relative;background-repeat:no-repeat;background-position:center;background-size:cover}.header-synopsis-gradient{background:inherit}.category-text{margin-left:8px}.fixed-width{max-width:1230px;display:block;margin:0 auto;padding:0!important}@media only screen and (min-width: 600px) and (max-width: 959px){.fixed-width{padding:0 15px!important}}@media only screen and (max-width: 599px){.fixed-width{padding:0 15px!important}}.fluid-width{width:100%}.header-synopsis{box-sizing:border-box}.header-synopsis .apIcon{background-color:#fff;margin-right:16px;padding:4px 8px;border-radius:16px;display:flex;align-items:center;justify-content:flex-start}.header-synopsis .apIcon img{height:15px;object-fit:contain}.header-synopsis .apIcon span{opacity:1;color:#0009;font-size:12px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:16px}.header-synopsis .header-title{display:flex}.header-synopsis .header-title .text-truncate-title{max-width:100%;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}.header-synopsis .rating .mat-icon{width:16px;height:16px;display:inline-table;color:#f69953;font-size:18px}.header-synopsis .rating .rating-number{letter-spacing:0px;color:#f69953}.header-synopsis .rating .rating-count{letter-spacing:.36px;color:#f69953}.header-synopsis .rating .rating mat-icon{color:#f69953}.header-synopsis .header-meta{line-height:1.5}.header-synopsis .resumeButton{height:52px;min-width:160px;display:flex;align-items:center;justify-content:center;background:#34d6a4 0% 0% no-repeat padding-box;box-shadow:0 10px 30px #9993;color:#fff!important}.header-synopsis .resumeButton ::ng-deep .mat-button-wrapper{letter-spacing:0px;color:#fff;text-transform:capitalize}.header-synopsis .header-actions{display:flex}.header-synopsis .header-actions .custom-button{background:#0074b6 0% 0% no-repeat padding-box;border-radius:4px}.header-synopsis .header-actions.top{margin-top:0;margin-bottom:40px}.header-synopsis .header-actions .action-btns{margin-left:auto;order:2}.banner-overview-container{display:flex;justify-content:space-between}.banner-overview-container .overview-description{flex:1;min-width:1px;margin-right:24px;margin-bottom:12px;opacity:1;color:#000000de;font-size:16px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:24px}@media only screen and (max-width: 599px){.banner-overview-container .overview-description{margin-right:0}}.banner-overview-container .overview-intro{width:240px;height:135px;border:1px solid;box-sizing:border-box;background-repeat:no-repeat;background-position:center;background-size:cover;background-attachment:fixed;position:relative}.banner-overview-container .overview-intro .overview-intro-overlay{cursor:pointer;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;width:48px;height:48px;font-size:48px;background-color:#00000080;border-radius:50%;padding:8px}.banner-overview-container .overview-intro .overview-intro-overlay:active{background-color:#000000b3}@media only screen and (max-width: 599px){.banner-overview-container .overview-intro{display:none}}.analytics-meta{font-weight:500;margin-bottom:12px;line-height:1.2}.hidden-block-xs{display:block}@media only screen and (max-width: 599px){.hidden-block-xs{display:none}}.visible-block-xs{display:none}@media only screen and (max-width: 599px){.visible-block-xs{display:block}}.hidden-block-s{display:block}@media only screen and (min-width: 600px) and (max-width: 959px){.hidden-block-s{display:none}}.visible-block-s{display:none}@media only screen and (min-width: 600px) and (max-width: 959px){.visible-block-s{display:block}}.info-msg{color:#fff!important}.info-msg mat-icon{color:#fff!important}.tags{display:flex;flex:1;flex-direction:row;flex-wrap:wrap;position:relative;z-index:1}.tags .tag{display:inline-block;border-radius:100px 4px 4px 100px;padding:1px 12px;width:auto;justify-content:space-between;margin:0 8px 8px 0;background-color:#0000000a;border:1px solid rgba(0,0,0,.08);box-sizing:border-box}.batch-container{max-width:435px;border-radius:4px;width:40%}.custom-button{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px;max-width:auto!important;height:42px!important}.sticky-banner{z-index:999;position:sticky;top:128px}.sticky-banner .header-title h1{font:normal normal 300 24px/35px}.sticky-banner .overview-description{font:normal normal 300 14px/21px}.batch-wrapper{display:flex;justify-content:space-between;gap:25px;width:100%}.batch-timer{width:60%;background-color:#fff;align-items:center}.batch-timer .timer-title{opacity:1;color:#0006;font-size:14px;font-weight:700;font-style:normal;letter-spacing:.25px;text-align:left;line-height:20px}.batch-timer .time-wrapper div p.count{border-radius:4px;background-color:#000000de;opacity:1;color:#fff;font-size:36px;font-weight:600;font-style:normal;letter-spacing:-.2px;text-align:center;line-height:48px;width:67px;height:47px;margin-bottom:4px}.batch-timer .time-wrapper div p.time-label{opacity:1;color:#000000de;font-size:10px;font-weight:400;font-style:normal;letter-spacing:.5px;text-align:center;line-height:12px}.batch-timer .time-wrapper span{padding:8px;font-size:36px}.batch-timer .help{width:100%}.batch-timer .help .batch-duration-wrap{padding:0 24px}.batch-timer .help .batch-duration-wrap .duration-days{opacity:1;color:#000000de;font-family:Montserrat-SemiBold;font-size:36px;font-weight:600;font-style:normal;letter-spacing:-.2px;text-align:left;line-height:48px;padding-bottom:16px}.batch-info{opacity:1;color:#000000de;font-size:14px;font-weight:400;font-style:normal;letter-spacing:.25px;text-align:left;line-height:20px;padding:26px}.disable-send-btn[disabled]{background-color:#000!important}@media (max-width: 768px){.batch-wrapper{flex-wrap:wrap}.batch-timer{width:100%;flex-wrap:wrap;justify-content:center}.batch-container{width:100%}}.share-container{position:fixed;height:100vh;background:#131313a3;width:100vw;top:0;left:0;z-index:1000}.share-modal{display:flex;align-items:center;justify-content:center;height:inherit;width:inherit}.karmasahayogi-icon{position:absolute;bottom:-5px;left:calc(50% - 464px)}.triangle-left{transform:translateY(100%);position:absolute;bottom:28%;left:-24px;width:0;height:0;border-top:24px solid transparent;border-right:48px solid #ffffff;border-bottom:24px solid transparent}.contnet{background-color:#fff;width:612px;border-radius:12px;padding:16px}.content-div{position:relative}.copy-link-btn{display:flex;align-items:center;margin-right:20px;color:red;color:#0074b6!important;font-weight:600}.copy-link-btn:hover{background-color:none!important}.send-btn{border-radius:20px}.send-btn .mat-icon{margin-bottom:2.5px}::ng-deep .mat-chip-list-wrapper{height:100px;overflow:auto;display:block!important;scroll-behavior:smooth}.iconText{border-radius:50%;background-color:#000;color:#fff;width:30px;display:inline-block;text-align:center;height:30px;display:flex;align-items:center;justify-content:center}.iconDiv{margin-right:8px}.emailText{opacity:.6}button:disabled{pointer-events:none;opacity:.5;color:#000}::ng-deep .mat-autocomplete-panel{z-index:99999}::ng-deep .cdk-overlay-pane{z-index:9999!important}::ng-deep .close-icon{background-color:#000;color:#fff;border-radius:16px;padding:4px}::ng-deep .mat-chip-input{padding-bottom:8px!important}::ng-deep .theme-igot.day-mode .mat-chip.mat-standard-chip{color:#0074b6!important}::ng-deep .theme-igot.day-mode .mat-chip.mat-standard-chip mat-icon{color:#0074b6!important}::ng-deep .inputTextBox{width:95%!important;overflow-x:hidden}.close-share-dialog{position:absolute;right:30px;top:30px}.left-over-emails{font-weight:600}.loader{position:absolute;top:42%;left:45%;z-index:1000}@media (max-width: 768px){.content-div{width:100%}.contnet{width:unset;margin-bottom:18%}.left-over-emails{display:none}.karmasahayogi-icon{left:8%;bottom:20%}.share-modal{align-items:self-end}}@media only screen and (min-device-width: 820px) and (max-device-width: 1180px){.karmasahayogi-icon{left:calc(50% - 387px)}.content{width:500px}}@media only screen and (min-device-width: 768px) and (max-device-width: 819px){.triangle-left{display:none}}.location-wrapper{padding:16px;border-top:1px solid rgba(0,0,0,.16)}.location-wrapper .location-icon{color:#1b4ca1;height:32px;width:32px;font-size:32px;padding-right:8px}.location-wrapper .loc-details{opacity:1;color:#000000de;font-family:Lato-Bold;font-size:14px;font-weight:700;font-style:Bold;letter-spacing:.25px;text-align:left;line-height:20px}.visibility-show{overflow:visible!important}\n"] }]
|
|
1404
|
+
}], ctorParameters: function () { return [{ type: i1.DomSanitizer }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.MatLegacyDialog }, { type: i4.AppTocService }, { type: i5.WidgetContentService }, { type: i6.UtilityService }, { type: i7.MobileAppsService }, { type: i8.MatLegacySnackBar }, { type: i6.ConfigurationsService }, { type: i9.TitleTagService }, { type: i10.ActionService }, { type: i6.LoggerService }, { type: i11.DatePipe }, { type: i12.TranslateService }, { type: i13.UserAutocompleteService }, { type: i6.EventService }, { type: i6.MultilingualTranslationsService }, { type: i14.TimerService }, { type: undefined, decorators: [{
|
|
1405
|
+
type: Inject,
|
|
1406
|
+
args: ['environment']
|
|
1407
|
+
}] }]; }, propDecorators: { banners: [{
|
|
1408
|
+
type: Input
|
|
1409
|
+
}], content: [{
|
|
1410
|
+
type: Input
|
|
1411
|
+
}], resumeData: [{
|
|
1412
|
+
type: Input
|
|
1413
|
+
}], analytics: [{
|
|
1414
|
+
type: Input
|
|
1415
|
+
}], forPreview: [{
|
|
1416
|
+
type: Input
|
|
1417
|
+
}], batchData: [{
|
|
1418
|
+
type: Input
|
|
1419
|
+
}], userEnrollmentList: [{
|
|
1420
|
+
type: Input
|
|
1421
|
+
}], withdrawOrEnroll: [{
|
|
1422
|
+
type: Output
|
|
1423
|
+
}], contentReadData: [{
|
|
1424
|
+
type: Input
|
|
1425
|
+
}], clickToShare: [{
|
|
1426
|
+
type: Input
|
|
1427
|
+
}], programEnrollCall: [{
|
|
1428
|
+
type: Output
|
|
1429
|
+
}], userInput: [{
|
|
1430
|
+
type: ViewChild,
|
|
1431
|
+
args: ['userInput']
|
|
1432
|
+
}], matAutocomplete: [{
|
|
1433
|
+
type: ViewChild,
|
|
1434
|
+
args: ['auto']
|
|
1435
|
+
}] } });
|
|
1436
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXRvYy1iYW5uZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1iYW5uZXIvYXBwLXRvYy1iYW5uZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvYXBwLXRvYy1iYW5uZXIvYXBwLXRvYy1iYW5uZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBMEMsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFHNUosT0FBTyxFQUF5QixhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0NBQXNDLENBQUE7QUFFaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDeEUsT0FBTyxFQUFzRSxRQUFRLEVBQWlELE1BQU0sc0JBQXNCLENBQUE7QUFDbEssT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUVBQW1FLENBQUE7QUFDMUcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUE7QUFRNUUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sb0VBQW9FLENBQUE7QUFFcEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ2pGLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUN6QixPQUFPLEtBQU0sTUFBTSxNQUFNLFFBQVEsQ0FBQTtBQUdqQywyQkFBMkI7QUFDM0IsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFB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QUs7Z0JBQ0ksaUJBQWlCO3NCQUExQixNQUFNO2dCQStIaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNILGVBQWU7c0JBQWpDLFNBQVM7dUJBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuLy8gaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlLCBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50LCBNYXRDaGlwSW5wdXRFdmVudCwgTWF0RGlhbG9nLCBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJ1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlU3R5bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJ1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEV2ZW50LCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQubW9kZWwnXG5pbXBvcnQgeyBXaWRnZXRDb250ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC5zZXJ2aWNlJ1xuaW1wb3J0IHsgdmlld2VyUm91dGVHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvdmlld2VyLXJvdXRlLXV0aWwnXG5pbXBvcnQgeyBURmV0Y2hTdGF0dXMsIFV0aWxpdHlTZXJ2aWNlLCBDb25maWd1cmF0aW9uc1NlcnZpY2UsIExvZ2dlclNlcnZpY2UsIFdzRXZlbnRzLCBFdmVudFNlcnZpY2UsIE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12MidcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbmZpcm0tZGlhbG9nL2NvbmZpcm0tZGlhbG9nLmNvbXBvbmVudCdcbmltcG9ydCB7IEFjY2Vzc0NvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWNjZXNzLWNvbnRyb2wuc2VydmljZSdcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBOc0FuYWx5dGljcyB9IGZyb20gJy4uLy4uL21vZGVscy9hcHAtdG9jLWFuYWx5dGljcy5tb2RlbCdcbmltcG9ydCB7IE5zQXBwVG9jIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2FwcC10b2MubW9kZWwnXG5pbXBvcnQgeyBOc1BsYXlsaXN0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3BsYXlsaXN0Lm1vZGVsJ1xuaW1wb3J0IHsgTnNHb2FsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dvYWwubW9kZWwnXG5pbXBvcnQgeyBBcHBUb2NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLXRvYy5zZXJ2aWNlJ1xuaW1wb3J0IHsgVXNlckF1dG9jb21wbGV0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9fY29sbGVjdGlvbi9fY29tbW9uL3VzZXItYXV0b2NvbXBsZXRlL3VzZXItYXV0b2NvbXBsZXRlLnNlcnZpY2UnXG5pbXBvcnQgeyBBcHBUb2NEaWFsb2dJbnRyb1ZpZGVvQ29tcG9uZW50IH0gZnJvbSAnLi4vYXBwLXRvYy1kaWFsb2ctaW50cm8tdmlkZW8vYXBwLXRvYy1kaWFsb2ctaW50cm8tdmlkZW8uY29tcG9uZW50J1xuaW1wb3J0IHsgTW9iaWxlQXBwc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2JpbGUtYXBwcy5zZXJ2aWNlJ1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgKiBhcyAgbG9kYXNoIGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IFRpdGxlVGFnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RpdGxlLXRhZy5zZXJ2aWNlJ1xuaW1wb3J0IHsgQWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FjdGlvbi5zZXJ2aWNlJ1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCBpc1NhbWVPckJlZm9yZSBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JCZWZvcmUnXG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlcidcbmltcG9ydCB7IEVucm9sbFF1ZXN0aW9ubmFpcmVDb21wb25lbnQgfSBmcm9tICcuLi9lbnJvbGwtcXVlc3Rpb25uYWlyZS9lbnJvbGwtcXVlc3Rpb25uYWlyZS5jb21wb25lbnQnXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbmltcG9ydCB7IEVOVEVSIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJ1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgVGltZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGltZXIuc2VydmljZSdcbmltcG9ydCB7IE1hdExlZ2FjeUF1dG9jb21wbGV0ZSBhcyBNYXRBdXRvY29tcGxldGUsIE1hdExlZ2FjeUF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgYXMgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1hdXRvY29tcGxldGUnXG5pbXBvcnQgeyBNYXRMZWdhY3lDaGlwSW5wdXRFdmVudCBhcyBNYXRDaGlwSW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1jaGlwcydcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJ1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJ1xuaW1wb3J0IHsgRW5yb2xsUHJvZmlsZUZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9lbnJvbGwtcHJvZmlsZS1mb3JtL2Vucm9sbC1wcm9maWxlLWZvcm0uY29tcG9uZW50J1xuXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JCZWZvcmUpXG5kYXlqcy5leHRlbmQoaXNTYW1lT3JBZnRlcilcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd3MtYXBwLXRvYy1iYW5uZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYXBwLXRvYy1iYW5uZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hcHAtdG9jLWJhbm5lci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtBY2Nlc3NDb250cm9sU2VydmljZSwgRGF0ZVBpcGVdLFxufSlcblxuZXhwb3J0IGNsYXNzIEFwcFRvY0Jhbm5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBzaG93ID0gZmFsc2VcbiAgQElucHV0KCkgYmFubmVyczogTnNBcHBUb2MuSVRvY0Jhbm5lciB8IG51bGwgPSBudWxsXG4gIEBJbnB1dCgpIGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCB8IG51bGwgPSBudWxsXG4gIEBJbnB1dCgpIHJlc3VtZURhdGE6IE5zQ29udGVudC5JQ29udGludWVMZWFybmluZ0RhdGEgfCBudWxsID0gbnVsbFxuICBASW5wdXQoKSBhbmFseXRpY3M6IE5zQW5hbHl0aWNzLklBbmFseXRpY3MgfCBudWxsID0gbnVsbFxuICBASW5wdXQoKSBmb3JQcmV2aWV3ID0gZmFsc2VcbiAgQElucHV0KCkgYmF0Y2hEYXRhOiAvKipOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlICovIGFueSB8IG51bGwgPSBudWxsXG4gIEBJbnB1dCgpIHVzZXJFbnJvbGxtZW50TGlzdDogTnNDb250ZW50LklDb3Vyc2VbXSB8IG51bGwgPSBudWxsXG4gIEBPdXRwdXQoKSB3aXRoZHJhd09yRW5yb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KClcbiAgQElucHV0KCkgY29udGVudFJlYWREYXRhOiBOc0NvbnRlbnQuSUNvbnRlbnQgfCBudWxsID0gbnVsbFxuICBASW5wdXQoKSBjbGlja1RvU2hhcmUgPSBmYWxzZVxuICBAT3V0cHV0KCkgcHJvZ3JhbUVucm9sbENhbGwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICB0aW1lcjogYW55XG4gIG5zQ29udGVudCA9IE5zQ29udGVudFxuICBiYXRjaENvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICBwcmltYXJ5Q2F0ZWdvcnkgPSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeVxuICBXRkJsZW5kZWRQcm9ncmFtU3RhdHVzID0gTnNDb250ZW50LldGQmxlbmRlZFByb2dyYW1TdGF0dXNcbiAgV0ZTVEFUVVNfTVNHX01BUFBJTkcgPSBOc0NvbnRlbnQuV0ZTVEFUVVNfTVNHX01BUFBJTkdcbiAgY29udGVudFByb2dyZXNzID0gMFxuICBiYW5uZXJVcmw6IFNhZmVTdHlsZSB8IG51bGwgPSBudWxsXG4gIHJvdXRlUGF0aCA9ICdvdmVydmlldydcbiAgdmFsaWRQYXRocyA9IG5ldyBTZXQoWydvdmVydmlldycsICdjb250ZW50cycsICdhbmFseXRpY3MnXSlcbiAgcm91dGVyUGFyYW1TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXG4gIHJvdXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxuICBiYXRjaFdGRGF0YVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGxcbiAgZmlyc3RSZXNvdXJjZUxpbms6IHsgdXJsOiBzdHJpbmc7IHF1ZXJ5UGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IH0gfCBudWxsID0gbnVsbFxuICByZXN1bWVEYXRhTGluazogeyB1cmw6IHN0cmluZzsgcXVlcnlQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfSB8IG51bGwgPSBudWxsXG4gIGlzQXNzZXNzVmlzaWJsZSA9IGZhbHNlXG4gIGlzUHJhY3RpY2VWaXNpYmxlID0gZmFsc2VcbiAgZWRpdEJ1dHRvbiA9IGZhbHNlXG4gIHJldmlld0J1dHRvbiA9IGZhbHNlXG4gIGFuYWx5dGljc0RhdGFDbGllbnQ6IGFueSA9IG51bGxcbiAgYnRuUGxheWxpc3RDb25maWc6IE5zUGxheWxpc3QuSUJ0blBsYXlsaXN0IHwgbnVsbCA9IG51bGxcbiAgYnRuR29hbHNDb25maWc6IE5zR29hbC5JQnRuR29hbCB8IG51bGwgPSBudWxsXG4gIGlzUmVnaXN0cmF0aW9uU3VwcG9ydGVkID0gZmFsc2VcbiAgc2hvd1JlamVjdGVkID0gZmFsc2VcbiAgY2hlY2tSZWdpc3RyYXRpb25Tb3VyY2VzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAgICdTa2lsbFNvZnQgRGlnaXRhbGl6YXRpb24nLFxuICAgICdTa2lsbFNvZnQgTGVhZGVyc2hpcCcsXG4gICAgJ1BsdXJhbHNpZ2h0JyxcbiAgXSlcbiAgaXNVc2VyUmVnaXN0ZXJlZCA9IGZhbHNlXG4gIGFjdGlvbkJ0blN0YXR1cyA9ICd3YWl0J1xuICBzaG93SW50cmFuZXRNZXNzYWdlID0gZmFsc2VcbiAgc2hvd1Rha2VBc3Nlc3NtZW50OiBOc0FwcFRvYy5JUG9zdEFzc2Vzc21lbnQgfCBudWxsID0gbnVsbFxuICBleHRlcm5hbENvbnRlbnRGZXRjaFN0YXR1czogVEZldGNoU3RhdHVzID0gJ2RvbmUnXG4gIHJlZ2lzdGVyRm9yRXh0ZXJuYWwgPSBmYWxzZVxuICBpc0dvYWxzRW5hYmxlZCA9IGZhbHNlXG4gIGNvbnRleHRJZD86IHN0cmluZ1xuICBjb250ZXh0UGF0aD86IHN0cmluZ1xuICB0b2NDb25maWc6IGFueSA9IG51bGxcbiAgZGVmYXVsdFNMb2dvID0gJydcbiAgZGlzYWJsZUVucm9sbEJ0biA9IGZhbHNlXG4gIHNlbGVjdGVkQmF0Y2ghOiBhbnlcbiAgaGVscEVtYWlsID0gJydcbiAgc2VsZWN0ZWRCYXRjaFN1YnNjcmlwdGlvbjogYW55XG4gIHNlbGVjdGVkQmF0Y2hEYXRhOiBhbnlcbiAgYmF0Y2hDb250cm9sVW5zdWJzY3JpYmU6IGFueVxuICBkYXRlOiBhbnlcbiAgbm93OiBhbnlcbiAgdGFyZ2V0RGF0ZTogYW55XG4gIHRhcmdldFRpbWU6IGFueVxuICBkaWZmZXJlbmNlID0gMFxuICBkYXlzOiBhbnlcbiAgaG91cnM6IGFueVxuICBtaW51dGVzOiBhbnlcbiAgc2Vjb25kczogYW55XG4gIHNlcnZlckRhdGVTdWJzY3JpcHRpb246IGFueVxuICBzZXJ2ZXJEYXRlOiBhbnkgPSBuZXcgRGF0ZSgpXG4gIGNhblNoYXJlID0gZmFsc2VcbiAgZW5hYmxlU2hhcmUgPSBmYWxzZVxuICByb290T3JnSWQ6IGFueVxuICB0aW1lckludGVydmFsQ2xlYXI6IGFueVxuXG4gIC8vIHNoYXJlIGNvbnRlbnRcbiAgc2hhcmVGb3JtOiBVbnR5cGVkRm9ybUdyb3VwIHwgdW5kZWZpbmVkXG4gIHNlbGVjdGFibGUgPSB0cnVlXG4gIHJlbW92YWJsZSA9IHRydWVcbiAgYWRkT25CbHVyID0gdHJ1ZVxuICBzZXBhcmF0b3JLZXlzQ29kZXM6IG51bWJlcltdID0gW0VOVEVSXVxuICB1c2VyQ3RybCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycpXG4gIGZpbHRlcmVkVXNlcnM6IGFueVtdIHwgdW5kZWZpbmVkXG4gIHVzZXJzOiBhbnlbXSA9IFtdXG4gIGFsbFVzZXJzOiBhbnlbXSA9IFtdXG4gIGFwaVJlc3BvbnNlOiBhbnlcbiAgY291cnNlRGV0YWlsczogYW55XG4gIHVzZXJQcm9maWxlOiBhbnlcbiAgdXNlclByb2ZpbGVPYmplY3Q6IGFueVxuICBkb3B0RWxpZ2libGVTZXJ2aWNlc0xpc3Q6IHN0cmluZ1tdID0gW11cbiAgbWF4RW1haWxzTGltaXQgPSAzMFxuICBzaG93TG9hZGVyID0gZmFsc2VcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSB0b2NTdmM6IEFwcFRvY1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250ZW50U3ZjOiBXaWRnZXRDb250ZW50U2VydmljZSxcbiAgICBwcml2YXRlIHV0aWxpdHlTdmM6IFV0aWxpdHlTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9iaWxlQXBwc1N2YzogTW9iaWxlQXBwc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgcHVibGljIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFnU3ZjOiBUaXRsZVRhZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25TVkM6IEFjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyQXV0b0NvbXBsZXRlOiBVc2VyQXV0b2NvbXBsZXRlU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50czogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ3RyYW5zbGF0aW9uczogTXVsdGlsaW5ndWFsVHJhbnNsYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHRpbWVyU2VydmljZTogVGltZXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgcHJpdmF0ZSBlbnZpcm9ubWVudDogYW55LFxuICApIHtcbiAgICB0aGlzLmxhbmd0cmFuc2xhdGlvbnMubGFuZ3VhZ2VTZWxlY3RlZE9ic2VydmFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZUxhbmd1YWdlJykpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcoJ2VuJylcbiAgICAgICAgY29uc3QgbGFuZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSFcbiAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmcpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuaGVscEVtYWlsID0gdGhpcy5lbnZpcm9ubWVudC5oZWxwRW1haWxcbiAgICB0aGlzLnNoYXJlRm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcbiAgICAgIHJldmlldzogbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsLCBbVmFsaWRhdG9ycy5taW5MZW5ndGgoMSksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwMDApXSksXG4gICAgfSlcblxuICAgIHRoaXMudXNlckN0cmwudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZFVzZXJzID0gW11cbiAgICAgICAgLy8gdGhpcy5hbGxVc2VycyA9IFtdXG4gICAgICAgIHRoaXMuZ2V0VXNlcnNUb1NoYXJlKHJlcylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgQFZpZXdDaGlsZCgndXNlcklucHV0JykgdXNlcklucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+IHwgdW5kZWZpbmVkXG4gIEBWaWV3Q2hpbGQoJ2F1dG8nKSBtYXRBdXRvY29tcGxldGU6IE1hdEF1dG9jb21wbGV0ZSB8IHVuZGVmaW5lZFxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIHRoaXMuc2VydmVyRGF0ZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgdGhpcy5zZXJ2ZXJEYXRlU3Vic2NyaXB0aW9uID0gdGhpcy50b2NTdmMuc2VydmVyRGF0ZS5zdWJzY3JpYmUoc2VydmVyRGF0ZSA9PiB7XG4gICAgICB0aGlzLnNlcnZlckRhdGUgPSBzZXJ2ZXJEYXRlXG4gICAgICB0aGlzLmNsZWFyQW5kQ2FsbFRpbWVyKClcbiAgICB9KVxuICAgIHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICB0aGlzLnRvY0NvbmZpZyA9IGRhdGEucGFnZURhdGEuZGF0YVxuICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmlzUG9zdEFzc2Vzc21lbnQpIHtcbiAgICAgICAgdGhpcy50b2NTdmMuZmV0Y2hQb3N0QXNzZXNzbWVudFN0YXR1cyh0aGlzLmNvbnRlbnQuaWRlbnRpZmllcikuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgY29uc3QgYXNzZXNzbWVudERhdGEgPSByZXMucmVzdWx0XG4gICAgICAgICAgZm9yIChjb25zdCBvIG9mIGFzc2Vzc21lbnREYXRhKSB7XG4gICAgICAgICAgICBpZiAoby5jb250ZW50SWQgPT09ICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LmlkZW50aWZpZXIpKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2hvd1Rha2VBc3Nlc3NtZW50ID0gb1xuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQuaWRlbnRpZmllcikge1xuICAgICAgICAvLyB0aGlzLnRvY1N2Yy5mZXRjaEdldENvbnRlbnREYXRhKHRoaXMuY29udGVudC5pZGVudGlmaWVyKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgLy8gICB0aGlzLmNvbnRlbnRSZWFkRGF0YSA9IHJlcy5yZXN1bHQuY29udGVudFxuICAgICAgICAvLyB9KVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25zdCBpbnN0YW5jZUNvbmZpZyA9IHRoaXMuY29uZmlnU3ZjLmluc3RhbmNlQ29uZmlnXG4gICAgaWYgKGluc3RhbmNlQ29uZmlnICYmIGluc3RhbmNlQ29uZmlnLmxvZ29zICYmIGluc3RhbmNlQ29uZmlnLmxvZ29zLmRlZmF1bHRTb3VyY2VMb2dvKSB7XG4gICAgICB0aGlzLmRlZmF1bHRTTG9nbyA9IGluc3RhbmNlQ29uZmlnLmxvZ29zLmRlZmF1bHRTb3VyY2VMb2dvXG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5yZXN0cmljdGVkRmVhdHVyZXMpIHtcbiAgICAgIHRoaXMuaXNHb2Fsc0VuYWJsZWQgPSAhdGhpcy5jb25maWdTdmMucmVzdHJpY3RlZEZlYXR1cmVzLmhhcygnZ29hbHMnKVxuICAgIH1cblxuICAgIHRoaXMucm91dGVTdWJzY3JpcHRpb24gPSB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAuc3Vic2NyaWJlKHFQYXJhbXNNYXAgPT4ge1xuICAgICAgY29uc3QgY29udGV4dElkID0gcVBhcmFtc01hcC5nZXQoJ2NvbnRleHRJZCcpXG4gICAgICBjb25zdCBjb250ZXh0UGF0aCA9IHFQYXJhbXNNYXAuZ2V0KCdjb250ZXh0UGF0aCcpXG4gICAgICBpZiAoY29udGV4dElkICYmIGNvbnRleHRQYXRoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dElkID0gY29udGV4dElkXG4gICAgICAgIHRoaXMuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aFxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmJhdGNoV0ZEYXRhU3Vic2NyaXB0aW9uID0gdGhpcy50b2NTdmMuc2V0V0ZEYXRhU3ViamVjdC5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0QmF0Y2hDb250cm9sKClcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3Igb24gYmF0Y2hXRkRhdGFTdWJzY3JpcHRpb24nKVxuICAgICAgfSxcbiAgICApXG5cbiAgICBpZiAodGhpcy5jb25maWdTdmMucmVzdHJpY3RlZEZlYXR1cmVzKSB7XG4gICAgICB0aGlzLmlzUmVnaXN0cmF0aW9uU3VwcG9ydGVkID0gdGhpcy5jb25maWdTdmMucmVzdHJpY3RlZEZlYXR1cmVzLmhhcygncmVnaXN0cmF0aW9uRXh0ZXJuYWwnKVxuICAgICAgdGhpcy5zaG93SW50cmFuZXRNZXNzYWdlID0gIXRoaXMuY29uZmlnU3ZjLnJlc3RyaWN0ZWRGZWF0dXJlcy5oYXMoXG4gICAgICAgICdzaG93SW50cmFuZXRNZXNzYWdlRGVza3RvcCcsXG4gICAgICApXG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZEJhdGNoU3Vic2NyaXB0aW9uID0gdGhpcy50b2NTdmMuZ2V0U2VsZWN0ZWRCYXRjaC5zdWJzY3JpYmUoYmF0Y2hEYXRhID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRCYXRjaERhdGEgPSBiYXRjaERhdGFcbiAgICB9KVxuXG4gICAgdGhpcy5jaGVja1JlZ2lzdHJhdGlvblN0YXR1cygpXG4gICAgdGhpcy5yb3V0ZXJQYXJhbVN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKHJvdXRlckV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgaWYgKHJvdXRlckV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICB0aGlzLmFzc2lnblBhdGhBbmRVcGRhdGVCYW5uZXIocm91dGVyRXZlbnQudXJsKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAodGhpcy5jb25maWdTdmMucmVzdHJpY3RlZEZlYXR1cmVzKSB7XG4gICAgICB0aGlzLmlzR29hbHNFbmFibGVkID0gIXRoaXMuY29uZmlnU3ZjLnJlc3RyaWN0ZWRGZWF0dXJlcy5oYXMoJ2dvYWxzJylcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICB0aGlzLmJ0blBsYXlsaXN0Q29uZmlnID0ge1xuICAgICAgICBjb250ZW50SWQ6IHRoaXMuY29udGVudC5pZGVudGlmaWVyLFxuICAgICAgICBjb250ZW50TmFtZTogdGhpcy5jb250ZW50Lm5hbWUsXG4gICAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLmNvbnRlbnQuY29udGVudFR5cGUsXG4gICAgICAgIHByaW1hcnlDYXRlZ29yeTogdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSxcbiAgICAgICAgbW9kZTogJ2RpYWxvZycsXG4gICAgICB9XG4gICAgICB0aGlzLmJ0bkdvYWxzQ29uZmlnID0ge1xuICAgICAgICBjb250ZW50SWQ6IHRoaXMuY29udGVudC5pZGVudGlmaWVyLFxuICAgICAgICBjb250ZW50TmFtZTogdGhpcy5jb250ZW50Lm5hbWUsXG4gICAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLmNvbnRlbnQuY29udGVudFR5cGUsXG4gICAgICAgIHByaW1hcnlDYXRlZ29yeTogdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250ZW50ICYmICFbXG4gICAgICBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5Lk1PREVSQVRFRF9DT1VSU0UsXG4gICAgICBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5Lk1PREVSQVRFRF9BU1NFU1NFTUVOVCxcbiAgICAgIE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuTU9ERVJBVEVEX1BST0dSQU0sXG4gICAgICBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LklOVklURV9PTkxZX1BST0dSQU0sXG4gICAgXS5pbmNsdWRlcyh0aGlzLmNvbnRlbnQuY291cnNlQ2F0ZWdvcnkpKSB7XG4gICAgICB0aGlzLmNhblNoYXJlID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICAgIHRoaXMucm9vdE9yZ0lkID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUucm9vdE9yZ0lkXG4gICAgICAgIHRoaXMudXNlclByb2ZpbGUgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZVxuICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0ID0gdGhpcy5jb25maWdTdmMudW5NYXBwZWRVc2VyXG4gICAgICAgIC8vIHRoaXMuZ2V0VXNlcnNUb1NoYXJlKCcnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFVzZXJzVG9TaGFyZShxdWVyeVN0cjogc3RyaW5nKSB7XG4gICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZVxuICAgIHRoaXMudXNlckF1dG9Db21wbGV0ZS5zZWFyY2hVc2VyKHF1ZXJ5U3RyLCB0aGlzLnJvb3RPcmdJZCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgaWYgKGRhdGEucmVzdWx0ICYmIGRhdGEucmVzdWx0LnJlc3BvbnNlKSB7XG4gICAgICAgIHRoaXMuYXBpUmVzcG9uc2UgPSBkYXRhLnJlc3VsdC5yZXNwb25zZS5jb250ZW50XG4gICAgICAgIGxldCBuYW1lID0gJydcbiAgICAgICAgbGV0IHBFbWFpbCA9ICcnXG4gICAgICAgIHRoaXMuYXBpUmVzcG9uc2UuZm9yRWFjaCgoYXBpRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgYXBpRGF0YS5maXJzdE5hbWUuc3BsaXQoJyAnKS5mb3JFYWNoKChkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIG5hbWUgPSBuYW1lICsgZC5zdWJzdHIoMCwgMSkudG9VcHBlckNhc2UoKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKGFwaURhdGEucHJvZmlsZURldGFpbHMgJiYgYXBpRGF0YS5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMpIHtcbiAgICAgICAgICAgIHBFbWFpbCA9IGFwaURhdGEucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbFxuICAgICAgICAgICAgaWYgKCF0aGlzLmFsbFVzZXJzLmZpbHRlcih1c2VyID0+IHVzZXIuZW1haWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhwRW1haWwudG9Mb3dlckNhc2UoKSkpLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLmFsbFVzZXJzLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbWFza2VkRW1haWw6IGFwaURhdGEubWFza2VkRW1haWwsXG4gICAgICAgICAgICAgICAgICBpZDogYXBpRGF0YS5pZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgICAgbmFtZTogYXBpRGF0YS5maXJzdE5hbWUsXG4gICAgICAgICAgICAgICAgICBpY29uVGV4dDogbmFtZSxcbiAgICAgICAgICAgICAgICAgIGVtYWlsOiBwRW1haWwsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWxsVXNlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRVc2VycyA9IFtdXG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlcmVkVXNlcnMgPSB0aGlzLmZpbHRlclNoYXJlZFVzZXJzKHF1ZXJ5U3RyKVxuICAgIH0pXG4gIH1cblxuICBnZXQgc2hvd0ludHJhbmV0TXNnKCkge1xuICAgIGlmICh0aGlzLmlzTW9iaWxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaG93SW50cmFuZXRNZXNzYWdlXG4gIH1cblxuICBnZXQgZ2V0QmF0Y2hEdXJhdGlvbigpIHtcbiAgICBjb25zdCBzdGFydERhdGUgPSBkYXlqcyhkYXlqcyh0aGlzLmJhdGNoQ29udHJvbC52YWx1ZS5zdGFydERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpKVxuICAgIGNvbnN0IGVuZERhdGUgPSBkYXlqcyhkYXlqcyh0aGlzLmJhdGNoQ29udHJvbC52YWx1ZS5lbmREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSlcbiAgICAvLyBhZGRpbmcgMSB0byBpbmNsdWRlIHRoZSBzdGFydCBkYXRlXG4gICAgcmV0dXJuIChlbmREYXRlLmRpZmYoc3RhcnREYXRlLCAnZGF5cycpICsgMSlcbiAgfVxuXG4gIGdldCBzaG93U3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9jU3ZjLnNob3dTdGFydEJ1dHRvbih0aGlzLmNvbnRlbnQpXG4gIH1cblxuICBnZXQgaXNQb3N0QXNzZXNzbWVudCgpOiBib29sZWFuIHtcbiAgICBpZiAoISh0aGlzLnRvY0NvbmZpZyAmJiB0aGlzLnRvY0NvbmZpZy5wb3N0QXNzZXNzbWVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UgJiZcbiAgICAgICAgdGhpcy5jb250ZW50LmxlYXJuaW5nTW9kZSA9PT0gJ0luc3RydWN0b3ItTGVkJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51dGlsaXR5U3ZjLmlzTW9iaWxlXG4gIH1cblxuICBnZXQgc2hvd1N1YnRpdGxlT25CYW5uZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9jU3ZjLnN1YnRpdGxlT25CYW5uZXJzXG4gIH1cblxuICBnZXREb3B0RWxpZ2libGVTZXJ2aWNlc0xpc3QoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRCYXRjaCAmJiB0aGlzLnNlbGVjdGVkQmF0Y2guYmF0Y2hBdHRyaWJ1dGVzIFxuICAgICAgJiYgdGhpcy5zZWxlY3RlZEJhdGNoLmJhdGNoQXR0cmlidXRlcy5jYWRyZUxpc3RcbiAgICAgICYmIHRoaXMuc2VsZWN0ZWRCYXRjaC5iYXRjaEF0dHJpYnV0ZXMuY2FkcmVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5kb3B0RWxpZ2libGVTZXJ2aWNlc0xpc3QgPSB0aGlzLnNlbGVjdGVkQmF0Y2guYmF0Y2hBdHRyaWJ1dGVzLmNhZHJlTGlzdFxuICAgICAgfSBlbHNle1xuICAgICAgdGhpcy5kb3B0RWxpZ2libGVTZXJ2aWNlc0xpc3QgPSBbXVxuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKF9jaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5hc3NpZ25QYXRoQW5kVXBkYXRlQmFubmVyKHRoaXMucm91dGVyLnVybClcbiAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICB0aGlzLmZldGNoRXh0ZXJuYWxDb250ZW50QWNjZXNzKClcbiAgICAgIHRoaXMubW9kaWZ5U2Vuc2libGVDb250ZW50UmF0aW5nKClcbiAgICAgIHRoaXMuYXNzaWduUGF0aEFuZFVwZGF0ZUJhbm5lcih0aGlzLnJvdXRlci51cmwpXG4gICAgICB0aGlzLmdldExlYXJuaW5nVXJscygpXG4gICAgICB0aGlzLnNldEJhdGNoQ29udHJvbCgpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdW1lRGF0YSAmJiB0aGlzLnJlc3VtZURhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGxldCByZXN1bWVEYXRhVjI6IGFueVxuICAgICAgaWYgKHRoaXMuY29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwKSB7XG4gICAgICAgIHJlc3VtZURhdGFWMiA9IHRoaXMuZ2V0UmVzdW1lRGF0YUZyb21MaXN0KCdzdGFydCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bWVEYXRhVjIgPSB0aGlzLmdldFJlc3VtZURhdGFGcm9tTGlzdCgpXG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzdW1lRGF0YVYyLm1pbWVUeXBlKSB7XG4gICAgICAgIHJlc3VtZURhdGFWMi5taW1lVHlwZSA9IHRoaXMuZ2V0TWltZVR5cGUodGhpcy5jb250ZW50LCByZXN1bWVEYXRhVjIuaWRlbnRpZmllcilcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXN1bWVEYXRhTGluayA9IHZpZXdlclJvdXRlR2VuZXJhdG9yKFxuICAgICAgICByZXN1bWVEYXRhVjIuaWRlbnRpZmllcixcbiAgICAgICAgcmVzdW1lRGF0YVYyLm1pbWVUeXBlLFxuICAgICAgICB0aGlzLmlzUmVzb3VyY2UgPyB1bmRlZmluZWQgOiB0aGlzLmNvbnRlbnQuaWRlbnRpZmllcixcbiAgICAgICAgdGhpcy5pc1Jlc291cmNlID8gdW5kZWZpbmVkIDogdGhpcy5jb250ZW50LmNvbnRlbnRUeXBlLFxuICAgICAgICB0aGlzLmZvclByZXZpZXcsXG4gICAgICAgICdMZWFybmluZyBSZXNvdXJjZScsXG4gICAgICAgIHRoaXMuZ2V0QmF0Y2hJZCgpLFxuICAgICAgICB0aGlzLmNvbnRlbnQubmFtZSxcbiAgICAgIClcbiAgICAgIHRoaXMuYWN0aW9uU1ZDLnNldFVwZGF0ZUNvbXBHcm91cE8gPSB0aGlzLnJlc3VtZURhdGFMaW5rXG4gICAgfVxuXG4gICAgdGhpcy5iYXRjaENvbnRyb2xVbnN1YnNjcmliZSA9IHRoaXMuYmF0Y2hDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGJhdGNoOiBOc0NvbnRlbnQuSUJhdGNoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkQmF0Y2ggPSBiYXRjaFxuICAgICAgaWYgKGJhdGNoKSB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrUmVqZWN0ZWQoYmF0Y2gpKSB7XG4gICAgICAgICAgdGhpcy5zaG93UmVqZWN0ZWQgPSB0cnVlXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2hvd1JlamVjdGVkID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdFRvV2l0aGRyYXdEaWFsb2coKSB7XG4gICAgY29uc3QgY29uZmlybURpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc0MzRweCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHRpdGxlOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHdpdGhkcmF3IHlvdXIgcmVxdWVzdD8nLFxuICAgICAgICBtZXNzYWdlOiAnWW91IHdpbGwgbWlzcyB0aGUgbGVhcm5pbmcgb3Bwb3J0dW5pdHkgaWYgeW91IHdpdGhkcmF3IHlvdXIgZW5yb2xtZW50LicsXG4gICAgICAgIGFjY2VwdEJ1dHRvbjogJ1dpdGhkcmF3JyxcbiAgICAgICAgY2FuY2VsQnV0dG9uOiAnQ2FuY2VsJyxcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ2FuaW1hdGVfX2FuaW1hdGVkJywgJ2FuaW1hdGVfX3NsaWRlSW5MZWZ0J10sXG4gICAgfSlcblxuICAgIGNvbmZpcm1EaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICB0aGlzLnJlcXVlc3RBbmRXaXRoRHJhd0Vucm9sbCh0aGlzLmJhdGNoRGF0YS53b3JrRmxvdy53Zkl0ZW0uY3VycmVudFN0YXR1cywgdGhpcy5XRkJsZW5kZWRQcm9ncmFtU3RhdHVzLldJVEhEUkFXLCB0aGlzLmJhdGNoRGF0YS53b3JrRmxvdy53Zkl0ZW0ud2ZJZClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgb3BlbkNvbmZvcm1hdGlvbkRpYWxvZyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNjAwcHgnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICBhY2NlcHRCdXR0b246ICdPaycsXG4gICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgb3BlblJlcXVlc3RUb0Vucm9sbChiYXRjaERhdGE6IGFueSkge1xuICAgIGNvbnN0IGNvbmZpcm1EaWFsb2cgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1EaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNDM0cHgnLFxuICAgICAgZGF0YToge1xuICAgICAgICB0aXRsZTogJ1lvdeKAmXJlIG9uZSBzdGVwIGF3YXkgZnJvbSBlbnJvbGxpbmchJyxcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICBtZXNzYWdlOiBgVGhpcyBiYXRjaCBpcyBhY3RpdmUgZnJvbSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGJhdGNoRGF0YS5zdGFydERhdGUsICdkZC1NTS15eXl5Jyl9ICAtICAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGJhdGNoRGF0YS5lbmREYXRlLCAnZGQtTU0teXl5eScpfSwga2luZGx5IGdvIHRocm91Z2ggdGhlIGNvbnRlbnQgYW5kIGJlIHByZXBhcmVkLmAsXG4gICAgICAgIGFjY2VwdEJ1dHRvbjogJ0NvbmZpcm0nLFxuICAgICAgICBjYW5jZWxCdXR0b246ICdDYW5jZWwnLFxuICAgICAgfSxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIHBhbmVsQ2xhc3M6IFsnYW5pbWF0ZV9fYW5pbWF0ZWQnLCAnYW5pbWF0ZV9fc2xpZGVJbkxlZnQnXSxcbiAgICB9KVxuICAgIGNvbmZpcm1EaWFsb2cuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0QW5kV2l0aERyYXdFbnJvbGwoJ0lOSVRJQVRFJywgJ0lOSVRJQVRFJylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgY2FsbEJQU3VyZXZ5KGJhdGNoRGF0YTogYW55KSB7XG4gICAgaWYgKHRoaXMuY29udGVudCkge1xuICAgICAgY29uc3Qgc0lEID0gdGhpcy5jb250ZW50LndmU3VydmV5TGluay5zcGxpdCgnc3VydmV5cy8nKVxuICAgICAgY29uc3Qgc3VydmV5SWQgPSBzSURbMV1cbiAgICAgIGNvbnN0IGNvdXJzZUlkID0gdGhpcy5jb250ZW50LmlkZW50aWZpZXJcbiAgICAgIGNvbnN0IGNvdXJzZU5hbWUgPSB0aGlzLmNvbnRlbnQubmFtZVxuICAgICAgY29uc3Qgd2ZDbGllbnRWZXJzaW9uID0gXy5nZXQodGhpcy5jb250ZW50LCAnd2ZDbGllbnRWZXJzaW9uJywgJzAnKVxuICAgICAgY29uc3QgYXBpRGF0YSA9IHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci10ZW1wbGF0ZVxuICAgICAgICBnZXRBUEk6ICcvYXBpcy9wcm94aWVzL3Y4L2Zvcm1zL2dldEZvcm1CeUlkP2lkPScgKyBzdXJ2ZXlJZCxcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci10ZW1wbGF0ZVxuICAgICAgICBwb3N0QVBJOiAnL2FwaXMvcHJveGllcy92OC9mb3Jtcy92MS9zYXZlRm9ybVN1Ym1pdCcsXG4gICAgICAgIGdldEFsbEFwcGxpY2F0aW9uczogJy9hcGlzL3Byb3hpZXMvdjgvZm9ybXMvZ2V0QWxsQXBwbGljYXRpb25zJyxcbiAgICAgICAgY3VzdG9taXplZEhlYWRlcjoge30sXG4gICAgICB9XG4gICAgICBjb25zdCBlbnJvbGxRdWVzdGlvbm5haXJlID0gdGhpcy5kaWFsb2cub3BlbihFbnJvbGxRdWVzdGlvbm5haXJlQ29tcG9uZW50LCB7XG4gICAgICAgIHdpZHRoOiAnOTIwcHgnLFxuICAgICAgICBtYXhIZWlnaHQ6ICc4NXZoJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHN1cnZleUlkLFxuICAgICAgICAgIGNvdXJzZUlkLFxuICAgICAgICAgIGNvdXJzZU5hbWUsXG4gICAgICAgICAgYXBpRGF0YSxcbiAgICAgICAgICBiYXRjaERhdGEsXG4gICAgICAgICAgd2ZDbGllbnRWZXJzaW9uXG5cbiAgICAgICAgfSxcbiAgICAgICAgZGlzYWJsZUNsb3NlOiBmYWxzZSxcbiAgICAgICAgcGFuZWxDbGFzczogWydhbmltYXRlX19hbmltYXRlZCcsICdhbmltYXRlX19zbGlkZUluTGVmdCddLFxuICAgICAgfSlcbiAgICAgIGVucm9sbFF1ZXN0aW9ubmFpcmUuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHRoaXMub3BlblJlcXVlc3RUb0Vucm9sbChiYXRjaERhdGEpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY2FsbEJQUHJvZmlsZVN1cmV2eShiYXRjaERhdGE6IGFueSkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGNvbnN0IGRvcHRvcmdJRCA9IHRoaXMuZW52aXJvbm1lbnQuZG9wdE9yZ1xuICAgICAgY29uc3QgaXNEb3B0Q29udGVudCA9IF8uZ2V0KHRoaXMuY29udGVudCwgJ2NyZWF0ZWRGb3InLCBbXSkuaW5jbHVkZXMoZG9wdG9yZ0lEKVxuICAgICAgLy8gY29uc3QgaXNEcHRVc2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Jvb3RPcmdJZCcpID09PSBkb3B0b3JnSURcblxuICAgIHRoaXMuZ2V0RG9wdEVsaWdpYmxlU2VydmljZXNMaXN0KClcbiAgICBjb25zdCB1c2VyUHJvZmlsZU9iamVjdCA9IHRoaXMuY29uZmlnU3ZjPy51bk1hcHBlZFVzZXIgfHwge31cbiAgICAgIGNvbnN0IGNpdmlsU2VydmljZU5hbWUgPSBfLmdldCh1c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VOYW1lJywgJycpXG4gICAgICBpZiAodGhpcy5kb3B0RWxpZ2libGVTZXJ2aWNlc0xpc3QgJiYgdGhpcy5kb3B0RWxpZ2libGVTZXJ2aWNlc0xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoIWNpdmlsU2VydmljZU5hbWUpIHtcbiAgICAgICAgICB0aGlzLm9wZW5Db25mb3JtYXRpb25EaWFsb2coYFRoaXMgcHJvZ3JhbSBoYXMgZWxpZ2liaWxpdHkgY3JpdGVyaWEuIFBsZWFzZSB1cGRhdGUgeW91ciBzZXJ2aWNlIGRldGFpbHMgaW4geW91ciBwcm9maWxlIGJlZm9yZSByZXF1ZXN0aW5nIHRvIGVucm9sbC5gKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmRvcHRFbGlnaWJsZVNlcnZpY2VzTGlzdC5pbmNsdWRlcyhjaXZpbFNlcnZpY2VOYW1lKSkge1xuICAgICAgICAgIHRoaXMub3BlbkNvbmZvcm1hdGlvbkRpYWxvZyhgWW91IGFyZSBub3QgZWxpZ2libGUgZm9yIHRoZSAke3RoaXMuY29udGVudC5uYW1lfSB3aXRoIHRoZSBjdXJyZW50IHNlcnZpY2UgaW4geW91ciBwcm9maWxlLiBJZiB5b3VyIHNlcnZpY2UgZGV0YWlscyBhcmUgaW5jb3JyZWN0LCBwbGVhc2UgdXBkYXRlIHlvdXIgcHJvZmlsZSBhbmQgYXBwbHkuYClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgY291cnNlTmFtZSA9IHRoaXMuY29udGVudC5uYW1lXG4gICAgICAvLyBjb25zdCBzaG93RG9wdENoYW5nZXMgPSAoaXNEb3B0Q29udGVudCAmJiBpc0RwdFVzZXIpID8gdHJ1ZSA6IGZhbHNlXG4gICAgICBjb25zdCBwcm9maWxlRm9ybSA9IHRoaXMuZGlhbG9nLm9wZW4oRW5yb2xsUHJvZmlsZUZvcm1Db21wb25lbnQsIHtcbiAgICAgICAgd2lkdGg6ICc5MjBweCcsXG4gICAgICAgIG1heEhlaWdodDogJzg1dmgnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgY291cnNlTmFtZSxcbiAgICAgICAgICBiYXRjaERhdGEsXG4gICAgICAgICAgc2hvd0RvcHRDaGFuZ2VzOiBpc0RvcHRDb250ZW50LFxuICAgICAgICB9LFxuICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICBwYW5lbENsYXNzOiBbJ2FuaW1hdGVfX2FuaW1hdGVkJywgJ2FuaW1hdGVfX3NsaWRlSW5MZWZ0J10sXG4gICAgICB9KVxuICAgICAgcHJvZmlsZUZvcm0uYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LndmU3VydmV5TGluaykge1xuICAgICAgICAgICAgdGhpcy5jYWxsQlBTdXJldnkoYmF0Y2hEYXRhKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0VG9FbnJvbGwoYmF0Y2hEYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdFRvRW5yb2xsRGlhbG9nKCkge1xuXG4gICAgY29uc3QgYmF0Y2hEYXRhID0gdGhpcy5iYXRjaENvbnRyb2wudmFsdWVcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSkge1xuICAgICAgLy8gY29uZmxpY3RzIGNoZWNrIHN0YXJ0XG4gICAgICBjb25zdCB1c2VyTGlzdDogYW55ID0gdGhpcy51c2VyRW5yb2xsbWVudExpc3QgJiYgdGhpcy51c2VyRW5yb2xsbWVudExpc3QuZmlsdGVyKGVsZSA9PiB7XG4gICAgICAgIGlmIChlbGUuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSkge1xuICAgICAgICAgIGlmICghKGRheWpzKGJhdGNoRGF0YS5zdGFydERhdGUpLmlzQmVmb3JlKGRheWpzKGVsZS5iYXRjaC5zdGFydERhdGUpKSAmJlxuICAgICAgICAgICAgZGF5anMoYmF0Y2hEYXRhLmVuZERhdGUpLmlzQmVmb3JlKGRheWpzKGVsZS5iYXRjaC5zdGFydERhdGUpKSB8fFxuICAgICAgICAgICAgZGF5anMoYmF0Y2hEYXRhLnN0YXJ0RGF0ZSkuaXNBZnRlcihkYXlqcyhlbGUuYmF0Y2guZW5kRGF0ZSkpICYmXG4gICAgICAgICAgICBkYXlqcyhiYXRjaERhdGEuZW5kRGF0ZSkuaXNBZnRlcihkYXlqcyhlbGUuYmF0Y2guZW5kRGF0ZSkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9KVxuXG4gICAgICAvLyBjb25mbGljdHMgY2hlY2sgZW5kXG4gICAgICBpZiAodXNlckxpc3QgJiYgdXNlckxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnQgJiYgYmF0Y2hEYXRhLmJhdGNoQXR0cmlidXRlcyAmJiBiYXRjaERhdGEuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzKSB7XG4gICAgICAgICAgdGhpcy5jYWxsQlBQcm9maWxlU3VyZXZ5KGJhdGNoRGF0YSlcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50LndmU3VydmV5TGluaykge1xuICAgICAgICAgIHRoaXMuY2FsbEJQU3VyZXZ5KGJhdGNoRGF0YSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0VG9FbnJvbGwoYmF0Y2hEYXRhKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodXNlckxpc3QgJiYgdXNlckxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMub3BlblNuYWNrYmFyKGBZb3UgY2Fubm90IGVucm9sbCBpbiB0aGlzIGJsZW5kZWQgcHJvZ3JhbSBiZWNhdXNlIGl0IGNvbmZsaWN0cyB3aXRoIHlvdXIgZXhpc3RpbmcgYmxlbmRlZCBwcm9ncmFtLmApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9ncmFtRW5yb2xsQ2FsbC5lbWl0KGJhdGNoRGF0YSlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdEFuZFdpdGhEcmF3RW5yb2xsKHN0YXRlOiBzdHJpbmcsIGFjdGlvbjogc3RyaW5nLCB3ZklkVmFsdWU/OiBzdHJpbmcpIHtcbiAgICBsZXQgdXNlcklkID0gJydcbiAgICBsZXQgcm9vdE9yZ0lkID0gJydcbiAgICBsZXQgdXNlcm5hbWUgPSAnJ1xuICAgIGxldCBkZXBhcnRtZW50TmFtZSA9ICcnXG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICB1c2VySWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQgfHwgJydcbiAgICAgIHJvb3RPcmdJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnJvb3RPcmdJZCB8fCAnJ1xuICAgICAgdXNlcm5hbWUgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5maXJzdE5hbWUgfHwgJydcbiAgICAgIGRlcGFydG1lbnROYW1lID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUuZGVwYXJ0bWVudE5hbWUgfHwgJydcbiAgICB9XG5cbiAgICBjb25zdCByZXEgPSB7XG4gICAgICByb290T3JnSWQsXG4gICAgICB1c2VySWQsXG4gICAgICBzdGF0ZSxcbiAgICAgIGFjdGlvbixcbiAgICAgIGFjdG9yVXNlcklkOiB1c2VySWQsXG4gICAgICBhcHBsaWNhdGlvbklkOiB0aGlzLnNlbGVjdGVkQmF0Y2guYmF0Y2hJZCxcbiAgICAgIHNlcnZpY2VOYW1lOiAnYmxlbmRlZHByb2dyYW0nLFxuICAgICAgY291cnNlSWQ6IHRoaXMuc2VsZWN0ZWRCYXRjaC5jb3Vyc2VJZCxcbiAgICAgIGRlcHROYW1lOiBkZXBhcnRtZW50TmFtZSxcbiAgICAgIC4uLih3ZklkVmFsdWUgPyB7IHdmSWQ6IHdmSWRWYWx1ZSB9IDogbnVsbCksXG4gICAgICB1cGRhdGVGaWVsZFZhbHVlczogW1xuICAgICAgICB7XG4gICAgICAgICAgdG9WYWx1ZToge1xuICAgICAgICAgICAgbmFtZTogdXNlcm5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuXG4gICAgdGhpcy5jb250ZW50U3ZjLmVucm9sbEFuZFVuZW5yb2xsVXNlclRvQmF0Y2hXRihyZXEsIGFjdGlvbikudGhlbigoZGF0YTogYW55KSA9PiB7XG4gICAgICBpZiAoZGF0YSAmJiBkYXRhLnJlc3VsdCAmJiBkYXRhLnJlc3VsdC5zdGF0dXMgPT09ICdPSycpIHtcbiAgICAgICAgdGhpcy5iYXRjaERhdGEud29ya0Zsb3cgPSB7XG4gICAgICAgICAgd2ZJbml0aWF0ZWQ6IHRydWUsXG4gICAgICAgICAgYmF0Y2g6IHRoaXMuc2VsZWN0ZWRCYXRjaCxcbiAgICAgICAgICB3Zkl0ZW06IHsgY3VycmVudFN0YXR1czogZGF0YS5yZXN1bHQuZGF0YS5zdGF0dXMgfSxcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndpdGhkcmF3T3JFbnJvbGwuZW1pdChhY3Rpb24pXG4gICAgICAgIHRoaXMuZ2V0QmF0Y2hVc2VyQ291bnQodGhpcy5zZWxlY3RlZEJhdGNoKVxuICAgICAgICB0aGlzLm9wZW5TbmFja2JhcihgUmVxdWVzdCAke2FjdGlvbiA9PT0gdGhpcy5XRkJsZW5kZWRQcm9ncmFtU3RhdHVzLldJVEhEUkFXID8gJ3dpdGhkcmF3bicgOiAnc2VudCd9IFN1Y2Nlc3NmdWxseSFgKVxuICAgICAgICB0aGlzLmRpc2FibGVFbnJvbGxCdG4gPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGVuU25hY2tiYXIoJ1NvbWV0aGluZyB3ZW50IHdyb25nLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgICAgIHRoaXMuZGlzYWJsZUVucm9sbEJ0biA9IGZhbHNlXG4gICAgICB9XG4gICAgfSwgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgIHRoaXMub3BlblNuYWNrYmFyKF8uZ2V0KGVycm9yLCAnZXJyb3IucGFyYW1zLmVycm1zZycpIHx8XG4gICAgICAgIF8uZ2V0KGVycm9yLCAnZXJyb3IucmVzdWx0LmVycm1zZycpIHx8XG4gICAgICAgICdTb21ldGhpbmcgd2VudCB3cm9uZywgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEnKVxuICAgIH0pXG4gIH1cblxuICBnZXRNaW1lVHlwZShjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQsIGlkZW50aWZpZXI6IHN0cmluZyk6IE5zQ29udGVudC5FTWltZVR5cGVzIHtcbiAgICBpZiAoY29udGVudC5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXR1cm4gY29udGVudC5taW1lVHlwZVxuICAgIH1cbiAgICBpZiAoY29udGVudCAmJiBjb250ZW50LmNoaWxkcmVuKSB7XG4gICAgICBpZiAoY29udGVudC5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gYmlnIGJsdW5kZXIgaW4gZGF0YVxuICAgICAgICB0aGlzLmxvZ2dlci5sb2coY29udGVudC5pZGVudGlmaWVyLCAnV3JvbmcgbWltZSB0eXBlcyBmb3IgcmVzdW1lJylcbiAgICAgICAgcmV0dXJuIGNvbnRlbnQubWltZVR5cGVcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmxhdExpc3Q6IGFueVtdID0gW11cbiAgICAgIGNvbnN0IGdldEFsbEl0ZW1zUGVyQ2hpbGRyZW46IGFueSA9IChpdGVtOiBOc0NvbnRlbnQuSUNvbnRlbnQpID0+IHtcbiAgICAgICAgZmxhdExpc3QucHVzaChpdGVtKVxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgIHJldHVybiBpdGVtLmNoaWxkcmVuLm1hcCgoaTogTnNDb250ZW50LklDb250ZW50KSA9PiBnZXRBbGxJdGVtc1BlckNoaWxkcmVuKGkpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBnZXRBbGxJdGVtc1BlckNoaWxkcmVuKHRoaXMuY29udGVudClcbiAgICAgIGNvbnN0IGNobGQgPSBfLmZpcnN0KF8uZmlsdGVyKGZsYXRMaXN0LCB7IGlkZW50aWZpZXIgfSkpXG4gICAgICByZXR1cm4gY2hsZC5taW1lVHlwZVxuICAgIH1cbiAgICAvLyByZXR1cm4gY2hsZC5taW1lVHlwZVxuICAgIHJldHVybiBOc0NvbnRlbnQuRU1pbWVUeXBlcy5VTktOT1dOXG4gIH1cblxuICBwcml2YXRlIGdldEJhdGNoSWQoKTogc3RyaW5nIHtcbiAgICBsZXQgYmF0Y2hJZCA9ICcnXG4gICAgaWYgKHRoaXMuYmF0Y2hEYXRhICYmIHRoaXMuYmF0Y2hEYXRhLmNvbnRlbnQpIHtcbiAgICAgIGZvciAoY29uc3QgYmF0Y2ggb2YgdGhpcy5iYXRjaERhdGEuY29udGVudCkge1xuICAgICAgICBiYXRjaElkID0gYmF0Y2guYmF0Y2hJZFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmF0Y2hJZFxuICB9XG5cbiAgcHVibGljIGhhbmRsZUVucm9sbG1lbnRFbmREYXRlKGJhdGNoOiBhbnkpIHtcbiAgICBjb25zdCBlbnJvbGxtZW50RW5kRGF0ZSA9IGRheWpzKGxvZGFzaC5nZXQoYmF0Y2gsICdlbnJvbGxtZW50RW5kRGF0ZScpKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuICAgIGNvbnN0IHN5c3RlbURhdGUgPSBkYXlqcyh0aGlzLnNlcnZlckRhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG4gICAgcmV0dXJuIChlbnJvbGxtZW50RW5kRGF0ZSAmJiBlbnJvbGxtZW50RW5kRGF0ZSAhPT0gJ0ludmFsaWQgRGF0ZScpID9cbiAgICAgIChkYXlqcyhlbnJvbGxtZW50RW5kRGF0ZSkuaXNTYW1lKHN5c3RlbURhdGUsICdkYXknKSB8fCBkYXlqcyhlbnJvbGxtZW50RW5kRGF0ZSkuaXNBZnRlcihzeXN0ZW1EYXRlKSkgOiBmYWxzZVxuICB9XG5cbiAgcHVibGljIGNoZWNrUmVqZWN0ZWQoYmF0Y2g6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGJhdGNoICYmXG4gICAgICB0aGlzLmJhdGNoRGF0YSAmJlxuICAgICAgdGhpcy5iYXRjaERhdGEud29ya0Zsb3cgJiZcbiAgICAgIHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSXRlbVxuICAgICkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgaWYgKGJhdGNoLmJhdGNoSWQgPT09IHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSXRlbS5hcHBsaWNhdGlvbklkICYmICh0aGlzLmJhdGNoRGF0YS53b3JrRmxvdy53Zkl0ZW0uY3VycmVudFN0YXR1cyA9PT0gdGhpcy5XRkJsZW5kZWRQcm9ncmFtU3RhdHVzLlJFSkVDVEVEIHx8IHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSXRlbS5jdXJyZW50U3RhdHVzID09PSB0aGlzLldGQmxlbmRlZFByb2dyYW1TdGF0dXMuUkVNT1ZFRCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHB1YmxpYyBjaGVja1dpdGhkcmF3bihiYXRjaDogYW55KSB7XG4gICAgaWYgKFxuICAgICAgYmF0Y2ggJiZcbiAgICAgIHRoaXMuYmF0Y2hEYXRhICYmXG4gICAgICB0aGlzLmJhdGNoRGF0YS53b3JrRmxvdyAmJlxuICAgICAgdGhpcy5iYXRjaERhdGEud29ya0Zsb3cud2ZJdGVtXG4gICAgKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEJhdGNoLmJhdGNoSWQgPT09IHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSXRlbS5hcHBsaWNhdGlvbklkICYmICh0aGlzLmJhdGNoRGF0YS53b3JrRmxvdy53Zkl0ZW0uY3VycmVudFN0YXR1cyA9PT0gdGhpcy5XRkJsZW5kZWRQcm9ncmFtU3RhdHVzLldJVEhEUkFXTiB8fCB0aGlzLmJhdGNoRGF0YS53b3JrRmxvdy53Zkl0ZW0uY3VycmVudFN0YXR1cyA9PT0gdGhpcy5XRkJsZW5kZWRQcm9ncmFtU3RhdHVzLldJVEhEUkFXTikpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHB1YmxpYyBiYXRjaENoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5jbGVhckFuZENhbGxUaW1lcigpXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnZhbHVlKSB7XG4gICAgICBjb25zdCBiYXRjaERhdGEgPSB7XG4gICAgICAgIGNvbnRlbnQ6IFtldmVudC52YWx1ZV0sXG4gICAgICB9XG4gICAgICB0aGlzLmdldEJhdGNoVXNlckNvdW50KGV2ZW50LnZhbHVlKVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRCYXRjaERhdGEgJiYgdGhpcy5zZWxlY3RlZEJhdGNoRGF0YS5jb250ZW50KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRCYXRjaERhdGEgPSB7XG4gICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEJhdGNoRGF0YSxcbiAgICAgICAgICAuLi5iYXRjaERhdGEsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRCYXRjaERhdGEgPSB7XG4gICAgICAgICAgLi4uYmF0Y2hEYXRhLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jaGVja1JlamVjdGVkKGV2ZW50LnZhbHVlKSkge1xuICAgICAgICB0aGlzLnNob3dSZWplY3RlZCA9IHRydWVcbiAgICAgICAgdGhpcy5zZXRiYXRjaERhdGVUb0NvdW50RG93bihldmVudC52YWx1ZS5zdGFydERhdGUpXG4gICAgICAgIHRoaXMudG9jU3ZjLmdldFNlbGVjdGVkQmF0Y2hEYXRhKHRoaXMuc2VsZWN0ZWRCYXRjaERhdGEpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgdGhpcy5zZXRiYXRjaERhdGVUb0NvdW50RG93bihldmVudC52YWx1ZS5zdGFydERhdGUpXG4gICAgICB0aGlzLnRvY1N2Yy5nZXRTZWxlY3RlZEJhdGNoRGF0YSh0aGlzLnNlbGVjdGVkQmF0Y2hEYXRhKVxuICAgIH1cbiAgICB0aGlzLnNob3dSZWplY3RlZCA9IGZhbHNlXG4gICAgdGhpcy5jaGVja0JhdGNoU3RhcnREYXRlKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNoZWNrQmF0Y2hTdGFydERhdGUoKSB7XG4gICAgY29uc3QgYmF0Y2hTdGFydERhdGUgPSB0aGlzLnNlbGVjdGVkQmF0Y2hEYXRhICYmIHRoaXMuc2VsZWN0ZWRCYXRjaERhdGEuY29udGVudFxuICAgICAgJiYgdGhpcy5zZWxlY3RlZEJhdGNoRGF0YS5jb250ZW50WzBdICYmIHRoaXMuc2VsZWN0ZWRCYXRjaERhdGEuY29udGVudFswXS5zdGFydERhdGVcbiAgICBjb25zdCB3b3JrRmxvdyA9IHRoaXMuYmF0Y2hEYXRhICYmIHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93ICYmIHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSXRlbVxuICAgICAgJiYgdGhpcy5iYXRjaERhdGEud29ya0Zsb3cud2ZJdGVtLmN1cnJlbnRTdGF0dXNcbiAgICBjb25zdCBub3cgPSBkYXlqcyh0aGlzLnNlcnZlckRhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXG4gICAgY29uc3QgZGF0ZUV4dGVuZGVkID0gZGF5anMobm93KS5pc1NhbWVPckFmdGVyKGRheWpzKGJhdGNoU3RhcnREYXRlKSlcbiAgICBpZiAoZGF0ZUV4dGVuZGVkICYmICh3b3JrRmxvdyAmJiAod29ya0Zsb3cgIT09IHRoaXMuV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5BUFBST1ZFRClcbiAgICAgICYmIHdvcmtGbG93ICE9PSB0aGlzLldGQmxlbmRlZFByb2dyYW1TdGF0dXMuV0lUSERSQVdOKSkge1xuICAgICAgY29uc3QgY29uZmlybURpYWxvZyA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICB3aWR0aDogJzQzNHB4JyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBub3QgYXBwcm92ZWQnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdEb25cXCd0IHdvcnJ5OyB3aXRoZHJhdyB0aGlzIGFuZCByZXF1ZXN0IGFub3RoZXIgYmF0Y2guJyxcbiAgICAgICAgICBhY2NlcHRCdXR0b246ICdXaXRoZHJhdycsXG4gICAgICAgICAgY2FuY2VsQnV0dG9uOiAnQ2FuY2VsJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICBwYW5lbENsYXNzOiBbJ2FuaW1hdGVfX2FuaW1hdGVkJywgJ2FuaW1hdGVfX3NsaWRlSW5MZWZ0J10sXG4gICAgICB9KVxuICAgICAgY29uZmlybURpYWxvZy5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICAgIHRoaXMucmVxdWVzdEFuZFdpdGhEcmF3RW5yb2xsKHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSXRlbS5jdXJyZW50U3RhdHVzLCB0aGlzLldGQmxlbmRlZFByb2dyYW1TdGF0dXMuV0lUSERSQVcsIHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSXRlbS53ZklkKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRCYXRjaENvbnRyb2woKSB7XG4gICAgLy8gb24gZmlyc3QgbG9hZCBzZWxlY3QgZmlyc3QgdmFsdWUgaW4gdGhlIGJhdGNoIGxpc3QgaWYgaXRzIGhhdmluZyB2YWxpZCBlbnJvbGxtZW50IERhdGVcbiAgICBpZiAodGhpcy5jb250ZW50ICYmICh0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLnByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0gfHxcbiAgICAgIHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IHRoaXMucHJpbWFyeUNhdGVnb3J5LlBST0dSQU0pKSB7XG4gICAgICBpZiAodGhpcy5iYXRjaERhdGEgJiYgdGhpcy5iYXRjaERhdGEuY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmJhdGNoRGF0YS53b3JrRmxvdyB8fCAodGhpcy5iYXRjaERhdGEud29ya0Zsb3cgJiYgIXRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSW5pdGlhdGVkKSkge1xuICAgICAgICAgIGNvbnN0IGJhdGNoID0gdGhpcy5iYXRjaERhdGEuY29udGVudC5maW5kKChlbDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYW5kbGVFbnJvbGxtZW50RW5kRGF0ZShlbCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGlmIChiYXRjaCkge1xuICAgICAgICAgICAgdGhpcy5iYXRjaENvbnRyb2wuc2V0VmFsdWUoYmF0Y2gpXG4gICAgICAgICAgICB0aGlzLnNldGJhdGNoRGF0ZVRvQ291bnREb3duKGJhdGNoLnN0YXJ0RGF0ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmdldEJhdGNoVXNlckNvdW50KHRoaXMuYmF0Y2hDb250cm9sLnZhbHVlKVxuICAgICAgICAgIGNvbnN0IGJhdGNoRGF0YSA9IHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IFt0aGlzLmJhdGNoQ29udHJvbC52YWx1ZV0sXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRCYXRjaERhdGEgJiYgdGhpcy5zZWxlY3RlZEJhdGNoRGF0YS5jb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQmF0Y2hEYXRhID0ge1xuICAgICAgICAgICAgICAuLi50aGlzLnNlbGVjdGVkQmF0Y2hEYXRhLFxuICAgICAgICAgICAgICAuLi5iYXRjaERhdGEsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRCYXRjaERhdGEgPSB7XG4gICAgICAgICAgICAgIC4uLmJhdGNoRGF0YSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnRvY1N2Yy5nZXRTZWxlY3RlZEJhdGNoRGF0YSh0aGlzLnNlbGVjdGVkQmF0Y2hEYXRhKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJhdGNoID0gdGhpcy5iYXRjaERhdGEuY29udGVudC5maW5kKChlbDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoZWwuYmF0Y2hJZCA9PT0gdGhpcy5iYXRjaERhdGEud29ya0Zsb3cud2ZJdGVtLmFwcGxpY2F0aW9uSWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQmF0Y2ggPSBiYXRjaFxuICAgICAgICAgIHRoaXMuYmF0Y2hDb250cm9sLnBhdGNoVmFsdWUoYmF0Y2gpXG4gICAgICAgICAgdGhpcy5iYXRjaENoYW5nZSh7IHZhbHVlOiBiYXRjaCB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNsZWFyQW5kQ2FsbFRpbWVyKCkge1xuICAgIGlmICh0aGlzLnRpbWVySW50ZXJ2YWxDbGVhcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVySW50ZXJ2YWxDbGVhcilcbiAgICB9XG4gICAgdGhpcy5jYWxsVGltZXIoKVxuICB9XG5cbiAgLy8gc2V0dGluZyBiYXRjaCBzdGFydCBkYXRlXG4gIHNldGJhdGNoRGF0ZVRvQ291bnREb3duKGJhdGNoU3RhcnREYXRlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRhcmdldERhdGUgPSBuZXcgRGF0ZShiYXRjaFN0YXJ0RGF0ZSlcbiAgICBjb25zdCBjb252ZXJ0ZWREYXRlID0gZGF5anMoYmF0Y2hTdGFydERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpXG4gICAgdGhpcy50YXJnZXRUaW1lID0gbmV3IERhdGUoY29udmVydGVkRGF0ZSkuZ2V0VGltZSgpXG4gIH1cblxuICBwcml2YXRlIG9wZW5TbmFja2JhcihwcmltYXJ5TXNnOiBzdHJpbmcsIGR1cmF0aW9uOiBudW1iZXIgPSA1MDAwKSB7XG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKHByaW1hcnlNc2csICdYJywge1xuICAgICAgZHVyYXRpb24sXG4gICAgfSlcbiAgfVxuXG4gIGdldCBkaXNhYmxlV2l0aGRyYXduQnRuKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuYmF0Y2hEYXRhICYmXG4gICAgICB0aGlzLmJhdGNoRGF0YS53b3JrRmxvdyAmJlxuICAgICAgdGhpcy5iYXRjaERhdGEud29ya0Zsb3cud2ZJdGVtXG4gICAgKSB7XG4gICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLmJhdGNoRGF0YS53b3JrRmxvdy53Zkl0ZW0uY3VycmVudFN0YXR1c1xuICAgICAgaWYgKE5zQ29udGVudC5XRkJsZW5kZWRQcm9ncmFtQXBwcm92YWxUeXBlcy5UV09fU1RFUF9NRE9fUEMgPT09IHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSXRlbS5zZXJ2aWNlTmFtZSAmJlxuICAgICAgICBzdGF0dXMgPT09IHRoaXMuV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5TRU5EX0ZPUl9QQ19BUFBST1ZBTCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBpZiAoTnNDb250ZW50LldGQmxlbmRlZFByb2dyYW1BcHByb3ZhbFR5cGVzLlRXT19TVEVQX1BDX01ETyA9PT0gdGhpcy5iYXRjaERhdGEud29ya0Zsb3cud2ZJdGVtLnNlcnZpY2VOYW1lICYmXG4gICAgICAgIHN0YXR1cyA9PT0gdGhpcy5XRkJsZW5kZWRQcm9ncmFtU3RhdHVzLlNFTkRfRk9SX01ET19BUFBST1ZBTCkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGdldCBzaG93SW5zdHJ1Y3RvckxlZE1zZygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zaG93QWN0aW9uQnV0dG9ucyAmJlxuICAgICAgdGhpcy5jb250ZW50ICYmXG4gICAgICB0aGlzLmNvbnRlbnQubGVhcm5pbmdNb2RlID09PSAnSW5zdHJ1Y3Rvci1MZWQnICYmXG4gICAgICAhdGhpcy5jb250ZW50LmNoaWxkcmVuLmxlbmd0aCAmJlxuICAgICAgIXRoaXMuY29udGVudC5hcnRpZmFjdFVybFxuICAgIClcbiAgfVxuXG4gIGdldCBnZXRXRk1zZygpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmJhdGNoRGF0YSAmJlxuICAgICAgdGhpcy5iYXRjaERhdGEud29ya0Zsb3cgJiZcbiAgICAgIHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSXRlbVxuICAgICkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5iYXRjaERhdGEud29ya0Zsb3cud2ZJdGVtLmN1cnJlbnRTdGF0dXNcbiAgICAgIGNvbnN0IG1zZyA9IHRoaXMuV0ZTVEFUVVNfTVNHX01BUFBJTkdbc3RhdHVzXVxuICAgICAgcmV0dXJuIHRoaXMudG9jQ29uZmlnW21zZ11cbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd0ljb24oKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5iYXRjaERhdGEgJiZcbiAgICAgIHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93ICYmXG4gICAgICB0aGlzLmJhdGNoRGF0YS53b3JrRmxvdy53Zkl0ZW1cbiAgICApIHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSXRlbS5jdXJyZW50U3RhdHVzXG4gICAgICBpZiAoc3RhdHVzID09PSB0aGlzLldGQmxlbmRlZFByb2dyYW1TdGF0dXMuQVBQUk9WRUQgfHxcbiAgICAgICAgc3RhdHVzID09PSB0aGlzLldGQmxlbmRlZFByb2dyYW1TdGF0dXMuU0VORF9GT1JfTURPX0FQUFJPVkFMIHx8XG4gICAgICAgIHN0YXR1cyA9PT0gdGhpcy5XRkJsZW5kZWRQcm9ncmFtU3RhdHVzLlNFTkRfRk9SX1BDX0FQUFJPVkFMIHx8XG4gICAgICAgIHN0YXR1cyA9PT0gdGhpcy5XRkJsZW5kZWRQcm9ncmFtU3RhdHVzLldJVEhEUkFXTiB8fFxuICAgICAgICBzdGF0dXMgPT09IHRoaXMuV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5SRUpFQ1RFRCB8fFxuICAgICAgICBzdGF0dXMgPT09IHRoaXMuV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5SRU1PVkVEKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZ2V0IHNob3dNc2coKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5iYXRjaERhdGEgJiZcbiAgICAgIHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93ICYmXG4gICAgICB0aGlzLmJhdGNoRGF0YS53b3JrRmxvdy53Zkl0ZW1cbiAgICApIHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSXRlbS5jdXJyZW50U3RhdHVzXG4gICAgICBpZiAoc3RhdHVzID09PSB0aGlzLldGQmxlbmRlZFByb2dyYW1TdGF0dXMuQVBQUk9WRUQgfHxcbiAgICAgICAgc3RhdHVzID09PSB0aGlzLldGQmxlbmRlZFByb2dyYW1TdGF0dXMuU0VORF9GT1JfTURPX0FQUFJPVkFMIHx8XG4gICAgICAgIHN0YXR1cyA9PT0gdGhpcy5XRkJsZW5kZWRQcm9ncmFtU3RhdHVzLlNFTkRfRk9SX1BDX0FQUFJPVkFMIHx8XG4gICAgICAgIChzdGF0dXMgPT09IHRoaXMuV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5XSVRIRFJBV04gJiYgdGhpcy5jaGVja1dpdGhkcmF3bih0aGlzLmJhdGNoRGF0YSkpIHx8XG4gICAgICAgIChzdGF0dXMgPT09IHRoaXMuV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5SRU1PVkVEICYmIHRoaXMuc2hvd1JlamVjdGVkKSB8fFxuICAgICAgICAoc3RhdHVzID09PSB0aGlzLldGQmxlbmRlZFByb2dyYW1TdGF0dXMuUkVKRUNURUQgJiYgdGhpcy5zaG93UmVqZWN0ZWQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZ2V0IFdGSWNvbigpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmJhdGNoRGF0YSAmJlxuICAgICAgdGhpcy5iYXRjaERhdGEud29ya0Zsb3cgJiZcbiAgICAgIHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSXRlbVxuICAgICkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5iYXRjaERhdGEud29ya0Zsb3cud2ZJdGVtLmN1cnJlbnRTdGF0dXNcbiAgICAgIGlmIChzdGF0dXMgPT09IHRoaXMuV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5BUFBST1ZFRCB8fFxuICAgICAgICBzdGF0dXMgPT09IHRoaXMuV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5TRU5EX0ZPUl9NRE9fQVBQUk9WQUwgfHxcbiAgICAgICAgc3RhdHVzID09PSB0aGlzLldGQmxlbmRlZFByb2dyYW1TdGF0dXMuU0VORF9GT1JfUENfQVBQUk9WQUwgfHxcbiAgICAgICAgc3RhdHVzID09PSB0aGlzLldGQmxlbmRlZFByb2dyYW1TdGF0dXMuV0lUSERSQVdOXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuICdjaXJjbGUnXG4gICAgICB9XG4gICAgICBpZiAoc3RhdHVzID09PSB0aGlzLldGQmxlbmRlZFByb2dyYW1TdGF0dXMuUkVKRUNURUQgfHxcbiAgICAgICAgc3RhdHVzID09PSB0aGlzLldGQmxlbmRlZFByb2dyYW1TdGF0dXMuUkVNT1ZFRCkge1xuICAgICAgICByZXR1cm4gJ2luZm8nXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgZ2V0IGljb25Db2xvcigpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmJhdGNoRGF0YSAmJlxuICAgICAgdGhpcy5iYXRjaERhdGEud29ya0Zsb3cgJiZcbiAgICAgIHRoaXMuYmF0Y2hEYXRhLndvcmtGbG93LndmSXRlbVxuICAgICkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5iYXRjaERhdGEud29ya0Zsb3cud2ZJdGVtLmN1cnJlbnRTdGF0dXNcbiAgICAgIGlmIChzdGF0dXMgPT09IHRoaXMuV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5BUFBST1ZFRCB8fCBzdGF0dXMgPT09IHRoaXMuV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5XSVRIRFJBV04pIHtcbiAgICAgICAgcmV0dXJuICd3cy1tYXQtZ3JlZW4tdGV4dCdcbiAgICAgIH0gaWYgKHN0YXR1cyA9PT0gdGhpcy5XRkJsZW5kZWRQcm9ncmFtU3RhdHVzLlNFTkRfRk9SX01ET19BUFBST1ZBTCB8fFxuICAgICAgICBzdGF0dXMgPT09IHRoaXMuV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5TRU5EX0ZPUl9QQ19BUFBST1ZBTCkge1xuICAgICAgICByZXR1cm4gJ3dzLW1hdC1vcmFuZ2UtdGV4dCdcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJ1xuXG4gICAgfVxuICAgIHJldHVybiAnICdcbiAgfVxuXG4gIGdldCBpc0hlYWRlckhpZGRlbigpIHtcbiAgICByZXR1cm4gdGhpcy5pc1Jlc291cmNlICYmIHRoaXMuY29udGVudCAmJiAhdGhpcy5jb250ZW50LmFydGlmYWN0VXJsLmxlbmd0aFxuICB9XG5cbiAgZ2V0IHNob3dBY3Rpb25CdXR0b25zKCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFjdGlvbkJ0blN0YXR1cyAhPT0gJ3dhaXQnICYmXG4gICAgICB0aGlzLmNvbnRlbnQgJiZcbiAgICAgIHRoaXMuY29udGVudC5zdGF0dXMgIT09ICdEZWxldGVkJyAmJlxuICAgICAgdGhpcy5jb250ZW50LnN0YXR1cyAhPT0gJ0V4cGlyZWQnXG4gICAgKVxuICB9XG5cbiAgZ2V0IHNob3dCdXR0b25Db250YWluZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYWN0aW9uQnRuU3RhdHVzID09PSAnZ3JhbnQnICYmXG4gICAgICAhKHRoaXMuaXNNb2JpbGUgJiYgdGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5pc0luSW50cmFuZXQpICYmXG4gICAgICAhKFxuICAgICAgICB0aGlzLmNvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5jb250ZW50LmNvbnRlbnRUeXBlID09PSAnQ291cnNlJyAmJlxuICAgICAgICB0aGlzLmNvbnRlbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwICYmXG4gICAgICAgICF0aGlzLmNvbnRlbnQuYXJ0aWZhY3RVcmxcbiAgICAgICkgJiZcbiAgICAgICEodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5jb250ZW50VHlwZSA9PT0gJ1Jlc291cmNlJyAmJiAhdGhpcy5jb250ZW50LmFydGlmYWN0VXJsKVxuICAgIClcbiAgfVxuXG4gIGdldCBpc1Jlc291cmNlKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGNvbnN0IGlzUmVzb3VyY2UgPSB0aGlzLmNvbnRlbnQuY29udGVudFR5cGUgPT09IE5zQ29udGVudC5FQ29udGVudFR5cGVzLktOT1dMRURHRV9BUlRJRkFDVCB8fFxuICAgICAgICB0aGlzLmNvbnRlbnQuY29udGVudFR5cGUgPT09IE5zQ29udGVudC5FQ29udGVudFR5cGVzLlJFU09VUkNFIHx8ICF0aGlzLmNvbnRlbnQuY2hpbGRyZW4ubGVuZ3RoXG4gICAgICBpZiAoaXNSZXNvdXJjZSkge1xuICAgICAgICB0aGlzLm1vYmlsZUFwcHNTdmMuc2VuZFZpZXdlckRhdGEodGhpcy5jb250ZW50KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzUmVzb3VyY2VcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBnZXRCYXRjaFVzZXJDb3VudChiYXRjaERhdGE6IGFueSkge1xuICAgIGlmIChiYXRjaERhdGEgJiYgYmF0Y2hEYXRhLmJhdGNoSWQpIHtcbiAgICAgIGNvbnN0IHJlcSA9IHtcbiAgICAgICAgc2VydmljZU5hbWU6ICdibGVuZGVkcHJvZ3JhbScsXG4gICAgICAgIGFwcGxpY2F0aW9uU3RhdHVzOiAnJyxcbiAgICAgICAgYXBwbGljYXRpb25JZHM6IFtcbiAgICAgICAgICBiYXRjaERhdGEuYmF0Y2hJZCxcbiAgICAgICAgXSxcbiAgICAgICAgbGltaXQ6IDEwMCxcbiAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgfVxuICAgICAgY29uc3QgdXNlcmNvdW50ID0ge1xuICAgICAgICBlbnJvbGxlZDogMCxcbiAgICAgICAgdG90YWxBcHBsaWVkOiAwLFxuICAgICAgICByZWplY3RlZDogMCxcbiAgICAgIH1cbiAgICAgIHRoaXMuY29udGVudFN2Yy5mZXRjaEJsZW5kZWRVc2VyQ09VTlQocmVxKS50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzLnJlc3VsdCAmJiByZXMucmVzdWx0LmRhdGEpIHtcbiAgICAgICAgICByZXMucmVzdWx0LmRhdGEuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChlbGUuY3VycmVudFN0YXR1cyA9PT0gJ0FQUFJPVkVEJykge1xuICAgICAgICAgICAgICB1c2VyY291bnQuZW5yb2xsZWQgPSBlbGUuc3RhdHVzQ291bnRcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZWxlLmN1cnJlbnRTdGF0dXMgPT09ICdSRUpFQ1RFRCcpIHtcbiAgICAgICAgICAgICAgdXNlcmNvdW50LnJlamVjdGVkID0gZWxlLnN0YXR1c0NvdW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZWxlLmN1cnJlbnRTdGF0dXMgIT09ICdXSVRIRFJBV04nKSB7XG4gICAgICAgICAgICAgIHVzZXJjb3VudC50b3RhbEFwcGxpZWQgPSB1c2VyY291bnQudG90YWxBcHBsaWVkICsgZWxlLnN0YXR1c0NvdW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEJhdGNoRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJhdGNoRGF0YSA9IHtcbiAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEJhdGNoRGF0YSxcbiAgICAgICAgICAgICAgdXNlckNvdW50OiB1c2VyY291bnQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudG9jU3ZjLmdldFNlbGVjdGVkQmF0Y2hEYXRhKHRoaXMuc2VsZWN0ZWRCYXRjaERhdGEpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXN1bWVEYXRhRnJvbUxpc3QodHlwZT86IHN0cmluZykge1xuICAgIGlmICghdHlwZSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgY29uc3QgbGFzdEl0ZW0gPSB0aGlzLnJlc3VtZURhdGEgJiYgdGhpcy5yZXN1bWVEYXRhLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiBuZXcgRGF0ZShiLmxhc3RBY2Nlc3NUaW1lKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShhLmxhc3RBY2Nlc3NUaW1lKS5nZXRUaW1lKCkpLnNoaWZ0KClcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkZW50aWZpZXI6IGxhc3RJdGVtLmNvbnRlbnRJZCxcbiAgICAgICAgbWltZVR5cGU6IGxhc3RJdGVtLnByb2dyZXNzZGV0YWlscyAmJiBsYXN0SXRlbS5wcm9ncmVzc2RldGFpbHMubWltZVR5cGUsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3RJdGVtID0gdGhpcy5yZXN1bWVEYXRhICYmIHRoaXMucmVzdW1lRGF0YS5sZW5ndGggJiYgdGhpcy5yZXN1bWVEYXRhWzBdXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkZW50aWZpZXI6IGZpcnN0SXRlbS5jb250ZW50SWQsXG4gICAgICBtaW1lVHlwZTogZmlyc3RJdGVtLnByb2dyZXNzZGV0YWlscyAmJiBmaXJzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzLm1pbWVUeXBlLFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbW9kaWZ5U2Vuc2libGVDb250ZW50UmF0aW5nKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29udGVudCAmJlxuICAgICAgdGhpcy5jb250ZW50LmF2ZXJhZ2VSYXRpbmcgJiZcbiAgICAgIHR5cGVvZiB0aGlzLmNvbnRlbnQuYXZlcmFnZVJhdGluZyAhPT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIHRoaXMuY29udGVudC5hdmVyYWdlUmF0aW5nID0gKHRoaXMuY29udGVudC5hdmVyYWdlUmF0aW5nIGFzIGFueSlbdGhpcy5jb25maWdTdmMucm9vdE9yZyB8fCAnJ11cbiAgICB9XG4gICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQudG90YWxSYXRpbmcgJiYgdHlwZW9mIHRoaXMuY29udGVudC50b3RhbFJhdGluZyAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMuY29udGVudC50b3RhbFJhdGluZyA9ICh0aGlzLmNvbnRlbnQudG90YWxSYXRpbmcgYXMgYW55KVt0aGlzLmNvbmZpZ1N2Yy5yb290T3JnIHx8ICcnXVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGVhcm5pbmdVcmxzKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGlmICghdGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICAgIC8vIHRoaXMucHJvZ3Jlc3NTdmMuZ2V0UHJvZ3Jlc3NGb3IodGhpcy5jb250ZW50LmlkZW50aWZpZXIpLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgLy8gICB0aGlzLmNvbnRlbnRQcm9ncmVzcyA9IGRhdGFcbiAgICAgICAgLy8gfSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc1ByYWN0aWNlVmlzaWJsZSA9IEJvb2xlYW4oXG4gICAgICAgIHRoaXMudG9jU3ZjLmZpbHRlclRvYyh0aGlzLmNvbnRlbnQsIE5zQ29udGVudC5FRmlsdGVyQ2F0ZWdvcnkuUFJBQ1RJQ0UpLFxuICAgICAgKVxuXG4gICAgICB0aGlzLmlzQXNzZXNzVmlzaWJsZSA9IEJvb2xlYW4oXG4gICAgICAgIHRoaXMudG9jU3ZjLmZpbHRlclRvYyh0aGlzLmNvbnRlbnQsIE5zQ29udGVudC5FRmlsdGVyQ2F0ZWdvcnkuQVNTRVNTKSxcbiAgICAgIClcblxuICAgICAgY29uc3QgZmlyc3RQbGF5YWJsZUNvbnRlbnQgPSB0aGlzLmNvbnRlbnRTdmMuZ2V0Rmlyc3RDaGlsZEluSGllcmFyY2h5KHRoaXMuY29udGVudClcbiAgICAgIHRoaXMuZmlyc3RSZXNvdXJjZUxpbmsgPSB2aWV3ZXJSb3V0ZUdlbmVyYXRvcihcbiAgICAgICAgZmlyc3RQbGF5YWJsZUNvbnRlbnQuaWRlbnRpZmllcixcbiAgICAgICAgZmlyc3RQbGF5YWJsZUNvbnRlbnQubWltZVR5cGUsXG4gICAgICAgIHRoaXMuaXNSZXNvdXJjZSA/IHVuZGVmaW5lZCA6IHRoaXMuY29udGVudC5pZGVudGlmaWVyLFxuICAgICAgICB0aGlzLmlzUmVzb3VyY2UgPyB1bmRlZmluZWQgOiB0aGlzLmNvbnRlbnQuY29udGVudFR5cGUsXG4gICAgICAgIHRoaXMuZm9yUHJldmlldyxcbiAgICAgICAgdGhpcy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSxcbiAgICAgICAgdGhpcy5nZXRCYXRjaElkKCksXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25QYXRoQW5kVXBkYXRlQmFubmVyKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3QgcGF0aCA9IHVybC5zcGxpdCgnLycpLnBvcCgpXG4gICAgaWYgKHBhdGggJiYgdGhpcy52YWxpZFBhdGhzLmhhcyhwYXRoKSkge1xuICAgICAgdGhpcy5yb3V0ZVBhdGggPSBwYXRoXG4gICAgICB0aGlzLnVwZGF0ZUJhbm5lclVybCgpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVCYW5uZXJVcmwoKSB7XG4gICAgaWYgKHRoaXMuYmFubmVycykge1xuICAgICAgdGhpcy5iYW5uZXJVcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoXG4gICAgICAgIGB1cmwoJHt0aGlzLmJhbm5lcnNbdGhpcy5yb3V0ZVBhdGhdfSlgLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHBsYXlJbnRyb1ZpZGVvKCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQpIHtcbiAgICAgIHRoaXMuZGlhbG9nLm9wZW4oQXBwVG9jRGlhbG9nSW50cm9WaWRlb0NvbXBvbmVudCwge1xuICAgICAgICBkYXRhOiB0aGlzLmNvbnRlbnQuaW50cm9kdWN0b3J5VmlkZW8sXG4gICAgICAgIGhlaWdodDogJzM1MHB4JyxcbiAgICAgICAgd2lkdGg6ICc2MjBweCcsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldCBzYW5pdGl6ZWRJbnRyb2R1Y3RvcnlWaWRlb0ljb24oKSB7XG4gICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQuaW50cm9kdWN0b3J5VmlkZW9JY29uKSB7XG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKGB1cmwoJHt0aGlzLmNvbnRlbnQuaW50cm9kdWN0b3J5VmlkZW9JY29ufSlgKVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaEV4dGVybmFsQ29udGVudEFjY2VzcygpIHtcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5yZWdpc3RyYXRpb25VcmwpIHtcbiAgICAgIGlmICghdGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICAgIHRoaXMuZXh0ZXJuYWxDb250ZW50RmV0Y2hTdGF0dXMgPSAnZmV0Y2hpbmcnXG4gICAgICAgIHRoaXMucmVnaXN0ZXJGb3JFeHRlcm5hbCA9IGZhbHNlXG4gICAgICAgIHRoaXMudG9jU3ZjLmZldGNoRXh0ZXJuYWxDb250ZW50QWNjZXNzKHRoaXMuY29udGVudC5pZGVudGlmaWVyKS5zdWJzY3JpYmUoXG4gICAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV4dGVybmFsQ29udGVudEZldGNoU3RhdHVzID0gJ2RvbmUnXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRm9yRXh0ZXJuYWwgPSBkYXRhLmhhc0FjY2Vzc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgX2Vycm9yID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxDb250ZW50RmV0Y2hTdGF0dXMgPSAnZG9uZSdcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJGb3JFeHRlcm5hbCA9IGZhbHNlXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5leHRlcm5hbENvbnRlbnRGZXRjaFN0YXR1cyA9ICdkb25lJ1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRm9yRXh0ZXJuYWwgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0UmF0aW5nSWNvbihyYXRpbmdJbmRleDogbnVtYmVyKTogJ3N0YXInIHwgJ3N0YXJfYm9yZGVyJyB8ICdzdGFyX2hhbGYnIHtcbiAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5hdmVyYWdlUmF0aW5nKSB7XG4gICAgICBjb25zdCBhdmdSYXRpbmcgPSB0aGlzLmNvbnRlbnQuYXZlcmFnZVJhdGluZ1xuICAgICAgY29uc3QgcmF0aW5nRmxvb3IgPSBNYXRoLmZsb29yKGF2Z1JhdGluZylcbiAgICAgIGlmIChyYXRpbmdJbmRleCA8PSByYXRpbmdGbG9vcikge1xuICAgICAgICByZXR1cm4gJ3N0YXInXG4gICAgICB9XG4gICAgICBpZiAocmF0aW5nRmxvb3IgPT09IHJhdGluZ0luZGV4IC0gMSAmJiBhdmdSYXRpbmcgJSAxID49IDAuMjkgJiYgYXZnUmF0aW5nICUgMSA8IDAuNzEpIHtcbiAgICAgICAgcmV0dXJuICdzdGFyX2hhbGYnXG4gICAgICB9XG4gICAgICBpZiAocmF0aW5nRmxvb3IgPT09IHJhdGluZ0luZGV4IC0gMSAmJiBhdmdSYXRpbmcgJSAxID4gMC43MSkge1xuICAgICAgICByZXR1cm4gJ3N0YXInXG4gICAgICB9XG4gICAgICBpZiAocmF0aW5nRmxvb3IgPT09IHJhdGluZ0luZGV4IC0gMSAmJiBhdmdSYXRpbmcgJSAxIDwgMC4yOSkge1xuICAgICAgICByZXR1cm4gJ3N0YXJfYm9yZGVyJ1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJ3N0YXJfYm9yZGVyJ1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1JlZ2lzdHJhdGlvblN0YXR1cygpIHtcbiAgICBjb25zdCBzb3VyY2UgPSAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5zb3VyY2VTaG9ydE5hbWUpIHx8ICcnXG4gICAgaWYgKFxuICAgICAgIXRoaXMuZm9yUHJldmlldyAmJlxuICAgICAgIXRoaXMuaXNSZWdpc3RyYXRpb25TdXBwb3J0ZWQgJiZcbiAgICAgIHRoaXMuY2hlY2tSZWdpc3RyYXRpb25Tb3VyY2VzLmhhcyhzb3VyY2UpXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRlbnRTdmNcbiAgICAgICAgLmdldFJlZ2lzdHJhdGlvblN0YXR1cyhzb3VyY2UpXG4gICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5oYXNBY2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uQnRuU3RhdHVzID0gJ2dyYW50J1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkJ0blN0YXR1cyA9ICdyZWplY3QnXG4gICAgICAgICAgICBpZiAocmVzLnJlZ2lzdHJhdGlvblVybCAmJiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250ZW50LnJlZ2lzdHJhdGlvblVybCA9IHJlcy5yZWdpc3RyYXRpb25VcmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChfZXJyID0+IHsgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3Rpb25CdG5TdGF0dXMgPSAnZ3JhbnQnXG4gICAgfVxuICB9XG5cbiAgZ2VuZXJhdGVRdWVyeSh0eXBlOiAnUkVTVU1FJyB8ICdTVEFSVF9PVkVSJyB8ICdTVEFSVCcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICBpZiAodGhpcy5maXJzdFJlc291cmNlTGluayAmJiAodHlwZSA9PT0gJ1NUQVJUJyB8fCB0eXBlID09PSAnU1RBUlRfT1ZFUicpKSB7XG4gICAgICBsZXQgcVBhcmFtczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgLi4udGhpcy5maXJzdFJlc291cmNlTGluay5xdWVyeVBhcmFtcyxcbiAgICAgICAgdmlld01vZGU6IHR5cGUsXG4gICAgICAgIGJhdGNoSWQ6IHRoaXMuZ2V0QmF0Y2hJZCgpLFxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29udGV4dElkICYmIHRoaXMuY29udGV4dFBhdGgpIHtcbiAgICAgICAgcVBhcmFtcyA9IHtcbiAgICAgICAgICAuLi5xUGFyYW1zLFxuICAgICAgICAgIGNvbGxlY3Rpb25JZDogdGhpcy5jb250ZXh0SWQsXG4gICAgICAgICAgY29sbGVjdGlvblR5cGU6IHRoaXMuY29udGV4dFBhdGgsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgICAgZGVsZXRlIHFQYXJhbXMudmlld01vZGVcbiAgICAgIH1cbiAgICAgIHJldHVybiBxUGFyYW1zXG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVzdW1lRGF0YUxpbmsgJiYgdHlwZSA9PT0gJ1JFU1VNRScpIHtcbiAgICAgIGxldCBxUGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgICAuLi50aGlzLnJlc3VtZURhdGFMaW5rLnF1ZXJ5UGFyYW1zLFxuICAgICAgICBiYXRjaElkOiB0aGlzLmdldEJhdGNoSWQoKSxcbiAgICAgICAgdmlld01vZGU6ICdSRVNVTUUnLFxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29udGV4dElkICYmIHRoaXMuY29udGV4dFBhdGgpIHtcbiAgICAgICAgcVBhcmFtcyA9IHtcbiAgICAgICAgICAuLi5xUGFyYW1zLFxuICAgICAgICAgIGNvbGxlY3Rpb25JZDogdGhpcy5jb250ZXh0SWQsXG4gICAgICAgICAgY29sbGVjdGlvblR5cGU6IHRoaXMuY29udGV4dFBhdGgsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgICAgZGVsZXRlIHFQYXJhbXMudmlld01vZGVcbiAgICAgIH1cbiAgICAgIHJldHVybiBxUGFyYW1zXG4gICAgfVxuICAgIGlmICh0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYmF0Y2hJZDogdGhpcy5nZXRCYXRjaElkKCksXG4gICAgICB2aWV3TW9kZTogdHlwZSxcbiAgICB9XG4gIH1cblxuICBnZXQgaXNJbklGcmFtZSgpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5zZWxmICE9PSB3aW5kb3cudG9wXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0QmdDb2xvcih0YWdUaXRsZTogYW55KSB7XG4gICAgY29uc3QgYmdDb2xvciA9IHRoaXMudGFnU3ZjLnN0cmluZ1RvQ29sb3IodGFnVGl0bGUudG9Mb3dlckNhc2UoKSlcbiAgICBjb25zdCBjb2xvciA9IHRoaXMudGFnU3ZjLmdldENvbnRyYXN0KGJnQ29sb3IpXG4gICAgcmV0dXJuIHsgY29sb3IsICdiYWNrZ3JvdW5kLWNvbG9yJzogYmdDb2xvciB9XG4gIH1cbiAgZ2V0VGFyZ2V0VGltZSgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEJhdGNoLnN0YXJ0RGF0ZSkge1xuICAgICAgdGhpcy50YXJnZXREYXRlID0gbmV3IERhdGUodGhpcy5zZWxlY3RlZEJhdGNoLnN0YXJ0RGF0ZSlcbiAgICAgIGNvbnN0IGNvbnZlcnRlZERhdGUgPSBkYXlqcyh0aGlzLnNlbGVjdGVkQmF0Y2guc3RhcnREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKVxuICAgICAgcmV0dXJuIG5ldyBEYXRlKGNvbnZlcnRlZERhdGUpLmdldFRpbWUoKVxuICAgIH1cbiAgICAvLyB0aGlzLnRhcmdldFRpbWUgPSAnJ1xuICAgIHJldHVybiAnJ1xuICB9XG4gIGNhbGxUaW1lcigpIHtcbiAgICAvLyB0aGlzLnRhcmdldFRpbWUgPSB0aGlzLmdldFRhcmdldFRpbWUoKVxuICAgIGlmICh0aGlzLnNlcnZlckRhdGUpIHtcbiAgICAgIC8vIGxldCB0aW1lckludGVydmFsID0gdGltZXIoMTAwMCwgMTAwMClcbiAgICAgIC8vIHNldFRpbWVvdXQoKCk9PntcbiAgICAgIC8vICAgaWYgKHRoaXMudGltZXJJbnRlcnZhbENsZWFyKSB7XG4gICAgICAvLyAgICAgdGhpcy50aW1lckludGVydmFsQ2xlYXIudW5zdWJzY3JpYmUoKVxuICAgICAgLy8gICB9XG4gICAgICAvLyAgIHRoaXMudGltZXJJbnRlcnZhbENsZWFyID0gdGltZXJJbnRlcnZhbC5zdWJzY3JpYmUoKHQ6IGFueSkgPT4ge1xuXG4gICAgICAvLyAgICAgY29uc29sZS5sb2codGhpcy5zZWxlY3RlZEJhdGNoLnN0YXJ0RGF0ZSwnLS0tLScpXG4gICAgICAvLyAgICAgY29uc29sZS5sb2codGhpcy5iYXRjaENvbnRyb2wudmFsdWUuc3RhcnREYXRlLCdoaWlpaScpXG4gICAgICAvLyAgICAgdGhpcy50YXJnZXREYXRlID0gbmV3IERhdGUodGhpcy5zZWxlY3RlZEJhdGNoLnN0YXJ0RGF0ZSlcbiAgICAgIC8vICAgICBjb25zdCBjb252ZXJ0ZWREYXRlID0gZGF5anModGhpcy5zZWxlY3RlZEJhdGNoLnN0YXJ0RGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJylcbiAgICAgIC8vICAgICB0aGlzLnRhcmdldFRpbWUgPSAnJ1xuICAgICAgLy8gICAgIHRoaXMudGFyZ2V0VGltZT1uZXcgRGF0ZShjb252ZXJ0ZWREYXRlKS5nZXRUaW1lKClcbiAgICAgIC8vICAgICB0aGlzLnRpbWVyRnVuYyh0LHRoaXMuc2VydmVyRGF0ZSArIHQgKiAxMDAwKVxuXG4gICAgICAvLyAgIH0pXG4gICAgICAvLyB9LDEwMClcbiAgICAgIGxldCB0ID0gMFxuICAgICAgaWYgKHRoaXMudGltZXJJbnRlcnZhbENsZWFyKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lckludGVydmFsQ2xlYXIpXG4gICAgICB9XG4gICAgICB0aGlzLnRpbWVySW50ZXJ2YWxDbGVhciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgdGhpcy50YXJnZXRUaW1lID0gJydcbiAgICAgICAgaWYgKHRoaXMuYmF0Y2hDb250cm9sICYmIHRoaXMuYmF0Y2hDb250cm9sLnZhbHVlICYmIHRoaXMuYmF0Y2hDb250cm9sLnZhbHVlLnN0YXJ0RGF0ZSkge1xuXG4gICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5zZWxlY3RlZEJhdGNoLnN0YXJ0RGF0ZSwnLS0tLScpXG4gICAgICAgICAgdGhpcy50YXJnZXREYXRlID0gbmV3IERhdGUodGhpcy5iYXRjaENvbnRyb2wudmFsdWUuc3RhcnREYXRlKVxuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZERhdGUgPSBkYXlqcyh0aGlzLmJhdGNoQ29udHJvbC52YWx1ZS5zdGFydERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpXG5cbiAgICAgICAgICB0aGlzLnRhcmdldFRpbWUgPSBuZXcgRGF0ZShjb252ZXJ0ZWREYXRlKS5nZXRUaW1lKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRpbWVyRnVuYyh0aGlzLnNlcnZlckRhdGUgKyB0ICogMTAwMClcbiAgICAgICAgdCA9IHQgKyAxXG4gICAgICB9LCAxMDAwKVxuXG4gICAgfVxuICB9XG5cbiAgdGltZXJGdW5jKHNlcnZlckRhdGU6IGFueSkge1xuICAgIC8vIHNlcnZlckRhdGUgPSBzZXJ2ZXJEYXRlICsgdGltZWVyXG4gICAgaWYgKHNlcnZlckRhdGUgJiYgdGhpcy50YXJnZXRUaW1lKSB7XG4gICAgICBsZXQgdGltZXJMb2NhbCA9IHtcbiAgICAgICAgZGF5czogMCxcbiAgICAgICAgaG91cnM6IDAsXG4gICAgICAgIG1pbjogMCxcbiAgICAgICAgc2Vjb25kczogMCxcbiAgICAgIH1cbiAgICAgIC8vIHNlcnZlckRhdGUgPSBzZXJ2ZXJEYXRlICArICAxMDAwXG4gICAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZShzZXJ2ZXJEYXRlKVxuICAgICAgdGhpcy5ub3cgPSB0aGlzLmRhdGUuZ2V0VGltZSgpXG4gICAgICB0aGlzLmRpZmZlcmVuY2UgPSB0aGlzLnRhcmdldFRpbWUgLSB0aGlzLm5vd1xuICAgICAgdGhpcy5kaWZmZXJlbmNlID0gdGhpcy5kaWZmZXJlbmNlIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpXG5cbiAgICAgIHRoaXMuZGF5cyA9IE1hdGguZmxvb3IodGhpcy5kaWZmZXJlbmNlKVxuICAgICAgdGhpcy5ob3VycyA9IDIzIC0gdGhpcy5kYXRlLmdldEhvdXJzKClcbiAgICAgIHRoaXMubWludXRlcyA9IDYwIC0gdGhpcy5kYXRlLmdldE1pbnV0ZXMoKVxuICAgICAgdGhpcy5zZWNvbmRzID0gNjAgLSB0aGlzLmRhdGUuZ2V0U2Vjb25kcygpXG4gICAgICBOdW1iZXIodGhpcy5ob3VycylcbiAgICAgICFpc05hTih0aGlzLmRheXMpXG4gICAgICAgID8gKHRoaXMuZGF5cyA9IE1hdGguZmxvb3IodGhpcy5kaWZmZXJlbmNlKSlcbiAgICAgICAgOiAodGhpcy5kYXlzID0gYDxpbWcgc3JjPVwiaHR0cHM6Ly9pLmdpZmVyLmNvbS9WQXlSLmdpZlwiIC8+YClcblxuICAgICAgdGltZXJMb2NhbCA9IHtcbiAgICAgICAgZGF5czogdGhpcy5kYXlzLFxuICAgICAgICBob3VyczogdGhpcy5ob3VycyxcbiAgICAgICAgbWluOiB0aGlzLm1pbnV0ZXMsXG4gICAgICAgIHNlY29uZHM6IHRoaXMuc2Vjb25kcyxcbiAgICAgIH1cbiAgICAgIHRoaXMudGltZXJTZXJ2aWNlLnNldFRpbWVyRGF0YSh0aW1lckxvY2FsKVxuICAgIH1cbiAgfVxuXG4gIGdldCBzaG93RGlzYWJsZU1zZygpIHtcbiAgICBjb25zdCBhbGxCYXRjaGVzID0gdGhpcy5iYXRjaERhdGEuY29udGVudFxuICAgIGNvbnN0IHN0YXR1czogYW55ID0gW11cbiAgICBpZiAoYWxsQmF0Y2hlcykge1xuICAgICAgYWxsQmF0Y2hlcy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaGFuZGxlRW5yb2xsbWVudEVuZERhdGUoZWxlKSB8fCB0aGlzLmRpc2FibGVFbnJvbGxCdG4pIHtcbiAgICAgICAgICBzdGF0dXMucHVzaChlbGUpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXR1cm4gc3RhdHVzLmxlbmd0aCA9PT0gYWxsQmF0Y2hlcy5sZW5ndGhcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBnZXQgZmluZE1lc3NhZ2UoKSB7XG4gICAgaWYgKHRoaXMuc2hvd0Rpc2FibGVNc2cpIHtcbiAgICAgIGNvbnN0IG1zZyA9IHRoaXMuV0ZTVEFUVVNfTVNHX01BUFBJTkcuRVhQSVJFRFxuICAgICAgcmV0dXJuIHRoaXMudG9jQ29uZmlnW21zZ11cbiAgICB9XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBvbkNsaWNrT2ZTaGFyZSgpIHtcbiAgICB0aGlzLmVuYWJsZVNoYXJlID0gdHJ1ZVxuICAgIHRoaXMucmFpc2VUZWxlbWV0cnkoJ3NoYXJlQ29udGVudCcpXG4gIH1cblxuICBhZGQoZXZlbnQ6IE1hdENoaXBJbnB1dEV2ZW50KTogdm9pZCB7XG4gICAgLy8gdGhpcy5nZXRVc2Vyc1RvU2hhcmUoZXZlbnQudmFsdWUpXG4gICAgaWYgKGV2ZW50LnZhbHVlICYmIHRoaXMubWF0QXV0b2NvbXBsZXRlICYmICF0aGlzLm1hdEF1dG9jb21wbGV0ZS5pc09wZW4pIHtcbiAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQuaW5wdXRcbiAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudmFsdWVcbiAgICAgIGlmICh0aGlzLnVzZXJzLmxlbmd0aCA9PT0gdGhpcy5tYXhFbWFpbHNMaW1pdCkge1xuICAgICAgICB0aGlzLm9wZW5TbmFja2Jhcih0aGlzLnRyYW5zbGF0ZUxhYmVscygnbWF4TGltaXQnLCAnY29udGVudFNoYXJpbmcnLCAnJykpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHRoaXMudXNlcnMuaW5jbHVkZXModmFsdWUudHJpbSgpKSkge1xuICAgICAgICB0aGlzLm9wZW5TbmFja2Jhcih0aGlzLnRyYW5zbGF0ZUxhYmVscygnZHVsaWNhdGVFbWFpbCcsICdjb250ZW50U2hhcmluZycsICcnKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgY29uc3QgZVBhdHRlcm4gPSBuZXcgUmVnRXhwKC9eKD8hLipcXC5cXC4pKD8hLipcXC5fKSg/IS4qXFwuX1xcLikoPyEuKlxcLlxcLiQpKD8hLipcXC4kKVthLXpBLVowLTlfXSsoPzpcXC5bYS16QS1aMC05X10rKSpAKD86W2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV0qW2EtekEtWjAtOV0pP1xcLikrW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV0qW2EtekEtWjAtOV0pPyQvKVxuICAgICAgaWYgKGVQYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIGlmICgodmFsdWUgfHwgJycpLnRyaW0oKSkge1xuICAgICAgICAgIHRoaXMudXNlcnMucHVzaCh2YWx1ZS50cmltKCkpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgaW5wdXQudmFsdWUgPSAnJ1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlckN0cmwuc2V0VmFsdWUoJycpXG4gICAgICAgIGNvbnN0IGVsOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtYXQtY2hpcC1saXN0LXdyYXBwZXInKVxuICAgICAgICBpZiAoZWwgIT0gbnVsbCkge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgZWxbMF0uc2Nyb2xsVG9wID0gZWxbMF0uc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgfSwgMjAwKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9wZW5TbmFja2Jhcih0aGlzLnRyYW5zbGF0ZUxhYmVscygnaW52YWxpZEVtYWlsJywgJ2NvbnRlbnRTaGFyaW5nJywgJycpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZW1vdmUodXNlcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnVzZXJzLmluZGV4T2YodXNlcilcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLnVzZXJzLnNwbGljZShpbmRleCwgMSlcbiAgICB9XG4gIH1cblxuICBzZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVzZXJzLmxlbmd0aCA9PT0gdGhpcy5tYXhFbWFpbHNMaW1pdCkge1xuICAgICAgdGhpcy5vcGVuU25hY2tiYXIodGhpcy50cmFuc2xhdGVMYWJlbHMoJ21heExpbWl0JywgJ2NvbnRlbnRTaGFyaW5nJywgJycpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh0aGlzLnVzZXJzLmluY2x1ZGVzKGV2ZW50Lm9wdGlvbi52YWx1ZSkpIHtcbiAgICAgIHRoaXMub3BlblNuYWNrYmFyKHRoaXMudHJhbnNsYXRlTGFiZWxzKCdkdWxpY2F0ZVVzZXInLCAnY29udGVudFNoYXJpbmcnLCAnJykpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy51c2Vycy5wdXNoKGV2ZW50Lm9wdGlvbi52YWx1ZSlcbiAgICBpZiAodGhpcy51c2VySW5wdXQpIHtcbiAgICAgIHRoaXMudXNlcklucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJ1xuICAgIH1cbiAgICB0aGlzLnVzZXJDdHJsLnNldFZhbHVlKCcnKVxuICAgIGNvbnN0IGVsOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtYXQtY2hpcC1saXN0LXdyYXBwZXInKVxuICAgIGlmIChlbCAhPSBudWxsKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWxbMF0uc2Nyb2xsVG9wID0gZWxbMF0uc2Nyb2xsSGVpZ2h0XG4gICAgICB9LCAyMDApXG4gICAgfVxuICB9XG5cbiAgZmlsdGVyU2hhcmVkVXNlcnModmFsdWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKVxuICAgICAgcmV0dXJuIHRoaXMuYWxsVXNlcnMuZmlsdGVyKHVzZXIgPT4gdXNlci5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKVxuICAgIH1cbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHN1Ym1pdFNoYXJpbmcoKSB7XG4gICAgbGV0IGNvdXJzZUlkID0gJydcbiAgICBsZXQgY291cnNlTmFtZSA9ICcnXG4gICAgbGV0IGNvdXJzZVBvc3RlckltYWdlVXJsID0gJydcbiAgICBsZXQgY291cnNlUHJvdmlkZXIgPSAnJ1xuICAgIGxldCBwcmltYXJ5Q2F0ZWdvcnkgPSAnJ1xuICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSkge1xuICAgICAgY291cnNlUHJvdmlkZXIgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5yb290T3JnTmFtZSB8fCAnJ1xuICAgIH1cbiAgICBpZiAodGhpcy5jb250ZW50KSB7XG4gICAgICBjb3Vyc2VJZCA9IHRoaXMuY29udGVudC5pZGVudGlmaWVyLFxuICAgICAgICBjb3Vyc2VOYW1lID0gdGhpcy5jb250ZW50Lm5hbWUsXG4gICAgICAgIGNvdXJzZVBvc3RlckltYWdlVXJsID0gdGhpcy5jb250ZW50LnBvc3RlckltYWdlIHx8ICcnLFxuICAgICAgICBwcmltYXJ5Q2F0ZWdvcnkgPSB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5XG4gICAgfVxuICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgY291cnNlSWQsXG4gICAgICAgIGNvdXJzZU5hbWUsXG4gICAgICAgIGNvdXJzZVBvc3RlckltYWdlVXJsLFxuICAgICAgICBjb3Vyc2VQcm92aWRlcixcbiAgICAgICAgcHJpbWFyeUNhdGVnb3J5LFxuICAgICAgICByZWNpcGllbnRzOiAnJyxcbiAgICAgIH0sXG4gICAgfVxuICAgIGNvbnN0IHJlY2lwaWVudHM6IGFueSA9IFtdXG4gICAgdGhpcy51c2Vycy5mb3JFYWNoKChzZWxlY3RlZFVzZXI6IGFueSkgPT4ge1xuICAgICAgaWYgKHNlbGVjdGVkVXNlci5pbmNsdWRlcygnQCcpICYmIHNlbGVjdGVkVXNlci5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgIHJlY2lwaWVudHMucHVzaCh7IGVtYWlsOiBzZWxlY3RlZFVzZXIgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVXNlck9iajogYW55ID0gdGhpcy5hbGxVc2Vycy5maWx0ZXIodXNlciA9PiB1c2VyLm5hbWUgPT09IHNlbGVjdGVkVXNlcilcbiAgICAgICAgaWYgKHNlbGVjdGVkVXNlck9iai5sZW5ndGgpIHtcbiAgICAgICAgICByZWNpcGllbnRzLnB1c2goeyB1c2VySWQ6IHNlbGVjdGVkVXNlck9ialswXS5pZCwgZW1haWw6IHNlbGVjdGVkVXNlck9ialswXS5lbWFpbCB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9KVxuICAgIGlmIChyZWNpcGllbnRzLmxlbmd0aCkge1xuICAgICAgb2JqLnJlcXVlc3QucmVjaXBpZW50cyA9IHJlY2lwaWVudHNcbiAgICAgIHRoaXMudG9jU3ZjLnNoYXJlQ29udGVudChvYmopLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICBpZiAocmVzdWx0LnJlc3BvbnNlQ29kZSA9PT0gJ09LJykge1xuICAgICAgICAgIHRoaXMub3BlblNuYWNrYmFyKHRoaXMudHJhbnNsYXRlTGFiZWxzKCdzdWNjZXNzJywgJ2NvbnRlbnRTaGFyaW5nJywgJycpKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXNlcnMgPSBbXVxuICAgICAgICB0aGlzLmZpbHRlcmVkVXNlcnMgPSBbXVxuICAgICAgICB0aGlzLmFsbFVzZXJzID0gW11cbiAgICAgICAgdGhpcy5lbmFibGVTaGFyZSA9IGZhbHNlXG4gICAgICAgIHRoaXMudXNlckN0cmwuc2V0VmFsdWUoJycpXG4gICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgICAgICB0aGlzLm9wZW5TbmFja2Jhcih0aGlzLnRyYW5zbGF0ZUxhYmVscygnZXJyb3InLCAnY29udGVudFNoYXJpbmcnLCAnJykpXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQ2xvc2UoKSB7XG4gICAgdGhpcy5lbmFibGVTaGFyZSA9IGZhbHNlXG4gICAgdGhpcy51c2VycyA9IFtdXG4gICAgdGhpcy5maWx0ZXJlZFVzZXJzID0gW11cbiAgICB0aGlzLmFsbFVzZXJzID0gW11cbiAgICB0aGlzLnVzZXJDdHJsLnNldFZhbHVlKCcnKVxuICAgIHRoaXMucmFpc2VUZWxlbWV0cnkoJ3NoYXJlQ2xvc2UnKVxuICB9XG5cbiAgY29weVRvQ2xpcGJvYXJkKCkge1xuICAgIGNvbnN0IHRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKVxuICAgIHRleHRBcmVhLnZhbHVlID0gd2luZG93LmxvY2F0aW9uLmhyZWZcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRleHRBcmVhKVxuICAgIC8vdGV4dEFyZWEuZm9jdXMoKVxuICAgIHRleHRBcmVhLnNlbGVjdCgpXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKVxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGV4dEFyZWEpXG4gICAgdGhpcy5vcGVuU25hY2tiYXIodGhpcy50cmFuc2xhdGVMYWJlbHMoJ2xpbmtDb3BpZWQnLCAnY29udGVudFNoYXJpbmcnLCAnJykpXG4gICAgdGhpcy5yYWlzZVRlbGVtZXRyeSgnY29weVRvQ2xpcGJvYXJkJylcbiAgfVxuXG4gIHJhaXNlVGVsZW1ldHJ5KHN1YlR5cGU6IGFueSkge1xuICAgIHRoaXMuZXZlbnRzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdjbGljaycsXG4gICAgICAgIHN1YlR5cGU6IHN1YlR5cGUsXG4gICAgICAgIGlkOiB0aGlzLmNvbnRlbnQgPyB0aGlzLmNvbnRlbnQuaWRlbnRpZmllciA6ICcnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5pZGVudGlmaWVyIDogJycsXG4gICAgICAgIHR5cGU6IHRoaXMuY29udGVudCA/IHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgOiAnJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBhZ2VJZEV4dDogYGJ0bi0ke3N1YlR5cGV9YCxcbiAgICAgICAgbW9kdWxlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5bW9kdWxlcy5DT05URU5ULFxuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIHRyYW5zbGF0ZUxhYmVscyhsYWJlbDogc3RyaW5nLCB0eXBlOiBhbnksIHN1YnR5cGU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmxhbmd0cmFuc2xhdGlvbnMudHJhbnNsYXRlQWN0dWFsTGFiZWwobGFiZWwsIHR5cGUsIHN1YnR5cGUpXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnRvY1N2Yy5hbmFseXRpY3NGZXRjaFN0YXR1cyA9ICdub25lJ1xuICAgIGlmICh0aGlzLnJvdXRlclBhcmFtU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJvdXRlclBhcmFtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICB9XG4gICAgaWYgKHRoaXMucm91dGVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucm91dGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICBpZiAodGhpcy5iYXRjaFdGRGF0YVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5iYXRjaFdGRGF0YVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkQmF0Y2hTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRCYXRjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgfVxuICAgIGlmICh0aGlzLnRpbWVySW50ZXJ2YWxDbGVhcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVySW50ZXJ2YWxDbGVhcik7XG4gICAgICAvLyB0aGlzLnRpbWVySW50ZXJ2YWxDbGVhci51bnN1YnNjcmliZSgpXG4gICAgICB0aGlzLnRhcmdldFRpbWUgPSAnJ1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlbGVjdGVkQmF0Y2hTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuYmF0Y2hDb250cm9sVW5zdWJzY3JpYmUudW5zdWJzY3JpYmUoKVxuICAgIH1cbiAgICB0aGlzLmJhdGNoQ29udHJvbC5zZXRWYWx1ZSh7fSlcbiAgICB0aGlzLmJhdGNoQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB0aGlzLnNlbGVjdGVkQmF0Y2ggPSB7fVxuICB9XG5cbiAgdHJhbnNsYXRlTGFiZWwobGFiZWw6IHN0cmluZywgdHlwZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ3RyYW5zbGF0aW9ucy50cmFuc2xhdGVMYWJlbChsYWJlbCwgdHlwZSwgJycpXG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJoZWFkZXItc3lub3BzaXMgZml4ZWQtd2lkdGggbWFyZ2luLXRvcC14bFwiIFtuZ0NsYXNzXT1cInsgJ2hlYWRlci1zeW5vcHNpcy1ncmFkaWVudCc6IGJhbm5lclVybCB9XCJcbiAgKm5nSWY9XCJzaG93XCI+XG4gIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXgtYXV0b1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZSBmbGV4LWNvbCBzbTpmbGV4LXJvd1wiPlxuICAgICAgICA8IS0tIGltYWdlIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGVudD8ucG9zdGVySW1hZ2VcIiBjbGFzcz1cImZsb2F0LWxlZnRcIj5cbiAgICAgICAgICA8aW1nIFtzcmNdPVwiY29udGVudD8ucG9zdGVySW1hZ2UgfCBwaXBlUHVibGljVVJMXCIgW2lkXT1cIidzb3VyY2VfJyArIGNvbnRlbnQuaWRlbnRpZmllclwiIGNsYXNzPVwiYXBwLWljb25cIlxuICAgICAgICAgICAgW3dzVXRpbHNEZWZhdWx0VGh1bWJuYWlsXT1cImRlZmF1bHRTTG9nb1wiIFthbHRdPVwiY29udGVudC5zb3VyY2VOYW1lIHx8IGlHT1RcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFjb250ZW50Py5wb3N0ZXJJbWFnZVwiIGNsYXNzPVwiZmxvYXQtbGVmdFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5hcHBJY29uOyBlbHNlIGRlZmF1bHRJbWdcIj5cbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJjb250ZW50Py5hcHBJY29uIHwgcGlwZVB1YmxpY1VSTFwiIFtpZF09XCInc291cmNlXycgKyBjb250ZW50LmlkZW50aWZpZXJcIiBjbGFzcz1cImFwcC1pY29uXCJcbiAgICAgICAgICAgICAgW3dzVXRpbHNEZWZhdWx0VGh1bWJuYWlsXT1cImRlZmF1bHRTTG9nb1wiIFthbHRdPVwiY29udGVudC5zb3VyY2VOYW1lIHx8IGlHT1RcIiAvPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEltZz5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbnN0YW5jZXMvZWFnbGUvYXBwX2xvZ29zL2RlZmF1bHQucG5nXCIgW2lkXT1cIidzb3VyY2VfJyArIGNvbnRlbnQuaWRlbnRpZmllclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXBwLWljb25cIiBbYWx0XT1cImNvbnRlbnQuc291cmNlTmFtZSB8fCBpR09UXCIgLz5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNtOm1sLTUgZmxleCBmbGV4LWF1dG9cIiBbaWRdPVwiJ20tYy0nKyBjb250ZW50LmlkZW50aWZpZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic206bWwtNSBmbGV4IGZsZXgtY29sIGZsZXgtYXV0b1wiPlxuICAgICAgICAgICAgPGgxIGNsYXNzPVwibWF0LWhlYWRsaW5lIG1hcmdpbi1yZW1vdmUtYm90dG9tIHBhZGRpbmctYm90dG9tLXhzIGhpZGRlbiBzbTpibG9ja1wiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCJjb250ZW50UmVhZERhdGE/Lm5hbWVcIj5cbiAgICAgICAgICAgICAge3sgY29udGVudFJlYWREYXRhPy5uYW1lIH19XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdC1yaWdodCBjdXJzb3ItcG9pbnRlciBmbGV4XCIgKGNsaWNrKT1cIm9uQ2xpY2tPZlNoYXJlKClcIiAqbmdJZj1cImNhblNoYXJlXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwid3MtbWF0LWFjY2VudC10ZXh0IHBhZGRpbmctdG9wLXhzXCI+c2hhcmU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8aDEgY2xhc3M9XCJtYXQtaGVhZGxpbmUgbWFyZ2luLXJlbW92ZS1ib3R0b20gcGFkZGluZy1ib3R0b20teHMgYmxvY2sgc206aGlkZGVuXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbnRlbnRSZWFkRGF0YT8ubmFtZVwiPlxuICAgICAgICAgICAgICB7eyBjb250ZW50UmVhZERhdGE/Lm5hbWUgfX1cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbnRlbnRQcm9ncmVzcyA9PT0gMVwiIGNsYXNzPVwibWFyZ2luLWxlZnQtc1wiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ3cy1tYXQtYWNjZW50LXRleHRcIj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbnRlbnQ/LnByaW1hcnlDYXRlZ29yeVwiIGNsYXNzPVwiYXBJY29uIGZsb2F0LWxlZnQgbWItNFwiPlxuICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaWNvbnMvY29udGVudC9jb3Vyc2Uuc3ZnXCIgW2lkXT1cIidzb3VyY2VfJyArIGNvbnRlbnQuaWRlbnRpZmllclwiIGNsYXNzPVwic291cmNlLWljb25cIlxuICAgICAgICAgICAgICAgIFt3c1V0aWxzRGVmYXVsdFRodW1ibmFpbF09XCJkZWZhdWx0U0xvZ29cIiBbYWx0XT1cImNvbnRlbnQuc291cmNlTmFtZSB8fCBpR09UXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdHJhbnNsYXRlTGFiZWwoY29udGVudD8ucHJpbWFyeUNhdGVnb3J5LCAnc2VhcmNoZmlsdGVycycpIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGVudD8uYXBwSWNvblwiIGNsYXNzPVwiYXBJY29uIGZsb2F0LWxlZnQgbWItNFwiPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiY29udGVudD8uY3JlYXRvckxvZ28gfCBwaXBlUHVibGljVVJMXCIgW2lkXT1cIidzb3VyY2VfJyArIGNvbnRlbnQuaWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzb3VyY2UtaWNvblwiIFt3c1V0aWxzRGVmYXVsdFRodW1ibmFpbF09XCJkZWZhdWx0U0xvZ29cIiBbYWx0XT1cImNvbnRlbnQuc291cmNlTmFtZSB8fCBpR09UXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbbmdTd2l0Y2hdPVwicm91dGVQYXRoXCIgY2xhc3M9XCJoZWFkZXItbWV0YVwiIFtuZ0NsYXNzXT1cInsgJ2hlYWRlci1tZXRhLWJhbm5lcic6IGJhbm5lclVybCB9XCI+XG4gICAgICAgICAgICAgIDwhLS0gT3ZlcnZpZXcgU2VjdGlvbiAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhbm5lci1vdmVydmlldy1jb250YWluZXJcIiBbaGlkZGVuXT1cIiFjb250ZW50Py5wdXJwb3NlICYmIHNob3dTdWJ0aXRsZU9uQmFubmVyXCJcbiAgICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ292ZXJ2aWV3J1wiPlxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm92ZXJ2aWV3LWRlc2NyaXB0aW9uIG1hdC1ib2R5LTFcIiAqbmdJZj1cInNob3dTdWJ0aXRsZU9uQmFubmVyXCIgaTE4bi10aXRsZSB0aXRsZT1cIlN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICB7eyBjb250ZW50Py5zb3VyY2UgfCBwaXBlTGltaXRUbzogMjUwIH19XG4gICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm92ZXJ2aWV3LWRlc2NyaXB0aW9uIG1hdC1ib2R5LTFcIiAqbmdJZj1cIiFzaG93U3VidGl0bGVPbkJhbm5lclwiIGkxOG4tdGl0bGUgdGl0bGU9XCJEZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAge3sgY29udGVudD8uaW5zdHJ1Y3Rpb25zIHwgcGlwZUxpbWl0VG86IDQ1MCB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2FuaXRpemVkSW50cm9kdWN0b3J5VmlkZW9JY29uXCIgY2xhc3M9XCJvdmVydmlldy1pbnRybyB3cy1tYXQtcHJpbWFyeS1saXRlLWJhY2tncm91bmRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRJbWFnZV09XCJzYW5pdGl6ZWRJbnRyb2R1Y3RvcnlWaWRlb0ljb25cIiByb2xlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInBsYXlJbnRyb1ZpZGVvKClcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCJvdmVydmlldy1pbnRyby1vdmVybGF5XCI+cGxheV9hcnJvdzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8IS0tIFRvYyBTZWN0aW9uIC0tPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInY29udGVudHMnXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBDb250ZW50cyBCYW5uZXIgLS0+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8IS0tIEFuYWx5dGljcyBTZWN0aW9uIC0tPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFubmVyLW92ZXJ2aWV3LWNvbnRhaW5lciBtYXQtYm9keS0xXCIgW2hpZGRlbl09XCIhY29udGVudD8ucHVycG9zZSAmJiBzaG93U3VidGl0bGVPbkJhbm5lclwiXG4gICAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidhbmFseXRpY3MnXCI+XG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwib3ZlcnZpZXctZGVzY3JpcHRpb24gbWF0LWJvZHktMVwiICpuZ0lmPVwic2hvd1N1YnRpdGxlT25CYW5uZXJcIiBpMThuLXRpdGxlIHRpdGxlPVwiU3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGNvbnRlbnQ/LnB1cnBvc2UgfCBwaXBlTGltaXRUbzogMjUwIH19XG4gICAgICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm92ZXJ2aWV3LWRlc2NyaXB0aW9uIG1hdC1ib2R5LTFcIiAqbmdJZj1cIiFzaG93U3VidGl0bGVPbkJhbm5lclwiIGkxOG4tdGl0bGUgdGl0bGU9XCJEZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgICAgICAge3sgY29udGVudD8uaW5zdHJ1Y3Rpb25zIHwgcGlwZUxpbWl0VG86IDQ1MCB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2FuaXRpemVkSW50cm9kdWN0b3J5VmlkZW9JY29uXCIgY2xhc3M9XCJvdmVydmlldy1pbnRybyB3cy1tYXQtcHJpbWFyeS1saXRlLWJhY2tncm91bmRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRJbWFnZV09XCJzYW5pdGl6ZWRJbnRyb2R1Y3RvcnlWaWRlb0ljb25cIiByb2xlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInBsYXlJbnRyb1ZpZGVvKClcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCJvdmVydmlldy1pbnRyby1vdmVybGF5XCI+cGxheV9hcnJvdzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGVudD8uYXZlcmFnZVJhdGluZ1wiIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcmF0aW5nIG1hcmdpbi1ib3R0b20tbVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJhdGluZy1udW1iZXIgbWF0LWJvZHktMlwiPnt7IGNvbnRlbnQ/LmF2ZXJhZ2VSYXRpbmcgfX0mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uIG1hdGVyaWFsLWljb25zXCIgKm5nRm9yPVwibGV0IHJhdGluZyBvZiBbMSwgMiwgMywgNCwgNV1cIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRSYXRpbmdJY29uKHJhdGluZykgfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hcmdpbi1sZWZ0LXhzIHJhdGluZy1jb3VudCBtYXQtYm9keS0yXCIgKm5nSWY9XCJjb250ZW50Py50b3RhbFJhdGluZ1wiPlxuICAgICAgICAgICAgICAgICgge3sgY29udGVudD8udG90YWxSYXRpbmcgfCBwaXBlQ291bnRUcmFuc2Zvcm0gfX0gKTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjb250ZW50Py5hdmVyYWdlUmF0aW5nXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciByYXRpbmcgbWFyZ2luLWJvdHRvbS1tXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmF0aW5nLW51bWJlciBtYXQtYm9keS0yXCI+IDAuMCAmbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uIG1hdGVyaWFsLWljb25zXCIgKm5nRm9yPVwibGV0IHJhdGluZyBvZiBbMSwgMiwgMywgNCwgNV1cIj5cbiAgICAgICAgICAgICAgICB7eyBnZXRSYXRpbmdJY29uKHJhdGluZykgfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hcmdpbi1sZWZ0LXhzIHJhdGluZy1jb3VudCBtYXQtYm9keS0yXCIgKm5nSWY9XCIhY29udGVudD8udG90YWxSYXRpbmdcIj5cbiAgICAgICAgICAgICAgICAoIHt7IDAgfCBwaXBlQ291bnRUcmFuc2Zvcm0gfX0gKTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSB0YWdzIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhZ3MgbWFyZ2luLWJvdHRvbS1zXCIgKm5nSWY9XCJjb250ZW50Py5rZXl3b3JkcyAmJiBjb250ZW50Py5rZXl3b3Jkcz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgdGFnIG9mIGNvbnRlbnQua2V5d29yZHNcIiBjbGFzcz1cInRhZ1wiPlxuICAgICAgICAgICAgICAgIHt7dGFnfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG48bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudD8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNXCI+XG4gIDxkaXYgY2xhc3M9XCJiYXRjaC1kaXZcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmVxdWVzdC1ibG9ja1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJiYXRjaERyb3Bkb3duXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiYmF0Y2hEYXRhICYmICFiYXRjaERhdGE/LmVucm9sbGVkICAmJiBiYXRjaERhdGE/LndvcmtGbG93Py53ZkluaXRpYXRlZCAmJlxuICAgICAgICAoYmF0Y2hEYXRhPy53b3JrRmxvdz8ud2ZJdGVtPy5jdXJyZW50U3RhdHVzICE9PSBXRkJsZW5kZWRQcm9ncmFtU3RhdHVzLlJFSkVDVEVEKSAmJiAoYmF0Y2hEYXRhPy53b3JrRmxvdz8ud2ZJdGVtPy5jdXJyZW50U3RhdHVzICE9PSBXRkJsZW5kZWRQcm9ncmFtU3RhdHVzLlJFTU9WRUQpICYmXG4gICAgICAgIChiYXRjaERhdGE/LndvcmtGbG93Py53Zkl0ZW0/LmN1cnJlbnRTdGF0dXMgIT09IFdGQmxlbmRlZFByb2dyYW1TdGF0dXMuV0lUSERSQVdOKSAmJlxuICAgICAgICAoYmF0Y2hEYXRhPy53b3JrRmxvdz8ud2ZJdGVtPy5jdXJyZW50U3RhdHVzICE9PSBXRkJsZW5kZWRQcm9ncmFtU3RhdHVzLkFQUFJPVkVEKSAmJiBiYXRjaERhdGE/LmNvbnRlbnQ/Lmxlbmd0aFwiPlxuICAgICAgICA8cCBjbGFzcz1cIm1hcmdpbi1yZW1vdmUtYm90dG9tIG1hdC1ib2R5LTEgcGFkZGluZy1tIGJnLXdoaXRlXCI+XG4gICAgICAgICAge3tiYXRjaERhdGE/LndvcmtGbG93Py5iYXRjaD8ubmFtZX19IC0gKHt7YmF0Y2hEYXRhPy53b3JrRmxvdz8uYmF0Y2g/LnN0YXJ0RGF0ZSB8IGRhdGU6ICdkZC1NTS15eXl5J319IC1cbiAgICAgICAgICB7e2JhdGNoRGF0YT8ud29ya0Zsb3c/LmJhdGNoPy5lbmREYXRlIHwgZGF0ZTogJ2RkLU1NLXl5eXknIHx8ICdwcmVzZW50J319KVxuICAgICAgICA8L3A+XG4gICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIndpdGhkcmF3LWJhdGNoXCIgKGNsaWNrKT1cIiFkaXNhYmxlV2l0aGRyYXduQnRuICYmIHJlcXVlc3RUb1dpdGhkcmF3RGlhbG9nKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVXaXRoZHJhd25CdG5cIiBbbmdDbGFzc109XCJ7ICdkaXNhYmxlLWJ0bic6IGRpc2FibGVXaXRoZHJhd25CdG4gfVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj4ge3sgJ2FwcHRvY2Jhbm5lci53aXRoRHJhd1lvdXJSZXF1ZXN0JyB8IHRyYW5zbGF0ZSB9fSA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJiYXRjaERhdGEgJiYgYmF0Y2hEYXRhPy5lbnJvbGxlZCAmJiBiYXRjaERhdGE/LmNvbnRlbnQ/Lmxlbmd0aFwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJtYXJnaW4tcmVtb3ZlLWJvdHRvbSBwLTQgYmctd2hpdGUgbWF0LWJvZHktMVwiICpuZ0Zvcj1cImxldCBiYXRjaCBvZiBiYXRjaERhdGEuY29udGVudFwiPlxuICAgICAgICAgIHt7YmF0Y2g/Lm5hbWV9fSAoe3tiYXRjaD8uc3RhcnREYXRlIHwgZGF0ZTogJ2RkLU1NLXl5eXknIH19IC0ge3tiYXRjaD8uZW5kRGF0ZSB8IGRhdGU6ICdkZC1NTS15eXl5JyB8fFxuICAgICAgICAgICdwcmVzZW50J319KVxuICAgICAgICA8L2gzPlxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN0YXR1c01zZ1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmF0Y2hEYXRhICYmICFiYXRjaERhdGE/LmVucm9sbGVkICYmICFiYXRjaERhdGE/LmNvbnRlbnQ/Lmxlbmd0aFwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJtYXJnaW4tcmVtb3ZlLWJvdHRvbSBtYXQtYm9keS0yIHdzLWRlZmF1bHQtdGV4dFwiPlxuICAgICAgICAgIE5vIGJhdGNoZXNcbiAgICAgICAgPC9oMz5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImJhdGNoRGF0YSAmJiBiYXRjaERhdGE/LmNvbnRlbnQ/Lmxlbmd0aCAmJiBiYXRjaERhdGE/LmNvbnRlbnRbMF0/LmJhdGNoQXR0cmlidXRlcz8uYmF0Y2hMb2NhdGlvbkRldGFpbHNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBsb2NhdGlvbi13cmFwcGVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibG9jYXRpb24taWNvblwiPlxuICAgICAgICAgICAgbG9jYXRpb25fb248L21hdC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxvYy1kZXRhaWxzXCI+XG4gICAgICAgICAgICB7e2JhdGNoRGF0YT8uY29udGVudFswXT8uYmF0Y2hBdHRyaWJ1dGVzPy5iYXRjaExvY2F0aW9uRGV0YWlsc319XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+IC0tPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJhdGNoRGF0YSAmJiAhYmF0Y2hEYXRhPy5lbnJvbGxlZCAmJiBiYXRjaERhdGE/LmNvbnRlbnQ/Lmxlbmd0aFwiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic3RhdHVzTXNnXCI+PC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50Py5jb3Vyc2VDYXRlZ29yeSA9PT0gbnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5NT0RFUkFURURfUFJPR1JBTVwiPlxuICA8ZGl2IGNsYXNzPVwicmVxdWVzdC1iYXRjaFwiPlxuICAgIDxkaXYgY2xhc3M9XCJiYXRjaC1kaXZcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiYmF0Y2hEcm9wZG93blwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuPCEtLSA8ZGl2IGNsYXNzPVwiaGVhZGVyLXN5bm9wc2lzIGZpeGVkLXdpZHRoIG1hcmdpbi10b3AtbFwiIFtuZ0NsYXNzXT1cInsgJ2hlYWRlci1zeW5vcHNpcy1ncmFkaWVudCc6IGJhbm5lclVybCB9XCIgKm5nSWY9XCJjb250ZW50ICYmIGJhdGNoQ29udHJvbD8udmFsdWU/LmJhdGNoQXR0cmlidXRlcz8uYmF0Y2hMb2NhdGlvbkRldGFpbHNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnQ/LnByaW1hcnlDYXRlZ29yeSA9PT0gcHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTVwiPlxuICAgIDxoMj57eydhcHB0b2NiYW5uZXIuYmF0Y2hMb2NhdGlvbicgfCB0cmFuc2xhdGV9fTwvaDI+XG4gICAgPHA+e3tiYXRjaENvbnRyb2w/LnZhbHVlPy5iYXRjaEF0dHJpYnV0ZXM/LmJhdGNoTG9jYXRpb25EZXRhaWxzfX08L3A+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+IC0tPlxuXG48bWF0LW1lbnUgI2FjdGlvbk1lbnU9XCJtYXRNZW51XCI+XG4gIDxkaXYgbWF0LW1lbnUtaXRlbT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFjdGlvbnNcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L21hdC1tZW51PlxuXG48bmctdGVtcGxhdGUgI2FjdGlvbnM+XG4gIDxhIGkxOG4tYXJpYS1sYWJlbCBhcmlhLWxhYmVsPVwiVGFrZSBBY3Rpb25cIiBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCJyZXZpZXdCdXR0b25cIlxuICAgIFtyb3V0ZXJMaW5rXT1cIlsnL2F1dGhvci9lZGl0b3IvJyArIGNvbnRlbnQ/LmlkZW50aWZpZXJdXCI+XG4gICAgPG1hdC1pY29uPnB1Ymxpc2g8L21hdC1pY29uPlxuICA8L2E+XG4gIDx3cy13aWRnZXQtYnRuLWNvbnRlbnQtZG93bmxvYWQgaWQ9XCJwcmV2Zm9yZG93bmxvYWRcIiBbZm9yUHJldmlld109XCJmb3JQcmV2aWV3XCJcbiAgICBbd2lkZ2V0RGF0YV09XCJjb250ZW50IHwgcGlwZVBhcnRpYWxDb250ZW50IDogWydpZGVudGlmaWVyJywgJ2NvbnRlbnRUeXBlJywgJ3Jlc291cmNlVHlwZScsICdtaW1lVHlwZScsICdkb3dubG9hZFVybCcsICdpc0V4dGVybmFsJywgJ2FydGlmYWN0VXJsJ11cIj5cbiAgPC93cy13aWRnZXQtYnRuLWNvbnRlbnQtZG93bmxvYWQ+XG4gIDx3cy13aWRnZXQtYnRuLWNvbnRlbnQtc2hhcmUgaWQ9XCJwcmV2Zm9yc2hhcmVcIiBbZm9yUHJldmlld109XCJmb3JQcmV2aWV3XCIgW3dpZGdldERhdGFdPVwiY29udGVudFwiPlxuICA8L3dzLXdpZGdldC1idG4tY29udGVudC1zaGFyZT5cbiAgPHdzLXdpZGdldC1idG4ta2IgW2ZvclByZXZpZXddPVwiZm9yUHJldmlld1wiIGlkPVwicHJldlwiIFtjb250ZW50SWRdPVwiY29udGVudD8uaWRlbnRpZmllclwiXG4gICAgW2NvbnRlbnROYW1lXT1cImNvbnRlbnRSZWFkRGF0YT8ubmFtZVwiIFtjb250ZW50VHlwZV09XCJjb250ZW50Py5jb250ZW50VHlwZVwiIFtzdGF0dXNdPVwiY29udGVudD8uc3RhdHVzXCI+XG4gIDwvd3Mtd2lkZ2V0LWJ0bi1rYj5cbiAgPHdzLXdpZGdldC1idG4tZ29hbHMgW2ZvclByZXZpZXddPVwiZm9yUHJldmlld1wiIGlkPVwiZ29hbHNmb3JwcmV2XCIgKm5nSWY9XCJpc0dvYWxzRW5hYmxlZCAmJiBidG5Hb2Fsc0NvbmZpZ1wiXG4gICAgW3dpZGdldERhdGFdPVwiYnRuR29hbHNDb25maWdcIj5cbiAgPC93cy13aWRnZXQtYnRuLWdvYWxzPlxuICA8d3Mtd2lkZ2V0LWJ0bi1wbGF5bGlzdCBbZm9yUHJldmlld109XCJmb3JQcmV2aWV3XCIgaWQ9XCJwbGF5bGlzdGZvcnByZXZcIiAqbmdJZj1cImJ0blBsYXlsaXN0Q29uZmlnXCJcbiAgICBbd2lkZ2V0RGF0YV09XCJidG5QbGF5bGlzdENvbmZpZ1wiPlxuICA8L3dzLXdpZGdldC1idG4tcGxheWxpc3Q+XG4gIDx3cy13aWRnZXQtYnRuLWNvbnRlbnQtZmVlZGJhY2stdjIgW2ZvclByZXZpZXddPVwiZm9yUHJldmlld1wiIGlkPVwiZmVlZGJhY2tmb3JwcmV2XCJcbiAgICBbd2lkZ2V0RGF0YV09XCJjb250ZW50IHwgcGlwZVBhcnRpYWxDb250ZW50OiBbJ2lkZW50aWZpZXInLCAnbmFtZSddXCI+XG4gIDwvd3Mtd2lkZ2V0LWJ0bi1jb250ZW50LWZlZWRiYWNrLXYyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjYXV0aFZpZXc+e3snYXBwdG9jYmFubmVyLnZpZXcnIHwgdHJhbnNsYXRlfX08L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzdGF0dXNNc2c+XG4gIDxkaXYgY2xhc3M9XCJzdGF0dXMtY29udGFpbmVyIG10LTIgbWItMlwiXG4gICAgKm5nSWY9XCJjb250ZW50Py5wcmltYXJ5Q2F0ZWdvcnkgPT09IHByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0gJiYgYmF0Y2hEYXRhPy53b3JrRmxvdz8ud2ZJbml0aWF0ZWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleFwiICpuZ0lmPVwic2hvd01zZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dJY29uXCI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1yLTRcIiBbbmdDbGFzc109XCJpY29uQ29sb3JcIiAqbmdJZj1cIldGSWNvbiA9PT0gJ2NpcmNsZSdcIj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtci00IHdzLW1hdC1yZWQtdGV4dCB2aXNpYmlsaXR5LXNob3dcIiBzdHlsZT1cInRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XCJcbiAgICAgICAgICAqbmdJZj1cIldGSWNvbiA9PT0gJ2luZm8nXCI+aW5mbzwvbWF0LWljb24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYXQtYm9keS0xXCI+e3sgZ2V0V0ZNc2cgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJzdGF0dXMtY29udGFpbmVyIG10LTVcIlxuICAgICpuZ0lmPVwiY29udGVudD8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNICYmIHNob3dEaXNhYmxlTXNnICYmICFzaG93TXNnICYmIGZpbmRNZXNzYWdlLmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibXItMyB3cy1tYXQtcmVkLXRleHRcIiBzdHlsZT1cInRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XCI+aW5mbzwvbWF0LWljb24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYXQtYm9keS0xXCI+XG4gICAgICAgIDxwIGNsYXNzPVwibWFyZ2luLXJlbW92ZS1ib3R0b20gXCI+e3tmaW5kTWVzc2FnZX19PC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cInNoYXJlLWNvbnRhaW5lclwiICpuZ0lmPVwiZW5hYmxlU2hhcmVcIj5cbiAgPGRpdiAqbmdJZj1cInNob3dMb2FkZXJcIiBjbGFzcz1cInRleHQtY2VudGVyIG15LTIgbG9hZGVyXCI+XG4gICAgPG1hdC1zcGlubmVyIGNsYXNzPVwiaW5saW5lLWJsb2NrXCI+PC9tYXQtc3Bpbm5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBjbG9zZS1zaGFyZS1kaWFsb2dcIj48bWF0LWljb24gKGNsaWNrKT1cIm9uQ2xvc2UoKVwiIGNsYXNzPVwiY2xvc2UtaWNvblwiPmNsb3NlPC9tYXQtaWNvbj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInNoYXJlLW1vZGFsXCI+XG4gICAgPGRpdiBjbGFzcz1cImthcm1hc2FoYXlvZ2ktaWNvblwiPjxpbWcgYWx0PVwia2FybWFzYWhheW9naS1pY29uXCIgc3JjPVwiL2Fzc2V0cy9pY29ucy9LYXJtYVNhaGF5b2dpLnN2Z1wiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWRpdlwiPlxuICAgICAgPGRpdiBjbGFzcz1cInRyaWFuZ2xlLWxlZnQgaGlkZGVuIG1kOmJsb2NrXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udG5ldFwiPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInctZnVsbCBmbGV4IGFsaWduLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC1oZWFkbGluZSBtYXJnaW4tcmVtb3ZlLWJvdHRvbSB3cy1tYXQtYmxhY2stdGV4dFwiPnt7J2NvbnRlbnRTaGFyaW5nLmhlYWRlcicgfCB0cmFuc2xhdGV9fTwvaDI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzaGFyZUZvcm1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWJvZHktMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1kLTVcIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdCAjY2hpcExpc3QgYXJpYS1sYWJlbD1cInVzZXIgc2VsZWN0aW9uXCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgdXNlciBvZiB1c2Vyc1wiIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIiBbcmVtb3ZhYmxlXT1cInJlbW92YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIChyZW1vdmVkKT1cInJlbW92ZSh1c2VyKVwiPlxuICAgICAgICAgICAgICAgICAgICB7e3VzZXJ9fVxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZSAqbmdJZj1cInJlbW92YWJsZVwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdGFiaW5kZXg9XCItMVwiIGNsYXNzPVwiaW5wdXRUZXh0Qm94XCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e3VzZXJzLmxlbmd0aCA9PT0gMCA/IHRyYW5zbGF0ZUxhYmVscygncGxhY2Vob2RlclRleHQnLCAnY29udGVudFNoYXJpbmcnKSA6ICcnfX1cIlxuICAgICAgICAgICAgICAgICAgICAjdXNlcklucHV0IGZvcm1Db250cm9sTmFtZT1cInJldmlld1wiIFtmb3JtQ29udHJvbF09XCJ1c2VyQ3RybFwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RcIiBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwic2VwYXJhdG9yS2V5c0NvZGVzXCJcbiAgICAgICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEFkZE9uQmx1cl09XCJhZGRPbkJsdXJcIiAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiYWRkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Q+XG4gICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwic2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHVzZXIgb2YgZmlsdGVyZWRVc2Vyc1wiIFt2YWx1ZV09XCJ1c2VyLm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbkRpdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uVGV4dFwiPnt7dXNlci5pY29uVGV4dC5zdWJzdHJpbmcoMCwyKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7dXNlci5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbWFpbFRleHRcIj57e3VzZXIubWFza2VkRW1haWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgICAgICAgICAgPG1hdC1oaW50IGFsaWduPVwic3RhcnRcIiBjbGFzcz1cImxlZnQtb3Zlci1lbWFpbHNcIj57eydjb250ZW50U2hhcmluZy5ub3RlJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGludD5cbiAgICAgICAgICAgICAgICA8bWF0LWhpbnQgYWxpZ249XCJlbmRcIiBjbGFzcz1cImxlZnQtb3Zlci1lbWFpbHNcIj57eyB1c2Vycy5sZW5ndGggfX0gL3t7bWF4RW1haWxzTGltaXR9fVxuICAgICAgICAgICAgICAgICAge3snY29udGVudFNoYXJpbmcucmVtYWluZ0VtYWlscycgfCB0cmFuc2xhdGV9fTwvbWF0LWhpbnQ+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG10LTVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC0xIGZsZXgtZW5kXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3B5LWxpbmstYnRuIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNvcHlUb0NsaXBib2FyZCgpXCI+e3snY29udGVudFNoYXJpbmcuY29weUxpbmsnIHxcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19ICZuYnNwOyZuYnNwOzxtYXQtaWNvbj5saW5rPC9tYXQtaWNvbj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2Rpc2FibGUtc2VuZC1idG4nOiB1c2Vycy5sZW5ndGggPT09IDAgfHwgdXNlcnMubGVuZ3RofVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtd2hpdGUgd3MtbWF0LXByaW1hcnktYmFja2dyb3VuZCBmbGV4LWF1dG8tZGlzcGxheSBzZW5kLWJ0blwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidXNlckN0cmwudmFsdWUubGVuZ3RoIHx8IHVzZXJzLmxlbmd0aCA9PT0gMCB8fCB1c2Vycy5sZW5ndGggPiBtYXhFbWFpbHNMaW1pdFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic3VibWl0U2hhcmluZygpXCI+XG4gICAgICAgICAgICAgICAgICB7eydjb250ZW50U2hhcmluZy5zZW5kJyB8IHRyYW5zbGF0ZX19ICZuYnNwOyA8bWF0LWljb24+c2VuZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjYmF0Y2hEcm9wZG93bj5cbiAgPGZvcm0gY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC00XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJhdGNoRGF0YSAmJiAhYmF0Y2hEYXRhPy5lbnJvbGxlZFxuICAgICAgJiYgKCFiYXRjaERhdGEud29ya0Zsb3c/LndmSW5pdGlhdGVkIHx8IChiYXRjaERhdGEud29ya0Zsb3c/LndmSW5pdGlhdGVkICYmIGJhdGNoRGF0YT8ud29ya0Zsb3c/LndmSXRlbT8uY3VycmVudFN0YXR1cyA9PT0gV0ZCbGVuZGVkUHJvZ3JhbVN0YXR1cy5SRUpFQ1RFRCB8fCAgYmF0Y2hEYXRhPy53b3JrRmxvdz8ud2ZJdGVtPy5jdXJyZW50U3RhdHVzID09PSBXRkJsZW5kZWRQcm9ncmFtU3RhdHVzLldJVEhEUkFXTiB8fCBiYXRjaERhdGE/LndvcmtGbG93Py53Zkl0ZW0/LmN1cnJlbnRTdGF0dXMgPT09IFdGQmxlbmRlZFByb2dyYW1TdGF0dXMuUkVNT1ZFRCkpXG4gICAgICAmJiBiYXRjaERhdGE/LmNvbnRlbnQ/Lmxlbmd0aFwiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGwgYmF0Y2gtZm9ybS1maWVsZFwiPlxuICAgICAgICA8bWF0LXNlbGVjdCAjYmF0Y2hDb250cm9sRGF0YSBbZm9ybUNvbnRyb2xdPVwiYmF0Y2hDb250cm9sXCIgcmVxdWlyZWQgYXV0b1NlbGN0Rmlyc3RPcHRpb25cbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImJhdGNoQ2hhbmdlKCRldmVudClcIiBwYW5lbENsYXNzPVwiYmF0Y2gtZHJvcGRvd25cIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYmF0Y2ggb2YgYmF0Y2hEYXRhLmNvbnRlbnQ7IGxldCBpPWluZGV4XCIgW3ZhbHVlXT1cImJhdGNoXCIgc2VsZWN0ZWQ9XCJpbmRleCA9PT0gMFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWhhbmRsZUVucm9sbG1lbnRFbmREYXRlKGJhdGNoKSB8fCBkaXNhYmxlRW5yb2xsQnRuIFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgdGV4dC1zbSBiYXRjaC10aW1pbmdzXCI+XG4gICAgICAgICAgICAgICAge3sgYmF0Y2gubmFtZSB9fSAoIHt7IGJhdGNoLnN0YXJ0RGF0ZSB8IGRhdGU6ICdkIE1NTSwgeXl5eScgfX0gLSB7eyBiYXRjaC5lbmREYXRlIHwgZGF0ZTogJ2QgTU1NLCB5eXl5J1xuICAgICAgICAgICAgICAgIHx8ICdwcmVzZW50JyB9fSApXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXhwaXJlZFwiICpuZ0lmPVwiIWhhbmRsZUVucm9sbG1lbnRFbmREYXRlKGJhdGNoKSB8fCBkaXNhYmxlRW5yb2xsQnRuXCI+XG4gICAgICAgICAgICAgICAgRXhwaXJlZFxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiYmF0Y2hDb250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+UGxlYXNlIGNob29zZSBhIGJhdGNoIHRvIHN0YXJ0IGNvdXJzZTwvbWF0LWVycm9yPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtM1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dSZWplY3RlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCIgKm5nSWY9XCJzZWxlY3RlZEJhdGNoICYmIHNlbGVjdGVkQmF0Y2guZW5yb2xsbWVudEVuZERhdGUgXCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14cyBsZWFkaW5nLTQgbWItMFwiPkxhc3QgZW5yb2xsIGRhdGU8L3A+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1ib2xkIG1iLTBcIj57eyBzZWxlY3RlZEJhdGNoLmVucm9sbG1lbnRFbmREYXRlIHwgZGF0ZTogJ2QgTU1NLCB5JyB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImVucm9sbC1idXR0b25cIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdkaXNhYmxlLWJ0bic6IGRpc2FibGVFbnJvbGxCdG4gfHwgYmF0Y2hDb250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpIHx8ICFoYW5kbGVFbnJvbGxtZW50RW5kRGF0ZShzZWxlY3RlZEJhdGNoKSB9XCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVFbnJvbGxCdG4gfHwgYmF0Y2hDb250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpfHwgIWhhbmRsZUVucm9sbG1lbnRFbmREYXRlKHNlbGVjdGVkQmF0Y2gpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlcXVlc3RUb0Vucm9sbERpYWxvZygpXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgUmVxdWVzdCB0byBlbnJvbGxcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UmVqZWN0ZWQgJiYgY29udGVudD8ucHJpbWFyeUNhdGVnb3J5ID09PSBwcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNXCI+XG4gICAgICAgICAgPGgzIGNsYXNzPVwibWFyZ2luLXJlbW92ZS1ib3R0b20gbWF0LWJvZHktMiB3cy1kZWZhdWx0LXRleHRcIj5cbiAgICAgICAgICAgIFlvdXIgZW5yb2xsbWVudCByZXF1ZXN0IGlzIHt7YmF0Y2hEYXRhPy53b3JrRmxvdz8ud2ZJdGVtPy5jdXJyZW50U3RhdHVzID09PSBXRkJsZW5kZWRQcm9ncmFtU3RhdHVzLlJFTU9WRURcbiAgICAgICAgICAgID8ncmVtb3ZlZCc6J3JlamVjdGVkJ319LjwvaDM+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZm9ybT5cbjwvbmctdGVtcGxhdGU+Il19
|