@sunbird-cb/toc 0.0.9 → 0.0.10

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.
Files changed (495) hide show
  1. package/esm2022/lib/_collection/_common/attendance-card/attendance-card.component.mjs +55 -55
  2. package/esm2022/lib/_collection/_common/attendance-card/attendance-card.module.mjs +126 -126
  3. package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.component.mjs +32 -32
  4. package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.module.mjs +85 -85
  5. package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.component.mjs +100 -100
  6. package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.module.mjs +48 -48
  7. package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.component.mjs +120 -120
  8. package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.module.mjs +92 -92
  9. package/esm2022/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.mjs +48 -48
  10. package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.component.mjs +25 -25
  11. package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.module.mjs +41 -41
  12. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover-card.component.mjs +89 -89
  13. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.module.mjs +42 -42
  14. package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.servive.mjs +41 -41
  15. package/esm2022/lib/_collection/_common/connection-name/connection-name.component.mjs +78 -78
  16. package/esm2022/lib/_collection/_common/connection-name/connection-name.module.mjs +45 -45
  17. package/esm2022/lib/_collection/_common/connection-name/profile-v2.model.mjs +2 -2
  18. package/esm2022/lib/_collection/_common/content-progress/content-progress.component.mjs +70 -70
  19. package/esm2022/lib/_collection/_common/content-progress/content-progress.module.mjs +28 -28
  20. package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.mjs +187 -187
  21. package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.mjs +86 -86
  22. package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +31 -31
  23. package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +941 -941
  24. package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.mjs +183 -183
  25. package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.mjs +327 -327
  26. package/esm2022/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.mjs +297 -297
  27. package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +261 -248
  28. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +1177 -1148
  29. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.mjs +16 -16
  30. package/esm2022/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.mjs +43 -43
  31. package/esm2022/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.mjs +133 -133
  32. package/esm2022/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.mjs +66 -66
  33. package/esm2022/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.mjs +278 -278
  34. package/esm2022/lib/_collection/_common/content-toc/content-services/handle-claim.service.mjs +21 -21
  35. package/esm2022/lib/_collection/_common/content-toc/content-services/review-component-data.service.mjs +21 -21
  36. package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +847 -847
  37. package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +219 -219
  38. package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +209 -209
  39. package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.module.mjs +26 -26
  40. package/esm2022/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.mjs +19 -19
  41. package/esm2022/lib/_collection/_common/content-toc/pipes/truncate.pipe.mjs +23 -23
  42. package/esm2022/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.mjs +113 -113
  43. package/esm2022/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.mjs +110 -110
  44. package/esm2022/lib/_collection/_common/display-content-type/display-content-type.component.mjs +26 -26
  45. package/esm2022/lib/_collection/_common/display-content-type/display-content-type.module.mjs +19 -19
  46. package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.mjs +67 -67
  47. package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.mjs +28 -28
  48. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.component.mjs +77 -77
  49. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.model.mjs +2 -2
  50. package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.module.mjs +61 -61
  51. package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.module.mjs +20 -20
  52. package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.mjs +67 -67
  53. package/esm2022/lib/_collection/_common/player-brief/player-brief.component.mjs +139 -139
  54. package/esm2022/lib/_collection/_common/player-brief/player-brief.module.mjs +71 -71
  55. package/esm2022/lib/_collection/_common/rating-summary/rating-summary.component.mjs +34 -34
  56. package/esm2022/lib/_collection/_common/rating-summary/rating-summary.module.mjs +56 -56
  57. package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.component.mjs +25 -25
  58. package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.module.mjs +37 -37
  59. package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.mjs +32 -32
  60. package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner.module.mjs +30 -30
  61. package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +38 -38
  62. package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.mjs +51 -51
  63. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.component.mjs +115 -115
  64. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.model.mjs +12 -12
  65. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.module.mjs +51 -51
  66. package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.service.mjs +61 -61
  67. package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.component.mjs +87 -87
  68. package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.module.mjs +36 -36
  69. package/esm2022/lib/_collection/_common/user-image/user-image.component.mjs +62 -62
  70. package/esm2022/lib/_collection/_common/user-image/user-image.module.mjs +24 -24
  71. package/esm2022/lib/_collection/btn-page-back/btn-page-back.component.mjs +192 -192
  72. package/esm2022/lib/_collection/btn-page-back/btn-page-back.module.mjs +44 -44
  73. package/esm2022/lib/_collection/btn-page-back/btn-page-back.service.mjs +99 -99
  74. package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.component.mjs +58 -58
  75. package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.module.mjs +67 -67
  76. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.component.mjs +112 -112
  77. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.model.mjs +2 -2
  78. package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.module.mjs +69 -69
  79. package/esm2022/lib/_collection-api.mjs +57 -57
  80. package/esm2022/lib/_constants/widget-content.constants.mjs +19 -19
  81. package/esm2022/lib/_directives/tooltip.directive.mjs +68 -68
  82. package/esm2022/lib/_models/common.model.mjs +2 -2
  83. package/esm2022/lib/_models/error.model.mjs +2 -2
  84. package/esm2022/lib/_pipes/highlight.pipe.mjs +24 -24
  85. package/esm2022/lib/_services/rating.service.mjs +89 -89
  86. package/esm2022/lib/_services/samuhik-charcha.service.mjs +29 -29
  87. package/esm2022/lib/_services/viewer-route-util.mjs +103 -103
  88. package/esm2022/lib/_services/widget-content.model.mjs +247 -247
  89. package/esm2022/lib/_services/widget-content.service.mjs +594 -594
  90. package/esm2022/lib/_shared/translate-loader.factory.mjs +9 -9
  91. package/esm2022/lib/app-toc-lib.module.mjs +499 -499
  92. package/esm2022/lib/collection.config.mjs +161 -161
  93. package/esm2022/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.mjs +37 -37
  94. package/esm2022/lib/components/app-toc-banner/app-toc-banner.component.mjs +1436 -1436
  95. package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +475 -475
  96. package/esm2022/lib/components/app-toc-cios-home/consent-dialog.component.mjs +119 -119
  97. package/esm2022/lib/components/app-toc-cohorts/app-toc-cohorts.component.mjs +80 -80
  98. package/esm2022/lib/components/app-toc-content-card/app-toc-content-card.component.mjs +249 -249
  99. package/esm2022/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.mjs +39 -39
  100. package/esm2022/lib/components/app-toc-discussion/app-toc-discussion.component.mjs +58 -58
  101. package/esm2022/lib/components/app-toc-home/app-toc-home.component.mjs +2229 -2229
  102. package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +2938 -2907
  103. package/esm2022/lib/components/app-toc-overview/app-toc-overview.component.mjs +157 -157
  104. package/esm2022/lib/components/app-toc-session-card/app-toc-session-card.component.mjs +48 -48
  105. package/esm2022/lib/components/app-toc-sessions/app-toc-sessions.component.mjs +47 -47
  106. package/esm2022/lib/components/app-toc-single-page/app-toc-single-page.component.mjs +766 -766
  107. package/esm2022/lib/components/completion-survey-form/completion-survey-form.component.mjs +243 -243
  108. package/esm2022/lib/components/create-batch-dialog/create-batch-dialog.component.mjs +116 -116
  109. package/esm2022/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.mjs +44 -44
  110. package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +1838 -1838
  111. package/esm2022/lib/components/enroll-questionnaire/enroll-questionnaire.component.mjs +236 -236
  112. package/esm2022/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.mjs +213 -213
  113. package/esm2022/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.mjs +36 -36
  114. package/esm2022/lib/components/public-survey-form/public-survey-form.component.mjs +256 -256
  115. package/esm2022/lib/components/survey-form-question/survey-form-question.component.mjs +133 -133
  116. package/esm2022/lib/components/survey-form-section/survey-form-section.component.mjs +36 -36
  117. package/esm2022/lib/models/app-toc-analytics.model.mjs +2 -2
  118. package/esm2022/lib/models/app-toc.model.mjs +38 -38
  119. package/esm2022/lib/models/auto-complete.model.mjs +2 -2
  120. package/esm2022/lib/models/card-content.model.mjs +13 -13
  121. package/esm2022/lib/models/content-strip-with-tabs.model.mjs +2 -2
  122. package/esm2022/lib/models/discussion-forum.model.mjs +14 -14
  123. package/esm2022/lib/models/goal.model.mjs +2 -2
  124. package/esm2022/lib/models/meta-tag.model.mjs +8 -8
  125. package/esm2022/lib/models/playlist.model.mjs +2 -2
  126. package/esm2022/lib/models/profile-revamp.model.mjs +2 -2
  127. package/esm2022/lib/models/rating.model.mjs +2 -2
  128. package/esm2022/lib/models/user-profile.model.mjs +21 -21
  129. package/esm2022/lib/resolvers/app-toc-cios-resolver.service.mjs +24 -24
  130. package/esm2022/lib/resolvers/app-toc-cios-user-enroll-resolver.service.mjs +24 -24
  131. package/esm2022/lib/resolvers/app-toc-content-read-resolver.service.mjs +60 -60
  132. package/esm2022/lib/resolvers/app-toc-ext-public-resolver.service.mjs +25 -25
  133. package/esm2022/lib/resolvers/app-toc-resolver.service.mjs +106 -106
  134. package/esm2022/lib/resolvers/config-resolver.service.mjs +25 -25
  135. package/esm2022/lib/resolvers/profile-resolver.service.mjs +25 -25
  136. package/esm2022/lib/resolvers/restricted-features-resolver.service.mjs +25 -25
  137. package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +51 -51
  138. package/esm2022/lib/routes/app-toc-home/app-toc-home.directive.mjs +16 -16
  139. package/esm2022/lib/routes/app-toc-home/app-toc-home.service.mjs +18 -18
  140. package/esm2022/lib/services/access-control.service.mjs +56 -56
  141. package/esm2022/lib/services/action.service.mjs +23 -23
  142. package/esm2022/lib/services/app-toc-v2.service.mjs +332 -313
  143. package/esm2022/lib/services/app-toc.service.mjs +1647 -1613
  144. package/esm2022/lib/services/certificate.service.mjs +69 -69
  145. package/esm2022/lib/services/discuss-utils.service.mjs +58 -58
  146. package/esm2022/lib/services/editor.service.mjs +34 -34
  147. package/esm2022/lib/services/load-check.service.mjs +21 -21
  148. package/esm2022/lib/services/loader.service.mjs +33 -33
  149. package/esm2022/lib/services/mobile-apps.service.mjs +67 -67
  150. package/esm2022/lib/services/netcore.service.mjs +56 -56
  151. package/esm2022/lib/services/nps-grid.service.mjs +31 -31
  152. package/esm2022/lib/services/otp.service.mjs +43 -43
  153. package/esm2022/lib/services/profile-v2.service.mjs +43 -43
  154. package/esm2022/lib/services/reset-ratings.service.mjs +19 -19
  155. package/esm2022/lib/services/resource-download-helper.service.mjs +64 -64
  156. package/esm2022/lib/services/timer.service.mjs +23 -23
  157. package/esm2022/lib/services/title-tag.service.mjs +71 -71
  158. package/esm2022/lib/services/user-profile.service.mjs +55 -55
  159. package/esm2022/lib/services/viewer-data.service.mjs +64 -64
  160. package/esm2022/lib/services/viewer-util.service.mjs +599 -590
  161. package/esm2022/lib/share-toc/share-toc/share-toc.component.mjs +291 -291
  162. package/esm2022/lib/share-toc/share-toc.module.mjs +119 -119
  163. package/esm2022/public-api.mjs +73 -71
  164. package/esm2022/sunbird-cb-toc.mjs +4 -4
  165. package/fesm2022/sunbird-cb-toc.mjs +24901 -24766
  166. package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
  167. package/index.d.ts +6 -5
  168. package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +17 -16
  169. package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts.map +1 -0
  170. package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +32 -31
  171. package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts.map +1 -0
  172. package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +16 -15
  173. package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts.map +1 -0
  174. package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +21 -20
  175. package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts.map +1 -0
  176. package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +23 -22
  177. package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts.map +1 -0
  178. package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +16 -15
  179. package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts.map +1 -0
  180. package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +23 -22
  181. package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts.map +1 -0
  182. package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +23 -22
  183. package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts.map +1 -0
  184. package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +10 -9
  185. package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts.map +1 -0
  186. package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +12 -11
  187. package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts.map +1 -0
  188. package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +13 -12
  189. package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts.map +1 -0
  190. package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +19 -18
  191. package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts.map +1 -0
  192. package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +15 -14
  193. package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts.map +1 -0
  194. package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +12 -11
  195. package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts.map +1 -0
  196. package/lib/_collection/_common/connection-name/connection-name.component.d.ts +18 -17
  197. package/lib/_collection/_common/connection-name/connection-name.component.d.ts.map +1 -0
  198. package/lib/_collection/_common/connection-name/connection-name.module.d.ts +15 -14
  199. package/lib/_collection/_common/connection-name/connection-name.module.d.ts.map +1 -0
  200. package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +200 -199
  201. package/lib/_collection/_common/connection-name/profile-v2.model.d.ts.map +1 -0
  202. package/lib/_collection/_common/content-progress/content-progress.component.d.ts +17 -16
  203. package/lib/_collection/_common/content-progress/content-progress.component.d.ts.map +1 -0
  204. package/lib/_collection/_common/content-progress/content-progress.module.d.ts +11 -10
  205. package/lib/_collection/_common/content-progress/content-progress.module.d.ts.map +1 -0
  206. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +39 -38
  207. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts.map +1 -0
  208. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +20 -19
  209. package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts.map +1 -0
  210. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +12 -11
  211. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts.map +1 -0
  212. package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +184 -183
  213. package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts.map +1 -0
  214. package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +42 -41
  215. package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts.map +1 -0
  216. package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +55 -54
  217. package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts.map +1 -0
  218. package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +48 -47
  219. package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts.map +1 -0
  220. package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +51 -49
  221. package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts.map +1 -0
  222. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +175 -171
  223. package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts.map +1 -0
  224. package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +9 -8
  225. package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts.map +1 -0
  226. package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +17 -16
  227. package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts.map +1 -0
  228. package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +41 -40
  229. package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts.map +1 -0
  230. package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +22 -21
  231. package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts.map +1 -0
  232. package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +46 -45
  233. package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts.map +1 -0
  234. package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +11 -10
  235. package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts.map +1 -0
  236. package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +11 -10
  237. package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts.map +1 -0
  238. package/lib/_collection/_common/content-toc/content-toc.component.d.ts +129 -128
  239. package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +1 -0
  240. package/lib/_collection/_common/content-toc/content-toc.module.d.ts +52 -51
  241. package/lib/_collection/_common/content-toc/content-toc.module.d.ts.map +1 -0
  242. package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +30 -29
  243. package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts.map +1 -0
  244. package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +10 -9
  245. package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts.map +1 -0
  246. package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +8 -7
  247. package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts.map +1 -0
  248. package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +8 -7
  249. package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts.map +1 -0
  250. package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +29 -28
  251. package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts.map +1 -0
  252. package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +25 -24
  253. package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts.map +1 -0
  254. package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +15 -14
  255. package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts.map +1 -0
  256. package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +10 -9
  257. package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts.map +1 -0
  258. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +13 -12
  259. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts.map +1 -0
  260. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +11 -10
  261. package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts.map +1 -0
  262. package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +23 -22
  263. package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts.map +1 -0
  264. package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +9 -8
  265. package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts.map +1 -0
  266. package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +19 -18
  267. package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts.map +1 -0
  268. package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +9 -8
  269. package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts.map +1 -0
  270. package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +16 -15
  271. package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts.map +1 -0
  272. package/lib/_collection/_common/player-brief/player-brief.component.d.ts +36 -35
  273. package/lib/_collection/_common/player-brief/player-brief.component.d.ts.map +1 -0
  274. package/lib/_collection/_common/player-brief/player-brief.module.d.ts +20 -19
  275. package/lib/_collection/_common/player-brief/player-brief.module.d.ts.map +1 -0
  276. package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +15 -14
  277. package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts.map +1 -0
  278. package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +14 -13
  279. package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts.map +1 -0
  280. package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +12 -11
  281. package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
  282. package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +12 -11
  283. package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts.map +1 -0
  284. package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +16 -15
  285. package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts.map +1 -0
  286. package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +11 -10
  287. package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts.map +1 -0
  288. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +17 -16
  289. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts.map +1 -0
  290. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +12 -11
  291. package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts.map +1 -0
  292. package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +35 -34
  293. package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts.map +1 -0
  294. package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +18 -17
  295. package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts.map +1 -0
  296. package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +16 -15
  297. package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts.map +1 -0
  298. package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +16 -15
  299. package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts.map +1 -0
  300. package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +22 -21
  301. package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts.map +1 -0
  302. package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +13 -12
  303. package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts.map +1 -0
  304. package/lib/_collection/_common/user-image/user-image.component.d.ts +22 -21
  305. package/lib/_collection/_common/user-image/user-image.component.d.ts.map +1 -0
  306. package/lib/_collection/_common/user-image/user-image.module.d.ts +10 -9
  307. package/lib/_collection/_common/user-image/user-image.module.d.ts.map +1 -0
  308. package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +48 -47
  309. package/lib/_collection/btn-page-back/btn-page-back.component.d.ts.map +1 -0
  310. package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +15 -14
  311. package/lib/_collection/btn-page-back/btn-page-back.module.d.ts.map +1 -0
  312. package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +23 -22
  313. package/lib/_collection/btn-page-back/btn-page-back.service.d.ts.map +1 -0
  314. package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +20 -19
  315. package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts.map +1 -0
  316. package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +16 -15
  317. package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts.map +1 -0
  318. package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +26 -25
  319. package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts.map +1 -0
  320. package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +22 -21
  321. package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts.map +1 -0
  322. package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +19 -18
  323. package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts.map +1 -0
  324. package/lib/_collection-api.d.ts +35 -34
  325. package/lib/_collection-api.d.ts.map +1 -0
  326. package/lib/_constants/widget-content.constants.d.ts +8 -7
  327. package/lib/_constants/widget-content.constants.d.ts.map +1 -0
  328. package/lib/_directives/tooltip.directive.d.ts +18 -17
  329. package/lib/_directives/tooltip.directive.d.ts.map +1 -0
  330. package/lib/_models/common.model.d.ts +4 -3
  331. package/lib/_models/common.model.d.ts.map +1 -0
  332. package/lib/_models/error.model.d.ts +6 -5
  333. package/lib/_models/error.model.d.ts.map +1 -0
  334. package/lib/_pipes/highlight.pipe.d.ts +11 -10
  335. package/lib/_pipes/highlight.pipe.d.ts.map +1 -0
  336. package/lib/_services/rating.service.d.ts +19 -18
  337. package/lib/_services/rating.service.d.ts.map +1 -0
  338. package/lib/_services/samuhik-charcha.service.d.ts +14 -13
  339. package/lib/_services/samuhik-charcha.service.d.ts.map +1 -0
  340. package/lib/_services/viewer-route-util.d.ts +9 -8
  341. package/lib/_services/viewer-route-util.d.ts.map +1 -0
  342. package/lib/_services/widget-content.model.d.ts +516 -515
  343. package/lib/_services/widget-content.model.d.ts.map +1 -0
  344. package/lib/_services/widget-content.service.d.ts +102 -101
  345. package/lib/_services/widget-content.service.d.ts.map +1 -0
  346. package/lib/_shared/translate-loader.factory.d.ts +8 -7
  347. package/lib/_shared/translate-loader.factory.d.ts.map +1 -0
  348. package/lib/app-toc-lib.module.d.ts +89 -88
  349. package/lib/app-toc-lib.module.d.ts.map +1 -0
  350. package/lib/collection.config.d.ts +160 -159
  351. package/lib/collection.config.d.ts.map +1 -0
  352. package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +18 -17
  353. package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts.map +1 -0
  354. package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +226 -225
  355. package/lib/components/app-toc-banner/app-toc-banner.component.d.ts.map +1 -0
  356. package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +79 -78
  357. package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts.map +1 -0
  358. package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +23 -22
  359. package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts.map +1 -0
  360. package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +32 -31
  361. package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts.map +1 -0
  362. package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +48 -47
  363. package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts.map +1 -0
  364. package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +15 -14
  365. package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts.map +1 -0
  366. package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +22 -21
  367. package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts.map +1 -0
  368. package/lib/components/app-toc-home/app-toc-home.component.d.ts +315 -314
  369. package/lib/components/app-toc-home/app-toc-home.component.d.ts.map +1 -0
  370. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +415 -408
  371. package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts.map +1 -0
  372. package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +48 -47
  373. package/lib/components/app-toc-overview/app-toc-overview.component.d.ts.map +1 -0
  374. package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +23 -22
  375. package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts.map +1 -0
  376. package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +15 -14
  377. package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts.map +1 -0
  378. package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +150 -149
  379. package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts.map +1 -0
  380. package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +43 -42
  381. package/lib/components/completion-survey-form/completion-survey-form.component.d.ts.map +1 -0
  382. package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +28 -27
  383. package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts.map +1 -0
  384. package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +16 -15
  385. package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts.map +1 -0
  386. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +196 -195
  387. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts.map +1 -0
  388. package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +45 -44
  389. package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts.map +1 -0
  390. package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +55 -54
  391. package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts.map +1 -0
  392. package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +19 -18
  393. package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts.map +1 -0
  394. package/lib/components/public-survey-form/public-survey-form.component.d.ts +44 -43
  395. package/lib/components/public-survey-form/public-survey-form.component.d.ts.map +1 -0
  396. package/lib/components/survey-form-question/survey-form-question.component.d.ts +21 -20
  397. package/lib/components/survey-form-question/survey-form-question.component.d.ts.map +1 -0
  398. package/lib/components/survey-form-section/survey-form-section.component.d.ts +14 -13
  399. package/lib/components/survey-form-section/survey-form-section.component.d.ts.map +1 -0
  400. package/lib/models/app-toc-analytics.model.d.ts +153 -152
  401. package/lib/models/app-toc-analytics.model.d.ts.map +1 -0
  402. package/lib/models/app-toc.model.d.ts +85 -84
  403. package/lib/models/app-toc.model.d.ts.map +1 -0
  404. package/lib/models/auto-complete.model.d.ts +28 -27
  405. package/lib/models/auto-complete.model.d.ts.map +1 -0
  406. package/lib/models/card-content.model.d.ts +20 -19
  407. package/lib/models/card-content.model.d.ts.map +1 -0
  408. package/lib/models/content-strip-with-tabs.model.d.ts +45 -44
  409. package/lib/models/content-strip-with-tabs.model.d.ts.map +1 -0
  410. package/lib/models/discussion-forum.model.d.ts +41 -40
  411. package/lib/models/discussion-forum.model.d.ts.map +1 -0
  412. package/lib/models/goal.model.d.ts +23 -22
  413. package/lib/models/goal.model.d.ts.map +1 -0
  414. package/lib/models/meta-tag.model.d.ts +7 -6
  415. package/lib/models/meta-tag.model.d.ts.map +1 -0
  416. package/lib/models/playlist.model.d.ts +24 -23
  417. package/lib/models/playlist.model.d.ts.map +1 -0
  418. package/lib/models/profile-revamp.model.d.ts +15 -14
  419. package/lib/models/profile-revamp.model.d.ts.map +1 -0
  420. package/lib/models/rating.model.d.ts +18 -17
  421. package/lib/models/rating.model.d.ts.map +1 -0
  422. package/lib/models/user-profile.model.d.ts +38 -37
  423. package/lib/models/user-profile.model.d.ts.map +1 -0
  424. package/lib/resolvers/app-toc-cios-resolver.service.d.ts +13 -12
  425. package/lib/resolvers/app-toc-cios-resolver.service.d.ts.map +1 -0
  426. package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +13 -12
  427. package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts.map +1 -0
  428. package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +17 -16
  429. package/lib/resolvers/app-toc-content-read-resolver.service.d.ts.map +1 -0
  430. package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +13 -12
  431. package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts.map +1 -0
  432. package/lib/resolvers/app-toc-resolver.service.d.ts +17 -16
  433. package/lib/resolvers/app-toc-resolver.service.d.ts.map +1 -0
  434. package/lib/resolvers/config-resolver.service.d.ts +12 -11
  435. package/lib/resolvers/config-resolver.service.d.ts.map +1 -0
  436. package/lib/resolvers/profile-resolver.service.d.ts +12 -11
  437. package/lib/resolvers/profile-resolver.service.d.ts.map +1 -0
  438. package/lib/resolvers/restricted-features-resolver.service.d.ts +12 -11
  439. package/lib/resolvers/restricted-features-resolver.service.d.ts.map +1 -0
  440. package/lib/routes/app-toc-home/app-toc-home.component.d.ts +20 -19
  441. package/lib/routes/app-toc-home/app-toc-home.component.d.ts.map +1 -0
  442. package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +9 -8
  443. package/lib/routes/app-toc-home/app-toc-home.directive.d.ts.map +1 -0
  444. package/lib/routes/app-toc-home/app-toc-home.service.d.ts +9 -8
  445. package/lib/routes/app-toc-home/app-toc-home.service.d.ts.map +1 -0
  446. package/lib/services/access-control.service.d.ts +30 -29
  447. package/lib/services/access-control.service.d.ts.map +1 -0
  448. package/lib/services/action.service.d.ts +10 -9
  449. package/lib/services/action.service.d.ts.map +1 -0
  450. package/lib/services/app-toc-v2.service.d.ts +17 -16
  451. package/lib/services/app-toc-v2.service.d.ts.map +1 -0
  452. package/lib/services/app-toc.service.d.ts +241 -235
  453. package/lib/services/app-toc.service.d.ts.map +1 -0
  454. package/lib/services/certificate.service.d.ts +43 -42
  455. package/lib/services/certificate.service.d.ts.map +1 -0
  456. package/lib/services/discuss-utils.service.d.ts +34 -33
  457. package/lib/services/discuss-utils.service.d.ts.map +1 -0
  458. package/lib/services/editor.service.d.ts +18 -17
  459. package/lib/services/editor.service.d.ts.map +1 -0
  460. package/lib/services/load-check.service.d.ts +9 -8
  461. package/lib/services/load-check.service.d.ts.map +1 -0
  462. package/lib/services/loader.service.d.ts +17 -16
  463. package/lib/services/loader.service.d.ts.map +1 -0
  464. package/lib/services/mobile-apps.service.d.ts +39 -38
  465. package/lib/services/mobile-apps.service.d.ts.map +1 -0
  466. package/lib/services/netcore.service.d.ts +34 -33
  467. package/lib/services/netcore.service.d.ts.map +1 -0
  468. package/lib/services/nps-grid.service.d.ts +16 -15
  469. package/lib/services/nps-grid.service.d.ts.map +1 -0
  470. package/lib/services/otp.service.d.ts +21 -20
  471. package/lib/services/otp.service.d.ts.map +1 -0
  472. package/lib/services/profile-v2.service.d.ts +21 -20
  473. package/lib/services/profile-v2.service.d.ts.map +1 -0
  474. package/lib/services/reset-ratings.service.d.ts +9 -8
  475. package/lib/services/reset-ratings.service.d.ts.map +1 -0
  476. package/lib/services/resource-download-helper.service.d.ts +30 -29
  477. package/lib/services/resource-download-helper.service.d.ts.map +1 -0
  478. package/lib/services/timer.service.d.ts +10 -9
  479. package/lib/services/timer.service.d.ts.map +1 -0
  480. package/lib/services/title-tag.service.d.ts +22 -21
  481. package/lib/services/title-tag.service.d.ts.map +1 -0
  482. package/lib/services/user-profile.service.d.ts +25 -24
  483. package/lib/services/user-profile.service.d.ts.map +1 -0
  484. package/lib/services/viewer-data.service.d.ts +59 -58
  485. package/lib/services/viewer-data.service.d.ts.map +1 -0
  486. package/lib/services/viewer-util.service.d.ts +77 -76
  487. package/lib/services/viewer-util.service.d.ts.map +1 -0
  488. package/lib/share-toc/share-toc/share-toc.component.d.ts +57 -56
  489. package/lib/share-toc/share-toc/share-toc.component.d.ts.map +1 -0
  490. package/lib/share-toc/share-toc.module.d.ts +33 -32
  491. package/lib/share-toc/share-toc.module.d.ts.map +1 -0
  492. package/package.json +1 -1
  493. package/public-api.d.ts +59 -56
  494. package/public-api.d.ts.map +1 -0
  495. package/sunbird-cb-toc.d.ts.map +1 -0
@@ -1,187 +1,187 @@
1
- import { Component, Inject, Input } from '@angular/core';
2
- import { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms';
3
- import { WsEvents } from '@sunbird-cb/utils-v2';
4
- import { switchMap, takeUntil } from 'rxjs/operators';
5
- import { Subject } from 'rxjs';
6
- import { MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA } from '@angular/material/legacy-dialog';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/material/legacy-dialog";
9
- import * as i2 from "@sunbird-cb/utils-v2";
10
- import * as i3 from "../../../_services/rating.service";
11
- import * as i4 from "@angular/material/legacy-snack-bar";
12
- import * as i5 from "@angular/router";
13
- import * as i6 from "@angular/common";
14
- import * as i7 from "@angular/forms";
15
- import * as i8 from "@angular/material/legacy-button";
16
- import * as i9 from "@angular/material/icon";
17
- import * as i10 from "@angular/material/legacy-form-field";
18
- import * as i11 from "@angular/cdk/text-field";
19
- import * as i12 from "@angular/material/legacy-input";
20
- import * as i13 from "@angular/material/legacy-checkbox";
21
- import * as i14 from "@ngx-translate/core";
22
- export class ContentRatingV2DialogComponent {
23
- constructor(dialogRef, data, events, ratingSvc, loggerSvc, snackBar, router) {
24
- this.dialogRef = dialogRef;
25
- this.data = data;
26
- this.events = events;
27
- this.ratingSvc = ratingSvc;
28
- this.loggerSvc = loggerSvc;
29
- this.snackBar = snackBar;
30
- this.router = router;
31
- this.isEditMode = false;
32
- this.collectionId = '';
33
- this.content = null;
34
- this.userRating = 0;
35
- this.showSuccessScreen = false;
36
- this.formDisabled = true;
37
- this.isEdited = false;
38
- this.unsubscribe = new Subject();
39
- this.feedbackForm = new UntypedFormGroup({
40
- review: new UntypedFormControl(null, [Validators.minLength(1), Validators.maxLength(2000)]),
41
- rating: new UntypedFormControl(0, []),
42
- recommend: new UntypedFormControl(false),
43
- });
44
- }
45
- ngOnInit() {
46
- if (this.ccuserRating || this.navigatetoTOC || (this.data && this.data.courseName)) {
47
- const obj = {
48
- identifier: this.data.identifier,
49
- primaryCategory: this.data.primaryCategory,
50
- };
51
- const dataobj = {
52
- content: obj,
53
- userId: this.data.userId,
54
- userRating: this.ccuserRating,
55
- };
56
- this.data = dataobj;
57
- }
58
- if (this.data.userRating) {
59
- this.feedbackForm.patchValue({
60
- review: this.data.userRating.review,
61
- rating: this.data.userRating.rating,
62
- recommend: this.data.userRating.recommended === 'yes' ? true : false,
63
- });
64
- this.feedbackForm.updateValueAndValidity();
65
- this.userRating = this.data.userRating.rating;
66
- if (this.userRating) {
67
- this.formDisabled = false;
68
- }
69
- }
70
- if (this.data.content) {
71
- this.content = this.data.content;
72
- }
73
- this.feedbackForm.valueChanges
74
- .pipe(switchMap(async (formValue) => {
75
- // tslint:disable-next-line: no-console
76
- // console.log('formValue.review :: ', formValue.review)
77
- if (this.data.userRating) {
78
- if (formValue.review !== this.data.userRating.review
79
- || formValue.rating !== this.data.userRating.rating
80
- || formValue.recommend !== this.data.userRating.recommend) {
81
- this.isEdited = true;
82
- }
83
- else {
84
- this.isEdited = false;
85
- }
86
- }
87
- }), takeUntil(this.unsubscribe)).subscribe();
88
- }
89
- submitRating(feedbackForm) {
90
- if (!this.formDisabled) {
91
- const req = {
92
- activityId: this.data.content.identifier || '',
93
- userId: this.data.userId || '',
94
- activityType: this.data.content.primaryCategory || '',
95
- rating: this.userRating || 0,
96
- ...(feedbackForm.value.review && { review: feedbackForm.value.review }),
97
- recommended: feedbackForm.value.recommend ? 'yes' : 'no',
98
- };
99
- this.ratingSvc.addOrUpdateRating(req).subscribe((_res) => {
100
- this.raiseFeedbackTelemetry(feedbackForm);
101
- if (this.isEditMode) {
102
- this.dialogRef.close(true);
103
- }
104
- else {
105
- this.showSuccessScreen = true;
106
- }
107
- }, (err) => {
108
- this.loggerSvc.error('ADD OR UPDATE USER RATING ERROR >', err);
109
- if (err.error && err.error.params && err.error.params.errmsg) {
110
- this.openSnackbar(err.error.params.errmsg);
111
- }
112
- else {
113
- this.openSnackbar('Something went wrong, please try again later!');
114
- }
115
- // this.dialogRef.close(false)
116
- });
117
- }
118
- }
119
- raiseFeedbackTelemetry(feedbackForm) {
120
- this.events.raiseFeedbackTelemetry({
121
- type: this.data.content.primaryCategory,
122
- subType: 'rating',
123
- id: this.data.content.identifier || '',
124
- }, {
125
- id: this.data.content.identifier || '',
126
- rating: this.userRating,
127
- version: `${this.data.content.version}${''}`,
128
- // tslint:disable-next-line: no-non-null-assertion
129
- commenttxt: feedbackForm.value.review || '',
130
- });
131
- }
132
- addRating(index) {
133
- this.userRating = index + 1;
134
- if (this.userRating) {
135
- this.formDisabled = false;
136
- }
137
- this.events.raiseInteractTelemetry({
138
- type: 'rating',
139
- subType: 'content',
140
- id: this.data.content.identifier || '',
141
- }, {
142
- id: this.data.content.identifier || '',
143
- rating: this.userRating,
144
- }, {
145
- pageIdExt: 'rating-popup',
146
- module: WsEvents.EnumTelemetrymodules.FEEDBACK,
147
- });
148
- // tslint:disable-next-line: no-non-null-assertion
149
- this.feedbackForm.get('rating').setValue(this.userRating);
150
- }
151
- closeDialog(val) {
152
- if (this.navigatetoTOC) {
153
- this.dialogRef.close(val);
154
- // In case of multilingual course, redirection should happen to base collectionID
155
- const id = this.collectionId || this.data.content.identifier;
156
- this.router.navigateByUrl(`app/toc/${id}/overview`);
157
- }
158
- else {
159
- this.dialogRef.close(val);
160
- }
161
- }
162
- openSnackbar(primaryMsg, duration = 5000) {
163
- this.snackBar.open(primaryMsg, 'X', {
164
- duration,
165
- });
166
- }
167
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentRatingV2DialogComponent, deps: [{ token: i1.MatLegacyDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.EventService }, { token: i3.RatingService }, { token: i2.LoggerService }, { token: i4.MatLegacySnackBar }, { token: i5.Router }], target: i0.ɵɵFactoryTarget.Component }); }
168
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContentRatingV2DialogComponent, selector: "ws-widget-content-rating-v2-dialog", inputs: { ccuserRating: "ccuserRating", navigatetoTOC: "navigatetoTOC", rateFromCompletionDialog: "rateFromCompletionDialog", isEditMode: "isEditMode", collectionId: "collectionId" }, ngImport: i0, template: "<ng-container *ngIf=\"!showSuccessScreen\">\r\n <section class=\"flex align-center justify-between mb-5\">\r\n <div class=\"flex flex-col gap-1\">\r\n <h2 class=\"mat-headline margin-remove-bottom ws-mat-black-text\">{{ 'ratingdialog.rateReview' | translate }}</h2>\r\n <div class=\"mat-body-2 ws-mat-black60-text\">{{ 'ratingdialog.yourReviewFeedbackValuable' | translate }}</div>\r\n </div>\r\n <button mat-icon-button aria-label=\"close dialog\" mat-dialog-close>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </section>\r\n\r\n <form [formGroup]=\"feedbackForm\" >\r\n <section class=\"mb-5\">\r\n <h3 class=\"mat-h3 margin-bottom-xs required\" >{{ 'ratingdialog.rateThis' | translate}} {{ content?.primaryCategory | lowercase }}</h3>\r\n <div class=\"\" (click)=\"$event.stopPropagation();\">\r\n <ng-container *ngFor=\"let start of [1, 2, 3, 4, 5]; let i = index\">\r\n <button i18n-aria-label aria-label=\"Rating\" aria-labelledby=\"rate-heading\"\r\n name=\"user-content-rating-star-{{i+1}}\" [disabled]=\"isRequesting || isDisabled\"\r\n class=\"rating-button mr-2\" mat-icon-button (click)=\"addRating(i); $event.stopPropagation();\"\r\n color=\"primary\">\r\n <mat-icon class=\"rating-icon ws-mat-black16-text\" [ngClass]=\"{'ws-mat-orange-text':(userRating || -1) > i}\">\r\n star\r\n </mat-icon>\r\n </button>\r\n </ng-container>\r\n </div>\r\n </section>\r\n\r\n <section class=\"w-full mb-5\" *ngIf=\"!formDisabled\">\r\n <h3 class=\"mat-h3 margin-bottom-xs\" >{{ 'ratingdialog.giveReview' | translate }}</h3>\r\n <div class=\"mat-body-2\">\r\n <mat-form-field appearance=\"outline\" class=\"textarea-container\">\r\n <textarea id=\"review\" matInput [cdkTextareaAutosize] [cdkAutosizeMaxRows]=\"10\"\r\n [cdkAutosizeMinRows]=\"3\" maxlength=\"200\" formControlName=\"review\"\r\n placeholder=\"{{ 'ratingdialog.addReview' | translate}} {{content?.primaryCategory | lowercase}} (optional)\" i18n-placeholder #review i18n-aria-label aria-label=\"Review textarea input\" class=\"mat-body-2\"></textarea>\r\n <mat-hint align=\"end\">{{ review.value.length }} / 200 {{ 'ratingdialog.characters' | translate}}</mat-hint>\r\n <mat-error [hidden]=\"false\" i18n=\"review error | Explains review is required\"\r\n *ngIf=\"feedbackForm?.controls['review'].errors?.required\" i18n-aria-label\r\n aria-label=\"review error | Explains review is required\">\r\n {{ 'ratingdialog.addReview' | translate }} {{ content?.primaryCategory | lowercase }} {{ 'ratingdialog.optional' | translate }}\r\n </mat-error>\r\n <mat-error *ngIf=\"feedbackForm?.controls['review'].errors?.maxlength\" i18n-aria-label\r\n aria-label=\"review error | You have exceeded 200 characters\">\r\n {{ 'ratingdialog.exceededCharacters' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </section>\r\n\r\n <section class=\"w-full mb-5\" *ngIf=\"!formDisabled\">\r\n <mat-checkbox [color]=\"primary\" class=\"profane-radio-button mat-body-2\" formControlName=\"recommend\" >{{'ratingdialog.recommendCourse' | translate}}</mat-checkbox>\r\n </section>\r\n\r\n <mat-dialog-actions class=\"custom margin-remove-bottom no-padding\" align=\"end\">\r\n <ng-container *ngIf=\"!isEditMode\">\r\n <button mat-stroked-button type=\"submit\" class=\"text-white ws-mat-primary-background flex-auto-display\"\r\n [disabled]=\"feedbackForm?.invalid || formDisabled\" (click)=\"submitRating(feedbackForm)\">\r\n <span class=\"text-white\" >{{ 'ratingdialog.submit' | translate }}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"isEditMode\">\r\n <button mat-stroked-button type=\"submit\" class=\"text-white ws-mat-primary-background flex-auto-display\"\r\n [disabled]=\"feedbackForm?.invalid || !isEdited || formDisabled\" (click)=\"submitRating(feedbackForm)\">\r\n <span class=\"text-white\" >{{ 'ratingdialog.update' | translate }}</span>\r\n </button>\r\n </ng-container>\r\n </mat-dialog-actions>\r\n </form>\r\n</ng-container>\r\n\r\n<div *ngIf=\"showSuccessScreen\" class=\"flex-col align-center justify-center\">\r\n <div class=\"text-right\">\r\n <button mat-icon-button aria-label=\"close dialog\" (click)=\"closeDialog(true)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"flex flex-wrap gap-8 items-center justify-center success-msg-container\">\r\n <div>\r\n <img src=\"fusion-assets/images/rating.svg\" class=\"success-image\" alt=\"rating success image\" />\r\n </div>\r\n <div class=\"flex-col text-center sm:text-left\">\r\n <div class=\"flex align-center justify-between\">\r\n <h2 class=\"mat-headline margin-bottom-xxs ws-mat-black-text\">{{ 'ratingdialog.thankYouForFeedback' | translate }}</h2>\r\n </div>\r\n <div class=\"section-content mat-body-1\"> {{ 'ratingdialog.youCanUpdateYourFeedback' | translate }} </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".rating-icon{transform:scale(1.2)}.rating-button{margin-right:10px;line-height:20px;height:24px;width:24px}::ng-deep .textarea-container{width:100%}::ng-deep .textarea-container .mat-form-field-wrapper{margin:0}::ng-deep .textarea-container .mat-form-field-infix{padding:8px 0;border-top:0px}::ng-deep .textarea-container .mat-form-field-infix textarea{min-height:52px!important;padding:8px 0}.orange{color:#f69953;font-size:24px}.no-padding{padding:0!important}.custom.mat-dialog-actions{min-height:auto}.success-msg-container{min-height:331px}@media only screen and (max-width: 599px){.success-msg-container{min-height:auto}}@media only screen and (max-width: 599px){.success-image{width:120px}}.large-icon{height:inherit;width:inherit;font-size:13rem}button:disabled{pointer-events:none;opacity:.5}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.MatLegacyDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatLegacyDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i10.MatLegacyError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i10.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLegacyHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i11.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i12.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i13.MatLegacyCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "pipe", type: i6.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] }); }
169
- }
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentRatingV2DialogComponent, decorators: [{
171
- type: Component,
172
- args: [{ selector: 'ws-widget-content-rating-v2-dialog', template: "<ng-container *ngIf=\"!showSuccessScreen\">\r\n <section class=\"flex align-center justify-between mb-5\">\r\n <div class=\"flex flex-col gap-1\">\r\n <h2 class=\"mat-headline margin-remove-bottom ws-mat-black-text\">{{ 'ratingdialog.rateReview' | translate }}</h2>\r\n <div class=\"mat-body-2 ws-mat-black60-text\">{{ 'ratingdialog.yourReviewFeedbackValuable' | translate }}</div>\r\n </div>\r\n <button mat-icon-button aria-label=\"close dialog\" mat-dialog-close>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </section>\r\n\r\n <form [formGroup]=\"feedbackForm\" >\r\n <section class=\"mb-5\">\r\n <h3 class=\"mat-h3 margin-bottom-xs required\" >{{ 'ratingdialog.rateThis' | translate}} {{ content?.primaryCategory | lowercase }}</h3>\r\n <div class=\"\" (click)=\"$event.stopPropagation();\">\r\n <ng-container *ngFor=\"let start of [1, 2, 3, 4, 5]; let i = index\">\r\n <button i18n-aria-label aria-label=\"Rating\" aria-labelledby=\"rate-heading\"\r\n name=\"user-content-rating-star-{{i+1}}\" [disabled]=\"isRequesting || isDisabled\"\r\n class=\"rating-button mr-2\" mat-icon-button (click)=\"addRating(i); $event.stopPropagation();\"\r\n color=\"primary\">\r\n <mat-icon class=\"rating-icon ws-mat-black16-text\" [ngClass]=\"{'ws-mat-orange-text':(userRating || -1) > i}\">\r\n star\r\n </mat-icon>\r\n </button>\r\n </ng-container>\r\n </div>\r\n </section>\r\n\r\n <section class=\"w-full mb-5\" *ngIf=\"!formDisabled\">\r\n <h3 class=\"mat-h3 margin-bottom-xs\" >{{ 'ratingdialog.giveReview' | translate }}</h3>\r\n <div class=\"mat-body-2\">\r\n <mat-form-field appearance=\"outline\" class=\"textarea-container\">\r\n <textarea id=\"review\" matInput [cdkTextareaAutosize] [cdkAutosizeMaxRows]=\"10\"\r\n [cdkAutosizeMinRows]=\"3\" maxlength=\"200\" formControlName=\"review\"\r\n placeholder=\"{{ 'ratingdialog.addReview' | translate}} {{content?.primaryCategory | lowercase}} (optional)\" i18n-placeholder #review i18n-aria-label aria-label=\"Review textarea input\" class=\"mat-body-2\"></textarea>\r\n <mat-hint align=\"end\">{{ review.value.length }} / 200 {{ 'ratingdialog.characters' | translate}}</mat-hint>\r\n <mat-error [hidden]=\"false\" i18n=\"review error | Explains review is required\"\r\n *ngIf=\"feedbackForm?.controls['review'].errors?.required\" i18n-aria-label\r\n aria-label=\"review error | Explains review is required\">\r\n {{ 'ratingdialog.addReview' | translate }} {{ content?.primaryCategory | lowercase }} {{ 'ratingdialog.optional' | translate }}\r\n </mat-error>\r\n <mat-error *ngIf=\"feedbackForm?.controls['review'].errors?.maxlength\" i18n-aria-label\r\n aria-label=\"review error | You have exceeded 200 characters\">\r\n {{ 'ratingdialog.exceededCharacters' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </section>\r\n\r\n <section class=\"w-full mb-5\" *ngIf=\"!formDisabled\">\r\n <mat-checkbox [color]=\"primary\" class=\"profane-radio-button mat-body-2\" formControlName=\"recommend\" >{{'ratingdialog.recommendCourse' | translate}}</mat-checkbox>\r\n </section>\r\n\r\n <mat-dialog-actions class=\"custom margin-remove-bottom no-padding\" align=\"end\">\r\n <ng-container *ngIf=\"!isEditMode\">\r\n <button mat-stroked-button type=\"submit\" class=\"text-white ws-mat-primary-background flex-auto-display\"\r\n [disabled]=\"feedbackForm?.invalid || formDisabled\" (click)=\"submitRating(feedbackForm)\">\r\n <span class=\"text-white\" >{{ 'ratingdialog.submit' | translate }}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngIf=\"isEditMode\">\r\n <button mat-stroked-button type=\"submit\" class=\"text-white ws-mat-primary-background flex-auto-display\"\r\n [disabled]=\"feedbackForm?.invalid || !isEdited || formDisabled\" (click)=\"submitRating(feedbackForm)\">\r\n <span class=\"text-white\" >{{ 'ratingdialog.update' | translate }}</span>\r\n </button>\r\n </ng-container>\r\n </mat-dialog-actions>\r\n </form>\r\n</ng-container>\r\n\r\n<div *ngIf=\"showSuccessScreen\" class=\"flex-col align-center justify-center\">\r\n <div class=\"text-right\">\r\n <button mat-icon-button aria-label=\"close dialog\" (click)=\"closeDialog(true)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"flex flex-wrap gap-8 items-center justify-center success-msg-container\">\r\n <div>\r\n <img src=\"fusion-assets/images/rating.svg\" class=\"success-image\" alt=\"rating success image\" />\r\n </div>\r\n <div class=\"flex-col text-center sm:text-left\">\r\n <div class=\"flex align-center justify-between\">\r\n <h2 class=\"mat-headline margin-bottom-xxs ws-mat-black-text\">{{ 'ratingdialog.thankYouForFeedback' | translate }}</h2>\r\n </div>\r\n <div class=\"section-content mat-body-1\"> {{ 'ratingdialog.youCanUpdateYourFeedback' | translate }} </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".rating-icon{transform:scale(1.2)}.rating-button{margin-right:10px;line-height:20px;height:24px;width:24px}::ng-deep .textarea-container{width:100%}::ng-deep .textarea-container .mat-form-field-wrapper{margin:0}::ng-deep .textarea-container .mat-form-field-infix{padding:8px 0;border-top:0px}::ng-deep .textarea-container .mat-form-field-infix textarea{min-height:52px!important;padding:8px 0}.orange{color:#f69953;font-size:24px}.no-padding{padding:0!important}.custom.mat-dialog-actions{min-height:auto}.success-msg-container{min-height:331px}@media only screen and (max-width: 599px){.success-msg-container{min-height:auto}}@media only screen and (max-width: 599px){.success-image{width:120px}}.large-icon{height:inherit;width:inherit;font-size:13rem}button:disabled{pointer-events:none;opacity:.5}\n"] }]
173
- }], ctorParameters: function () { return [{ type: i1.MatLegacyDialogRef }, { type: undefined, decorators: [{
174
- type: Inject,
175
- args: [MAT_DIALOG_DATA]
176
- }] }, { type: i2.EventService }, { type: i3.RatingService }, { type: i2.LoggerService }, { type: i4.MatLegacySnackBar }, { type: i5.Router }]; }, propDecorators: { ccuserRating: [{
177
- type: Input
178
- }], navigatetoTOC: [{
179
- type: Input
180
- }], rateFromCompletionDialog: [{
181
- type: Input
182
- }], isEditMode: [{
183
- type: Input
184
- }], collectionId: [{
185
- type: Input
186
- }] } });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1yYXRpbmctdjItZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbnRlbnQtcmF0aW5nLXYyLWRpYWxvZy9jb250ZW50LXJhdGluZy12Mi1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC1yYXRpbmctdjItZGlhbG9nL2NvbnRlbnQtcmF0aW5nLXYyLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ2pGLE9BQU8sRUFBZ0IsUUFBUSxFQUE0QixNQUFNLHNCQUFzQixDQUFBO0FBRXZGLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUc5QixPQUFPLEVBQXNDLHNCQUFzQixJQUFJLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0FBUy9ILE1BQU0sT0FBTyw4QkFBOEI7SUFjekMsWUFDUyxTQUF1RCxFQUM5QixJQUFTLEVBQ2pDLE1BQW9CLEVBQ3BCLFNBQXdCLEVBQ3hCLFNBQXdCLEVBQ3hCLFFBQXFCLEVBQ3JCLE1BQWM7UUFOZixjQUFTLEdBQVQsU0FBUyxDQUE4QztRQUM5QixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLFdB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T0FBTyxDQUFDLFVBQVUsQ0FBQTtZQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUE7U0FDcEQ7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQzFCO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxVQUFrQixFQUFFLFdBQW1CLElBQUk7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNsQyxRQUFRO1NBQ1QsQ0FBQyxDQUFBO0lBQ0osQ0FBQzsrR0F4S1UsOEJBQThCLG9EQWdCL0IsZUFBZTttR0FoQmQsOEJBQThCLGtRQ2pCM0Msa3NMQXVGTTs7NEZEdEVPLDhCQUE4QjtrQkFOMUMsU0FBUzsrQkFDRSxvQ0FBb0M7OzBCQXFCM0MsTUFBTTsyQkFBQyxlQUFlO29MQWZoQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXHJcbmltcG9ydCB7IEV2ZW50U2VydmljZSwgV3NFdmVudHMsIExvZ2dlclNlcnZpY2UsIE5zQ29udGVudCB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xyXG5pbXBvcnQgeyBSYXRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX3NlcnZpY2VzL3JhdGluZy5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgTnNBcHBSYXRpbmcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcmF0aW5nLm1vZGVsJ1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInXHJcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZ1JlZiBhcyBNYXREaWFsb2dSZWYsIE1BVF9MRUdBQ1lfRElBTE9HX0RBVEEgYXMgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZydcclxuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJ1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd3cy13aWRnZXQtY29udGVudC1yYXRpbmctdjItZGlhbG9nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC1yYXRpbmctdjItZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb250ZW50LXJhdGluZy12Mi1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBDb250ZW50UmF0aW5nVjJEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGNjdXNlclJhdGluZzogYW55XHJcbiAgQElucHV0KCkgbmF2aWdhdGV0b1RPQzogYW55XHJcbiAgQElucHV0KCkgcmF0ZUZyb21Db21wbGV0aW9uRGlhbG9nOiBhbnlcclxuICBASW5wdXQoKSAgaXNFZGl0TW9kZSA9IGZhbHNlXHJcbiAgQElucHV0KCkgIGNvbGxlY3Rpb25JZCA9ICcnXHJcbiAgY29udGVudDogTnNDb250ZW50LklDb250ZW50IHwgbnVsbCA9IG51bGxcclxuICB1c2VyUmF0aW5nID0gMFxyXG4gIGZlZWRiYWNrRm9ybTogVW50eXBlZEZvcm1Hcm91cFxyXG4gIHNob3dTdWNjZXNzU2NyZWVuID0gZmFsc2VcclxuICBmb3JtRGlzYWJsZWQgPSB0cnVlXHJcbiAgaXNFZGl0ZWQgPSBmYWxzZVxyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPENvbnRlbnRSYXRpbmdWMkRpYWxvZ0NvbXBvbmVudD4sXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcclxuICAgIHByaXZhdGUgZXZlbnRzOiBFdmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJhdGluZ1N2YzogUmF0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9nZ2VyU3ZjOiBMb2dnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICkge1xyXG4gICAgdGhpcy5mZWVkYmFja0Zvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XHJcbiAgICAgIHJldmlldzogbmV3IFVudHlwZWRGb3JtQ29udHJvbChudWxsLCBbVmFsaWRhdG9ycy5taW5MZW5ndGgoMSksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwMDApXSksXHJcbiAgICAgIHJhdGluZzogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgwLCBbXSksXHJcbiAgICAgIHJlY29tbWVuZDogbmV3IFVudHlwZWRGb3JtQ29udHJvbChmYWxzZSksXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBpZiAodGhpcy5jY3VzZXJSYXRpbmcgfHwgdGhpcy5uYXZpZ2F0ZXRvVE9DIHx8ICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmNvdXJzZU5hbWUpKSB7XHJcbiAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICBpZGVudGlmaWVyOiB0aGlzLmRhdGEuaWRlbnRpZmllcixcclxuICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6ICB0aGlzLmRhdGEucHJpbWFyeUNhdGVnb3J5LFxyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRhdGFvYmogPSB7XHJcbiAgICAgICAgY29udGVudDogb2JqLFxyXG4gICAgICAgIHVzZXJJZDogdGhpcy5kYXRhLnVzZXJJZCxcclxuICAgICAgICB1c2VyUmF0aW5nOiB0aGlzLmNjdXNlclJhdGluZyxcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhdGEgPSBkYXRhb2JqXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS51c2VyUmF0aW5nKSB7XHJcbiAgICAgIHRoaXMuZmVlZGJhY2tGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIHJldmlldzogdGhpcy5kYXRhLnVzZXJSYXRpbmcucmV2aWV3LFxyXG4gICAgICAgIHJhdGluZzogdGhpcy5kYXRhLnVzZXJSYXRpbmcucmF0aW5nLFxyXG4gICAgICAgIHJlY29tbWVuZDogdGhpcy5kYXRhLnVzZXJSYXRpbmcucmVjb21tZW5kZWQgPT09ICd5ZXMnID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICB9KVxyXG4gICAgICB0aGlzLmZlZWRiYWNrRm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcclxuICAgICAgdGhpcy51c2VyUmF0aW5nID0gdGhpcy5kYXRhLnVzZXJSYXRpbmcucmF0aW5nXHJcbiAgICAgIGlmICh0aGlzLnVzZXJSYXRpbmcpIHtcclxuICAgICAgICB0aGlzLmZvcm1EaXNhYmxlZCA9IGZhbHNlXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLmNvbnRlbnQpIHtcclxuICAgICAgdGhpcy5jb250ZW50ID0gdGhpcy5kYXRhLmNvbnRlbnRcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZlZWRiYWNrRm9ybS52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKGFzeW5jIGZvcm1WYWx1ZSA9PiB7XHJcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdmb3JtVmFsdWUucmV2aWV3IDo6ICcsIGZvcm1WYWx1ZS5yZXZpZXcpXHJcbiAgICAgICAgICBpZiAodGhpcy5kYXRhLnVzZXJSYXRpbmcpIHtcclxuICAgICAgICAgICAgaWYgKGZvcm1WYWx1ZS5yZXZpZXcgIT09IHRoaXMuZGF0YS51c2VyUmF0aW5nLnJldmlld1xyXG4gICAgICAgICAgICAgIHx8IGZvcm1WYWx1ZS5yYXRpbmcgIT09IHRoaXMuZGF0YS51c2VyUmF0aW5nLnJhdGluZ1xyXG4gICAgICAgICAgICAgIHx8IGZvcm1WYWx1ZS5yZWNvbW1lbmQgIT09IHRoaXMuZGF0YS51c2VyUmF0aW5nLnJlY29tbWVuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNFZGl0ZWQgPSB0cnVlXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0VkaXRlZCA9IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KSxcclxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSlcclxuICAgICAgKS5zdWJzY3JpYmUoKVxyXG4gIH1cclxuXHJcbiAgc3VibWl0UmF0aW5nKGZlZWRiYWNrRm9ybTogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuZm9ybURpc2FibGVkKSB7XHJcbiAgICAgIGNvbnN0IHJlcTogTnNBcHBSYXRpbmcuSVJhdGluZyA9IHtcclxuICAgICAgICBhY3Rpdml0eUlkOiB0aGlzLmRhdGEuY29udGVudC5pZGVudGlmaWVyIHx8ICcnLFxyXG4gICAgICAgIHVzZXJJZDogdGhpcy5kYXRhLnVzZXJJZCB8fCAnJyxcclxuICAgICAgICBhY3Rpdml0eVR5cGU6IHRoaXMuZGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSB8fCAnJyxcclxuICAgICAgICByYXRpbmc6IHRoaXMudXNlclJhdGluZyB8fCAwLFxyXG4gICAgICAgIC4uLihmZWVkYmFja0Zvcm0udmFsdWUucmV2aWV3ICYmIHsgcmV2aWV3OiBmZWVkYmFja0Zvcm0udmFsdWUucmV2aWV3IH0pLFxyXG4gICAgICAgIHJlY29tbWVuZGVkOiBmZWVkYmFja0Zvcm0udmFsdWUucmVjb21tZW5kID8gJ3llcycgOiAnbm8nLFxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnJhdGluZ1N2Yy5hZGRPclVwZGF0ZVJhdGluZyhyZXEpLnN1YnNjcmliZShcclxuICAgICAgICAoX3JlczogYW55KSA9PiAge1xyXG4gICAgICAgICAgdGhpcy5yYWlzZUZlZWRiYWNrVGVsZW1ldHJ5KGZlZWRiYWNrRm9ybSlcclxuICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3NTY3JlZW4gPSB0cnVlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9nZ2VyU3ZjLmVycm9yKCdBREQgT1IgVVBEQVRFIFVTRVIgUkFUSU5HIEVSUk9SID4nLCBlcnIpXHJcbiAgICAgICAgICBpZiAoZXJyLmVycm9yICYmIGVyci5lcnJvci5wYXJhbXMgJiYgZXJyLmVycm9yLnBhcmFtcy5lcnJtc2cpIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuU25hY2tiYXIoZXJyLmVycm9yLnBhcmFtcy5lcnJtc2cpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5TbmFja2JhcignU29tZXRoaW5nIHdlbnQgd3JvbmcsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIhJylcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmFpc2VGZWVkYmFja1RlbGVtZXRyeShmZWVkYmFja0Zvcm06IGFueSkge1xyXG4gICAgdGhpcy5ldmVudHMucmFpc2VGZWVkYmFja1RlbGVtZXRyeShcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6IHRoaXMuZGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSxcclxuICAgICAgICBzdWJUeXBlOiAncmF0aW5nJyxcclxuICAgICAgICBpZDogdGhpcy5kYXRhLmNvbnRlbnQuaWRlbnRpZmllciB8fCAnJyxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiB0aGlzLmRhdGEuY29udGVudC5pZGVudGlmaWVyIHx8ICcnLFxyXG4gICAgICAgIHJhdGluZzogdGhpcy51c2VyUmF0aW5nLFxyXG4gICAgICAgIHZlcnNpb246IGAke3RoaXMuZGF0YS5jb250ZW50LnZlcnNpb259JHsnJ31gLFxyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgY29tbWVudHR4dDogZmVlZGJhY2tGb3JtLnZhbHVlLnJldmlldyB8fCAnJyxcclxuICAgICAgfVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgYWRkUmF0aW5nKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMudXNlclJhdGluZyA9IGluZGV4ICsgMVxyXG4gICAgaWYgKHRoaXMudXNlclJhdGluZykge1xyXG4gICAgICB0aGlzLmZvcm1EaXNhYmxlZCA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICB0aGlzLmV2ZW50cy5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KFxyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogJ3JhdGluZycsXHJcbiAgICAgICAgc3ViVHlwZTogJ2NvbnRlbnQnLFxyXG4gICAgICAgIGlkOiB0aGlzLmRhdGEuY29udGVudC5pZGVudGlmaWVyIHx8ICcnLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgaWQ6IHRoaXMuZGF0YS5jb250ZW50LmlkZW50aWZpZXIgfHwgJycsXHJcbiAgICAgICAgcmF0aW5nOiB0aGlzLnVzZXJSYXRpbmcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgcGFnZUlkRXh0OiAncmF0aW5nLXBvcHVwJyxcclxuICAgICAgbW9kdWxlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5bW9kdWxlcy5GRUVEQkFDSyxcclxuICAgIH0pXHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgdGhpcy5mZWVkYmFja0Zvcm0uZ2V0KCdyYXRpbmcnKSEuc2V0VmFsdWUodGhpcy51c2VyUmF0aW5nKVxyXG4gIH1cclxuXHJcbiAgY2xvc2VEaWFsb2codmFsOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5uYXZpZ2F0ZXRvVE9DKSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHZhbClcclxuICAgICAgLy8gSW4gY2FzZSBvZiBtdWx0aWxpbmd1YWwgY291cnNlLCByZWRpcmVjdGlvbiBzaG91bGQgaGFwcGVuIHRvIGJhc2UgY29sbGVjdGlvbklEXHJcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5jb2xsZWN0aW9uSWQgfHwgdGhpcy5kYXRhLmNvbnRlbnQuaWRlbnRpZmllclxyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGBhcHAvdG9jLyR7aWR9L292ZXJ2aWV3YClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHZhbClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgb3BlblNuYWNrYmFyKHByaW1hcnlNc2c6IHN0cmluZywgZHVyYXRpb246IG51bWJlciA9IDUwMDApIHtcclxuICAgIHRoaXMuc25hY2tCYXIub3BlbihwcmltYXJ5TXNnLCAnWCcsIHtcclxuICAgICAgZHVyYXRpb24sXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzaG93U3VjY2Vzc1NjcmVlblwiPlxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJmbGV4IGFsaWduLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCI+XHJcbiAgICAgICAgICAgIDxoMiBjbGFzcz1cIm1hdC1oZWFkbGluZSBtYXJnaW4tcmVtb3ZlLWJvdHRvbSB3cy1tYXQtYmxhY2stdGV4dFwiPnt7ICdyYXRpbmdkaWFsb2cucmF0ZVJldmlldycgfCB0cmFuc2xhdGUgfX08L2gyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWJvZHktMiB3cy1tYXQtYmxhY2s2MC10ZXh0XCI+e3sgJ3JhdGluZ2RpYWxvZy55b3VyUmV2aWV3RmVlZGJhY2tWYWx1YWJsZScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiY2xvc2UgZGlhbG9nXCIgbWF0LWRpYWxvZy1jbG9zZT5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZlZWRiYWNrRm9ybVwiID5cclxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cIm1iLTVcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwibWF0LWgzIG1hcmdpbi1ib3R0b20teHMgcmVxdWlyZWRcIiA+e3sgJ3JhdGluZ2RpYWxvZy5yYXRlVGhpcycgfCB0cmFuc2xhdGV9fSB7eyBjb250ZW50Py5wcmltYXJ5Q2F0ZWdvcnkgfCBsb3dlcmNhc2UgfX08L2gzPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0YXJ0IG9mIFsxLCAyLCAzLCA0LCA1XTsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gaTE4bi1hcmlhLWxhYmVsIGFyaWEtbGFiZWw9XCJSYXRpbmdcIiBhcmlhLWxhYmVsbGVkYnk9XCJyYXRlLWhlYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidXNlci1jb250ZW50LXJhdGluZy1zdGFyLXt7aSsxfX1cIiBbZGlzYWJsZWRdPVwiaXNSZXF1ZXN0aW5nIHx8IGlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJhdGluZy1idXR0b24gbXItMlwiIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYWRkUmF0aW5nKGkpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cInJhdGluZy1pY29uIHdzLW1hdC1ibGFjazE2LXRleHRcIiBbbmdDbGFzc109XCJ7J3dzLW1hdC1vcmFuZ2UtdGV4dCc6KHVzZXJSYXRpbmcgfHwgLTEpID4gaX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwidy1mdWxsIG1iLTVcIiAqbmdJZj1cIiFmb3JtRGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwibWF0LWgzIG1hcmdpbi1ib3R0b20teHNcIiA+e3sgJ3JhdGluZ2RpYWxvZy5naXZlUmV2aWV3JyB8IHRyYW5zbGF0ZSB9fTwvaDM+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtYm9keS0yXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInRleHRhcmVhLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cInJldmlld1wiIG1hdElucHV0IFtjZGtUZXh0YXJlYUF1dG9zaXplXSBbY2RrQXV0b3NpemVNYXhSb3dzXT1cIjEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0F1dG9zaXplTWluUm93c109XCIzXCIgbWF4bGVuZ3RoPVwiMjAwXCIgZm9ybUNvbnRyb2xOYW1lPVwicmV2aWV3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAncmF0aW5nZGlhbG9nLmFkZFJldmlldycgfCB0cmFuc2xhdGV9fSB7e2NvbnRlbnQ/LnByaW1hcnlDYXRlZ29yeSB8IGxvd2VyY2FzZX19IChvcHRpb25hbClcIiBpMThuLXBsYWNlaG9sZGVyICNyZXZpZXcgaTE4bi1hcmlhLWxhYmVsIGFyaWEtbGFiZWw9XCJSZXZpZXcgdGV4dGFyZWEgaW5wdXRcIiBjbGFzcz1cIm1hdC1ib2R5LTJcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaGludCBhbGlnbj1cImVuZFwiPnt7IHJldmlldy52YWx1ZS5sZW5ndGggfX0gLyAyMDAge3sgJ3JhdGluZ2RpYWxvZy5jaGFyYWN0ZXJzJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGludD5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIFtoaWRkZW5dPVwiZmFsc2VcIiBpMThuPVwicmV2aWV3IGVycm9yIHwgRXhwbGFpbnMgcmV2aWV3IGlzIHJlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmZWVkYmFja0Zvcm0/LmNvbnRyb2xzWydyZXZpZXcnXS5lcnJvcnM/LnJlcXVpcmVkXCIgaTE4bi1hcmlhLWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJyZXZpZXcgZXJyb3IgfCBFeHBsYWlucyByZXZpZXcgaXMgcmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3JhdGluZ2RpYWxvZy5hZGRSZXZpZXcnIHwgdHJhbnNsYXRlIH19IHt7IGNvbnRlbnQ/LnByaW1hcnlDYXRlZ29yeSB8IGxvd2VyY2FzZSB9fSB7eyAncmF0aW5nZGlhbG9nLm9wdGlvbmFsJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmZWVkYmFja0Zvcm0/LmNvbnRyb2xzWydyZXZpZXcnXS5lcnJvcnM/Lm1heGxlbmd0aFwiIGkxOG4tYXJpYS1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwicmV2aWV3IGVycm9yIHwgWW91IGhhdmUgZXhjZWVkZWQgMjAwIGNoYXJhY3RlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3JhdGluZ2RpYWxvZy5leGNlZWRlZENoYXJhY3RlcnMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwidy1mdWxsIG1iLTVcIiAqbmdJZj1cIiFmb3JtRGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveCBbY29sb3JdPVwicHJpbWFyeVwiIGNsYXNzPVwicHJvZmFuZS1yYWRpby1idXR0b24gbWF0LWJvZHktMlwiIGZvcm1Db250cm9sTmFtZT1cInJlY29tbWVuZFwiID57eydyYXRpbmdkaWFsb2cucmVjb21tZW5kQ291cnNlJyB8IHRyYW5zbGF0ZX19PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG5cclxuICAgICAgICA8bWF0LWRpYWxvZy1hY3Rpb25zIGNsYXNzPVwiY3VzdG9tIG1hcmdpbi1yZW1vdmUtYm90dG9tIG5vLXBhZGRpbmdcIiBhbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWRpdE1vZGVcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInRleHQtd2hpdGUgd3MtbWF0LXByaW1hcnktYmFja2dyb3VuZCBmbGV4LWF1dG8tZGlzcGxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZlZWRiYWNrRm9ybT8uaW52YWxpZCB8fCBmb3JtRGlzYWJsZWRcIiAoY2xpY2spPVwic3VibWl0UmF0aW5nKGZlZWRiYWNrRm9ybSlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtd2hpdGVcIiA+e3sgJ3JhdGluZ2RpYWxvZy5zdWJtaXQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwidGV4dC13aGl0ZSB3cy1tYXQtcHJpbWFyeS1iYWNrZ3JvdW5kIGZsZXgtYXV0by1kaXNwbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmVlZGJhY2tGb3JtPy5pbnZhbGlkIHx8ICAhaXNFZGl0ZWQgfHwgZm9ybURpc2FibGVkXCIgKGNsaWNrKT1cInN1Ym1pdFJhdGluZyhmZWVkYmFja0Zvcm0pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXdoaXRlXCIgPnt7ICdyYXRpbmdkaWFsb2cudXBkYXRlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L21hdC1kaWFsb2ctYWN0aW9ucz5cclxuICAgIDwvZm9ybT5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwic2hvd1N1Y2Nlc3NTY3JlZW5cIiBjbGFzcz1cImZsZXgtY29sIGFsaWduLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRleHQtcmlnaHRcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiY2xvc2UgZGlhbG9nXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKHRydWUpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtOCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgc3VjY2Vzcy1tc2ctY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGltZyBzcmM9XCJmdXNpb24tYXNzZXRzL2ltYWdlcy9yYXRpbmcuc3ZnXCIgY2xhc3M9XCJzdWNjZXNzLWltYWdlXCIgYWx0PVwicmF0aW5nIHN1Y2Nlc3MgaW1hZ2VcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbCB0ZXh0LWNlbnRlciBzbTp0ZXh0LWxlZnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24tY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwibWF0LWhlYWRsaW5lIG1hcmdpbi1ib3R0b20teHhzIHdzLW1hdC1ibGFjay10ZXh0XCI+e3sgJ3JhdGluZ2RpYWxvZy50aGFua1lvdUZvckZlZWRiYWNrJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jb250ZW50IG1hdC1ib2R5LTFcIj4ge3sgJ3JhdGluZ2RpYWxvZy55b3VDYW5VcGRhdGVZb3VyRmVlZGJhY2snIHwgdHJhbnNsYXRlIH19IDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
1
+ import { Component, Inject, Input } from '@angular/core';
2
+ import { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms';
3
+ import { WsEvents } from '@sunbird-cb/utils-v2';
4
+ import { switchMap, takeUntil } from 'rxjs/operators';
5
+ import { Subject } from 'rxjs';
6
+ import { MAT_LEGACY_DIALOG_DATA as MAT_DIALOG_DATA } from '@angular/material/legacy-dialog';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/material/legacy-dialog";
9
+ import * as i2 from "@sunbird-cb/utils-v2";
10
+ import * as i3 from "../../../_services/rating.service";
11
+ import * as i4 from "@angular/material/legacy-snack-bar";
12
+ import * as i5 from "@angular/router";
13
+ import * as i6 from "@angular/common";
14
+ import * as i7 from "@angular/forms";
15
+ import * as i8 from "@angular/material/legacy-button";
16
+ import * as i9 from "@angular/material/icon";
17
+ import * as i10 from "@angular/material/legacy-form-field";
18
+ import * as i11 from "@angular/cdk/text-field";
19
+ import * as i12 from "@angular/material/legacy-input";
20
+ import * as i13 from "@angular/material/legacy-checkbox";
21
+ import * as i14 from "@ngx-translate/core";
22
+ export class ContentRatingV2DialogComponent {
23
+ constructor(dialogRef, data, events, ratingSvc, loggerSvc, snackBar, router) {
24
+ this.dialogRef = dialogRef;
25
+ this.data = data;
26
+ this.events = events;
27
+ this.ratingSvc = ratingSvc;
28
+ this.loggerSvc = loggerSvc;
29
+ this.snackBar = snackBar;
30
+ this.router = router;
31
+ this.isEditMode = false;
32
+ this.collectionId = '';
33
+ this.content = null;
34
+ this.userRating = 0;
35
+ this.showSuccessScreen = false;
36
+ this.formDisabled = true;
37
+ this.isEdited = false;
38
+ this.unsubscribe = new Subject();
39
+ this.feedbackForm = new UntypedFormGroup({
40
+ review: new UntypedFormControl(null, [Validators.minLength(1), Validators.maxLength(2000)]),
41
+ rating: new UntypedFormControl(0, []),
42
+ recommend: new UntypedFormControl(false),
43
+ });
44
+ }
45
+ ngOnInit() {
46
+ if (this.ccuserRating || this.navigatetoTOC || (this.data && this.data.courseName)) {
47
+ const obj = {
48
+ identifier: this.data.identifier,
49
+ primaryCategory: this.data.primaryCategory,
50
+ };
51
+ const dataobj = {
52
+ content: obj,
53
+ userId: this.data.userId,
54
+ userRating: this.ccuserRating,
55
+ };
56
+ this.data = dataobj;
57
+ }
58
+ if (this.data.userRating) {
59
+ this.feedbackForm.patchValue({
60
+ review: this.data.userRating.review,
61
+ rating: this.data.userRating.rating,
62
+ recommend: this.data.userRating.recommended === 'yes' ? true : false,
63
+ });
64
+ this.feedbackForm.updateValueAndValidity();
65
+ this.userRating = this.data.userRating.rating;
66
+ if (this.userRating) {
67
+ this.formDisabled = false;
68
+ }
69
+ }
70
+ if (this.data.content) {
71
+ this.content = this.data.content;
72
+ }
73
+ this.feedbackForm.valueChanges
74
+ .pipe(switchMap(async (formValue) => {
75
+ // tslint:disable-next-line: no-console
76
+ // console.log('formValue.review :: ', formValue.review)
77
+ if (this.data.userRating) {
78
+ if (formValue.review !== this.data.userRating.review
79
+ || formValue.rating !== this.data.userRating.rating
80
+ || formValue.recommend !== this.data.userRating.recommend) {
81
+ this.isEdited = true;
82
+ }
83
+ else {
84
+ this.isEdited = false;
85
+ }
86
+ }
87
+ }), takeUntil(this.unsubscribe)).subscribe();
88
+ }
89
+ submitRating(feedbackForm) {
90
+ if (!this.formDisabled) {
91
+ const req = {
92
+ activityId: this.data.content.identifier || '',
93
+ userId: this.data.userId || '',
94
+ activityType: this.data.content.primaryCategory || '',
95
+ rating: this.userRating || 0,
96
+ ...(feedbackForm.value.review && { review: feedbackForm.value.review }),
97
+ recommended: feedbackForm.value.recommend ? 'yes' : 'no',
98
+ };
99
+ this.ratingSvc.addOrUpdateRating(req).subscribe((_res) => {
100
+ this.raiseFeedbackTelemetry(feedbackForm);
101
+ if (this.isEditMode) {
102
+ this.dialogRef.close(true);
103
+ }
104
+ else {
105
+ this.showSuccessScreen = true;
106
+ }
107
+ }, (err) => {
108
+ this.loggerSvc.error('ADD OR UPDATE USER RATING ERROR >', err);
109
+ if (err.error && err.error.params && err.error.params.errmsg) {
110
+ this.openSnackbar(err.error.params.errmsg);
111
+ }
112
+ else {
113
+ this.openSnackbar('Something went wrong, please try again later!');
114
+ }
115
+ // this.dialogRef.close(false)
116
+ });
117
+ }
118
+ }
119
+ raiseFeedbackTelemetry(feedbackForm) {
120
+ this.events.raiseFeedbackTelemetry({
121
+ type: this.data.content.primaryCategory,
122
+ subType: 'rating',
123
+ id: this.data.content.identifier || '',
124
+ }, {
125
+ id: this.data.content.identifier || '',
126
+ rating: this.userRating,
127
+ version: `${this.data.content.version}${''}`,
128
+ // tslint:disable-next-line: no-non-null-assertion
129
+ commenttxt: feedbackForm.value.review || '',
130
+ });
131
+ }
132
+ addRating(index) {
133
+ this.userRating = index + 1;
134
+ if (this.userRating) {
135
+ this.formDisabled = false;
136
+ }
137
+ this.events.raiseInteractTelemetry({
138
+ type: 'rating',
139
+ subType: 'content',
140
+ id: this.data.content.identifier || '',
141
+ }, {
142
+ id: this.data.content.identifier || '',
143
+ rating: this.userRating,
144
+ }, {
145
+ pageIdExt: 'rating-popup',
146
+ module: WsEvents.EnumTelemetrymodules.FEEDBACK,
147
+ });
148
+ // tslint:disable-next-line: no-non-null-assertion
149
+ this.feedbackForm.get('rating').setValue(this.userRating);
150
+ }
151
+ closeDialog(val) {
152
+ if (this.navigatetoTOC) {
153
+ this.dialogRef.close(val);
154
+ // In case of multilingual course, redirection should happen to base collectionID
155
+ const id = this.collectionId || this.data.content.identifier;
156
+ this.router.navigateByUrl(`app/toc/${id}/overview`);
157
+ }
158
+ else {
159
+ this.dialogRef.close(val);
160
+ }
161
+ }
162
+ openSnackbar(primaryMsg, duration = 5000) {
163
+ this.snackBar.open(primaryMsg, 'X', {
164
+ duration,
165
+ });
166
+ }
167
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentRatingV2DialogComponent, deps: [{ token: i1.MatLegacyDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.EventService }, { token: i3.RatingService }, { token: i2.LoggerService }, { token: i4.MatLegacySnackBar }, { token: i5.Router }], target: i0.ɵɵFactoryTarget.Component }); }
168
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContentRatingV2DialogComponent, selector: "ws-widget-content-rating-v2-dialog", inputs: { ccuserRating: "ccuserRating", navigatetoTOC: "navigatetoTOC", rateFromCompletionDialog: "rateFromCompletionDialog", isEditMode: "isEditMode", collectionId: "collectionId" }, ngImport: i0, template: "<ng-container *ngIf=\"!showSuccessScreen\">\n <section class=\"flex align-center justify-between mb-5\">\n <div class=\"flex flex-col gap-1\">\n <h2 class=\"mat-headline margin-remove-bottom ws-mat-black-text\">{{ 'ratingdialog.rateReview' | translate }}</h2>\n <div class=\"mat-body-2 ws-mat-black60-text\">{{ 'ratingdialog.yourReviewFeedbackValuable' | translate }}</div>\n </div>\n <button mat-icon-button aria-label=\"close dialog\" mat-dialog-close>\n <mat-icon>close</mat-icon>\n </button>\n </section>\n\n <form [formGroup]=\"feedbackForm\" >\n <section class=\"mb-5\">\n <h3 class=\"mat-h3 margin-bottom-xs required\" >{{ 'ratingdialog.rateThis' | translate}} {{ content?.primaryCategory | lowercase }}</h3>\n <div class=\"\" (click)=\"$event.stopPropagation();\">\n <ng-container *ngFor=\"let start of [1, 2, 3, 4, 5]; let i = index\">\n <button i18n-aria-label aria-label=\"Rating\" aria-labelledby=\"rate-heading\"\n name=\"user-content-rating-star-{{i+1}}\" [disabled]=\"isRequesting || isDisabled\"\n class=\"rating-button mr-2\" mat-icon-button (click)=\"addRating(i); $event.stopPropagation();\"\n color=\"primary\">\n <mat-icon class=\"rating-icon ws-mat-black16-text\" [ngClass]=\"{'ws-mat-orange-text':(userRating || -1) > i}\">\n star\n </mat-icon>\n </button>\n </ng-container>\n </div>\n </section>\n\n <section class=\"w-full mb-5\" *ngIf=\"!formDisabled\">\n <h3 class=\"mat-h3 margin-bottom-xs\" >{{ 'ratingdialog.giveReview' | translate }}</h3>\n <div class=\"mat-body-2\">\n <mat-form-field appearance=\"outline\" class=\"textarea-container\">\n <textarea id=\"review\" matInput [cdkTextareaAutosize] [cdkAutosizeMaxRows]=\"10\"\n [cdkAutosizeMinRows]=\"3\" maxlength=\"200\" formControlName=\"review\"\n placeholder=\"{{ 'ratingdialog.addReview' | translate}} {{content?.primaryCategory | lowercase}} (optional)\" i18n-placeholder #review i18n-aria-label aria-label=\"Review textarea input\" class=\"mat-body-2\"></textarea>\n <mat-hint align=\"end\">{{ review.value.length }} / 200 {{ 'ratingdialog.characters' | translate}}</mat-hint>\n <mat-error [hidden]=\"false\" i18n=\"review error | Explains review is required\"\n *ngIf=\"feedbackForm?.controls['review'].errors?.required\" i18n-aria-label\n aria-label=\"review error | Explains review is required\">\n {{ 'ratingdialog.addReview' | translate }} {{ content?.primaryCategory | lowercase }} {{ 'ratingdialog.optional' | translate }}\n </mat-error>\n <mat-error *ngIf=\"feedbackForm?.controls['review'].errors?.maxlength\" i18n-aria-label\n aria-label=\"review error | You have exceeded 200 characters\">\n {{ 'ratingdialog.exceededCharacters' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n </section>\n\n <section class=\"w-full mb-5\" *ngIf=\"!formDisabled\">\n <mat-checkbox [color]=\"primary\" class=\"profane-radio-button mat-body-2\" formControlName=\"recommend\" >{{'ratingdialog.recommendCourse' | translate}}</mat-checkbox>\n </section>\n\n <mat-dialog-actions class=\"custom margin-remove-bottom no-padding\" align=\"end\">\n <ng-container *ngIf=\"!isEditMode\">\n <button mat-stroked-button type=\"submit\" class=\"text-white ws-mat-primary-background flex-auto-display\"\n [disabled]=\"feedbackForm?.invalid || formDisabled\" (click)=\"submitRating(feedbackForm)\">\n <span class=\"text-white\" >{{ 'ratingdialog.submit' | translate }}</span>\n </button>\n </ng-container>\n <ng-container *ngIf=\"isEditMode\">\n <button mat-stroked-button type=\"submit\" class=\"text-white ws-mat-primary-background flex-auto-display\"\n [disabled]=\"feedbackForm?.invalid || !isEdited || formDisabled\" (click)=\"submitRating(feedbackForm)\">\n <span class=\"text-white\" >{{ 'ratingdialog.update' | translate }}</span>\n </button>\n </ng-container>\n </mat-dialog-actions>\n </form>\n</ng-container>\n\n<div *ngIf=\"showSuccessScreen\" class=\"flex-col align-center justify-center\">\n <div class=\"text-right\">\n <button mat-icon-button aria-label=\"close dialog\" (click)=\"closeDialog(true)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <div class=\"flex flex-wrap gap-8 items-center justify-center success-msg-container\">\n <div>\n <img src=\"fusion-assets/images/rating.svg\" class=\"success-image\" alt=\"rating success image\" />\n </div>\n <div class=\"flex-col text-center sm:text-left\">\n <div class=\"flex align-center justify-between\">\n <h2 class=\"mat-headline margin-bottom-xxs ws-mat-black-text\">{{ 'ratingdialog.thankYouForFeedback' | translate }}</h2>\n </div>\n <div class=\"section-content mat-body-1\"> {{ 'ratingdialog.youCanUpdateYourFeedback' | translate }} </div>\n </div>\n </div>\n</div>", styles: [".rating-icon{transform:scale(1.2)}.rating-button{margin-right:10px;line-height:20px;height:24px;width:24px}::ng-deep .textarea-container{width:100%}::ng-deep .textarea-container .mat-form-field-wrapper{margin:0}::ng-deep .textarea-container .mat-form-field-infix{padding:8px 0;border-top:0px}::ng-deep .textarea-container .mat-form-field-infix textarea{min-height:52px!important;padding:8px 0}.orange{color:#f69953;font-size:24px}.no-padding{padding:0!important}.custom.mat-dialog-actions{min-height:auto}.success-msg-container{min-height:331px}@media only screen and (max-width: 599px){.success-msg-container{min-height:auto}}@media only screen and (max-width: 599px){.success-image{width:120px}}.large-icon{height:inherit;width:inherit;font-size:13rem}button:disabled{pointer-events:none;opacity:.5}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i8.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1.MatLegacyDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatLegacyDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i10.MatLegacyError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i10.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLegacyHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i11.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }, { kind: "directive", type: i12.MatLegacyInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", exportAs: ["matInput"] }, { kind: "component", type: i13.MatLegacyCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "pipe", type: i6.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] }); }
169
+ }
170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentRatingV2DialogComponent, decorators: [{
171
+ type: Component,
172
+ args: [{ selector: 'ws-widget-content-rating-v2-dialog', template: "<ng-container *ngIf=\"!showSuccessScreen\">\n <section class=\"flex align-center justify-between mb-5\">\n <div class=\"flex flex-col gap-1\">\n <h2 class=\"mat-headline margin-remove-bottom ws-mat-black-text\">{{ 'ratingdialog.rateReview' | translate }}</h2>\n <div class=\"mat-body-2 ws-mat-black60-text\">{{ 'ratingdialog.yourReviewFeedbackValuable' | translate }}</div>\n </div>\n <button mat-icon-button aria-label=\"close dialog\" mat-dialog-close>\n <mat-icon>close</mat-icon>\n </button>\n </section>\n\n <form [formGroup]=\"feedbackForm\" >\n <section class=\"mb-5\">\n <h3 class=\"mat-h3 margin-bottom-xs required\" >{{ 'ratingdialog.rateThis' | translate}} {{ content?.primaryCategory | lowercase }}</h3>\n <div class=\"\" (click)=\"$event.stopPropagation();\">\n <ng-container *ngFor=\"let start of [1, 2, 3, 4, 5]; let i = index\">\n <button i18n-aria-label aria-label=\"Rating\" aria-labelledby=\"rate-heading\"\n name=\"user-content-rating-star-{{i+1}}\" [disabled]=\"isRequesting || isDisabled\"\n class=\"rating-button mr-2\" mat-icon-button (click)=\"addRating(i); $event.stopPropagation();\"\n color=\"primary\">\n <mat-icon class=\"rating-icon ws-mat-black16-text\" [ngClass]=\"{'ws-mat-orange-text':(userRating || -1) > i}\">\n star\n </mat-icon>\n </button>\n </ng-container>\n </div>\n </section>\n\n <section class=\"w-full mb-5\" *ngIf=\"!formDisabled\">\n <h3 class=\"mat-h3 margin-bottom-xs\" >{{ 'ratingdialog.giveReview' | translate }}</h3>\n <div class=\"mat-body-2\">\n <mat-form-field appearance=\"outline\" class=\"textarea-container\">\n <textarea id=\"review\" matInput [cdkTextareaAutosize] [cdkAutosizeMaxRows]=\"10\"\n [cdkAutosizeMinRows]=\"3\" maxlength=\"200\" formControlName=\"review\"\n placeholder=\"{{ 'ratingdialog.addReview' | translate}} {{content?.primaryCategory | lowercase}} (optional)\" i18n-placeholder #review i18n-aria-label aria-label=\"Review textarea input\" class=\"mat-body-2\"></textarea>\n <mat-hint align=\"end\">{{ review.value.length }} / 200 {{ 'ratingdialog.characters' | translate}}</mat-hint>\n <mat-error [hidden]=\"false\" i18n=\"review error | Explains review is required\"\n *ngIf=\"feedbackForm?.controls['review'].errors?.required\" i18n-aria-label\n aria-label=\"review error | Explains review is required\">\n {{ 'ratingdialog.addReview' | translate }} {{ content?.primaryCategory | lowercase }} {{ 'ratingdialog.optional' | translate }}\n </mat-error>\n <mat-error *ngIf=\"feedbackForm?.controls['review'].errors?.maxlength\" i18n-aria-label\n aria-label=\"review error | You have exceeded 200 characters\">\n {{ 'ratingdialog.exceededCharacters' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n </section>\n\n <section class=\"w-full mb-5\" *ngIf=\"!formDisabled\">\n <mat-checkbox [color]=\"primary\" class=\"profane-radio-button mat-body-2\" formControlName=\"recommend\" >{{'ratingdialog.recommendCourse' | translate}}</mat-checkbox>\n </section>\n\n <mat-dialog-actions class=\"custom margin-remove-bottom no-padding\" align=\"end\">\n <ng-container *ngIf=\"!isEditMode\">\n <button mat-stroked-button type=\"submit\" class=\"text-white ws-mat-primary-background flex-auto-display\"\n [disabled]=\"feedbackForm?.invalid || formDisabled\" (click)=\"submitRating(feedbackForm)\">\n <span class=\"text-white\" >{{ 'ratingdialog.submit' | translate }}</span>\n </button>\n </ng-container>\n <ng-container *ngIf=\"isEditMode\">\n <button mat-stroked-button type=\"submit\" class=\"text-white ws-mat-primary-background flex-auto-display\"\n [disabled]=\"feedbackForm?.invalid || !isEdited || formDisabled\" (click)=\"submitRating(feedbackForm)\">\n <span class=\"text-white\" >{{ 'ratingdialog.update' | translate }}</span>\n </button>\n </ng-container>\n </mat-dialog-actions>\n </form>\n</ng-container>\n\n<div *ngIf=\"showSuccessScreen\" class=\"flex-col align-center justify-center\">\n <div class=\"text-right\">\n <button mat-icon-button aria-label=\"close dialog\" (click)=\"closeDialog(true)\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <div class=\"flex flex-wrap gap-8 items-center justify-center success-msg-container\">\n <div>\n <img src=\"fusion-assets/images/rating.svg\" class=\"success-image\" alt=\"rating success image\" />\n </div>\n <div class=\"flex-col text-center sm:text-left\">\n <div class=\"flex align-center justify-between\">\n <h2 class=\"mat-headline margin-bottom-xxs ws-mat-black-text\">{{ 'ratingdialog.thankYouForFeedback' | translate }}</h2>\n </div>\n <div class=\"section-content mat-body-1\"> {{ 'ratingdialog.youCanUpdateYourFeedback' | translate }} </div>\n </div>\n </div>\n</div>", styles: [".rating-icon{transform:scale(1.2)}.rating-button{margin-right:10px;line-height:20px;height:24px;width:24px}::ng-deep .textarea-container{width:100%}::ng-deep .textarea-container .mat-form-field-wrapper{margin:0}::ng-deep .textarea-container .mat-form-field-infix{padding:8px 0;border-top:0px}::ng-deep .textarea-container .mat-form-field-infix textarea{min-height:52px!important;padding:8px 0}.orange{color:#f69953;font-size:24px}.no-padding{padding:0!important}.custom.mat-dialog-actions{min-height:auto}.success-msg-container{min-height:331px}@media only screen and (max-width: 599px){.success-msg-container{min-height:auto}}@media only screen and (max-width: 599px){.success-image{width:120px}}.large-icon{height:inherit;width:inherit;font-size:13rem}button:disabled{pointer-events:none;opacity:.5}\n"] }]
173
+ }], ctorParameters: function () { return [{ type: i1.MatLegacyDialogRef }, { type: undefined, decorators: [{
174
+ type: Inject,
175
+ args: [MAT_DIALOG_DATA]
176
+ }] }, { type: i2.EventService }, { type: i3.RatingService }, { type: i2.LoggerService }, { type: i4.MatLegacySnackBar }, { type: i5.Router }]; }, propDecorators: { ccuserRating: [{
177
+ type: Input
178
+ }], navigatetoTOC: [{
179
+ type: Input
180
+ }], rateFromCompletionDialog: [{
181
+ type: Input
182
+ }], isEditMode: [{
183
+ type: Input
184
+ }], collectionId: [{
185
+ type: Input
186
+ }] } });
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1yYXRpbmctdjItZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9fY29sbGVjdGlvbi9fY29tbW9uL2NvbnRlbnQtcmF0aW5nLXYyLWRpYWxvZy9jb250ZW50LXJhdGluZy12Mi1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC1yYXRpbmctdjItZGlhbG9nL2NvbnRlbnQtcmF0aW5nLXYyLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ2pGLE9BQU8sRUFBZ0IsUUFBUSxFQUE0QixNQUFNLHNCQUFzQixDQUFBO0FBRXZGLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUc5QixPQUFPLEVBQXNDLHNCQUFzQixJQUFJLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0FBUy9ILE1BQU0sT0FBTyw4QkFBOEI7SUFjekMsWUFDUyxTQUF1RCxFQUM5QixJQUFTLEVBQ2pDLE1BQW9CLEVBQ3BCLFNBQXdCLEVBQ3hCLFNBQXdCLEVBQ3hCLFFBQXFCLEVBQ3JCLE1BQWM7UUFOZixjQUFTLEdBQVQsU0FBUyxDQUE4QztRQUM5QixTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLFdB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T0FBTyxDQUFDLFVBQVUsQ0FBQTtZQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUE7U0FDcEQ7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQzFCO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxVQUFrQixFQUFFLFdBQW1CLElBQUk7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtZQUNsQyxRQUFRO1NBQ1QsQ0FBQyxDQUFBO0lBQ0osQ0FBQzsrR0F4S1UsOEJBQThCLG9EQWdCL0IsZUFBZTttR0FoQmQsOEJBQThCLGtRQ2pCM0Msb2hMQXVGTTs7NEZEdEVPLDhCQUE4QjtrQkFOMUMsU0FBUzsrQkFDRSxvQ0FBb0M7OzBCQXFCM0MsTUFBTTsyQkFBQyxlQUFlO29MQWZoQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlLCBXc0V2ZW50cywgTG9nZ2VyU2VydmljZSwgTnNDb250ZW50IH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInXG5pbXBvcnQgeyBSYXRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX3NlcnZpY2VzL3JhdGluZy5zZXJ2aWNlJ1xuaW1wb3J0IHsgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgTnNBcHBSYXRpbmcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcmF0aW5nLm1vZGVsJ1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xuaW1wb3J0IHsgTWF0TGVnYWN5RGlhbG9nUmVmIGFzIE1hdERpYWxvZ1JlZiwgTUFUX0xFR0FDWV9ESUFMT0dfREFUQSBhcyBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJ1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJ1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3cy13aWRnZXQtY29udGVudC1yYXRpbmctdjItZGlhbG9nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRlbnQtcmF0aW5nLXYyLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtcmF0aW5nLXYyLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxufSlcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRSYXRpbmdWMkRpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNjdXNlclJhdGluZzogYW55XG4gIEBJbnB1dCgpIG5hdmlnYXRldG9UT0M6IGFueVxuICBASW5wdXQoKSByYXRlRnJvbUNvbXBsZXRpb25EaWFsb2c6IGFueVxuICBASW5wdXQoKSAgaXNFZGl0TW9kZSA9IGZhbHNlXG4gIEBJbnB1dCgpICBjb2xsZWN0aW9uSWQgPSAnJ1xuICBjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQgfCBudWxsID0gbnVsbFxuICB1c2VyUmF0aW5nID0gMFxuICBmZWVkYmFja0Zvcm06IFVudHlwZWRGb3JtR3JvdXBcbiAgc2hvd1N1Y2Nlc3NTY3JlZW4gPSBmYWxzZVxuICBmb3JtRGlzYWJsZWQgPSB0cnVlXG4gIGlzRWRpdGVkID0gZmFsc2VcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8Q29udGVudFJhdGluZ1YyRGlhbG9nQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgICBwcml2YXRlIGV2ZW50czogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmF0aW5nU3ZjOiBSYXRpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyU3ZjOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICkge1xuICAgIHRoaXMuZmVlZGJhY2tGb3JtID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe1xuICAgICAgcmV2aWV3OiBuZXcgVW50eXBlZEZvcm1Db250cm9sKG51bGwsIFtWYWxpZGF0b3JzLm1pbkxlbmd0aCgxKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjAwMCldKSxcbiAgICAgIHJhdGluZzogbmV3IFVudHlwZWRGb3JtQ29udHJvbCgwLCBbXSksXG4gICAgICByZWNvbW1lbmQ6IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woZmFsc2UpLFxuICAgIH0pXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5jY3VzZXJSYXRpbmcgfHwgdGhpcy5uYXZpZ2F0ZXRvVE9DIHx8ICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmNvdXJzZU5hbWUpKSB7XG4gICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgIGlkZW50aWZpZXI6IHRoaXMuZGF0YS5pZGVudGlmaWVyLFxuICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6ICB0aGlzLmRhdGEucHJpbWFyeUNhdGVnb3J5LFxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YW9iaiA9IHtcbiAgICAgICAgY29udGVudDogb2JqLFxuICAgICAgICB1c2VySWQ6IHRoaXMuZGF0YS51c2VySWQsXG4gICAgICAgIHVzZXJSYXRpbmc6IHRoaXMuY2N1c2VyUmF0aW5nLFxuICAgICAgfVxuICAgICAgdGhpcy5kYXRhID0gZGF0YW9ialxuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGEudXNlclJhdGluZykge1xuICAgICAgdGhpcy5mZWVkYmFja0Zvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHJldmlldzogdGhpcy5kYXRhLnVzZXJSYXRpbmcucmV2aWV3LFxuICAgICAgICByYXRpbmc6IHRoaXMuZGF0YS51c2VyUmF0aW5nLnJhdGluZyxcbiAgICAgICAgcmVjb21tZW5kOiB0aGlzLmRhdGEudXNlclJhdGluZy5yZWNvbW1lbmRlZCA9PT0gJ3llcycgPyB0cnVlIDogZmFsc2UsXG4gICAgICB9KVxuICAgICAgdGhpcy5mZWVkYmFja0Zvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICB0aGlzLnVzZXJSYXRpbmcgPSB0aGlzLmRhdGEudXNlclJhdGluZy5yYXRpbmdcbiAgICAgIGlmICh0aGlzLnVzZXJSYXRpbmcpIHtcbiAgICAgICAgdGhpcy5mb3JtRGlzYWJsZWQgPSBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGEuY29udGVudCkge1xuICAgICAgdGhpcy5jb250ZW50ID0gdGhpcy5kYXRhLmNvbnRlbnRcbiAgICB9XG5cbiAgICB0aGlzLmZlZWRiYWNrRm9ybS52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoYXN5bmMgZm9ybVZhbHVlID0+IHtcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnZm9ybVZhbHVlLnJldmlldyA6OiAnLCBmb3JtVmFsdWUucmV2aWV3KVxuICAgICAgICAgIGlmICh0aGlzLmRhdGEudXNlclJhdGluZykge1xuICAgICAgICAgICAgaWYgKGZvcm1WYWx1ZS5yZXZpZXcgIT09IHRoaXMuZGF0YS51c2VyUmF0aW5nLnJldmlld1xuICAgICAgICAgICAgICB8fCBmb3JtVmFsdWUucmF0aW5nICE9PSB0aGlzLmRhdGEudXNlclJhdGluZy5yYXRpbmdcbiAgICAgICAgICAgICAgfHwgZm9ybVZhbHVlLnJlY29tbWVuZCAhPT0gdGhpcy5kYXRhLnVzZXJSYXRpbmcucmVjb21tZW5kKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNFZGl0ZWQgPSB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmlzRWRpdGVkID0gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSlcbiAgICAgICkuc3Vic2NyaWJlKClcbiAgfVxuXG4gIHN1Ym1pdFJhdGluZyhmZWVkYmFja0Zvcm06IGFueSkge1xuICAgIGlmICghdGhpcy5mb3JtRGlzYWJsZWQpIHtcbiAgICAgIGNvbnN0IHJlcTogTnNBcHBSYXRpbmcuSVJhdGluZyA9IHtcbiAgICAgICAgYWN0aXZpdHlJZDogdGhpcy5kYXRhLmNvbnRlbnQuaWRlbnRpZmllciB8fCAnJyxcbiAgICAgICAgdXNlcklkOiB0aGlzLmRhdGEudXNlcklkIHx8ICcnLFxuICAgICAgICBhY3Rpdml0eVR5cGU6IHRoaXMuZGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSB8fCAnJyxcbiAgICAgICAgcmF0aW5nOiB0aGlzLnVzZXJSYXRpbmcgfHwgMCxcbiAgICAgICAgLi4uKGZlZWRiYWNrRm9ybS52YWx1ZS5yZXZpZXcgJiYgeyByZXZpZXc6IGZlZWRiYWNrRm9ybS52YWx1ZS5yZXZpZXcgfSksXG4gICAgICAgIHJlY29tbWVuZGVkOiBmZWVkYmFja0Zvcm0udmFsdWUucmVjb21tZW5kID8gJ3llcycgOiAnbm8nLFxuICAgICAgfVxuXG4gICAgICB0aGlzLnJhdGluZ1N2Yy5hZGRPclVwZGF0ZVJhdGluZyhyZXEpLnN1YnNjcmliZShcbiAgICAgICAgKF9yZXM6IGFueSkgPT4gIHtcbiAgICAgICAgICB0aGlzLnJhaXNlRmVlZGJhY2tUZWxlbWV0cnkoZmVlZGJhY2tGb3JtKVxuICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRydWUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3NTY3JlZW4gPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlclN2Yy5lcnJvcignQUREIE9SIFVQREFURSBVU0VSIFJBVElORyBFUlJPUiA+JywgZXJyKVxuICAgICAgICAgIGlmIChlcnIuZXJyb3IgJiYgZXJyLmVycm9yLnBhcmFtcyAmJiBlcnIuZXJyb3IucGFyYW1zLmVycm1zZykge1xuICAgICAgICAgICAgdGhpcy5vcGVuU25hY2tiYXIoZXJyLmVycm9yLnBhcmFtcy5lcnJtc2cpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlblNuYWNrYmFyKCdTb21ldGhpbmcgd2VudCB3cm9uZywgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEnKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLmRpYWxvZ1JlZi5jbG9zZShmYWxzZSlcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHJhaXNlRmVlZGJhY2tUZWxlbWV0cnkoZmVlZGJhY2tGb3JtOiBhbnkpIHtcbiAgICB0aGlzLmV2ZW50cy5yYWlzZUZlZWRiYWNrVGVsZW1ldHJ5KFxuICAgICAge1xuICAgICAgICB0eXBlOiB0aGlzLmRhdGEuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnksXG4gICAgICAgIHN1YlR5cGU6ICdyYXRpbmcnLFxuICAgICAgICBpZDogdGhpcy5kYXRhLmNvbnRlbnQuaWRlbnRpZmllciB8fCAnJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiB0aGlzLmRhdGEuY29udGVudC5pZGVudGlmaWVyIHx8ICcnLFxuICAgICAgICByYXRpbmc6IHRoaXMudXNlclJhdGluZyxcbiAgICAgICAgdmVyc2lvbjogYCR7dGhpcy5kYXRhLmNvbnRlbnQudmVyc2lvbn0keycnfWAsXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIGNvbW1lbnR0eHQ6IGZlZWRiYWNrRm9ybS52YWx1ZS5yZXZpZXcgfHwgJycsXG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgYWRkUmF0aW5nKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnVzZXJSYXRpbmcgPSBpbmRleCArIDFcbiAgICBpZiAodGhpcy51c2VyUmF0aW5nKSB7XG4gICAgICB0aGlzLmZvcm1EaXNhYmxlZCA9IGZhbHNlXG4gICAgfVxuICAgIHRoaXMuZXZlbnRzLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdyYXRpbmcnLFxuICAgICAgICBzdWJUeXBlOiAnY29udGVudCcsXG4gICAgICAgIGlkOiB0aGlzLmRhdGEuY29udGVudC5pZGVudGlmaWVyIHx8ICcnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IHRoaXMuZGF0YS5jb250ZW50LmlkZW50aWZpZXIgfHwgJycsXG4gICAgICAgIHJhdGluZzogdGhpcy51c2VyUmF0aW5nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgIHBhZ2VJZEV4dDogJ3JhdGluZy1wb3B1cCcsXG4gICAgICBtb2R1bGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnltb2R1bGVzLkZFRURCQUNLLFxuICAgIH0pXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICB0aGlzLmZlZWRiYWNrRm9ybS5nZXQoJ3JhdGluZycpIS5zZXRWYWx1ZSh0aGlzLnVzZXJSYXRpbmcpXG4gIH1cblxuICBjbG9zZURpYWxvZyh2YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5uYXZpZ2F0ZXRvVE9DKSB7XG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh2YWwpXG4gICAgICAvLyBJbiBjYXNlIG9mIG11bHRpbGluZ3VhbCBjb3Vyc2UsIHJlZGlyZWN0aW9uIHNob3VsZCBoYXBwZW4gdG8gYmFzZSBjb2xsZWN0aW9uSURcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5jb2xsZWN0aW9uSWQgfHwgdGhpcy5kYXRhLmNvbnRlbnQuaWRlbnRpZmllclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgYXBwL3RvYy8ke2lkfS9vdmVydmlld2ApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHZhbClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5TbmFja2JhcihwcmltYXJ5TXNnOiBzdHJpbmcsIGR1cmF0aW9uOiBudW1iZXIgPSA1MDAwKSB7XG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKHByaW1hcnlNc2csICdYJywge1xuICAgICAgZHVyYXRpb24sXG4gICAgfSlcbiAgfVxuXG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dTdWNjZXNzU2NyZWVuXCI+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJmbGV4IGFsaWduLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICAgICAgPGgyIGNsYXNzPVwibWF0LWhlYWRsaW5lIG1hcmdpbi1yZW1vdmUtYm90dG9tIHdzLW1hdC1ibGFjay10ZXh0XCI+e3sgJ3JhdGluZ2RpYWxvZy5yYXRlUmV2aWV3JyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWJvZHktMiB3cy1tYXQtYmxhY2s2MC10ZXh0XCI+e3sgJ3JhdGluZ2RpYWxvZy55b3VyUmV2aWV3RmVlZGJhY2tWYWx1YWJsZScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJjbG9zZSBkaWFsb2dcIiBtYXQtZGlhbG9nLWNsb3NlPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9zZWN0aW9uPlxuXG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmZWVkYmFja0Zvcm1cIiA+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwibWItNVwiPlxuICAgICAgICAgICAgPGgzIGNsYXNzPVwibWF0LWgzIG1hcmdpbi1ib3R0b20teHMgcmVxdWlyZWRcIiA+e3sgJ3JhdGluZ2RpYWxvZy5yYXRlVGhpcycgfCB0cmFuc2xhdGV9fSB7eyBjb250ZW50Py5wcmltYXJ5Q2F0ZWdvcnkgfCBsb3dlcmNhc2UgfX08L2gzPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3RhcnQgb2YgWzEsIDIsIDMsIDQsIDVdOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gaTE4bi1hcmlhLWxhYmVsIGFyaWEtbGFiZWw9XCJSYXRpbmdcIiBhcmlhLWxhYmVsbGVkYnk9XCJyYXRlLWhlYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInVzZXItY29udGVudC1yYXRpbmctc3Rhci17e2krMX19XCIgW2Rpc2FibGVkXT1cImlzUmVxdWVzdGluZyB8fCBpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmF0aW5nLWJ1dHRvbiBtci0yXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJhZGRSYXRpbmcoaSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJyYXRpbmctaWNvbiB3cy1tYXQtYmxhY2sxNi10ZXh0XCIgW25nQ2xhc3NdPVwieyd3cy1tYXQtb3JhbmdlLXRleHQnOih1c2VyUmF0aW5nIHx8IC0xKSA+IGl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwidy1mdWxsIG1iLTVcIiAqbmdJZj1cIiFmb3JtRGlzYWJsZWRcIj5cbiAgICAgICAgICAgIDxoMyBjbGFzcz1cIm1hdC1oMyBtYXJnaW4tYm90dG9tLXhzXCIgPnt7ICdyYXRpbmdkaWFsb2cuZ2l2ZVJldmlldycgfCB0cmFuc2xhdGUgfX08L2gzPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hdC1ib2R5LTJcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInRleHRhcmVhLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJyZXZpZXdcIiBtYXRJbnB1dCBbY2RrVGV4dGFyZWFBdXRvc2l6ZV0gW2Nka0F1dG9zaXplTWF4Um93c109XCIxMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2RrQXV0b3NpemVNaW5Sb3dzXT1cIjNcIiBtYXhsZW5ndGg9XCIyMDBcIiBmb3JtQ29udHJvbE5hbWU9XCJyZXZpZXdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAncmF0aW5nZGlhbG9nLmFkZFJldmlldycgfCB0cmFuc2xhdGV9fSB7e2NvbnRlbnQ/LnByaW1hcnlDYXRlZ29yeSB8IGxvd2VyY2FzZX19IChvcHRpb25hbClcIiBpMThuLXBsYWNlaG9sZGVyICNyZXZpZXcgaTE4bi1hcmlhLWxhYmVsIGFyaWEtbGFiZWw9XCJSZXZpZXcgdGV4dGFyZWEgaW5wdXRcIiBjbGFzcz1cIm1hdC1ib2R5LTJcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWhpbnQgYWxpZ249XCJlbmRcIj57eyByZXZpZXcudmFsdWUubGVuZ3RoIH19IC8gMjAwIHt7ICdyYXRpbmdkaWFsb2cuY2hhcmFjdGVycycgfCB0cmFuc2xhdGV9fTwvbWF0LWhpbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgW2hpZGRlbl09XCJmYWxzZVwiIGkxOG49XCJyZXZpZXcgZXJyb3IgfCBFeHBsYWlucyByZXZpZXcgaXMgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmZWVkYmFja0Zvcm0/LmNvbnRyb2xzWydyZXZpZXcnXS5lcnJvcnM/LnJlcXVpcmVkXCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwicmV2aWV3IGVycm9yIHwgRXhwbGFpbnMgcmV2aWV3IGlzIHJlcXVpcmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncmF0aW5nZGlhbG9nLmFkZFJldmlldycgfCB0cmFuc2xhdGUgfX0ge3sgY29udGVudD8ucHJpbWFyeUNhdGVnb3J5IHwgbG93ZXJjYXNlIH19IHt7ICdyYXRpbmdkaWFsb2cub3B0aW9uYWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZmVlZGJhY2tGb3JtPy5jb250cm9sc1sncmV2aWV3J10uZXJyb3JzPy5tYXhsZW5ndGhcIiBpMThuLWFyaWEtbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJyZXZpZXcgZXJyb3IgfCBZb3UgaGF2ZSBleGNlZWRlZCAyMDAgY2hhcmFjdGVyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ3JhdGluZ2RpYWxvZy5leGNlZWRlZENoYXJhY3RlcnMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwidy1mdWxsIG1iLTVcIiAqbmdJZj1cIiFmb3JtRGlzYWJsZWRcIj5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2NvbG9yXT1cInByaW1hcnlcIiBjbGFzcz1cInByb2ZhbmUtcmFkaW8tYnV0dG9uIG1hdC1ib2R5LTJcIiBmb3JtQ29udHJvbE5hbWU9XCJyZWNvbW1lbmRcIiA+e3sncmF0aW5nZGlhbG9nLnJlY29tbWVuZENvdXJzZScgfCB0cmFuc2xhdGV9fTwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPG1hdC1kaWFsb2ctYWN0aW9ucyBjbGFzcz1cImN1c3RvbSBtYXJnaW4tcmVtb3ZlLWJvdHRvbSBuby1wYWRkaW5nXCIgYWxpZ249XCJlbmRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFZGl0TW9kZVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInRleHQtd2hpdGUgd3MtbWF0LXByaW1hcnktYmFja2dyb3VuZCBmbGV4LWF1dG8tZGlzcGxheVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmZWVkYmFja0Zvcm0/LmludmFsaWQgfHwgZm9ybURpc2FibGVkXCIgKGNsaWNrKT1cInN1Ym1pdFJhdGluZyhmZWVkYmFja0Zvcm0pXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC13aGl0ZVwiID57eyAncmF0aW5nZGlhbG9nLnN1Ym1pdCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VkaXRNb2RlXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwidGV4dC13aGl0ZSB3cy1tYXQtcHJpbWFyeS1iYWNrZ3JvdW5kIGZsZXgtYXV0by1kaXNwbGF5XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZlZWRiYWNrRm9ybT8uaW52YWxpZCB8fCAgIWlzRWRpdGVkIHx8IGZvcm1EaXNhYmxlZFwiIChjbGljayk9XCJzdWJtaXRSYXRpbmcoZmVlZGJhY2tGb3JtKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtd2hpdGVcIiA+e3sgJ3JhdGluZ2RpYWxvZy51cGRhdGUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuICAgIDwvZm9ybT5cbjwvbmctY29udGFpbmVyPlxuXG48ZGl2ICpuZ0lmPVwic2hvd1N1Y2Nlc3NTY3JlZW5cIiBjbGFzcz1cImZsZXgtY29sIGFsaWduLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJjbG9zZSBkaWFsb2dcIiAoY2xpY2spPVwiY2xvc2VEaWFsb2codHJ1ZSlcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtOCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgc3VjY2Vzcy1tc2ctY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aW1nIHNyYz1cImZ1c2lvbi1hc3NldHMvaW1hZ2VzL3JhdGluZy5zdmdcIiBjbGFzcz1cInN1Y2Nlc3MtaW1hZ2VcIiBhbHQ9XCJyYXRpbmcgc3VjY2VzcyBpbWFnZVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb2wgdGV4dC1jZW50ZXIgc206dGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwibWF0LWhlYWRsaW5lIG1hcmdpbi1ib3R0b20teHhzIHdzLW1hdC1ibGFjay10ZXh0XCI+e3sgJ3JhdGluZ2RpYWxvZy50aGFua1lvdUZvckZlZWRiYWNrJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWNvbnRlbnQgbWF0LWJvZHktMVwiPiB7eyAncmF0aW5nZGlhbG9nLnlvdUNhblVwZGF0ZVlvdXJGZWVkYmFjaycgfCB0cmFuc2xhdGUgfX0gPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19