@thetradeengineorg1/snova-shell-module 0.0.262 → 0.0.263

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 (432) hide show
  1. package/README.md +24 -24
  2. package/bundles/thetradeengineorg1-snova-shell-module.umd.js +19022 -13748
  3. package/bundles/thetradeengineorg1-snova-shell-module.umd.js.map +1 -1
  4. package/esm2015/lib/globaldependencies/components/avatar.component.js +33 -28
  5. package/esm2015/lib/globaldependencies/components/componentbase.js +538 -538
  6. package/esm2015/lib/globaldependencies/constants/feature-ids.js +449 -449
  7. package/esm2015/lib/globaldependencies/constants/localstorage-properties.js +38 -38
  8. package/esm2015/lib/globaldependencies/helpers/dom.helper.js +70 -70
  9. package/esm2015/lib/globaldependencies/helpers/fontawesome-icons.js +144 -144
  10. package/esm2015/lib/globaldependencies/helpers/moment-utc-date-adapter.js +37 -37
  11. package/esm2015/lib/globaldependencies/helpers/window.helper.js +32 -32
  12. package/esm2015/lib/globaldependencies/intercepter/jwt.interceptor.js +40 -40
  13. package/esm2015/lib/globaldependencies/pipes/fetchSizedAndCachedImage.pipe.js +36 -36
  14. package/esm2015/lib/globaldependencies/pipes/highLightText.pipe.js +24 -24
  15. package/esm2015/lib/globaldependencies/pipes/orderby-pipe.js +24 -24
  16. package/esm2015/lib/globaldependencies/pipes/removeSpecialCharacters.pipe.js +22 -22
  17. package/esm2015/lib/globaldependencies/pipes/sanitize.pipe.js +24 -24
  18. package/esm2015/lib/globaldependencies/pipes/softlabels.pipes.js +346 -346
  19. package/esm2015/lib/globaldependencies/pipes/utctolocaltime.pipe.js +23 -23
  20. package/esm2015/lib/globaldependencies/pipes/utctolocaltimewithdate.pipe.js +25 -25
  21. package/esm2015/lib/globaldependencies/pipes/workflowstatus.pipes.js +27 -27
  22. package/esm2015/lib/shell-components/components/Payments/account.component.js +121 -50
  23. package/esm2015/lib/shell-components/components/Payments/company-information.js +558 -262
  24. package/esm2015/lib/shell-components/components/Payments/company-plans.component.js +636 -138
  25. package/esm2015/lib/shell-components/components/Payments/document.component.js +129 -57
  26. package/esm2015/lib/shell-components/components/Payments/payment-method.component.js +90 -32
  27. package/esm2015/lib/shell-components/components/Payments/product-service.component.js +438 -143
  28. package/esm2015/lib/shell-components/components/Payments/purchase-more-licenses.js +249 -152
  29. package/esm2015/lib/shell-components/components/Payments/transactions.component.js +172 -60
  30. package/esm2015/lib/shell-components/components/admin-layout/admin-layout.component.js +350 -250
  31. package/esm2015/lib/shell-components/components/all-work-items-dialog/all-work-items-dialog.component.js +102 -89
  32. package/esm2015/lib/shell-components/components/confirmation-dialog/confirmation-dialog.component.js +126 -90
  33. package/esm2015/lib/shell-components/components/export-import-configuration/export-configuration.component.js +502 -357
  34. package/esm2015/lib/shell-components/components/feed-time/feed-time-dialog.component.js +98 -85
  35. package/esm2015/lib/shell-components/components/feed-time/feed-time.component.js +87 -83
  36. package/esm2015/lib/shell-components/components/header-side/header-side.component.js +2342 -1617
  37. package/esm2015/lib/shell-components/components/header-top/header-top.component.js +489 -93
  38. package/esm2015/lib/shell-components/components/lives/lives-welcome-page.js +55 -26
  39. package/esm2015/lib/shell-components/components/menu/menu.component.js +3429 -2478
  40. package/esm2015/lib/shell-components/components/menu/searchTask.enum.js +10 -10
  41. package/esm2015/lib/shell-components/components/notifications/announcement-dialog.component.js +110 -73
  42. package/esm2015/lib/shell-components/components/notifications/notifications.component.js +534 -449
  43. package/esm2015/lib/shell-components/components/sidebar-top/sidebar-top.component.js +39 -33
  44. package/esm2015/lib/shell-components/components/sidenav/side-bar.component.js +148 -81
  45. package/esm2015/lib/shell-components/components/sidenav/sidenav.component.js +439 -43
  46. package/esm2015/lib/shell-components/components/submit-feedback/submit-feedback.component.js +75 -71
  47. package/esm2015/lib/shell-components/constants/api-urls.js +1052 -1052
  48. package/esm2015/lib/shell-components/constants/available-languages.js +25 -25
  49. package/esm2015/lib/shell-components/constants/channel-names.js +38 -38
  50. package/esm2015/lib/shell-components/constants/menu-categories.js +6 -6
  51. package/esm2015/lib/shell-components/constants/notification-routes.js +6 -6
  52. package/esm2015/lib/shell-components/constants/notification-type-ids.js +42 -42
  53. package/esm2015/lib/shell-components/enum/recentSearchType.enum.js +13 -13
  54. package/esm2015/lib/shell-components/models/AppMenuItemModel.js +3 -3
  55. package/esm2015/lib/shell-components/models/AppNotification.js +17 -17
  56. package/esm2015/lib/shell-components/models/AssetAssignedNotificationModel.js +12 -12
  57. package/esm2015/lib/shell-components/models/ChannelUpdateModel.js +3 -3
  58. package/esm2015/lib/shell-components/models/EmployeeStatusModel.js +3 -3
  59. package/esm2015/lib/shell-components/models/IAdjust-screen-options.js +2 -2
  60. package/esm2015/lib/shell-components/models/IBadge.js +2 -2
  61. package/esm2015/lib/shell-components/models/IChildItem.js +2 -2
  62. package/esm2015/lib/shell-components/models/ILayout-change-options.js +2 -2
  63. package/esm2015/lib/shell-components/models/IMenuItem.js +2 -2
  64. package/esm2015/lib/shell-components/models/IlayoutConf.js +2 -2
  65. package/esm2015/lib/shell-components/models/IntroModel.js +3 -3
  66. package/esm2015/lib/shell-components/models/MessageDetails.js +3 -3
  67. package/esm2015/lib/shell-components/models/MessageTypingDetails.js +3 -3
  68. package/esm2015/lib/shell-components/models/NewProjectCreatedNotificationModel.js +10 -10
  69. package/esm2015/lib/shell-components/models/NewProjectFeatureNotificationModel.js +10 -10
  70. package/esm2015/lib/shell-components/models/NotificationsOutPutModel.js +22 -22
  71. package/esm2015/lib/shell-components/models/ProjectSearchCriteriaInputModel.js +3 -3
  72. package/esm2015/lib/shell-components/models/RecentSearchModel.js +5 -5
  73. package/esm2015/lib/shell-components/models/ReportConfigAssignedNotification.js +11 -11
  74. package/esm2015/lib/shell-components/models/ReportSubmittedNotification.js +12 -12
  75. package/esm2015/lib/shell-components/models/RoleUpdatedNotification.js +9 -9
  76. package/esm2015/lib/shell-components/models/UserStoryAssignedNotification.js +13 -13
  77. package/esm2015/lib/shell-components/models/archiveUserStoryModel.js +10 -10
  78. package/esm2015/lib/shell-components/models/companieslist.model.js +3 -3
  79. package/esm2015/lib/shell-components/models/company-model.js +7 -7
  80. package/esm2015/lib/shell-components/models/company-payment-model.js +3 -3
  81. package/esm2015/lib/shell-components/models/dragedWidget.js +3 -3
  82. package/esm2015/lib/shell-components/models/employee-List.js +3 -3
  83. package/esm2015/lib/shell-components/models/employee.js +4 -4
  84. package/esm2015/lib/shell-components/models/entityRoleFeature.js +3 -3
  85. package/esm2015/lib/shell-components/models/export-configuration-model.js +3 -3
  86. package/esm2015/lib/shell-components/models/export-data.module.js +8 -8
  87. package/esm2015/lib/shell-components/models/goalApprovedNotificationModel.js +9 -9
  88. package/esm2015/lib/shell-components/models/import-configuration-model.js +3 -3
  89. package/esm2015/lib/shell-components/models/initialStatusofUsers.js +3 -3
  90. package/esm2015/lib/shell-components/models/invoiceOutput-model.js +3 -3
  91. package/esm2015/lib/shell-components/models/leaveApplicationNotifiction.js +9 -9
  92. package/esm2015/lib/shell-components/models/multiChartsScheduling.js +11 -11
  93. package/esm2015/lib/shell-components/models/parkUserStoryInputModel.js +10 -10
  94. package/esm2015/lib/shell-components/models/project.js +3 -3
  95. package/esm2015/lib/shell-components/models/recentSearchApiModel.js +3 -3
  96. package/esm2015/lib/shell-components/models/searchCriteriaInputModelBase.js +3 -3
  97. package/esm2015/lib/shell-components/models/shellModulesInfo.js +7 -7
  98. package/esm2015/lib/shell-components/models/softlabels-model.js +7 -7
  99. package/esm2015/lib/shell-components/models/sprintReplanRequestedModel.js +9 -9
  100. package/esm2015/lib/shell-components/models/sprintStartedNotificationModel.js +9 -9
  101. package/esm2015/lib/shell-components/models/store-model.js +3 -3
  102. package/esm2015/lib/shell-components/models/store-search-model.js +4 -4
  103. package/esm2015/lib/shell-components/models/themes.model.js +3 -3
  104. package/esm2015/lib/shell-components/models/timesheetenabledisable.js +4 -4
  105. package/esm2015/lib/shell-components/models/user.js +8 -8
  106. package/esm2015/lib/shell-components/models/userStory.js +3 -3
  107. package/esm2015/lib/shell-components/models/userStoryCommentNotificationModel.js +9 -9
  108. package/esm2015/lib/shell-components/models/userStoryUpdateNotificationModel.js +9 -9
  109. package/esm2015/lib/shell-components/models/userstory-custom-fields.model.js +3 -3
  110. package/esm2015/lib/shell-components/models/validation.model.js +2 -2
  111. package/esm2015/lib/shell-components/models/widgetlist.js +6 -6
  112. package/esm2015/lib/shell-components/models/workspaceList.js +3 -3
  113. package/esm2015/lib/shell-components/services/authentication.service.js +96 -96
  114. package/esm2015/lib/shell-components/services/chat.service.js +67 -67
  115. package/esm2015/lib/shell-components/services/common-used.service.js +263 -263
  116. package/esm2015/lib/shell-components/services/feature.service.js +101 -101
  117. package/esm2015/lib/shell-components/services/google-analytics.service.js +24 -24
  118. package/esm2015/lib/shell-components/services/layout.service.js +68 -68
  119. package/esm2015/lib/shell-components/services/payment.service.js +103 -103
  120. package/esm2015/lib/shell-components/services/recentSearch.service.js +90 -90
  121. package/esm2015/lib/shell-components/services/shell.modules.service.js +24 -24
  122. package/esm2015/lib/shell-components/services/signalr.service.js +113 -113
  123. package/esm2015/lib/shell-components/services/theme.service.js +228 -228
  124. package/esm2015/lib/shell-components/shell.module.js +450 -449
  125. package/esm2015/lib/shell-components/shell.routing.js +16 -16
  126. package/esm2015/lib/shell-components/store/actions/authentication.actions.js +260 -260
  127. package/esm2015/lib/shell-components/store/actions/chat.actions.js +248 -248
  128. package/esm2015/lib/shell-components/store/actions/menuitems.actions.js +39 -39
  129. package/esm2015/lib/shell-components/store/actions/notification-validator.action.js +19 -19
  130. package/esm2015/lib/shell-components/store/actions/notifications.actions.js +74 -74
  131. package/esm2015/lib/shell-components/store/effects/authentication.effects.js +503 -503
  132. package/esm2015/lib/shell-components/store/effects/chat.effects.js +139 -139
  133. package/esm2015/lib/shell-components/store/effects/index.js +13 -13
  134. package/esm2015/lib/shell-components/store/effects/menuitems.effects.js +53 -53
  135. package/esm2015/lib/shell-components/store/effects/notification-validator.effects.js +56 -56
  136. package/esm2015/lib/shell-components/store/effects/notifications.effects.js +116 -116
  137. package/esm2015/lib/shell-components/store/reducers/authentication.reducers.js +86 -86
  138. package/esm2015/lib/shell-components/store/reducers/chat.reducers.js +68 -68
  139. package/esm2015/lib/shell-components/store/reducers/index.js +80 -80
  140. package/esm2015/lib/shell-components/store/reducers/menuitems.reducers.js +56 -56
  141. package/esm2015/lib/shell-components/store/reducers/notification-validator.reducers.js +13 -13
  142. package/esm2015/lib/shell-components/store/reducers/notifications.reducers.js +38 -38
  143. package/esm2015/public-api.js +92 -92
  144. package/esm2015/store/reducers/index.js +47 -47
  145. package/esm2015/thetradeengineorg1-snova-shell-module.js +4 -4
  146. package/fesm2015/thetradeengineorg1-snova-shell-module.js +17152 -12640
  147. package/fesm2015/thetradeengineorg1-snova-shell-module.js.map +1 -1
  148. package/lib/globaldependencies/components/avatar.component.d.ts +11 -10
  149. package/lib/globaldependencies/components/avatar.component.d.ts.map +1 -0
  150. package/lib/globaldependencies/components/componentbase.d.ts +456 -455
  151. package/lib/globaldependencies/components/componentbase.d.ts.map +1 -0
  152. package/lib/globaldependencies/constants/feature-ids.d.ts +449 -448
  153. package/lib/globaldependencies/constants/feature-ids.d.ts.map +1 -0
  154. package/lib/globaldependencies/constants/localstorage-properties.d.ts +38 -37
  155. package/lib/globaldependencies/constants/localstorage-properties.d.ts.map +1 -0
  156. package/lib/globaldependencies/helpers/dom.helper.d.ts +8 -7
  157. package/lib/globaldependencies/helpers/dom.helper.d.ts.map +1 -0
  158. package/lib/globaldependencies/helpers/fontawesome-icons.d.ts +2 -1
  159. package/lib/globaldependencies/helpers/fontawesome-icons.d.ts.map +1 -0
  160. package/lib/globaldependencies/helpers/moment-utc-date-adapter.d.ts +10 -9
  161. package/lib/globaldependencies/helpers/moment-utc-date-adapter.d.ts.map +1 -0
  162. package/lib/globaldependencies/helpers/window.helper.d.ts +13 -12
  163. package/lib/globaldependencies/helpers/window.helper.d.ts.map +1 -0
  164. package/lib/globaldependencies/intercepter/jwt.interceptor.d.ts +12 -11
  165. package/lib/globaldependencies/intercepter/jwt.interceptor.d.ts.map +1 -0
  166. package/lib/globaldependencies/pipes/fetchSizedAndCachedImage.pipe.d.ts +9 -8
  167. package/lib/globaldependencies/pipes/fetchSizedAndCachedImage.pipe.d.ts.map +1 -0
  168. package/lib/globaldependencies/pipes/highLightText.pipe.d.ts +9 -8
  169. package/lib/globaldependencies/pipes/highLightText.pipe.d.ts.map +1 -0
  170. package/lib/globaldependencies/pipes/orderby-pipe.d.ts +10 -9
  171. package/lib/globaldependencies/pipes/orderby-pipe.d.ts.map +1 -0
  172. package/lib/globaldependencies/pipes/removeSpecialCharacters.pipe.d.ts +9 -8
  173. package/lib/globaldependencies/pipes/removeSpecialCharacters.pipe.d.ts.map +1 -0
  174. package/lib/globaldependencies/pipes/sanitize.pipe.d.ts +12 -11
  175. package/lib/globaldependencies/pipes/sanitize.pipe.d.ts.map +1 -0
  176. package/lib/globaldependencies/pipes/softlabels.pipes.d.ts +9 -8
  177. package/lib/globaldependencies/pipes/softlabels.pipes.d.ts.map +1 -0
  178. package/lib/globaldependencies/pipes/utctolocaltime.pipe.d.ts +9 -8
  179. package/lib/globaldependencies/pipes/utctolocaltime.pipe.d.ts.map +1 -0
  180. package/lib/globaldependencies/pipes/utctolocaltimewithdate.pipe.d.ts +9 -8
  181. package/lib/globaldependencies/pipes/utctolocaltimewithdate.pipe.d.ts.map +1 -0
  182. package/lib/globaldependencies/pipes/workflowstatus.pipes.d.ts +9 -8
  183. package/lib/globaldependencies/pipes/workflowstatus.pipes.d.ts.map +1 -0
  184. package/lib/shell-components/components/Payments/account.component.d.ts +15 -14
  185. package/lib/shell-components/components/Payments/account.component.d.ts.map +1 -0
  186. package/lib/shell-components/components/Payments/company-information.d.ts +63 -62
  187. package/lib/shell-components/components/Payments/company-information.d.ts.map +1 -0
  188. package/lib/shell-components/components/Payments/company-plans.component.d.ts +48 -47
  189. package/lib/shell-components/components/Payments/company-plans.component.d.ts.map +1 -0
  190. package/lib/shell-components/components/Payments/document.component.d.ts +21 -20
  191. package/lib/shell-components/components/Payments/document.component.d.ts.map +1 -0
  192. package/lib/shell-components/components/Payments/payment-method.component.d.ts +16 -15
  193. package/lib/shell-components/components/Payments/payment-method.component.d.ts.map +1 -0
  194. package/lib/shell-components/components/Payments/product-service.component.d.ts +49 -48
  195. package/lib/shell-components/components/Payments/product-service.component.d.ts.map +1 -0
  196. package/lib/shell-components/components/Payments/purchase-more-licenses.d.ts +38 -37
  197. package/lib/shell-components/components/Payments/purchase-more-licenses.d.ts.map +1 -0
  198. package/lib/shell-components/components/Payments/transactions.component.d.ts +29 -28
  199. package/lib/shell-components/components/Payments/transactions.component.d.ts.map +1 -0
  200. package/lib/shell-components/components/admin-layout/admin-layout.component.d.ts +68 -67
  201. package/lib/shell-components/components/admin-layout/admin-layout.component.d.ts.map +1 -0
  202. package/lib/shell-components/components/all-work-items-dialog/all-work-items-dialog.component.d.ts +33 -32
  203. package/lib/shell-components/components/all-work-items-dialog/all-work-items-dialog.component.d.ts.map +1 -0
  204. package/lib/shell-components/components/confirmation-dialog/confirmation-dialog.component.d.ts +33 -32
  205. package/lib/shell-components/components/confirmation-dialog/confirmation-dialog.component.d.ts.map +1 -0
  206. package/lib/shell-components/components/export-import-configuration/export-configuration.component.d.ts +61 -60
  207. package/lib/shell-components/components/export-import-configuration/export-configuration.component.d.ts.map +1 -0
  208. package/lib/shell-components/components/feed-time/feed-time-dialog.component.d.ts +34 -33
  209. package/lib/shell-components/components/feed-time/feed-time-dialog.component.d.ts.map +1 -0
  210. package/lib/shell-components/components/feed-time/feed-time.component.d.ts +28 -27
  211. package/lib/shell-components/components/feed-time/feed-time.component.d.ts.map +1 -0
  212. package/lib/shell-components/components/header-side/header-side.component.d.ts +221 -220
  213. package/lib/shell-components/components/header-side/header-side.component.d.ts.map +1 -0
  214. package/lib/shell-components/components/header-top/header-top.component.d.ts +41 -40
  215. package/lib/shell-components/components/header-top/header-top.component.d.ts.map +1 -0
  216. package/lib/shell-components/components/lives/lives-welcome-page.d.ts +15 -14
  217. package/lib/shell-components/components/lives/lives-welcome-page.d.ts.map +1 -0
  218. package/lib/shell-components/components/menu/menu.component.d.ts +221 -220
  219. package/lib/shell-components/components/menu/menu.component.d.ts.map +1 -0
  220. package/lib/shell-components/components/menu/searchTask.enum.d.ts +9 -8
  221. package/lib/shell-components/components/menu/searchTask.enum.d.ts.map +1 -0
  222. package/lib/shell-components/components/notifications/announcement-dialog.component.d.ts +28 -27
  223. package/lib/shell-components/components/notifications/announcement-dialog.component.d.ts.map +1 -0
  224. package/lib/shell-components/components/notifications/notifications.component.d.ts +54 -53
  225. package/lib/shell-components/components/notifications/notifications.component.d.ts.map +1 -0
  226. package/lib/shell-components/components/sidebar-top/sidebar-top.component.d.ts +11 -10
  227. package/lib/shell-components/components/sidebar-top/sidebar-top.component.d.ts.map +1 -0
  228. package/lib/shell-components/components/sidenav/side-bar.component.d.ts +24 -23
  229. package/lib/shell-components/components/sidenav/side-bar.component.d.ts.map +1 -0
  230. package/lib/shell-components/components/sidenav/sidenav.component.d.ts +18 -17
  231. package/lib/shell-components/components/sidenav/sidenav.component.d.ts.map +1 -0
  232. package/lib/shell-components/components/submit-feedback/submit-feedback.component.d.ts +26 -25
  233. package/lib/shell-components/components/submit-feedback/submit-feedback.component.d.ts.map +1 -0
  234. package/lib/shell-components/constants/api-urls.d.ts +1052 -1051
  235. package/lib/shell-components/constants/api-urls.d.ts.map +1 -0
  236. package/lib/shell-components/constants/available-languages.d.ts +8 -7
  237. package/lib/shell-components/constants/available-languages.d.ts.map +1 -0
  238. package/lib/shell-components/constants/channel-names.d.ts +38 -37
  239. package/lib/shell-components/constants/channel-names.d.ts.map +1 -0
  240. package/lib/shell-components/constants/menu-categories.d.ts +6 -5
  241. package/lib/shell-components/constants/menu-categories.d.ts.map +1 -0
  242. package/lib/shell-components/constants/notification-routes.d.ts +6 -5
  243. package/lib/shell-components/constants/notification-routes.d.ts.map +1 -0
  244. package/lib/shell-components/constants/notification-type-ids.d.ts +42 -41
  245. package/lib/shell-components/constants/notification-type-ids.d.ts.map +1 -0
  246. package/lib/shell-components/enum/recentSearchType.enum.d.ts +12 -11
  247. package/lib/shell-components/enum/recentSearchType.enum.d.ts.map +1 -0
  248. package/lib/shell-components/models/AppMenuItemModel.d.ts +13 -12
  249. package/lib/shell-components/models/AppMenuItemModel.d.ts.map +1 -0
  250. package/lib/shell-components/models/AppNotification.d.ts +13 -12
  251. package/lib/shell-components/models/AppNotification.d.ts.map +1 -0
  252. package/lib/shell-components/models/AssetAssignedNotificationModel.d.ts +11 -10
  253. package/lib/shell-components/models/AssetAssignedNotificationModel.d.ts.map +1 -0
  254. package/lib/shell-components/models/ChannelUpdateModel.d.ts +48 -47
  255. package/lib/shell-components/models/ChannelUpdateModel.d.ts.map +1 -0
  256. package/lib/shell-components/models/EmployeeStatusModel.d.ts +12 -11
  257. package/lib/shell-components/models/EmployeeStatusModel.d.ts.map +1 -0
  258. package/lib/shell-components/models/IAdjust-screen-options.d.ts +5 -4
  259. package/lib/shell-components/models/IAdjust-screen-options.d.ts.map +1 -0
  260. package/lib/shell-components/models/IBadge.d.ts +5 -4
  261. package/lib/shell-components/models/IBadge.d.ts.map +1 -0
  262. package/lib/shell-components/models/IChildItem.d.ts +8 -7
  263. package/lib/shell-components/models/IChildItem.d.ts.map +1 -0
  264. package/lib/shell-components/models/ILayout-change-options.d.ts +5 -4
  265. package/lib/shell-components/models/ILayout-change-options.d.ts.map +1 -0
  266. package/lib/shell-components/models/IMenuItem.d.ts +15 -14
  267. package/lib/shell-components/models/IMenuItem.d.ts.map +1 -0
  268. package/lib/shell-components/models/IlayoutConf.d.ts +11 -10
  269. package/lib/shell-components/models/IlayoutConf.d.ts.map +1 -0
  270. package/lib/shell-components/models/IntroModel.d.ts +4 -3
  271. package/lib/shell-components/models/IntroModel.d.ts.map +1 -0
  272. package/lib/shell-components/models/MessageDetails.d.ts +56 -55
  273. package/lib/shell-components/models/MessageDetails.d.ts.map +1 -0
  274. package/lib/shell-components/models/MessageTypingDetails.d.ts +10 -9
  275. package/lib/shell-components/models/MessageTypingDetails.d.ts.map +1 -0
  276. package/lib/shell-components/models/NewProjectCreatedNotificationModel.d.ts +9 -8
  277. package/lib/shell-components/models/NewProjectCreatedNotificationModel.d.ts.map +1 -0
  278. package/lib/shell-components/models/NewProjectFeatureNotificationModel.d.ts +9 -8
  279. package/lib/shell-components/models/NewProjectFeatureNotificationModel.d.ts.map +1 -0
  280. package/lib/shell-components/models/NotificationsOutPutModel.d.ts +42 -41
  281. package/lib/shell-components/models/NotificationsOutPutModel.d.ts.map +1 -0
  282. package/lib/shell-components/models/ProjectSearchCriteriaInputModel.d.ts +11 -10
  283. package/lib/shell-components/models/ProjectSearchCriteriaInputModel.d.ts.map +1 -0
  284. package/lib/shell-components/models/RecentSearchModel.d.ts +15 -14
  285. package/lib/shell-components/models/RecentSearchModel.d.ts.map +1 -0
  286. package/lib/shell-components/models/ReportConfigAssignedNotification.d.ts +10 -9
  287. package/lib/shell-components/models/ReportConfigAssignedNotification.d.ts.map +1 -0
  288. package/lib/shell-components/models/ReportSubmittedNotification.d.ts +11 -10
  289. package/lib/shell-components/models/ReportSubmittedNotification.d.ts.map +1 -0
  290. package/lib/shell-components/models/RoleUpdatedNotification.d.ts +8 -7
  291. package/lib/shell-components/models/RoleUpdatedNotification.d.ts.map +1 -0
  292. package/lib/shell-components/models/UserStoryAssignedNotification.d.ts +9 -8
  293. package/lib/shell-components/models/UserStoryAssignedNotification.d.ts.map +1 -0
  294. package/lib/shell-components/models/archiveUserStoryModel.d.ts +8 -7
  295. package/lib/shell-components/models/archiveUserStoryModel.d.ts.map +1 -0
  296. package/lib/shell-components/models/companieslist.model.d.ts +9 -8
  297. package/lib/shell-components/models/companieslist.model.d.ts.map +1 -0
  298. package/lib/shell-components/models/company-model.d.ts +32 -31
  299. package/lib/shell-components/models/company-model.d.ts.map +1 -0
  300. package/lib/shell-components/models/company-payment-model.d.ts +19 -18
  301. package/lib/shell-components/models/company-payment-model.d.ts.map +1 -0
  302. package/lib/shell-components/models/dragedWidget.d.ts +17 -16
  303. package/lib/shell-components/models/dragedWidget.d.ts.map +1 -0
  304. package/lib/shell-components/models/employee-List.d.ts +9 -8
  305. package/lib/shell-components/models/employee-List.d.ts.map +1 -0
  306. package/lib/shell-components/models/employee.d.ts +61 -60
  307. package/lib/shell-components/models/employee.d.ts.map +1 -0
  308. package/lib/shell-components/models/entityRoleFeature.d.ts +10 -9
  309. package/lib/shell-components/models/entityRoleFeature.d.ts.map +1 -0
  310. package/lib/shell-components/models/export-configuration-model.d.ts +9 -8
  311. package/lib/shell-components/models/export-configuration-model.d.ts.map +1 -0
  312. package/lib/shell-components/models/export-data.module.d.ts +7 -6
  313. package/lib/shell-components/models/export-data.module.d.ts.map +1 -0
  314. package/lib/shell-components/models/goalApprovedNotificationModel.d.ts +9 -8
  315. package/lib/shell-components/models/goalApprovedNotificationModel.d.ts.map +1 -0
  316. package/lib/shell-components/models/import-configuration-model.d.ts +4 -3
  317. package/lib/shell-components/models/import-configuration-model.d.ts.map +1 -0
  318. package/lib/shell-components/models/initialStatusofUsers.d.ts +6 -5
  319. package/lib/shell-components/models/initialStatusofUsers.d.ts.map +1 -0
  320. package/lib/shell-components/models/invoiceOutput-model.d.ts +10 -9
  321. package/lib/shell-components/models/invoiceOutput-model.d.ts.map +1 -0
  322. package/lib/shell-components/models/leaveApplicationNotifiction.d.ts +8 -7
  323. package/lib/shell-components/models/leaveApplicationNotifiction.d.ts.map +1 -0
  324. package/lib/shell-components/models/multiChartsScheduling.d.ts +10 -9
  325. package/lib/shell-components/models/multiChartsScheduling.d.ts.map +1 -0
  326. package/lib/shell-components/models/parkUserStoryInputModel.d.ts +8 -7
  327. package/lib/shell-components/models/parkUserStoryInputModel.d.ts.map +1 -0
  328. package/lib/shell-components/models/project.d.ts +29 -28
  329. package/lib/shell-components/models/project.d.ts.map +1 -0
  330. package/lib/shell-components/models/recentSearchApiModel.d.ts +7 -6
  331. package/lib/shell-components/models/recentSearchApiModel.d.ts.map +1 -0
  332. package/lib/shell-components/models/searchCriteriaInputModelBase.d.ts +11 -10
  333. package/lib/shell-components/models/searchCriteriaInputModelBase.d.ts.map +1 -0
  334. package/lib/shell-components/models/shellModulesInfo.d.ts +17 -16
  335. package/lib/shell-components/models/shellModulesInfo.d.ts.map +1 -0
  336. package/lib/shell-components/models/softlabels-model.d.ts +67 -66
  337. package/lib/shell-components/models/softlabels-model.d.ts.map +1 -0
  338. package/lib/shell-components/models/sprintReplanRequestedModel.d.ts +8 -7
  339. package/lib/shell-components/models/sprintReplanRequestedModel.d.ts.map +1 -0
  340. package/lib/shell-components/models/sprintStartedNotificationModel.d.ts +8 -7
  341. package/lib/shell-components/models/sprintStartedNotificationModel.d.ts.map +1 -0
  342. package/lib/shell-components/models/store-model.d.ts +14 -13
  343. package/lib/shell-components/models/store-model.d.ts.map +1 -0
  344. package/lib/shell-components/models/store-search-model.d.ts +8 -7
  345. package/lib/shell-components/models/store-search-model.d.ts.map +1 -0
  346. package/lib/shell-components/models/themes.model.d.ts +10 -9
  347. package/lib/shell-components/models/themes.model.d.ts.map +1 -0
  348. package/lib/shell-components/models/timesheetenabledisable.d.ts +17 -16
  349. package/lib/shell-components/models/timesheetenabledisable.d.ts.map +1 -0
  350. package/lib/shell-components/models/user.d.ts +41 -40
  351. package/lib/shell-components/models/user.d.ts.map +1 -0
  352. package/lib/shell-components/models/userStory.d.ts +189 -188
  353. package/lib/shell-components/models/userStory.d.ts.map +1 -0
  354. package/lib/shell-components/models/userStoryCommentNotificationModel.d.ts +7 -6
  355. package/lib/shell-components/models/userStoryCommentNotificationModel.d.ts.map +1 -0
  356. package/lib/shell-components/models/userStoryUpdateNotificationModel.d.ts +7 -6
  357. package/lib/shell-components/models/userStoryUpdateNotificationModel.d.ts.map +1 -0
  358. package/lib/shell-components/models/userstory-custom-fields.model.d.ts +7 -6
  359. package/lib/shell-components/models/userstory-custom-fields.model.d.ts.map +1 -0
  360. package/lib/shell-components/models/validation.model.d.ts +6 -5
  361. package/lib/shell-components/models/validation.model.d.ts.map +1 -0
  362. package/lib/shell-components/models/widgetlist.d.ts +29 -28
  363. package/lib/shell-components/models/widgetlist.d.ts.map +1 -0
  364. package/lib/shell-components/models/workspaceList.d.ts +20 -19
  365. package/lib/shell-components/models/workspaceList.d.ts.map +1 -0
  366. package/lib/shell-components/services/authentication.service.d.ts +19 -18
  367. package/lib/shell-components/services/authentication.service.d.ts.map +1 -0
  368. package/lib/shell-components/services/chat.service.d.ts +17 -16
  369. package/lib/shell-components/services/chat.service.d.ts.map +1 -0
  370. package/lib/shell-components/services/common-used.service.d.ts +46 -45
  371. package/lib/shell-components/services/common-used.service.d.ts.map +1 -0
  372. package/lib/shell-components/services/feature.service.d.ts +20 -19
  373. package/lib/shell-components/services/feature.service.d.ts.map +1 -0
  374. package/lib/shell-components/services/google-analytics.service.d.ts +10 -9
  375. package/lib/shell-components/services/google-analytics.service.d.ts.map +1 -0
  376. package/lib/shell-components/services/layout.service.d.ts +24 -23
  377. package/lib/shell-components/services/layout.service.d.ts.map +1 -0
  378. package/lib/shell-components/services/payment.service.d.ts +20 -19
  379. package/lib/shell-components/services/payment.service.d.ts.map +1 -0
  380. package/lib/shell-components/services/recentSearch.service.d.ts +17 -16
  381. package/lib/shell-components/services/recentSearch.service.d.ts.map +1 -0
  382. package/lib/shell-components/services/shell.modules.service.d.ts +10 -9
  383. package/lib/shell-components/services/shell.modules.service.d.ts.map +1 -0
  384. package/lib/shell-components/services/signalr.service.d.ts +26 -25
  385. package/lib/shell-components/services/signalr.service.d.ts.map +1 -0
  386. package/lib/shell-components/services/theme.service.d.ts +15 -14
  387. package/lib/shell-components/services/theme.service.d.ts.map +1 -0
  388. package/lib/shell-components/shell.module.d.ts +120 -119
  389. package/lib/shell-components/shell.module.d.ts.map +1 -0
  390. package/lib/shell-components/shell.routing.d.ts +3 -2
  391. package/lib/shell-components/shell.routing.d.ts.map +1 -0
  392. package/lib/shell-components/store/actions/authentication.actions.d.ts +328 -327
  393. package/lib/shell-components/store/actions/authentication.actions.d.ts.map +1 -0
  394. package/lib/shell-components/store/actions/chat.actions.d.ts +400 -399
  395. package/lib/shell-components/store/actions/chat.actions.d.ts.map +1 -0
  396. package/lib/shell-components/store/actions/menuitems.actions.d.ts +52 -51
  397. package/lib/shell-components/store/actions/menuitems.actions.d.ts.map +1 -0
  398. package/lib/shell-components/store/actions/notification-validator.action.d.ts +26 -25
  399. package/lib/shell-components/store/actions/notification-validator.action.d.ts.map +1 -0
  400. package/lib/shell-components/store/actions/notifications.actions.d.ts +117 -116
  401. package/lib/shell-components/store/actions/notifications.actions.d.ts.map +1 -0
  402. package/lib/shell-components/store/effects/authentication.effects.d.ts +55 -54
  403. package/lib/shell-components/store/effects/authentication.effects.d.ts.map +1 -0
  404. package/lib/shell-components/store/effects/chat.effects.d.ts +31 -30
  405. package/lib/shell-components/store/effects/chat.effects.d.ts.map +1 -0
  406. package/lib/shell-components/store/effects/index.d.ts +2 -1
  407. package/lib/shell-components/store/effects/index.d.ts.map +1 -0
  408. package/lib/shell-components/store/effects/menuitems.effects.d.ts +18 -17
  409. package/lib/shell-components/store/effects/menuitems.effects.d.ts.map +1 -0
  410. package/lib/shell-components/store/effects/notification-validator.effects.d.ts +22 -21
  411. package/lib/shell-components/store/effects/notification-validator.effects.d.ts.map +1 -0
  412. package/lib/shell-components/store/effects/notifications.effects.d.ts +24 -23
  413. package/lib/shell-components/store/effects/notifications.effects.d.ts.map +1 -0
  414. package/lib/shell-components/store/reducers/authentication.reducers.d.ts +31 -30
  415. package/lib/shell-components/store/reducers/authentication.reducers.d.ts.map +1 -0
  416. package/lib/shell-components/store/reducers/chat.reducers.d.ts +18 -17
  417. package/lib/shell-components/store/reducers/chat.reducers.d.ts.map +1 -0
  418. package/lib/shell-components/store/reducers/index.d.ts +60 -59
  419. package/lib/shell-components/store/reducers/index.d.ts.map +1 -0
  420. package/lib/shell-components/store/reducers/menuitems.reducers.d.ts +12 -11
  421. package/lib/shell-components/store/reducers/menuitems.reducers.d.ts.map +1 -0
  422. package/lib/shell-components/store/reducers/notification-validator.reducers.d.ts +6 -5
  423. package/lib/shell-components/store/reducers/notification-validator.reducers.d.ts.map +1 -0
  424. package/lib/shell-components/store/reducers/notifications.reducers.d.ts +11 -10
  425. package/lib/shell-components/store/reducers/notifications.reducers.d.ts.map +1 -0
  426. package/package.json +5 -2
  427. package/public-api.d.ts +83 -82
  428. package/public-api.d.ts.map +1 -0
  429. package/store/reducers/index.d.ts +25 -24
  430. package/store/reducers/index.d.ts.map +1 -0
  431. package/thetradeengineorg1-snova-shell-module.d.ts +6 -5
  432. package/thetradeengineorg1-snova-shell-module.d.ts.map +1 -0
@@ -1,250 +1,350 @@
1
- import { Component, HostListener } from "@angular/core";
2
- import { NavigationEnd, RouteConfigLoadStart, RouteConfigLoadEnd, ResolveStart, ResolveEnd, NavigationStart, NavigationCancel, NavigationError, } from "@angular/router";
3
- // import PerfectScrollbar from 'perfect-scrollbar';
4
- import { Subject } from "rxjs";
5
- import { takeUntil, tap } from "rxjs/operators";
6
- import { filter } from "rxjs/operators";
7
- import { UserDetailsFetchedAfterLogin, AuthenticationActionTypes } from "../../store/actions/authentication.actions";
8
- import { ofType } from "@ngrx/effects";
9
- import { SoftLabelConfigurationModel } from "../../models/softlabels-model";
10
- import '../../../globaldependencies/helpers/fontawesome-icons';
11
- import { LocalStorageProperties } from '../../../globaldependencies/constants/localstorage-properties';
12
- import { SPINNER } from 'ngx-ui-loader';
13
- import * as i0 from "@angular/core";
14
- import * as i1 from "@angular/router";
15
- import * as i2 from "@ngx-translate/core";
16
- import * as i3 from "../../services/layout.service";
17
- import * as i4 from "@ngrx/store";
18
- import * as i5 from "ngx-cookie-service";
19
- import * as i6 from "@ngrx/effects";
20
- import * as i7 from "@angular/common";
21
- import * as i8 from "../../services/common-used.service";
22
- import * as i9 from "pubnub-angular2";
23
- import * as i10 from "../../services/signalr.service";
24
- import * as i11 from "../header-top/header-top.component";
25
- import * as i12 from "ngx-ui-loader";
26
- import * as i13 from "@angular/material/sidenav";
27
- import * as i14 from "../sidebar-top/sidebar-top.component";
28
- import * as i15 from "../header-side/header-side.component";
29
- import * as i16 from "../sidenav/side-bar.component";
30
- import * as i17 from "@angular/cdk/bidi";
31
- import * as i18 from "@angular/flex-layout/extended";
32
- import * as i19 from "ngx-perfect-scrollbar";
33
- export class AdminLayoutComponent {
34
- constructor(router, translate, layout, store, cookieService, actionUpdates$, location, commonService, pubnub, signalr) {
35
- this.router = router;
36
- this.translate = translate;
37
- this.layout = layout;
38
- this.store = store;
39
- this.cookieService = cookieService;
40
- this.actionUpdates$ = actionUpdates$;
41
- this.location = location;
42
- this.commonService = commonService;
43
- this.pubnub = pubnub;
44
- this.signalr = signalr;
45
- this.isModuleLoading = false;
46
- // private sidebarPS: PerfectScrollbar;
47
- // private bodyPS: PerfectScrollbar;
48
- // private headerFixedBodyPS: PerfectScrollbar;
49
- this.scrollConfig = {};
50
- this.layoutConf = {};
51
- this.ngDestroyed$ = new Subject();
52
- this.userstory = 'userstory';
53
- this.loading = false;
54
- this.totalLoadingTime = 0;
55
- this.spinnerType = SPINNER.circle;
56
- // let conId = sessionStorage.getItem('conectionId');
57
- // if(!conId) {
58
- this.signalr.initializeSignalRConnection();
59
- // }
60
- let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
61
- let companySettings = localStorage.getItem(LocalStorageProperties.CompanySettings);
62
- if (!companySettings || companySettings == 'null' || companySettings == "undefined") {
63
- pubnub.init({
64
- publishKey: environment.publishKey,
65
- subscribeKey: environment.subscribeKey
66
- });
67
- }
68
- else {
69
- const comSet = JSON.parse(localStorage.getItem(LocalStorageProperties.CompanySettings));
70
- var publishKey = comSet.find(i => i.key == "PubnubPublishKey");
71
- var subscribeKey = comSet.find(i => i.key == "PubnubSubscribeKey");
72
- if ((publishKey && publishKey.value) && (subscribeKey && subscribeKey.value)) {
73
- pubnub.init({
74
- publishKey: publishKey.value,
75
- subscribeKey: subscribeKey.value
76
- });
77
- }
78
- else {
79
- pubnub.init({
80
- publishKey: environment.publishKey,
81
- subscribeKey: environment.subscribeKey
82
- });
83
- }
84
- }
85
- // Close sidenav after route change in mobile
86
- this.routerEventSub = router.events
87
- .pipe(filter(event => event instanceof NavigationEnd))
88
- .subscribe((routeChange) => {
89
- this.layout.adjustLayout({ route: routeChange.url });
90
- });
91
- // Translator init
92
- let currentCulture = this.cookieService.get(LocalStorageProperties.CurrentCulture);
93
- if (currentCulture === 'null' || currentCulture === 'undefined') {
94
- currentCulture = 'en';
95
- }
96
- translate.use(currentCulture);
97
- this.router.events.subscribe((event) => {
98
- switch (true) {
99
- case event instanceof NavigationStart: {
100
- this.loading = true;
101
- this.totalLoadingTime = 0;
102
- this.startTimer();
103
- break;
104
- }
105
- case event instanceof NavigationEnd: {
106
- this.loading = false;
107
- clearInterval(this.interval);
108
- break;
109
- }
110
- case event instanceof NavigationCancel:
111
- case event instanceof NavigationError: {
112
- this.loading = false;
113
- break;
114
- }
115
- default: {
116
- break;
117
- }
118
- }
119
- });
120
- router.events.subscribe(val => {
121
- if (location.path() != "") {
122
- if (location.path().includes('/dashboard-management/dashboard/')) {
123
- this.dashboardPage = true;
124
- this.bgcolor = 'none';
125
- }
126
- else {
127
- this.dashboardPage = false;
128
- this.bgcolor = 'beige';
129
- }
130
- }
131
- });
132
- // if (this.cookieService.check(LocalStorageProperties.UserModel)) {
133
- // let data = JSON.parse(this.cookieService.get(LocalStorageProperties.UserModel));
134
- // if (data && data != 'null' && data != 'undefined')
135
- // this.store.dispatch(new UserDetailsFetchedAfterLogin(data));
136
- // }
137
- if ((localStorage.getItem(LocalStorageProperties.UserModel) != null && localStorage.getItem(LocalStorageProperties.UserModel) != undefined)
138
- && !localStorage.hasOwnProperty(LocalStorageProperties.UserRoleFeatures)) {
139
- let data = JSON.parse(localStorage.getItem(LocalStorageProperties.UserModel));
140
- this.store.dispatch(new UserDetailsFetchedAfterLogin(data));
141
- }
142
- this.actionUpdates$
143
- .pipe(takeUntil(this.ngDestroyed$), ofType(AuthenticationActionTypes.ClearDemoDataCompleted), tap((result) => {
144
- if (result && result.companyId) {
145
- this.getSoftLabels();
146
- }
147
- })).subscribe();
148
- }
149
- ngOnInit() {
150
- this.getSoftLabelConfigurations();
151
- this.layoutConf = this.layout.layoutConf;
152
- // this.layout.adjustLayout();
153
- // FOR MODULE LOADER FLAG
154
- this.moduleLoaderSub = this.router.events.subscribe(event => {
155
- if (event instanceof RouteConfigLoadStart ||
156
- event instanceof ResolveStart) {
157
- this.isModuleLoading = false;
158
- }
159
- if (event instanceof RouteConfigLoadEnd || event instanceof ResolveEnd) {
160
- this.isModuleLoading = false;
161
- }
162
- });
163
- }
164
- onResize(event) {
165
- this.layout.adjustLayout(event);
166
- }
167
- Opened(event) {
168
- this.display = event;
169
- }
170
- getSoftLabelConfigurations() {
171
- this.softLabels = JSON.parse(localStorage.getItem('SoftLabels'));
172
- }
173
- getSoftLabels() {
174
- let model = new SoftLabelConfigurationModel();
175
- model.searchText = null;
176
- this.commonService.getSoftLabels(model).subscribe((response) => {
177
- if (response.success) {
178
- let data = response.data;
179
- if (data) {
180
- localStorage.setItem('SoftLabels', JSON.stringify(data));
181
- }
182
- }
183
- });
184
- }
185
- ngAfterViewInit() {
186
- // this.layoutConfSub = this.layout.layoutConf$.subscribe(change => {
187
- // // this.initBodyPS(change)
188
- // })
189
- }
190
- // initBodyPS(layoutConf:any = {}) {
191
- // if(layoutConf.navigationPos === 'side' && layoutConf.topbarFixed) {
192
- // if (this.bodyPS) this.bodyPS.destroy();
193
- // if (this.headerFixedBodyPS) this.headerFixedBodyPS.destroy();
194
- // this.headerFixedBodyPS = new PerfectScrollbar('.rightside-content-hold', {
195
- // suppressScrollX: true
196
- // });
197
- // this.scrollToTop('.rightside-content-hold');
198
- // } else {
199
- // if (this.bodyPS) this.bodyPS.destroy();
200
- // if (this.headerFixedBodyPS) this.headerFixedBodyPS.destroy();
201
- // this.bodyPS = new PerfectScrollbar('.main-content-wrap', {
202
- // suppressScrollX: true
203
- // });
204
- // this.scrollToTop('.main-content-wrap');
205
- // }
206
- // }
207
- scrollToTop(selector) {
208
- if (document) {
209
- let element = document.querySelector(selector);
210
- element.scrollTop = 0;
211
- }
212
- }
213
- ngOnDestroy() {
214
- if (this.moduleLoaderSub) {
215
- this.moduleLoaderSub.unsubscribe();
216
- }
217
- if (this.layoutConfSub) {
218
- this.layoutConfSub.unsubscribe();
219
- }
220
- if (this.routerEventSub) {
221
- this.routerEventSub.unsubscribe();
222
- }
223
- if (this.sub) {
224
- this.sub.unsubscribe();
225
- }
226
- }
227
- closeSidebar() {
228
- this.layout.publishLayoutChange({
229
- sidebarStyle: "closed"
230
- });
231
- }
232
- startTimer() {
233
- this.interval = setInterval(() => {
234
- this.totalLoadingTime++;
235
- }, 1000);
236
- }
237
- }
238
- AdminLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: AdminLayoutComponent, deps: [{ token: i1.Router }, { token: i2.TranslateService }, { token: i3.LayoutService }, { token: i4.Store }, { token: i5.CookieService }, { token: i6.Actions }, { token: i7.Location }, { token: i8.CommonService }, { token: i9.PubNubAngular }, { token: i10.SignalrService }], target: i0.ɵɵFactoryTarget.Component });
239
- AdminLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.1", type: AdminLayoutComponent, selector: "app-admin-layout", host: { listeners: { "window:resize": "onResize($event)" } }, ngImport: i0, template: "<div class=\"app-admin-wrap\" [dir]='layoutConf.dir'>\r\n <!-- Header for top navigation layout -->\r\n <!-- ONLY REQUIRED FOR **TOP** NAVIGATION LAYOUT -->\r\n <app-header-top *ngIf=\"layoutConf.navigationPos === 'top'\" [notificPanel]=\"sidenav\">\r\n </app-header-top>\r\n <ngx-ui-loader fgsSize=\"180\" [fgsType]=\"spinnerType\" color=\"primary\"></ngx-ui-loader>\r\n <!-- Main Container -->\r\n <mat-sidenav-container [dir]='layoutConf.dir' class=\"app-admin-container app-side-nav-container mat-drawer-transition\"\r\n [ngClass]=\"{\r\n 'navigation-top': layoutConf.navigationPos === 'top',\r\n 'sidebar-full': layoutConf.sidebarStyle === 'full',\r\n 'sidebar-compact': layoutConf.sidebarStyle === 'compact' && layoutConf.navigationPos === 'side',\r\n 'sidebar-compact-big': layoutConf.sidebarStyle === 'compact-big' && layoutConf.navigationPos === 'side',\r\n 'layout-intransition': layoutConf.layoutInTransition,\r\n 'sidebar-opened': layoutConf.sidebarStyle !== 'closed' && layoutConf.navigationPos === 'side',\r\n 'sidebar-closed': layoutConf.sidebarStyle === 'closed',\r\n 'fixed-topbar': layoutConf.topbarFixed && layoutConf.navigationPos === 'side'\r\n }\">\r\n <!-- SIDEBAR -->\r\n <!-- ONLY REQUIRED FOR **SIDE** NAVIGATION LAYOUT -->\r\n <!-- <app-sidebar-side *ngIf=\"layoutConf.navigationPos === 'side'\"></app-sidebar-side> -->\r\n\r\n <!-- Top navigation layout (navigation for mobile screen) -->\r\n <!-- ONLY REQUIRED FOR **TOP** NAVIGATION MOBILE LAYOUT -->\r\n <app-sidebar-top *ngIf=\"layoutConf.navigationPos === 'top' && layoutConf.isMobile\"></app-sidebar-top>\r\n\r\n <!-- App content -->\r\n <div class=\"main-content-wrap\" [perfectScrollbar]=\"scrollConfig\" [disabled]=\"layoutConf.topbarFixed\">\r\n <!-- Header for side navigation layout -->\r\n <!-- ONLY REQUIRED FOR **SIDE** NAVIGATION LAYOUT -->\r\n <app-header-side class=\"{{layoutConf.isMobile ? 'custom-app-header-mobile' : 'custom-app-header'}}\" (opened)=\"Opened($event)\" [notificPanel]=\"sidenav\">\r\n </app-header-side>\r\n\r\n <!-- <div class=\"mr-1\" *ngIf=\"!dashboardPage\">\r\n <gc-userstory-summary *ngIf=\"userStory\" style=\"width: -webkit-fill-available;background-color: beige;\"\r\n [userStory]=\"userStory\" [isSubTasksPage]=false [isLoading]=\"(anyOperationInProgressForAutoLogging$|async)\"\r\n [isUserStoriesPage]=false (updateAutoLog)=\"LogAction($event)\">\r\n </gc-userstory-summary>\r\n <div *ngIf=\"!userStory\">\r\n You are not started any userstory yet! Please start work!!\r\n </div>\r\n <div class=\"ml-05\">\r\n <fa-icon class=\"caret-size\" style=\"color:#3da8b5\" icon=\"caret-down\" [satPopoverAnchorFor]=\"recentUserStory\"\r\n (click)=\"recentUserStory.toggle()\"></fa-icon>\r\n </div>\r\n <sat-popover #recentUserStory hasBackdrop backdropClass=\"us-popover\"> \r\n <mat-card>\r\n <div *ngFor=\"let userStory of (userStories$ | async | slice:0:5)\" style=\"min-width: 1000px;\" class=\"view-us\">\r\n <gc-userstory-summary style=\"width: -webkit-fill-available;background-color: beige;\"\r\n [userStory]=\"userStory\" [isSubTasksPage]=false [isLoading]=\"(anyOperationInProgressForAutoLogging$|async)\"\r\n [isUserStoriesPage]=true (updateAutoLog)=\"LogAction($event)\" [isShow]=\"false\" (close)=\"recentUserStory.close()\">\r\n </gc-userstory-summary>\r\n </div>\r\n </mat-card>\r\n </sat-popover>\r\n </div> -->\r\n\r\n <div class=\"rightside-content-hold\" [perfectScrollbar]=\"scrollConfig\" [disabled]=\"!layoutConf.topbarFixed\"\r\n [ngClass]=\"{'blur-on-opened': display}\" [ngClass]=\"{'show-in-dashboard':dashboardPage}\">\r\n <!-- <div fxLayout=\"row\" fxLayoutAlign=\"center center\" class=\"mr-1\" *ngIf=\"!dashboardPage\" [ngStyle]=\"{'margin-left': '90px'}\" \r\n [ngStyle]=\"{'background-color': userStory ? 'beige' : 'none' }\" style=\"margin-right:90px !important\">\r\n <gc-userstory-summary fxFlex=\"90\" *ngIf=\"userStory\" style=\"width: -webkit-fill-available;background-color: beige;\"\r\n [userStory]=\"userStory\" [isSubTasksPage]=false [isLoading]=\"(anyOperationInProgressForAutoLogging$|async)\"\r\n [isUserStoriesPage]=false (updateAutoLog)=\"LogAction($event)\">\r\n </gc-userstory-summary>\r\n <mat-card *ngIf=\"!userStory\" style=\"padding: 10px;left: -75px;\">\r\n <span>\r\n You are not started any {{ userstory | softLabelsPipe : softLabels}} yet! Please start work!!\r\n </span>\r\n <span class=\"ml-05\">\r\n <fa-icon class=\"caret-size\" style=\"color:#3da8b5\" icon=\"caret-down\" [satPopoverAnchorFor]=\"recentUserStory\"\r\n (click)=\"recentUserStory.toggle()\"></fa-icon>\r\n </span>\r\n </mat-card>\r\n <mat-progress-bar color=\"primary\" mode=\"indeterminate\" *ngIf=\"anyOperationInProgressForAutoLogging$|async\">\r\n </mat-progress-bar> -->\r\n <!-- <div fxFlex class=\"ml-05\" *ngIf=\"userStory\">\r\n <fa-icon class=\"caret-size\" style=\"color:#3da8b5\" icon=\"caret-down\" [satPopoverAnchorFor]=\"recentUserStory\"\r\n (click)=\"recentUserStory.toggle()\"></fa-icon>\r\n </div>\r\n <sat-popover #recentUserStory hasBackdrop backdropClass=\"us-popover\"> \r\n <mat-card>\r\n <div *ngFor=\"let userStory of (userStories$ | async | slice:0:5)\" style=\"min-width: 1000px;\" class=\"view-us\">\r\n <gc-userstory-summary style=\"width: -webkit-fill-available;background-color: beige;\"\r\n [userStory]=\"userStory\" [isSubTasksPage]=false [isLoading]=\"(anyOperationInProgressForAutoLogging$|async)\"\r\n [isUserStoriesPage]=true (updateAutoLog)=\"LogAction($event)\" [isShow]=\"false\" (close)=\"recentUserStory.close()\">\r\n </gc-userstory-summary>\r\n </div>\r\n </mat-card>\r\n </sat-popover>\r\n </div> -->\r\n <!-- View Loader -->\r\n <div class=\"view-loader\" *ngIf=\"isModuleLoading\">\r\n <div class=\"spinner\">\r\n <div class=\"double-bounce1 mat-bg-accent\"></div>\r\n <div class=\"double-bounce2 mat-bg-primary\"></div>\r\n </div>\r\n </div>\r\n <!-- View outlet -->\r\n <div id=\"btrak-preloader\" *ngIf=\"loading\">\r\n <span class=\"preloading-text\">\r\n {{ 'LOADINGPLEASEWAIT' | translate }} ({{totalLoadingTime}} {{ 'SECONDS' | translate }})\r\n </span>\r\n <div id=\"btrak-loader\" *ngIf=\"loading\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"!loading\">\r\n <router-outlet></router-outlet>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- View overlay for mobile navigation -->\r\n <div class=\"sidebar-backdrop\" [ngClass]=\"{'visible': layoutConf.sidebarStyle !== 'closed' && layoutConf.isMobile}\"\r\n (click)=\"closeSidebar()\"></div>\r\n\r\n <!-- Notificaation bar -->\r\n <mat-sidenav #sidenav mode=\"side\" opened class=\"example-sidenav\" [fixedInViewport]=\"true\" [fixedTopGap]=\"layoutConf.isMobile ? 45 : 88\"\r\n [fixedBottomGap]=\"0\" class=\"side-nav-color custom-app-nav\" id=\"style-1\">\r\n <app-sidebar></app-sidebar>\r\n </mat-sidenav>\r\n </mat-sidenav-container>\r\n</div>", components: [{ type: i11.HeaderTopComponent, selector: "app-header-top", inputs: ["notificPanel"] }, { type: i12.ɵb, selector: "ngx-ui-loader", inputs: ["bgsColor", "bgsOpacity", "bgsPosition", "bgsSize", "bgsType", "fgsColor", "fgsPosition", "fgsSize", "fgsType", "gap", "loaderId", "logoPosition", "logoSize", "logoUrl", "overlayBorderRadius", "overlayColor", "pbColor", "pbDirection", "pbThickness", "hasProgressBar", "text", "textColor", "textPosition"] }, { type: i13.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { type: i14.SidebarTopComponent, selector: "app-sidebar-top" }, { type: i15.HeaderSideComponent, selector: "app-header-side", inputs: ["notificPanel"], outputs: ["opened"] }, { type: i13.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { type: i16.SideBarComponent, selector: "app-sidebar" }], directives: [{ type: i17.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i18.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i19.PerfectScrollbarDirective, selector: "[perfectScrollbar]", inputs: ["disabled", "perfectScrollbar"], outputs: ["psScrollY", "psScrollX", "psScrollUp", "psScrollDown", "psScrollLeft", "psScrollRight", "psYReachEnd", "psYReachStart", "psXReachEnd", "psXReachStart"], exportAs: ["ngxPerfectScrollbar"] }, { type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate"], exportAs: ["outlet"] }], pipes: { "translate": i2.TranslatePipe } });
240
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.1", ngImport: i0, type: AdminLayoutComponent, decorators: [{
241
- type: Component,
242
- args: [{
243
- selector: "app-admin-layout",
244
- templateUrl: "./admin-layout.template.html"
245
- }]
246
- }], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.TranslateService }, { type: i3.LayoutService }, { type: i4.Store }, { type: i5.CookieService }, { type: i6.Actions }, { type: i7.Location }, { type: i8.CommonService }, { type: i9.PubNubAngular }, { type: i10.SignalrService }]; }, propDecorators: { onResize: [{
247
- type: HostListener,
248
- args: ["window:resize", ['$event']]
249
- }] } });
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoZWxsLW1vZHVsZS1jb21wb25lbnRzL3NoZWxsLWNvbXBvbmVudHMvc3JjL2xpYi9zaGVsbC1jb21wb25lbnRzL2NvbXBvbmVudHMvYWRtaW4tbGF5b3V0L2FkbWluLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGVsbC1tb2R1bGUtY29tcG9uZW50cy9zaGVsbC1jb21wb25lbnRzL3NyYy9saWIvc2hlbGwtY29tcG9uZW50cy9jb21wb25lbnRzL2FkbWluLWxheW91dC9hZG1pbi1sYXlvdXQudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQyxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFVLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEdBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUt4TCxvREFBb0Q7QUFDcEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUseUJBQXlCLEVBQTZCLE1BQU0sNENBQTRDLENBQUM7QUFFaEosT0FBTyxFQUFXLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUkzRSxPQUFPLHVEQUF1RCxDQUFDO0FBQy9ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtE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QUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDbEM7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNuQztRQUNELElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBQ0QsWUFBWTtRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUM7WUFDOUIsWUFBWSxFQUFFLFFBQVE7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ1YsQ0FBQzs7aUhBMVBVLG9CQUFvQjtxR0FBcEIsb0JBQW9CLHNIQy9CakMsazNPQXlITTsyRkQxRk8sb0JBQW9CO2tCQUxoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFdBQVcsRUFBRSw4QkFBOEI7aUJBQzVDOzJVQThLQyxRQUFRO3NCQUZQLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FbmQsIFJvdXRlQ29uZmlnTG9hZFN0YXJ0LCBSb3V0ZUNvbmZpZ0xvYWRFbmQsIFJlc29sdmVTdGFydCwgUmVzb2x2ZUVuZCwgTmF2aWdhdGlvblN0YXJ0LCBOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRXJyb3IsIEV2ZW50LCB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgTWF0U2lkZW5hdiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2XCI7XHJcbmltcG9ydCB7IE1lZGlhQ2hhbmdlIH0gZnJvbSBcIkBhbmd1bGFyL2ZsZXgtbGF5b3V0XCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG4vLyBpbXBvcnQgUGVyZmVjdFNjcm9sbGJhciBmcm9tICdwZXJmZWN0LXNjcm9sbGJhcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgc2VsZWN0LCBTdG9yZSB9IGZyb20gXCJAbmdyeC9zdG9yZVwiO1xyXG5pbXBvcnQgeyBVc2VyRGV0YWlsc0ZldGNoZWRBZnRlckxvZ2luLCBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLCBVc2VySW5pdGlhbERldGFpbHNGZXRjaGVkIH0gZnJvbSBcIi4uLy4uL3N0b3JlL2FjdGlvbnMvYXV0aGVudGljYXRpb24uYWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSBcIm5neC1jb29raWUtc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBY3Rpb25zLCBvZlR5cGUgfSBmcm9tIFwiQG5ncngvZWZmZWN0c1wiO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgU29mdExhYmVsQ29uZmlndXJhdGlvbk1vZGVsIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zb2Z0bGFiZWxzLW1vZGVsXCJcclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheW91dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclN0b3J5IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXJTdG9yeSc7XHJcbmltcG9ydCAqIGFzIFNoYXJlZE1vZHVsZVN0YXRlIGZyb20gXCIuLi8uLi9zdG9yZS9yZWR1Y2Vycy9pbmRleFwiO1xyXG5pbXBvcnQgJy4uLy4uLy4uL2dsb2JhbGRlcGVuZGVuY2llcy9oZWxwZXJzL2ZvbnRhd2Vzb21lLWljb25zJztcclxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlUHJvcGVydGllcyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbGRlcGVuZGVuY2llcy9jb25zdGFudHMvbG9jYWxzdG9yYWdlLXByb3BlcnRpZXMnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLXVzZWQuc2VydmljZSc7XHJcbmltcG9ydCB7IFB1Yk51YkFuZ3VsYXIgfSBmcm9tICdwdWJudWItYW5ndWxhcjInO1xyXG5pbXBvcnQgeyBTUElOTkVSIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XHJcbmltcG9ydCB7IFNpZ25hbHJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NpZ25hbHIuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLWFkbWluLWxheW91dFwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vYWRtaW4tbGF5b3V0LnRlbXBsYXRlLmh0bWxcIlxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFkbWluTGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIHB1YmxpYyBpc01vZHVsZUxvYWRpbmc6IEJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIG1vZHVsZUxvYWRlclN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgbGF5b3V0Q29uZlN1YjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcm91dGVyRXZlbnRTdWI6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIG1lZGlhU3ViOiBTdWJzY3JpcHRpb247XHJcbiAgc29mdExhYmVscyQ6IE9ic2VydmFibGU8U29mdExhYmVsQ29uZmlndXJhdGlvbk1vZGVsW10+O1xyXG4gIHNvZnRMYWJlbHM6IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbFtdO1xyXG4gIC8vIHByaXZhdGUgc2lkZWJhclBTOiBQZXJmZWN0U2Nyb2xsYmFyO1xyXG5cclxuICAvLyBwcml2YXRlIGJvZHlQUzogUGVyZmVjdFNjcm9sbGJhcjtcclxuICAvLyBwcml2YXRlIGhlYWRlckZpeGVkQm9keVBTOiBQZXJmZWN0U2Nyb2xsYmFyO1xyXG4gIHB1YmxpYyBzY3JvbGxDb25maWcgPSB7fTtcclxuICBwdWJsaWMgbGF5b3V0Q29uZjogYW55ID0ge307XHJcbiAgZGlzcGxheTogYm9vbGVhbjtcclxuICB1c2VyU3RvcmllcyQ6IE9ic2VydmFibGU8VXNlclN0b3J5W10+O1xyXG4gIHNob3c6IGJvb2xlYW47XHJcbiAgdXNlclN0b3JpZXM6IFVzZXJTdG9yeVtdO1xyXG4gIHVzZXJTdG9yeTogVXNlclN0b3J5O1xyXG4gIGFueU9wZXJhdGlvbkluUHJvZ3Jlc3NGb3JBdXRvTG9nZ2luZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgcHVibGljIG5nRGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZGFzaGJvYXJkUGFnZTogYm9vbGVhbjtcclxuICBiZ2NvbG9yOiBhbnk7XHJcbiAgcHJpdmF0ZSBzdWI6IFN1YnNjcmlwdGlvbjtcclxuICB1c2Vyc3RvcnkgPSAndXNlcnN0b3J5JztcclxuICBsb2FkaW5nID0gZmFsc2U7XHJcbiAgdG90YWxMb2FkaW5nVGltZTogbnVtYmVyID0gMDtcclxuICBpbnRlcnZhbDtcclxuICBzcGlubmVyVHlwZSA9IFNQSU5ORVIuY2lyY2xlO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbGF5b3V0OiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8U2hhcmVkTW9kdWxlU3RhdGUuU3RhdGU+LFxyXG4gICAgcHJpdmF0ZSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhY3Rpb25VcGRhdGVzJDogQWN0aW9ucyxcclxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwdWJudWI6IFB1Yk51YkFuZ3VsYXIsXHJcbiAgICBwcml2YXRlIHNpZ25hbHI6IFNpZ25hbHJTZXJ2aWNlLFxyXG4gICkge1xyXG4gICAgLy8gbGV0IGNvbklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnY29uZWN0aW9uSWQnKTtcclxuICAgIC8vIGlmKCFjb25JZCkge1xyXG4gICAgICB0aGlzLnNpZ25hbHIuaW5pdGlhbGl6ZVNpZ25hbFJDb25uZWN0aW9uKCk7XHJcbiAgICAvLyB9XHJcbiAgICBsZXQgZW52aXJvbm1lbnQgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuRW52aXJvbm1lbnQpKTtcclxuICAgIGxldCBjb21wYW55U2V0dGluZ3MgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlTZXR0aW5ncyk7XHJcbiAgICBpZiAoIWNvbXBhbnlTZXR0aW5ncyB8fCBjb21wYW55U2V0dGluZ3MgPT0gJ251bGwnIHx8IGNvbXBhbnlTZXR0aW5ncyA9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgIHB1Ym51Yi5pbml0KHtcclxuICAgICAgICBwdWJsaXNoS2V5OiBlbnZpcm9ubWVudC5wdWJsaXNoS2V5LFxyXG4gICAgICAgIHN1YnNjcmliZUtleTogZW52aXJvbm1lbnQuc3Vic2NyaWJlS2V5XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgY29tU2V0ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlTZXR0aW5ncykpO1xyXG4gICAgICB2YXIgcHVibGlzaEtleSA9IGNvbVNldC5maW5kKGkgPT4gaS5rZXkgPT0gXCJQdWJudWJQdWJsaXNoS2V5XCIpO1xyXG4gICAgICB2YXIgc3Vic2NyaWJlS2V5ID0gY29tU2V0LmZpbmQoaSA9PiBpLmtleSA9PSBcIlB1Ym51YlN1YnNjcmliZUtleVwiKVxyXG4gICAgICBpZiAoKHB1Ymxpc2hLZXkgJiYgcHVibGlzaEtleS52YWx1ZSkgJiYgKHN1YnNjcmliZUtleSAmJiBzdWJzY3JpYmVLZXkudmFsdWUpKSB7XHJcbiAgICAgICAgcHVibnViLmluaXQoe1xyXG4gICAgICAgICAgcHVibGlzaEtleTogcHVibGlzaEtleS52YWx1ZSxcclxuICAgICAgICAgIHN1YnNjcmliZUtleTogc3Vic2NyaWJlS2V5LnZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcHVibnViLmluaXQoe1xyXG4gICAgICAgICAgcHVibGlzaEtleTogZW52aXJvbm1lbnQucHVibGlzaEtleSxcclxuICAgICAgICAgIHN1YnNjcmliZUtleTogZW52aXJvbm1lbnQuc3Vic2NyaWJlS2V5XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG5cclxuICAgIC8vIENsb3NlIHNpZGVuYXYgYWZ0ZXIgcm91dGUgY2hhbmdlIGluIG1vYmlsZVxyXG4gICAgdGhpcy5yb3V0ZXJFdmVudFN1YiA9IHJvdXRlci5ldmVudHNcclxuICAgICAgLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJvdXRlQ2hhbmdlOiBOYXZpZ2F0aW9uRW5kKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sYXlvdXQuYWRqdXN0TGF5b3V0KHsgcm91dGU6IHJvdXRlQ2hhbmdlLnVybCB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gVHJhbnNsYXRvciBpbml0XHJcbiAgICBsZXQgY3VycmVudEN1bHR1cmUgPSB0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ3VycmVudEN1bHR1cmUpO1xyXG5cclxuICAgIGlmIChjdXJyZW50Q3VsdHVyZSA9PT0gJ251bGwnIHx8IGN1cnJlbnRDdWx0dXJlID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICBjdXJyZW50Q3VsdHVyZSA9ICdlbic7XHJcbiAgICB9XHJcbiAgICB0cmFuc2xhdGUudXNlKGN1cnJlbnRDdWx0dXJlKTtcclxuXHJcblxyXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgIGNhc2UgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQ6IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsTG9hZGluZ1RpbWUgPSAwO1xyXG4gICAgICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhc2UgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kOiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2FzZSBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWw6XHJcbiAgICAgICAgY2FzZSBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcjoge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSh2YWwgPT4ge1xyXG4gICAgICBpZiAobG9jYXRpb24ucGF0aCgpICE9IFwiXCIpIHtcclxuICAgICAgICBpZiAobG9jYXRpb24ucGF0aCgpLmluY2x1ZGVzKCcvZGFzaGJvYXJkLW1hbmFnZW1lbnQvZGFzaGJvYXJkLycpKSB7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZFBhZ2UgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5iZ2NvbG9yID0gJ25vbmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkUGFnZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5iZ2NvbG9yID0gJ2JlaWdlJztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGlmICh0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTW9kZWwpKSB7XHJcbiAgICAvLyAgIGxldCBkYXRhID0gSlNPTi5wYXJzZSh0aGlzLmNvb2tpZVNlcnZpY2UuZ2V0KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlck1vZGVsKSk7XHJcbiAgICAvLyAgIGlmIChkYXRhICYmIGRhdGEgIT0gJ251bGwnICYmIGRhdGEgIT0gJ3VuZGVmaW5lZCcpXHJcbiAgICAvLyAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgVXNlckRldGFpbHNGZXRjaGVkQWZ0ZXJMb2dpbihkYXRhKSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYgKChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJNb2RlbCkgIT0gbnVsbCAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJNb2RlbCkgIT0gdW5kZWZpbmVkKVxyXG4gICAgICAmJiAhbG9jYWxTdG9yYWdlLmhhc093blByb3BlcnR5KExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlclJvbGVGZWF0dXJlcykpIHtcclxuICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuVXNlck1vZGVsKSk7XHJcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFVzZXJEZXRhaWxzRmV0Y2hlZEFmdGVyTG9naW4oZGF0YSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWN0aW9uVXBkYXRlcyRcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdEZXN0cm95ZWQkKSxcclxuICAgICAgICBvZlR5cGUoQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5DbGVhckRlbW9EYXRhQ29tcGxldGVkKSxcclxuICAgICAgICB0YXAoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5jb21wYW55SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRTb2Z0TGFiZWxzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5nZXRTb2Z0TGFiZWxDb25maWd1cmF0aW9ucygpO1xyXG4gICAgdGhpcy5sYXlvdXRDb25mID0gdGhpcy5sYXlvdXQubGF5b3V0Q29uZjtcclxuICAgIC8vIHRoaXMubGF5b3V0LmFkanVzdExheW91dCgpO1xyXG5cclxuICAgIC8vIEZPUiBNT0RVTEUgTE9BREVSIEZMQUdcclxuICAgIHRoaXMubW9kdWxlTG9hZGVyU3ViID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBldmVudCBpbnN0YW5jZW9mIFJvdXRlQ29uZmlnTG9hZFN0YXJ0IHx8XHJcbiAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBSZXNvbHZlU3RhcnRcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5pc01vZHVsZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBSb3V0ZUNvbmZpZ0xvYWRFbmQgfHwgZXZlbnQgaW5zdGFuY2VvZiBSZXNvbHZlRW5kKSB7XHJcbiAgICAgICAgdGhpcy5pc01vZHVsZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiLCBbJyRldmVudCddKVxyXG5cclxuICBvblJlc2l6ZShldmVudCkge1xyXG4gICAgdGhpcy5sYXlvdXQuYWRqdXN0TGF5b3V0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIE9wZW5lZChldmVudCkge1xyXG4gICAgdGhpcy5kaXNwbGF5ID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRTb2Z0TGFiZWxDb25maWd1cmF0aW9ucygpIHtcclxuICAgIHRoaXMuc29mdExhYmVscyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NvZnRMYWJlbHMnKSk7XHJcbiAgfVxyXG5cclxuICBnZXRTb2Z0TGFiZWxzKCkge1xyXG4gICAgbGV0IG1vZGVsID0gbmV3IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbCgpO1xyXG4gICAgbW9kZWwuc2VhcmNoVGV4dCA9IG51bGw7XHJcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0U29mdExhYmVscyhtb2RlbCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU29mdExhYmVscycsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gdGhpcy5sYXlvdXRDb25mU3ViID0gdGhpcy5sYXlvdXQubGF5b3V0Q29uZiQuc3Vic2NyaWJlKGNoYW5nZSA9PiB7XHJcbiAgICAvLyAgIC8vIHRoaXMuaW5pdEJvZHlQUyhjaGFuZ2UpXHJcbiAgICAvLyB9KVxyXG4gIH1cclxuXHJcbiAgLy8gaW5pdEJvZHlQUyhsYXlvdXRDb25mOmFueSA9IHt9KSB7XHJcbiAgLy8gICBpZihsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICdzaWRlJyAmJiBsYXlvdXRDb25mLnRvcGJhckZpeGVkKSB7XHJcbiAgLy8gICAgIGlmICh0aGlzLmJvZHlQUykgdGhpcy5ib2R5UFMuZGVzdHJveSgpO1xyXG4gIC8vICAgICBpZiAodGhpcy5oZWFkZXJGaXhlZEJvZHlQUykgdGhpcy5oZWFkZXJGaXhlZEJvZHlQUy5kZXN0cm95KCk7XHJcbiAgLy8gICAgIHRoaXMuaGVhZGVyRml4ZWRCb2R5UFMgPSBuZXcgUGVyZmVjdFNjcm9sbGJhcignLnJpZ2h0c2lkZS1jb250ZW50LWhvbGQnLCB7XHJcbiAgLy8gICAgICAgc3VwcHJlc3NTY3JvbGxYOiB0cnVlXHJcbiAgLy8gICAgIH0pO1xyXG4gIC8vICAgICB0aGlzLnNjcm9sbFRvVG9wKCcucmlnaHRzaWRlLWNvbnRlbnQtaG9sZCcpO1xyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgaWYgKHRoaXMuYm9keVBTKSB0aGlzLmJvZHlQUy5kZXN0cm95KCk7XHJcbiAgLy8gICAgIGlmICh0aGlzLmhlYWRlckZpeGVkQm9keVBTKSB0aGlzLmhlYWRlckZpeGVkQm9keVBTLmRlc3Ryb3koKTtcclxuICAvLyAgICAgdGhpcy5ib2R5UFMgPSBuZXcgUGVyZmVjdFNjcm9sbGJhcignLm1haW4tY29udGVudC13cmFwJywge1xyXG4gIC8vICAgICAgIHN1cHByZXNzU2Nyb2xsWDogdHJ1ZVxyXG4gIC8vICAgICB9KTtcclxuICAvLyAgICAgdGhpcy5zY3JvbGxUb1RvcCgnLm1haW4tY29udGVudC13cmFwJyk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG4gIHNjcm9sbFRvVG9wKHNlbGVjdG9yOiBzdHJpbmcpIHtcclxuICAgIGlmIChkb2N1bWVudCkge1xyXG4gICAgICBsZXQgZWxlbWVudCA9IDxIVE1MRWxlbWVudD5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcclxuICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLm1vZHVsZUxvYWRlclN1Yikge1xyXG4gICAgICB0aGlzLm1vZHVsZUxvYWRlclN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubGF5b3V0Q29uZlN1Yikge1xyXG4gICAgICB0aGlzLmxheW91dENvbmZTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJvdXRlckV2ZW50U3ViKSB7XHJcbiAgICAgIHRoaXMucm91dGVyRXZlbnRTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnN1Yikge1xyXG4gICAgICB0aGlzLnN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjbG9zZVNpZGViYXIoKSB7XHJcbiAgICB0aGlzLmxheW91dC5wdWJsaXNoTGF5b3V0Q2hhbmdlKHtcclxuICAgICAgc2lkZWJhclN0eWxlOiBcImNsb3NlZFwiXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXJ0VGltZXIoKSB7XHJcbiAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICB0aGlzLnRvdGFsTG9hZGluZ1RpbWUrKztcclxuICAgIH0sIDEwMDApXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhcHAtYWRtaW4td3JhcFwiIFtkaXJdPSdsYXlvdXRDb25mLmRpcic+XHJcbiAgPCEtLSBIZWFkZXIgZm9yIHRvcCBuYXZpZ2F0aW9uIGxheW91dCAtLT5cclxuICA8IS0tIE9OTFkgUkVRVUlSRUQgRk9SICoqVE9QKiogTkFWSUdBVElPTiBMQVlPVVQgLS0+XHJcbiAgPGFwcC1oZWFkZXItdG9wICpuZ0lmPVwibGF5b3V0Q29uZi5uYXZpZ2F0aW9uUG9zID09PSAndG9wJ1wiIFtub3RpZmljUGFuZWxdPVwic2lkZW5hdlwiPlxyXG4gIDwvYXBwLWhlYWRlci10b3A+XHJcbiAgPG5neC11aS1sb2FkZXIgZmdzU2l6ZT1cIjE4MFwiIFtmZ3NUeXBlXT1cInNwaW5uZXJUeXBlXCIgY29sb3I9XCJwcmltYXJ5XCI+PC9uZ3gtdWktbG9hZGVyPlxyXG4gIDwhLS0gTWFpbiBDb250YWluZXIgLS0+XHJcbiAgPG1hdC1zaWRlbmF2LWNvbnRhaW5lciBbZGlyXT0nbGF5b3V0Q29uZi5kaXInIGNsYXNzPVwiYXBwLWFkbWluLWNvbnRhaW5lciBhcHAtc2lkZS1uYXYtY29udGFpbmVyIG1hdC1kcmF3ZXItdHJhbnNpdGlvblwiXHJcbiAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAnbmF2aWdhdGlvbi10b3AnOiBsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICd0b3AnLFxyXG4gICAgJ3NpZGViYXItZnVsbCc6IGxheW91dENvbmYuc2lkZWJhclN0eWxlID09PSAnZnVsbCcsXHJcbiAgICAnc2lkZWJhci1jb21wYWN0JzogbGF5b3V0Q29uZi5zaWRlYmFyU3R5bGUgPT09ICdjb21wYWN0JyAmJiBsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICdzaWRlJyxcclxuICAgICdzaWRlYmFyLWNvbXBhY3QtYmlnJzogbGF5b3V0Q29uZi5zaWRlYmFyU3R5bGUgPT09ICdjb21wYWN0LWJpZycgJiYgbGF5b3V0Q29uZi5uYXZpZ2F0aW9uUG9zID09PSAnc2lkZScsXHJcbiAgICAnbGF5b3V0LWludHJhbnNpdGlvbic6IGxheW91dENvbmYubGF5b3V0SW5UcmFuc2l0aW9uLFxyXG4gICAgJ3NpZGViYXItb3BlbmVkJzogbGF5b3V0Q29uZi5zaWRlYmFyU3R5bGUgIT09ICdjbG9zZWQnICYmIGxheW91dENvbmYubmF2aWdhdGlvblBvcyA9PT0gJ3NpZGUnLFxyXG4gICAgJ3NpZGViYXItY2xvc2VkJzogbGF5b3V0Q29uZi5zaWRlYmFyU3R5bGUgPT09ICdjbG9zZWQnLFxyXG4gICAgJ2ZpeGVkLXRvcGJhcic6IGxheW91dENvbmYudG9wYmFyRml4ZWQgJiYgbGF5b3V0Q29uZi5uYXZpZ2F0aW9uUG9zID09PSAnc2lkZSdcclxuICB9XCI+XHJcbiAgICA8IS0tIFNJREVCQVIgLS0+XHJcbiAgICA8IS0tIE9OTFkgUkVRVUlSRUQgRk9SICoqU0lERSoqIE5BVklHQVRJT04gTEFZT1VUIC0tPlxyXG4gICAgPCEtLSA8YXBwLXNpZGViYXItc2lkZSAqbmdJZj1cImxheW91dENvbmYubmF2aWdhdGlvblBvcyA9PT0gJ3NpZGUnXCI+PC9hcHAtc2lkZWJhci1zaWRlPiAtLT5cclxuXHJcbiAgICA8IS0tIFRvcCBuYXZpZ2F0aW9uIGxheW91dCAobmF2aWdhdGlvbiBmb3IgbW9iaWxlIHNjcmVlbikgLS0+XHJcbiAgICA8IS0tIE9OTFkgUkVRVUlSRUQgRk9SICoqVE9QKiogTkFWSUdBVElPTiBNT0JJTEUgTEFZT1VUIC0tPlxyXG4gICAgPGFwcC1zaWRlYmFyLXRvcCAqbmdJZj1cImxheW91dENvbmYubmF2aWdhdGlvblBvcyA9PT0gJ3RvcCcgJiYgbGF5b3V0Q29uZi5pc01vYmlsZVwiPjwvYXBwLXNpZGViYXItdG9wPlxyXG5cclxuICAgIDwhLS0gQXBwIGNvbnRlbnQgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWFpbi1jb250ZW50LXdyYXBcIiBbcGVyZmVjdFNjcm9sbGJhcl09XCJzY3JvbGxDb25maWdcIiBbZGlzYWJsZWRdPVwibGF5b3V0Q29uZi50b3BiYXJGaXhlZFwiPlxyXG4gICAgICA8IS0tIEhlYWRlciBmb3Igc2lkZSBuYXZpZ2F0aW9uIGxheW91dCAtLT5cclxuICAgICAgPCEtLSBPTkxZIFJFUVVJUkVEIEZPUiAqKlNJREUqKiBOQVZJR0FUSU9OIExBWU9VVCAtLT5cclxuICAgICAgPGFwcC1oZWFkZXItc2lkZSBjbGFzcz1cInt7bGF5b3V0Q29uZi5pc01vYmlsZSA/ICdjdXN0b20tYXBwLWhlYWRlci1tb2JpbGUnIDogJ2N1c3RvbS1hcHAtaGVhZGVyJ319XCIgKG9wZW5lZCk9XCJPcGVuZWQoJGV2ZW50KVwiIFtub3RpZmljUGFuZWxdPVwic2lkZW5hdlwiPlxyXG4gICAgICA8L2FwcC1oZWFkZXItc2lkZT5cclxuXHJcbiAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm1yLTFcIiAqbmdJZj1cIiFkYXNoYm9hcmRQYWdlXCI+XHJcbiAgICAgICAgPGdjLXVzZXJzdG9yeS1zdW1tYXJ5ICpuZ0lmPVwidXNlclN0b3J5XCIgc3R5bGU9XCJ3aWR0aDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtiYWNrZ3JvdW5kLWNvbG9yOiBiZWlnZTtcIlxyXG4gICAgICAgICAgW3VzZXJTdG9yeV09XCJ1c2VyU3RvcnlcIiBbaXNTdWJUYXNrc1BhZ2VdPWZhbHNlIFtpc0xvYWRpbmddPVwiKGFueU9wZXJhdGlvbkluUHJvZ3Jlc3NGb3JBdXRvTG9nZ2luZyR8YXN5bmMpXCJcclxuICAgICAgICAgIFtpc1VzZXJTdG9yaWVzUGFnZV09ZmFsc2UgKHVwZGF0ZUF1dG9Mb2cpPVwiTG9nQWN0aW9uKCRldmVudClcIj5cclxuICAgICAgICA8L2djLXVzZXJzdG9yeS1zdW1tYXJ5PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhdXNlclN0b3J5XCI+XHJcbiAgICAgICAgICBZb3UgYXJlIG5vdCBzdGFydGVkIGFueSB1c2Vyc3RvcnkgeWV0ISBQbGVhc2Ugc3RhcnQgd29yayEhXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTA1XCI+XHJcbiAgICAgICAgICA8ZmEtaWNvbiBjbGFzcz1cImNhcmV0LXNpemVcIiBzdHlsZT1cImNvbG9yOiMzZGE4YjVcIiBpY29uPVwiY2FyZXQtZG93blwiIFtzYXRQb3BvdmVyQW5jaG9yRm9yXT1cInJlY2VudFVzZXJTdG9yeVwiXHJcbiAgICAgICAgICAgICAoY2xpY2spPVwicmVjZW50VXNlclN0b3J5LnRvZ2dsZSgpXCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxzYXQtcG9wb3ZlciAjcmVjZW50VXNlclN0b3J5IGhhc0JhY2tkcm9wICBiYWNrZHJvcENsYXNzPVwidXMtcG9wb3ZlclwiPiBcclxuICAgICAgICAgICAgPG1hdC1jYXJkPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdXNlclN0b3J5IG9mICh1c2VyU3RvcmllcyQgfCBhc3luYyB8IHNsaWNlOjA6NSlcIiBzdHlsZT1cIm1pbi13aWR0aDogMTAwMHB4O1wiIGNsYXNzPVwidmlldy11c1wiPlxyXG4gICAgICAgICAgICA8Z2MtdXNlcnN0b3J5LXN1bW1hcnkgc3R5bGU9XCJ3aWR0aDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtiYWNrZ3JvdW5kLWNvbG9yOiBiZWlnZTtcIlxyXG4gICAgICAgICAgICAgIFt1c2VyU3RvcnldPVwidXNlclN0b3J5XCIgW2lzU3ViVGFza3NQYWdlXT1mYWxzZSBbaXNMb2FkaW5nXT1cIihhbnlPcGVyYXRpb25JblByb2dyZXNzRm9yQXV0b0xvZ2dpbmckfGFzeW5jKVwiXHJcbiAgICAgICAgICAgICAgW2lzVXNlclN0b3JpZXNQYWdlXT10cnVlICh1cGRhdGVBdXRvTG9nKT1cIkxvZ0FjdGlvbigkZXZlbnQpXCIgW2lzU2hvd109XCJmYWxzZVwiIChjbG9zZSk9XCJyZWNlbnRVc2VyU3RvcnkuY2xvc2UoKVwiPlxyXG4gICAgICAgICAgICA8L2djLXVzZXJzdG9yeS1zdW1tYXJ5PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9tYXQtY2FyZD5cclxuICAgICAgICA8L3NhdC1wb3BvdmVyPlxyXG4gICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmlnaHRzaWRlLWNvbnRlbnQtaG9sZFwiIFtwZXJmZWN0U2Nyb2xsYmFyXT1cInNjcm9sbENvbmZpZ1wiIFtkaXNhYmxlZF09XCIhbGF5b3V0Q29uZi50b3BiYXJGaXhlZFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieydibHVyLW9uLW9wZW5lZCc6IGRpc3BsYXl9XCIgW25nQ2xhc3NdPVwieydzaG93LWluLWRhc2hib2FyZCc6ZGFzaGJvYXJkUGFnZX1cIj5cclxuICAgICAgICA8IS0tIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwibXItMVwiICpuZ0lmPVwiIWRhc2hib2FyZFBhZ2VcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi1sZWZ0JzogJzkwcHgnfVwiIFxyXG4gICAgICBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtY29sb3InOiB1c2VyU3RvcnkgPyAnYmVpZ2UnIDogJ25vbmUnIH1cIiBzdHlsZT1cIm1hcmdpbi1yaWdodDo5MHB4ICFpbXBvcnRhbnRcIj5cclxuICAgICAgICA8Z2MtdXNlcnN0b3J5LXN1bW1hcnkgZnhGbGV4PVwiOTBcIiAqbmdJZj1cInVzZXJTdG9yeVwiIHN0eWxlPVwid2lkdGg6IC13ZWJraXQtZmlsbC1hdmFpbGFibGU7YmFja2dyb3VuZC1jb2xvcjogYmVpZ2U7XCJcclxuICAgICAgICAgIFt1c2VyU3RvcnldPVwidXNlclN0b3J5XCIgW2lzU3ViVGFza3NQYWdlXT1mYWxzZSBbaXNMb2FkaW5nXT1cIihhbnlPcGVyYXRpb25JblByb2dyZXNzRm9yQXV0b0xvZ2dpbmckfGFzeW5jKVwiXHJcbiAgICAgICAgICBbaXNVc2VyU3Rvcmllc1BhZ2VdPWZhbHNlICh1cGRhdGVBdXRvTG9nKT1cIkxvZ0FjdGlvbigkZXZlbnQpXCI+XHJcbiAgICAgICAgPC9nYy11c2Vyc3Rvcnktc3VtbWFyeT5cclxuICAgICAgICA8bWF0LWNhcmQgKm5nSWY9XCIhdXNlclN0b3J5XCIgc3R5bGU9XCJwYWRkaW5nOiAxMHB4O2xlZnQ6IC03NXB4O1wiPlxyXG4gICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgWW91IGFyZSBub3Qgc3RhcnRlZCBhbnkge3sgdXNlcnN0b3J5IHwgc29mdExhYmVsc1BpcGUgOiBzb2Z0TGFiZWxzfX0geWV0ISBQbGVhc2Ugc3RhcnQgd29yayEhXHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMDVcIj5cclxuICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwiY2FyZXQtc2l6ZVwiIHN0eWxlPVwiY29sb3I6IzNkYThiNVwiIGljb249XCJjYXJldC1kb3duXCIgW3NhdFBvcG92ZXJBbmNob3JGb3JdPVwicmVjZW50VXNlclN0b3J5XCJcclxuICAgICAgICAgICAgIChjbGljayk9XCJyZWNlbnRVc2VyU3RvcnkudG9nZ2xlKClcIj48L2ZhLWljb24+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIGNvbG9yPVwicHJpbWFyeVwiIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJhbnlPcGVyYXRpb25JblByb2dyZXNzRm9yQXV0b0xvZ2dpbmckfGFzeW5jXCI+XHJcbiAgICAgICAgPC9tYXQtcHJvZ3Jlc3MtYmFyPiAtLT5cclxuICAgICAgICA8IS0tIDxkaXYgZnhGbGV4IGNsYXNzPVwibWwtMDVcIiAqbmdJZj1cInVzZXJTdG9yeVwiPlxyXG4gICAgICAgICAgPGZhLWljb24gY2xhc3M9XCJjYXJldC1zaXplXCIgc3R5bGU9XCJjb2xvcjojM2RhOGI1XCIgaWNvbj1cImNhcmV0LWRvd25cIiBbc2F0UG9wb3ZlckFuY2hvckZvcl09XCJyZWNlbnRVc2VyU3RvcnlcIlxyXG4gICAgICAgICAgICAgKGNsaWNrKT1cInJlY2VudFVzZXJTdG9yeS50b2dnbGUoKVwiPjwvZmEtaWNvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8c2F0LXBvcG92ZXIgI3JlY2VudFVzZXJTdG9yeSBoYXNCYWNrZHJvcCAgYmFja2Ryb3BDbGFzcz1cInVzLXBvcG92ZXJcIj4gXHJcbiAgICAgICAgICAgIDxtYXQtY2FyZD5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHVzZXJTdG9yeSBvZiAodXNlclN0b3JpZXMkIHwgYXN5bmMgfCBzbGljZTowOjUpXCIgc3R5bGU9XCJtaW4td2lkdGg6IDEwMDBweDtcIiBjbGFzcz1cInZpZXctdXNcIj5cclxuICAgICAgICAgICAgPGdjLXVzZXJzdG9yeS1zdW1tYXJ5IHN0eWxlPVwid2lkdGg6IC13ZWJraXQtZmlsbC1hdmFpbGFibGU7YmFja2dyb3VuZC1jb2xvcjogYmVpZ2U7XCJcclxuICAgICAgICAgICAgICBbdXNlclN0b3J5XT1cInVzZXJTdG9yeVwiIFtpc1N1YlRhc2tzUGFnZV09ZmFsc2UgW2lzTG9hZGluZ109XCIoYW55T3BlcmF0aW9uSW5Qcm9ncmVzc0ZvckF1dG9Mb2dnaW5nJHxhc3luYylcIlxyXG4gICAgICAgICAgICAgIFtpc1VzZXJTdG9yaWVzUGFnZV09dHJ1ZSAodXBkYXRlQXV0b0xvZyk9XCJMb2dBY3Rpb24oJGV2ZW50KVwiIFtpc1Nob3ddPVwiZmFsc2VcIiAoY2xvc2UpPVwicmVjZW50VXNlclN0b3J5LmNsb3NlKClcIj5cclxuICAgICAgICAgICAgPC9nYy11c2Vyc3Rvcnktc3VtbWFyeT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICAgICAgPC9zYXQtcG9wb3Zlcj5cclxuICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgIDwhLS0gVmlldyBMb2FkZXIgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZpZXctbG9hZGVyXCIgKm5nSWY9XCJpc01vZHVsZUxvYWRpbmdcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3VibGUtYm91bmNlMSBtYXQtYmctYWNjZW50XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3VibGUtYm91bmNlMiBtYXQtYmctcHJpbWFyeVwiPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBWaWV3IG91dGxldCAtLT5cclxuICAgICAgICA8ZGl2IGlkPVwiYnRyYWstcHJlbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInByZWxvYWRpbmctdGV4dFwiPlxyXG4gICAgICAgICAgICB7eyAnTE9BRElOR1BMRUFTRVdBSVQnIHwgdHJhbnNsYXRlIH19ICh7e3RvdGFsTG9hZGluZ1RpbWV9fSB7eyAnU0VDT05EUycgfCB0cmFuc2xhdGUgfX0pXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8ZGl2IGlkPVwiYnRyYWstbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmdcIj5cclxuICAgICAgICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gVmlldyBvdmVybGF5IGZvciBtb2JpbGUgbmF2aWdhdGlvbiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJzaWRlYmFyLWJhY2tkcm9wXCIgW25nQ2xhc3NdPVwieyd2aXNpYmxlJzogbGF5b3V0Q29uZi5zaWRlYmFyU3R5bGUgIT09ICdjbG9zZWQnICYmIGxheW91dENvbmYuaXNNb2JpbGV9XCJcclxuICAgICAgKGNsaWNrKT1cImNsb3NlU2lkZWJhcigpXCI+PC9kaXY+XHJcblxyXG4gICAgPCEtLSBOb3RpZmljYWF0aW9uIGJhciAtLT5cclxuICAgIDxtYXQtc2lkZW5hdiAjc2lkZW5hdiBtb2RlPVwic2lkZVwiIG9wZW5lZCBjbGFzcz1cImV4YW1wbGUtc2lkZW5hdlwiIFtmaXhlZEluVmlld3BvcnRdPVwidHJ1ZVwiIFtmaXhlZFRvcEdhcF09XCJsYXlvdXRDb25mLmlzTW9iaWxlID8gNDUgOiA4OFwiXHJcbiAgICAgIFtmaXhlZEJvdHRvbUdhcF09XCIwXCIgY2xhc3M9XCJzaWRlLW5hdi1jb2xvciBjdXN0b20tYXBwLW5hdlwiIGlkPVwic3R5bGUtMVwiPlxyXG4gICAgICA8YXBwLXNpZGViYXI+PC9hcHAtc2lkZWJhcj5cclxuICAgIDwvbWF0LXNpZGVuYXY+XHJcbiAgPC9tYXQtc2lkZW5hdi1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==
1
+ import { Component, HostListener } from "@angular/core";
2
+ import { NavigationEnd, RouteConfigLoadStart, RouteConfigLoadEnd, ResolveStart, ResolveEnd, NavigationStart, NavigationCancel, NavigationError, } from "@angular/router";
3
+ // import PerfectScrollbar from 'perfect-scrollbar';
4
+ import { Subject } from "rxjs";
5
+ import { takeUntil, tap } from "rxjs/operators";
6
+ import { filter } from "rxjs/operators";
7
+ import { UserDetailsFetchedAfterLogin, AuthenticationActionTypes } from "../../store/actions/authentication.actions";
8
+ import { ofType } from "@ngrx/effects";
9
+ import { SoftLabelConfigurationModel } from "../../models/softlabels-model";
10
+ import '../../../globaldependencies/helpers/fontawesome-icons';
11
+ import { LocalStorageProperties } from '../../../globaldependencies/constants/localstorage-properties';
12
+ import { SPINNER } from 'ngx-ui-loader';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "@angular/router";
15
+ import * as i2 from "@ngx-translate/core";
16
+ import * as i3 from "../../services/layout.service";
17
+ import * as i4 from "@ngrx/store";
18
+ import * as i5 from "ngx-cookie-service";
19
+ import * as i6 from "@ngrx/effects";
20
+ import * as i7 from "@angular/common";
21
+ import * as i8 from "../../services/common-used.service";
22
+ import * as i9 from "pubnub-angular2";
23
+ import * as i10 from "../../services/signalr.service";
24
+ import * as i11 from "@angular/cdk/bidi";
25
+ import * as i12 from "ngx-ui-loader";
26
+ import * as i13 from "@angular/material/sidenav";
27
+ import * as i14 from "@angular/flex-layout/extended";
28
+ import * as i15 from "ngx-perfect-scrollbar";
29
+ import * as i16 from "../header-side/header-side.component";
30
+ import * as i17 from "../sidenav/side-bar.component";
31
+ import * as i18 from "../header-top/header-top.component";
32
+ import * as i19 from "../sidebar-top/sidebar-top.component";
33
+ function AdminLayoutComponent_app_header_top_1_Template(rf, ctx) { if (rf & 1) {
34
+ i0.ɵɵelement(0, "app-header-top", 13);
35
+ } if (rf & 2) {
36
+ i0.ɵɵnextContext();
37
+ const _r5 = i0.ɵɵreference(13);
38
+ i0.ɵɵproperty("notificPanel", _r5);
39
+ } }
40
+ function AdminLayoutComponent_app_sidebar_top_4_Template(rf, ctx) { if (rf & 1) {
41
+ i0.ɵɵelement(0, "app-sidebar-top");
42
+ } }
43
+ function AdminLayoutComponent_div_8_Template(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵelementStart(0, "div", 14);
45
+ i0.ɵɵelementStart(1, "div", 15);
46
+ i0.ɵɵelement(2, "div", 16);
47
+ i0.ɵɵelement(3, "div", 17);
48
+ i0.ɵɵelementEnd();
49
+ i0.ɵɵelementEnd();
50
+ } }
51
+ function AdminLayoutComponent_div_9_div_5_Template(rf, ctx) { if (rf & 1) {
52
+ i0.ɵɵelement(0, "div", 21);
53
+ } }
54
+ function AdminLayoutComponent_div_9_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "div", 18);
56
+ i0.ɵɵelementStart(1, "span", 19);
57
+ i0.ɵɵtext(2);
58
+ i0.ɵɵpipe(3, "translate");
59
+ i0.ɵɵpipe(4, "translate");
60
+ i0.ɵɵelementEnd();
61
+ i0.ɵɵtemplate(5, AdminLayoutComponent_div_9_div_5_Template, 1, 0, "div", 20);
62
+ i0.ɵɵelementEnd();
63
+ } if (rf & 2) {
64
+ const ctx_r3 = i0.ɵɵnextContext();
65
+ i0.ɵɵadvance(2);
66
+ i0.ɵɵtextInterpolate3(" ", i0.ɵɵpipeBind1(3, 4, "LOADINGPLEASEWAIT"), " (", ctx_r3.totalLoadingTime, " ", i0.ɵɵpipeBind1(4, 6, "SECONDS"), ") ");
67
+ i0.ɵɵadvance(3);
68
+ i0.ɵɵproperty("ngIf", ctx_r3.loading);
69
+ } }
70
+ function AdminLayoutComponent_div_10_Template(rf, ctx) { if (rf & 1) {
71
+ i0.ɵɵelementStart(0, "div");
72
+ i0.ɵɵelement(1, "router-outlet");
73
+ i0.ɵɵelementEnd();
74
+ } }
75
+ const _c0 = function (a0, a1, a2, a3, a4, a5, a6, a7) { return { "navigation-top": a0, "sidebar-full": a1, "sidebar-compact": a2, "sidebar-compact-big": a3, "layout-intransition": a4, "sidebar-opened": a5, "sidebar-closed": a6, "fixed-topbar": a7 }; };
76
+ const _c1 = function (a0) { return { "blur-on-opened": a0 }; };
77
+ const _c2 = function (a0) { return { "show-in-dashboard": a0 }; };
78
+ const _c3 = function (a0) { return { "visible": a0 }; };
79
+ export class AdminLayoutComponent {
80
+ constructor(router, translate, layout, store, cookieService, actionUpdates$, location, commonService, pubnub, signalr) {
81
+ this.router = router;
82
+ this.translate = translate;
83
+ this.layout = layout;
84
+ this.store = store;
85
+ this.cookieService = cookieService;
86
+ this.actionUpdates$ = actionUpdates$;
87
+ this.location = location;
88
+ this.commonService = commonService;
89
+ this.pubnub = pubnub;
90
+ this.signalr = signalr;
91
+ this.isModuleLoading = false;
92
+ // private sidebarPS: PerfectScrollbar;
93
+ // private bodyPS: PerfectScrollbar;
94
+ // private headerFixedBodyPS: PerfectScrollbar;
95
+ this.scrollConfig = {};
96
+ this.layoutConf = {};
97
+ this.ngDestroyed$ = new Subject();
98
+ this.userstory = 'userstory';
99
+ this.loading = false;
100
+ this.totalLoadingTime = 0;
101
+ this.spinnerType = SPINNER.circle;
102
+ // let conId = sessionStorage.getItem('conectionId');
103
+ // if(!conId) {
104
+ this.signalr.initializeSignalRConnection();
105
+ // }
106
+ let environment = JSON.parse(localStorage.getItem(LocalStorageProperties.Environment));
107
+ let companySettings = localStorage.getItem(LocalStorageProperties.CompanySettings);
108
+ if (!companySettings || companySettings == 'null' || companySettings == "undefined") {
109
+ pubnub.init({
110
+ publishKey: environment.publishKey,
111
+ subscribeKey: environment.subscribeKey
112
+ });
113
+ }
114
+ else {
115
+ const comSet = JSON.parse(localStorage.getItem(LocalStorageProperties.CompanySettings));
116
+ var publishKey = comSet.find(i => i.key == "PubnubPublishKey");
117
+ var subscribeKey = comSet.find(i => i.key == "PubnubSubscribeKey");
118
+ if ((publishKey && publishKey.value) && (subscribeKey && subscribeKey.value)) {
119
+ pubnub.init({
120
+ publishKey: publishKey.value,
121
+ subscribeKey: subscribeKey.value
122
+ });
123
+ }
124
+ else {
125
+ pubnub.init({
126
+ publishKey: environment.publishKey,
127
+ subscribeKey: environment.subscribeKey
128
+ });
129
+ }
130
+ }
131
+ // Close sidenav after route change in mobile
132
+ this.routerEventSub = router.events
133
+ .pipe(filter(event => event instanceof NavigationEnd))
134
+ .subscribe((routeChange) => {
135
+ this.layout.adjustLayout({ route: routeChange.url });
136
+ });
137
+ // Translator init
138
+ let currentCulture = this.cookieService.get(LocalStorageProperties.CurrentCulture);
139
+ if (currentCulture === 'null' || currentCulture === 'undefined') {
140
+ currentCulture = 'en';
141
+ }
142
+ translate.use(currentCulture);
143
+ this.router.events.subscribe((event) => {
144
+ switch (true) {
145
+ case event instanceof NavigationStart: {
146
+ this.loading = true;
147
+ this.totalLoadingTime = 0;
148
+ this.startTimer();
149
+ break;
150
+ }
151
+ case event instanceof NavigationEnd: {
152
+ this.loading = false;
153
+ clearInterval(this.interval);
154
+ break;
155
+ }
156
+ case event instanceof NavigationCancel:
157
+ case event instanceof NavigationError: {
158
+ this.loading = false;
159
+ break;
160
+ }
161
+ default: {
162
+ break;
163
+ }
164
+ }
165
+ });
166
+ router.events.subscribe(val => {
167
+ if (location.path() != "") {
168
+ if (location.path().includes('/dashboard-management/dashboard/')) {
169
+ this.dashboardPage = true;
170
+ this.bgcolor = 'none';
171
+ }
172
+ else {
173
+ this.dashboardPage = false;
174
+ this.bgcolor = 'beige';
175
+ }
176
+ }
177
+ });
178
+ // if (this.cookieService.check(LocalStorageProperties.UserModel)) {
179
+ // let data = JSON.parse(this.cookieService.get(LocalStorageProperties.UserModel));
180
+ // if (data && data != 'null' && data != 'undefined')
181
+ // this.store.dispatch(new UserDetailsFetchedAfterLogin(data));
182
+ // }
183
+ if ((localStorage.getItem(LocalStorageProperties.UserModel) != null && localStorage.getItem(LocalStorageProperties.UserModel) != undefined)
184
+ && !localStorage.hasOwnProperty(LocalStorageProperties.UserRoleFeatures)) {
185
+ let data = JSON.parse(localStorage.getItem(LocalStorageProperties.UserModel));
186
+ this.store.dispatch(new UserDetailsFetchedAfterLogin(data));
187
+ }
188
+ this.actionUpdates$
189
+ .pipe(takeUntil(this.ngDestroyed$), ofType(AuthenticationActionTypes.ClearDemoDataCompleted), tap((result) => {
190
+ if (result && result.companyId) {
191
+ this.getSoftLabels();
192
+ }
193
+ })).subscribe();
194
+ }
195
+ ngOnInit() {
196
+ this.getSoftLabelConfigurations();
197
+ this.layoutConf = this.layout.layoutConf;
198
+ // this.layout.adjustLayout();
199
+ // FOR MODULE LOADER FLAG
200
+ this.moduleLoaderSub = this.router.events.subscribe(event => {
201
+ if (event instanceof RouteConfigLoadStart ||
202
+ event instanceof ResolveStart) {
203
+ this.isModuleLoading = false;
204
+ }
205
+ if (event instanceof RouteConfigLoadEnd || event instanceof ResolveEnd) {
206
+ this.isModuleLoading = false;
207
+ }
208
+ });
209
+ }
210
+ onResize(event) {
211
+ this.layout.adjustLayout(event);
212
+ }
213
+ Opened(event) {
214
+ this.display = event;
215
+ }
216
+ getSoftLabelConfigurations() {
217
+ this.softLabels = JSON.parse(localStorage.getItem('SoftLabels'));
218
+ }
219
+ getSoftLabels() {
220
+ let model = new SoftLabelConfigurationModel();
221
+ model.searchText = null;
222
+ this.commonService.getSoftLabels(model).subscribe((response) => {
223
+ if (response.success) {
224
+ let data = response.data;
225
+ if (data) {
226
+ localStorage.setItem('SoftLabels', JSON.stringify(data));
227
+ }
228
+ }
229
+ });
230
+ }
231
+ ngAfterViewInit() {
232
+ // this.layoutConfSub = this.layout.layoutConf$.subscribe(change => {
233
+ // // this.initBodyPS(change)
234
+ // })
235
+ }
236
+ // initBodyPS(layoutConf:any = {}) {
237
+ // if(layoutConf.navigationPos === 'side' && layoutConf.topbarFixed) {
238
+ // if (this.bodyPS) this.bodyPS.destroy();
239
+ // if (this.headerFixedBodyPS) this.headerFixedBodyPS.destroy();
240
+ // this.headerFixedBodyPS = new PerfectScrollbar('.rightside-content-hold', {
241
+ // suppressScrollX: true
242
+ // });
243
+ // this.scrollToTop('.rightside-content-hold');
244
+ // } else {
245
+ // if (this.bodyPS) this.bodyPS.destroy();
246
+ // if (this.headerFixedBodyPS) this.headerFixedBodyPS.destroy();
247
+ // this.bodyPS = new PerfectScrollbar('.main-content-wrap', {
248
+ // suppressScrollX: true
249
+ // });
250
+ // this.scrollToTop('.main-content-wrap');
251
+ // }
252
+ // }
253
+ scrollToTop(selector) {
254
+ if (document) {
255
+ let element = document.querySelector(selector);
256
+ element.scrollTop = 0;
257
+ }
258
+ }
259
+ ngOnDestroy() {
260
+ if (this.moduleLoaderSub) {
261
+ this.moduleLoaderSub.unsubscribe();
262
+ }
263
+ if (this.layoutConfSub) {
264
+ this.layoutConfSub.unsubscribe();
265
+ }
266
+ if (this.routerEventSub) {
267
+ this.routerEventSub.unsubscribe();
268
+ }
269
+ if (this.sub) {
270
+ this.sub.unsubscribe();
271
+ }
272
+ }
273
+ closeSidebar() {
274
+ this.layout.publishLayoutChange({
275
+ sidebarStyle: "closed"
276
+ });
277
+ }
278
+ startTimer() {
279
+ this.interval = setInterval(() => {
280
+ this.totalLoadingTime++;
281
+ }, 1000);
282
+ }
283
+ }
284
+ AdminLayoutComponent.ɵfac = function AdminLayoutComponent_Factory(t) { return new (t || AdminLayoutComponent)(i0.ɵɵdirectiveInject(i1.Router), i0.ɵɵdirectiveInject(i2.TranslateService), i0.ɵɵdirectiveInject(i3.LayoutService), i0.ɵɵdirectiveInject(i4.Store), i0.ɵɵdirectiveInject(i5.CookieService), i0.ɵɵdirectiveInject(i6.Actions), i0.ɵɵdirectiveInject(i7.Location), i0.ɵɵdirectiveInject(i8.CommonService), i0.ɵɵdirectiveInject(i9.PubNubAngular), i0.ɵɵdirectiveInject(i10.SignalrService)); };
285
+ AdminLayoutComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AdminLayoutComponent, selectors: [["app-admin-layout"]], hostBindings: function AdminLayoutComponent_HostBindings(rf, ctx) { if (rf & 1) {
286
+ i0.ɵɵlistener("resize", function AdminLayoutComponent_resize_HostBindingHandler($event) { return ctx.onResize($event); }, false, i0.ɵɵresolveWindow);
287
+ } }, decls: 15, vars: 38, consts: [[1, "app-admin-wrap", 3, "dir"], [3, "notificPanel", 4, "ngIf"], ["fgsSize", "180", "color", "primary", 3, "fgsType"], [1, "app-admin-container", "app-side-nav-container", "mat-drawer-transition", 3, "dir", "ngClass"], [4, "ngIf"], [1, "main-content-wrap", 3, "perfectScrollbar", "disabled"], [3, "notificPanel", "opened"], [1, "rightside-content-hold", 3, "perfectScrollbar", "disabled", "ngClass"], ["class", "view-loader", 4, "ngIf"], ["id", "btrak-preloader", 4, "ngIf"], [1, "sidebar-backdrop", 3, "ngClass", "click"], ["mode", "side", "opened", "", "id", "style-1", 1, "side-nav-color", "custom-app-nav", 3, "fixedInViewport", "fixedTopGap", "fixedBottomGap"], ["sidenav", ""], [3, "notificPanel"], [1, "view-loader"], [1, "spinner"], [1, "double-bounce1", "mat-bg-accent"], [1, "double-bounce2", "mat-bg-primary"], ["id", "btrak-preloader"], [1, "preloading-text"], ["id", "btrak-loader", 4, "ngIf"], ["id", "btrak-loader"]], template: function AdminLayoutComponent_Template(rf, ctx) { if (rf & 1) {
288
+ i0.ɵɵelementStart(0, "div", 0);
289
+ i0.ɵɵtemplate(1, AdminLayoutComponent_app_header_top_1_Template, 1, 1, "app-header-top", 1);
290
+ i0.ɵɵelement(2, "ngx-ui-loader", 2);
291
+ i0.ɵɵelementStart(3, "mat-sidenav-container", 3);
292
+ i0.ɵɵtemplate(4, AdminLayoutComponent_app_sidebar_top_4_Template, 1, 0, "app-sidebar-top", 4);
293
+ i0.ɵɵelementStart(5, "div", 5);
294
+ i0.ɵɵelementStart(6, "app-header-side", 6);
295
+ i0.ɵɵlistener("opened", function AdminLayoutComponent_Template_app_header_side_opened_6_listener($event) { return ctx.Opened($event); });
296
+ i0.ɵɵelementEnd();
297
+ i0.ɵɵelementStart(7, "div", 7);
298
+ i0.ɵɵtemplate(8, AdminLayoutComponent_div_8_Template, 4, 0, "div", 8);
299
+ i0.ɵɵtemplate(9, AdminLayoutComponent_div_9_Template, 6, 8, "div", 9);
300
+ i0.ɵɵtemplate(10, AdminLayoutComponent_div_10_Template, 2, 0, "div", 4);
301
+ i0.ɵɵelementEnd();
302
+ i0.ɵɵelementEnd();
303
+ i0.ɵɵelementStart(11, "div", 10);
304
+ i0.ɵɵlistener("click", function AdminLayoutComponent_Template_div_click_11_listener() { return ctx.closeSidebar(); });
305
+ i0.ɵɵelementEnd();
306
+ i0.ɵɵelementStart(12, "mat-sidenav", 11, 12);
307
+ i0.ɵɵelement(14, "app-sidebar");
308
+ i0.ɵɵelementEnd();
309
+ i0.ɵɵelementEnd();
310
+ i0.ɵɵelementEnd();
311
+ } if (rf & 2) {
312
+ const _r5 = i0.ɵɵreference(13);
313
+ i0.ɵɵproperty("dir", ctx.layoutConf.dir);
314
+ i0.ɵɵadvance(1);
315
+ i0.ɵɵproperty("ngIf", ctx.layoutConf.navigationPos === "top");
316
+ i0.ɵɵadvance(1);
317
+ i0.ɵɵproperty("fgsType", ctx.spinnerType);
318
+ i0.ɵɵadvance(1);
319
+ i0.ɵɵproperty("dir", ctx.layoutConf.dir)("ngClass", i0.ɵɵpureFunction8(23, _c0, ctx.layoutConf.navigationPos === "top", ctx.layoutConf.sidebarStyle === "full", ctx.layoutConf.sidebarStyle === "compact" && ctx.layoutConf.navigationPos === "side", ctx.layoutConf.sidebarStyle === "compact-big" && ctx.layoutConf.navigationPos === "side", ctx.layoutConf.layoutInTransition, ctx.layoutConf.sidebarStyle !== "closed" && ctx.layoutConf.navigationPos === "side", ctx.layoutConf.sidebarStyle === "closed", ctx.layoutConf.topbarFixed && ctx.layoutConf.navigationPos === "side"));
320
+ i0.ɵɵadvance(1);
321
+ i0.ɵɵproperty("ngIf", ctx.layoutConf.navigationPos === "top" && ctx.layoutConf.isMobile);
322
+ i0.ɵɵadvance(1);
323
+ i0.ɵɵproperty("perfectScrollbar", ctx.scrollConfig)("disabled", ctx.layoutConf.topbarFixed);
324
+ i0.ɵɵadvance(1);
325
+ i0.ɵɵclassMap(ctx.layoutConf.isMobile ? "custom-app-header-mobile" : "custom-app-header");
326
+ i0.ɵɵproperty("notificPanel", _r5);
327
+ i0.ɵɵadvance(1);
328
+ i0.ɵɵproperty("perfectScrollbar", ctx.scrollConfig)("disabled", !ctx.layoutConf.topbarFixed)("ngClass", i0.ɵɵpureFunction1(32, _c1, ctx.display))("ngClass", i0.ɵɵpureFunction1(34, _c2, ctx.dashboardPage));
329
+ i0.ɵɵadvance(1);
330
+ i0.ɵɵproperty("ngIf", ctx.isModuleLoading);
331
+ i0.ɵɵadvance(1);
332
+ i0.ɵɵproperty("ngIf", ctx.loading);
333
+ i0.ɵɵadvance(1);
334
+ i0.ɵɵproperty("ngIf", !ctx.loading);
335
+ i0.ɵɵadvance(1);
336
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(36, _c3, ctx.layoutConf.sidebarStyle !== "closed" && ctx.layoutConf.isMobile));
337
+ i0.ɵɵadvance(1);
338
+ i0.ɵɵproperty("fixedInViewport", true)("fixedTopGap", ctx.layoutConf.isMobile ? 45 : 88)("fixedBottomGap", 0);
339
+ } }, directives: [i11.Dir, i7.NgIf, i12.ɵb, i13.MatSidenavContainer, i7.NgClass, i14.DefaultClassDirective, i15.PerfectScrollbarDirective, i16.HeaderSideComponent, i13.MatSidenav, i17.SideBarComponent, i18.HeaderTopComponent, i19.SidebarTopComponent, i1.RouterOutlet], pipes: [i2.TranslatePipe], encapsulation: 2 });
340
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AdminLayoutComponent, [{
341
+ type: Component,
342
+ args: [{
343
+ selector: "app-admin-layout",
344
+ templateUrl: "./admin-layout.template.html"
345
+ }]
346
+ }], function () { return [{ type: i1.Router }, { type: i2.TranslateService }, { type: i3.LayoutService }, { type: i4.Store }, { type: i5.CookieService }, { type: i6.Actions }, { type: i7.Location }, { type: i8.CommonService }, { type: i9.PubNubAngular }, { type: i10.SignalrService }]; }, { onResize: [{
347
+ type: HostListener,
348
+ args: ["window:resize", ['$event']]
349
+ }] }); })();
350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoZWxsLW1vZHVsZS1jb21wb25lbnRzL3NoZWxsLWNvbXBvbmVudHMvc3JjL2xpYi9zaGVsbC1jb21wb25lbnRzL2NvbXBvbmVudHMvYWRtaW4tbGF5b3V0L2FkbWluLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zaGVsbC1tb2R1bGUtY29tcG9uZW50cy9zaGVsbC1jb21wb25lbnRzL3NyYy9saWIvc2hlbGwtY29tcG9uZW50cy9jb21wb25lbnRzL2FkbWluLWxheW91dC9hZG1pbi1sYXlvdXQudGVtcGxhdGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFvQyxZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFVLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEdBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUt4TCxvREFBb0Q7QUFDcEQsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUseUJBQXlCLEVBQTZCLE1BQU0sNENBQTRDLENBQUM7QUFFaEosT0FBTyxFQUFXLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUkzRSxPQUFPLHVEQUF1RCxDQUFDO0FBQy9ELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtE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Z0RBVUc7UUFPRCw2RkFBcUc7UUFHckcsOEJBQXFHO1FBR25HLDBDQUF1SjtRQUFuRCxrSEFBVSxrQkFBYyxJQUFDO1FBQzdILGlCQUFrQjtRQTBCbEIsOEJBQzBGO1FBa0N4RixxRUFLTTtRQUVOLHFFQU1NO1FBQ04sdUVBRU07UUFDUixpQkFBTTtRQUNSLGlCQUFNO1FBRU4sZ0NBQzJCO1FBQXpCLCtGQUFTLGtCQUFjLElBQUM7UUFBQyxpQkFBTTtRQUdqQyw0Q0FDMEU7UUFDeEUsK0JBQTJCO1FBQzdCLGlCQUFjO1FBQ2hCLGlCQUF3QjtRQUMxQixpQkFBTTs7O1FBekhzQix3Q0FBc0I7UUFHL0IsZUFBd0M7UUFBeEMsNkRBQXdDO1FBRTVCLGVBQXVCO1FBQXZCLHlDQUF1QjtRQUU3QixlQUFzQjtRQUF0Qix3Q0FBc0IsaWhCQUFBO1FBaUJ6QixlQUErRDtRQUEvRCx3RkFBK0Q7UUFHbEQsZUFBaUM7UUFBakMsbURBQWlDLHdDQUFBO1FBRzdDLGVBQWtGO1FBQWxGLHlGQUFrRjtRQUEyQixrQ0FBd0I7UUEyQmxILGVBQWlDO1FBQWpDLG1EQUFpQyx5Q0FBQSxxREFBQSwyREFBQTtRQW1DekMsZUFBcUI7UUFBckIsMENBQXFCO1FBT3BCLGVBQWE7UUFBYixrQ0FBYTtRQU9sQyxlQUFjO1FBQWQsbUNBQWM7UUFNTSxlQUFvRjtRQUFwRiwwSEFBb0Y7UUFJakQsZUFBd0I7UUFBeEIsc0NBQXdCLGtEQUFBLHFCQUFBOzt1RkRyRmhGLG9CQUFvQjtjQUxoQyxTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsV0FBVyxFQUFFLDhCQUE4QjthQUM1Qzt1U0E4S0MsUUFBUTtrQkFGUCxZQUFZO21CQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBWaWV3Q2hpbGQsIEhvc3RMaXN0ZW5lciwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvbkVuZCwgUm91dGVDb25maWdMb2FkU3RhcnQsIFJvdXRlQ29uZmlnTG9hZEVuZCwgUmVzb2x2ZVN0YXJ0LCBSZXNvbHZlRW5kLCBOYXZpZ2F0aW9uU3RhcnQsIE5hdmlnYXRpb25DYW5jZWwsIE5hdmlnYXRpb25FcnJvciwgRXZlbnQsIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IE1hdFNpZGVuYXYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdlwiO1xuaW1wb3J0IHsgTWVkaWFDaGFuZ2UgfSBmcm9tIFwiQGFuZ3VsYXIvZmxleC1sYXlvdXRcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuLy8gaW1wb3J0IFBlcmZlY3RTY3JvbGxiYXIgZnJvbSAncGVyZmVjdC1zY3JvbGxiYXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XG5pbXBvcnQgeyBVc2VyRGV0YWlsc0ZldGNoZWRBZnRlckxvZ2luLCBBdXRoZW50aWNhdGlvbkFjdGlvblR5cGVzLCBVc2VySW5pdGlhbERldGFpbHNGZXRjaGVkIH0gZnJvbSBcIi4uLy4uL3N0b3JlL2FjdGlvbnMvYXV0aGVudGljYXRpb24uYWN0aW9uc1wiO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gXCJuZ3gtY29va2llLXNlcnZpY2VcIjtcbmltcG9ydCB7IEFjdGlvbnMsIG9mVHlwZSB9IGZyb20gXCJAbmdyeC9lZmZlY3RzXCI7XG5pbXBvcnQgeyBMb2NhdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc29mdGxhYmVscy1tb2RlbFwiXG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclN0b3J5IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXJTdG9yeSc7XG5pbXBvcnQgKiBhcyBTaGFyZWRNb2R1bGVTdGF0ZSBmcm9tIFwiLi4vLi4vc3RvcmUvcmVkdWNlcnMvaW5kZXhcIjtcbmltcG9ydCAnLi4vLi4vLi4vZ2xvYmFsZGVwZW5kZW5jaWVzL2hlbHBlcnMvZm9udGF3ZXNvbWUtaWNvbnMnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlUHJvcGVydGllcyB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbGRlcGVuZGVuY2llcy9jb25zdGFudHMvbG9jYWxzdG9yYWdlLXByb3BlcnRpZXMnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi11c2VkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHViTnViQW5ndWxhciB9IGZyb20gJ3B1Ym51Yi1hbmd1bGFyMic7XG5pbXBvcnQgeyBTUElOTkVSIH0gZnJvbSAnbmd4LXVpLWxvYWRlcic7XG5pbXBvcnQgeyBTaWduYWxyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zaWduYWxyLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFwcC1hZG1pbi1sYXlvdXRcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9hZG1pbi1sYXlvdXQudGVtcGxhdGUuaHRtbFwiXG59KVxuXG5leHBvcnQgY2xhc3MgQWRtaW5MYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBpc01vZHVsZUxvYWRpbmc6IEJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBtb2R1bGVMb2FkZXJTdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBsYXlvdXRDb25mU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcm91dGVyRXZlbnRTdWI6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBtZWRpYVN1YjogU3Vic2NyaXB0aW9uO1xuICBzb2Z0TGFiZWxzJDogT2JzZXJ2YWJsZTxTb2Z0TGFiZWxDb25maWd1cmF0aW9uTW9kZWxbXT47XG4gIHNvZnRMYWJlbHM6IFNvZnRMYWJlbENvbmZpZ3VyYXRpb25Nb2RlbFtdO1xuICAvLyBwcml2YXRlIHNpZGViYXJQUzogUGVyZmVjdFNjcm9sbGJhcjtcblxuICAvLyBwcml2YXRlIGJvZHlQUzogUGVyZmVjdFNjcm9sbGJhcjtcbiAgLy8gcHJpdmF0ZSBoZWFkZXJGaXhlZEJvZHlQUzogUGVyZmVjdFNjcm9sbGJhcjtcbiAgcHVibGljIHNjcm9sbENvbmZpZyA9IHt9O1xuICBwdWJsaWMgbGF5b3V0Q29uZjogYW55ID0ge307XG4gIGRpc3BsYXk6IGJvb2xlYW47XG4gIHVzZXJTdG9yaWVzJDogT2JzZXJ2YWJsZTxVc2VyU3RvcnlbXT47XG4gIHNob3c6IGJvb2xlYW47XG4gIHVzZXJTdG9yaWVzOiBVc2VyU3RvcnlbXTtcbiAgdXNlclN0b3J5OiBVc2VyU3Rvcnk7XG4gIGFueU9wZXJhdGlvbkluUHJvZ3Jlc3NGb3JBdXRvTG9nZ2luZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBuZ0Rlc3Ryb3llZCQgPSBuZXcgU3ViamVjdCgpO1xuICBkYXNoYm9hcmRQYWdlOiBib29sZWFuO1xuICBiZ2NvbG9yOiBhbnk7XG4gIHByaXZhdGUgc3ViOiBTdWJzY3JpcHRpb247XG4gIHVzZXJzdG9yeSA9ICd1c2Vyc3RvcnknO1xuICBsb2FkaW5nID0gZmFsc2U7XG4gIHRvdGFsTG9hZGluZ1RpbWU6IG51bWJlciA9IDA7XG4gIGludGVydmFsO1xuICBzcGlubmVyVHlwZSA9IFNQSU5ORVIuY2lyY2xlO1xuXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGF5b3V0OiBMYXlvdXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPFNoYXJlZE1vZHVsZVN0YXRlLlN0YXRlPixcbiAgICBwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25VcGRhdGVzJDogQWN0aW9ucyxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwdWJudWI6IFB1Yk51YkFuZ3VsYXIsXG4gICAgcHJpdmF0ZSBzaWduYWxyOiBTaWduYWxyU2VydmljZSxcbiAgKSB7XG4gICAgLy8gbGV0IGNvbklkID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnY29uZWN0aW9uSWQnKTtcbiAgICAvLyBpZighY29uSWQpIHtcbiAgICAgIHRoaXMuc2lnbmFsci5pbml0aWFsaXplU2lnbmFsUkNvbm5lY3Rpb24oKTtcbiAgICAvLyB9XG4gICAgbGV0IGVudmlyb25tZW50ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkVudmlyb25tZW50KSk7XG4gICAgbGV0IGNvbXBhbnlTZXR0aW5ncyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKExvY2FsU3RvcmFnZVByb3BlcnRpZXMuQ29tcGFueVNldHRpbmdzKTtcbiAgICBpZiAoIWNvbXBhbnlTZXR0aW5ncyB8fCBjb21wYW55U2V0dGluZ3MgPT0gJ251bGwnIHx8IGNvbXBhbnlTZXR0aW5ncyA9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBwdWJudWIuaW5pdCh7XG4gICAgICAgIHB1Ymxpc2hLZXk6IGVudmlyb25tZW50LnB1Ymxpc2hLZXksXG4gICAgICAgIHN1YnNjcmliZUtleTogZW52aXJvbm1lbnQuc3Vic2NyaWJlS2V5XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29tU2V0ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLkNvbXBhbnlTZXR0aW5ncykpO1xuICAgICAgdmFyIHB1Ymxpc2hLZXkgPSBjb21TZXQuZmluZChpID0+IGkua2V5ID09IFwiUHVibnViUHVibGlzaEtleVwiKTtcbiAgICAgIHZhciBzdWJzY3JpYmVLZXkgPSBjb21TZXQuZmluZChpID0+IGkua2V5ID09IFwiUHVibnViU3Vic2NyaWJlS2V5XCIpXG4gICAgICBpZiAoKHB1Ymxpc2hLZXkgJiYgcHVibGlzaEtleS52YWx1ZSkgJiYgKHN1YnNjcmliZUtleSAmJiBzdWJzY3JpYmVLZXkudmFsdWUpKSB7XG4gICAgICAgIHB1Ym51Yi5pbml0KHtcbiAgICAgICAgICBwdWJsaXNoS2V5OiBwdWJsaXNoS2V5LnZhbHVlLFxuICAgICAgICAgIHN1YnNjcmliZUtleTogc3Vic2NyaWJlS2V5LnZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHVibnViLmluaXQoe1xuICAgICAgICAgIHB1Ymxpc2hLZXk6IGVudmlyb25tZW50LnB1Ymxpc2hLZXksXG4gICAgICAgICAgc3Vic2NyaWJlS2V5OiBlbnZpcm9ubWVudC5zdWJzY3JpYmVLZXlcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG5cblxuICAgIC8vIENsb3NlIHNpZGVuYXYgYWZ0ZXIgcm91dGUgY2hhbmdlIGluIG1vYmlsZVxuICAgIHRoaXMucm91dGVyRXZlbnRTdWIgPSByb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJvdXRlQ2hhbmdlOiBOYXZpZ2F0aW9uRW5kKSA9PiB7XG4gICAgICAgIHRoaXMubGF5b3V0LmFkanVzdExheW91dCh7IHJvdXRlOiByb3V0ZUNoYW5nZS51cmwgfSk7XG4gICAgICB9KTtcblxuICAgIC8vIFRyYW5zbGF0b3IgaW5pdFxuICAgIGxldCBjdXJyZW50Q3VsdHVyZSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoTG9jYWxTdG9yYWdlUHJvcGVydGllcy5DdXJyZW50Q3VsdHVyZSk7XG5cbiAgICBpZiAoY3VycmVudEN1bHR1cmUgPT09ICdudWxsJyB8fCBjdXJyZW50Q3VsdHVyZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGN1cnJlbnRDdWx0dXJlID0gJ2VuJztcbiAgICB9XG4gICAgdHJhbnNsYXRlLnVzZShjdXJyZW50Q3VsdHVyZSk7XG5cblxuICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgc3dpdGNoICh0cnVlKSB7XG4gICAgICAgIGNhc2UgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQ6IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudG90YWxMb2FkaW5nVGltZSA9IDA7XG4gICAgICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZDoge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWw6XG4gICAgICAgIGNhc2UgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRXJyb3I6IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJvdXRlci5ldmVudHMuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICBpZiAobG9jYXRpb24ucGF0aCgpICE9IFwiXCIpIHtcbiAgICAgICAgaWYgKGxvY2F0aW9uLnBhdGgoKS5pbmNsdWRlcygnL2Rhc2hib2FyZC1tYW5hZ2VtZW50L2Rhc2hib2FyZC8nKSkge1xuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkUGFnZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5iZ2NvbG9yID0gJ25vbmUnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkUGFnZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYmdjb2xvciA9ICdiZWlnZSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGlmICh0aGlzLmNvb2tpZVNlcnZpY2UuY2hlY2soTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTW9kZWwpKSB7XG4gICAgLy8gICBsZXQgZGF0YSA9IEpTT04ucGFyc2UodGhpcy5jb29raWVTZXJ2aWNlLmdldChMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJNb2RlbCkpO1xuICAgIC8vICAgaWYgKGRhdGEgJiYgZGF0YSAhPSAnbnVsbCcgJiYgZGF0YSAhPSAndW5kZWZpbmVkJylcbiAgICAvLyAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgVXNlckRldGFpbHNGZXRjaGVkQWZ0ZXJMb2dpbihkYXRhKSk7XG4gICAgLy8gfVxuXG4gICAgaWYgKChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJNb2RlbCkgIT0gbnVsbCAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJNb2RlbCkgIT0gdW5kZWZpbmVkKVxuICAgICAgJiYgIWxvY2FsU3RvcmFnZS5oYXNPd25Qcm9wZXJ0eShMb2NhbFN0b3JhZ2VQcm9wZXJ0aWVzLlVzZXJSb2xlRmVhdHVyZXMpKSB7XG4gICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oTG9jYWxTdG9yYWdlUHJvcGVydGllcy5Vc2VyTW9kZWwpKTtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFVzZXJEZXRhaWxzRmV0Y2hlZEFmdGVyTG9naW4oZGF0YSkpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uVXBkYXRlcyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ0Rlc3Ryb3llZCQpLFxuICAgICAgICBvZlR5cGUoQXV0aGVudGljYXRpb25BY3Rpb25UeXBlcy5DbGVhckRlbW9EYXRhQ29tcGxldGVkKSxcbiAgICAgICAgdGFwKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmNvbXBhbnlJZCkge1xuICAgICAgICAgICAgdGhpcy5nZXRTb2Z0TGFiZWxzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZ2V0U29mdExhYmVsQ29uZmlndXJhdGlvbnMoKTtcbiAgICB0aGlzLmxheW91dENvbmYgPSB0aGlzLmxheW91dC5sYXlvdXRDb25mO1xuICAgIC8vIHRoaXMubGF5b3V0LmFkanVzdExheW91dCgpO1xuXG4gICAgLy8gRk9SIE1PRFVMRSBMT0FERVIgRkxBR1xuICAgIHRoaXMubW9kdWxlTG9hZGVyU3ViID0gdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGV2ZW50IGluc3RhbmNlb2YgUm91dGVDb25maWdMb2FkU3RhcnQgfHxcbiAgICAgICAgZXZlbnQgaW5zdGFuY2VvZiBSZXNvbHZlU3RhcnRcbiAgICAgICkge1xuICAgICAgICB0aGlzLmlzTW9kdWxlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgUm91dGVDb25maWdMb2FkRW5kIHx8IGV2ZW50IGluc3RhbmNlb2YgUmVzb2x2ZUVuZCkge1xuICAgICAgICB0aGlzLmlzTW9kdWxlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIiwgWyckZXZlbnQnXSlcblxuICBvblJlc2l6ZShldmVudCkge1xuICAgIHRoaXMubGF5b3V0LmFkanVzdExheW91dChldmVudCk7XG4gIH1cblxuICBPcGVuZWQoZXZlbnQpIHtcbiAgICB0aGlzLmRpc3BsYXkgPSBldmVudDtcbiAgfVxuXG4gIGdldFNvZnRMYWJlbENvbmZpZ3VyYXRpb25zKCkge1xuICAgIHRoaXMuc29mdExhYmVscyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NvZnRMYWJlbHMnKSk7XG4gIH1cblxuICBnZXRTb2Z0TGFiZWxzKCkge1xuICAgIGxldCBtb2RlbCA9IG5ldyBTb2Z0TGFiZWxDb25maWd1cmF0aW9uTW9kZWwoKTtcbiAgICBtb2RlbC5zZWFyY2hUZXh0ID0gbnVsbDtcbiAgICB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0U29mdExhYmVscyhtb2RlbCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICBsZXQgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NvZnRMYWJlbHMnLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyB0aGlzLmxheW91dENvbmZTdWIgPSB0aGlzLmxheW91dC5sYXlvdXRDb25mJC5zdWJzY3JpYmUoY2hhbmdlID0+IHtcbiAgICAvLyAgIC8vIHRoaXMuaW5pdEJvZHlQUyhjaGFuZ2UpXG4gICAgLy8gfSlcbiAgfVxuXG4gIC8vIGluaXRCb2R5UFMobGF5b3V0Q29uZjphbnkgPSB7fSkge1xuICAvLyAgIGlmKGxheW91dENvbmYubmF2aWdhdGlvblBvcyA9PT0gJ3NpZGUnICYmIGxheW91dENvbmYudG9wYmFyRml4ZWQpIHtcbiAgLy8gICAgIGlmICh0aGlzLmJvZHlQUykgdGhpcy5ib2R5UFMuZGVzdHJveSgpO1xuICAvLyAgICAgaWYgKHRoaXMuaGVhZGVyRml4ZWRCb2R5UFMpIHRoaXMuaGVhZGVyRml4ZWRCb2R5UFMuZGVzdHJveSgpO1xuICAvLyAgICAgdGhpcy5oZWFkZXJGaXhlZEJvZHlQUyA9IG5ldyBQZXJmZWN0U2Nyb2xsYmFyKCcucmlnaHRzaWRlLWNvbnRlbnQtaG9sZCcsIHtcbiAgLy8gICAgICAgc3VwcHJlc3NTY3JvbGxYOiB0cnVlXG4gIC8vICAgICB9KTtcbiAgLy8gICAgIHRoaXMuc2Nyb2xsVG9Ub3AoJy5yaWdodHNpZGUtY29udGVudC1ob2xkJyk7XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIGlmICh0aGlzLmJvZHlQUykgdGhpcy5ib2R5UFMuZGVzdHJveSgpO1xuICAvLyAgICAgaWYgKHRoaXMuaGVhZGVyRml4ZWRCb2R5UFMpIHRoaXMuaGVhZGVyRml4ZWRCb2R5UFMuZGVzdHJveSgpO1xuICAvLyAgICAgdGhpcy5ib2R5UFMgPSBuZXcgUGVyZmVjdFNjcm9sbGJhcignLm1haW4tY29udGVudC13cmFwJywge1xuICAvLyAgICAgICBzdXBwcmVzc1Njcm9sbFg6IHRydWVcbiAgLy8gICAgIH0pO1xuICAvLyAgICAgdGhpcy5zY3JvbGxUb1RvcCgnLm1haW4tY29udGVudC13cmFwJyk7XG4gIC8vICAgfVxuICAvLyB9XG4gIHNjcm9sbFRvVG9wKHNlbGVjdG9yOiBzdHJpbmcpIHtcbiAgICBpZiAoZG9jdW1lbnQpIHtcbiAgICAgIGxldCBlbGVtZW50ID0gPEhUTUxFbGVtZW50PmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICAgICAgZWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5tb2R1bGVMb2FkZXJTdWIpIHtcbiAgICAgIHRoaXMubW9kdWxlTG9hZGVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmxheW91dENvbmZTdWIpIHtcbiAgICAgIHRoaXMubGF5b3V0Q29uZlN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yb3V0ZXJFdmVudFN1Yikge1xuICAgICAgdGhpcy5yb3V0ZXJFdmVudFN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdWIpIHtcbiAgICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG4gIGNsb3NlU2lkZWJhcigpIHtcbiAgICB0aGlzLmxheW91dC5wdWJsaXNoTGF5b3V0Q2hhbmdlKHtcbiAgICAgIHNpZGViYXJTdHlsZTogXCJjbG9zZWRcIlxuICAgIH0pO1xuICB9XG5cbiAgc3RhcnRUaW1lcigpIHtcbiAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy50b3RhbExvYWRpbmdUaW1lKys7XG4gICAgfSwgMTAwMClcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFwcC1hZG1pbi13cmFwXCIgW2Rpcl09J2xheW91dENvbmYuZGlyJz5cbiAgPCEtLSBIZWFkZXIgZm9yIHRvcCBuYXZpZ2F0aW9uIGxheW91dCAtLT5cbiAgPCEtLSBPTkxZIFJFUVVJUkVEIEZPUiAqKlRPUCoqIE5BVklHQVRJT04gTEFZT1VUIC0tPlxuICA8YXBwLWhlYWRlci10b3AgKm5nSWY9XCJsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICd0b3AnXCIgW25vdGlmaWNQYW5lbF09XCJzaWRlbmF2XCI+XG4gIDwvYXBwLWhlYWRlci10b3A+XG4gIDxuZ3gtdWktbG9hZGVyIGZnc1NpemU9XCIxODBcIiBbZmdzVHlwZV09XCJzcGlubmVyVHlwZVwiIGNvbG9yPVwicHJpbWFyeVwiPjwvbmd4LXVpLWxvYWRlcj5cbiAgPCEtLSBNYWluIENvbnRhaW5lciAtLT5cbiAgPG1hdC1zaWRlbmF2LWNvbnRhaW5lciBbZGlyXT0nbGF5b3V0Q29uZi5kaXInIGNsYXNzPVwiYXBwLWFkbWluLWNvbnRhaW5lciBhcHAtc2lkZS1uYXYtY29udGFpbmVyIG1hdC1kcmF3ZXItdHJhbnNpdGlvblwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICduYXZpZ2F0aW9uLXRvcCc6IGxheW91dENvbmYubmF2aWdhdGlvblBvcyA9PT0gJ3RvcCcsXG4gICAgJ3NpZGViYXItZnVsbCc6IGxheW91dENvbmYuc2lkZWJhclN0eWxlID09PSAnZnVsbCcsXG4gICAgJ3NpZGViYXItY29tcGFjdCc6IGxheW91dENvbmYuc2lkZWJhclN0eWxlID09PSAnY29tcGFjdCcgJiYgbGF5b3V0Q29uZi5uYXZpZ2F0aW9uUG9zID09PSAnc2lkZScsXG4gICAgJ3NpZGViYXItY29tcGFjdC1iaWcnOiBsYXlvdXRDb25mLnNpZGViYXJTdHlsZSA9PT0gJ2NvbXBhY3QtYmlnJyAmJiBsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICdzaWRlJyxcbiAgICAnbGF5b3V0LWludHJhbnNpdGlvbic6IGxheW91dENvbmYubGF5b3V0SW5UcmFuc2l0aW9uLFxuICAgICdzaWRlYmFyLW9wZW5lZCc6IGxheW91dENvbmYuc2lkZWJhclN0eWxlICE9PSAnY2xvc2VkJyAmJiBsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICdzaWRlJyxcbiAgICAnc2lkZWJhci1jbG9zZWQnOiBsYXlvdXRDb25mLnNpZGViYXJTdHlsZSA9PT0gJ2Nsb3NlZCcsXG4gICAgJ2ZpeGVkLXRvcGJhcic6IGxheW91dENvbmYudG9wYmFyRml4ZWQgJiYgbGF5b3V0Q29uZi5uYXZpZ2F0aW9uUG9zID09PSAnc2lkZSdcbiAgfVwiPlxuICAgIDwhLS0gU0lERUJBUiAtLT5cbiAgICA8IS0tIE9OTFkgUkVRVUlSRUQgRk9SICoqU0lERSoqIE5BVklHQVRJT04gTEFZT1VUIC0tPlxuICAgIDwhLS0gPGFwcC1zaWRlYmFyLXNpZGUgKm5nSWY9XCJsYXlvdXRDb25mLm5hdmlnYXRpb25Qb3MgPT09ICdzaWRlJ1wiPjwvYXBwLXNpZGViYXItc2lkZT4gLS0+XG5cbiAgICA8IS0tIFRvcCBuYXZpZ2F0aW9uIGxheW91dCAobmF2aWdhdGlvbiBmb3IgbW9iaWxlIHNjcmVlbikgLS0+XG4gICAgPCEtLSBPTkxZIFJFUVVJUkVEIEZPUiAqKlRPUCoqIE5BVklHQVRJT04gTU9CSUxFIExBWU9VVCAtLT5cbiAgICA8YXBwLXNpZGViYXItdG9wICpuZ0lmPVwibGF5b3V0Q29uZi5uYXZpZ2F0aW9uUG9zID09PSAndG9wJyAmJiBsYXlvdXRDb25mLmlzTW9iaWxlXCI+PC9hcHAtc2lkZWJhci10b3A+XG5cbiAgICA8IS0tIEFwcCBjb250ZW50IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtYWluLWNvbnRlbnQtd3JhcFwiIFtwZXJmZWN0U2Nyb2xsYmFyXT1cInNjcm9sbENvbmZpZ1wiIFtkaXNhYmxlZF09XCJsYXlvdXRDb25mLnRvcGJhckZpeGVkXCI+XG4gICAgICA8IS0tIEhlYWRlciBmb3Igc2lkZSBuYXZpZ2F0aW9uIGxheW91dCAtLT5cbiAgICAgIDwhLS0gT05MWSBSRVFVSVJFRCBGT1IgKipTSURFKiogTkFWSUdBVElPTiBMQVlPVVQgLS0+XG4gICAgICA8YXBwLWhlYWRlci1zaWRlIGNsYXNzPVwie3tsYXlvdXRDb25mLmlzTW9iaWxlID8gJ2N1c3RvbS1hcHAtaGVhZGVyLW1vYmlsZScgOiAnY3VzdG9tLWFwcC1oZWFkZXInfX1cIiAob3BlbmVkKT1cIk9wZW5lZCgkZXZlbnQpXCIgW25vdGlmaWNQYW5lbF09XCJzaWRlbmF2XCI+XG4gICAgICA8L2FwcC1oZWFkZXItc2lkZT5cblxuICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXItMVwiICpuZ0lmPVwiIWRhc2hib2FyZFBhZ2VcIj5cbiAgICAgICAgPGdjLXVzZXJzdG9yeS1zdW1tYXJ5ICpuZ0lmPVwidXNlclN0b3J5XCIgc3R5bGU9XCJ3aWR0aDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtiYWNrZ3JvdW5kLWNvbG9yOiBiZWlnZTtcIlxuICAgICAgICAgIFt1c2VyU3RvcnldPVwidXNlclN0b3J5XCIgW2lzU3ViVGFza3NQYWdlXT1mYWxzZSBbaXNMb2FkaW5nXT1cIihhbnlPcGVyYXRpb25JblByb2dyZXNzRm9yQXV0b0xvZ2dpbmckfGFzeW5jKVwiXG4gICAgICAgICAgW2lzVXNlclN0b3JpZXNQYWdlXT1mYWxzZSAodXBkYXRlQXV0b0xvZyk9XCJMb2dBY3Rpb24oJGV2ZW50KVwiPlxuICAgICAgICA8L2djLXVzZXJzdG9yeS1zdW1tYXJ5PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIXVzZXJTdG9yeVwiPlxuICAgICAgICAgIFlvdSBhcmUgbm90IHN0YXJ0ZWQgYW55IHVzZXJzdG9yeSB5ZXQhIFBsZWFzZSBzdGFydCB3b3JrISFcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC0wNVwiPlxuICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwiY2FyZXQtc2l6ZVwiIHN0eWxlPVwiY29sb3I6IzNkYThiNVwiIGljb249XCJjYXJldC1kb3duXCIgW3NhdFBvcG92ZXJBbmNob3JGb3JdPVwicmVjZW50VXNlclN0b3J5XCJcbiAgICAgICAgICAgICAoY2xpY2spPVwicmVjZW50VXNlclN0b3J5LnRvZ2dsZSgpXCI+PC9mYS1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNhdC1wb3BvdmVyICNyZWNlbnRVc2VyU3RvcnkgaGFzQmFja2Ryb3AgIGJhY2tkcm9wQ2xhc3M9XCJ1cy1wb3BvdmVyXCI+IFxuICAgICAgICAgICAgPG1hdC1jYXJkPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHVzZXJTdG9yeSBvZiAodXNlclN0b3JpZXMkIHwgYXN5bmMgfCBzbGljZTowOjUpXCIgc3R5bGU9XCJtaW4td2lkdGg6IDEwMDBweDtcIiBjbGFzcz1cInZpZXctdXNcIj5cbiAgICAgICAgICAgIDxnYy11c2Vyc3Rvcnktc3VtbWFyeSBzdHlsZT1cIndpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlO2JhY2tncm91bmQtY29sb3I6IGJlaWdlO1wiXG4gICAgICAgICAgICAgIFt1c2VyU3RvcnldPVwidXNlclN0b3J5XCIgW2lzU3ViVGFza3NQYWdlXT1mYWxzZSBbaXNMb2FkaW5nXT1cIihhbnlPcGVyYXRpb25JblByb2dyZXNzRm9yQXV0b0xvZ2dpbmckfGFzeW5jKVwiXG4gICAgICAgICAgICAgIFtpc1VzZXJTdG9yaWVzUGFnZV09dHJ1ZSAodXBkYXRlQXV0b0xvZyk9XCJMb2dBY3Rpb24oJGV2ZW50KVwiIFtpc1Nob3ddPVwiZmFsc2VcIiAoY2xvc2UpPVwicmVjZW50VXNlclN0b3J5LmNsb3NlKClcIj5cbiAgICAgICAgICAgIDwvZ2MtdXNlcnN0b3J5LXN1bW1hcnk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICAgIDwvc2F0LXBvcG92ZXI+XG4gICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJyaWdodHNpZGUtY29udGVudC1ob2xkXCIgW3BlcmZlY3RTY3JvbGxiYXJdPVwic2Nyb2xsQ29uZmlnXCIgW2Rpc2FibGVkXT1cIiFsYXlvdXRDb25mLnRvcGJhckZpeGVkXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieydibHVyLW9uLW9wZW5lZCc6IGRpc3BsYXl9XCIgW25nQ2xhc3NdPVwieydzaG93LWluLWRhc2hib2FyZCc6ZGFzaGJvYXJkUGFnZX1cIj5cbiAgICAgICAgPCEtLSA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cIm1yLTFcIiAqbmdJZj1cIiFkYXNoYm9hcmRQYWdlXCIgW25nU3R5bGVdPVwieydtYXJnaW4tbGVmdCc6ICc5MHB4J31cIiBcbiAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IHVzZXJTdG9yeSA/ICdiZWlnZScgOiAnbm9uZScgfVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OjkwcHggIWltcG9ydGFudFwiPlxuICAgICAgICA8Z2MtdXNlcnN0b3J5LXN1bW1hcnkgZnhGbGV4PVwiOTBcIiAqbmdJZj1cInVzZXJTdG9yeVwiIHN0eWxlPVwid2lkdGg6IC13ZWJraXQtZmlsbC1hdmFpbGFibGU7YmFja2dyb3VuZC1jb2xvcjogYmVpZ2U7XCJcbiAgICAgICAgICBbdXNlclN0b3J5XT1cInVzZXJTdG9yeVwiIFtpc1N1YlRhc2tzUGFnZV09ZmFsc2UgW2lzTG9hZGluZ109XCIoYW55T3BlcmF0aW9uSW5Qcm9ncmVzc0ZvckF1dG9Mb2dnaW5nJHxhc3luYylcIlxuICAgICAgICAgIFtpc1VzZXJTdG9yaWVzUGFnZV09ZmFsc2UgKHVwZGF0ZUF1dG9Mb2cpPVwiTG9nQWN0aW9uKCRldmVudClcIj5cbiAgICAgICAgPC9nYy11c2Vyc3Rvcnktc3VtbWFyeT5cbiAgICAgICAgPG1hdC1jYXJkICpuZ0lmPVwiIXVzZXJTdG9yeVwiIHN0eWxlPVwicGFkZGluZzogMTBweDtsZWZ0OiAtNzVweDtcIj5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAgWW91IGFyZSBub3Qgc3RhcnRlZCBhbnkge3sgdXNlcnN0b3J5IHwgc29mdExhYmVsc1BpcGUgOiBzb2Z0TGFiZWxzfX0geWV0ISBQbGVhc2Ugc3RhcnQgd29yayEhXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0wNVwiPlxuICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwiY2FyZXQtc2l6ZVwiIHN0eWxlPVwiY29sb3I6IzNkYThiNVwiIGljb249XCJjYXJldC1kb3duXCIgW3NhdFBvcG92ZXJBbmNob3JGb3JdPVwicmVjZW50VXNlclN0b3J5XCJcbiAgICAgICAgICAgICAoY2xpY2spPVwicmVjZW50VXNlclN0b3J5LnRvZ2dsZSgpXCI+PC9mYS1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICAgICA8bWF0LXByb2dyZXNzLWJhciBjb2xvcj1cInByaW1hcnlcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiICpuZ0lmPVwiYW55T3BlcmF0aW9uSW5Qcm9ncmVzc0ZvckF1dG9Mb2dnaW5nJHxhc3luY1wiPlxuICAgICAgICA8L21hdC1wcm9ncmVzcy1iYXI+IC0tPlxuICAgICAgICA8IS0tIDxkaXYgZnhGbGV4IGNsYXNzPVwibWwtMDVcIiAqbmdJZj1cInVzZXJTdG9yeVwiPlxuICAgICAgICAgIDxmYS1pY29uIGNsYXNzPVwiY2FyZXQtc2l6ZVwiIHN0eWxlPVwiY29sb3I6IzNkYThiNVwiIGljb249XCJjYXJldC1kb3duXCIgW3NhdFBvcG92ZXJBbmNob3JGb3JdPVwicmVjZW50VXNlclN0b3J5XCJcbiAgICAgICAgICAgICAoY2xpY2spPVwicmVjZW50VXNlclN0b3J5LnRvZ2dsZSgpXCI+PC9mYS1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNhdC1wb3BvdmVyICNyZWNlbnRVc2VyU3RvcnkgaGFzQmFja2Ryb3AgIGJhY2tkcm9wQ2xhc3M9XCJ1cy1wb3BvdmVyXCI+IFxuICAgICAgICAgICAgPG1hdC1jYXJkPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHVzZXJTdG9yeSBvZiAodXNlclN0b3JpZXMkIHwgYXN5bmMgfCBzbGljZTowOjUpXCIgc3R5bGU9XCJtaW4td2lkdGg6IDEwMDBweDtcIiBjbGFzcz1cInZpZXctdXNcIj5cbiAgICAgICAgICAgIDxnYy11c2Vyc3Rvcnktc3VtbWFyeSBzdHlsZT1cIndpZHRoOiAtd2Via2l0LWZpbGwtYXZhaWxhYmxlO2JhY2tncm91bmQtY29sb3I6IGJlaWdlO1wiXG4gICAgICAgICAgICAgIFt1c2VyU3RvcnldPVwidXNlclN0b3J5XCIgW2lzU3ViVGFza3NQYWdlXT1mYWxzZSBbaXNMb2FkaW5nXT1cIihhbnlPcGVyYXRpb25JblByb2dyZXNzRm9yQXV0b0xvZ2dpbmckfGFzeW5jKVwiXG4gICAgICAgICAgICAgIFtpc1VzZXJTdG9yaWVzUGFnZV09dHJ1ZSAodXBkYXRlQXV0b0xvZyk9XCJMb2dBY3Rpb24oJGV2ZW50KVwiIFtpc1Nob3ddPVwiZmFsc2VcIiAoY2xvc2UpPVwicmVjZW50VXNlclN0b3J5LmNsb3NlKClcIj5cbiAgICAgICAgICAgIDwvZ2MtdXNlcnN0b3J5LXN1bW1hcnk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICAgIDwvc2F0LXBvcG92ZXI+XG4gICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwhLS0gVmlldyBMb2FkZXIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2aWV3LWxvYWRlclwiICpuZ0lmPVwiaXNNb2R1bGVMb2FkaW5nXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkb3VibGUtYm91bmNlMSBtYXQtYmctYWNjZW50XCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZG91YmxlLWJvdW5jZTIgbWF0LWJnLXByaW1hcnlcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwhLS0gVmlldyBvdXRsZXQgLS0+XG4gICAgICAgIDxkaXYgaWQ9XCJidHJhay1wcmVsb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInByZWxvYWRpbmctdGV4dFwiPlxuICAgICAgICAgICAge3sgJ0xPQURJTkdQTEVBU0VXQUlUJyB8IHRyYW5zbGF0ZSB9fSAoe3t0b3RhbExvYWRpbmdUaW1lfX0ge3sgJ1NFQ09ORFMnIHwgdHJhbnNsYXRlIH19KVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGlkPVwiYnRyYWstbG9hZGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmdcIj5cbiAgICAgICAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBWaWV3IG92ZXJsYXkgZm9yIG1vYmlsZSBuYXZpZ2F0aW9uIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJzaWRlYmFyLWJhY2tkcm9wXCIgW25nQ2xhc3NdPVwieyd2aXNpYmxlJzogbGF5b3V0Q29uZi5zaWRlYmFyU3R5bGUgIT09ICdjbG9zZWQnICYmIGxheW91dENvbmYuaXNNb2JpbGV9XCJcbiAgICAgIChjbGljayk9XCJjbG9zZVNpZGViYXIoKVwiPjwvZGl2PlxuXG4gICAgPCEtLSBOb3RpZmljYWF0aW9uIGJhciAtLT5cbiAgICA8bWF0LXNpZGVuYXYgI3NpZGVuYXYgbW9kZT1cInNpZGVcIiBvcGVuZWQgY2xhc3M9XCJleGFtcGxlLXNpZGVuYXZcIiBbZml4ZWRJblZpZXdwb3J0XT1cInRydWVcIiBbZml4ZWRUb3BHYXBdPVwibGF5b3V0Q29uZi5pc01vYmlsZSA/IDQ1IDogODhcIlxuICAgICAgW2ZpeGVkQm90dG9tR2FwXT1cIjBcIiBjbGFzcz1cInNpZGUtbmF2LWNvbG9yIGN1c3RvbS1hcHAtbmF2XCIgaWQ9XCJzdHlsZS0xXCI+XG4gICAgICA8YXBwLXNpZGViYXI+PC9hcHAtc2lkZWJhcj5cbiAgICA8L21hdC1zaWRlbmF2PlxuICA8L21hdC1zaWRlbmF2LWNvbnRhaW5lcj5cbjwvZGl2PiJdfQ==