@sunbird-cb/toc 0.0.8 → 0.0.9
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 -55
- package/esm2022/lib/_collection/_common/attendance-card/attendance-card.module.mjs +126 -126
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.component.mjs +32 -32
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.module.mjs +85 -85
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.component.mjs +100 -100
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.module.mjs +48 -48
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.component.mjs +120 -120
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.module.mjs +92 -92
- package/esm2022/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.mjs +48 -48
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.component.mjs +25 -25
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.module.mjs +41 -41
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover-card.component.mjs +89 -89
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.module.mjs +42 -42
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.servive.mjs +41 -41
- package/esm2022/lib/_collection/_common/connection-name/connection-name.component.mjs +78 -78
- package/esm2022/lib/_collection/_common/connection-name/connection-name.module.mjs +45 -45
- package/esm2022/lib/_collection/_common/connection-name/profile-v2.model.mjs +2 -2
- package/esm2022/lib/_collection/_common/content-progress/content-progress.component.mjs +70 -70
- package/esm2022/lib/_collection/_common/content-progress/content-progress.module.mjs +28 -28
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.mjs +187 -187
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.mjs +86 -86
- package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +31 -31
- package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +941 -941
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.mjs +183 -183
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.mjs +327 -327
- package/esm2022/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.mjs +297 -297
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +248 -225
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +1148 -1030
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.mjs +16 -16
- package/esm2022/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.mjs +43 -43
- package/esm2022/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.mjs +133 -133
- package/esm2022/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.mjs +66 -66
- package/esm2022/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.mjs +278 -278
- package/esm2022/lib/_collection/_common/content-toc/content-services/handle-claim.service.mjs +21 -21
- package/esm2022/lib/_collection/_common/content-toc/content-services/review-component-data.service.mjs +21 -21
- package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +847 -847
- package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +219 -219
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +209 -209
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.module.mjs +26 -26
- package/esm2022/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.mjs +19 -19
- package/esm2022/lib/_collection/_common/content-toc/pipes/truncate.pipe.mjs +23 -23
- package/esm2022/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.mjs +113 -113
- package/esm2022/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.mjs +110 -110
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.component.mjs +26 -26
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.module.mjs +19 -19
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.mjs +67 -67
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.mjs +28 -28
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.component.mjs +77 -77
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.model.mjs +2 -2
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.module.mjs +61 -61
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.module.mjs +20 -20
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.mjs +67 -67
- package/esm2022/lib/_collection/_common/player-brief/player-brief.component.mjs +139 -139
- package/esm2022/lib/_collection/_common/player-brief/player-brief.module.mjs +71 -71
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.component.mjs +34 -34
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.module.mjs +56 -56
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.component.mjs +25 -25
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.module.mjs +37 -37
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.mjs +32 -32
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner.module.mjs +30 -30
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +38 -38
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.mjs +51 -51
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.component.mjs +115 -115
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.model.mjs +12 -12
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.module.mjs +51 -51
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.service.mjs +61 -61
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.component.mjs +87 -87
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.module.mjs +36 -36
- package/esm2022/lib/_collection/_common/user-image/user-image.component.mjs +62 -62
- package/esm2022/lib/_collection/_common/user-image/user-image.module.mjs +24 -24
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.component.mjs +192 -192
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.module.mjs +44 -44
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.service.mjs +99 -99
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.component.mjs +58 -58
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.module.mjs +67 -67
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.component.mjs +112 -112
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.model.mjs +2 -2
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.module.mjs +69 -69
- package/esm2022/lib/_collection-api.mjs +57 -57
- package/esm2022/lib/_constants/widget-content.constants.mjs +19 -19
- package/esm2022/lib/_directives/tooltip.directive.mjs +68 -68
- package/esm2022/lib/_models/common.model.mjs +2 -2
- package/esm2022/lib/_models/error.model.mjs +2 -2
- package/esm2022/lib/_pipes/highlight.pipe.mjs +24 -24
- package/esm2022/lib/_services/rating.service.mjs +89 -89
- package/esm2022/lib/_services/samuhik-charcha.service.mjs +29 -29
- package/esm2022/lib/_services/viewer-route-util.mjs +103 -103
- package/esm2022/lib/_services/widget-content.model.mjs +247 -247
- package/esm2022/lib/_services/widget-content.service.mjs +594 -594
- package/esm2022/lib/_shared/translate-loader.factory.mjs +9 -9
- package/esm2022/lib/app-toc-lib.module.mjs +499 -499
- package/esm2022/lib/collection.config.mjs +161 -161
- package/esm2022/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.mjs +37 -37
- package/esm2022/lib/components/app-toc-banner/app-toc-banner.component.mjs +1436 -1436
- package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +475 -475
- package/esm2022/lib/components/app-toc-cios-home/consent-dialog.component.mjs +119 -119
- package/esm2022/lib/components/app-toc-cohorts/app-toc-cohorts.component.mjs +80 -80
- package/esm2022/lib/components/app-toc-content-card/app-toc-content-card.component.mjs +249 -249
- package/esm2022/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.mjs +39 -39
- package/esm2022/lib/components/app-toc-discussion/app-toc-discussion.component.mjs +58 -58
- package/esm2022/lib/components/app-toc-home/app-toc-home.component.mjs +2229 -2229
- package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +2907 -2905
- package/esm2022/lib/components/app-toc-overview/app-toc-overview.component.mjs +157 -157
- package/esm2022/lib/components/app-toc-session-card/app-toc-session-card.component.mjs +48 -48
- package/esm2022/lib/components/app-toc-sessions/app-toc-sessions.component.mjs +47 -47
- package/esm2022/lib/components/app-toc-single-page/app-toc-single-page.component.mjs +766 -766
- package/esm2022/lib/components/completion-survey-form/completion-survey-form.component.mjs +243 -243
- package/esm2022/lib/components/create-batch-dialog/create-batch-dialog.component.mjs +116 -116
- package/esm2022/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.mjs +44 -44
- package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +1838 -1838
- package/esm2022/lib/components/enroll-questionnaire/enroll-questionnaire.component.mjs +236 -236
- package/esm2022/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.mjs +213 -213
- package/esm2022/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.mjs +36 -36
- package/esm2022/lib/components/public-survey-form/public-survey-form.component.mjs +256 -256
- package/esm2022/lib/components/survey-form-question/survey-form-question.component.mjs +133 -133
- package/esm2022/lib/components/survey-form-section/survey-form-section.component.mjs +36 -36
- package/esm2022/lib/models/app-toc-analytics.model.mjs +2 -2
- package/esm2022/lib/models/app-toc.model.mjs +38 -38
- package/esm2022/lib/models/auto-complete.model.mjs +2 -2
- package/esm2022/lib/models/card-content.model.mjs +13 -13
- package/esm2022/lib/models/content-strip-with-tabs.model.mjs +2 -2
- package/esm2022/lib/models/discussion-forum.model.mjs +14 -14
- package/esm2022/lib/models/goal.model.mjs +2 -2
- package/esm2022/lib/models/meta-tag.model.mjs +8 -8
- package/esm2022/lib/models/playlist.model.mjs +2 -2
- package/esm2022/lib/models/profile-revamp.model.mjs +2 -2
- package/esm2022/lib/models/rating.model.mjs +2 -2
- package/esm2022/lib/models/user-profile.model.mjs +21 -21
- package/esm2022/lib/resolvers/app-toc-cios-resolver.service.mjs +24 -24
- package/esm2022/lib/resolvers/app-toc-cios-user-enroll-resolver.service.mjs +24 -24
- package/esm2022/lib/resolvers/app-toc-content-read-resolver.service.mjs +60 -60
- package/esm2022/lib/resolvers/app-toc-ext-public-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/app-toc-resolver.service.mjs +106 -106
- package/esm2022/lib/resolvers/config-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/profile-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/restricted-features-resolver.service.mjs +25 -25
- package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +51 -51
- package/esm2022/lib/routes/app-toc-home/app-toc-home.directive.mjs +16 -16
- package/esm2022/lib/routes/app-toc-home/app-toc-home.service.mjs +18 -18
- package/esm2022/lib/services/access-control.service.mjs +56 -56
- package/esm2022/lib/services/action.service.mjs +23 -23
- package/esm2022/lib/services/app-toc-v2.service.mjs +313 -243
- package/esm2022/lib/services/app-toc.service.mjs +1613 -1387
- package/esm2022/lib/services/certificate.service.mjs +69 -69
- package/esm2022/lib/services/discuss-utils.service.mjs +58 -58
- package/esm2022/lib/services/editor.service.mjs +34 -34
- package/esm2022/lib/services/load-check.service.mjs +21 -21
- package/esm2022/lib/services/loader.service.mjs +33 -33
- package/esm2022/lib/services/mobile-apps.service.mjs +67 -67
- package/esm2022/lib/services/netcore.service.mjs +56 -56
- package/esm2022/lib/services/nps-grid.service.mjs +31 -31
- package/esm2022/lib/services/otp.service.mjs +43 -43
- package/esm2022/lib/services/profile-v2.service.mjs +43 -43
- package/esm2022/lib/services/reset-ratings.service.mjs +19 -19
- package/esm2022/lib/services/resource-download-helper.service.mjs +64 -64
- package/esm2022/lib/services/timer.service.mjs +23 -23
- package/esm2022/lib/services/title-tag.service.mjs +71 -71
- package/esm2022/lib/services/user-profile.service.mjs +55 -55
- package/esm2022/lib/services/viewer-data.service.mjs +64 -64
- package/esm2022/lib/services/viewer-util.service.mjs +590 -590
- package/esm2022/lib/share-toc/share-toc/share-toc.component.mjs +291 -291
- package/esm2022/lib/share-toc/share-toc.module.mjs +119 -119
- package/esm2022/public-api.mjs +71 -71
- package/esm2022/sunbird-cb-toc.mjs +4 -4
- package/fesm2022/sunbird-cb-toc.mjs +24776 -24339
- package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
- package/index.d.ts +5 -6
- package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +16 -17
- package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +31 -32
- package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +15 -16
- package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +20 -21
- package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +22 -23
- package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +15 -16
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +22 -23
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +22 -23
- package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +9 -10
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +11 -12
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +12 -13
- package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +18 -19
- package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +14 -15
- package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +11 -12
- package/lib/_collection/_common/connection-name/connection-name.component.d.ts +17 -18
- package/lib/_collection/_common/connection-name/connection-name.module.d.ts +14 -15
- package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +199 -200
- package/lib/_collection/_common/content-progress/content-progress.component.d.ts +16 -17
- package/lib/_collection/_common/content-progress/content-progress.module.d.ts +10 -11
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +38 -39
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +19 -20
- package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +11 -12
- package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +183 -184
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +41 -42
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +54 -55
- package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +47 -48
- package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +49 -49
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +171 -155
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +8 -9
- package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +16 -17
- package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +40 -41
- package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +21 -22
- package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +45 -46
- package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +10 -11
- package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +10 -11
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts +128 -129
- package/lib/_collection/_common/content-toc/content-toc.module.d.ts +51 -52
- package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +29 -30
- package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +9 -10
- package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +7 -8
- package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +7 -8
- package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +28 -29
- package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +24 -25
- package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +14 -15
- package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +9 -10
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +12 -13
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +10 -11
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +22 -23
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +8 -9
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +18 -19
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +8 -9
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +15 -16
- package/lib/_collection/_common/player-brief/player-brief.component.d.ts +35 -36
- package/lib/_collection/_common/player-brief/player-brief.module.d.ts +19 -20
- package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +14 -15
- package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +13 -14
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +11 -12
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +11 -12
- package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +15 -16
- package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +10 -11
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +16 -17
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +11 -12
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +34 -35
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +17 -18
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +15 -16
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +15 -16
- package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +21 -22
- package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +12 -13
- package/lib/_collection/_common/user-image/user-image.component.d.ts +21 -22
- package/lib/_collection/_common/user-image/user-image.module.d.ts +9 -10
- package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +47 -48
- package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +14 -15
- package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +22 -23
- package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +19 -20
- package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +15 -16
- package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +25 -26
- package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +21 -22
- package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +18 -19
- package/lib/_collection-api.d.ts +34 -35
- package/lib/_constants/widget-content.constants.d.ts +7 -8
- package/lib/_directives/tooltip.directive.d.ts +17 -18
- package/lib/_models/common.model.d.ts +3 -4
- package/lib/_models/error.model.d.ts +5 -6
- package/lib/_pipes/highlight.pipe.d.ts +10 -11
- package/lib/_services/rating.service.d.ts +18 -19
- package/lib/_services/samuhik-charcha.service.d.ts +13 -14
- package/lib/_services/viewer-route-util.d.ts +8 -9
- package/lib/_services/widget-content.model.d.ts +515 -516
- package/lib/_services/widget-content.service.d.ts +101 -102
- package/lib/_shared/translate-loader.factory.d.ts +7 -8
- package/lib/app-toc-lib.module.d.ts +88 -89
- package/lib/collection.config.d.ts +159 -160
- package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +17 -18
- package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +225 -226
- package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +78 -79
- package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +22 -23
- package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +31 -32
- package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +47 -48
- package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +14 -15
- package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +21 -22
- package/lib/components/app-toc-home/app-toc-home.component.d.ts +314 -315
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +408 -409
- package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +47 -48
- package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +22 -23
- package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +14 -15
- package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +149 -150
- package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +42 -43
- package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +27 -28
- package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +15 -16
- package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +195 -196
- package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +44 -45
- package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +54 -55
- package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +18 -19
- package/lib/components/public-survey-form/public-survey-form.component.d.ts +43 -44
- package/lib/components/survey-form-question/survey-form-question.component.d.ts +20 -21
- package/lib/components/survey-form-section/survey-form-section.component.d.ts +13 -14
- package/lib/models/app-toc-analytics.model.d.ts +152 -153
- package/lib/models/app-toc.model.d.ts +84 -85
- package/lib/models/auto-complete.model.d.ts +27 -28
- package/lib/models/card-content.model.d.ts +19 -20
- package/lib/models/content-strip-with-tabs.model.d.ts +44 -45
- package/lib/models/discussion-forum.model.d.ts +40 -41
- package/lib/models/goal.model.d.ts +22 -23
- package/lib/models/meta-tag.model.d.ts +6 -7
- package/lib/models/playlist.model.d.ts +23 -24
- package/lib/models/profile-revamp.model.d.ts +14 -15
- package/lib/models/rating.model.d.ts +17 -18
- package/lib/models/user-profile.model.d.ts +37 -38
- package/lib/resolvers/app-toc-cios-resolver.service.d.ts +12 -13
- package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +12 -13
- package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +16 -17
- package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +12 -13
- package/lib/resolvers/app-toc-resolver.service.d.ts +16 -17
- package/lib/resolvers/config-resolver.service.d.ts +11 -12
- package/lib/resolvers/profile-resolver.service.d.ts +11 -12
- package/lib/resolvers/restricted-features-resolver.service.d.ts +11 -12
- package/lib/routes/app-toc-home/app-toc-home.component.d.ts +19 -20
- package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +8 -9
- package/lib/routes/app-toc-home/app-toc-home.service.d.ts +8 -9
- package/lib/services/access-control.service.d.ts +29 -30
- package/lib/services/action.service.d.ts +9 -10
- package/lib/services/app-toc-v2.service.d.ts +16 -15
- package/lib/services/app-toc.service.d.ts +235 -178
- package/lib/services/certificate.service.d.ts +42 -43
- package/lib/services/discuss-utils.service.d.ts +33 -34
- package/lib/services/editor.service.d.ts +17 -18
- package/lib/services/load-check.service.d.ts +8 -9
- package/lib/services/loader.service.d.ts +16 -17
- package/lib/services/mobile-apps.service.d.ts +38 -39
- package/lib/services/netcore.service.d.ts +33 -34
- package/lib/services/nps-grid.service.d.ts +15 -16
- package/lib/services/otp.service.d.ts +20 -21
- package/lib/services/profile-v2.service.d.ts +20 -21
- package/lib/services/reset-ratings.service.d.ts +8 -9
- package/lib/services/resource-download-helper.service.d.ts +29 -30
- package/lib/services/timer.service.d.ts +9 -10
- package/lib/services/title-tag.service.d.ts +21 -22
- package/lib/services/user-profile.service.d.ts +24 -25
- package/lib/services/viewer-data.service.d.ts +58 -59
- package/lib/services/viewer-util.service.d.ts +76 -77
- package/lib/share-toc/share-toc/share-toc.component.d.ts +56 -57
- package/lib/share-toc/share-toc.module.d.ts +32 -33
- package/package.json +1 -1
- package/public-api.d.ts +56 -57
- package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts.map +0 -1
- package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts.map +0 -1
- package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts.map +0 -1
- package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts.map +0 -1
- package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts.map +0 -1
- package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts.map +0 -1
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts.map +0 -1
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts.map +0 -1
- package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts.map +0 -1
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts.map +0 -1
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts.map +0 -1
- package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts.map +0 -1
- package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts.map +0 -1
- package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts.map +0 -1
- package/lib/_collection/_common/connection-name/connection-name.component.d.ts.map +0 -1
- package/lib/_collection/_common/connection-name/connection-name.module.d.ts.map +0 -1
- package/lib/_collection/_common/connection-name/profile-v2.model.d.ts.map +0 -1
- package/lib/_collection/_common/content-progress/content-progress.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-progress/content-progress.module.d.ts.map +0 -1
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/content-toc.module.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts.map +0 -1
- package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts.map +0 -1
- package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts.map +0 -1
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts.map +0 -1
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts.map +0 -1
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts.map +0 -1
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts.map +0 -1
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts.map +0 -1
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts.map +0 -1
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts.map +0 -1
- package/lib/_collection/_common/player-brief/player-brief.component.d.ts.map +0 -1
- package/lib/_collection/_common/player-brief/player-brief.module.d.ts.map +0 -1
- package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts.map +0 -1
- package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts.map +0 -1
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts.map +0 -1
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts.map +0 -1
- package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts.map +0 -1
- package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts.map +0 -1
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts.map +0 -1
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts.map +0 -1
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts.map +0 -1
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts.map +0 -1
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts.map +0 -1
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts.map +0 -1
- package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts.map +0 -1
- package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts.map +0 -1
- package/lib/_collection/_common/user-image/user-image.component.d.ts.map +0 -1
- package/lib/_collection/_common/user-image/user-image.module.d.ts.map +0 -1
- package/lib/_collection/btn-page-back/btn-page-back.component.d.ts.map +0 -1
- package/lib/_collection/btn-page-back/btn-page-back.module.d.ts.map +0 -1
- package/lib/_collection/btn-page-back/btn-page-back.service.d.ts.map +0 -1
- package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts.map +0 -1
- package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts.map +0 -1
- package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts.map +0 -1
- package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts.map +0 -1
- package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts.map +0 -1
- package/lib/_collection-api.d.ts.map +0 -1
- package/lib/_constants/widget-content.constants.d.ts.map +0 -1
- package/lib/_directives/tooltip.directive.d.ts.map +0 -1
- package/lib/_models/common.model.d.ts.map +0 -1
- package/lib/_models/error.model.d.ts.map +0 -1
- package/lib/_pipes/highlight.pipe.d.ts.map +0 -1
- package/lib/_services/rating.service.d.ts.map +0 -1
- package/lib/_services/samuhik-charcha.service.d.ts.map +0 -1
- package/lib/_services/viewer-route-util.d.ts.map +0 -1
- package/lib/_services/widget-content.model.d.ts.map +0 -1
- package/lib/_services/widget-content.service.d.ts.map +0 -1
- package/lib/_shared/translate-loader.factory.d.ts.map +0 -1
- package/lib/app-toc-lib.module.d.ts.map +0 -1
- package/lib/collection.config.d.ts.map +0 -1
- package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts.map +0 -1
- package/lib/components/app-toc-banner/app-toc-banner.component.d.ts.map +0 -1
- package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts.map +0 -1
- package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts.map +0 -1
- package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts.map +0 -1
- package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts.map +0 -1
- package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts.map +0 -1
- package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts.map +0 -1
- package/lib/components/app-toc-home/app-toc-home.component.d.ts.map +0 -1
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts.map +0 -1
- package/lib/components/app-toc-overview/app-toc-overview.component.d.ts.map +0 -1
- package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts.map +0 -1
- package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts.map +0 -1
- package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts.map +0 -1
- package/lib/components/completion-survey-form/completion-survey-form.component.d.ts.map +0 -1
- package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts.map +0 -1
- package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts.map +0 -1
- package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts.map +0 -1
- package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts.map +0 -1
- package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts.map +0 -1
- package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts.map +0 -1
- package/lib/components/public-survey-form/public-survey-form.component.d.ts.map +0 -1
- package/lib/components/survey-form-question/survey-form-question.component.d.ts.map +0 -1
- package/lib/components/survey-form-section/survey-form-section.component.d.ts.map +0 -1
- package/lib/models/app-toc-analytics.model.d.ts.map +0 -1
- package/lib/models/app-toc.model.d.ts.map +0 -1
- package/lib/models/auto-complete.model.d.ts.map +0 -1
- package/lib/models/card-content.model.d.ts.map +0 -1
- package/lib/models/content-strip-with-tabs.model.d.ts.map +0 -1
- package/lib/models/discussion-forum.model.d.ts.map +0 -1
- package/lib/models/goal.model.d.ts.map +0 -1
- package/lib/models/meta-tag.model.d.ts.map +0 -1
- package/lib/models/playlist.model.d.ts.map +0 -1
- package/lib/models/profile-revamp.model.d.ts.map +0 -1
- package/lib/models/rating.model.d.ts.map +0 -1
- package/lib/models/user-profile.model.d.ts.map +0 -1
- package/lib/resolvers/app-toc-cios-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/app-toc-content-read-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/app-toc-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/config-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/profile-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/restricted-features-resolver.service.d.ts.map +0 -1
- package/lib/routes/app-toc-home/app-toc-home.component.d.ts.map +0 -1
- package/lib/routes/app-toc-home/app-toc-home.directive.d.ts.map +0 -1
- package/lib/routes/app-toc-home/app-toc-home.service.d.ts.map +0 -1
- package/lib/services/access-control.service.d.ts.map +0 -1
- package/lib/services/action.service.d.ts.map +0 -1
- package/lib/services/app-toc-v2.service.d.ts.map +0 -1
- package/lib/services/app-toc.service.d.ts.map +0 -1
- package/lib/services/certificate.service.d.ts.map +0 -1
- package/lib/services/discuss-utils.service.d.ts.map +0 -1
- package/lib/services/editor.service.d.ts.map +0 -1
- package/lib/services/load-check.service.d.ts.map +0 -1
- package/lib/services/loader.service.d.ts.map +0 -1
- package/lib/services/mobile-apps.service.d.ts.map +0 -1
- package/lib/services/netcore.service.d.ts.map +0 -1
- package/lib/services/nps-grid.service.d.ts.map +0 -1
- package/lib/services/otp.service.d.ts.map +0 -1
- package/lib/services/profile-v2.service.d.ts.map +0 -1
- package/lib/services/reset-ratings.service.d.ts.map +0 -1
- package/lib/services/resource-download-helper.service.d.ts.map +0 -1
- package/lib/services/timer.service.d.ts.map +0 -1
- package/lib/services/title-tag.service.d.ts.map +0 -1
- package/lib/services/user-profile.service.d.ts.map +0 -1
- package/lib/services/viewer-data.service.d.ts.map +0 -1
- package/lib/services/viewer-util.service.d.ts.map +0 -1
- package/lib/share-toc/share-toc/share-toc.component.d.ts.map +0 -1
- package/lib/share-toc/share-toc.module.d.ts.map +0 -1
- package/public-api.d.ts.map +0 -1
- package/sunbird-cb-toc.d.ts.map +0 -1
|
@@ -1,594 +1,594 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { of, EMPTY, BehaviorSubject } from 'rxjs';
|
|
3
|
-
import { catchError, retry, map, shareReplay } from 'rxjs/operators';
|
|
4
|
-
import { NsContent } from './widget-content.model';
|
|
5
|
-
// tslint:disable
|
|
6
|
-
import _ from 'lodash';
|
|
7
|
-
import { viewerRouteGenerator } from './viewer-route-util';
|
|
8
|
-
import moment from 'moment';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
import * as i1 from "@angular/common/http";
|
|
11
|
-
import * as i2 from "@sunbird-cb/utils-v2";
|
|
12
|
-
import * as i3 from "@angular/router";
|
|
13
|
-
// tslint:enable
|
|
14
|
-
// TODO: move this in some common place
|
|
15
|
-
const PROTECTED_SLAG_V8 = '/apis/protected/v8';
|
|
16
|
-
const API_END_POINTS = {
|
|
17
|
-
CONTENT: `${PROTECTED_SLAG_V8}/content`,
|
|
18
|
-
AUTHORING_CONTENT: `/api/course/v1/hierarchy`,
|
|
19
|
-
CONTENT_LIKES: `${PROTECTED_SLAG_V8}/content/likeCount`,
|
|
20
|
-
SET_S3_COOKIE: `${PROTECTED_SLAG_V8}/content/setCookie`,
|
|
21
|
-
SET_S3_IMAGE_COOKIE: `${PROTECTED_SLAG_V8}/content/setImageCookie`,
|
|
22
|
-
FETCH_MANIFEST: `${PROTECTED_SLAG_V8}/content/getWebModuleManifest`,
|
|
23
|
-
FETCH_WEB_MODULE_FILES: `${PROTECTED_SLAG_V8}/content/getWebModuleFiles`,
|
|
24
|
-
MULTIPLE_CONTENT: `${PROTECTED_SLAG_V8}/content/multiple`,
|
|
25
|
-
CONTENT_SEARCH_V5: `${PROTECTED_SLAG_V8}/content/searchV5`,
|
|
26
|
-
CONTENT_SEARCH_V6: `/apis/proxies/v8/sunbirdigot/search`,
|
|
27
|
-
TRENDING_CONTENT_SEARCH: `apis/proxies/v8/trending/content/search`,
|
|
28
|
-
CONTENT_SEARCH_RELATED_CBP_V6: `/apis/proxies/v8/sunbirdigot/search`,
|
|
29
|
-
CONTENT_SEARCH_REGION_RECOMMENDATION: `${PROTECTED_SLAG_V8}/content/searchRegionRecommendation`,
|
|
30
|
-
CONTENT_HISTORY: `${PROTECTED_SLAG_V8}/user/history`,
|
|
31
|
-
CONTENT_HISTORYV2: `/apis/proxies/v8/read/content-progres`,
|
|
32
|
-
COURSE_BATCH_LIST: `/apis/proxies/v8/learner/course/v1/batch/list`,
|
|
33
|
-
COURSE_BATCH: `/apis/proxies/v8/course/v1/batch/read`,
|
|
34
|
-
AUTO_ASSIGN_BATCH: `/apis/protected/v8/cohorts/user/autoenrollment/`,
|
|
35
|
-
AUTO_ASSIGN_CURATED_BATCH: `/apis/proxies/v8/curatedprogram/v1/enrol`,
|
|
36
|
-
AUTO_ASSIGN_OPEN_PROGRAM: `/apis/proxies/v8/openprogram/v1/enrol`,
|
|
37
|
-
USER_CONTINUE_LEARNING: `${PROTECTED_SLAG_V8}/user/history/continue`,
|
|
38
|
-
CONTENT_RATING: `${PROTECTED_SLAG_V8}/user/rating`,
|
|
39
|
-
COLLECTION_HIERARCHY: (type, id) => `${PROTECTED_SLAG_V8}/content/collection/${type}/${id}`,
|
|
40
|
-
REGISTRATION_STATUS: `${PROTECTED_SLAG_V8}/admin/userRegistration/checkUserRegistrationContent`,
|
|
41
|
-
MARK_AS_COMPLETE_META: (contentId) => `${PROTECTED_SLAG_V8}/user/progress/${contentId}`,
|
|
42
|
-
ENROLL_BATCH: `/apis/proxies/v8/learner/course/v1/enrol`,
|
|
43
|
-
ENROLL_BATCH_WF: `/apis/proxies/v8/workflow/blendedprogram/enrol`,
|
|
44
|
-
WITHDRAW_BATCH_WF: `/apis/proxies/v8/workflow/blendedprogram/unenrol`,
|
|
45
|
-
BLENDED_USER_WF: `/apis/proxies/v8/workflow/blendedprogram/user/search`,
|
|
46
|
-
BLENDED_USER_COUNT: `apis/proxies/v8/workflow/blendedprogram/enrol/status/count`,
|
|
47
|
-
CERT_ADD_TEMPLATE: `${PROTECTED_SLAG_V8}/cohorts/course/batch/cert/template/add`,
|
|
48
|
-
CERT_ISSUE: `${PROTECTED_SLAG_V8}/cohorts/course/batch/cert/issue`,
|
|
49
|
-
CERT_DOWNLOAD: (certId) => `${PROTECTED_SLAG_V8}/cohorts/course/batch/cert/download/${certId}`,
|
|
50
|
-
READ_KARMAPOINTS: `/apis/proxies/v8/karmapoints/read`,
|
|
51
|
-
CONTENT_READ: (contentId) => `/apis/proxies/v8/extended/content/v1/read/${contentId}`,
|
|
52
|
-
READ_COURSE_KARMAPOINTS: '/apis/proxies/v8/karmapoints/user/course/read',
|
|
53
|
-
CLAIM_KARMAPOINTS: '/apis/proxies/v8/claimkarmapoints',
|
|
54
|
-
USER_KARMA_POINTS: '/apis/proxies/v8/user/totalkarmapoints',
|
|
55
|
-
EXT_CONTENT_READ: (contentId) => `/apis/proxies/v8/cios/v1/content/read/${contentId}`,
|
|
56
|
-
EXT_USER_COURSE_ENROLL: (contentId) => `/apis/proxies/v8/cios-enroll/v1/readby/useridcourseid/${contentId}`,
|
|
57
|
-
EXT_CONTENT_EROLL: `/apis/proxies/v8/cios-enroll/v1/create`,
|
|
58
|
-
EXT_PUBLIC_CONTENT: (partent, contentId) => `/apis/proxies/v8/ciosIntegration/v1/read/content/${partent}/${contentId}`,
|
|
59
|
-
ENROLL_CONTENT_DATA: (userId) => `/apis/proxies/v8/learner/course/v4/user/enrollment/details/${userId}`,
|
|
60
|
-
LEARNER_PATHWAY_ENROLL: (contentId) => `/apis/proxies/v8/learningpathway/v1/enrol/${contentId}`,
|
|
61
|
-
};
|
|
62
|
-
export class WidgetContentService {
|
|
63
|
-
constructor(http, configSvc, activatedRoute) {
|
|
64
|
-
this.http = http;
|
|
65
|
-
this.configSvc = configSvc;
|
|
66
|
-
this.activatedRoute = activatedRoute;
|
|
67
|
-
this.tocConfigData = new BehaviorSubject({});
|
|
68
|
-
this.tocConfigData$ = this.tocConfigData.asObservable();
|
|
69
|
-
this.programChildCourseResumeData = new BehaviorSubject({});
|
|
70
|
-
this.programChildCourseResumeData$ = this.programChildCourseResumeData.asObservable();
|
|
71
|
-
}
|
|
72
|
-
isResource(primaryCategory) {
|
|
73
|
-
if (primaryCategory) {
|
|
74
|
-
const isResource = (primaryCategory === NsContent.EResourcePrimaryCategories.LEARNING_RESOURCE) ||
|
|
75
|
-
(primaryCategory === NsContent.EResourcePrimaryCategories.PRACTICE_RESOURCE) ||
|
|
76
|
-
(primaryCategory === NsContent.EResourcePrimaryCategories.FINAL_ASSESSMENT) ||
|
|
77
|
-
(primaryCategory === NsContent.EResourcePrimaryCategories.COMP_ASSESSMENT) ||
|
|
78
|
-
(primaryCategory === NsContent.EResourcePrimaryCategories.OFFLINE_SESSION);
|
|
79
|
-
return isResource;
|
|
80
|
-
}
|
|
81
|
-
return false;
|
|
82
|
-
}
|
|
83
|
-
fetchMarkAsCompleteMeta(identifier) {
|
|
84
|
-
// tslint:disable-next-line
|
|
85
|
-
const url = API_END_POINTS.MARK_AS_COMPLETE_META(identifier);
|
|
86
|
-
// return this.http.get(url).toPromise()
|
|
87
|
-
if (url) { }
|
|
88
|
-
return of().toPromise();
|
|
89
|
-
}
|
|
90
|
-
updateTocConfig(data) {
|
|
91
|
-
this.tocConfigData.next(data);
|
|
92
|
-
}
|
|
93
|
-
fetchContent(contentId, hierarchyType = 'detail', _additionalFields = [], primaryCategory) {
|
|
94
|
-
// const url = `${API_END_POINTS.CONTENT}/${contentId}?hierarchyType=${hierarchyType}`
|
|
95
|
-
let url = '';
|
|
96
|
-
const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
|
|
97
|
-
if (primaryCategory && this.isResource(primaryCategory)) {
|
|
98
|
-
if (!forPreview) {
|
|
99
|
-
url = `/apis/proxies/v8/extended/content/v1/read/${contentId}`;
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
if (window.location.href.includes('editMode=true') && window.location.href.includes('_rc')) {
|
|
103
|
-
url = `/apis/proxies/v8/extended/content/v1/read/${contentId}`;
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
url = `/api/content/v1/read/${contentId}`;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
if (!forPreview) {
|
|
112
|
-
url = `/apis/proxies/v8/action/content/v3/hierarchy/${contentId}?hierarchyType=${hierarchyType}`;
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
const forcreator = window.location.href.includes('editMode=true');
|
|
116
|
-
if (forcreator) {
|
|
117
|
-
url = `apis/proxies/v8/action/content/v3/hierarchy/${contentId}?mode=edit`;
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
url = `/api/course/v1/hierarchy/${contentId}?hierarchyType=${hierarchyType}`;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// return this.http
|
|
125
|
-
// .post<NsContent.IContent>(url, { additionalFields })
|
|
126
|
-
// .pipe(retry(1))
|
|
127
|
-
return this.http
|
|
128
|
-
.get(url)
|
|
129
|
-
.pipe(shareReplay(1));
|
|
130
|
-
// if (apiData && apiData.result) {
|
|
131
|
-
// return apiData.result.content
|
|
132
|
-
// }
|
|
133
|
-
}
|
|
134
|
-
fetchAuthoringContent(contentId, apiType) {
|
|
135
|
-
const forcreator = window.location.href.includes('editMode=true');
|
|
136
|
-
let url = '';
|
|
137
|
-
if (forcreator) {
|
|
138
|
-
url = `apis/proxies/v8/action/content/v3/hierarchy/${contentId}?mode=edit`;
|
|
139
|
-
}
|
|
140
|
-
else if (apiType && apiType === 'read') {
|
|
141
|
-
url = `/api/content/v1/read/${contentId}`;
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
url = `${API_END_POINTS.AUTHORING_CONTENT}/${contentId}?hierarchyType=detail`;
|
|
145
|
-
}
|
|
146
|
-
return this.http.get(url).pipe(shareReplay(1), r => r);
|
|
147
|
-
}
|
|
148
|
-
fetchMultipleContent(ids) {
|
|
149
|
-
return this.http.get(`${API_END_POINTS.MULTIPLE_CONTENT}/${ids.join(',')}`);
|
|
150
|
-
}
|
|
151
|
-
fetchCollectionHierarchy(type, id, pageNumber = 0, pageSize = 1) {
|
|
152
|
-
return this.http.get(`${API_END_POINTS.COLLECTION_HIERARCHY(type, id)}?pageNumber=${pageNumber}&pageSize=${pageSize}`);
|
|
153
|
-
}
|
|
154
|
-
fetchBlendedCourse() {
|
|
155
|
-
}
|
|
156
|
-
fetchCourseBatches(req) {
|
|
157
|
-
return this.http
|
|
158
|
-
.post(API_END_POINTS.COURSE_BATCH_LIST, req)
|
|
159
|
-
.pipe(retry(1), map((data) => data.result.response));
|
|
160
|
-
}
|
|
161
|
-
// fetch individual batch
|
|
162
|
-
fetchCourseBatch(batchId) {
|
|
163
|
-
return this.http.get(`${API_END_POINTS.COURSE_BATCH}/${batchId}`);
|
|
164
|
-
}
|
|
165
|
-
autoAssignBatchApi(identifier, language) {
|
|
166
|
-
let enrollLang = language?.langId || 'english';
|
|
167
|
-
return this.http.get(`${API_END_POINTS.AUTO_ASSIGN_BATCH}${identifier}?language=${enrollLang}`)
|
|
168
|
-
.pipe(retry(1), map((data) => data.result.response));
|
|
169
|
-
}
|
|
170
|
-
autoEnrollLP(identifier) {
|
|
171
|
-
return this.http.get(`${API_END_POINTS.LEARNER_PATHWAY_ENROLL(identifier)}`)
|
|
172
|
-
.pipe(retry(1), map((data) => data.result.response));
|
|
173
|
-
}
|
|
174
|
-
autoAssignCuratedBatchApi(request, programType) {
|
|
175
|
-
const url = programType === NsContent.ECourseCategory.MODERATED_PROGRAM ?
|
|
176
|
-
API_END_POINTS.AUTO_ASSIGN_OPEN_PROGRAM : API_END_POINTS.AUTO_ASSIGN_CURATED_BATCH;
|
|
177
|
-
return this.http.post(`${url}`, request)
|
|
178
|
-
.pipe(retry(1), map((data) => data.result.response));
|
|
179
|
-
}
|
|
180
|
-
enrollUserToBatch(req) {
|
|
181
|
-
return this.http
|
|
182
|
-
.post(API_END_POINTS.ENROLL_BATCH, req)
|
|
183
|
-
.toPromise();
|
|
184
|
-
}
|
|
185
|
-
enrollAndUnenrollUserToBatchWF(req, type) {
|
|
186
|
-
const url = type === 'WITHDRAW' ? API_END_POINTS.WITHDRAW_BATCH_WF : API_END_POINTS.ENROLL_BATCH_WF;
|
|
187
|
-
return this.http
|
|
188
|
-
.post(url, req)
|
|
189
|
-
.toPromise();
|
|
190
|
-
}
|
|
191
|
-
fetchBlendedUserWF(req) {
|
|
192
|
-
return this.http
|
|
193
|
-
.post(API_END_POINTS.BLENDED_USER_WF, req)
|
|
194
|
-
.toPromise();
|
|
195
|
-
}
|
|
196
|
-
fetchBlendedUserCOUNT(req) {
|
|
197
|
-
return this.http
|
|
198
|
-
.post(API_END_POINTS.BLENDED_USER_COUNT, req)
|
|
199
|
-
.toPromise();
|
|
200
|
-
}
|
|
201
|
-
fetchContentLikes(contentIds) {
|
|
202
|
-
return this.http
|
|
203
|
-
.post(API_END_POINTS.CONTENT_LIKES, contentIds)
|
|
204
|
-
.toPromise();
|
|
205
|
-
}
|
|
206
|
-
fetchContentRatings(contentIds) {
|
|
207
|
-
if (contentIds) { }
|
|
208
|
-
// return this.http
|
|
209
|
-
// .post(`${API_END_POINTS.CONTENT_RATING}/rating`, contentIds)
|
|
210
|
-
// .toPromise()
|
|
211
|
-
return of().toPromise();
|
|
212
|
-
}
|
|
213
|
-
fetchContentHistory(contentId) {
|
|
214
|
-
return this.http.get(`${API_END_POINTS.CONTENT_HISTORY}/${contentId}`);
|
|
215
|
-
}
|
|
216
|
-
fetchContentHistoryV2(req) {
|
|
217
|
-
const isPreAssessment = this.activatedRoute.snapshot.queryParams.preAssessment;
|
|
218
|
-
req.request.fields = ['progressdetails'];
|
|
219
|
-
if (req.request.courseId && !isPreAssessment) {
|
|
220
|
-
const data = this.http.post(`${API_END_POINTS.CONTENT_HISTORYV2}/${req.request.courseId}`, req).pipe(map((rData) => {
|
|
221
|
-
this.languageMapProgress = rData?.result?.languageProgress || {};
|
|
222
|
-
return rData;
|
|
223
|
-
}));
|
|
224
|
-
// data.subscribe((subscribeData: any) => {
|
|
225
|
-
// this.programChildCourseResumeData.next({ resumeData: subscribeData.result.contentList, courseId: req.request.courseId })
|
|
226
|
-
// })
|
|
227
|
-
return data;
|
|
228
|
-
}
|
|
229
|
-
return of();
|
|
230
|
-
}
|
|
231
|
-
setProgramChildResumeData(contentList, courseId) {
|
|
232
|
-
/* tslint:disable */
|
|
233
|
-
this.programChildCourseResumeData.next({ resumeData: contentList, courseId });
|
|
234
|
-
/* tslint:enable */
|
|
235
|
-
}
|
|
236
|
-
async continueLearning(id, collectionId, collectionType) {
|
|
237
|
-
return new Promise(async (resolve) => {
|
|
238
|
-
if (collectionType &&
|
|
239
|
-
collectionType.toLowerCase() === 'playlist') {
|
|
240
|
-
const reqBody = {
|
|
241
|
-
contextPathId: collectionId ? collectionId : id,
|
|
242
|
-
resourceId: id,
|
|
243
|
-
data: JSON.stringify({
|
|
244
|
-
timestamp: Date.now(),
|
|
245
|
-
contextFullPath: [collectionId, id],
|
|
246
|
-
}),
|
|
247
|
-
dateAccessed: Date.now(),
|
|
248
|
-
contextType: 'playlist',
|
|
249
|
-
};
|
|
250
|
-
await this.saveContinueLearning(reqBody).toPromise().catch().finally(() => {
|
|
251
|
-
resolve(true);
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
else {
|
|
255
|
-
const reqBody = {
|
|
256
|
-
contextPathId: collectionId ? collectionId : id,
|
|
257
|
-
resourceId: id,
|
|
258
|
-
data: JSON.stringify({ timestamp: Date.now() }),
|
|
259
|
-
dateAccessed: Date.now(),
|
|
260
|
-
};
|
|
261
|
-
await this.saveContinueLearning(reqBody).toPromise().catch().finally(() => {
|
|
262
|
-
resolve(true);
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
saveContinueLearning(content) {
|
|
268
|
-
// const url = API_END_POINTS.USER_CONTINUE_LEARNING
|
|
269
|
-
// return this.http.post<any>(url, content)
|
|
270
|
-
if (content) {
|
|
271
|
-
}
|
|
272
|
-
return of();
|
|
273
|
-
}
|
|
274
|
-
setS3Cookie(_contentId) {
|
|
275
|
-
// return this.http
|
|
276
|
-
// .post(API_END_POINTS.SET_S3_COOKIE, { contentId })
|
|
277
|
-
// .pipe(catchError(_err => of(true)))
|
|
278
|
-
return EMPTY;
|
|
279
|
-
}
|
|
280
|
-
setS3ImageCookie() {
|
|
281
|
-
return this.http.post(API_END_POINTS.SET_S3_IMAGE_COOKIE, {}).pipe(catchError(_err => of(true)));
|
|
282
|
-
}
|
|
283
|
-
fetchManifest(url) {
|
|
284
|
-
return this.http.post(API_END_POINTS.FETCH_MANIFEST, { url });
|
|
285
|
-
}
|
|
286
|
-
fetchWebModuleContent(url) {
|
|
287
|
-
return this.http.get(`${API_END_POINTS.FETCH_WEB_MODULE_FILES}?url=${encodeURIComponent(url)}`);
|
|
288
|
-
}
|
|
289
|
-
search(req) {
|
|
290
|
-
req.query = req.query || '';
|
|
291
|
-
return this.http.post(API_END_POINTS.CONTENT_SEARCH_V5, {
|
|
292
|
-
request: req,
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
searchRegionRecommendation(req) {
|
|
296
|
-
req.query = req.query || '';
|
|
297
|
-
req.preLabelValue =
|
|
298
|
-
(req.preLabelValue || '') +
|
|
299
|
-
((this.configSvc.userProfile && this.configSvc.userProfile.country) || '');
|
|
300
|
-
req.filters = {
|
|
301
|
-
...req.filters,
|
|
302
|
-
labels: [req.preLabelValue || ''],
|
|
303
|
-
};
|
|
304
|
-
return this.http.post(API_END_POINTS.CONTENT_SEARCH_REGION_RECOMMENDATION, { request: req });
|
|
305
|
-
}
|
|
306
|
-
searchV6(req) {
|
|
307
|
-
const apiPath = _.get(req, 'api.path');
|
|
308
|
-
req.query = req.query || '';
|
|
309
|
-
if (apiPath) {
|
|
310
|
-
return this.http.get(apiPath);
|
|
311
|
-
}
|
|
312
|
-
return this.http.post(API_END_POINTS.CONTENT_SEARCH_V6, req);
|
|
313
|
-
}
|
|
314
|
-
searchRelatedCBPV6(req) {
|
|
315
|
-
return this.http.post(API_END_POINTS.CONTENT_SEARCH_RELATED_CBP_V6, req);
|
|
316
|
-
}
|
|
317
|
-
fetchContentRating(contentId) {
|
|
318
|
-
return this.http.get(`${API_END_POINTS.CONTENT_RATING}/${contentId}`);
|
|
319
|
-
}
|
|
320
|
-
deleteContentRating(contentId) {
|
|
321
|
-
return this.http.delete(`${API_END_POINTS.CONTENT_RATING}/${contentId}`);
|
|
322
|
-
}
|
|
323
|
-
addContentRating(contentId, data) {
|
|
324
|
-
return this.http.post(`${API_END_POINTS.CONTENT_RATING}/${contentId}`, data);
|
|
325
|
-
}
|
|
326
|
-
getFirstChildInHierarchy(content) {
|
|
327
|
-
if (!(content.children || []).length) {
|
|
328
|
-
return content;
|
|
329
|
-
}
|
|
330
|
-
if ((content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM &&
|
|
331
|
-
!(content.artifactUrl && content.artifactUrl.length)) ||
|
|
332
|
-
content.primaryCategory === NsContent.EPrimaryCategory.MANDATORY_COURSE_GOAL ||
|
|
333
|
-
(content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM &&
|
|
334
|
-
!(content.artifactUrl && content.artifactUrl.length)) ||
|
|
335
|
-
(content.primaryCategory === NsContent.EPrimaryCategory.MODULE &&
|
|
336
|
-
!(content.artifactUrl && content.artifactUrl.length))) {
|
|
337
|
-
const child = content.children[0];
|
|
338
|
-
return this.getFirstChildInHierarchy(child);
|
|
339
|
-
}
|
|
340
|
-
if (content.primaryCategory === NsContent.EPrimaryCategory.RESOURCE ||
|
|
341
|
-
content.primaryCategory === NsContent.EPrimaryCategory.KNOWLEDGE_ARTIFACT ||
|
|
342
|
-
content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM ||
|
|
343
|
-
content.primaryCategory === NsContent.EPrimaryCategory.PRACTICE_RESOURCE ||
|
|
344
|
-
content.primaryCategory === NsContent.EPrimaryCategory.FINAL_ASSESSMENT ||
|
|
345
|
-
content.primaryCategory === NsContent.EPrimaryCategory.COMP_ASSESSMENT ||
|
|
346
|
-
content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM ||
|
|
347
|
-
content.primaryCategory === NsContent.EPrimaryCategory.OFFLINE_SESSION) {
|
|
348
|
-
return content;
|
|
349
|
-
}
|
|
350
|
-
const firstChild = content.children[0];
|
|
351
|
-
const resultContent = this.getFirstChildInHierarchy(firstChild);
|
|
352
|
-
return resultContent;
|
|
353
|
-
}
|
|
354
|
-
getRegistrationStatus(source) {
|
|
355
|
-
return this.http.get(`${API_END_POINTS.REGISTRATION_STATUS}/${source}`).toPromise();
|
|
356
|
-
}
|
|
357
|
-
fetchConfig(url) {
|
|
358
|
-
return this.http.get(url);
|
|
359
|
-
}
|
|
360
|
-
addCertTemplate(body) {
|
|
361
|
-
return this.http.patch(`${API_END_POINTS.CERT_ADD_TEMPLATE}`, body);
|
|
362
|
-
}
|
|
363
|
-
issueCert(body) {
|
|
364
|
-
return this.http.post(`${API_END_POINTS.CERT_ISSUE}`, body);
|
|
365
|
-
}
|
|
366
|
-
downloadCert(certId) {
|
|
367
|
-
return this.http.get(`${API_END_POINTS.CERT_DOWNLOAD(certId)}`);
|
|
368
|
-
}
|
|
369
|
-
trendingContentSearch(req) {
|
|
370
|
-
req.query = req.query || '';
|
|
371
|
-
return this.http.post(API_END_POINTS.TRENDING_CONTENT_SEARCH, req);
|
|
372
|
-
}
|
|
373
|
-
getKarmaPoitns(limit, offset) {
|
|
374
|
-
return this.http.post(API_END_POINTS.READ_KARMAPOINTS, { limit, offset }).pipe(catchError(_err => of(true)));
|
|
375
|
-
}
|
|
376
|
-
fetchProgramContent(contentId) {
|
|
377
|
-
let url = '';
|
|
378
|
-
const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
|
|
379
|
-
if (!forPreview) {
|
|
380
|
-
return this.http.get(API_END_POINTS.CONTENT_READ(contentId));
|
|
381
|
-
}
|
|
382
|
-
if (window.location.href.includes('editMode=true')) {
|
|
383
|
-
url = `/apis/proxies/v8/extended/content/v1/read/${contentId}`;
|
|
384
|
-
}
|
|
385
|
-
else {
|
|
386
|
-
url = `/api/content/v1/read/${contentId}`;
|
|
387
|
-
}
|
|
388
|
-
return this.http.get(url);
|
|
389
|
-
// return this.http.get<NsContent.IContent[]>(API_END_POINTS.CONTENT_READ(contentId))
|
|
390
|
-
}
|
|
391
|
-
fetchExternalContent(contentId) {
|
|
392
|
-
return this.http.get(API_END_POINTS.EXT_CONTENT_READ(contentId));
|
|
393
|
-
}
|
|
394
|
-
fetchExternalPublicContent(partenerName, contentId) {
|
|
395
|
-
return this.http.get(API_END_POINTS.EXT_PUBLIC_CONTENT(partenerName, contentId));
|
|
396
|
-
}
|
|
397
|
-
fetchExtUserContentEnroll(contentId) {
|
|
398
|
-
return this.http.get(API_END_POINTS.EXT_USER_COURSE_ENROLL(contentId));
|
|
399
|
-
}
|
|
400
|
-
extContentEnroll(requestBody) {
|
|
401
|
-
return this.http.post(`${API_END_POINTS.EXT_CONTENT_EROLL}`, requestBody);
|
|
402
|
-
}
|
|
403
|
-
getCourseKarmaPoints(request) {
|
|
404
|
-
return this.http.post(API_END_POINTS.READ_COURSE_KARMAPOINTS, request);
|
|
405
|
-
}
|
|
406
|
-
claimKarmapoints(request) {
|
|
407
|
-
return this.http.post(API_END_POINTS.CLAIM_KARMAPOINTS, request);
|
|
408
|
-
}
|
|
409
|
-
userKarmaPoints() {
|
|
410
|
-
return this.http.post(API_END_POINTS.USER_KARMA_POINTS, {});
|
|
411
|
-
}
|
|
412
|
-
getEnrolledData(doId) {
|
|
413
|
-
const enrollmentMapData = JSON.parse(localStorage.getItem('enrollmentMapData') || '{}');
|
|
414
|
-
const enrolledCourseData = enrollmentMapData[doId];
|
|
415
|
-
return enrolledCourseData;
|
|
416
|
-
}
|
|
417
|
-
async getResourseLink(content) {
|
|
418
|
-
const enrolledCourseData = this.getEnrolledData(content.identifier);
|
|
419
|
-
if (enrolledCourseData) {
|
|
420
|
-
if (enrolledCourseData && enrolledCourseData.content && enrolledCourseData.content.status &&
|
|
421
|
-
enrolledCourseData.content.status.toLowerCase() !== 'retired') {
|
|
422
|
-
if (enrolledCourseData.content.courseCategory === NsContent.ECourseCategory.BLENDED_PROGRAM ||
|
|
423
|
-
enrolledCourseData.content.courseCategory === NsContent.ECourseCategory.INVITE_ONLY_PROGRAM ||
|
|
424
|
-
enrolledCourseData.content.courseCategory === NsContent.ECourseCategory.MODERATED_PROGRAM ||
|
|
425
|
-
enrolledCourseData.content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM ||
|
|
426
|
-
enrolledCourseData.content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM) {
|
|
427
|
-
if (!this.isBatchInProgress(enrolledCourseData.batch)) {
|
|
428
|
-
return this.gotoTocPage(content);
|
|
429
|
-
}
|
|
430
|
-
const returnData = await this.checkForDataToFormUrl(content, enrolledCourseData);
|
|
431
|
-
return returnData;
|
|
432
|
-
}
|
|
433
|
-
const data = await this.checkForDataToFormUrl(content, enrolledCourseData);
|
|
434
|
-
return data;
|
|
435
|
-
}
|
|
436
|
-
return '';
|
|
437
|
-
}
|
|
438
|
-
return this.gotoTocPage(content);
|
|
439
|
-
}
|
|
440
|
-
async checkForDataToFormUrl(content, enrollData) {
|
|
441
|
-
let urlData;
|
|
442
|
-
if (enrollData.completionPercentage === 100) {
|
|
443
|
-
return this.gotoTocPage(enrollData);
|
|
444
|
-
}
|
|
445
|
-
// if (enrollData.lrcProgressDetails && enrollData.lrcProgressDetails.mimeType) {
|
|
446
|
-
// const modifyEnrollData = {
|
|
447
|
-
// ...enrollData,
|
|
448
|
-
// identifier: enrollData.collectionId,
|
|
449
|
-
// primaryCategory: enrollData.content.primaryCategory,
|
|
450
|
-
// name: enrollData.content.name,
|
|
451
|
-
// }
|
|
452
|
-
// if (modifyEnrollData.lastReadContentId) {
|
|
453
|
-
// return this.getResourseDataWithData(modifyEnrollData,
|
|
454
|
-
// enrollData.lastReadContentId, enrollData.lrcProgressDetails.mimeType)
|
|
455
|
-
// }
|
|
456
|
-
// if (modifyEnrollData.firstChildId) {
|
|
457
|
-
// return this.getResourseDataWithData(modifyEnrollData,
|
|
458
|
-
// enrollData.firstChildId,
|
|
459
|
-
// enrollData.lrcProgressDetails.mimeType)
|
|
460
|
-
// }
|
|
461
|
-
// }
|
|
462
|
-
if (enrollData.lastReadContentId || enrollData.firstChildId) {
|
|
463
|
-
const doId = enrollData.lastReadContentId || enrollData.firstChildId;
|
|
464
|
-
const responseData = await this.fetchProgramContent(doId).toPromise().then(async (res) => {
|
|
465
|
-
if (res && res.result && res.result.content) {
|
|
466
|
-
const contentData = res.result.content;
|
|
467
|
-
const modifyEnrollData = {
|
|
468
|
-
...enrollData,
|
|
469
|
-
identifier: enrollData.collectionId,
|
|
470
|
-
primaryCategory: enrollData.content.primaryCategory,
|
|
471
|
-
name: enrollData.content.name,
|
|
472
|
-
};
|
|
473
|
-
urlData = this.getResourseDataWithData(modifyEnrollData, contentData.identifier, contentData.mimeType);
|
|
474
|
-
if (urlData) {
|
|
475
|
-
return urlData;
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
});
|
|
479
|
-
return responseData ? responseData : this.gotoTocPage(content);
|
|
480
|
-
}
|
|
481
|
-
return this.gotoTocPage(content);
|
|
482
|
-
}
|
|
483
|
-
getResourseDataWithData(content, resourseId, mimeType) {
|
|
484
|
-
if (content) {
|
|
485
|
-
const url = viewerRouteGenerator(resourseId, mimeType, content.identifier, 'Course', false, 'Learning Resource', content.batchId, content.name);
|
|
486
|
-
return url;
|
|
487
|
-
}
|
|
488
|
-
return this.gotoTocPage(content);
|
|
489
|
-
}
|
|
490
|
-
gotoTocPage(content) {
|
|
491
|
-
const urlData = {
|
|
492
|
-
url: `/app/toc/${content.identifier ? content.identifier : content.collectionId}/overview`,
|
|
493
|
-
queryParams: { batchId: content.batchId },
|
|
494
|
-
};
|
|
495
|
-
if (content.endDate) {
|
|
496
|
-
urlData.queryParams = { ...urlData.queryParams, planType: 'cbPlan', endDate: content.endDate };
|
|
497
|
-
}
|
|
498
|
-
if (content.contentId && content.contentId.includes('ext_')) {
|
|
499
|
-
urlData.url = `/app/toc/ext/${content.contentId}`;
|
|
500
|
-
urlData.queryParams = {};
|
|
501
|
-
}
|
|
502
|
-
return urlData;
|
|
503
|
-
}
|
|
504
|
-
isBatchInProgress(batchData) {
|
|
505
|
-
// if (this.content && this.content['batches']) {
|
|
506
|
-
// const batches = this.content['batches'] as NsContent.IBatch
|
|
507
|
-
if (batchData && batchData.endDate) {
|
|
508
|
-
const now = moment().format('YYYY-MM-DD');
|
|
509
|
-
const startDate = moment(batchData.startDate).format('YYYY-MM-DD');
|
|
510
|
-
const endDate = batchData.endDate ? moment(batchData.endDate).format('YYYY-MM-DD') : now;
|
|
511
|
-
return (
|
|
512
|
-
// batch.status &&
|
|
513
|
-
moment(startDate).isSameOrBefore(now)
|
|
514
|
-
&& moment(endDate).isSameOrAfter(now));
|
|
515
|
-
}
|
|
516
|
-
return true;
|
|
517
|
-
}
|
|
518
|
-
getPreAssessmentFirstChildInHierarchy(content) {
|
|
519
|
-
if (!(content.children || []).length) {
|
|
520
|
-
return content;
|
|
521
|
-
}
|
|
522
|
-
if ((content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM &&
|
|
523
|
-
!(content.artifactUrl && content.artifactUrl.length)) ||
|
|
524
|
-
content.primaryCategory === NsContent.EPrimaryCategory.MANDATORY_COURSE_GOAL ||
|
|
525
|
-
(content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM &&
|
|
526
|
-
!(content.artifactUrl && content.artifactUrl.length)) ||
|
|
527
|
-
(content.primaryCategory === NsContent.EPrimaryCategory.MODULE &&
|
|
528
|
-
!(content.artifactUrl && content.artifactUrl.length))) {
|
|
529
|
-
const child = content.children[0];
|
|
530
|
-
return this.getPreAssessmentFirstChildInHierarchy(child);
|
|
531
|
-
}
|
|
532
|
-
if (content.primaryCategory === NsContent.EPrimaryCategory.RESOURCE ||
|
|
533
|
-
content.primaryCategory === NsContent.EPrimaryCategory.KNOWLEDGE_ARTIFACT ||
|
|
534
|
-
content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM ||
|
|
535
|
-
content.primaryCategory === NsContent.EPrimaryCategory.PRACTICE_RESOURCE ||
|
|
536
|
-
content.primaryCategory === NsContent.EPrimaryCategory.FINAL_ASSESSMENT ||
|
|
537
|
-
content.primaryCategory === NsContent.EPrimaryCategory.COMP_ASSESSMENT ||
|
|
538
|
-
content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM ||
|
|
539
|
-
content.primaryCategory === NsContent.EPrimaryCategory.OFFLINE_SESSION) {
|
|
540
|
-
return content;
|
|
541
|
-
}
|
|
542
|
-
const firstChild = content.children[0];
|
|
543
|
-
const resultContent = this.getPreAssessmentFirstChildInHierarchy(firstChild);
|
|
544
|
-
return resultContent;
|
|
545
|
-
}
|
|
546
|
-
fetchHierarchyContent(contentId, hierarchyType = 'detail') {
|
|
547
|
-
let url = '';
|
|
548
|
-
const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
|
|
549
|
-
if (!forPreview) {
|
|
550
|
-
url = `/apis/proxies/v8/action/content/v3/hierarchy/${contentId}?hierarchyType=${hierarchyType}`;
|
|
551
|
-
}
|
|
552
|
-
else {
|
|
553
|
-
const forcreator = window.location.href.includes('editMode=true');
|
|
554
|
-
if (forcreator) {
|
|
555
|
-
url = `apis/proxies/v8/action/content/v3/hierarchy/${contentId}?mode=edit`;
|
|
556
|
-
}
|
|
557
|
-
else {
|
|
558
|
-
url = `/api/course/v1/hierarchy/${contentId}?hierarchyType=${hierarchyType}`;
|
|
559
|
-
}
|
|
560
|
-
}
|
|
561
|
-
return this.http.get(url).pipe(shareReplay(1));
|
|
562
|
-
}
|
|
563
|
-
fetchContentData(contentId) {
|
|
564
|
-
let url = '';
|
|
565
|
-
const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
|
|
566
|
-
if (!forPreview) {
|
|
567
|
-
return this.http.get(API_END_POINTS.CONTENT_READ(contentId));
|
|
568
|
-
}
|
|
569
|
-
if (window.location.href.includes('editMode=true') && window.location.href.includes('_rc')) {
|
|
570
|
-
url = `/apis/proxies/v8/extended/content/v1/read/${contentId}`;
|
|
571
|
-
}
|
|
572
|
-
else {
|
|
573
|
-
url = `/api/content/v1/read/${contentId}`;
|
|
574
|
-
}
|
|
575
|
-
return this.http.get(url);
|
|
576
|
-
}
|
|
577
|
-
getUserEnrollmentData(userId, request) {
|
|
578
|
-
return this.http.post(API_END_POINTS.ENROLL_CONTENT_DATA(userId), request).pipe(map((rData) => {
|
|
579
|
-
const result = rData?.result ?? null;
|
|
580
|
-
return { data: result, error: null };
|
|
581
|
-
}), catchError((error) => {
|
|
582
|
-
return of({ data: null, error });
|
|
583
|
-
}));
|
|
584
|
-
}
|
|
585
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetContentService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigurationsService }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
586
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetContentService, providedIn: 'root' }); }
|
|
587
|
-
}
|
|
588
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetContentService, decorators: [{
|
|
589
|
-
type: Injectable,
|
|
590
|
-
args: [{
|
|
591
|
-
providedIn: 'root',
|
|
592
|
-
}]
|
|
593
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ConfigurationsService }, { type: i3.ActivatedRoute }]; } });
|
|
594
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbnRlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFDLE9BQU8sRUFBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ2xELGlCQUFpQjtBQUNqQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUE7QUFDdEIsT0FBTyxFQUFHLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDM0QsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFBOzs7OztBQUkzQixnQkFBZ0I7QUFFaEIsdUNBQXVDO0FBQ3ZDLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUE7QUFFOUMsTUFBTSxjQUFjLEdBQUc7SUFDckIsT0FBTyxFQUFFLEdBQUcsaUJBQWlCLFVBQVU7SUFDdkMsaUJBQWlCLEVBQUUsMEJBQTBCO0lBQzdDLGFBQWEsRUFBRSxHQUFHLGlCQUFpQixvQkFBb0I7SUFDdkQsYUFBYSxFQUFFLEdBQUcsaUJBQWlCLG9CQUFvQjtJQUN2RCxtQkFBbUIsRUFBRSxHQUFHLGlCQUFpQix5QkFBeUI7SUFDbEUsY0FBYyxFQUFFLEdBQUcsaUJBQWlCLCtCQUErQjtJQUNuRSxzQkFBc0IsRUFBRSxHQUFHLGlCQUFpQiw0QkFBNEI7SUFDeEUsZ0JBQWdCLEVBQUUsR0FBRyxpQkFBaUIsbUJBQW1CO0lBQ3pELGlCQUFpQixFQUFF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RUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOytHQTduQlUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgRU1QVFksIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBjYXRjaEVycm9yLCByZXRyeSwgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgTnNDb250ZW50IH0gZnJvbSAnLi93aWRnZXQtY29udGVudC5tb2RlbCdcbi8vIHRzbGludDpkaXNhYmxlXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyAgdmlld2VyUm91dGVHZW5lcmF0b3IgfSBmcm9tICcuL3ZpZXdlci1yb3V0ZS11dGlsJ1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcbmltcG9ydCB7IE5TU2VhcmNoIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjIvbGliL3NlcnZpY2VzL3dpZGdldC1zZWFyY2gubW9kZWwnXG5pbXBvcnQgeyBOc0NvbnRlbnRTdHJpcE11bHRpcGxlIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjIvbGliL3NlcnZpY2VzL2NvbnRlbnQtc3RyaXAtbXVsdGlwbGUubW9kZWwnXG4vLyB0c2xpbnQ6ZW5hYmxlXG5cbi8vIFRPRE86IG1vdmUgdGhpcyBpbiBzb21lIGNvbW1vbiBwbGFjZVxuY29uc3QgUFJPVEVDVEVEX1NMQUdfVjggPSAnL2FwaXMvcHJvdGVjdGVkL3Y4J1xuXG5jb25zdCBBUElfRU5EX1BPSU5UUyA9IHtcbiAgQ09OVEVOVDogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnRgLFxuICBBVVRIT1JJTkdfQ09OVEVOVDogYC9hcGkvY291cnNlL3YxL2hpZXJhcmNoeWAsXG4gIENPTlRFTlRfTElLRVM6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L2xpa2VDb3VudGAsXG4gIFNFVF9TM19DT09LSUU6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L3NldENvb2tpZWAsXG4gIFNFVF9TM19JTUFHRV9DT09LSUU6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L3NldEltYWdlQ29va2llYCxcbiAgRkVUQ0hfTUFOSUZFU1Q6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L2dldFdlYk1vZHVsZU1hbmlmZXN0YCxcbiAgRkVUQ0hfV0VCX01PRFVMRV9GSUxFUzogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvZ2V0V2ViTW9kdWxlRmlsZXNgLFxuICBNVUxUSVBMRV9DT05URU5UOiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudC9tdWx0aXBsZWAsXG4gIENPTlRFTlRfU0VBUkNIX1Y1OiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudC9zZWFyY2hWNWAsXG4gIENPTlRFTlRfU0VBUkNIX1Y2OiBgL2FwaXMvcHJveGllcy92OC9zdW5iaXJkaWdvdC9zZWFyY2hgLFxuICBUUkVORElOR19DT05URU5UX1NFQVJDSDogYGFwaXMvcHJveGllcy92OC90cmVuZGluZy9jb250ZW50L3NlYXJjaGAsXG4gIENPTlRFTlRfU0VBUkNIX1JFTEFURURfQ0JQX1Y2OiBgL2FwaXMvcHJveGllcy92OC9zdW5iaXJkaWdvdC9zZWFyY2hgLFxuICBDT05URU5UX1NFQVJDSF9SRUdJT05fUkVDT01NRU5EQVRJT046IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L3NlYXJjaFJlZ2lvblJlY29tbWVuZGF0aW9uYCxcbiAgQ09OVEVOVF9ISVNUT1JZOiBgJHtQUk9URUNURURfU0xBR19WOH0vdXNlci9oaXN0b3J5YCxcbiAgQ09OVEVOVF9ISVNUT1JZVjI6IGAvYXBpcy9wcm94aWVzL3Y4L3JlYWQvY29udGVudC1wcm9ncmVzYCxcbiAgQ09VUlNFX0JBVENIX0xJU1Q6IGAvYXBpcy9wcm94aWVzL3Y4L2xlYXJuZXIvY291cnNlL3YxL2JhdGNoL2xpc3RgLFxuICBDT1VSU0VfQkFUQ0g6IGAvYXBpcy9wcm94aWVzL3Y4L2NvdXJzZS92MS9iYXRjaC9yZWFkYCxcbiAgQVVUT19BU1NJR05fQkFUQ0g6IGAvYXBpcy9wcm90ZWN0ZWQvdjgvY29ob3J0cy91c2VyL2F1dG9lbnJvbGxtZW50L2AsXG4gIEFVVE9fQVNTSUdOX0NVUkFURURfQkFUQ0g6IGAvYXBpcy9wcm94aWVzL3Y4L2N1cmF0ZWRwcm9ncmFtL3YxL2Vucm9sYCxcbiAgQVVUT19BU1NJR05fT1BFTl9QUk9HUkFNOiBgL2FwaXMvcHJveGllcy92OC9vcGVucHJvZ3JhbS92MS9lbnJvbGAsXG4gIFVTRVJfQ09OVElOVUVfTEVBUk5JTkc6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS91c2VyL2hpc3RvcnkvY29udGludWVgLFxuICBDT05URU5UX1JBVElORzogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L3VzZXIvcmF0aW5nYCxcbiAgQ09MTEVDVElPTl9ISUVSQVJDSFk6ICh0eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+XG4gICAgYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvY29sbGVjdGlvbi8ke3R5cGV9LyR7aWR9YCxcbiAgUkVHSVNUUkFUSU9OX1NUQVRVUzogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2FkbWluL3VzZXJSZWdpc3RyYXRpb24vY2hlY2tVc2VyUmVnaXN0cmF0aW9uQ29udGVudGAsXG4gIE1BUktfQVNfQ09NUExFVEVfTUVUQTogKGNvbnRlbnRJZDogc3RyaW5nKSA9PiBgJHtQUk9URUNURURfU0xBR19WOH0vdXNlci9wcm9ncmVzcy8ke2NvbnRlbnRJZH1gLFxuICBFTlJPTExfQkFUQ0g6IGAvYXBpcy9wcm94aWVzL3Y4L2xlYXJuZXIvY291cnNlL3YxL2Vucm9sYCxcbiAgRU5ST0xMX0JBVENIX1dGOiBgL2FwaXMvcHJveGllcy92OC93b3JrZmxvdy9ibGVuZGVkcHJvZ3JhbS9lbnJvbGAsXG4gIFdJVEhEUkFXX0JBVENIX1dGOiBgL2FwaXMvcHJveGllcy92OC93b3JrZmxvdy9ibGVuZGVkcHJvZ3JhbS91bmVucm9sYCxcbiAgQkxFTkRFRF9VU0VSX1dGOiBgL2FwaXMvcHJveGllcy92OC93b3JrZmxvdy9ibGVuZGVkcHJvZ3JhbS91c2VyL3NlYXJjaGAsXG4gIEJMRU5ERURfVVNFUl9DT1VOVDogYGFwaXMvcHJveGllcy92OC93b3JrZmxvdy9ibGVuZGVkcHJvZ3JhbS9lbnJvbC9zdGF0dXMvY291bnRgLFxuICBDRVJUX0FERF9URU1QTEFURTogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvaG9ydHMvY291cnNlL2JhdGNoL2NlcnQvdGVtcGxhdGUvYWRkYCxcbiAgQ0VSVF9JU1NVRTogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvaG9ydHMvY291cnNlL2JhdGNoL2NlcnQvaXNzdWVgLFxuICBDRVJUX0RPV05MT0FEOiAoY2VydElkOiBhbnkpID0+IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb2hvcnRzL2NvdXJzZS9iYXRjaC9jZXJ0L2Rvd25sb2FkLyR7Y2VydElkfWAsXG4gIFJFQURfS0FSTUFQT0lOVFM6IGAvYXBpcy9wcm94aWVzL3Y4L2thcm1hcG9pbnRzL3JlYWRgLFxuICBDT05URU5UX1JFQUQ6IChjb250ZW50SWQ6IGFueSkgPT4gYC9hcGlzL3Byb3hpZXMvdjgvZXh0ZW5kZWQvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWAsXG4gIFJFQURfQ09VUlNFX0tBUk1BUE9JTlRTOiAnL2FwaXMvcHJveGllcy92OC9rYXJtYXBvaW50cy91c2VyL2NvdXJzZS9yZWFkJyxcbiAgQ0xBSU1fS0FSTUFQT0lOVFM6ICcvYXBpcy9wcm94aWVzL3Y4L2NsYWlta2FybWFwb2ludHMnLFxuICBVU0VSX0tBUk1BX1BPSU5UUzogJy9hcGlzL3Byb3hpZXMvdjgvdXNlci90b3RhbGthcm1hcG9pbnRzJyxcbiAgRVhUX0NPTlRFTlRfUkVBRDogKGNvbnRlbnRJZDogYW55KSA9PiBgL2FwaXMvcHJveGllcy92OC9jaW9zL3YxL2NvbnRlbnQvcmVhZC8ke2NvbnRlbnRJZH1gLFxuICBFWFRfVVNFUl9DT1VSU0VfRU5ST0xMIDogKGNvbnRlbnRJZDogYW55KSA9PiBgL2FwaXMvcHJveGllcy92OC9jaW9zLWVucm9sbC92MS9yZWFkYnkvdXNlcmlkY291cnNlaWQvJHtjb250ZW50SWR9YCxcbiAgRVhUX0NPTlRFTlRfRVJPTEw6IGAvYXBpcy9wcm94aWVzL3Y4L2Npb3MtZW5yb2xsL3YxL2NyZWF0ZWAsXG4gIEVYVF9QVUJMSUNfQ09OVEVOVDogKHBhcnRlbnQ6IGFueSwgY29udGVudElkOiBhbnkpID0+IGAvYXBpcy9wcm94aWVzL3Y4L2Npb3NJbnRlZ3JhdGlvbi92MS9yZWFkL2NvbnRlbnQvJHtwYXJ0ZW50fS8ke2NvbnRlbnRJZH1gLFxuICBFTlJPTExfQ09OVEVOVF9EQVRBOiAodXNlcklkOiBzdHJpbmcsKSA9PiBgL2FwaXMvcHJveGllcy92OC9sZWFybmVyL2NvdXJzZS92NC91c2VyL2Vucm9sbG1lbnQvZGV0YWlscy8ke3VzZXJJZH1gLFxuICBMRUFSTkVSX1BBVEhXQVlfRU5ST0xMOiAoY29udGVudElkOiBzdHJpbmcpID0+IGAvYXBpcy9wcm94aWVzL3Y4L2xlYXJuaW5ncGF0aHdheS92MS9lbnJvbC8ke2NvbnRlbnRJZH1gLFxufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0Q29udGVudFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgKSB7XG4gIH1cblxuICB0b2NDb25maWdEYXRhOiBhbnkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pXG4gIHRvY0NvbmZpZ0RhdGEkICA9IHRoaXMudG9jQ29uZmlnRGF0YS5hc09ic2VydmFibGUoKVxuICBjdXJyZW50TWV0YURhdGEhOiBOc0NvbnRlbnQuSUNvbnRlbnRcbiAgY3VycmVudENvbnRlbnRSZWFkTWV0YURhdGEhOiBOc0NvbnRlbnQuSUNvbnRlbnRcbiAgY3VycmVudEJhdGNoRW5yb2xsbWVudExpc3QhOiBOc0NvbnRlbnQuSUNvdXJzZVtdXG4gIHByb2dyYW1DaGlsZENvdXJzZVJlc3VtZURhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pXG4gIHByb2dyYW1DaGlsZENvdXJzZVJlc3VtZURhdGEkID0gdGhpcy5wcm9ncmFtQ2hpbGRDb3Vyc2VSZXN1bWVEYXRhLmFzT2JzZXJ2YWJsZSgpXG4gIGxhbmd1YWdlTWFwUHJvZ3Jlc3M6IGFueVxuICBpc1Jlc291cmNlKHByaW1hcnlDYXRlZ29yeTogc3RyaW5nKSB7XG4gICAgaWYgKHByaW1hcnlDYXRlZ29yeSkge1xuICAgICAgY29uc3QgaXNSZXNvdXJjZSA9IChwcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUmVzb3VyY2VQcmltYXJ5Q2F0ZWdvcmllcy5MRUFSTklOR19SRVNPVVJDRSkgfHxcbiAgICAgICAgKHByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVSZXNvdXJjZVByaW1hcnlDYXRlZ29yaWVzLlBSQUNUSUNFX1JFU09VUkNFKSB8fFxuICAgICAgICAocHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVJlc291cmNlUHJpbWFyeUNhdGVnb3JpZXMuRklOQUxfQVNTRVNTTUVOVCkgfHxcbiAgICAgICAgKHByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVSZXNvdXJjZVByaW1hcnlDYXRlZ29yaWVzLkNPTVBfQVNTRVNTTUVOVCkgfHxcbiAgICAgICAgKHByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVSZXNvdXJjZVByaW1hcnlDYXRlZ29yaWVzLk9GRkxJTkVfU0VTU0lPTilcbiAgICAgIHJldHVybiBpc1Jlc291cmNlXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZmV0Y2hNYXJrQXNDb21wbGV0ZU1ldGEoaWRlbnRpZmllcjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICBjb25zdCB1cmwgPSBBUElfRU5EX1BPSU5UUy5NQVJLX0FTX0NPTVBMRVRFX01FVEEoaWRlbnRpZmllcilcbiAgICAvLyByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwpLnRvUHJvbWlzZSgpXG4gICAgaWYgKHVybCkgeyB9XG4gICAgcmV0dXJuIG9mKCkudG9Qcm9taXNlKClcbiAgfVxuXG4gIHVwZGF0ZVRvY0NvbmZpZyhkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnRvY0NvbmZpZ0RhdGEubmV4dChkYXRhKVxuICB9XG5cbiAgZmV0Y2hDb250ZW50KFxuICAgIGNvbnRlbnRJZDogc3RyaW5nLFxuICAgIGhpZXJhcmNoeVR5cGU6ICdhbGwnIHwgJ21pbmltYWwnIHwgJ2RldGFpbCcgPSAnZGV0YWlsJyxcbiAgICBfYWRkaXRpb25hbEZpZWxkczogc3RyaW5nW10gPSBbXSxcbiAgICBwcmltYXJ5Q2F0ZWdvcnk/OiBzdHJpbmcgfCBudWxsLFxuICApOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudD4ge1xuICAgIC8vIGNvbnN0IHVybCA9IGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlR9LyR7Y29udGVudElkfT9oaWVyYXJjaHlUeXBlPSR7aGllcmFyY2h5VHlwZX1gXG4gICAgbGV0IHVybCA9ICcnXG4gICAgY29uc3QgZm9yUHJldmlldyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHVibGljLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcmcHJldmlldz10cnVlJylcbiAgICBpZiAocHJpbWFyeUNhdGVnb3J5ICYmIHRoaXMuaXNSZXNvdXJjZShwcmltYXJ5Q2F0ZWdvcnkpKSB7XG4gICAgICBpZiAoIWZvclByZXZpZXcpIHtcbiAgICAgICAgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvZXh0ZW5kZWQvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZWRpdE1vZGU9dHJ1ZScpICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdfcmMnKSkge1xuICAgICAgICAgIHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2V4dGVuZGVkL2NvbnRlbnQvdjEvcmVhZC8ke2NvbnRlbnRJZH1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmwgPSBgL2FwaS9jb250ZW50L3YxL3JlYWQvJHtjb250ZW50SWR9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZm9yUHJldmlldykge1xuICAgICAgICB1cmwgPSBgL2FwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9oaWVyYXJjaHkvJHtjb250ZW50SWR9P2hpZXJhcmNoeVR5cGU9JHtoaWVyYXJjaHlUeXBlfWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZvcmNyZWF0b3IgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZWRpdE1vZGU9dHJ1ZScpXG4gICAgICAgIGlmIChmb3JjcmVhdG9yKSB7XG4gICAgICAgICAgdXJsID0gYGFwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9oaWVyYXJjaHkvJHtjb250ZW50SWR9P21vZGU9ZWRpdGBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cmwgPSBgL2FwaS9jb3Vyc2UvdjEvaGllcmFyY2h5LyR7Y29udGVudElkfT9oaWVyYXJjaHlUeXBlPSR7aGllcmFyY2h5VHlwZX1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gcmV0dXJuIHRoaXMuaHR0cFxuICAgIC8vICAgLnBvc3Q8TnNDb250ZW50LklDb250ZW50Pih1cmwsIHsgYWRkaXRpb25hbEZpZWxkcyB9KVxuICAgIC8vICAgLnBpcGUocmV0cnkoMSkpXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDxOc0NvbnRlbnQuSUNvbnRlbnQ+KHVybClcbiAgICAgIC5waXBlKHNoYXJlUmVwbGF5KDEpKVxuICAgIC8vIGlmIChhcGlEYXRhICYmIGFwaURhdGEucmVzdWx0KSB7XG4gICAgLy8gICByZXR1cm4gYXBpRGF0YS5yZXN1bHQuY29udGVudFxuICAgIC8vIH1cbiAgfVxuICBmZXRjaEF1dGhvcmluZ0NvbnRlbnQoY29udGVudElkOiBzdHJpbmcsIGFwaVR5cGU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGZvcmNyZWF0b3IgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZWRpdE1vZGU9dHJ1ZScpXG4gICAgbGV0IHVybCA9ICcnXG4gICAgaWYgKGZvcmNyZWF0b3IpIHtcbiAgICAgIHVybCA9IGBhcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvaGllcmFyY2h5LyR7Y29udGVudElkfT9tb2RlPWVkaXRgXG4gICAgfSBlbHNlIGlmKGFwaVR5cGUgJiYgYXBpVHlwZSA9PT0gJ3JlYWQnKSB7XG4gICAgICB1cmwgPSBgL2FwaS9jb250ZW50L3YxL3JlYWQvJHtjb250ZW50SWR9YFxuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgPSBgJHtBUElfRU5EX1BPSU5UUy5BVVRIT1JJTkdfQ09OVEVOVH0vJHtjb250ZW50SWR9P2hpZXJhcmNoeVR5cGU9ZGV0YWlsYFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnQ+KHVybCkucGlwZShzaGFyZVJlcGxheSgxKSwgciA9PiByKVxuICB9XG4gIGZldGNoTXVsdGlwbGVDb250ZW50KGlkczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50W10+KFxuICAgICAgYCR7QVBJX0VORF9QT0lOVFMuTVVMVElQTEVfQ09OVEVOVH0vJHtpZHMuam9pbignLCcpfWAsXG4gICAgKVxuICB9XG4gIGZldGNoQ29sbGVjdGlvbkhpZXJhcmNoeSh0eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIHBhZ2VOdW1iZXI6IG51bWJlciA9IDAsIHBhZ2VTaXplOiBudW1iZXIgPSAxKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb2xsZWN0aW9uSGllcmFyY2h5UmVzcG9uc2U+KFxuICAgICAgYCR7QVBJX0VORF9QT0lOVFMuQ09MTEVDVElPTl9ISUVSQVJDSFkoXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGlkLFxuICAgICAgKX0/cGFnZU51bWJlcj0ke3BhZ2VOdW1iZXJ9JnBhZ2VTaXplPSR7cGFnZVNpemV9YCxcbiAgICApXG4gIH1cblxuICBmZXRjaEJsZW5kZWRDb3Vyc2UoKSB7XG5cbiAgfVxuXG4gIGZldGNoQ291cnNlQmF0Y2hlcyhyZXE6IGFueSk6IE9ic2VydmFibGU8TnNDb250ZW50LklCYXRjaExpc3RSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2U+KEFQSV9FTkRfUE9JTlRTLkNPVVJTRV9CQVRDSF9MSVNULCByZXEpXG4gICAgICAucGlwZShcbiAgICAgICAgcmV0cnkoMSksXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoZGF0YTogYW55KSA9PiBkYXRhLnJlc3VsdC5yZXNwb25zZVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICAvLyBmZXRjaCBpbmRpdmlkdWFsIGJhdGNoXG4gIGZldGNoQ291cnNlQmF0Y2goYmF0Y2hJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YT4oXG4gICAgICBgJHtBUElfRU5EX1BPSU5UUy5DT1VSU0VfQkFUQ0h9LyR7YmF0Y2hJZH1gLFxuICAgIClcbiAgfVxuXG4gIGF1dG9Bc3NpZ25CYXRjaEFwaShpZGVudGlmaWVyOiBhbnksIGxhbmd1YWdlPzogYW55KTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlPiB7XG4gICAgbGV0IGVucm9sbExhbmc6IHN0cmluZyA9IGxhbmd1YWdlPy5sYW5nSWQgfHwgJ2VuZ2xpc2gnXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklCYXRjaExpc3RSZXNwb25zZT4oYCR7QVBJX0VORF9QT0lOVFMuQVVUT19BU1NJR05fQkFUQ0h9JHtpZGVudGlmaWVyfT9sYW5ndWFnZT0ke2Vucm9sbExhbmd9YClcbiAgICAgIC5waXBlKFxuICAgICAgICByZXRyeSgxKSxcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChkYXRhOiBhbnkpID0+IGRhdGEucmVzdWx0LnJlc3BvbnNlXG4gICAgICAgIClcbiAgICAgIClcbiAgfVxuXG4gIGF1dG9FbnJvbGxMUChpZGVudGlmaWVyOiBhbnkpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlPihgJHtBUElfRU5EX1BPSU5UUy5MRUFSTkVSX1BBVEhXQVlfRU5ST0xMKGlkZW50aWZpZXIpfWApXG4gICAgICAucGlwZShcbiAgICAgICAgcmV0cnkoMSksXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoZGF0YTogYW55KSA9PiBkYXRhLnJlc3VsdC5yZXNwb25zZVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuXG4gIGF1dG9Bc3NpZ25DdXJhdGVkQmF0Y2hBcGkocmVxdWVzdDogYW55LCBwcm9ncmFtVHlwZTogYW55KTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlPiB7XG4gICAgY29uc3QgdXJsID0gcHJvZ3JhbVR5cGUgPT09IE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuTU9ERVJBVEVEX1BST0dSQU0gP1xuICAgIEFQSV9FTkRfUE9JTlRTLkFVVE9fQVNTSUdOX09QRU5fUFJPR1JBTSA6IEFQSV9FTkRfUE9JTlRTLkFVVE9fQVNTSUdOX0NVUkFURURfQkFUQ0hcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TnNDb250ZW50LklCYXRjaExpc3RSZXNwb25zZT4oYCR7dXJsfWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShcbiAgICAgICAgcmV0cnkoMSksXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoZGF0YTogYW55KSA9PiBkYXRhLnJlc3VsdC5yZXNwb25zZVxuICAgICAgICApXG4gICAgICApXG4gIH1cblxuICBlbnJvbGxVc2VyVG9CYXRjaChyZXE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KEFQSV9FTkRfUE9JTlRTLkVOUk9MTF9CQVRDSCwgcmVxKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gIH1cblxuICBlbnJvbGxBbmRVbmVucm9sbFVzZXJUb0JhdGNoV0YocmVxOiBhbnksIHR5cGU6IGFueSkge1xuICAgIGNvbnN0IHVybDogYW55ID0gdHlwZSA9PT0gJ1dJVEhEUkFXJyA/IEFQSV9FTkRfUE9JTlRTLldJVEhEUkFXX0JBVENIX1dGIDogQVBJX0VORF9QT0lOVFMuRU5ST0xMX0JBVENIX1dGXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCByZXEpXG4gICAgICAudG9Qcm9taXNlKClcbiAgfVxuXG4gIGZldGNoQmxlbmRlZFVzZXJXRihyZXE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KEFQSV9FTkRfUE9JTlRTLkJMRU5ERURfVVNFUl9XRiwgcmVxKVxuICAgICAgLnRvUHJvbWlzZSgpXG4gIH1cblxuICBmZXRjaEJsZW5kZWRVc2VyQ09VTlQocmVxOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdChBUElfRU5EX1BPSU5UUy5CTEVOREVEX1VTRVJfQ09VTlQsIHJlcSlcbiAgICAgIC50b1Byb21pc2UoKVxuICB9XG5cbiAgZmV0Y2hDb250ZW50TGlrZXMoY29udGVudElkczogeyBjb250ZW50X2lkOiBzdHJpbmdbXSB9KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8eyBbaWRlbnRpZmllcjogc3RyaW5nXTogbnVtYmVyIH0+KEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfTElLRVMsIGNvbnRlbnRJZHMpXG4gICAgICAudG9Qcm9taXNlKClcbiAgfVxuICBmZXRjaENvbnRlbnRSYXRpbmdzKGNvbnRlbnRJZHM6IHsgY29udGVudElkczogc3RyaW5nW10gfSkge1xuICAgIGlmIChjb250ZW50SWRzKSB7IH1cbiAgICAvLyByZXR1cm4gdGhpcy5odHRwXG4gICAgLy8gICAucG9zdChgJHtBUElfRU5EX1BPSU5UUy5DT05URU5UX1JBVElOR30vcmF0aW5nYCwgY29udGVudElkcylcbiAgICAvLyAgIC50b1Byb21pc2UoKVxuICAgIHJldHVybiBvZigpLnRvUHJvbWlzZSgpXG4gIH1cblxuICBmZXRjaENvbnRlbnRIaXN0b3J5KGNvbnRlbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YT4oXG4gICAgICBgJHtBUElfRU5EX1BPSU5UUy5DT05URU5UX0hJU1RPUll9LyR7Y29udGVudElkfWAsXG4gICAgKVxuICB9XG5cbiAgZmV0Y2hDb250ZW50SGlzdG9yeVYyKHJlcTogTnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YVJlcSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaXNQcmVBc3Nlc3NtZW50ID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5wcmVBc3Nlc3NtZW50XG4gICAgcmVxLnJlcXVlc3QuZmllbGRzID0gWydwcm9ncmVzc2RldGFpbHMnXVxuICAgIGlmKHJlcS5yZXF1ZXN0LmNvdXJzZUlkICYmICFpc1ByZUFzc2Vzc21lbnQpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5odHRwLnBvc3Q8TnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YT4oXG4gICAgICBgJHtBUElfRU5EX1BPSU5UUy5DT05URU5UX0hJU1RPUllWMn0vJHtyZXEucmVxdWVzdC5jb3Vyc2VJZH1gLCByZXFcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHJEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5sYW5ndWFnZU1hcFByb2dyZXNzID0gckRhdGE/LnJlc3VsdD8ubGFuZ3VhZ2VQcm9ncmVzcyB8fCB7fVxuICAgICAgICByZXR1cm4gckRhdGFcbiAgICAgIH0pLCAvLyAgKHJEYXRhLnJlc3BvbnNlRGF0YSB8fCBbXSkubWFwKChwOiBhbnkpID0+IHAubmFtZSlcbiAgICApXG4gICAgLy8gZGF0YS5zdWJzY3JpYmUoKHN1YnNjcmliZURhdGE6IGFueSkgPT4ge1xuICAgIC8vICAgICAgIHRoaXMucHJvZ3JhbUNoaWxkQ291cnNlUmVzdW1lRGF0YS5uZXh0KHsgcmVzdW1lRGF0YTogc3Vic2NyaWJlRGF0YS5yZXN1bHQuY29udGVudExpc3QsIGNvdXJzZUlkOiByZXEucmVxdWVzdC5jb3Vyc2VJZCB9KVxuICAgIC8vICAgICB9KVxuICAgIHJldHVybiBkYXRhXG4gIH1cbiAgcmV0dXJuIG9mKClcbiAgfVxuXG4gIHNldFByb2dyYW1DaGlsZFJlc3VtZURhdGEoY29udGVudExpc3Q6IGFueSwgY291cnNlSWQ6IGFueSkge1xuICAgIC8qIHRzbGludDpkaXNhYmxlICovXG4gICAgdGhpcy5wcm9ncmFtQ2hpbGRDb3Vyc2VSZXN1bWVEYXRhLm5leHQoeyByZXN1bWVEYXRhOiBjb250ZW50TGlzdCwgY291cnNlSWQgfSlcbiAgICAvKiB0c2xpbnQ6ZW5hYmxlICovXG4gIH1cblxuICBhc3luYyBjb250aW51ZUxlYXJuaW5nKGlkOiBzdHJpbmcsIGNvbGxlY3Rpb25JZD86IHN0cmluZywgY29sbGVjdGlvblR5cGU/OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyByZXNvbHZlID0+IHtcbiAgICAgIGlmIChjb2xsZWN0aW9uVHlwZSAmJlxuICAgICAgICBjb2xsZWN0aW9uVHlwZS50b0xvd2VyQ2FzZSgpID09PSAncGxheWxpc3QnKSB7XG4gICAgICAgIGNvbnN0IHJlcUJvZHkgPSB7XG4gICAgICAgICAgY29udGV4dFBhdGhJZDogY29sbGVjdGlvbklkID8gY29sbGVjdGlvbklkIDogaWQsXG4gICAgICAgICAgcmVzb3VyY2VJZDogaWQsXG4gICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgY29udGV4dEZ1bGxQYXRoOiBbY29sbGVjdGlvbklkLCBpZF0sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZGF0ZUFjY2Vzc2VkOiBEYXRlLm5vdygpLFxuICAgICAgICAgIGNvbnRleHRUeXBlOiAncGxheWxpc3QnLFxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZUNvbnRpbnVlTGVhcm5pbmcocmVxQm9keSkudG9Qcm9taXNlKCkuY2F0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVxQm9keSA9IHtcbiAgICAgICAgICBjb250ZXh0UGF0aElkOiBjb2xsZWN0aW9uSWQgPyBjb2xsZWN0aW9uSWQgOiBpZCxcbiAgICAgICAgICByZXNvdXJjZUlkOiBpZCxcbiAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7IHRpbWVzdGFtcDogRGF0ZS5ub3coKSB9KSxcbiAgICAgICAgICBkYXRlQWNjZXNzZWQ6IERhdGUubm93KCksXG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlQ29udGludWVMZWFybmluZyhyZXFCb2R5KS50b1Byb21pc2UoKS5jYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIHNhdmVDb250aW51ZUxlYXJuaW5nKGNvbnRlbnQ6IE5zQ29udGVudC5JVmlld2VyQ29udGludWVMZWFybmluZ1JlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIC8vIGNvbnN0IHVybCA9IEFQSV9FTkRfUE9JTlRTLlVTRVJfQ09OVElOVUVfTEVBUk5JTkdcbiAgICAvLyByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih1cmwsIGNvbnRlbnQpXG4gICAgaWYgKGNvbnRlbnQpIHtcblxuICAgIH1cbiAgICByZXR1cm4gb2YoKSBhcyBhbnlcbiAgfVxuXG4gIHNldFMzQ29va2llKFxuICAgIF9jb250ZW50SWQ6IHN0cmluZyxcbiAgICAvLyBfcGF0aDogc3RyaW5nLFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIC8vIHJldHVybiB0aGlzLmh0dHBcbiAgICAvLyAgIC5wb3N0KEFQSV9FTkRfUE9JTlRTLlNFVF9TM19DT09LSUUsIHsgY29udGVudElkIH0pXG4gICAgLy8gICAucGlwZShjYXRjaEVycm9yKF9lcnIgPT4gb2YodHJ1ZSkpKVxuXG4gICAgcmV0dXJuIEVNUFRZXG4gIH1cblxuICBzZXRTM0ltYWdlQ29va2llKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KEFQSV9FTkRfUE9JTlRTLlNFVF9TM19JTUFHRV9DT09LSUUsIHt9KS5waXBlKGNhdGNoRXJyb3IoX2VyciA9PiBvZih0cnVlKSkpXG4gIH1cblxuICBmZXRjaE1hbmlmZXN0KHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoQVBJX0VORF9QT0lOVFMuRkVUQ0hfTUFOSUZFU1QsIHsgdXJsIH0pXG4gIH1cbiAgZmV0Y2hXZWJNb2R1bGVDb250ZW50KHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHtBUElfRU5EX1BPSU5UUy5GRVRDSF9XRUJfTU9EVUxFX0ZJTEVTfT91cmw9JHtlbmNvZGVVUklDb21wb25lbnQodXJsKX1gKVxuICB9XG4gIHNlYXJjaChyZXE6IE5TU2VhcmNoLklTZWFyY2hSZXF1ZXN0KTogT2JzZXJ2YWJsZTxOU1NlYXJjaC5JU2VhcmNoQXBpUmVzdWx0PiB7XG4gICAgcmVxLnF1ZXJ5ID0gcmVxLnF1ZXJ5IHx8ICcnXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE5TU2VhcmNoLklTZWFyY2hBcGlSZXN1bHQ+KEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfU0VBUkNIX1Y1LCB7XG4gICAgICByZXF1ZXN0OiByZXEsXG4gICAgfSlcbiAgfVxuICBzZWFyY2hSZWdpb25SZWNvbW1lbmRhdGlvbihcbiAgICByZXE6IE5TU2VhcmNoLklTZWFyY2hPcmdSZWdpb25SZWNvbW1lbmRhdGlvblJlcXVlc3QsXG4gICk6IE9ic2VydmFibGU8TnNDb250ZW50U3RyaXBNdWx0aXBsZS5JQ29udGVudFN0cmlwUmVzcG9uc2VBcGk+IHtcbiAgICByZXEucXVlcnkgPSByZXEucXVlcnkgfHwgJydcbiAgICByZXEucHJlTGFiZWxWYWx1ZSA9XG4gICAgICAocmVxLnByZUxhYmVsVmFsdWUgfHwgJycpICtcbiAgICAgICgodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUgJiYgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUuY291bnRyeSkgfHwgJycpXG4gICAgcmVxLmZpbHRlcnMgPSB7XG4gICAgICAuLi5yZXEuZmlsdGVycyxcbiAgICAgIGxhYmVsczogW3JlcS5wcmVMYWJlbFZhbHVlIHx8ICcnXSxcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE5zQ29udGVudFN0cmlwTXVsdGlwbGUuSUNvbnRlbnRTdHJpcFJlc3BvbnNlQXBpPihcbiAgICAgIEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfU0VBUkNIX1JFR0lPTl9SRUNPTU1FTkRBVElPTixcbiAgICAgIHsgcmVxdWVzdDogcmVxIH0sXG4gICAgKVxuICB9XG4gIHNlYXJjaFY2KHJlcTogTlNTZWFyY2guSVNlYXJjaFY2UmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgYXBpUGF0aCA9IF8uZ2V0KHJlcSwgJ2FwaS5wYXRoJylcbiAgICByZXEucXVlcnkgPSByZXEucXVlcnkgfHwgJydcbiAgICBpZiAoYXBpUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihhcGlQYXRoKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihBUElfRU5EX1BPSU5UUy5DT05URU5UX1NFQVJDSF9WNiwgcmVxKVxuICB9XG5cbiAgc2VhcmNoUmVsYXRlZENCUFY2KHJlcTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihBUElfRU5EX1BPSU5UUy5DT05URU5UX1NFQVJDSF9SRUxBVEVEX0NCUF9WNiwgcmVxKVxuICB9XG5cbiAgZmV0Y2hDb250ZW50UmF0aW5nKGNvbnRlbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx7IHJhdGluZzogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDx7IHJhdGluZzogbnVtYmVyIH0+KGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUkFUSU5HfS8ke2NvbnRlbnRJZH1gKVxuICB9XG4gIGRlbGV0ZUNvbnRlbnRSYXRpbmcoY29udGVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUkFUSU5HfS8ke2NvbnRlbnRJZH1gKVxuICB9XG4gIGFkZENvbnRlbnRSYXRpbmcoY29udGVudElkOiBzdHJpbmcsIGRhdGE6IHsgcmF0aW5nOiBudW1iZXIgfSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9SQVRJTkd9LyR7Y29udGVudElkfWAsIGRhdGEpXG4gIH1cblxuICBnZXRGaXJzdENoaWxkSW5IaWVyYXJjaHkoY29udGVudDogTnNDb250ZW50LklDb250ZW50KTogTnNDb250ZW50LklDb250ZW50IHtcbiAgICBpZiAoIShjb250ZW50LmNoaWxkcmVuIHx8IFtdKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBjb250ZW50XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUFJPR1JBTSAmJlxuICAgICAgICAhKGNvbnRlbnQuYXJ0aWZhY3RVcmwgJiYgY29udGVudC5hcnRpZmFjdFVybC5sZW5ndGgpKSB8fFxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk1BTkRBVE9SWV9DT1VSU0VfR09BTCB8fFxuICAgICAgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0gJiZcbiAgICAgICAgIShjb250ZW50LmFydGlmYWN0VXJsICYmIGNvbnRlbnQuYXJ0aWZhY3RVcmwubGVuZ3RoKSkgfHxcbiAgICAgIChjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFICYmXG4gICAgICAgICEoY29udGVudC5hcnRpZmFjdFVybCAmJiBjb250ZW50LmFydGlmYWN0VXJsLmxlbmd0aCkpXG4gICAgKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGNvbnRlbnQuY2hpbGRyZW5bMF1cbiAgICAgIHJldHVybiB0aGlzLmdldEZpcnN0Q2hpbGRJbkhpZXJhcmNoeShjaGlsZClcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFIHx8XG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuS05PV0xFREdFX0FSVElGQUNUIHx8XG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUFJPR1JBTSB8fFxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlBSQUNUSUNFX1JFU09VUkNFIHx8XG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuRklOQUxfQVNTRVNTTUVOVCB8fFxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNPTVBfQVNTRVNTTUVOVCB8fFxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSB8fFxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk9GRkxJTkVfU0VTU0lPTlxuICAgICkge1xuICAgICAgcmV0dXJuIGNvbnRlbnRcbiAgICB9XG4gICAgY29uc3QgZmlyc3RDaGlsZCA9IGNvbnRlbnQuY2hpbGRyZW5bMF1cbiAgICBjb25zdCByZXN1bHRDb250ZW50ID0gdGhpcy5nZXRGaXJzdENoaWxkSW5IaWVyYXJjaHkoZmlyc3RDaGlsZClcbiAgICByZXR1cm4gcmVzdWx0Q29udGVudFxuICB9XG5cbiAgZ2V0UmVnaXN0cmF0aW9uU3RhdHVzKHNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTx7IGhhc0FjY2VzczogYm9vbGVhbjsgcmVnaXN0cmF0aW9uVXJsPzogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke0FQSV9FTkRfUE9JTlRTLlJFR0lTVFJBVElPTl9TVEFUVVN9LyR7c291cmNlfWApLnRvUHJvbWlzZSgpXG4gIH1cblxuICBmZXRjaENvbmZpZyh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4odXJsKVxuICB9XG5cbiAgYWRkQ2VydFRlbXBsYXRlKGJvZHk6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8YW55PihgJHtBUElfRU5EX1BPSU5UUy5DRVJUX0FERF9URU1QTEFURX1gLCBib2R5KVxuICB9XG5cbiAgaXNzdWVDZXJ0KGJvZHk6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke0FQSV9FTkRfUE9JTlRTLkNFUlRfSVNTVUV9YCwgYm9keSlcbiAgfVxuICBkb3dubG9hZENlcnQoY2VydElkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke0FQSV9FTkRfUE9JTlRTLkNFUlRfRE9XTkxPQUQoY2VydElkKX1gKVxuICB9XG5cbiAgdHJlbmRpbmdDb250ZW50U2VhcmNoKHJlcTogYW55KTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRlbnQ+IHtcbiAgICByZXEucXVlcnkgPSByZXEucXVlcnkgfHwgJydcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TnNDb250ZW50LklDb250ZW50PihBUElfRU5EX1BPSU5UUy5UUkVORElOR19DT05URU5UX1NFQVJDSCwgcmVxKVxuICB9XG5cbiAgZ2V0S2FybWFQb2l0bnMgKGxpbWl0OiBudW1iZXIsIG9mZnNldDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KEFQSV9FTkRfUE9JTlRTLlJFQURfS0FSTUFQT0lOVFMsIHsgbGltaXQsIG9mZnNldCB9KS5waXBlKGNhdGNoRXJyb3IoX2VyciA9PiBvZih0cnVlKSkpXG4gIH1cbiAgZmV0Y2hQcm9ncmFtQ29udGVudChjb250ZW50SWQ6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRlbnRbXT4ge1xuICAgIGxldCB1cmwgPSAnJ1xuICAgIGNvbnN0IGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpXG4gICAgaWYgKCFmb3JQcmV2aWV3KSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnRbXT4oXG4gICAgICAgIEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUkVBRChjb250ZW50SWQpLFxuICAgICAgKVxuICAgIH1cbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2VkaXRNb2RlPXRydWUnKSkge1xuICAgICAgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvZXh0ZW5kZWQvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWBcbiAgICB9IGVsc2Uge1xuICAgICAgICB1cmwgPSBgL2FwaS9jb250ZW50L3YxL3JlYWQvJHtjb250ZW50SWR9YFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnRbXT4odXJsKVxuICAgIC8vIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudFtdPihBUElfRU5EX1BPSU5UUy5DT05URU5UX1JFQUQoY29udGVudElkKSlcbiAgfVxuICBmZXRjaEV4dGVybmFsQ29udGVudChjb250ZW50SWQ6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRlbnRbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudFtdPihBUElfRU5EX1BPSU5UUy5FWFRfQ09OVEVOVF9SRUFEKGNvbnRlbnRJZCkpXG4gIH1cblxuICBmZXRjaEV4dGVybmFsUHVibGljQ29udGVudChwYXJ0ZW5lck5hbWU6IGFueSwgY29udGVudElkOiBhbnkpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50W10+KEFQSV9FTkRfUE9JTlRTLkVYVF9QVUJMSUNfQ09OVEVOVChwYXJ0ZW5lck5hbWUsIGNvbnRlbnRJZCkpXG4gIH1cblxuICBmZXRjaEV4dFVzZXJDb250ZW50RW5yb2xsKGNvbnRlbnRJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihBUElfRU5EX1BPSU5UUy5FWFRfVVNFUl9DT1VSU0VfRU5ST0xMKGNvbnRlbnRJZCkpXG4gIH1cblxuICBleHRDb250ZW50RW5yb2xsIChyZXF1ZXN0Qm9keTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuRVhUX0NPTlRFTlRfRVJPTEx9YCwgcmVxdWVzdEJvZHkpXG4gIH1cblxuICBnZXRDb3Vyc2VLYXJtYVBvaW50cyhyZXF1ZXN0OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihBUElfRU5EX1BPSU5UUy5SRUFEX0NPVVJTRV9LQVJNQVBPSU5UUywgcmVxdWVzdClcbiAgfVxuXG4gIGNsYWltS2FybWFwb2ludHMocmVxdWVzdDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oQVBJX0VORF9QT0lOVFMuQ0xBSU1fS0FSTUFQT0lOVFMsIHJlcXVlc3QpXG4gIH1cblxuICB1c2VyS2FybWFQb2ludHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oQVBJX0VORF9QT0lOVFMuVVNFUl9LQVJNQV9QT0lOVFMsIHt9KVxuICB9XG5cbiAgZ2V0RW5yb2xsZWREYXRhKGRvSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGVucm9sbG1lbnRNYXBEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZW5yb2xsbWVudE1hcERhdGEnKSB8fCAne30nKVxuICAgIGNvbnN0IGVucm9sbGVkQ291cnNlRGF0YSA9IGVucm9sbG1lbnRNYXBEYXRhW2RvSWRdXG4gICAgcmV0dXJuIGVucm9sbGVkQ291cnNlRGF0YVxuICB9XG5cbiAgYXN5bmMgZ2V0UmVzb3Vyc2VMaW5rKGNvbnRlbnQ6IGFueSkge1xuICAgIGNvbnN0IGVucm9sbGVkQ291cnNlRGF0YTogYW55ID0gdGhpcy5nZXRFbnJvbGxlZERhdGEoY29udGVudC5pZGVudGlmaWVyKVxuICAgIGlmIChlbnJvbGxlZENvdXJzZURhdGEpIHtcbiAgICAgIGlmIChlbnJvbGxlZENvdXJzZURhdGEgJiYgZW5yb2xsZWRDb3Vyc2VEYXRhLmNvbnRlbnQgJiYgZW5yb2xsZWRDb3Vyc2VEYXRhLmNvbnRlbnQuc3RhdHVzICYmXG4gICAgICAgIGVucm9sbGVkQ291cnNlRGF0YS5jb250ZW50LnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9PSAncmV0aXJlZCcpIHtcbiAgICAgICAgaWYgKGVucm9sbGVkQ291cnNlRGF0YS5jb250ZW50LmNvdXJzZUNhdGVnb3J5ID09PSAgTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0gfHxcbiAgICAgICAgICBlbnJvbGxlZENvdXJzZURhdGEuY29udGVudC5jb3Vyc2VDYXRlZ29yeSA9PT0gIE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuSU5WSVRFX09OTFlfUFJPR1JBTSB8fFxuICAgICAgICAgIGVucm9sbGVkQ291cnNlRGF0YS5jb250ZW50LmNvdXJzZUNhdGVnb3J5ID09PSAgTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5NT0RFUkFURURfUFJPR1JBTSB8fFxuICAgICAgICAgIGVucm9sbGVkQ291cnNlRGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gIE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSB8fFxuICAgICAgICAgIGVucm9sbGVkQ291cnNlRGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gIE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlBST0dSQU0pIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0JhdGNoSW5Qcm9ncmVzcyhlbnJvbGxlZENvdXJzZURhdGEuYmF0Y2gpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmdvdG9Ub2NQYWdlKGNvbnRlbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXR1cm5EYXRhID0gIGF3YWl0IHRoaXMuY2hlY2tGb3JEYXRhVG9Gb3JtVXJsKGNvbnRlbnQsIGVucm9sbGVkQ291cnNlRGF0YSlcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5EYXRhXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9ICBhd2FpdCB0aGlzLmNoZWNrRm9yRGF0YVRvRm9ybVVybChjb250ZW50LCBlbnJvbGxlZENvdXJzZURhdGEpXG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ290b1RvY1BhZ2UoY29udGVudClcbiAgfVxuICBhc3luYyBjaGVja0ZvckRhdGFUb0Zvcm1VcmwoY29udGVudDogYW55LCBlbnJvbGxEYXRhOiBhbnkpIHtcbiAgICBsZXQgdXJsRGF0YTogYW55XG4gICAgaWYgKGVucm9sbERhdGEuY29tcGxldGlvblBlcmNlbnRhZ2UgID09PSAxMDApIHtcbiAgICAgIHJldHVybiB0aGlzLmdvdG9Ub2NQYWdlKGVucm9sbERhdGEpXG4gICAgfVxuICAgIC8vIGlmIChlbnJvbGxEYXRhLmxyY1Byb2dyZXNzRGV0YWlscyAmJiBlbnJvbGxEYXRhLmxyY1Byb2dyZXNzRGV0YWlscy5taW1lVHlwZSkge1xuICAgIC8vICAgY29uc3QgbW9kaWZ5RW5yb2xsRGF0YSAgPSB7XG4gICAgLy8gICAgIC4uLmVucm9sbERhdGEsXG4gICAgLy8gICAgIGlkZW50aWZpZXI6IGVucm9sbERhdGEuY29sbGVjdGlvbklkLFxuICAgIC8vICAgICBwcmltYXJ5Q2F0ZWdvcnk6IGVucm9sbERhdGEuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnksXG4gICAgLy8gICAgIG5hbWU6IGVucm9sbERhdGEuY29udGVudC5uYW1lLFxuICAgIC8vICAgfVxuICAgIC8vICAgaWYgKG1vZGlmeUVucm9sbERhdGEubGFzdFJlYWRDb250ZW50SWQpIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3Vyc2VEYXRhV2l0aERhdGEobW9kaWZ5RW5yb2xsRGF0YSxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5yb2xsRGF0YS5sYXN0UmVhZENvbnRlbnRJZCwgZW5yb2xsRGF0YS5scmNQcm9ncmVzc0RldGFpbHMubWltZVR5cGUpXG4gICAgLy8gICB9XG4gICAgLy8gICBpZiAobW9kaWZ5RW5yb2xsRGF0YS5maXJzdENoaWxkSWQpIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3Vyc2VEYXRhV2l0aERhdGEobW9kaWZ5RW5yb2xsRGF0YSxcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5yb2xsRGF0YS5maXJzdENoaWxkSWQsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVucm9sbERhdGEubHJjUHJvZ3Jlc3NEZXRhaWxzLm1pbWVUeXBlKVxuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICAgIGlmIChlbnJvbGxEYXRhLmxhc3RSZWFkQ29udGVudElkIHx8IGVucm9sbERhdGEuZmlyc3RDaGlsZElkKSB7XG4gICAgICAgIGNvbnN0IGRvSWQgPSAgZW5yb2xsRGF0YS5sYXN0UmVhZENvbnRlbnRJZCB8fCBlbnJvbGxEYXRhLmZpcnN0Q2hpbGRJZFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmZldGNoUHJvZ3JhbUNvbnRlbnQoZG9JZCkudG9Qcm9taXNlKCkudGhlbihhc3luYyAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5yZXN1bHQgJiYgcmVzLnJlc3VsdC5jb250ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50RGF0YTogYW55ID0gcmVzLnJlc3VsdC5jb250ZW50XG4gICAgICAgICAgICBjb25zdCBtb2RpZnlFbnJvbGxEYXRhICA9IHtcbiAgICAgICAgICAgICAgLi4uZW5yb2xsRGF0YSxcbiAgICAgICAgICAgICAgaWRlbnRpZmllcjogZW5yb2xsRGF0YS5jb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICAgIHByaW1hcnlDYXRlZ29yeTogZW5yb2xsRGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSxcbiAgICAgICAgICAgICAgbmFtZTogZW5yb2xsRGF0YS5jb250ZW50Lm5hbWUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cmxEYXRhID0gIHRoaXMuZ2V0UmVzb3Vyc2VEYXRhV2l0aERhdGEobW9kaWZ5RW5yb2xsRGF0YSwgY29udGVudERhdGEuaWRlbnRpZmllciwgY29udGVudERhdGEubWltZVR5cGUpXG4gICAgICAgICAgICBpZiAodXJsRGF0YSkge1xuICAgICAgICAgICAgICByZXR1cm4gdXJsRGF0YVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YSA/IHJlc3BvbnNlRGF0YSA6IHRoaXMuZ290b1RvY1BhZ2UoY29udGVudClcbiAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ290b1RvY1BhZ2UoY29udGVudClcblxuICB9XG5cbiAgZ2V0UmVzb3Vyc2VEYXRhV2l0aERhdGEoY29udGVudDogYW55LCByZXNvdXJzZUlkOiBhbnksIG1pbWVUeXBlOiBhbnkpIHtcbiAgICBpZiAoY29udGVudCkge1xuICAgICAgY29uc3QgdXJsID0gdmlld2VyUm91dGVHZW5lcmF0b3IoXG4gICAgICAgIHJlc291cnNlSWQsXG4gICAgICAgIG1pbWVUeXBlLFxuICAgICAgICBjb250ZW50LmlkZW50aWZpZXIsXG4gICAgICAgICdDb3Vyc2UnLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ0xlYXJuaW5nIFJlc291cmNlJyxcbiAgICAgICAgY29udGVudC5iYXRjaElkLFxuICAgICAgICBjb250ZW50Lm5hbWUsXG4gICAgICApXG4gICAgICByZXR1cm4gdXJsXG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdvdG9Ub2NQYWdlKGNvbnRlbnQpXG4gIH1cbiAgZ290b1RvY1BhZ2UoY29udGVudDogYW55KSB7XG4gICAgY29uc3QgdXJsRGF0YTogYW55ID0ge1xuICAgICAgdXJsOiBgL2FwcC90b2MvJHtjb250ZW50LmlkZW50aWZpZXIgPyBjb250ZW50LmlkZW50aWZpZXIgOiBjb250ZW50LmNvbGxlY3Rpb25JZH0vb3ZlcnZpZXdgLFxuICAgICAgcXVlcnlQYXJhbXM6IHsgYmF0Y2hJZDogY29udGVudC5iYXRjaElkIH0sXG4gICAgfVxuICAgIGlmIChjb250ZW50LmVuZERhdGUpIHtcbiAgICAgIHVybERhdGEucXVlcnlQYXJhbXMgPSB7IC4uLnVybERhdGEucXVlcnlQYXJhbXMsIHBsYW5UeXBlOiAnY2JQbGFuJywgZW5kRGF0ZTogY29udGVudC5lbmREYXRlIH1cbiAgICB9XG4gICAgaWYgKGNvbnRlbnQuY29udGVudElkICYmIGNvbnRlbnQuY29udGVudElkLmluY2x1ZGVzKCdleHRfJykpIHtcbiAgICAgIHVybERhdGEudXJsID0gYC9hcHAvdG9jL2V4dC8ke2NvbnRlbnQuY29udGVudElkfWBcbiAgICAgIHVybERhdGEucXVlcnlQYXJhbXMgPSB7fVxuICAgIH1cbiAgICByZXR1cm4gdXJsRGF0YVxuICB9XG4gIGlzQmF0Y2hJblByb2dyZXNzKGJhdGNoRGF0YTogYW55KSB7XG4gICAgLy8gaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnRbJ2JhdGNoZXMnXSkge1xuICAgIC8vIGNvbnN0IGJhdGNoZXMgPSB0aGlzLmNvbnRlbnRbJ2JhdGNoZXMnXSBhcyBOc0NvbnRlbnQuSUJhdGNoXG4gICAgaWYgKGJhdGNoRGF0YSAmJiBiYXRjaERhdGEuZW5kRGF0ZSkge1xuICAgICAgY29uc3Qgbm93ID0gbW9tZW50KCkuZm9ybWF0KCdZWVlZLU1NLUREJylcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG1vbWVudChiYXRjaERhdGEuc3RhcnREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxuICAgICAgY29uc3QgZW5kRGF0ZSA9IGJhdGNoRGF0YS5lbmREYXRlID8gbW9tZW50KGJhdGNoRGF0YS5lbmREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSA6IG5vd1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAvLyBiYXRjaC5zdGF0dXMgJiZcbiAgICAgICAgICAgIG1vbWVudChzdGFydERhdGUpLmlzU2FtZU9yQmVmb3JlKG5vdylcbiAgICAgICAgICAgICYmIG1vbWVudChlbmREYXRlKS5pc1NhbWVPckFmdGVyKG5vdylcbiAgICAgICAgICApXG4gICAgfSByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZ2V0UHJlQXNzZXNzbWVudEZpcnN0Q2hpbGRJbkhpZXJhcmNoeShjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQpOiBOc0NvbnRlbnQuSUNvbnRlbnQge1xuICAgIGlmICghKGNvbnRlbnQuY2hpbGRyZW4gfHwgW10pLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnRcbiAgICB9XG4gICAgaWYgKFxuICAgICAgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5QUk9HUkFNICYmXG4gICAgICAgICEoY29udGVudC5hcnRpZmFjdFVybCAmJiBjb250ZW50LmFydGlmYWN0VXJsLmxlbmd0aCkpIHx8XG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTUFOREFUT1JZX0NPVVJTRV9HT0FMIHx8XG4gICAgICAoY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSAmJlxuICAgICAgICAhKGNvbnRlbnQuYXJ0aWZhY3RVcmwgJiYgY29udGVudC5hcnRpZmFjdFVybC5sZW5ndGgpKSB8fFxuICAgICAgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5NT0RVTEUgJiZcbiAgICAgICAgIShjb250ZW50LmFydGlmYWN0VXJsICYmIGNvbnRlbnQuYXJ0aWZhY3RVcmwubGVuZ3RoKSlcbiAgICApIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gY29udGVudC5jaGlsZHJlblswXVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJlQXNzZXNzbWVudEZpcnN0Q2hpbGRJbkhpZXJhcmNoeShjaGlsZClcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFIHx8XG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuS05PV0xFREdFX0FSVElGQUNUIHx8XG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUFJPR1JBTSB8fFxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlBSQUNUSUNFX1JFU09VUkNFIHx8XG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuRklOQUxfQVNTRVNTTUVOVCB8fFxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNPTVBfQVNTRVNTTUVOVCB8fFxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSB8fFxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk9GRkxJTkVfU0VTU0lPTlxuICAgICkge1xuICAgICAgcmV0dXJuIGNvbnRlbnRcbiAgICB9XG4gICAgY29uc3QgZmlyc3RDaGlsZCA9IGNvbnRlbnQuY2hpbGRyZW5bMF1cbiAgICBjb25zdCByZXN1bHRDb250ZW50ID0gdGhpcy5nZXRQcmVBc3Nlc3NtZW50Rmlyc3RDaGlsZEluSGllcmFyY2h5KGZpcnN0Q2hpbGQpXG4gICAgcmV0dXJuIHJlc3VsdENvbnRlbnRcbiAgfVxuXG4gIGZldGNoSGllcmFyY2h5Q29udGVudChjb250ZW50SWQ6c3RyaW5nLCBoaWVyYXJjaHlUeXBlOiAnYWxsJyB8ICdtaW5pbWFsJyB8ICdkZXRhaWwnID0gJ2RldGFpbCcpIHtcbiAgICBsZXQgdXJsID0gJydcbiAgICBjb25zdCBmb3JQcmV2aWV3ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJyZwcmV2aWV3PXRydWUnKVxuICAgIGlmICghZm9yUHJldmlldykge1xuICAgICAgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvaGllcmFyY2h5LyR7Y29udGVudElkfT9oaWVyYXJjaHlUeXBlPSR7aGllcmFyY2h5VHlwZX1gXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZvcmNyZWF0b3IgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZWRpdE1vZGU9dHJ1ZScpXG4gICAgICBpZiAoZm9yY3JlYXRvcikge1xuICAgICAgICB1cmwgPSBgYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/bW9kZT1lZGl0YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsID0gYC9hcGkvY291cnNlL3YxL2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/aGllcmFyY2h5VHlwZT0ke2hpZXJhcmNoeVR5cGV9YFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnQ+KHVybCkucGlwZShzaGFyZVJlcGxheSgxKSlcbiAgfVxuXG4gIGZldGNoQ29udGVudERhdGEoY29udGVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudD4ge1xuICAgIGxldCB1cmwgPSAnJ1xuICAgIGNvbnN0IGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpXG4gICAgaWYgKCFmb3JQcmV2aWV3KSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnQ+KFxuICAgICAgICBBUElfRU5EX1BPSU5UUy5DT05URU5UX1JFQUQoY29udGVudElkKSxcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdlZGl0TW9kZT10cnVlJykgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ19yYycpKSB7XG4gICAgICB1cmwgPSBgL2FwaXMvcHJveGllcy92OC9leHRlbmRlZC9jb250ZW50L3YxL3JlYWQvJHtjb250ZW50SWR9YFxuICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGAvYXBpL2NvbnRlbnQvdjEvcmVhZC8ke2NvbnRlbnRJZH1gXG4gICAgfVxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50Pih1cmwpXG4gIH1cblxuICBnZXRVc2VyRW5yb2xsbWVudERhdGEodXNlcklkOiBzdHJpbmcsIHJlcXVlc3Q6IGFueSk6IE9ic2VydmFibGU8eyBkYXRhOiBhbnk7IGVycm9yOiBhbnkgfT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChBUElfRU5EX1BPSU5UUy5FTlJPTExfQ09OVEVOVF9EQVRBKHVzZXJJZCksIHJlcXVlc3QpLnBpcGUoXG4gICAgICBtYXAoKHJEYXRhOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gckRhdGE/LnJlc3VsdCA/PyBudWxsO1xuICAgICAgICByZXR1cm4geyBkYXRhOiByZXN1bHQsIGVycm9yOiBudWxsIH07XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIG9mKHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { of, EMPTY, BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { catchError, retry, map, shareReplay } from 'rxjs/operators';
|
|
4
|
+
import { NsContent } from './widget-content.model';
|
|
5
|
+
// tslint:disable
|
|
6
|
+
import _ from 'lodash';
|
|
7
|
+
import { viewerRouteGenerator } from './viewer-route-util';
|
|
8
|
+
import moment from 'moment';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/common/http";
|
|
11
|
+
import * as i2 from "@sunbird-cb/utils-v2";
|
|
12
|
+
import * as i3 from "@angular/router";
|
|
13
|
+
// tslint:enable
|
|
14
|
+
// TODO: move this in some common place
|
|
15
|
+
const PROTECTED_SLAG_V8 = '/apis/protected/v8';
|
|
16
|
+
const API_END_POINTS = {
|
|
17
|
+
CONTENT: `${PROTECTED_SLAG_V8}/content`,
|
|
18
|
+
AUTHORING_CONTENT: `/api/course/v1/hierarchy`,
|
|
19
|
+
CONTENT_LIKES: `${PROTECTED_SLAG_V8}/content/likeCount`,
|
|
20
|
+
SET_S3_COOKIE: `${PROTECTED_SLAG_V8}/content/setCookie`,
|
|
21
|
+
SET_S3_IMAGE_COOKIE: `${PROTECTED_SLAG_V8}/content/setImageCookie`,
|
|
22
|
+
FETCH_MANIFEST: `${PROTECTED_SLAG_V8}/content/getWebModuleManifest`,
|
|
23
|
+
FETCH_WEB_MODULE_FILES: `${PROTECTED_SLAG_V8}/content/getWebModuleFiles`,
|
|
24
|
+
MULTIPLE_CONTENT: `${PROTECTED_SLAG_V8}/content/multiple`,
|
|
25
|
+
CONTENT_SEARCH_V5: `${PROTECTED_SLAG_V8}/content/searchV5`,
|
|
26
|
+
CONTENT_SEARCH_V6: `/apis/proxies/v8/sunbirdigot/search`,
|
|
27
|
+
TRENDING_CONTENT_SEARCH: `apis/proxies/v8/trending/content/search`,
|
|
28
|
+
CONTENT_SEARCH_RELATED_CBP_V6: `/apis/proxies/v8/sunbirdigot/search`,
|
|
29
|
+
CONTENT_SEARCH_REGION_RECOMMENDATION: `${PROTECTED_SLAG_V8}/content/searchRegionRecommendation`,
|
|
30
|
+
CONTENT_HISTORY: `${PROTECTED_SLAG_V8}/user/history`,
|
|
31
|
+
CONTENT_HISTORYV2: `/apis/proxies/v8/read/content-progres`,
|
|
32
|
+
COURSE_BATCH_LIST: `/apis/proxies/v8/learner/course/v1/batch/list`,
|
|
33
|
+
COURSE_BATCH: `/apis/proxies/v8/course/v1/batch/read`,
|
|
34
|
+
AUTO_ASSIGN_BATCH: `/apis/protected/v8/cohorts/user/autoenrollment/`,
|
|
35
|
+
AUTO_ASSIGN_CURATED_BATCH: `/apis/proxies/v8/curatedprogram/v1/enrol`,
|
|
36
|
+
AUTO_ASSIGN_OPEN_PROGRAM: `/apis/proxies/v8/openprogram/v1/enrol`,
|
|
37
|
+
USER_CONTINUE_LEARNING: `${PROTECTED_SLAG_V8}/user/history/continue`,
|
|
38
|
+
CONTENT_RATING: `${PROTECTED_SLAG_V8}/user/rating`,
|
|
39
|
+
COLLECTION_HIERARCHY: (type, id) => `${PROTECTED_SLAG_V8}/content/collection/${type}/${id}`,
|
|
40
|
+
REGISTRATION_STATUS: `${PROTECTED_SLAG_V8}/admin/userRegistration/checkUserRegistrationContent`,
|
|
41
|
+
MARK_AS_COMPLETE_META: (contentId) => `${PROTECTED_SLAG_V8}/user/progress/${contentId}`,
|
|
42
|
+
ENROLL_BATCH: `/apis/proxies/v8/learner/course/v1/enrol`,
|
|
43
|
+
ENROLL_BATCH_WF: `/apis/proxies/v8/workflow/blendedprogram/enrol`,
|
|
44
|
+
WITHDRAW_BATCH_WF: `/apis/proxies/v8/workflow/blendedprogram/unenrol`,
|
|
45
|
+
BLENDED_USER_WF: `/apis/proxies/v8/workflow/blendedprogram/user/search`,
|
|
46
|
+
BLENDED_USER_COUNT: `apis/proxies/v8/workflow/blendedprogram/enrol/status/count`,
|
|
47
|
+
CERT_ADD_TEMPLATE: `${PROTECTED_SLAG_V8}/cohorts/course/batch/cert/template/add`,
|
|
48
|
+
CERT_ISSUE: `${PROTECTED_SLAG_V8}/cohorts/course/batch/cert/issue`,
|
|
49
|
+
CERT_DOWNLOAD: (certId) => `${PROTECTED_SLAG_V8}/cohorts/course/batch/cert/download/${certId}`,
|
|
50
|
+
READ_KARMAPOINTS: `/apis/proxies/v8/karmapoints/read`,
|
|
51
|
+
CONTENT_READ: (contentId) => `/apis/proxies/v8/extended/content/v1/read/${contentId}`,
|
|
52
|
+
READ_COURSE_KARMAPOINTS: '/apis/proxies/v8/karmapoints/user/course/read',
|
|
53
|
+
CLAIM_KARMAPOINTS: '/apis/proxies/v8/claimkarmapoints',
|
|
54
|
+
USER_KARMA_POINTS: '/apis/proxies/v8/user/totalkarmapoints',
|
|
55
|
+
EXT_CONTENT_READ: (contentId) => `/apis/proxies/v8/cios/v1/content/read/${contentId}`,
|
|
56
|
+
EXT_USER_COURSE_ENROLL: (contentId) => `/apis/proxies/v8/cios-enroll/v1/readby/useridcourseid/${contentId}`,
|
|
57
|
+
EXT_CONTENT_EROLL: `/apis/proxies/v8/cios-enroll/v1/create`,
|
|
58
|
+
EXT_PUBLIC_CONTENT: (partent, contentId) => `/apis/proxies/v8/ciosIntegration/v1/read/content/${partent}/${contentId}`,
|
|
59
|
+
ENROLL_CONTENT_DATA: (userId) => `/apis/proxies/v8/learner/course/v4/user/enrollment/details/${userId}`,
|
|
60
|
+
LEARNER_PATHWAY_ENROLL: (contentId) => `/apis/proxies/v8/learningpathway/v1/enrol/${contentId}`,
|
|
61
|
+
};
|
|
62
|
+
export class WidgetContentService {
|
|
63
|
+
constructor(http, configSvc, activatedRoute) {
|
|
64
|
+
this.http = http;
|
|
65
|
+
this.configSvc = configSvc;
|
|
66
|
+
this.activatedRoute = activatedRoute;
|
|
67
|
+
this.tocConfigData = new BehaviorSubject({});
|
|
68
|
+
this.tocConfigData$ = this.tocConfigData.asObservable();
|
|
69
|
+
this.programChildCourseResumeData = new BehaviorSubject({});
|
|
70
|
+
this.programChildCourseResumeData$ = this.programChildCourseResumeData.asObservable();
|
|
71
|
+
}
|
|
72
|
+
isResource(primaryCategory) {
|
|
73
|
+
if (primaryCategory) {
|
|
74
|
+
const isResource = (primaryCategory === NsContent.EResourcePrimaryCategories.LEARNING_RESOURCE) ||
|
|
75
|
+
(primaryCategory === NsContent.EResourcePrimaryCategories.PRACTICE_RESOURCE) ||
|
|
76
|
+
(primaryCategory === NsContent.EResourcePrimaryCategories.FINAL_ASSESSMENT) ||
|
|
77
|
+
(primaryCategory === NsContent.EResourcePrimaryCategories.COMP_ASSESSMENT) ||
|
|
78
|
+
(primaryCategory === NsContent.EResourcePrimaryCategories.OFFLINE_SESSION);
|
|
79
|
+
return isResource;
|
|
80
|
+
}
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
fetchMarkAsCompleteMeta(identifier) {
|
|
84
|
+
// tslint:disable-next-line
|
|
85
|
+
const url = API_END_POINTS.MARK_AS_COMPLETE_META(identifier);
|
|
86
|
+
// return this.http.get(url).toPromise()
|
|
87
|
+
if (url) { }
|
|
88
|
+
return of().toPromise();
|
|
89
|
+
}
|
|
90
|
+
updateTocConfig(data) {
|
|
91
|
+
this.tocConfigData.next(data);
|
|
92
|
+
}
|
|
93
|
+
fetchContent(contentId, hierarchyType = 'detail', _additionalFields = [], primaryCategory) {
|
|
94
|
+
// const url = `${API_END_POINTS.CONTENT}/${contentId}?hierarchyType=${hierarchyType}`
|
|
95
|
+
let url = '';
|
|
96
|
+
const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
|
|
97
|
+
if (primaryCategory && this.isResource(primaryCategory)) {
|
|
98
|
+
if (!forPreview) {
|
|
99
|
+
url = `/apis/proxies/v8/extended/content/v1/read/${contentId}`;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
if (window.location.href.includes('editMode=true') && window.location.href.includes('_rc')) {
|
|
103
|
+
url = `/apis/proxies/v8/extended/content/v1/read/${contentId}`;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
url = `/api/content/v1/read/${contentId}`;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
if (!forPreview) {
|
|
112
|
+
url = `/apis/proxies/v8/action/content/v3/hierarchy/${contentId}?hierarchyType=${hierarchyType}`;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const forcreator = window.location.href.includes('editMode=true');
|
|
116
|
+
if (forcreator) {
|
|
117
|
+
url = `apis/proxies/v8/action/content/v3/hierarchy/${contentId}?mode=edit`;
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
url = `/api/course/v1/hierarchy/${contentId}?hierarchyType=${hierarchyType}`;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// return this.http
|
|
125
|
+
// .post<NsContent.IContent>(url, { additionalFields })
|
|
126
|
+
// .pipe(retry(1))
|
|
127
|
+
return this.http
|
|
128
|
+
.get(url)
|
|
129
|
+
.pipe(shareReplay(1));
|
|
130
|
+
// if (apiData && apiData.result) {
|
|
131
|
+
// return apiData.result.content
|
|
132
|
+
// }
|
|
133
|
+
}
|
|
134
|
+
fetchAuthoringContent(contentId, apiType) {
|
|
135
|
+
const forcreator = window.location.href.includes('editMode=true');
|
|
136
|
+
let url = '';
|
|
137
|
+
if (forcreator) {
|
|
138
|
+
url = `apis/proxies/v8/action/content/v3/hierarchy/${contentId}?mode=edit`;
|
|
139
|
+
}
|
|
140
|
+
else if (apiType && apiType === 'read') {
|
|
141
|
+
url = `/api/content/v1/read/${contentId}`;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
url = `${API_END_POINTS.AUTHORING_CONTENT}/${contentId}?hierarchyType=detail`;
|
|
145
|
+
}
|
|
146
|
+
return this.http.get(url).pipe(shareReplay(1), r => r);
|
|
147
|
+
}
|
|
148
|
+
fetchMultipleContent(ids) {
|
|
149
|
+
return this.http.get(`${API_END_POINTS.MULTIPLE_CONTENT}/${ids.join(',')}`);
|
|
150
|
+
}
|
|
151
|
+
fetchCollectionHierarchy(type, id, pageNumber = 0, pageSize = 1) {
|
|
152
|
+
return this.http.get(`${API_END_POINTS.COLLECTION_HIERARCHY(type, id)}?pageNumber=${pageNumber}&pageSize=${pageSize}`);
|
|
153
|
+
}
|
|
154
|
+
fetchBlendedCourse() {
|
|
155
|
+
}
|
|
156
|
+
fetchCourseBatches(req) {
|
|
157
|
+
return this.http
|
|
158
|
+
.post(API_END_POINTS.COURSE_BATCH_LIST, req)
|
|
159
|
+
.pipe(retry(1), map((data) => data.result.response));
|
|
160
|
+
}
|
|
161
|
+
// fetch individual batch
|
|
162
|
+
fetchCourseBatch(batchId) {
|
|
163
|
+
return this.http.get(`${API_END_POINTS.COURSE_BATCH}/${batchId}`);
|
|
164
|
+
}
|
|
165
|
+
autoAssignBatchApi(identifier, language) {
|
|
166
|
+
let enrollLang = language?.langId || 'english';
|
|
167
|
+
return this.http.get(`${API_END_POINTS.AUTO_ASSIGN_BATCH}${identifier}?language=${enrollLang}`)
|
|
168
|
+
.pipe(retry(1), map((data) => data.result.response));
|
|
169
|
+
}
|
|
170
|
+
autoEnrollLP(identifier) {
|
|
171
|
+
return this.http.get(`${API_END_POINTS.LEARNER_PATHWAY_ENROLL(identifier)}`)
|
|
172
|
+
.pipe(retry(1), map((data) => data.result.response));
|
|
173
|
+
}
|
|
174
|
+
autoAssignCuratedBatchApi(request, programType) {
|
|
175
|
+
const url = programType === NsContent.ECourseCategory.MODERATED_PROGRAM ?
|
|
176
|
+
API_END_POINTS.AUTO_ASSIGN_OPEN_PROGRAM : API_END_POINTS.AUTO_ASSIGN_CURATED_BATCH;
|
|
177
|
+
return this.http.post(`${url}`, request)
|
|
178
|
+
.pipe(retry(1), map((data) => data.result.response));
|
|
179
|
+
}
|
|
180
|
+
enrollUserToBatch(req) {
|
|
181
|
+
return this.http
|
|
182
|
+
.post(API_END_POINTS.ENROLL_BATCH, req)
|
|
183
|
+
.toPromise();
|
|
184
|
+
}
|
|
185
|
+
enrollAndUnenrollUserToBatchWF(req, type) {
|
|
186
|
+
const url = type === 'WITHDRAW' ? API_END_POINTS.WITHDRAW_BATCH_WF : API_END_POINTS.ENROLL_BATCH_WF;
|
|
187
|
+
return this.http
|
|
188
|
+
.post(url, req)
|
|
189
|
+
.toPromise();
|
|
190
|
+
}
|
|
191
|
+
fetchBlendedUserWF(req) {
|
|
192
|
+
return this.http
|
|
193
|
+
.post(API_END_POINTS.BLENDED_USER_WF, req)
|
|
194
|
+
.toPromise();
|
|
195
|
+
}
|
|
196
|
+
fetchBlendedUserCOUNT(req) {
|
|
197
|
+
return this.http
|
|
198
|
+
.post(API_END_POINTS.BLENDED_USER_COUNT, req)
|
|
199
|
+
.toPromise();
|
|
200
|
+
}
|
|
201
|
+
fetchContentLikes(contentIds) {
|
|
202
|
+
return this.http
|
|
203
|
+
.post(API_END_POINTS.CONTENT_LIKES, contentIds)
|
|
204
|
+
.toPromise();
|
|
205
|
+
}
|
|
206
|
+
fetchContentRatings(contentIds) {
|
|
207
|
+
if (contentIds) { }
|
|
208
|
+
// return this.http
|
|
209
|
+
// .post(`${API_END_POINTS.CONTENT_RATING}/rating`, contentIds)
|
|
210
|
+
// .toPromise()
|
|
211
|
+
return of().toPromise();
|
|
212
|
+
}
|
|
213
|
+
fetchContentHistory(contentId) {
|
|
214
|
+
return this.http.get(`${API_END_POINTS.CONTENT_HISTORY}/${contentId}`);
|
|
215
|
+
}
|
|
216
|
+
fetchContentHistoryV2(req) {
|
|
217
|
+
const isPreAssessment = this.activatedRoute.snapshot.queryParams.preAssessment;
|
|
218
|
+
req.request.fields = ['progressdetails'];
|
|
219
|
+
if (req.request.courseId && !isPreAssessment) {
|
|
220
|
+
const data = this.http.post(`${API_END_POINTS.CONTENT_HISTORYV2}/${req.request.courseId}`, req).pipe(map((rData) => {
|
|
221
|
+
this.languageMapProgress = rData?.result?.languageProgress || {};
|
|
222
|
+
return rData;
|
|
223
|
+
}));
|
|
224
|
+
// data.subscribe((subscribeData: any) => {
|
|
225
|
+
// this.programChildCourseResumeData.next({ resumeData: subscribeData.result.contentList, courseId: req.request.courseId })
|
|
226
|
+
// })
|
|
227
|
+
return data;
|
|
228
|
+
}
|
|
229
|
+
return of();
|
|
230
|
+
}
|
|
231
|
+
setProgramChildResumeData(contentList, courseId) {
|
|
232
|
+
/* tslint:disable */
|
|
233
|
+
this.programChildCourseResumeData.next({ resumeData: contentList, courseId });
|
|
234
|
+
/* tslint:enable */
|
|
235
|
+
}
|
|
236
|
+
async continueLearning(id, collectionId, collectionType) {
|
|
237
|
+
return new Promise(async (resolve) => {
|
|
238
|
+
if (collectionType &&
|
|
239
|
+
collectionType.toLowerCase() === 'playlist') {
|
|
240
|
+
const reqBody = {
|
|
241
|
+
contextPathId: collectionId ? collectionId : id,
|
|
242
|
+
resourceId: id,
|
|
243
|
+
data: JSON.stringify({
|
|
244
|
+
timestamp: Date.now(),
|
|
245
|
+
contextFullPath: [collectionId, id],
|
|
246
|
+
}),
|
|
247
|
+
dateAccessed: Date.now(),
|
|
248
|
+
contextType: 'playlist',
|
|
249
|
+
};
|
|
250
|
+
await this.saveContinueLearning(reqBody).toPromise().catch().finally(() => {
|
|
251
|
+
resolve(true);
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
const reqBody = {
|
|
256
|
+
contextPathId: collectionId ? collectionId : id,
|
|
257
|
+
resourceId: id,
|
|
258
|
+
data: JSON.stringify({ timestamp: Date.now() }),
|
|
259
|
+
dateAccessed: Date.now(),
|
|
260
|
+
};
|
|
261
|
+
await this.saveContinueLearning(reqBody).toPromise().catch().finally(() => {
|
|
262
|
+
resolve(true);
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
saveContinueLearning(content) {
|
|
268
|
+
// const url = API_END_POINTS.USER_CONTINUE_LEARNING
|
|
269
|
+
// return this.http.post<any>(url, content)
|
|
270
|
+
if (content) {
|
|
271
|
+
}
|
|
272
|
+
return of();
|
|
273
|
+
}
|
|
274
|
+
setS3Cookie(_contentId) {
|
|
275
|
+
// return this.http
|
|
276
|
+
// .post(API_END_POINTS.SET_S3_COOKIE, { contentId })
|
|
277
|
+
// .pipe(catchError(_err => of(true)))
|
|
278
|
+
return EMPTY;
|
|
279
|
+
}
|
|
280
|
+
setS3ImageCookie() {
|
|
281
|
+
return this.http.post(API_END_POINTS.SET_S3_IMAGE_COOKIE, {}).pipe(catchError(_err => of(true)));
|
|
282
|
+
}
|
|
283
|
+
fetchManifest(url) {
|
|
284
|
+
return this.http.post(API_END_POINTS.FETCH_MANIFEST, { url });
|
|
285
|
+
}
|
|
286
|
+
fetchWebModuleContent(url) {
|
|
287
|
+
return this.http.get(`${API_END_POINTS.FETCH_WEB_MODULE_FILES}?url=${encodeURIComponent(url)}`);
|
|
288
|
+
}
|
|
289
|
+
search(req) {
|
|
290
|
+
req.query = req.query || '';
|
|
291
|
+
return this.http.post(API_END_POINTS.CONTENT_SEARCH_V5, {
|
|
292
|
+
request: req,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
searchRegionRecommendation(req) {
|
|
296
|
+
req.query = req.query || '';
|
|
297
|
+
req.preLabelValue =
|
|
298
|
+
(req.preLabelValue || '') +
|
|
299
|
+
((this.configSvc.userProfile && this.configSvc.userProfile.country) || '');
|
|
300
|
+
req.filters = {
|
|
301
|
+
...req.filters,
|
|
302
|
+
labels: [req.preLabelValue || ''],
|
|
303
|
+
};
|
|
304
|
+
return this.http.post(API_END_POINTS.CONTENT_SEARCH_REGION_RECOMMENDATION, { request: req });
|
|
305
|
+
}
|
|
306
|
+
searchV6(req) {
|
|
307
|
+
const apiPath = _.get(req, 'api.path');
|
|
308
|
+
req.query = req.query || '';
|
|
309
|
+
if (apiPath) {
|
|
310
|
+
return this.http.get(apiPath);
|
|
311
|
+
}
|
|
312
|
+
return this.http.post(API_END_POINTS.CONTENT_SEARCH_V6, req);
|
|
313
|
+
}
|
|
314
|
+
searchRelatedCBPV6(req) {
|
|
315
|
+
return this.http.post(API_END_POINTS.CONTENT_SEARCH_RELATED_CBP_V6, req);
|
|
316
|
+
}
|
|
317
|
+
fetchContentRating(contentId) {
|
|
318
|
+
return this.http.get(`${API_END_POINTS.CONTENT_RATING}/${contentId}`);
|
|
319
|
+
}
|
|
320
|
+
deleteContentRating(contentId) {
|
|
321
|
+
return this.http.delete(`${API_END_POINTS.CONTENT_RATING}/${contentId}`);
|
|
322
|
+
}
|
|
323
|
+
addContentRating(contentId, data) {
|
|
324
|
+
return this.http.post(`${API_END_POINTS.CONTENT_RATING}/${contentId}`, data);
|
|
325
|
+
}
|
|
326
|
+
getFirstChildInHierarchy(content) {
|
|
327
|
+
if (!(content.children || []).length) {
|
|
328
|
+
return content;
|
|
329
|
+
}
|
|
330
|
+
if ((content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM &&
|
|
331
|
+
!(content.artifactUrl && content.artifactUrl.length)) ||
|
|
332
|
+
content.primaryCategory === NsContent.EPrimaryCategory.MANDATORY_COURSE_GOAL ||
|
|
333
|
+
(content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM &&
|
|
334
|
+
!(content.artifactUrl && content.artifactUrl.length)) ||
|
|
335
|
+
(content.primaryCategory === NsContent.EPrimaryCategory.MODULE &&
|
|
336
|
+
!(content.artifactUrl && content.artifactUrl.length))) {
|
|
337
|
+
const child = content.children[0];
|
|
338
|
+
return this.getFirstChildInHierarchy(child);
|
|
339
|
+
}
|
|
340
|
+
if (content.primaryCategory === NsContent.EPrimaryCategory.RESOURCE ||
|
|
341
|
+
content.primaryCategory === NsContent.EPrimaryCategory.KNOWLEDGE_ARTIFACT ||
|
|
342
|
+
content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM ||
|
|
343
|
+
content.primaryCategory === NsContent.EPrimaryCategory.PRACTICE_RESOURCE ||
|
|
344
|
+
content.primaryCategory === NsContent.EPrimaryCategory.FINAL_ASSESSMENT ||
|
|
345
|
+
content.primaryCategory === NsContent.EPrimaryCategory.COMP_ASSESSMENT ||
|
|
346
|
+
content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM ||
|
|
347
|
+
content.primaryCategory === NsContent.EPrimaryCategory.OFFLINE_SESSION) {
|
|
348
|
+
return content;
|
|
349
|
+
}
|
|
350
|
+
const firstChild = content.children[0];
|
|
351
|
+
const resultContent = this.getFirstChildInHierarchy(firstChild);
|
|
352
|
+
return resultContent;
|
|
353
|
+
}
|
|
354
|
+
getRegistrationStatus(source) {
|
|
355
|
+
return this.http.get(`${API_END_POINTS.REGISTRATION_STATUS}/${source}`).toPromise();
|
|
356
|
+
}
|
|
357
|
+
fetchConfig(url) {
|
|
358
|
+
return this.http.get(url);
|
|
359
|
+
}
|
|
360
|
+
addCertTemplate(body) {
|
|
361
|
+
return this.http.patch(`${API_END_POINTS.CERT_ADD_TEMPLATE}`, body);
|
|
362
|
+
}
|
|
363
|
+
issueCert(body) {
|
|
364
|
+
return this.http.post(`${API_END_POINTS.CERT_ISSUE}`, body);
|
|
365
|
+
}
|
|
366
|
+
downloadCert(certId) {
|
|
367
|
+
return this.http.get(`${API_END_POINTS.CERT_DOWNLOAD(certId)}`);
|
|
368
|
+
}
|
|
369
|
+
trendingContentSearch(req) {
|
|
370
|
+
req.query = req.query || '';
|
|
371
|
+
return this.http.post(API_END_POINTS.TRENDING_CONTENT_SEARCH, req);
|
|
372
|
+
}
|
|
373
|
+
getKarmaPoitns(limit, offset) {
|
|
374
|
+
return this.http.post(API_END_POINTS.READ_KARMAPOINTS, { limit, offset }).pipe(catchError(_err => of(true)));
|
|
375
|
+
}
|
|
376
|
+
fetchProgramContent(contentId) {
|
|
377
|
+
let url = '';
|
|
378
|
+
const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
|
|
379
|
+
if (!forPreview) {
|
|
380
|
+
return this.http.get(API_END_POINTS.CONTENT_READ(contentId));
|
|
381
|
+
}
|
|
382
|
+
if (window.location.href.includes('editMode=true')) {
|
|
383
|
+
url = `/apis/proxies/v8/extended/content/v1/read/${contentId}`;
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
url = `/api/content/v1/read/${contentId}`;
|
|
387
|
+
}
|
|
388
|
+
return this.http.get(url);
|
|
389
|
+
// return this.http.get<NsContent.IContent[]>(API_END_POINTS.CONTENT_READ(contentId))
|
|
390
|
+
}
|
|
391
|
+
fetchExternalContent(contentId) {
|
|
392
|
+
return this.http.get(API_END_POINTS.EXT_CONTENT_READ(contentId));
|
|
393
|
+
}
|
|
394
|
+
fetchExternalPublicContent(partenerName, contentId) {
|
|
395
|
+
return this.http.get(API_END_POINTS.EXT_PUBLIC_CONTENT(partenerName, contentId));
|
|
396
|
+
}
|
|
397
|
+
fetchExtUserContentEnroll(contentId) {
|
|
398
|
+
return this.http.get(API_END_POINTS.EXT_USER_COURSE_ENROLL(contentId));
|
|
399
|
+
}
|
|
400
|
+
extContentEnroll(requestBody) {
|
|
401
|
+
return this.http.post(`${API_END_POINTS.EXT_CONTENT_EROLL}`, requestBody);
|
|
402
|
+
}
|
|
403
|
+
getCourseKarmaPoints(request) {
|
|
404
|
+
return this.http.post(API_END_POINTS.READ_COURSE_KARMAPOINTS, request);
|
|
405
|
+
}
|
|
406
|
+
claimKarmapoints(request) {
|
|
407
|
+
return this.http.post(API_END_POINTS.CLAIM_KARMAPOINTS, request);
|
|
408
|
+
}
|
|
409
|
+
userKarmaPoints() {
|
|
410
|
+
return this.http.post(API_END_POINTS.USER_KARMA_POINTS, {});
|
|
411
|
+
}
|
|
412
|
+
getEnrolledData(doId) {
|
|
413
|
+
const enrollmentMapData = JSON.parse(localStorage.getItem('enrollmentMapData') || '{}');
|
|
414
|
+
const enrolledCourseData = enrollmentMapData[doId];
|
|
415
|
+
return enrolledCourseData;
|
|
416
|
+
}
|
|
417
|
+
async getResourseLink(content) {
|
|
418
|
+
const enrolledCourseData = this.getEnrolledData(content.identifier);
|
|
419
|
+
if (enrolledCourseData) {
|
|
420
|
+
if (enrolledCourseData && enrolledCourseData.content && enrolledCourseData.content.status &&
|
|
421
|
+
enrolledCourseData.content.status.toLowerCase() !== 'retired') {
|
|
422
|
+
if (enrolledCourseData.content.courseCategory === NsContent.ECourseCategory.BLENDED_PROGRAM ||
|
|
423
|
+
enrolledCourseData.content.courseCategory === NsContent.ECourseCategory.INVITE_ONLY_PROGRAM ||
|
|
424
|
+
enrolledCourseData.content.courseCategory === NsContent.ECourseCategory.MODERATED_PROGRAM ||
|
|
425
|
+
enrolledCourseData.content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM ||
|
|
426
|
+
enrolledCourseData.content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM) {
|
|
427
|
+
if (!this.isBatchInProgress(enrolledCourseData.batch)) {
|
|
428
|
+
return this.gotoTocPage(content);
|
|
429
|
+
}
|
|
430
|
+
const returnData = await this.checkForDataToFormUrl(content, enrolledCourseData);
|
|
431
|
+
return returnData;
|
|
432
|
+
}
|
|
433
|
+
const data = await this.checkForDataToFormUrl(content, enrolledCourseData);
|
|
434
|
+
return data;
|
|
435
|
+
}
|
|
436
|
+
return '';
|
|
437
|
+
}
|
|
438
|
+
return this.gotoTocPage(content);
|
|
439
|
+
}
|
|
440
|
+
async checkForDataToFormUrl(content, enrollData) {
|
|
441
|
+
let urlData;
|
|
442
|
+
if (enrollData.completionPercentage === 100) {
|
|
443
|
+
return this.gotoTocPage(enrollData);
|
|
444
|
+
}
|
|
445
|
+
// if (enrollData.lrcProgressDetails && enrollData.lrcProgressDetails.mimeType) {
|
|
446
|
+
// const modifyEnrollData = {
|
|
447
|
+
// ...enrollData,
|
|
448
|
+
// identifier: enrollData.collectionId,
|
|
449
|
+
// primaryCategory: enrollData.content.primaryCategory,
|
|
450
|
+
// name: enrollData.content.name,
|
|
451
|
+
// }
|
|
452
|
+
// if (modifyEnrollData.lastReadContentId) {
|
|
453
|
+
// return this.getResourseDataWithData(modifyEnrollData,
|
|
454
|
+
// enrollData.lastReadContentId, enrollData.lrcProgressDetails.mimeType)
|
|
455
|
+
// }
|
|
456
|
+
// if (modifyEnrollData.firstChildId) {
|
|
457
|
+
// return this.getResourseDataWithData(modifyEnrollData,
|
|
458
|
+
// enrollData.firstChildId,
|
|
459
|
+
// enrollData.lrcProgressDetails.mimeType)
|
|
460
|
+
// }
|
|
461
|
+
// }
|
|
462
|
+
if (enrollData.lastReadContentId || enrollData.firstChildId) {
|
|
463
|
+
const doId = enrollData.lastReadContentId || enrollData.firstChildId;
|
|
464
|
+
const responseData = await this.fetchProgramContent(doId).toPromise().then(async (res) => {
|
|
465
|
+
if (res && res.result && res.result.content) {
|
|
466
|
+
const contentData = res.result.content;
|
|
467
|
+
const modifyEnrollData = {
|
|
468
|
+
...enrollData,
|
|
469
|
+
identifier: enrollData.collectionId,
|
|
470
|
+
primaryCategory: enrollData.content.primaryCategory,
|
|
471
|
+
name: enrollData.content.name,
|
|
472
|
+
};
|
|
473
|
+
urlData = this.getResourseDataWithData(modifyEnrollData, contentData.identifier, contentData.mimeType);
|
|
474
|
+
if (urlData) {
|
|
475
|
+
return urlData;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
});
|
|
479
|
+
return responseData ? responseData : this.gotoTocPage(content);
|
|
480
|
+
}
|
|
481
|
+
return this.gotoTocPage(content);
|
|
482
|
+
}
|
|
483
|
+
getResourseDataWithData(content, resourseId, mimeType) {
|
|
484
|
+
if (content) {
|
|
485
|
+
const url = viewerRouteGenerator(resourseId, mimeType, content.identifier, 'Course', false, 'Learning Resource', content.batchId, content.name);
|
|
486
|
+
return url;
|
|
487
|
+
}
|
|
488
|
+
return this.gotoTocPage(content);
|
|
489
|
+
}
|
|
490
|
+
gotoTocPage(content) {
|
|
491
|
+
const urlData = {
|
|
492
|
+
url: `/app/toc/${content.identifier ? content.identifier : content.collectionId}/overview`,
|
|
493
|
+
queryParams: { batchId: content.batchId },
|
|
494
|
+
};
|
|
495
|
+
if (content.endDate) {
|
|
496
|
+
urlData.queryParams = { ...urlData.queryParams, planType: 'cbPlan', endDate: content.endDate };
|
|
497
|
+
}
|
|
498
|
+
if (content.contentId && content.contentId.includes('ext_')) {
|
|
499
|
+
urlData.url = `/app/toc/ext/${content.contentId}`;
|
|
500
|
+
urlData.queryParams = {};
|
|
501
|
+
}
|
|
502
|
+
return urlData;
|
|
503
|
+
}
|
|
504
|
+
isBatchInProgress(batchData) {
|
|
505
|
+
// if (this.content && this.content['batches']) {
|
|
506
|
+
// const batches = this.content['batches'] as NsContent.IBatch
|
|
507
|
+
if (batchData && batchData.endDate) {
|
|
508
|
+
const now = moment().format('YYYY-MM-DD');
|
|
509
|
+
const startDate = moment(batchData.startDate).format('YYYY-MM-DD');
|
|
510
|
+
const endDate = batchData.endDate ? moment(batchData.endDate).format('YYYY-MM-DD') : now;
|
|
511
|
+
return (
|
|
512
|
+
// batch.status &&
|
|
513
|
+
moment(startDate).isSameOrBefore(now)
|
|
514
|
+
&& moment(endDate).isSameOrAfter(now));
|
|
515
|
+
}
|
|
516
|
+
return true;
|
|
517
|
+
}
|
|
518
|
+
getPreAssessmentFirstChildInHierarchy(content) {
|
|
519
|
+
if (!(content.children || []).length) {
|
|
520
|
+
return content;
|
|
521
|
+
}
|
|
522
|
+
if ((content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM &&
|
|
523
|
+
!(content.artifactUrl && content.artifactUrl.length)) ||
|
|
524
|
+
content.primaryCategory === NsContent.EPrimaryCategory.MANDATORY_COURSE_GOAL ||
|
|
525
|
+
(content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM &&
|
|
526
|
+
!(content.artifactUrl && content.artifactUrl.length)) ||
|
|
527
|
+
(content.primaryCategory === NsContent.EPrimaryCategory.MODULE &&
|
|
528
|
+
!(content.artifactUrl && content.artifactUrl.length))) {
|
|
529
|
+
const child = content.children[0];
|
|
530
|
+
return this.getPreAssessmentFirstChildInHierarchy(child);
|
|
531
|
+
}
|
|
532
|
+
if (content.primaryCategory === NsContent.EPrimaryCategory.RESOURCE ||
|
|
533
|
+
content.primaryCategory === NsContent.EPrimaryCategory.KNOWLEDGE_ARTIFACT ||
|
|
534
|
+
content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM ||
|
|
535
|
+
content.primaryCategory === NsContent.EPrimaryCategory.PRACTICE_RESOURCE ||
|
|
536
|
+
content.primaryCategory === NsContent.EPrimaryCategory.FINAL_ASSESSMENT ||
|
|
537
|
+
content.primaryCategory === NsContent.EPrimaryCategory.COMP_ASSESSMENT ||
|
|
538
|
+
content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM ||
|
|
539
|
+
content.primaryCategory === NsContent.EPrimaryCategory.OFFLINE_SESSION) {
|
|
540
|
+
return content;
|
|
541
|
+
}
|
|
542
|
+
const firstChild = content.children[0];
|
|
543
|
+
const resultContent = this.getPreAssessmentFirstChildInHierarchy(firstChild);
|
|
544
|
+
return resultContent;
|
|
545
|
+
}
|
|
546
|
+
fetchHierarchyContent(contentId, hierarchyType = 'detail') {
|
|
547
|
+
let url = '';
|
|
548
|
+
const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
|
|
549
|
+
if (!forPreview) {
|
|
550
|
+
url = `/apis/proxies/v8/action/content/v3/hierarchy/${contentId}?hierarchyType=${hierarchyType}`;
|
|
551
|
+
}
|
|
552
|
+
else {
|
|
553
|
+
const forcreator = window.location.href.includes('editMode=true');
|
|
554
|
+
if (forcreator) {
|
|
555
|
+
url = `apis/proxies/v8/action/content/v3/hierarchy/${contentId}?mode=edit`;
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
url = `/api/course/v1/hierarchy/${contentId}?hierarchyType=${hierarchyType}`;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
return this.http.get(url).pipe(shareReplay(1));
|
|
562
|
+
}
|
|
563
|
+
fetchContentData(contentId) {
|
|
564
|
+
let url = '';
|
|
565
|
+
const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
|
|
566
|
+
if (!forPreview) {
|
|
567
|
+
return this.http.get(API_END_POINTS.CONTENT_READ(contentId));
|
|
568
|
+
}
|
|
569
|
+
if (window.location.href.includes('editMode=true') && window.location.href.includes('_rc')) {
|
|
570
|
+
url = `/apis/proxies/v8/extended/content/v1/read/${contentId}`;
|
|
571
|
+
}
|
|
572
|
+
else {
|
|
573
|
+
url = `/api/content/v1/read/${contentId}`;
|
|
574
|
+
}
|
|
575
|
+
return this.http.get(url);
|
|
576
|
+
}
|
|
577
|
+
getUserEnrollmentData(userId, request) {
|
|
578
|
+
return this.http.post(API_END_POINTS.ENROLL_CONTENT_DATA(userId), request).pipe(map((rData) => {
|
|
579
|
+
const result = rData?.result ?? null;
|
|
580
|
+
return { data: result, error: null };
|
|
581
|
+
}), catchError((error) => {
|
|
582
|
+
return of({ data: null, error });
|
|
583
|
+
}));
|
|
584
|
+
}
|
|
585
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetContentService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigurationsService }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
586
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetContentService, providedIn: 'root' }); }
|
|
587
|
+
}
|
|
588
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: WidgetContentService, decorators: [{
|
|
589
|
+
type: Injectable,
|
|
590
|
+
args: [{
|
|
591
|
+
providedIn: 'root',
|
|
592
|
+
}]
|
|
593
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ConfigurationsService }, { type: i3.ActivatedRoute }]; } });
|
|
594
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbnRlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRTFDLE9BQU8sRUFBYyxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFBO0FBQ2xELGlCQUFpQjtBQUNqQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUE7QUFDdEIsT0FBTyxFQUFHLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDM0QsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFBOzs7OztBQUkzQixnQkFBZ0I7QUFFaEIsdUNBQXVDO0FBQ3ZDLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUE7QUFFOUMsTUFBTSxjQUFjLEdBQUc7SUFDckIsT0FBTyxFQUFFLEdBQUcsaUJBQWlCLFVBQVU7SUFDdkMsaUJBQWlCLEVBQUUsMEJBQTBCO0lBQzdDLGFBQWEsRUFBRSxHQUFHLGlCQUFpQixvQkFBb0I7SUFDdkQsYUFBYSxFQUFFLEdBQUcsaUJBQWlCLG9CQUFvQjtJQUN2RCxtQkFBbUIsRUFBRSxHQUFHLGlCQUFpQix5QkFBeUI7SUFDbEUsY0FBYyxFQUFFLEdBQUcsaUJBQWlCLCtCQUErQjtJQUNuRSxzQkFBc0IsRUFBRSxHQUFHLGlCQUFpQiw0QkFBNEI7SUFDeEUsZ0JBQWdCLEVBQUUsR0FBRyxpQkFBaUIsbUJBQW1CO0lBQ3pELGlCQUFpQixFQUFFLEdBQUcsaUJBQWlCLG1CQUFtQjtJQUMxRCxpQkFBaUIsRUFBRSxxQ0FBcUM7SUFDeEQsdUJBQXVCLEVBQUUseUNBQXlDO0lBQ2xFLDZCQUE2QixFQUFFLHFDQUFxQztJQUNwRSxvQ0FBb0MsRUFBRSxHQUFHLGlCQUFpQixxQ0FBcUM7SUFDL0YsZUFBZSxFQUFFLEdBQUcsaUJBQWlCLGVBQWU7SUFDcEQsaUJBQWlCLEVBQUUsdUNBQXVDO0lBQzFELGlCQUFpQixFQUFFLCtDQUErQztJQUNsRSxZQUFZLEVBQUUsdUNBQXVDO0lBQ3JELGlCQUFpQixFQUFFLGlEQUFpRDtJQUNwRSx5QkFBeUIsRUFBRSwwQ0FBMEM7SUFDckUsd0JBQXdCLEVBQUUsdUNBQXVDO0lBQ2pFLHNCQUFzQixFQUFFLEdBQUcsaUJBQWlCLHdCQUF3QjtJQUNwRSxjQUFjLEVBQUUsR0FBRyxpQkFBaUIsY0FBYztJQUNsRCxvQkFBb0IsRUFBRSxDQUFDLElBQVksRUFBRSxFQUFVLEVBQUUsRUFBRSxDQUNqRCxHQUFHLGlCQUFpQix1QkFBdUIsSUFBSSxJQUFJLEVBQUUsRUFBRTtJQUN6RCxtQkFBbUIsRUFBRSxHQUFHLGlCQUFpQixzREFBc0Q7SUFDL0YscUJBQXFCLEVBQUUsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FBQyxHQUFHLGlCQUFpQixrQkFBa0IsU0FBUyxFQUFFO0lBQy9GLFlBQVksRUFBRSwwQ0FBMEM7SUFDeEQsZUFBZSxFQUFFLGdEQUFnRDtJQUNqRSxpQkFBaUIsRUFBRSxrREFBa0Q7SUFDckUsZUFBZSxFQUFFLHNEQUFzRDtJQUN2RSxrQkFBa0IsRUFBRSw0REFBNEQ7SUFDaEYsaUJBQWlCLEVBQUUsR0FBRyxpQkFBaUIseUNBQXlDO0lBQ2hGLFVBQVUsRUFBRSxHQUFHLGlCQUFpQixrQ0FBa0M7SUFDbEUsYUFBYSxFQUFFLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLGlCQUFpQix1Q0FBdUMsTUFBTSxFQUFFO0lBQ25HLGdCQUFnQixFQUFFLG1DQUFtQztJQUNyRCxZQUFZLEVBQUUsQ0FBQyxTQUFjLEVBQUUsRUFBRSxDQUFDLDZDQUE2QyxTQUFTLEVBQUU7SUFDMUYsdUJBQXVCLEVBQUUsK0NBQStDO0lBQ3hFLGlCQUFpQixFQUFFLG1DQUFtQztJQUN0RCxpQkFBaUIsRUFBRSx3Q0FBd0M7SUFDM0QsZ0JBQWdCLEVBQUUsQ0FBQyxTQUFjLEVBQUUsRUFBRSxDQUFDLHlDQUF5QyxTQUFTLEVBQUU7SUFDMUYsc0JBQXNCLEVBQUcsQ0FBQyxTQUFjLEVBQUUsRUFBRSxDQUFDLHlEQUF5RCxTQUFTLEVBQUU7SUFDakgsaUJBQWlCLEVBQUUsd0NBQXdDO0lBQzNELGtCQUFrQixFQUFFLENBQUMsT0FBWSxFQUFFLFNBQWMsRUFBRSxFQUFFLENBQUMsb0RBQW9ELE9BQU8sSUFBSSxTQUFTLEVBQUU7SUFDaEksbUJBQW1CLEVBQUUsQ0FBQyxNQUFjLEVBQUcsRUFBRSxDQUFDLDhEQUE4RCxNQUFNLEVBQUU7SUFDaEgsc0JBQXNCLEVBQUUsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FBQyw2Q0FBNkMsU0FBUyxFQUFFO0NBQ3hHLENBQUE7QUFLRCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLFlBQ1UsSUFBZ0IsRUFDaEIsU0FBZ0MsRUFDaEMsY0FBOEI7UUFGOUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixjQUFTLEdBQVQsU0FBUyxDQUF1QjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFJeEMsa0JBQWEsR0FBUSxJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQTtRQUNqRCxtQkFBYyxHQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUE7UUFJbkQsaUNBQTRCLEdBQUcsSUFBSSxlQUFlLENBQU0sRUFBRSxDQUFDLENBQUE7UUFDM0Qsa0NBQTZCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFlBQVksRUFBRSxDQUFBO0lBUmhGLENBQUM7SUFVRCxVQUFVLENBQUMsZUFBdUI7UUFDaEMsSUFBSSxlQUFlLEVBQUU7WUFDbkIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLDBCQUEwQixDQUFDLGlCQUFpQixDQUFDO2dCQUM3RixDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsMEJBQTBCLENBQUMsaUJBQWlCLENBQUM7Z0JBQzVFLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDM0UsQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLDBCQUEwQixDQUFDLGVBQWUsQ0FBQztnQkFDMUUsQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLDBCQUEwQixDQUFDLGVBQWUsQ0FBQyxDQUFBO1lBQzVFLE9BQU8sVUFBVSxDQUFBO1NBQ2xCO1FBQ0QsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsVUFBa0I7UUFDeEMsMkJBQTJCO1FBQzNCLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM1RCx3Q0FBd0M7UUFDeEMsSUFBSSxHQUFHLEVBQUUsR0FBRztRQUNaLE9BQU8sRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDekIsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFTO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxZQUFZLENBQ1YsU0FBaUIsRUFDakIsZ0JBQThDLFFBQVEsRUFDdEQsb0JBQThCLEVBQUUsRUFDaEMsZUFBK0I7UUFFL0Isc0ZBQXNGO1FBQ3RGLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQTtRQUNaLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDOUcsSUFBSSxlQUFlLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUN2RCxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNmLEdBQUcsR0FBRyw2Q0FBNkMsU0FBUyxFQUFFLENBQUE7YUFDL0Q7aUJBQU07Z0JBQ0wsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUMxRixHQUFHLEdBQUcsNkNBQTZDLFNBQVMsRUFBRSxDQUFBO2lCQUMvRDtxQkFBTTtvQkFDSCxHQUFHLEdBQUcsd0JBQXdCLFNBQVMsRUFBRSxDQUFBO2lCQUM1QzthQUNGO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2YsR0FBRyxHQUFHLGdEQUFnRCxTQUFTLGtCQUFrQixhQUFhLEVBQUUsQ0FBQTthQUNqRztpQkFBTTtnQkFDTCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUE7Z0JBQ2pFLElBQUksVUFBVSxFQUFFO29CQUNkLEdBQUcsR0FBRywrQ0FBK0MsU0FBUyxZQUFZLENBQUE7aUJBQzNFO3FCQUFNO29CQUNMLEdBQUcsR0FBRyw0QkFBNEIsU0FBUyxrQkFBa0IsYUFBYSxFQUFFLENBQUE7aUJBQzdFO2FBQ0Y7U0FDRjtRQUNELG1CQUFtQjtRQUNuQix5REFBeUQ7UUFDekQsb0JBQW9CO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQXFCLEdBQUcsQ0FBQzthQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkIsbUNBQW1DO1FBQ25DLGtDQUFrQztRQUNsQyxJQUFJO0lBQ04sQ0FBQztJQUNELHFCQUFxQixDQUFDLFNBQWlCLEVBQUUsT0FBZ0I7UUFDdkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQ2pFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQTtRQUNaLElBQUksVUFBVSxFQUFFO1lBQ2QsR0FBRyxHQUFHLCtDQUErQyxTQUFTLFlBQVksQ0FBQTtTQUMzRTthQUFNLElBQUcsT0FBTyxJQUFJLE9BQU8sS0FBSyxNQUFNLEVBQUU7WUFDdkMsR0FBRyxHQUFHLHdCQUF3QixTQUFTLEVBQUUsQ0FBQTtTQUMxQzthQUFNO1lBQ0wsR0FBRyxHQUFHLEdBQUcsY0FBYyxDQUFDLGlCQUFpQixJQUFJLFNBQVMsdUJBQXVCLENBQUE7U0FDOUU7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFxQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUUsQ0FBQztJQUNELG9CQUFvQixDQUFDLEdBQWE7UUFDaEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxjQUFjLENBQUMsZ0JBQWdCLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUN0RCxDQUFBO0lBQ0gsQ0FBQztJQUNELHdCQUF3QixDQUFDLElBQVksRUFBRSxFQUFVLEVBQUUsYUFBcUIsQ0FBQyxFQUFFLFdBQW1CLENBQUM7UUFDN0YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxjQUFjLENBQUMsb0JBQW9CLENBQ3BDLElBQUksRUFDSixFQUFFLENBQ0gsZUFBZSxVQUFVLGFBQWEsUUFBUSxFQUFFLENBQ2xELENBQUE7SUFDSCxDQUFDO0lBRUQsa0JBQWtCO0lBRWxCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFRO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixJQUFJLENBQStCLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUM7YUFDekUsSUFBSSxDQUNILEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixHQUFHLENBQ0QsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUNwQyxDQUNGLENBQUE7SUFDTCxDQUFDO0lBRUQseUJBQXlCO0lBQ3pCLGdCQUFnQixDQUFDLE9BQWU7UUFDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxjQUFjLENBQUMsWUFBWSxJQUFJLE9BQU8sRUFBRSxDQUM1QyxDQUFBO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLFVBQWUsRUFBRSxRQUFjO1FBQ2hELElBQUksVUFBVSxHQUFXLFFBQVEsRUFBRSxNQUFNLElBQUksU0FBUyxDQUFBO1FBQ3RELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQStCLEdBQUcsY0FBYyxDQUFDLGlCQUFpQixHQUFHLFVBQVUsYUFBYSxVQUFVLEVBQUUsQ0FBQzthQUMxSCxJQUFJLENBQ0gsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLEdBQUcsQ0FDRCxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQ3BDLENBQ0YsQ0FBQTtJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsVUFBZTtRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUErQixHQUFHLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2FBQ3ZHLElBQUksQ0FDSCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsR0FBRyxDQUNELENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDcEMsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUdELHlCQUF5QixDQUFDLE9BQVksRUFBRSxXQUFnQjtRQUN0RCxNQUFNLEdBQUcsR0FBRyxXQUFXLEtBQUssU0FBUyxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pFLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLHlCQUF5QixDQUFBO1FBQ2xGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQStCLEdBQUcsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDO2FBQ25FLElBQUksQ0FDSCxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ1IsR0FBRyxDQUNELENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDcEMsQ0FDRixDQUFBO0lBQ0wsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQVE7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQzthQUN0QyxTQUFTLEVBQUUsQ0FBQTtJQUNoQixDQUFDO0lBRUQsOEJBQThCLENBQUMsR0FBUSxFQUFFLElBQVM7UUFDaEQsTUFBTSxHQUFHLEdBQVEsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFBO1FBQ3hHLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQzthQUNkLFNBQVMsRUFBRSxDQUFBO0lBQ2hCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFRO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUM7YUFDekMsU0FBUyxFQUFFLENBQUE7SUFDaEIsQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBQVE7UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDO2FBQzVDLFNBQVMsRUFBRSxDQUFBO0lBQ2hCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxVQUFvQztRQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsSUFBSSxDQUFtQyxjQUFjLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQzthQUNoRixTQUFTLEVBQUUsQ0FBQTtJQUNoQixDQUFDO0lBQ0QsbUJBQW1CLENBQUMsVUFBb0M7UUFDdEQsSUFBSSxVQUFVLEVBQUUsR0FBRztRQUNuQixtQkFBbUI7UUFDbkIsaUVBQWlFO1FBQ2pFLGlCQUFpQjtRQUNqQixPQUFPLEVBQUUsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ3pCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxTQUFpQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLGNBQWMsQ0FBQyxlQUFlLElBQUksU0FBUyxFQUFFLENBQ2pELENBQUE7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FBdUM7UUFDM0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQTtRQUM5RSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDeEMsSUFBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUM3QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDekIsR0FBRyxjQUFjLENBQUMsaUJBQWlCLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLENBQ25FLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNqQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsSUFBSSxFQUFFLENBQUE7Z0JBQ2hFLE9BQU8sS0FBSyxDQUFBO1lBQ2QsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtZQUNELDJDQUEyQztZQUMzQyxpSUFBaUk7WUFDakksU0FBUztZQUNULE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFDRCxPQUFPLEVBQUUsRUFBRSxDQUFBO0lBQ1gsQ0FBQztJQUVELHlCQUF5QixDQUFDLFdBQWdCLEVBQUUsUUFBYTtRQUN2RCxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUM3RSxtQkFBbUI7SUFDckIsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFVLEVBQUUsWUFBcUIsRUFBRSxjQUF1QjtRQUMvRSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtZQUNqQyxJQUFJLGNBQWM7Z0JBQ2hCLGNBQWMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxVQUFVLEVBQUU7Z0JBQzdDLE1BQU0sT0FBTyxHQUFHO29CQUNkLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDL0MsVUFBVSxFQUFFLEVBQUU7b0JBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7d0JBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO3dCQUNyQixlQUFlLEVBQUUsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO3FCQUNwQyxDQUFDO29CQUNGLFlBQVksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUN4QixXQUFXLEVBQUUsVUFBVTtpQkFDeEIsQ0FBQTtnQkFDRCxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO29CQUN4RSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ2YsQ0FBQyxDQUNBLENBQUE7YUFDRjtpQkFBTTtnQkFDTCxNQUFNLE9BQU8sR0FBRztvQkFDZCxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQy9DLFVBQVUsRUFBRSxFQUFFO29CQUNkLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUMvQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtpQkFDekIsQ0FBQTtnQkFDRCxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO29CQUN4RSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQ2YsQ0FBQyxDQUFDLENBQUE7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELG9CQUFvQixDQUFDLE9BQWlEO1FBQ3BFLG9EQUFvRDtRQUNwRCwyQ0FBMkM7UUFDM0MsSUFBSSxPQUFPLEVBQUU7U0FFWjtRQUNELE9BQU8sRUFBRSxFQUFTLENBQUE7SUFDcEIsQ0FBQztJQUVELFdBQVcsQ0FDVCxVQUFrQjtRQUdsQixtQkFBbUI7UUFDbkIsdURBQXVEO1FBQ3ZELHdDQUF3QztRQUV4QyxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNsRyxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQVc7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0lBQ0QscUJBQXFCLENBQUMsR0FBVztRQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLHNCQUFzQixRQUFRLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNqRyxDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQTRCO1FBQ2pDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUE7UUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBNEIsY0FBYyxDQUFDLGlCQUFpQixFQUFFO1lBQ2pGLE9BQU8sRUFBRSxHQUFHO1NBQ2IsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELDBCQUEwQixDQUN4QixHQUFtRDtRQUVuRCxHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFBO1FBQzNCLEdBQUcsQ0FBQyxhQUFhO1lBQ2YsQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztnQkFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzVFLEdBQUcsQ0FBQyxPQUFPLEdBQUc7WUFDWixHQUFHLEdBQUcsQ0FBQyxPQUFPO1lBQ2QsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7U0FDbEMsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLGNBQWMsQ0FBQyxvQ0FBb0MsRUFDbkQsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQ2pCLENBQUE7SUFDSCxDQUFDO0lBQ0QsUUFBUSxDQUFDLEdBQThCO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1FBQ3RDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUE7UUFDM0IsSUFBSSxPQUFPLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLE9BQU8sQ0FBQyxDQUFBO1NBQ25DO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxjQUFjLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUVELGtCQUFrQixDQUFDLEdBQVE7UUFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxjQUFjLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDL0UsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQWlCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXFCLEdBQUcsY0FBYyxDQUFDLGNBQWMsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQzNGLENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxTQUFpQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsY0FBYyxDQUFDLGNBQWMsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQzFFLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLElBQXdCO1FBQzFELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU0sR0FBRyxjQUFjLENBQUMsY0FBYyxJQUFJLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ25GLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxPQUEyQjtRQUNsRCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNwQyxPQUFPLE9BQU8sQ0FBQTtTQUNmO1FBQ0QsSUFDRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU87WUFDN0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUI7WUFDNUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlO2dCQUNyRSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZELENBQUMsT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTTtnQkFDNUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUN2RDtZQUNBLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDakMsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDNUM7UUFDRCxJQUNFLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLFFBQVE7WUFDL0QsT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCO1lBQ3pFLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU87WUFDOUQsT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCO1lBQ3hFLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQjtZQUN2RSxPQUFPLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlO1lBQ3RFLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLGVBQWU7WUFDdEUsT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUN0RTtZQUNBLE9BQU8sT0FBTyxDQUFBO1NBQ2Y7UUFDRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUMvRCxPQUFPLGFBQWEsQ0FBQTtJQUN0QixDQUFDO0lBRUQscUJBQXFCLENBQUMsTUFBYztRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFNLEdBQUcsY0FBYyxDQUFDLG1CQUFtQixJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDMUYsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU0sR0FBRyxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFTO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQU0sR0FBRyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0lBQ0QsWUFBWSxDQUFDLE1BQVc7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBTSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3RFLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxHQUFRO1FBQzVCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUE7UUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBcUIsY0FBYyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ3hGLENBQUM7SUFFRCxjQUFjLENBQUUsS0FBYSxFQUFFLE1BQVc7UUFDeEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM5RyxDQUFDO0lBQ0QsbUJBQW1CLENBQUMsU0FBbUI7UUFDckMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFBO1FBQ1osTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUM5RyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsY0FBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FDdkMsQ0FBQTtTQUNGO1FBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDbEQsR0FBRyxHQUFHLDZDQUE2QyxTQUFTLEVBQUUsQ0FBQTtTQUMvRDthQUFNO1lBQ0gsR0FBRyxHQUFHLHdCQUF3QixTQUFTLEVBQUUsQ0FBQTtTQUM1QztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXVCLEdBQUcsQ0FBQyxDQUFBO1FBQy9DLHFGQUFxRjtJQUN2RixDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsU0FBbUI7UUFDdEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBdUIsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDeEYsQ0FBQztJQUVELDBCQUEwQixDQUFDLFlBQWlCLEVBQUUsU0FBYztRQUMxRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF1QixjQUFjLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDeEcsQ0FBQztJQUVELHlCQUF5QixDQUFDLFNBQWlCO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQU0sY0FBYyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7SUFDN0UsQ0FBQztJQUVELGdCQUFnQixDQUFFLFdBQWdCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU0sR0FBRyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUNoRixDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBWTtRQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFNLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUM3RSxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBWTtRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFNLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUN2RSxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU0sY0FBYyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBWTtRQUMxQixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFBO1FBQ3ZGLE1BQU0sa0JBQWtCLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEQsT0FBTyxrQkFBa0IsQ0FBQTtJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFZO1FBQ2hDLE1BQU0sa0JBQWtCLEdBQVEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDeEUsSUFBSSxrQkFBa0IsRUFBRTtZQUN0QixJQUFJLGtCQUFrQixJQUFJLGtCQUFrQixDQUFDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsTUFBTTtnQkFDdkYsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTLEVBQUU7Z0JBQy9ELElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLGNBQWMsS0FBTSxTQUFTLENBQUMsZUFBZSxDQUFDLGVBQWU7b0JBQzFGLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxjQUFjLEtBQU0sU0FBUyxDQUFDLGVBQWUsQ0FBQyxtQkFBbUI7b0JBQzVGLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxjQUFjLEtBQU0sU0FBUyxDQUFDLGVBQWUsQ0FBQyxpQkFBaUI7b0JBQzFGLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQU0sU0FBUyxDQUFDLGdCQUFnQixDQUFDLGVBQWU7b0JBQzFGLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQU0sU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRTtvQkFDbEYsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDckQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO3FCQUNqQztvQkFDRCxNQUFNLFVBQVUsR0FBSSxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtvQkFDakYsT0FBTyxVQUFVLENBQUE7aUJBQ3BCO2dCQUNELE1BQU0sSUFBSSxHQUFJLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO2dCQUMzRSxPQUFPLElBQUksQ0FBQTthQUNaO1lBQ0QsT0FBTyxFQUFFLENBQUE7U0FDVjtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBQ0QsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE9BQVksRUFBRSxVQUFlO1FBQ3ZELElBQUksT0FBWSxDQUFBO1FBQ2hCLElBQUksVUFBVSxDQUFDLG9CQUFvQixLQUFNLEdBQUcsRUFBRTtZQUM1QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUE7U0FDcEM7UUFDRCxpRkFBaUY7UUFDakYsZ0NBQWdDO1FBQ2hDLHFCQUFxQjtRQUNyQiwyQ0FBMkM7UUFDM0MsMkRBQTJEO1FBQzNELHFDQUFxQztRQUNyQyxNQUFNO1FBQ04sOENBQThDO1FBQzlDLDREQUE0RDtRQUM1RCxnSEFBZ0g7UUFDaEgsTUFBTTtRQUNOLHlDQUF5QztRQUN6Qyw0REFBNEQ7UUFDNUQsbUVBQW1FO1FBQ25FLGtGQUFrRjtRQUNsRixNQUFNO1FBQ04sSUFBSTtRQUNGLElBQUksVUFBVSxDQUFDLGlCQUFpQixJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUU7WUFDM0QsTUFBTSxJQUFJLEdBQUksVUFBVSxDQUFDLGlCQUFpQixJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUE7WUFDckUsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFRLEVBQUUsRUFBRTtnQkFDNUYsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtvQkFDM0MsTUFBTSxXQUFXLEdBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUE7b0JBQzNDLE1BQU0sZ0JBQWdCLEdBQUk7d0JBQ3hCLEdBQUcsVUFBVTt3QkFDYixVQUFVLEVBQUUsVUFBVSxDQUFDLFlBQVk7d0JBQ25DLGVBQWUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLGVBQWU7d0JBQ25ELElBQUksRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUk7cUJBQzlCLENBQUE7b0JBQ0QsT0FBTyxHQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtvQkFDdkcsSUFBSSxPQUFPLEVBQUU7d0JBQ1gsT0FBTyxPQUFPLENBQUE7cUJBQ2Y7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUNGLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7U0FDL0Q7UUFDQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFdEMsQ0FBQztJQUVELHVCQUF1QixDQUFDLE9BQVksRUFBRSxVQUFlLEVBQUUsUUFBYTtRQUNsRSxJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sR0FBRyxHQUFHLG9CQUFvQixDQUM5QixVQUFVLEVBQ1YsUUFBUSxFQUNSLE9BQU8sQ0FBQyxVQUFVLEVBQ2xCLFFBQVEsRUFDUixLQUFLLEVBQ0wsbUJBQW1CLEVBQ25CLE9BQU8sQ0FBQyxPQUFPLEVBQ2YsT0FBTyxDQUFDLElBQUksQ0FDYixDQUFBO1lBQ0QsT0FBTyxHQUFHLENBQUE7U0FDWDtRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBQ0QsV0FBVyxDQUFDLE9BQVk7UUFDdEIsTUFBTSxPQUFPLEdBQVE7WUFDbkIsR0FBRyxFQUFFLFlBQVksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksV0FBVztZQUMxRixXQUFXLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRTtTQUMxQyxDQUFBO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO1NBQy9GO1FBQ0QsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzNELE9BQU8sQ0FBQyxHQUFHLEdBQUcsZ0JBQWdCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtZQUNqRCxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQTtTQUN6QjtRQUNELE9BQU8sT0FBTyxDQUFBO0lBQ2hCLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxTQUFjO1FBQzlCLGlEQUFpRDtRQUNqRCw4REFBOEQ7UUFDOUQsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUNsQyxNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDekMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDbEUsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtZQUNwRixPQUFPO1lBQ0wsa0JBQWtCO1lBQ2xCLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO21CQUNsQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUN0QyxDQUFBO1NBQ047UUFBQyxPQUFPLElBQUksQ0FBQTtJQUNmLENBQUM7SUFFRCxxQ0FBcUMsQ0FBQyxPQUEyQjtRQUMvRCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNwQyxPQUFPLE9BQU8sQ0FBQTtTQUNmO1FBQ0QsSUFDRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU87WUFDN0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUI7WUFDNUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlO2dCQUNyRSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZELENBQUMsT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsTUFBTTtnQkFDNUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUN2RDtZQUNBLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDakMsT0FBTyxJQUFJLENBQUMscUNBQXFDLENBQUMsS0FBSyxDQUFDLENBQUE7U0FDekQ7UUFDRCxJQUNFLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLFFBQVE7WUFDL0QsT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCO1lBQ3pFLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLE9BQU87WUFDOUQsT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCO1lBQ3hFLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQjtZQUN2RSxPQUFPLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlO1lBQ3RFLE9BQU8sQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLGVBQWU7WUFDdEUsT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUN0RTtZQUNBLE9BQU8sT0FBTyxDQUFBO1NBQ2Y7UUFDRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUM1RSxPQUFPLGFBQWEsQ0FBQTtJQUN0QixDQUFDO0lBRUQscUJBQXFCLENBQUMsU0FBZ0IsRUFBRSxnQkFBOEMsUUFBUTtRQUM1RixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUE7UUFDWixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQzlHLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixHQUFHLEdBQUcsZ0RBQWdELFNBQVMsa0JBQWtCLGFBQWEsRUFBRSxDQUFBO1NBQ2pHO2FBQU07WUFDTCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUE7WUFDakUsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsR0FBRyxHQUFHLCtDQUErQyxTQUFTLFlBQVksQ0FBQTthQUMzRTtpQkFBTTtnQkFDTCxHQUFHLEdBQUcsNEJBQTRCLFNBQVMsa0JBQWtCLGFBQWEsRUFBRSxDQUFBO2FBQzdFO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFxQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDcEUsQ0FBQztJQUVELGdCQUFnQixDQUFDLFNBQWlCO1FBQ2hDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQTtRQUNaLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDOUcsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLGNBQWMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQ3ZDLENBQUE7U0FDRjtRQUNELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxRixHQUFHLEdBQUcsNkNBQTZDLFNBQVMsRUFBRSxDQUFBO1NBQy9EO2FBQU07WUFDSCxHQUFHLEdBQUcsd0JBQXdCLFNBQVMsRUFBRSxDQUFBO1NBQzVDO1FBQ0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsR0FBRyxDQUFDLENBQUE7SUFDakQsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQWMsRUFBRSxPQUFZO1FBQ2hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDN0UsR0FBRyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7WUFDakIsTUFBTSxNQUFNLEdBQUcsS0FBSyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUM7WUFDckMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOytHQTduQlUsb0JBQW9CO21IQUFwQixvQkFBb0IsY0FGbkIsTUFBTTs7NEZBRVAsb0JBQW9CO2tCQUhoQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgRU1QVFksIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHJldHJ5LCBtYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4vd2lkZ2V0LWNvbnRlbnQubW9kZWwnXHJcbi8vIHRzbGludDpkaXNhYmxlXHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgIHZpZXdlclJvdXRlR2VuZXJhdG9yIH0gZnJvbSAnLi92aWV3ZXItcm91dGUtdXRpbCdcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xyXG5pbXBvcnQgeyBOU1NlYXJjaCB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyL2xpYi9zZXJ2aWNlcy93aWRnZXQtc2VhcmNoLm1vZGVsJ1xyXG5pbXBvcnQgeyBOc0NvbnRlbnRTdHJpcE11bHRpcGxlIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjIvbGliL3NlcnZpY2VzL2NvbnRlbnQtc3RyaXAtbXVsdGlwbGUubW9kZWwnXHJcbi8vIHRzbGludDplbmFibGVcclxuXHJcbi8vIFRPRE86IG1vdmUgdGhpcyBpbiBzb21lIGNvbW1vbiBwbGFjZVxyXG5jb25zdCBQUk9URUNURURfU0xBR19WOCA9ICcvYXBpcy9wcm90ZWN0ZWQvdjgnXHJcblxyXG5jb25zdCBBUElfRU5EX1BPSU5UUyA9IHtcclxuICBDT05URU5UOiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudGAsXHJcbiAgQVVUSE9SSU5HX0NPTlRFTlQ6IGAvYXBpL2NvdXJzZS92MS9oaWVyYXJjaHlgLFxyXG4gIENPTlRFTlRfTElLRVM6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L2xpa2VDb3VudGAsXHJcbiAgU0VUX1MzX0NPT0tJRTogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvc2V0Q29va2llYCxcclxuICBTRVRfUzNfSU1BR0VfQ09PS0lFOiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudC9zZXRJbWFnZUNvb2tpZWAsXHJcbiAgRkVUQ0hfTUFOSUZFU1Q6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L2dldFdlYk1vZHVsZU1hbmlmZXN0YCxcclxuICBGRVRDSF9XRUJfTU9EVUxFX0ZJTEVTOiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudC9nZXRXZWJNb2R1bGVGaWxlc2AsXHJcbiAgTVVMVElQTEVfQ09OVEVOVDogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvbXVsdGlwbGVgLFxyXG4gIENPTlRFTlRfU0VBUkNIX1Y1OiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudC9zZWFyY2hWNWAsXHJcbiAgQ09OVEVOVF9TRUFSQ0hfVjY6IGAvYXBpcy9wcm94aWVzL3Y4L3N1bmJpcmRpZ290L3NlYXJjaGAsXHJcbiAgVFJFTkRJTkdfQ09OVEVOVF9TRUFSQ0g6IGBhcGlzL3Byb3hpZXMvdjgvdHJlbmRpbmcvY29udGVudC9zZWFyY2hgLFxyXG4gIENPTlRFTlRfU0VBUkNIX1JFTEFURURfQ0JQX1Y2OiBgL2FwaXMvcHJveGllcy92OC9zdW5iaXJkaWdvdC9zZWFyY2hgLFxyXG4gIENPTlRFTlRfU0VBUkNIX1JFR0lPTl9SRUNPTU1FTkRBVElPTjogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvc2VhcmNoUmVnaW9uUmVjb21tZW5kYXRpb25gLFxyXG4gIENPTlRFTlRfSElTVE9SWTogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L3VzZXIvaGlzdG9yeWAsXHJcbiAgQ09OVEVOVF9ISVNUT1JZVjI6IGAvYXBpcy9wcm94aWVzL3Y4L3JlYWQvY29udGVudC1wcm9ncmVzYCxcclxuICBDT1VSU0VfQkFUQ0hfTElTVDogYC9hcGlzL3Byb3hpZXMvdjgvbGVhcm5lci9jb3Vyc2UvdjEvYmF0Y2gvbGlzdGAsXHJcbiAgQ09VUlNFX0JBVENIOiBgL2FwaXMvcHJveGllcy92OC9jb3Vyc2UvdjEvYmF0Y2gvcmVhZGAsXHJcbiAgQVVUT19BU1NJR05fQkFUQ0g6IGAvYXBpcy9wcm90ZWN0ZWQvdjgvY29ob3J0cy91c2VyL2F1dG9lbnJvbGxtZW50L2AsXHJcbiAgQVVUT19BU1NJR05fQ1VSQVRFRF9CQVRDSDogYC9hcGlzL3Byb3hpZXMvdjgvY3VyYXRlZHByb2dyYW0vdjEvZW5yb2xgLFxyXG4gIEFVVE9fQVNTSUdOX09QRU5fUFJPR1JBTTogYC9hcGlzL3Byb3hpZXMvdjgvb3BlbnByb2dyYW0vdjEvZW5yb2xgLFxyXG4gIFVTRVJfQ09OVElOVUVfTEVBUk5JTkc6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS91c2VyL2hpc3RvcnkvY29udGludWVgLFxyXG4gIENPTlRFTlRfUkFUSU5HOiBgJHtQUk9URUNURURfU0xBR19WOH0vdXNlci9yYXRpbmdgLFxyXG4gIENPTExFQ1RJT05fSElFUkFSQ0hZOiAodHlwZTogc3RyaW5nLCBpZDogc3RyaW5nKSA9PlxyXG4gICAgYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvY29sbGVjdGlvbi8ke3R5cGV9LyR7aWR9YCxcclxuICBSRUdJU1RSQVRJT05fU1RBVFVTOiBgJHtQUk9URUNURURfU0xBR19WOH0vYWRtaW4vdXNlclJlZ2lzdHJhdGlvbi9jaGVja1VzZXJSZWdpc3RyYXRpb25Db250ZW50YCxcclxuICBNQVJLX0FTX0NPTVBMRVRFX01FVEE6IChjb250ZW50SWQ6IHN0cmluZykgPT4gYCR7UFJPVEVDVEVEX1NMQUdfVjh9L3VzZXIvcHJvZ3Jlc3MvJHtjb250ZW50SWR9YCxcclxuICBFTlJPTExfQkFUQ0g6IGAvYXBpcy9wcm94aWVzL3Y4L2xlYXJuZXIvY291cnNlL3YxL2Vucm9sYCxcclxuICBFTlJPTExfQkFUQ0hfV0Y6IGAvYXBpcy9wcm94aWVzL3Y4L3dvcmtmbG93L2JsZW5kZWRwcm9ncmFtL2Vucm9sYCxcclxuICBXSVRIRFJBV19CQVRDSF9XRjogYC9hcGlzL3Byb3hpZXMvdjgvd29ya2Zsb3cvYmxlbmRlZHByb2dyYW0vdW5lbnJvbGAsXHJcbiAgQkxFTkRFRF9VU0VSX1dGOiBgL2FwaXMvcHJveGllcy92OC93b3JrZmxvdy9ibGVuZGVkcHJvZ3JhbS91c2VyL3NlYXJjaGAsXHJcbiAgQkxFTkRFRF9VU0VSX0NPVU5UOiBgYXBpcy9wcm94aWVzL3Y4L3dvcmtmbG93L2JsZW5kZWRwcm9ncmFtL2Vucm9sL3N0YXR1cy9jb3VudGAsXHJcbiAgQ0VSVF9BRERfVEVNUExBVEU6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb2hvcnRzL2NvdXJzZS9iYXRjaC9jZXJ0L3RlbXBsYXRlL2FkZGAsXHJcbiAgQ0VSVF9JU1NVRTogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvaG9ydHMvY291cnNlL2JhdGNoL2NlcnQvaXNzdWVgLFxyXG4gIENFUlRfRE9XTkxPQUQ6IChjZXJ0SWQ6IGFueSkgPT4gYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvaG9ydHMvY291cnNlL2JhdGNoL2NlcnQvZG93bmxvYWQvJHtjZXJ0SWR9YCxcclxuICBSRUFEX0tBUk1BUE9JTlRTOiBgL2FwaXMvcHJveGllcy92OC9rYXJtYXBvaW50cy9yZWFkYCxcclxuICBDT05URU5UX1JFQUQ6IChjb250ZW50SWQ6IGFueSkgPT4gYC9hcGlzL3Byb3hpZXMvdjgvZXh0ZW5kZWQvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWAsXHJcbiAgUkVBRF9DT1VSU0VfS0FSTUFQT0lOVFM6ICcvYXBpcy9wcm94aWVzL3Y4L2thcm1hcG9pbnRzL3VzZXIvY291cnNlL3JlYWQnLFxyXG4gIENMQUlNX0tBUk1BUE9JTlRTOiAnL2FwaXMvcHJveGllcy92OC9jbGFpbWthcm1hcG9pbnRzJyxcclxuICBVU0VSX0tBUk1BX1BPSU5UUzogJy9hcGlzL3Byb3hpZXMvdjgvdXNlci90b3RhbGthcm1hcG9pbnRzJyxcclxuICBFWFRfQ09OVEVOVF9SRUFEOiAoY29udGVudElkOiBhbnkpID0+IGAvYXBpcy9wcm94aWVzL3Y4L2Npb3MvdjEvY29udGVudC9yZWFkLyR7Y29udGVudElkfWAsXHJcbiAgRVhUX1VTRVJfQ09VUlNFX0VOUk9MTCA6IChjb250ZW50SWQ6IGFueSkgPT4gYC9hcGlzL3Byb3hpZXMvdjgvY2lvcy1lbnJvbGwvdjEvcmVhZGJ5L3VzZXJpZGNvdXJzZWlkLyR7Y29udGVudElkfWAsXHJcbiAgRVhUX0NPTlRFTlRfRVJPTEw6IGAvYXBpcy9wcm94aWVzL3Y4L2Npb3MtZW5yb2xsL3YxL2NyZWF0ZWAsXHJcbiAgRVhUX1BVQkxJQ19DT05URU5UOiAocGFydGVudDogYW55LCBjb250ZW50SWQ6IGFueSkgPT4gYC9hcGlzL3Byb3hpZXMvdjgvY2lvc0ludGVncmF0aW9uL3YxL3JlYWQvY29udGVudC8ke3BhcnRlbnR9LyR7Y29udGVudElkfWAsXHJcbiAgRU5ST0xMX0NPTlRFTlRfREFUQTogKHVzZXJJZDogc3RyaW5nLCkgPT4gYC9hcGlzL3Byb3hpZXMvdjgvbGVhcm5lci9jb3Vyc2UvdjQvdXNlci9lbnJvbGxtZW50L2RldGFpbHMvJHt1c2VySWR9YCxcclxuICBMRUFSTkVSX1BBVEhXQVlfRU5ST0xMOiAoY29udGVudElkOiBzdHJpbmcpID0+IGAvYXBpcy9wcm94aWVzL3Y4L2xlYXJuaW5ncGF0aHdheS92MS9lbnJvbC8ke2NvbnRlbnRJZH1gLFxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgV2lkZ2V0Q29udGVudFNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgdG9jQ29uZmlnRGF0YTogYW55ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt9KVxyXG4gIHRvY0NvbmZpZ0RhdGEkICA9IHRoaXMudG9jQ29uZmlnRGF0YS5hc09ic2VydmFibGUoKVxyXG4gIGN1cnJlbnRNZXRhRGF0YSE6IE5zQ29udGVudC5JQ29udGVudFxyXG4gIGN1cnJlbnRDb250ZW50UmVhZE1ldGFEYXRhITogTnNDb250ZW50LklDb250ZW50XHJcbiAgY3VycmVudEJhdGNoRW5yb2xsbWVudExpc3QhOiBOc0NvbnRlbnQuSUNvdXJzZVtdXHJcbiAgcHJvZ3JhbUNoaWxkQ291cnNlUmVzdW1lRGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSlcclxuICBwcm9ncmFtQ2hpbGRDb3Vyc2VSZXN1bWVEYXRhJCA9IHRoaXMucHJvZ3JhbUNoaWxkQ291cnNlUmVzdW1lRGF0YS5hc09ic2VydmFibGUoKVxyXG4gIGxhbmd1YWdlTWFwUHJvZ3Jlc3M6IGFueVxyXG4gIGlzUmVzb3VyY2UocHJpbWFyeUNhdGVnb3J5OiBzdHJpbmcpIHtcclxuICAgIGlmIChwcmltYXJ5Q2F0ZWdvcnkpIHtcclxuICAgICAgY29uc3QgaXNSZXNvdXJjZSA9IChwcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUmVzb3VyY2VQcmltYXJ5Q2F0ZWdvcmllcy5MRUFSTklOR19SRVNPVVJDRSkgfHxcclxuICAgICAgICAocHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVJlc291cmNlUHJpbWFyeUNhdGVnb3JpZXMuUFJBQ1RJQ0VfUkVTT1VSQ0UpIHx8XHJcbiAgICAgICAgKHByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVSZXNvdXJjZVByaW1hcnlDYXRlZ29yaWVzLkZJTkFMX0FTU0VTU01FTlQpIHx8XHJcbiAgICAgICAgKHByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVSZXNvdXJjZVByaW1hcnlDYXRlZ29yaWVzLkNPTVBfQVNTRVNTTUVOVCkgfHxcclxuICAgICAgICAocHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVJlc291cmNlUHJpbWFyeUNhdGVnb3JpZXMuT0ZGTElORV9TRVNTSU9OKVxyXG4gICAgICByZXR1cm4gaXNSZXNvdXJjZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG5cclxuICBmZXRjaE1hcmtBc0NvbXBsZXRlTWV0YShpZGVudGlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXHJcbiAgICBjb25zdCB1cmwgPSBBUElfRU5EX1BPSU5UUy5NQVJLX0FTX0NPTVBMRVRFX01FVEEoaWRlbnRpZmllcilcclxuICAgIC8vIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCkudG9Qcm9taXNlKClcclxuICAgIGlmICh1cmwpIHsgfVxyXG4gICAgcmV0dXJuIG9mKCkudG9Qcm9taXNlKClcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRvY0NvbmZpZyhkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMudG9jQ29uZmlnRGF0YS5uZXh0KGRhdGEpXHJcbiAgfVxyXG5cclxuICBmZXRjaENvbnRlbnQoXHJcbiAgICBjb250ZW50SWQ6IHN0cmluZyxcclxuICAgIGhpZXJhcmNoeVR5cGU6ICdhbGwnIHwgJ21pbmltYWwnIHwgJ2RldGFpbCcgPSAnZGV0YWlsJyxcclxuICAgIF9hZGRpdGlvbmFsRmllbGRzOiBzdHJpbmdbXSA9IFtdLFxyXG4gICAgcHJpbWFyeUNhdGVnb3J5Pzogc3RyaW5nIHwgbnVsbCxcclxuICApOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudD4ge1xyXG4gICAgLy8gY29uc3QgdXJsID0gYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVH0vJHtjb250ZW50SWR9P2hpZXJhcmNoeVR5cGU9JHtoaWVyYXJjaHlUeXBlfWBcclxuICAgIGxldCB1cmwgPSAnJ1xyXG4gICAgY29uc3QgZm9yUHJldmlldyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHVibGljLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcmcHJldmlldz10cnVlJylcclxuICAgIGlmIChwcmltYXJ5Q2F0ZWdvcnkgJiYgdGhpcy5pc1Jlc291cmNlKHByaW1hcnlDYXRlZ29yeSkpIHtcclxuICAgICAgaWYgKCFmb3JQcmV2aWV3KSB7XHJcbiAgICAgICAgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvZXh0ZW5kZWQvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWBcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2VkaXRNb2RlPXRydWUnKSAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnX3JjJykpIHtcclxuICAgICAgICAgIHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2V4dGVuZGVkL2NvbnRlbnQvdjEvcmVhZC8ke2NvbnRlbnRJZH1gXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdXJsID0gYC9hcGkvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghZm9yUHJldmlldykge1xyXG4gICAgICAgIHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/aGllcmFyY2h5VHlwZT0ke2hpZXJhcmNoeVR5cGV9YFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGZvcmNyZWF0b3IgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZWRpdE1vZGU9dHJ1ZScpXHJcbiAgICAgICAgaWYgKGZvcmNyZWF0b3IpIHtcclxuICAgICAgICAgIHVybCA9IGBhcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvaGllcmFyY2h5LyR7Y29udGVudElkfT9tb2RlPWVkaXRgXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHVybCA9IGAvYXBpL2NvdXJzZS92MS9oaWVyYXJjaHkvJHtjb250ZW50SWR9P2hpZXJhcmNoeVR5cGU9JHtoaWVyYXJjaHlUeXBlfWBcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHJldHVybiB0aGlzLmh0dHBcclxuICAgIC8vICAgLnBvc3Q8TnNDb250ZW50LklDb250ZW50Pih1cmwsIHsgYWRkaXRpb25hbEZpZWxkcyB9KVxyXG4gICAgLy8gICAucGlwZShyZXRyeSgxKSlcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldDxOc0NvbnRlbnQuSUNvbnRlbnQ+KHVybClcclxuICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoMSkpXHJcbiAgICAvLyBpZiAoYXBpRGF0YSAmJiBhcGlEYXRhLnJlc3VsdCkge1xyXG4gICAgLy8gICByZXR1cm4gYXBpRGF0YS5yZXN1bHQuY29udGVudFxyXG4gICAgLy8gfVxyXG4gIH1cclxuICBmZXRjaEF1dGhvcmluZ0NvbnRlbnQoY29udGVudElkOiBzdHJpbmcsIGFwaVR5cGU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgZm9yY3JlYXRvciA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdlZGl0TW9kZT10cnVlJylcclxuICAgIGxldCB1cmwgPSAnJ1xyXG4gICAgaWYgKGZvcmNyZWF0b3IpIHtcclxuICAgICAgdXJsID0gYGFwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9oaWVyYXJjaHkvJHtjb250ZW50SWR9P21vZGU9ZWRpdGBcclxuICAgIH0gZWxzZSBpZihhcGlUeXBlICYmIGFwaVR5cGUgPT09ICdyZWFkJykge1xyXG4gICAgICB1cmwgPSBgL2FwaS9jb250ZW50L3YxL3JlYWQvJHtjb250ZW50SWR9YFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gYCR7QVBJX0VORF9QT0lOVFMuQVVUSE9SSU5HX0NPTlRFTlR9LyR7Y29udGVudElkfT9oaWVyYXJjaHlUeXBlPWRldGFpbGBcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudD4odXJsKS5waXBlKHNoYXJlUmVwbGF5KDEpLCByID0+IHIpXHJcbiAgfVxyXG4gIGZldGNoTXVsdGlwbGVDb250ZW50KGlkczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudFtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnRbXT4oXHJcbiAgICAgIGAke0FQSV9FTkRfUE9JTlRTLk1VTFRJUExFX0NPTlRFTlR9LyR7aWRzLmpvaW4oJywnKX1gLFxyXG4gICAgKVxyXG4gIH1cclxuICBmZXRjaENvbGxlY3Rpb25IaWVyYXJjaHkodHlwZTogc3RyaW5nLCBpZDogc3RyaW5nLCBwYWdlTnVtYmVyOiBudW1iZXIgPSAwLCBwYWdlU2l6ZTogbnVtYmVyID0gMSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb2xsZWN0aW9uSGllcmFyY2h5UmVzcG9uc2U+KFxyXG4gICAgICBgJHtBUElfRU5EX1BPSU5UUy5DT0xMRUNUSU9OX0hJRVJBUkNIWShcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIGlkLFxyXG4gICAgICApfT9wYWdlTnVtYmVyPSR7cGFnZU51bWJlcn0mcGFnZVNpemU9JHtwYWdlU2l6ZX1gLFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZmV0Y2hCbGVuZGVkQ291cnNlKCkge1xyXG5cclxuICB9XHJcblxyXG4gIGZldGNoQ291cnNlQmF0Y2hlcyhyZXE6IGFueSk6IE9ic2VydmFibGU8TnNDb250ZW50LklCYXRjaExpc3RSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdDxOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlPihBUElfRU5EX1BPSU5UUy5DT1VSU0VfQkFUQ0hfTElTVCwgcmVxKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICByZXRyeSgxKSxcclxuICAgICAgICBtYXAoXHJcbiAgICAgICAgICAoZGF0YTogYW55KSA9PiBkYXRhLnJlc3VsdC5yZXNwb25zZVxyXG4gICAgICAgIClcclxuICAgICAgKVxyXG4gIH1cclxuXHJcbiAgLy8gZmV0Y2ggaW5kaXZpZHVhbCBiYXRjaFxyXG4gIGZldGNoQ291cnNlQmF0Y2goYmF0Y2hJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhPihcclxuICAgICAgYCR7QVBJX0VORF9QT0lOVFMuQ09VUlNFX0JBVENIfS8ke2JhdGNoSWR9YCxcclxuICAgIClcclxuICB9XHJcblxyXG4gIGF1dG9Bc3NpZ25CYXRjaEFwaShpZGVudGlmaWVyOiBhbnksIGxhbmd1YWdlPzogYW55KTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlPiB7XHJcbiAgICBsZXQgZW5yb2xsTGFuZzogc3RyaW5nID0gbGFuZ3VhZ2U/LmxhbmdJZCB8fCAnZW5nbGlzaCdcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2U+KGAke0FQSV9FTkRfUE9JTlRTLkFVVE9fQVNTSUdOX0JBVENIfSR7aWRlbnRpZmllcn0/bGFuZ3VhZ2U9JHtlbnJvbGxMYW5nfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHJldHJ5KDEpLFxyXG4gICAgICAgIG1hcChcclxuICAgICAgICAgIChkYXRhOiBhbnkpID0+IGRhdGEucmVzdWx0LnJlc3BvbnNlXHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgfVxyXG5cclxuICBhdXRvRW5yb2xsTFAoaWRlbnRpZmllcjogYW55KTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlPihgJHtBUElfRU5EX1BPSU5UUy5MRUFSTkVSX1BBVEhXQVlfRU5ST0xMKGlkZW50aWZpZXIpfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHJldHJ5KDEpLFxyXG4gICAgICAgIG1hcChcclxuICAgICAgICAgIChkYXRhOiBhbnkpID0+IGRhdGEucmVzdWx0LnJlc3BvbnNlXHJcbiAgICAgICAgKVxyXG4gICAgICApXHJcbiAgfVxyXG5cclxuXHJcbiAgYXV0b0Fzc2lnbkN1cmF0ZWRCYXRjaEFwaShyZXF1ZXN0OiBhbnksIHByb2dyYW1UeXBlOiBhbnkpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHVybCA9IHByb2dyYW1UeXBlID09PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5Lk1PREVSQVRFRF9QUk9HUkFNID9cclxuICAgIEFQSV9FTkRfUE9JTlRTLkFVVE9fQVNTSUdOX09QRU5fUFJPR1JBTSA6IEFQSV9FTkRfUE9JTlRTLkFVVE9fQVNTSUdOX0NVUkFURURfQkFUQ0hcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlPihgJHt1cmx9YCwgcmVxdWVzdClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMSksXHJcbiAgICAgICAgbWFwKFxyXG4gICAgICAgICAgKGRhdGE6IGFueSkgPT4gZGF0YS5yZXN1bHQucmVzcG9uc2VcclxuICAgICAgICApXHJcbiAgICAgIClcclxuICB9XHJcblxyXG4gIGVucm9sbFVzZXJUb0JhdGNoKHJlcTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0KEFQSV9FTkRfUE9JTlRTLkVOUk9MTF9CQVRDSCwgcmVxKVxyXG4gICAgICAudG9Qcm9taXNlKClcclxuICB9XHJcblxyXG4gIGVucm9sbEFuZFVuZW5yb2xsVXNlclRvQmF0Y2hXRihyZXE6IGFueSwgdHlwZTogYW55KSB7XHJcbiAgICBjb25zdCB1cmw6IGFueSA9IHR5cGUgPT09ICdXSVRIRFJBVycgPyBBUElfRU5EX1BPSU5UUy5XSVRIRFJBV19CQVRDSF9XRiA6IEFQSV9FTkRfUE9JTlRTLkVOUk9MTF9CQVRDSF9XRlxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdCh1cmwsIHJlcSlcclxuICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgfVxyXG5cclxuICBmZXRjaEJsZW5kZWRVc2VyV0YocmVxOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3QoQVBJX0VORF9QT0lOVFMuQkxFTkRFRF9VU0VSX1dGLCByZXEpXHJcbiAgICAgIC50b1Byb21pc2UoKVxyXG4gIH1cclxuXHJcbiAgZmV0Y2hCbGVuZGVkVXNlckNPVU5UKHJlcTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0KEFQSV9FTkRfUE9JTlRTLkJMRU5ERURfVVNFUl9DT1VOVCwgcmVxKVxyXG4gICAgICAudG9Qcm9taXNlKClcclxuICB9XHJcblxyXG4gIGZldGNoQ29udGVudExpa2VzKGNvbnRlbnRJZHM6IHsgY29udGVudF9pZDogc3RyaW5nW10gfSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdDx7IFtpZGVudGlmaWVyOiBzdHJpbmddOiBudW1iZXIgfT4oQVBJX0VORF9QT0lOVFMuQ09OVEVOVF9MSUtFUywgY29udGVudElkcylcclxuICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgfVxyXG4gIGZldGNoQ29udGVudFJhdGluZ3MoY29udGVudElkczogeyBjb250ZW50SWRzOiBzdHJpbmdbXSB9KSB7XHJcbiAgICBpZiAoY29udGVudElkcykgeyB9XHJcbiAgICAvLyByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAvLyAgIC5wb3N0KGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUkFUSU5HfS9yYXRpbmdgLCBjb250ZW50SWRzKVxyXG4gICAgLy8gICAudG9Qcm9taXNlKClcclxuICAgIHJldHVybiBvZigpLnRvUHJvbWlzZSgpXHJcbiAgfVxyXG5cclxuICBmZXRjaENvbnRlbnRIaXN0b3J5KGNvbnRlbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhPihcclxuICAgICAgYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9ISVNUT1JZfS8ke2NvbnRlbnRJZH1gLFxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgZmV0Y2hDb250ZW50SGlzdG9yeVYyKHJlcTogTnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YVJlcSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBpc1ByZUFzc2Vzc21lbnQgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLnByZUFzc2Vzc21lbnRcclxuICAgIHJlcS5yZXF1ZXN0LmZpZWxkcyA9IFsncHJvZ3Jlc3NkZXRhaWxzJ11cclxuICAgIGlmKHJlcS5yZXF1ZXN0LmNvdXJzZUlkICYmICFpc1ByZUFzc2Vzc21lbnQpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmh0dHAucG9zdDxOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhPihcclxuICAgICAgYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9ISVNUT1JZVjJ9LyR7cmVxLnJlcXVlc3QuY291cnNlSWR9YCwgcmVxXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgockRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubGFuZ3VhZ2VNYXBQcm9ncmVzcyA9IHJEYXRhPy5yZXN1bHQ/Lmxhbmd1YWdlUHJvZ3Jlc3MgfHwge31cclxuICAgICAgICByZXR1cm4gckRhdGFcclxuICAgICAgfSksIC8vICAockRhdGEucmVzcG9uc2VEYXRhIHx8IFtdKS5tYXAoKHA6IGFueSkgPT4gcC5uYW1lKVxyXG4gICAgKVxyXG4gICAgLy8gZGF0YS5zdWJzY3JpYmUoKHN1YnNjcmliZURhdGE6IGFueSkgPT4ge1xyXG4gICAgLy8gICAgICAgdGhpcy5wcm9ncmFtQ2hpbGRDb3Vyc2VSZXN1bWVEYXRhLm5leHQoeyByZXN1bWVEYXRhOiBzdWJzY3JpYmVEYXRhLnJlc3VsdC5jb250ZW50TGlzdCwgY291cnNlSWQ6IHJlcS5yZXF1ZXN0LmNvdXJzZUlkIH0pXHJcbiAgICAvLyAgICAgfSlcclxuICAgIHJldHVybiBkYXRhXHJcbiAgfVxyXG4gIHJldHVybiBvZigpXHJcbiAgfVxyXG5cclxuICBzZXRQcm9ncmFtQ2hpbGRSZXN1bWVEYXRhKGNvbnRlbnRMaXN0OiBhbnksIGNvdXJzZUlkOiBhbnkpIHtcclxuICAgIC8qIHRzbGludDpkaXNhYmxlICovXHJcbiAgICB0aGlzLnByb2dyYW1DaGlsZENvdXJzZVJlc3VtZURhdGEubmV4dCh7IHJlc3VtZURhdGE6IGNvbnRlbnRMaXN0LCBjb3Vyc2VJZCB9KVxyXG4gICAgLyogdHNsaW50OmVuYWJsZSAqL1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29udGludWVMZWFybmluZyhpZDogc3RyaW5nLCBjb2xsZWN0aW9uSWQ/OiBzdHJpbmcsIGNvbGxlY3Rpb25UeXBlPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyByZXNvbHZlID0+IHtcclxuICAgICAgaWYgKGNvbGxlY3Rpb25UeXBlICYmXHJcbiAgICAgICAgY29sbGVjdGlvblR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ3BsYXlsaXN0Jykge1xyXG4gICAgICAgIGNvbnN0IHJlcUJvZHkgPSB7XHJcbiAgICAgICAgICBjb250ZXh0UGF0aElkOiBjb2xsZWN0aW9uSWQgPyBjb2xsZWN0aW9uSWQgOiBpZCxcclxuICAgICAgICAgIHJlc291cmNlSWQ6IGlkLFxyXG4gICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgIGNvbnRleHRGdWxsUGF0aDogW2NvbGxlY3Rpb25JZCwgaWRdLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBkYXRlQWNjZXNzZWQ6IERhdGUubm93KCksXHJcbiAgICAgICAgICBjb250ZXh0VHlwZTogJ3BsYXlsaXN0JyxcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlQ29udGludWVMZWFybmluZyhyZXFCb2R5KS50b1Byb21pc2UoKS5jYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICApXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcmVxQm9keSA9IHtcclxuICAgICAgICAgIGNvbnRleHRQYXRoSWQ6IGNvbGxlY3Rpb25JZCA/IGNvbGxlY3Rpb25JZCA6IGlkLFxyXG4gICAgICAgICAgcmVzb3VyY2VJZDogaWQsXHJcbiAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7IHRpbWVzdGFtcDogRGF0ZS5ub3coKSB9KSxcclxuICAgICAgICAgIGRhdGVBY2Nlc3NlZDogRGF0ZS5ub3coKSxcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlQ29udGludWVMZWFybmluZyhyZXFCb2R5KS50b1Byb21pc2UoKS5jYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHNhdmVDb250aW51ZUxlYXJuaW5nKGNvbnRlbnQ6IE5zQ29udGVudC5JVmlld2VyQ29udGludWVMZWFybmluZ1JlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy8gY29uc3QgdXJsID0gQVBJX0VORF9QT0lOVFMuVVNFUl9DT05USU5VRV9MRUFSTklOR1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4odXJsLCBjb250ZW50KVxyXG4gICAgaWYgKGNvbnRlbnQpIHtcclxuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2YoKSBhcyBhbnlcclxuICB9XHJcblxyXG4gIHNldFMzQ29va2llKFxyXG4gICAgX2NvbnRlbnRJZDogc3RyaW5nLFxyXG4gICAgLy8gX3BhdGg6IHN0cmluZyxcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgLy8gICAucG9zdChBUElfRU5EX1BPSU5UUy5TRVRfUzNfQ09PS0lFLCB7IGNvbnRlbnRJZCB9KVxyXG4gICAgLy8gICAucGlwZShjYXRjaEVycm9yKF9lcnIgPT4gb2YodHJ1ZSkpKVxyXG5cclxuICAgIHJldHVybiBFTVBUWVxyXG4gIH1cclxuXHJcbiAgc2V0UzNJbWFnZUNvb2tpZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KEFQSV9FTkRfUE9JTlRTLlNFVF9TM19JTUFHRV9DT09LSUUsIHt9KS5waXBlKGNhdGNoRXJyb3IoX2VyciA9PiBvZih0cnVlKSkpXHJcbiAgfVxyXG5cclxuICBmZXRjaE1hbmlmZXN0KHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChBUElfRU5EX1BPSU5UUy5GRVRDSF9NQU5JRkVTVCwgeyB1cmwgfSlcclxuICB9XHJcbiAgZmV0Y2hXZWJNb2R1bGVDb250ZW50KHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke0FQSV9FTkRfUE9JTlRTLkZFVENIX1dFQl9NT0RVTEVfRklMRVN9P3VybD0ke2VuY29kZVVSSUNvbXBvbmVudCh1cmwpfWApXHJcbiAgfVxyXG4gIHNlYXJjaChyZXE6IE5TU2VhcmNoLklTZWFyY2hSZXF1ZXN0KTogT2JzZXJ2YWJsZTxOU1NlYXJjaC5JU2VhcmNoQXBpUmVzdWx0PiB7XHJcbiAgICByZXEucXVlcnkgPSByZXEucXVlcnkgfHwgJydcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxOU1NlYXJjaC5JU2VhcmNoQXBpUmVzdWx0PihBUElfRU5EX1BPSU5UUy5DT05URU5UX1NFQVJDSF9WNSwge1xyXG4gICAgICByZXF1ZXN0OiByZXEsXHJcbiAgICB9KVxyXG4gIH1cclxuICBzZWFyY2hSZWdpb25SZWNvbW1lbmRhdGlvbihcclxuICAgIHJlcTogTlNTZWFyY2guSVNlYXJjaE9yZ1JlZ2lvblJlY29tbWVuZGF0aW9uUmVxdWVzdCxcclxuICApOiBPYnNlcnZhYmxlPE5zQ29udGVudFN0cmlwTXVsdGlwbGUuSUNvbnRlbnRTdHJpcFJlc3BvbnNlQXBpPiB7XHJcbiAgICByZXEucXVlcnkgPSByZXEucXVlcnkgfHwgJydcclxuICAgIHJlcS5wcmVMYWJlbFZhbHVlID1cclxuICAgICAgKHJlcS5wcmVMYWJlbFZhbHVlIHx8ICcnKSArXHJcbiAgICAgICgodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUgJiYgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUuY291bnRyeSkgfHwgJycpXHJcbiAgICByZXEuZmlsdGVycyA9IHtcclxuICAgICAgLi4ucmVxLmZpbHRlcnMsXHJcbiAgICAgIGxhYmVsczogW3JlcS5wcmVMYWJlbFZhbHVlIHx8ICcnXSxcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxOc0NvbnRlbnRTdHJpcE11bHRpcGxlLklDb250ZW50U3RyaXBSZXNwb25zZUFwaT4oXHJcbiAgICAgIEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfU0VBUkNIX1JFR0lPTl9SRUNPTU1FTkRBVElPTixcclxuICAgICAgeyByZXF1ZXN0OiByZXEgfSxcclxuICAgIClcclxuICB9XHJcbiAgc2VhcmNoVjYocmVxOiBOU1NlYXJjaC5JU2VhcmNoVjZSZXF1ZXN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBfLmdldChyZXEsICdhcGkucGF0aCcpXHJcbiAgICByZXEucXVlcnkgPSByZXEucXVlcnkgfHwgJydcclxuICAgIGlmIChhcGlQYXRoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYXBpUGF0aClcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfU0VBUkNIX1Y2LCByZXEpXHJcbiAgfVxyXG5cclxuICBzZWFyY2hSZWxhdGVkQ0JQVjYocmVxOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oQVBJX0VORF9QT0lOVFMuQ09OVEVOVF9TRUFSQ0hfUkVMQVRFRF9DQlBfVjYsIHJlcSlcclxuICB9XHJcblxyXG4gIGZldGNoQ29udGVudFJhdGluZyhjb250ZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8eyByYXRpbmc6IG51bWJlciB9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDx7IHJhdGluZzogbnVtYmVyIH0+KGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUkFUSU5HfS8ke2NvbnRlbnRJZH1gKVxyXG4gIH1cclxuICBkZWxldGVDb250ZW50UmF0aW5nKGNvbnRlbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUkFUSU5HfS8ke2NvbnRlbnRJZH1gKVxyXG4gIH1cclxuICBhZGRDb250ZW50UmF0aW5nKGNvbnRlbnRJZDogc3RyaW5nLCBkYXRhOiB7IHJhdGluZzogbnVtYmVyIH0pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9SQVRJTkd9LyR7Y29udGVudElkfWAsIGRhdGEpXHJcbiAgfVxyXG5cclxuICBnZXRGaXJzdENoaWxkSW5IaWVyYXJjaHkoY29udGVudDogTnNDb250ZW50LklDb250ZW50KTogTnNDb250ZW50LklDb250ZW50IHtcclxuICAgIGlmICghKGNvbnRlbnQuY2hpbGRyZW4gfHwgW10pLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gY29udGVudFxyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICAoY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlBST0dSQU0gJiZcclxuICAgICAgICAhKGNvbnRlbnQuYXJ0aWZhY3RVcmwgJiYgY29udGVudC5hcnRpZmFjdFVybC5sZW5ndGgpKSB8fFxyXG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTUFOREFUT1JZX0NPVVJTRV9HT0FMIHx8XHJcbiAgICAgIChjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNICYmXHJcbiAgICAgICAgIShjb250ZW50LmFydGlmYWN0VXJsICYmIGNvbnRlbnQuYXJ0aWZhY3RVcmwubGVuZ3RoKSkgfHxcclxuICAgICAgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5NT0RVTEUgJiZcclxuICAgICAgICAhKGNvbnRlbnQuYXJ0aWZhY3RVcmwgJiYgY29udGVudC5hcnRpZmFjdFVybC5sZW5ndGgpKVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IGNoaWxkID0gY29udGVudC5jaGlsZHJlblswXVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXRGaXJzdENoaWxkSW5IaWVyYXJjaHkoY2hpbGQpXHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5SRVNPVVJDRSB8fFxyXG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuS05PV0xFREdFX0FSVElGQUNUIHx8XHJcbiAgICAgIGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5QUk9HUkFNIHx8XHJcbiAgICAgIGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5QUkFDVElDRV9SRVNPVVJDRSB8fFxyXG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuRklOQUxfQVNTRVNTTUVOVCB8fFxyXG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ09NUF9BU1NFU1NNRU5UIHx8XHJcbiAgICAgIGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0gfHxcclxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk9GRkxJTkVfU0VTU0lPTlxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBjb250ZW50XHJcbiAgICB9XHJcbiAgICBjb25zdCBmaXJzdENoaWxkID0gY29udGVudC5jaGlsZHJlblswXVxyXG4gICAgY29uc3QgcmVzdWx0Q29udGVudCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZEluSGllcmFyY2h5KGZpcnN0Q2hpbGQpXHJcbiAgICByZXR1cm4gcmVzdWx0Q29udGVudFxyXG4gIH1cclxuXHJcbiAgZ2V0UmVnaXN0cmF0aW9uU3RhdHVzKHNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTx7IGhhc0FjY2VzczogYm9vbGVhbjsgcmVnaXN0cmF0aW9uVXJsPzogc3RyaW5nIH0+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuUkVHSVNUUkFUSU9OX1NUQVRVU30vJHtzb3VyY2V9YCkudG9Qcm9taXNlKClcclxuICB9XHJcblxyXG4gIGZldGNoQ29uZmlnKHVybDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KHVybClcclxuICB9XHJcblxyXG4gIGFkZENlcnRUZW1wbGF0ZShib2R5OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8YW55PihgJHtBUElfRU5EX1BPSU5UUy5DRVJUX0FERF9URU1QTEFURX1gLCBib2R5KVxyXG4gIH1cclxuXHJcbiAgaXNzdWVDZXJ0KGJvZHk6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuQ0VSVF9JU1NVRX1gLCBib2R5KVxyXG4gIH1cclxuICBkb3dubG9hZENlcnQoY2VydElkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuQ0VSVF9ET1dOTE9BRChjZXJ0SWQpfWApXHJcbiAgfVxyXG5cclxuICB0cmVuZGluZ0NvbnRlbnRTZWFyY2gocmVxOiBhbnkpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudD4ge1xyXG4gICAgcmVxLnF1ZXJ5ID0gcmVxLnF1ZXJ5IHx8ICcnXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TnNDb250ZW50LklDb250ZW50PihBUElfRU5EX1BPSU5UUy5UUkVORElOR19DT05URU5UX1NFQVJDSCwgcmVxKVxyXG4gIH1cclxuXHJcbiAgZ2V0S2FybWFQb2l0bnMgKGxpbWl0OiBudW1iZXIsIG9mZnNldDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoQVBJX0VORF9QT0lOVFMuUkVBRF9LQVJNQVBPSU5UUywgeyBsaW1pdCwgb2Zmc2V0IH0pLnBpcGUoY2F0Y2hFcnJvcihfZXJyID0+IG9mKHRydWUpKSlcclxuICB9XHJcbiAgZmV0Y2hQcm9ncmFtQ29udGVudChjb250ZW50SWQ6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRlbnRbXT4ge1xyXG4gICAgbGV0IHVybCA9ICcnXHJcbiAgICBjb25zdCBmb3JQcmV2aWV3ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJyZwcmV2aWV3PXRydWUnKVxyXG4gICAgaWYgKCFmb3JQcmV2aWV3KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudFtdPihcclxuICAgICAgICBBUElfRU5EX1BPSU5UUy5DT05URU5UX1JFQUQoY29udGVudElkKSxcclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdlZGl0TW9kZT10cnVlJykpIHtcclxuICAgICAgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvZXh0ZW5kZWQvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdXJsID0gYC9hcGkvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWBcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudFtdPih1cmwpXHJcbiAgICAvLyByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnRbXT4oQVBJX0VORF9QT0lOVFMuQ09OVEVOVF9SRUFEKGNvbnRlbnRJZCkpXHJcbiAgfVxyXG4gIGZldGNoRXh0ZXJuYWxDb250ZW50KGNvbnRlbnRJZDogc3RyaW5nW10pOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudFtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnRbXT4oQVBJX0VORF9QT0lOVFMuRVhUX0NPTlRFTlRfUkVBRChjb250ZW50SWQpKVxyXG4gIH1cclxuXHJcbiAgZmV0Y2hFeHRlcm5hbFB1YmxpY0NvbnRlbnQocGFydGVuZXJOYW1lOiBhbnksIGNvbnRlbnRJZDogYW55KTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRlbnRbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50W10+KEFQSV9FTkRfUE9JTlRTLkVYVF9QVUJMSUNfQ09OVEVOVChwYXJ0ZW5lck5hbWUsIGNvbnRlbnRJZCkpXHJcbiAgfVxyXG5cclxuICBmZXRjaEV4dFVzZXJDb250ZW50RW5yb2xsKGNvbnRlbnRJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KEFQSV9FTkRfUE9JTlRTLkVYVF9VU0VSX0NPVVJTRV9FTlJPTEwoY29udGVudElkKSlcclxuICB9XHJcblxyXG4gIGV4dENvbnRlbnRFbnJvbGwgKHJlcXVlc3RCb2R5OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke0FQSV9FTkRfUE9JTlRTLkVYVF9DT05URU5UX0VST0xMfWAsIHJlcXVlc3RCb2R5KVxyXG4gIH1cclxuXHJcbiAgZ2V0Q291cnNlS2FybWFQb2ludHMocmVxdWVzdDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihBUElfRU5EX1BPSU5UUy5SRUFEX0NPVVJTRV9LQVJNQVBPSU5UUywgcmVxdWVzdClcclxuICB9XHJcblxyXG4gIGNsYWltS2FybWFwb2ludHMocmVxdWVzdDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihBUElfRU5EX1BPSU5UUy5DTEFJTV9LQVJNQVBPSU5UUywgcmVxdWVzdClcclxuICB9XHJcblxyXG4gIHVzZXJLYXJtYVBvaW50cygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEFQSV9FTkRfUE9JTlRTLlVTRVJfS0FSTUFfUE9JTlRTLCB7fSlcclxuICB9XHJcblxyXG4gIGdldEVucm9sbGVkRGF0YShkb0lkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGVucm9sbG1lbnRNYXBEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZW5yb2xsbWVudE1hcERhdGEnKSB8fCAne30nKVxyXG4gICAgY29uc3QgZW5yb2xsZWRDb3Vyc2VEYXRhID0gZW5yb2xsbWVudE1hcERhdGFbZG9JZF1cclxuICAgIHJldHVybiBlbnJvbGxlZENvdXJzZURhdGFcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFJlc291cnNlTGluayhjb250ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IGVucm9sbGVkQ291cnNlRGF0YTogYW55ID0gdGhpcy5nZXRFbnJvbGxlZERhdGEoY29udGVudC5pZGVudGlmaWVyKVxyXG4gICAgaWYgKGVucm9sbGVkQ291cnNlRGF0YSkge1xyXG4gICAgICBpZiAoZW5yb2xsZWRDb3Vyc2VEYXRhICYmIGVucm9sbGVkQ291cnNlRGF0YS5jb250ZW50ICYmIGVucm9sbGVkQ291cnNlRGF0YS5jb250ZW50LnN0YXR1cyAmJlxyXG4gICAgICAgIGVucm9sbGVkQ291cnNlRGF0YS5jb250ZW50LnN0YXR1cy50b0xvd2VyQ2FzZSgpICE9PSAncmV0aXJlZCcpIHtcclxuICAgICAgICBpZiAoZW5yb2xsZWRDb3Vyc2VEYXRhLmNvbnRlbnQuY291cnNlQ2F0ZWdvcnkgPT09ICBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSB8fFxyXG4gICAgICAgICAgZW5yb2xsZWRDb3Vyc2VEYXRhLmNvbnRlbnQuY291cnNlQ2F0ZWdvcnkgPT09ICBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LklOVklURV9PTkxZX1BST0dSQU0gfHxcclxuICAgICAgICAgIGVucm9sbGVkQ291cnNlRGF0YS5jb250ZW50LmNvdXJzZUNhdGVnb3J5ID09PSAgTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5NT0RFUkFURURfUFJPR1JBTSB8fFxyXG4gICAgICAgICAgZW5yb2xsZWRDb3Vyc2VEYXRhLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSAgTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNIHx8XHJcbiAgICAgICAgICBlbnJvbGxlZENvdXJzZURhdGEuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09ICBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5QUk9HUkFNKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0JhdGNoSW5Qcm9ncmVzcyhlbnJvbGxlZENvdXJzZURhdGEuYmF0Y2gpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ290b1RvY1BhZ2UoY29udGVudClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCByZXR1cm5EYXRhID0gIGF3YWl0IHRoaXMuY2hlY2tGb3JEYXRhVG9Gb3JtVXJsKGNvbnRlbnQsIGVucm9sbGVkQ291cnNlRGF0YSlcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVybkRhdGFcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0YSA9ICBhd2FpdCB0aGlzLmNoZWNrRm9yRGF0YVRvRm9ybVVybChjb250ZW50LCBlbnJvbGxlZENvdXJzZURhdGEpXHJcbiAgICAgICAgcmV0dXJuIGRhdGFcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gJydcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmdvdG9Ub2NQYWdlKGNvbnRlbnQpXHJcbiAgfVxyXG4gIGFzeW5jIGNoZWNrRm9yRGF0YVRvRm9ybVVybChjb250ZW50OiBhbnksIGVucm9sbERhdGE6IGFueSkge1xyXG4gICAgbGV0IHVybERhdGE6IGFueVxyXG4gICAgaWYgKGVucm9sbERhdGEuY29tcGxldGlvblBlcmNlbnRhZ2UgID09PSAxMDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ290b1RvY1BhZ2UoZW5yb2xsRGF0YSlcclxuICAgIH1cclxuICAgIC8vIGlmIChlbnJvbGxEYXRhLmxyY1Byb2dyZXNzRGV0YWlscyAmJiBlbnJvbGxEYXRhLmxyY1Byb2dyZXNzRGV0YWlscy5taW1lVHlwZSkge1xyXG4gICAgLy8gICBjb25zdCBtb2RpZnlFbnJvbGxEYXRhICA9IHtcclxuICAgIC8vICAgICAuLi5lbnJvbGxEYXRhLFxyXG4gICAgLy8gICAgIGlkZW50aWZpZXI6IGVucm9sbERhdGEuY29sbGVjdGlvbklkLFxyXG4gICAgLy8gICAgIHByaW1hcnlDYXRlZ29yeTogZW5yb2xsRGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSxcclxuICAgIC8vICAgICBuYW1lOiBlbnJvbGxEYXRhLmNvbnRlbnQubmFtZSxcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBpZiAobW9kaWZ5RW5yb2xsRGF0YS5sYXN0UmVhZENvbnRlbnRJZCkge1xyXG4gICAgLy8gICAgIHJldHVybiB0aGlzLmdldFJlc291cnNlRGF0YVdpdGhEYXRhKG1vZGlmeUVucm9sbERhdGEsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5yb2xsRGF0YS5sYXN0UmVhZENvbnRlbnRJZCwgZW5yb2xsRGF0YS5scmNQcm9ncmVzc0RldGFpbHMubWltZVR5cGUpXHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgaWYgKG1vZGlmeUVucm9sbERhdGEuZmlyc3RDaGlsZElkKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3Vyc2VEYXRhV2l0aERhdGEobW9kaWZ5RW5yb2xsRGF0YSxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnJvbGxEYXRhLmZpcnN0Q2hpbGRJZCxcclxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnJvbGxEYXRhLmxyY1Byb2dyZXNzRGV0YWlscy5taW1lVHlwZSlcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gICAgICBpZiAoZW5yb2xsRGF0YS5sYXN0UmVhZENvbnRlbnRJZCB8fCBlbnJvbGxEYXRhLmZpcnN0Q2hpbGRJZCkge1xyXG4gICAgICAgIGNvbnN0IGRvSWQgPSAgZW5yb2xsRGF0YS5sYXN0UmVhZENvbnRlbnRJZCB8fCBlbnJvbGxEYXRhLmZpcnN0Q2hpbGRJZFxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2hQcm9ncmFtQ29udGVudChkb0lkKS50b1Byb21pc2UoKS50aGVuKGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQuY29udGVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50RGF0YTogYW55ID0gcmVzLnJlc3VsdC5jb250ZW50XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGlmeUVucm9sbERhdGEgID0ge1xyXG4gICAgICAgICAgICAgIC4uLmVucm9sbERhdGEsXHJcbiAgICAgICAgICAgICAgaWRlbnRpZmllcjogZW5yb2xsRGF0YS5jb2xsZWN0aW9uSWQsXHJcbiAgICAgICAgICAgICAgcHJpbWFyeUNhdGVnb3J5OiBlbnJvbGxEYXRhLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5LFxyXG4gICAgICAgICAgICAgIG5hbWU6IGVucm9sbERhdGEuY29udGVudC5uYW1lLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHVybERhdGEgPSAgdGhpcy5nZXRSZXNvdXJzZURhdGFXaXRoRGF0YShtb2RpZnlFbnJvbGxEYXRhLCBjb250ZW50RGF0YS5pZGVudGlmaWVyLCBjb250ZW50RGF0YS5taW1lVHlwZSlcclxuICAgICAgICAgICAgaWYgKHVybERhdGEpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdXJsRGF0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhID8gcmVzcG9uc2VEYXRhIDogdGhpcy5nb3RvVG9jUGFnZShjb250ZW50KVxyXG4gICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ290b1RvY1BhZ2UoY29udGVudClcclxuXHJcbiAgfVxyXG5cclxuICBnZXRSZXNvdXJzZURhdGFXaXRoRGF0YShjb250ZW50OiBhbnksIHJlc291cnNlSWQ6IGFueSwgbWltZVR5cGU6IGFueSkge1xyXG4gICAgaWYgKGNvbnRlbnQpIHtcclxuICAgICAgY29uc3QgdXJsID0gdmlld2VyUm91dGVHZW5lcmF0b3IoXHJcbiAgICAgICAgcmVzb3Vyc2VJZCxcclxuICAgICAgICBtaW1lVHlwZSxcclxuICAgICAgICBjb250ZW50LmlkZW50aWZpZXIsXHJcbiAgICAgICAgJ0NvdXJzZScsXHJcbiAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgJ0xlYXJuaW5nIFJlc291cmNlJyxcclxuICAgICAgICBjb250ZW50LmJhdGNoSWQsXHJcbiAgICAgICAgY29udGVudC5uYW1lLFxyXG4gICAgICApXHJcbiAgICAgIHJldHVybiB1cmxcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmdvdG9Ub2NQYWdlKGNvbnRlbnQpXHJcbiAgfVxyXG4gIGdvdG9Ub2NQYWdlKGNvbnRlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgdXJsRGF0YTogYW55ID0ge1xyXG4gICAgICB1cmw6IGAvYXBwL3RvYy8ke2NvbnRlbnQuaWRlbnRpZmllciA/IGNvbnRlbnQuaWRlbnRpZmllciA6IGNvbnRlbnQuY29sbGVjdGlvbklkfS9vdmVydmlld2AsXHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IGJhdGNoSWQ6IGNvbnRlbnQuYmF0Y2hJZCB9LFxyXG4gICAgfVxyXG4gICAgaWYgKGNvbnRlbnQuZW5kRGF0ZSkge1xyXG4gICAgICB1cmxEYXRhLnF1ZXJ5UGFyYW1zID0geyAuLi51cmxEYXRhLnF1ZXJ5UGFyYW1zLCBwbGFuVHlwZTogJ2NiUGxhbicsIGVuZERhdGU6IGNvbnRlbnQuZW5kRGF0ZSB9XHJcbiAgICB9XHJcbiAgICBpZiAoY29udGVudC5jb250ZW50SWQgJiYgY29udGVudC5jb250ZW50SWQuaW5jbHVkZXMoJ2V4dF8nKSkge1xyXG4gICAgICB1cmxEYXRhLnVybCA9IGAvYXBwL3RvYy9leHQvJHtjb250ZW50LmNvbnRlbnRJZH1gXHJcbiAgICAgIHVybERhdGEucXVlcnlQYXJhbXMgPSB7fVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVybERhdGFcclxuICB9XHJcbiAgaXNCYXRjaEluUHJvZ3Jlc3MoYmF0Y2hEYXRhOiBhbnkpIHtcclxuICAgIC8vIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50WydiYXRjaGVzJ10pIHtcclxuICAgIC8vIGNvbnN0IGJhdGNoZXMgPSB0aGlzLmNvbnRlbnRbJ2JhdGNoZXMnXSBhcyBOc0NvbnRlbnQuSUJhdGNoXHJcbiAgICBpZiAoYmF0Y2hEYXRhICYmIGJhdGNoRGF0YS5lbmREYXRlKSB7XHJcbiAgICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERCcpXHJcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IG1vbWVudChiYXRjaERhdGEuc3RhcnREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKVxyXG4gICAgICBjb25zdCBlbmREYXRlID0gYmF0Y2hEYXRhLmVuZERhdGUgPyBtb21lbnQoYmF0Y2hEYXRhLmVuZERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpIDogbm93XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAvLyBiYXRjaC5zdGF0dXMgJiZcclxuICAgICAgICAgICAgbW9tZW50KHN0YXJ0RGF0ZSkuaXNTYW1lT3JCZWZvcmUobm93KVxyXG4gICAgICAgICAgICAmJiBtb21lbnQoZW5kRGF0ZSkuaXNTYW1lT3JBZnRlcihub3cpXHJcbiAgICAgICAgICApXHJcbiAgICB9IHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBnZXRQcmVBc3Nlc3NtZW50Rmlyc3RDaGlsZEluSGllcmFyY2h5KGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCk6IE5zQ29udGVudC5JQ29udGVudCB7XHJcbiAgICBpZiAoIShjb250ZW50LmNoaWxkcmVuIHx8IFtdKS5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGNvbnRlbnRcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5QUk9HUkFNICYmXHJcbiAgICAgICAgIShjb250ZW50LmFydGlmYWN0VXJsICYmIGNvbnRlbnQuYXJ0aWZhY3RVcmwubGVuZ3RoKSkgfHxcclxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk1BTkRBVE9SWV9DT1VSU0VfR09BTCB8fFxyXG4gICAgICAoY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSAmJlxyXG4gICAgICAgICEoY29udGVudC5hcnRpZmFjdFVybCAmJiBjb250ZW50LmFydGlmYWN0VXJsLmxlbmd0aCkpIHx8XHJcbiAgICAgIChjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFICYmXHJcbiAgICAgICAgIShjb250ZW50LmFydGlmYWN0VXJsICYmIGNvbnRlbnQuYXJ0aWZhY3RVcmwubGVuZ3RoKSlcclxuICAgICkge1xyXG4gICAgICBjb25zdCBjaGlsZCA9IGNvbnRlbnQuY2hpbGRyZW5bMF1cclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UHJlQXNzZXNzbWVudEZpcnN0Q2hpbGRJbkhpZXJhcmNoeShjaGlsZClcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlJFU09VUkNFIHx8XHJcbiAgICAgIGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5LTk9XTEVER0VfQVJUSUZBQ1QgfHxcclxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlBST0dSQU0gfHxcclxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlBSQUNUSUNFX1JFU09VUkNFIHx8XHJcbiAgICAgIGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5GSU5BTF9BU1NFU1NNRU5UIHx8XHJcbiAgICAgIGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT01QX0FTU0VTU01FTlQgfHxcclxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSB8fFxyXG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuT0ZGTElORV9TRVNTSU9OXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGNvbnRlbnRcclxuICAgIH1cclxuICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBjb250ZW50LmNoaWxkcmVuWzBdXHJcbiAgICBjb25zdCByZXN1bHRDb250ZW50ID0gdGhpcy5nZXRQcmVBc3Nlc3NtZW50Rmlyc3RDaGlsZEluSGllcmFyY2h5KGZpcnN0Q2hpbGQpXHJcbiAgICByZXR1cm4gcmVzdWx0Q29udGVudFxyXG4gIH1cclxuXHJcbiAgZmV0Y2hIaWVyYXJjaHlDb250ZW50KGNvbnRlbnRJZDpzdHJpbmcsIGhpZXJhcmNoeVR5cGU6ICdhbGwnIHwgJ21pbmltYWwnIHwgJ2RldGFpbCcgPSAnZGV0YWlsJykge1xyXG4gICAgbGV0IHVybCA9ICcnXHJcbiAgICBjb25zdCBmb3JQcmV2aWV3ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJyZwcmV2aWV3PXRydWUnKVxyXG4gICAgaWYgKCFmb3JQcmV2aWV3KSB7XHJcbiAgICAgIHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/aGllcmFyY2h5VHlwZT0ke2hpZXJhcmNoeVR5cGV9YFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZm9yY3JlYXRvciA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdlZGl0TW9kZT10cnVlJylcclxuICAgICAgaWYgKGZvcmNyZWF0b3IpIHtcclxuICAgICAgICB1cmwgPSBgYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/bW9kZT1lZGl0YFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHVybCA9IGAvYXBpL2NvdXJzZS92MS9oaWVyYXJjaHkvJHtjb250ZW50SWR9P2hpZXJhcmNoeVR5cGU9JHtoaWVyYXJjaHlUeXBlfWBcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50Pih1cmwpLnBpcGUoc2hhcmVSZXBsYXkoMSkpXHJcbiAgfVxyXG5cclxuICBmZXRjaENvbnRlbnREYXRhKGNvbnRlbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRlbnQ+IHtcclxuICAgIGxldCB1cmwgPSAnJ1xyXG4gICAgY29uc3QgZm9yUHJldmlldyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHVibGljLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcmcHJldmlldz10cnVlJylcclxuICAgIGlmICghZm9yUHJldmlldykge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnQ+KFxyXG4gICAgICAgIEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUkVBRChjb250ZW50SWQpLFxyXG4gICAgICApXHJcbiAgICB9XHJcbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2VkaXRNb2RlPXRydWUnKSAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnX3JjJykpIHtcclxuICAgICAgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvZXh0ZW5kZWQvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdXJsID0gYC9hcGkvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWBcclxuICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50Pih1cmwpXHJcbiAgfVxyXG5cclxuICBnZXRVc2VyRW5yb2xsbWVudERhdGEodXNlcklkOiBzdHJpbmcsIHJlcXVlc3Q6IGFueSk6IE9ic2VydmFibGU8eyBkYXRhOiBhbnk7IGVycm9yOiBhbnkgfT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KEFQSV9FTkRfUE9JTlRTLkVOUk9MTF9DT05URU5UX0RBVEEodXNlcklkKSwgcmVxdWVzdCkucGlwZShcclxuICAgICAgbWFwKChyRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gckRhdGE/LnJlc3VsdCA/PyBudWxsO1xyXG4gICAgICAgIHJldHVybiB7IGRhdGE6IHJlc3VsdCwgZXJyb3I6IG51bGwgfTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gb2YoeyBkYXRhOiBudWxsLCBlcnJvciB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|