@sunbird-cb/consumption 0.0.64 → 0.0.65

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 (344) hide show
  1. package/README.md +24 -24
  2. package/bundles/sunbird-cb-consumption.umd.js +17470 -17348
  3. package/bundles/sunbird-cb-consumption.umd.js.map +1 -1
  4. package/bundles/sunbird-cb-consumption.umd.min.js +1 -1
  5. package/bundles/sunbird-cb-consumption.umd.min.js.map +1 -1
  6. package/esm2015/lib/_common/announcements/announcements.component.js +150 -150
  7. package/esm2015/lib/_common/announcements/announcements.module.js +23 -23
  8. package/esm2015/lib/_common/avatar-photo-lib/avatar-photo-lib.component.js +158 -158
  9. package/esm2015/lib/_common/avatar-photo-lib/avatar-photo-lib.module.js +29 -29
  10. package/esm2015/lib/_common/calender/calender-day/calender-day.component.js +90 -90
  11. package/esm2015/lib/_common/calender/calender.component.js +299 -299
  12. package/esm2015/lib/_common/calender/calender.module.js +31 -31
  13. package/esm2015/lib/_common/cards/card-assessment/card-assessment/card-assessment.component.js +170 -170
  14. package/esm2015/lib/_common/cards/card-karma-programs/card-karma-programs.component.js +178 -178
  15. package/esm2015/lib/_common/cards/card-karma-programs-v2/card-karma-programs-v2.component.js +166 -166
  16. package/esm2015/lib/_common/cards/card-landscape/card-landscape.component.js +202 -202
  17. package/esm2015/lib/_common/cards/card-mdo-channel/card-mdo-channel.component.js +154 -154
  18. package/esm2015/lib/_common/cards/card-mdo-channel-v1/card-mdo-channel-v1.component.js +154 -154
  19. package/esm2015/lib/_common/cards/card-portrait/card-portrait.component.js +167 -167
  20. package/esm2015/lib/_common/cards/card-portrait-ext/card-portrait-ext.component.js +170 -170
  21. package/esm2015/lib/_common/cards/card-progress-portrait-lib/card-progress-portrait-lib.component.js +261 -261
  22. package/esm2015/lib/_common/cards/card-resource/card-resource.component.js +34 -34
  23. package/esm2015/lib/_common/cards/card-user/card-user.component.js +141 -141
  24. package/esm2015/lib/_common/cards/card-wide/card-wide.component.js +166 -166
  25. package/esm2015/lib/_common/cards/card-wide-v2/card-wide-v2.component.js +171 -171
  26. package/esm2015/lib/_common/cards/cards.component.js +167 -167
  27. package/esm2015/lib/_common/cards/cards.module.js +100 -100
  28. package/esm2015/lib/_common/cards/provider-card/provider-card.component.js +81 -81
  29. package/esm2015/lib/_common/cbp-plan/cbp-plan.component.js +166 -166
  30. package/esm2015/lib/_common/cbp-plan/cbp-plan.module.js +27 -27
  31. package/esm2015/lib/_common/common-strip/common-strip.component.js +646 -646
  32. package/esm2015/lib/_common/common-strip/common-strip.model.js +216 -216
  33. package/esm2015/lib/_common/common-strip/common-strip.module.js +62 -62
  34. package/esm2015/lib/_common/competency-passbook/competency-passbook.component.js +384 -384
  35. package/esm2015/lib/_common/competency-passbook/competency-passbook.module.js +27 -27
  36. package/esm2015/lib/_common/competency-passbook/competency-passbook.service.js +52 -52
  37. package/esm2015/lib/_common/competency-passbook-mdo/competency-passbook-mdo.component.js +332 -332
  38. package/esm2015/lib/_common/competency-passbook-mdo/competency-passbook-mdo.module.js +27 -27
  39. package/esm2015/lib/_common/competency-passbook-mdo/competency-passbook-mdo.service.js +52 -52
  40. package/esm2015/lib/_common/content-progress/content-progress.component.js +89 -89
  41. package/esm2015/lib/_common/content-progress/content-progress.module.js +22 -22
  42. package/esm2015/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.js +2559 -2443
  43. package/esm2015/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.model.js +218 -214
  44. package/esm2015/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.module.js +69 -69
  45. package/esm2015/lib/_common/data-points/data-points.component.js +148 -148
  46. package/esm2015/lib/_common/data-points/data-points.module.js +23 -23
  47. package/esm2015/lib/_common/dialog-components/certificate-dialog/certificate-dialog.component.js +225 -225
  48. package/esm2015/lib/_common/dialog-components/dialog-components.module.js +43 -43
  49. package/esm2015/lib/_common/display-content-type-lib/display-content-type-lib.component.js +60 -60
  50. package/esm2015/lib/_common/display-content-type-lib/display-content-type-lib.module.js +18 -18
  51. package/esm2015/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.component.js +362 -362
  52. package/esm2015/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.module.js +23 -23
  53. package/esm2015/lib/_common/microsites/mdo-channels/mdo-channel-v1/mdo-channel-v1.component.js +23 -23
  54. package/esm2015/lib/_common/microsites/mdo-channels/mdo-channel-v2/mdo-channel-v2.component.js +255 -255
  55. package/esm2015/lib/_common/microsites/mdo-channels/mdo-channel.module.js +52 -52
  56. package/esm2015/lib/_common/microsites/providers/providers-v2/providers-v2.component.js +269 -269
  57. package/esm2015/lib/_common/microsites/providers/providers.module.js +51 -51
  58. package/esm2015/lib/_common/pills/pills.component.js +61 -61
  59. package/esm2015/lib/_common/pills/pills.module.js +24 -24
  60. package/esm2015/lib/_common/skeleton-loader-lib/skeleton-loader-lib.component.js +40 -40
  61. package/esm2015/lib/_common/skeleton-loader-lib/skeleton-loader-lib.module.js +28 -28
  62. package/esm2015/lib/_common/sliders/sliders.component.js +187 -187
  63. package/esm2015/lib/_common/sliders/sliders.model.js +67 -67
  64. package/esm2015/lib/_common/sliders/sliders.module.js +50 -50
  65. package/esm2015/lib/_common/sliders-ng-content/sliders-ng-content.component.js +206 -206
  66. package/esm2015/lib/_common/sliders-ng-content/sliders-ng-content.model.js +61 -61
  67. package/esm2015/lib/_common/sliders-ng-content/sliders-ng-content.module.js +50 -50
  68. package/esm2015/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.component.js +1613 -1613
  69. package/esm2015/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.model.js +218 -218
  70. package/esm2015/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.module.js +69 -69
  71. package/esm2015/lib/_common/top-learners/top-learners.component.js +155 -155
  72. package/esm2015/lib/_common/top-learners/top-learners.module.js +23 -23
  73. package/esm2015/lib/_common/user-content-rating/user-content-rating-lib.component.js +145 -145
  74. package/esm2015/lib/_common/user-content-rating/user-content-rating-lib.module.js +38 -38
  75. package/esm2015/lib/_common/user-content-rating/user-content-rating-lib.service.js +45 -45
  76. package/esm2015/lib/_constants/misc.constants.js +4 -4
  77. package/esm2015/lib/_directives/default-thumbnail/default-thumbnail.directive.js +51 -51
  78. package/esm2015/lib/_directives/default-thumbnail/default-thumbnail.module.js +18 -18
  79. package/esm2015/lib/_directives/image-responsive/image-responsive.directive.js +126 -126
  80. package/esm2015/lib/_directives/image-responsive/image-responsive.module.js +18 -18
  81. package/esm2015/lib/_directives/navigation/navigation.directive.js +53 -53
  82. package/esm2015/lib/_directives/navigation/navigation.module.js +18 -18
  83. package/esm2015/lib/_directives/scrollable-item/scrollable-item.directive.js +42 -42
  84. package/esm2015/lib/_directives/scrollable-item/scrollable-item.module.js +19 -19
  85. package/esm2015/lib/_models/card-content-v2.model.js +78 -78
  86. package/esm2015/lib/_models/card-content.model.js +69 -69
  87. package/esm2015/lib/_models/card-users.model.js +103 -103
  88. package/esm2015/lib/_models/content-strip-multiple.model.js +195 -195
  89. package/esm2015/lib/_models/event.js +45 -45
  90. package/esm2015/lib/_models/profile-v3.models.js +196 -196
  91. package/esm2015/lib/_models/rating.model.js +44 -44
  92. package/esm2015/lib/_models/widget-content.model.js +876 -876
  93. package/esm2015/lib/_models/widget-search.model.js +471 -471
  94. package/esm2015/lib/_models/widget-user.model.js +17 -17
  95. package/esm2015/lib/_pipes/object-to-array/object-to-array.pipe.js +28 -28
  96. package/esm2015/lib/_pipes/object-to-array/object-to-array.pipe.module.js +19 -19
  97. package/esm2015/lib/_pipes/pipe-duration-transform/pipe-duration-transform.module.js +18 -18
  98. package/esm2015/lib/_pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +119 -119
  99. package/esm2015/lib/_pipes/pipe-public-URL/pipe-public-URL.module.js +19 -19
  100. package/esm2015/lib/_pipes/pipe-public-URL/pipe-public-URL.pipe.js +38 -38
  101. package/esm2015/lib/_services/certificate.service.js +63 -63
  102. package/esm2015/lib/_services/common-methods.service.js +84 -84
  103. package/esm2015/lib/_services/configurations.service.js +243 -243
  104. package/esm2015/lib/_services/insite-data.service.js +68 -68
  105. package/esm2015/lib/_services/multilingual-translations.service.js +231 -231
  106. package/esm2015/lib/_services/rating.service.js +171 -171
  107. package/esm2015/lib/_services/viewer-route-util.js +125 -125
  108. package/esm2015/lib/_services/widget-content.service.js +852 -852
  109. package/esm2015/lib/_services/widget-user.service.js +475 -475
  110. package/esm2015/lib/consumption.component.js +26 -26
  111. package/esm2015/lib/consumption.config.js +12 -12
  112. package/esm2015/lib/consumption.module.js +36 -36
  113. package/esm2015/lib/consumption.service.js +18 -18
  114. package/esm2015/lib/registration-lib.config.js +21 -21
  115. package/esm2015/public-api.js +31 -31
  116. package/esm2015/sunbird-cb-consumption.js +77 -77
  117. package/esm5/lib/_common/announcements/announcements.component.js +166 -166
  118. package/esm5/lib/_common/announcements/announcements.module.js +27 -27
  119. package/esm5/lib/_common/avatar-photo-lib/avatar-photo-lib.component.js +175 -175
  120. package/esm5/lib/_common/avatar-photo-lib/avatar-photo-lib.module.js +33 -33
  121. package/esm5/lib/_common/calender/calender-day/calender-day.component.js +101 -101
  122. package/esm5/lib/_common/calender/calender.component.js +334 -334
  123. package/esm5/lib/_common/calender/calender.module.js +35 -35
  124. package/esm5/lib/_common/cards/card-assessment/card-assessment/card-assessment.component.js +186 -186
  125. package/esm5/lib/_common/cards/card-karma-programs/card-karma-programs.component.js +187 -187
  126. package/esm5/lib/_common/cards/card-karma-programs-v2/card-karma-programs-v2.component.js +176 -176
  127. package/esm5/lib/_common/cards/card-landscape/card-landscape.component.js +216 -216
  128. package/esm5/lib/_common/cards/card-mdo-channel/card-mdo-channel.component.js +164 -164
  129. package/esm5/lib/_common/cards/card-mdo-channel-v1/card-mdo-channel-v1.component.js +164 -164
  130. package/esm5/lib/_common/cards/card-portrait/card-portrait.component.js +173 -173
  131. package/esm5/lib/_common/cards/card-portrait-ext/card-portrait-ext.component.js +176 -176
  132. package/esm5/lib/_common/cards/card-progress-portrait-lib/card-progress-portrait-lib.component.js +278 -278
  133. package/esm5/lib/_common/cards/card-resource/card-resource.component.js +41 -41
  134. package/esm5/lib/_common/cards/card-user/card-user.component.js +147 -147
  135. package/esm5/lib/_common/cards/card-wide/card-wide.component.js +172 -172
  136. package/esm5/lib/_common/cards/card-wide-v2/card-wide-v2.component.js +181 -181
  137. package/esm5/lib/_common/cards/cards.component.js +199 -199
  138. package/esm5/lib/_common/cards/cards.module.js +104 -104
  139. package/esm5/lib/_common/cards/provider-card/provider-card.component.js +90 -90
  140. package/esm5/lib/_common/cbp-plan/cbp-plan.component.js +185 -185
  141. package/esm5/lib/_common/cbp-plan/cbp-plan.module.js +31 -31
  142. package/esm5/lib/_common/common-strip/common-strip.component.js +760 -760
  143. package/esm5/lib/_common/common-strip/common-strip.model.js +216 -216
  144. package/esm5/lib/_common/common-strip/common-strip.module.js +66 -66
  145. package/esm5/lib/_common/competency-passbook/competency-passbook.component.js +454 -454
  146. package/esm5/lib/_common/competency-passbook/competency-passbook.module.js +31 -31
  147. package/esm5/lib/_common/competency-passbook/competency-passbook.service.js +59 -59
  148. package/esm5/lib/_common/competency-passbook-mdo/competency-passbook-mdo.component.js +383 -383
  149. package/esm5/lib/_common/competency-passbook-mdo/competency-passbook-mdo.module.js +31 -31
  150. package/esm5/lib/_common/competency-passbook-mdo/competency-passbook-mdo.service.js +59 -59
  151. package/esm5/lib/_common/content-progress/content-progress.component.js +94 -94
  152. package/esm5/lib/_common/content-progress/content-progress.module.js +26 -26
  153. package/esm5/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.js +2970 -2848
  154. package/esm5/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.model.js +218 -214
  155. package/esm5/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.module.js +73 -73
  156. package/esm5/lib/_common/data-points/data-points.component.js +163 -163
  157. package/esm5/lib/_common/data-points/data-points.module.js +27 -27
  158. package/esm5/lib/_common/dialog-components/certificate-dialog/certificate-dialog.component.js +248 -248
  159. package/esm5/lib/_common/dialog-components/dialog-components.module.js +47 -47
  160. package/esm5/lib/_common/display-content-type-lib/display-content-type-lib.component.js +67 -67
  161. package/esm5/lib/_common/display-content-type-lib/display-content-type-lib.module.js +22 -22
  162. package/esm5/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.component.js +391 -391
  163. package/esm5/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.module.js +27 -27
  164. package/esm5/lib/_common/microsites/mdo-channels/mdo-channel-v1/mdo-channel-v1.component.js +29 -29
  165. package/esm5/lib/_common/microsites/mdo-channels/mdo-channel-v2/mdo-channel-v2.component.js +292 -292
  166. package/esm5/lib/_common/microsites/mdo-channels/mdo-channel.module.js +56 -56
  167. package/esm5/lib/_common/microsites/providers/providers-v2/providers-v2.component.js +312 -312
  168. package/esm5/lib/_common/microsites/providers/providers.module.js +55 -55
  169. package/esm5/lib/_common/pills/pills.component.js +70 -70
  170. package/esm5/lib/_common/pills/pills.module.js +28 -28
  171. package/esm5/lib/_common/skeleton-loader-lib/skeleton-loader-lib.component.js +45 -45
  172. package/esm5/lib/_common/skeleton-loader-lib/skeleton-loader-lib.module.js +32 -32
  173. package/esm5/lib/_common/sliders/sliders.component.js +214 -214
  174. package/esm5/lib/_common/sliders/sliders.model.js +67 -67
  175. package/esm5/lib/_common/sliders/sliders.module.js +67 -67
  176. package/esm5/lib/_common/sliders-ng-content/sliders-ng-content.component.js +233 -233
  177. package/esm5/lib/_common/sliders-ng-content/sliders-ng-content.model.js +61 -61
  178. package/esm5/lib/_common/sliders-ng-content/sliders-ng-content.module.js +67 -67
  179. package/esm5/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.component.js +1892 -1892
  180. package/esm5/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.model.js +218 -218
  181. package/esm5/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.module.js +73 -73
  182. package/esm5/lib/_common/top-learners/top-learners.component.js +172 -172
  183. package/esm5/lib/_common/top-learners/top-learners.module.js +27 -27
  184. package/esm5/lib/_common/user-content-rating/user-content-rating-lib.component.js +168 -168
  185. package/esm5/lib/_common/user-content-rating/user-content-rating-lib.module.js +42 -42
  186. package/esm5/lib/_common/user-content-rating/user-content-rating-lib.service.js +48 -48
  187. package/esm5/lib/_constants/misc.constants.js +4 -4
  188. package/esm5/lib/_directives/default-thumbnail/default-thumbnail.directive.js +59 -59
  189. package/esm5/lib/_directives/default-thumbnail/default-thumbnail.module.js +22 -22
  190. package/esm5/lib/_directives/image-responsive/image-responsive.directive.js +136 -136
  191. package/esm5/lib/_directives/image-responsive/image-responsive.module.js +22 -22
  192. package/esm5/lib/_directives/navigation/navigation.directive.js +62 -62
  193. package/esm5/lib/_directives/navigation/navigation.module.js +22 -22
  194. package/esm5/lib/_directives/scrollable-item/scrollable-item.directive.js +45 -45
  195. package/esm5/lib/_directives/scrollable-item/scrollable-item.module.js +23 -23
  196. package/esm5/lib/_models/card-content-v2.model.js +78 -78
  197. package/esm5/lib/_models/card-content.model.js +69 -69
  198. package/esm5/lib/_models/card-users.model.js +103 -103
  199. package/esm5/lib/_models/content-strip-multiple.model.js +195 -195
  200. package/esm5/lib/_models/event.js +45 -45
  201. package/esm5/lib/_models/profile-v3.models.js +196 -196
  202. package/esm5/lib/_models/rating.model.js +44 -44
  203. package/esm5/lib/_models/widget-content.model.js +876 -876
  204. package/esm5/lib/_models/widget-search.model.js +471 -471
  205. package/esm5/lib/_models/widget-user.model.js +17 -17
  206. package/esm5/lib/_pipes/object-to-array/object-to-array.pipe.js +57 -57
  207. package/esm5/lib/_pipes/object-to-array/object-to-array.pipe.module.js +23 -23
  208. package/esm5/lib/_pipes/pipe-duration-transform/pipe-duration-transform.module.js +22 -22
  209. package/esm5/lib/_pipes/pipe-duration-transform/pipe-duration-transform.pipe.js +142 -142
  210. package/esm5/lib/_pipes/pipe-public-URL/pipe-public-URL.module.js +23 -23
  211. package/esm5/lib/_pipes/pipe-public-URL/pipe-public-URL.pipe.js +41 -41
  212. package/esm5/lib/_services/certificate.service.js +70 -70
  213. package/esm5/lib/_services/common-methods.service.js +102 -102
  214. package/esm5/lib/_services/configurations.service.js +257 -257
  215. package/esm5/lib/_services/insite-data.service.js +82 -82
  216. package/esm5/lib/_services/multilingual-translations.service.js +259 -259
  217. package/esm5/lib/_services/rating.service.js +214 -214
  218. package/esm5/lib/_services/viewer-route-util.js +127 -127
  219. package/esm5/lib/_services/widget-content.service.js +1109 -1109
  220. package/esm5/lib/_services/widget-user.service.js +542 -542
  221. package/esm5/lib/consumption.component.js +28 -28
  222. package/esm5/lib/consumption.config.js +12 -12
  223. package/esm5/lib/consumption.module.js +40 -40
  224. package/esm5/lib/consumption.service.js +21 -21
  225. package/esm5/lib/registration-lib.config.js +21 -21
  226. package/esm5/public-api.js +31 -31
  227. package/esm5/sunbird-cb-consumption.js +77 -77
  228. package/fesm2015/sunbird-cb-consumption.js +15407 -15291
  229. package/fesm2015/sunbird-cb-consumption.js.map +1 -1
  230. package/fesm5/sunbird-cb-consumption.js +17476 -17354
  231. package/fesm5/sunbird-cb-consumption.js.map +1 -1
  232. package/lib/_common/announcements/announcements.component.d.ts +21 -21
  233. package/lib/_common/announcements/announcements.module.d.ts +2 -2
  234. package/lib/_common/avatar-photo-lib/avatar-photo-lib.component.d.ts +20 -20
  235. package/lib/_common/avatar-photo-lib/avatar-photo-lib.module.d.ts +2 -2
  236. package/lib/_common/calender/calender-day/calender-day.component.d.ts +18 -18
  237. package/lib/_common/calender/calender.component.d.ts +34 -34
  238. package/lib/_common/calender/calender.module.d.ts +2 -2
  239. package/lib/_common/cards/card-assessment/card-assessment/card-assessment.component.d.ts +31 -31
  240. package/lib/_common/cards/card-karma-programs/card-karma-programs.component.d.ts +28 -28
  241. package/lib/_common/cards/card-karma-programs-v2/card-karma-programs-v2.component.d.ts +26 -26
  242. package/lib/_common/cards/card-landscape/card-landscape.component.d.ts +36 -36
  243. package/lib/_common/cards/card-mdo-channel/card-mdo-channel.component.d.ts +27 -27
  244. package/lib/_common/cards/card-mdo-channel-v1/card-mdo-channel-v1.component.d.ts +27 -27
  245. package/lib/_common/cards/card-portrait/card-portrait.component.d.ts +33 -33
  246. package/lib/_common/cards/card-portrait-ext/card-portrait-ext.component.d.ts +33 -33
  247. package/lib/_common/cards/card-progress-portrait-lib/card-progress-portrait-lib.component.d.ts +41 -41
  248. package/lib/_common/cards/card-resource/card-resource.component.d.ts +8 -8
  249. package/lib/_common/cards/card-user/card-user.component.d.ts +24 -24
  250. package/lib/_common/cards/card-wide/card-wide.component.d.ts +30 -30
  251. package/lib/_common/cards/card-wide-v2/card-wide-v2.component.d.ts +34 -34
  252. package/lib/_common/cards/cards.component.d.ts +26 -26
  253. package/lib/_common/cards/cards.module.d.ts +2 -2
  254. package/lib/_common/cards/provider-card/provider-card.component.d.ts +14 -14
  255. package/lib/_common/cbp-plan/cbp-plan.component.d.ts +25 -25
  256. package/lib/_common/cbp-plan/cbp-plan.module.d.ts +2 -2
  257. package/lib/_common/common-strip/common-strip.component.d.ts +104 -104
  258. package/lib/_common/common-strip/common-strip.model.d.ts +141 -141
  259. package/lib/_common/common-strip/common-strip.module.d.ts +2 -2
  260. package/lib/_common/competency-passbook/competency-passbook.component.d.ts +42 -42
  261. package/lib/_common/competency-passbook/competency-passbook.module.d.ts +2 -2
  262. package/lib/_common/competency-passbook/competency-passbook.service.d.ts +8 -8
  263. package/lib/_common/competency-passbook-mdo/competency-passbook-mdo.component.d.ts +43 -43
  264. package/lib/_common/competency-passbook-mdo/competency-passbook-mdo.module.d.ts +2 -2
  265. package/lib/_common/competency-passbook-mdo/competency-passbook-mdo.service.d.ts +8 -8
  266. package/lib/_common/content-progress/content-progress.component.d.ts +13 -13
  267. package/lib/_common/content-progress/content-progress.module.d.ts +2 -2
  268. package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.d.ts +203 -201
  269. package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.model.d.ts +149 -147
  270. package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.module.d.ts +5 -5
  271. package/lib/_common/data-points/data-points.component.d.ts +17 -17
  272. package/lib/_common/data-points/data-points.module.d.ts +2 -2
  273. package/lib/_common/dialog-components/certificate-dialog/certificate-dialog.component.d.ts +22 -22
  274. package/lib/_common/dialog-components/dialog-components.module.d.ts +2 -2
  275. package/lib/_common/display-content-type-lib/display-content-type-lib.component.d.ts +12 -12
  276. package/lib/_common/display-content-type-lib/display-content-type-lib.module.d.ts +2 -2
  277. package/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.component.d.ts +33 -33
  278. package/lib/_common/horizontal-scroller-v2/horizontal-scroller-v2.module.d.ts +2 -2
  279. package/lib/_common/microsites/mdo-channels/mdo-channel-v1/mdo-channel-v1.component.d.ts +5 -5
  280. package/lib/_common/microsites/mdo-channels/mdo-channel-v2/mdo-channel-v2.component.d.ts +39 -39
  281. package/lib/_common/microsites/mdo-channels/mdo-channel.module.d.ts +2 -2
  282. package/lib/_common/microsites/providers/providers-v2/providers-v2.component.d.ts +36 -36
  283. package/lib/_common/microsites/providers/providers.module.d.ts +2 -2
  284. package/lib/_common/pills/pills.component.d.ts +13 -13
  285. package/lib/_common/pills/pills.module.d.ts +2 -2
  286. package/lib/_common/skeleton-loader-lib/skeleton-loader-lib.component.d.ts +8 -8
  287. package/lib/_common/skeleton-loader-lib/skeleton-loader-lib.module.d.ts +2 -2
  288. package/lib/_common/sliders/sliders.component.d.ts +27 -27
  289. package/lib/_common/sliders/sliders.model.d.ts +40 -40
  290. package/lib/_common/sliders/sliders.module.d.ts +6 -6
  291. package/lib/_common/sliders-ng-content/sliders-ng-content.component.d.ts +29 -29
  292. package/lib/_common/sliders-ng-content/sliders-ng-content.model.d.ts +34 -34
  293. package/lib/_common/sliders-ng-content/sliders-ng-content.module.d.ts +6 -6
  294. package/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.component.d.ts +161 -161
  295. package/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.model.d.ts +149 -149
  296. package/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.module.d.ts +5 -5
  297. package/lib/_common/top-learners/top-learners.component.d.ts +18 -18
  298. package/lib/_common/top-learners/top-learners.module.d.ts +2 -2
  299. package/lib/_common/user-content-rating/user-content-rating-lib.component.d.ts +22 -22
  300. package/lib/_common/user-content-rating/user-content-rating-lib.module.d.ts +2 -2
  301. package/lib/_common/user-content-rating/user-content-rating-lib.service.d.ts +7 -7
  302. package/lib/_constants/misc.constants.d.ts +2 -2
  303. package/lib/_directives/default-thumbnail/default-thumbnail.directive.d.ts +9 -9
  304. package/lib/_directives/default-thumbnail/default-thumbnail.module.d.ts +2 -2
  305. package/lib/_directives/image-responsive/image-responsive.directive.d.ts +17 -17
  306. package/lib/_directives/image-responsive/image-responsive.module.d.ts +2 -2
  307. package/lib/_directives/navigation/navigation.directive.d.ts +9 -9
  308. package/lib/_directives/navigation/navigation.module.d.ts +2 -2
  309. package/lib/_directives/scrollable-item/scrollable-item.directive.d.ts +7 -7
  310. package/lib/_directives/scrollable-item/scrollable-item.module.d.ts +2 -2
  311. package/lib/_models/card-content-v2.model.d.ts +44 -44
  312. package/lib/_models/card-content.model.d.ts +41 -41
  313. package/lib/_models/card-users.model.d.ts +50 -50
  314. package/lib/_models/content-strip-multiple.model.d.ts +128 -128
  315. package/lib/_models/event.d.ts +18 -18
  316. package/lib/_models/profile-v3.models.d.ts +91 -91
  317. package/lib/_models/rating.model.d.ts +17 -17
  318. package/lib/_models/widget-content.model.d.ts +497 -497
  319. package/lib/_models/widget-search.model.d.ts +252 -252
  320. package/lib/_models/widget-user.model.d.ts +5 -5
  321. package/lib/_pipes/object-to-array/object-to-array.pipe.d.ts +4 -4
  322. package/lib/_pipes/object-to-array/object-to-array.pipe.module.d.ts +2 -2
  323. package/lib/_pipes/pipe-duration-transform/pipe-duration-transform.module.d.ts +2 -2
  324. package/lib/_pipes/pipe-duration-transform/pipe-duration-transform.pipe.d.ts +6 -6
  325. package/lib/_pipes/pipe-public-URL/pipe-public-URL.module.d.ts +2 -2
  326. package/lib/_pipes/pipe-public-URL/pipe-public-URL.pipe.d.ts +6 -6
  327. package/lib/_services/certificate.service.d.ts +8 -8
  328. package/lib/_services/common-methods.service.d.ts +39 -39
  329. package/lib/_services/configurations.service.d.ts +71 -71
  330. package/lib/_services/insite-data.service.d.ts +10 -10
  331. package/lib/_services/multilingual-translations.service.d.ts +20 -20
  332. package/lib/_services/rating.service.d.ts +15 -15
  333. package/lib/_services/viewer-route-util.d.ts +8 -8
  334. package/lib/_services/widget-content.service.d.ts +87 -87
  335. package/lib/_services/widget-user.service.d.ts +33 -33
  336. package/lib/consumption.component.d.ts +5 -5
  337. package/lib/consumption.config.d.ts +6 -6
  338. package/lib/consumption.module.d.ts +2 -2
  339. package/lib/consumption.service.d.ts +3 -3
  340. package/lib/registration-lib.config.d.ts +4 -4
  341. package/package.json +1 -1
  342. package/public-api.d.ts +23 -23
  343. package/sunbird-cb-consumption.d.ts +73 -73
  344. package/sunbird-cb-consumption.metadata.json +1 -1
@@ -1,852 +1,852 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import * as tslib_1 from "tslib";
6
- import { HttpClient } from '@angular/common/http';
7
- import { Injectable } from '@angular/core';
8
- import { ConfigurationsService } from '@sunbird-cb/utils-v2';
9
- import { of, EMPTY, BehaviorSubject, Subject } from 'rxjs';
10
- import { catchError, retry, map, shareReplay } from 'rxjs/operators';
11
- import { NsContent } from '../_models/widget-content.model';
12
- // tslint:disable
13
- import * as _ from 'lodash';
14
- import { viewerRouteGenerator } from './viewer-route-util';
15
- import * as moment_ from 'moment';
16
- import * as i0 from "@angular/core";
17
- import * as i1 from "@angular/common/http";
18
- import * as i2 from "@sunbird-cb/utils-v2";
19
- /** @type {?} */
20
- const moment = moment_;
21
- // tslint:enable
22
- // TODO: move this in some common place
23
- /** @type {?} */
24
- const PROTECTED_SLAG_V8 = '/apis/protected/v8';
25
- const ɵ0 = /**
26
- * @param {?} type
27
- * @param {?} id
28
- * @return {?}
29
- */
30
- (type, id) => `${PROTECTED_SLAG_V8}/content/collection/${type}/${id}`, ɵ1 = /**
31
- * @param {?} contentId
32
- * @return {?}
33
- */
34
- (contentId) => `${PROTECTED_SLAG_V8}/user/progress/${contentId}`, ɵ2 = /**
35
- * @param {?} certId
36
- * @return {?}
37
- */
38
- (certId) => `${PROTECTED_SLAG_V8}/cohorts/course/batch/cert/download/${certId}`, ɵ3 = /**
39
- * @param {?} contentId
40
- * @return {?}
41
- */
42
- (contentId) => `/apis/proxies/v8/action/content/v3/read/${contentId}`;
43
- /** @type {?} */
44
- const API_END_POINTS = {
45
- CONTENT: `${PROTECTED_SLAG_V8}/content`,
46
- AUTHORING_CONTENT: `/api/course/v1/hierarchy`,
47
- CONTENT_LIKES: `${PROTECTED_SLAG_V8}/content/likeCount`,
48
- SET_S3_COOKIE: `${PROTECTED_SLAG_V8}/content/setCookie`,
49
- SET_S3_IMAGE_COOKIE: `${PROTECTED_SLAG_V8}/content/setImageCookie`,
50
- FETCH_MANIFEST: `${PROTECTED_SLAG_V8}/content/getWebModuleManifest`,
51
- FETCH_WEB_MODULE_FILES: `${PROTECTED_SLAG_V8}/content/getWebModuleFiles`,
52
- MULTIPLE_CONTENT: `${PROTECTED_SLAG_V8}/content/multiple`,
53
- CONTENT_SEARCH_V5: `${PROTECTED_SLAG_V8}/content/searchV5`,
54
- CONTENT_SEARCH_V6: `/apis/proxies/v8/sunbirdigot/search`,
55
- TRENDING_CONTENT_SEARCH: `apis/proxies/v8/trending/content/search`,
56
- CONTENT_SEARCH_RELATED_CBP_V6: `/apis/proxies/v8/sunbirdigot/search`,
57
- CONTENT_SEARCH_REGION_RECOMMENDATION: `${PROTECTED_SLAG_V8}/content/searchRegionRecommendation`,
58
- CONTENT_HISTORY: `${PROTECTED_SLAG_V8}/user/history`,
59
- CONTENT_HISTORYV2: `/apis/proxies/v8/read/content-progres`,
60
- COURSE_BATCH_LIST: `/apis/proxies/v8/learner/course/v1/batch/list`,
61
- COURSE_BATCH: `/apis/proxies/v8/course/v1/batch/read`,
62
- AUTO_ASSIGN_BATCH: `/apis/protected/v8/cohorts/user/autoenrollment/`,
63
- AUTO_ASSIGN_CURATED_BATCH: `/apis/proxies/v8/curatedprogram/v1/enrol`,
64
- AUTO_ASSIGN_OPEN_PROGRAM: `/apis/proxies/v8/openprogram/v1/enrol`,
65
- USER_CONTINUE_LEARNING: `${PROTECTED_SLAG_V8}/user/history/continue`,
66
- CONTENT_RATING: `${PROTECTED_SLAG_V8}/user/rating`,
67
- COLLECTION_HIERARCHY: (ɵ0),
68
- REGISTRATION_STATUS: `${PROTECTED_SLAG_V8}/admin/userRegistration/checkUserRegistrationContent`,
69
- MARK_AS_COMPLETE_META: (ɵ1),
70
- ENROLL_BATCH: `/apis/proxies/v8/learner/course/v1/enrol`,
71
- ENROLL_BATCH_WF: `/apis/proxies/v8/workflow/blendedprogram/enrol`,
72
- WITHDRAW_BATCH_WF: `/apis/proxies/v8/workflow/blendedprogram/unenrol`,
73
- BLENDED_USER_WF: `/apis/proxies/v8/workflow/blendedprogram/user/search`,
74
- BLENDED_USER_COUNT: `apis/proxies/v8/workflow/blendedprogram/enrol/status/count`,
75
- CERT_ADD_TEMPLATE: `${PROTECTED_SLAG_V8}/cohorts/course/batch/cert/template/add`,
76
- CERT_ISSUE: `${PROTECTED_SLAG_V8}/cohorts/course/batch/cert/issue`,
77
- CERT_DOWNLOAD: (ɵ2),
78
- READ_KARMAPOINTS: `/apis/proxies/v8/karmapoints/read`,
79
- CONTENT_READ: (ɵ3),
80
- READ_COURSE_KARMAPOINTS: '/apis/proxies/v8/karmapoints/user/course/read',
81
- CLAIM_KARMAPOINTS: '/apis/proxies/v8/claimkarmapoints',
82
- USER_KARMA_POINTS: '/apis/proxies/v8/user/totalkarmapoints',
83
- AGGREGATION_SEARCH: '/apis/proxies/v8/content/aggregation/search',
84
- FEATURE_SEARCH: '/apis/proxies/v8/featured/content/search',
85
- };
86
- export class WidgetContentService {
87
- /**
88
- * @param {?} http
89
- * @param {?} configSvc
90
- */
91
- constructor(http, configSvc) {
92
- this.http = http;
93
- this.configSvc = configSvc;
94
- this.tocConfigData = new BehaviorSubject({});
95
- this.tocConfigData$ = this.tocConfigData.asObservable();
96
- this.telemetryData = new Subject();
97
- this.telemetryData$ = this.telemetryData.asObservable();
98
- this.programChildCourseResumeData = new BehaviorSubject({});
99
- this.programChildCourseResumeData$ = this.programChildCourseResumeData.asObservable();
100
- }
101
- /**
102
- * @param {?} message
103
- * @return {?}
104
- */
105
- changeTelemetryData(message) {
106
- this.telemetryData.next(message);
107
- }
108
- /**
109
- * @param {?} primaryCategory
110
- * @return {?}
111
- */
112
- isResource(primaryCategory) {
113
- if (primaryCategory) {
114
- /** @type {?} */
115
- const isResource = (primaryCategory === NsContent.EResourcePrimaryCategories.LEARNING_RESOURCE) ||
116
- (primaryCategory === NsContent.EResourcePrimaryCategories.PRACTICE_RESOURCE) ||
117
- (primaryCategory === NsContent.EResourcePrimaryCategories.FINAL_ASSESSMENT) ||
118
- (primaryCategory === NsContent.EResourcePrimaryCategories.COMP_ASSESSMENT) ||
119
- (primaryCategory === NsContent.EResourcePrimaryCategories.OFFLINE_SESSION);
120
- return isResource;
121
- }
122
- return false;
123
- }
124
- /**
125
- * @param {?} identifier
126
- * @return {?}
127
- */
128
- fetchMarkAsCompleteMeta(identifier) {
129
- // tslint:disable-next-line
130
- /** @type {?} */
131
- const url = API_END_POINTS.MARK_AS_COMPLETE_META(identifier)
132
- // return this.http.get(url).toPromise()
133
- ;
134
- // return this.http.get(url).toPromise()
135
- if (url) { }
136
- return of().toPromise();
137
- }
138
- /**
139
- * @param {?} data
140
- * @return {?}
141
- */
142
- updateTocConfig(data) {
143
- this.tocConfigData.next(data);
144
- }
145
- /**
146
- * @param {?} contentId
147
- * @param {?=} hierarchyType
148
- * @param {?=} _additionalFields
149
- * @param {?=} primaryCategory
150
- * @return {?}
151
- */
152
- fetchContent(contentId, hierarchyType = 'detail', _additionalFields = [], primaryCategory) {
153
- // const url = `${API_END_POINTS.CONTENT}/${contentId}?hierarchyType=${hierarchyType}`
154
- /** @type {?} */
155
- let url = '';
156
- /** @type {?} */
157
- const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
158
- if (primaryCategory && this.isResource(primaryCategory)) {
159
- if (!forPreview) {
160
- url = `/apis/proxies/v8/action/content/v3/read/${contentId}`;
161
- }
162
- else {
163
- url = `/api/content/v1/read/${contentId}`;
164
- }
165
- }
166
- else {
167
- if (!forPreview) {
168
- url = `/apis/proxies/v8/action/content/v3/hierarchy/${contentId}?hierarchyType=${hierarchyType}`;
169
- }
170
- else {
171
- /** @type {?} */
172
- const forcreator = window.location.href.includes('editMode=true');
173
- if (forcreator) {
174
- url = `apis/proxies/v8/action/content/v3/hierarchy/${contentId}?mode=edit`;
175
- }
176
- else {
177
- url = `/api/course/v1/hierarchy/${contentId}?hierarchyType=${hierarchyType}`;
178
- }
179
- }
180
- }
181
- // return this.http
182
- // .post<NsContent.IContent>(url, { additionalFields })
183
- // .pipe(retry(1))
184
- return this.http
185
- .get(url)
186
- .pipe(shareReplay(1));
187
- // if (apiData && apiData.result) {
188
- // return apiData.result.content
189
- // }
190
- }
191
- /**
192
- * @param {?} contentId
193
- * @return {?}
194
- */
195
- fetchAuthoringContent(contentId) {
196
- /** @type {?} */
197
- const forcreator = window.location.href.includes('editMode=true');
198
- /** @type {?} */
199
- let url = '';
200
- if (forcreator) {
201
- url = `apis/proxies/v8/action/content/v3/hierarchy/${contentId}?mode=edit`;
202
- }
203
- else {
204
- url = `${API_END_POINTS.AUTHORING_CONTENT}/${contentId}?hierarchyType=detail`;
205
- }
206
- return this.http.get(url).pipe(shareReplay(1), (/**
207
- * @param {?} r
208
- * @return {?}
209
- */
210
- r => r));
211
- }
212
- /**
213
- * @param {?} ids
214
- * @return {?}
215
- */
216
- fetchMultipleContent(ids) {
217
- return this.http.get(`${API_END_POINTS.MULTIPLE_CONTENT}/${ids.join(',')}`);
218
- }
219
- /**
220
- * @param {?} type
221
- * @param {?} id
222
- * @param {?=} pageNumber
223
- * @param {?=} pageSize
224
- * @return {?}
225
- */
226
- fetchCollectionHierarchy(type, id, pageNumber = 0, pageSize = 1) {
227
- return this.http.get(`${API_END_POINTS.COLLECTION_HIERARCHY(type, id)}?pageNumber=${pageNumber}&pageSize=${pageSize}`);
228
- }
229
- /**
230
- * @return {?}
231
- */
232
- fetchBlendedCourse() {
233
- }
234
- /**
235
- * @param {?} req
236
- * @return {?}
237
- */
238
- fetchCourseBatches(req) {
239
- return this.http
240
- .post(API_END_POINTS.COURSE_BATCH_LIST, req)
241
- .pipe(retry(1), map((/**
242
- * @param {?} data
243
- * @return {?}
244
- */
245
- (data) => data.result.response)));
246
- }
247
- // fetch individual batch
248
- /**
249
- * @param {?} batchId
250
- * @return {?}
251
- */
252
- fetchCourseBatch(batchId) {
253
- return this.http.get(`${API_END_POINTS.COURSE_BATCH}/${batchId}`);
254
- }
255
- /**
256
- * @param {?} identifier
257
- * @return {?}
258
- */
259
- autoAssignBatchApi(identifier) {
260
- return this.http.get(`${API_END_POINTS.AUTO_ASSIGN_BATCH}${identifier}`)
261
- .pipe(retry(1), map((/**
262
- * @param {?} data
263
- * @return {?}
264
- */
265
- (data) => data.result.response)));
266
- }
267
- /**
268
- * @param {?} request
269
- * @param {?} programType
270
- * @return {?}
271
- */
272
- autoAssignCuratedBatchApi(request, programType) {
273
- /** @type {?} */
274
- const url = programType === NsContent.ECourseCategory.MODERATED_PROGRAM ?
275
- API_END_POINTS.AUTO_ASSIGN_OPEN_PROGRAM : API_END_POINTS.AUTO_ASSIGN_CURATED_BATCH;
276
- return this.http.post(`${url}`, request)
277
- .pipe(retry(1), map((/**
278
- * @param {?} data
279
- * @return {?}
280
- */
281
- (data) => data.result.response)));
282
- }
283
- /**
284
- * @param {?} req
285
- * @return {?}
286
- */
287
- enrollUserToBatch(req) {
288
- return this.http
289
- .post(API_END_POINTS.ENROLL_BATCH, req)
290
- .toPromise();
291
- }
292
- /**
293
- * @param {?} req
294
- * @param {?} type
295
- * @return {?}
296
- */
297
- enrollAndUnenrollUserToBatchWF(req, type) {
298
- /** @type {?} */
299
- const url = type === 'WITHDRAW' ? API_END_POINTS.WITHDRAW_BATCH_WF : API_END_POINTS.ENROLL_BATCH_WF;
300
- return this.http
301
- .post(url, req)
302
- .toPromise();
303
- }
304
- /**
305
- * @param {?} req
306
- * @return {?}
307
- */
308
- fetchBlendedUserWF(req) {
309
- return this.http
310
- .post(API_END_POINTS.BLENDED_USER_WF, req)
311
- .toPromise();
312
- }
313
- /**
314
- * @param {?} req
315
- * @return {?}
316
- */
317
- fetchBlendedUserCOUNT(req) {
318
- return this.http
319
- .post(API_END_POINTS.BLENDED_USER_COUNT, req)
320
- .toPromise();
321
- }
322
- /**
323
- * @param {?} contentIds
324
- * @return {?}
325
- */
326
- fetchContentLikes(contentIds) {
327
- return this.http
328
- .post(API_END_POINTS.CONTENT_LIKES, contentIds)
329
- .toPromise();
330
- }
331
- /**
332
- * @param {?} contentIds
333
- * @return {?}
334
- */
335
- fetchContentRatings(contentIds) {
336
- if (contentIds) { }
337
- // return this.http
338
- // .post(`${API_END_POINTS.CONTENT_RATING}/rating`, contentIds)
339
- // .toPromise()
340
- return of().toPromise();
341
- }
342
- /**
343
- * @param {?} contentId
344
- * @return {?}
345
- */
346
- fetchContentHistory(contentId) {
347
- return this.http.get(`${API_END_POINTS.CONTENT_HISTORY}/${contentId}`);
348
- }
349
- /**
350
- * @param {?} req
351
- * @return {?}
352
- */
353
- fetchContentHistoryV2(req) {
354
- req.request.fields = ['progressdetails'];
355
- /** @type {?} */
356
- const data = this.http.post(`${API_END_POINTS.CONTENT_HISTORYV2}/${req.request.courseId}`, req);
357
- data.subscribe((/**
358
- * @param {?} subscribeData
359
- * @return {?}
360
- */
361
- (subscribeData) => {
362
- this.programChildCourseResumeData.next({ resumeData: subscribeData.result.contentList, courseId: req.request.courseId });
363
- }));
364
- return data;
365
- }
366
- /**
367
- * @param {?} id
368
- * @param {?=} collectionId
369
- * @param {?=} collectionType
370
- * @return {?}
371
- */
372
- continueLearning(id, collectionId, collectionType) {
373
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
374
- return new Promise((/**
375
- * @param {?} resolve
376
- * @return {?}
377
- */
378
- (resolve) => tslib_1.__awaiter(this, void 0, void 0, function* () {
379
- if (collectionType &&
380
- collectionType.toLowerCase() === 'playlist') {
381
- /** @type {?} */
382
- const reqBody = {
383
- contextPathId: collectionId ? collectionId : id,
384
- resourceId: id,
385
- data: JSON.stringify({
386
- timestamp: Date.now(),
387
- contextFullPath: [collectionId, id],
388
- }),
389
- dateAccessed: Date.now(),
390
- contextType: 'playlist',
391
- };
392
- yield this.saveContinueLearning(reqBody).toPromise().catch().finally((/**
393
- * @return {?}
394
- */
395
- () => {
396
- resolve(true);
397
- }));
398
- }
399
- else {
400
- /** @type {?} */
401
- const reqBody = {
402
- contextPathId: collectionId ? collectionId : id,
403
- resourceId: id,
404
- data: JSON.stringify({ timestamp: Date.now() }),
405
- dateAccessed: Date.now(),
406
- };
407
- yield this.saveContinueLearning(reqBody).toPromise().catch().finally((/**
408
- * @return {?}
409
- */
410
- () => {
411
- resolve(true);
412
- }));
413
- }
414
- })));
415
- });
416
- }
417
- /**
418
- * @param {?} content
419
- * @return {?}
420
- */
421
- saveContinueLearning(content) {
422
- // const url = API_END_POINTS.USER_CONTINUE_LEARNING
423
- // return this.http.post<any>(url, content)
424
- if (content) {
425
- }
426
- return (/** @type {?} */ (of()));
427
- }
428
- /**
429
- * @param {?} _contentId
430
- * @return {?}
431
- */
432
- setS3Cookie(_contentId) {
433
- // return this.http
434
- // .post(API_END_POINTS.SET_S3_COOKIE, { contentId })
435
- // .pipe(catchError(_err => of(true)))
436
- return EMPTY;
437
- }
438
- /**
439
- * @return {?}
440
- */
441
- setS3ImageCookie() {
442
- return this.http.post(API_END_POINTS.SET_S3_IMAGE_COOKIE, {}).pipe(catchError((/**
443
- * @param {?} _err
444
- * @return {?}
445
- */
446
- _err => of(true))));
447
- }
448
- /**
449
- * @param {?} url
450
- * @return {?}
451
- */
452
- fetchManifest(url) {
453
- return this.http.post(API_END_POINTS.FETCH_MANIFEST, { url });
454
- }
455
- /**
456
- * @param {?} url
457
- * @return {?}
458
- */
459
- fetchWebModuleContent(url) {
460
- return this.http.get(`${API_END_POINTS.FETCH_WEB_MODULE_FILES}?url=${encodeURIComponent(url)}`);
461
- }
462
- /**
463
- * @param {?} req
464
- * @return {?}
465
- */
466
- search(req) {
467
- req.query = req.query || '';
468
- return this.http.post(API_END_POINTS.CONTENT_SEARCH_V5, {
469
- request: req,
470
- });
471
- }
472
- /**
473
- * @param {?} req
474
- * @return {?}
475
- */
476
- searchRegionRecommendation(req) {
477
- req.query = req.query || '';
478
- req.preLabelValue =
479
- (req.preLabelValue || '') +
480
- ((this.configSvc.userProfile && this.configSvc.userProfile.country) || '');
481
- req.filters = Object.assign({}, req.filters, { labels: [req.preLabelValue || ''] });
482
- return this.http.post(API_END_POINTS.CONTENT_SEARCH_REGION_RECOMMENDATION, { request: req });
483
- }
484
- /**
485
- * @param {?} req
486
- * @return {?}
487
- */
488
- searchV6(req) {
489
- /** @type {?} */
490
- const apiPath = _.get(req, 'api.path');
491
- req.query = req.query || '';
492
- if (apiPath) {
493
- return this.http.get(apiPath);
494
- }
495
- return this.http.post(API_END_POINTS.CONTENT_SEARCH_V6, req);
496
- }
497
- /**
498
- * @param {?} req
499
- * @return {?}
500
- */
501
- searchRelatedCBPV6(req) {
502
- return this.http.post(API_END_POINTS.CONTENT_SEARCH_RELATED_CBP_V6, req);
503
- }
504
- /**
505
- * @param {?} contentId
506
- * @return {?}
507
- */
508
- fetchContentRating(contentId) {
509
- return this.http.get(`${API_END_POINTS.CONTENT_RATING}/${contentId}`);
510
- }
511
- /**
512
- * @param {?} contentId
513
- * @return {?}
514
- */
515
- deleteContentRating(contentId) {
516
- return this.http.delete(`${API_END_POINTS.CONTENT_RATING}/${contentId}`);
517
- }
518
- /**
519
- * @param {?} contentId
520
- * @param {?} data
521
- * @return {?}
522
- */
523
- addContentRating(contentId, data) {
524
- return this.http.post(`${API_END_POINTS.CONTENT_RATING}/${contentId}`, data);
525
- }
526
- /**
527
- * @param {?} content
528
- * @return {?}
529
- */
530
- getFirstChildInHierarchy(content) {
531
- if (!(content.children || []).length) {
532
- return content;
533
- }
534
- if ((content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM &&
535
- !(content.artifactUrl && content.artifactUrl.length)) ||
536
- content.primaryCategory === NsContent.EPrimaryCategory.MANDATORY_COURSE_GOAL ||
537
- (content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM &&
538
- !(content.artifactUrl && content.artifactUrl.length)) ||
539
- (content.primaryCategory === NsContent.EPrimaryCategory.MODULE &&
540
- !(content.artifactUrl && content.artifactUrl.length))) {
541
- /** @type {?} */
542
- const child = content.children[0];
543
- return this.getFirstChildInHierarchy(child);
544
- }
545
- if (content.primaryCategory === NsContent.EPrimaryCategory.RESOURCE ||
546
- content.primaryCategory === NsContent.EPrimaryCategory.KNOWLEDGE_ARTIFACT ||
547
- content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM ||
548
- content.primaryCategory === NsContent.EPrimaryCategory.PRACTICE_RESOURCE ||
549
- content.primaryCategory === NsContent.EPrimaryCategory.FINAL_ASSESSMENT ||
550
- content.primaryCategory === NsContent.EPrimaryCategory.COMP_ASSESSMENT ||
551
- content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM ||
552
- content.primaryCategory === NsContent.EPrimaryCategory.OFFLINE_SESSION) {
553
- return content;
554
- }
555
- /** @type {?} */
556
- const firstChild = content.children[0];
557
- /** @type {?} */
558
- const resultContent = this.getFirstChildInHierarchy(firstChild);
559
- return resultContent;
560
- }
561
- /**
562
- * @param {?} source
563
- * @return {?}
564
- */
565
- getRegistrationStatus(source) {
566
- return this.http.get(`${API_END_POINTS.REGISTRATION_STATUS}/${source}`).toPromise();
567
- }
568
- /**
569
- * @param {?} url
570
- * @return {?}
571
- */
572
- fetchConfig(url) {
573
- return this.http.get(url);
574
- }
575
- /**
576
- * @param {?} body
577
- * @return {?}
578
- */
579
- addCertTemplate(body) {
580
- return this.http.patch(`${API_END_POINTS.CERT_ADD_TEMPLATE}`, body);
581
- }
582
- /**
583
- * @param {?} body
584
- * @return {?}
585
- */
586
- issueCert(body) {
587
- return this.http.post(`${API_END_POINTS.CERT_ISSUE}`, body);
588
- }
589
- /**
590
- * @param {?} certId
591
- * @return {?}
592
- */
593
- downloadCert(certId) {
594
- return this.http.get(`${API_END_POINTS.CERT_DOWNLOAD(certId)}`);
595
- }
596
- /**
597
- * @param {?} req
598
- * @return {?}
599
- */
600
- trendingContentSearch(req) {
601
- req.query = req.query || '';
602
- return this.http.post(API_END_POINTS.TRENDING_CONTENT_SEARCH, req);
603
- }
604
- /**
605
- * @param {?} limit
606
- * @param {?} offset
607
- * @return {?}
608
- */
609
- getKarmaPoitns(limit, offset) {
610
- return this.http.post(API_END_POINTS.READ_KARMAPOINTS, { limit, offset }).pipe(catchError((/**
611
- * @param {?} _err
612
- * @return {?}
613
- */
614
- _err => of(true))));
615
- }
616
- /**
617
- * @param {?} contentId
618
- * @return {?}
619
- */
620
- fetchProgramContent(contentId) {
621
- /** @type {?} */
622
- let url = '';
623
- /** @type {?} */
624
- const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
625
- if (!forPreview) {
626
- return this.http.get(API_END_POINTS.CONTENT_READ(contentId));
627
- }
628
- url = `/api/content/v1/read/${contentId}`;
629
- return this.http.get(url);
630
- // return this.http.get<NsContent.IContent[]>(API_END_POINTS.CONTENT_READ(contentId))
631
- }
632
- /**
633
- * @param {?} request
634
- * @return {?}
635
- */
636
- getCourseKarmaPoints(request) {
637
- return this.http.post(API_END_POINTS.READ_COURSE_KARMAPOINTS, request);
638
- }
639
- /**
640
- * @param {?} request
641
- * @return {?}
642
- */
643
- claimKarmapoints(request) {
644
- return this.http.post(API_END_POINTS.CLAIM_KARMAPOINTS, request);
645
- }
646
- /**
647
- * @return {?}
648
- */
649
- userKarmaPoints() {
650
- return this.http.post(API_END_POINTS.USER_KARMA_POINTS, {});
651
- }
652
- /**
653
- * @param {?} doId
654
- * @return {?}
655
- */
656
- getEnrolledData(doId) {
657
- /** @type {?} */
658
- const enrollmentMapData = JSON.parse(localStorage.getItem('enrollmentMapData') || '{}');
659
- /** @type {?} */
660
- const enrolledCourseData = enrollmentMapData[doId];
661
- return enrolledCourseData;
662
- }
663
- /**
664
- * @param {?} content
665
- * @return {?}
666
- */
667
- getResourseLink(content) {
668
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
669
- /** @type {?} */
670
- const enrolledCourseData = this.getEnrolledData(content.identifier);
671
- if (enrolledCourseData) {
672
- if (enrolledCourseData.content.courseCategory === NsContent.ECourseCategory.BLENDED_PROGRAM ||
673
- enrolledCourseData.content.courseCategory === NsContent.ECourseCategory.INVITE_ONLY_PROGRAM ||
674
- enrolledCourseData.content.courseCategory === NsContent.ECourseCategory.MODERATED_PROGRAM ||
675
- enrolledCourseData.content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM ||
676
- enrolledCourseData.content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM) {
677
- if (!this.isBatchInProgress(enrolledCourseData.batch)) {
678
- return this.gotoTocPage(content);
679
- }
680
- /** @type {?} */
681
- const data = yield this.checkForDataToFormUrl(content, enrolledCourseData);
682
- return data;
683
- }
684
- {
685
- /** @type {?} */
686
- const data = yield this.checkForDataToFormUrl(content, enrolledCourseData);
687
- return data;
688
- }
689
- }
690
- return this.gotoTocPage(content);
691
- });
692
- }
693
- /**
694
- * @param {?} content
695
- * @param {?} enrollData
696
- * @return {?}
697
- */
698
- checkForDataToFormUrl(content, enrollData) {
699
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
700
- /** @type {?} */
701
- let urlData;
702
- if (enrollData.completionPercentage === 100) {
703
- return this.gotoTocPage(enrollData);
704
- }
705
- if (enrollData.lrcProgressDetails && enrollData.lrcProgressDetails.mimeType) {
706
- /** @type {?} */
707
- const modifyEnrollData = Object.assign({}, enrollData, { identifier: enrollData.collectionId, primaryCategory: enrollData.content.primaryCategory, name: enrollData.content.name });
708
- if (modifyEnrollData.lastReadContentId) {
709
- return this.getResourseDataWithData(modifyEnrollData, enrollData.lastReadContentId, enrollData.lrcProgressDetails.mimeType);
710
- }
711
- if (modifyEnrollData.firstChildId) {
712
- return this.getResourseDataWithData(modifyEnrollData, enrollData.firstChildId, enrollData.lrcProgressDetails.mimeType);
713
- }
714
- }
715
- if (enrollData.firstChildId || enrollData.lastReadContentId) {
716
- /** @type {?} */
717
- const doId = enrollData.firstChildId || enrollData.lastReadContentId;
718
- /** @type {?} */
719
- const responseData = yield this.fetchProgramContent(doId).toPromise().then((/**
720
- * @param {?} res
721
- * @return {?}
722
- */
723
- (res) => tslib_1.__awaiter(this, void 0, void 0, function* () {
724
- if (res && res.result && res.result.content) {
725
- /** @type {?} */
726
- const contentData = res.result.content;
727
- /** @type {?} */
728
- const modifyEnrollData = Object.assign({}, enrollData, { identifier: enrollData.collectionId, primaryCategory: enrollData.content.primaryCategory, name: enrollData.content.name });
729
- urlData = this.getResourseDataWithData(modifyEnrollData, contentData.identifier, contentData.mimeType);
730
- if (urlData) {
731
- return urlData;
732
- }
733
- }
734
- })));
735
- return responseData ? responseData : this.gotoTocPage(content);
736
- }
737
- return this.gotoTocPage(content);
738
- });
739
- }
740
- /**
741
- * @param {?} content
742
- * @param {?} resourseId
743
- * @param {?} mimeType
744
- * @return {?}
745
- */
746
- getResourseDataWithData(content, resourseId, mimeType) {
747
- if (content) {
748
- /** @type {?} */
749
- const url = viewerRouteGenerator(resourseId, mimeType, content.identifier, 'Course', false, 'Learning Resource', content.batchId, content.name);
750
- return url;
751
- }
752
- return this.gotoTocPage(content);
753
- }
754
- /**
755
- * @param {?} content
756
- * @return {?}
757
- */
758
- gotoTocPage(content) {
759
- /** @type {?} */
760
- const urlData = {
761
- url: `/app/toc/${content.identifier ? content.identifier : content.collectionId}/overview`,
762
- queryParams: { batchId: content.batchId },
763
- };
764
- if (content.endDate) {
765
- urlData.queryParams = Object.assign({}, urlData.queryParams, { planType: 'cbPlan', endDate: content.endDate });
766
- }
767
- return urlData;
768
- }
769
- /**
770
- * @param {?} batchData
771
- * @return {?}
772
- */
773
- isBatchInProgress(batchData) {
774
- // if (this.content && this.content['batches']) {
775
- // const batches = this.content['batches'] as NsContent.IBatch
776
- if (batchData && batchData.endDate) {
777
- /** @type {?} */
778
- const now = moment().format('YYYY-MM-DD');
779
- /** @type {?} */
780
- const startDate = moment(batchData.startDate).format('YYYY-MM-DD');
781
- /** @type {?} */
782
- const endDate = batchData.endDate ? moment(batchData.endDate).format('YYYY-MM-DD') : now;
783
- return (
784
- // batch.status &&
785
- moment(startDate).isSameOrBefore(now)
786
- && moment(endDate).isSameOrAfter(now));
787
- }
788
- return true;
789
- }
790
- /**
791
- * @param {?} apiUrl
792
- * @param {?} req
793
- * @return {?}
794
- */
795
- postApiMethod(apiUrl, req) {
796
- return this.http.post(apiUrl, req);
797
- }
798
- /**
799
- * @param {?} apiUrl
800
- * @return {?}
801
- */
802
- getApiMethod(apiUrl) {
803
- // req.query = req.query || '';
804
- return this.http.get(apiUrl);
805
- }
806
- }
807
- WidgetContentService.decorators = [
808
- { type: Injectable, args: [{
809
- providedIn: 'root',
810
- },] }
811
- ];
812
- /** @nocollapse */
813
- WidgetContentService.ctorParameters = () => [
814
- { type: HttpClient },
815
- { type: ConfigurationsService }
816
- ];
817
- /** @nocollapse */ WidgetContentService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function WidgetContentService_Factory() { return new WidgetContentService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.ConfigurationsService)); }, token: WidgetContentService, providedIn: "root" });
818
- if (false) {
819
- /** @type {?} */
820
- WidgetContentService.prototype.tocConfigData;
821
- /** @type {?} */
822
- WidgetContentService.prototype.tocConfigData$;
823
- /**
824
- * @type {?}
825
- * @private
826
- */
827
- WidgetContentService.prototype.telemetryData;
828
- /** @type {?} */
829
- WidgetContentService.prototype.telemetryData$;
830
- /** @type {?} */
831
- WidgetContentService.prototype.currentMetaData;
832
- /** @type {?} */
833
- WidgetContentService.prototype.currentContentReadMetaData;
834
- /** @type {?} */
835
- WidgetContentService.prototype.currentBatchEnrollmentList;
836
- /** @type {?} */
837
- WidgetContentService.prototype.programChildCourseResumeData;
838
- /** @type {?} */
839
- WidgetContentService.prototype.programChildCourseResumeData$;
840
- /**
841
- * @type {?}
842
- * @private
843
- */
844
- WidgetContentService.prototype.http;
845
- /**
846
- * @type {?}
847
- * @private
848
- */
849
- WidgetContentService.prototype.configSvc;
850
- }
851
- export { ɵ0, ɵ1, ɵ2, ɵ3 };
852
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbnRlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uLyIsInNvdXJjZXMiOlsibGliL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQUc1RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQTtBQUMzQixPQUFPLEVBQUcsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUMzRCxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQzs7Ozs7TUFDNUIsTUFBTSxHQUFHLE9BQU87Ozs7TUFJaEIsaUJBQWlCLEdBQUcsb0JBQW9COzs7Ozs7QUF5QnRCLENBQUMsSUFBWSxFQUFFLEVBQVUsRUFBRSxFQUFFLENBQ2pELEdBQUcsaUJBQWlCLHVCQUF1QixJQUFJLElBQUksRUFBRSxFQUFFOzs7O0FBRWxDLENBQUMsU0FBaUIsRUFBRSxFQUFFLENBQUMsR0FBRyxpQkFBaUIsa0JBQWtCLFNBQVMsRUFBRTs7OztBQVFoRixDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxpQkFBaUIsdUNBQXVDLE1BQU0sRUFBRTs7OztBQUVyRixDQUFDLFNBQWMsRUFBRSxF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O0lBQ2hCLENBQUM7Ozs7OztJQUNELGFBQWEsQ0FBQyxNQUFXLEVBQUUsR0FBUTtRQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFxQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekQsQ0FBQzs7Ozs7SUFDRCxZQUFZLENBQUMsTUFBVztRQUN0QiwrQkFBK0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQzs7O1lBdGdCRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFoRVEsVUFBVTtZQUVWLHFCQUFxQjs7Ozs7SUFzRTVCLDZDQUFrRDs7SUFDbEQsOENBQW9EOzs7OztJQUVwRCw2Q0FBK0M7O0lBQy9DLDhDQUF5RDs7SUFDekQsK0NBQXFDOztJQUNyQywwREFBZ0Q7O0lBQ2hELDBEQUFpRDs7SUFDakQsNERBQTREOztJQUM1RCw2REFBaUY7Ozs7O0lBZC9FLG9DQUF3Qjs7Ozs7SUFDeEIseUNBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBFTVBUWSwgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCByZXRyeSwgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5zQ29udGVudFN0cmlwTXVsdGlwbGUgfSBmcm9tICcuLi9fbW9kZWxzL2NvbnRlbnQtc3RyaXAtbXVsdGlwbGUubW9kZWwnO1xuaW1wb3J0IHsgTnNDb250ZW50IH0gZnJvbSAnLi4vX21vZGVscy93aWRnZXQtY29udGVudC5tb2RlbCc7XG5pbXBvcnQgeyBOU1NlYXJjaCB9IGZyb20gJy4uL19tb2RlbHMvd2lkZ2V0LXNlYXJjaC5tb2RlbCc7XG4vLyB0c2xpbnQ6ZGlzYWJsZVxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyAgdmlld2VyUm91dGVHZW5lcmF0b3IgfSBmcm9tICcuL3ZpZXdlci1yb3V0ZS11dGlsJ1xuaW1wb3J0ICogYXMgbW9tZW50XyBmcm9tICdtb21lbnQnO1xuY29uc3QgbW9tZW50ID0gbW9tZW50Xztcbi8vIHRzbGludDplbmFibGVcblxuLy8gVE9ETzogbW92ZSB0aGlzIGluIHNvbWUgY29tbW9uIHBsYWNlXG5jb25zdCBQUk9URUNURURfU0xBR19WOCA9ICcvYXBpcy9wcm90ZWN0ZWQvdjgnO1xuXG5jb25zdCBBUElfRU5EX1BPSU5UUyA9IHtcbiAgQ09OVEVOVDogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnRgLFxuICBBVVRIT1JJTkdfQ09OVEVOVDogYC9hcGkvY291cnNlL3YxL2hpZXJhcmNoeWAsXG4gIENPTlRFTlRfTElLRVM6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L2xpa2VDb3VudGAsXG4gIFNFVF9TM19DT09LSUU6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L3NldENvb2tpZWAsXG4gIFNFVF9TM19JTUFHRV9DT09LSUU6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L3NldEltYWdlQ29va2llYCxcbiAgRkVUQ0hfTUFOSUZFU1Q6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L2dldFdlYk1vZHVsZU1hbmlmZXN0YCxcbiAgRkVUQ0hfV0VCX01PRFVMRV9GSUxFUzogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvZ2V0V2ViTW9kdWxlRmlsZXNgLFxuICBNVUxUSVBMRV9DT05URU5UOiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudC9tdWx0aXBsZWAsXG4gIENPTlRFTlRfU0VBUkNIX1Y1OiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudC9zZWFyY2hWNWAsXG4gIENPTlRFTlRfU0VBUkNIX1Y2OiBgL2FwaXMvcHJveGllcy92OC9zdW5iaXJkaWdvdC9zZWFyY2hgLFxuICBUUkVORElOR19DT05URU5UX1NFQVJDSDogYGFwaXMvcHJveGllcy92OC90cmVuZGluZy9jb250ZW50L3NlYXJjaGAsXG4gIENPTlRFTlRfU0VBUkNIX1JFTEFURURfQ0JQX1Y2OiBgL2FwaXMvcHJveGllcy92OC9zdW5iaXJkaWdvdC9zZWFyY2hgLFxuICBDT05URU5UX1NFQVJDSF9SRUdJT05fUkVDT01NRU5EQVRJT046IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L3NlYXJjaFJlZ2lvblJlY29tbWVuZGF0aW9uYCxcbiAgQ09OVEVOVF9ISVNUT1JZOiBgJHtQUk9URUNURURfU0xBR19WOH0vdXNlci9oaXN0b3J5YCxcbiAgQ09OVEVOVF9ISVNUT1JZVjI6IGAvYXBpcy9wcm94aWVzL3Y4L3JlYWQvY29udGVudC1wcm9ncmVzYCxcbiAgQ09VUlNFX0JBVENIX0xJU1Q6IGAvYXBpcy9wcm94aWVzL3Y4L2xlYXJuZXIvY291cnNlL3YxL2JhdGNoL2xpc3RgLFxuICBDT1VSU0VfQkFUQ0g6IGAvYXBpcy9wcm94aWVzL3Y4L2NvdXJzZS92MS9iYXRjaC9yZWFkYCxcbiAgQVVUT19BU1NJR05fQkFUQ0g6IGAvYXBpcy9wcm90ZWN0ZWQvdjgvY29ob3J0cy91c2VyL2F1dG9lbnJvbGxtZW50L2AsXG4gIEFVVE9fQVNTSUdOX0NVUkFURURfQkFUQ0g6IGAvYXBpcy9wcm94aWVzL3Y4L2N1cmF0ZWRwcm9ncmFtL3YxL2Vucm9sYCxcbiAgQVVUT19BU1NJR05fT1BFTl9QUk9HUkFNOiBgL2FwaXMvcHJveGllcy92OC9vcGVucHJvZ3JhbS92MS9lbnJvbGAsXG4gIFVTRVJfQ09OVElOVUVfTEVBUk5JTkc6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS91c2VyL2hpc3RvcnkvY29udGludWVgLFxuICBDT05URU5UX1JBVElORzogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L3VzZXIvcmF0aW5nYCxcbiAgQ09MTEVDVElPTl9ISUVSQVJDSFk6ICh0eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+XG4gICAgYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvY29sbGVjdGlvbi8ke3R5cGV9LyR7aWR9YCxcbiAgUkVHSVNUUkFUSU9OX1NUQVRVUzogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2FkbWluL3VzZXJSZWdpc3RyYXRpb24vY2hlY2tVc2VyUmVnaXN0cmF0aW9uQ29udGVudGAsXG4gIE1BUktfQVNfQ09NUExFVEVfTUVUQTogKGNvbnRlbnRJZDogc3RyaW5nKSA9PiBgJHtQUk9URUNURURfU0xBR19WOH0vdXNlci9wcm9ncmVzcy8ke2NvbnRlbnRJZH1gLFxuICBFTlJPTExfQkFUQ0g6IGAvYXBpcy9wcm94aWVzL3Y4L2xlYXJuZXIvY291cnNlL3YxL2Vucm9sYCxcbiAgRU5ST0xMX0JBVENIX1dGOiBgL2FwaXMvcHJveGllcy92OC93b3JrZmxvdy9ibGVuZGVkcHJvZ3JhbS9lbnJvbGAsXG4gIFdJVEhEUkFXX0JBVENIX1dGOiBgL2FwaXMvcHJveGllcy92OC93b3JrZmxvdy9ibGVuZGVkcHJvZ3JhbS91bmVucm9sYCxcbiAgQkxFTkRFRF9VU0VSX1dGOiBgL2FwaXMvcHJveGllcy92OC93b3JrZmxvdy9ibGVuZGVkcHJvZ3JhbS91c2VyL3NlYXJjaGAsXG4gIEJMRU5ERURfVVNFUl9DT1VOVDogYGFwaXMvcHJveGllcy92OC93b3JrZmxvdy9ibGVuZGVkcHJvZ3JhbS9lbnJvbC9zdGF0dXMvY291bnRgLFxuICBDRVJUX0FERF9URU1QTEFURTogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvaG9ydHMvY291cnNlL2JhdGNoL2NlcnQvdGVtcGxhdGUvYWRkYCxcbiAgQ0VSVF9JU1NVRTogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvaG9ydHMvY291cnNlL2JhdGNoL2NlcnQvaXNzdWVgLFxuICBDRVJUX0RPV05MT0FEOiAoY2VydElkOiBhbnkpID0+IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb2hvcnRzL2NvdXJzZS9iYXRjaC9jZXJ0L2Rvd25sb2FkLyR7Y2VydElkfWAsXG4gIFJFQURfS0FSTUFQT0lOVFM6IGAvYXBpcy9wcm94aWVzL3Y4L2thcm1hcG9pbnRzL3JlYWRgLFxuICBDT05URU5UX1JFQUQ6IChjb250ZW50SWQ6IGFueSkgPT4gYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvcmVhZC8ke2NvbnRlbnRJZH1gLFxuICBSRUFEX0NPVVJTRV9LQVJNQVBPSU5UUzogJy9hcGlzL3Byb3hpZXMvdjgva2FybWFwb2ludHMvdXNlci9jb3Vyc2UvcmVhZCcsXG4gIENMQUlNX0tBUk1BUE9JTlRTOiAnL2FwaXMvcHJveGllcy92OC9jbGFpbWthcm1hcG9pbnRzJyxcbiAgVVNFUl9LQVJNQV9QT0lOVFM6ICcvYXBpcy9wcm94aWVzL3Y4L3VzZXIvdG90YWxrYXJtYXBvaW50cycsXG4gIEFHR1JFR0FUSU9OX1NFQVJDSDogJy9hcGlzL3Byb3hpZXMvdjgvY29udGVudC9hZ2dyZWdhdGlvbi9zZWFyY2gnLFxuICBGRUFUVVJFX1NFQVJDSDogJy9hcGlzL3Byb3hpZXMvdjgvZmVhdHVyZWQvY29udGVudC9zZWFyY2gnLFxufTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldENvbnRlbnRTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgY29uZmlnU3ZjOiBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gICkge1xuICB9XG5cbiAgdG9jQ29uZmlnRGF0YTogYW55ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt9KTtcbiAgdG9jQ29uZmlnRGF0YSQgID0gdGhpcy50b2NDb25maWdEYXRhLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgdGVsZW1ldHJ5RGF0YTogYW55ID0gbmV3IFN1YmplY3Q8YW55PigpXG4gIHB1YmxpYyB0ZWxlbWV0cnlEYXRhJCA9IHRoaXMudGVsZW1ldHJ5RGF0YS5hc09ic2VydmFibGUoKVxuICBjdXJyZW50TWV0YURhdGEhOiBOc0NvbnRlbnQuSUNvbnRlbnQ7XG4gIGN1cnJlbnRDb250ZW50UmVhZE1ldGFEYXRhITogTnNDb250ZW50LklDb250ZW50O1xuICBjdXJyZW50QmF0Y2hFbnJvbGxtZW50TGlzdCE6IE5zQ29udGVudC5JQ291cnNlW107XG4gIHByb2dyYW1DaGlsZENvdXJzZVJlc3VtZURhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xuICBwcm9ncmFtQ2hpbGRDb3Vyc2VSZXN1bWVEYXRhJCA9IHRoaXMucHJvZ3JhbUNoaWxkQ291cnNlUmVzdW1lRGF0YS5hc09ic2VydmFibGUoKTtcblxuICBjaGFuZ2VUZWxlbWV0cnlEYXRhKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMudGVsZW1ldHJ5RGF0YS5uZXh0KG1lc3NhZ2UpO1xuICB9XG4gIGlzUmVzb3VyY2UocHJpbWFyeUNhdGVnb3J5OiBzdHJpbmcpIHtcbiAgICBpZiAocHJpbWFyeUNhdGVnb3J5KSB7XG4gICAgICBjb25zdCBpc1Jlc291cmNlID0gKHByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVSZXNvdXJjZVByaW1hcnlDYXRlZ29yaWVzLkxFQVJOSU5HX1JFU09VUkNFKSB8fFxuICAgICAgICAocHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVJlc291cmNlUHJpbWFyeUNhdGVnb3JpZXMuUFJBQ1RJQ0VfUkVTT1VSQ0UpIHx8XG4gICAgICAgIChwcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUmVzb3VyY2VQcmltYXJ5Q2F0ZWdvcmllcy5GSU5BTF9BU1NFU1NNRU5UKSB8fFxuICAgICAgICAocHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVJlc291cmNlUHJpbWFyeUNhdGVnb3JpZXMuQ09NUF9BU1NFU1NNRU5UKSB8fFxuICAgICAgICAocHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVJlc291cmNlUHJpbWFyeUNhdGVnb3JpZXMuT0ZGTElORV9TRVNTSU9OKTtcbiAgICAgIHJldHVybiBpc1Jlc291cmNlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmZXRjaE1hcmtBc0NvbXBsZXRlTWV0YShpZGVudGlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgIGNvbnN0IHVybCA9IEFQSV9FTkRfUE9JTlRTLk1BUktfQVNfQ09NUExFVEVfTUVUQShpZGVudGlmaWVyKVxuICAgIC8vIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCkudG9Qcm9taXNlKClcbiAgICBpZiAodXJsKSB7IH1cbiAgICByZXR1cm4gb2YoKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHVwZGF0ZVRvY0NvbmZpZyhkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnRvY0NvbmZpZ0RhdGEubmV4dChkYXRhKTtcbiAgfVxuXG4gIGZldGNoQ29udGVudChcbiAgICBjb250ZW50SWQ6IHN0cmluZyxcbiAgICBoaWVyYXJjaHlUeXBlOiAnYWxsJyB8ICdtaW5pbWFsJyB8ICdkZXRhaWwnID0gJ2RldGFpbCcsXG4gICAgX2FkZGl0aW9uYWxGaWVsZHM6IHN0cmluZ1tdID0gW10sXG4gICAgcHJpbWFyeUNhdGVnb3J5Pzogc3RyaW5nIHwgbnVsbCxcbiAgKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRlbnQ+IHtcbiAgICAvLyBjb25zdCB1cmwgPSBgJHtBUElfRU5EX1BPSU5UUy5DT05URU5UfS8ke2NvbnRlbnRJZH0/aGllcmFyY2h5VHlwZT0ke2hpZXJhcmNoeVR5cGV9YFxuICAgIGxldCB1cmwgPSAnJztcbiAgICBjb25zdCBmb3JQcmV2aWV3ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJyZwcmV2aWV3PXRydWUnKTtcbiAgICBpZiAocHJpbWFyeUNhdGVnb3J5ICYmIHRoaXMuaXNSZXNvdXJjZShwcmltYXJ5Q2F0ZWdvcnkpKSB7XG4gICAgICBpZiAoIWZvclByZXZpZXcpIHtcbiAgICAgICAgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvcmVhZC8ke2NvbnRlbnRJZH1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsID0gYC9hcGkvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZm9yUHJldmlldykge1xuICAgICAgICB1cmwgPSBgL2FwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9oaWVyYXJjaHkvJHtjb250ZW50SWR9P2hpZXJhcmNoeVR5cGU9JHtoaWVyYXJjaHlUeXBlfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmb3JjcmVhdG9yID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2VkaXRNb2RlPXRydWUnKTtcbiAgICAgICAgaWYgKGZvcmNyZWF0b3IpIHtcbiAgICAgICAgICB1cmwgPSBgYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/bW9kZT1lZGl0YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cmwgPSBgL2FwaS9jb3Vyc2UvdjEvaGllcmFyY2h5LyR7Y29udGVudElkfT9oaWVyYXJjaHlUeXBlPSR7aGllcmFyY2h5VHlwZX1gO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybiB0aGlzLmh0dHBcbiAgICAvLyAgIC5wb3N0PE5zQ29udGVudC5JQ29udGVudD4odXJsLCB7IGFkZGl0aW9uYWxGaWVsZHMgfSlcbiAgICAvLyAgIC5waXBlKHJldHJ5KDEpKVxuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQ8TnNDb250ZW50LklDb250ZW50Pih1cmwpXG4gICAgICAucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gICAgLy8gaWYgKGFwaURhdGEgJiYgYXBpRGF0YS5yZXN1bHQpIHtcbiAgICAvLyAgIHJldHVybiBhcGlEYXRhLnJlc3VsdC5jb250ZW50XG4gICAgLy8gfVxuICB9XG4gIGZldGNoQXV0aG9yaW5nQ29udGVudChjb250ZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50PiB7XG4gICAgY29uc3QgZm9yY3JlYXRvciA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdlZGl0TW9kZT10cnVlJyk7XG4gICAgbGV0IHVybCA9ICcnO1xuICAgIGlmIChmb3JjcmVhdG9yKSB7XG4gICAgICB1cmwgPSBgYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/bW9kZT1lZGl0YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsID0gYCR7QVBJX0VORF9QT0lOVFMuQVVUSE9SSU5HX0NPTlRFTlR9LyR7Y29udGVudElkfT9oaWVyYXJjaHlUeXBlPWRldGFpbGA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudD4odXJsKS5waXBlKHNoYXJlUmVwbGF5KDEpLCByID0+IHIpO1xuICB9XG4gIGZldGNoTXVsdGlwbGVDb250ZW50KGlkczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50W10+KFxuICAgICAgYCR7QVBJX0VORF9QT0lOVFMuTVVMVElQTEVfQ09OVEVOVH0vJHtpZHMuam9pbignLCcpfWAsXG4gICAgKTtcbiAgfVxuICBmZXRjaENvbGxlY3Rpb25IaWVyYXJjaHkodHlwZTogc3RyaW5nLCBpZDogc3RyaW5nLCBwYWdlTnVtYmVyOiBudW1iZXIgPSAwLCBwYWdlU2l6ZTogbnVtYmVyID0gMSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29sbGVjdGlvbkhpZXJhcmNoeVJlc3BvbnNlPihcbiAgICAgIGAke0FQSV9FTkRfUE9JTlRTLkNPTExFQ1RJT05fSElFUkFSQ0hZKFxuICAgICAgICB0eXBlLFxuICAgICAgICBpZCxcbiAgICAgICl9P3BhZ2VOdW1iZXI9JHtwYWdlTnVtYmVyfSZwYWdlU2l6ZT0ke3BhZ2VTaXplfWAsXG4gICAgKTtcbiAgfVxuXG4gIGZldGNoQmxlbmRlZENvdXJzZSgpIHtcblxuICB9XG5cbiAgZmV0Y2hDb3Vyc2VCYXRjaGVzKHJlcTogYW55KTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8TnNDb250ZW50LklCYXRjaExpc3RSZXNwb25zZT4oQVBJX0VORF9QT0lOVFMuQ09VUlNFX0JBVENIX0xJU1QsIHJlcSlcbiAgICAgIC5waXBlKFxuICAgICAgICByZXRyeSgxKSxcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChkYXRhOiBhbnkpID0+IGRhdGEucmVzdWx0LnJlc3BvbnNlXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICAvLyBmZXRjaCBpbmRpdmlkdWFsIGJhdGNoXG4gIGZldGNoQ291cnNlQmF0Y2goYmF0Y2hJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YT4oXG4gICAgICBgJHtBUElfRU5EX1BPSU5UUy5DT1VSU0VfQkFUQ0h9LyR7YmF0Y2hJZH1gLFxuICAgICk7XG4gIH1cblxuICBhdXRvQXNzaWduQmF0Y2hBcGkoaWRlbnRpZmllcjogYW55KTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklCYXRjaExpc3RSZXNwb25zZT4oYCR7QVBJX0VORF9QT0lOVFMuQVVUT19BU1NJR05fQkFUQ0h9JHtpZGVudGlmaWVyfWApXG4gICAgICAucGlwZShcbiAgICAgICAgcmV0cnkoMSksXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoZGF0YTogYW55KSA9PiBkYXRhLnJlc3VsdC5yZXNwb25zZVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgYXV0b0Fzc2lnbkN1cmF0ZWRCYXRjaEFwaShyZXF1ZXN0OiBhbnksIHByb2dyYW1UeXBlOiBhbnkpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2U+IHtcbiAgICBjb25zdCB1cmwgPSBwcm9ncmFtVHlwZSA9PT0gTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5NT0RFUkFURURfUFJPR1JBTSA/XG4gICAgQVBJX0VORF9QT0lOVFMuQVVUT19BU1NJR05fT1BFTl9QUk9HUkFNIDogQVBJX0VORF9QT0lOVFMuQVVUT19BU1NJR05fQ1VSQVRFRF9CQVRDSDtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TnNDb250ZW50LklCYXRjaExpc3RSZXNwb25zZT4oYCR7dXJsfWAsIHJlcXVlc3QpXG4gICAgICAucGlwZShcbiAgICAgICAgcmV0cnkoMSksXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoZGF0YTogYW55KSA9PiBkYXRhLnJlc3VsdC5yZXNwb25zZVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgZW5yb2xsVXNlclRvQmF0Y2gocmVxOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdChBUElfRU5EX1BPSU5UUy5FTlJPTExfQkFUQ0gsIHJlcSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGVucm9sbEFuZFVuZW5yb2xsVXNlclRvQmF0Y2hXRihyZXE6IGFueSwgdHlwZTogYW55KSB7XG4gICAgY29uc3QgdXJsOiBhbnkgPSB0eXBlID09PSAnV0lUSERSQVcnID8gQVBJX0VORF9QT0lOVFMuV0lUSERSQVdfQkFUQ0hfV0YgOiBBUElfRU5EX1BPSU5UUy5FTlJPTExfQkFUQ0hfV0Y7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCByZXEpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBmZXRjaEJsZW5kZWRVc2VyV0YocmVxOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdChBUElfRU5EX1BPSU5UUy5CTEVOREVEX1VTRVJfV0YsIHJlcSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGZldGNoQmxlbmRlZFVzZXJDT1VOVChyZXE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KEFQSV9FTkRfUE9JTlRTLkJMRU5ERURfVVNFUl9DT1VOVCwgcmVxKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgZmV0Y2hDb250ZW50TGlrZXMoY29udGVudElkczogeyBjb250ZW50X2lkOiBzdHJpbmdbXSB9KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8eyBbaWRlbnRpZmllcjogc3RyaW5nXTogbnVtYmVyIH0+KEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfTElLRVMsIGNvbnRlbnRJZHMpXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cbiAgZmV0Y2hDb250ZW50UmF0aW5ncyhjb250ZW50SWRzOiB7IGNvbnRlbnRJZHM6IHN0cmluZ1tdIH0pIHtcbiAgICBpZiAoY29udGVudElkcykgeyB9XG4gICAgLy8gcmV0dXJuIHRoaXMuaHR0cFxuICAgIC8vICAgLnBvc3QoYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9SQVRJTkd9L3JhdGluZ2AsIGNvbnRlbnRJZHMpXG4gICAgLy8gICAudG9Qcm9taXNlKClcbiAgICByZXR1cm4gb2YoKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGZldGNoQ29udGVudEhpc3RvcnkoY29udGVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGludWVMZWFybmluZ0RhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhPihcbiAgICAgIGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlRfSElTVE9SWX0vJHtjb250ZW50SWR9YCxcbiAgICApO1xuICB9XG5cbiAgZmV0Y2hDb250ZW50SGlzdG9yeVYyKHJlcTogTnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YVJlcSk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YT4ge1xuICAgIHJlcS5yZXF1ZXN0LmZpZWxkcyA9IFsncHJvZ3Jlc3NkZXRhaWxzJ107XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuaHR0cC5wb3N0PE5zQ29udGVudC5JQ29udGludWVMZWFybmluZ0RhdGE+KFxuICAgICAgYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9ISVNUT1JZVjJ9LyR7cmVxLnJlcXVlc3QuY291cnNlSWR9YCwgcmVxXG4gICAgKTtcbiAgICBkYXRhLnN1YnNjcmliZSgoc3Vic2NyaWJlRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9ncmFtQ2hpbGRDb3Vyc2VSZXN1bWVEYXRhLm5leHQoeyByZXN1bWVEYXRhOiBzdWJzY3JpYmVEYXRhLnJlc3VsdC5jb250ZW50TGlzdCwgY291cnNlSWQ6IHJlcS5yZXF1ZXN0LmNvdXJzZUlkIH0pO1xuICAgICAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGNvbnRpbnVlTGVhcm5pbmcoaWQ6IHN0cmluZywgY29sbGVjdGlvbklkPzogc3RyaW5nLCBjb2xsZWN0aW9uVHlwZT86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIHJlc29sdmUgPT4ge1xuICAgICAgaWYgKGNvbGxlY3Rpb25UeXBlICYmXG4gICAgICAgIGNvbGxlY3Rpb25UeXBlLnRvTG93ZXJDYXNlKCkgPT09ICdwbGF5bGlzdCcpIHtcbiAgICAgICAgY29uc3QgcmVxQm9keSA9IHtcbiAgICAgICAgICBjb250ZXh0UGF0aElkOiBjb2xsZWN0aW9uSWQgPyBjb2xsZWN0aW9uSWQgOiBpZCxcbiAgICAgICAgICByZXNvdXJjZUlkOiBpZCxcbiAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICBjb250ZXh0RnVsbFBhdGg6IFtjb2xsZWN0aW9uSWQsIGlkXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBkYXRlQWNjZXNzZWQ6IERhdGUubm93KCksXG4gICAgICAgICAgY29udGV4dFR5cGU6ICdwbGF5bGlzdCcsXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZUNvbnRpbnVlTGVhcm5pbmcocmVxQm9keSkudG9Qcm9taXNlKCkuY2F0Y2goKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXFCb2R5ID0ge1xuICAgICAgICAgIGNvbnRleHRQYXRoSWQ6IGNvbGxlY3Rpb25JZCA/IGNvbGxlY3Rpb25JZCA6IGlkLFxuICAgICAgICAgIHJlc291cmNlSWQ6IGlkLFxuICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHsgdGltZXN0YW1wOiBEYXRlLm5vdygpIH0pLFxuICAgICAgICAgIGRhdGVBY2Nlc3NlZDogRGF0ZS5ub3coKSxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlQ29udGludWVMZWFybmluZyhyZXFCb2R5KS50b1Byb21pc2UoKS5jYXRjaCgpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHNhdmVDb250aW51ZUxlYXJuaW5nKGNvbnRlbnQ6IE5zQ29udGVudC5JVmlld2VyQ29udGludWVMZWFybmluZ1JlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIC8vIGNvbnN0IHVybCA9IEFQSV9FTkRfUE9JTlRTLlVTRVJfQ09OVElOVUVfTEVBUk5JTkdcbiAgICAvLyByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih1cmwsIGNvbnRlbnQpXG4gICAgaWYgKGNvbnRlbnQpIHtcblxuICAgIH1cbiAgICByZXR1cm4gb2YoKSBhcyBhbnk7XG4gIH1cblxuICBzZXRTM0Nvb2tpZShcbiAgICBfY29udGVudElkOiBzdHJpbmcsXG4gICAgLy8gX3BhdGg6IHN0cmluZyxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAvLyByZXR1cm4gdGhpcy5odHRwXG4gICAgLy8gICAucG9zdChBUElfRU5EX1BPSU5UUy5TRVRfUzNfQ09PS0lFLCB7IGNvbnRlbnRJZCB9KVxuICAgIC8vICAgLnBpcGUoY2F0Y2hFcnJvcihfZXJyID0+IG9mKHRydWUpKSlcblxuICAgIHJldHVybiBFTVBUWTtcbiAgfVxuXG4gIHNldFMzSW1hZ2VDb29raWUoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoQVBJX0VORF9QT0lOVFMuU0VUX1MzX0lNQUdFX0NPT0tJRSwge30pLnBpcGUoY2F0Y2hFcnJvcihfZXJyID0+IG9mKHRydWUpKSk7XG4gIH1cblxuICBmZXRjaE1hbmlmZXN0KHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoQVBJX0VORF9QT0lOVFMuRkVUQ0hfTUFOSUZFU1QsIHsgdXJsIH0pO1xuICB9XG4gIGZldGNoV2ViTW9kdWxlQ29udGVudCh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7QVBJX0VORF9QT0lOVFMuRkVUQ0hfV0VCX01PRFVMRV9GSUxFU30/dXJsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHVybCl9YCk7XG4gIH1cbiAgc2VhcmNoKHJlcTogTlNTZWFyY2guSVNlYXJjaFJlcXVlc3QpOiBPYnNlcnZhYmxlPE5TU2VhcmNoLklTZWFyY2hBcGlSZXN1bHQ+IHtcbiAgICByZXEucXVlcnkgPSByZXEucXVlcnkgfHwgJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE5TU2VhcmNoLklTZWFyY2hBcGlSZXN1bHQ+KEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfU0VBUkNIX1Y1LCB7XG4gICAgICByZXF1ZXN0OiByZXEsXG4gICAgfSk7XG4gIH1cbiAgc2VhcmNoUmVnaW9uUmVjb21tZW5kYXRpb24oXG4gICAgcmVxOiBOU1NlYXJjaC5JU2VhcmNoT3JnUmVnaW9uUmVjb21tZW5kYXRpb25SZXF1ZXN0LFxuICApOiBPYnNlcnZhYmxlPE5zQ29udGVudFN0cmlwTXVsdGlwbGUuSUNvbnRlbnRTdHJpcFJlc3BvbnNlQXBpPiB7XG4gICAgcmVxLnF1ZXJ5ID0gcmVxLnF1ZXJ5IHx8ICcnO1xuICAgIHJlcS5wcmVMYWJlbFZhbHVlID1cbiAgICAgIChyZXEucHJlTGFiZWxWYWx1ZSB8fCAnJykgK1xuICAgICAgKCh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSAmJiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5jb3VudHJ5KSB8fCAnJyk7XG4gICAgcmVxLmZpbHRlcnMgPSB7XG4gICAgICAuLi5yZXEuZmlsdGVycyxcbiAgICAgIGxhYmVsczogW3JlcS5wcmVMYWJlbFZhbHVlIHx8ICcnXSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxOc0NvbnRlbnRTdHJpcE11bHRpcGxlLklDb250ZW50U3RyaXBSZXNwb25zZUFwaT4oXG4gICAgICBBUElfRU5EX1BPSU5UUy5DT05URU5UX1NFQVJDSF9SRUdJT05fUkVDT01NRU5EQVRJT04sXG4gICAgICB7IHJlcXVlc3Q6IHJlcSB9LFxuICAgICk7XG4gIH1cbiAgc2VhcmNoVjYocmVxOiBOU1NlYXJjaC5JU2VhcmNoVjZSZXF1ZXN0KTogT2JzZXJ2YWJsZTxOU1NlYXJjaC5JU2VhcmNoVjZBcGlSZXN1bHRWMj4ge1xuICAgIGNvbnN0IGFwaVBhdGggPSBfLmdldChyZXEsICdhcGkucGF0aCcpO1xuICAgIHJlcS5xdWVyeSA9IHJlcS5xdWVyeSB8fCAnJztcbiAgICBpZiAoYXBpUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TlNTZWFyY2guSVNlYXJjaFY2QXBpUmVzdWx0VjI+KGFwaVBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TlNTZWFyY2guSVNlYXJjaFY2QXBpUmVzdWx0VjI+KEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfU0VBUkNIX1Y2LCByZXEpO1xuICB9XG5cbiAgc2VhcmNoUmVsYXRlZENCUFY2KHJlcTogTlNTZWFyY2guSVNlYXJjaFY2UmVxdWVzdFYyKTogT2JzZXJ2YWJsZTxOU1NlYXJjaC5JU2VhcmNoVjZBcGlSZXN1bHRWMj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxOU1NlYXJjaC5JU2VhcmNoVjZBcGlSZXN1bHRWMj4oQVBJX0VORF9QT0lOVFMuQ09OVEVOVF9TRUFSQ0hfUkVMQVRFRF9DQlBfVjYsIHJlcSk7XG4gIH1cblxuICBmZXRjaENvbnRlbnRSYXRpbmcoY29udGVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHsgcmF0aW5nOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHsgcmF0aW5nOiBudW1iZXIgfT4oYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9SQVRJTkd9LyR7Y29udGVudElkfWApO1xuICB9XG4gIGRlbGV0ZUNvbnRlbnRSYXRpbmcoY29udGVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUkFUSU5HfS8ke2NvbnRlbnRJZH1gKTtcbiAgfVxuICBhZGRDb250ZW50UmF0aW5nKGNvbnRlbnRJZDogc3RyaW5nLCBkYXRhOiB7IHJhdGluZzogbnVtYmVyIH0pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUkFUSU5HfS8ke2NvbnRlbnRJZH1gLCBkYXRhKTtcbiAgfVxuXG4gIGdldEZpcnN0Q2hpbGRJbkhpZXJhcmNoeShjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnQpOiBOc0NvbnRlbnQuSUNvbnRlbnQge1xuICAgIGlmICghKGNvbnRlbnQuY2hpbGRyZW4gfHwgW10pLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUFJPR1JBTSAmJlxuICAgICAgICAhKGNvbnRlbnQuYXJ0aWZhY3RVcmwgJiYgY29udGVudC5hcnRpZmFjdFVybC5sZW5ndGgpKSB8fFxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk1BTkRBVE9SWV9DT1VSU0VfR09BTCB8fFxuICAgICAgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0gJiZcbiAgICAgICAgIShjb250ZW50LmFydGlmYWN0VXJsICYmIGNvbnRlbnQuYXJ0aWZhY3RVcmwubGVuZ3RoKSkgfHxcbiAgICAgIChjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuTU9EVUxFICYmXG4gICAgICAgICEoY29udGVudC5hcnRpZmFjdFVybCAmJiBjb250ZW50LmFydGlmYWN0VXJsLmxlbmd0aCkpXG4gICAgKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGNvbnRlbnQuY2hpbGRyZW5bMF07XG4gICAgICByZXR1cm4gdGhpcy5nZXRGaXJzdENoaWxkSW5IaWVyYXJjaHkoY2hpbGQpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUkVTT1VSQ0UgfHxcbiAgICAgIGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5LTk9XTEVER0VfQVJUSUZBQ1QgfHxcbiAgICAgIGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5QUk9HUkFNIHx8XG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUFJBQ1RJQ0VfUkVTT1VSQ0UgfHxcbiAgICAgIGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5GSU5BTF9BU1NFU1NNRU5UIHx8XG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQ09NUF9BU1NFU1NNRU5UIHx8XG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNIHx8XG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuT0ZGTElORV9TRVNTSU9OXG4gICAgKSB7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG4gICAgY29uc3QgZmlyc3RDaGlsZCA9IGNvbnRlbnQuY2hpbGRyZW5bMF07XG4gICAgY29uc3QgcmVzdWx0Q29udGVudCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZEluSGllcmFyY2h5KGZpcnN0Q2hpbGQpO1xuICAgIHJldHVybiByZXN1bHRDb250ZW50O1xuICB9XG5cbiAgZ2V0UmVnaXN0cmF0aW9uU3RhdHVzKHNvdXJjZTogc3RyaW5nKTogUHJvbWlzZTx7IGhhc0FjY2VzczogYm9vbGVhbjsgcmVnaXN0cmF0aW9uVXJsPzogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KGAke0FQSV9FTkRfUE9JTlRTLlJFR0lTVFJBVElPTl9TVEFUVVN9LyR7c291cmNlfWApLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgZmV0Y2hDb25maWcodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KHVybCk7XG4gIH1cblxuICBhZGRDZXJ0VGVtcGxhdGUoYm9keTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxhbnk+KGAke0FQSV9FTkRfUE9JTlRTLkNFUlRfQUREX1RFTVBMQVRFfWAsIGJvZHkpO1xuICB9XG5cbiAgaXNzdWVDZXJ0KGJvZHk6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke0FQSV9FTkRfUE9JTlRTLkNFUlRfSVNTVUV9YCwgYm9keSk7XG4gIH1cbiAgZG93bmxvYWRDZXJ0KGNlcnRJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHtBUElfRU5EX1BPSU5UUy5DRVJUX0RPV05MT0FEKGNlcnRJZCl9YCk7XG4gIH1cblxuICB0cmVuZGluZ0NvbnRlbnRTZWFyY2gocmVxOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJlcS5xdWVyeSA9IHJlcS5xdWVyeSB8fCAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihBUElfRU5EX1BPSU5UUy5UUkVORElOR19DT05URU5UX1NFQVJDSCwgcmVxKTtcbiAgfVxuXG4gIGdldEthcm1hUG9pdG5zKGxpbWl0OiBudW1iZXIsIG9mZnNldDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KEFQSV9FTkRfUE9JTlRTLlJFQURfS0FSTUFQT0lOVFMsIHsgbGltaXQsIG9mZnNldCB9KS5waXBlKGNhdGNoRXJyb3IoX2VyciA9PiBvZih0cnVlKSkpO1xuICB9XG4gIGZldGNoUHJvZ3JhbUNvbnRlbnQoY29udGVudElkOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50W10+IHtcbiAgICBsZXQgdXJsID0gJyc7XG4gICAgY29uc3QgZm9yUHJldmlldyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHVibGljLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcmcHJldmlldz10cnVlJyk7XG4gICAgaWYgKCFmb3JQcmV2aWV3KSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnRbXT4oXG4gICAgICAgIEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUkVBRChjb250ZW50SWQpLFxuICAgICAgKTtcbiAgICB9XG4gICAgdXJsID0gYC9hcGkvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50W10+KHVybCk7XG4gICAgLy8gcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50W10+KEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUkVBRChjb250ZW50SWQpKVxuICB9XG5cbiAgZ2V0Q291cnNlS2FybWFQb2ludHMocmVxdWVzdDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oQVBJX0VORF9QT0lOVFMuUkVBRF9DT1VSU0VfS0FSTUFQT0lOVFMsIHJlcXVlc3QpO1xuICB9XG5cbiAgY2xhaW1LYXJtYXBvaW50cyhyZXF1ZXN0OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihBUElfRU5EX1BPSU5UUy5DTEFJTV9LQVJNQVBPSU5UUywgcmVxdWVzdCk7XG4gIH1cblxuICB1c2VyS2FybWFQb2ludHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oQVBJX0VORF9QT0lOVFMuVVNFUl9LQVJNQV9QT0lOVFMsIHt9KTtcbiAgfVxuXG4gIGdldEVucm9sbGVkRGF0YShkb0lkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBlbnJvbGxtZW50TWFwRGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2Vucm9sbG1lbnRNYXBEYXRhJykgfHwgJ3t9Jyk7XG4gICAgY29uc3QgZW5yb2xsZWRDb3Vyc2VEYXRhID0gZW5yb2xsbWVudE1hcERhdGFbZG9JZF07XG4gICAgcmV0dXJuIGVucm9sbGVkQ291cnNlRGF0YTtcbiAgfVxuXG4gIGFzeW5jIGdldFJlc291cnNlTGluayhjb250ZW50OiBhbnkpIHtcbiAgICBjb25zdCBlbnJvbGxlZENvdXJzZURhdGE6IGFueSA9IHRoaXMuZ2V0RW5yb2xsZWREYXRhKGNvbnRlbnQuaWRlbnRpZmllcik7XG4gICAgaWYgKGVucm9sbGVkQ291cnNlRGF0YSkge1xuICAgICAgaWYgKGVucm9sbGVkQ291cnNlRGF0YS5jb250ZW50LmNvdXJzZUNhdGVnb3J5ID09PSAgTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0gfHxcbiAgICAgICAgZW5yb2xsZWRDb3Vyc2VEYXRhLmNvbnRlbnQuY291cnNlQ2F0ZWdvcnkgPT09ICBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LklOVklURV9PTkxZX1BST0dSQU0gfHxcbiAgICAgICAgZW5yb2xsZWRDb3Vyc2VEYXRhLmNvbnRlbnQuY291cnNlQ2F0ZWdvcnkgPT09ICBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5Lk1PREVSQVRFRF9QUk9HUkFNIHx8XG4gICAgICAgIGVucm9sbGVkQ291cnNlRGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gIE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSB8fFxuICAgICAgICBlbnJvbGxlZENvdXJzZURhdGEuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09ICBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5QUk9HUkFNKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzQmF0Y2hJblByb2dyZXNzKGVucm9sbGVkQ291cnNlRGF0YS5iYXRjaCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdvdG9Ub2NQYWdlKGNvbnRlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkYXRhID0gIGF3YWl0IHRoaXMuY2hlY2tGb3JEYXRhVG9Gb3JtVXJsKGNvbnRlbnQsIGVucm9sbGVkQ291cnNlRGF0YSk7XG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9ICB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSAgYXdhaXQgdGhpcy5jaGVja0ZvckRhdGFUb0Zvcm1VcmwoY29udGVudCwgZW5yb2xsZWRDb3Vyc2VEYXRhKTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG5cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ290b1RvY1BhZ2UoY29udGVudCk7XG5cbiAgfVxuICBhc3luYyBjaGVja0ZvckRhdGFUb0Zvcm1VcmwoY29udGVudDogYW55LCBlbnJvbGxEYXRhOiBhbnkpIHtcbiAgICBsZXQgdXJsRGF0YTogYW55O1xuICAgIGlmIChlbnJvbGxEYXRhLmNvbXBsZXRpb25QZXJjZW50YWdlICA9PT0gMTAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5nb3RvVG9jUGFnZShlbnJvbGxEYXRhKTtcbiAgICB9XG4gICAgaWYgKGVucm9sbERhdGEubHJjUHJvZ3Jlc3NEZXRhaWxzICYmIGVucm9sbERhdGEubHJjUHJvZ3Jlc3NEZXRhaWxzLm1pbWVUeXBlKSB7XG4gICAgICBjb25zdCBtb2RpZnlFbnJvbGxEYXRhICA9IHtcbiAgICAgICAgLi4uZW5yb2xsRGF0YSxcbiAgICAgICAgaWRlbnRpZmllcjogZW5yb2xsRGF0YS5jb2xsZWN0aW9uSWQsXG4gICAgICAgIHByaW1hcnlDYXRlZ29yeTogZW5yb2xsRGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSxcbiAgICAgICAgbmFtZTogZW5yb2xsRGF0YS5jb250ZW50Lm5hbWUsXG4gICAgICB9O1xuICAgICAgaWYgKG1vZGlmeUVucm9sbERhdGEubGFzdFJlYWRDb250ZW50SWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3Vyc2VEYXRhV2l0aERhdGEobW9kaWZ5RW5yb2xsRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5yb2xsRGF0YS5sYXN0UmVhZENvbnRlbnRJZCwgZW5yb2xsRGF0YS5scmNQcm9ncmVzc0RldGFpbHMubWltZVR5cGUpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGlmeUVucm9sbERhdGEuZmlyc3RDaGlsZElkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFJlc291cnNlRGF0YVdpdGhEYXRhKG1vZGlmeUVucm9sbERhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVucm9sbERhdGEuZmlyc3RDaGlsZElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnJvbGxEYXRhLmxyY1Byb2dyZXNzRGV0YWlscy5taW1lVHlwZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlbnJvbGxEYXRhLmZpcnN0Q2hpbGRJZCB8fCBlbnJvbGxEYXRhLmxhc3RSZWFkQ29udGVudElkKSB7XG4gICAgICAgIGNvbnN0IGRvSWQgPSBlbnJvbGxEYXRhLmZpcnN0Q2hpbGRJZCB8fCBlbnJvbGxEYXRhLmxhc3RSZWFkQ29udGVudElkO1xuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmZldGNoUHJvZ3JhbUNvbnRlbnQoZG9JZCkudG9Qcm9taXNlKCkudGhlbihhc3luYyAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5yZXN1bHQgJiYgcmVzLnJlc3VsdC5jb250ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50RGF0YTogYW55ID0gcmVzLnJlc3VsdC5jb250ZW50O1xuICAgICAgICAgICAgY29uc3QgbW9kaWZ5RW5yb2xsRGF0YSAgPSB7XG4gICAgICAgICAgICAgIC4uLmVucm9sbERhdGEsXG4gICAgICAgICAgICAgIGlkZW50aWZpZXI6IGVucm9sbERhdGEuY29sbGVjdGlvbklkLFxuICAgICAgICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IGVucm9sbERhdGEuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIG5hbWU6IGVucm9sbERhdGEuY29udGVudC5uYW1lLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHVybERhdGEgPSAgdGhpcy5nZXRSZXNvdXJzZURhdGFXaXRoRGF0YShtb2RpZnlFbnJvbGxEYXRhLCBjb250ZW50RGF0YS5pZGVudGlmaWVyLCBjb250ZW50RGF0YS5taW1lVHlwZSk7XG4gICAgICAgICAgICBpZiAodXJsRGF0YSkge1xuICAgICAgICAgICAgICByZXR1cm4gdXJsRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhID8gcmVzcG9uc2VEYXRhIDogdGhpcy5nb3RvVG9jUGFnZShjb250ZW50KTtcbiAgICAgIH1cbiAgICByZXR1cm4gdGhpcy5nb3RvVG9jUGFnZShjb250ZW50KTtcblxuICB9XG5cbiAgZ2V0UmVzb3Vyc2VEYXRhV2l0aERhdGEoY29udGVudDogYW55LCByZXNvdXJzZUlkOiBhbnksIG1pbWVUeXBlOiBhbnkpIHtcbiAgICBpZiAoY29udGVudCkge1xuICAgICAgY29uc3QgdXJsID0gdmlld2VyUm91dGVHZW5lcmF0b3IoXG4gICAgICAgIHJlc291cnNlSWQsXG4gICAgICAgIG1pbWVUeXBlLFxuICAgICAgICBjb250ZW50LmlkZW50aWZpZXIsXG4gICAgICAgICdDb3Vyc2UnLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgJ0xlYXJuaW5nIFJlc291cmNlJyxcbiAgICAgICAgY29udGVudC5iYXRjaElkLFxuICAgICAgICBjb250ZW50Lm5hbWUsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ290b1RvY1BhZ2UoY29udGVudCk7XG4gIH1cbiAgZ290b1RvY1BhZ2UoY29udGVudDogYW55KSB7XG4gICAgY29uc3QgdXJsRGF0YTogYW55ID0ge1xuICAgICAgdXJsOiBgL2FwcC90b2MvJHtjb250ZW50LmlkZW50aWZpZXIgPyBjb250ZW50LmlkZW50aWZpZXIgOiBjb250ZW50LmNvbGxlY3Rpb25JZH0vb3ZlcnZpZXdgLFxuICAgICAgcXVlcnlQYXJhbXM6IHsgYmF0Y2hJZDogY29udGVudC5iYXRjaElkIH0sXG4gICAgfTtcbiAgICBpZiAoY29udGVudC5lbmREYXRlKSB7XG4gICAgICB1cmxEYXRhLnF1ZXJ5UGFyYW1zID0geyAuLi51cmxEYXRhLnF1ZXJ5UGFyYW1zLCBwbGFuVHlwZTogJ2NiUGxhbicsIGVuZERhdGU6IGNvbnRlbnQuZW5kRGF0ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gdXJsRGF0YTtcbiAgfVxuICBpc0JhdGNoSW5Qcm9ncmVzcyhiYXRjaERhdGE6IGFueSkge1xuICAgIC8vIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50WydiYXRjaGVzJ10pIHtcbiAgICAvLyBjb25zdCBiYXRjaGVzID0gdGhpcy5jb250ZW50WydiYXRjaGVzJ10gYXMgTnNDb250ZW50LklCYXRjaFxuICAgIGlmIChiYXRjaERhdGEgJiYgYmF0Y2hEYXRhLmVuZERhdGUpIHtcbiAgICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gbW9tZW50KGJhdGNoRGF0YS5zdGFydERhdGUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgY29uc3QgZW5kRGF0ZSA9IGJhdGNoRGF0YS5lbmREYXRlID8gbW9tZW50KGJhdGNoRGF0YS5lbmREYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSA6IG5vdztcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAvLyBiYXRjaC5zdGF0dXMgJiZcbiAgICAgICAgICAgIG1vbWVudChzdGFydERhdGUpLmlzU2FtZU9yQmVmb3JlKG5vdylcbiAgICAgICAgICAgICYmIG1vbWVudChlbmREYXRlKS5pc1NhbWVPckFmdGVyKG5vdylcbiAgICAgICAgICApO1xuICAgIH0gcmV0dXJuIHRydWU7XG4gIH1cbiAgcG9zdEFwaU1ldGhvZChhcGlVcmw6IGFueSwgcmVxOiBhbnkpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxOc0NvbnRlbnQuSUNvbnRlbnQ+KGFwaVVybCwgcmVxKTtcbiAgfVxuICBnZXRBcGlNZXRob2QoYXBpVXJsOiBhbnkpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudD4ge1xuICAgIC8vIHJlcS5xdWVyeSA9IHJlcS5xdWVyeSB8fCAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnQ+KGFwaVVybCk7XG4gIH1cbn1cbiJdfQ==
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import * as tslib_1 from "tslib";
6
+ import { HttpClient } from '@angular/common/http';
7
+ import { Injectable } from '@angular/core';
8
+ import { ConfigurationsService } from '@sunbird-cb/utils-v2';
9
+ import { of, EMPTY, BehaviorSubject, Subject } from 'rxjs';
10
+ import { catchError, retry, map, shareReplay } from 'rxjs/operators';
11
+ import { NsContent } from '../_models/widget-content.model';
12
+ // tslint:disable
13
+ import * as _ from 'lodash';
14
+ import { viewerRouteGenerator } from './viewer-route-util';
15
+ import * as moment_ from 'moment';
16
+ import * as i0 from "@angular/core";
17
+ import * as i1 from "@angular/common/http";
18
+ import * as i2 from "@sunbird-cb/utils-v2";
19
+ /** @type {?} */
20
+ const moment = moment_;
21
+ // tslint:enable
22
+ // TODO: move this in some common place
23
+ /** @type {?} */
24
+ const PROTECTED_SLAG_V8 = '/apis/protected/v8';
25
+ const ɵ0 = /**
26
+ * @param {?} type
27
+ * @param {?} id
28
+ * @return {?}
29
+ */
30
+ (type, id) => `${PROTECTED_SLAG_V8}/content/collection/${type}/${id}`, ɵ1 = /**
31
+ * @param {?} contentId
32
+ * @return {?}
33
+ */
34
+ (contentId) => `${PROTECTED_SLAG_V8}/user/progress/${contentId}`, ɵ2 = /**
35
+ * @param {?} certId
36
+ * @return {?}
37
+ */
38
+ (certId) => `${PROTECTED_SLAG_V8}/cohorts/course/batch/cert/download/${certId}`, ɵ3 = /**
39
+ * @param {?} contentId
40
+ * @return {?}
41
+ */
42
+ (contentId) => `/apis/proxies/v8/action/content/v3/read/${contentId}`;
43
+ /** @type {?} */
44
+ const API_END_POINTS = {
45
+ CONTENT: `${PROTECTED_SLAG_V8}/content`,
46
+ AUTHORING_CONTENT: `/api/course/v1/hierarchy`,
47
+ CONTENT_LIKES: `${PROTECTED_SLAG_V8}/content/likeCount`,
48
+ SET_S3_COOKIE: `${PROTECTED_SLAG_V8}/content/setCookie`,
49
+ SET_S3_IMAGE_COOKIE: `${PROTECTED_SLAG_V8}/content/setImageCookie`,
50
+ FETCH_MANIFEST: `${PROTECTED_SLAG_V8}/content/getWebModuleManifest`,
51
+ FETCH_WEB_MODULE_FILES: `${PROTECTED_SLAG_V8}/content/getWebModuleFiles`,
52
+ MULTIPLE_CONTENT: `${PROTECTED_SLAG_V8}/content/multiple`,
53
+ CONTENT_SEARCH_V5: `${PROTECTED_SLAG_V8}/content/searchV5`,
54
+ CONTENT_SEARCH_V6: `/apis/proxies/v8/sunbirdigot/search`,
55
+ TRENDING_CONTENT_SEARCH: `apis/proxies/v8/trending/content/search`,
56
+ CONTENT_SEARCH_RELATED_CBP_V6: `/apis/proxies/v8/sunbirdigot/search`,
57
+ CONTENT_SEARCH_REGION_RECOMMENDATION: `${PROTECTED_SLAG_V8}/content/searchRegionRecommendation`,
58
+ CONTENT_HISTORY: `${PROTECTED_SLAG_V8}/user/history`,
59
+ CONTENT_HISTORYV2: `/apis/proxies/v8/read/content-progres`,
60
+ COURSE_BATCH_LIST: `/apis/proxies/v8/learner/course/v1/batch/list`,
61
+ COURSE_BATCH: `/apis/proxies/v8/course/v1/batch/read`,
62
+ AUTO_ASSIGN_BATCH: `/apis/protected/v8/cohorts/user/autoenrollment/`,
63
+ AUTO_ASSIGN_CURATED_BATCH: `/apis/proxies/v8/curatedprogram/v1/enrol`,
64
+ AUTO_ASSIGN_OPEN_PROGRAM: `/apis/proxies/v8/openprogram/v1/enrol`,
65
+ USER_CONTINUE_LEARNING: `${PROTECTED_SLAG_V8}/user/history/continue`,
66
+ CONTENT_RATING: `${PROTECTED_SLAG_V8}/user/rating`,
67
+ COLLECTION_HIERARCHY: (ɵ0),
68
+ REGISTRATION_STATUS: `${PROTECTED_SLAG_V8}/admin/userRegistration/checkUserRegistrationContent`,
69
+ MARK_AS_COMPLETE_META: (ɵ1),
70
+ ENROLL_BATCH: `/apis/proxies/v8/learner/course/v1/enrol`,
71
+ ENROLL_BATCH_WF: `/apis/proxies/v8/workflow/blendedprogram/enrol`,
72
+ WITHDRAW_BATCH_WF: `/apis/proxies/v8/workflow/blendedprogram/unenrol`,
73
+ BLENDED_USER_WF: `/apis/proxies/v8/workflow/blendedprogram/user/search`,
74
+ BLENDED_USER_COUNT: `apis/proxies/v8/workflow/blendedprogram/enrol/status/count`,
75
+ CERT_ADD_TEMPLATE: `${PROTECTED_SLAG_V8}/cohorts/course/batch/cert/template/add`,
76
+ CERT_ISSUE: `${PROTECTED_SLAG_V8}/cohorts/course/batch/cert/issue`,
77
+ CERT_DOWNLOAD: (ɵ2),
78
+ READ_KARMAPOINTS: `/apis/proxies/v8/karmapoints/read`,
79
+ CONTENT_READ: (ɵ3),
80
+ READ_COURSE_KARMAPOINTS: '/apis/proxies/v8/karmapoints/user/course/read',
81
+ CLAIM_KARMAPOINTS: '/apis/proxies/v8/claimkarmapoints',
82
+ USER_KARMA_POINTS: '/apis/proxies/v8/user/totalkarmapoints',
83
+ AGGREGATION_SEARCH: '/apis/proxies/v8/content/aggregation/search',
84
+ FEATURE_SEARCH: '/apis/proxies/v8/featured/content/search',
85
+ };
86
+ export class WidgetContentService {
87
+ /**
88
+ * @param {?} http
89
+ * @param {?} configSvc
90
+ */
91
+ constructor(http, configSvc) {
92
+ this.http = http;
93
+ this.configSvc = configSvc;
94
+ this.tocConfigData = new BehaviorSubject({});
95
+ this.tocConfigData$ = this.tocConfigData.asObservable();
96
+ this.telemetryData = new Subject();
97
+ this.telemetryData$ = this.telemetryData.asObservable();
98
+ this.programChildCourseResumeData = new BehaviorSubject({});
99
+ this.programChildCourseResumeData$ = this.programChildCourseResumeData.asObservable();
100
+ }
101
+ /**
102
+ * @param {?} message
103
+ * @return {?}
104
+ */
105
+ changeTelemetryData(message) {
106
+ this.telemetryData.next(message);
107
+ }
108
+ /**
109
+ * @param {?} primaryCategory
110
+ * @return {?}
111
+ */
112
+ isResource(primaryCategory) {
113
+ if (primaryCategory) {
114
+ /** @type {?} */
115
+ const isResource = (primaryCategory === NsContent.EResourcePrimaryCategories.LEARNING_RESOURCE) ||
116
+ (primaryCategory === NsContent.EResourcePrimaryCategories.PRACTICE_RESOURCE) ||
117
+ (primaryCategory === NsContent.EResourcePrimaryCategories.FINAL_ASSESSMENT) ||
118
+ (primaryCategory === NsContent.EResourcePrimaryCategories.COMP_ASSESSMENT) ||
119
+ (primaryCategory === NsContent.EResourcePrimaryCategories.OFFLINE_SESSION);
120
+ return isResource;
121
+ }
122
+ return false;
123
+ }
124
+ /**
125
+ * @param {?} identifier
126
+ * @return {?}
127
+ */
128
+ fetchMarkAsCompleteMeta(identifier) {
129
+ // tslint:disable-next-line
130
+ /** @type {?} */
131
+ const url = API_END_POINTS.MARK_AS_COMPLETE_META(identifier)
132
+ // return this.http.get(url).toPromise()
133
+ ;
134
+ // return this.http.get(url).toPromise()
135
+ if (url) { }
136
+ return of().toPromise();
137
+ }
138
+ /**
139
+ * @param {?} data
140
+ * @return {?}
141
+ */
142
+ updateTocConfig(data) {
143
+ this.tocConfigData.next(data);
144
+ }
145
+ /**
146
+ * @param {?} contentId
147
+ * @param {?=} hierarchyType
148
+ * @param {?=} _additionalFields
149
+ * @param {?=} primaryCategory
150
+ * @return {?}
151
+ */
152
+ fetchContent(contentId, hierarchyType = 'detail', _additionalFields = [], primaryCategory) {
153
+ // const url = `${API_END_POINTS.CONTENT}/${contentId}?hierarchyType=${hierarchyType}`
154
+ /** @type {?} */
155
+ let url = '';
156
+ /** @type {?} */
157
+ const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
158
+ if (primaryCategory && this.isResource(primaryCategory)) {
159
+ if (!forPreview) {
160
+ url = `/apis/proxies/v8/action/content/v3/read/${contentId}`;
161
+ }
162
+ else {
163
+ url = `/api/content/v1/read/${contentId}`;
164
+ }
165
+ }
166
+ else {
167
+ if (!forPreview) {
168
+ url = `/apis/proxies/v8/action/content/v3/hierarchy/${contentId}?hierarchyType=${hierarchyType}`;
169
+ }
170
+ else {
171
+ /** @type {?} */
172
+ const forcreator = window.location.href.includes('editMode=true');
173
+ if (forcreator) {
174
+ url = `apis/proxies/v8/action/content/v3/hierarchy/${contentId}?mode=edit`;
175
+ }
176
+ else {
177
+ url = `/api/course/v1/hierarchy/${contentId}?hierarchyType=${hierarchyType}`;
178
+ }
179
+ }
180
+ }
181
+ // return this.http
182
+ // .post<NsContent.IContent>(url, { additionalFields })
183
+ // .pipe(retry(1))
184
+ return this.http
185
+ .get(url)
186
+ .pipe(shareReplay(1));
187
+ // if (apiData && apiData.result) {
188
+ // return apiData.result.content
189
+ // }
190
+ }
191
+ /**
192
+ * @param {?} contentId
193
+ * @return {?}
194
+ */
195
+ fetchAuthoringContent(contentId) {
196
+ /** @type {?} */
197
+ const forcreator = window.location.href.includes('editMode=true');
198
+ /** @type {?} */
199
+ let url = '';
200
+ if (forcreator) {
201
+ url = `apis/proxies/v8/action/content/v3/hierarchy/${contentId}?mode=edit`;
202
+ }
203
+ else {
204
+ url = `${API_END_POINTS.AUTHORING_CONTENT}/${contentId}?hierarchyType=detail`;
205
+ }
206
+ return this.http.get(url).pipe(shareReplay(1), (/**
207
+ * @param {?} r
208
+ * @return {?}
209
+ */
210
+ r => r));
211
+ }
212
+ /**
213
+ * @param {?} ids
214
+ * @return {?}
215
+ */
216
+ fetchMultipleContent(ids) {
217
+ return this.http.get(`${API_END_POINTS.MULTIPLE_CONTENT}/${ids.join(',')}`);
218
+ }
219
+ /**
220
+ * @param {?} type
221
+ * @param {?} id
222
+ * @param {?=} pageNumber
223
+ * @param {?=} pageSize
224
+ * @return {?}
225
+ */
226
+ fetchCollectionHierarchy(type, id, pageNumber = 0, pageSize = 1) {
227
+ return this.http.get(`${API_END_POINTS.COLLECTION_HIERARCHY(type, id)}?pageNumber=${pageNumber}&pageSize=${pageSize}`);
228
+ }
229
+ /**
230
+ * @return {?}
231
+ */
232
+ fetchBlendedCourse() {
233
+ }
234
+ /**
235
+ * @param {?} req
236
+ * @return {?}
237
+ */
238
+ fetchCourseBatches(req) {
239
+ return this.http
240
+ .post(API_END_POINTS.COURSE_BATCH_LIST, req)
241
+ .pipe(retry(1), map((/**
242
+ * @param {?} data
243
+ * @return {?}
244
+ */
245
+ (data) => data.result.response)));
246
+ }
247
+ // fetch individual batch
248
+ /**
249
+ * @param {?} batchId
250
+ * @return {?}
251
+ */
252
+ fetchCourseBatch(batchId) {
253
+ return this.http.get(`${API_END_POINTS.COURSE_BATCH}/${batchId}`);
254
+ }
255
+ /**
256
+ * @param {?} identifier
257
+ * @return {?}
258
+ */
259
+ autoAssignBatchApi(identifier) {
260
+ return this.http.get(`${API_END_POINTS.AUTO_ASSIGN_BATCH}${identifier}`)
261
+ .pipe(retry(1), map((/**
262
+ * @param {?} data
263
+ * @return {?}
264
+ */
265
+ (data) => data.result.response)));
266
+ }
267
+ /**
268
+ * @param {?} request
269
+ * @param {?} programType
270
+ * @return {?}
271
+ */
272
+ autoAssignCuratedBatchApi(request, programType) {
273
+ /** @type {?} */
274
+ const url = programType === NsContent.ECourseCategory.MODERATED_PROGRAM ?
275
+ API_END_POINTS.AUTO_ASSIGN_OPEN_PROGRAM : API_END_POINTS.AUTO_ASSIGN_CURATED_BATCH;
276
+ return this.http.post(`${url}`, request)
277
+ .pipe(retry(1), map((/**
278
+ * @param {?} data
279
+ * @return {?}
280
+ */
281
+ (data) => data.result.response)));
282
+ }
283
+ /**
284
+ * @param {?} req
285
+ * @return {?}
286
+ */
287
+ enrollUserToBatch(req) {
288
+ return this.http
289
+ .post(API_END_POINTS.ENROLL_BATCH, req)
290
+ .toPromise();
291
+ }
292
+ /**
293
+ * @param {?} req
294
+ * @param {?} type
295
+ * @return {?}
296
+ */
297
+ enrollAndUnenrollUserToBatchWF(req, type) {
298
+ /** @type {?} */
299
+ const url = type === 'WITHDRAW' ? API_END_POINTS.WITHDRAW_BATCH_WF : API_END_POINTS.ENROLL_BATCH_WF;
300
+ return this.http
301
+ .post(url, req)
302
+ .toPromise();
303
+ }
304
+ /**
305
+ * @param {?} req
306
+ * @return {?}
307
+ */
308
+ fetchBlendedUserWF(req) {
309
+ return this.http
310
+ .post(API_END_POINTS.BLENDED_USER_WF, req)
311
+ .toPromise();
312
+ }
313
+ /**
314
+ * @param {?} req
315
+ * @return {?}
316
+ */
317
+ fetchBlendedUserCOUNT(req) {
318
+ return this.http
319
+ .post(API_END_POINTS.BLENDED_USER_COUNT, req)
320
+ .toPromise();
321
+ }
322
+ /**
323
+ * @param {?} contentIds
324
+ * @return {?}
325
+ */
326
+ fetchContentLikes(contentIds) {
327
+ return this.http
328
+ .post(API_END_POINTS.CONTENT_LIKES, contentIds)
329
+ .toPromise();
330
+ }
331
+ /**
332
+ * @param {?} contentIds
333
+ * @return {?}
334
+ */
335
+ fetchContentRatings(contentIds) {
336
+ if (contentIds) { }
337
+ // return this.http
338
+ // .post(`${API_END_POINTS.CONTENT_RATING}/rating`, contentIds)
339
+ // .toPromise()
340
+ return of().toPromise();
341
+ }
342
+ /**
343
+ * @param {?} contentId
344
+ * @return {?}
345
+ */
346
+ fetchContentHistory(contentId) {
347
+ return this.http.get(`${API_END_POINTS.CONTENT_HISTORY}/${contentId}`);
348
+ }
349
+ /**
350
+ * @param {?} req
351
+ * @return {?}
352
+ */
353
+ fetchContentHistoryV2(req) {
354
+ req.request.fields = ['progressdetails'];
355
+ /** @type {?} */
356
+ const data = this.http.post(`${API_END_POINTS.CONTENT_HISTORYV2}/${req.request.courseId}`, req);
357
+ data.subscribe((/**
358
+ * @param {?} subscribeData
359
+ * @return {?}
360
+ */
361
+ (subscribeData) => {
362
+ this.programChildCourseResumeData.next({ resumeData: subscribeData.result.contentList, courseId: req.request.courseId });
363
+ }));
364
+ return data;
365
+ }
366
+ /**
367
+ * @param {?} id
368
+ * @param {?=} collectionId
369
+ * @param {?=} collectionType
370
+ * @return {?}
371
+ */
372
+ continueLearning(id, collectionId, collectionType) {
373
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
374
+ return new Promise((/**
375
+ * @param {?} resolve
376
+ * @return {?}
377
+ */
378
+ (resolve) => tslib_1.__awaiter(this, void 0, void 0, function* () {
379
+ if (collectionType &&
380
+ collectionType.toLowerCase() === 'playlist') {
381
+ /** @type {?} */
382
+ const reqBody = {
383
+ contextPathId: collectionId ? collectionId : id,
384
+ resourceId: id,
385
+ data: JSON.stringify({
386
+ timestamp: Date.now(),
387
+ contextFullPath: [collectionId, id],
388
+ }),
389
+ dateAccessed: Date.now(),
390
+ contextType: 'playlist',
391
+ };
392
+ yield this.saveContinueLearning(reqBody).toPromise().catch().finally((/**
393
+ * @return {?}
394
+ */
395
+ () => {
396
+ resolve(true);
397
+ }));
398
+ }
399
+ else {
400
+ /** @type {?} */
401
+ const reqBody = {
402
+ contextPathId: collectionId ? collectionId : id,
403
+ resourceId: id,
404
+ data: JSON.stringify({ timestamp: Date.now() }),
405
+ dateAccessed: Date.now(),
406
+ };
407
+ yield this.saveContinueLearning(reqBody).toPromise().catch().finally((/**
408
+ * @return {?}
409
+ */
410
+ () => {
411
+ resolve(true);
412
+ }));
413
+ }
414
+ })));
415
+ });
416
+ }
417
+ /**
418
+ * @param {?} content
419
+ * @return {?}
420
+ */
421
+ saveContinueLearning(content) {
422
+ // const url = API_END_POINTS.USER_CONTINUE_LEARNING
423
+ // return this.http.post<any>(url, content)
424
+ if (content) {
425
+ }
426
+ return (/** @type {?} */ (of()));
427
+ }
428
+ /**
429
+ * @param {?} _contentId
430
+ * @return {?}
431
+ */
432
+ setS3Cookie(_contentId) {
433
+ // return this.http
434
+ // .post(API_END_POINTS.SET_S3_COOKIE, { contentId })
435
+ // .pipe(catchError(_err => of(true)))
436
+ return EMPTY;
437
+ }
438
+ /**
439
+ * @return {?}
440
+ */
441
+ setS3ImageCookie() {
442
+ return this.http.post(API_END_POINTS.SET_S3_IMAGE_COOKIE, {}).pipe(catchError((/**
443
+ * @param {?} _err
444
+ * @return {?}
445
+ */
446
+ _err => of(true))));
447
+ }
448
+ /**
449
+ * @param {?} url
450
+ * @return {?}
451
+ */
452
+ fetchManifest(url) {
453
+ return this.http.post(API_END_POINTS.FETCH_MANIFEST, { url });
454
+ }
455
+ /**
456
+ * @param {?} url
457
+ * @return {?}
458
+ */
459
+ fetchWebModuleContent(url) {
460
+ return this.http.get(`${API_END_POINTS.FETCH_WEB_MODULE_FILES}?url=${encodeURIComponent(url)}`);
461
+ }
462
+ /**
463
+ * @param {?} req
464
+ * @return {?}
465
+ */
466
+ search(req) {
467
+ req.query = req.query || '';
468
+ return this.http.post(API_END_POINTS.CONTENT_SEARCH_V5, {
469
+ request: req,
470
+ });
471
+ }
472
+ /**
473
+ * @param {?} req
474
+ * @return {?}
475
+ */
476
+ searchRegionRecommendation(req) {
477
+ req.query = req.query || '';
478
+ req.preLabelValue =
479
+ (req.preLabelValue || '') +
480
+ ((this.configSvc.userProfile && this.configSvc.userProfile.country) || '');
481
+ req.filters = Object.assign({}, req.filters, { labels: [req.preLabelValue || ''] });
482
+ return this.http.post(API_END_POINTS.CONTENT_SEARCH_REGION_RECOMMENDATION, { request: req });
483
+ }
484
+ /**
485
+ * @param {?} req
486
+ * @return {?}
487
+ */
488
+ searchV6(req) {
489
+ /** @type {?} */
490
+ const apiPath = _.get(req, 'api.path');
491
+ req.query = req.query || '';
492
+ if (apiPath) {
493
+ return this.http.get(apiPath);
494
+ }
495
+ return this.http.post(API_END_POINTS.CONTENT_SEARCH_V6, req);
496
+ }
497
+ /**
498
+ * @param {?} req
499
+ * @return {?}
500
+ */
501
+ searchRelatedCBPV6(req) {
502
+ return this.http.post(API_END_POINTS.CONTENT_SEARCH_RELATED_CBP_V6, req);
503
+ }
504
+ /**
505
+ * @param {?} contentId
506
+ * @return {?}
507
+ */
508
+ fetchContentRating(contentId) {
509
+ return this.http.get(`${API_END_POINTS.CONTENT_RATING}/${contentId}`);
510
+ }
511
+ /**
512
+ * @param {?} contentId
513
+ * @return {?}
514
+ */
515
+ deleteContentRating(contentId) {
516
+ return this.http.delete(`${API_END_POINTS.CONTENT_RATING}/${contentId}`);
517
+ }
518
+ /**
519
+ * @param {?} contentId
520
+ * @param {?} data
521
+ * @return {?}
522
+ */
523
+ addContentRating(contentId, data) {
524
+ return this.http.post(`${API_END_POINTS.CONTENT_RATING}/${contentId}`, data);
525
+ }
526
+ /**
527
+ * @param {?} content
528
+ * @return {?}
529
+ */
530
+ getFirstChildInHierarchy(content) {
531
+ if (!(content.children || []).length) {
532
+ return content;
533
+ }
534
+ if ((content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM &&
535
+ !(content.artifactUrl && content.artifactUrl.length)) ||
536
+ content.primaryCategory === NsContent.EPrimaryCategory.MANDATORY_COURSE_GOAL ||
537
+ (content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM &&
538
+ !(content.artifactUrl && content.artifactUrl.length)) ||
539
+ (content.primaryCategory === NsContent.EPrimaryCategory.MODULE &&
540
+ !(content.artifactUrl && content.artifactUrl.length))) {
541
+ /** @type {?} */
542
+ const child = content.children[0];
543
+ return this.getFirstChildInHierarchy(child);
544
+ }
545
+ if (content.primaryCategory === NsContent.EPrimaryCategory.RESOURCE ||
546
+ content.primaryCategory === NsContent.EPrimaryCategory.KNOWLEDGE_ARTIFACT ||
547
+ content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM ||
548
+ content.primaryCategory === NsContent.EPrimaryCategory.PRACTICE_RESOURCE ||
549
+ content.primaryCategory === NsContent.EPrimaryCategory.FINAL_ASSESSMENT ||
550
+ content.primaryCategory === NsContent.EPrimaryCategory.COMP_ASSESSMENT ||
551
+ content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM ||
552
+ content.primaryCategory === NsContent.EPrimaryCategory.OFFLINE_SESSION) {
553
+ return content;
554
+ }
555
+ /** @type {?} */
556
+ const firstChild = content.children[0];
557
+ /** @type {?} */
558
+ const resultContent = this.getFirstChildInHierarchy(firstChild);
559
+ return resultContent;
560
+ }
561
+ /**
562
+ * @param {?} source
563
+ * @return {?}
564
+ */
565
+ getRegistrationStatus(source) {
566
+ return this.http.get(`${API_END_POINTS.REGISTRATION_STATUS}/${source}`).toPromise();
567
+ }
568
+ /**
569
+ * @param {?} url
570
+ * @return {?}
571
+ */
572
+ fetchConfig(url) {
573
+ return this.http.get(url);
574
+ }
575
+ /**
576
+ * @param {?} body
577
+ * @return {?}
578
+ */
579
+ addCertTemplate(body) {
580
+ return this.http.patch(`${API_END_POINTS.CERT_ADD_TEMPLATE}`, body);
581
+ }
582
+ /**
583
+ * @param {?} body
584
+ * @return {?}
585
+ */
586
+ issueCert(body) {
587
+ return this.http.post(`${API_END_POINTS.CERT_ISSUE}`, body);
588
+ }
589
+ /**
590
+ * @param {?} certId
591
+ * @return {?}
592
+ */
593
+ downloadCert(certId) {
594
+ return this.http.get(`${API_END_POINTS.CERT_DOWNLOAD(certId)}`);
595
+ }
596
+ /**
597
+ * @param {?} req
598
+ * @return {?}
599
+ */
600
+ trendingContentSearch(req) {
601
+ req.query = req.query || '';
602
+ return this.http.post(API_END_POINTS.TRENDING_CONTENT_SEARCH, req);
603
+ }
604
+ /**
605
+ * @param {?} limit
606
+ * @param {?} offset
607
+ * @return {?}
608
+ */
609
+ getKarmaPoitns(limit, offset) {
610
+ return this.http.post(API_END_POINTS.READ_KARMAPOINTS, { limit, offset }).pipe(catchError((/**
611
+ * @param {?} _err
612
+ * @return {?}
613
+ */
614
+ _err => of(true))));
615
+ }
616
+ /**
617
+ * @param {?} contentId
618
+ * @return {?}
619
+ */
620
+ fetchProgramContent(contentId) {
621
+ /** @type {?} */
622
+ let url = '';
623
+ /** @type {?} */
624
+ const forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
625
+ if (!forPreview) {
626
+ return this.http.get(API_END_POINTS.CONTENT_READ(contentId));
627
+ }
628
+ url = `/api/content/v1/read/${contentId}`;
629
+ return this.http.get(url);
630
+ // return this.http.get<NsContent.IContent[]>(API_END_POINTS.CONTENT_READ(contentId))
631
+ }
632
+ /**
633
+ * @param {?} request
634
+ * @return {?}
635
+ */
636
+ getCourseKarmaPoints(request) {
637
+ return this.http.post(API_END_POINTS.READ_COURSE_KARMAPOINTS, request);
638
+ }
639
+ /**
640
+ * @param {?} request
641
+ * @return {?}
642
+ */
643
+ claimKarmapoints(request) {
644
+ return this.http.post(API_END_POINTS.CLAIM_KARMAPOINTS, request);
645
+ }
646
+ /**
647
+ * @return {?}
648
+ */
649
+ userKarmaPoints() {
650
+ return this.http.post(API_END_POINTS.USER_KARMA_POINTS, {});
651
+ }
652
+ /**
653
+ * @param {?} doId
654
+ * @return {?}
655
+ */
656
+ getEnrolledData(doId) {
657
+ /** @type {?} */
658
+ const enrollmentMapData = JSON.parse(localStorage.getItem('enrollmentMapData') || '{}');
659
+ /** @type {?} */
660
+ const enrolledCourseData = enrollmentMapData[doId];
661
+ return enrolledCourseData;
662
+ }
663
+ /**
664
+ * @param {?} content
665
+ * @return {?}
666
+ */
667
+ getResourseLink(content) {
668
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
669
+ /** @type {?} */
670
+ const enrolledCourseData = this.getEnrolledData(content.identifier);
671
+ if (enrolledCourseData) {
672
+ if (enrolledCourseData.content.courseCategory === NsContent.ECourseCategory.BLENDED_PROGRAM ||
673
+ enrolledCourseData.content.courseCategory === NsContent.ECourseCategory.INVITE_ONLY_PROGRAM ||
674
+ enrolledCourseData.content.courseCategory === NsContent.ECourseCategory.MODERATED_PROGRAM ||
675
+ enrolledCourseData.content.primaryCategory === NsContent.EPrimaryCategory.BLENDED_PROGRAM ||
676
+ enrolledCourseData.content.primaryCategory === NsContent.EPrimaryCategory.PROGRAM) {
677
+ if (!this.isBatchInProgress(enrolledCourseData.batch)) {
678
+ return this.gotoTocPage(content);
679
+ }
680
+ /** @type {?} */
681
+ const data = yield this.checkForDataToFormUrl(content, enrolledCourseData);
682
+ return data;
683
+ }
684
+ {
685
+ /** @type {?} */
686
+ const data = yield this.checkForDataToFormUrl(content, enrolledCourseData);
687
+ return data;
688
+ }
689
+ }
690
+ return this.gotoTocPage(content);
691
+ });
692
+ }
693
+ /**
694
+ * @param {?} content
695
+ * @param {?} enrollData
696
+ * @return {?}
697
+ */
698
+ checkForDataToFormUrl(content, enrollData) {
699
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
700
+ /** @type {?} */
701
+ let urlData;
702
+ if (enrollData.completionPercentage === 100) {
703
+ return this.gotoTocPage(enrollData);
704
+ }
705
+ if (enrollData.lrcProgressDetails && enrollData.lrcProgressDetails.mimeType) {
706
+ /** @type {?} */
707
+ const modifyEnrollData = Object.assign({}, enrollData, { identifier: enrollData.collectionId, primaryCategory: enrollData.content.primaryCategory, name: enrollData.content.name });
708
+ if (modifyEnrollData.lastReadContentId) {
709
+ return this.getResourseDataWithData(modifyEnrollData, enrollData.lastReadContentId, enrollData.lrcProgressDetails.mimeType);
710
+ }
711
+ if (modifyEnrollData.firstChildId) {
712
+ return this.getResourseDataWithData(modifyEnrollData, enrollData.firstChildId, enrollData.lrcProgressDetails.mimeType);
713
+ }
714
+ }
715
+ if (enrollData.firstChildId || enrollData.lastReadContentId) {
716
+ /** @type {?} */
717
+ const doId = enrollData.firstChildId || enrollData.lastReadContentId;
718
+ /** @type {?} */
719
+ const responseData = yield this.fetchProgramContent(doId).toPromise().then((/**
720
+ * @param {?} res
721
+ * @return {?}
722
+ */
723
+ (res) => tslib_1.__awaiter(this, void 0, void 0, function* () {
724
+ if (res && res.result && res.result.content) {
725
+ /** @type {?} */
726
+ const contentData = res.result.content;
727
+ /** @type {?} */
728
+ const modifyEnrollData = Object.assign({}, enrollData, { identifier: enrollData.collectionId, primaryCategory: enrollData.content.primaryCategory, name: enrollData.content.name });
729
+ urlData = this.getResourseDataWithData(modifyEnrollData, contentData.identifier, contentData.mimeType);
730
+ if (urlData) {
731
+ return urlData;
732
+ }
733
+ }
734
+ })));
735
+ return responseData ? responseData : this.gotoTocPage(content);
736
+ }
737
+ return this.gotoTocPage(content);
738
+ });
739
+ }
740
+ /**
741
+ * @param {?} content
742
+ * @param {?} resourseId
743
+ * @param {?} mimeType
744
+ * @return {?}
745
+ */
746
+ getResourseDataWithData(content, resourseId, mimeType) {
747
+ if (content) {
748
+ /** @type {?} */
749
+ const url = viewerRouteGenerator(resourseId, mimeType, content.identifier, 'Course', false, 'Learning Resource', content.batchId, content.name);
750
+ return url;
751
+ }
752
+ return this.gotoTocPage(content);
753
+ }
754
+ /**
755
+ * @param {?} content
756
+ * @return {?}
757
+ */
758
+ gotoTocPage(content) {
759
+ /** @type {?} */
760
+ const urlData = {
761
+ url: `/app/toc/${content.identifier ? content.identifier : content.collectionId}/overview`,
762
+ queryParams: { batchId: content.batchId },
763
+ };
764
+ if (content.endDate) {
765
+ urlData.queryParams = Object.assign({}, urlData.queryParams, { planType: 'cbPlan', endDate: content.endDate });
766
+ }
767
+ return urlData;
768
+ }
769
+ /**
770
+ * @param {?} batchData
771
+ * @return {?}
772
+ */
773
+ isBatchInProgress(batchData) {
774
+ // if (this.content && this.content['batches']) {
775
+ // const batches = this.content['batches'] as NsContent.IBatch
776
+ if (batchData && batchData.endDate) {
777
+ /** @type {?} */
778
+ const now = moment().format('YYYY-MM-DD');
779
+ /** @type {?} */
780
+ const startDate = moment(batchData.startDate).format('YYYY-MM-DD');
781
+ /** @type {?} */
782
+ const endDate = batchData.endDate ? moment(batchData.endDate).format('YYYY-MM-DD') : now;
783
+ return (
784
+ // batch.status &&
785
+ moment(startDate).isSameOrBefore(now)
786
+ && moment(endDate).isSameOrAfter(now));
787
+ }
788
+ return true;
789
+ }
790
+ /**
791
+ * @param {?} apiUrl
792
+ * @param {?} req
793
+ * @return {?}
794
+ */
795
+ postApiMethod(apiUrl, req) {
796
+ return this.http.post(apiUrl, req);
797
+ }
798
+ /**
799
+ * @param {?} apiUrl
800
+ * @return {?}
801
+ */
802
+ getApiMethod(apiUrl) {
803
+ // req.query = req.query || '';
804
+ return this.http.get(apiUrl);
805
+ }
806
+ }
807
+ WidgetContentService.decorators = [
808
+ { type: Injectable, args: [{
809
+ providedIn: 'root',
810
+ },] }
811
+ ];
812
+ /** @nocollapse */
813
+ WidgetContentService.ctorParameters = () => [
814
+ { type: HttpClient },
815
+ { type: ConfigurationsService }
816
+ ];
817
+ /** @nocollapse */ WidgetContentService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function WidgetContentService_Factory() { return new WidgetContentService(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.ConfigurationsService)); }, token: WidgetContentService, providedIn: "root" });
818
+ if (false) {
819
+ /** @type {?} */
820
+ WidgetContentService.prototype.tocConfigData;
821
+ /** @type {?} */
822
+ WidgetContentService.prototype.tocConfigData$;
823
+ /**
824
+ * @type {?}
825
+ * @private
826
+ */
827
+ WidgetContentService.prototype.telemetryData;
828
+ /** @type {?} */
829
+ WidgetContentService.prototype.telemetryData$;
830
+ /** @type {?} */
831
+ WidgetContentService.prototype.currentMetaData;
832
+ /** @type {?} */
833
+ WidgetContentService.prototype.currentContentReadMetaData;
834
+ /** @type {?} */
835
+ WidgetContentService.prototype.currentBatchEnrollmentList;
836
+ /** @type {?} */
837
+ WidgetContentService.prototype.programChildCourseResumeData;
838
+ /** @type {?} */
839
+ WidgetContentService.prototype.programChildCourseResumeData$;
840
+ /**
841
+ * @type {?}
842
+ * @private
843
+ */
844
+ WidgetContentService.prototype.http;
845
+ /**
846
+ * @type {?}
847
+ * @private
848
+ */
849
+ WidgetContentService.prototype.configSvc;
850
+ }
851
+ export { ɵ0, ɵ1, ɵ2, ɵ3 };
852
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbnRlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uLyIsInNvdXJjZXMiOlsibGliL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0QsT0FBTyxFQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQUc1RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQTtBQUMzQixPQUFPLEVBQUcsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUMzRCxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQzs7Ozs7TUFDNUIsTUFBTSxHQUFHLE9BQU87Ozs7TUFJaEIsaUJBQWlCLEdBQUcsb0JBQW9COzs7Ozs7QUF5QnRCLENBQUMsSUFBWSxFQUFFLEVBQVUsRUFBRSxFQUFFLENBQ2pELEdBQUcsaUJBQWlCLHVCQUF1QixJQUFJLElBQUksRUFBRSxFQUFFOzs7O0FBRWxDLENBQUMsU0FBaUIsRUFBRSxFQUFFLENBQUMsR0FBRyxpQkFBaUIsa0JBQWtCLFNBQVMsRUFBRTs7OztBQVFoRixDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxpQkFBaUIsdUNBQXVDLE1BQU0sRUFBRTs7OztBQUVyRixDQUFDLFNBQWMsRUFBRSxF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O0lBQ2hCLENBQUM7Ozs7OztJQUNELGFBQWEsQ0FBQyxNQUFXLEVBQUUsR0FBUTtRQUNqQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFxQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekQsQ0FBQzs7Ozs7SUFDRCxZQUFZLENBQUMsTUFBVztRQUN0QiwrQkFBK0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUIsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQzs7O1lBdGdCRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFoRVEsVUFBVTtZQUVWLHFCQUFxQjs7Ozs7SUFzRTVCLDZDQUFrRDs7SUFDbEQsOENBQW9EOzs7OztJQUVwRCw2Q0FBK0M7O0lBQy9DLDhDQUF5RDs7SUFDekQsK0NBQXFDOztJQUNyQywwREFBZ0Q7O0lBQ2hELDBEQUFpRDs7SUFDakQsNERBQTREOztJQUM1RCw2REFBaUY7Ozs7O0lBZC9FLG9DQUF3Qjs7Ozs7SUFDeEIseUNBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12Mic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBFTVBUWSwgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHJldHJ5LCBtYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBOc0NvbnRlbnRTdHJpcE11bHRpcGxlIH0gZnJvbSAnLi4vX21vZGVscy9jb250ZW50LXN0cmlwLW11bHRpcGxlLm1vZGVsJztcclxuaW1wb3J0IHsgTnNDb250ZW50IH0gZnJvbSAnLi4vX21vZGVscy93aWRnZXQtY29udGVudC5tb2RlbCc7XHJcbmltcG9ydCB7IE5TU2VhcmNoIH0gZnJvbSAnLi4vX21vZGVscy93aWRnZXQtc2VhcmNoLm1vZGVsJztcclxuLy8gdHNsaW50OmRpc2FibGVcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXHJcbmltcG9ydCB7ICB2aWV3ZXJSb3V0ZUdlbmVyYXRvciB9IGZyb20gJy4vdmlld2VyLXJvdXRlLXV0aWwnXHJcbmltcG9ydCAqIGFzIG1vbWVudF8gZnJvbSAnbW9tZW50JztcclxuY29uc3QgbW9tZW50ID0gbW9tZW50XztcclxuLy8gdHNsaW50OmVuYWJsZVxyXG5cclxuLy8gVE9ETzogbW92ZSB0aGlzIGluIHNvbWUgY29tbW9uIHBsYWNlXHJcbmNvbnN0IFBST1RFQ1RFRF9TTEFHX1Y4ID0gJy9hcGlzL3Byb3RlY3RlZC92OCc7XHJcblxyXG5jb25zdCBBUElfRU5EX1BPSU5UUyA9IHtcclxuICBDT05URU5UOiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudGAsXHJcbiAgQVVUSE9SSU5HX0NPTlRFTlQ6IGAvYXBpL2NvdXJzZS92MS9oaWVyYXJjaHlgLFxyXG4gIENPTlRFTlRfTElLRVM6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L2xpa2VDb3VudGAsXHJcbiAgU0VUX1MzX0NPT0tJRTogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvc2V0Q29va2llYCxcclxuICBTRVRfUzNfSU1BR0VfQ09PS0lFOiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudC9zZXRJbWFnZUNvb2tpZWAsXHJcbiAgRkVUQ0hfTUFOSUZFU1Q6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb250ZW50L2dldFdlYk1vZHVsZU1hbmlmZXN0YCxcclxuICBGRVRDSF9XRUJfTU9EVUxFX0ZJTEVTOiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudC9nZXRXZWJNb2R1bGVGaWxlc2AsXHJcbiAgTVVMVElQTEVfQ09OVEVOVDogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvbXVsdGlwbGVgLFxyXG4gIENPTlRFTlRfU0VBUkNIX1Y1OiBgJHtQUk9URUNURURfU0xBR19WOH0vY29udGVudC9zZWFyY2hWNWAsXHJcbiAgQ09OVEVOVF9TRUFSQ0hfVjY6IGAvYXBpcy9wcm94aWVzL3Y4L3N1bmJpcmRpZ290L3NlYXJjaGAsXHJcbiAgVFJFTkRJTkdfQ09OVEVOVF9TRUFSQ0g6IGBhcGlzL3Byb3hpZXMvdjgvdHJlbmRpbmcvY29udGVudC9zZWFyY2hgLFxyXG4gIENPTlRFTlRfU0VBUkNIX1JFTEFURURfQ0JQX1Y2OiBgL2FwaXMvcHJveGllcy92OC9zdW5iaXJkaWdvdC9zZWFyY2hgLFxyXG4gIENPTlRFTlRfU0VBUkNIX1JFR0lPTl9SRUNPTU1FTkRBVElPTjogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvc2VhcmNoUmVnaW9uUmVjb21tZW5kYXRpb25gLFxyXG4gIENPTlRFTlRfSElTVE9SWTogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L3VzZXIvaGlzdG9yeWAsXHJcbiAgQ09OVEVOVF9ISVNUT1JZVjI6IGAvYXBpcy9wcm94aWVzL3Y4L3JlYWQvY29udGVudC1wcm9ncmVzYCxcclxuICBDT1VSU0VfQkFUQ0hfTElTVDogYC9hcGlzL3Byb3hpZXMvdjgvbGVhcm5lci9jb3Vyc2UvdjEvYmF0Y2gvbGlzdGAsXHJcbiAgQ09VUlNFX0JBVENIOiBgL2FwaXMvcHJveGllcy92OC9jb3Vyc2UvdjEvYmF0Y2gvcmVhZGAsXHJcbiAgQVVUT19BU1NJR05fQkFUQ0g6IGAvYXBpcy9wcm90ZWN0ZWQvdjgvY29ob3J0cy91c2VyL2F1dG9lbnJvbGxtZW50L2AsXHJcbiAgQVVUT19BU1NJR05fQ1VSQVRFRF9CQVRDSDogYC9hcGlzL3Byb3hpZXMvdjgvY3VyYXRlZHByb2dyYW0vdjEvZW5yb2xgLFxyXG4gIEFVVE9fQVNTSUdOX09QRU5fUFJPR1JBTTogYC9hcGlzL3Byb3hpZXMvdjgvb3BlbnByb2dyYW0vdjEvZW5yb2xgLFxyXG4gIFVTRVJfQ09OVElOVUVfTEVBUk5JTkc6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS91c2VyL2hpc3RvcnkvY29udGludWVgLFxyXG4gIENPTlRFTlRfUkFUSU5HOiBgJHtQUk9URUNURURfU0xBR19WOH0vdXNlci9yYXRpbmdgLFxyXG4gIENPTExFQ1RJT05fSElFUkFSQ0hZOiAodHlwZTogc3RyaW5nLCBpZDogc3RyaW5nKSA9PlxyXG4gICAgYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvbnRlbnQvY29sbGVjdGlvbi8ke3R5cGV9LyR7aWR9YCxcclxuICBSRUdJU1RSQVRJT05fU1RBVFVTOiBgJHtQUk9URUNURURfU0xBR19WOH0vYWRtaW4vdXNlclJlZ2lzdHJhdGlvbi9jaGVja1VzZXJSZWdpc3RyYXRpb25Db250ZW50YCxcclxuICBNQVJLX0FTX0NPTVBMRVRFX01FVEE6IChjb250ZW50SWQ6IHN0cmluZykgPT4gYCR7UFJPVEVDVEVEX1NMQUdfVjh9L3VzZXIvcHJvZ3Jlc3MvJHtjb250ZW50SWR9YCxcclxuICBFTlJPTExfQkFUQ0g6IGAvYXBpcy9wcm94aWVzL3Y4L2xlYXJuZXIvY291cnNlL3YxL2Vucm9sYCxcclxuICBFTlJPTExfQkFUQ0hfV0Y6IGAvYXBpcy9wcm94aWVzL3Y4L3dvcmtmbG93L2JsZW5kZWRwcm9ncmFtL2Vucm9sYCxcclxuICBXSVRIRFJBV19CQVRDSF9XRjogYC9hcGlzL3Byb3hpZXMvdjgvd29ya2Zsb3cvYmxlbmRlZHByb2dyYW0vdW5lbnJvbGAsXHJcbiAgQkxFTkRFRF9VU0VSX1dGOiBgL2FwaXMvcHJveGllcy92OC93b3JrZmxvdy9ibGVuZGVkcHJvZ3JhbS91c2VyL3NlYXJjaGAsXHJcbiAgQkxFTkRFRF9VU0VSX0NPVU5UOiBgYXBpcy9wcm94aWVzL3Y4L3dvcmtmbG93L2JsZW5kZWRwcm9ncmFtL2Vucm9sL3N0YXR1cy9jb3VudGAsXHJcbiAgQ0VSVF9BRERfVEVNUExBVEU6IGAke1BST1RFQ1RFRF9TTEFHX1Y4fS9jb2hvcnRzL2NvdXJzZS9iYXRjaC9jZXJ0L3RlbXBsYXRlL2FkZGAsXHJcbiAgQ0VSVF9JU1NVRTogYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvaG9ydHMvY291cnNlL2JhdGNoL2NlcnQvaXNzdWVgLFxyXG4gIENFUlRfRE9XTkxPQUQ6IChjZXJ0SWQ6IGFueSkgPT4gYCR7UFJPVEVDVEVEX1NMQUdfVjh9L2NvaG9ydHMvY291cnNlL2JhdGNoL2NlcnQvZG93bmxvYWQvJHtjZXJ0SWR9YCxcclxuICBSRUFEX0tBUk1BUE9JTlRTOiBgL2FwaXMvcHJveGllcy92OC9rYXJtYXBvaW50cy9yZWFkYCxcclxuICBDT05URU5UX1JFQUQ6IChjb250ZW50SWQ6IGFueSkgPT4gYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvcmVhZC8ke2NvbnRlbnRJZH1gLFxyXG4gIFJFQURfQ09VUlNFX0tBUk1BUE9JTlRTOiAnL2FwaXMvcHJveGllcy92OC9rYXJtYXBvaW50cy91c2VyL2NvdXJzZS9yZWFkJyxcclxuICBDTEFJTV9LQVJNQVBPSU5UUzogJy9hcGlzL3Byb3hpZXMvdjgvY2xhaW1rYXJtYXBvaW50cycsXHJcbiAgVVNFUl9LQVJNQV9QT0lOVFM6ICcvYXBpcy9wcm94aWVzL3Y4L3VzZXIvdG90YWxrYXJtYXBvaW50cycsXHJcbiAgQUdHUkVHQVRJT05fU0VBUkNIOiAnL2FwaXMvcHJveGllcy92OC9jb250ZW50L2FnZ3JlZ2F0aW9uL3NlYXJjaCcsXHJcbiAgRkVBVFVSRV9TRUFSQ0g6ICcvYXBpcy9wcm94aWVzL3Y4L2ZlYXR1cmVkL2NvbnRlbnQvc2VhcmNoJyxcclxufTtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXaWRnZXRDb250ZW50U2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgdG9jQ29uZmlnRGF0YTogYW55ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt9KTtcclxuICB0b2NDb25maWdEYXRhJCAgPSB0aGlzLnRvY0NvbmZpZ0RhdGEuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgdGVsZW1ldHJ5RGF0YTogYW55ID0gbmV3IFN1YmplY3Q8YW55PigpXHJcbiAgcHVibGljIHRlbGVtZXRyeURhdGEkID0gdGhpcy50ZWxlbWV0cnlEYXRhLmFzT2JzZXJ2YWJsZSgpXHJcbiAgY3VycmVudE1ldGFEYXRhITogTnNDb250ZW50LklDb250ZW50O1xyXG4gIGN1cnJlbnRDb250ZW50UmVhZE1ldGFEYXRhITogTnNDb250ZW50LklDb250ZW50O1xyXG4gIGN1cnJlbnRCYXRjaEVucm9sbG1lbnRMaXN0ITogTnNDb250ZW50LklDb3Vyc2VbXTtcclxuICBwcm9ncmFtQ2hpbGRDb3Vyc2VSZXN1bWVEYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt9KTtcclxuICBwcm9ncmFtQ2hpbGRDb3Vyc2VSZXN1bWVEYXRhJCA9IHRoaXMucHJvZ3JhbUNoaWxkQ291cnNlUmVzdW1lRGF0YS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgY2hhbmdlVGVsZW1ldHJ5RGF0YShtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGVsZW1ldHJ5RGF0YS5uZXh0KG1lc3NhZ2UpO1xyXG4gIH1cclxuICBpc1Jlc291cmNlKHByaW1hcnlDYXRlZ29yeTogc3RyaW5nKSB7XHJcbiAgICBpZiAocHJpbWFyeUNhdGVnb3J5KSB7XHJcbiAgICAgIGNvbnN0IGlzUmVzb3VyY2UgPSAocHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVJlc291cmNlUHJpbWFyeUNhdGVnb3JpZXMuTEVBUk5JTkdfUkVTT1VSQ0UpIHx8XHJcbiAgICAgICAgKHByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVSZXNvdXJjZVByaW1hcnlDYXRlZ29yaWVzLlBSQUNUSUNFX1JFU09VUkNFKSB8fFxyXG4gICAgICAgIChwcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUmVzb3VyY2VQcmltYXJ5Q2F0ZWdvcmllcy5GSU5BTF9BU1NFU1NNRU5UKSB8fFxyXG4gICAgICAgIChwcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUmVzb3VyY2VQcmltYXJ5Q2F0ZWdvcmllcy5DT01QX0FTU0VTU01FTlQpIHx8XHJcbiAgICAgICAgKHByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVSZXNvdXJjZVByaW1hcnlDYXRlZ29yaWVzLk9GRkxJTkVfU0VTU0lPTik7XHJcbiAgICAgIHJldHVybiBpc1Jlc291cmNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hNYXJrQXNDb21wbGV0ZU1ldGEoaWRlbnRpZmllcjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxyXG4gICAgY29uc3QgdXJsID0gQVBJX0VORF9QT0lOVFMuTUFSS19BU19DT01QTEVURV9NRVRBKGlkZW50aWZpZXIpXHJcbiAgICAvLyByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwpLnRvUHJvbWlzZSgpXHJcbiAgICBpZiAodXJsKSB7IH1cclxuICAgIHJldHVybiBvZigpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVG9jQ29uZmlnKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy50b2NDb25maWdEYXRhLm5leHQoZGF0YSk7XHJcbiAgfVxyXG5cclxuICBmZXRjaENvbnRlbnQoXHJcbiAgICBjb250ZW50SWQ6IHN0cmluZyxcclxuICAgIGhpZXJhcmNoeVR5cGU6ICdhbGwnIHwgJ21pbmltYWwnIHwgJ2RldGFpbCcgPSAnZGV0YWlsJyxcclxuICAgIF9hZGRpdGlvbmFsRmllbGRzOiBzdHJpbmdbXSA9IFtdLFxyXG4gICAgcHJpbWFyeUNhdGVnb3J5Pzogc3RyaW5nIHwgbnVsbCxcclxuICApOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudD4ge1xyXG4gICAgLy8gY29uc3QgdXJsID0gYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVH0vJHtjb250ZW50SWR9P2hpZXJhcmNoeVR5cGU9JHtoaWVyYXJjaHlUeXBlfWBcclxuICAgIGxldCB1cmwgPSAnJztcclxuICAgIGNvbnN0IGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpO1xyXG4gICAgaWYgKHByaW1hcnlDYXRlZ29yeSAmJiB0aGlzLmlzUmVzb3VyY2UocHJpbWFyeUNhdGVnb3J5KSkge1xyXG4gICAgICBpZiAoIWZvclByZXZpZXcpIHtcclxuICAgICAgICB1cmwgPSBgL2FwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9yZWFkLyR7Y29udGVudElkfWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdXJsID0gYC9hcGkvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWA7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghZm9yUHJldmlldykge1xyXG4gICAgICAgIHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/aGllcmFyY2h5VHlwZT0ke2hpZXJhcmNoeVR5cGV9YDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBmb3JjcmVhdG9yID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2VkaXRNb2RlPXRydWUnKTtcclxuICAgICAgICBpZiAoZm9yY3JlYXRvcikge1xyXG4gICAgICAgICAgdXJsID0gYGFwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9oaWVyYXJjaHkvJHtjb250ZW50SWR9P21vZGU9ZWRpdGA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHVybCA9IGAvYXBpL2NvdXJzZS92MS9oaWVyYXJjaHkvJHtjb250ZW50SWR9P2hpZXJhcmNoeVR5cGU9JHtoaWVyYXJjaHlUeXBlfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAvLyAgIC5wb3N0PE5zQ29udGVudC5JQ29udGVudD4odXJsLCB7IGFkZGl0aW9uYWxGaWVsZHMgfSlcclxuICAgIC8vICAgLnBpcGUocmV0cnkoMSkpXHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8TnNDb250ZW50LklDb250ZW50Pih1cmwpXHJcbiAgICAgIC5waXBlKHNoYXJlUmVwbGF5KDEpKTtcclxuICAgIC8vIGlmIChhcGlEYXRhICYmIGFwaURhdGEucmVzdWx0KSB7XHJcbiAgICAvLyAgIHJldHVybiBhcGlEYXRhLnJlc3VsdC5jb250ZW50XHJcbiAgICAvLyB9XHJcbiAgfVxyXG4gIGZldGNoQXV0aG9yaW5nQ29udGVudChjb250ZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50PiB7XHJcbiAgICBjb25zdCBmb3JjcmVhdG9yID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ2VkaXRNb2RlPXRydWUnKTtcclxuICAgIGxldCB1cmwgPSAnJztcclxuICAgIGlmIChmb3JjcmVhdG9yKSB7XHJcbiAgICAgIHVybCA9IGBhcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvaGllcmFyY2h5LyR7Y29udGVudElkfT9tb2RlPWVkaXRgO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gYCR7QVBJX0VORF9QT0lOVFMuQVVUSE9SSU5HX0NPTlRFTlR9LyR7Y29udGVudElkfT9oaWVyYXJjaHlUeXBlPWRldGFpbGA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnQ+KHVybCkucGlwZShzaGFyZVJlcGxheSgxKSwgciA9PiByKTtcclxuICB9XHJcbiAgZmV0Y2hNdWx0aXBsZUNvbnRlbnQoaWRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50W10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudFtdPihcclxuICAgICAgYCR7QVBJX0VORF9QT0lOVFMuTVVMVElQTEVfQ09OVEVOVH0vJHtpZHMuam9pbignLCcpfWAsXHJcbiAgICApO1xyXG4gIH1cclxuICBmZXRjaENvbGxlY3Rpb25IaWVyYXJjaHkodHlwZTogc3RyaW5nLCBpZDogc3RyaW5nLCBwYWdlTnVtYmVyOiBudW1iZXIgPSAwLCBwYWdlU2l6ZTogbnVtYmVyID0gMSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb2xsZWN0aW9uSGllcmFyY2h5UmVzcG9uc2U+KFxyXG4gICAgICBgJHtBUElfRU5EX1BPSU5UUy5DT0xMRUNUSU9OX0hJRVJBUkNIWShcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIGlkLFxyXG4gICAgICApfT9wYWdlTnVtYmVyPSR7cGFnZU51bWJlcn0mcGFnZVNpemU9JHtwYWdlU2l6ZX1gLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZldGNoQmxlbmRlZENvdXJzZSgpIHtcclxuXHJcbiAgfVxyXG5cclxuICBmZXRjaENvdXJzZUJhdGNoZXMocmVxOiBhbnkpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3Q8TnNDb250ZW50LklCYXRjaExpc3RSZXNwb25zZT4oQVBJX0VORF9QT0lOVFMuQ09VUlNFX0JBVENIX0xJU1QsIHJlcSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgcmV0cnkoMSksXHJcbiAgICAgICAgbWFwKFxyXG4gICAgICAgICAgKGRhdGE6IGFueSkgPT4gZGF0YS5yZXN1bHQucmVzcG9uc2VcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBmZXRjaCBpbmRpdmlkdWFsIGJhdGNoXHJcbiAgZmV0Y2hDb3Vyc2VCYXRjaChiYXRjaElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGludWVMZWFybmluZ0RhdGE+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGludWVMZWFybmluZ0RhdGE+KFxyXG4gICAgICBgJHtBUElfRU5EX1BPSU5UUy5DT1VSU0VfQkFUQ0h9LyR7YmF0Y2hJZH1gLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGF1dG9Bc3NpZ25CYXRjaEFwaShpZGVudGlmaWVyOiBhbnkpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2U+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2U+KGAke0FQSV9FTkRfUE9JTlRTLkFVVE9fQVNTSUdOX0JBVENIfSR7aWRlbnRpZmllcn1gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICByZXRyeSgxKSxcclxuICAgICAgICBtYXAoXHJcbiAgICAgICAgICAoZGF0YTogYW55KSA9PiBkYXRhLnJlc3VsdC5yZXNwb25zZVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGF1dG9Bc3NpZ25DdXJhdGVkQmF0Y2hBcGkocmVxdWVzdDogYW55LCBwcm9ncmFtVHlwZTogYW55KTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCB1cmwgPSBwcm9ncmFtVHlwZSA9PT0gTnNDb250ZW50LkVDb3Vyc2VDYXRlZ29yeS5NT0RFUkFURURfUFJPR1JBTSA/XHJcbiAgICBBUElfRU5EX1BPSU5UUy5BVVRPX0FTU0lHTl9PUEVOX1BST0dSQU0gOiBBUElfRU5EX1BPSU5UUy5BVVRPX0FTU0lHTl9DVVJBVEVEX0JBVENIO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2U+KGAke3VybH1gLCByZXF1ZXN0KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICByZXRyeSgxKSxcclxuICAgICAgICBtYXAoXHJcbiAgICAgICAgICAoZGF0YTogYW55KSA9PiBkYXRhLnJlc3VsdC5yZXNwb25zZVxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGVucm9sbFVzZXJUb0JhdGNoKHJlcTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0KEFQSV9FTkRfUE9JTlRTLkVOUk9MTF9CQVRDSCwgcmVxKVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBlbnJvbGxBbmRVbmVucm9sbFVzZXJUb0JhdGNoV0YocmVxOiBhbnksIHR5cGU6IGFueSkge1xyXG4gICAgY29uc3QgdXJsOiBhbnkgPSB0eXBlID09PSAnV0lUSERSQVcnID8gQVBJX0VORF9QT0lOVFMuV0lUSERSQVdfQkFUQ0hfV0YgOiBBUElfRU5EX1BPSU5UUy5FTlJPTExfQkFUQ0hfV0Y7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0KHVybCwgcmVxKVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBmZXRjaEJsZW5kZWRVc2VyV0YocmVxOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3QoQVBJX0VORF9QT0lOVFMuQkxFTkRFRF9VU0VSX1dGLCByZXEpXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIGZldGNoQmxlbmRlZFVzZXJDT1VOVChyZXE6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdChBUElfRU5EX1BPSU5UUy5CTEVOREVEX1VTRVJfQ09VTlQsIHJlcSlcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hDb250ZW50TGlrZXMoY29udGVudElkczogeyBjb250ZW50X2lkOiBzdHJpbmdbXSB9KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0PHsgW2lkZW50aWZpZXI6IHN0cmluZ106IG51bWJlciB9PihBUElfRU5EX1BPSU5UUy5DT05URU5UX0xJS0VTLCBjb250ZW50SWRzKVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG4gIGZldGNoQ29udGVudFJhdGluZ3MoY29udGVudElkczogeyBjb250ZW50SWRzOiBzdHJpbmdbXSB9KSB7XHJcbiAgICBpZiAoY29udGVudElkcykgeyB9XHJcbiAgICAvLyByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAvLyAgIC5wb3N0KGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUkFUSU5HfS9yYXRpbmdgLCBjb250ZW50SWRzKVxyXG4gICAgLy8gICAudG9Qcm9taXNlKClcclxuICAgIHJldHVybiBvZigpLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hDb250ZW50SGlzdG9yeShjb250ZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250aW51ZUxlYXJuaW5nRGF0YT4oXHJcbiAgICAgIGAke0FQSV9FTkRfUE9JTlRTLkNPTlRFTlRfSElTVE9SWX0vJHtjb250ZW50SWR9YCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmZXRjaENvbnRlbnRIaXN0b3J5VjIocmVxOiBOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhUmVxKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRpbnVlTGVhcm5pbmdEYXRhPiB7XHJcbiAgICByZXEucmVxdWVzdC5maWVsZHMgPSBbJ3Byb2dyZXNzZGV0YWlscyddO1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuaHR0cC5wb3N0PE5zQ29udGVudC5JQ29udGludWVMZWFybmluZ0RhdGE+KFxyXG4gICAgICBgJHtBUElfRU5EX1BPSU5UUy5DT05URU5UX0hJU1RPUllWMn0vJHtyZXEucmVxdWVzdC5jb3Vyc2VJZH1gLCByZXFcclxuICAgICk7XHJcbiAgICBkYXRhLnN1YnNjcmliZSgoc3Vic2NyaWJlRGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnByb2dyYW1DaGlsZENvdXJzZVJlc3VtZURhdGEubmV4dCh7IHJlc3VtZURhdGE6IHN1YnNjcmliZURhdGEucmVzdWx0LmNvbnRlbnRMaXN0LCBjb3Vyc2VJZDogcmVxLnJlcXVlc3QuY291cnNlSWQgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbnRpbnVlTGVhcm5pbmcoaWQ6IHN0cmluZywgY29sbGVjdGlvbklkPzogc3RyaW5nLCBjb2xsZWN0aW9uVHlwZT86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgcmVzb2x2ZSA9PiB7XHJcbiAgICAgIGlmIChjb2xsZWN0aW9uVHlwZSAmJlxyXG4gICAgICAgIGNvbGxlY3Rpb25UeXBlLnRvTG93ZXJDYXNlKCkgPT09ICdwbGF5bGlzdCcpIHtcclxuICAgICAgICBjb25zdCByZXFCb2R5ID0ge1xyXG4gICAgICAgICAgY29udGV4dFBhdGhJZDogY29sbGVjdGlvbklkID8gY29sbGVjdGlvbklkIDogaWQsXHJcbiAgICAgICAgICByZXNvdXJjZUlkOiBpZCxcclxuICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICBjb250ZXh0RnVsbFBhdGg6IFtjb2xsZWN0aW9uSWQsIGlkXSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgZGF0ZUFjY2Vzc2VkOiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgY29udGV4dFR5cGU6ICdwbGF5bGlzdCcsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNhdmVDb250aW51ZUxlYXJuaW5nKHJlcUJvZHkpLnRvUHJvbWlzZSgpLmNhdGNoKCkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHJlcUJvZHkgPSB7XHJcbiAgICAgICAgICBjb250ZXh0UGF0aElkOiBjb2xsZWN0aW9uSWQgPyBjb2xsZWN0aW9uSWQgOiBpZCxcclxuICAgICAgICAgIHJlc291cmNlSWQ6IGlkLFxyXG4gICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoeyB0aW1lc3RhbXA6IERhdGUubm93KCkgfSksXHJcbiAgICAgICAgICBkYXRlQWNjZXNzZWQ6IERhdGUubm93KCksXHJcbiAgICAgICAgfTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNhdmVDb250aW51ZUxlYXJuaW5nKHJlcUJvZHkpLnRvUHJvbWlzZSgpLmNhdGNoKCkuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgc2F2ZUNvbnRpbnVlTGVhcm5pbmcoY29udGVudDogTnNDb250ZW50LklWaWV3ZXJDb250aW51ZUxlYXJuaW5nUmVxdWVzdCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBjb25zdCB1cmwgPSBBUElfRU5EX1BPSU5UUy5VU0VSX0NPTlRJTlVFX0xFQVJOSU5HXHJcbiAgICAvLyByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih1cmwsIGNvbnRlbnQpXHJcbiAgICBpZiAoY29udGVudCkge1xyXG5cclxuICAgIH1cclxuICAgIHJldHVybiBvZigpIGFzIGFueTtcclxuICB9XHJcblxyXG4gIHNldFMzQ29va2llKFxyXG4gICAgX2NvbnRlbnRJZDogc3RyaW5nLFxyXG4gICAgLy8gX3BhdGg6IHN0cmluZyxcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgLy8gICAucG9zdChBUElfRU5EX1BPSU5UUy5TRVRfUzNfQ09PS0lFLCB7IGNvbnRlbnRJZCB9KVxyXG4gICAgLy8gICAucGlwZShjYXRjaEVycm9yKF9lcnIgPT4gb2YodHJ1ZSkpKVxyXG5cclxuICAgIHJldHVybiBFTVBUWTtcclxuICB9XHJcblxyXG4gIHNldFMzSW1hZ2VDb29raWUoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChBUElfRU5EX1BPSU5UUy5TRVRfUzNfSU1BR0VfQ09PS0lFLCB7fSkucGlwZShjYXRjaEVycm9yKF9lcnIgPT4gb2YodHJ1ZSkpKTtcclxuICB9XHJcblxyXG4gIGZldGNoTWFuaWZlc3QodXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KEFQSV9FTkRfUE9JTlRTLkZFVENIX01BTklGRVNULCB7IHVybCB9KTtcclxuICB9XHJcbiAgZmV0Y2hXZWJNb2R1bGVDb250ZW50KHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke0FQSV9FTkRfUE9JTlRTLkZFVENIX1dFQl9NT0RVTEVfRklMRVN9P3VybD0ke2VuY29kZVVSSUNvbXBvbmVudCh1cmwpfWApO1xyXG4gIH1cclxuICBzZWFyY2gocmVxOiBOU1NlYXJjaC5JU2VhcmNoUmVxdWVzdCk6IE9ic2VydmFibGU8TlNTZWFyY2guSVNlYXJjaEFwaVJlc3VsdD4ge1xyXG4gICAgcmVxLnF1ZXJ5ID0gcmVxLnF1ZXJ5IHx8ICcnO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE5TU2VhcmNoLklTZWFyY2hBcGlSZXN1bHQ+KEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfU0VBUkNIX1Y1LCB7XHJcbiAgICAgIHJlcXVlc3Q6IHJlcSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBzZWFyY2hSZWdpb25SZWNvbW1lbmRhdGlvbihcclxuICAgIHJlcTogTlNTZWFyY2guSVNlYXJjaE9yZ1JlZ2lvblJlY29tbWVuZGF0aW9uUmVxdWVzdCxcclxuICApOiBPYnNlcnZhYmxlPE5zQ29udGVudFN0cmlwTXVsdGlwbGUuSUNvbnRlbnRTdHJpcFJlc3BvbnNlQXBpPiB7XHJcbiAgICByZXEucXVlcnkgPSByZXEucXVlcnkgfHwgJyc7XHJcbiAgICByZXEucHJlTGFiZWxWYWx1ZSA9XHJcbiAgICAgIChyZXEucHJlTGFiZWxWYWx1ZSB8fCAnJykgK1xyXG4gICAgICAoKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlICYmIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLmNvdW50cnkpIHx8ICcnKTtcclxuICAgIHJlcS5maWx0ZXJzID0ge1xyXG4gICAgICAuLi5yZXEuZmlsdGVycyxcclxuICAgICAgbGFiZWxzOiBbcmVxLnByZUxhYmVsVmFsdWUgfHwgJyddLFxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxOc0NvbnRlbnRTdHJpcE11bHRpcGxlLklDb250ZW50U3RyaXBSZXNwb25zZUFwaT4oXHJcbiAgICAgIEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfU0VBUkNIX1JFR0lPTl9SRUNPTU1FTkRBVElPTixcclxuICAgICAgeyByZXF1ZXN0OiByZXEgfSxcclxuICAgICk7XHJcbiAgfVxyXG4gIHNlYXJjaFY2KHJlcTogTlNTZWFyY2guSVNlYXJjaFY2UmVxdWVzdCk6IE9ic2VydmFibGU8TlNTZWFyY2guSVNlYXJjaFY2QXBpUmVzdWx0VjI+IHtcclxuICAgIGNvbnN0IGFwaVBhdGggPSBfLmdldChyZXEsICdhcGkucGF0aCcpO1xyXG4gICAgcmVxLnF1ZXJ5ID0gcmVxLnF1ZXJ5IHx8ICcnO1xyXG4gICAgaWYgKGFwaVBhdGgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TlNTZWFyY2guSVNlYXJjaFY2QXBpUmVzdWx0VjI+KGFwaVBhdGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE5TU2VhcmNoLklTZWFyY2hWNkFwaVJlc3VsdFYyPihBUElfRU5EX1BPSU5UUy5DT05URU5UX1NFQVJDSF9WNiwgcmVxKTtcclxuICB9XHJcblxyXG4gIHNlYXJjaFJlbGF0ZWRDQlBWNihyZXE6IE5TU2VhcmNoLklTZWFyY2hWNlJlcXVlc3RWMik6IE9ic2VydmFibGU8TlNTZWFyY2guSVNlYXJjaFY2QXBpUmVzdWx0VjI+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxOU1NlYXJjaC5JU2VhcmNoVjZBcGlSZXN1bHRWMj4oQVBJX0VORF9QT0lOVFMuQ09OVEVOVF9TRUFSQ0hfUkVMQVRFRF9DQlBfVjYsIHJlcSk7XHJcbiAgfVxyXG5cclxuICBmZXRjaENvbnRlbnRSYXRpbmcoY29udGVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHsgcmF0aW5nOiBudW1iZXIgfT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8eyByYXRpbmc6IG51bWJlciB9PihgJHtBUElfRU5EX1BPSU5UUy5DT05URU5UX1JBVElOR30vJHtjb250ZW50SWR9YCk7XHJcbiAgfVxyXG4gIGRlbGV0ZUNvbnRlbnRSYXRpbmcoY29udGVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9SQVRJTkd9LyR7Y29udGVudElkfWApO1xyXG4gIH1cclxuICBhZGRDb250ZW50UmF0aW5nKGNvbnRlbnRJZDogc3RyaW5nLCBkYXRhOiB7IHJhdGluZzogbnVtYmVyIH0pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuQ09OVEVOVF9SQVRJTkd9LyR7Y29udGVudElkfWAsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Rmlyc3RDaGlsZEluSGllcmFyY2h5KGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudCk6IE5zQ29udGVudC5JQ29udGVudCB7XHJcbiAgICBpZiAoIShjb250ZW50LmNoaWxkcmVuIHx8IFtdKS5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIChjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUFJPR1JBTSAmJlxyXG4gICAgICAgICEoY29udGVudC5hcnRpZmFjdFVybCAmJiBjb250ZW50LmFydGlmYWN0VXJsLmxlbmd0aCkpIHx8XHJcbiAgICAgIGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5NQU5EQVRPUllfQ09VUlNFX0dPQUwgfHxcclxuICAgICAgKGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0gJiZcclxuICAgICAgICAhKGNvbnRlbnQuYXJ0aWZhY3RVcmwgJiYgY29udGVudC5hcnRpZmFjdFVybC5sZW5ndGgpKSB8fFxyXG4gICAgICAoY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5Lk1PRFVMRSAmJlxyXG4gICAgICAgICEoY29udGVudC5hcnRpZmFjdFVybCAmJiBjb250ZW50LmFydGlmYWN0VXJsLmxlbmd0aCkpXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgY2hpbGQgPSBjb250ZW50LmNoaWxkcmVuWzBdO1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRGaXJzdENoaWxkSW5IaWVyYXJjaHkoY2hpbGQpO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUkVTT1VSQ0UgfHxcclxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LktOT1dMRURHRV9BUlRJRkFDVCB8fFxyXG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUFJPR1JBTSB8fFxyXG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuUFJBQ1RJQ0VfUkVTT1VSQ0UgfHxcclxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkZJTkFMX0FTU0VTU01FTlQgfHxcclxuICAgICAgY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LkNPTVBfQVNTRVNTTUVOVCB8fFxyXG4gICAgICBjb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNIHx8XHJcbiAgICAgIGNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5PRkZMSU5FX1NFU1NJT05cclxuICAgICkge1xyXG4gICAgICByZXR1cm4gY29udGVudDtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBjb250ZW50LmNoaWxkcmVuWzBdO1xyXG4gICAgY29uc3QgcmVzdWx0Q29udGVudCA9IHRoaXMuZ2V0Rmlyc3RDaGlsZEluSGllcmFyY2h5KGZpcnN0Q2hpbGQpO1xyXG4gICAgcmV0dXJuIHJlc3VsdENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRSZWdpc3RyYXRpb25TdGF0dXMoc291cmNlOiBzdHJpbmcpOiBQcm9taXNlPHsgaGFzQWNjZXNzOiBib29sZWFuOyByZWdpc3RyYXRpb25Vcmw/OiBzdHJpbmcgfT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHtBUElfRU5EX1BPSU5UUy5SRUdJU1RSQVRJT05fU1RBVFVTfS8ke3NvdXJjZX1gKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIGZldGNoQ29uZmlnKHVybDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KHVybCk7XHJcbiAgfVxyXG5cclxuICBhZGRDZXJ0VGVtcGxhdGUoYm9keTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPGFueT4oYCR7QVBJX0VORF9QT0lOVFMuQ0VSVF9BRERfVEVNUExBVEV9YCwgYm9keSk7XHJcbiAgfVxyXG5cclxuICBpc3N1ZUNlcnQoYm9keTogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHtBUElfRU5EX1BPSU5UUy5DRVJUX0lTU1VFfWAsIGJvZHkpO1xyXG4gIH1cclxuICBkb3dubG9hZENlcnQoY2VydElkOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuQ0VSVF9ET1dOTE9BRChjZXJ0SWQpfWApO1xyXG4gIH1cclxuXHJcbiAgdHJlbmRpbmdDb250ZW50U2VhcmNoKHJlcTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJlcS5xdWVyeSA9IHJlcS5xdWVyeSB8fCAnJztcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEFQSV9FTkRfUE9JTlRTLlRSRU5ESU5HX0NPTlRFTlRfU0VBUkNILCByZXEpO1xyXG4gIH1cclxuXHJcbiAgZ2V0S2FybWFQb2l0bnMobGltaXQ6IG51bWJlciwgb2Zmc2V0OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChBUElfRU5EX1BPSU5UUy5SRUFEX0tBUk1BUE9JTlRTLCB7IGxpbWl0LCBvZmZzZXQgfSkucGlwZShjYXRjaEVycm9yKF9lcnIgPT4gb2YodHJ1ZSkpKTtcclxuICB9XHJcbiAgZmV0Y2hQcm9ncmFtQ29udGVudChjb250ZW50SWQ6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRlbnRbXT4ge1xyXG4gICAgbGV0IHVybCA9ICcnO1xyXG4gICAgY29uc3QgZm9yUHJldmlldyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHVibGljLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcmcHJldmlldz10cnVlJyk7XHJcbiAgICBpZiAoIWZvclByZXZpZXcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50W10+KFxyXG4gICAgICAgIEFQSV9FTkRfUE9JTlRTLkNPTlRFTlRfUkVBRChjb250ZW50SWQpLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdXJsID0gYC9hcGkvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnRbXT4odXJsKTtcclxuICAgIC8vIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudFtdPihBUElfRU5EX1BPSU5UUy5DT05URU5UX1JFQUQoY29udGVudElkKSlcclxuICB9XHJcblxyXG4gIGdldENvdXJzZUthcm1hUG9pbnRzKHJlcXVlc3Q6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oQVBJX0VORF9QT0lOVFMuUkVBRF9DT1VSU0VfS0FSTUFQT0lOVFMsIHJlcXVlc3QpO1xyXG4gIH1cclxuXHJcbiAgY2xhaW1LYXJtYXBvaW50cyhyZXF1ZXN0OiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEFQSV9FTkRfUE9JTlRTLkNMQUlNX0tBUk1BUE9JTlRTLCByZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIHVzZXJLYXJtYVBvaW50cygpIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEFQSV9FTkRfUE9JTlRTLlVTRVJfS0FSTUFfUE9JTlRTLCB7fSk7XHJcbiAgfVxyXG5cclxuICBnZXRFbnJvbGxlZERhdGEoZG9JZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBlbnJvbGxtZW50TWFwRGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2Vucm9sbG1lbnRNYXBEYXRhJykgfHwgJ3t9Jyk7XHJcbiAgICBjb25zdCBlbnJvbGxlZENvdXJzZURhdGEgPSBlbnJvbGxtZW50TWFwRGF0YVtkb0lkXTtcclxuICAgIHJldHVybiBlbnJvbGxlZENvdXJzZURhdGE7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRSZXNvdXJzZUxpbmsoY29udGVudDogYW55KSB7XHJcbiAgICBjb25zdCBlbnJvbGxlZENvdXJzZURhdGE6IGFueSA9IHRoaXMuZ2V0RW5yb2xsZWREYXRhKGNvbnRlbnQuaWRlbnRpZmllcik7XHJcbiAgICBpZiAoZW5yb2xsZWRDb3Vyc2VEYXRhKSB7XHJcbiAgICAgIGlmIChlbnJvbGxlZENvdXJzZURhdGEuY29udGVudC5jb3Vyc2VDYXRlZ29yeSA9PT0gIE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNIHx8XHJcbiAgICAgICAgZW5yb2xsZWRDb3Vyc2VEYXRhLmNvbnRlbnQuY291cnNlQ2F0ZWdvcnkgPT09ICBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LklOVklURV9PTkxZX1BST0dSQU0gfHxcclxuICAgICAgICBlbnJvbGxlZENvdXJzZURhdGEuY29udGVudC5jb3Vyc2VDYXRlZ29yeSA9PT0gIE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuTU9ERVJBVEVEX1BST0dSQU0gfHxcclxuICAgICAgICBlbnJvbGxlZENvdXJzZURhdGEuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09ICBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU0gfHxcclxuICAgICAgICBlbnJvbGxlZENvdXJzZURhdGEuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09ICBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5QUk9HUkFNKSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuaXNCYXRjaEluUHJvZ3Jlc3MoZW5yb2xsZWRDb3Vyc2VEYXRhLmJhdGNoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nb3RvVG9jUGFnZShjb250ZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSAgYXdhaXQgdGhpcy5jaGVja0ZvckRhdGFUb0Zvcm1VcmwoY29udGVudCwgZW5yb2xsZWRDb3Vyc2VEYXRhKTtcclxuICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9ICB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9ICBhd2FpdCB0aGlzLmNoZWNrRm9yRGF0YVRvRm9ybVVybChjb250ZW50LCBlbnJvbGxlZENvdXJzZURhdGEpO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZ290b1RvY1BhZ2UoY29udGVudCk7XHJcblxyXG4gIH1cclxuICBhc3luYyBjaGVja0ZvckRhdGFUb0Zvcm1VcmwoY29udGVudDogYW55LCBlbnJvbGxEYXRhOiBhbnkpIHtcclxuICAgIGxldCB1cmxEYXRhOiBhbnk7XHJcbiAgICBpZiAoZW5yb2xsRGF0YS5jb21wbGV0aW9uUGVyY2VudGFnZSAgPT09IDEwMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nb3RvVG9jUGFnZShlbnJvbGxEYXRhKTtcclxuICAgIH1cclxuICAgIGlmIChlbnJvbGxEYXRhLmxyY1Byb2dyZXNzRGV0YWlscyAmJiBlbnJvbGxEYXRhLmxyY1Byb2dyZXNzRGV0YWlscy5taW1lVHlwZSkge1xyXG4gICAgICBjb25zdCBtb2RpZnlFbnJvbGxEYXRhICA9IHtcclxuICAgICAgICAuLi5lbnJvbGxEYXRhLFxyXG4gICAgICAgIGlkZW50aWZpZXI6IGVucm9sbERhdGEuY29sbGVjdGlvbklkLFxyXG4gICAgICAgIHByaW1hcnlDYXRlZ29yeTogZW5yb2xsRGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSxcclxuICAgICAgICBuYW1lOiBlbnJvbGxEYXRhLmNvbnRlbnQubmFtZSxcclxuICAgICAgfTtcclxuICAgICAgaWYgKG1vZGlmeUVucm9sbERhdGEubGFzdFJlYWRDb250ZW50SWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJzZURhdGFXaXRoRGF0YShtb2RpZnlFbnJvbGxEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVucm9sbERhdGEubGFzdFJlYWRDb250ZW50SWQsIGVucm9sbERhdGEubHJjUHJvZ3Jlc3NEZXRhaWxzLm1pbWVUeXBlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAobW9kaWZ5RW5yb2xsRGF0YS5maXJzdENoaWxkSWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJzZURhdGFXaXRoRGF0YShtb2RpZnlFbnJvbGxEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVucm9sbERhdGEuZmlyc3RDaGlsZElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVucm9sbERhdGEubHJjUHJvZ3Jlc3NEZXRhaWxzLm1pbWVUeXBlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGVucm9sbERhdGEuZmlyc3RDaGlsZElkIHx8IGVucm9sbERhdGEubGFzdFJlYWRDb250ZW50SWQpIHtcclxuICAgICAgICBjb25zdCBkb0lkID0gZW5yb2xsRGF0YS5maXJzdENoaWxkSWQgfHwgZW5yb2xsRGF0YS5sYXN0UmVhZENvbnRlbnRJZDtcclxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmZldGNoUHJvZ3JhbUNvbnRlbnQoZG9JZCkudG9Qcm9taXNlKCkudGhlbihhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLnJlc3VsdCAmJiByZXMucmVzdWx0LmNvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudERhdGE6IGFueSA9IHJlcy5yZXN1bHQuY29udGVudDtcclxuICAgICAgICAgICAgY29uc3QgbW9kaWZ5RW5yb2xsRGF0YSAgPSB7XHJcbiAgICAgICAgICAgICAgLi4uZW5yb2xsRGF0YSxcclxuICAgICAgICAgICAgICBpZGVudGlmaWVyOiBlbnJvbGxEYXRhLmNvbGxlY3Rpb25JZCxcclxuICAgICAgICAgICAgICBwcmltYXJ5Q2F0ZWdvcnk6IGVucm9sbERhdGEuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnksXHJcbiAgICAgICAgICAgICAgbmFtZTogZW5yb2xsRGF0YS5jb250ZW50Lm5hbWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHVybERhdGEgPSAgdGhpcy5nZXRSZXNvdXJzZURhdGFXaXRoRGF0YShtb2RpZnlFbnJvbGxEYXRhLCBjb250ZW50RGF0YS5pZGVudGlmaWVyLCBjb250ZW50RGF0YS5taW1lVHlwZSk7XHJcbiAgICAgICAgICAgIGlmICh1cmxEYXRhKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHVybERhdGE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhID8gcmVzcG9uc2VEYXRhIDogdGhpcy5nb3RvVG9jUGFnZShjb250ZW50KTtcclxuICAgICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZ290b1RvY1BhZ2UoY29udGVudCk7XHJcblxyXG4gIH1cclxuXHJcbiAgZ2V0UmVzb3Vyc2VEYXRhV2l0aERhdGEoY29udGVudDogYW55LCByZXNvdXJzZUlkOiBhbnksIG1pbWVUeXBlOiBhbnkpIHtcclxuICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgIGNvbnN0IHVybCA9IHZpZXdlclJvdXRlR2VuZXJhdG9yKFxyXG4gICAgICAgIHJlc291cnNlSWQsXHJcbiAgICAgICAgbWltZVR5cGUsXHJcbiAgICAgICAgY29udGVudC5pZGVudGlmaWVyLFxyXG4gICAgICAgICdDb3Vyc2UnLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgICdMZWFybmluZyBSZXNvdXJjZScsXHJcbiAgICAgICAgY29udGVudC5iYXRjaElkLFxyXG4gICAgICAgIGNvbnRlbnQubmFtZSxcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHVybDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmdvdG9Ub2NQYWdlKGNvbnRlbnQpO1xyXG4gIH1cclxuICBnb3RvVG9jUGFnZShjb250ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHVybERhdGE6IGFueSA9IHtcclxuICAgICAgdXJsOiBgL2FwcC90b2MvJHtjb250ZW50LmlkZW50aWZpZXIgPyBjb250ZW50LmlkZW50aWZpZXIgOiBjb250ZW50LmNvbGxlY3Rpb25JZH0vb3ZlcnZpZXdgLFxyXG4gICAgICBxdWVyeVBhcmFtczogeyBiYXRjaElkOiBjb250ZW50LmJhdGNoSWQgfSxcclxuICAgIH07XHJcbiAgICBpZiAoY29udGVudC5lbmREYXRlKSB7XHJcbiAgICAgIHVybERhdGEucXVlcnlQYXJhbXMgPSB7IC4uLnVybERhdGEucXVlcnlQYXJhbXMsIHBsYW5UeXBlOiAnY2JQbGFuJywgZW5kRGF0ZTogY29udGVudC5lbmREYXRlIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXJsRGF0YTtcclxuICB9XHJcbiAgaXNCYXRjaEluUHJvZ3Jlc3MoYmF0Y2hEYXRhOiBhbnkpIHtcclxuICAgIC8vIGlmICh0aGlzLmNvbnRlbnQgJiYgdGhpcy5jb250ZW50WydiYXRjaGVzJ10pIHtcclxuICAgIC8vIGNvbnN0IGJhdGNoZXMgPSB0aGlzLmNvbnRlbnRbJ2JhdGNoZXMnXSBhcyBOc0NvbnRlbnQuSUJhdGNoXHJcbiAgICBpZiAoYmF0Y2hEYXRhICYmIGJhdGNoRGF0YS5lbmREYXRlKSB7XHJcbiAgICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xyXG4gICAgICBjb25zdCBzdGFydERhdGUgPSBtb21lbnQoYmF0Y2hEYXRhLnN0YXJ0RGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XHJcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBiYXRjaERhdGEuZW5kRGF0ZSA/IG1vbWVudChiYXRjaERhdGEuZW5kRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJykgOiBub3c7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIC8vIGJhdGNoLnN0YXR1cyAmJlxyXG4gICAgICAgICAgICBtb21lbnQoc3RhcnREYXRlKS5pc1NhbWVPckJlZm9yZShub3cpXHJcbiAgICAgICAgICAgICYmIG1vbWVudChlbmREYXRlKS5pc1NhbWVPckFmdGVyKG5vdylcclxuICAgICAgICAgICk7XHJcbiAgICB9IHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBwb3N0QXBpTWV0aG9kKGFwaVVybDogYW55LCByZXE6IGFueSk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TnNDb250ZW50LklDb250ZW50PihhcGlVcmwsIHJlcSk7XHJcbiAgfVxyXG4gIGdldEFwaU1ldGhvZChhcGlVcmw6IGFueSk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50PiB7XHJcbiAgICAvLyByZXEucXVlcnkgPSByZXEucXVlcnkgfHwgJyc7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnQ+KGFwaVVybCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==