@acorex/modules 20.6.0-next.6 → 20.6.0-next.8

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 (68) hide show
  1. package/fesm2022/acorex-modules-conversation.mjs +1 -1
  2. package/fesm2022/acorex-modules-conversation.mjs.map +1 -1
  3. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-BXVW5pTF.mjs → acorex-modules-dashboard-management-acorex-modules-dashboard-management-JeQW5e5t.mjs} +4 -4
  4. package/fesm2022/{acorex-modules-dashboard-management-acorex-modules-dashboard-management-BXVW5pTF.mjs.map → acorex-modules-dashboard-management-acorex-modules-dashboard-management-JeQW5e5t.mjs.map} +1 -1
  5. package/fesm2022/{acorex-modules-dashboard-management-permission-definition.provider-DTQ1D_Uh.mjs → acorex-modules-dashboard-management-permission-definition.provider-CP1sPn-5.mjs} +2 -2
  6. package/fesm2022/{acorex-modules-dashboard-management-permission-definition.provider-DTQ1D_Uh.mjs.map → acorex-modules-dashboard-management-permission-definition.provider-CP1sPn-5.mjs.map} +1 -1
  7. package/fesm2022/acorex-modules-dashboard-management.mjs +1 -1
  8. package/fesm2022/{acorex-modules-data-management-acorex-modules-data-management-Ci9W347D.mjs → acorex-modules-data-management-acorex-modules-data-management-BTZVbtCd.mjs} +4 -4
  9. package/fesm2022/acorex-modules-data-management-acorex-modules-data-management-BTZVbtCd.mjs.map +1 -0
  10. package/fesm2022/{acorex-modules-data-management-permission-definition.provider-BmfgERqu.mjs → acorex-modules-data-management-permission-definition.provider-Ba0RXefU.mjs} +2 -2
  11. package/fesm2022/{acorex-modules-data-management-permission-definition.provider-BmfgERqu.mjs.map → acorex-modules-data-management-permission-definition.provider-Ba0RXefU.mjs.map} +1 -1
  12. package/fesm2022/acorex-modules-data-management.mjs +1 -1
  13. package/fesm2022/{acorex-modules-document-management-acorex-modules-document-management-CTpQGWrH.mjs → acorex-modules-document-management-acorex-modules-document-management-BsST9TMA.mjs} +32 -21
  14. package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-BsST9TMA.mjs.map +1 -0
  15. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-DHnJ-wG_.mjs → acorex-modules-document-management-attachment-widget.component-DqBJrcid.mjs} +2 -2
  16. package/fesm2022/{acorex-modules-document-management-attachment-widget.component-DHnJ-wG_.mjs.map → acorex-modules-document-management-attachment-widget.component-DqBJrcid.mjs.map} +1 -1
  17. package/fesm2022/{acorex-modules-document-management-details-view.component-D4LY1WdL.mjs → acorex-modules-document-management-details-view.component-CQgbdaHw.mjs} +2 -2
  18. package/fesm2022/{acorex-modules-document-management-details-view.component-D4LY1WdL.mjs.map → acorex-modules-document-management-details-view.component-CQgbdaHw.mjs.map} +1 -1
  19. package/fesm2022/{acorex-modules-document-management-document-signature-popup.component-rsZh53Ys.mjs → acorex-modules-document-management-document-signature-popup.component-BftZK2ib.mjs} +2 -2
  20. package/fesm2022/{acorex-modules-document-management-document-signature-popup.component-rsZh53Ys.mjs.map → acorex-modules-document-management-document-signature-popup.component-BftZK2ib.mjs.map} +1 -1
  21. package/fesm2022/{acorex-modules-document-management-drive-choose.component-Lc6Kjy_S.mjs → acorex-modules-document-management-drive-choose.component-Ce0JZcwx.mjs} +2 -2
  22. package/fesm2022/{acorex-modules-document-management-drive-choose.component-Lc6Kjy_S.mjs.map → acorex-modules-document-management-drive-choose.component-Ce0JZcwx.mjs.map} +1 -1
  23. package/fesm2022/{acorex-modules-document-management-drive.component-D8MZClH0.mjs → acorex-modules-document-management-drive.component-CNkA0i-_.mjs} +3 -3
  24. package/fesm2022/acorex-modules-document-management-drive.component-CNkA0i-_.mjs.map +1 -0
  25. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-BkZfQg0H.mjs → acorex-modules-document-management-large-icons-view.component-Dz8hPGMr.mjs} +2 -2
  26. package/fesm2022/{acorex-modules-document-management-large-icons-view.component-BkZfQg0H.mjs.map → acorex-modules-document-management-large-icons-view.component-Dz8hPGMr.mjs.map} +1 -1
  27. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-DSnB8pwb.mjs → acorex-modules-document-management-large-tiles-view.component-CM3pqS_m.mjs} +2 -2
  28. package/fesm2022/{acorex-modules-document-management-large-tiles-view.component-DSnB8pwb.mjs.map → acorex-modules-document-management-large-tiles-view.component-CM3pqS_m.mjs.map} +1 -1
  29. package/fesm2022/{acorex-modules-document-management-list-view.component-CCWk2Ulv.mjs → acorex-modules-document-management-list-view.component-BRkcm83Y.mjs} +2 -2
  30. package/fesm2022/{acorex-modules-document-management-list-view.component-CCWk2Ulv.mjs.map → acorex-modules-document-management-list-view.component-BRkcm83Y.mjs.map} +1 -1
  31. package/fesm2022/{acorex-modules-document-management-permission-definition.provider-BC7Og6_y.mjs → acorex-modules-document-management-permission-definition.provider--qbpKS77.mjs} +2 -2
  32. package/fesm2022/{acorex-modules-document-management-permission-definition.provider-BC7Og6_y.mjs.map → acorex-modules-document-management-permission-definition.provider--qbpKS77.mjs.map} +1 -1
  33. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-D6hWuJG8.mjs → acorex-modules-document-management-small-icons-view.component-C6JV_Dem.mjs} +2 -2
  34. package/fesm2022/{acorex-modules-document-management-small-icons-view.component-D6hWuJG8.mjs.map → acorex-modules-document-management-small-icons-view.component-C6JV_Dem.mjs.map} +1 -1
  35. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-DVEftaGK.mjs → acorex-modules-document-management-small-tiles-view.component-Be37TTaa.mjs} +2 -2
  36. package/fesm2022/{acorex-modules-document-management-small-tiles-view.component-DVEftaGK.mjs.map → acorex-modules-document-management-small-tiles-view.component-Be37TTaa.mjs.map} +1 -1
  37. package/fesm2022/acorex-modules-document-management.mjs +1 -1
  38. package/fesm2022/acorex-modules-locale-management.mjs +1 -1
  39. package/fesm2022/acorex-modules-locale-management.mjs.map +1 -1
  40. package/fesm2022/{acorex-modules-notification-management-notification-page.component-BTSv9-bI.mjs → acorex-modules-notification-management-notification-page.component-Lz8J7q4k.mjs} +2 -2
  41. package/fesm2022/acorex-modules-notification-management-notification-page.component-Lz8J7q4k.mjs.map +1 -0
  42. package/fesm2022/acorex-modules-notification-management.mjs +1 -1
  43. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-Nq9gX7zW.mjs → acorex-modules-platform-management-acorex-modules-platform-management-BSFwJPkW.mjs} +5 -5
  44. package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-Nq9gX7zW.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-BSFwJPkW.mjs.map} +1 -1
  45. package/fesm2022/{acorex-modules-platform-management-list-version.component-CtJOnijq.mjs → acorex-modules-platform-management-list-version.component-CcrYZek9.mjs} +2 -2
  46. package/fesm2022/{acorex-modules-platform-management-list-version.component-CtJOnijq.mjs.map → acorex-modules-platform-management-list-version.component-CcrYZek9.mjs.map} +1 -1
  47. package/fesm2022/{acorex-modules-platform-management-menu-list.component-BwnDs_72.mjs → acorex-modules-platform-management-menu-list.component-CaQSt7lg.mjs} +3 -3
  48. package/fesm2022/acorex-modules-platform-management-menu-list.component-CaQSt7lg.mjs.map +1 -0
  49. package/fesm2022/{acorex-modules-platform-management-permission-definition.provider-DJ5bCaS9.mjs → acorex-modules-platform-management-permission-definition.provider-Oa9-EQjN.mjs} +2 -2
  50. package/fesm2022/{acorex-modules-platform-management-permission-definition.provider-DJ5bCaS9.mjs.map → acorex-modules-platform-management-permission-definition.provider-Oa9-EQjN.mjs.map} +1 -1
  51. package/fesm2022/acorex-modules-platform-management.mjs +1 -1
  52. package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-CasTcES1.mjs → acorex-modules-report-management-report-runner-root-page.component-BqXC17HC.mjs} +17 -3
  53. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-BqXC17HC.mjs.map +1 -0
  54. package/fesm2022/acorex-modules-report-management.mjs +72 -33
  55. package/fesm2022/acorex-modules-report-management.mjs.map +1 -1
  56. package/fesm2022/{acorex-modules-security-management-acorex-modules-security-management-DDwXZErT.mjs → acorex-modules-security-management-acorex-modules-security-management-Dh6b7amt.mjs} +37 -15
  57. package/fesm2022/{acorex-modules-security-management-acorex-modules-security-management-DDwXZErT.mjs.map → acorex-modules-security-management-acorex-modules-security-management-Dh6b7amt.mjs.map} +1 -1
  58. package/fesm2022/{acorex-modules-security-management-permission-definition.provider-BI-BShPG.mjs → acorex-modules-security-management-permission-definition.provider-DJvuPqFx.mjs} +2 -2
  59. package/fesm2022/{acorex-modules-security-management-permission-definition.provider-BI-BShPG.mjs.map → acorex-modules-security-management-permission-definition.provider-DJvuPqFx.mjs.map} +1 -1
  60. package/fesm2022/acorex-modules-security-management.mjs +1 -1
  61. package/package.json +6 -6
  62. package/report-management/index.d.ts +8 -4
  63. package/fesm2022/acorex-modules-data-management-acorex-modules-data-management-Ci9W347D.mjs.map +0 -1
  64. package/fesm2022/acorex-modules-document-management-acorex-modules-document-management-CTpQGWrH.mjs.map +0 -1
  65. package/fesm2022/acorex-modules-document-management-drive.component-D8MZClH0.mjs.map +0 -1
  66. package/fesm2022/acorex-modules-notification-management-notification-page.component-BTSv9-bI.mjs.map +0 -1
  67. package/fesm2022/acorex-modules-platform-management-menu-list.component-BwnDs_72.mjs.map +0 -1
  68. package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-CasTcES1.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-modules-conversation.mjs","sources":["../tmp-esm2022/conversation/lib/const.js","../tmp-esm2022/conversation/lib/entities/tab/tab.service.js","../tmp-esm2022/conversation/lib/entities/tab/tab.entity.js","../tmp-esm2022/conversation/lib/entities/room/room.service.js","../tmp-esm2022/conversation/lib/entities/room/room.entity.js","../tmp-esm2022/conversation/lib/entities/message/message.service.js","../tmp-esm2022/conversation/lib/entities/message/message.entity.js","../tmp-esm2022/conversation/lib/entities/message/message.types.js","../tmp-esm2022/conversation/lib/entities/tab/tab.module.js","../tmp-esm2022/conversation/lib/entities/room/room.module.js","../tmp-esm2022/conversation/lib/entities/message/message.module.js","../tmp-esm2022/conversation/lib/entities/index.js","../tmp-esm2022/conversation/lib/entity.provider.js","../tmp-esm2022/conversation/lib/menu.keys.js","../tmp-esm2022/conversation/lib/menu.provider.js","../tmp-esm2022/conversation/lib/features/chat/chat-notification.helper.js","../tmp-esm2022/conversation/lib/features/chat/chat-realtime.service.js","../tmp-esm2022/conversation/lib/features/chat/chat.service.js","../tmp-esm2022/conversation/lib/features/chat/chat-management.service.js","../tmp-esm2022/conversation/lib/features/chat/components/chat-item/chat-item.component.js","../tmp-esm2022/conversation/lib/features/chat/chat.component.js","../tmp-esm2022/conversation/lib/features/chat/chat-preview.helper.js","../tmp-esm2022/conversation/lib/features/chat/components/chat-preview/chat-preview.component.js","../tmp-esm2022/conversation/lib/features/comment/comment-realtime.service.js","../tmp-esm2022/conversation/lib/features/comment/comment.service.js","../tmp-esm2022/conversation/lib/features/comment/comment-management.service.js","../tmp-esm2022/conversation/lib/features/comment/comment-notification.helper.js","../tmp-esm2022/conversation/lib/features/comment/comment.component.js","../tmp-esm2022/conversation/lib/features/comment/popup/comment-popup.component.js","../tmp-esm2022/conversation/lib/features/comment/widget/comment-widget-view.component.js","../tmp-esm2022/conversation/lib/features/comment/widget/comment-widget.config.js","../tmp-esm2022/conversation/lib/features/comment/workflow/comment.workflow.js","../tmp-esm2022/conversation/lib/badge.provider.js","../tmp-esm2022/conversation/lib/features/chat/components/chat-notification-content/chat-notification-content.component.js","../tmp-esm2022/conversation/lib/features/chat/chat-notification.provider.js","../tmp-esm2022/conversation/lib/features/comment/comment-notification.provider.js","../tmp-esm2022/conversation/lib/features/comment/comments.plugin.js","../tmp-esm2022/conversation/lib/conversation.module.js","../tmp-esm2022/conversation/acorex-modules-conversation.js"],"sourcesContent":["const config = {\n i18n: 'conversation',\n module: 'Conversation',\n route: 'chat',\n};\nexport const RootConfig = {\n config,\n module: {\n route: 'conversation',\n name: config.module,\n title: `t('module-name', {scope:\"${config.i18n}\"})`,\n icon: 'fa-light fa-comments',\n },\n entities: {\n room: {\n name: 'room',\n title: `t(\"room.plural-title\", { scope: \"${config.i18n}\" })`,\n source: `${config.module}.Room`,\n icon: 'fa-light fa-comments',\n },\n message: {\n name: 'message',\n title: `t(\"message.plural-title\", { scope: \"${config.i18n}\" })`,\n source: `${config.module}.Message`,\n icon: 'fa-light fa-message',\n },\n tab: {\n name: 'tab',\n title: `t(\"tab.plural-title\", { scope: \"${config.i18n}\" })`,\n source: `${config.module}.Tab`,\n icon: 'fa-light fa-folder',\n },\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvY29uc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxNQUFNLEdBQUc7SUFDYixJQUFJLEVBQUUsY0FBYztJQUNwQixNQUFNLEVBQUUsY0FBYztJQUN0QixLQUFLLEVBQUUsTUFBTTtDQUNkLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7SUFDeEIsTUFBTTtJQUNOLE1BQU0sRUFBRTtRQUNOLEtBQUssRUFBRSxjQUFjO1FBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTTtRQUNuQixLQUFLLEVBQUUsNEJBQTRCLE1BQU0sQ0FBQyxJQUFJLEtBQUs7UUFDbkQsSUFBSSxFQUFFLHNCQUFzQjtLQUM3QjtJQUNELFFBQVEsRUFBRTtRQUNSLElBQUksRUFBRTtZQUNKLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLG9DQUFvQyxNQUFNLENBQUMsSUFBSSxNQUFNO1lBQzVELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLE9BQU87WUFDL0IsSUFBSSxFQUFFLHNCQUFzQjtTQUM3QjtRQUNELE9BQU8sRUFBRTtZQUNQLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLHVDQUF1QyxNQUFNLENBQUMsSUFBSSxNQUFNO1lBQy9ELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLFVBQVU7WUFDbEMsSUFBSSxFQUFFLHFCQUFxQjtTQUM1QjtRQUNELEdBQUcsRUFBRTtZQUNILElBQUksRUFBRSxLQUFLO1lBQ1gsS0FBSyxFQUFFLG1DQUFtQyxNQUFNLENBQUMsSUFBSSxNQUFNO1lBQzNELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLE1BQU07WUFDOUIsSUFBSSxFQUFFLG9CQUFvQjtTQUMzQjtLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGNvbmZpZyA9IHtcbiAgaTE4bjogJ2NvbnZlcnNhdGlvbicsXG4gIG1vZHVsZTogJ0NvbnZlcnNhdGlvbicsXG4gIHJvdXRlOiAnY2hhdCcsXG59O1xuXG5leHBvcnQgY29uc3QgUm9vdENvbmZpZyA9IHtcbiAgY29uZmlnLFxuICBtb2R1bGU6IHtcbiAgICByb3V0ZTogJ2NvbnZlcnNhdGlvbicsXG4gICAgbmFtZTogY29uZmlnLm1vZHVsZSxcbiAgICB0aXRsZTogYHQoJ21vZHVsZS1uYW1lJywge3Njb3BlOlwiJHtjb25maWcuaTE4bn1cIn0pYCxcbiAgICBpY29uOiAnZmEtbGlnaHQgZmEtY29tbWVudHMnLFxuICB9LFxuICBlbnRpdGllczoge1xuICAgIHJvb206IHtcbiAgICAgIG5hbWU6ICdyb29tJyxcbiAgICAgIHRpdGxlOiBgdChcInJvb20ucGx1cmFsLXRpdGxlXCIsIHsgc2NvcGU6IFwiJHtjb25maWcuaTE4bn1cIiB9KWAsXG4gICAgICBzb3VyY2U6IGAke2NvbmZpZy5tb2R1bGV9LlJvb21gLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWNvbW1lbnRzJyxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIG5hbWU6ICdtZXNzYWdlJyxcbiAgICAgIHRpdGxlOiBgdChcIm1lc3NhZ2UucGx1cmFsLXRpdGxlXCIsIHsgc2NvcGU6IFwiJHtjb25maWcuaTE4bn1cIiB9KWAsXG4gICAgICBzb3VyY2U6IGAke2NvbmZpZy5tb2R1bGV9Lk1lc3NhZ2VgLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLW1lc3NhZ2UnLFxuICAgIH0sXG4gICAgdGFiOiB7XG4gICAgICBuYW1lOiAndGFiJyxcbiAgICAgIHRpdGxlOiBgdChcInRhYi5wbHVyYWwtdGl0bGVcIiwgeyBzY29wZTogXCIke2NvbmZpZy5pMThufVwiIH0pYCxcbiAgICAgIHNvdXJjZTogYCR7Y29uZmlnLm1vZHVsZX0uVGFiYCxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS1mb2xkZXInLFxuICAgIH0sXG4gIH0sXG59O1xuIl19","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport * as i0 from \"@angular/core\";\nexport class AXMConversationTabService extends AXMEntityCrudServiceImpl {\n}\nexport class AXMConversationTabServiceImpl extends AXMConversationTabService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.tab.name}`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabServiceImpl }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabServiceImpl, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZW50aXRpZXMvdGFiL3RhYi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFHekMsTUFBTSxPQUFnQix5QkFBMEIsU0FBUSx3QkFBb0Q7Q0FBRztBQUcvRyxNQUFNLE9BQU8sNkJBQThCLFNBQVEseUJBQXlCO0lBQzFFO1FBQ0UsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDOytHQUhVLDZCQUE2QjttSEFBN0IsNkJBQTZCOzs0RkFBN0IsNkJBQTZCO2tCQUR6QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhNRW50aXR5Q3J1ZFNlcnZpY2VJbXBsIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1Db252ZXJzYXRpb25UYWIgfSBmcm9tICcuL3RhYi50eXBlcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWE1Db252ZXJzYXRpb25UYWJTZXJ2aWNlIGV4dGVuZHMgQVhNRW50aXR5Q3J1ZFNlcnZpY2VJbXBsPHN0cmluZywgQVhNQ29udmVyc2F0aW9uVGFiPiB7fVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNQ29udmVyc2F0aW9uVGFiU2VydmljZUltcGwgZXh0ZW5kcyBBWE1Db252ZXJzYXRpb25UYWJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoYCR7Um9vdENvbmZpZy5tb2R1bGUubmFtZX0uJHtSb290Q29uZmlnLmVudGl0aWVzLnRhYi5uYW1lfWApO1xuICB9XG59XG4iXX0=","import { AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../const';\nimport { AXMConversationTabService } from './tab.service';\nexport async function tabFactory(injector) {\n const dataService = injector.get(AXMConversationTabService);\n const i18n = RootConfig.config.i18n;\n const entityDef = {\n module: RootConfig.module.name,\n name: RootConfig.entities.tab.name,\n title: RootConfig.entities.tab.title,\n icon: RootConfig.entities.tab.icon,\n formats: {\n individual: `t(\"tab.individual-title\", { scope: \"${i18n}\" })`,\n plural: RootConfig.entities.tab.title,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: `t(\"tab.basic-info\", { scope: \"${i18n}\" })`,\n },\n ],\n properties: [\n {\n name: 'name',\n title: `t(\"tab.props.name\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'title',\n title: `t(\"tab.props.title\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'color',\n title: `t(\"tab.props.color\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.color,\n },\n },\n },\n {\n name: 'rooms',\n title: `t(\"tab.props.rooms\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.room.name}`,\n multiple: true,\n },\n },\n },\n },\n {\n name: 'excludeRooms',\n title: `t(\"tab.props.excludeRooms\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.room.name}`,\n multiple: true,\n },\n },\n },\n },\n {\n name: 'includeRooms',\n title: `t(\"tab.props.includeRooms\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.room.name}`,\n multiple: true,\n },\n },\n },\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n commands: {\n create: {\n execute: async (data) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e) => {\n return await dataService.query(e);\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [{ id: 'section' }],\n properties: [\n { name: 'name', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'title', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'color', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'rooms', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'excludeRooms', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'includeRooms', layout: { positions: { lg: { colSpan: 12 } } } },\n ],\n },\n update: {\n sections: [{ id: 'section' }],\n properties: [\n { name: 'name', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'title', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'color', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'rooms', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'excludeRooms', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'includeRooms', layout: { positions: { lg: { colSpan: 12 } } } },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [{ id: 'section' }],\n properties: [\n { name: 'name', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'title', layout: { positions: { lg: { colSpan: 6 } } } },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions()],\n views: [\n createAllQueryView({\n columns: ['name', 'title'],\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n return entityDef;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmVudGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9lbnRpdGllcy90YWIvdGFiLmVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUQsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQUMsUUFBa0I7SUFDakQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzVELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBRXBDLE1BQU0sU0FBUyxHQUFjO1FBQzNCLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUk7UUFDOUIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUk7UUFDbEMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUs7UUFDcEMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUk7UUFDbEMsT0FBTyxFQUFFO1lBQ1AsVUFBVSxFQUFFLHVDQUF1QyxJQUFJLE1BQU07WUFDN0QsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUs7WUFDckMsWUFBWSxFQUFFO2dC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d0JBQy9ELEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO3FCQUNqRTtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLHlCQUF5QixFQUFFLENBQUM7aUJBQzFDO2dCQUNELElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsQ0FBQyxHQUFHLHVCQUF1QixFQUFFLENBQUM7b0JBQ3ZDLEtBQUssRUFBRTt3QkFDTCxrQkFBa0IsQ0FBQzs0QkFDakIsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQzs0QkFDMUIsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQzt5QkFDdEMsQ0FBQztxQkFDSDtpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDO0lBRUYsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEVudGl0eSwgQVhQRW50aXR5Q29tbWFuZFNjb3BlLCBBWFBFbnRpdHlRdWVyeVR5cGUsIGNyZWF0ZUFsbFF1ZXJ5VmlldyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUFdpZGdldHNDYXRhbG9nIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgZW50aXR5TWFzdGVyQ3J1ZEFjdGlvbnMsIGVudGl0eU1hc3RlclJlY29yZEFjdGlvbnMgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1Db252ZXJzYXRpb25UYWJTZXJ2aWNlIH0gZnJvbSAnLi90YWIuc2VydmljZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0YWJGYWN0b3J5KGluamVjdG9yOiBJbmplY3Rvcik6IFByb21pc2U8QVhQRW50aXR5IHwgbnVsbD4ge1xuICBjb25zdCBkYXRhU2VydmljZSA9IGluamVjdG9yLmdldChBWE1Db252ZXJzYXRpb25UYWJTZXJ2aWNlKTtcbiAgY29uc3QgaTE4biA9IFJvb3RDb25maWcuY29uZmlnLmkxOG47XG5cbiAgY29uc3QgZW50aXR5RGVmOiBBWFBFbnRpdHkgPSB7XG4gICAgbW9kdWxlOiBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICAgIG5hbWU6IFJvb3RDb25maWcuZW50aXRpZXMudGFiLm5hbWUsXG4gICAgdGl0bGU6IFJvb3RDb25maWcuZW50aXRpZXMudGFiLnRpdGxlLFxuICAgIGljb246IFJvb3RDb25maWcuZW50aXRpZXMudGFiLmljb24sXG4gICAgZm9ybWF0czoge1xuICAgICAgaW5kaXZpZHVhbDogYHQoXCJ0YWIuaW5kaXZpZHVhbC10aXRsZVwiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICBwbHVyYWw6IFJvb3RDb25maWcuZW50aXRpZXMudGFiLnRpdGxlLFxuICAgICAgc2VhcmNoUmVzdWx0OiB7XG4gICAgICAgIHRpdGxlOiAne3sgdGl0bGUgfX0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogUm9vdENvbmZpZy5tb2R1bGUudGl0bGUsXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVsYXRlZEVudGl0aWVzOiBbXSxcbiAgICBncm91cHM6IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgdGl0bGU6IGB0KFwidGFiLmJhc2ljLWluZm9cIiwgeyBzY29wZTogXCIke2kxOG59XCIgfSlgLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHByb3BlcnRpZXM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICB0aXRsZTogYHQoXCJ0YWIucHJvcHMubmFtZVwiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cudGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0aW9uczogW3sgcnVsZTogJ3JlcXVpcmVkJyB9XSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgIHRpdGxlOiBgdChcInRhYi5wcm9wcy50aXRsZVwiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cudGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0aW9uczogW3sgcnVsZTogJ3JlcXVpcmVkJyB9XSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjb2xvcicsXG4gICAgICAgIHRpdGxlOiBgdChcInRhYi5wcm9wcy5jb2xvclwiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cuY29sb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdyb29tcycsXG4gICAgICAgIHRpdGxlOiBgdChcInRhYi5wcm9wcy5yb29tc1wiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cubG9va3VwLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBlbnRpdHk6IGAke1Jvb3RDb25maWcubW9kdWxlLm5hbWV9LiR7Um9vdENvbmZpZy5lbnRpdGllcy5yb29tLm5hbWV9YCxcbiAgICAgICAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZXhjbHVkZVJvb21zJyxcbiAgICAgICAgdGl0bGU6IGB0KFwidGFiLnByb3BzLmV4Y2x1ZGVSb29tc1wiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cubG9va3VwLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBlbnRpdHk6IGAke1Jvb3RDb25maWcubW9kdWxlLm5hbWV9LiR7Um9vdENvbmZpZy5lbnRpdGllcy5yb29tLm5hbWV9YCxcbiAgICAgICAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaW5jbHVkZVJvb21zJyxcbiAgICAgICAgdGl0bGU6IGB0KFwidGFiLnByb3BzLmluY2x1ZGVSb29tc1wiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cubG9va3VwLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBlbnRpdHk6IGAke1Jvb3RDb25maWcubW9kdWxlLm5hbWV9LiR7Um9vdENvbmZpZy5lbnRpdGllcy5yb29tLm5hbWV9YCxcbiAgICAgICAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgY29sdW1uczogW3sgbmFtZTogJ25hbWUnIH0sIHsgbmFtZTogJ3RpdGxlJyB9XSxcbiAgICBjb21tYW5kczoge1xuICAgICAgY3JlYXRlOiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBkYXRhU2VydmljZS5pbnNlcnRPbmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuIHsgaWQ6IHJlcyB9O1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRlbGV0ZToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoaWQ6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBkYXRhU2VydmljZS5kZWxldGVPbmUoaWQpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHVwZGF0ZToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFTZXJ2aWNlLnVwZGF0ZU9uZShkYXRhLmlkLCBkYXRhKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyaWVzOiB7XG4gICAgICBieUtleToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBkYXRhU2VydmljZS5nZXRPbmUoaWQpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBBWFBFbnRpdHlRdWVyeVR5cGUuU2luZ2xlLFxuICAgICAgfSxcbiAgICAgIGxpc3Q6IHtcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGU6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBkYXRhU2VydmljZS5xdWVyeShlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogQVhQRW50aXR5UXVlcnlUeXBlLkxpc3QsXG4gICAgICB9LFxuICAgIH0sXG4gICAgaW50ZXJmYWNlczoge1xuICAgICAgbWFzdGVyOiB7XG4gICAgICAgIGNyZWF0ZToge1xuICAgICAgICAgIHNlY3Rpb25zOiBbeyBpZDogJ3NlY3Rpb24nIH1dLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnLCBsYXlvdXQ6IHsgcG9zaXRpb25zOiB7IGxnOiB7IGNvbFNwYW46IDYgfSB9IH0gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3RpdGxlJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiA2IH0gfSB9IH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdjb2xvcicsIGxheW91dDogeyBwb3NpdGlvbnM6IHsgbGc6IHsgY29sU3BhbjogMTIgfSB9IH0gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3Jvb21zJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiAxMiB9IH0gfSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnZXhjbHVkZVJvb21zJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiAxMiB9IH0gfSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnaW5jbHVkZVJvb21zJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiAxMiB9IH0gfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZToge1xuICAgICAgICAgIHNlY3Rpb25zOiBbeyBpZDogJ3NlY3Rpb24nIH1dLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnLCBsYXlvdXQ6IHsgcG9zaXRpb25zOiB7IGxnOiB7IGNvbFNwYW46IDYgfSB9IH0gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3RpdGxlJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiA2IH0gfSB9IH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdjb2xvcicsIGxheW91dDogeyBwb3NpdGlvbnM6IHsgbGc6IHsgY29sU3BhbjogMTIgfSB9IH0gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3Jvb21zJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiAxMiB9IH0gfSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnZXhjbHVkZVJvb21zJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiAxMiB9IH0gfSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnaW5jbHVkZVJvb21zJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiAxMiB9IH0gfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHNpbmdsZToge1xuICAgICAgICAgIHRpdGxlOiAne3t0aXRsZX19JyxcbiAgICAgICAgICBzZWN0aW9uczogW3sgaWQ6ICdzZWN0aW9uJyB9XSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICduYW1lJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiA2IH0gfSB9IH0sXG4gICAgICAgICAgICB7IG5hbWU6ICd0aXRsZScsIGxheW91dDogeyBwb3NpdGlvbnM6IHsgbGc6IHsgY29sU3BhbjogNiB9IH0gfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYWN0aW9uczogWy4uLmVudGl0eU1hc3RlclJlY29yZEFjdGlvbnMoKV0sXG4gICAgICAgIH0sXG4gICAgICAgIGxpc3Q6IHtcbiAgICAgICAgICBhY3Rpb25zOiBbLi4uZW50aXR5TWFzdGVyQ3J1ZEFjdGlvbnMoKV0sXG4gICAgICAgICAgdmlld3M6IFtcbiAgICAgICAgICAgIGNyZWF0ZUFsbFF1ZXJ5Vmlldyh7XG4gICAgICAgICAgICAgIGNvbHVtbnM6IFsnbmFtZScsICd0aXRsZSddLFxuICAgICAgICAgICAgICBzb3J0czogW3sgbmFtZTogJ25hbWUnLCBkaXI6ICdhc2MnIH1dLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gZW50aXR5RGVmO1xufVxuIl19","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport * as i0 from \"@angular/core\";\nexport class AXMRoomService extends AXMEntityCrudServiceImpl {\n}\nexport class AXMRoomServiceImpl extends AXMRoomService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.room.name}`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomServiceImpl }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomServiceImpl, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2VudGl0aWVzL3Jvb20vcm9vbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFHekMsTUFBTSxPQUFnQixjQUFlLFNBQVEsd0JBQXFEO0NBQUc7QUFHckcsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQWM7SUFDcEQ7UUFDRSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7K0dBSFUsa0JBQWtCO21IQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWE1FbnRpdHlDcnVkU2VydmljZUltcGwgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJy4uLy4uL2NvbnN0JztcbmltcG9ydCB7IEFYTUNvbnZlcnNhdGlvblJvb20gfSBmcm9tICcuL3Jvb20udHlwZXMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQVhNUm9vbVNlcnZpY2UgZXh0ZW5kcyBBWE1FbnRpdHlDcnVkU2VydmljZUltcGw8c3RyaW5nLCBBWE1Db252ZXJzYXRpb25Sb29tPiB7fVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNUm9vbVNlcnZpY2VJbXBsIGV4dGVuZHMgQVhNUm9vbVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihgJHtSb290Q29uZmlnLm1vZHVsZS5uYW1lfS4ke1Jvb3RDb25maWcuZW50aXRpZXMucm9vbS5uYW1lfWApO1xuICB9XG59XG4iXX0=","import { AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';\nimport { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../const';\nimport { AXMRoomService } from './room.service';\nexport async function roomFactory(injector) {\n const dataService = injector.get(AXMRoomService);\n const i18n = RootConfig.config.i18n;\n const entityDef = {\n module: RootConfig.module.name,\n name: RootConfig.entities.room.name,\n title: RootConfig.entities.room.title,\n icon: RootConfig.entities.room.icon,\n formats: {\n individual: RootConfig.entities.room.title,\n plural: RootConfig.entities.room.title,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: RootConfig.entities.room.title,\n },\n ],\n properties: [\n {\n name: 'name',\n title: '@general:terms.common.name',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n {\n name: 'title',\n title: '@general:terms.common.title',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n commands: {\n create: {\n execute: async (data) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e) => {\n return await dataService.query(e);\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'section',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions()],\n views: [\n createAllQueryView({\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n return entityDef;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS5lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZW50aXRpZXMvcm9vbS9yb29tLmVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsUUFBa0I7SUFDbEQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUVwQyxNQUFNLFNBQVMsR0FBYztRQUMzQixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJO1FBQzlCLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJO1FBQ25DLEtBQUssRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLO1FBQ3JDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJO1FBQ25DLE9BQU8sRUFBRTtZQUNQLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQzFDLE1BQU0sRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFL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OzZCQUNGO3lCQUNGO3FCQUNGO2lCQUNGO2dCQUNELE1BQU0sRUFBRTtvQkFDTixLQUFLLEVBQUUsV0FBVztvQkFDbEIsUUFBUSxFQUFFO3dCQUNSOzRCQUNFLEVBQUUsRUFBRSxTQUFTOzRCQUNiLE1BQU0sRUFBRTtnQ0FDTixTQUFTLEVBQUU7b0NBQ1QsRUFBRSxFQUFFO3dDQUNGLE9BQU8sRUFBRSxFQUFFO3FDQUNaO2lDQUNGOzZCQUNGO3lCQUNGO3FCQUNGO29CQUNELFVBQVUsRUFBRTt3QkFDVjs0QkFDRSxJQUFJLEVBQUUsTUFBTTs0QkFDWixNQUFNLEVBQUU7Z0NBQ04sU0FBUyxFQUFFO29DQUNULEVBQUUsRUFBRTt3Q0FDRixPQUFPLEVBQUUsQ0FBQzt3Q0FDVixLQUFLLEVBQUUsQ0FBQztxQ0FDVDtpQ0FDRjs2QkFDRjt5QkFDRjt3QkFFRDs0QkFDRSxJQUFJLEVBQUUsT0FBTzs0QkFDYixNQUFNLEVBQUU7Z0NBQ04sU0FBUyxFQUFFO29DQUNULEVBQUUsRUFBRTt3Q0FDRixPQUFPLEVBQUUsQ0FBQzt3Q0FDVixLQUFLLEVBQUUsQ0FBQztxQ0FDVDtpQ0FDRjs2QkFDRjt5QkFDRjtxQkFDRjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLHlCQUF5QixFQUFFLENBQUM7aUJBQzFDO2dCQUNELElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsQ0FBQyxHQUFHLHVCQUF1QixFQUFFLENBQUM7b0JBQ3ZDLEtBQUssRUFBRTt3QkFDTCxrQkFBa0IsQ0FBQzs0QkFDakIsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQzt5QkFDdEMsQ0FBQztxQkFDSDtpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDO0lBRUYsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEVudGl0eSwgQVhQRW50aXR5Q29tbWFuZFNjb3BlLCBBWFBFbnRpdHlRdWVyeVR5cGUsIGNyZWF0ZUFsbFF1ZXJ5VmlldyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IGVudGl0eU1hc3RlckNydWRBY3Rpb25zLCBlbnRpdHlNYXN0ZXJSZWNvcmRBY3Rpb25zIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYUFdpZGdldHNDYXRhbG9nIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1Sb29tU2VydmljZSB9IGZyb20gJy4vcm9vbS5zZXJ2aWNlJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJvb21GYWN0b3J5KGluamVjdG9yOiBJbmplY3Rvcik6IFByb21pc2U8QVhQRW50aXR5IHwgbnVsbD4ge1xuICBjb25zdCBkYXRhU2VydmljZSA9IGluamVjdG9yLmdldChBWE1Sb29tU2VydmljZSk7XG4gIGNvbnN0IGkxOG4gPSBSb290Q29uZmlnLmNvbmZpZy5pMThuO1xuXG4gIGNvbnN0IGVudGl0eURlZjogQVhQRW50aXR5ID0ge1xuICAgIG1vZHVsZTogUm9vdENvbmZpZy5tb2R1bGUubmFtZSxcbiAgICBuYW1lOiBSb290Q29uZmlnLmVudGl0aWVzLnJvb20ubmFtZSxcbiAgICB0aXRsZTogUm9vdENvbmZpZy5lbnRpdGllcy5yb29tLnRpdGxlLFxuICAgIGljb246IFJvb3RDb25maWcuZW50aXRpZXMucm9vbS5pY29uLFxuICAgIGZvcm1hdHM6IHtcbiAgICAgIGluZGl2aWR1YWw6IFJvb3RDb25maWcuZW50aXRpZXMucm9vbS50aXRsZSxcbiAgICAgIHBsdXJhbDogUm9vdENvbmZpZy5lbnRpdGllcy5yb29tLnRpdGxlLFxuICAgICAgc2VhcmNoUmVzdWx0OiB7XG4gICAgICAgIHRpdGxlOiAne3sgdGl0bGUgfX0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogUm9vdENvbmZpZy5tb2R1bGUudGl0bGUsXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVsYXRlZEVudGl0aWVzOiBbXSxcbiAgICBncm91cHM6IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgdGl0bGU6IFJvb3RDb25maWcuZW50aXRpZXMucm9vbS50aXRsZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgdGl0bGU6ICdAZ2VuZXJhbDp0ZXJtcy5jb21tb24ubmFtZScsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHNvcnQ6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgIGFkdmFuY2U6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmxpbmU6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBpbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdmFsaWRhdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBydWxlOiAncmVxdWlyZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgIHRpdGxlOiAnQGdlbmVyYWw6dGVybXMuY29tbW9uLnRpdGxlJyxcbiAgICAgICAgZ3JvdXBJZDogJ3NlY3Rpb24nLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgc29ydDoge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgYWR2YW5jZToge1xuICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlubGluZToge1xuICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cudGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJ1bGU6ICdyZXF1aXJlZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjb2x1bW5zOiBbeyBuYW1lOiAnbmFtZScgfSwgeyBuYW1lOiAndGl0bGUnIH1dLFxuICAgIGNvbW1hbmRzOiB7XG4gICAgICBjcmVhdGU6IHtcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGRhdGFTZXJ2aWNlLmluc2VydE9uZShkYXRhKTtcbiAgICAgICAgICByZXR1cm4geyBpZDogcmVzIH07XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZGVsZXRlOiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChpZDogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFTZXJ2aWNlLmRlbGV0ZU9uZShpZCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdXBkYXRlOiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgZGF0YVNlcnZpY2UudXBkYXRlT25lKGRhdGEuaWQsIGRhdGEpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJpZXM6IHtcbiAgICAgIGJ5S2V5OiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChpZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFTZXJ2aWNlLmdldE9uZShpZCk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IEFYUEVudGl0eVF1ZXJ5VHlwZS5TaW5nbGUsXG4gICAgICB9LFxuICAgICAgbGlzdDoge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFTZXJ2aWNlLnF1ZXJ5KGUpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBBWFBFbnRpdHlRdWVyeVR5cGUuTGlzdCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBpbnRlcmZhY2VzOiB7XG4gICAgICBtYXN0ZXI6IHtcbiAgICAgICAgY3JlYXRlOiB7XG4gICAgICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiA2LFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiA2LFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogMixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgdXBkYXRlOiB7XG4gICAgICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiA2LFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiA2LFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogMixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgc2luZ2xlOiB7XG4gICAgICAgICAgdGl0bGU6ICd7e3RpdGxlfX0nLFxuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnc2VjdGlvbicsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogMTIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYWN0aW9uczogWy4uLmVudGl0eU1hc3RlclJlY29yZEFjdGlvbnMoKV0sXG4gICAgICAgIH0sXG4gICAgICAgIGxpc3Q6IHtcbiAgICAgICAgICBhY3Rpb25zOiBbLi4uZW50aXR5TWFzdGVyQ3J1ZEFjdGlvbnMoKV0sXG4gICAgICAgICAgdmlld3M6IFtcbiAgICAgICAgICAgIGNyZWF0ZUFsbFF1ZXJ5Vmlldyh7XG4gICAgICAgICAgICAgIHNvcnRzOiBbeyBuYW1lOiAnbmFtZScsIGRpcjogJ2FzYycgfV0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBlbnRpdHlEZWY7XG59XG4iXX0=","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport * as i0 from \"@angular/core\";\nexport class AXMMessageService extends AXMEntityCrudServiceImpl {\n}\nexport class AXMMessageServiceImpl extends AXMMessageService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.message.name}`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageServiceImpl }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageServiceImpl, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2VudGl0aWVzL21lc3NhZ2UvbWVzc2FnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFHekMsTUFBTSxPQUFnQixpQkFBa0IsU0FBUSx3QkFBd0Q7Q0FBRztBQUczRyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsaUJBQWlCO0lBQzFEO1FBQ0UsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDOytHQUhVLHFCQUFxQjttSEFBckIscUJBQXFCOzs0RkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhNRW50aXR5Q3J1ZFNlcnZpY2VJbXBsIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1Db252ZXJzYXRpb25NZXNzYWdlIH0gZnJvbSAnLi9tZXNzYWdlLnR5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYTU1lc3NhZ2VTZXJ2aWNlIGV4dGVuZHMgQVhNRW50aXR5Q3J1ZFNlcnZpY2VJbXBsPHN0cmluZywgQVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge31cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYTU1lc3NhZ2VTZXJ2aWNlSW1wbCBleHRlbmRzIEFYTU1lc3NhZ2VTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoYCR7Um9vdENvbmZpZy5tb2R1bGUubmFtZX0uJHtSb290Q29uZmlnLmVudGl0aWVzLm1lc3NhZ2UubmFtZX1gKTtcbiAgfVxufVxuIl19","import { AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';\nimport { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../const';\nimport { AXMMessageService } from './message.service';\nexport async function messageFactory(injector) {\n const dataService = injector.get(AXMMessageService);\n const i18n = RootConfig.config.i18n;\n const entityDef = {\n module: RootConfig.module.name,\n name: RootConfig.entities.message.name,\n title: RootConfig.entities.message.title,\n icon: RootConfig.entities.message.icon,\n formats: {\n individual: RootConfig.entities.message.title,\n plural: RootConfig.entities.message.title,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: RootConfig.entities.message.title,\n },\n ],\n properties: [\n {\n name: 'name',\n title: '@general:terms.common.name',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n {\n name: 'title',\n title: '@general:terms.common.title',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n commands: {\n create: {\n execute: async (data) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e) => {\n return await dataService.query(e);\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'section',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions()],\n views: [\n createAllQueryView({\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n return entityDef;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZW50aXRpZXMvbWVzc2FnZS9tZXNzYWdlLmVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RCxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FBQyxRQUFrQjtJQUNyRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDcEQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFFcEMsTUFBTSxTQUFTLEdBQWM7UUFDM0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSTtRQUM5QixJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSTtRQUN0QyxLQUFLLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSztRQUN4QyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSTtRQUN0QyxPQUFPLEVBQUU7WUFDUCxVQUFVLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSztZQUM3QyxNQUFNLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxP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QztxQ0FDVDtpQ0FDRjs2QkFDRjt5QkFDRjtxQkFDRjtpQkFDRjtnQkFDRCxNQUFNLEVBQUU7b0JBQ04sS0FBSyxFQUFFLFdBQVc7b0JBQ2xCLFFBQVEsRUFBRTt3QkFDUjs0QkFDRSxFQUFFLEVBQUUsU0FBUzs0QkFDYixNQUFNLEVBQUU7Z0NBQ04sU0FBUyxFQUFFO29DQUNULEVBQUUsRUFBRTt3Q0FDRixPQUFPLEVBQUUsRUFBRTtxQ0FDWjtpQ0FDRjs2QkFDRjt5QkFDRjtxQkFDRjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osTUFBTSxFQUFFO2dDQUNOLFNBQVMsRUFBRTtvQ0FDVCxFQUFFLEVBQUU7d0NBQ0YsT0FBTyxFQUFFLENBQUM7d0NBQ1YsS0FBSyxFQUFFLENBQUM7cUNBQ1Q7aUNBQ0Y7NkJBQ0Y7eUJBQ0Y7d0JBRUQ7NEJBQ0UsSUFBSSxFQUFFLE9BQU87NEJBQ2IsTUFBTSxFQUFFO2dDQUNOLFNBQVMsRUFBRTtvQ0FDVCxFQUFFLEVBQUU7d0NBQ0YsT0FBTyxFQUFFLENBQUM7d0NBQ1YsS0FBSyxFQUFFLENBQUM7cUNBQ1Q7aUNBQ0Y7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFLENBQUMsR0FBRyx5QkFBeUIsRUFBRSxDQUFDO2lCQUMxQztnQkFDRCxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLENBQUMsR0FBRyx1QkFBdUIsRUFBRSxDQUFDO29CQUN2QyxLQUFLLEVBQUU7d0JBQ0wsa0JBQWtCLENBQUM7NEJBQ2pCLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7eUJBQ3RDLENBQUM7cUJBQ0g7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0YsQ0FBQztJQUVGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBFbnRpdHksIEFYUEVudGl0eUNvbW1hbmRTY29wZSwgQVhQRW50aXR5UXVlcnlUeXBlLCBjcmVhdGVBbGxRdWVyeVZpZXcgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBlbnRpdHlNYXN0ZXJDcnVkQWN0aW9ucywgZW50aXR5TWFzdGVyUmVjb3JkQWN0aW9ucyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5pbXBvcnQgeyBBWFBXaWRnZXRzQ2F0YWxvZyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3dpZGdldC1jb3JlJztcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb290Q29uZmlnIH0gZnJvbSAnLi4vLi4vY29uc3QnO1xuaW1wb3J0IHsgQVhNTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuL21lc3NhZ2Uuc2VydmljZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtZXNzYWdlRmFjdG9yeShpbmplY3RvcjogSW5qZWN0b3IpOiBQcm9taXNlPEFYUEVudGl0eSB8IG51bGw+IHtcbiAgY29uc3QgZGF0YVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQVhNTWVzc2FnZVNlcnZpY2UpO1xuICBjb25zdCBpMThuID0gUm9vdENvbmZpZy5jb25maWcuaTE4bjtcblxuICBjb25zdCBlbnRpdHlEZWY6IEFYUEVudGl0eSA9IHtcbiAgICBtb2R1bGU6IFJvb3RDb25maWcubW9kdWxlLm5hbWUsXG4gICAgbmFtZTogUm9vdENvbmZpZy5lbnRpdGllcy5tZXNzYWdlLm5hbWUsXG4gICAgdGl0bGU6IFJvb3RDb25maWcuZW50aXRpZXMubWVzc2FnZS50aXRsZSxcbiAgICBpY29uOiBSb290Q29uZmlnLmVudGl0aWVzLm1lc3NhZ2UuaWNvbixcbiAgICBmb3JtYXRzOiB7XG4gICAgICBpbmRpdmlkdWFsOiBSb290Q29uZmlnLmVudGl0aWVzLm1lc3NhZ2UudGl0bGUsXG4gICAgICBwbHVyYWw6IFJvb3RDb25maWcuZW50aXRpZXMubWVzc2FnZS50aXRsZSxcbiAgICAgIHNlYXJjaFJlc3VsdDoge1xuICAgICAgICB0aXRsZTogJ3t7IHRpdGxlIH19JyxcbiAgICAgICAgZGVzY3JpcHRpb246IFJvb3RDb25maWcubW9kdWxlLnRpdGxlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHJlbGF0ZWRFbnRpdGllczogW10sXG4gICAgZ3JvdXBzOiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnc2VjdGlvbicsXG4gICAgICAgIHRpdGxlOiBSb290Q29uZmlnLmVudGl0aWVzLm1lc3NhZ2UudGl0bGUsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcHJvcGVydGllczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgIHRpdGxlOiAnQGdlbmVyYWw6dGVybXMuY29tbW9uLm5hbWUnLFxuICAgICAgICBncm91cElkOiAnc2VjdGlvbicsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBzb3J0OiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgICBhZHZhbmNlOiB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5saW5lOiB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgaW50ZXJmYWNlOiB7XG4gICAgICAgICAgICB0eXBlOiBBWFBXaWRnZXRzQ2F0YWxvZy50ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcnVsZTogJ3JlcXVpcmVkJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcblxuICAgICAge1xuICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICB0aXRsZTogJ0BnZW5lcmFsOnRlcm1zLmNvbW1vbi50aXRsZScsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHNvcnQ6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgIGFkdmFuY2U6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmxpbmU6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBpbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdmFsaWRhdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBydWxlOiAncmVxdWlyZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgY29sdW1uczogW3sgbmFtZTogJ25hbWUnIH0sIHsgbmFtZTogJ3RpdGxlJyB9XSxcbiAgICBjb21tYW5kczoge1xuICAgICAgY3JlYXRlOiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBkYXRhU2VydmljZS5pbnNlcnRPbmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuIHsgaWQ6IHJlcyB9O1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRlbGV0ZToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoaWQ6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBkYXRhU2VydmljZS5kZWxldGVPbmUoaWQpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHVwZGF0ZToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFTZXJ2aWNlLnVwZGF0ZU9uZShkYXRhLmlkLCBkYXRhKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyaWVzOiB7XG4gICAgICBieUtleToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBkYXRhU2VydmljZS5nZXRPbmUoaWQpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBBWFBFbnRpdHlRdWVyeVR5cGUuU2luZ2xlLFxuICAgICAgfSxcbiAgICAgIGxpc3Q6IHtcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGU6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBkYXRhU2VydmljZS5xdWVyeShlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogQVhQRW50aXR5UXVlcnlUeXBlLkxpc3QsXG4gICAgICB9LFxuICAgIH0sXG4gICAgaW50ZXJmYWNlczoge1xuICAgICAgbWFzdGVyOiB7XG4gICAgICAgIGNyZWF0ZToge1xuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnc2VjdGlvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZToge1xuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnc2VjdGlvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHNpbmdsZToge1xuICAgICAgICAgIHRpdGxlOiAne3t0aXRsZX19JyxcbiAgICAgICAgICBzZWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ3NlY3Rpb24nLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDEyLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiAyLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFjdGlvbnM6IFsuLi5lbnRpdHlNYXN0ZXJSZWNvcmRBY3Rpb25zKCldLFxuICAgICAgICB9LFxuICAgICAgICBsaXN0OiB7XG4gICAgICAgICAgYWN0aW9uczogWy4uLmVudGl0eU1hc3RlckNydWRBY3Rpb25zKCldLFxuICAgICAgICAgIHZpZXdzOiBbXG4gICAgICAgICAgICBjcmVhdGVBbGxRdWVyeVZpZXcoe1xuICAgICAgICAgICAgICBzb3J0czogW3sgbmFtZTogJ25hbWUnLCBkaXI6ICdhc2MnIH1dLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gZW50aXR5RGVmO1xufVxuIl19","// === Shared Types ===\nexport {};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9lbnRpdGllcy9tZXNzYWdlL21lc3NhZ2UudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gPT09IFNoYXJlZCBUeXBlcyA9PT1cblxuaW1wb3J0IHsgQVhQQ29udGVudCwgQVhQVXNlclJlZmVyZW5jZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBFbnRpdHlNb2RlbCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5cbmV4cG9ydCB0eXBlIEFYTVNlZW5UeXBlID0gJ2RlbGl2ZXJlZCcgfCAncmVhZCc7XG5leHBvcnQgdHlwZSBBWE1SZWFjdGlvblR5cGUgPSAnbGlrZScgfCAnbG92ZScgfCAnbGF1Z2gnIHwgJ2FuZ3J5JyB8ICdzYWQnIHwgc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uIHtcbiAgYXV0aG9yOiBBWFBVc2VyUmVmZXJlbmNlO1xuICB0eXBlOiBBWE1SZWFjdGlvblR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhNQ29udmVyc2F0aW9uU2VlbiB7XG4gIGF1dGhvcjogQVhQVXNlclJlZmVyZW5jZTtcbiAgdHlwZTogQVhNU2VlblR5cGU7XG59XG5cbi8vID09PSBDb3JlIE1vZGVscyA9PT1cblxuZXhwb3J0IGludGVyZmFjZSBBWE1Db252ZXJzYXRpb25NZXNzYWdlIGV4dGVuZHMgQVhQRW50aXR5TW9kZWw8c3RyaW5nPiB7XG4gIHJvb21JZDogc3RyaW5nO1xuICBtZXNzYWdlOiBBWFBDb250ZW50O1xuICBhdXRob3I6IEFYUFVzZXJSZWZlcmVuY2U7XG4gIHJlcGx5SWQ/OiBzdHJpbmcgfCBudWxsO1xuICByZWFjdGlvbnM6IEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW107XG4gIHNlZW46IEFYTUNvbnZlcnNhdGlvblNlZW5bXTtcbiAgaXNQaW5uZWQ/OiBib29sZWFuO1xufVxuIl19","import { NgModule } from '@angular/core';\nimport { AXMConversationTabService, AXMConversationTabServiceImpl } from './tab.service';\nimport * as i0 from \"@angular/core\";\nexport class AXMConversationTabEntityModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabEntityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabEntityModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabEntityModule, providers: [\n {\n provide: AXMConversationTabService,\n useClass: AXMConversationTabServiceImpl,\n },\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabEntityModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXMConversationTabService,\n useClass: AXMConversationTabServiceImpl,\n },\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9lbnRpdGllcy90YWIvdGFiLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFhekYsTUFBTSxPQUFPLDhCQUE4QjsrR0FBOUIsOEJBQThCO2dIQUE5Qiw4QkFBOEI7Z0hBQTlCLDhCQUE4QixhQVA1QjtZQUNQO2dCQUNJLE9BQU8sRUFBRSx5QkFBeUI7Z0JBQ2xDLFFBQVEsRUFBRSw2QkFBNkI7YUFDMUM7U0FDSjs7NEZBRVEsOEJBQThCO2tCQVgxQyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxFQUFFO29CQUNYLE9BQU8sRUFBRSxFQUFFO29CQUNYLFlBQVksRUFBRSxFQUFFO29CQUNoQixTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLHlCQUF5Qjs0QkFDbEMsUUFBUSxFQUFFLDZCQUE2Qjt5QkFDMUM7cUJBQ0o7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhNQ29udmVyc2F0aW9uVGFiU2VydmljZSwgQVhNQ29udmVyc2F0aW9uVGFiU2VydmljZUltcGwgfSBmcm9tICcuL3RhYi5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXSxcbiAgICBleHBvcnRzOiBbXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBBWE1Db252ZXJzYXRpb25UYWJTZXJ2aWNlLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IEFYTUNvbnZlcnNhdGlvblRhYlNlcnZpY2VJbXBsLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTUNvbnZlcnNhdGlvblRhYkVudGl0eU1vZHVsZSB7IH1cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { AXMRoomService, AXMRoomServiceImpl } from './room.service';\nimport * as i0 from \"@angular/core\";\nexport class AXMRoomEntityModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomEntityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomEntityModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomEntityModule, providers: [\n {\n provide: AXMRoomService,\n useClass: AXMRoomServiceImpl,\n },\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomEntityModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXMRoomService,\n useClass: AXMRoomServiceImpl,\n },\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZW50aXRpZXMvcm9vbS9yb29tLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFhcEUsTUFBTSxPQUFPLG1CQUFtQjsrR0FBbkIsbUJBQW1CO2dIQUFuQixtQkFBbUI7Z0hBQW5CLG1CQUFtQixhQVBqQjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxjQUFjO2dCQUN2QixRQUFRLEVBQUUsa0JBQWtCO2FBQy9CO1NBQ0o7OzRGQUVRLG1CQUFtQjtrQkFYL0IsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsRUFBRTtvQkFDWCxPQUFPLEVBQUUsRUFBRTtvQkFDWCxZQUFZLEVBQUUsRUFBRTtvQkFDaEIsU0FBUyxFQUFFO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxjQUFjOzRCQUN2QixRQUFRLEVBQUUsa0JBQWtCO3lCQUMvQjtxQkFDSjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWE1Sb29tU2VydmljZSwgQVhNUm9vbVNlcnZpY2VJbXBsIH0gZnJvbSAnLi9yb29tLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtdLFxuICAgIGV4cG9ydHM6IFtdLFxuICAgIGRlY2xhcmF0aW9uczogW10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEFYTVJvb21TZXJ2aWNlLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IEFYTVJvb21TZXJ2aWNlSW1wbCxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1Sb29tRW50aXR5TW9kdWxlIHsgfVxuIl19","import { NgModule } from '@angular/core';\nimport { AXMMessageService, AXMMessageServiceImpl } from './message.service';\nimport * as i0 from \"@angular/core\";\nexport class AXMMessageEntityModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageEntityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageEntityModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageEntityModule, providers: [\n {\n provide: AXMMessageService,\n useClass: AXMMessageServiceImpl,\n },\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageEntityModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXMMessageService,\n useClass: AXMMessageServiceImpl,\n },\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZW50aXRpZXMvbWVzc2FnZS9tZXNzYWdlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQWE3RSxNQUFNLE9BQU8sc0JBQXNCOytHQUF0QixzQkFBc0I7Z0hBQXRCLHNCQUFzQjtnSEFBdEIsc0JBQXNCLGFBUHBCO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsUUFBUSxFQUFFLHFCQUFxQjthQUNsQztTQUNKOzs0RkFFUSxzQkFBc0I7a0JBWGxDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixRQUFRLEVBQUUscUJBQXFCO3lCQUNsQztxQkFDSjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWE1NZXNzYWdlU2VydmljZSwgQVhNTWVzc2FnZVNlcnZpY2VJbXBsIH0gZnJvbSAnLi9tZXNzYWdlLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtdLFxuICAgIGV4cG9ydHM6IFtdLFxuICAgIGRlY2xhcmF0aW9uczogW10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEFYTU1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IEFYTU1lc3NhZ2VTZXJ2aWNlSW1wbCxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1NZXNzYWdlRW50aXR5TW9kdWxlIHsgfVxuIl19","// Entity Services\nexport * from './tab';\nexport * from './room';\nexport * from './message';\n// Entity Modules\nexport * from './tab/tab.module';\nexport * from './room/room.module';\nexport * from './message/message.module';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZW50aXRpZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCO0FBQ2xCLGNBQWMsT0FBTyxDQUFDO0FBQ3RCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsV0FBVyxDQUFDO0FBRTFCLGlCQUFpQjtBQUNqQixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEVudGl0eSBTZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSAnLi90YWInO1xuZXhwb3J0ICogZnJvbSAnLi9yb29tJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnZSc7XG5cbi8vIEVudGl0eSBNb2R1bGVzXG5leHBvcnQgKiBmcm9tICcuL3RhYi90YWIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vcm9vbS9yb29tLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2UvbWVzc2FnZS5tb2R1bGUnO1xuIl19","import { Injectable, Injector } from '@angular/core';\nimport { RootConfig } from './const';\nimport { messageFactory, roomFactory, tabFactory } from './entities';\nimport * as i0 from \"@angular/core\";\nexport class AXMConversationModuleEntityProvider {\n constructor(injector) {\n this.injector = injector;\n }\n preload() {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity) => ({\n module: module,\n entity: entity.name,\n }));\n }\n async get(moduleName, entityName) {\n switch (entityName) {\n case 'room':\n return roomFactory(this.injector);\n case 'message':\n return messageFactory(this.injector);\n case 'tab':\n return tabFactory(this.injector);\n default:\n return null;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModuleEntityProvider, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModuleEntityProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModuleEntityProvider, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i0.Injector }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2VudGl0eS5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFHckUsTUFBTSxPQUFPLG1DQUFtQztJQUM5QyxZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQUcsQ0FBQztJQUVuQyxPQUFPO1FBQ1osTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDdEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sRUFBRSxNQUFNO1lBQ2QsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1NBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVNLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBa0IsRUFBRSxVQUFrQjtRQUNyRCxRQUFRLFVBQVUsRUFBRSxDQUFDO1lBQ25CLEtBQUssTUFBTTtnQkFDVCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsS0FBSyxTQUFTO2dCQUNaLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DO2dCQUNFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDOytHQXRCVSxtQ0FBbUM7bUhBQW5DLG1DQUFtQzs7NEZBQW5DLG1DQUFtQztrQkFEL0MsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEVudGl0eSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUEVudGl0eURlZmluaXRpb25Mb2FkZXIsIEFYUEVudGl0eVByZWxvYWRFbnRpdHkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuL2NvbnN0JztcbmltcG9ydCB7IG1lc3NhZ2VGYWN0b3J5LCByb29tRmFjdG9yeSwgdGFiRmFjdG9yeSB9IGZyb20gJy4vZW50aXRpZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNQ29udmVyc2F0aW9uTW9kdWxlRW50aXR5UHJvdmlkZXIgaW1wbGVtZW50cyBBWFBFbnRpdHlEZWZpbml0aW9uTG9hZGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgcHVibGljIHByZWxvYWQoKTogQVhQRW50aXR5UHJlbG9hZEVudGl0eVtdIHtcbiAgICBjb25zdCBtb2R1bGUgPSBSb290Q29uZmlnLm1vZHVsZS5uYW1lO1xuICAgIHJldHVybiBBcnJheS5mcm9tKE9iamVjdC52YWx1ZXMoUm9vdENvbmZpZy5lbnRpdGllcykpLm1hcCgoZW50aXR5OiBhbnkpID0+ICh7XG4gICAgICBtb2R1bGU6IG1vZHVsZSxcbiAgICAgIGVudGl0eTogZW50aXR5Lm5hbWUsXG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldChtb2R1bGVOYW1lOiBzdHJpbmcsIGVudGl0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQRW50aXR5IHwgbnVsbD4ge1xuICAgIHN3aXRjaCAoZW50aXR5TmFtZSkge1xuICAgICAgY2FzZSAncm9vbSc6XG4gICAgICAgIHJldHVybiByb29tRmFjdG9yeSh0aGlzLmluamVjdG9yKTtcbiAgICAgIGNhc2UgJ21lc3NhZ2UnOlxuICAgICAgICByZXR1cm4gbWVzc2FnZUZhY3RvcnkodGhpcy5pbmplY3Rvcik7XG4gICAgICBjYXNlICd0YWInOlxuICAgICAgICByZXR1cm4gdGFiRmFjdG9yeSh0aGlzLmluamVjdG9yKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19","export const AXPConversationMenuKeys = {\n Conversations: 'conversation:messages',\n Divider1: 'conversation:divider-1',\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5rZXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL21lbnUua2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNuQyxhQUFhLEVBQUUsdUJBQXVCO0lBQ3RDLFFBQVEsRUFBRSx3QkFBd0I7Q0FDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBWFBDb252ZXJzYXRpb25NZW51S2V5cyA9IHtcbiAgICBDb252ZXJzYXRpb25zOiAnY29udmVyc2F0aW9uOm1lc3NhZ2VzJyxcbiAgICBEaXZpZGVyMTogJ2NvbnZlcnNhdGlvbjpkaXZpZGVyLTEnLFxufSBhcyBjb25zdDtcblxuIl19","import { AXPSessionService } from '@acorex/platform/auth';\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from './const';\nimport { AXPConversationMenuKeys } from './menu.keys';\nimport * as i0 from \"@angular/core\";\nexport class AXMMenuProvider {\n constructor() {\n this.sessionService = inject(AXPSessionService);\n }\n async provide(context) {\n const module = RootConfig;\n const scope = RootConfig.config.i18n;\n context.addItems([\n {\n name: AXPConversationMenuKeys.Conversations,\n text: `t('plural-title', {scope:\"${scope}\"})`,\n path: `${this.sessionService.application?.name}/${module.config.route}`,\n priority: 2,\n icon: RootConfig.entities.room.icon,\n badgeKey: 'badge-chat',\n },\n {\n name: AXPConversationMenuKeys.Divider1,\n text: '',\n type: 'break',\n priority: 3,\n }\n ]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMenuProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMenuProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMenuProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9tZW51LnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDckMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUd0RCxNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQUVVLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0F1QnBEO0lBckJDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBK0I7UUFDM0MsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDO1FBQzFCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBRXJDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDZjtnQkFDRSxJQUFJLEVBQUUsdUJBQXVCLENBQUMsYUFBYTtnQkFDM0MsSUFBSSxFQUFFLDZCQUE2QixLQUFLLEtBQUs7Z0JBQzdDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtnQkFDdkUsUUFBUSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQ25DLFFBQVEsRUFBRSxZQUFZO2FBQ3ZCO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHVCQUF1QixDQUFDLFFBQVE7Z0JBQ3RDLElBQUksRUFBRSxFQUFFO2dCQUNSLElBQUksRUFBRSxPQUFPO2dCQUNiLFFBQVEsRUFBRSxDQUFDO2FBQ1o7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOytHQXZCVSxlQUFlO21IQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBTZXNzaW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vYXV0aCc7XG5pbXBvcnQgeyBBWFBNZW51UHJvdmlkZXIsIEFYUE1lbnVQcm92aWRlckNvbnRleHQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuL2NvbnN0JztcbmltcG9ydCB7IEFYUENvbnZlcnNhdGlvbk1lbnVLZXlzIH0gZnJvbSAnLi9tZW51LmtleXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNTWVudVByb3ZpZGVyIGltcGxlbWVudHMgQVhQTWVudVByb3ZpZGVyIHtcbiAgcHJpdmF0ZSBzZXNzaW9uU2VydmljZSA9IGluamVjdChBWFBTZXNzaW9uU2VydmljZSk7XG5cbiAgYXN5bmMgcHJvdmlkZShjb250ZXh0OiBBWFBNZW51UHJvdmlkZXJDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbW9kdWxlID0gUm9vdENvbmZpZztcbiAgICBjb25zdCBzY29wZSA9IFJvb3RDb25maWcuY29uZmlnLmkxOG47XG5cbiAgICBjb250ZXh0LmFkZEl0ZW1zKFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogQVhQQ29udmVyc2F0aW9uTWVudUtleXMuQ29udmVyc2F0aW9ucyxcbiAgICAgICAgdGV4dDogYHQoJ3BsdXJhbC10aXRsZScsIHtzY29wZTpcIiR7c2NvcGV9XCJ9KWAsXG4gICAgICAgIHBhdGg6IGAke3RoaXMuc2Vzc2lvblNlcnZpY2UuYXBwbGljYXRpb24/Lm5hbWV9LyR7bW9kdWxlLmNvbmZpZy5yb3V0ZX1gLFxuICAgICAgICBwcmlvcml0eTogMixcbiAgICAgICAgaWNvbjogUm9vdENvbmZpZy5lbnRpdGllcy5yb29tLmljb24sXG4gICAgICAgIGJhZGdlS2V5OiAnYmFkZ2UtY2hhdCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBBWFBDb252ZXJzYXRpb25NZW51S2V5cy5EaXZpZGVyMSxcbiAgICAgICAgdGV4dDogJycsXG4gICAgICAgIHR5cGU6ICdicmVhaycsXG4gICAgICAgIHByaW9yaXR5OiAzLFxuICAgICAgfVxuICAgIF0pO1xuICB9XG59XG4iXX0=","export function convertChatMessageToNotification(room, message, currentUser) {\n return {\n channel: 'InApp',\n template: {\n category: 'Inbox',\n prority: 'Notice',\n icon: 'fa-light fa-comment',\n isPinned: false,\n },\n title: room.title || 'New Message',\n body: message.message.content,\n sender: message.author,\n receiver: currentUser,\n content: message.message,\n readAt: null,\n type: 'Chat',\n data: {\n roomId: room.id,\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1ub3RpZmljYXRpb24uaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NoYXQvY2hhdC1ub3RpZmljYXRpb24uaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sVUFBVSxnQ0FBZ0MsQ0FDOUMsSUFBaUIsRUFDakIsT0FBdUIsRUFDdkIsV0FBNkI7SUFFN0IsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFFBQVEsRUFBRTtZQUNSLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLElBQUksRUFBRSxxQkFBcUI7WUFDM0IsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxhQUFhO1FBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU87UUFDN0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixNQUFNLEVBQUUsSUFBSTtRQUNaLElBQUksRUFBRSxNQUFNO1FBQ1osSUFBSSxFQUFFO1lBQ0osTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2hCO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWE1Ob3RpZmljYXRpb25JdGVtIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50JztcbmltcG9ydCB7IEFYUFVzZXJSZWZlcmVuY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhNQ2hhdE1lc3NhZ2UsIEFYTUNoYXRSb29tIH0gZnJvbSAnLi9jaGF0LnR5cGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydENoYXRNZXNzYWdlVG9Ob3RpZmljYXRpb24oXG4gIHJvb206IEFYTUNoYXRSb29tLFxuICBtZXNzYWdlOiBBWE1DaGF0TWVzc2FnZSxcbiAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4pOiBPbWl0PEFYTU5vdGlmaWNhdGlvbkl0ZW0sICdpZCcgfCAnZW50aXR5TmFtZScgfCAnY3JlYXRlQXQnPiB7XG4gIHJldHVybiB7XG4gICAgY2hhbm5lbDogJ0luQXBwJyxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgY2F0ZWdvcnk6ICdJbmJveCcsXG4gICAgICBwcm9yaXR5OiAnTm90aWNlJyxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS1jb21tZW50JyxcbiAgICAgIGlzUGlubmVkOiBmYWxzZSxcbiAgICB9LFxuICAgIHRpdGxlOiByb29tLnRpdGxlIHx8ICdOZXcgTWVzc2FnZScsXG4gICAgYm9keTogbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQsXG4gICAgc2VuZGVyOiBtZXNzYWdlLmF1dGhvcixcbiAgICByZWNlaXZlcjogY3VycmVudFVzZXIsXG4gICAgY29udGVudDogbWVzc2FnZS5tZXNzYWdlLFxuICAgIHJlYWRBdDogbnVsbCxcbiAgICB0eXBlOiAnQ2hhdCcsXG4gICAgZGF0YToge1xuICAgICAgcm9vbUlkOiByb29tLmlkLFxuICAgIH0sXG4gIH07XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class AXMChatRealtimeService {\n}\nexport class AXMChatRealtimeServiceImpl extends AXMChatRealtimeService {\n constructor() {\n super(...arguments);\n this._room$ = new Subject();\n this.room$ = this._room$.asObservable();\n this._message$ = new Subject();\n this.message$ = this._message$.asObservable();\n this._tab$ = new Subject();\n this.tab$ = this._tab$.asObservable();\n this._typingStatus$ = new Subject();\n this.typingStatus$ = this._typingStatus$.asObservable();\n }\n notifyRoom(event) {\n this._room$.next(event);\n }\n notifyMessage(event) {\n this._message$.next(event);\n }\n notifyTab(event) {\n this._tab$.next(event);\n }\n startTyping(user, roomId) {\n this._typingStatus$.next({ roomId, user, isTyping: true });\n }\n stopTyping(user, roomId) {\n this._typingStatus$.next({ roomId, user, isTyping: false });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatRealtimeServiceImpl, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatRealtimeServiceImpl, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatRealtimeServiceImpl, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1yZWFsdGltZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NoYXQvY2hhdC1yZWFsdGltZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFHM0MsTUFBTSxPQUFnQixzQkFBc0I7Q0FXM0M7QUFLRCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsc0JBQXNCO0lBSHRFOztRQUltQixXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQW9CLENBQUM7UUFDakQsVUFBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFM0IsY0FBUyxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ3ZELGFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWpDLFVBQUssR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUMvQyxTQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV6QixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFpRSxDQUFDO1FBQ3RHLGtCQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQXFCN0Q7SUFuQkMsVUFBVSxDQUFDLEtBQXVCO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBMEI7UUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFzQjtRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQXNCLEVBQUUsTUFBYztRQUNoRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFzQixFQUFFLE1BQWM7UUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7K0dBL0JVLDBCQUEwQjttSEFBMUIsMEJBQTBCLGNBRnpCLE1BQU07OzRGQUVQLDBCQUEwQjtrQkFIdEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBVc2VyUmVmZXJlbmNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYTUNoYXRNZXNzYWdlRXZlbnQsIEFYTUNoYXRSb29tRXZlbnQsIEFYTUNoYXRUYWJFdmVudCB9IGZyb20gJy4vY2hhdC50eXBlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYTUNoYXRSZWFsdGltZVNlcnZpY2Uge1xuICBhYnN0cmFjdCByZWFkb25seSByb29tJDogT2JzZXJ2YWJsZTxBWE1DaGF0Um9vbUV2ZW50PjtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgbWVzc2FnZSQ6IE9ic2VydmFibGU8QVhNQ2hhdE1lc3NhZ2VFdmVudD47XG4gIGFic3RyYWN0IHJlYWRvbmx5IHRhYiQ6IE9ic2VydmFibGU8QVhNQ2hhdFRhYkV2ZW50PjtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgdHlwaW5nU3RhdHVzJDogT2JzZXJ2YWJsZTx7IHJvb21JZDogc3RyaW5nOyB1c2VyOiBBWFBVc2VyUmVmZXJlbmNlOyBpc1R5cGluZzogYm9vbGVhbiB9PjtcblxuICBhYnN0cmFjdCBub3RpZnlSb29tKGV2ZW50OiBBWE1DaGF0Um9vbUV2ZW50KTogdm9pZDtcbiAgYWJzdHJhY3Qgbm90aWZ5TWVzc2FnZShldmVudDogQVhNQ2hhdE1lc3NhZ2VFdmVudCk6IHZvaWQ7XG4gIGFic3RyYWN0IG5vdGlmeVRhYihldmVudDogQVhNQ2hhdFRhYkV2ZW50KTogdm9pZDtcbiAgYWJzdHJhY3Qgc3RhcnRUeXBpbmcodXNlcjogQVhQVXNlclJlZmVyZW5jZSwgcm9vbUlkOiBzdHJpbmcpOiB2b2lkO1xuICBhYnN0cmFjdCBzdG9wVHlwaW5nKHVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsIHJvb21JZDogc3RyaW5nKTogdm9pZDtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYTUNoYXRSZWFsdGltZVNlcnZpY2VJbXBsIGV4dGVuZHMgQVhNQ2hhdFJlYWx0aW1lU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jvb20kID0gbmV3IFN1YmplY3Q8QVhNQ2hhdFJvb21FdmVudD4oKTtcbiAgcmVhZG9ubHkgcm9vbSQgPSB0aGlzLl9yb29tJC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlJCA9IG5ldyBTdWJqZWN0PEFYTUNoYXRNZXNzYWdlRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG1lc3NhZ2UkID0gdGhpcy5fbWVzc2FnZSQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdGFiJCA9IG5ldyBTdWJqZWN0PEFYTUNoYXRUYWJFdmVudD4oKTtcbiAgcmVhZG9ubHkgdGFiJCA9IHRoaXMuX3RhYiQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwaW5nU3RhdHVzJCA9IG5ldyBTdWJqZWN0PHsgcm9vbUlkOiBzdHJpbmc7IHVzZXI6IEFYUFVzZXJSZWZlcmVuY2U7IGlzVHlwaW5nOiBib29sZWFuIH0+KCk7XG4gIHJlYWRvbmx5IHR5cGluZ1N0YXR1cyQgPSB0aGlzLl90eXBpbmdTdGF0dXMkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIG5vdGlmeVJvb20oZXZlbnQ6IEFYTUNoYXRSb29tRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9yb29tJC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeU1lc3NhZ2UoZXZlbnQ6IEFYTUNoYXRNZXNzYWdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXNzYWdlJC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeVRhYihldmVudDogQVhNQ2hhdFRhYkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fdGFiJC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIHN0YXJ0VHlwaW5nKHVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsIHJvb21JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwaW5nU3RhdHVzJC5uZXh0KHsgcm9vbUlkLCB1c2VyLCBpc1R5cGluZzogdHJ1ZSB9KTtcbiAgfVxuXG4gIHN0b3BUeXBpbmcodXNlcjogQVhQVXNlclJlZmVyZW5jZSwgcm9vbUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl90eXBpbmdTdGF0dXMkLm5leHQoeyByb29tSWQsIHVzZXIsIGlzVHlwaW5nOiBmYWxzZSB9KTtcbiAgfVxufVxuIl19","import { inject, Injectable } from '@angular/core';\nimport { AXMMessageService } from '../../entities/message/message.service';\nimport { AXMRoomService } from '../../entities/room/room.service';\nimport { AXMConversationTabService } from '../../entities/tab/tab.service';\nimport * as i0 from \"@angular/core\";\nexport class AXMChatService {\n}\nexport class AXMChatServiceImpl extends AXMChatService {\n constructor() {\n super(...arguments);\n this.roomService = inject(AXMRoomService);\n this.messageService = inject(AXMMessageService);\n this.tabService = inject(AXMConversationTabService);\n }\n createRoom(members, title, currentUser, avatar) {\n const room = {\n members,\n title: title,\n topic: members.length > 2 ? 'group' : 'personal',\n auditInfo: {\n created: { at: new Date(), by: currentUser },\n updated: { at: new Date(), by: currentUser },\n },\n type: 'chat',\n avatar: avatar ?? null,\n };\n return this.roomService.insertOne(room).then((id) => this.roomService.getOne(id));\n }\n getRoom(roomId) {\n return this.roomService.getOne(roomId);\n }\n async listRooms(skip = 0, take = 100) {\n return this.roomService.query({\n skip,\n take,\n filter: { field: 'type', value: 'chat', operator: { type: 'equal' } },\n });\n }\n updateRoom(roomId, data, currentUser) {\n const update = { ...data, auditInfo: { updated: { at: new Date(), by: currentUser } } };\n return this.roomService.updateOne(roomId, update);\n }\n async deleteRoom(roomId) {\n await this.roomService.deleteOne(roomId);\n return true;\n }\n createTab(data) {\n return this.tabService.insertOne(data).then((id) => this.tabService.getOne(id));\n }\n getTab(tabId) {\n return this.tabService.getOne(tabId);\n }\n listTabs(skip = 0, take = 100) {\n return this.tabService.query({ skip, take });\n }\n updateTab(tabId, data) {\n return this.tabService.updateOne(tabId, data);\n }\n async deleteTab(tabId) {\n await this.tabService.deleteOne(tabId);\n return true;\n }\n sendMessage(roomId, content, author, contentType = 'text', replyId) {\n const messageContent = { content, contentType };\n const message = {\n roomId,\n message: messageContent,\n author,\n replyId,\n auditInfo: {\n created: { at: new Date(), by: author },\n updated: { at: new Date(), by: author },\n },\n reactions: [],\n seen: [],\n };\n return this.messageService.insertOne({ ...message }).then((id) => this.messageService.getOne(id));\n }\n async getMessages(roomId, skip = 0, take = 99) {\n return this.messageService.query({\n skip,\n take,\n filter: { field: 'roomId', value: roomId, operator: { type: 'equal' } },\n sort: [{ field: 'created.at', dir: 'desc' }],\n });\n }\n getMessage(messageId) {\n return this.messageService.getOne(messageId);\n }\n editMessage(messageId, content, currentUser, contentType = 'text') {\n const messageContent = { content, contentType };\n return this.messageService.updateOne(messageId, {\n message: messageContent,\n auditInfo: {\n updated: { at: new Date(), by: currentUser },\n },\n });\n }\n async deleteMessage(messageId) {\n await this.messageService.deleteOne(messageId);\n return true;\n }\n pinMessage(messageId, isPinned, currentUser) {\n return this.messageService.updateOne(messageId, {\n isPinned,\n auditInfo: {\n updated: { at: new Date(), by: currentUser },\n },\n });\n }\n updateReactions(messageId, reactions, currentUser) {\n return this.messageService.updateOne(messageId, {\n reactions,\n auditInfo: {\n updated: { at: new Date(), by: currentUser },\n },\n });\n }\n getReactions(messageId) {\n return this.messageService.getOne(messageId).then((m) => m.reactions || []);\n }\n updateSeen(messageId, seen, currentUser) {\n return this.messageService.updateOne(messageId, {\n seen,\n auditInfo: {\n updated: { at: new Date(), by: currentUser },\n },\n });\n }\n getSeenBy(messageId) {\n return this.messageService.getOne(messageId).then((m) => m.seen || []);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatServiceImpl, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatServiceImpl, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatServiceImpl, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NoYXQvY2hhdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBTTNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFHM0UsTUFBTSxPQUFnQixjQUFjO0NBa0VuQztBQUtELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxjQUFjO0lBSHREOztRQUltQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNDLGVBQVUsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztLQXVLakU7SUFyS0MsVUFBVSxDQUNSLE9BQTJCLEVBQzNCLEtBQXlCLEVBQ3pCLFdBQTZCLEVBQzdCLE1BQWU7UUFFZixNQUFNLElBQUksR0FBb0M7WUFDNUMsT0FBTztZQUNQLEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVU7WUFDaEQsU0FBUyxFQUFFO2dCQUNULE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUU7Z0JBQzVDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUs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QUNqQixJQUEyQixFQUMzQixXQUE2QjtRQUU3QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUM5QyxJQUFJO1lBQ0osU0FBUyxFQUFFO2dCQUNULE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUU7YUFDN0M7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQWlCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7K0dBektVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBDb250ZW50LCBBWFBDb250ZW50VHlwZSwgQVhQVXNlclJlZmVyZW5jZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTU1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZW50aXRpZXMvbWVzc2FnZS9tZXNzYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQVhNQ29udmVyc2F0aW9uTWVzc2FnZSxcbiAgQVhNQ29udmVyc2F0aW9uUmVhY3Rpb24sXG4gIEFYTUNvbnZlcnNhdGlvblNlZW4sXG59IGZyb20gJy4uLy4uL2VudGl0aWVzL21lc3NhZ2UvbWVzc2FnZS50eXBlcyc7XG5pbXBvcnQgeyBBWE1Sb29tU2VydmljZSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3Jvb20vcm9vbS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTUNvbnZlcnNhdGlvblJvb20gfSBmcm9tICcuLi8uLi9lbnRpdGllcy9yb29tL3Jvb20udHlwZXMnO1xuaW1wb3J0IHsgQVhNQ29udmVyc2F0aW9uVGFiU2VydmljZSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3RhYi90YWIuc2VydmljZSc7XG5pbXBvcnQgeyBBWE1Db252ZXJzYXRpb25UYWIgfSBmcm9tICcuLi8uLi9lbnRpdGllcy90YWIvdGFiLnR5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYTUNoYXRTZXJ2aWNlIHtcbiAgLy8gQ2hhdFJvb21TZXJ2aWNlIE1ldGhvZHNcbiAgYWJzdHJhY3QgY3JlYXRlUm9vbShcbiAgICBtZW1iZXJzOiBBWFBVc2VyUmVmZXJlbmNlW10sXG4gICAgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50VXNlcjogQVhQVXNlclJlZmVyZW5jZSxcbiAgICBhdmF0YXI/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uUm9vbT47XG4gIGFic3RyYWN0IGdldFJvb20ocm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJvb20+O1xuICBhYnN0cmFjdCBsaXN0Um9vbXMoc2tpcD86IG51bWJlciwgdGFrZT86IG51bWJlcik6IFByb21pc2U8eyBpdGVtczogQVhNQ29udmVyc2F0aW9uUm9vbVtdOyB0b3RhbDogbnVtYmVyIH0+O1xuICBhYnN0cmFjdCB1cGRhdGVSb29tKFxuICAgIHJvb21JZDogc3RyaW5nLFxuICAgIGRhdGE6IFBhcnRpYWw8QVhNQ29udmVyc2F0aW9uUm9vbT4sXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uUm9vbT47XG4gIGFic3RyYWN0IGRlbGV0ZVJvb20ocm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8vIENoYXRUYWJTZXJ2aWNlIE1ldGhvZHNcbiAgYWJzdHJhY3QgY3JlYXRlVGFiKGRhdGE6IE9taXQ8QVhNQ29udmVyc2F0aW9uVGFiLCAnaWQnPik6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uVGFiPjtcbiAgYWJzdHJhY3QgZ2V0VGFiKHRhYklkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblRhYj47XG4gIGFic3RyYWN0IGxpc3RUYWJzKHNraXA/OiBudW1iZXIsIHRha2U/OiBudW1iZXIpOiBQcm9taXNlPHsgaXRlbXM6IEFYTUNvbnZlcnNhdGlvblRhYltdOyB0b3RhbDogbnVtYmVyIH0+O1xuICBhYnN0cmFjdCB1cGRhdGVUYWIodGFiSWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxBWE1Db252ZXJzYXRpb25UYWI+KTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25UYWI+O1xuICBhYnN0cmFjdCBkZWxldGVUYWIodGFiSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLy8gQ2hhdE1lc3NhZ2VTZXJ2aWNlIE1ldGhvZHNcbiAgYWJzdHJhY3Qgc2VuZE1lc3NhZ2UoXG4gICAgcm9vbUlkOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIGF1dGhvcjogQVhQVXNlclJlZmVyZW5jZSxcbiAgICBjb250ZW50VHlwZT86IEFYUENvbnRlbnRUeXBlLFxuICAgIHJlcGx5SWQ/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT47XG4gIGFic3RyYWN0IGdldE1lc3NhZ2VzKFxuICAgIHJvb21JZDogc3RyaW5nLFxuICAgIHNraXA/OiBudW1iZXIsXG4gICAgdGFrZT86IG51bWJlcixcbiAgKTogUHJvbWlzZTx7IGl0ZW1zOiBBWE1Db252ZXJzYXRpb25NZXNzYWdlW107IHRvdGFsOiBudW1iZXIgfT47XG4gIGFic3RyYWN0IGdldE1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2U+O1xuICBhYnN0cmFjdCBlZGl0TWVzc2FnZShcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICAgY29udGVudFR5cGU/OiBBWFBDb250ZW50VHlwZSxcbiAgKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25NZXNzYWdlPjtcbiAgYWJzdHJhY3QgZGVsZXRlTWVzc2FnZShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj47XG4gIGFic3RyYWN0IHBpbk1lc3NhZ2UoXG4gICAgbWVzc2FnZUlkOiBzdHJpbmcsXG4gICAgaXNQaW5uZWQ6IGJvb2xlYW4sXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT47XG5cbiAgLy8gQ2hhdFJlYWN0aW9uU2VydmljZSBNZXRob2RzXG4gIGFic3RyYWN0IHVwZGF0ZVJlYWN0aW9ucyhcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICByZWFjdGlvbnM6IEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW10sXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT47XG4gIGFic3RyYWN0IGdldFJlYWN0aW9ucyhtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uUmVhY3Rpb25bXT47XG5cbiAgLy8gQ2hhdFNlZW5TZXJ2aWNlIE1ldGhvZHNcbiAgYWJzdHJhY3QgdXBkYXRlU2VlbihcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICBzZWVuOiBBWE1Db252ZXJzYXRpb25TZWVuW10sXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT47XG4gIGFic3RyYWN0IGdldFNlZW5CeShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uU2VlbltdPjtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYTUNoYXRTZXJ2aWNlSW1wbCBleHRlbmRzIEFYTUNoYXRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSByb29tU2VydmljZSA9IGluamVjdChBWE1Sb29tU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2UgPSBpbmplY3QoQVhNTWVzc2FnZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRhYlNlcnZpY2UgPSBpbmplY3QoQVhNQ29udmVyc2F0aW9uVGFiU2VydmljZSk7XG5cbiAgY3JlYXRlUm9vbShcbiAgICBtZW1iZXJzOiBBWFBVc2VyUmVmZXJlbmNlW10sXG4gICAgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50VXNlcjogQVhQVXNlclJlZmVyZW5jZSxcbiAgICBhdmF0YXI/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uUm9vbT4ge1xuICAgIGNvbnN0IHJvb206IE9taXQ8QVhNQ29udmVyc2F0aW9uUm9vbSwgJ2lkJz4gPSB7XG4gICAgICBtZW1iZXJzLFxuICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgdG9waWM6IG1lbWJlcnMubGVuZ3RoID4gMiA/ICdncm91cCcgOiAncGVyc29uYWwnLFxuICAgICAgYXVkaXRJbmZvOiB7XG4gICAgICAgIGNyZWF0ZWQ6IHsgYXQ6IG5ldyBEYXRlKCksIGJ5OiBjdXJyZW50VXNlciB9LFxuICAgICAgICB1cGRhdGVkOiB7IGF0OiBuZXcgRGF0ZSgpLCBieTogY3VycmVudFVzZXIgfSxcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnY2hhdCcsXG4gICAgICBhdmF0YXI6IGF2YXRhciA/PyBudWxsLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucm9vbVNlcnZpY2UuaW5zZXJ0T25lKHJvb20pLnRoZW4oKGlkKSA9PiB0aGlzLnJvb21TZXJ2aWNlLmdldE9uZShpZCkpO1xuICB9XG5cbiAgZ2V0Um9vbShyb29tSWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uUm9vbT4ge1xuICAgIHJldHVybiB0aGlzLnJvb21TZXJ2aWNlLmdldE9uZShyb29tSWQpO1xuICB9XG5cbiAgYXN5bmMgbGlzdFJvb21zKHNraXAgPSAwLCB0YWtlID0gMTAwKTogUHJvbWlzZTx7IGl0ZW1zOiBBWE1Db252ZXJzYXRpb25Sb29tW107IHRvdGFsOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLnJvb21TZXJ2aWNlLnF1ZXJ5KHtcbiAgICAgIHNraXAsXG4gICAgICB0YWtlLFxuICAgICAgZmlsdGVyOiB7IGZpZWxkOiAndHlwZScsIHZhbHVlOiAnY2hhdCcsIG9wZXJhdG9yOiB7IHR5cGU6ICdlcXVhbCcgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlUm9vbShcbiAgICByb29tSWQ6IHN0cmluZyxcbiAgICBkYXRhOiBQYXJ0aWFsPEFYTUNvbnZlcnNhdGlvblJvb20+LFxuICAgIGN1cnJlbnRVc2VyOiBBWFBVc2VyUmVmZXJlbmNlLFxuICApOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJvb20+IHtcbiAgICBjb25zdCB1cGRhdGUgPSB7IC4uLmRhdGEsIGF1ZGl0SW5mbzogeyB1cGRhdGVkOiB7IGF0OiBuZXcgRGF0ZSgpLCBieTogY3VycmVudFVzZXIgfSB9IH07XG4gICAgcmV0dXJuIHRoaXMucm9vbVNlcnZpY2UudXBkYXRlT25lKHJvb21JZCwgdXBkYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVJvb20ocm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLnJvb21TZXJ2aWNlLmRlbGV0ZU9uZShyb29tSWQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY3JlYXRlVGFiKGRhdGE6IE9taXQ8QVhNQ29udmVyc2F0aW9uVGFiLCAnaWQnPik6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uVGFiPiB7XG4gICAgcmV0dXJuIHRoaXMudGFiU2VydmljZS5pbnNlcnRPbmUoZGF0YSkudGhlbigoaWQpID0+IHRoaXMudGFiU2VydmljZS5nZXRPbmUoaWQpKTtcbiAgfVxuXG4gIGdldFRhYih0YWJJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25UYWI+IHtcbiAgICByZXR1cm4gdGhpcy50YWJTZXJ2aWNlLmdldE9uZSh0YWJJZCk7XG4gIH1cblxuICBsaXN0VGFicyhza2lwID0gMCwgdGFrZSA9IDEwMCk6IFByb21pc2U8eyBpdGVtczogQVhNQ29udmVyc2F0aW9uVGFiW107IHRvdGFsOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLnRhYlNlcnZpY2UucXVlcnkoeyBza2lwLCB0YWtlIH0pO1xuICB9XG5cbiAgdXBkYXRlVGFiKHRhYklkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8QVhNQ29udmVyc2F0aW9uVGFiPik6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uVGFiPiB7XG4gICAgcmV0dXJuIHRoaXMudGFiU2VydmljZS51cGRhdGVPbmUodGFiSWQsIGRhdGEpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlVGFiKHRhYklkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLnRhYlNlcnZpY2UuZGVsZXRlT25lKHRhYklkKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHNlbmRNZXNzYWdlKFxuICAgIHJvb21JZDogc3RyaW5nLFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBhdXRob3I6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICAgY29udGVudFR5cGU6IEFYUENvbnRlbnRUeXBlID0gJ3RleHQnLFxuICAgIHJlcGx5SWQ/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VDb250ZW50OiBBWFBDb250ZW50ID0geyBjb250ZW50LCBjb250ZW50VHlwZSB9O1xuICAgIGNvbnN0IG1lc3NhZ2U6IE9taXQ8QVhNQ29udmVyc2F0aW9uTWVzc2FnZSwgJ2lkJz4gPSB7XG4gICAgICByb29tSWQsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlQ29udGVudCxcbiAgICAgIGF1dGhvcixcbiAgICAgIHJlcGx5SWQsXG4gICAgICBhdWRpdEluZm86IHtcbiAgICAgICAgY3JlYXRlZDogeyBhdDogbmV3IERhdGUoKSwgYnk6IGF1dGhvciB9LFxuICAgICAgICB1cGRhdGVkOiB7IGF0OiBuZXcgRGF0ZSgpLCBieTogYXV0aG9yIH0sXG4gICAgICB9LFxuICAgICAgcmVhY3Rpb25zOiBbXSxcbiAgICAgIHNlZW46IFtdLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5zZXJ0T25lKHsgLi4ubWVzc2FnZSB9KS50aGVuKChpZCkgPT4gdGhpcy5tZXNzYWdlU2VydmljZS5nZXRPbmUoaWQpKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1lc3NhZ2VzKHJvb21JZDogc3RyaW5nLCBza2lwID0gMCwgdGFrZSA9IDk5KTogUHJvbWlzZTx7IGl0ZW1zOiBBWE1Db252ZXJzYXRpb25NZXNzYWdlW107IHRvdGFsOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnF1ZXJ5KHtcbiAgICAgIHNraXAsXG4gICAgICB0YWtlLFxuICAgICAgZmlsdGVyOiB7IGZpZWxkOiAncm9vbUlkJywgdmFsdWU6IHJvb21JZCwgb3BlcmF0b3I6IHsgdHlwZTogJ2VxdWFsJyB9IH0sXG4gICAgICBzb3J0OiBbeyBmaWVsZDogJ2NyZWF0ZWQuYXQnLCBkaXI6ICdkZXNjJyB9IGFzIGFueV0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRNZXNzYWdlKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25NZXNzYWdlPiB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVNlcnZpY2UuZ2V0T25lKG1lc3NhZ2VJZCk7XG4gIH1cblxuICBlZGl0TWVzc2FnZShcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICAgY29udGVudFR5cGU6IEFYUENvbnRlbnRUeXBlID0gJ3RleHQnLFxuICApOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2U+IHtcbiAgICBjb25zdCBtZXNzYWdlQ29udGVudDogQVhQQ29udGVudCA9IHsgY29udGVudCwgY29udGVudFR5cGUgfTtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU2VydmljZS51cGRhdGVPbmUobWVzc2FnZUlkLCB7XG4gICAgICBtZXNzYWdlOiBtZXNzYWdlQ29udGVudCxcbiAgICAgIGF1ZGl0SW5mbzoge1xuICAgICAgICB1cGRhdGVkOiB7IGF0OiBuZXcgRGF0ZSgpLCBieTogY3VycmVudFVzZXIgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVNZXNzYWdlKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5tZXNzYWdlU2VydmljZS5kZWxldGVPbmUobWVzc2FnZUlkKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHBpbk1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcsIGlzUGlubmVkOiBib29sZWFuLCBjdXJyZW50VXNlcjogQVhQVXNlclJlZmVyZW5jZSk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnVwZGF0ZU9uZShtZXNzYWdlSWQsIHtcbiAgICAgIGlzUGlubmVkLFxuICAgICAgYXVkaXRJbmZvOiB7XG4gICAgICAgIHVwZGF0ZWQ6IHsgYXQ6IG5ldyBEYXRlKCksIGJ5OiBjdXJyZW50VXNlciB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZVJlYWN0aW9ucyhcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICByZWFjdGlvbnM6IEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW10sXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnVwZGF0ZU9uZShtZXNzYWdlSWQsIHtcbiAgICAgIHJlYWN0aW9ucyxcbiAgICAgIGF1ZGl0SW5mbzoge1xuICAgICAgICB1cGRhdGVkOiB7IGF0OiBuZXcgRGF0ZSgpLCBieTogY3VycmVudFVzZXIgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRSZWFjdGlvbnMobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU2VydmljZS5nZXRPbmUobWVzc2FnZUlkKS50aGVuKChtKSA9PiBtLnJlYWN0aW9ucyB8fCBbXSk7XG4gIH1cblxuICB1cGRhdGVTZWVuKFxuICAgIG1lc3NhZ2VJZDogc3RyaW5nLFxuICAgIHNlZW46IEFYTUNvbnZlcnNhdGlvblNlZW5bXSxcbiAgICBjdXJyZW50VXNlcjogQVhQVXNlclJlZmVyZW5jZSxcbiAgKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25NZXNzYWdlPiB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVNlcnZpY2UudXBkYXRlT25lKG1lc3NhZ2VJZCwge1xuICAgICAgc2VlbixcbiAgICAgIGF1ZGl0SW5mbzoge1xuICAgICAgICB1cGRhdGVkOiB7IGF0OiBuZXcgRGF0ZSgpLCBieTogY3VycmVudFVzZXIgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRTZWVuQnkobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblNlZW5bXT4ge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmdldE9uZShtZXNzYWdlSWQpLnRoZW4oKG0pID0+IG0uc2VlbiB8fCBbXSk7XG4gIH1cbn1cbiJdfQ==","import { AXMNotificationConnectorService } from '@acorex/modules/notification-management';\nimport { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable } from '@angular/core';\nimport { convertChatMessageToNotification } from './chat-notification.helper';\nimport { AXMChatRealtimeService } from './chat-realtime.service';\nimport { AXMChatService } from './chat.service';\nimport * as i0 from \"@angular/core\";\nexport class AXMChatManagementService {\n constructor() {\n this.chatService = inject(AXMChatService);\n this.sessionService = inject(AXPSessionService);\n this.usersService = inject(AXMUsersEntityService);\n this.realtimeService = inject(AXMChatRealtimeService);\n this.notificationConnectorService = inject(AXMNotificationConnectorService);\n }\n getCurrentUser() {\n const user = this.sessionService.user;\n if (!user) {\n throw new Error('No authenticated user found.');\n }\n return {\n id: user.id,\n type: 'user',\n fullName: user.title?.trim(),\n username: user.name?.trim(),\n };\n }\n async getUserInfo(userId) {\n try {\n const user = await this.usersService.getOne(userId);\n return {\n id: user.id,\n type: 'user',\n fullName: `${user.displayName}`.trim(),\n username: user.username?.trim(),\n };\n }\n catch (error) {\n console.error(`Failed to get user info for ID: ${userId}`, error);\n return {\n id: userId,\n type: 'user',\n fullName: 'Unknown User',\n username: 'Unknown User',\n };\n }\n }\n async formatMessage(message) {\n if (message.author && !message.author.fullName) {\n const authorInfo = await this.getUserInfo(message.author.id);\n return {\n ...message,\n author: authorInfo,\n };\n }\n return message;\n }\n async getUnreadCount(roomId) {\n const { items } = await this.chatService.getMessages(roomId, 0, 99);\n const currentUserId = this.getCurrentUser().id;\n const unreadMessages = items.filter((message) => {\n const isFromCurrentUser = message.author.id === currentUserId;\n const isReadByCurrentUser = (message.seen || []).some((seen) => seen.author.id === currentUserId);\n return !isFromCurrentUser && !isReadByCurrentUser;\n });\n return unreadMessages.length;\n }\n async formatRoom(room) {\n const messages = await this.getMessages(room.id, 0, 1);\n const lastMessage = messages.items.length > 0 ? messages.items[0] : undefined;\n const unreadCount = await this.getUnreadCount(room.id);\n const currentUserId = this.getCurrentUser().id;\n const members = await Promise.all(room.members.map(async (member) => {\n if (member.fullName) {\n return member;\n }\n return this.getUserInfo(member.id);\n }));\n return {\n ...room,\n lastMessage,\n unreadCount,\n members: members.filter((m) => m.id !== currentUserId),\n };\n }\n async createRoom(memberIds, title, avatar) {\n if (memberIds.length === 0) {\n throw new Error('At least one member is required to create a room');\n }\n const currentUser = this.getCurrentUser();\n const allMemberIds = [...new Set([...memberIds, currentUser.id])];\n const memberReferences = await Promise.all(allMemberIds.map((id) => this.getUserInfo(id)));\n const newRoom = await this.chatService.createRoom(memberReferences, title, currentUser, avatar || undefined);\n const newChatRoom = await this.formatRoom(newRoom);\n this.realtimeService.notifyRoom({ type: 'add', payload: newChatRoom });\n return newChatRoom;\n }\n async getRoom(roomId) {\n const room = await this.chatService.getRoom(roomId);\n if (!room) {\n throw new Error(`Chat room with ID ${roomId} not found.`);\n }\n return this.formatRoom(room);\n }\n async listRooms(skip = 0, take = 100) {\n const { items } = await this.chatService.listRooms(skip, take);\n const settledRooms = await Promise.allSettled(items.map((room) => this.formatRoom(room)));\n const chatRooms = settledRooms\n .filter((result) => {\n if (result.status === 'rejected') {\n console.error('Failed to fetch room details:', result.reason);\n return false;\n }\n return true;\n })\n .map((result) => result.value);\n return { items: chatRooms, total: chatRooms.length };\n }\n async updateRoom(roomId, data) {\n const currentUser = this.getCurrentUser();\n return this.chatService.updateRoom(roomId, data, currentUser);\n }\n async deleteRoom(roomId) {\n const result = await this.chatService.deleteRoom(roomId);\n if (result) {\n this.realtimeService.notifyRoom({ type: 'remove', payload: roomId });\n }\n return result;\n }\n async addParticipant(roomId, userId) {\n const room = await this.chatService.getRoom(roomId);\n if (room.members.some((m) => m.id === userId))\n return room;\n const userRef = await this.getUserInfo(userId);\n const updatedMembers = [...room.members, userRef];\n const currentUser = this.getCurrentUser();\n return this.chatService.updateRoom(roomId, { members: updatedMembers }, currentUser);\n }\n async removeParticipant(roomId, userId) {\n const room = await this.chatService.getRoom(roomId);\n const updatedMembers = room.members.filter((member) => member.id !== userId);\n const currentUser = this.getCurrentUser();\n return this.chatService.updateRoom(roomId, { members: updatedMembers }, currentUser);\n }\n async createTab(data) {\n const newTab = await this.chatService.createTab(data);\n this.realtimeService.notifyTab({ type: 'add', payload: newTab });\n return newTab;\n }\n getTab(tabId) {\n return this.chatService.getTab(tabId);\n }\n listTabs(skip, take) {\n return this.chatService.listTabs(skip, take);\n }\n updateTab(tabId, data) {\n return this.chatService.updateTab(tabId, data);\n }\n async deleteTab(tabId) {\n const result = await this.chatService.deleteTab(tabId);\n if (result) {\n this.realtimeService.notifyTab({ type: 'remove', payload: tabId });\n }\n return result;\n }\n async addIncludeRoomToTab(tabId, roomId) {\n const tab = await this.getTab(tabId);\n const room = await this.getRoom(roomId);\n if (tab && room) {\n const updatedRooms = [...tab.includeRooms, room];\n return this.updateTab(tabId, { includeRooms: updatedRooms });\n }\n else {\n throw new Error(`Tab with ID ${tabId} or room with ID ${roomId} not found.`);\n }\n }\n async removeIncludeRoomFromTab(tabId, roomId) {\n const tab = await this.getTab(tabId);\n const room = await this.getRoom(roomId);\n if (tab && room) {\n if (tab.includeRooms.some((r) => r.id === roomId)) {\n const updatedRooms = tab.includeRooms.filter((r) => r.id !== roomId);\n return this.updateTab(tabId, { includeRooms: updatedRooms });\n }\n else {\n throw new Error(`${tabId} tab does not include room with ID ${roomId}.`);\n }\n }\n else {\n throw new Error(`Tab with ID ${tabId} or room with ID ${roomId} not found.`);\n }\n }\n async addExcludeRoomToTab(tabId, roomId) {\n const tab = await this.getTab(tabId);\n const room = await this.getRoom(roomId);\n if (tab && room) {\n const updatedRooms = [...tab.excludeRooms, room];\n return this.updateTab(tabId, { excludeRooms: updatedRooms });\n }\n else {\n throw new Error(`Tab with ID ${tabId} or room with ID ${roomId} not found.`);\n }\n }\n async removeExcludeRoomFromTab(tabId, roomId) {\n const tab = await this.getTab(tabId);\n const room = await this.getRoom(roomId);\n if (tab && room) {\n if (tab.excludeRooms.some((r) => r.id === roomId)) {\n const updatedRooms = tab.excludeRooms.filter((r) => r.id !== roomId);\n return this.updateTab(tabId, { excludeRooms: updatedRooms });\n }\n else {\n throw new Error(`${tabId} tab does not exclude room with ID ${roomId}.`);\n }\n }\n else {\n throw new Error(`Tab with ID ${tabId} or room with ID ${roomId} not found.`);\n }\n }\n async sendMessage(roomId, content, contentType = 'text', replyId, userId) {\n const author = userId ? await this.getUserInfo(userId) : this.getCurrentUser();\n const newMessage = await this.chatService.sendMessage(roomId, content, author, contentType, replyId);\n const formattedMessage = await this.formatMessage(newMessage);\n this.realtimeService.notifyMessage({ type: 'add', payload: formattedMessage });\n // Create a notification when a new message is sent by someone else\n try {\n const currentUser = this.getCurrentUser();\n if (formattedMessage.author.id !== currentUser.id) {\n const room = await this.getRoom(formattedMessage.roomId);\n const notification = convertChatMessageToNotification(room, formattedMessage, currentUser);\n await this.notificationConnectorService.create({\n ...notification,\n id: formattedMessage.id,\n entityName: 'notifications',\n createAt: new Date(),\n });\n }\n }\n catch (error) {\n // Non-blocking: log and continue\n console.error('Failed to create notification for new message', error);\n }\n return formattedMessage;\n }\n async getMessages(roomId, skip, take) {\n const result = await this.chatService.getMessages(roomId, skip, take);\n const formattedMessages = await Promise.all(result.items.map((m) => this.formatMessage(m)));\n return { items: formattedMessages, total: result.total };\n }\n async getMessage(messageId) {\n const message = await this.chatService.getMessage(messageId);\n return this.formatMessage(message);\n }\n async editMessage(messageId, content, contentType = 'text') {\n const currentUser = this.getCurrentUser();\n const updatedMessage = await this.chatService.editMessage(messageId, content, currentUser, contentType);\n this.realtimeService.notifyMessage({ type: 'update', payload: await this.formatMessage(updatedMessage) });\n return updatedMessage;\n }\n async deleteMessage(messageId) {\n const result = await this.chatService.deleteMessage(messageId);\n if (result) {\n this.realtimeService.notifyMessage({ type: 'remove', payload: messageId });\n }\n return result;\n }\n async replyMessage(replyToMessageId, content, contentType = 'text') {\n const originalMessage = await this.chatService.getMessage(replyToMessageId);\n return this.sendMessage(originalMessage.roomId, content, contentType, replyToMessageId);\n }\n async pinMessage(messageId) {\n const currentUser = this.getCurrentUser();\n return this.chatService.pinMessage(messageId, true, currentUser);\n }\n async unpinMessage(messageId) {\n const currentUser = this.getCurrentUser();\n return this.chatService.pinMessage(messageId, false, currentUser);\n }\n async addReaction(messageId, type) {\n const author = this.getCurrentUser();\n const message = await this.chatService.getMessage(messageId);\n const reactions = message.reactions || [];\n if (reactions.some((r) => r.author.id === author.id && r.type === type)) {\n return message;\n }\n const updatedReactions = [...reactions, { author, type }];\n const res = await this.chatService.updateReactions(messageId, updatedReactions, author);\n this.realtimeService.notifyMessage({ type: 'update', payload: await this.formatMessage(res) });\n return res;\n }\n async removeReaction(messageId, type) {\n const author = this.getCurrentUser();\n const message = await this.chatService.getMessage(messageId);\n const updatedReactions = (message.reactions || []).filter((r) => !(r.author.id === author.id && r.type === type));\n const res = await this.chatService.updateReactions(messageId, updatedReactions, author);\n this.realtimeService.notifyMessage({ type: 'update', payload: await this.formatMessage(res) });\n return res;\n }\n async getReactions(messageId) {\n return this.chatService.getReactions(messageId);\n }\n async markSeen(messageId) {\n const author = this.getCurrentUser();\n const message = await this.chatService.getMessage(messageId);\n const seen = message.seen || [];\n if (seen.some((s) => s.author.id === author.id)) {\n return message;\n }\n const updatedSeen = [...seen, { author, type: 'read' }];\n const updatedMessage = await this.chatService.updateSeen(messageId, updatedSeen, author);\n this.realtimeService.notifyRoom({ type: 'seen', payload: updatedMessage.roomId });\n return updatedMessage;\n }\n async getSeenBy(messageId) {\n return this.chatService.getSeenBy(messageId);\n }\n async markRoomSeen(roomId) {\n try {\n if (!roomId) {\n return true;\n }\n const { items } = await this.getMessages(roomId, 0, 99);\n const currentUserId = this.getCurrentUser().id;\n const unreadMessages = items.filter((message) => message.author.id !== currentUserId && !message.seen?.some((s) => s.author.id === currentUserId));\n if (unreadMessages.length > 0) {\n await Promise.all(unreadMessages.map((message) => this.markSeen(message.id)));\n }\n this.realtimeService.notifyRoom({ type: 'seen', payload: roomId });\n return true;\n }\n catch (error) {\n console.error(`Error marking room ${roomId} as seen:`, error);\n return false;\n }\n }\n async startTyping(roomId, userId) {\n const user = userId ? await this.getUserInfo(userId) : this.getCurrentUser();\n this.realtimeService.startTyping(user, roomId);\n }\n async stopTyping(roomId, userId) {\n const user = userId ? await this.getUserInfo(userId) : this.getCurrentUser();\n this.realtimeService.stopTyping(user, roomId);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatManagementService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatManagementService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatManagementService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1tYW5hZ2VtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY2hhdC9jaGF0LW1hbmFnZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVVuRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBTWhELE1BQU0sT0FBTyx3QkFBd0I7SUFIckM7UUFJbUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckMsbUJBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzQyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzdDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDakQsaUNBQTRCLEdBQUcsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUM7S0FvWXpGO0lBbFlTLGNBQWM7UUFDcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIs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QyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFjLEVBQUUsTUFBZTtRQUM5QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzdFLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDOytHQXhZVSx3QkFBd0I7bUhBQXhCLHdCQUF3QixjQUZ2QixNQUFNOzs0RkFFUCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhNTm90aWZpY2F0aW9uQ29ubmVjdG9yU2VydmljZSB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9ub3RpZmljYXRpb24tbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBBWE1Vc2Vyc0VudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvc2VjdXJpdHktbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBBWFBTZXNzaW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vYXV0aCc7XG5pbXBvcnQgeyBBWFBDb250ZW50VHlwZSwgQVhQVXNlclJlZmVyZW5jZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2UsXG4gIEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uLFxuICBBWE1Db252ZXJzYXRpb25TZWVuLFxuICBBWE1SZWFjdGlvblR5cGUsXG4gIEFYTVNlZW5UeXBlLFxufSBmcm9tICcuLi8uLi9lbnRpdGllcy9tZXNzYWdlL21lc3NhZ2UudHlwZXMnO1xuaW1wb3J0IHsgQVhNQ29udmVyc2F0aW9uUm9vbSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3Jvb20vcm9vbS50eXBlcyc7XG5pbXBvcnQgeyBBWE1Db252ZXJzYXRpb25UYWIgfSBmcm9tICcuLi8uLi9lbnRpdGllcy90YWIvdGFiLnR5cGVzJztcbmltcG9ydCB7IGNvbnZlcnRDaGF0TWVzc2FnZVRvTm90aWZpY2F0aW9uIH0gZnJvbSAnLi9jaGF0LW5vdGlmaWNhdGlvbi5oZWxwZXInO1xuaW1wb3J0IHsgQVhNQ2hhdFJlYWx0aW1lU2VydmljZSB9IGZyb20gJy4vY2hhdC1yZWFsdGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTUNoYXRTZXJ2aWNlIH0gZnJvbSAnLi9jaGF0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNQ2hhdE1lc3NhZ2UsIEFYTUNoYXRSb29tIH0gZnJvbSAnLi9jaGF0LnR5cGUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhNQ2hhdE1hbmFnZW1lbnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGF0U2VydmljZSA9IGluamVjdChBWE1DaGF0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHVzZXJzU2VydmljZSA9IGluamVjdChBWE1Vc2Vyc0VudGl0eVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlYWx0aW1lU2VydmljZSA9IGluamVjdChBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBub3RpZmljYXRpb25Db25uZWN0b3JTZXJ2aWNlID0gaW5qZWN0KEFYTU5vdGlmaWNhdGlvbkNvbm5lY3RvclNlcnZpY2UpO1xuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFVzZXIoKTogQVhQVXNlclJlZmVyZW5jZSB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuc2Vzc2lvblNlcnZpY2UudXNlcjtcbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYXV0aGVudGljYXRlZCB1c2VyIGZvdW5kLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHVzZXIuaWQsXG4gICAgICB0eXBlOiAndXNlcicsXG4gICAgICBmdWxsTmFtZTogdXNlci50aXRsZT8udHJpbSgpLFxuICAgICAgdXNlcm5hbWU6IHVzZXIubmFtZT8udHJpbSgpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFVzZXJJbmZvKHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBVc2VyUmVmZXJlbmNlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXJzU2VydmljZS5nZXRPbmUodXNlcklkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB1c2VyLmlkLFxuICAgICAgICB0eXBlOiAndXNlcicsXG4gICAgICAgIGZ1bGxOYW1lOiBgJHt1c2VyLmRpc3BsYXlOYW1lfWAudHJpbSgpLFxuICAgICAgICB1c2VybmFtZTogdXNlci51c2VybmFtZT8udHJpbSgpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGdldCB1c2VyIGluZm8gZm9yIElEOiAke3VzZXJJZH1gLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0eXBlOiAndXNlcicsXG4gICAgICAgIGZ1bGxOYW1lOiAnVW5rbm93biBVc2VyJyxcbiAgICAgICAgdXNlcm5hbWU6ICdVbmtub3duIFVzZXInLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZvcm1hdE1lc3NhZ2UobWVzc2FnZTogQVhNQ29udmVyc2F0aW9uTWVzc2FnZSk6IFByb21pc2U8QVhNQ2hhdE1lc3NhZ2U+IHtcbiAgICBpZiAobWVzc2FnZS5hdXRob3IgJiYgIW1lc3NhZ2UuYXV0aG9yLmZ1bGxOYW1lKSB7XG4gICAgICBjb25zdCBhdXRob3JJbmZvID0gYXdhaXQgdGhpcy5nZXRVc2VySW5mbyhtZXNzYWdlLmF1dGhvci5pZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5tZXNzYWdlLFxuICAgICAgICBhdXRob3I6IGF1dGhvckluZm8sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0VW5yZWFkQ291bnQocm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHsgaXRlbXMgfSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZ2V0TWVzc2FnZXMocm9vbUlkLCAwLCA5OSk7XG4gICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKS5pZDtcblxuICAgIGNvbnN0IHVucmVhZE1lc3NhZ2VzID0gaXRlbXMuZmlsdGVyKChtZXNzYWdlKSA9PiB7XG4gICAgICBjb25zdCBpc0Zyb21DdXJyZW50VXNlciA9IG1lc3NhZ2UuYXV0aG9yLmlkID09PSBjdXJyZW50VXNlcklkO1xuICAgICAgY29uc3QgaXNSZWFkQnlDdXJyZW50VXNlciA9IChtZXNzYWdlLnNlZW4gfHwgW10pLnNvbWUoKHNlZW4pID0+IHNlZW4uYXV0aG9yLmlkID09PSBjdXJyZW50VXNlcklkKTtcbiAgICAgIHJldHVybiAhaXNGcm9tQ3VycmVudFVzZXIgJiYgIWlzUmVhZEJ5Q3VycmVudFVzZXI7XG4gICAgfSk7XG4gICAgcmV0dXJuIHVucmVhZE1lc3NhZ2VzLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZm9ybWF0Um9vbShyb29tOiBBWE1Db252ZXJzYXRpb25Sb29tKTogUHJvbWlzZTxBWE1DaGF0Um9vbT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5nZXRNZXNzYWdlcyhyb29tLmlkLCAwLCAxKTtcbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzLml0ZW1zLmxlbmd0aCA+IDAgPyBtZXNzYWdlcy5pdGVtc1swXSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCB1bnJlYWRDb3VudCA9IGF3YWl0IHRoaXMuZ2V0VW5yZWFkQ291bnQocm9vbS5pZCk7XG4gICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKS5pZDtcblxuICAgIGNvbnN0IG1lbWJlcnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHJvb20ubWVtYmVycy5tYXAoYXN5bmMgKG1lbWJlcikgPT4ge1xuICAgICAgICBpZiAobWVtYmVyLmZ1bGxOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG1lbWJlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRVc2VySW5mbyhtZW1iZXIuaWQpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5yb29tLFxuICAgICAgbGFzdE1lc3NhZ2UsXG4gICAgICB1bnJlYWRDb3VudCxcbiAgICAgIG1lbWJlcnM6IG1lbWJlcnMuZmlsdGVyKChtKSA9PiBtLmlkICE9PSBjdXJyZW50VXNlcklkKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlUm9vbShtZW1iZXJJZHM6IHN0cmluZ1tdLCB0aXRsZT86IHN0cmluZywgYXZhdGFyPzogc3RyaW5nIHwgbnVsbCk6IFByb21pc2U8QVhNQ2hhdFJvb20+IHtcbiAgICBpZiAobWVtYmVySWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCBvbmUgbWVtYmVyIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIHJvb20nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBjb25zdCBhbGxNZW1iZXJJZHMgPSBbLi4ubmV3IFNldChbLi4ubWVtYmVySWRzLCBjdXJyZW50VXNlci5pZF0pXTtcblxuICAgIGNvbnN0IG1lbWJlclJlZmVyZW5jZXMgPSBhd2FpdCBQcm9taXNlLmFsbChhbGxNZW1iZXJJZHMubWFwKChpZCkgPT4gdGhpcy5nZXRVc2VySW5mbyhpZCkpKTtcbiAgICBjb25zdCBuZXdSb29tID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5jcmVhdGVSb29tKG1lbWJlclJlZmVyZW5jZXMsIHRpdGxlLCBjdXJyZW50VXNlciwgYXZhdGFyIHx8IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgbmV3Q2hhdFJvb20gPSBhd2FpdCB0aGlzLmZvcm1hdFJvb20obmV3Um9vbSk7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5Um9vbSh7IHR5cGU6ICdhZGQnLCBwYXlsb2FkOiBuZXdDaGF0Um9vbSB9KTtcbiAgICByZXR1cm4gbmV3Q2hhdFJvb207XG4gIH1cblxuICBhc3luYyBnZXRSb29tKHJvb21JZDogc3RyaW5nKTogUHJvbWlzZTxBWE1DaGF0Um9vbT4ge1xuICAgIGNvbnN0IHJvb20gPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmdldFJvb20ocm9vbUlkKTtcbiAgICBpZiAoIXJvb20pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2hhdCByb29tIHdpdGggSUQgJHtyb29tSWR9IG5vdCBmb3VuZC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0Um9vbShyb29tKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RSb29tcyhza2lwID0gMCwgdGFrZSA9IDEwMCk6IFByb21pc2U8eyBpdGVtczogQVhNQ2hhdFJvb21bXTsgdG90YWw6IG51bWJlciB9PiB7XG4gICAgY29uc3QgeyBpdGVtcyB9ID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5saXN0Um9vbXMoc2tpcCwgdGFrZSk7XG4gICAgY29uc3Qgc2V0dGxlZFJvb21zID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGl0ZW1zLm1hcCgocm9vbSkgPT4gdGhpcy5mb3JtYXRSb29tKHJvb20pKSk7XG5cbiAgICBjb25zdCBjaGF0Um9vbXMgPSBzZXR0bGVkUm9vbXNcbiAgICAgIC5maWx0ZXIoKHJlc3VsdCk6IHJlc3VsdCBpcyBQcm9taXNlRnVsZmlsbGVkUmVzdWx0PEFYTUNoYXRSb29tPiA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHJvb20gZGV0YWlsczonLCByZXN1bHQucmVhc29uKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgICAgLm1hcCgocmVzdWx0KSA9PiByZXN1bHQudmFsdWUpO1xuXG4gICAgcmV0dXJuIHsgaXRlbXM6IGNoYXRSb29tcywgdG90YWw6IGNoYXRSb29tcy5sZW5ndGggfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVJvb20ocm9vbUlkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8QVhNQ29udmVyc2F0aW9uUm9vbT4pOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJvb20+IHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICByZXR1cm4gdGhpcy5jaGF0U2VydmljZS51cGRhdGVSb29tKHJvb21JZCwgZGF0YSwgY3VycmVudFVzZXIpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlUm9vbShyb29tSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZGVsZXRlUm9vbShyb29tSWQpO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeVJvb20oeyB0eXBlOiAncmVtb3ZlJywgcGF5bG9hZDogcm9vbUlkIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgYWRkUGFydGljaXBhbnQocm9vbUlkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25Sb29tPiB7XG4gICAgY29uc3Qgcm9vbSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZ2V0Um9vbShyb29tSWQpO1xuICAgIGlmIChyb29tLm1lbWJlcnMuc29tZSgobSkgPT4gbS5pZCA9PT0gdXNlcklkKSkgcmV0dXJuIHJvb207XG4gICAgY29uc3QgdXNlclJlZiA9IGF3YWl0IHRoaXMuZ2V0VXNlckluZm8odXNlcklkKTtcbiAgICBjb25zdCB1cGRhdGVkTWVtYmVycyA9IFsuLi5yb29tLm1lbWJlcnMsIHVzZXJSZWZdO1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHJldHVybiB0aGlzLmNoYXRTZXJ2aWNlLnVwZGF0ZVJvb20ocm9vbUlkLCB7IG1lbWJlcnM6IHVwZGF0ZWRNZW1iZXJzIH0sIGN1cnJlbnRVc2VyKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBhcnRpY2lwYW50KHJvb21JZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uUm9vbT4ge1xuICAgIGNvbnN0IHJvb20gPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmdldFJvb20ocm9vbUlkKTtcbiAgICBjb25zdCB1cGRhdGVkTWVtYmVycyA9IHJvb20ubWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLmlkICE9PSB1c2VySWQpO1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHJldHVybiB0aGlzLmNoYXRTZXJ2aWNlLnVwZGF0ZVJvb20ocm9vbUlkLCB7IG1lbWJlcnM6IHVwZGF0ZWRNZW1iZXJzIH0sIGN1cnJlbnRVc2VyKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVRhYihkYXRhOiBPbWl0PEFYTUNvbnZlcnNhdGlvblRhYiwgJ2lkJz4pOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblRhYj4ge1xuICAgIGNvbnN0IG5ld1RhYiA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuY3JlYXRlVGFiKGRhdGEpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeVRhYih7IHR5cGU6ICdhZGQnLCBwYXlsb2FkOiBuZXdUYWIgfSk7XG4gICAgcmV0dXJuIG5ld1RhYjtcbiAgfVxuXG4gIGdldFRhYih0YWJJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25UYWI+IHtcbiAgICByZXR1cm4gdGhpcy5jaGF0U2VydmljZS5nZXRUYWIodGFiSWQpO1xuICB9XG5cbiAgbGlzdFRhYnMoc2tpcD86IG51bWJlciwgdGFrZT86IG51bWJlcik6IFByb21pc2U8eyBpdGVtczogQVhNQ29udmVyc2F0aW9uVGFiW107IHRvdGFsOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLmNoYXRTZXJ2aWNlLmxpc3RUYWJzKHNraXAsIHRha2UpO1xuICB9XG5cbiAgdXBkYXRlVGFiKHRhYklkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8QVhNQ29udmVyc2F0aW9uVGFiPik6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uVGFiPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hhdFNlcnZpY2UudXBkYXRlVGFiKHRhYklkLCBkYXRhKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVRhYih0YWJJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5kZWxldGVUYWIodGFiSWQpO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeVRhYih7IHR5cGU6ICdyZW1vdmUnLCBwYXlsb2FkOiB0YWJJZCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIGFkZEluY2x1ZGVSb29tVG9UYWIodGFiSWQ6IHN0cmluZywgcm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblRhYj4ge1xuICAgIGNvbnN0IHRhYiA9IGF3YWl0IHRoaXMuZ2V0VGFiKHRhYklkKTtcbiAgICBjb25zdCByb29tID0gYXdhaXQgdGhpcy5nZXRSb29tKHJvb21JZCk7XG5cbiAgICBpZiAodGFiICYmIHJvb20pIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRSb29tcyA9IFsuLi50YWIuaW5jbHVkZVJvb21zLCByb29tXTtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVRhYih0YWJJZCwgeyBpbmNsdWRlUm9vbXM6IHVwZGF0ZWRSb29tcyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWIgd2l0aCBJRCAke3RhYklkfSBvciByb29tIHdpdGggSUQgJHtyb29tSWR9IG5vdCBmb3VuZC5gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZW1vdmVJbmNsdWRlUm9vbUZyb21UYWIodGFiSWQ6IHN0cmluZywgcm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblRhYj4ge1xuICAgIGNvbnN0IHRhYiA9IGF3YWl0IHRoaXMuZ2V0VGFiKHRhYklkKTtcbiAgICBjb25zdCByb29tID0gYXdhaXQgdGhpcy5nZXRSb29tKHJvb21JZCk7XG5cbiAgICBpZiAodGFiICYmIHJvb20pIHtcbiAgICAgIGlmICh0YWIuaW5jbHVkZVJvb21zLnNvbWUoKHIpID0+IHIuaWQgPT09IHJvb21JZCkpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZFJvb21zID0gdGFiLmluY2x1ZGVSb29tcy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IHJvb21JZCk7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVRhYih0YWJJZCwgeyBpbmNsdWRlUm9vbXM6IHVwZGF0ZWRSb29tcyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0YWJJZH0gdGFiIGRvZXMgbm90IGluY2x1ZGUgcm9vbSB3aXRoIElEICR7cm9vbUlkfS5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWIgd2l0aCBJRCAke3RhYklkfSBvciByb29tIHdpdGggSUQgJHtyb29tSWR9IG5vdCBmb3VuZC5gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRFeGNsdWRlUm9vbVRvVGFiKHRhYklkOiBzdHJpbmcsIHJvb21JZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25UYWI+IHtcbiAgICBjb25zdCB0YWIgPSBhd2FpdCB0aGlzLmdldFRhYih0YWJJZCk7XG4gICAgY29uc3Qgcm9vbSA9IGF3YWl0IHRoaXMuZ2V0Um9vbShyb29tSWQpO1xuXG4gICAgaWYgKHRhYiAmJiByb29tKSB7XG4gICAgICBjb25zdCB1cGRhdGVkUm9vbXMgPSBbLi4udGFiLmV4Y2x1ZGVSb29tcywgcm9vbV07XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVUYWIodGFiSWQsIHsgZXhjbHVkZVJvb21zOiB1cGRhdGVkUm9vbXMgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFiIHdpdGggSUQgJHt0YWJJZH0gb3Igcm9vbSB3aXRoIElEICR7cm9vbUlkfSBub3QgZm91bmQuYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVtb3ZlRXhjbHVkZVJvb21Gcm9tVGFiKHRhYklkOiBzdHJpbmcsIHJvb21JZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25UYWI+IHtcbiAgICBjb25zdCB0YWIgPSBhd2FpdCB0aGlzLmdldFRhYih0YWJJZCk7XG4gICAgY29uc3Qgcm9vbSA9IGF3YWl0IHRoaXMuZ2V0Um9vbShyb29tSWQpO1xuXG4gICAgaWYgKHRhYiAmJiByb29tKSB7XG4gICAgICBpZiAodGFiLmV4Y2x1ZGVSb29tcy5zb21lKChyKSA9PiByLmlkID09PSByb29tSWQpKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRSb29tcyA9IHRhYi5leGNsdWRlUm9vbXMuZmlsdGVyKChyKSA9PiByLmlkICE9PSByb29tSWQpO1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVUYWIodGFiSWQsIHsgZXhjbHVkZVJvb21zOiB1cGRhdGVkUm9vbXMgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGFiSWR9IHRhYiBkb2VzIG5vdCBleGNsdWRlIHJvb20gd2l0aCBJRCAke3Jvb21JZH0uYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFiIHdpdGggSUQgJHt0YWJJZH0gb3Igcm9vbSB3aXRoIElEICR7cm9vbUlkfSBub3QgZm91bmQuYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UoXG4gICAgcm9vbUlkOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIGNvbnRlbnRUeXBlOiBBWFBDb250ZW50VHlwZSA9ICd0ZXh0JyxcbiAgICByZXBseUlkPzogc3RyaW5nLFxuICAgIHVzZXJJZD86IHN0cmluZyxcbiAgKTogUHJvbWlzZTxBWE1DaGF0TWVzc2FnZT4ge1xuICAgIGNvbnN0IGF1dGhvciA9IHVzZXJJZCA/IGF3YWl0IHRoaXMuZ2V0VXNlckluZm8odXNlcklkKSA6IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBjb25zdCBuZXdNZXNzYWdlID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5zZW5kTWVzc2FnZShyb29tSWQsIGNvbnRlbnQsIGF1dGhvciwgY29udGVudFR5cGUsIHJlcGx5SWQpO1xuICAgIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2UgPSBhd2FpdCB0aGlzLmZvcm1hdE1lc3NhZ2UobmV3TWVzc2FnZSk7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5TWVzc2FnZSh7IHR5cGU6ICdhZGQnLCBwYXlsb2FkOiBmb3JtYXR0ZWRNZXNzYWdlIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGEgbm90aWZpY2F0aW9uIHdoZW4gYSBuZXcgbWVzc2FnZSBpcyBzZW50IGJ5IHNvbWVvbmUgZWxzZVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgIGlmIChmb3JtYXR0ZWRNZXNzYWdlLmF1dGhvci5pZCAhPT0gY3VycmVudFVzZXIuaWQpIHtcbiAgICAgICAgY29uc3Qgcm9vbSA9IGF3YWl0IHRoaXMuZ2V0Um9vbShmb3JtYXR0ZWRNZXNzYWdlLnJvb21JZCk7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGNvbnZlcnRDaGF0TWVzc2FnZVRvTm90aWZpY2F0aW9uKHJvb20sIGZvcm1hdHRlZE1lc3NhZ2UsIGN1cnJlbnRVc2VyKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ub3RpZmljYXRpb25Db25uZWN0b3JTZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgICAgLi4ubm90aWZpY2F0aW9uLFxuICAgICAgICAgIGlkOiBmb3JtYXR0ZWRNZXNzYWdlLmlkLFxuICAgICAgICAgIGVudGl0eU5hbWU6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICBjcmVhdGVBdDogbmV3IERhdGUoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIE5vbi1ibG9ja2luZzogbG9nIGFuZCBjb250aW51ZVxuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBub3RpZmljYXRpb24gZm9yIG5ldyBtZXNzYWdlJywgZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZTtcbiAgfVxuXG4gIGFzeW5jIGdldE1lc3NhZ2VzKHJvb21JZDogc3RyaW5nLCBza2lwPzogbnVtYmVyLCB0YWtlPzogbnVtYmVyKTogUHJvbWlzZTx7IGl0ZW1zOiBBWE1DaGF0TWVzc2FnZVtdOyB0b3RhbDogbnVtYmVyIH0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmdldE1lc3NhZ2VzKHJvb21JZCwgc2tpcCwgdGFrZSk7XG4gICAgY29uc3QgZm9ybWF0dGVkTWVzc2FnZXMgPSBhd2FpdCBQcm9taXNlLmFsbChyZXN1bHQuaXRlbXMubWFwKChtKSA9PiB0aGlzLmZvcm1hdE1lc3NhZ2UobSkpKTtcbiAgICByZXR1cm4geyBpdGVtczogZm9ybWF0dGVkTWVzc2FnZXMsIHRvdGFsOiByZXN1bHQudG90YWwgfTtcbiAgfVxuXG4gIGFzeW5jIGdldE1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNoYXRNZXNzYWdlPiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZ2V0TWVzc2FnZShtZXNzYWdlSWQpO1xuICAgIHJldHVybiB0aGlzLmZvcm1hdE1lc3NhZ2UobWVzc2FnZSk7XG4gIH1cblxuICBhc3luYyBlZGl0TWVzc2FnZShcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgY29udGVudFR5cGU6IEFYUENvbnRlbnRUeXBlID0gJ3RleHQnLFxuICApOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2U+IHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBjb25zdCB1cGRhdGVkTWVzc2FnZSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZWRpdE1lc3NhZ2UobWVzc2FnZUlkLCBjb250ZW50LCBjdXJyZW50VXNlciwgY29udGVudFR5cGUpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeU1lc3NhZ2UoeyB0eXBlOiAndXBkYXRlJywgcGF5bG9hZDogYXdhaXQgdGhpcy5mb3JtYXRNZXNzYWdlKHVwZGF0ZWRNZXNzYWdlKSB9KTtcbiAgICByZXR1cm4gdXBkYXRlZE1lc3NhZ2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVNZXNzYWdlKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5kZWxldGVNZXNzYWdlKG1lc3NhZ2VJZCk7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5TWVzc2FnZSh7IHR5cGU6ICdyZW1vdmUnLCBwYXlsb2FkOiBtZXNzYWdlSWQgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyByZXBseU1lc3NhZ2UoXG4gICAgcmVwbHlUb01lc3NhZ2VJZDogc3RyaW5nLFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBjb250ZW50VHlwZTogQVhQQ29udGVudFR5cGUgPSAndGV4dCcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsTWVzc2FnZSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZ2V0TWVzc2FnZShyZXBseVRvTWVzc2FnZUlkKTtcbiAgICByZXR1cm4gdGhpcy5zZW5kTWVzc2FnZShvcmlnaW5hbE1lc3NhZ2Uucm9vbUlkLCBjb250ZW50LCBjb250ZW50VHlwZSwgcmVwbHlUb01lc3NhZ2VJZCk7XG4gIH1cblxuICBhc3luYyBwaW5NZXNzYWdlKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25NZXNzYWdlPiB7XG4gICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgcmV0dXJuIHRoaXMuY2hhdFNlcnZpY2UucGluTWVzc2FnZShtZXNzYWdlSWQsIHRydWUsIGN1cnJlbnRVc2VyKTtcbiAgfVxuXG4gIGFzeW5jIHVucGluTWVzc2FnZShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHJldHVybiB0aGlzLmNoYXRTZXJ2aWNlLnBpbk1lc3NhZ2UobWVzc2FnZUlkLCBmYWxzZSwgY3VycmVudFVzZXIpO1xuICB9XG5cbiAgYXN5bmMgYWRkUmVhY3Rpb24obWVzc2FnZUlkOiBzdHJpbmcsIHR5cGU6IEFYTVJlYWN0aW9uVHlwZSk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5nZXRNZXNzYWdlKG1lc3NhZ2VJZCk7XG4gICAgY29uc3QgcmVhY3Rpb25zID0gbWVzc2FnZS5yZWFjdGlvbnMgfHwgW107XG4gICAgaWYgKHJlYWN0aW9ucy5zb21lKChyKSA9PiByLmF1dGhvci5pZCA9PT0gYXV0aG9yLmlkICYmIHIudHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkUmVhY3Rpb25zOiBBWE1Db252ZXJzYXRpb25SZWFjdGlvbltdID0gWy4uLnJlYWN0aW9ucywgeyBhdXRob3IsIHR5cGUgfV07XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS51cGRhdGVSZWFjdGlvbnMobWVzc2FnZUlkLCB1cGRhdGVkUmVhY3Rpb25zLCBhdXRob3IpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeU1lc3NhZ2UoeyB0eXBlOiAndXBkYXRlJywgcGF5bG9hZDogYXdhaXQgdGhpcy5mb3JtYXRNZXNzYWdlKHJlcykgfSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVJlYWN0aW9uKG1lc3NhZ2VJZDogc3RyaW5nLCB0eXBlOiBBWE1SZWFjdGlvblR5cGUpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2U+IHtcbiAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZ2V0TWVzc2FnZShtZXNzYWdlSWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRSZWFjdGlvbnMgPSAobWVzc2FnZS5yZWFjdGlvbnMgfHwgW10pLmZpbHRlcigocikgPT4gIShyLmF1dGhvci5pZCA9PT0gYXV0aG9yLmlkICYmIHIudHlwZSA9PT0gdHlwZSkpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UudXBkYXRlUmVhY3Rpb25zKG1lc3NhZ2VJZCwgdXBkYXRlZFJlYWN0aW9ucywgYXV0aG9yKTtcbiAgICB0aGlzLnJlYWx0aW1lU2VydmljZS5ub3RpZnlNZXNzYWdlKHsgdHlwZTogJ3VwZGF0ZScsIHBheWxvYWQ6IGF3YWl0IHRoaXMuZm9ybWF0TWVzc2FnZShyZXMpIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBhc3luYyBnZXRSZWFjdGlvbnMobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5jaGF0U2VydmljZS5nZXRSZWFjdGlvbnMobWVzc2FnZUlkKTtcbiAgfVxuXG4gIGFzeW5jIG1hcmtTZWVuKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25NZXNzYWdlPiB7XG4gICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmdldE1lc3NhZ2UobWVzc2FnZUlkKTtcbiAgICBjb25zdCBzZWVuID0gbWVzc2FnZS5zZWVuIHx8IFtdO1xuICAgIGlmIChzZWVuLnNvbWUoKHMpID0+IHMuYXV0aG9yLmlkID09PSBhdXRob3IuaWQpKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlZFNlZW46IEFYTUNvbnZlcnNhdGlvblNlZW5bXSA9IFsuLi5zZWVuLCB7IGF1dGhvciwgdHlwZTogJ3JlYWQnIGFzIEFYTVNlZW5UeXBlIH1dO1xuICAgIGNvbnN0IHVwZGF0ZWRNZXNzYWdlID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS51cGRhdGVTZWVuKG1lc3NhZ2VJZCwgdXBkYXRlZFNlZW4sIGF1dGhvcik7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5Um9vbSh7IHR5cGU6ICdzZWVuJywgcGF5bG9hZDogdXBkYXRlZE1lc3NhZ2Uucm9vbUlkIH0pO1xuICAgIHJldHVybiB1cGRhdGVkTWVzc2FnZTtcbiAgfVxuXG4gIGFzeW5jIGdldFNlZW5CeShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uU2VlbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hhdFNlcnZpY2UuZ2V0U2VlbkJ5KG1lc3NhZ2VJZCk7XG4gIH1cblxuICBhc3luYyBtYXJrUm9vbVNlZW4ocm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFyb29tSWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB7IGl0ZW1zIH0gPSBhd2FpdCB0aGlzLmdldE1lc3NhZ2VzKHJvb21JZCwgMCwgOTkpO1xuICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKS5pZDtcblxuICAgICAgY29uc3QgdW5yZWFkTWVzc2FnZXMgPSBpdGVtcy5maWx0ZXIoXG4gICAgICAgIChtZXNzYWdlKSA9PiBtZXNzYWdlLmF1dGhvci5pZCAhPT0gY3VycmVudFVzZXJJZCAmJiAhbWVzc2FnZS5zZWVuPy5zb21lKChzKSA9PiBzLmF1dGhvci5pZCA9PT0gY3VycmVudFVzZXJJZCksXG4gICAgICApO1xuXG4gICAgICBpZiAodW5yZWFkTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh1bnJlYWRNZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IHRoaXMubWFya1NlZW4obWVzc2FnZS5pZCkpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeVJvb20oeyB0eXBlOiAnc2VlbicsIHBheWxvYWQ6IHJvb21JZCB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBtYXJraW5nIHJvb20gJHtyb29tSWR9IGFzIHNlZW46YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VHlwaW5nKHJvb21JZDogc3RyaW5nLCB1c2VySWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1c2VyID0gdXNlcklkID8gYXdhaXQgdGhpcy5nZXRVc2VySW5mbyh1c2VySWQpIDogdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLnN0YXJ0VHlwaW5nKHVzZXIsIHJvb21JZCk7XG4gIH1cblxuICBhc3luYyBzdG9wVHlwaW5nKHJvb21JZDogc3RyaW5nLCB1c2VySWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1c2VyID0gdXNlcklkID8gYXdhaXQgdGhpcy5nZXRVc2VySW5mbyh1c2VySWQpIDogdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLnN0b3BUeXBpbmcodXNlciwgcm9vbUlkKTtcbiAgfVxufVxuIl19","import { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { AXPUserAvatarComponent } from '@acorex/platform/layout/components';\nimport { AsyncPipe, DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/decorators\";\nimport * as i2 from \"@acorex/components/badge\";\nimport * as i3 from \"@acorex/components/avatar\";\nimport * as i4 from \"@acorex/core/translation\";\nexport class AXMChatItemComponent {\n constructor() {\n // Input\n this.data = input.required(...(ngDevMode ? [{ debugName: \"data\" }] : []));\n this.typing = input(null, ...(ngDevMode ? [{ debugName: \"typing\" }] : []));\n this.lastMessageReaction = input(null, ...(ngDevMode ? [{ debugName: \"lastMessageReaction\" }] : []));\n // Output\n this.pressChatItem = output();\n // Services\n this.sessionService = inject(AXPSessionService);\n this.datePipe = inject(DatePipe);\n this.fileStorage = inject(AXPFileStorageService);\n this.chatName = signal({\n fullName: 'Loading...',\n id: '',\n isPrivate: false,\n }, ...(ngDevMode ? [{ debugName: \"chatName\" }] : []));\n this.#chatInfoEffect = effect(async () => {\n const { members, title, id } = this.data();\n if (members.length > 1) {\n this.chatName.set({\n fullName: title || 'Group Chat',\n id,\n isPrivate: false,\n });\n return;\n }\n const member = members[0];\n if (!member) {\n this.chatName.set({ fullName: 'Unknown User', id: '', isPrivate: true });\n return;\n }\n this.chatName.set({\n fullName: member.fullName || 'Unknown User',\n id: member.id,\n isPrivate: true,\n });\n }, ...(ngDevMode ? [{ debugName: \"#chatInfoEffect\" }] : []));\n // Group avatar preview handling\n this.groupAvatarUrl = signal(null, ...(ngDevMode ? [{ debugName: \"groupAvatarUrl\" }] : []));\n this.groupBlobUrl = signal(null, ...(ngDevMode ? [{ debugName: \"groupBlobUrl\" }] : []));\n this.isGroupAvatarLoading = signal(true, ...(ngDevMode ? [{ debugName: \"isGroupAvatarLoading\" }] : []));\n this.#groupAvatarEffect = effect(async () => {\n const room = this.data();\n // Only for group chats\n if (!room || (room.members?.length ?? 0) <= 1) {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n return;\n }\n const avatar = room.avatar;\n if (!avatar) {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n return;\n }\n if (typeof avatar === 'string') {\n const val = avatar.trim();\n // Resolve stored file identifiers like \"file:<id>\" or bare file IDs\n if (val.startsWith('file:')) {\n try {\n const fileId = val.substring(5);\n const info = await this.fileStorage.getInfo(fileId);\n const url = info?.url ? String(info.url) : null;\n if (url) {\n await this.preloadAndSetGroupAvatar(url);\n }\n else {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n }\n }\n catch {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n }\n return;\n }\n // If it's a full URL or data URI, use as-is; otherwise treat as a fileId\n if (/^(https?:)?\\/\\//i.test(val) || val.startsWith('data:')) {\n await this.preloadAndSetGroupAvatar(val);\n return;\n }\n try {\n const info = await this.fileStorage.getInfo(val);\n const url = info?.url ? String(info.url) : null;\n if (url) {\n await this.preloadAndSetGroupAvatar(url);\n }\n else {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n }\n }\n catch {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n }\n return;\n }\n const source = avatar.source;\n if (!source) {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n return;\n }\n switch (source.kind) {\n case 'url':\n await this.preloadAndSetGroupAvatar(String(source.value));\n return;\n case 'blob': {\n const prev = this.groupBlobUrl();\n if (prev)\n URL.revokeObjectURL(prev);\n const blob = source.value;\n const next = URL.createObjectURL(blob);\n this.groupBlobUrl.set(next);\n await this.preloadAndSetGroupAvatar(next);\n return;\n }\n case 'fileId': {\n try {\n const info = await this.fileStorage.getInfo(String(source.value));\n const url = info?.url ? String(info.url) : null;\n if (url) {\n await this.preloadAndSetGroupAvatar(url);\n }\n else {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n }\n }\n catch {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n }\n return;\n }\n default:\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n return;\n }\n }, ...(ngDevMode ? [{ debugName: \"#groupAvatarEffect\" }] : []));\n this.formattedLastMessageDate = computed(() => {\n const lastMessage = this.data().lastMessage;\n const createdAt = lastMessage?.auditInfo?.created?.at;\n if (!createdAt) {\n return '';\n }\n const messageDate = new Date(createdAt);\n const today = new Date();\n const isToday = messageDate.getFullYear() === today.getFullYear() &&\n messageDate.getMonth() === today.getMonth() &&\n messageDate.getDate() === today.getDate();\n if (isToday) {\n return this.datePipe.transform(messageDate, 'shortTime');\n }\n else {\n return this.datePipe.transform(messageDate, 'mediumDate');\n }\n }, ...(ngDevMode ? [{ debugName: \"formattedLastMessageDate\" }] : []));\n this.lastMessage = computed(() => {\n const message = this.data().lastMessage;\n if (!message)\n return { content: 'No messages yet', contentType: 'text', reactions: [] };\n return {\n content: message.message.contentType === 'text' ? message.message.content : message.message.contentType,\n contentType: message.message.contentType,\n reactions: message.reactions || [],\n author: message.author,\n };\n }, ...(ngDevMode ? [{ debugName: \"lastMessage\" }] : []));\n this.hasUnread = computed(() => {\n return this.data().unreadCount > 0;\n }, ...(ngDevMode ? [{ debugName: \"hasUnread\" }] : []));\n this.unreadCount = computed(() => {\n return this.data().unreadCount.toString();\n }, ...(ngDevMode ? [{ debugName: \"unreadCount\" }] : []));\n }\n #chatInfoEffect;\n async preloadAndSetGroupAvatar(url) {\n this.isGroupAvatarLoading.set(true);\n await new Promise((resolve) => {\n const img = new Image();\n img.onload = () => {\n this.groupAvatarUrl.set(url);\n this.isGroupAvatarLoading.set(false);\n resolve();\n };\n img.onerror = () => {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n resolve();\n };\n img.src = url;\n });\n }\n #groupAvatarEffect;\n ngOnDestroy() {\n const prev = this.groupBlobUrl();\n if (prev)\n URL.revokeObjectURL(prev);\n }\n onPressChatItem(id) {\n this.pressChatItem.emit(id);\n }\n messageSeenStatus() {\n const lastMessage = this.data().lastMessage;\n if (!lastMessage)\n return '';\n // Check if current user is the author\n if (this.sessionService.user?.id === lastMessage.author?.id) {\n // Check if message has been seen by anyone\n return lastMessage.seen.length > 0 ? 'ax-icon-dobble-check' : 'ax-icon-check';\n }\n return '';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMChatItemComponent, isStandalone: true, selector: \"axm-chat-item\", inputs: { data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: true, transformFunction: null }, typing: { classPropertyName: \"typing\", publicName: \"typing\", isSignal: true, isRequired: false, transformFunction: null }, lastMessageReaction: { classPropertyName: \"lastMessageReaction\", publicName: \"lastMessageReaction\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pressChatItem: \"pressChatItem\" }, ngImport: i0, template: \"<div\\n [id]=\\\"data().id\\\"\\n class=\\\"ax-cursor-pointer ax-p-4 ax-flex ax-items-center ax-justify-between ax-gap-4 ax-border-b ax-border-divider\\\"\\n (click)=\\\"onPressChatItem(data().id)\\\"\\n>\\n <!-- Avatar and User Info Section -->\\n <div class=\\\"ax-flex ax-min-w-0 ax-gap-4 ax-flex-1\\\">\\n <!-- Avatar with Online Status -->\\n <div class=\\\"ax-flex-shrink-0\\\">\\n @if (chatName().isPrivate) {\\n <axp-user-avatar [size]=\\\"48\\\" [userId]=\\\"chatName().id\\\"></axp-user-avatar>\\n } @else {\\n @if (isGroupAvatarLoading()) {\\n <div class=\\\"ax-w-12 ax-h-12 ax-rounded-full ax-flex ax-items-center ax-justify-center ax-bg-surface\\\">\\n <i class=\\\"fa-solid fa-spinner-third fa-spin\\\"></i>\\n </div>\\n } @else if (groupAvatarUrl()) {\\n <div\\n class=\\\"ax-w-12 ax-h-12 ax-rounded-full ax-bg-center ax-bg-cover\\\"\\n [style.backgroundImage]=\\\"'url(' + groupAvatarUrl() + ')'\\\"\\n ></div>\\n } @else {\\n <ax-avatar [size]=\\\"48\\\">\\n <ax-text class=\\\"ax-primary-lightest\\\">\\n <small class=\\\"ax-text-xs ax-font-semibold fas fa-users\\\"></small>\\n </ax-text>\\n </ax-avatar>\\n }\\n }\\n <!--Temp-->\\n </div>\\n\\n <!-- User Details and Last Message -->\\n <div class=\\\"ax-flex ax-flex-col ax-min-w-0 ax-flex-1 ax-gap-1\\\">\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2\\\">\\n <p class=\\\"ax-font-semibold ax-text-on-surface ax-truncate ax-py-1\\\" [title]=\\\"chatName().fullName\\\">\\n {{ chatName().fullName }}\\n </p>\\n <div class=\\\"ax-flex ax-items-center ax-gap-1\\\">\\n @if (messageSeenStatus()) {\\n <ax-icon class=\\\"ax-icon ax-text-success ax-size-5\\\" [class]=\\\"messageSeenStatus()\\\"></ax-icon>\\n }\\n @if (this.data().lastMessage) {\\n <span class=\\\"ax-text-xs ax-whitespace-nowrap\\\">\\n {{ formattedLastMessageDate() }}\\n </span>\\n }\\n </div>\\n </div>\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-mt-1 ax-overflow-hidden\\\">\\n @if (typing()?.isTyping) {\\n <div class=\\\"ax-pb-1 ax-flex ax-justify-center ax-items-end ax-gap-1\\\">\\n <span class=\\\"ax-text-on-surface-light ax-font-semibold ax-capitalize ax-whitespace-nowrap ax-text-sm\\\">\\n @if (!chatName().isPrivate) {\\n {{ typing()?.user }}\\n }\\n {{ '@conversation:is-typing' | translate | async }}\\n </span>\\n <div class=\\\"typing-indicator\\\">\\n <span></span>\\n <span></span>\\n <span></span>\\n </div>\\n </div>\\n } @else {\\n <div class=\\\"ax-flex ax-items-center ax-gap-2 ax-text-sm ax-shrink ax-min-w-0\\\">\\n @if ((lastMessage().author?.fullName || lastMessage().author?.username) && !chatName().isPrivate) {\\n <span class=\\\"ax-text-on-surface-light ax-font-semibold ax-capitalize ax-whitespace-nowrap\\\">\\n {{ (lastMessage().author?.fullName || lastMessage().author?.username) + ': ' }}\\n </span>\\n }\\n @switch (lastMessage().contentType) {\\n @case ('image') {\\n <i class=\\\"fa-regular fa-image\\\"></i>\\n }\\n @case ('video') {\\n <i class=\\\"fa-regular fa-video\\\"></i>\\n }\\n @case ('file') {\\n <i class=\\\"fa-regular fa-file\\\"></i>\\n }\\n @case ('audio') {\\n <i class=\\\"fa-regular fa-microphone\\\"></i>\\n }\\n @case ('link') {\\n <i class=\\\"fa-regular fa-link\\\"></i>\\n }\\n }\\n\\n <span class=\\\"ax-truncate ax-capitalize\\\">\\n {{ lastMessage().content }}\\n </span>\\n </div>\\n }\\n <div class=\\\"ax-flex ax-items-center ax-gap-2\\\">\\n @if (hasUnread()) {\\n <ax-badge color=\\\"primary\\\" [text]=\\\"unreadCount()\\\" class=\\\"ax-flex-shrink-0 ax-ml-auto\\\"></ax-badge>\\n }\\n <!-- @if (lastMessageReaction()) {\\n <div class=\\\"ax-flex ax-items-center ax-gap-1 ax-bg-surface ax-rounded-full ax-p-1 ax-px-2\\\">\\n <span class=\\\"ax-text-sm\\\">{{ lastMessageReaction() }}</span>\\n <span class=\\\"ax-text-xs\\\">{{ lastMessage().reactions.length }}</span>\\n </div>\\n } -->\\n </div>\\n </div>\\n </div>\\n </div>\\n</div>\\n\", styles: [\":host{display:block;width:100%}.typing-indicator{display:flex;align-items:center;padding-bottom:.4rem}.typing-indicator span{height:4px;width:4px;margin:0 1px;background-color:#9e9ea1;border-radius:50%;display:inline-block;animation:bounce 1.4s infinite ease-in-out both}.typing-indicator span:nth-child(1){animation-delay:-.32s}.typing-indicator span:nth-child(2){animation-delay:-.16s}@keyframes bounce{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}\\n\"], dependencies: [{ kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i1.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i1.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"component\", type: i2.AXBadgeComponent, selector: \"ax-badge\", inputs: [\"color\", \"look\", \"text\"] }, { kind: \"component\", type: AXPUserAvatarComponent, selector: \"axp-user-avatar\", inputs: [\"size\", \"userId\"] }, { kind: \"ngmodule\", type: AXAvatarModule }, { kind: \"component\", type: i3.AXAvatarComponent, selector: \"ax-avatar\", inputs: [\"color\", \"size\", \"shape\", \"look\"], outputs: [\"sizeChange\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"pipe\", type: i4.AXTranslatorPipe, name: \"translate\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatItemComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-chat-item', changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n AXDecoratorModule,\n AXBadgeModule,\n AXPUserAvatarComponent,\n AXAvatarModule,\n AXDecoratorModule,\n AXTranslationModule,\n AsyncPipe,\n ], template: \"<div\\n [id]=\\\"data().id\\\"\\n class=\\\"ax-cursor-pointer ax-p-4 ax-flex ax-items-center ax-justify-between ax-gap-4 ax-border-b ax-border-divider\\\"\\n (click)=\\\"onPressChatItem(data().id)\\\"\\n>\\n <!-- Avatar and User Info Section -->\\n <div class=\\\"ax-flex ax-min-w-0 ax-gap-4 ax-flex-1\\\">\\n <!-- Avatar with Online Status -->\\n <div class=\\\"ax-flex-shrink-0\\\">\\n @if (chatName().isPrivate) {\\n <axp-user-avatar [size]=\\\"48\\\" [userId]=\\\"chatName().id\\\"></axp-user-avatar>\\n } @else {\\n @if (isGroupAvatarLoading()) {\\n <div class=\\\"ax-w-12 ax-h-12 ax-rounded-full ax-flex ax-items-center ax-justify-center ax-bg-surface\\\">\\n <i class=\\\"fa-solid fa-spinner-third fa-spin\\\"></i>\\n </div>\\n } @else if (groupAvatarUrl()) {\\n <div\\n class=\\\"ax-w-12 ax-h-12 ax-rounded-full ax-bg-center ax-bg-cover\\\"\\n [style.backgroundImage]=\\\"'url(' + groupAvatarUrl() + ')'\\\"\\n ></div>\\n } @else {\\n <ax-avatar [size]=\\\"48\\\">\\n <ax-text class=\\\"ax-primary-lightest\\\">\\n <small class=\\\"ax-text-xs ax-font-semibold fas fa-users\\\"></small>\\n </ax-text>\\n </ax-avatar>\\n }\\n }\\n <!--Temp-->\\n </div>\\n\\n <!-- User Details and Last Message -->\\n <div class=\\\"ax-flex ax-flex-col ax-min-w-0 ax-flex-1 ax-gap-1\\\">\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2\\\">\\n <p class=\\\"ax-font-semibold ax-text-on-surface ax-truncate ax-py-1\\\" [title]=\\\"chatName().fullName\\\">\\n {{ chatName().fullName }}\\n </p>\\n <div class=\\\"ax-flex ax-items-center ax-gap-1\\\">\\n @if (messageSeenStatus()) {\\n <ax-icon class=\\\"ax-icon ax-text-success ax-size-5\\\" [class]=\\\"messageSeenStatus()\\\"></ax-icon>\\n }\\n @if (this.data().lastMessage) {\\n <span class=\\\"ax-text-xs ax-whitespace-nowrap\\\">\\n {{ formattedLastMessageDate() }}\\n </span>\\n }\\n </div>\\n </div>\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-mt-1 ax-overflow-hidden\\\">\\n @if (typing()?.isTyping) {\\n <div class=\\\"ax-pb-1 ax-flex ax-justify-center ax-items-end ax-gap-1\\\">\\n <span class=\\\"ax-text-on-surface-light ax-font-semibold ax-capitalize ax-whitespace-nowrap ax-text-sm\\\">\\n @if (!chatName().isPrivate) {\\n {{ typing()?.user }}\\n }\\n {{ '@conversation:is-typing' | translate | async }}\\n </span>\\n <div class=\\\"typing-indicator\\\">\\n <span></span>\\n <span></span>\\n <span></span>\\n </div>\\n </div>\\n } @else {\\n <div class=\\\"ax-flex ax-items-center ax-gap-2 ax-text-sm ax-shrink ax-min-w-0\\\">\\n @if ((lastMessage().author?.fullName || lastMessage().author?.username) && !chatName().isPrivate) {\\n <span class=\\\"ax-text-on-surface-light ax-font-semibold ax-capitalize ax-whitespace-nowrap\\\">\\n {{ (lastMessage().author?.fullName || lastMessage().author?.username) + ': ' }}\\n </span>\\n }\\n @switch (lastMessage().contentType) {\\n @case ('image') {\\n <i class=\\\"fa-regular fa-image\\\"></i>\\n }\\n @case ('video') {\\n <i class=\\\"fa-regular fa-video\\\"></i>\\n }\\n @case ('file') {\\n <i class=\\\"fa-regular fa-file\\\"></i>\\n }\\n @case ('audio') {\\n <i class=\\\"fa-regular fa-microphone\\\"></i>\\n }\\n @case ('link') {\\n <i class=\\\"fa-regular fa-link\\\"></i>\\n }\\n }\\n\\n <span class=\\\"ax-truncate ax-capitalize\\\">\\n {{ lastMessage().content }}\\n </span>\\n </div>\\n }\\n <div class=\\\"ax-flex ax-items-center ax-gap-2\\\">\\n @if (hasUnread()) {\\n <ax-badge color=\\\"primary\\\" [text]=\\\"unreadCount()\\\" class=\\\"ax-flex-shrink-0 ax-ml-auto\\\"></ax-badge>\\n }\\n <!-- @if (lastMessageReaction()) {\\n <div class=\\\"ax-flex ax-items-center ax-gap-1 ax-bg-surface ax-rounded-full ax-p-1 ax-px-2\\\">\\n <span class=\\\"ax-text-sm\\\">{{ lastMessageReaction() }}</span>\\n <span class=\\\"ax-text-xs\\\">{{ lastMessage().reactions.length }}</span>\\n </div>\\n } -->\\n </div>\\n </div>\\n </div>\\n </div>\\n</div>\\n\", styles: [\":host{display:block;width:100%}.typing-indicator{display:flex;align-items:center;padding-bottom:.4rem}.typing-indicator span{height:4px;width:4px;margin:0 1px;background-color:#9e9ea1;border-radius:50%;display:inline-block;animation:bounce 1.4s infinite ease-in-out both}.typing-indicator span:nth-child(1){animation-delay:-.32s}.typing-indicator span:nth-child(2){animation-delay:-.16s}@keyframes bounce{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}\\n\"] }]\n }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: \"data\", required: true }] }], typing: [{ type: i0.Input, args: [{ isSignal: true, alias: \"typing\", required: false }] }], lastMessageReaction: [{ type: i0.Input, args: [{ isSignal: true, alias: \"lastMessageReaction\", required: false }] }], pressChatItem: [{ type: i0.Output, args: [\"pressChatItem\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jaGF0L2NvbXBvbmVudHMvY2hhdC1pdGVtL2NoYXQtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY2hhdC9jb21wb25lbnRzL2NoYXQtaXRlbS9jaGF0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQWtCcEgsTUFBTSxPQUFPLG9CQUFvQjtJQWZqQztRQWdCRSxRQUFRO1FBQ1IsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLCtD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QUM7WUFDNUQsMkNBQTJDO1lBQzNDLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQ2hGLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7K0dBL05VLG9CQUFvQjttR0FBcEIsb0JBQW9CLG1oQkMzQmpDLHEvSUE2R0EscWdCRDNGSSxpQkFBaUIsc1ZBQ2pCLGFBQWEsMElBQ2Isc0JBQXNCLHVGQUN0QixjQUFjLDZLQUVkLG1CQUFtQiwwRkFDbkIsU0FBUzs7NEZBR0Esb0JBQW9CO2tCQWZoQyxTQUFTOytCQUNFLGVBQWUsbUJBR1IsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2Isc0JBQXNCO3dCQUN0QixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixTQUFTO3FCQUNWIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhBdmF0YXJNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYXZhdGFyJztcbmltcG9ydCB7IEFYQmFkZ2VNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYUFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUEZpbGVTdG9yYWdlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUEZpbGVMaXN0SXRlbSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBVc2VyQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWE1DaGF0Um9vbSB9IGZyb20gJy4uLy4uL2NoYXQudHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4bS1jaGF0LWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhdC1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhdC1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhCYWRnZU1vZHVsZSxcbiAgICBBWFBVc2VyQXZhdGFyQ29tcG9uZW50LFxuICAgIEFYQXZhdGFyTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1DaGF0SXRlbUNvbXBvbmVudCB7XG4gIC8vIElucHV0XG4gIGRhdGEgPSBpbnB1dC5yZXF1aXJlZDxBWE1DaGF0Um9vbT4oKTtcbiAgdHlwaW5nID0gaW5wdXQ8eyB1c2VyOiBzdHJpbmc7IGlzVHlwaW5nOiBib29sZWFuIH0gfCBudWxsPihudWxsKTtcbiAgbGFzdE1lc3NhZ2VSZWFjdGlvbiA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIE91dHB1dFxuICBwcmVzc0NoYXRJdGVtID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICAvLyBTZXJ2aWNlc1xuICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KEFYUFNlc3Npb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkYXRlUGlwZSA9IGluamVjdChEYXRlUGlwZSk7XG4gIHByaXZhdGUgZmlsZVN0b3JhZ2UgPSBpbmplY3QoQVhQRmlsZVN0b3JhZ2VTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgY2hhdE5hbWUgPSBzaWduYWw8eyBmdWxsTmFtZTogc3RyaW5nOyBpZDogc3RyaW5nOyBpc1ByaXZhdGU6IGJvb2xlYW4gfT4oe1xuICAgIGZ1bGxOYW1lOiAnTG9hZGluZy4uLicsXG4gICAgaWQ6ICcnLFxuICAgIGlzUHJpdmF0ZTogZmFsc2UsXG4gIH0pO1xuXG4gICNjaGF0SW5mb0VmZmVjdCA9IGVmZmVjdChhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBtZW1iZXJzLCB0aXRsZSwgaWQgfSA9IHRoaXMuZGF0YSgpO1xuXG4gICAgaWYgKG1lbWJlcnMubGVuZ3RoID4gMSkge1xuICAgICAgdGhpcy5jaGF0TmFtZS5zZXQoe1xuICAgICAgICBmdWxsTmFtZTogdGl0bGUgfHwgJ0dyb3VwIENoYXQnLFxuICAgICAgICBpZCxcbiAgICAgICAgaXNQcml2YXRlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbWJlciA9IG1lbWJlcnNbMF07XG4gICAgaWYgKCFtZW1iZXIpIHtcbiAgICAgIHRoaXMuY2hhdE5hbWUuc2V0KHsgZnVsbE5hbWU6ICdVbmtub3duIFVzZXInLCBpZDogJycsIGlzUHJpdmF0ZTogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNoYXROYW1lLnNldCh7XG4gICAgICBmdWxsTmFtZTogbWVtYmVyLmZ1bGxOYW1lIHx8ICdVbmtub3duIFVzZXInLFxuICAgICAgaWQ6IG1lbWJlci5pZCxcbiAgICAgIGlzUHJpdmF0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gR3JvdXAgYXZhdGFyIHByZXZpZXcgaGFuZGxpbmdcbiAgcHJvdGVjdGVkIGdyb3VwQXZhdGFyVXJsID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIGdyb3VwQmxvYlVybCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIGlzR3JvdXBBdmF0YXJMb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuXG4gIHByaXZhdGUgYXN5bmMgcHJlbG9hZEFuZFNldEdyb3VwQXZhdGFyKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5ncm91cEF2YXRhclVybC5zZXQodXJsKTtcbiAgICAgICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JvdXBBdmF0YXJVcmwuc2V0KG51bGwpO1xuICAgICAgICB0aGlzLmlzR3JvdXBBdmF0YXJMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG4gICAgICBpbWcuc3JjID0gdXJsO1xuICAgIH0pO1xuICB9XG5cbiAgI2dyb3VwQXZhdGFyRWZmZWN0ID0gZWZmZWN0KGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByb29tID0gdGhpcy5kYXRhKCk7XG4gICAgLy8gT25seSBmb3IgZ3JvdXAgY2hhdHNcbiAgICBpZiAoIXJvb20gfHwgKHJvb20ubWVtYmVycz8ubGVuZ3RoID8/IDApIDw9IDEpIHtcbiAgICAgIHRoaXMuZ3JvdXBBdmF0YXJVcmwuc2V0KG51bGwpO1xuICAgICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhdmF0YXIgPSAocm9vbSBhcyBhbnkpLmF2YXRhciBhcyBzdHJpbmcgfCBBWFBGaWxlTGlzdEl0ZW0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGlmICghYXZhdGFyKSB7XG4gICAgICB0aGlzLmdyb3VwQXZhdGFyVXJsLnNldChudWxsKTtcbiAgICAgIHRoaXMuaXNHcm91cEF2YXRhckxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhdmF0YXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB2YWwgPSBhdmF0YXIudHJpbSgpO1xuICAgICAgLy8gUmVzb2x2ZSBzdG9yZWQgZmlsZSBpZGVudGlmaWVycyBsaWtlIFwiZmlsZTo8aWQ+XCIgb3IgYmFyZSBmaWxlIElEc1xuICAgICAgaWYgKHZhbC5zdGFydHNXaXRoKCdmaWxlOicpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZmlsZUlkID0gdmFsLnN1YnN0cmluZyg1KTtcbiAgICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgdGhpcy5maWxlU3RvcmFnZS5nZXRJbmZvKGZpbGVJZCk7XG4gICAgICAgICAgY29uc3QgdXJsID0gaW5mbz8udXJsID8gU3RyaW5nKGluZm8udXJsKSA6IG51bGw7XG4gICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcmVsb2FkQW5kU2V0R3JvdXBBdmF0YXIodXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncm91cEF2YXRhclVybC5zZXQobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmlzR3JvdXBBdmF0YXJMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB0aGlzLmdyb3VwQXZhdGFyVXJsLnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLmlzR3JvdXBBdmF0YXJMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gSWYgaXQncyBhIGZ1bGwgVVJMIG9yIGRhdGEgVVJJLCB1c2UgYXMtaXM7IG90aGVyd2lzZSB0cmVhdCBhcyBhIGZpbGVJZFxuICAgICAgaWYgKC9eKGh0dHBzPzopP1xcL1xcLy9pLnRlc3QodmFsKSB8fCB2YWwuc3RhcnRzV2l0aCgnZGF0YTonKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnByZWxvYWRBbmRTZXRHcm91cEF2YXRhcih2YWwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgdGhpcy5maWxlU3RvcmFnZS5nZXRJbmZvKHZhbCk7XG4gICAgICAgIGNvbnN0IHVybCA9IGluZm8/LnVybCA/IFN0cmluZyhpbmZvLnVybCkgOiBudWxsO1xuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcmVsb2FkQW5kU2V0R3JvdXBBdmF0YXIodXJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmdyb3VwQXZhdGFyVXJsLnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLmlzR3JvdXBBdmF0YXJMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aGlzLmdyb3VwQXZhdGFyVXJsLnNldChudWxsKTtcbiAgICAgICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzb3VyY2UgPSBhdmF0YXIuc291cmNlIGFzIHsga2luZDogc3RyaW5nOyB2YWx1ZTogYW55IH0gfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHRoaXMuZ3JvdXBBdmF0YXJVcmwuc2V0KG51bGwpO1xuICAgICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKHNvdXJjZS5raW5kKSB7XG4gICAgICBjYXNlICd1cmwnOlxuICAgICAgICBhd2FpdCB0aGlzLnByZWxvYWRBbmRTZXRHcm91cEF2YXRhcihTdHJpbmcoc291cmNlLnZhbHVlKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ2Jsb2InOiB7XG4gICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmdyb3VwQmxvYlVybCgpO1xuICAgICAgICBpZiAocHJldikgVVJMLnJldm9rZU9iamVjdFVSTChwcmV2KTtcbiAgICAgICAgY29uc3QgYmxvYiA9IHNvdXJjZS52YWx1ZSBhcyBCbG9iO1xuICAgICAgICBjb25zdCBuZXh0ID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgdGhpcy5ncm91cEJsb2JVcmwuc2V0KG5leHQpO1xuICAgICAgICBhd2FpdCB0aGlzLnByZWxvYWRBbmRTZXRHcm91cEF2YXRhcihuZXh0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnZmlsZUlkJzoge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCB0aGlzLmZpbGVTdG9yYWdlLmdldEluZm8oU3RyaW5nKHNvdXJjZS52YWx1ZSkpO1xuICAgICAgICAgIGNvbnN0IHVybCA9IGluZm8/LnVybCA/IFN0cmluZyhpbmZvLnVybCkgOiBudWxsO1xuICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJlbG9hZEFuZFNldEdyb3VwQXZhdGFyKHVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBBdmF0YXJVcmwuc2V0KG51bGwpO1xuICAgICAgICAgICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgdGhpcy5ncm91cEF2YXRhclVybC5zZXQobnVsbCk7XG4gICAgICAgICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZ3JvdXBBdmF0YXJVcmwuc2V0KG51bGwpO1xuICAgICAgICB0aGlzLmlzR3JvdXBBdmF0YXJMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLmdyb3VwQmxvYlVybCgpO1xuICAgIGlmIChwcmV2KSBVUkwucmV2b2tlT2JqZWN0VVJMKHByZXYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZvcm1hdHRlZExhc3RNZXNzYWdlRGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IHRoaXMuZGF0YSgpLmxhc3RNZXNzYWdlO1xuICAgIGNvbnN0IGNyZWF0ZWRBdCA9IGxhc3RNZXNzYWdlPy5hdWRpdEluZm8/LmNyZWF0ZWQ/LmF0IGFzIERhdGUgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFjcmVhdGVkQXQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZURhdGUgPSBuZXcgRGF0ZShjcmVhdGVkQXQpO1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBpc1RvZGF5ID1cbiAgICAgIG1lc3NhZ2VEYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRvZGF5LmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgIG1lc3NhZ2VEYXRlLmdldE1vbnRoKCkgPT09IHRvZGF5LmdldE1vbnRoKCkgJiZcbiAgICAgIG1lc3NhZ2VEYXRlLmdldERhdGUoKSA9PT0gdG9kYXkuZ2V0RGF0ZSgpO1xuXG4gICAgaWYgKGlzVG9kYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShtZXNzYWdlRGF0ZSwgJ3Nob3J0VGltZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obWVzc2FnZURhdGUsICdtZWRpdW1EYXRlJyk7XG4gICAgfVxuICB9KTtcblxuICBwcm90ZWN0ZWQgbGFzdE1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuZGF0YSgpLmxhc3RNZXNzYWdlO1xuICAgIGlmICghbWVzc2FnZSkgcmV0dXJuIHsgY29udGVudDogJ05vIG1lc3NhZ2VzIHlldCcsIGNvbnRlbnRUeXBlOiAndGV4dCcsIHJlYWN0aW9uczogW10gfTtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnRUeXBlID09PSAndGV4dCcgPyBtZXNzYWdlLm1lc3NhZ2UuY29udGVudCA6IG1lc3NhZ2UubWVzc2FnZS5jb250ZW50VHlwZSxcbiAgICAgIGNvbnRlbnRUeXBlOiBtZXNzYWdlLm1lc3NhZ2UuY29udGVudFR5cGUsXG4gICAgICByZWFjdGlvbnM6IG1lc3NhZ2UucmVhY3Rpb25zIHx8IFtdLFxuICAgICAgYXV0aG9yOiBtZXNzYWdlLmF1dGhvcixcbiAgICB9O1xuICB9KTtcblxuICBwcm90ZWN0ZWQgaGFzVW5yZWFkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEoKS51bnJlYWRDb3VudCA+IDA7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCB1bnJlYWRDb3VudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhKCkudW5yZWFkQ291bnQudG9TdHJpbmcoKTtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIG9uUHJlc3NDaGF0SXRlbShpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5wcmVzc0NoYXRJdGVtLmVtaXQoaWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1lc3NhZ2VTZWVuU3RhdHVzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSB0aGlzLmRhdGEoKS5sYXN0TWVzc2FnZTtcbiAgICBpZiAoIWxhc3RNZXNzYWdlKSByZXR1cm4gJyc7XG5cbiAgICAvLyBDaGVjayBpZiBjdXJyZW50IHVzZXIgaXMgdGhlIGF1dGhvclxuICAgIGlmICh0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI/LmlkID09PSBsYXN0TWVzc2FnZS5hdXRob3I/LmlkKSB7XG4gICAgICAvLyBDaGVjayBpZiBtZXNzYWdlIGhhcyBiZWVuIHNlZW4gYnkgYW55b25lXG4gICAgICByZXR1cm4gbGFzdE1lc3NhZ2Uuc2Vlbi5sZW5ndGggPiAwID8gJ2F4LWljb24tZG9iYmxlLWNoZWNrJyA6ICdheC1pY29uLWNoZWNrJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cbiIsIjxkaXZcbiAgW2lkXT1cImRhdGEoKS5pZFwiXG4gIGNsYXNzPVwiYXgtY3Vyc29yLXBvaW50ZXIgYXgtcC00IGF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktYmV0d2VlbiBheC1nYXAtNCBheC1ib3JkZXItYiBheC1ib3JkZXItZGl2aWRlclwiXG4gIChjbGljayk9XCJvblByZXNzQ2hhdEl0ZW0oZGF0YSgpLmlkKVwiXG4+XG4gIDwhLS0gQXZhdGFyIGFuZCBVc2VyIEluZm8gU2VjdGlvbiAtLT5cbiAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtbWluLXctMCBheC1nYXAtNCBheC1mbGV4LTFcIj5cbiAgICA8IS0tIEF2YXRhciB3aXRoIE9ubGluZSBTdGF0dXMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImF4LWZsZXgtc2hyaW5rLTBcIj5cbiAgICAgIEBpZiAoY2hhdE5hbWUoKS5pc1ByaXZhdGUpIHtcbiAgICAgICAgPGF4cC11c2VyLWF2YXRhciBbc2l6ZV09XCI0OFwiIFt1c2VySWRdPVwiY2hhdE5hbWUoKS5pZFwiPjwvYXhwLXVzZXItYXZhdGFyPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBpZiAoaXNHcm91cEF2YXRhckxvYWRpbmcoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC13LTEyIGF4LWgtMTIgYXgtcm91bmRlZC1mdWxsIGF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktY2VudGVyIGF4LWJnLXN1cmZhY2VcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtc3Bpbm5lci10aGlyZCBmYS1zcGluXCI+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIGlmIChncm91cEF2YXRhclVybCgpKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJheC13LTEyIGF4LWgtMTIgYXgtcm91bmRlZC1mdWxsIGF4LWJnLWNlbnRlciBheC1iZy1jb3ZlclwiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZEltYWdlXT1cIid1cmwoJyArIGdyb3VwQXZhdGFyVXJsKCkgKyAnKSdcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGF4LWF2YXRhciBbc2l6ZV09XCI0OFwiPlxuICAgICAgICAgICAgPGF4LXRleHQgY2xhc3M9XCJheC1wcmltYXJ5LWxpZ2h0ZXN0XCI+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImF4LXRleHQteHMgYXgtZm9udC1zZW1pYm9sZCBmYXMgZmEtdXNlcnNcIj48L3NtYWxsPlxuICAgICAgICAgICAgPC9heC10ZXh0PlxuICAgICAgICAgIDwvYXgtYXZhdGFyPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICA8IS0tVGVtcC0tPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBVc2VyIERldGFpbHMgYW5kIExhc3QgTWVzc2FnZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1taW4tdy0wIGF4LWZsZXgtMSBheC1nYXAtMVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktYmV0d2VlbiBheC1nYXAtMlwiPlxuICAgICAgICA8cCBjbGFzcz1cImF4LWZvbnQtc2VtaWJvbGQgYXgtdGV4dC1vbi1zdXJmYWNlIGF4LXRydW5jYXRlIGF4LXB5LTFcIiBbdGl0bGVdPVwiY2hhdE5hbWUoKS5mdWxsTmFtZVwiPlxuICAgICAgICAgIHt7IGNoYXROYW1lKCkuZnVsbE5hbWUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTFcIj5cbiAgICAgICAgICBAaWYgKG1lc3NhZ2VTZWVuU3RhdHVzKCkpIHtcbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiYXgtaWNvbiBheC10ZXh0LXN1Y2Nlc3MgYXgtc2l6ZS01XCIgW2NsYXNzXT1cIm1lc3NhZ2VTZWVuU3RhdHVzKClcIj48L2F4LWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAodGhpcy5kYXRhKCkubGFzdE1lc3NhZ2UpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdGV4dC14cyBheC13aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICB7eyBmb3JtYXR0ZWRMYXN0TWVzc2FnZURhdGUoKSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWJldHdlZW4gYXgtZ2FwLTIgYXgtbXQtMSBheC1vdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgQGlmICh0eXBpbmcoKT8uaXNUeXBpbmcpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtcGItMSBheC1mbGV4IGF4LWp1c3RpZnktY2VudGVyIGF4LWl0ZW1zLWVuZCBheC1nYXAtMVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10ZXh0LW9uLXN1cmZhY2UtbGlnaHQgYXgtZm9udC1zZW1pYm9sZCBheC1jYXBpdGFsaXplIGF4LXdoaXRlc3BhY2Utbm93cmFwIGF4LXRleHQtc21cIj5cbiAgICAgICAgICAgICAgQGlmICghY2hhdE5hbWUoKS5pc1ByaXZhdGUpIHtcbiAgICAgICAgICAgICAgICB7eyB0eXBpbmcoKT8udXNlciB9fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHt7ICdAY29udmVyc2F0aW9uOmlzLXR5cGluZycgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR5cGluZy1pbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTIgYXgtdGV4dC1zbSBheC1zaHJpbmsgYXgtbWluLXctMFwiPlxuICAgICAgICAgICAgQGlmICgobGFzdE1lc3NhZ2UoKS5hdXRob3I/LmZ1bGxOYW1lIHx8IGxhc3RNZXNzYWdlKCkuYXV0aG9yPy51c2VybmFtZSkgJiYgIWNoYXROYW1lKCkuaXNQcml2YXRlKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdGV4dC1vbi1zdXJmYWNlLWxpZ2h0IGF4LWZvbnQtc2VtaWJvbGQgYXgtY2FwaXRhbGl6ZSBheC13aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgIHt7IChsYXN0TWVzc2FnZSgpLmF1dGhvcj8uZnVsbE5hbWUgfHwgbGFzdE1lc3NhZ2UoKS5hdXRob3I/LnVzZXJuYW1lKSArICc6ICcgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHN3aXRjaCAobGFzdE1lc3NhZ2UoKS5jb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICBAY2FzZSAoJ2ltYWdlJykge1xuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtcmVndWxhciBmYS1pbWFnZVwiPjwvaT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAY2FzZSAoJ3ZpZGVvJykge1xuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtcmVndWxhciBmYS12aWRlb1wiPjwvaT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAY2FzZSAoJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLWZpbGVcIj48L2k+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGNhc2UgKCdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXJlZ3VsYXIgZmEtbWljcm9waG9uZVwiPjwvaT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAY2FzZSAoJ2xpbmsnKSB7XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLWxpbmtcIj48L2k+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10cnVuY2F0ZSBheC1jYXBpdGFsaXplXCI+XG4gICAgICAgICAgICAgIHt7IGxhc3RNZXNzYWdlKCkuY29udGVudCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtMlwiPlxuICAgICAgICAgIEBpZiAoaGFzVW5yZWFkKCkpIHtcbiAgICAgICAgICAgIDxheC1iYWRnZSBjb2xvcj1cInByaW1hcnlcIiBbdGV4dF09XCJ1bnJlYWRDb3VudCgpXCIgY2xhc3M9XCJheC1mbGV4LXNocmluay0wIGF4LW1sLWF1dG9cIj48L2F4LWJhZGdlPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8IS0tIEBpZiAobGFzdE1lc3NhZ2VSZWFjdGlvbigpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTEgYXgtYmctc3VyZmFjZSBheC1yb3VuZGVkLWZ1bGwgYXgtcC0xIGF4LXB4LTJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10ZXh0LXNtXCI+e3sgbGFzdE1lc3NhZ2VSZWFjdGlvbigpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXRleHQteHNcIj57eyBsYXN0TWVzc2FnZSgpLnJlYWN0aW9ucy5sZW5ndGggfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCommentModule } from '@acorex/components/comment';\nimport { AXConversationModule } from '@acorex/components/conversation';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXContextMenuComponent, } from '@acorex/components/menu';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXSlidingItemModule } from '@acorex/components/sliding-item';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { AXWysiwygModule } from '@acorex/components/wysiwyg';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXMNotificationConnectorService } from '@acorex/modules/notification-management';\nimport { AXPStateMessageComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, } from '@acorex/platform/layout/components';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPEntityDataSelectorService, AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, HostListener, inject, signal, viewChild, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, startWith } from 'rxjs';\nimport { AXMChatManagementService } from './chat-management.service';\nimport { convertChatMessageToNotification } from './chat-notification.helper';\nimport { AXMChatRealtimeService } from './chat-realtime.service';\nimport { AXMChatItemComponent } from './components/chat-item/chat-item.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/router\";\nimport * as i3 from \"@acorex/components/badge\";\nimport * as i4 from \"@acorex/components/sliding-item\";\nimport * as i5 from \"@acorex/components/decorators\";\nimport * as i6 from \"@acorex/components/search-box\";\nimport * as i7 from \"@acorex/components/tabs\";\nimport * as i8 from \"@acorex/components/button\";\nimport * as i9 from \"@acorex/components/skeleton\";\nimport * as i10 from \"@acorex/core/translation\";\nexport class AXMChatComponent extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n this.activatedRoute = inject(ActivatedRoute);\n this.chatService = inject(AXMChatManagementService);\n this.realtimeService = inject(AXMChatRealtimeService);\n this.dialogService = inject(AXDialogService);\n this.layoutBuilder = inject(AXPLayoutBuilderService);\n this.router = inject(Router);\n this.unsubscribe = inject(AXUnsubscriber);\n this.notificationConnectorService = inject(AXMNotificationConnectorService);\n this.dataSelectorService = inject(AXPEntityDataSelectorService);\n this.entityRegistry = inject(AXPEntityDefinitionRegistryService);\n // View Children\n this.tab = viewChild('tab', ...(ngDevMode ? [{ debugName: \"tab\" }] : []));\n this.container = viewChild('container', ...(ngDevMode ? [{ debugName: \"container\" }] : []));\n this.chatContext = viewChild('chatContext', ...(ngDevMode ? [{ debugName: \"chatContext\" }] : []));\n this.tabContext = viewChild('tabContext', ...(ngDevMode ? [{ debugName: \"tabContext\" }] : []));\n // State signals\n this.rooms = signal([], ...(ngDevMode ? [{ debugName: \"rooms\" }] : []));\n this.allRooms = signal([], ...(ngDevMode ? [{ debugName: \"allRooms\" }] : []));\n this.tabs = signal([], ...(ngDevMode ? [{ debugName: \"tabs\" }] : []));\n this.selectedRoom = signal(null, ...(ngDevMode ? [{ debugName: \"selectedRoom\" }] : []));\n this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n this.typingStatus = signal({}, ...(ngDevMode ? [{ debugName: \"typingStatus\" }] : []));\n this.error = signal(null, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n this.activeTabIndex = signal(0, ...(ngDevMode ? [{ debugName: \"activeTabIndex\" }] : []));\n this.isSearching = signal(false, ...(ngDevMode ? [{ debugName: \"isSearching\" }] : []));\n this.searchQuery = signal('', ...(ngDevMode ? [{ debugName: \"searchQuery\" }] : []));\n this.showSearch = signal(true, ...(ngDevMode ? [{ debugName: \"showSearch\" }] : []));\n this.placeholder = signal('@conversation:search.placeholder', ...(ngDevMode ? [{ debugName: \"placeholder\" }] : []));\n // Localized labels (preloaded for sync menu building)\n this.tOpen = signal('Open', ...(ngDevMode ? [{ debugName: \"tOpen\" }] : []));\n this.tMarkSeen = signal('Mark as seen', ...(ngDevMode ? [{ debugName: \"tMarkSeen\" }] : []));\n this.tTab = signal('Tab', ...(ngDevMode ? [{ debugName: \"tTab\" }] : []));\n this.tRemoveFromTab = signal('Remove from tab', ...(ngDevMode ? [{ debugName: \"tRemoveFromTab\" }] : []));\n this.tDelete = signal('Delete', ...(ngDevMode ? [{ debugName: \"tDelete\" }] : []));\n this.tRemoveChat = signal('Remove Chat', ...(ngDevMode ? [{ debugName: \"tRemoveChat\" }] : []));\n // Computed signals\n this.activeTab = computed(() => {\n const tabs = this.tabs();\n const index = this.activeTabIndex();\n if (tabs.length > 0 && index >= 0 && index < tabs.length) {\n return tabs[index];\n }\n return undefined;\n }, ...(ngDevMode ? [{ debugName: \"activeTab\" }] : []));\n this.filteredRooms = signal([], ...(ngDevMode ? [{ debugName: \"filteredRooms\" }] : []));\n this.searchEffect = effect(() => {\n const allRooms = this.allRooms();\n let chatRooms = [...allRooms]; // Start with all rooms\n // Tab filter\n const activeTab = this.activeTab();\n if (activeTab) {\n if (activeTab.name === 'unread') {\n // Special local state for unread\n chatRooms = allRooms.filter((room) => room.unreadCount > 0);\n }\n else if (activeTab.name === 'all') {\n // Local state for all\n chatRooms = allRooms;\n }\n else {\n // For other tabs defined by the service\n const includedIds = new Set(activeTab.includeRooms.map((r) => r.id));\n chatRooms = allRooms.filter((room) => includedIds.has(room.id));\n }\n }\n // Search filter (applies on top of tab filter)\n const query = (this.searchQuery() || '').toLowerCase();\n if (query) {\n const filtered = [];\n for (const room of chatRooms) {\n try {\n let roomName = '';\n // Handle group chats vs. single-user chats\n if (room.members && room.members.length > 1) {\n roomName = room.title || '';\n }\n else if (room.members && room.members.length === 1) {\n const member = room.members[0];\n if (member) {\n roomName = member.fullName || '';\n }\n }\n const lastMessage = room.lastMessage?.message?.content || '';\n if (roomName.toLowerCase().includes(query) || lastMessage.toLowerCase().includes(query)) {\n filtered.push(room);\n }\n }\n catch (error) {\n console.error(`Failed to process search for room ${room.id}`, error);\n }\n }\n chatRooms = filtered;\n }\n this.filteredRooms.set(chatRooms);\n }, ...(ngDevMode ? [{ debugName: \"searchEffect\" }] : []));\n this.unreadCount = computed(() => this.allRooms().filter((i) => i.unreadCount > 0).length, ...(ngDevMode ? [{ debugName: \"unreadCount\" }] : []));\n this.allCount = computed(() => this.allRooms().length, ...(ngDevMode ? [{ debugName: \"allCount\" }] : []));\n this.hasUnread = computed(() => this.allRooms().some((i) => i.unreadCount > 0), ...(ngDevMode ? [{ debugName: \"hasUnread\" }] : []));\n this.totalCount = computed(() => this.allRooms().length || 0, ...(ngDevMode ? [{ debugName: \"totalCount\" }] : []));\n // Context menus (desktop)\n this.contextRoom = null;\n this.contextTab = null;\n this.contextTabIndex = -1;\n }\n async deleteTab(tab) {\n const result = await this.dialogService.confirm(await this.translateService.translateAsync('@conversation:confirmations.delete-tab.title'), await this.translateService.translateAsync('@conversation:confirmations.delete-tab.message', {\n params: { title: tab.title },\n }));\n if (result.result) {\n await this.chatService.deleteTab(tab.id);\n await this.loadTabs();\n }\n }\n async ngOnInit() {\n super.ngOnInit();\n this.isLoading.set(true);\n this.error.set(null);\n const [openText, markSeenText, tabText, removeFromTabText, deleteText, removeChatText] = await Promise.all([\n this.translateService.translateAsync('@conversation:actions.open'),\n this.translateService.translateAsync('@conversation:actions.mark-seen'),\n this.translateService.translateAsync('@conversation:actions.tab'),\n this.translateService.translateAsync('@conversation:actions.remove-from-tab'),\n this.translateService.translateAsync('@conversation:actions.delete'),\n this.translateService.translateAsync('@conversation:remove-chat'),\n ]);\n this.tOpen.set(openText);\n this.tMarkSeen.set(markSeenText);\n this.tTab.set(tabText);\n this.tRemoveFromTab.set(removeFromTabText);\n this.tDelete.set(deleteText);\n this.tRemoveChat.set(removeChatText);\n await Promise.all([this.loadChats(), this.loadTabs()]);\n this.isLoading.set(false);\n //\n this.router.events\n .pipe(this.unsubscribe.takeUntilDestroy, filter((event) => event instanceof NavigationEnd), startWith(null))\n .subscribe(async () => {\n await this.loadFromRoute();\n });\n //\n this.realtimeService.room$.pipe(this.unsubscribe.takeUntilDestroy).subscribe((event) => {\n switch (event.type) {\n case 'add':\n this.allRooms.update((rooms) => [event.payload, ...rooms.filter((r) => r.id !== event.payload.id)]);\n break;\n case 'remove':\n this.allRooms.update((rooms) => rooms.filter((r) => r.id !== event.payload));\n if (event.payload === this.selectedRoom()?.id) {\n this.selectedRoom.set(null);\n this.router.navigate(['./'], { relativeTo: this.activatedRoute });\n }\n break;\n case 'update':\n this.allRooms.update((rooms) => rooms.map((r) => (r.id === event.payload.id ? event.payload : r)));\n break;\n case 'seen':\n this.allRooms.update((rooms) => rooms.map((room) => (room.id === event.payload ? { ...room, unreadCount: 0 } : room)));\n break;\n }\n });\n this.realtimeService.message$.pipe(this.unsubscribe.takeUntilDestroy).subscribe((event) => {\n switch (event.type) {\n case 'add': {\n const message = event.payload;\n const rooms = this.allRooms();\n const roomIndex = rooms.findIndex((r) => r.id === message.roomId);\n if (roomIndex > -1) {\n const roomToUpdate = rooms[roomIndex];\n const isCurrentUser = message.author.id === this.sessionService.user?.id;\n const updatedRoom = {\n ...roomToUpdate,\n lastMessage: message,\n unreadCount: !isCurrentUser ? (roomToUpdate.unreadCount || 0) + 1 : roomToUpdate.unreadCount,\n };\n const newRooms = [updatedRoom, ...rooms.filter((r) => r.id !== message.roomId)];\n this.allRooms.set(newRooms);\n if (!isCurrentUser && (this.selectedRoom()?.id !== message.roomId || document.hidden)) {\n const notification = convertChatMessageToNotification(roomToUpdate, message, this.sessionService.user);\n this.notificationConnectorService.create({\n ...notification,\n id: message.id,\n entityName: 'notifications',\n createAt: new Date(),\n }, {\n onClick: () => {\n this.router.navigate([roomToUpdate.id], { relativeTo: this.activatedRoute });\n },\n activeWindow: true,\n });\n }\n }\n else {\n this.chatService.getRoom(message.roomId).then((newRoom) => {\n this.allRooms.update((currentRooms) => [newRoom, ...currentRooms]);\n });\n }\n break;\n }\n case 'update': {\n const message = event.payload;\n this.allRooms.update((rooms) => {\n return rooms.map((room) => {\n if (room.lastMessage?.id === message.id) {\n return {\n ...room,\n lastMessage: {\n ...room.lastMessage,\n ...message,\n },\n };\n }\n return room;\n });\n });\n break;\n }\n }\n });\n this.realtimeService.typingStatus$.pipe(this.unsubscribe.takeUntilDestroy).subscribe(async (status) => {\n const currentUserId = this.sessionService.user?.id;\n if (status.user.id !== currentUserId) {\n if (status.isTyping) {\n this.typingStatus.update((value) => ({\n ...value,\n [status.roomId]: { user: status.user.fullName || '', isTyping: true },\n }));\n }\n else {\n this.typingStatus.update((value) => {\n const { [status.roomId]: _, ...rest } = value;\n return rest;\n });\n }\n }\n });\n }\n async loadFromRoute() {\n const chatId = this.activatedRoute.snapshot.firstChild?.paramMap.get('id');\n if (chatId) {\n this.openChat(chatId);\n }\n else {\n this.selectedRoom.set(null);\n }\n }\n // Page Interface Implementation\n async getPageTitle() {\n const room = this.selectedRoom();\n if (!room && this.layoutService.isMobileDevice()) {\n return await this.translateService.translateAsync('@conversation:plural-title');\n }\n if (!room) {\n return '';\n }\n const { members, title, id } = room;\n if (members.length > 1) {\n return title || (await this.translateService.translateAsync('@conversation:labels.group-chat'));\n }\n const member = members[0];\n if (!member) {\n return await this.translateService.translateAsync('@conversation:labels.unknown-user');\n }\n return member.fullName || (await this.translateService.translateAsync('@conversation:labels.unknown-user'));\n }\n getPageDescription() {\n const typing = this.typingStatus();\n const selectedRoomId = this.selectedRoom()?.id;\n if (selectedRoomId && typing[selectedRoomId]?.isTyping) {\n return `${typing[selectedRoomId].user} is typing...`;\n }\n const room = this.selectedRoom();\n return room?.topic || '';\n }\n async getBackButton() {\n if (this.selectedRoom()) {\n return {\n title: await this.translateService.translateAsync('@conversation:back-to-chat-list'),\n };\n }\n else\n return null;\n }\n async getSecondaryMenuItems() {\n const items = [];\n const hasRoom = !!this.selectedRoom();\n if (hasRoom) {\n const room = this.selectedRoom();\n const currentUserId = this.sessionService.user?.id;\n const creatorId = room.auditInfo?.created?.by?.id;\n const isCreator = !!currentUserId && !!creatorId && currentUserId === creatorId;\n const isGroup = (room.members?.length ?? 0) > 1;\n const isChannel = room.topic === 'channel';\n const kindKey = isGroup ? '@conversation:labels.group-chat' : '@conversation:room.individual-title';\n const kindText = await this.translateService.translateAsync(kindKey);\n const deleteText = await this.translateService.translateAsync('@conversation:actions.delete');\n const removeChatText = await this.translateService.translateAsync('@conversation:remove-chat');\n items.push({\n title: 'Edit Room',\n icon: 'fa-light fa-pen-to-square',\n command: { name: 'edit-room' },\n }, {\n title: isCreator ? `${deleteText} ${kindText}` : removeChatText,\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: isCreator ? 'delete-room' : 'leave-room' },\n });\n }\n return items;\n }\n async execute(command) {\n switch (command.name) {\n case 'remove-chat':\n const response = await this.dialogService.confirm(await this.translateService.translateAsync('@conversation:confirmations.remove-chat.title'), await this.translateService.translateAsync('@conversation:confirmations.remove-chat.message'));\n if (response.result) {\n await this.chatService.deleteRoom(this.selectedRoom()?.id);\n this.router.navigate(['./'], { relativeTo: this.activatedRoute });\n }\n break;\n case 'edit-room': {\n const room = await this.chatService.getRoom(this.selectedRoom()?.id);\n if (!room)\n return;\n const currentMemberIds = (room.members || []).map((m) => m.id);\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog(dialog => {\n dialog\n .setTitle('Edit Room')\n .setSize('sm')\n .setContext({ title: room.title || '', members: currentMemberIds, avatar: room.avatar })\n .content(layoutBuilder => {\n layoutBuilder.flex(flex => {\n flex\n .setDirection('column')\n .formField('@conversation:new-conversation.title.label', field => {\n field.path('title');\n field.textBox({ placeholder: '@conversation:new-conversation.title.placeholder' });\n })\n .formField('@conversation:new-conversation.lookup.label', field => {\n field.path('members');\n field.lookupBox({\n entity: 'SecurityManagement.User',\n multiple: true,\n customFilter: {\n field: 'id',\n operator: { type: 'notEqual' },\n value: this.sessionService.user?.id,\n },\n });\n })\n .formField('Avatar', field => {\n field.path('avatar');\n field.customWidget('avatar', {});\n });\n });\n })\n .setActions(actions => {\n actions.cancel('@general:actions.cancel.title').submit('Save');\n });\n })\n .show();\n const ctx = dialogRef.context();\n const action = dialogRef.action();\n dialogRef.close();\n if (action === 'cancel')\n return;\n const selectedIds = Array.isArray(ctx.members) ? ctx.members : [];\n const toAdd = selectedIds.filter((id) => !currentMemberIds.includes(id));\n const toRemove = currentMemberIds.filter((id) => !selectedIds.includes(id));\n const trimmedTitle = typeof ctx.title === 'string' ? ctx.title.trim() : undefined;\n const titleChanged = typeof trimmedTitle === 'string' && trimmedTitle !== (room.title || '').trim();\n const avatarChanged = (ctx.avatar ?? null) !== (room.avatar ?? null);\n const updatePayload = {};\n if (titleChanged) {\n updatePayload.title = trimmedTitle;\n }\n if (avatarChanged) {\n updatePayload.avatar = ctx.avatar ?? null;\n }\n const ops = [];\n if (Object.keys(updatePayload).length > 0) {\n ops.push(this.chatService.updateRoom(room.id, updatePayload));\n }\n toAdd.forEach((id) => ops.push(this.chatService.addParticipant(room.id, id)));\n toRemove.forEach((id) => ops.push(this.chatService.removeParticipant(room.id, id)));\n try {\n if (ops.length) {\n await Promise.all(ops);\n await this.loadChats();\n }\n }\n catch (e) {\n this.toastService.danger('Failed to update room');\n }\n break;\n }\n case 'delete-room': {\n const room = this.selectedRoom();\n if (!room)\n return;\n const response = await this.dialogService.confirm(await this.translateService.translateAsync('@conversation:confirmations.delete-room.title'), await this.translateService.translateAsync('@conversation:confirmations.delete-room.message'));\n if (response.result) {\n await this.chatService.deleteRoom(room.id);\n this.router.navigate(['./'], { relativeTo: this.activatedRoute });\n }\n break;\n }\n case 'leave-room': {\n const room = this.selectedRoom();\n if (!room)\n return;\n const currentUserId = this.sessionService.user?.id;\n const response = await this.dialogService.confirm(await this.translateService.translateAsync('@conversation:confirmations.remove-chat.title'), await this.translateService.translateAsync('@conversation:confirmations.remove-chat.message'));\n if (response.result) {\n await this.chatService.removeParticipant(room.id, currentUserId);\n this.router.navigate(['./'], { relativeTo: this.activatedRoute });\n }\n break;\n }\n }\n }\n onBackButtonClick() {\n this.selectedRoom.set(null);\n this.typingStatus.update((value) => {\n const { [this.selectedRoom()?.id]: _, ...rest } = value;\n return rest;\n });\n this.router.navigate(['./'], { relativeTo: this.activatedRoute });\n }\n // Methods\n getRoomCountForTab(tab) {\n const allRooms = this.allRooms();\n // For all tab types, only count rooms that have unread messages\n if (tab.name === 'all' || tab.name === 'unread') {\n return allRooms.filter((room) => room.unreadCount > 0).length;\n }\n const includedIds = new Set(tab.includeRooms.map((r) => r.id));\n return allRooms.filter((room) => includedIds.has(room.id) && room.unreadCount > 0).length;\n }\n async loadTabs() {\n const localTabs = [\n {\n id: 'all-local',\n name: 'all',\n title: 'All',\n excludeRooms: [],\n includeRooms: [],\n },\n {\n id: 'unread-local',\n name: 'unread',\n title: 'Unread',\n excludeRooms: [],\n includeRooms: [],\n },\n ];\n try {\n const result = await this.chatService.listTabs();\n this.tabs.set([...localTabs, ...result.items]);\n }\n catch (error) {\n console.error('Failed to load tabs:', error);\n this.tabs.set(localTabs);\n }\n }\n async loadChats() {\n try {\n // Use the updated service method to get rooms with last messages\n const response = await this.chatService.listRooms();\n // Sort rooms by last message created.at timestamp in descending order\n const sortedRooms = response.items.sort((a, b) => {\n const dateA = a.lastMessage?.auditInfo?.created?.at || a.auditInfo?.created?.at || 0;\n const dateB = b.lastMessage?.auditInfo?.created?.at || b.auditInfo?.created?.at || 0;\n return new Date(dateB).getTime() - new Date(dateA).getTime();\n });\n this.allRooms.set(sortedRooms);\n this.rooms.set(sortedRooms);\n }\n catch (error) {\n this.error.set('Failed to load chats. Please try again.');\n console.error('Error loading chats:', error);\n }\n }\n async refreshChat() {\n await this.loadChats();\n }\n async openChat(chatId) {\n try {\n this.typingStatus.update((value) => {\n const { [chatId]: _, ...rest } = value;\n return rest;\n });\n // Use the service method to mark chat as read\n await this.chatService.markRoomSeen(chatId);\n // Update local state without making another network request\n const currentRooms = this.allRooms();\n const updatedRooms = currentRooms.map((room) => {\n if (room.id === chatId) {\n // Reset unread count for the selected room\n return { ...room, unreadCount: 0 };\n }\n return room;\n });\n // Update the rooms signals\n this.allRooms.set(updatedRooms);\n this.rooms.set(updatedRooms);\n // Find the selected room\n const selectedRoom = updatedRooms.find((room) => room.id === chatId) || null;\n this.selectedRoom.set(selectedRoom);\n // Navigate to the chat details\n this.router.navigate([chatId], { relativeTo: this.activatedRoute });\n }\n catch (error) {\n console.error('Failed to mark chat as read:', error);\n }\n }\n searchChat(query) {\n this.searchQuery.set(query);\n this.isSearching.set(!!query);\n }\n // Header methods\n onSearch(query) {\n this.searchChat(query);\n }\n clearSearch() {\n this.searchQuery.set('');\n this.isSearching.set(false);\n }\n async openSelector() {\n try {\n const entity = await this.entityRegistry.resolve('SecurityManagement', 'User');\n const result = await this.dataSelectorService.open({\n entity,\n title: 'Select Users',\n allowMultiple: true,\n columns: ['username', 'displayName', 'roleIds'],\n filters: {\n field: 'id',\n operator: { type: 'equal' },\n // value: this.sessionService.user?.id,\n value: '{{ session.currentUser().id }}',\n },\n });\n return Array.isArray(result?.items)\n ? result.items\n .map((u) => u?.id)\n .filter((id) => typeof id === 'string' && id.length > 0)\n : [];\n }\n catch {\n return [];\n }\n }\n // Footer methods\n async onNewConversation() {\n const preselectedUserIds = await this.openSelector();\n if (!preselectedUserIds.length) {\n return;\n }\n let members = preselectedUserIds;\n let title;\n let avatar;\n if (preselectedUserIds.length > 1) {\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog(dialog => {\n dialog\n .setTitle('@conversation:new-conversation.header')\n .setSize('sm')\n .setContext({ lookup: preselectedUserIds, title: '', avatar: null })\n .content(layoutBuilder => {\n layoutBuilder.flex(flex => {\n flex\n .setDirection('column')\n .formField('@conversation:new-conversation.lookup.label', field => {\n field.path('lookup');\n field.lookupBox({ entity: 'SecurityManagement.User', multiple: true });\n })\n .formField('@conversation:new-conversation.title.label', field => {\n field.path('title');\n field.visible(`{{!(context.eval('lookup')?.length > 1) }}`);\n field.textBox({\n placeholder: '@conversation:new-conversation.title.placeholder',\n });\n })\n .formField('Avatar', field => {\n field.path('avatar');\n field.customWidget('avatar', { refId: 'group', refType: 'group' });\n });\n });\n })\n .setActions(actions => {\n actions.cancel('@general:actions.cancel.title').submit('@conversation:new-conversation.actions.accept-send');\n });\n })\n .show();\n const ctx = dialogRef.context();\n const action = dialogRef.action();\n dialogRef.close();\n const selected = ctx?.lookup ?? [];\n if (action === 'cancel' || !selected.length) {\n return;\n }\n members = selected;\n title = ctx?.title;\n avatar = ctx?.avatar;\n }\n try {\n const res = await this.chatService.createRoom(members, title, avatar || undefined);\n await this.refreshChat();\n this.router.navigate([res.id], { relativeTo: this.activatedRoute });\n }\n catch (error) {\n this.toastService.danger('Failed to create room');\n }\n }\n // Sliding item actions (mobile)\n onSlideAction(room, action) {\n switch (action) {\n // case 'mute':\n // this.toastService.warning('Mute not implemented yet');\n // break;\n case 'delete':\n this.deleteRoom(room.id);\n break;\n }\n }\n async deleteRoom(roomId) {\n try {\n const dialogResult = await this.dialogService.confirm('Delete Room', 'Are you sure you want to delete Room?', 'danger', 'horizontal');\n if (dialogResult.result) {\n this.chatService.deleteRoom(roomId);\n }\n }\n catch (error) {\n console.error(`Error Deleting Room with Room id: ${roomId}`, error);\n }\n }\n openContextMenu(ev, room) {\n ev.preventDefault();\n this.contextRoom = room;\n this.chatContext()?.showAt({ x: ev.clientX, y: ev.clientY });\n }\n openTabContextMenu(ev, tab, index) {\n ev.preventDefault();\n this.contextTab = tab;\n this.contextTabIndex = index;\n this.tabContext()?.showAt({ x: ev.clientX, y: ev.clientY });\n }\n onContextOpening(e) {\n const items = [];\n // General Items\n items.push({ name: 'open', text: this.tOpen(), icon: 'fa-light fa-message-lines' });\n // Resolve context room once\n const contextRoom = this.contextRoom;\n // Mark as seen (only if the room has unread messages)\n if (contextRoom && (contextRoom.unreadCount || 0) > 0) {\n items.push({ name: 'mark-seen', text: this.tMarkSeen(), icon: 'fa-light fa-envelope-open' });\n }\n // Tab submenu behavior (Telegram-like)\n const allTabs = this.tabs();\n const activeTab = this.activeTab();\n const customTabs = allTabs.filter((t) => t.name !== 'all' && t.name !== 'unread');\n if (contextRoom && customTabs.length > 0) {\n if (activeTab?.name === 'all') {\n const tabMenuItems = customTabs.map((t) => {\n const isIncluded = (t.includeRooms || []).some((r) => r.id === contextRoom.id);\n return {\n name: `tab.toggle:${t.id}`,\n text: t.title,\n icon: isIncluded ? 'fa-light fa-check' : undefined,\n };\n });\n items.push({ name: 'tab', text: this.tTab(), icon: 'fa-light fa-folder-tree', items: tabMenuItems });\n }\n else if (activeTab?.name === 'unread') {\n // No tab submenu in unread\n }\n else {\n // Only remove from current custom tab\n items.push({\n name: 'tab.remove-current',\n text: this.tRemoveFromTab(),\n icon: 'fa-light fa-square-minus',\n color: 'warning',\n });\n }\n }\n // Dangerous action at the end\n if (contextRoom) {\n const currentUserId = this.sessionService.user?.id;\n const creatorId = contextRoom.auditInfo?.created?.by?.id;\n const isCreator = !!currentUserId && !!creatorId && currentUserId === creatorId;\n const text = isCreator ? this.tDelete() : this.tRemoveChat();\n const name = isCreator ? 'delete-room' : 'leave-room';\n items.push({ name, text, icon: 'fa-light fa-trash-can', color: 'danger' });\n }\n e.items = items;\n }\n // Tab header context menu (synchronous build)\n onTabContextOpening(e) {\n const items = [];\n const tab = this.contextTab;\n if (!tab) {\n e.items = items;\n return;\n }\n if (tab.name === 'all' || tab.name === 'unread') {\n items.push({ name: 'tab.add', text: 'Add tab', icon: 'fa-light fa-square-plus' });\n }\n else {\n items.push({ name: 'tab.remove', text: 'Remove tab', icon: 'fa-light fa-trash-can', color: 'danger' });\n }\n e.items = items;\n }\n async onTabContextItemClick(e) {\n if (!this.contextTab)\n return;\n switch (e.item.name) {\n case 'tab.add': {\n // Build dialog for creating a new custom tab\n const rooms = this.allRooms();\n const roomOptions = rooms.map((r) => ({\n id: r.id,\n title: (r.members?.length ?? 0) > 1 ? r.title || '' : r.members?.[0]?.fullName || '',\n }));\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog(dialog => {\n dialog\n .setTitle('New Tab')\n .setSize('sm')\n .setContext({ title: '', rooms: [] })\n .content(layoutBuilder => {\n layoutBuilder.flex(flex => {\n flex\n .setDirection('column')\n .formField('Title', field => {\n field.path('title');\n field.textBox({ placeholder: 'Enter tab title' });\n })\n .formField('Chats', field => {\n field.path('rooms');\n field.selectBox({ valueField: 'id', textField: 'title', dataSource: roomOptions, multiple: true });\n });\n });\n })\n .setActions(actions => {\n actions.cancel('Cancel').submit('Create');\n });\n })\n .show();\n const action = dialogRef.action();\n const ctx = dialogRef.context();\n dialogRef.close();\n if (action === 'cancel' || !ctx?.title)\n return;\n try {\n const name = ctx.title.trim().toLowerCase().replace(/\\s+/g, '-').slice(0, 64);\n const selected = Array.isArray(ctx.rooms) ? ctx.rooms : [];\n const selectedIds = selected\n .map((v) => (typeof v === 'string' ? v : v?.id))\n .filter((v) => typeof v === 'string' && v.length > 0);\n const includeRooms = rooms.filter((r) => selectedIds.includes(r.id));\n await this.chatService.createTab({ name, title: ctx.title.trim(), includeRooms, excludeRooms: [] });\n await this.loadTabs();\n }\n catch (err) {\n console.error('Failed to create tab', err);\n }\n break;\n }\n case 'tab.remove': {\n await this.deleteTab(this.contextTab);\n break;\n }\n }\n // (this.tab() as any).setIndicatorPosition(this.activeTab());\n }\n onContextItemClick(e) {\n if (!this.contextRoom)\n return;\n const roomId = this.contextRoom.id;\n switch (e.item.name) {\n case 'open':\n this.openChat(roomId);\n break;\n case 'mark-seen':\n this.chatService\n .markRoomSeen(roomId)\n .catch(async () => this.toastService.danger(await this.translateService.translateAsync('@conversation:messages.mark-seen-failed')));\n break;\n // case 'mute':\n // this.toastService.warning('Mute not implemented yet');\n // break;\n default: {\n // Toggle tab inclusion: names are in the form 'tab.toggle:<tabId>'\n if (typeof e.item.name === 'string' && e.item.name.startsWith('tab.toggle:')) {\n const tabId = e.item.name.split(':')[1];\n const currentTabs = this.tabs();\n const foundTab = currentTabs.find((t) => t.id === tabId);\n if (!foundTab) {\n this.toastService.danger('@conversation:messages.tab-not-found');\n return;\n }\n const isIncluded = (foundTab.includeRooms || []).some((r) => r.id === roomId);\n const op = isIncluded\n ? this.chatService.removeIncludeRoomFromTab(tabId, roomId)\n : this.chatService.addIncludeRoomToTab(tabId, roomId);\n op.then(async (updatedTab) => {\n this.tabs.update((tabs) => tabs.map((t) => (t.id === updatedTab.id ? updatedTab : t)));\n this.toastService.success(await this.translateService.translateAsync(isIncluded ? '@conversation:messages.tab-removed' : '@conversation:messages.tab-added'));\n }).catch(async () => this.toastService.danger(await this.translateService.translateAsync('@conversation:messages.tab-update-failed')));\n return;\n }\n break;\n }\n case 'tab.remove-current': {\n const at = this.activeTab();\n if (!at || at.name === 'all' || at.name === 'unread') {\n return;\n }\n this.chatService\n .removeIncludeRoomFromTab(at.id, roomId)\n .then(async (updatedTab) => {\n this.tabs.update((tabs) => tabs.map((t) => (t.id === updatedTab.id ? updatedTab : t)));\n this.toastService.success(await this.translateService.translateAsync('@conversation:messages.tab-removed'));\n })\n .catch(async () => this.toastService.danger(await this.translateService.translateAsync('@conversation:messages.tab-remove-failed')));\n break;\n }\n case 'delete-room':\n this.deleteRoom(roomId);\n break;\n case 'leave-room': {\n const currentUserId = this.sessionService.user?.id;\n this.chatService\n .removeParticipant(roomId, currentUserId)\n .then(() => {\n if (this.selectedRoom()?.id === roomId) {\n this.router.navigate(['./'], { relativeTo: this.activatedRoute });\n }\n })\n .catch(async () => this.toastService.danger('Failed to leave'));\n break;\n }\n }\n }\n onKeydownHandler(event) {\n if (this.selectedRoom()) {\n this.onBackButtonClick();\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMChatComponent, isStandalone: true, selector: \"axm-chat\", host: { listeners: { \"document:keydown.escape\": \"onKeydownHandler($event)\" } }, providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMChatComponent,\n },\n AXUnsubscriber,\n ], viewQueries: [{ propertyName: \"tab\", first: true, predicate: [\"tab\"], descendants: true, isSignal: true }, { propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, isSignal: true }, { propertyName: \"chatContext\", first: true, predicate: [\"chatContext\"], descendants: true, isSignal: true }, { propertyName: \"tabContext\", first: true, predicate: [\"tabContext\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout #container>\\n <axp-layout-start-side class=\\\"ax-border-e ax-lightest-surface ax-h-full\\\">\\n <axp-layout-header>\\n <axp-layout-title>{{ '@conversation:module-name' | translate | async }}</axp-layout-title>\\n <axp-layout-toolbar>\\n <ax-search-box\\n #searchInput\\n look=\\\"solid\\\"\\n [placeholder]=\\\"'@conversation:search.placeholder' | translate | async\\\"\\n [value]=\\\"searchQuery()\\\"\\n (onValueChanged)=\\\"onSearch($event.value)\\\"\\n class=\\\"ax-w-full\\\"\\n >\\n <ax-clear-button></ax-clear-button>\\n </ax-search-box>\\n </axp-layout-toolbar>\\n </axp-layout-header>\\n <axp-layout-content class=\\\"ax-flex ax-flex-col ax-min-h-0 ax-max-w-80\\\">\\n @if (!layoutService.isMobileDevice()) {\\n <ng-container [ngTemplateOutlet]=\\\"template\\\"></ng-container>\\n }\\n </axp-layout-content>\\n </axp-layout-start-side>\\n\\n <axp-page-content\\n style=\\\"height: calc(100vh - 22rem)\\\"\\n [style.padding]=\\\"layoutService.isMobileDevice() ? '1rem !important' : '0 !important'\\\"\\n >\\n @if (selectedRoom()) {\\n <router-outlet></router-outlet>\\n } @else if (layoutService.isMobileDevice()) {\\n <ax-search-box\\n #searchInput\\n look=\\\"solid\\\"\\n [placeholder]=\\\"'@conversation:search.placeholder' | translate | async\\\"\\n [value]=\\\"searchQuery()\\\"\\n (onValueChanged)=\\\"onSearch($event.value)\\\"\\n class=\\\"ax-w-full ax-mb-2\\\"\\n >\\n <ax-clear-button></ax-clear-button>\\n </ax-search-box>\\n <ng-container [ngTemplateOutlet]=\\\"template\\\"></ng-container>\\n }\\n </axp-page-content>\\n</axp-page-layout>\\n<ng-template #template>\\n <!-- Tabs -->\\n <div [class]=\\\"!layoutService.isMobileDevice() ? 'ax-px-4' : ''\\\">\\n <ax-tabs\\n #tab\\n class=\\\"ax-text-neutral-400 !ax-overflow-x-hidden\\\"\\n [look]=\\\"'with-line'\\\"\\n [location]=\\\"'bottom'\\\"\\n [fitParent]=\\\"true\\\"\\n (onActiveTabChanged)=\\\"activeTabIndex.set($event.index)\\\"\\n >\\n @for (tab of tabs(); track tab.id; let i = $index) {\\n <ax-tab-item\\n [text]=\\\"tab.title\\\"\\n [active]=\\\"activeTabIndex() === i\\\"\\n (contextmenu)=\\\"openTabContextMenu($event, tab, i)\\\"\\n >\\n @if (getRoomCountForTab(tab) > 0) {\\n <ax-suffix>\\n <ax-badge\\n [text]=\\\"getRoomCountForTab(tab).toString()\\\"\\n [color]=\\\"activeTabIndex() === i ? 'primary' : 'secondary'\\\"\\n class=\\\"ax-min-w-[1.5rem] ax-justify-center\\\"\\n ></ax-badge>\\n </ax-suffix>\\n }\\n </ax-tab-item>\\n }\\n </ax-tabs>\\n </div>\\n\\n <!-- Chat List Content -->\\n <div\\n class=\\\"ax-flex-1 ax-overflow-hidden ax-flex ax-flex-col ax-justify-between ax-min-w-80\\\"\\n [class.ax-border-t]=\\\"tabs().length > 0\\\"\\n >\\n <!-- Loading State -->\\n @if (isLoading()) {\\n <div class=\\\"ax-p-4 ax-space-y-4\\\">\\n @for (_ of [1, 2, 3, 4, 5, 6]; track $index) {\\n <div class=\\\"ax-flex ax-items-center ax-space-x-3\\\">\\n <ax-skeleton [animated]=\\\"true\\\" class=\\\"ax-w-12 ax-h-12 ax-rounded-full\\\"></ax-skeleton>\\n <div class=\\\"ax-flex-1 ax-space-y-2\\\">\\n <ax-skeleton [animated]=\\\"true\\\" class=\\\"ax-w-3/4 ax-h-4 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton [animated]=\\\"true\\\" class=\\\"ax-w-1/2 ax-h-3 ax-rounded-md\\\"></ax-skeleton>\\n </div>\\n </div>\\n }\\n </div>\\n } @else if (error()) {\\n <axp-state-message\\n mode=\\\"error\\\"\\n icon=\\\"fa-light fa-circle-exclamation\\\"\\n [title]=\\\"'@conversation:chat-error'\\\"\\n [description]=\\\"error() || '@conversation:state-message.error.description'\\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@conversation:try-again' | translate | async\\\"\\n color=\\\"primary\\\"\\n (onClick)=\\\"refreshChat()\\\"\\n ></ax-button>\\n </axp-state-message>\\n } @else {\\n <div class=\\\"ax-flex-1 ax-overflow-y-auto ax-pt-1\\\">\\n @for (i of filteredRooms(); track i.id) {\\n @if (layoutService.isMobileDevice()) {\\n <ax-sliding-item class=\\\"ax-h-20\\\">\\n <ax-content class=\\\"!ax-p-0\\\">\\n <axm-chat-item\\n [data]=\\\"i\\\"\\n [typing]=\\\"$any(typingStatus()[i.id])\\\"\\n [lastMessageReaction]=\\\"i.lastMessage?.reactions?.[0]?.type ?? null\\\"\\n [attr.data-id]=\\\"i.id\\\"\\n (click)=\\\"openChat(i.id)\\\"\\n [class.ax-bg-dark]=\\\"selectedRoom()?.id === i.id\\\"\\n class=\\\"ax-transition-all ax-duration-100 hover:ax-bg-surface ax-block\\\"\\n [@fadeIn]\\n tabindex=\\\"0\\\"\\n (keydown.enter)=\\\"openChat(i.id)\\\"\\n role=\\\"button\\\"\\n (contextmenu)=\\\"openContextMenu($event, i)\\\"\\n ></axm-chat-item>\\n </ax-content>\\n\\n <!-- <ax-sliding-item-suffix (onClick)=\\\"onSlideAction(i, 'mute')\\\" color=\\\"warning\\\">\\n <ax-icon class=\\\"fa-light fa-bell-slash fa-lg\\\"></ax-icon>\\n </ax-sliding-item-suffix> -->\\n <ax-sliding-item-suffix (onClick)=\\\"onSlideAction(i, 'delete')\\\" color=\\\"danger\\\">\\n <ax-icon class=\\\"fa-light fa-trash-can fa-lg\\\"></ax-icon>\\n </ax-sliding-item-suffix>\\n </ax-sliding-item>\\n } @else {\\n <axm-chat-item\\n [data]=\\\"i\\\"\\n [typing]=\\\"$any(typingStatus()[i.id])\\\"\\n [lastMessageReaction]=\\\"i.lastMessage?.reactions?.[0]?.type ?? null\\\"\\n [attr.data-id]=\\\"i.id\\\"\\n (click)=\\\"openChat(i.id)\\\"\\n [class.ax-bg-dark]=\\\"selectedRoom()?.id === i.id\\\"\\n class=\\\"ax-transition-all ax-duration-100 hover:ax-bg-surface\\\"\\n [@fadeIn]\\n tabindex=\\\"0\\\"\\n (keydown.enter)=\\\"openChat(i.id)\\\"\\n role=\\\"button\\\"\\n (contextmenu)=\\\"openContextMenu($event, i)\\\"\\n ></axm-chat-item>\\n }\\n } @empty {\\n <axp-state-message\\n icon=\\\"fa-light fa-comments\\\"\\n [title]=\\\"'@conversation:no-chats-found.title'\\\"\\n [description]=\\\"'@conversation:no-chats-found.description'\\\"\\n >\\n </axp-state-message>\\n }\\n </div>\\n }\\n\\n <!-- Footer Content -->\\n @if (!layoutService.isMobileDevice()) {\\n <div class=\\\"ax-border-t ax-border-divider ax-bg-lightest ax-p-4\\\">\\n <ax-button\\n class=\\\"ax-w-full\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"'@conversation:new-conversation.button' | translate | async\\\"\\n (onClick)=\\\"onNewConversation()\\\"\\n >\\n <ax-prefix>\\n <ax-icon>\\n <i class=\\\"fa-solid fa-plus\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n </ax-button>\\n </div>\\n } @else {\\n <ax-button\\n class=\\\"ax-fixed ax-bottom-16 ax-right-8 !ax-rounded-full !ax-w-14 !ax-h-14 ax-shadow-lg\\\"\\n color=\\\"primary\\\"\\n (onClick)=\\\"onNewConversation()\\\"\\n >\\n <ax-icon class=\\\"ax-text-2xl\\\">\\n <i class=\\\"fa-solid fa-plus\\\"></i>\\n </ax-icon>\\n </ax-button>\\n }\\n </div>\\n</ng-template>\\n\\n<ax-context-menu\\n #chatContext\\n [openOn]=\\\"'click'\\\"\\n [closeOn]=\\\"'click'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n (onOpening)=\\\"onContextOpening($event)\\\"\\n (onItemClick)=\\\"onContextItemClick($event)\\\"\\n></ax-context-menu>\\n\\n<ax-context-menu\\n #tabContext\\n [openOn]=\\\"'click'\\\"\\n [closeOn]=\\\"'click'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n (onOpening)=\\\"onTabContextOpening($event)\\\"\\n (onItemClick)=\\\"onTabContextItemClick($event)\\\"\\n></ax-context-menu>\\n\", styles: [\"\"], dependencies: [{ kind: \"component\", type: AXMChatItemComponent, selector: \"axm-chat-item\", inputs: [\"data\", \"typing\", \"lastMessageReaction\"], outputs: [\"pressChatItem\"] }, { kind: \"ngmodule\", type: \n // Common Modules\n CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: RouterModule }, { kind: \"directive\", type: i2.RouterOutlet, selector: \"router-outlet\", inputs: [\"name\", \"routerOutletData\"], outputs: [\"activate\", \"deactivate\", \"attach\", \"detach\"], exportAs: [\"outlet\"] }, { kind: \"ngmodule\", type: \n // Acorex Core Modules\n AXFormatModule }, { kind: \"ngmodule\", type: AXConversationModule }, { kind: \"ngmodule\", type: AXCommentModule }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"ngmodule\", type: \n // Acorex Component Modules\n // AXResizableDirective,\n AXImageModule }, { kind: \"ngmodule\", type: AXAvatarModule }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"component\", type: i3.AXBadgeComponent, selector: \"ax-badge\", inputs: [\"color\", \"look\", \"text\"] }, { kind: \"ngmodule\", type: AXSlidingItemModule }, { kind: \"component\", type: i4.AXSlidingItemComponent, selector: \"ax-sliding-item\" }, { kind: \"component\", type: i4.AXSlidingItemSuffixComponent, selector: \"ax-sliding-item-suffix\", inputs: [\"color\", \"text\"], outputs: [\"onClick\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i5.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i5.AXDecoratorClearButtonComponent, selector: \"ax-clear-button\", inputs: [\"icon\"] }, { kind: \"component\", type: i5.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXTextBoxModule }, { kind: \"ngmodule\", type: AXSearchBoxModule }, { kind: \"component\", type: i6.AXSearchBoxComponent, selector: \"ax-search-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"value\", \"state\", \"name\", \"id\", \"look\", \"class\", \"delayTime\", \"type\", \"autoSearch\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onKeyDown\", \"onKeyUp\", \"onKeyPress\"] }, { kind: \"ngmodule\", type: AXTabsModule }, { kind: \"component\", type: i7.AXTabsComponent, selector: \"ax-tabs\", inputs: [\"look\", \"location\", \"fitParent\", \"minWidth\", \"content\"], outputs: [\"onActiveTabChanged\"] }, { kind: \"component\", type: i7.AXTabItemComponent, selector: \"ax-tab-item\", inputs: [\"disabled\", \"text\", \"key\", \"headerTemplate\", \"active\"], outputs: [\"disabledChange\", \"onClick\", \"onBlur\", \"onFocus\", \"activeChange\"] }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i8.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"ngmodule\", type: AXWysiwygModule }, { kind: \"ngmodule\", type: AXLabelModule }, { kind: \"ngmodule\", type: AXSelectBoxModule }, { kind: \"ngmodule\", type: AXFormModule }, { kind: \"ngmodule\", type: AXDropdownButtonModule }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"ngmodule\", type: AXToolBarModule }, { kind: \"ngmodule\", type: AXSkeletonModule }, { kind: \"component\", type: i9.AXSkeletonComponent, selector: \"ax-skeleton\", inputs: [\"animated\"] }, { kind: \"component\", type: AXPPageLayoutComponent, selector: \"axp-page-layout\" }, { kind: \"component\", type: AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPThemeLayoutStartSideComponent, selector: \"axp-layout-page-start-side, axp-layout-start-side\" }, { kind: \"component\", type: AXPThemeLayoutHeaderComponent, selector: \"axp-layout-header\" }, { kind: \"component\", type: AXPThemeLayoutToolbarComponent, selector: \"axp-layout-toolbar\" }, { kind: \"component\", type: AXContextMenuComponent, selector: \"ax-context-menu\", inputs: [\"orientation\", \"openOn\", \"closeOn\", \"items\", \"target\"], outputs: [\"onItemClick\", \"onOpening\"] }, { kind: \"component\", type: AXPStateMessageComponent, selector: \"axp-state-message\", inputs: [\"mode\", \"icon\", \"title\", \"description\", \"variant\"] }, { kind: \"pipe\", type: i1.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i10.AXTranslatorPipe, name: \"translate\" }], animations: [\n trigger('fadeIn', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(10px)' }),\n animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n ]),\n ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-chat', changeDetection: ChangeDetectionStrategy.OnPush, providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMChatComponent,\n },\n AXUnsubscriber,\n ], imports: [\n AXMChatItemComponent,\n // Common Modules\n CommonModule,\n FormsModule,\n RouterModule,\n // Acorex Core Modules\n AXFormatModule,\n AXConversationModule,\n AXCommentModule,\n AXTranslationModule,\n // Acorex Component Modules\n // AXResizableDirective,\n AXImageModule,\n AXAvatarModule,\n AXBadgeModule,\n AXSlidingItemModule,\n AXDecoratorModule,\n AXTextBoxModule,\n AXSearchBoxModule,\n AXTabsModule,\n AXButtonModule,\n AXLoadingModule,\n AXWysiwygModule,\n AXLabelModule,\n AXSelectBoxModule,\n AXFormModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXToolBarModule,\n AXSkeletonModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutToolbarComponent,\n AXContextMenuComponent,\n AXPStateMessageComponent,\n ], animations: [\n trigger('fadeIn', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(10px)' }),\n animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n ]),\n ], template: \"<axp-page-layout #container>\\n <axp-layout-start-side class=\\\"ax-border-e ax-lightest-surface ax-h-full\\\">\\n <axp-layout-header>\\n <axp-layout-title>{{ '@conversation:module-name' | translate | async }}</axp-layout-title>\\n <axp-layout-toolbar>\\n <ax-search-box\\n #searchInput\\n look=\\\"solid\\\"\\n [placeholder]=\\\"'@conversation:search.placeholder' | translate | async\\\"\\n [value]=\\\"searchQuery()\\\"\\n (onValueChanged)=\\\"onSearch($event.value)\\\"\\n class=\\\"ax-w-full\\\"\\n >\\n <ax-clear-button></ax-clear-button>\\n </ax-search-box>\\n </axp-layout-toolbar>\\n </axp-layout-header>\\n <axp-layout-content class=\\\"ax-flex ax-flex-col ax-min-h-0 ax-max-w-80\\\">\\n @if (!layoutService.isMobileDevice()) {\\n <ng-container [ngTemplateOutlet]=\\\"template\\\"></ng-container>\\n }\\n </axp-layout-content>\\n </axp-layout-start-side>\\n\\n <axp-page-content\\n style=\\\"height: calc(100vh - 22rem)\\\"\\n [style.padding]=\\\"layoutService.isMobileDevice() ? '1rem !important' : '0 !important'\\\"\\n >\\n @if (selectedRoom()) {\\n <router-outlet></router-outlet>\\n } @else if (layoutService.isMobileDevice()) {\\n <ax-search-box\\n #searchInput\\n look=\\\"solid\\\"\\n [placeholder]=\\\"'@conversation:search.placeholder' | translate | async\\\"\\n [value]=\\\"searchQuery()\\\"\\n (onValueChanged)=\\\"onSearch($event.value)\\\"\\n class=\\\"ax-w-full ax-mb-2\\\"\\n >\\n <ax-clear-button></ax-clear-button>\\n </ax-search-box>\\n <ng-container [ngTemplateOutlet]=\\\"template\\\"></ng-container>\\n }\\n </axp-page-content>\\n</axp-page-layout>\\n<ng-template #template>\\n <!-- Tabs -->\\n <div [class]=\\\"!layoutService.isMobileDevice() ? 'ax-px-4' : ''\\\">\\n <ax-tabs\\n #tab\\n class=\\\"ax-text-neutral-400 !ax-overflow-x-hidden\\\"\\n [look]=\\\"'with-line'\\\"\\n [location]=\\\"'bottom'\\\"\\n [fitParent]=\\\"true\\\"\\n (onActiveTabChanged)=\\\"activeTabIndex.set($event.index)\\\"\\n >\\n @for (tab of tabs(); track tab.id; let i = $index) {\\n <ax-tab-item\\n [text]=\\\"tab.title\\\"\\n [active]=\\\"activeTabIndex() === i\\\"\\n (contextmenu)=\\\"openTabContextMenu($event, tab, i)\\\"\\n >\\n @if (getRoomCountForTab(tab) > 0) {\\n <ax-suffix>\\n <ax-badge\\n [text]=\\\"getRoomCountForTab(tab).toString()\\\"\\n [color]=\\\"activeTabIndex() === i ? 'primary' : 'secondary'\\\"\\n class=\\\"ax-min-w-[1.5rem] ax-justify-center\\\"\\n ></ax-badge>\\n </ax-suffix>\\n }\\n </ax-tab-item>\\n }\\n </ax-tabs>\\n </div>\\n\\n <!-- Chat List Content -->\\n <div\\n class=\\\"ax-flex-1 ax-overflow-hidden ax-flex ax-flex-col ax-justify-between ax-min-w-80\\\"\\n [class.ax-border-t]=\\\"tabs().length > 0\\\"\\n >\\n <!-- Loading State -->\\n @if (isLoading()) {\\n <div class=\\\"ax-p-4 ax-space-y-4\\\">\\n @for (_ of [1, 2, 3, 4, 5, 6]; track $index) {\\n <div class=\\\"ax-flex ax-items-center ax-space-x-3\\\">\\n <ax-skeleton [animated]=\\\"true\\\" class=\\\"ax-w-12 ax-h-12 ax-rounded-full\\\"></ax-skeleton>\\n <div class=\\\"ax-flex-1 ax-space-y-2\\\">\\n <ax-skeleton [animated]=\\\"true\\\" class=\\\"ax-w-3/4 ax-h-4 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton [animated]=\\\"true\\\" class=\\\"ax-w-1/2 ax-h-3 ax-rounded-md\\\"></ax-skeleton>\\n </div>\\n </div>\\n }\\n </div>\\n } @else if (error()) {\\n <axp-state-message\\n mode=\\\"error\\\"\\n icon=\\\"fa-light fa-circle-exclamation\\\"\\n [title]=\\\"'@conversation:chat-error'\\\"\\n [description]=\\\"error() || '@conversation:state-message.error.description'\\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@conversation:try-again' | translate | async\\\"\\n color=\\\"primary\\\"\\n (onClick)=\\\"refreshChat()\\\"\\n ></ax-button>\\n </axp-state-message>\\n } @else {\\n <div class=\\\"ax-flex-1 ax-overflow-y-auto ax-pt-1\\\">\\n @for (i of filteredRooms(); track i.id) {\\n @if (layoutService.isMobileDevice()) {\\n <ax-sliding-item class=\\\"ax-h-20\\\">\\n <ax-content class=\\\"!ax-p-0\\\">\\n <axm-chat-item\\n [data]=\\\"i\\\"\\n [typing]=\\\"$any(typingStatus()[i.id])\\\"\\n [lastMessageReaction]=\\\"i.lastMessage?.reactions?.[0]?.type ?? null\\\"\\n [attr.data-id]=\\\"i.id\\\"\\n (click)=\\\"openChat(i.id)\\\"\\n [class.ax-bg-dark]=\\\"selectedRoom()?.id === i.id\\\"\\n class=\\\"ax-transition-all ax-duration-100 hover:ax-bg-surface ax-block\\\"\\n [@fadeIn]\\n tabindex=\\\"0\\\"\\n (keydown.enter)=\\\"openChat(i.id)\\\"\\n role=\\\"button\\\"\\n (contextmenu)=\\\"openContextMenu($event, i)\\\"\\n ></axm-chat-item>\\n </ax-content>\\n\\n <!-- <ax-sliding-item-suffix (onClick)=\\\"onSlideAction(i, 'mute')\\\" color=\\\"warning\\\">\\n <ax-icon class=\\\"fa-light fa-bell-slash fa-lg\\\"></ax-icon>\\n </ax-sliding-item-suffix> -->\\n <ax-sliding-item-suffix (onClick)=\\\"onSlideAction(i, 'delete')\\\" color=\\\"danger\\\">\\n <ax-icon class=\\\"fa-light fa-trash-can fa-lg\\\"></ax-icon>\\n </ax-sliding-item-suffix>\\n </ax-sliding-item>\\n } @else {\\n <axm-chat-item\\n [data]=\\\"i\\\"\\n [typing]=\\\"$any(typingStatus()[i.id])\\\"\\n [lastMessageReaction]=\\\"i.lastMessage?.reactions?.[0]?.type ?? null\\\"\\n [attr.data-id]=\\\"i.id\\\"\\n (click)=\\\"openChat(i.id)\\\"\\n [class.ax-bg-dark]=\\\"selectedRoom()?.id === i.id\\\"\\n class=\\\"ax-transition-all ax-duration-100 hover:ax-bg-surface\\\"\\n [@fadeIn]\\n tabindex=\\\"0\\\"\\n (keydown.enter)=\\\"openChat(i.id)\\\"\\n role=\\\"button\\\"\\n (contextmenu)=\\\"openContextMenu($event, i)\\\"\\n ></axm-chat-item>\\n }\\n } @empty {\\n <axp-state-message\\n icon=\\\"fa-light fa-comments\\\"\\n [title]=\\\"'@conversation:no-chats-found.title'\\\"\\n [description]=\\\"'@conversation:no-chats-found.description'\\\"\\n >\\n </axp-state-message>\\n }\\n </div>\\n }\\n\\n <!-- Footer Content -->\\n @if (!layoutService.isMobileDevice()) {\\n <div class=\\\"ax-border-t ax-border-divider ax-bg-lightest ax-p-4\\\">\\n <ax-button\\n class=\\\"ax-w-full\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"'@conversation:new-conversation.button' | translate | async\\\"\\n (onClick)=\\\"onNewConversation()\\\"\\n >\\n <ax-prefix>\\n <ax-icon>\\n <i class=\\\"fa-solid fa-plus\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n </ax-button>\\n </div>\\n } @else {\\n <ax-button\\n class=\\\"ax-fixed ax-bottom-16 ax-right-8 !ax-rounded-full !ax-w-14 !ax-h-14 ax-shadow-lg\\\"\\n color=\\\"primary\\\"\\n (onClick)=\\\"onNewConversation()\\\"\\n >\\n <ax-icon class=\\\"ax-text-2xl\\\">\\n <i class=\\\"fa-solid fa-plus\\\"></i>\\n </ax-icon>\\n </ax-button>\\n }\\n </div>\\n</ng-template>\\n\\n<ax-context-menu\\n #chatContext\\n [openOn]=\\\"'click'\\\"\\n [closeOn]=\\\"'click'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n (onOpening)=\\\"onContextOpening($event)\\\"\\n (onItemClick)=\\\"onContextItemClick($event)\\\"\\n></ax-context-menu>\\n\\n<ax-context-menu\\n #tabContext\\n [openOn]=\\\"'click'\\\"\\n [closeOn]=\\\"'click'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n (onOpening)=\\\"onTabContextOpening($event)\\\"\\n (onItemClick)=\\\"onTabContextItemClick($event)\\\"\\n></ax-context-menu>\\n\" }]\n }], propDecorators: { tab: [{ type: i0.ViewChild, args: ['tab', { isSignal: true }] }], container: [{ type: i0.ViewChild, args: ['container', { isSignal: true }] }], chatContext: [{ type: i0.ViewChild, args: ['chatContext', { isSignal: true }] }], tabContext: [{ type: i0.ViewChild, args: ['tabContext', { isSignal: true }] }], onKeydownHandler: [{\n type: HostListener,\n args: ['document:keydown.escape', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY2hhdC9jaGF0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jaGF0L2NoYXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUNMLHNCQUFzQixHQUl2QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8s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QUFDLENBQUM7NkJBQzdFLENBQUM7eUJBQ0gsQ0FBQztxQkFDSDtpRUFlZ0MsS0FBSyxtRUFDUSxXQUFXLHFFQUNULGFBQWEsb0VBQ2QsWUFBWTtzQkF3NkIxRCxZQUFZO3VCQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhBdmF0YXJNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYXZhdGFyJztcbmltcG9ydCB7IEFYQmFkZ2VNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYQ29tbWVudE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tZW50JztcbmltcG9ydCB7IEFYQ29udmVyc2F0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbnZlcnNhdGlvbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYRGlhbG9nU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kaWFsb2cnO1xuaW1wb3J0IHsgQVhEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBBWERyb3Bkb3duQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duLWJ1dHRvbic7XG5pbXBvcnQgeyBBWEZvcm1Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgeyBBWEltYWdlTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2ltYWdlJztcbmltcG9ydCB7IEFYTGFiZWxNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbGFiZWwnO1xuaW1wb3J0IHsgQVhMb2FkaW5nTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xvYWRpbmcnO1xuaW1wb3J0IHtcbiAgQVhDb250ZXh0TWVudUNvbXBvbmVudCxcbiAgQVhDb250ZXh0TWVudUl0ZW1zQ2xpY2tFdmVudCxcbiAgQVhDb250ZXh0TWVudU9wZW5pbmdFdmVudCxcbiAgQVhNZW51SXRlbSxcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL21lbnUnO1xuaW1wb3J0IHsgQVhTZWFyY2hCb3hNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvc2VhcmNoLWJveCc7XG5pbXBvcnQgeyBBWFNlbGVjdEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWxlY3QtYm94JztcbmltcG9ydCB7IEFYU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvc2tlbGV0b24nO1xuaW1wb3J0IHsgQVhTbGlkaW5nSXRlbU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zbGlkaW5nLWl0ZW0nO1xuaW1wb3J0IHsgQVhUYWJzQ29tcG9uZW50LCBBWFRhYnNNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdGFicyc7XG5pbXBvcnQgeyBBWFRleHRCb3hNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdGV4dC1ib3gnO1xuaW1wb3J0IHsgQVhUb29sQmFyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2xiYXInO1xuaW1wb3J0IHsgQVhXeXNpd3lnTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3d5c2l3eWcnO1xuaW1wb3J0IHsgQVhGb3JtYXRNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhVbnN1YnNjcmliZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgQVhNTm90aWZpY2F0aW9uQ29ubmVjdG9yU2VydmljZSB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9ub3RpZmljYXRpb24tbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBBWFBFbnRpdHkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQge1xuICBBWFBBY3Rpb25NZW51SXRlbSxcbiAgQVhQQmFja0J1dHRvbixcbiAgQVhQRXhlY3V0ZUNvbW1hbmQsXG4gIEFYUEZpbGVMaXN0SXRlbSxcbiAgQVhQVXNlclJlZmVyZW5jZSxcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7XG4gIEFYUFN0YXRlTWVzc2FnZUNvbXBvbmVudCxcbiAgQVhQVGhlbWVMYXlvdXRCbG9ja0NvbXBvbmVudCxcbiAgQVhQVGhlbWVMYXlvdXRIZWFkZXJDb21wb25lbnQsXG4gIEFYUFRoZW1lTGF5b3V0U3RhcnRTaWRlQ29tcG9uZW50LFxuICBBWFBUaGVtZUxheW91dFRvb2xiYXJDb21wb25lbnQsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQVhQTGF5b3V0QnVpbGRlclNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9idWlsZGVyJztcbmltcG9ydCB7IEFYUEVudGl0eURhdGFTZWxlY3RvclNlcnZpY2UsIEFYUEVudGl0eURlZmluaXRpb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgQVhQUGFnZUxheW91dEJhc2UsIEFYUFBhZ2VMYXlvdXRCYXNlQ29tcG9uZW50LCBBWFBQYWdlTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvdmlld3MnO1xuaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgT25Jbml0LFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhNQ29udmVyc2F0aW9uVGFiIH0gZnJvbSAnLi4vLi4vZW50aXRpZXMvdGFiJztcbmltcG9ydCB7IEFYTUNoYXRNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4vY2hhdC1tYW5hZ2VtZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgY29udmVydENoYXRNZXNzYWdlVG9Ob3RpZmljYXRpb24gfSBmcm9tICcuL2NoYXQtbm90aWZpY2F0aW9uLmhlbHBlcic7XG5pbXBvcnQgeyBBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlIH0gZnJvbSAnLi9jaGF0LXJlYWx0aW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNQ2hhdFJvb20gfSBmcm9tICcuL2NoYXQudHlwZSc7XG5pbXBvcnQgeyBBWE1DaGF0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jaGF0LWl0ZW0vY2hhdC1pdGVtLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4bS1jaGF0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGF0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBQYWdlTGF5b3V0QmFzZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBBWE1DaGF0Q29tcG9uZW50LFxuICAgIH0sXG4gICAgQVhVbnN1YnNjcmliZXIsXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBBWE1DaGF0SXRlbUNvbXBvbmVudCxcbiAgICAvLyBDb21tb24gTW9kdWxlc1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gICAgLy8gQWNvcmV4IENvcmUgTW9kdWxlc1xuICAgIEFYRm9ybWF0TW9kdWxlLFxuICAgIEFYQ29udmVyc2F0aW9uTW9kdWxlLFxuICAgIEFYQ29tbWVudE1vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgIC8vIEFjb3JleCBDb21wb25lbnQgTW9kdWxlc1xuICAgIC8vIEFYUmVzaXphYmxlRGlyZWN0aXZlLFxuICAgIEFYSW1hZ2VNb2R1bGUsXG4gICAgQVhBdmF0YXJNb2R1bGUsXG4gICAgQVhCYWRnZU1vZHVsZSxcbiAgICBBWFNsaWRpbmdJdGVtTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYVGV4dEJveE1vZHVsZSxcbiAgICBBWFNlYXJjaEJveE1vZHVsZSxcbiAgICBBWFRhYnNNb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhMb2FkaW5nTW9kdWxlLFxuICAgIEFYV3lzaXd5Z01vZHVsZSxcbiAgICBBWExhYmVsTW9kdWxlLFxuICAgIEFYU2VsZWN0Qm94TW9kdWxlLFxuICAgIEFYRm9ybU1vZHVsZSxcbiAgICBBWERyb3Bkb3duQnV0dG9uTW9kdWxlLFxuICAgIEFYRHJvcGRvd25Nb2R1bGUsXG4gICAgQVhUb29sQmFyTW9kdWxlLFxuICAgIEFYU2tlbGV0b25Nb2R1bGUsXG4gICAgQVhQUGFnZUxheW91dENvbXBvbmVudCxcbiAgICBBWFBUaGVtZUxheW91dEJsb2NrQ29tcG9uZW50LFxuICAgIEFYUFRoZW1lTGF5b3V0U3RhcnRTaWRlQ29tcG9uZW50LFxuICAgIEFYUFRoZW1lTGF5b3V0SGVhZGVyQ29tcG9uZW50LFxuICAgIEFYUFRoZW1lTGF5b3V0VG9vbGJhckNvbXBvbmVudCxcbiAgICBBWENvbnRleHRNZW51Q29tcG9uZW50LFxuICAgIEFYUFN0YXRlTWVzc2FnZUNvbXBvbmVudCxcbiAgXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2ZhZGVJbicsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwcHgpJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH0pKSxcbiAgICAgIF0pLFxuICAgIF0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1DaGF0Q29tcG9uZW50IGV4dGVuZHMgQVhQUGFnZUxheW91dEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSBjaGF0U2VydmljZSA9IGluamVjdChBWE1DaGF0TWFuYWdlbWVudFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWx0aW1lU2VydmljZSA9IGluamVjdChBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEFYRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgbGF5b3V0QnVpbGRlciA9IGluamVjdChBWFBMYXlvdXRCdWlsZGVyU2VydmljZSk7XG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmUgPSBpbmplY3QoQVhVbnN1YnNjcmliZXIpO1xuICBwcml2YXRlIG5vdGlmaWNhdGlvbkNvbm5lY3RvclNlcnZpY2UgPSBpbmplY3QoQVhNTm90aWZpY2F0aW9uQ29ubmVjdG9yU2VydmljZSk7XG4gIHByaXZhdGUgZGF0YVNlbGVjdG9yU2VydmljZSA9IGluamVjdChBWFBFbnRpdHlEYXRhU2VsZWN0b3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlbnRpdHlSZWdpc3RyeSA9IGluamVjdChBWFBFbnRpdHlEZWZpbml0aW9uUmVnaXN0cnlTZXJ2aWNlKTtcblxuICAvLyBWaWV3IENoaWxkcmVuXG4gIHRhYiA9IHZpZXdDaGlsZDxBWFRhYnNDb21wb25lbnQ+KCd0YWInKTtcbiAgY29udGFpbmVyID0gdmlld0NoaWxkPEFYUFBhZ2VMYXlvdXRDb21wb25lbnQ+KCdjb250YWluZXInKTtcbiAgY2hhdENvbnRleHQgPSB2aWV3Q2hpbGQ8QVhDb250ZXh0TWVudUNvbXBvbmVudD4oJ2NoYXRDb250ZXh0Jyk7XG4gIHRhYkNvbnRleHQgPSB2aWV3Q2hpbGQ8QVhDb250ZXh0TWVudUNvbXBvbmVudD4oJ3RhYkNvbnRleHQnKTtcblxuICAvLyBTdGF0ZSBzaWduYWxzXG4gIHJvb21zID0gc2lnbmFsPEFYTUNoYXRSb29tW10+KFtdKTtcbiAgYWxsUm9vbXMgPSBzaWduYWw8QVhNQ2hhdFJvb21bXT4oW10pO1xuICB0YWJzID0gc2lnbmFsPEFYTUNvbnZlcnNhdGlvblRhYltdPihbXSk7XG4gIHNlbGVjdGVkUm9vbSA9IHNpZ25hbDxBWE1DaGF0Um9vbSB8IG51bGw+KG51bGwpO1xuICBpc0xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICB0eXBpbmdTdGF0dXMgPSBzaWduYWw8eyBba2V5OiBzdHJpbmddOiB7IHVzZXI6IHN0cmluZzsgaXNUeXBpbmc/OiBib29sZWFuIH0gfT4oe30pO1xuXG4gIGVycm9yID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBhY3RpdmVUYWJJbmRleCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBpc1NlYXJjaGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHNlYXJjaFF1ZXJ5ID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBzaG93U2VhcmNoID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwbGFjZWhvbGRlciA9IHNpZ25hbDxzdHJpbmc+KCdAY29udmVyc2F0aW9uOnNlYXJjaC5wbGFjZWhvbGRlcicpO1xuXG4gIC8vIExvY2FsaXplZCBsYWJlbHMgKHByZWxvYWRlZCBmb3Igc3luYyBtZW51IGJ1aWxkaW5nKVxuICB0T3BlbiA9IHNpZ25hbDxzdHJpbmc+KCdPcGVuJyk7XG4gIHRNYXJrU2VlbiA9IHNpZ25hbDxzdHJpbmc+KCdNYXJrIGFzIHNlZW4nKTtcbiAgdFRhYiA9IHNpZ25hbDxzdHJpbmc+KCdUYWInKTtcbiAgdFJlbW92ZUZyb21UYWIgPSBzaWduYWw8c3RyaW5nPignUmVtb3ZlIGZyb20gdGFiJyk7XG4gIHREZWxldGUgPSBzaWduYWw8c3RyaW5nPignRGVsZXRlJyk7XG4gIHRSZW1vdmVDaGF0ID0gc2lnbmFsPHN0cmluZz4oJ1JlbW92ZSBDaGF0Jyk7XG5cbiAgLy8gQ29tcHV0ZWQgc2lnbmFsc1xuICBhY3RpdmVUYWIgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdGFicyA9IHRoaXMudGFicygpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hY3RpdmVUYWJJbmRleCgpO1xuICAgIGlmICh0YWJzLmxlbmd0aCA+IDAgJiYgaW5kZXggPj0gMCAmJiBpbmRleCA8IHRhYnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGFic1tpbmRleF07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIGZpbHRlcmVkUm9vbXMgPSBzaWduYWw8QVhNQ2hhdFJvb21bXT4oW10pO1xuXG4gIHNlYXJjaEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYWxsUm9vbXMgPSB0aGlzLmFsbFJvb21zKCk7XG4gICAgbGV0IGNoYXRSb29tcyA9IFsuLi5hbGxSb29tc107IC8vIFN0YXJ0IHdpdGggYWxsIHJvb21zXG5cbiAgICAvLyBUYWIgZmlsdGVyXG4gICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5hY3RpdmVUYWIoKTtcbiAgICBpZiAoYWN0aXZlVGFiKSB7XG4gICAgICBpZiAoYWN0aXZlVGFiLm5hbWUgPT09ICd1bnJlYWQnKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgbG9jYWwgc3RhdGUgZm9yIHVucmVhZFxuICAgICAgICBjaGF0Um9vbXMgPSBhbGxSb29tcy5maWx0ZXIoKHJvb20pID0+IHJvb20udW5yZWFkQ291bnQgPiAwKTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlVGFiLm5hbWUgPT09ICdhbGwnKSB7XG4gICAgICAgIC8vIExvY2FsIHN0YXRlIGZvciBhbGxcbiAgICAgICAgY2hhdFJvb21zID0gYWxsUm9vbXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb3RoZXIgdGFicyBkZWZpbmVkIGJ5IHRoZSBzZXJ2aWNlXG4gICAgICAgIGNvbnN0IGluY2x1ZGVkSWRzID0gbmV3IFNldChhY3RpdmVUYWIuaW5jbHVkZVJvb21zLm1hcCgocikgPT4gci5pZCkpO1xuICAgICAgICBjaGF0Um9vbXMgPSBhbGxSb29tcy5maWx0ZXIoKHJvb20pID0+IGluY2x1ZGVkSWRzLmhhcyhyb29tLmlkKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIGZpbHRlciAoYXBwbGllcyBvbiB0b3Agb2YgdGFiIGZpbHRlcilcbiAgICBjb25zdCBxdWVyeSA9ICh0aGlzLnNlYXJjaFF1ZXJ5KCkgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IFtdO1xuICAgICAgZm9yIChjb25zdCByb29tIG9mIGNoYXRSb29tcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCByb29tTmFtZSA9ICcnO1xuICAgICAgICAgIC8vIEhhbmRsZSBncm91cCBjaGF0cyB2cy4gc2luZ2xlLXVzZXIgY2hhdHNcbiAgICAgICAgICBpZiAocm9vbS5tZW1iZXJzICYmIHJvb20ubWVtYmVycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByb29tTmFtZSA9IHJvb20udGl0bGUgfHwgJyc7XG4gICAgICAgICAgfSBlbHNlIGlmIChyb29tLm1lbWJlcnMgJiYgcm9vbS5tZW1iZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgbWVtYmVyID0gcm9vbS5tZW1iZXJzWzBdO1xuICAgICAgICAgICAgaWYgKG1lbWJlcikge1xuICAgICAgICAgICAgICByb29tTmFtZSA9IG1lbWJlci5mdWxsTmFtZSB8fCAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBsYXN0TWVzc2FnZSA9IHJvb20ubGFzdE1lc3NhZ2U/Lm1lc3NhZ2U/LmNvbnRlbnQgfHwgJyc7XG4gICAgICAgICAgaWYgKHJvb21OYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpIHx8IGxhc3RNZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZC5wdXNoKHJvb20pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcHJvY2VzcyBzZWFyY2ggZm9yIHJvb20gJHtyb29tLmlkfWAsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2hhdFJvb21zID0gZmlsdGVyZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJlZFJvb21zLnNldChjaGF0Um9vbXMpO1xuICB9KTtcblxuICBhc3luYyBkZWxldGVUYWIodGFiOiBBWE1Db252ZXJzYXRpb25UYWIpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcbiAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjpjb25maXJtYXRpb25zLmRlbGV0ZS10YWIudGl0bGUnKSxcbiAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjpjb25maXJtYXRpb25zLmRlbGV0ZS10YWIubWVzc2FnZScsIHtcbiAgICAgICAgcGFyYW1zOiB7IHRpdGxlOiB0YWIudGl0bGUgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgaWYgKHJlc3VsdC5yZXN1bHQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZGVsZXRlVGFiKHRhYi5pZCk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRUYWJzKCk7XG4gICAgfVxuICB9XG5cbiAgdW5yZWFkQ291bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmFsbFJvb21zKCkuZmlsdGVyKChpKSA9PiBpLnVucmVhZENvdW50ID4gMCkubGVuZ3RoKTtcbiAgYWxsQ291bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmFsbFJvb21zKCkubGVuZ3RoKTtcbiAgaGFzVW5yZWFkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hbGxSb29tcygpLnNvbWUoKGkpID0+IGkudW5yZWFkQ291bnQgPiAwKSk7XG4gIHRvdGFsQ291bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmFsbFJvb21zKCkubGVuZ3RoIHx8IDApO1xuXG4gIG92ZXJyaWRlIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuZXJyb3Iuc2V0KG51bGwpO1xuICAgIGNvbnN0IFtvcGVuVGV4dCwgbWFya1NlZW5UZXh0LCB0YWJUZXh0LCByZW1vdmVGcm9tVGFiVGV4dCwgZGVsZXRlVGV4dCwgcmVtb3ZlQ2hhdFRleHRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOmFjdGlvbnMub3BlbicpLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOmFjdGlvbnMubWFyay1zZWVuJyksXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246YWN0aW9ucy50YWInKSxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjphY3Rpb25zLnJlbW92ZS1mcm9tLXRhYicpLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOmFjdGlvbnMuZGVsZXRlJyksXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246cmVtb3ZlLWNoYXQnKSxcbiAgICBdKTtcbiAgICB0aGlzLnRPcGVuLnNldChvcGVuVGV4dCk7XG4gICAgdGhpcy50TWFya1NlZW4uc2V0KG1hcmtTZWVuVGV4dCk7XG4gICAgdGhpcy50VGFiLnNldCh0YWJUZXh0KTtcbiAgICB0aGlzLnRSZW1vdmVGcm9tVGFiLnNldChyZW1vdmVGcm9tVGFiVGV4dCk7XG4gICAgdGhpcy50RGVsZXRlLnNldChkZWxldGVUZXh0KTtcbiAgICB0aGlzLnRSZW1vdmVDaGF0LnNldChyZW1vdmVDaGF0VGV4dCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5sb2FkQ2hhdHMoKSwgdGhpcy5sb2FkVGFicygpXSk7XG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAvL1xuICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUudGFrZVVudGlsRGVzdHJveSxcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcbiAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZEZyb21Sb3V0ZSgpO1xuICAgICAgfSk7XG4gICAgLy9cblxuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLnJvb20kLnBpcGUodGhpcy51bnN1YnNjcmliZS50YWtlVW50aWxEZXN0cm95KS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnYWRkJzpcbiAgICAgICAgICB0aGlzLmFsbFJvb21zLnVwZGF0ZSgocm9vbXMpID0+IFtldmVudC5wYXlsb2FkLCAuLi5yb29tcy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGV2ZW50LnBheWxvYWQuaWQpXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JlbW92ZSc6XG4gICAgICAgICAgdGhpcy5hbGxSb29tcy51cGRhdGUoKHJvb21zKSA9PiByb29tcy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGV2ZW50LnBheWxvYWQpKTtcbiAgICAgICAgICBpZiAoZXZlbnQucGF5bG9hZCA9PT0gdGhpcy5zZWxlY3RlZFJvb20oKT8uaWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb29tLnNldChudWxsKTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgICB0aGlzLmFsbFJvb21zLnVwZGF0ZSgocm9vbXMpID0+IHJvb21zLm1hcCgocikgPT4gKHIuaWQgPT09IGV2ZW50LnBheWxvYWQuaWQgPyBldmVudC5wYXlsb2FkIDogcikpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc2Vlbic6XG4gICAgICAgICAgdGhpcy5hbGxSb29tcy51cGRhdGUoKHJvb21zKSA9PlxuICAgICAgICAgICAgcm9vbXMubWFwKChyb29tKSA9PiAocm9vbS5pZCA9PT0gZXZlbnQucGF5bG9hZCA/IHsgLi4ucm9vbSwgdW5yZWFkQ291bnQ6IDAgfSA6IHJvb20pKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2UubWVzc2FnZSQucGlwZSh0aGlzLnVuc3Vic2NyaWJlLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICBjYXNlICdhZGQnOiB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGV2ZW50LnBheWxvYWQ7XG4gICAgICAgICAgY29uc3Qgcm9vbXMgPSB0aGlzLmFsbFJvb21zKCk7XG4gICAgICAgICAgY29uc3Qgcm9vbUluZGV4ID0gcm9vbXMuZmluZEluZGV4KChyKSA9PiByLmlkID09PSBtZXNzYWdlLnJvb21JZCk7XG5cbiAgICAgICAgICBpZiAocm9vbUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb21Ub1VwZGF0ZSA9IHJvb21zW3Jvb21JbmRleF07XG4gICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRVc2VyID0gbWVzc2FnZS5hdXRob3IuaWQgPT09IHRoaXMuc2Vzc2lvblNlcnZpY2UudXNlcj8uaWQ7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkUm9vbSA9IHtcbiAgICAgICAgICAgICAgLi4ucm9vbVRvVXBkYXRlLFxuICAgICAgICAgICAgICBsYXN0TWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgICAgICAgdW5yZWFkQ291bnQ6ICFpc0N1cnJlbnRVc2VyID8gKHJvb21Ub1VwZGF0ZS51bnJlYWRDb3VudCB8fCAwKSArIDEgOiByb29tVG9VcGRhdGUudW5yZWFkQ291bnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgbmV3Um9vbXMgPSBbdXBkYXRlZFJvb20sIC4uLnJvb21zLmZpbHRlcigocikgPT4gci5pZCAhPT0gbWVzc2FnZS5yb29tSWQpXTtcbiAgICAgICAgICAgIHRoaXMuYWxsUm9vbXMuc2V0KG5ld1Jvb21zKTtcblxuICAgICAgICAgICAgaWYgKCFpc0N1cnJlbnRVc2VyICYmICh0aGlzLnNlbGVjdGVkUm9vbSgpPy5pZCAhPT0gbWVzc2FnZS5yb29tSWQgfHwgZG9jdW1lbnQuaGlkZGVuKSkge1xuICAgICAgICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSBjb252ZXJ0Q2hhdE1lc3NhZ2VUb05vdGlmaWNhdGlvbihcbiAgICAgICAgICAgICAgICByb29tVG9VcGRhdGUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXIgYXMgdW5rbm93biBhcyBBWFBVc2VyUmVmZXJlbmNlLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNvbm5lY3RvclNlcnZpY2UuY3JlYXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLm5vdGlmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgIGlkOiBtZXNzYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZTogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb29tVG9VcGRhdGUuaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYWN0aXZlV2luZG93OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuZ2V0Um9vbShtZXNzYWdlLnJvb21JZCkudGhlbigobmV3Um9vbSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmFsbFJvb21zLnVwZGF0ZSgoY3VycmVudFJvb21zKSA9PiBbbmV3Um9vbSwgLi4uY3VycmVudFJvb21zXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAndXBkYXRlJzoge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBldmVudC5wYXlsb2FkO1xuICAgICAgICAgIHRoaXMuYWxsUm9vbXMudXBkYXRlKChyb29tcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJvb21zLm1hcCgocm9vbSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocm9vbS5sYXN0TWVzc2FnZT8uaWQgPT09IG1lc3NhZ2UuaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgLi4ucm9vbSxcbiAgICAgICAgICAgICAgICAgIGxhc3RNZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnJvb20ubGFzdE1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJvb207XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2UudHlwaW5nU3RhdHVzJC5waXBlKHRoaXMudW5zdWJzY3JpYmUudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKGFzeW5jIChzdGF0dXMpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI/LmlkO1xuICAgICAgaWYgKHN0YXR1cy51c2VyLmlkICE9PSBjdXJyZW50VXNlcklkKSB7XG4gICAgICAgIGlmIChzdGF0dXMuaXNUeXBpbmcpIHtcbiAgICAgICAgICB0aGlzLnR5cGluZ1N0YXR1cy51cGRhdGUoKHZhbHVlKSA9PiAoe1xuICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICBbc3RhdHVzLnJvb21JZF06IHsgdXNlcjogc3RhdHVzLnVzZXIuZnVsbE5hbWUgfHwgJycsIGlzVHlwaW5nOiB0cnVlIH0sXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudHlwaW5nU3RhdHVzLnVwZGF0ZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgW3N0YXR1cy5yb29tSWRdOiBfLCAuLi5yZXN0IH0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiByZXN0O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRGcm9tUm91dGUoKSB7XG4gICAgY29uc3QgY2hhdElkID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5maXJzdENoaWxkPy5wYXJhbU1hcC5nZXQoJ2lkJyk7XG4gICAgaWYgKGNoYXRJZCkge1xuICAgICAgdGhpcy5vcGVuQ2hhdChjaGF0SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm9vbS5zZXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUGFnZSBJbnRlcmZhY2UgSW1wbGVtZW50YXRpb25cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UGFnZVRpdGxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgcm9vbSA9IHRoaXMuc2VsZWN0ZWRSb29tKCk7XG5cbiAgICBpZiAoIXJvb20gJiYgdGhpcy5sYXlvdXRTZXJ2aWNlLmlzTW9iaWxlRGV2aWNlKCkpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246cGx1cmFsLXRpdGxlJyk7XG4gICAgfVxuXG4gICAgaWYgKCFyb29tKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgeyBtZW1iZXJzLCB0aXRsZSwgaWQgfSA9IHJvb207XG5cbiAgICBpZiAobWVtYmVycy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gdGl0bGUgfHwgKGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjpsYWJlbHMuZ3JvdXAtY2hhdCcpKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZW1iZXIgPSBtZW1iZXJzWzBdO1xuICAgIGlmICghbWVtYmVyKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOmxhYmVscy51bmtub3duLXVzZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVtYmVyLmZ1bGxOYW1lIHx8IChhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246bGFiZWxzLnVua25vd24tdXNlcicpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFBhZ2VEZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGluZyA9IHRoaXMudHlwaW5nU3RhdHVzKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb29tSWQgPSB0aGlzLnNlbGVjdGVkUm9vbSgpPy5pZDtcbiAgICBpZiAoc2VsZWN0ZWRSb29tSWQgJiYgdHlwaW5nW3NlbGVjdGVkUm9vbUlkXT8uaXNUeXBpbmcpIHtcbiAgICAgIHJldHVybiBgJHt0eXBpbmdbc2VsZWN0ZWRSb29tSWRdLnVzZXJ9IGlzIHR5cGluZy4uLmA7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vbSA9IHRoaXMuc2VsZWN0ZWRSb29tKCk7XG4gICAgcmV0dXJuIHJvb20/LnRvcGljIHx8ICcnO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0QmFja0J1dHRvbigpOiBQcm9taXNlPEFYUEJhY2tCdXR0b24gfCBudWxsPiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb29tKCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246YmFjay10by1jaGF0LWxpc3QnKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHJldHVybiBudWxsO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0U2Vjb25kYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIGNvbnN0IGl0ZW1zOiBBWFBBY3Rpb25NZW51SXRlbVtdID0gW107XG4gICAgY29uc3QgaGFzUm9vbSA9ICEhdGhpcy5zZWxlY3RlZFJvb20oKTtcblxuICAgIGlmIChoYXNSb29tKSB7XG4gICAgICBjb25zdCByb29tID0gdGhpcy5zZWxlY3RlZFJvb20oKSE7XG4gICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gdGhpcy5zZXNzaW9uU2VydmljZS51c2VyPy5pZDtcbiAgICAgIGNvbnN0IGNyZWF0b3JJZCA9IHJvb20uYXVkaXRJbmZvPy5jcmVhdGVkPy5ieT8uaWQ7XG4gICAgICBjb25zdCBpc0NyZWF0b3IgPSAhIWN1cnJlbnRVc2VySWQgJiYgISFjcmVhdG9ySWQgJiYgY3VycmVudFVzZXJJZCA9PT0gY3JlYXRvcklkO1xuICAgICAgY29uc3QgaXNHcm91cCA9IChyb29tLm1lbWJlcnM/Lmxlbmd0aCA/PyAwKSA+IDE7XG4gICAgICBjb25zdCBpc0NoYW5uZWwgPSByb29tLnRvcGljID09PSAnY2hhbm5lbCc7XG4gICAgICBjb25zdCBraW5kS2V5ID0gaXNHcm91cCA/ICdAY29udmVyc2F0aW9uOmxhYmVscy5ncm91cC1jaGF0JyA6ICdAY29udmVyc2F0aW9uOnJvb20uaW5kaXZpZHVhbC10aXRsZSc7XG4gICAgICBjb25zdCBraW5kVGV4dCA9IGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYyhraW5kS2V5KTtcbiAgICAgIGNvbnN0IGRlbGV0ZVRleHQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246YWN0aW9ucy5kZWxldGUnKTtcbiAgICAgIGNvbnN0IHJlbW92ZUNoYXRUZXh0ID0gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOnJlbW92ZS1jaGF0Jyk7XG5cbiAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0VkaXQgUm9vbScsXG4gICAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXBlbi10by1zcXVhcmUnLFxuICAgICAgICAgIGNvbW1hbmQ6IHsgbmFtZTogJ2VkaXQtcm9vbScgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiBpc0NyZWF0b3IgPyBgJHtkZWxldGVUZXh0fSAke2tpbmRUZXh0fWAgOiByZW1vdmVDaGF0VGV4dCxcbiAgICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtdHJhc2gtY2FuJyxcbiAgICAgICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgICAgICAgY29tbWFuZDogeyBuYW1lOiBpc0NyZWF0b3IgPyAnZGVsZXRlLXJvb20nIDogJ2xlYXZlLXJvb20nIH0sXG4gICAgICAgIH0gYXMgQVhQQWN0aW9uTWVudUl0ZW0sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBleGVjdXRlKGNvbW1hbmQ6IEFYUEV4ZWN1dGVDb21tYW5kKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoIChjb21tYW5kLm5hbWUpIHtcbiAgICAgIGNhc2UgJ3JlbW92ZS1jaGF0JzpcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246Y29uZmlybWF0aW9ucy5yZW1vdmUtY2hhdC50aXRsZScpLFxuICAgICAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjpjb25maXJtYXRpb25zLnJlbW92ZS1jaGF0Lm1lc3NhZ2UnKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZGVsZXRlUm9vbSh0aGlzLnNlbGVjdGVkUm9vbSgpPy5pZCEpO1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZWRpdC1yb29tJzoge1xuICAgICAgICBjb25zdCByb29tID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5nZXRSb29tKHRoaXMuc2VsZWN0ZWRSb29tKCk/LmlkISk7XG5cbiAgICAgICAgaWYgKCFyb29tKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3VycmVudE1lbWJlcklkcyA9IChyb29tLm1lbWJlcnMgfHwgW10pLm1hcCgobSkgPT4gbS5pZCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IGF3YWl0IHRoaXMubGF5b3V0QnVpbGRlclxuICAgICAgICAgIC5jcmVhdGUoKVxuICAgICAgICAgIC5kaWFsb2coZGlhbG9nID0+IHtcbiAgICAgICAgICAgIGRpYWxvZ1xuICAgICAgICAgICAgICAuc2V0VGl0bGUoJ0VkaXQgUm9vbScpXG4gICAgICAgICAgICAgIC5zZXRTaXplKCdzbScpXG4gICAgICAgICAgICAgIC5zZXRDb250ZXh0KHsgdGl0bGU6IHJvb20udGl0bGUgfHwgJycsIG1lbWJlcnM6IGN1cnJlbnRNZW1iZXJJZHMsIGF2YXRhcjogcm9vbS5hdmF0YXIgfSlcbiAgICAgICAgICAgICAgLmNvbnRlbnQobGF5b3V0QnVpbGRlciA9PiB7XG4gICAgICAgICAgICAgICAgbGF5b3V0QnVpbGRlci5mbGV4KGZsZXggPT4ge1xuICAgICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgICAgICAuc2V0RGlyZWN0aW9uKCdjb2x1bW4nKVxuICAgICAgICAgICAgICAgICAgICAuZm9ybUZpZWxkKCdAY29udmVyc2F0aW9uOm5ldy1jb252ZXJzYXRpb24udGl0bGUubGFiZWwnLCBmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgndGl0bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC50ZXh0Qm94KHsgcGxhY2Vob2xkZXI6ICdAY29udmVyc2F0aW9uOm5ldy1jb252ZXJzYXRpb24udGl0bGUucGxhY2Vob2xkZXInIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuZm9ybUZpZWxkKCdAY29udmVyc2F0aW9uOm5ldy1jb252ZXJzYXRpb24ubG9va3VwLmxhYmVsJywgZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ21lbWJlcnMnKTtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5sb29rdXBCb3goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnU2VjdXJpdHlNYW5hZ2VtZW50LlVzZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdub3RFcXVhbCcgYXMgYW55IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI/LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB9IGFzIGFueSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0F2YXRhcicsIGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdhdmF0YXInKTtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5jdXN0b21XaWRnZXQoJ2F2YXRhcicsIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5zZXRBY3Rpb25zKGFjdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGFjdGlvbnMuY2FuY2VsKCdAZ2VuZXJhbDphY3Rpb25zLmNhbmNlbC50aXRsZScpLnN1Ym1pdCgnU2F2ZScpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG93KCk7XG5cbiAgICAgICAgY29uc3QgY3R4ID0gZGlhbG9nUmVmLmNvbnRleHQoKSBhcyB7XG4gICAgICAgICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgICAgICAgbWVtYmVycz86IHN0cmluZ1tdO1xuICAgICAgICAgIGF2YXRhcj86IEFYUEZpbGVMaXN0SXRlbSB8IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGRpYWxvZ1JlZi5hY3Rpb24oKTtcbiAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIGlmIChhY3Rpb24gPT09ICdjYW5jZWwnKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBBcnJheS5pc0FycmF5KGN0eC5tZW1iZXJzKSA/IGN0eC5tZW1iZXJzIDogW107XG4gICAgICAgIGNvbnN0IHRvQWRkID0gc2VsZWN0ZWRJZHMuZmlsdGVyKChpZCkgPT4gIWN1cnJlbnRNZW1iZXJJZHMuaW5jbHVkZXMoaWQpKTtcbiAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBjdXJyZW50TWVtYmVySWRzLmZpbHRlcigoaWQpID0+ICFzZWxlY3RlZElkcy5pbmNsdWRlcyhpZCkpO1xuXG4gICAgICAgIGNvbnN0IHRyaW1tZWRUaXRsZSA9IHR5cGVvZiBjdHgudGl0bGUgPT09ICdzdHJpbmcnID8gY3R4LnRpdGxlLnRyaW0oKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdGl0bGVDaGFuZ2VkID0gdHlwZW9mIHRyaW1tZWRUaXRsZSA9PT0gJ3N0cmluZycgJiYgdHJpbW1lZFRpdGxlICE9PSAocm9vbS50aXRsZSB8fCAnJykudHJpbSgpO1xuICAgICAgICBjb25zdCBhdmF0YXJDaGFuZ2VkID0gKGN0eC5hdmF0YXIgPz8gbnVsbCkgIT09IChyb29tLmF2YXRhciA/PyBudWxsKTtcblxuICAgICAgICBjb25zdCB1cGRhdGVQYXlsb2FkOiBhbnkgPSB7fTtcbiAgICAgICAgaWYgKHRpdGxlQ2hhbmdlZCkge1xuICAgICAgICAgIHVwZGF0ZVBheWxvYWQudGl0bGUgPSB0cmltbWVkVGl0bGUhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdmF0YXJDaGFuZ2VkKSB7XG4gICAgICAgICAgdXBkYXRlUGF5bG9hZC5hdmF0YXIgPSBjdHguYXZhdGFyID8/IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHM6IFByb21pc2U8YW55PltdID0gW107XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh1cGRhdGVQYXlsb2FkKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgb3BzLnB1c2godGhpcy5jaGF0U2VydmljZS51cGRhdGVSb29tKHJvb20uaWQsIHVwZGF0ZVBheWxvYWQpKTtcbiAgICAgICAgfVxuICAgICAgICB0b0FkZC5mb3JFYWNoKChpZCkgPT4gb3BzLnB1c2godGhpcy5jaGF0U2VydmljZS5hZGRQYXJ0aWNpcGFudChyb29tLmlkLCBpZCkpKTtcbiAgICAgICAgdG9SZW1vdmUuZm9yRWFjaCgoaWQpID0+IG9wcy5wdXNoKHRoaXMuY2hhdFNlcnZpY2UucmVtb3ZlUGFydGljaXBhbnQocm9vbS5pZCwgaWQpKSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAob3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwob3BzKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZENoYXRzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKCdGYWlsZWQgdG8gdXBkYXRlIHJvb20nKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2RlbGV0ZS1yb29tJzoge1xuICAgICAgICBjb25zdCByb29tID0gdGhpcy5zZWxlY3RlZFJvb20oKTtcbiAgICAgICAgaWYgKCFyb29tKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOmNvbmZpcm1hdGlvbnMuZGVsZXRlLXJvb20udGl0bGUnKSxcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246Y29uZmlybWF0aW9ucy5kZWxldGUtcm9vbS5tZXNzYWdlJyksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmRlbGV0ZVJvb20ocm9vbS5pZCk7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLyddLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdsZWF2ZS1yb29tJzoge1xuICAgICAgICBjb25zdCByb29tID0gdGhpcy5zZWxlY3RlZFJvb20oKTtcbiAgICAgICAgaWYgKCFyb29tKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI/LmlkITtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246Y29uZmlybWF0aW9ucy5yZW1vdmUtY2hhdC50aXRsZScpLFxuICAgICAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjpjb25maXJtYXRpb25zLnJlbW92ZS1jaGF0Lm1lc3NhZ2UnKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UucmVtb3ZlUGFydGljaXBhbnQocm9vbS5pZCwgY3VycmVudFVzZXJJZCk7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLyddLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgb25CYWNrQnV0dG9uQ2xpY2soKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2VsZWN0ZWRSb29tLnNldChudWxsKTtcbiAgICB0aGlzLnR5cGluZ1N0YXR1cy51cGRhdGUoKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCB7IFt0aGlzLnNlbGVjdGVkUm9vbSgpPy5pZCFdOiBfLCAuLi5yZXN0IH0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiByZXN0O1xuICAgIH0pO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xuICB9XG5cbiAgLy8gTWV0aG9kc1xuICBnZXRSb29tQ291bnRGb3JUYWIodGFiOiBBWE1Db252ZXJzYXRpb25UYWIpOiBudW1iZXIge1xuICAgIGNvbnN0IGFsbFJvb21zID0gdGhpcy5hbGxSb29tcygpO1xuICAgIC8vIEZvciBhbGwgdGFiIHR5cGVzLCBvbmx5IGNvdW50IHJvb21zIHRoYXQgaGF2ZSB1bnJlYWQgbWVzc2FnZXNcbiAgICBpZiAodGFiLm5hbWUgPT09ICdhbGwnIHx8IHRhYi5uYW1lID09PSAndW5yZWFkJykge1xuICAgICAgcmV0dXJuIGFsbFJvb21zLmZpbHRlcigocm9vbSkgPT4gcm9vbS51bnJlYWRDb3VudCA+IDApLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgaW5jbHVkZWRJZHMgPSBuZXcgU2V0KHRhYi5pbmNsdWRlUm9vbXMubWFwKChyKSA9PiByLmlkKSk7XG4gICAgcmV0dXJuIGFsbFJvb21zLmZpbHRlcigocm9vbSkgPT4gaW5jbHVkZWRJZHMuaGFzKHJvb20uaWQpICYmIHJvb20udW5yZWFkQ291bnQgPiAwKS5sZW5ndGg7XG4gIH1cblxuICBhc3luYyBsb2FkVGFicygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2NhbFRhYnM6IEFYTUNvbnZlcnNhdGlvblRhYltdID0gW1xuICAgICAge1xuICAgICAgICBpZDogJ2FsbC1sb2NhbCcsXG4gICAgICAgIG5hbWU6ICdhbGwnLFxuICAgICAgICB0aXRsZTogJ0FsbCcsXG4gICAgICAgIGV4Y2x1ZGVSb29tczogW10sXG4gICAgICAgIGluY2x1ZGVSb29tczogW10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ3VucmVhZC1sb2NhbCcsXG4gICAgICAgIG5hbWU6ICd1bnJlYWQnLFxuICAgICAgICB0aXRsZTogJ1VucmVhZCcsXG4gICAgICAgIGV4Y2x1ZGVSb29tczogW10sXG4gICAgICAgIGluY2x1ZGVSb29tczogW10sXG4gICAgICB9LFxuICAgIF07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UubGlzdFRhYnMoKTtcbiAgICAgIHRoaXMudGFicy5zZXQoWy4uLmxvY2FsVGFicywgLi4ucmVzdWx0Lml0ZW1zXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHRhYnM6JywgZXJyb3IpO1xuICAgICAgdGhpcy50YWJzLnNldChsb2NhbFRhYnMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRDaGF0cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIHRoZSB1cGRhdGVkIHNlcnZpY2UgbWV0aG9kIHRvIGdldCByb29tcyB3aXRoIGxhc3QgbWVzc2FnZXNcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5saXN0Um9vbXMoKTtcbiAgICAgIC8vIFNvcnQgcm9vbXMgYnkgbGFzdCBtZXNzYWdlIGNyZWF0ZWQuYXQgdGltZXN0YW1wIGluIGRlc2NlbmRpbmcgb3JkZXJcbiAgICAgIGNvbnN0IHNvcnRlZFJvb21zID0gcmVzcG9uc2UuaXRlbXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBkYXRlQSA9IGEubGFzdE1lc3NhZ2U/LmF1ZGl0SW5mbz8uY3JlYXRlZD8uYXQgfHwgYS5hdWRpdEluZm8/LmNyZWF0ZWQ/LmF0IHx8IDA7XG4gICAgICAgIGNvbnN0IGRhdGVCID0gYi5sYXN0TWVzc2FnZT8uYXVkaXRJbmZvPy5jcmVhdGVkPy5hdCB8fCBiLmF1ZGl0SW5mbz8uY3JlYXRlZD8uYXQgfHwgMDtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVCKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShkYXRlQSkuZ2V0VGltZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmFsbFJvb21zLnNldChzb3J0ZWRSb29tcyk7XG4gICAgICB0aGlzLnJvb21zLnNldChzb3J0ZWRSb29tcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KCdGYWlsZWQgdG8gbG9hZCBjaGF0cy4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgY2hhdHM6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hDaGF0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZENoYXRzKCk7XG4gIH1cblxuICBhc3luYyBvcGVuQ2hhdChjaGF0SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnR5cGluZ1N0YXR1cy51cGRhdGUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgW2NoYXRJZF06IF8sIC4uLnJlc3QgfSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcmVzdDtcbiAgICAgIH0pO1xuICAgICAgLy8gVXNlIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBtYXJrIGNoYXQgYXMgcmVhZFxuICAgICAgYXdhaXQgdGhpcy5jaGF0U2VydmljZS5tYXJrUm9vbVNlZW4oY2hhdElkKTtcblxuICAgICAgLy8gVXBkYXRlIGxvY2FsIHN0YXRlIHdpdGhvdXQgbWFraW5nIGFub3RoZXIgbmV0d29yayByZXF1ZXN0XG4gICAgICBjb25zdCBjdXJyZW50Um9vbXMgPSB0aGlzLmFsbFJvb21zKCk7XG4gICAgICBjb25zdCB1cGRhdGVkUm9vbXMgPSBjdXJyZW50Um9vbXMubWFwKChyb29tKSA9PiB7XG4gICAgICAgIGlmIChyb29tLmlkID09PSBjaGF0SWQpIHtcbiAgICAgICAgICAvLyBSZXNldCB1bnJlYWQgY291bnQgZm9yIHRoZSBzZWxlY3RlZCByb29tXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucm9vbSwgdW5yZWFkQ291bnQ6IDAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm9vbTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIHJvb21zIHNpZ25hbHNcbiAgICAgIHRoaXMuYWxsUm9vbXMuc2V0KHVwZGF0ZWRSb29tcyk7XG4gICAgICB0aGlzLnJvb21zLnNldCh1cGRhdGVkUm9vbXMpO1xuXG4gICAgICAvLyBGaW5kIHRoZSBzZWxlY3RlZCByb29tXG4gICAgICBjb25zdCBzZWxlY3RlZFJvb20gPSB1cGRhdGVkUm9vbXMuZmluZCgocm9vbSkgPT4gcm9vbS5pZCA9PT0gY2hhdElkKSB8fCBudWxsO1xuICAgICAgdGhpcy5zZWxlY3RlZFJvb20uc2V0KHNlbGVjdGVkUm9vbSk7XG5cbiAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjaGF0IGRldGFpbHNcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtjaGF0SWRdLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBtYXJrIGNoYXQgYXMgcmVhZDonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgc2VhcmNoQ2hhdChxdWVyeTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWFyY2hRdWVyeS5zZXQocXVlcnkpO1xuICAgIHRoaXMuaXNTZWFyY2hpbmcuc2V0KCEhcXVlcnkpO1xuICB9XG5cbiAgLy8gSGVhZGVyIG1ldGhvZHNcbiAgb25TZWFyY2gocXVlcnk6IHN0cmluZykge1xuICAgIHRoaXMuc2VhcmNoQ2hhdChxdWVyeSk7XG4gIH1cblxuICBjbGVhclNlYXJjaCgpIHtcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5LnNldCgnJyk7XG4gICAgdGhpcy5pc1NlYXJjaGluZy5zZXQoZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgb3BlblNlbGVjdG9yKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW50aXR5OiBBWFBFbnRpdHkgPSBhd2FpdCB0aGlzLmVudGl0eVJlZ2lzdHJ5LnJlc29sdmUoJ1NlY3VyaXR5TWFuYWdlbWVudCcsICdVc2VyJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRhdGFTZWxlY3RvclNlcnZpY2Uub3Blbih7XG4gICAgICAgIGVudGl0eSxcbiAgICAgICAgdGl0bGU6ICdTZWxlY3QgVXNlcnMnLFxuICAgICAgICBhbGxvd011bHRpcGxlOiB0cnVlLFxuICAgICAgICBjb2x1bW5zOiBbJ3VzZXJuYW1lJywgJ2Rpc3BsYXlOYW1lJywgJ3JvbGVJZHMnXSxcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgIGZpZWxkOiAnaWQnLFxuICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdlcXVhbCcgfSxcbiAgICAgICAgICAvLyB2YWx1ZTogdGhpcy5zZXNzaW9uU2VydmljZS51c2VyPy5pZCxcbiAgICAgICAgICB2YWx1ZTogJ3t7IHNlc3Npb24uY3VycmVudFVzZXIoKS5pZCB9fScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJlc3VsdD8uaXRlbXMpXG4gICAgICAgID8gcmVzdWx0IS5pdGVtc1xuICAgICAgICAgIC5tYXAoKHU6IGFueSkgPT4gdT8uaWQpXG4gICAgICAgICAgLmZpbHRlcigoaWQ6IGFueSk6IGlkIGlzIHN0cmluZyA9PiB0eXBlb2YgaWQgPT09ICdzdHJpbmcnICYmIGlkLmxlbmd0aCA+IDApXG4gICAgICAgIDogW107XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLy8gRm9vdGVyIG1ldGhvZHNcbiAgYXN5bmMgb25OZXdDb252ZXJzYXRpb24oKSB7XG4gICAgY29uc3QgcHJlc2VsZWN0ZWRVc2VySWRzID0gYXdhaXQgdGhpcy5vcGVuU2VsZWN0b3IoKTtcbiAgICBpZiAoIXByZXNlbGVjdGVkVXNlcklkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbWVtYmVycyA9IHByZXNlbGVjdGVkVXNlcklkcztcbiAgICBsZXQgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYXZhdGFyOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHByZXNlbGVjdGVkVXNlcklkcy5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSBhd2FpdCB0aGlzLmxheW91dEJ1aWxkZXJcbiAgICAgICAgLmNyZWF0ZSgpXG4gICAgICAgIC5kaWFsb2coZGlhbG9nID0+IHtcbiAgICAgICAgICBkaWFsb2dcbiAgICAgICAgICAgIC5zZXRUaXRsZSgnQGNvbnZlcnNhdGlvbjpuZXctY29udmVyc2F0aW9uLmhlYWRlcicpXG4gICAgICAgICAgICAuc2V0U2l6ZSgnc20nKVxuICAgICAgICAgICAgLnNldENvbnRleHQoeyBsb29rdXA6IHByZXNlbGVjdGVkVXNlcklkcywgdGl0bGU6ICcnLCBhdmF0YXI6IG51bGwgfSlcbiAgICAgICAgICAgIC5jb250ZW50KGxheW91dEJ1aWxkZXIgPT4ge1xuICAgICAgICAgICAgICBsYXlvdXRCdWlsZGVyLmZsZXgoZmxleCA9PiB7XG4gICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgICAgLnNldERpcmVjdGlvbignY29sdW1uJylcbiAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0Bjb252ZXJzYXRpb246bmV3LWNvbnZlcnNhdGlvbi5sb29rdXAubGFiZWwnLCBmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ2xvb2t1cCcpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5sb29rdXBCb3goeyBlbnRpdHk6ICdTZWN1cml0eU1hbmFnZW1lbnQuVXNlcicsIG11bHRpcGxlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0Bjb252ZXJzYXRpb246bmV3LWNvbnZlcnNhdGlvbi50aXRsZS5sYWJlbCcsIGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgndGl0bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmlzaWJsZShge3shKGNvbnRleHQuZXZhbCgnbG9va3VwJyk/Lmxlbmd0aCA+IDEpIH19YCk7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQGNvbnZlcnNhdGlvbjpuZXctY29udmVyc2F0aW9uLnRpdGxlLnBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCgnQXZhdGFyJywgZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdhdmF0YXInKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuY3VzdG9tV2lkZ2V0KCdhdmF0YXInLCB7IHJlZklkOiAnZ3JvdXAnLCByZWZUeXBlOiAnZ3JvdXAnIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zZXRBY3Rpb25zKGFjdGlvbnMgPT4ge1xuICAgICAgICAgICAgICBhY3Rpb25zLmNhbmNlbCgnQGdlbmVyYWw6YWN0aW9ucy5jYW5jZWwudGl0bGUnKS5zdWJtaXQoJ0Bjb252ZXJzYXRpb246bmV3LWNvbnZlcnNhdGlvbi5hY3Rpb25zLmFjY2VwdC1zZW5kJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3coKTtcblxuICAgICAgY29uc3QgY3R4ID0gZGlhbG9nUmVmLmNvbnRleHQoKSBhcyB7IGxvb2t1cD86IHN0cmluZ1tdOyB0aXRsZT86IHN0cmluZzsgYXZhdGFyPzogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgY29uc3QgYWN0aW9uID0gZGlhbG9nUmVmLmFjdGlvbigpO1xuICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IGN0eD8ubG9va3VwID8/IFtdO1xuICAgICAgaWYgKGFjdGlvbiA9PT0gJ2NhbmNlbCcgfHwgIXNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtZW1iZXJzID0gc2VsZWN0ZWQ7XG4gICAgICB0aXRsZSA9IGN0eD8udGl0bGU7XG4gICAgICBhdmF0YXIgPSBjdHg/LmF2YXRhcjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5jcmVhdGVSb29tKG1lbWJlcnMsIHRpdGxlLCBhdmF0YXIgfHwgdW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaENoYXQoKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyZXMuaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcignRmFpbGVkIHRvIGNyZWF0ZSByb29tJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2xpZGluZyBpdGVtIGFjdGlvbnMgKG1vYmlsZSlcbiAgb25TbGlkZUFjdGlvbihcbiAgICByb29tOiBBWE1DaGF0Um9vbSxcbiAgICBhY3Rpb246IC8vICdtdXRlJyB8XG4gICAgICAnZGVsZXRlJyxcbiAgKSB7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIC8vIGNhc2UgJ211dGUnOlxuICAgICAgLy8gICB0aGlzLnRvYXN0U2VydmljZS53YXJuaW5nKCdNdXRlIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICB0aGlzLmRlbGV0ZVJvb20ocm9vbS5pZCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVJvb20ocm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGlhbG9nUmVzdWx0ID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgICdEZWxldGUgUm9vbScsXG4gICAgICAgICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIFJvb20/JyxcbiAgICAgICAgJ2RhbmdlcicsXG4gICAgICAgICdob3Jpem9udGFsJyxcbiAgICAgICk7XG4gICAgICBpZiAoZGlhbG9nUmVzdWx0LnJlc3VsdCkge1xuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLmRlbGV0ZVJvb20ocm9vbUlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgRGVsZXRpbmcgUm9vbSB3aXRoIFJvb20gaWQ6ICR7cm9vbUlkfWAsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyBDb250ZXh0IG1lbnVzIChkZXNrdG9wKVxuICBwcml2YXRlIGNvbnRleHRSb29tOiBBWE1DaGF0Um9vbSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbnRleHRUYWI6IEFYTUNvbnZlcnNhdGlvblRhYiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbnRleHRUYWJJbmRleCA9IC0xO1xuICBvcGVuQ29udGV4dE1lbnUoZXY6IE1vdXNlRXZlbnQsIHJvb206IEFYTUNoYXRSb29tKSB7XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmNvbnRleHRSb29tID0gcm9vbTtcbiAgICB0aGlzLmNoYXRDb250ZXh0KCk/LnNob3dBdCh7IHg6IGV2LmNsaWVudFgsIHk6IGV2LmNsaWVudFkgfSk7XG4gIH1cbiAgb3BlblRhYkNvbnRleHRNZW51KGV2OiBNb3VzZUV2ZW50LCB0YWI6IEFYTUNvbnZlcnNhdGlvblRhYiwgaW5kZXg6IG51bWJlcikge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jb250ZXh0VGFiID0gdGFiO1xuICAgIHRoaXMuY29udGV4dFRhYkluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy50YWJDb250ZXh0KCk/LnNob3dBdCh7IHg6IGV2LmNsaWVudFgsIHk6IGV2LmNsaWVudFkgfSk7XG4gIH1cbiAgb25Db250ZXh0T3BlbmluZyhlOiBBWENvbnRleHRNZW51T3BlbmluZ0V2ZW50KSB7XG4gICAgY29uc3QgaXRlbXM6IEFYTWVudUl0ZW1bXSA9IFtdO1xuXG4gICAgLy8gR2VuZXJhbCBJdGVtc1xuICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAnb3BlbicsIHRleHQ6IHRoaXMudE9wZW4oKSwgaWNvbjogJ2ZhLWxpZ2h0IGZhLW1lc3NhZ2UtbGluZXMnIH0pO1xuXG4gICAgLy8gUmVzb2x2ZSBjb250ZXh0IHJvb20gb25jZVxuICAgIGNvbnN0IGNvbnRleHRSb29tID0gdGhpcy5jb250ZXh0Um9vbTtcblxuICAgIC8vIE1hcmsgYXMgc2VlbiAob25seSBpZiB0aGUgcm9vbSBoYXMgdW5yZWFkIG1lc3NhZ2VzKVxuICAgIGlmIChjb250ZXh0Um9vbSAmJiAoY29udGV4dFJvb20udW5yZWFkQ291bnQgfHwgMCkgPiAwKSB7XG4gICAgICBpdGVtcy5wdXNoKHsgbmFtZTogJ21hcmstc2VlbicsIHRleHQ6IHRoaXMudE1hcmtTZWVuKCksIGljb246ICdmYS1saWdodCBmYS1lbnZlbG9wZS1vcGVuJyB9KTtcbiAgICB9XG5cbiAgICAvLyBUYWIgc3VibWVudSBiZWhhdmlvciAoVGVsZWdyYW0tbGlrZSlcbiAgICBjb25zdCBhbGxUYWJzID0gdGhpcy50YWJzKCk7XG4gICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5hY3RpdmVUYWIoKTtcbiAgICBjb25zdCBjdXN0b21UYWJzID0gYWxsVGFicy5maWx0ZXIoKHQpID0+IHQubmFtZSAhPT0gJ2FsbCcgJiYgdC5uYW1lICE9PSAndW5yZWFkJyk7XG4gICAgaWYgKGNvbnRleHRSb29tICYmIGN1c3RvbVRhYnMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGFjdGl2ZVRhYj8ubmFtZSA9PT0gJ2FsbCcpIHtcbiAgICAgICAgY29uc3QgdGFiTWVudUl0ZW1zOiBBWE1lbnVJdGVtW10gPSBjdXN0b21UYWJzLm1hcCgodCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzSW5jbHVkZWQgPSAodC5pbmNsdWRlUm9vbXMgfHwgW10pLnNvbWUoKHIpID0+IHIuaWQgPT09IGNvbnRleHRSb29tLmlkKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYHRhYi50b2dnbGU6JHt0LmlkfWAsXG4gICAgICAgICAgICB0ZXh0OiB0LnRpdGxlLFxuICAgICAgICAgICAgaWNvbjogaXNJbmNsdWRlZCA/ICdmYS1saWdodCBmYS1jaGVjaycgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSBhcyBBWE1lbnVJdGVtO1xuICAgICAgICB9KTtcbiAgICAgICAgaXRlbXMucHVzaCh7IG5hbWU6ICd0YWInLCB0ZXh0OiB0aGlzLnRUYWIoKSwgaWNvbjogJ2ZhLWxpZ2h0IGZhLWZvbGRlci10cmVlJywgaXRlbXM6IHRhYk1lbnVJdGVtcyB9KTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlVGFiPy5uYW1lID09PSAndW5yZWFkJykge1xuICAgICAgICAvLyBObyB0YWIgc3VibWVudSBpbiB1bnJlYWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9ubHkgcmVtb3ZlIGZyb20gY3VycmVudCBjdXN0b20gdGFiXG4gICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgIG5hbWU6ICd0YWIucmVtb3ZlLWN1cnJlbnQnLFxuICAgICAgICAgIHRleHQ6IHRoaXMudFJlbW92ZUZyb21UYWIoKSxcbiAgICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtc3F1YXJlLW1pbnVzJyxcbiAgICAgICAgICBjb2xvcjogJ3dhcm5pbmcnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEYW5nZXJvdXMgYWN0aW9uIGF0IHRoZSBlbmRcbiAgICBpZiAoY29udGV4dFJvb20pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI/LmlkO1xuICAgICAgY29uc3QgY3JlYXRvcklkID0gY29udGV4dFJvb20uYXVkaXRJbmZvPy5jcmVhdGVkPy5ieT8uaWQ7XG4gICAgICBjb25zdCBpc0NyZWF0b3IgPSAhIWN1cnJlbnRVc2VySWQgJiYgISFjcmVhdG9ySWQgJiYgY3VycmVudFVzZXJJZCA9PT0gY3JlYXRvcklkO1xuICAgICAgY29uc3QgdGV4dCA9IGlzQ3JlYXRvciA/IHRoaXMudERlbGV0ZSgpIDogdGhpcy50UmVtb3ZlQ2hhdCgpO1xuICAgICAgY29uc3QgbmFtZSA9IGlzQ3JlYXRvciA/ICdkZWxldGUtcm9vbScgOiAnbGVhdmUtcm9vbSc7XG4gICAgICBpdGVtcy5wdXNoKHsgbmFtZSwgdGV4dCwgaWNvbjogJ2ZhLWxpZ2h0IGZhLXRyYXNoLWNhbicsIGNvbG9yOiAnZGFuZ2VyJyB9KTtcbiAgICB9XG5cbiAgICBlLml0ZW1zID0gaXRlbXM7XG4gIH1cbiAgLy8gVGFiIGhlYWRlciBjb250ZXh0IG1lbnUgKHN5bmNocm9ub3VzIGJ1aWxkKVxuICBvblRhYkNvbnRleHRPcGVuaW5nKGU6IEFYQ29udGV4dE1lbnVPcGVuaW5nRXZlbnQpIHtcbiAgICBjb25zdCBpdGVtczogQVhNZW51SXRlbVtdID0gW107XG4gICAgY29uc3QgdGFiID0gdGhpcy5jb250ZXh0VGFiO1xuICAgIGlmICghdGFiKSB7XG4gICAgICBlLml0ZW1zID0gaXRlbXM7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0YWIubmFtZSA9PT0gJ2FsbCcgfHwgdGFiLm5hbWUgPT09ICd1bnJlYWQnKSB7XG4gICAgICBpdGVtcy5wdXNoKHsgbmFtZTogJ3RhYi5hZGQnLCB0ZXh0OiAnQWRkIHRhYicsIGljb246ICdmYS1saWdodCBmYS1zcXVhcmUtcGx1cycgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAndGFiLnJlbW92ZScsIHRleHQ6ICdSZW1vdmUgdGFiJywgaWNvbjogJ2ZhLWxpZ2h0IGZhLXRyYXNoLWNhbicsIGNvbG9yOiAnZGFuZ2VyJyB9KTtcbiAgICB9XG4gICAgZS5pdGVtcyA9IGl0ZW1zO1xuICB9XG4gIGFzeW5jIG9uVGFiQ29udGV4dEl0ZW1DbGljayhlOiBBWENvbnRleHRNZW51SXRlbXNDbGlja0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHRUYWIpIHJldHVybjtcbiAgICBzd2l0Y2ggKGUuaXRlbS5uYW1lKSB7XG4gICAgICBjYXNlICd0YWIuYWRkJzoge1xuICAgICAgICAvLyBCdWlsZCBkaWFsb2cgZm9yIGNyZWF0aW5nIGEgbmV3IGN1c3RvbSB0YWJcbiAgICAgICAgY29uc3Qgcm9vbXMgPSB0aGlzLmFsbFJvb21zKCk7XG4gICAgICAgIGNvbnN0IHJvb21PcHRpb25zID0gcm9vbXMubWFwKChyKSA9PiAoe1xuICAgICAgICAgIGlkOiByLmlkLFxuICAgICAgICAgIHRpdGxlOiAoci5tZW1iZXJzPy5sZW5ndGggPz8gMCkgPiAxID8gci50aXRsZSB8fCAnJyA6IHIubWVtYmVycz8uWzBdPy5mdWxsTmFtZSB8fCAnJyxcbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSBhd2FpdCB0aGlzLmxheW91dEJ1aWxkZXJcbiAgICAgICAgICAuY3JlYXRlKClcbiAgICAgICAgICAuZGlhbG9nKGRpYWxvZyA9PiB7XG4gICAgICAgICAgICBkaWFsb2dcbiAgICAgICAgICAgICAgLnNldFRpdGxlKCdOZXcgVGFiJylcbiAgICAgICAgICAgICAgLnNldFNpemUoJ3NtJylcbiAgICAgICAgICAgICAgLnNldENvbnRleHQoeyB0aXRsZTogJycsIHJvb21zOiBbXSB9KVxuICAgICAgICAgICAgICAuY29udGVudChsYXlvdXRCdWlsZGVyID0+IHtcbiAgICAgICAgICAgICAgICBsYXlvdXRCdWlsZGVyLmZsZXgoZmxleCA9PiB7XG4gICAgICAgICAgICAgICAgICBmbGV4XG4gICAgICAgICAgICAgICAgICAgIC5zZXREaXJlY3Rpb24oJ2NvbHVtbicpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoJ1RpdGxlJywgZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ3RpdGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQudGV4dEJveCh7IHBsYWNlaG9sZGVyOiAnRW50ZXIgdGFiIHRpdGxlJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCgnQ2hhdHMnLCBmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgncm9vbXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5zZWxlY3RCb3goeyB2YWx1ZUZpZWxkOiAnaWQnLCB0ZXh0RmllbGQ6ICd0aXRsZScsIGRhdGFTb3VyY2U6IHJvb21PcHRpb25zLCBtdWx0aXBsZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5zZXRBY3Rpb25zKGFjdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGFjdGlvbnMuY2FuY2VsKCdDYW5jZWwnKS5zdWJtaXQoJ0NyZWF0ZScpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG93KCk7XG5cbiAgICAgICAgY29uc3QgYWN0aW9uID0gZGlhbG9nUmVmLmFjdGlvbigpO1xuICAgICAgICBjb25zdCBjdHggPSBkaWFsb2dSZWYuY29udGV4dCgpIGFzIHsgdGl0bGU/OiBzdHJpbmc7IHJvb21zPzogYW55W10gfTtcbiAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIGlmIChhY3Rpb24gPT09ICdjYW5jZWwnIHx8ICFjdHg/LnRpdGxlKSByZXR1cm47XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gY3R4LnRpdGxlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJy0nKS5zbGljZSgwLCA2NCk7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBBcnJheS5pc0FycmF5KGN0eC5yb29tcykgPyBjdHgucm9vbXMgOiBbXTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHNlbGVjdGVkXG4gICAgICAgICAgICAubWFwKCh2OiBhbnkpID0+ICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2IDogdj8uaWQpKVxuICAgICAgICAgICAgLmZpbHRlcigodjogYW55KTogdiBpcyBzdHJpbmcgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoID4gMCk7XG4gICAgICAgICAgY29uc3QgaW5jbHVkZVJvb21zID0gcm9vbXMuZmlsdGVyKChyKSA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyhyLmlkKSk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGF0U2VydmljZS5jcmVhdGVUYWIoeyBuYW1lLCB0aXRsZTogY3R4LnRpdGxlLnRyaW0oKSwgaW5jbHVkZVJvb21zLCBleGNsdWRlUm9vbXM6IFtdIH0pO1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFRhYnMoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSB0YWInLCBlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAndGFiLnJlbW92ZSc6IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVUYWIodGhpcy5jb250ZXh0VGFiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIC8vICh0aGlzLnRhYigpIGFzIGFueSkuc2V0SW5kaWNhdG9yUG9zaXRpb24odGhpcy5hY3RpdmVUYWIoKSk7XG4gIH1cbiAgb25Db250ZXh0SXRlbUNsaWNrKGU6IEFYQ29udGV4dE1lbnVJdGVtc0NsaWNrRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dFJvb20pIHJldHVybjtcbiAgICBjb25zdCByb29tSWQgPSB0aGlzLmNvbnRleHRSb29tLmlkO1xuICAgIHN3aXRjaCAoZS5pdGVtLm5hbWUpIHtcbiAgICAgIGNhc2UgJ29wZW4nOlxuICAgICAgICB0aGlzLm9wZW5DaGF0KHJvb21JZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWFyay1zZWVuJzpcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZVxuICAgICAgICAgIC5tYXJrUm9vbVNlZW4ocm9vbUlkKVxuICAgICAgICAgIC5jYXRjaChhc3luYyAoKSA9PlxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKFxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246bWVzc2FnZXMubWFyay1zZWVuLWZhaWxlZCcpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGNhc2UgJ211dGUnOlxuICAgICAgLy8gICB0aGlzLnRvYXN0U2VydmljZS53YXJuaW5nKCdNdXRlIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIC8vIFRvZ2dsZSB0YWIgaW5jbHVzaW9uOiBuYW1lcyBhcmUgaW4gdGhlIGZvcm0gJ3RhYi50b2dnbGU6PHRhYklkPidcbiAgICAgICAgaWYgKHR5cGVvZiBlLml0ZW0ubmFtZSA9PT0gJ3N0cmluZycgJiYgZS5pdGVtLm5hbWUuc3RhcnRzV2l0aCgndGFiLnRvZ2dsZTonKSkge1xuICAgICAgICAgIGNvbnN0IHRhYklkID0gZS5pdGVtLm5hbWUuc3BsaXQoJzonKVsxXTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VGFicyA9IHRoaXMudGFicygpO1xuICAgICAgICAgIGNvbnN0IGZvdW5kVGFiID0gY3VycmVudFRhYnMuZmluZCgodCkgPT4gdC5pZCA9PT0gdGFiSWQpO1xuICAgICAgICAgIGlmICghZm91bmRUYWIpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcignQGNvbnZlcnNhdGlvbjptZXNzYWdlcy50YWItbm90LWZvdW5kJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlzSW5jbHVkZWQgPSAoZm91bmRUYWIuaW5jbHVkZVJvb21zIHx8IFtdKS5zb21lKChyKSA9PiByLmlkID09PSByb29tSWQpO1xuICAgICAgICAgIGNvbnN0IG9wID0gaXNJbmNsdWRlZFxuICAgICAgICAgICAgPyB0aGlzLmNoYXRTZXJ2aWNlLnJlbW92ZUluY2x1ZGVSb29tRnJvbVRhYih0YWJJZCwgcm9vbUlkKVxuICAgICAgICAgICAgOiB0aGlzLmNoYXRTZXJ2aWNlLmFkZEluY2x1ZGVSb29tVG9UYWIodGFiSWQsIHJvb21JZCk7XG4gICAgICAgICAgb3AudGhlbihhc3luYyAodXBkYXRlZFRhYikgPT4ge1xuICAgICAgICAgICAgdGhpcy50YWJzLnVwZGF0ZSgodGFicykgPT4gdGFicy5tYXAoKHQpID0+ICh0LmlkID09PSB1cGRhdGVkVGFiLmlkID8gdXBkYXRlZFRhYiA6IHQpKSk7XG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zdWNjZXNzKFxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgaXNJbmNsdWRlZCA/ICdAY29udmVyc2F0aW9uOm1lc3NhZ2VzLnRhYi1yZW1vdmVkJyA6ICdAY29udmVyc2F0aW9uOm1lc3NhZ2VzLnRhYi1hZGRlZCcsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLmNhdGNoKGFzeW5jICgpID0+XG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIoXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjptZXNzYWdlcy50YWItdXBkYXRlLWZhaWxlZCcpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhYi5yZW1vdmUtY3VycmVudCc6IHtcbiAgICAgICAgY29uc3QgYXQgPSB0aGlzLmFjdGl2ZVRhYigpO1xuICAgICAgICBpZiAoIWF0IHx8IGF0Lm5hbWUgPT09ICdhbGwnIHx8IGF0Lm5hbWUgPT09ICd1bnJlYWQnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2VcbiAgICAgICAgICAucmVtb3ZlSW5jbHVkZVJvb21Gcm9tVGFiKGF0LmlkLCByb29tSWQpXG4gICAgICAgICAgLnRoZW4oYXN5bmMgKHVwZGF0ZWRUYWIpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGFicy51cGRhdGUoKHRhYnMpID0+IHRhYnMubWFwKCh0KSA9PiAodC5pZCA9PT0gdXBkYXRlZFRhYi5pZCA/IHVwZGF0ZWRUYWIgOiB0KSkpO1xuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2Vzcyhhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246bWVzc2FnZXMudGFiLXJlbW92ZWQnKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goYXN5bmMgKCkgPT5cbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcihcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOm1lc3NhZ2VzLnRhYi1yZW1vdmUtZmFpbGVkJyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZGVsZXRlLXJvb20nOlxuICAgICAgICB0aGlzLmRlbGV0ZVJvb20ocm9vbUlkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZWF2ZS1yb29tJzoge1xuICAgICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gdGhpcy5zZXNzaW9uU2VydmljZS51c2VyPy5pZCE7XG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2VcbiAgICAgICAgICAucmVtb3ZlUGFydGljaXBhbnQocm9vbUlkLCBjdXJyZW50VXNlcklkKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm9vbSgpPy5pZCA9PT0gcm9vbUlkKSB7XG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGFzeW5jICgpID0+IHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcignRmFpbGVkIHRvIGxlYXZlJykpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb29tKCkpIHtcbiAgICAgIHRoaXMub25CYWNrQnV0dG9uQ2xpY2soKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxheHAtcGFnZS1sYXlvdXQgI2NvbnRhaW5lcj5cbiAgPGF4cC1sYXlvdXQtc3RhcnQtc2lkZSBjbGFzcz1cImF4LWJvcmRlci1lIGF4LWxpZ2h0ZXN0LXN1cmZhY2UgYXgtaC1mdWxsXCI+XG4gICAgPGF4cC1sYXlvdXQtaGVhZGVyPlxuICAgICAgPGF4cC1sYXlvdXQtdGl0bGU+e3sgJ0Bjb252ZXJzYXRpb246bW9kdWxlLW5hbWUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2F4cC1sYXlvdXQtdGl0bGU+XG4gICAgICA8YXhwLWxheW91dC10b29sYmFyPlxuICAgICAgICA8YXgtc2VhcmNoLWJveFxuICAgICAgICAgICNzZWFyY2hJbnB1dFxuICAgICAgICAgIGxvb2s9XCJzb2xpZFwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAY29udmVyc2F0aW9uOnNlYXJjaC5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFF1ZXJ5KClcIlxuICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJvblNlYXJjaCgkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICBjbGFzcz1cImF4LXctZnVsbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtY2xlYXItYnV0dG9uPjwvYXgtY2xlYXItYnV0dG9uPlxuICAgICAgICA8L2F4LXNlYXJjaC1ib3g+XG4gICAgICA8L2F4cC1sYXlvdXQtdG9vbGJhcj5cbiAgICA8L2F4cC1sYXlvdXQtaGVhZGVyPlxuICAgIDxheHAtbGF5b3V0LWNvbnRlbnQgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LW1pbi1oLTAgYXgtbWF4LXctODBcIj5cbiAgICAgIEBpZiAoIWxheW91dFNlcnZpY2UuaXNNb2JpbGVEZXZpY2UoKSkge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgPC9heHAtbGF5b3V0LWNvbnRlbnQ+XG4gIDwvYXhwLWxheW91dC1zdGFydC1zaWRlPlxuXG4gIDxheHAtcGFnZS1jb250ZW50XG4gICAgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwdmggLSAyMnJlbSlcIlxuICAgIFtzdHlsZS5wYWRkaW5nXT1cImxheW91dFNlcnZpY2UuaXNNb2JpbGVEZXZpY2UoKSA/ICcxcmVtICFpbXBvcnRhbnQnIDogJzAgIWltcG9ydGFudCdcIlxuICA+XG4gICAgQGlmIChzZWxlY3RlZFJvb20oKSkge1xuICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICAgIH0gQGVsc2UgaWYgKGxheW91dFNlcnZpY2UuaXNNb2JpbGVEZXZpY2UoKSkge1xuICAgICAgPGF4LXNlYXJjaC1ib3hcbiAgICAgICAgI3NlYXJjaElucHV0XG4gICAgICAgIGxvb2s9XCJzb2xpZFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInQGNvbnZlcnNhdGlvbjpzZWFyY2gucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICBbdmFsdWVdPVwic2VhcmNoUXVlcnkoKVwiXG4gICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJvblNlYXJjaCgkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgY2xhc3M9XCJheC13LWZ1bGwgYXgtbWItMlwiXG4gICAgICA+XG4gICAgICAgIDxheC1jbGVhci1idXR0b24+PC9heC1jbGVhci1idXR0b24+XG4gICAgICA8L2F4LXNlYXJjaC1ib3g+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICA8L2F4cC1wYWdlLWNvbnRlbnQ+XG48L2F4cC1wYWdlLWxheW91dD5cbjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGU+XG4gIDwhLS0gVGFicyAtLT5cbiAgPGRpdiBbY2xhc3NdPVwiIWxheW91dFNlcnZpY2UuaXNNb2JpbGVEZXZpY2UoKSA/ICdheC1weC00JyA6ICcnXCI+XG4gICAgPGF4LXRhYnNcbiAgICAgICN0YWJcbiAgICAgIGNsYXNzPVwiYXgtdGV4dC1uZXV0cmFsLTQwMCAhYXgtb3ZlcmZsb3cteC1oaWRkZW5cIlxuICAgICAgW2xvb2tdPVwiJ3dpdGgtbGluZSdcIlxuICAgICAgW2xvY2F0aW9uXT1cIidib3R0b20nXCJcbiAgICAgIFtmaXRQYXJlbnRdPVwidHJ1ZVwiXG4gICAgICAob25BY3RpdmVUYWJDaGFuZ2VkKT1cImFjdGl2ZVRhYkluZGV4LnNldCgkZXZlbnQuaW5kZXgpXCJcbiAgICA+XG4gICAgICBAZm9yICh0YWIgb2YgdGFicygpOyB0cmFjayB0YWIuaWQ7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDxheC10YWItaXRlbVxuICAgICAgICAgIFt0ZXh0XT1cInRhYi50aXRsZVwiXG4gICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVUYWJJbmRleCgpID09PSBpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwib3BlblRhYkNvbnRleHRNZW51KCRldmVudCwgdGFiLCBpKVwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKGdldFJvb21Db3VudEZvclRhYih0YWIpID4gMCkge1xuICAgICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgPGF4LWJhZGdlXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiZ2V0Um9vbUNvdW50Rm9yVGFiKHRhYikudG9TdHJpbmcoKVwiXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cImFjdGl2ZVRhYkluZGV4KCkgPT09IGkgPyAncHJpbWFyeScgOiAnc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1taW4tdy1bMS41cmVtXSBheC1qdXN0aWZ5LWNlbnRlclwiXG4gICAgICAgICAgICAgID48L2F4LWJhZGdlPlxuICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgfVxuICAgICAgICA8L2F4LXRhYi1pdGVtPlxuICAgICAgfVxuICAgIDwvYXgtdGFicz5cbiAgPC9kaXY+XG5cbiAgPCEtLSBDaGF0IExpc3QgQ29udGVudCAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYXgtZmxleC0xIGF4LW92ZXJmbG93LWhpZGRlbiBheC1mbGV4IGF4LWZsZXgtY29sIGF4LWp1c3RpZnktYmV0d2VlbiBheC1taW4tdy04MFwiXG4gICAgW2NsYXNzLmF4LWJvcmRlci10XT1cInRhYnMoKS5sZW5ndGggPiAwXCJcbiAgPlxuICAgIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cbiAgICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtcC00IGF4LXNwYWNlLXktNFwiPlxuICAgICAgICBAZm9yIChfIG9mIFsxLCAyLCAzLCA0LCA1LCA2XTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LXNwYWNlLXgtM1wiPlxuICAgICAgICAgICAgPGF4LXNrZWxldG9uIFthbmltYXRlZF09XCJ0cnVlXCIgY2xhc3M9XCJheC13LTEyIGF4LWgtMTIgYXgtcm91bmRlZC1mdWxsXCI+PC9heC1za2VsZXRvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4LTEgYXgtc3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgIDxheC1za2VsZXRvbiBbYW5pbWF0ZWRdPVwidHJ1ZVwiIGNsYXNzPVwiYXgtdy0zLzQgYXgtaC00IGF4LXJvdW5kZWQtbWRcIj48L2F4LXNrZWxldG9uPlxuICAgICAgICAgICAgICA8YXgtc2tlbGV0b24gW2FuaW1hdGVkXT1cInRydWVcIiBjbGFzcz1cImF4LXctMS8yIGF4LWgtMyBheC1yb3VuZGVkLW1kXCI+PC9heC1za2VsZXRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIGlmIChlcnJvcigpKSB7XG4gICAgICA8YXhwLXN0YXRlLW1lc3NhZ2VcbiAgICAgICAgbW9kZT1cImVycm9yXCJcbiAgICAgICAgaWNvbj1cImZhLWxpZ2h0IGZhLWNpcmNsZS1leGNsYW1hdGlvblwiXG4gICAgICAgIFt0aXRsZV09XCInQGNvbnZlcnNhdGlvbjpjaGF0LWVycm9yJ1wiXG4gICAgICAgIFtkZXNjcmlwdGlvbl09XCJlcnJvcigpIHx8ICdAY29udmVyc2F0aW9uOnN0YXRlLW1lc3NhZ2UuZXJyb3IuZGVzY3JpcHRpb24nXCJcbiAgICAgID5cbiAgICAgICAgPGF4LWJ1dHRvblxuICAgICAgICAgIHNsb3Q9XCJhY3Rpb25zXCJcbiAgICAgICAgICBbdGV4dF09XCInQGNvbnZlcnNhdGlvbjp0cnktYWdhaW4nIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgKG9uQ2xpY2spPVwicmVmcmVzaENoYXQoKVwiXG4gICAgICAgID48L2F4LWJ1dHRvbj5cbiAgICAgIDwvYXhwLXN0YXRlLW1lc3NhZ2U+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleC0xIGF4LW92ZXJmbG93LXktYXV0byBheC1wdC0xXCI+XG4gICAgICAgIEBmb3IgKGkgb2YgZmlsdGVyZWRSb29tcygpOyB0cmFjayBpLmlkKSB7XG4gICAgICAgICAgQGlmIChsYXlvdXRTZXJ2aWNlLmlzTW9iaWxlRGV2aWNlKCkpIHtcbiAgICAgICAgICAgIDxheC1zbGlkaW5nLWl0ZW0gY2xhc3M9XCJheC1oLTIwXCI+XG4gICAgICAgICAgICAgIDxheC1jb250ZW50IGNsYXNzPVwiIWF4LXAtMFwiPlxuICAgICAgICAgICAgICAgIDxheG0tY2hhdC1pdGVtXG4gICAgICAgICAgICAgICAgICBbZGF0YV09XCJpXCJcbiAgICAgICAgICAgICAgICAgIFt0eXBpbmddPVwiJGFueSh0eXBpbmdTdGF0dXMoKVtpLmlkXSlcIlxuICAgICAgICAgICAgICAgICAgW2xhc3RNZXNzYWdlUmVhY3Rpb25dPVwiaS5sYXN0TWVzc2FnZT8ucmVhY3Rpb25zPy5bMF0/LnR5cGUgPz8gbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cImkuaWRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5DaGF0KGkuaWQpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5heC1iZy1kYXJrXT1cInNlbGVjdGVkUm9vbSgpPy5pZCA9PT0gaS5pZFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyYW5zaXRpb24tYWxsIGF4LWR1cmF0aW9uLTEwMCBob3ZlcjpheC1iZy1zdXJmYWNlIGF4LWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgIFtAZmFkZUluXVxuICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9wZW5DaGF0KGkuaWQpXCJcbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cIm9wZW5Db250ZXh0TWVudSgkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICA+PC9heG0tY2hhdC1pdGVtPlxuICAgICAgICAgICAgICA8L2F4LWNvbnRlbnQ+XG5cbiAgICAgICAgICAgICAgPCEtLSA8YXgtc2xpZGluZy1pdGVtLXN1ZmZpeCAob25DbGljayk9XCJvblNsaWRlQWN0aW9uKGksICdtdXRlJylcIiBjb2xvcj1cIndhcm5pbmdcIj5cbiAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLWxpZ2h0IGZhLWJlbGwtc2xhc2ggZmEtbGdcIj48L2F4LWljb24+XG4gICAgICAgIDwvYXgtc2xpZGluZy1pdGVtLXN1ZmZpeD4gLS0+XG4gICAgICAgICAgICAgIDxheC1zbGlkaW5nLWl0ZW0tc3VmZml4IChvbkNsaWNrKT1cIm9uU2xpZGVBY3Rpb24oaSwgJ2RlbGV0ZScpXCIgY29sb3I9XCJkYW5nZXJcIj5cbiAgICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLWxpZ2h0IGZhLXRyYXNoLWNhbiBmYS1sZ1wiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgPC9heC1zbGlkaW5nLWl0ZW0tc3VmZml4PlxuICAgICAgICAgICAgPC9heC1zbGlkaW5nLWl0ZW0+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8YXhtLWNoYXQtaXRlbVxuICAgICAgICAgICAgICBbZGF0YV09XCJpXCJcbiAgICAgICAgICAgICAgW3R5cGluZ109XCIkYW55KHR5cGluZ1N0YXR1cygpW2kuaWRdKVwiXG4gICAgICAgICAgICAgIFtsYXN0TWVzc2FnZVJlYWN0aW9uXT1cImkubGFzdE1lc3NhZ2U/LnJlYWN0aW9ucz8uWzBdPy50eXBlID8/IG51bGxcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cImkuaWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNoYXQoaS5pZClcIlxuICAgICAgICAgICAgICBbY2xhc3MuYXgtYmctZGFya109XCJzZWxlY3RlZFJvb20oKT8uaWQgPT09IGkuaWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyYW5zaXRpb24tYWxsIGF4LWR1cmF0aW9uLTEwMCBob3ZlcjpheC1iZy1zdXJmYWNlXCJcbiAgICAgICAgICAgICAgW0BmYWRlSW5dXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9wZW5DaGF0KGkuaWQpXCJcbiAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJvcGVuQ29udGV4dE1lbnUoJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICA+PC9heG0tY2hhdC1pdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgIDxheHAtc3RhdGUtbWVzc2FnZVxuICAgICAgICAgICAgaWNvbj1cImZhLWxpZ2h0IGZhLWNvbW1lbnRzXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInQGNvbnZlcnNhdGlvbjpuby1jaGF0cy1mb3VuZC50aXRsZSdcIlxuICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidAY29udmVyc2F0aW9uOm5vLWNoYXRzLWZvdW5kLmRlc2NyaXB0aW9uJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYXhwLXN0YXRlLW1lc3NhZ2U+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0gRm9vdGVyIENvbnRlbnQgLS0+XG4gICAgQGlmICghbGF5b3V0U2VydmljZS5pc01vYmlsZURldmljZSgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtYm9yZGVyLXQgYXgtYm9yZGVyLWRpdmlkZXIgYXgtYmctbGlnaHRlc3QgYXgtcC00XCI+XG4gICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICBjbGFzcz1cImF4LXctZnVsbFwiXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICBbdGV4dF09XCInQGNvbnZlcnNhdGlvbjpuZXctY29udmVyc2F0aW9uLmJ1dHRvbicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgKG9uQ2xpY2spPVwib25OZXdDb252ZXJzYXRpb24oKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgPGF4LWljb24+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtcGx1c1wiPjwvaT5cbiAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxheC1idXR0b25cbiAgICAgICAgY2xhc3M9XCJheC1maXhlZCBheC1ib3R0b20tMTYgYXgtcmlnaHQtOCAhYXgtcm91bmRlZC1mdWxsICFheC13LTE0ICFheC1oLTE0IGF4LXNoYWRvdy1sZ1wiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIChvbkNsaWNrKT1cIm9uTmV3Q29udmVyc2F0aW9uKClcIlxuICAgICAgPlxuICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImF4LXRleHQtMnhsXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1wbHVzXCI+PC9pPlxuICAgICAgICA8L2F4LWljb24+XG4gICAgICA8L2F4LWJ1dHRvbj5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPGF4LWNvbnRleHQtbWVudVxuICAjY2hhdENvbnRleHRcbiAgW29wZW5Pbl09XCInY2xpY2snXCJcbiAgW2Nsb3NlT25dPVwiJ2NsaWNrJ1wiXG4gIFtvcmllbnRhdGlvbl09XCIndmVydGljYWwnXCJcbiAgKG9uT3BlbmluZyk9XCJvbkNvbnRleHRPcGVuaW5nKCRldmVudClcIlxuICAob25JdGVtQ2xpY2spPVwib25Db250ZXh0SXRlbUNsaWNrKCRldmVudClcIlxuPjwvYXgtY29udGV4dC1tZW51PlxuXG48YXgtY29udGV4dC1tZW51XG4gICN0YWJDb250ZXh0XG4gIFtvcGVuT25dPVwiJ2NsaWNrJ1wiXG4gIFtjbG9zZU9uXT1cIidjbGljaydcIlxuICBbb3JpZW50YXRpb25dPVwiJ3ZlcnRpY2FsJ1wiXG4gIChvbk9wZW5pbmcpPVwib25UYWJDb250ZXh0T3BlbmluZygkZXZlbnQpXCJcbiAgKG9uSXRlbUNsaWNrKT1cIm9uVGFiQ29udGV4dEl0ZW1DbGljaygkZXZlbnQpXCJcbj48L2F4LWNvbnRleHQtbWVudT5cbiJdfQ==","/**\n * Converts chat service response to chat preview format\n * @param chatResponse - The response from chat service containing items and total\n * @returns Array of formatted chat preview messages\n */\nexport function convertToChatPreview(currentUserId, chatResponse, userName) {\n if (!chatResponse || !chatResponse.items?.length) {\n return [];\n }\n // Map from AXMChatMessage to ChatPreviewMessage\n return chatResponse.items.map((message) => {\n // Determine message type based on content type\n let messageType = 'text';\n // Map contentType to preview type\n if (message.message?.contentType) {\n switch (message.message.contentType) {\n case 'text':\n messageType = 'text';\n break;\n case 'file':\n messageType = 'file';\n break;\n case 'image':\n messageType = 'image';\n break;\n case 'video':\n messageType = 'video';\n break;\n case 'link':\n // Determine if link is for audio or other content\n const content = message.message.content || '';\n if (content.includes('.mp3') || content.includes('.ogg') || content.includes('audio')) {\n messageType = 'audio';\n }\n else {\n messageType = 'text';\n }\n break;\n default:\n messageType = 'text';\n }\n }\n // Extract author name if available\n const name = message.author ? message.author.id : 'Unknown';\n // Create the chat preview message\n const previewMessage = {\n id: message.id,\n sendTime: new Date(message.auditInfo?.created?.at || new Date()),\n readTime: new Date(), // Assuming \"read\" when converted\n type: messageType,\n content: message.message?.content || '',\n name: name,\n userName,\n };\n // Add fromId if the message is not from current user\n if (currentUserId !== message.author.id) {\n previewMessage.fromId = message.author?.id;\n }\n else {\n previewMessage.showActionButton = true;\n }\n // Note: Reply information would need to be looked up from the actual messages\n // This would typically be done by the service that has access to all messages\n return previewMessage;\n });\n}\n/**\n * Creates a ChatPreviewMessage from reply information\n * @param message - The original message that is being referenced\n * @returns A ChatPreviewMessage formatted for use as a replyTo\n */\nexport function createReplyPreview(currentUserId, message, userName) {\n if (!message)\n return undefined;\n return {\n id: message.id,\n sendTime: new Date(message.auditInfo?.created?.at || new Date()),\n readTime: new Date(),\n type: message.message?.contentType === 'image'\n ? 'image'\n : message.message?.contentType === 'video'\n ? 'video'\n : message.message?.contentType === 'file'\n ? 'file'\n : 'text',\n content: message.message?.content || '',\n name: message.author?.id || 'Unknown',\n fromId: currentUserId !== message.author.id ? message.author?.id : undefined,\n showActionButton: true,\n userName,\n };\n}\n/**\n * Generate demo chat preview data with a variety of message types\n * @returns Array of sample chat preview messages\n */\nexport function generateDemoChatPreview() {\n return [\n {\n id: '0',\n sendTime: new Date(),\n type: 'text',\n readTime: new Date(),\n content: 'Hello John, How are you?',\n name: 'test name',\n },\n {\n id: '1',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'text',\n content: 'Hello',\n name: 'test name',\n replyTo: {\n id: '0',\n sendTime: new Date(),\n type: 'text',\n readTime: new Date(),\n content: 'Hello John, How are you?',\n name: 'test name',\n },\n },\n {\n id: '2',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'voice',\n name: 'test name',\n content: `data:audio/webm;codecs=opus;base64,GkXfoEF34fJ`,\n },\n {\n id: '3',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'text',\n content: 'Can i have your address information?',\n name: 'test name',\n replyTo: {\n id: '1',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'text',\n content: 'Hello',\n name: 'test name',\n },\n },\n {\n id: '4',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'file',\n name: 'test name',\n content: `data:audio/webm;codecs=opus;base64,GkXfoEF34fJ`,\n },\n {\n id: '5',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'image',\n name: 'test name',\n content: `https://picsum.photos/300/200`,\n },\n {\n id: '6',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'video',\n name: 'test name',\n content: `https://www.pexels.com/download/video/5495322/?fps=29.97&h=540&w=960`,\n },\n {\n id: '7',\n sendTime: new Date(),\n type: 'text',\n readTime: new Date(),\n content: 'Hello John, How are you?',\n name: 'test name',\n },\n {\n id: '8',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'audio',\n name: 'kids',\n content: `https://actions.google.com/sounds/v1/ambiences/kids_playing.ogg`,\n },\n {\n id: '9',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'image',\n name: 'test name',\n content: `https://picsum.photos/300/200`,\n },\n {\n id: '10',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'image',\n name: 'test name',\n content: `https://picsum.photos/200/300`,\n },\n {\n id: '11',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'video',\n name: 'test name',\n content: `https://www.pexels.com/download/video/5495322/?fps=29.97&h=540&w=960`,\n },\n {\n id: '12',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'file',\n name: 'test name',\n content: `data:audio/webm;codecs=opus;base64,GkXfo59ChoE+u5BxHVL7ZAS1EF34fJ`,\n },\n {\n id: '13',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'audio',\n name: 'alarm',\n content: `https://actions.google.com/sounds/v1/alarms/digital_watch_alarm_long.ogg`,\n },\n ];\n}\n/**\n * Usage Examples:\n *\n * Example 1: Converting chat service response to chat preview format\n * ```typescript\n * import { AXMChatService } from '../chat.service';\n * import { convertToChatPreview } from './chat-preview.helper';\n *\n * export class ChatPreviewComponent {\n * constructor(private chatService: AXMChatService) {}\n *\n * async loadChatMessages(roomId: string) {\n * const response = await this.chatService.getChatMessages(roomId);\n *\n * // Convert to chat preview format\n * const previewMessages = convertToChatPreview(response);\n *\n * // Use the converted messages\n * this.conversationService.chats.set(previewMessages);\n * }\n * }\n * ```\n *\n * Example 2: Using demo data for development/testing\n * ```typescript\n * import { generateDemoChatPreview } from './chat-preview.helper';\n *\n * export class ChatPreviewDemoComponent {\n * ngOnInit() {\n * // Load demo messages\n * const demoMessages = generateDemoChatPreview();\n *\n * // Use the demo messages\n * this.conversationService.chats.set(demoMessages);\n * }\n * }\n */\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1wcmV2aWV3LmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jaGF0L2NoYXQtcHJldmlldy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUE7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsYUFBcUIsRUFDckIsWUFBd0QsRUFDeEQsUUFBaUI7SUFFakIsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDakQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUN4QywrQ0FBK0M7UUFDL0MsSUFBSSxXQUFXLEdBQStCLE1BQU0sQ0FBQztRQUVyRCxrQ0FBa0M7UUFDbEMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLFFBQVEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDcEMsS0FBSyxNQUFNO29CQUNULFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBQ3JCLE1BQU07Z0JBQ1IsS0FBSyxNQUFNO29CQUNULFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBQ3JCLE1BQU07Z0JBQ1IsS0FBSyxPQUFPO29CQUNWLFdBQVcsR0FBRyxPQUFPLENBQUM7b0JBQ3RCLE1BQU07Z0JBQ1IsS0FBSyxPQUFPO29CQUNWLFdBQVcsR0FBRyxPQUFPLENBQUM7b0JBQ3RCLE1BQU07Z0JBQ1IsS0FBSyxNQUFNO29CQUNULGtEQUFrRDtvQkFDbEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO29CQUM5QyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQ3RGLFdBQVcsR0FBRyxPQUFPLENBQUM7b0JBQ3hCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixXQUFXLEdBQUcsTUFBTSxDQUFDO29CQUN2QixDQUFDO29CQUNELE1BQU07Z0JBQ1I7b0JBQ0UsV0FBVyxHQUFHLE1BQU0sQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUVELG1DQUFtQztRQUNuQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRTVELGtDQUFrQztRQUNsQyxNQUFNLGNBQWMsR0FBdUI7WUFDekMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1lBQ2QsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2hFLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLGlDQUFpQztZQUN2RCxJQUFJLEVBQUUsV0FBVztZQUNqQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRTtZQUN2QyxJQUFJLEVBQUUsSUFBSTtZQUNWLFFBQVE7U0FDVCxDQUFDO1FBRUYscURBQXFEO1FBQ3JELElBQUksYUFBYSxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDeEMsY0FBYyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUM3QyxDQUFDO2FBQU0sQ0FBQztZQUNOLGNBQWMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDekMsQ0FBQztRQUVELDhFQUE4RTtRQUM5RSw4RUFBOEU7UUFFOUUsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsYUFBcUIsRUFDckIsT0FBdUIsRUFDdkIsUUFBaUI7SUFFakIsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUUvQixPQUFPO1FBQ0wsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ2QsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2hFLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtRQUNwQixJQUFJLEVBQ0YsT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLEtBQUssT0FBTztZQUN0QyxDQUFDLENBQUMsT0FBTztZQUNULENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFdBQVcsS0FBSyxPQUFPO2dCQUN4QyxDQUFDLENBQUMsT0FBTztnQkFDVCxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLEtBQUssTUFBTTtvQkFDdkMsQ0FBQyxDQUFDLE1BQU07b0JBQ1IsQ0FBQyxDQUFDLE1BQU07UUFDaEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUU7UUFDdkMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLFNBQVM7UUFDckMsTUFBTSxFQUFFLGFBQWEsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDNUUsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixRQUFRO0tBQ1QsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU87UUFDTDtZQUNFLEVBQUUsRUFBRSxHQUFHO1lBQ1AsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksRUFBRSxNQUFNO1lBQ1osUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLE9BQU8sRUFBRSwwQkFBMEI7WUFDbkMsSUFBSSxFQUFFLFdBQVc7U0FDbEI7UUFDRDtZQUNFLEVBQUUsRUFBRSxHQUFHO1lBQ1AsTUFBTSxFQUFFLElBQUk7WUFDWixRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDcEIsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksRUFBRSxNQUFNO1lBQ1osT0FBTyxFQUFFLE9BQU87WUFDaEIsSUFBSSxFQUFFLFdBQVc7WUFDakIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsRUFBRSxHQUFHO2dCQUNQLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtnQkFDcEIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUNwQixPQUFPLEVBQUUsMEJBQTBCO2dCQUNuQyxJQUFJLEVBQUUsV0FBVzthQUNsQjtTQUNGO1FBQ0Q7WUFDRSxFQUFFLEVBQUUsR0FBRztZQUNQLE1BQU0sRUFBRSxJQUFJO1lBQ1osUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSxXQUFXO1lBQ2pCLE9BQU8sRUFBRSxnREFBZ0Q7U0FDMUQ7UUFDRDtZQUNFLEVBQUUsRUFBRSxHQUFHO1lBQ1AsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLEVBQUUsTUFBTTtZQUNaLE9BQU8sRUFBRSxzQ0FBc0M7WUFDL0MsSUFBSSxFQUFFLFdBQVc7WUFDakIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsRUFBRSxHQUFHO2dCQUNQLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtnQkFDcEIsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUNwQixJQUFJLEVBQUUsTUFBTTtnQkFDWixPQUFPLEVBQUUsT0FBTztnQkFDaEIsSUFBSSxFQUFFLFdBQVc7YUFDbEI7U0FDRjtRQUNEO1lBQ0UsRUFBRSxFQUFFLEdBQUc7WUFDUCxNQUFNLEVBQUUsSUFBSTtZQUNaLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsV0FBVztZQUNqQixPQUFPLEVBQUUsZ0RBQWdEO1NBQzFEO1FBQ0Q7WUFDRSxFQUFFLEVBQUUsR0FBRztZQUNQLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsV0FBVztZQUNqQixPQUFPLEVBQUUsK0JBQStCO1NBQ3pDO1FBQ0Q7WUFDRSxFQUFFLEVBQUUsR0FBRztZQUNQLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsV0FBVztZQUNqQixPQUFPLEVBQUUsc0VBQXNFO1NBQ2hGO1FBQ0Q7WUFDRSxFQUFFLEVBQUUsR0FBRztZQUNQLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixPQUFPLEVBQUUsMEJBQTBCO1lBQ25DLElBQUksRUFBRSxXQUFXO1NBQ2xCO1FBQ0Q7WUFDRSxFQUFFLEVBQUUsR0FBRztZQUNQLE1BQU0sRUFBRSxJQUFJO1lBQ1osUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSxNQUFNO1lBQ1osT0FBTyxFQUFFLGlFQUFpRTtTQUMzRTtRQUNEO1lBQ0UsRUFBRSxFQUFFLEdBQUc7WUFDUCxNQUFNLEVBQUUsSUFBSTtZQUNaLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsV0FBVztZQUNqQixPQUFPLEVBQUUsK0JBQStCO1NBQ3pDO1FBQ0Q7WUFDRSxFQUFFLEVBQUUsSUFBSTtZQUNSLE1BQU0sRUFBRSxJQUFJO1lBQ1osUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLFFBQVEsRUFBRSxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSxXQUFXO1lBQ2pCLE9BQU8sRUFBRSwrQkFBK0I7U0FDekM7UUFDRDtZQUNFLEVBQUUsRUFBRSxJQUFJO1lBQ1IsTUFBTSxFQUFFLElBQUk7WUFDWixRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDcEIsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksRUFBRSxPQUFPO1lBQ2IsSUFBSSxFQUFFLFdBQVc7WUFDakIsT0FBTyxFQUFFLHNFQUFzRTtTQUNoRjtRQUNEO1lBQ0UsRUFBRSxFQUFFLElBQUk7WUFDUixRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDcEIsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLFdBQVc7WUFDakIsT0FBTyxFQUFFLG1FQUFtRTtTQUM3RTtRQUNEO1lBQ0UsRUFBRSxFQUFFLElBQUk7WUFDUixRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDcEIsUUFBUSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksRUFBRSxPQUFPO1lBQ2IsSUFBSSxFQUFFLE9BQU87WUFDYixPQUFPLEVBQUUsMEVBQTBFO1NBQ3BGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhNQ2hhdE1lc3NhZ2UgfSBmcm9tICcuL2NoYXQudHlwZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFByZXZpZXdNZXNzYWdlIHtcbiAgaWQ6IHN0cmluZztcbiAgZnJvbUlkPzogc3RyaW5nO1xuICBzZW5kVGltZTogRGF0ZTtcbiAgcmVhZFRpbWU6IERhdGU7XG4gIHR5cGU6ICd0ZXh0JyB8ICd2b2ljZScgfCAnZmlsZScgfCAnaW1hZ2UnIHwgJ3ZpZGVvJyB8ICdhdWRpbyc7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICByZXBseVRvPzogQ2hhdFByZXZpZXdNZXNzYWdlO1xuICBzaG93QWN0aW9uQnV0dG9uPzogYm9vbGVhbjtcbiAgdXNlck5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgY2hhdCBzZXJ2aWNlIHJlc3BvbnNlIHRvIGNoYXQgcHJldmlldyBmb3JtYXRcbiAqIEBwYXJhbSBjaGF0UmVzcG9uc2UgLSBUaGUgcmVzcG9uc2UgZnJvbSBjaGF0IHNlcnZpY2UgY29udGFpbmluZyBpdGVtcyBhbmQgdG90YWxcbiAqIEByZXR1cm5zIEFycmF5IG9mIGZvcm1hdHRlZCBjaGF0IHByZXZpZXcgbWVzc2FnZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0NoYXRQcmV2aWV3KFxuICBjdXJyZW50VXNlcklkOiBzdHJpbmcsXG4gIGNoYXRSZXNwb25zZTogeyBpdGVtczogQVhNQ2hhdE1lc3NhZ2VbXTsgdG90YWw6IG51bWJlciB9LFxuICB1c2VyTmFtZT86IHN0cmluZyxcbik6IENoYXRQcmV2aWV3TWVzc2FnZVtdIHtcbiAgaWYgKCFjaGF0UmVzcG9uc2UgfHwgIWNoYXRSZXNwb25zZS5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gTWFwIGZyb20gQVhNQ2hhdE1lc3NhZ2UgdG8gQ2hhdFByZXZpZXdNZXNzYWdlXG4gIHJldHVybiBjaGF0UmVzcG9uc2UuaXRlbXMubWFwKChtZXNzYWdlKSA9PiB7XG4gICAgLy8gRGV0ZXJtaW5lIG1lc3NhZ2UgdHlwZSBiYXNlZCBvbiBjb250ZW50IHR5cGVcbiAgICBsZXQgbWVzc2FnZVR5cGU6IENoYXRQcmV2aWV3TWVzc2FnZVsndHlwZSddID0gJ3RleHQnO1xuXG4gICAgLy8gTWFwIGNvbnRlbnRUeXBlIHRvIHByZXZpZXcgdHlwZVxuICAgIGlmIChtZXNzYWdlLm1lc3NhZ2U/LmNvbnRlbnRUeXBlKSB7XG4gICAgICBzd2l0Y2ggKG1lc3NhZ2UubWVzc2FnZS5jb250ZW50VHlwZSkge1xuICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICBtZXNzYWdlVHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgICAgbWVzc2FnZVR5cGUgPSAnZmlsZSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgICBtZXNzYWdlVHlwZSA9ICdpbWFnZSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgICBtZXNzYWdlVHlwZSA9ICd2aWRlbyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgICAgIC8vIERldGVybWluZSBpZiBsaW5rIGlzIGZvciBhdWRpbyBvciBvdGhlciBjb250ZW50XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IG1lc3NhZ2UubWVzc2FnZS5jb250ZW50IHx8ICcnO1xuICAgICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKCcubXAzJykgfHwgY29udGVudC5pbmNsdWRlcygnLm9nZycpIHx8IGNvbnRlbnQuaW5jbHVkZXMoJ2F1ZGlvJykpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VUeXBlID0gJ2F1ZGlvJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZVR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG1lc3NhZ2VUeXBlID0gJ3RleHQnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgYXV0aG9yIG5hbWUgaWYgYXZhaWxhYmxlXG4gICAgY29uc3QgbmFtZSA9IG1lc3NhZ2UuYXV0aG9yID8gbWVzc2FnZS5hdXRob3IuaWQgOiAnVW5rbm93bic7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGNoYXQgcHJldmlldyBtZXNzYWdlXG4gICAgY29uc3QgcHJldmlld01lc3NhZ2U6IENoYXRQcmV2aWV3TWVzc2FnZSA9IHtcbiAgICAgIGlkOiBtZXNzYWdlLmlkLFxuICAgICAgc2VuZFRpbWU6IG5ldyBEYXRlKG1lc3NhZ2UuYXVkaXRJbmZvPy5jcmVhdGVkPy5hdCB8fCBuZXcgRGF0ZSgpKSxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLCAvLyBBc3N1bWluZyBcInJlYWRcIiB3aGVuIGNvbnZlcnRlZFxuICAgICAgdHlwZTogbWVzc2FnZVR5cGUsXG4gICAgICBjb250ZW50OiBtZXNzYWdlLm1lc3NhZ2U/LmNvbnRlbnQgfHwgJycsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdXNlck5hbWUsXG4gICAgfTtcblxuICAgIC8vIEFkZCBmcm9tSWQgaWYgdGhlIG1lc3NhZ2UgaXMgbm90IGZyb20gY3VycmVudCB1c2VyXG4gICAgaWYgKGN1cnJlbnRVc2VySWQgIT09IG1lc3NhZ2UuYXV0aG9yLmlkKSB7XG4gICAgICBwcmV2aWV3TWVzc2FnZS5mcm9tSWQgPSBtZXNzYWdlLmF1dGhvcj8uaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZXZpZXdNZXNzYWdlLnNob3dBY3Rpb25CdXR0b24gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IFJlcGx5IGluZm9ybWF0aW9uIHdvdWxkIG5lZWQgdG8gYmUgbG9va2VkIHVwIGZyb20gdGhlIGFjdHVhbCBtZXNzYWdlc1xuICAgIC8vIFRoaXMgd291bGQgdHlwaWNhbGx5IGJlIGRvbmUgYnkgdGhlIHNlcnZpY2UgdGhhdCBoYXMgYWNjZXNzIHRvIGFsbCBtZXNzYWdlc1xuXG4gICAgcmV0dXJuIHByZXZpZXdNZXNzYWdlO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2hhdFByZXZpZXdNZXNzYWdlIGZyb20gcmVwbHkgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG9yaWdpbmFsIG1lc3NhZ2UgdGhhdCBpcyBiZWluZyByZWZlcmVuY2VkXG4gKiBAcmV0dXJucyBBIENoYXRQcmV2aWV3TWVzc2FnZSBmb3JtYXR0ZWQgZm9yIHVzZSBhcyBhIHJlcGx5VG9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlcGx5UHJldmlldyhcbiAgY3VycmVudFVzZXJJZDogc3RyaW5nLFxuICBtZXNzYWdlOiBBWE1DaGF0TWVzc2FnZSxcbiAgdXNlck5hbWU/OiBzdHJpbmcsXG4pOiBDaGF0UHJldmlld01lc3NhZ2UgfCB1bmRlZmluZWQge1xuICBpZiAoIW1lc3NhZ2UpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogbWVzc2FnZS5pZCxcbiAgICBzZW5kVGltZTogbmV3IERhdGUobWVzc2FnZS5hdWRpdEluZm8/LmNyZWF0ZWQ/LmF0IHx8IG5ldyBEYXRlKCkpLFxuICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgIHR5cGU6XG4gICAgICBtZXNzYWdlLm1lc3NhZ2U/LmNvbnRlbnRUeXBlID09PSAnaW1hZ2UnXG4gICAgICAgID8gJ2ltYWdlJ1xuICAgICAgICA6IG1lc3NhZ2UubWVzc2FnZT8uY29udGVudFR5cGUgPT09ICd2aWRlbydcbiAgICAgICAgICA/ICd2aWRlbydcbiAgICAgICAgICA6IG1lc3NhZ2UubWVzc2FnZT8uY29udGVudFR5cGUgPT09ICdmaWxlJ1xuICAgICAgICAgICAgPyAnZmlsZSdcbiAgICAgICAgICAgIDogJ3RleHQnLFxuICAgIGNvbnRlbnQ6IG1lc3NhZ2UubWVzc2FnZT8uY29udGVudCB8fCAnJyxcbiAgICBuYW1lOiBtZXNzYWdlLmF1dGhvcj8uaWQgfHwgJ1Vua25vd24nLFxuICAgIGZyb21JZDogY3VycmVudFVzZXJJZCAhPT0gbWVzc2FnZS5hdXRob3IuaWQgPyBtZXNzYWdlLmF1dGhvcj8uaWQgOiB1bmRlZmluZWQsXG4gICAgc2hvd0FjdGlvbkJ1dHRvbjogdHJ1ZSxcbiAgICB1c2VyTmFtZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBkZW1vIGNoYXQgcHJldmlldyBkYXRhIHdpdGggYSB2YXJpZXR5IG9mIG1lc3NhZ2UgdHlwZXNcbiAqIEByZXR1cm5zIEFycmF5IG9mIHNhbXBsZSBjaGF0IHByZXZpZXcgbWVzc2FnZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRGVtb0NoYXRQcmV2aWV3KCk6IENoYXRQcmV2aWV3TWVzc2FnZVtdIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBpZDogJzAnLFxuICAgICAgc2VuZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAndGV4dCcsXG4gICAgICByZWFkVGltZTogbmV3IERhdGUoKSxcbiAgICAgIGNvbnRlbnQ6ICdIZWxsbyBKb2huLCBIb3cgYXJlIHlvdT8nLFxuICAgICAgbmFtZTogJ3Rlc3QgbmFtZScsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzEnLFxuICAgICAgZnJvbUlkOiAnMTAnLFxuICAgICAgc2VuZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICByZWFkVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIGNvbnRlbnQ6ICdIZWxsbycsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIHJlcGx5VG86IHtcbiAgICAgICAgaWQ6ICcwJyxcbiAgICAgICAgc2VuZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgcmVhZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgIGNvbnRlbnQ6ICdIZWxsbyBKb2huLCBIb3cgYXJlIHlvdT8nLFxuICAgICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzInLFxuICAgICAgZnJvbUlkOiAnMTAnLFxuICAgICAgc2VuZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICByZWFkVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHR5cGU6ICd2b2ljZScsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIGNvbnRlbnQ6IGBkYXRhOmF1ZGlvL3dlYm07Y29kZWNzPW9wdXM7YmFzZTY0LEdrWGZvRUYzNGZKYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnMycsXG4gICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgY29udGVudDogJ0NhbiBpIGhhdmUgeW91ciBhZGRyZXNzIGluZm9ybWF0aW9uPycsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIHJlcGx5VG86IHtcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgZnJvbUlkOiAnMTAnLFxuICAgICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgcmVhZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgY29udGVudDogJ0hlbGxvJyxcbiAgICAgICAgbmFtZTogJ3Rlc3QgbmFtZScsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICc0JyxcbiAgICAgIGZyb21JZDogJzEwJyxcbiAgICAgIHNlbmRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgcmVhZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAnZmlsZScsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIGNvbnRlbnQ6IGBkYXRhOmF1ZGlvL3dlYm07Y29kZWNzPW9wdXM7YmFzZTY0LEdrWGZvRUYzNGZKYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnNScsXG4gICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgIG5hbWU6ICd0ZXN0IG5hbWUnLFxuICAgICAgY29udGVudDogYGh0dHBzOi8vcGljc3VtLnBob3Rvcy8zMDAvMjAwYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnNicsXG4gICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgdHlwZTogJ3ZpZGVvJyxcbiAgICAgIG5hbWU6ICd0ZXN0IG5hbWUnLFxuICAgICAgY29udGVudDogYGh0dHBzOi8vd3d3LnBleGVscy5jb20vZG93bmxvYWQvdmlkZW8vNTQ5NTMyMi8/ZnBzPTI5Ljk3Jmg9NTQwJnc9OTYwYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnNycsXG4gICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgY29udGVudDogJ0hlbGxvIEpvaG4sIEhvdyBhcmUgeW91PycsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnOCcsXG4gICAgICBmcm9tSWQ6ICcxMCcsXG4gICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgdHlwZTogJ2F1ZGlvJyxcbiAgICAgIG5hbWU6ICdraWRzJyxcbiAgICAgIGNvbnRlbnQ6IGBodHRwczovL2FjdGlvbnMuZ29vZ2xlLmNvbS9zb3VuZHMvdjEvYW1iaWVuY2VzL2tpZHNfcGxheWluZy5vZ2dgLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICc5JyxcbiAgICAgIGZyb21JZDogJzEwJyxcbiAgICAgIHNlbmRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgcmVhZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgbmFtZTogJ3Rlc3QgbmFtZScsXG4gICAgICBjb250ZW50OiBgaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzMwMC8yMDBgLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICcxMCcsXG4gICAgICBmcm9tSWQ6ICcxMCcsXG4gICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgIG5hbWU6ICd0ZXN0IG5hbWUnLFxuICAgICAgY29udGVudDogYGh0dHBzOi8vcGljc3VtLnBob3Rvcy8yMDAvMzAwYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnMTEnLFxuICAgICAgZnJvbUlkOiAnMTAnLFxuICAgICAgc2VuZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICByZWFkVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHR5cGU6ICd2aWRlbycsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIGNvbnRlbnQ6IGBodHRwczovL3d3dy5wZXhlbHMuY29tL2Rvd25sb2FkL3ZpZGVvLzU0OTUzMjIvP2Zwcz0yOS45NyZoPTU0MCZ3PTk2MGAsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzEyJyxcbiAgICAgIHNlbmRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgcmVhZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAnZmlsZScsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIGNvbnRlbnQ6IGBkYXRhOmF1ZGlvL3dlYm07Y29kZWNzPW9wdXM7YmFzZTY0LEdrWGZvNTlDaG9FK3U1QnhIVkw3WkFTMUVGMzRmSmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzEzJyxcbiAgICAgIHNlbmRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgcmVhZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAnYXVkaW8nLFxuICAgICAgbmFtZTogJ2FsYXJtJyxcbiAgICAgIGNvbnRlbnQ6IGBodHRwczovL2FjdGlvbnMuZ29vZ2xlLmNvbS9zb3VuZHMvdjEvYWxhcm1zL2RpZ2l0YWxfd2F0Y2hfYWxhcm1fbG9uZy5vZ2dgLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogVXNhZ2UgRXhhbXBsZXM6XG4gKlxuICogRXhhbXBsZSAxOiBDb252ZXJ0aW5nIGNoYXQgc2VydmljZSByZXNwb25zZSB0byBjaGF0IHByZXZpZXcgZm9ybWF0XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBBWE1DaGF0U2VydmljZSB9IGZyb20gJy4uL2NoYXQuc2VydmljZSc7XG4gKiBpbXBvcnQgeyBjb252ZXJ0VG9DaGF0UHJldmlldyB9IGZyb20gJy4vY2hhdC1wcmV2aWV3LmhlbHBlcic7XG4gKlxuICogZXhwb3J0IGNsYXNzIENoYXRQcmV2aWV3Q29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGF0U2VydmljZTogQVhNQ2hhdFNlcnZpY2UpIHt9XG4gKlxuICogICBhc3luYyBsb2FkQ2hhdE1lc3NhZ2VzKHJvb21JZDogc3RyaW5nKSB7XG4gKiAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmdldENoYXRNZXNzYWdlcyhyb29tSWQpO1xuICpcbiAqICAgICAvLyBDb252ZXJ0IHRvIGNoYXQgcHJldmlldyBmb3JtYXRcbiAqICAgICBjb25zdCBwcmV2aWV3TWVzc2FnZXMgPSBjb252ZXJ0VG9DaGF0UHJldmlldyhyZXNwb25zZSk7XG4gKlxuICogICAgIC8vIFVzZSB0aGUgY29udmVydGVkIG1lc3NhZ2VzXG4gKiAgICAgdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmNoYXRzLnNldChwcmV2aWV3TWVzc2FnZXMpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBFeGFtcGxlIDI6IFVzaW5nIGRlbW8gZGF0YSBmb3IgZGV2ZWxvcG1lbnQvdGVzdGluZ1xuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgZ2VuZXJhdGVEZW1vQ2hhdFByZXZpZXcgfSBmcm9tICcuL2NoYXQtcHJldmlldy5oZWxwZXInO1xuICpcbiAqIGV4cG9ydCBjbGFzcyBDaGF0UHJldmlld0RlbW9Db21wb25lbnQge1xuICogICBuZ09uSW5pdCgpIHtcbiAqICAgICAvLyBMb2FkIGRlbW8gbWVzc2FnZXNcbiAqICAgICBjb25zdCBkZW1vTWVzc2FnZXMgPSBnZW5lcmF0ZURlbW9DaGF0UHJldmlldygpO1xuICpcbiAqICAgICAvLyBVc2UgdGhlIGRlbW8gbWVzc2FnZXNcbiAqICAgICB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuY2hhdHMuc2V0KGRlbW9NZXNzYWdlcyk7XG4gKiAgIH1cbiAqIH1cbiAqL1xuIl19","import { AXDomChangeDirective } from '@acorex/cdk/dom';\nimport { AXConversationInputComponent, AXConversationModule, } from '@acorex/components/conversation';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { CommonModule } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, computed, inject, signal, viewChild, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { debounceTime, Subject } from 'rxjs';\nimport { AXMChatManagementService } from '../../chat-management.service';\nimport { convertToChatPreview } from '../../chat-preview.helper';\nimport { AXMChatRealtimeService } from '../../chat-realtime.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@acorex/components/conversation\";\nimport * as i3 from \"@acorex/components/loading\";\nexport class AXMChatPreviewComponent {\n constructor() {\n this.activatedRoute = inject(ActivatedRoute);\n this.fileService = inject(AXFileService);\n this.chatService = inject(AXMChatManagementService);\n this.realtimeService = inject(AXMChatRealtimeService);\n this.sessionService = inject(AXPSessionService);\n this.toastService = inject(AXToastService);\n this.unsubscribe = inject(AXUnsubscriber);\n this.inputRef = viewChild(AXConversationInputComponent, ...(ngDevMode ? [{ debugName: \"inputRef\" }] : []));\n this.activeMessage = signal(null, ...(ngDevMode ? [{ debugName: \"activeMessage\" }] : []));\n this.typing$ = new Subject();\n this.chatData = signal([], ...(ngDevMode ? [{ debugName: \"chatData\" }] : []));\n this.room = signal(null, ...(ngDevMode ? [{ debugName: \"room\" }] : []));\n this.isEditing = signal(false, ...(ngDevMode ? [{ debugName: \"isEditing\" }] : []));\n this.editId = signal(null, ...(ngDevMode ? [{ debugName: \"editId\" }] : []));\n this.height = signal(0, ...(ngDevMode ? [{ debugName: \"height\" }] : []));\n this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n this.error = signal(null, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n this.isChannel = computed(() => this.room()?.topic === 'channel', ...(ngDevMode ? [{ debugName: \"isChannel\" }] : []));\n this.options = signal({\n disabled: false,\n readonly: false,\n value: '',\n }, ...(ngDevMode ? [{ debugName: \"options\" }] : []));\n this.roomId = '';\n //GO TO LAST MESSAGE EFFECT.\n this.#af = afterNextRender(() => {\n setTimeout(() => {\n const div = document.querySelector('ax-conversation-view > div');\n if (div) {\n div.scrollTo({ top: div.scrollHeight, behavior: 'smooth' });\n }\n }, 500);\n });\n }\n setHeight(height) {\n this.height.set(height);\n }\n ngOnInit() {\n this.activatedRoute.params.subscribe((params) => {\n this.roomId = params['id'];\n if (this.roomId) {\n this.loadMessages(this.roomId);\n this.loadRoomInfo(this.roomId);\n }\n });\n this.realtimeService.message$.pipe(this.unsubscribe.takeUntilDestroy).subscribe(async (event) => {\n if (event.type === 'add') {\n const message = event.payload;\n if (message.author.id !== this.sessionService.user?.id && message.roomId === this.roomId) {\n await this.chatService.markSeen(message.id);\n this.chatData.update((values) => {\n const newMessage = convertToChatPreview(this.sessionService.user?.id || '', {\n items: [message],\n total: 1,\n })[0];\n return [...values, newMessage];\n });\n }\n }\n else if (event.type === 'remove') {\n this.chatData.update((values) => values.filter((item) => item.id !== event.payload));\n }\n else if (event.type === 'update') {\n const message = event.payload;\n const convertedNewMessage = convertToChatPreview(this.sessionService.user?.id || '', {\n items: [message],\n total: 1,\n })[0];\n this.chatData.update((values) => values.map((item) => (item.id === message.id ? { ...convertedNewMessage, ...item } : item)));\n }\n });\n this.typingSubscription = this.typing$.pipe(debounceTime(1000)).subscribe(() => {\n if (this.roomId) {\n this.chatService.stopTyping(this.roomId);\n }\n });\n }\n //GO TO LAST MESSAGE EFFECT.\n #af;\n ngOnDestroy() {\n this.typingSubscription?.unsubscribe();\n }\n handleTyping(event) {\n if (this.roomId) {\n this.chatService.startTyping(this.roomId);\n this.typing$.next();\n }\n }\n handleFileChange(event) {\n console.log('File Changed:', event);\n }\n handleCancelRecord(event) {\n console.log('Recording Cancelled:', event);\n }\n handleEndRecord(event) {\n this.fileService.blobToBase64(event.data.value).then((base64Content) => {\n // Create a properly formatted chat preview message for voice\n const newVoiceMessage = {\n id: `${Math.floor(Math.random() * 10000)}`,\n content: base64Content,\n sendTime: new Date(),\n readTime: new Date(),\n type: 'voice',\n name: 'test name',\n };\n this.chatData.update((values) => [...values, newVoiceMessage]);\n });\n }\n handleOnSend(e) {\n if (this.isEditing() && this.editId()) {\n this.chatService\n .editMessage(this.editId(), e.data.value, e.data.type || 'text')\n .then((newMessage) => {\n const convertedNewMessage = convertToChatPreview(this.sessionService.user?.id || '', {\n items: [newMessage],\n total: 1,\n })[0];\n this.chatData.update((values) => values.map((item) => (item.id === this.editId() ? { ...convertedNewMessage } : item)));\n this.editId.set(null);\n this.options.update((prev) => ({ ...prev, value: '' }));\n this.isEditing.set(false);\n })\n .catch((error) => {\n this.toastService.danger('Failed to edit message');\n });\n }\n else {\n if (e.data.value && this.roomId) {\n const replyId = e.data.replyChat?.id;\n this.chatService\n .sendMessage(this.roomId, e.data.value, e.data.type || 'text', replyId)\n .then((newMessage) => {\n const convertedNewMessage = convertToChatPreview(this.sessionService.user?.id || '', {\n items: [newMessage],\n total: 1,\n })[0];\n this.chatData.update((values) => [...values, { ...convertedNewMessage, replyTo: replyId }]);\n this.options.update((prev) => ({ ...prev, value: '' }));\n this.scrollToEnd();\n })\n .catch((error) => {\n this.toastService.danger('Failed to send message');\n });\n }\n }\n }\n handleEnter() {\n if (this.options().value && this.roomId) {\n this.handleOnSend({ data: { value: this.options().value } });\n }\n }\n handleOnAction(e) {\n console.log('Action Triggered:', e);\n }\n scrollToEnd() {\n const conversationView = document.querySelector('ax-conversation-view');\n if (conversationView) {\n conversationView.scrollTo({\n top: conversationView.scrollHeight,\n behavior: 'smooth',\n });\n }\n }\n async loadMessages(roomId) {\n this.isLoading.set(true);\n this.error.set(null);\n try {\n // Get messages from the chat service\n const messageResponse = await this.chatService.getMessages(roomId);\n // Convert to chat preview format\n const chatPreviewMessages = convertToChatPreview(this.sessionService.user?.id || '', messageResponse).sort((a, b) => {\n return new Date(a.sendTime).getTime() - new Date(b.sendTime).getTime();\n });\n // Set the messages in the conversation service\n this.chatData.set(chatPreviewMessages);\n }\n catch (error) {\n this.error.set('Failed to load messages. Please try again.');\n console.error('Failed to load messages:', error);\n }\n finally {\n this.isLoading.set(false);\n }\n }\n async loadRoomInfo(roomId) {\n try {\n const roomData = await this.chatService.getRoom(roomId);\n this.room.set(roomData);\n }\n catch (error) {\n console.error('Failed to load room info:', error);\n }\n }\n addItemHandler(e) {\n this.activeMessage.set(e.data);\n if (e.data.fromId) {\n e.canceled = true;\n return;\n }\n const userItem = [];\n if (e.data.type === 'text') {\n userItem.push({\n text: 'Edit',\n color: 'primary',\n icon: 'fa-solid fa-pencil',\n onClick: (id) => {\n try {\n this.isEditing.set(true);\n this.editId.set(e.data.id);\n this.options.update((prev) => ({ ...prev, value: e.data.content }));\n this.addInputOverlay('edit', e.data);\n }\n catch (error) {\n this.toastService.danger('Failed to edit message');\n }\n },\n });\n }\n if (e.data.type === 'text') {\n userItem.push({\n text: 'Delete',\n color: 'danger',\n icon: 'fa-solid fa-trash-can',\n onClick: (id) => {\n try {\n this.chatService.deleteMessage(id).then((res) => {\n this.chatData.update((values) => values.filter((item) => item.id !== id));\n if (!res) {\n this.toastService.danger('Failed to delete message');\n }\n });\n }\n catch (error) {\n this.toastService.danger('Failed to delete message');\n }\n },\n });\n }\n e.items.push(...userItem);\n }\n addInputOverlay(type, message) {\n const input = this.inputRef();\n const icon = type === 'reply' ? 'fa-solid fa-reply' : 'fa-solid fa-pencil';\n if (input) {\n input.setActionBoxContainer(icon, message?.content || this.activeMessage()?.content || '');\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMChatPreviewComponent, isStandalone: true, selector: \"axm-chat-preview\", viewQueries: [{ propertyName: \"inputRef\", first: true, predicate: AXConversationInputComponent, descendants: true, isSignal: true }], ngImport: i0, template: \"@if (isLoading()) {\\n <div class=\\\"ax-h-full ax-w-full ax-flex ax-items-center ax-justify-center\\\">\\n <ax-loading></ax-loading>\\n </div>\\n} @else if (error()) {\\n <div class=\\\"ax-h-full ax-w-full ax-flex ax-items-center ax-justify-center\\\">\\n <div class=\\\"ax-text-center\\\">\\n <p class=\\\"ax-text-danger\\\">{{ error() }}</p>\\n <button (click)=\\\"loadMessages(roomId)\\\" class=\\\"ax-mt-2 ax-button ax-primary\\\">Retry</button>\\n </div>\\n </div>\\n} @else {\\n <div\\n axDomChange\\n (axResizeObserver)=\\\"setHeight($event[0].contentRect.height)\\\"\\n class=\\\"ax-bg-surface-container ax-h-full\\\"\\n >\\n <!-- Messages Container -->\\n <ax-conversation-container class=\\\"ax-overflow-hidden\\\" [chatData]=\\\"chatData()\\\">\\n <ax-conversation-view\\n (onActionMenuOpening)=\\\"addItemHandler($event)\\\"\\n (onAction)=\\\"handleOnAction($event)\\\"\\n (onReplyClick)=\\\"addInputOverlay('reply', $event.data)\\\"\\n [chatBoxHeight]=\\\"height() - (isChannel() ? 5 : 68) + 'px'\\\"\\n ></ax-conversation-view>\\n @if (!isChannel()) {\\n <ax-conversation-input\\n class=\\\"ax-px-2\\\"\\n placeholder=\\\"Type a message...\\\"\\n [(ngModel)]=\\\"options().value\\\"\\n (ngModelChange)=\\\"handleTyping($event)\\\"\\n (onSendClick)=\\\"handleOnSend($event)\\\"\\n (onFileChange)=\\\"handleFileChange($event)\\\"\\n (onStopRecording)=\\\"handleEndRecord($event)\\\"\\n (onCancelRecording)=\\\"handleCancelRecord($event)\\\"\\n (onEnterPressed)=\\\"handleEnter()\\\"\\n ></ax-conversation-input>\\n }\\n </ax-conversation-container>\\n </div>\\n}\\n\", styles: [\":host{display:block;width:100%;height:100%}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: AXDomChangeDirective, selector: \"[axDomChange]\", outputs: [\"axMutationObserver\", \"axResizeObserver\"] }, { kind: \"ngmodule\", type: AXConversationModule }, { kind: \"component\", type: i2.AXConversationViewComponent, selector: \"ax-conversation-view\", inputs: [\"chatBoxHeight\", \"isReplyArrowShown\", \"avatar\"], outputs: [\"onActionMenuOpening\", \"onAction\", \"onReplyClick\", \"onScrollEnd\"] }, { kind: \"component\", type: i2.AXConversationInputComponent, selector: \"ax-conversation-input\", inputs: [\"look\", \"placeholder\", \"maxLength\", \"hasAttachment\", \"hasVoice\", \"hasEmoji\", \"isLoading\", \"acceptFileType\"], outputs: [\"onActionClose\", \"onSendClick\", \"onStartRecording\", \"onCancelRecording\", \"onEnterPressed\"] }, { kind: \"component\", type: i2.AXConversationContainerComponent, selector: \"ax-conversation-container\", inputs: [\"chatData\"] }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"component\", type: i3.AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatPreviewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-chat-preview', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormsModule, AXDomChangeDirective, AXConversationModule, AXLoadingModule], template: \"@if (isLoading()) {\\n <div class=\\\"ax-h-full ax-w-full ax-flex ax-items-center ax-justify-center\\\">\\n <ax-loading></ax-loading>\\n </div>\\n} @else if (error()) {\\n <div class=\\\"ax-h-full ax-w-full ax-flex ax-items-center ax-justify-center\\\">\\n <div class=\\\"ax-text-center\\\">\\n <p class=\\\"ax-text-danger\\\">{{ error() }}</p>\\n <button (click)=\\\"loadMessages(roomId)\\\" class=\\\"ax-mt-2 ax-button ax-primary\\\">Retry</button>\\n </div>\\n </div>\\n} @else {\\n <div\\n axDomChange\\n (axResizeObserver)=\\\"setHeight($event[0].contentRect.height)\\\"\\n class=\\\"ax-bg-surface-container ax-h-full\\\"\\n >\\n <!-- Messages Container -->\\n <ax-conversation-container class=\\\"ax-overflow-hidden\\\" [chatData]=\\\"chatData()\\\">\\n <ax-conversation-view\\n (onActionMenuOpening)=\\\"addItemHandler($event)\\\"\\n (onAction)=\\\"handleOnAction($event)\\\"\\n (onReplyClick)=\\\"addInputOverlay('reply', $event.data)\\\"\\n [chatBoxHeight]=\\\"height() - (isChannel() ? 5 : 68) + 'px'\\\"\\n ></ax-conversation-view>\\n @if (!isChannel()) {\\n <ax-conversation-input\\n class=\\\"ax-px-2\\\"\\n placeholder=\\\"Type a message...\\\"\\n [(ngModel)]=\\\"options().value\\\"\\n (ngModelChange)=\\\"handleTyping($event)\\\"\\n (onSendClick)=\\\"handleOnSend($event)\\\"\\n (onFileChange)=\\\"handleFileChange($event)\\\"\\n (onStopRecording)=\\\"handleEndRecord($event)\\\"\\n (onCancelRecording)=\\\"handleCancelRecord($event)\\\"\\n (onEnterPressed)=\\\"handleEnter()\\\"\\n ></ax-conversation-input>\\n }\\n </ax-conversation-container>\\n </div>\\n}\\n\", styles: [\":host{display:block;width:100%;height:100%}\\n\"] }]\n }], propDecorators: { inputRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXConversationInputComponent), { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jaGF0L2NvbXBvbmVudHMvY2hhdC1wcmV2aWV3L2NoYXQtcHJldmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY2hhdC9jb21wb25lbnRzL2NoYXQtcHJldmlldy9jaGF0LXByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUVMLDRCQUE0QixFQUk1QixvQkFBb0IsR0FDckIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUdOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFB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RUFBRSxDQUFDO1lBQ1YsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0YsQ0FBQztJQUNILENBQUM7K0dBL1FVLHVCQUF1QjttR0FBdkIsdUJBQXVCLHNIQVN5Qiw0QkFBNEIsZ0VDbkR6RixrbURBeUNBLHNHRERZLFlBQVksOEJBQUUsV0FBVywrVkFBRSxvQkFBb0IsOEdBQUUsb0JBQW9CLGdzQkFBRSxlQUFlOzs0RkFFckYsdUJBQXVCO2tCQVJuQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxDQUFDOzBGQVd0Qyw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWERvbUNoYW5nZURpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY2RrL2RvbSc7XG5pbXBvcnQge1xuICBBWENvbnZlcnNhdGlvbkFjdGlvbkV2ZW50LFxuICBBWENvbnZlcnNhdGlvbklucHV0Q29tcG9uZW50LFxuICBBWENvbnZlcnNhdGlvbk1lbnVPcGVuaW5nRXZlbnQsXG4gIEFYQ29udmVyc2F0aW9uTWVzc2FnZSxcbiAgQVhDb252ZXJzYXRpb25NZXNzYWdlQWN0aW9uLFxuICBBWENvbnZlcnNhdGlvbk1vZHVsZSxcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbnZlcnNhdGlvbic7XG5pbXBvcnQgeyBBWExvYWRpbmdNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZyc7XG5pbXBvcnQgeyBBWFRvYXN0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b2FzdCc7XG5pbXBvcnQgeyBBWEZpbGVTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2ZpbGUnO1xuaW1wb3J0IHsgQVhVbnN1YnNjcmliZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgQVhQU2Vzc2lvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2F1dGgnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYTUNoYXRNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NoYXQtbWFuYWdlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbnZlcnRUb0NoYXRQcmV2aWV3IH0gZnJvbSAnLi4vLi4vY2hhdC1wcmV2aWV3LmhlbHBlcic7XG5pbXBvcnQgeyBBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2hhdC1yZWFsdGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTUNoYXRSb29tIH0gZnJvbSAnLi4vLi4vY2hhdC50eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhtLWNoYXQtcHJldmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGF0LXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGF0LXByZXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBBWERvbUNoYW5nZURpcmVjdGl2ZSwgQVhDb252ZXJzYXRpb25Nb2R1bGUsIEFYTG9hZGluZ01vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTUNoYXRQcmV2aWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSBmaWxlU2VydmljZSA9IGluamVjdChBWEZpbGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjaGF0U2VydmljZSA9IGluamVjdChBWE1DaGF0TWFuYWdlbWVudFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWx0aW1lU2VydmljZSA9IGluamVjdChBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzZXNzaW9uU2VydmljZSA9IGluamVjdChBWFBTZXNzaW9uU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3RTZXJ2aWNlID0gaW5qZWN0KEFYVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSA9IGluamVjdChBWFVuc3Vic2NyaWJlcik7XG5cbiAgcHJpdmF0ZSBpbnB1dFJlZiA9IHZpZXdDaGlsZDxBWENvbnZlcnNhdGlvbklucHV0Q29tcG9uZW50PihBWENvbnZlcnNhdGlvbklucHV0Q29tcG9uZW50KTtcbiAgcHJpdmF0ZSBhY3RpdmVNZXNzYWdlID0gc2lnbmFsPEFYQ29udmVyc2F0aW9uTWVzc2FnZSB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgdHlwaW5nJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgdHlwaW5nU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIHByb3RlY3RlZCBjaGF0RGF0YSA9IHNpZ25hbDxBWENvbnZlcnNhdGlvbk1lc3NhZ2VbXT4oW10pO1xuICBwcm90ZWN0ZWQgcm9vbSA9IHNpZ25hbDxBWE1DaGF0Um9vbSB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgaXNFZGl0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIGVkaXRJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIGhlaWdodCA9IHNpZ25hbCgwKTtcbiAgcHJvdGVjdGVkIGlzTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBlcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBwcm90ZWN0ZWQgaXNDaGFubmVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yb29tKCk/LnRvcGljID09PSAnY2hhbm5lbCcpO1xuXG4gIHByb3RlY3RlZCBzZXRIZWlnaHQoaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLmhlaWdodC5zZXQoaGVpZ2h0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvcHRpb25zID0gc2lnbmFsKHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgcmVhZG9ubHk6IGZhbHNlLFxuICAgIHZhbHVlOiAnJyxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJvb21JZDogc3RyaW5nID0gJyc7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcbiAgICAgIHRoaXMucm9vbUlkID0gcGFyYW1zWydpZCddO1xuICAgICAgaWYgKHRoaXMucm9vbUlkKSB7XG4gICAgICAgIHRoaXMubG9hZE1lc3NhZ2VzKHRoaXMucm9vbUlkKTtcbiAgICAgICAgdGhpcy5sb2FkUm9vbUluZm8odGhpcy5yb29tSWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2UubWVzc2FnZSQucGlwZSh0aGlzLnVuc3Vic2NyaWJlLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZShhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAnYWRkJykge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXZlbnQucGF5bG9hZDtcbiAgICAgICAgaWYgKG1lc3NhZ2UuYXV0aG9yLmlkICE9PSB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI/LmlkICYmIG1lc3NhZ2Uucm9vbUlkID09PSB0aGlzLnJvb21JZCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UubWFya1NlZW4obWVzc2FnZS5pZCk7XG4gICAgICAgICAgdGhpcy5jaGF0RGF0YS51cGRhdGUoKHZhbHVlcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3TWVzc2FnZSA9IGNvbnZlcnRUb0NoYXRQcmV2aWV3KHRoaXMuc2Vzc2lvblNlcnZpY2UudXNlcj8uaWQgfHwgJycsIHtcbiAgICAgICAgICAgICAgaXRlbXM6IFttZXNzYWdlXSxcbiAgICAgICAgICAgICAgdG90YWw6IDEsXG4gICAgICAgICAgICB9KVswXTtcbiAgICAgICAgICAgIHJldHVybiBbLi4udmFsdWVzLCBuZXdNZXNzYWdlXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAncmVtb3ZlJykge1xuICAgICAgICB0aGlzLmNoYXREYXRhLnVwZGF0ZSgodmFsdWVzKSA9PiB2YWx1ZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlkICE9PSBldmVudC5wYXlsb2FkKSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICd1cGRhdGUnKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBldmVudC5wYXlsb2FkO1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWROZXdNZXNzYWdlID0gY29udmVydFRvQ2hhdFByZXZpZXcodGhpcy5zZXNzaW9uU2VydmljZS51c2VyPy5pZCB8fCAnJywge1xuICAgICAgICAgIGl0ZW1zOiBbbWVzc2FnZV0sXG4gICAgICAgICAgdG90YWw6IDEsXG4gICAgICAgIH0pWzBdO1xuICAgICAgICB0aGlzLmNoYXREYXRhLnVwZGF0ZSgodmFsdWVzKSA9PlxuICAgICAgICAgIHZhbHVlcy5tYXAoKGl0ZW0pID0+IChpdGVtLmlkID09PSBtZXNzYWdlLmlkID8geyAuLi5jb252ZXJ0ZWROZXdNZXNzYWdlLCAuLi5pdGVtIH0gOiBpdGVtKSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnR5cGluZ1N1YnNjcmlwdGlvbiA9IHRoaXMudHlwaW5nJC5waXBlKGRlYm91bmNlVGltZSgxMDAwKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnJvb21JZCkge1xuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLnN0b3BUeXBpbmcodGhpcy5yb29tSWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy9HTyBUTyBMQVNUIE1FU1NBR0UgRUZGRUNULlxuICAjYWYgPSBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXgtY29udmVyc2F0aW9uLXZpZXcgPiBkaXYnKTtcbiAgICAgIGlmIChkaXYpIHtcbiAgICAgICAgZGl2LnNjcm9sbFRvKHsgdG9wOiBkaXYuc2Nyb2xsSGVpZ2h0LCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICB9XG4gICAgfSwgNTAwKTtcbiAgfSk7XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy50eXBpbmdTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBoYW5kbGVUeXBpbmcoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJvb21JZCkge1xuICAgICAgdGhpcy5jaGF0U2VydmljZS5zdGFydFR5cGluZyh0aGlzLnJvb21JZCk7XG4gICAgICB0aGlzLnR5cGluZyQubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZpbGVDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdGaWxlIENoYW5nZWQ6JywgZXZlbnQpO1xuICB9XG5cbiAgaGFuZGxlQ2FuY2VsUmVjb3JkKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnUmVjb3JkaW5nIENhbmNlbGxlZDonLCBldmVudCk7XG4gIH1cblxuICBoYW5kbGVFbmRSZWNvcmQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZmlsZVNlcnZpY2UuYmxvYlRvQmFzZTY0KGV2ZW50LmRhdGEudmFsdWUpLnRoZW4oKGJhc2U2NENvbnRlbnQpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBhIHByb3Blcmx5IGZvcm1hdHRlZCBjaGF0IHByZXZpZXcgbWVzc2FnZSBmb3Igdm9pY2VcbiAgICAgIGNvbnN0IG5ld1ZvaWNlTWVzc2FnZTogQVhDb252ZXJzYXRpb25NZXNzYWdlID0ge1xuICAgICAgICBpZDogYCR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDApfWAsXG4gICAgICAgIGNvbnRlbnQ6IGJhc2U2NENvbnRlbnQsXG4gICAgICAgIHNlbmRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICByZWFkVGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgdHlwZTogJ3ZvaWNlJyxcbiAgICAgICAgbmFtZTogJ3Rlc3QgbmFtZScsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNoYXREYXRhLnVwZGF0ZSgodmFsdWVzKSA9PiBbLi4udmFsdWVzLCBuZXdWb2ljZU1lc3NhZ2VdKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZU9uU2VuZChlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0VkaXRpbmcoKSAmJiB0aGlzLmVkaXRJZCgpKSB7XG4gICAgICB0aGlzLmNoYXRTZXJ2aWNlXG4gICAgICAgIC5lZGl0TWVzc2FnZSh0aGlzLmVkaXRJZCgpISwgZS5kYXRhLnZhbHVlLCBlLmRhdGEudHlwZSB8fCAndGV4dCcpXG4gICAgICAgIC50aGVuKChuZXdNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29udmVydGVkTmV3TWVzc2FnZSA9IGNvbnZlcnRUb0NoYXRQcmV2aWV3KHRoaXMuc2Vzc2lvblNlcnZpY2UudXNlcj8uaWQgfHwgJycsIHtcbiAgICAgICAgICAgIGl0ZW1zOiBbbmV3TWVzc2FnZV0sXG4gICAgICAgICAgICB0b3RhbDogMSxcbiAgICAgICAgICB9KVswXTtcbiAgICAgICAgICB0aGlzLmNoYXREYXRhLnVwZGF0ZSgodmFsdWVzKSA9PlxuICAgICAgICAgICAgdmFsdWVzLm1hcCgoaXRlbSkgPT4gKGl0ZW0uaWQgPT09IHRoaXMuZWRpdElkKCkgPyB7IC4uLmNvbnZlcnRlZE5ld01lc3NhZ2UgfSA6IGl0ZW0pKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuZWRpdElkLnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMudXBkYXRlKChwcmV2KSA9PiAoeyAuLi5wcmV2LCB2YWx1ZTogJycgfSkpO1xuICAgICAgICAgIHRoaXMuaXNFZGl0aW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIoJ0ZhaWxlZCB0byBlZGl0IG1lc3NhZ2UnKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlLmRhdGEudmFsdWUgJiYgdGhpcy5yb29tSWQpIHtcbiAgICAgICAgY29uc3QgcmVwbHlJZCA9IGUuZGF0YS5yZXBseUNoYXQ/LmlkO1xuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlXG4gICAgICAgICAgLnNlbmRNZXNzYWdlKHRoaXMucm9vbUlkLCBlLmRhdGEudmFsdWUsIGUuZGF0YS50eXBlIHx8ICd0ZXh0JywgcmVwbHlJZClcbiAgICAgICAgICAudGhlbigobmV3TWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVkTmV3TWVzc2FnZSA9IGNvbnZlcnRUb0NoYXRQcmV2aWV3KHRoaXMuc2Vzc2lvblNlcnZpY2UudXNlcj8uaWQgfHwgJycsIHtcbiAgICAgICAgICAgICAgaXRlbXM6IFtuZXdNZXNzYWdlXSxcbiAgICAgICAgICAgICAgdG90YWw6IDEsXG4gICAgICAgICAgICB9KVswXTtcbiAgICAgICAgICAgIHRoaXMuY2hhdERhdGEudXBkYXRlKCh2YWx1ZXMpID0+IFsuLi52YWx1ZXMsIHsgLi4uY29udmVydGVkTmV3TWVzc2FnZSwgcmVwbHlUbzogcmVwbHlJZCB9XSk7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMudXBkYXRlKChwcmV2KSA9PiAoeyAuLi5wcmV2LCB2YWx1ZTogJycgfSkpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0VuZCgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKCdGYWlsZWQgdG8gc2VuZCBtZXNzYWdlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRW50ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucygpLnZhbHVlICYmIHRoaXMucm9vbUlkKSB7XG4gICAgICB0aGlzLmhhbmRsZU9uU2VuZCh7IGRhdGE6IHsgdmFsdWU6IHRoaXMub3B0aW9ucygpLnZhbHVlIH0gfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlT25BY3Rpb24oZTogQVhDb252ZXJzYXRpb25BY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdBY3Rpb24gVHJpZ2dlcmVkOicsIGUpO1xuICB9XG5cbiAgc2Nyb2xsVG9FbmQoKTogdm9pZCB7XG4gICAgY29uc3QgY29udmVyc2F0aW9uVmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2F4LWNvbnZlcnNhdGlvbi12aWV3Jyk7XG4gICAgaWYgKGNvbnZlcnNhdGlvblZpZXcpIHtcbiAgICAgIGNvbnZlcnNhdGlvblZpZXcuc2Nyb2xsVG8oe1xuICAgICAgICB0b3A6IGNvbnZlcnNhdGlvblZpZXcuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkTWVzc2FnZXMocm9vbUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBtZXNzYWdlcyBmcm9tIHRoZSBjaGF0IHNlcnZpY2VcbiAgICAgIGNvbnN0IG1lc3NhZ2VSZXNwb25zZSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZ2V0TWVzc2FnZXMocm9vbUlkKTtcblxuICAgICAgLy8gQ29udmVydCB0byBjaGF0IHByZXZpZXcgZm9ybWF0XG4gICAgICBjb25zdCBjaGF0UHJldmlld01lc3NhZ2VzID0gY29udmVydFRvQ2hhdFByZXZpZXcodGhpcy5zZXNzaW9uU2VydmljZS51c2VyPy5pZCB8fCAnJywgbWVzc2FnZVJlc3BvbnNlKS5zb3J0KFxuICAgICAgICAoYSwgYikgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShhLnNlbmRUaW1lKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShiLnNlbmRUaW1lKS5nZXRUaW1lKCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICAvLyBTZXQgdGhlIG1lc3NhZ2VzIGluIHRoZSBjb252ZXJzYXRpb24gc2VydmljZVxuICAgICAgdGhpcy5jaGF0RGF0YS5zZXQoY2hhdFByZXZpZXdNZXNzYWdlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KCdGYWlsZWQgdG8gbG9hZCBtZXNzYWdlcy4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG1lc3NhZ2VzOicsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkUm9vbUluZm8ocm9vbUlkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgcm9vbURhdGEgPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmdldFJvb20ocm9vbUlkKTtcbiAgICAgIHRoaXMucm9vbS5zZXQocm9vbURhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCByb29tIGluZm86JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRJdGVtSGFuZGxlcihlOiBBWENvbnZlcnNhdGlvbk1lbnVPcGVuaW5nRXZlbnQpIHtcbiAgICB0aGlzLmFjdGl2ZU1lc3NhZ2Uuc2V0KGUuZGF0YSk7XG4gICAgaWYgKGUuZGF0YS5mcm9tSWQpIHtcbiAgICAgIGUuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1c2VySXRlbTogQVhDb252ZXJzYXRpb25NZXNzYWdlQWN0aW9uW10gPSBbXTtcbiAgICBpZiAoZS5kYXRhLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgdXNlckl0ZW0ucHVzaCh7XG4gICAgICAgIHRleHQ6ICdFZGl0JyxcbiAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgaWNvbjogJ2ZhLXNvbGlkIGZhLXBlbmNpbCcsXG4gICAgICAgIG9uQ2xpY2s6IChpZCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmlzRWRpdGluZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmVkaXRJZC5zZXQoZS5kYXRhLmlkKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy51cGRhdGUoKHByZXYpID0+ICh7IC4uLnByZXYsIHZhbHVlOiBlLmRhdGEuY29udGVudCB9KSk7XG4gICAgICAgICAgICB0aGlzLmFkZElucHV0T3ZlcmxheSgnZWRpdCcsIGUuZGF0YSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcignRmFpbGVkIHRvIGVkaXQgbWVzc2FnZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZS5kYXRhLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgdXNlckl0ZW0ucHVzaCh7XG4gICAgICAgIHRleHQ6ICdEZWxldGUnLFxuICAgICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgICAgIGljb246ICdmYS1zb2xpZCBmYS10cmFzaC1jYW4nLFxuICAgICAgICBvbkNsaWNrOiAoaWQpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jaGF0U2VydmljZS5kZWxldGVNZXNzYWdlKGlkKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jaGF0RGF0YS51cGRhdGUoKHZhbHVlcykgPT4gdmFsdWVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZCAhPT0gaWQpKTtcbiAgICAgICAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIoJ0ZhaWxlZCB0byBkZWxldGUgbWVzc2FnZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKCdGYWlsZWQgdG8gZGVsZXRlIG1lc3NhZ2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBlLml0ZW1zLnB1c2goLi4udXNlckl0ZW0pO1xuICB9XG5cbiAgYWRkSW5wdXRPdmVybGF5KHR5cGU6ICdyZXBseScgfCAnZWRpdCcsIG1lc3NhZ2U/OiBBWENvbnZlcnNhdGlvbk1lc3NhZ2UpIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRSZWYoKTtcbiAgICBjb25zdCBpY29uID0gdHlwZSA9PT0gJ3JlcGx5JyA/ICdmYS1zb2xpZCBmYS1yZXBseScgOiAnZmEtc29saWQgZmEtcGVuY2lsJztcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIGlucHV0LnNldEFjdGlvbkJveENvbnRhaW5lcihpY29uLCBtZXNzYWdlPy5jb250ZW50IHx8IHRoaXMuYWN0aXZlTWVzc2FnZSgpPy5jb250ZW50IHx8ICcnKTtcbiAgICB9XG4gIH1cbn1cbiIsIkBpZiAoaXNMb2FkaW5nKCkpIHtcbiAgPGRpdiBjbGFzcz1cImF4LWgtZnVsbCBheC13LWZ1bGwgYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1jZW50ZXJcIj5cbiAgICA8YXgtbG9hZGluZz48L2F4LWxvYWRpbmc+XG4gIDwvZGl2PlxufSBAZWxzZSBpZiAoZXJyb3IoKSkge1xuICA8ZGl2IGNsYXNzPVwiYXgtaC1mdWxsIGF4LXctZnVsbCBheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWNlbnRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJheC10ZXh0LWNlbnRlclwiPlxuICAgICAgPHAgY2xhc3M9XCJheC10ZXh0LWRhbmdlclwiPnt7IGVycm9yKCkgfX08L3A+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTWVzc2FnZXMocm9vbUlkKVwiIGNsYXNzPVwiYXgtbXQtMiBheC1idXR0b24gYXgtcHJpbWFyeVwiPlJldHJ5PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufSBAZWxzZSB7XG4gIDxkaXZcbiAgICBheERvbUNoYW5nZVxuICAgIChheFJlc2l6ZU9ic2VydmVyKT1cInNldEhlaWdodCgkZXZlbnRbMF0uY29udGVudFJlY3QuaGVpZ2h0KVwiXG4gICAgY2xhc3M9XCJheC1iZy1zdXJmYWNlLWNvbnRhaW5lciBheC1oLWZ1bGxcIlxuICA+XG4gICAgPCEtLSBNZXNzYWdlcyBDb250YWluZXIgLS0+XG4gICAgPGF4LWNvbnZlcnNhdGlvbi1jb250YWluZXIgY2xhc3M9XCJheC1vdmVyZmxvdy1oaWRkZW5cIiBbY2hhdERhdGFdPVwiY2hhdERhdGEoKVwiPlxuICAgICAgPGF4LWNvbnZlcnNhdGlvbi12aWV3XG4gICAgICAgIChvbkFjdGlvbk1lbnVPcGVuaW5nKT1cImFkZEl0ZW1IYW5kbGVyKCRldmVudClcIlxuICAgICAgICAob25BY3Rpb24pPVwiaGFuZGxlT25BY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgIChvblJlcGx5Q2xpY2spPVwiYWRkSW5wdXRPdmVybGF5KCdyZXBseScsICRldmVudC5kYXRhKVwiXG4gICAgICAgIFtjaGF0Qm94SGVpZ2h0XT1cImhlaWdodCgpIC0gKGlzQ2hhbm5lbCgpID8gNSA6IDY4KSArICdweCdcIlxuICAgICAgPjwvYXgtY29udmVyc2F0aW9uLXZpZXc+XG4gICAgICBAaWYgKCFpc0NoYW5uZWwoKSkge1xuICAgICAgICA8YXgtY29udmVyc2F0aW9uLWlucHV0XG4gICAgICAgICAgY2xhc3M9XCJheC1weC0yXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgYSBtZXNzYWdlLi4uXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnMoKS52YWx1ZVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlVHlwaW5nKCRldmVudClcIlxuICAgICAgICAgIChvblNlbmRDbGljayk9XCJoYW5kbGVPblNlbmQoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uRmlsZUNoYW5nZSk9XCJoYW5kbGVGaWxlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIChvblN0b3BSZWNvcmRpbmcpPVwiaGFuZGxlRW5kUmVjb3JkKCRldmVudClcIlxuICAgICAgICAgIChvbkNhbmNlbFJlY29yZGluZyk9XCJoYW5kbGVDYW5jZWxSZWNvcmQoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uRW50ZXJQcmVzc2VkKT1cImhhbmRsZUVudGVyKClcIlxuICAgICAgICA+PC9heC1jb252ZXJzYXRpb24taW5wdXQ+XG4gICAgICB9XG4gICAgPC9heC1jb252ZXJzYXRpb24tY29udGFpbmVyPlxuICA8L2Rpdj5cbn1cbiJdfQ==","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class AXMCommentRealtimeService {\n}\nexport class AXMCommentRealtimeServiceImpl extends AXMCommentRealtimeService {\n constructor() {\n super(...arguments);\n this._comment$ = new Subject();\n this.comment$ = this._comment$.asObservable();\n this._thread$ = new Subject();\n this.thread$ = this._thread$.asObservable();\n }\n notifyComment(event) {\n this._comment$.next(event);\n }\n notifyThread(event) {\n this._thread$.next(event);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentRealtimeServiceImpl, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentRealtimeServiceImpl, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentRealtimeServiceImpl, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1yZWFsdGltZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NvbW1lbnQvY29tbWVudC1yZWFsdGltZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFHM0MsTUFBTSxPQUFnQix5QkFBeUI7Q0FNOUM7QUFLRCxNQUFNLE9BQU8sNkJBQThCLFNBQVEseUJBQXlCO0lBSDVFOztRQUltQixjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQW1CLENBQUM7UUFDbkQsYUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFakMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFrQixDQUFDO1FBQ2pELFlBQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0tBU2pEO0lBUEMsYUFBYSxDQUFDLEtBQXNCO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBcUI7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQzsrR0FiVSw2QkFBNkI7bUhBQTdCLDZCQUE2QixjQUY1QixNQUFNOzs0RkFFUCw2QkFBNkI7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhNQ29tbWVudEV2ZW50LCBBWE1UaHJlYWRFdmVudCB9IGZyb20gJy4vY29tbWVudC50eXBlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYTUNvbW1lbnRSZWFsdGltZVNlcnZpY2Uge1xuICBhYnN0cmFjdCByZWFkb25seSBjb21tZW50JDogT2JzZXJ2YWJsZTxBWE1Db21tZW50RXZlbnQ+O1xuICBhYnN0cmFjdCByZWFkb25seSB0aHJlYWQkOiBPYnNlcnZhYmxlPEFYTVRocmVhZEV2ZW50PjtcblxuICBhYnN0cmFjdCBub3RpZnlDb21tZW50KGV2ZW50OiBBWE1Db21tZW50RXZlbnQpOiB2b2lkO1xuICBhYnN0cmFjdCBub3RpZnlUaHJlYWQoZXZlbnQ6IEFYTVRocmVhZEV2ZW50KTogdm9pZDtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYTUNvbW1lbnRSZWFsdGltZVNlcnZpY2VJbXBsIGV4dGVuZHMgQVhNQ29tbWVudFJlYWx0aW1lU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbW1lbnQkID0gbmV3IFN1YmplY3Q8QVhNQ29tbWVudEV2ZW50PigpO1xuICByZWFkb25seSBjb21tZW50JCA9IHRoaXMuX2NvbW1lbnQkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVhZCQgPSBuZXcgU3ViamVjdDxBWE1UaHJlYWRFdmVudD4oKTtcbiAgcmVhZG9ubHkgdGhyZWFkJCA9IHRoaXMuX3RocmVhZCQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgbm90aWZ5Q29tbWVudChldmVudDogQVhNQ29tbWVudEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fY29tbWVudCQubmV4dChldmVudCk7XG4gIH1cblxuICBub3RpZnlUaHJlYWQoZXZlbnQ6IEFYTVRocmVhZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fdGhyZWFkJC5uZXh0KGV2ZW50KTtcbiAgfVxufVxuIl19","import { AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMMessageService } from '../../entities/message/message.service';\nimport { AXMRoomService } from '../../entities/room/room.service';\nimport * as i0 from \"@angular/core\";\n//#region ---- Abstract Comment Service ----\nexport class AXMCommentService {\n}\n//#endregion\nexport class AXMCommentServiceImpl {\n constructor() {\n this.roomService = inject(AXMRoomService);\n this.messageService = inject(AXMMessageService);\n this.filterService = inject(AXPFilterOperatorMiddlewareService);\n }\n async createThread(creatorUser, entityRef, topic, title) {\n const room = {\n type: 'comment',\n topic: topic,\n title: title || `Comments for ${entityRef.entityTypeId}#${entityRef.entityId}`,\n members: [creatorUser],\n entityRef: {\n ...entityRef,\n },\n auditInfo: {\n created: { at: new Date(), by: creatorUser },\n },\n };\n const newRoomId = await this.roomService.insertOne(room);\n return this.roomService.getOne(newRoomId);\n }\n async getThread(entityRef, topic) {\n const { items } = await this.roomService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'entityRef.entityId',\n value: entityRef.entityId,\n operator: this.filterService.getOperator('equal'),\n },\n {\n field: 'entityRef.entityTypeId',\n value: entityRef.entityTypeId,\n operator: this.filterService.getOperator('equal'),\n },\n {\n field: 'topic',\n value: topic,\n operator: this.filterService.getOperator('equal'),\n },\n ],\n },\n });\n return items[0] || null;\n }\n async listThreads(entityRef, topic) {\n const { items } = await this.roomService.query({\n skip: 0,\n take: 100,\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'entityRef.id',\n value: entityRef.entityId,\n operator: this.filterService.getOperator('equal'),\n },\n {\n field: 'entityRef.type',\n value: entityRef.entityTypeId,\n operator: this.filterService.getOperator('equal'),\n },\n {\n field: 'topic',\n value: topic,\n operator: this.filterService.getOperator('equal'),\n },\n ],\n },\n });\n return items;\n }\n async updateThread(threadId, data) {\n await this.roomService.updateOne(threadId, data);\n return this.roomService.getOne(threadId);\n }\n async deleteThread(threadId) {\n await this.roomService.deleteOne(threadId);\n return true;\n }\n async addComment(threadId, content, author, parentCommentId, contentType = 'text') {\n const messageContent = { content, contentType };\n const message = {\n roomId: threadId,\n message: messageContent,\n author,\n replyId: parentCommentId,\n reactions: [],\n seen: [],\n auditInfo: {\n created: { at: new Date(), by: author },\n },\n };\n const messageId = await this.messageService.insertOne(message);\n return this.messageService.getOne(messageId);\n }\n async getComments(threadId) {\n const { items } = await this.messageService.query({\n skip: 0,\n filter: { field: 'roomId', value: threadId, operator: this.filterService.getOperator('equal') },\n sort: [{ field: 'created.at', dir: 'asc' }],\n take: 500,\n });\n return items;\n }\n async getComment(commentId) {\n return this.messageService.getOne(commentId);\n }\n async editComment(commentId, content, editor, contentType = 'text') {\n const messageContent = { content, contentType };\n await this.messageService.updateOne(commentId, {\n message: messageContent,\n auditInfo: {\n updated: { at: new Date(), by: editor },\n },\n });\n return this.messageService.getOne(commentId);\n }\n async deleteComment(commentId) {\n await this.messageService.deleteOne(commentId);\n return true;\n }\n async updateReactions(commentId, reactions) {\n await this.messageService.updateOne(commentId, { reactions });\n return this.messageService.getOne(commentId);\n }\n async getReactions(commentId) {\n const comment = await this.messageService.getOne(commentId);\n return comment.reactions || [];\n }\n async pinComment(commentId, isPinned) {\n await this.messageService.updateOne(commentId, { isPinned });\n return this.messageService.getOne(commentId);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentServiceImpl, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentServiceImpl, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NvbW1lbnQvY29tbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFJbEUsZ0RBQWdEO0FBRWhELE1BQU0sT0FBZ0IsaUJBQWlCO0NBK0N0QztBQUVELFlBQVk7QUFLWixNQUFNLE9BQU8scUJBQXFCO0lBSGxDO1FBSW1CLGdCQUFXLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0Msa0JBQWEsR0FBRyxNQUFNLENBQUMsa0NBQWtDLENBQUMsQ0FBQztLQW9LN0U7SUFsS0MsS0FBSyxDQUFDLFlBQVksQ0FDaEIsV0FBNkIsRUFDN0IsU0FBK0IsRUFDL0IsS0FBYSxFQUNiLEtBQWM7UUFFZCxNQUFNLElBQUksR0FBb0M7WUFDNUMsSUFBSSxFQUFFLFNBQVM7WUFDZixLQUFLLEVBQUUsS0FBSztZQUNaLEtBQUssRUFBRSxLQUFLLElBQUksZ0JBQWdCLFNBQVMsQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRTtZQUM5RSxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFDdEIsU0FBUyxFQUFFO2dCQUNULEdBQUcsU0FBUzthQUNiO1lBQ0QsU0FBUyxFQUFFO2dCQUNULE9BQU8sRUFBRSxFQUFFLEVBQUUs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TSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQzsrR0F0S1UscUJBQXFCO21IQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs7NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEZpbHRlck9wZXJhdG9yTWlkZGxld2FyZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBDb250ZW50LCBBWFBDb250ZW50VHlwZSwgQVhQVXNlclJlZmVyZW5jZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTU1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZW50aXRpZXMvbWVzc2FnZS9tZXNzYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNQ29udmVyc2F0aW9uTWVzc2FnZSwgQVhNQ29udmVyc2F0aW9uUmVhY3Rpb24sIEFYTVJlYWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL21lc3NhZ2UvbWVzc2FnZS50eXBlcyc7XG5pbXBvcnQgeyBBWE1Sb29tU2VydmljZSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3Jvb20vcm9vbS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTUNvbnZlcnNhdGlvblJvb20gfSBmcm9tICcuLi8uLi9lbnRpdGllcy9yb29tL3Jvb20udHlwZXMnO1xuaW1wb3J0IHsgQVhNQ29tbWVudCwgQVhNQ29tbWVudEVudGl0eURhdGEsIEFYTUNvbW1lbnRUaHJlYWQgfSBmcm9tICcuL2NvbW1lbnQudHlwZSc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgQWJzdHJhY3QgQ29tbWVudCBTZXJ2aWNlICAgLS0tLVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQVhNQ29tbWVudFNlcnZpY2Uge1xuICAvLyNyZWdpb24gLS0tLSAgIENvbW1lbnQgVGhyZWFkIFNlcnZpY2UgICAtLS0tXG5cbiAgYWJzdHJhY3QgY3JlYXRlVGhyZWFkKGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsIHRvcGljOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogUHJvbWlzZTxBWE1Db21tZW50VGhyZWFkPjtcbiAgYWJzdHJhY3QgZ2V0VGhyZWFkKGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsIHRvcGljOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbW1lbnRUaHJlYWQgfCBudWxsPjtcbiAgYWJzdHJhY3QgbGlzdFRocmVhZHMoZW50aXR5UmVmOiBBWE1Db21tZW50RW50aXR5RGF0YSwgdG9waWM6IHN0cmluZyk6IFByb21pc2U8QVhNQ29tbWVudFRocmVhZFtdPjtcbiAgYWJzdHJhY3QgdXBkYXRlVGhyZWFkKFxuICAgIGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsXG4gICAgdG9waWM6IHN0cmluZyxcbiAgICBkYXRhOiBQYXJ0aWFsPHsgdGl0bGU6IHN0cmluZyB9PixcbiAgKTogUHJvbWlzZTxBWE1Db21tZW50VGhyZWFkPjtcbiAgYWJzdHJhY3QgZGVsZXRlVGhyZWFkKGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsIHRvcGljOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ29tbWVudCBTZXJ2aWNlICAgLS0tLVxuXG4gIGFic3RyYWN0IGFkZENvbW1lbnQoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcGFyZW50Q29tbWVudElkPzogc3RyaW5nLFxuICAgIGNvbnRlbnRUeXBlPzogQVhQQ29udGVudFR5cGUsXG4gICAgdXNlcklkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPEFYTUNvbW1lbnQ+O1xuICBhYnN0cmFjdCBnZXRDb21tZW50cyh0aHJlYWRJZDogc3RyaW5nLCBuZXN0ZWQ6IGJvb2xlYW4pOiBQcm9taXNlPEFYTUNvbW1lbnRbXT47XG4gIGFic3RyYWN0IGdldENvbW1lbnQoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbW1lbnQ+O1xuICBhYnN0cmFjdCBlZGl0Q29tbWVudChjb21tZW50SWQ6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBjb250ZW50VHlwZT86IEFYUENvbnRlbnRUeXBlKTogUHJvbWlzZTxBWE1Db21tZW50PjtcbiAgYWJzdHJhY3QgZGVsZXRlQ29tbWVudChjb21tZW50SWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21tZW50IFJlYWN0aW9uIFNlcnZpY2UgICAtLS0tXG5cbiAgYWJzdHJhY3QgYWRkUmVhY3Rpb24oY29tbWVudElkOiBzdHJpbmcsIHR5cGU6IEFYTVJlYWN0aW9uVHlwZSk6IFByb21pc2U8QVhNQ29tbWVudD47XG4gIGFic3RyYWN0IHJlbW92ZVJlYWN0aW9uKGNvbW1lbnRJZDogc3RyaW5nLCB0eXBlOiBBWE1SZWFjdGlvblR5cGUpOiBQcm9taXNlPEFYTUNvbW1lbnQ+O1xuICBhYnN0cmFjdCBnZXRSZWFjdGlvbnMoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW10+O1xuICBhYnN0cmFjdCBsaWtlQ29tbWVudChjb21tZW50SWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29tbWVudD47XG4gIGFic3RyYWN0IHVubGlrZUNvbW1lbnQoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbW1lbnQ+O1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ29tbWVudCBQaW4gU2VydmljZSAgIC0tLS1cblxuICBhYnN0cmFjdCBwaW5Db21tZW50KGNvbW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db21tZW50PjtcbiAgYWJzdHJhY3QgdW5waW5Db21tZW50KGNvbW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db21tZW50PjtcblxuICAvLyNlbmRyZWdpb25cbn1cblxuLy8jZW5kcmVnaW9uXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1Db21tZW50U2VydmljZUltcGwge1xuICBwcml2YXRlIHJlYWRvbmx5IHJvb21TZXJ2aWNlID0gaW5qZWN0KEFYTVJvb21TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZSA9IGluamVjdChBWE1NZXNzYWdlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyU2VydmljZSA9IGluamVjdChBWFBGaWx0ZXJPcGVyYXRvck1pZGRsZXdhcmVTZXJ2aWNlKTtcblxuICBhc3luYyBjcmVhdGVUaHJlYWQoXG4gICAgY3JlYXRvclVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICAgZW50aXR5UmVmOiBBWE1Db21tZW50RW50aXR5RGF0YSxcbiAgICB0b3BpYzogc3RyaW5nLFxuICAgIHRpdGxlPzogc3RyaW5nLFxuICApOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJvb20+IHtcbiAgICBjb25zdCByb29tOiBPbWl0PEFYTUNvbnZlcnNhdGlvblJvb20sICdpZCc+ID0ge1xuICAgICAgdHlwZTogJ2NvbW1lbnQnLFxuICAgICAgdG9waWM6IHRvcGljLFxuICAgICAgdGl0bGU6IHRpdGxlIHx8IGBDb21tZW50cyBmb3IgJHtlbnRpdHlSZWYuZW50aXR5VHlwZUlkfSMke2VudGl0eVJlZi5lbnRpdHlJZH1gLFxuICAgICAgbWVtYmVyczogW2NyZWF0b3JVc2VyXSxcbiAgICAgIGVudGl0eVJlZjoge1xuICAgICAgICAuLi5lbnRpdHlSZWYsXG4gICAgICB9LFxuICAgICAgYXVkaXRJbmZvOiB7XG4gICAgICAgIGNyZWF0ZWQ6IHsgYXQ6IG5ldyBEYXRlKCksIGJ5OiBjcmVhdG9yVXNlciB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IG5ld1Jvb21JZCA9IGF3YWl0IHRoaXMucm9vbVNlcnZpY2UuaW5zZXJ0T25lKHJvb20pO1xuICAgIHJldHVybiB0aGlzLnJvb21TZXJ2aWNlLmdldE9uZShuZXdSb29tSWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VGhyZWFkKGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsIHRvcGljOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJvb20gfCBudWxsPiB7XG4gICAgY29uc3QgeyBpdGVtcyB9ID0gYXdhaXQgdGhpcy5yb29tU2VydmljZS5xdWVyeSh7XG4gICAgICBza2lwOiAwLFxuICAgICAgdGFrZTogMSxcbiAgICAgIGZpbHRlcjoge1xuICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ2VudGl0eVJlZi5lbnRpdHlJZCcsXG4gICAgICAgICAgICB2YWx1ZTogZW50aXR5UmVmLmVudGl0eUlkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuZmlsdGVyU2VydmljZS5nZXRPcGVyYXRvcignZXF1YWwnKSBhcyBhbnksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ2VudGl0eVJlZi5lbnRpdHlUeXBlSWQnLFxuICAgICAgICAgICAgdmFsdWU6IGVudGl0eVJlZi5lbnRpdHlUeXBlSWQsXG4gICAgICAgICAgICBvcGVyYXRvcjogdGhpcy5maWx0ZXJTZXJ2aWNlLmdldE9wZXJhdG9yKCdlcXVhbCcpIGFzIGFueSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAndG9waWMnLFxuICAgICAgICAgICAgdmFsdWU6IHRvcGljLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuZmlsdGVyU2VydmljZS5nZXRPcGVyYXRvcignZXF1YWwnKSBhcyBhbnksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRlbXNbMF0gfHwgbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGxpc3RUaHJlYWRzKGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsIHRvcGljOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJvb21bXT4ge1xuICAgIGNvbnN0IHsgaXRlbXMgfSA9IGF3YWl0IHRoaXMucm9vbVNlcnZpY2UucXVlcnkoe1xuICAgICAgc2tpcDogMCxcbiAgICAgIHRha2U6IDEwMCxcbiAgICAgIGZpbHRlcjoge1xuICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ2VudGl0eVJlZi5pZCcsXG4gICAgICAgICAgICB2YWx1ZTogZW50aXR5UmVmLmVudGl0eUlkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuZmlsdGVyU2VydmljZS5nZXRPcGVyYXRvcignZXF1YWwnKSBhcyBhbnksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ2VudGl0eVJlZi50eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiBlbnRpdHlSZWYuZW50aXR5VHlwZUlkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuZmlsdGVyU2VydmljZS5nZXRPcGVyYXRvcignZXF1YWwnKSBhcyBhbnksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3RvcGljJyxcbiAgICAgICAgICAgIHZhbHVlOiB0b3BpYyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiB0aGlzLmZpbHRlclNlcnZpY2UuZ2V0T3BlcmF0b3IoJ2VxdWFsJykgYXMgYW55LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVGhyZWFkKHRocmVhZElkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8eyB0aXRsZTogc3RyaW5nIH0+KTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25Sb29tPiB7XG4gICAgYXdhaXQgdGhpcy5yb29tU2VydmljZS51cGRhdGVPbmUodGhyZWFkSWQsIGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJvb21TZXJ2aWNlLmdldE9uZSh0aHJlYWRJZCk7XG4gIH1cblxuICBhc3luYyBkZWxldGVUaHJlYWQodGhyZWFkSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGF3YWl0IHRoaXMucm9vbVNlcnZpY2UuZGVsZXRlT25lKHRocmVhZElkKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGFkZENvbW1lbnQoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgYXV0aG9yOiBBWFBVc2VyUmVmZXJlbmNlLFxuICAgIHBhcmVudENvbW1lbnRJZD86IHN0cmluZyxcbiAgICBjb250ZW50VHlwZTogQVhQQ29udGVudFR5cGUgPSAndGV4dCcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VDb250ZW50OiBBWFBDb250ZW50ID0geyBjb250ZW50LCBjb250ZW50VHlwZSB9O1xuICAgIGNvbnN0IG1lc3NhZ2U6IE9taXQ8QVhNQ29udmVyc2F0aW9uTWVzc2FnZSwgJ2lkJz4gPSB7XG4gICAgICByb29tSWQ6IHRocmVhZElkLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZUNvbnRlbnQsXG4gICAgICBhdXRob3IsXG4gICAgICByZXBseUlkOiBwYXJlbnRDb21tZW50SWQsXG4gICAgICByZWFjdGlvbnM6IFtdLFxuICAgICAgc2VlbjogW10sXG4gICAgICBhdWRpdEluZm86IHtcbiAgICAgICAgY3JlYXRlZDogeyBhdDogbmV3IERhdGUoKSwgYnk6IGF1dGhvciB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IGF3YWl0IHRoaXMubWVzc2FnZVNlcnZpY2UuaW5zZXJ0T25lKG1lc3NhZ2UpO1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmdldE9uZShtZXNzYWdlSWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q29tbWVudHModGhyZWFkSWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZVtdPiB7XG4gICAgY29uc3QgeyBpdGVtcyB9ID0gYXdhaXQgdGhpcy5tZXNzYWdlU2VydmljZS5xdWVyeSh7XG4gICAgICBza2lwOiAwLFxuICAgICAgZmlsdGVyOiB7IGZpZWxkOiAncm9vbUlkJywgdmFsdWU6IHRocmVhZElkLCBvcGVyYXRvcjogdGhpcy5maWx0ZXJTZXJ2aWNlLmdldE9wZXJhdG9yKCdlcXVhbCcpIGFzIGFueSB9LFxuICAgICAgc29ydDogW3sgZmllbGQ6ICdjcmVhdGVkLmF0JywgZGlyOiAnYXNjJyB9IGFzIGFueV0sXG4gICAgICB0YWtlOiA1MDAsXG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q29tbWVudChjb21tZW50SWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmdldE9uZShjb21tZW50SWQpO1xuICB9XG5cbiAgYXN5bmMgZWRpdENvbW1lbnQoXG4gICAgY29tbWVudElkOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIGVkaXRvcjogQVhQVXNlclJlZmVyZW5jZSxcbiAgICBjb250ZW50VHlwZTogQVhQQ29udGVudFR5cGUgPSAndGV4dCcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VDb250ZW50OiBBWFBDb250ZW50ID0geyBjb250ZW50LCBjb250ZW50VHlwZSB9O1xuICAgIGF3YWl0IHRoaXMubWVzc2FnZVNlcnZpY2UudXBkYXRlT25lKGNvbW1lbnRJZCwge1xuICAgICAgbWVzc2FnZTogbWVzc2FnZUNvbnRlbnQsXG4gICAgICBhdWRpdEluZm86IHtcbiAgICAgICAgdXBkYXRlZDogeyBhdDogbmV3IERhdGUoKSwgYnk6IGVkaXRvciB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU2VydmljZS5nZXRPbmUoY29tbWVudElkKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUNvbW1lbnQoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmRlbGV0ZU9uZShjb21tZW50SWQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlUmVhY3Rpb25zKGNvbW1lbnRJZDogc3RyaW5nLCByZWFjdGlvbnM6IEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW10pOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2U+IHtcbiAgICBhd2FpdCB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnVwZGF0ZU9uZShjb21tZW50SWQsIHsgcmVhY3Rpb25zIH0pO1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmdldE9uZShjb21tZW50SWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNvbW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25SZWFjdGlvbltdPiB7XG4gICAgY29uc3QgY29tbWVudCA9IGF3YWl0IHRoaXMubWVzc2FnZVNlcnZpY2UuZ2V0T25lKGNvbW1lbnRJZCk7XG4gICAgcmV0dXJuIGNvbW1lbnQucmVhY3Rpb25zIHx8IFtdO1xuICB9XG5cbiAgYXN5bmMgcGluQ29tbWVudChjb21tZW50SWQ6IHN0cmluZywgaXNQaW5uZWQ6IGJvb2xlYW4pOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2U+IHtcbiAgICBhd2FpdCB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnVwZGF0ZU9uZShjb21tZW50SWQsIHsgaXNQaW5uZWQgfSk7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVNlcnZpY2UuZ2V0T25lKGNvbW1lbnRJZCk7XG4gIH1cbn1cbiJdfQ==","import { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMCommentRealtimeService } from './comment-realtime.service';\nimport { AXMCommentServiceImpl } from './comment.service';\nimport * as i0 from \"@angular/core\";\nexport class AXMCommentManagementService {\n constructor() {\n this.commentImplService = inject(AXMCommentServiceImpl);\n this.sessionService = inject(AXPSessionService);\n this.usersService = inject(AXMUsersEntityService);\n this.realtimeService = inject(AXMCommentRealtimeService);\n }\n getCurrentUser() {\n const user = this.sessionService.user;\n if (!user) {\n throw new Error('No authenticated user found.');\n }\n return {\n id: user.id,\n type: 'user',\n fullName: user.title,\n username: user.name,\n };\n }\n async getUserInfo(userId) {\n try {\n const user = await this.usersService.getOne(userId);\n return { id: userId, type: 'user', fullName: user.displayName, username: user.username };\n }\n catch {\n throw new Error(`User with ID ${userId} not found`);\n }\n }\n formatComment(message, depth = 0) {\n return {\n ...message,\n depth,\n replies: [],\n replyCount: 0,\n };\n }\n buildCommentTree(comments) {\n const commentMap = new Map(comments.map((c) => [c.id, c]));\n const tree = [];\n comments.forEach((comment) => {\n if (comment.replyId && commentMap.has(comment.replyId)) {\n const parent = commentMap.get(comment.replyId);\n parent.replies.push(comment);\n comment.depth = (parent.depth ?? 0) + 1;\n }\n else {\n tree.push(comment);\n }\n });\n commentMap.forEach((comment) => {\n comment.replyCount = comment.replies.length;\n });\n return tree;\n }\n async formatThread(room) {\n const comments = await this.getComments(room.id, true);\n return {\n ...room,\n comments,\n commentCount: comments.length,\n };\n }\n async createThread(entityRef, topic, title) {\n const currentUser = this.getCurrentUser();\n const newRoom = await this.commentImplService.createThread(currentUser, entityRef, topic, title);\n const newThread = await this.formatThread(newRoom);\n this.realtimeService.notifyThread({ type: 'add', payload: newThread });\n return newThread;\n }\n async getThread(entityRef, topic) {\n const room = await this.commentImplService.getThread(entityRef, topic);\n if (!room) {\n return null;\n }\n return this.formatThread(room);\n }\n async listThreads(entityRef, topic) {\n const rooms = await this.commentImplService.listThreads(entityRef, topic);\n return Promise.all(rooms.map((room) => this.formatThread(room)));\n }\n async updateThread(entityRef, topic, data) {\n const thread = await this.getThread(entityRef, topic);\n if (!thread) {\n throw new Error(`Thread for entity ${entityRef.entityTypeId}#${entityRef.entityId} not found.`);\n }\n const updatedRoom = await this.commentImplService.updateThread(thread.id, data);\n const updatedThread = await this.formatThread(updatedRoom);\n this.realtimeService.notifyThread({ type: 'update', payload: updatedThread });\n return updatedThread;\n }\n async deleteThread(entityRef, topic) {\n const thread = await this.getThread(entityRef, topic);\n if (thread) {\n await this.commentImplService.deleteThread(thread.id);\n this.realtimeService.notifyThread({ type: 'remove', payload: thread.id });\n return true;\n }\n return false;\n }\n async addComment(threadId, content, parentCommentId, contentType = 'text', userId) {\n const author = userId ? await this.getUserInfo(userId) : this.getCurrentUser();\n const rawComment = await this.commentImplService.addComment(threadId, content, author, parentCommentId, contentType);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'add', payload: formattedComment });\n return formattedComment;\n }\n async getComments(threadId, nested) {\n const rawComments = await this.commentImplService.getComments(threadId);\n const formattedComments = rawComments.map((c) => this.formatComment(c));\n if (nested) {\n return this.buildCommentTree(formattedComments);\n }\n return formattedComments;\n }\n async getComment(commentId) {\n const rawComment = await this.commentImplService.getComment(commentId);\n return this.formatComment(rawComment);\n }\n async editComment(commentId, content, contentType = 'text') {\n const editor = this.getCurrentUser();\n const rawComment = await this.commentImplService.editComment(commentId, content, editor, contentType);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n async deleteComment(commentId) {\n const result = await this.commentImplService.deleteComment(commentId);\n if (result) {\n this.realtimeService.notifyComment({ type: 'remove', payload: commentId });\n }\n return result;\n }\n async addReaction(commentId, type) {\n const author = this.getCurrentUser();\n const comment = await this.commentImplService.getComment(commentId);\n const reactions = comment.reactions || [];\n if (reactions.some((r) => r.author.id === author.id && r.type === type)) {\n return this.formatComment(comment);\n }\n const updatedReactions = [...reactions, { author, type }];\n const rawComment = await this.commentImplService.updateReactions(commentId, updatedReactions);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n async removeReaction(commentId, type) {\n const author = this.getCurrentUser();\n const comment = await this.commentImplService.getComment(commentId);\n const updatedReactions = (comment.reactions || []).filter((r) => !(r.author.id === author.id && r.type === type));\n const rawComment = await this.commentImplService.updateReactions(commentId, updatedReactions);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n getReactions(commentId) {\n return this.commentImplService.getReactions(commentId);\n }\n likeComment(commentId) {\n return this.addReaction(commentId, 'like');\n }\n unlikeComment(commentId) {\n return this.removeReaction(commentId, 'like');\n }\n async pinComment(commentId) {\n const rawComment = await this.commentImplService.pinComment(commentId, true);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n async unpinComment(commentId) {\n const rawComment = await this.commentImplService.pinComment(commentId, false);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentManagementService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentManagementService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentManagementService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1tYW5hZ2VtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY29tbWVudC9jb21tZW50LW1hbmFnZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFNMUQsTUFBTSxPQUFPLDJCQUEyQjtJQUh4QztRQUltQix1QkFBa0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNuRCxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNDLGlCQUFZLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDN0Msb0JBQWUsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztLQW1OdEU7SUFqTlMsY0FBYztRQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUNwQixRQUFR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a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhNVXNlcnNFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL3NlY3VyaXR5LW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQU2Vzc2lvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2F1dGgnO1xuaW1wb3J0IHsgQVhQQ29udGVudFR5cGUsIEFYUFVzZXJSZWZlcmVuY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWE1Db252ZXJzYXRpb25NZXNzYWdlLCBBWE1Db252ZXJzYXRpb25SZWFjdGlvbiwgQVhNUmVhY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vZW50aXRpZXMvbWVzc2FnZS9tZXNzYWdlLnR5cGVzJztcbmltcG9ydCB7IEFYTUNvbnZlcnNhdGlvblJvb20gfSBmcm9tICcuLi8uLi9lbnRpdGllcy9yb29tL3Jvb20udHlwZXMnO1xuaW1wb3J0IHsgQVhNQ29tbWVudFJlYWx0aW1lU2VydmljZSB9IGZyb20gJy4vY29tbWVudC1yZWFsdGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTUNvbW1lbnRTZXJ2aWNlSW1wbCB9IGZyb20gJy4vY29tbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTUNvbW1lbnQsIEFYTUNvbW1lbnRFbnRpdHlEYXRhLCBBWE1Db21tZW50VGhyZWFkIH0gZnJvbSAnLi9jb21tZW50LnR5cGUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhNQ29tbWVudE1hbmFnZW1lbnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb21tZW50SW1wbFNlcnZpY2UgPSBpbmplY3QoQVhNQ29tbWVudFNlcnZpY2VJbXBsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU2VydmljZSA9IGluamVjdChBWFBTZXNzaW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXNlcnNTZXJ2aWNlID0gaW5qZWN0KEFYTVVzZXJzRW50aXR5U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVhbHRpbWVTZXJ2aWNlID0gaW5qZWN0KEFYTUNvbW1lbnRSZWFsdGltZVNlcnZpY2UpO1xuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFVzZXIoKTogQVhQVXNlclJlZmVyZW5jZSB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuc2Vzc2lvblNlcnZpY2UudXNlcjtcbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYXV0aGVudGljYXRlZCB1c2VyIGZvdW5kLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHVzZXIuaWQsXG4gICAgICB0eXBlOiAndXNlcicsXG4gICAgICBmdWxsTmFtZTogdXNlci50aXRsZSxcbiAgICAgIHVzZXJuYW1lOiB1c2VyLm5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0VXNlckluZm8odXNlcklkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFVzZXJSZWZlcmVuY2U+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMudXNlcnNTZXJ2aWNlLmdldE9uZSh1c2VySWQpO1xuICAgICAgcmV0dXJuIHsgaWQ6IHVzZXJJZCwgdHlwZTogJ3VzZXInLCBmdWxsTmFtZTogdXNlci5kaXNwbGF5TmFtZSwgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVXNlciB3aXRoIElEICR7dXNlcklkfSBub3QgZm91bmRgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdENvbW1lbnQobWVzc2FnZTogQVhNQ29udmVyc2F0aW9uTWVzc2FnZSwgZGVwdGggPSAwKTogQVhNQ29tbWVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICBkZXB0aCxcbiAgICAgIHJlcGxpZXM6IFtdLFxuICAgICAgcmVwbHlDb3VudDogMCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbW1lbnRUcmVlKGNvbW1lbnRzOiBBWE1Db21tZW50W10pOiBBWE1Db21tZW50W10ge1xuICAgIGNvbnN0IGNvbW1lbnRNYXAgPSBuZXcgTWFwPHN0cmluZywgQVhNQ29tbWVudD4oY29tbWVudHMubWFwKChjKSA9PiBbYy5pZCwgY10pKTtcbiAgICBjb25zdCB0cmVlOiBBWE1Db21tZW50W10gPSBbXTtcblxuICAgIGNvbW1lbnRzLmZvckVhY2goKGNvbW1lbnQpID0+IHtcbiAgICAgIGlmIChjb21tZW50LnJlcGx5SWQgJiYgY29tbWVudE1hcC5oYXMoY29tbWVudC5yZXBseUlkKSkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb21tZW50TWFwLmdldChjb21tZW50LnJlcGx5SWQpITtcbiAgICAgICAgcGFyZW50LnJlcGxpZXMucHVzaChjb21tZW50KTtcbiAgICAgICAgY29tbWVudC5kZXB0aCA9IChwYXJlbnQuZGVwdGggPz8gMCkgKyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJlZS5wdXNoKGNvbW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29tbWVudE1hcC5mb3JFYWNoKChjb21tZW50KSA9PiB7XG4gICAgICBjb21tZW50LnJlcGx5Q291bnQgPSBjb21tZW50LnJlcGxpZXMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyZWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZvcm1hdFRocmVhZChyb29tOiBBWE1Db252ZXJzYXRpb25Sb29tKTogUHJvbWlzZTxBWE1Db21tZW50VGhyZWFkPiB7XG4gICAgY29uc3QgY29tbWVudHMgPSBhd2FpdCB0aGlzLmdldENvbW1lbnRzKHJvb20uaWQsIHRydWUpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yb29tLFxuICAgICAgY29tbWVudHMsXG4gICAgICBjb21tZW50Q291bnQ6IGNvbW1lbnRzLmxlbmd0aCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlVGhyZWFkKGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsIHRvcGljOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogUHJvbWlzZTxBWE1Db21tZW50VGhyZWFkPiB7XG4gICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgY29uc3QgbmV3Um9vbSA9IGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLmNyZWF0ZVRocmVhZChjdXJyZW50VXNlciwgZW50aXR5UmVmLCB0b3BpYywgdGl0bGUpO1xuICAgIGNvbnN0IG5ld1RocmVhZCA9IGF3YWl0IHRoaXMuZm9ybWF0VGhyZWFkKG5ld1Jvb20pO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeVRocmVhZCh7IHR5cGU6ICdhZGQnLCBwYXlsb2FkOiBuZXdUaHJlYWQgfSk7XG4gICAgcmV0dXJuIG5ld1RocmVhZDtcbiAgfVxuXG4gIGFzeW5jIGdldFRocmVhZChlbnRpdHlSZWY6IEFYTUNvbW1lbnRFbnRpdHlEYXRhLCB0b3BpYzogc3RyaW5nKTogUHJvbWlzZTxBWE1Db21tZW50VGhyZWFkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHJvb20gPSBhd2FpdCB0aGlzLmNvbW1lbnRJbXBsU2VydmljZS5nZXRUaHJlYWQoZW50aXR5UmVmLCB0b3BpYyk7XG4gICAgaWYgKCFyb29tKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0VGhyZWFkKHJvb20pO1xuICB9XG5cbiAgYXN5bmMgbGlzdFRocmVhZHMoZW50aXR5UmVmOiBBWE1Db21tZW50RW50aXR5RGF0YSwgdG9waWM6IHN0cmluZyk6IFByb21pc2U8QVhNQ29tbWVudFRocmVhZFtdPiB7XG4gICAgY29uc3Qgcm9vbXMgPSBhd2FpdCB0aGlzLmNvbW1lbnRJbXBsU2VydmljZS5saXN0VGhyZWFkcyhlbnRpdHlSZWYsIHRvcGljKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocm9vbXMubWFwKChyb29tKSA9PiB0aGlzLmZvcm1hdFRocmVhZChyb29tKSkpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVGhyZWFkKFxuICAgIGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsXG4gICAgdG9waWM6IHN0cmluZyxcbiAgICBkYXRhOiBQYXJ0aWFsPHsgdGl0bGU6IHN0cmluZyB9PixcbiAgKTogUHJvbWlzZTxBWE1Db21tZW50VGhyZWFkPiB7XG4gICAgY29uc3QgdGhyZWFkID0gYXdhaXQgdGhpcy5nZXRUaHJlYWQoZW50aXR5UmVmLCB0b3BpYyk7XG4gICAgaWYgKCF0aHJlYWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhyZWFkIGZvciBlbnRpdHkgJHtlbnRpdHlSZWYuZW50aXR5VHlwZUlkfSMke2VudGl0eVJlZi5lbnRpdHlJZH0gbm90IGZvdW5kLmApO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkUm9vbSA9IGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLnVwZGF0ZVRocmVhZCh0aHJlYWQuaWQsIGRhdGEpO1xuICAgIGNvbnN0IHVwZGF0ZWRUaHJlYWQgPSBhd2FpdCB0aGlzLmZvcm1hdFRocmVhZCh1cGRhdGVkUm9vbSk7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5VGhyZWFkKHsgdHlwZTogJ3VwZGF0ZScsIHBheWxvYWQ6IHVwZGF0ZWRUaHJlYWQgfSk7XG4gICAgcmV0dXJuIHVwZGF0ZWRUaHJlYWQ7XG4gIH1cblxuICBhc3luYyBkZWxldGVUaHJlYWQoZW50aXR5UmVmOiBBWE1Db21tZW50RW50aXR5RGF0YSwgdG9waWM6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHRocmVhZCA9IGF3YWl0IHRoaXMuZ2V0VGhyZWFkKGVudGl0eVJlZiwgdG9waWMpO1xuICAgIGlmICh0aHJlYWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLmRlbGV0ZVRocmVhZCh0aHJlYWQuaWQpO1xuICAgICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5VGhyZWFkKHsgdHlwZTogJ3JlbW92ZScsIHBheWxvYWQ6IHRocmVhZC5pZCB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBhZGRDb21tZW50KFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHBhcmVudENvbW1lbnRJZD86IHN0cmluZyxcbiAgICBjb250ZW50VHlwZTogQVhQQ29udGVudFR5cGUgPSAndGV4dCcsXG4gICAgdXNlcklkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPEFYTUNvbW1lbnQ+IHtcbiAgICBjb25zdCBhdXRob3IgPSB1c2VySWQgPyBhd2FpdCB0aGlzLmdldFVzZXJJbmZvKHVzZXJJZCkgOiB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgY29uc3QgcmF3Q29tbWVudCA9IGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLmFkZENvbW1lbnQoXG4gICAgICB0aHJlYWRJZCxcbiAgICAgIGNvbnRlbnQsXG4gICAgICBhdXRob3IsXG4gICAgICBwYXJlbnRDb21tZW50SWQsXG4gICAgICBjb250ZW50VHlwZSxcbiAgICApO1xuICAgIGNvbnN0IGZvcm1hdHRlZENvbW1lbnQgPSB0aGlzLmZvcm1hdENvbW1lbnQocmF3Q29tbWVudCk7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5Q29tbWVudCh7IHR5cGU6ICdhZGQnLCBwYXlsb2FkOiBmb3JtYXR0ZWRDb21tZW50IH0pO1xuICAgIHJldHVybiBmb3JtYXR0ZWRDb21tZW50O1xuICB9XG5cbiAgYXN5bmMgZ2V0Q29tbWVudHModGhyZWFkSWQ6IHN0cmluZywgbmVzdGVkOiBib29sZWFuKTogUHJvbWlzZTxBWE1Db21tZW50W10+IHtcbiAgICBjb25zdCByYXdDb21tZW50cyA9IGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLmdldENvbW1lbnRzKHRocmVhZElkKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRDb21tZW50cyA9IHJhd0NvbW1lbnRzLm1hcCgoYykgPT4gdGhpcy5mb3JtYXRDb21tZW50KGMpKTtcbiAgICBpZiAobmVzdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZENvbW1lbnRUcmVlKGZvcm1hdHRlZENvbW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdHRlZENvbW1lbnRzO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q29tbWVudChjb21tZW50SWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29tbWVudD4ge1xuICAgIGNvbnN0IHJhd0NvbW1lbnQgPSBhd2FpdCB0aGlzLmNvbW1lbnRJbXBsU2VydmljZS5nZXRDb21tZW50KGNvbW1lbnRJZCk7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0Q29tbWVudChyYXdDb21tZW50KTtcbiAgfVxuXG4gIGFzeW5jIGVkaXRDb21tZW50KGNvbW1lbnRJZDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGNvbnRlbnRUeXBlOiBBWFBDb250ZW50VHlwZSA9ICd0ZXh0Jyk6IFByb21pc2U8QVhNQ29tbWVudD4ge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBjb25zdCByYXdDb21tZW50ID0gYXdhaXQgdGhpcy5jb21tZW50SW1wbFNlcnZpY2UuZWRpdENvbW1lbnQoY29tbWVudElkLCBjb250ZW50LCBlZGl0b3IsIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRDb21tZW50ID0gdGhpcy5mb3JtYXRDb21tZW50KHJhd0NvbW1lbnQpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeUNvbW1lbnQoeyB0eXBlOiAndXBkYXRlJywgcGF5bG9hZDogZm9ybWF0dGVkQ29tbWVudCB9KTtcbiAgICByZXR1cm4gZm9ybWF0dGVkQ29tbWVudDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUNvbW1lbnQoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbW1lbnRJbXBsU2VydmljZS5kZWxldGVDb21tZW50KGNvbW1lbnRJZCk7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5Q29tbWVudCh7IHR5cGU6ICdyZW1vdmUnLCBwYXlsb2FkOiBjb21tZW50SWQgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBhZGRSZWFjdGlvbihjb21tZW50SWQ6IHN0cmluZywgdHlwZTogQVhNUmVhY3Rpb25UeXBlKTogUHJvbWlzZTxBWE1Db21tZW50PiB7XG4gICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIGNvbnN0IGNvbW1lbnQgPSBhd2FpdCB0aGlzLmNvbW1lbnRJbXBsU2VydmljZS5nZXRDb21tZW50KGNvbW1lbnRJZCk7XG4gICAgY29uc3QgcmVhY3Rpb25zID0gY29tbWVudC5yZWFjdGlvbnMgfHwgW107XG5cbiAgICBpZiAocmVhY3Rpb25zLnNvbWUoKHIpID0+IHIuYXV0aG9yLmlkID09PSBhdXRob3IuaWQgJiYgci50eXBlID09PSB0eXBlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0Q29tbWVudChjb21tZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkUmVhY3Rpb25zID0gWy4uLnJlYWN0aW9ucywgeyBhdXRob3IsIHR5cGUgfV07XG4gICAgY29uc3QgcmF3Q29tbWVudCA9IGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLnVwZGF0ZVJlYWN0aW9ucyhjb21tZW50SWQsIHVwZGF0ZWRSZWFjdGlvbnMpO1xuICAgIGNvbnN0IGZvcm1hdHRlZENvbW1lbnQgPSB0aGlzLmZvcm1hdENvbW1lbnQocmF3Q29tbWVudCk7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5Q29tbWVudCh7IHR5cGU6ICd1cGRhdGUnLCBwYXlsb2FkOiBmb3JtYXR0ZWRDb21tZW50IH0pO1xuICAgIHJldHVybiBmb3JtYXR0ZWRDb21tZW50O1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlUmVhY3Rpb24oY29tbWVudElkOiBzdHJpbmcsIHR5cGU6IEFYTVJlYWN0aW9uVHlwZSk6IFByb21pc2U8QVhNQ29tbWVudD4ge1xuICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBjb25zdCBjb21tZW50ID0gYXdhaXQgdGhpcy5jb21tZW50SW1wbFNlcnZpY2UuZ2V0Q29tbWVudChjb21tZW50SWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRSZWFjdGlvbnMgPSAoY29tbWVudC5yZWFjdGlvbnMgfHwgW10pLmZpbHRlcigocikgPT4gIShyLmF1dGhvci5pZCA9PT0gYXV0aG9yLmlkICYmIHIudHlwZSA9PT0gdHlwZSkpO1xuXG4gICAgY29uc3QgcmF3Q29tbWVudCA9IGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLnVwZGF0ZVJlYWN0aW9ucyhjb21tZW50SWQsIHVwZGF0ZWRSZWFjdGlvbnMpO1xuICAgIGNvbnN0IGZvcm1hdHRlZENvbW1lbnQgPSB0aGlzLmZvcm1hdENvbW1lbnQocmF3Q29tbWVudCk7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5Q29tbWVudCh7IHR5cGU6ICd1cGRhdGUnLCBwYXlsb2FkOiBmb3JtYXR0ZWRDb21tZW50IH0pO1xuICAgIHJldHVybiBmb3JtYXR0ZWRDb21tZW50O1xuICB9XG5cbiAgZ2V0UmVhY3Rpb25zKGNvbW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25SZWFjdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLmdldFJlYWN0aW9ucyhjb21tZW50SWQpO1xuICB9XG5cbiAgbGlrZUNvbW1lbnQoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbW1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRSZWFjdGlvbihjb21tZW50SWQsICdsaWtlJyk7XG4gIH1cblxuICB1bmxpa2VDb21tZW50KGNvbW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db21tZW50PiB7XG4gICAgcmV0dXJuIHRoaXMucmVtb3ZlUmVhY3Rpb24oY29tbWVudElkLCAnbGlrZScpO1xuICB9XG5cbiAgYXN5bmMgcGluQ29tbWVudChjb21tZW50SWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29tbWVudD4ge1xuICAgIGNvbnN0IHJhd0NvbW1lbnQgPSBhd2FpdCB0aGlzLmNvbW1lbnRJbXBsU2VydmljZS5waW5Db21tZW50KGNvbW1lbnRJZCwgdHJ1ZSk7XG4gICAgY29uc3QgZm9ybWF0dGVkQ29tbWVudCA9IHRoaXMuZm9ybWF0Q29tbWVudChyYXdDb21tZW50KTtcbiAgICB0aGlzLnJlYWx0aW1lU2VydmljZS5ub3RpZnlDb21tZW50KHsgdHlwZTogJ3VwZGF0ZScsIHBheWxvYWQ6IGZvcm1hdHRlZENvbW1lbnQgfSk7XG4gICAgcmV0dXJuIGZvcm1hdHRlZENvbW1lbnQ7XG4gIH1cblxuICBhc3luYyB1bnBpbkNvbW1lbnQoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbW1lbnQ+IHtcbiAgICBjb25zdCByYXdDb21tZW50ID0gYXdhaXQgdGhpcy5jb21tZW50SW1wbFNlcnZpY2UucGluQ29tbWVudChjb21tZW50SWQsIGZhbHNlKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRDb21tZW50ID0gdGhpcy5mb3JtYXRDb21tZW50KHJhd0NvbW1lbnQpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeUNvbW1lbnQoeyB0eXBlOiAndXBkYXRlJywgcGF5bG9hZDogZm9ybWF0dGVkQ29tbWVudCB9KTtcbiAgICByZXR1cm4gZm9ybWF0dGVkQ29tbWVudDtcbiAgfVxufVxuIl19","export function convertCommentToNotification(thread, comment, currentUser) {\n return {\n channel: 'InApp',\n template: {\n category: 'Inbox',\n prority: 'Notice',\n icon: 'fa-light fa-comment',\n isPinned: false,\n },\n title: thread.title || 'New Comment',\n body: comment.message.content,\n sender: comment.author,\n receiver: currentUser,\n content: comment.message,\n readAt: null,\n type: 'Comment',\n data: {\n threadId: thread.id,\n entityTypeId: thread.entityRef?.entityTypeId,\n entityId: thread.entityRef?.entityId,\n moduleName: thread.entityRef?.moduleName,\n entityName: thread.entityRef?.entityName,\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1ub3RpZmljYXRpb24uaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NvbW1lbnQvY29tbWVudC1ub3RpZmljYXRpb24uaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sVUFBVSw0QkFBNEIsQ0FDMUMsTUFBd0IsRUFDeEIsT0FBbUIsRUFDbkIsV0FBNkI7SUFFN0IsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFFBQVEsRUFBRTtZQUNSLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLElBQUksRUFBRSxxQkFBcUI7WUFDM0IsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRCxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxhQUFhO1FBQ3BDLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU87UUFDN0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixNQUFNLEVBQUUsSUFBSTtRQUNaLElBQUksRUFBRSxTQUFTO1FBQ2YsSUFBSSxFQUFFO1lBQ0osUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLFlBQVksRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLFlBQVk7WUFDNUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUTtZQUNwQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxVQUFVO1lBQ3hDLFVBQVUsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVU7U0FDekM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYTU5vdGlmaWNhdGlvbkl0ZW0gfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvbm90aWZpY2F0aW9uLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQVXNlclJlZmVyZW5jZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWE1Db21tZW50LCBBWE1Db21tZW50VGhyZWFkIH0gZnJvbSAnLi9jb21tZW50LnR5cGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydENvbW1lbnRUb05vdGlmaWNhdGlvbihcbiAgdGhyZWFkOiBBWE1Db21tZW50VGhyZWFkLFxuICBjb21tZW50OiBBWE1Db21tZW50LFxuICBjdXJyZW50VXNlcjogQVhQVXNlclJlZmVyZW5jZSxcbik6IE9taXQ8QVhNTm90aWZpY2F0aW9uSXRlbSwgJ2lkJyB8ICdlbnRpdHlOYW1lJyB8ICdjcmVhdGVBdCc+IHtcbiAgcmV0dXJuIHtcbiAgICBjaGFubmVsOiAnSW5BcHAnLFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBjYXRlZ29yeTogJ0luYm94JyxcbiAgICAgIHByb3JpdHk6ICdOb3RpY2UnLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWNvbW1lbnQnLFxuICAgICAgaXNQaW5uZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAgdGl0bGU6IHRocmVhZC50aXRsZSB8fCAnTmV3IENvbW1lbnQnLFxuICAgIGJvZHk6IGNvbW1lbnQubWVzc2FnZS5jb250ZW50LFxuICAgIHNlbmRlcjogY29tbWVudC5hdXRob3IsXG4gICAgcmVjZWl2ZXI6IGN1cnJlbnRVc2VyLFxuICAgIGNvbnRlbnQ6IGNvbW1lbnQubWVzc2FnZSxcbiAgICByZWFkQXQ6IG51bGwsXG4gICAgdHlwZTogJ0NvbW1lbnQnLFxuICAgIGRhdGE6IHtcbiAgICAgIHRocmVhZElkOiB0aHJlYWQuaWQsXG4gICAgICBlbnRpdHlUeXBlSWQ6IHRocmVhZC5lbnRpdHlSZWY/LmVudGl0eVR5cGVJZCxcbiAgICAgIGVudGl0eUlkOiB0aHJlYWQuZW50aXR5UmVmPy5lbnRpdHlJZCxcbiAgICAgIG1vZHVsZU5hbWU6IHRocmVhZC5lbnRpdHlSZWY/Lm1vZHVsZU5hbWUsXG4gICAgICBlbnRpdHlOYW1lOiB0aHJlYWQuZW50aXR5UmVmPy5lbnRpdHlOYW1lLFxuICAgIH0sXG4gIH07XG59XG4iXX0=","import { AXWysiwygModule } from '@acorex/components/wysiwyg';\nimport { ChangeDetectionStrategy, Component, DestroyRef, inject, input, signal, viewChild, } from '@angular/core';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXToastService } from '@acorex/components/toast';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCommentModule } from '@acorex/components/comment';\nimport { AXConversationModule } from '@acorex/components/conversation';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXMNotificationConnectorService } from '@acorex/modules/notification-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPUserAvatarComponent } from '@acorex/platform/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { AXMCommentManagementService } from './comment-management.service';\nimport { convertCommentToNotification } from './comment-notification.helper';\nimport { AXMCommentRealtimeService } from './comment-realtime.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/wysiwyg\";\nimport * as i2 from \"@acorex/components/skeleton\";\nimport * as i3 from \"@acorex/components/decorators\";\nimport * as i4 from \"@acorex/components/comment\";\nimport * as i5 from \"@acorex/components/button\";\nimport * as i6 from \"@acorex/components/loading\";\nimport * as i7 from \"@acorex/components/dropdown\";\nimport * as i8 from \"@angular/forms\";\nimport * as i9 from \"@acorex/components/dropdown-button\";\nimport * as i10 from \"@acorex/core/format\";\nexport class AXMCommentComponent {\n constructor() {\n this.refrenceType = input.required(...(ngDevMode ? [{ debugName: \"refrenceType\" }] : []));\n this.refrenceId = input.required(...(ngDevMode ? [{ debugName: \"refrenceId\" }] : []));\n this.subject = input.required(...(ngDevMode ? [{ debugName: \"subject\" }] : []));\n this.moduleName = signal(undefined, ...(ngDevMode ? [{ debugName: \"moduleName\" }] : []));\n this.entityName = signal(undefined, ...(ngDevMode ? [{ debugName: \"entityName\" }] : []));\n this.hasCooldown = signal(false, ...(ngDevMode ? [{ debugName: \"hasCooldown\" }] : []));\n this.commentContent = signal('', ...(ngDevMode ? [{ debugName: \"commentContent\" }] : []));\n this.isSubmitting = signal(false, ...(ngDevMode ? [{ debugName: \"isSubmitting\" }] : []));\n this.isReplyingMode = signal(false, ...(ngDevMode ? [{ debugName: \"isReplyingMode\" }] : []));\n this.isEditingMode = signal(false, ...(ngDevMode ? [{ debugName: \"isEditingMode\" }] : []));\n this.isLoading = signal(true, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n this.failedImageIds = signal([], ...(ngDevMode ? [{ debugName: \"failedImageIds\" }] : []));\n this.activeReplyComment = signal(undefined, ...(ngDevMode ? [{ debugName: \"activeReplyComment\" }] : []));\n this.activeEditComment = signal(undefined, ...(ngDevMode ? [{ debugName: \"activeEditComment\" }] : []));\n this.highlightedCommentId = signal(null, ...(ngDevMode ? [{ debugName: \"highlightedCommentId\" }] : []));\n this.wysiwygEditor = viewChild.required('w');\n this.commentService = inject(AXMCommentManagementService);\n this.realtimeService = inject(AXMCommentRealtimeService);\n this.sessionService = inject(AXPSessionService);\n this.toastService = inject(AXToastService);\n this.dialogService = inject(AXDialogService);\n this.notificationConnectorService = inject(AXMNotificationConnectorService);\n this.router = inject(Router);\n this.activatedRoute = inject(ActivatedRoute);\n this.sanitize = inject(DomSanitizer);\n this.destroyRef = inject(DestroyRef);\n this.comments = signal([], ...(ngDevMode ? [{ debugName: \"comments\" }] : []));\n this.thread = signal(undefined, ...(ngDevMode ? [{ debugName: \"thread\" }] : []));\n this.wysiwygOptions = signal({\n look: 'solid',\n }, ...(ngDevMode ? [{ debugName: \"wysiwygOptions\" }] : []));\n this.avatarConfig = signal({\n color: 'primary',\n look: 'rounded',\n type: 'solid',\n }, ...(ngDevMode ? [{ debugName: \"avatarConfig\" }] : []));\n }\n ngOnInit() {\n this.isLoading.set(true);\n this.moduleName.set(this.activatedRoute.snapshot.params['module'] || null);\n this.entityName.set(this.activatedRoute.snapshot.params['entity'] || null);\n this.loadComments().finally(() => {\n setTimeout(() => {\n this.isLoading.set(false);\n }, 250);\n });\n this.realtimeService.comment$\n .pipe(takeUntilDestroyed(this.destroyRef), filter((event) => !!event))\n .subscribe((event) => {\n switch (event.type) {\n case 'add':\n this.handleAddComment(event.payload);\n break;\n case 'update':\n this.handleUpdateComment(event.payload);\n break;\n case 'remove':\n this.removeMessageById(event.payload);\n break;\n }\n });\n }\n handleAddComment(comment) {\n if (comment.author.id !== this.getCurrentUser()?.id) {\n const notification = convertCommentToNotification(this.thread(), comment, this.sessionService.user);\n this.notificationConnectorService.create({\n ...notification,\n id: comment.id,\n entityName: 'notifications',\n createAt: new Date(),\n }, {\n onClick: () => {\n this.router.navigate([this.refrenceType(), 't', this.refrenceType(), 'i', this.refrenceId()]);\n },\n activeWindow: true,\n });\n }\n if (comment.replyId) {\n this.comments.update((comments) => {\n return comments.map((c) => {\n if (c.id === comment.replyId) {\n const newReplies = c.replies ? [...c.replies, comment] : [comment];\n return { ...c, replies: newReplies, replyCount: newReplies.length };\n }\n return c;\n });\n });\n }\n else {\n this.comments.update((comments) => [...comments, comment]);\n }\n }\n handleUpdateComment(updatedComment) {\n const update = (list) => {\n return list.map((c) => {\n if (c.id === updatedComment.id) {\n return { ...c, ...updatedComment, replies: updatedComment.replies || c.replies };\n }\n if (c.replies && c.replies.length > 0) {\n return { ...c, replies: update(c.replies) };\n }\n return c;\n });\n };\n this.comments.update((comments) => update(comments));\n }\n getCurrentUser() {\n const user = this.sessionService.user;\n return user ? { id: user.id, type: 'user' } : null;\n }\n isLikedByUser(comment) {\n const user = this.getCurrentUser();\n if (!user)\n return false;\n return (comment.reactions || []).some((r) => r.author.id === user.id && r.type === 'like');\n }\n getReactionsCount(comment) {\n return (comment.reactions || []).filter((r) => r.type === 'like').length;\n }\n sanitizeHtml(htmlContent) {\n if (!htmlContent)\n return this.sanitize.bypassSecurityTrustHtml('');\n return this.sanitize.bypassSecurityTrustHtml(htmlContent);\n }\n handleImageError(imageId) {\n this.failedImageIds.update((ids) => [...ids, imageId]);\n }\n checkImageExists(imageId) {\n return !this.failedImageIds().includes(imageId);\n }\n async loadComments() {\n try {\n const thread = await this.commentService.getThread({\n entityTypeId: this.refrenceType(),\n entityId: this.refrenceId(),\n moduleName: this.moduleName(),\n entityName: this.entityName(),\n }, this.subject());\n if (thread) {\n this.thread.set(thread);\n this.comments.set(thread.comments || []);\n }\n else {\n const newThread = await this.commentService.createThread({\n entityTypeId: this.refrenceType(),\n entityId: this.refrenceId(),\n moduleName: this.moduleName(),\n entityName: this.entityName(),\n }, this.subject());\n this.thread.set(newThread);\n this.comments.set(newThread.comments || []);\n }\n }\n catch (error) {\n console.error('Failed to load comments:', error);\n this.toastService.show({\n content: 'Failed to load comments. Please try again.',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n this.comments.set([]);\n }\n }\n editMessage(comment, reply, userName) {\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n this.isEditingMode.set(true);\n this.activeEditComment.set({ ...comment, userName: userName || '' });\n const contentToEdit = reply ? reply.message?.content : comment.message?.content;\n this.commentContent.set(contentToEdit || '');\n this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n replyMessage(comment, reply, userName) {\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n this.isReplyingMode.set(true);\n this.activeReplyComment.set({ ...comment, userName: userName || '' });\n if (reply) {\n const author = reply.author.fullName || reply.author.id;\n const mention = `<strong><a data-id=\"${reply.author.username}\">@${userName || author}</a></strong> `;\n this.commentContent.set(mention);\n document.getElementsByClassName('ql-editor')[0].innerHTML = mention;\n this.wysiwygEditor()?.focus();\n }\n this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n async deleteComment(commentId) {\n const dialog = this.dialogService.open({\n icon: 'fa-regular fa-warning',\n content: 'Are you sure you want to delete this comment?',\n title: 'Delete Comment',\n type: 'danger',\n orientation: 'horizontal',\n buttons: [\n {\n text: 'Delete',\n color: 'danger',\n onClick: async (e) => {\n e.handled = true;\n e.source.text = 'Deleting...';\n e.source.disabled = true;\n e.source.loading = true;\n try {\n await this.commentService.deleteComment(commentId);\n this.removeMessageById(commentId);\n this.toastService.show({\n content: 'Comment deleted successfully.',\n color: 'success',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n if (this.isEditingMode() && this.activeEditComment()?.id === commentId) {\n this.resetReplyEditState();\n }\n dialog.close();\n }\n catch (error) {\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to delete comment!',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n },\n },\n {\n text: 'Cancel',\n color: 'default',\n autofocus: true,\n onClick: (e) => {\n dialog.close();\n },\n },\n ],\n closeButton: false,\n });\n }\n resetReplyEditState() {\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n this.commentContent.set('');\n document.getElementsByClassName('ql-editor')[0].innerHTML = '';\n }\n async toggleLike(comment) {\n const isLiked = this.isLikedByUser(comment);\n this.updateLikeStatus(comment.id, !isLiked);\n try {\n if (isLiked) {\n await this.commentService.unlikeComment(comment.id);\n }\n else {\n await this.commentService.likeComment(comment.id);\n }\n }\n catch (error) {\n console.error('Failed to toggle like:', error);\n this.updateLikeStatus(comment.id, isLiked); // Revert optimistic update\n }\n }\n updateLikeStatus(commentId, willBeLiked) {\n const findAndToggle = (comments) => {\n return comments.map((c) => {\n if (c.id === commentId) {\n const user = this.getCurrentUser();\n if (!user)\n return c;\n let reactions = c.reactions || [];\n if (willBeLiked) {\n reactions.push({ author: user, type: 'like' });\n }\n else {\n reactions = reactions.filter((r) => r.author.id !== user.id || r.type !== 'like');\n }\n return { ...c, reactions };\n }\n if (c.replies && c.replies.length > 0) {\n c.replies = findAndToggle(c.replies);\n }\n return c;\n });\n };\n this.comments.update((comments) => findAndToggle(comments));\n }\n removeMessageById(commentId) {\n const filterOut = (comments) => {\n return comments\n .filter((c) => c.id !== commentId)\n .map((c) => {\n if (c.replies && c.replies.length > 0) {\n c.replies = filterOut(c.replies);\n }\n return c;\n });\n };\n this.comments.update((comments) => filterOut(comments));\n }\n async submitComment() {\n this.isSubmitting.set(true);\n try {\n let currentThread = this.thread();\n if (!currentThread) {\n return;\n }\n if (this.isEditingMode() && this.activeEditComment()?.id) {\n await this.commentService.editComment(this.activeEditComment().id, this.commentContent());\n this.hasCooldown.set(true);\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n }\n else {\n await this.commentService.addComment(currentThread.id, this.commentContent(), this.activeReplyComment()?.id);\n this.hasCooldown.set(true);\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n }\n this.commentContent.set('');\n document.getElementsByClassName('ql-editor')[0].innerHTML = '';\n setTimeout(() => {\n this.hasCooldown.set(false);\n }, 1000);\n }\n catch (error) {\n console.error('Error submitting comment:', error);\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to submit comment. Please try again.',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n finally {\n this.isSubmitting.set(false);\n }\n }\n scrollMain() {\n const comment = this.isReplyingMode() ? this.activeReplyComment() : this.activeEditComment();\n if (comment && comment.id) {\n const el = document.getElementById(comment.id);\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n this.highlightedCommentId.set(comment.id);\n setTimeout(() => {\n this.highlightedCommentId.set(null);\n }, 1000);\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMCommentComponent, isStandalone: true, selector: \"axm-comment\", inputs: { refrenceType: { classPropertyName: \"refrenceType\", publicName: \"refrenceType\", isSignal: true, isRequired: true, transformFunction: null }, refrenceId: { classPropertyName: \"refrenceId\", publicName: \"refrenceId\", isSignal: true, isRequired: true, transformFunction: null }, subject: { classPropertyName: \"subject\", publicName: \"subject\", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: \"wysiwygEditor\", first: true, predicate: [\"w\"], descendants: true, isSignal: true }], ngImport: i0, template: \"<div class=\\\"ax-size-full ax-flex ax-flex-col ax-justify-between ax-p-4 ax-overflow-hidden\\\">\\n <ax-comment-container class=\\\"ax-overflow-auto\\\">\\n @if (isLoading()) {\\n <div class=\\\"ax-flex ax-items-center ax-py-12 ax-bg-lightest ax-px-5\\\">\\n <ax-skeleton class=\\\"ax-min-w-16 ax-h-16 ax-rounded-full ax-me-4\\\"></ax-skeleton>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 ax-w-full\\\">\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-2 ax-rounded-full\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-2 ax-rounded-full\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-8/12 ax-h-2 ax-rounded-full\\\"></ax-skeleton>\\n </div>\\n </div>\\n } @else if (!isLoading() && comments().length > 0) {\\n <ax-comment-view class=\\\"ax-bg-lightest\\\">\\n @for (comment of comments(); track comment.id) {\\n <ax-comment-item\\n [id]=\\\"comment.id!\\\"\\n [replyCount]=\\\"comment.replyCount\\\"\\n [class.highlighted]=\\\"highlightedCommentId() === comment.id\\\"\\n [@fadeIn]\\n >\\n <axp-user-avatar #user [size]=\\\"48\\\" [userId]=\\\"comment.author.id\\\" ngProjectAs=\\\"'ax-avatar'\\\"></axp-user-avatar>\\n <ax-title>{{ user.firstName() + ' ' + user.lastName() }}</ax-title>\\n <ax-comment-date>{{ comment.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\\n <ax-comment-menu-options>\\n <ax-button class=\\\"ax-sm\\\" look=\\\"blank\\\" color=\\\"neutral\\\">\\n <ax-icon icon=\\\"ax-icon ax-icon-solid ax-icon-more-horizontal\\\"></ax-icon>\\n </ax-button>\\n\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n <ax-button-item\\n text=\\\"Edit\\\"\\n color=\\\"neutral\\\"\\n (click)=\\\"editMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\\\"\\n >\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-edit\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n\\n <ax-button-item text=\\\"Delete\\\" color=\\\"danger\\\" (click)=\\\"deleteComment(comment.id!)\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-trash-can\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-comment-menu-options>\\n <ax-content [innerHTML]=\\\"sanitizeHtml(comment.message.content)\\\"></ax-content>\\n <ax-comment-like (click)=\\\"toggleLike(comment)\\\" [like]=\\\"isLikedByUser(comment)\\\">\\n {{ getReactionsCount(comment) }}\\n </ax-comment-like>\\n <ax-comment-reply-text\\n (click)=\\\"replyMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\\\"\\n ></ax-comment-reply-text>\\n @for (reply of comment.replies; track reply.id) {\\n <ax-comment-item [id]=\\\"reply.id\\\" [class.highlighted]=\\\"highlightedCommentId() === reply.id\\\" [@fadeIn]>\\n <axp-user-avatar\\n #user2\\n [size]=\\\"48\\\"\\n [userId]=\\\"reply.author.id\\\"\\n ngProjectAs=\\\"'ax-avatar'\\\"\\n ></axp-user-avatar>\\n <ax-title>{{ user2.firstName() + ' ' + user2.lastName() }}</ax-title>\\n <ax-comment-date>{{ reply.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\\n <ax-comment-menu-options>\\n <ax-button class=\\\"ax-sm\\\" look=\\\"blank\\\" color=\\\"neutral\\\">\\n <ax-icon icon=\\\"ax-icon ax-icon-solid ax-icon-more-horizontal\\\"></ax-icon>\\n </ax-button>\\n\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n <ax-button-item\\n text=\\\"Edit\\\"\\n color=\\\"neutral\\\"\\n (click)=\\\"editMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\\\"\\n >\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-edit\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n <ax-button-item text=\\\"Delete\\\" color=\\\"danger\\\" (click)=\\\"deleteComment(reply.id!)\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-trash-can\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-comment-menu-options>\\n <ax-content [innerHTML]=\\\"sanitizeHtml(reply.message.content)\\\"></ax-content>\\n <ax-comment-like (click)=\\\"toggleLike(reply)\\\" [like]=\\\"isLikedByUser(reply)\\\">\\n {{ getReactionsCount(reply) }}\\n </ax-comment-like>\\n <ax-comment-reply-text\\n (click)=\\\"replyMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\\\"\\n ></ax-comment-reply-text>\\n </ax-comment-item>\\n }\\n </ax-comment-item>\\n }\\n </ax-comment-view>\\n } @else {\\n <div>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-4 ax-justify-center ax-items-center ax-p-10\\\">\\n <svg\\n class=\\\"ax-mx-auto\\\"\\n xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n width=\\\"154\\\"\\n height=\\\"161\\\"\\n viewBox=\\\"0 0 154 161\\\"\\n fill=\\\"none\\\"\\n >\\n <path\\n d=\\\"M0.0616455 84.4268C0.0616455 42.0213 34.435 7.83765 76.6507 7.83765C118.803 7.83765 153.224 42.0055 153.224 84.4268C153.224 102.42 147.026 118.974 136.622 132.034C122.282 150.138 100.367 161 76.6507 161C52.7759 161 30.9882 150.059 16.6633 132.034C6.25961 118.974 0.0616455 102.42 0.0616455 84.4268Z\\\"\\n fill=\\\"#EEF2FF\\\"\\n />\\n <path\\n d=\\\"M96.8189 0.632498L96.8189 0.632384L96.8083 0.630954C96.2034 0.549581 95.5931 0.5 94.9787 0.5H29.338C22.7112 0.5 17.3394 5.84455 17.3394 12.4473V142.715C17.3394 149.318 22.7112 154.662 29.338 154.662H123.948C130.591 154.662 135.946 149.317 135.946 142.715V38.9309C135.946 38.0244 135.847 37.1334 135.648 36.2586L135.648 36.2584C135.117 33.9309 133.874 31.7686 132.066 30.1333C132.066 30.1331 132.065 30.1329 132.065 30.1327L103.068 3.65203C103.068 3.6519 103.067 3.65177 103.067 3.65164C101.311 2.03526 99.1396 0.995552 96.8189 0.632498Z\\\"\\n fill=\\\"white\\\"\\n stroke=\\\"#E5E7EB\\\"\\n />\\n <ellipse cx=\\\"80.0618\\\" cy=\\\"81\\\" rx=\\\"28.0342\\\" ry=\\\"28.0342\\\" fill=\\\"#EEF2FF\\\" />\\n <path\\n d=\\\"M99.2393 61.3061L99.2391 61.3058C88.498 50.5808 71.1092 50.5804 60.3835 61.3061C49.6423 72.0316 49.6422 89.4361 60.3832 100.162C71.109 110.903 88.4982 110.903 99.2393 100.162C109.965 89.4363 109.965 72.0317 99.2393 61.3061ZM105.863 54.6832C120.249 69.0695 120.249 92.3985 105.863 106.785C91.4605 121.171 68.1468 121.171 53.7446 106.785C39.3582 92.3987 39.3582 69.0693 53.7446 54.683C68.1468 40.2965 91.4605 40.2966 105.863 54.6832Z\\\"\\n stroke=\\\"#E5E7EB\\\"\\n />\\n <path\\n d=\\\"M110.782 119.267L102.016 110.492C104.888 108.267 107.476 105.651 109.564 102.955L118.329 111.729L110.782 119.267Z\\\"\\n stroke=\\\"#E5E7EB\\\"\\n />\\n <path\\n d=\\\"M139.122 125.781L139.122 125.78L123.313 109.988C123.313 109.987 123.313 109.987 123.312 109.986C121.996 108.653 119.849 108.657 118.521 109.985L118.871 110.335L118.521 109.985L109.047 119.459C107.731 120.775 107.735 122.918 109.044 124.247L109.047 124.249L124.858 140.06C128.789 143.992 135.191 143.992 139.122 140.06C143.069 136.113 143.069 129.728 139.122 125.781Z\\\"\\n fill=\\\"#A5B4FC\\\"\\n stroke=\\\"#818CF8\\\"\\n />\\n <path\\n d=\\\"M83.185 87.2285C82.5387 87.2285 82.0027 86.6926 82.0027 86.0305C82.0027 83.3821 77.9987 83.3821 77.9987 86.0305C77.9987 86.6926 77.4627 87.2285 76.8006 87.2285C76.1543 87.2285 75.6183 86.6926 75.6183 86.0305C75.6183 80.2294 84.3831 80.2451 84.3831 86.0305C84.3831 86.6926 83.8471 87.2285 83.185 87.2285Z\\\"\\n fill=\\\"#4F46E5\\\"\\n />\\n <path\\n d=\\\"M93.3528 77.0926H88.403C87.7409 77.0926 87.2049 76.5567 87.2049 75.8946C87.2049 75.2483 87.7409 74.7123 88.403 74.7123H93.3528C94.0149 74.7123 94.5509 75.2483 94.5509 75.8946C94.5509 76.5567 94.0149 77.0926 93.3528 77.0926Z\\\"\\n fill=\\\"#4F46E5\\\"\\n />\\n <path\\n d=\\\"M71.5987 77.0925H66.6488C65.9867 77.0925 65.4507 76.5565 65.4507 75.8945C65.4507 75.2481 65.9867 74.7122 66.6488 74.7122H71.5987C72.245 74.7122 72.781 75.2481 72.781 75.8945C72.781 76.5565 72.245 77.0925 71.5987 77.0925Z\\\"\\n fill=\\\"#4F46E5\\\"\\n />\\n <rect x=\\\"38.3522\\\" y=\\\"21.5128\\\" width=\\\"41.0256\\\" height=\\\"2.73504\\\" rx=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <rect x=\\\"38.3522\\\" y=\\\"133.65\\\" width=\\\"54.7009\\\" height=\\\"5.47009\\\" rx=\\\"2.73504\\\" fill=\\\"#A5B4FC\\\" />\\n <rect x=\\\"38.3522\\\" y=\\\"29.7179\\\" width=\\\"13.6752\\\" height=\\\"2.73504\\\" rx=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <circle cx=\\\"56.13\\\" cy=\\\"31.0854\\\" r=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <circle cx=\\\"61.6001\\\" cy=\\\"31.0854\\\" r=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <circle cx=\\\"67.0702\\\" cy=\\\"31.0854\\\" r=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n </svg>\\n <div>\\n <h2 class=\\\"ax-text-center ax-text-neutral-600 ax-font-semibold ax-leading-loose ax-pb-2\\\">\\n There is no Comment!\\n </h2>\\n </div>\\n </div>\\n </div>\\n }\\n </ax-comment-container>\\n <div>\\n @if (isReplyingMode() || isEditingMode()) {\\n <div\\n class=\\\"ax-flex ax-justify-between ax-rounded-b-none ax-border ax-border-b-0 ax-rounded-lg ax-px-6 ax-py-3 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\\\"\\n >\\n <div (click)=\\\"scrollMain()\\\" class=\\\"ax-flex ax-justify-start ax-items-center ax-cursor-pointer\\\">\\n <i\\n [class]=\\\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\\\"\\n class=\\\"fa-solid ax-text-primary-500 dark:ax-text-primary-300 ax-text-2xl ax-me-4\\\"\\n ></i>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle ax-leading-4 ax-overflow-hidden\\\">\\n <p class=\\\"ax-text-primary-500 dark:ax-text-primary-300\\\">\\n {{ isReplyingMode() ? 'Reply to ' : 'Edit Message' }}\\n <span class=\\\"ax-font-bold\\\">\\n {{ isReplyingMode() ? activeReplyComment()?.userName : '' }}\\n </span>\\n </p>\\n <div\\n class=\\\"ax-truncate\\\"\\n [innerHTML]=\\\"\\n isReplyingMode()\\n ? sanitizeHtml(activeReplyComment()?.message?.content ?? '')\\n : sanitizeHtml(activeEditComment()?.message?.content ?? '')\\n \\\"\\n ></div>\\n </div>\\n </div>\\n <div><i (click)=\\\"resetReplyEditState()\\\" class=\\\"fa-solid ax-text-2xl fa-xmark ax-cursor-pointer\\\"></i></div>\\n </div>\\n }\\n <ax-wysiwyg-container #w [look]=\\\"wysiwygOptions().look\\\" [(ngModel)]=\\\"commentContent\\\">\\n <ax-wysiwyg-view class=\\\"ax-min-h-28\\\"></ax-wysiwyg-view>\\n <ax-wysiwyg-toolbar>\\n <ax-prefix>\\n <ax-wysiwyg-history></ax-wysiwyg-history>\\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\\n <ax-wysiwyg-list></ax-wysiwyg-list>\\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\\n </ax-prefix>\\n <ax-suffix>\\n <ax-dropdown-button\\n [disabled]=\\\"hasCooldown() || !this.commentContent()\\\"\\n type=\\\"submit\\\"\\n color=\\\"primary\\\"\\n mode=\\\"split\\\"\\n text=\\\"Send\\\"\\n (onClick)=\\\"submitComment()\\\"\\n >\\n @if (isSubmitting()) {\\n <ax-loading></ax-loading>\\n }\\n <!-- <ax-button-item-list>\\n <ax-button-item (click)=\\\"submitComment()\\\" text=\\\"Send Private ...\\\" name=\\\"private\\\" data=\\\"private\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-regular fa-user-secret\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n </ax-button-item-list> -->\\n </ax-dropdown-button>\\n </ax-suffix>\\n </ax-wysiwyg-toolbar>\\n </ax-wysiwyg-container>\\n </div>\\n</div>\\n\", styles: [\":host{display:block;width:100%;height:100%}ax-wysiwyg-container .ax-editor-container{border-top-left-radius:0!important;border-top-right-radius:0!important}ax-wysiwyg-container .ax-error-message{padding-left:.5rem}ax-wysiwyg-container .highlighted{background:var(--ax-color-primary-050)!important;border-radius:.25rem;transition:background 1s ease-in-out}\\n\"], dependencies: [{ kind: \"ngmodule\", type: AXWysiwygModule }, { kind: \"component\", type: i1.AXWysiwygContainerComponent, selector: \"ax-wysiwyg-container\", inputs: [\"look\", \"readonly\", \"disabled\", \"placeHolder\"], outputs: [\"onValueChanged\"] }, { kind: \"component\", type: i1.AXWysiwygViewComponent, selector: \"ax-wysiwyg-view\" }, { kind: \"component\", type: i1.AXWysiwygAlignmentComponent, selector: \"ax-wysiwyg-alignment\" }, { kind: \"component\", type: i1.AXWysiwygColorsComponent, selector: \"ax-wysiwyg-colors\" }, { kind: \"component\", type: i1.AXWysiwygFontStyleComponent, selector: \"ax-wysiwyg-font-style\" }, { kind: \"component\", type: i1.AXWysiwygHistoryComponent, selector: \"ax-wysiwyg-history\" }, { kind: \"component\", type: i1.AXWysiwygListComponent, selector: \"ax-wysiwyg-list\" }, { kind: \"component\", type: i1.AXWysiwygToolbarComponent, selector: \"ax-wysiwyg-toolbar\" }, { kind: \"ngmodule\", type: AXConversationModule }, { kind: \"ngmodule\", type: AXSkeletonModule }, { kind: \"component\", type: i2.AXSkeletonComponent, selector: \"ax-skeleton\", inputs: [\"animated\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i3.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i3.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXCommentModule }, { kind: \"component\", type: i4.AXCommentViewComponent, selector: \"ax-comment-view\" }, { kind: \"component\", type: i4.AXCommentContainerComponent, selector: \"ax-comment-container\" }, { kind: \"component\", type: i4.AXCommentItemComponent, selector: \"ax-comment-item\", inputs: [\"replyCount\"] }, { kind: \"component\", type: i4.AXCommentLikeComponent, selector: \"ax-comment-like\", inputs: [\"like\"], outputs: [\"likeChange\"] }, { kind: \"component\", type: i4.AXMenuOptionsComponent, selector: \"ax-comment-menu-options\" }, { kind: \"component\", type: i4.AXCommentReplyTextComponent, selector: \"ax-comment-reply-text\" }, { kind: \"component\", type: i4.AXCommentDateComponent, selector: \"ax-comment-date\" }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i5.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"component\", type: i5.AXButtonItemComponent, selector: \"ax-button-item\", inputs: [\"color\", \"disabled\", \"text\", \"selected\", \"divided\", \"data\", \"name\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\", \"disabledChange\"] }, { kind: \"component\", type: i5.AXButtonItemListComponent, selector: \"ax-button-item-list\", inputs: [\"items\"], outputs: [\"onItemClick\"] }, { kind: \"ngmodule\", type: AXAvatarModule }, { kind: \"ngmodule\", type: AXImageModule }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"component\", type: i6.AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"component\", type: i7.AXDropdownPanelComponent, selector: \"ax-dropdown-panel\", inputs: [\"isOpen\", \"fitParent\", \"dropdownWidth\", \"position\", \"placement\", \"_target\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"ngmodule\", type: AXFormatModule }, { kind: \"ngmodule\", type: AXFormModule }, { kind: \"ngmodule\", type: AXToolBarModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i8.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i8.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: AXDropdownButtonModule }, { kind: \"component\", type: i9.AXDropdownButtonComponent, selector: \"ax-dropdown-button\", inputs: [\"disabled\", \"size\", \"color\", \"look\", \"text\", \"type\", \"mode\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"lookChange\", \"colorChange\", \"disabledChange\"] }, { kind: \"component\", type: AXPUserAvatarComponent, selector: \"axp-user-avatar\", inputs: [\"size\", \"userId\"] }, { kind: \"pipe\", type: i10.AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }], animations: [\n trigger('fadeIn', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(10px)' }),\n animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n ]),\n ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-comment', animations: [\n trigger('fadeIn', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(10px)' }),\n animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n ]),\n ], imports: [\n AXWysiwygModule,\n AXConversationModule,\n AXSkeletonModule,\n AXDecoratorModule,\n AXCommentModule,\n AXButtonModule,\n AXAvatarModule,\n AXImageModule,\n AXLoadingModule,\n AXDropdownModule,\n AXFormatModule,\n AsyncPipe,\n AXFormModule,\n AXToolBarModule,\n FormsModule,\n AXDropdownButtonModule,\n AXPUserAvatarComponent,\n ], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"ax-size-full ax-flex ax-flex-col ax-justify-between ax-p-4 ax-overflow-hidden\\\">\\n <ax-comment-container class=\\\"ax-overflow-auto\\\">\\n @if (isLoading()) {\\n <div class=\\\"ax-flex ax-items-center ax-py-12 ax-bg-lightest ax-px-5\\\">\\n <ax-skeleton class=\\\"ax-min-w-16 ax-h-16 ax-rounded-full ax-me-4\\\"></ax-skeleton>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 ax-w-full\\\">\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-2 ax-rounded-full\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-2 ax-rounded-full\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-8/12 ax-h-2 ax-rounded-full\\\"></ax-skeleton>\\n </div>\\n </div>\\n } @else if (!isLoading() && comments().length > 0) {\\n <ax-comment-view class=\\\"ax-bg-lightest\\\">\\n @for (comment of comments(); track comment.id) {\\n <ax-comment-item\\n [id]=\\\"comment.id!\\\"\\n [replyCount]=\\\"comment.replyCount\\\"\\n [class.highlighted]=\\\"highlightedCommentId() === comment.id\\\"\\n [@fadeIn]\\n >\\n <axp-user-avatar #user [size]=\\\"48\\\" [userId]=\\\"comment.author.id\\\" ngProjectAs=\\\"'ax-avatar'\\\"></axp-user-avatar>\\n <ax-title>{{ user.firstName() + ' ' + user.lastName() }}</ax-title>\\n <ax-comment-date>{{ comment.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\\n <ax-comment-menu-options>\\n <ax-button class=\\\"ax-sm\\\" look=\\\"blank\\\" color=\\\"neutral\\\">\\n <ax-icon icon=\\\"ax-icon ax-icon-solid ax-icon-more-horizontal\\\"></ax-icon>\\n </ax-button>\\n\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n <ax-button-item\\n text=\\\"Edit\\\"\\n color=\\\"neutral\\\"\\n (click)=\\\"editMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\\\"\\n >\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-edit\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n\\n <ax-button-item text=\\\"Delete\\\" color=\\\"danger\\\" (click)=\\\"deleteComment(comment.id!)\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-trash-can\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-comment-menu-options>\\n <ax-content [innerHTML]=\\\"sanitizeHtml(comment.message.content)\\\"></ax-content>\\n <ax-comment-like (click)=\\\"toggleLike(comment)\\\" [like]=\\\"isLikedByUser(comment)\\\">\\n {{ getReactionsCount(comment) }}\\n </ax-comment-like>\\n <ax-comment-reply-text\\n (click)=\\\"replyMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\\\"\\n ></ax-comment-reply-text>\\n @for (reply of comment.replies; track reply.id) {\\n <ax-comment-item [id]=\\\"reply.id\\\" [class.highlighted]=\\\"highlightedCommentId() === reply.id\\\" [@fadeIn]>\\n <axp-user-avatar\\n #user2\\n [size]=\\\"48\\\"\\n [userId]=\\\"reply.author.id\\\"\\n ngProjectAs=\\\"'ax-avatar'\\\"\\n ></axp-user-avatar>\\n <ax-title>{{ user2.firstName() + ' ' + user2.lastName() }}</ax-title>\\n <ax-comment-date>{{ reply.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\\n <ax-comment-menu-options>\\n <ax-button class=\\\"ax-sm\\\" look=\\\"blank\\\" color=\\\"neutral\\\">\\n <ax-icon icon=\\\"ax-icon ax-icon-solid ax-icon-more-horizontal\\\"></ax-icon>\\n </ax-button>\\n\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n <ax-button-item\\n text=\\\"Edit\\\"\\n color=\\\"neutral\\\"\\n (click)=\\\"editMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\\\"\\n >\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-edit\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n <ax-button-item text=\\\"Delete\\\" color=\\\"danger\\\" (click)=\\\"deleteComment(reply.id!)\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-trash-can\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-comment-menu-options>\\n <ax-content [innerHTML]=\\\"sanitizeHtml(reply.message.content)\\\"></ax-content>\\n <ax-comment-like (click)=\\\"toggleLike(reply)\\\" [like]=\\\"isLikedByUser(reply)\\\">\\n {{ getReactionsCount(reply) }}\\n </ax-comment-like>\\n <ax-comment-reply-text\\n (click)=\\\"replyMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\\\"\\n ></ax-comment-reply-text>\\n </ax-comment-item>\\n }\\n </ax-comment-item>\\n }\\n </ax-comment-view>\\n } @else {\\n <div>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-4 ax-justify-center ax-items-center ax-p-10\\\">\\n <svg\\n class=\\\"ax-mx-auto\\\"\\n xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n width=\\\"154\\\"\\n height=\\\"161\\\"\\n viewBox=\\\"0 0 154 161\\\"\\n fill=\\\"none\\\"\\n >\\n <path\\n d=\\\"M0.0616455 84.4268C0.0616455 42.0213 34.435 7.83765 76.6507 7.83765C118.803 7.83765 153.224 42.0055 153.224 84.4268C153.224 102.42 147.026 118.974 136.622 132.034C122.282 150.138 100.367 161 76.6507 161C52.7759 161 30.9882 150.059 16.6633 132.034C6.25961 118.974 0.0616455 102.42 0.0616455 84.4268Z\\\"\\n fill=\\\"#EEF2FF\\\"\\n />\\n <path\\n d=\\\"M96.8189 0.632498L96.8189 0.632384L96.8083 0.630954C96.2034 0.549581 95.5931 0.5 94.9787 0.5H29.338C22.7112 0.5 17.3394 5.84455 17.3394 12.4473V142.715C17.3394 149.318 22.7112 154.662 29.338 154.662H123.948C130.591 154.662 135.946 149.317 135.946 142.715V38.9309C135.946 38.0244 135.847 37.1334 135.648 36.2586L135.648 36.2584C135.117 33.9309 133.874 31.7686 132.066 30.1333C132.066 30.1331 132.065 30.1329 132.065 30.1327L103.068 3.65203C103.068 3.6519 103.067 3.65177 103.067 3.65164C101.311 2.03526 99.1396 0.995552 96.8189 0.632498Z\\\"\\n fill=\\\"white\\\"\\n stroke=\\\"#E5E7EB\\\"\\n />\\n <ellipse cx=\\\"80.0618\\\" cy=\\\"81\\\" rx=\\\"28.0342\\\" ry=\\\"28.0342\\\" fill=\\\"#EEF2FF\\\" />\\n <path\\n d=\\\"M99.2393 61.3061L99.2391 61.3058C88.498 50.5808 71.1092 50.5804 60.3835 61.3061C49.6423 72.0316 49.6422 89.4361 60.3832 100.162C71.109 110.903 88.4982 110.903 99.2393 100.162C109.965 89.4363 109.965 72.0317 99.2393 61.3061ZM105.863 54.6832C120.249 69.0695 120.249 92.3985 105.863 106.785C91.4605 121.171 68.1468 121.171 53.7446 106.785C39.3582 92.3987 39.3582 69.0693 53.7446 54.683C68.1468 40.2965 91.4605 40.2966 105.863 54.6832Z\\\"\\n stroke=\\\"#E5E7EB\\\"\\n />\\n <path\\n d=\\\"M110.782 119.267L102.016 110.492C104.888 108.267 107.476 105.651 109.564 102.955L118.329 111.729L110.782 119.267Z\\\"\\n stroke=\\\"#E5E7EB\\\"\\n />\\n <path\\n d=\\\"M139.122 125.781L139.122 125.78L123.313 109.988C123.313 109.987 123.313 109.987 123.312 109.986C121.996 108.653 119.849 108.657 118.521 109.985L118.871 110.335L118.521 109.985L109.047 119.459C107.731 120.775 107.735 122.918 109.044 124.247L109.047 124.249L124.858 140.06C128.789 143.992 135.191 143.992 139.122 140.06C143.069 136.113 143.069 129.728 139.122 125.781Z\\\"\\n fill=\\\"#A5B4FC\\\"\\n stroke=\\\"#818CF8\\\"\\n />\\n <path\\n d=\\\"M83.185 87.2285C82.5387 87.2285 82.0027 86.6926 82.0027 86.0305C82.0027 83.3821 77.9987 83.3821 77.9987 86.0305C77.9987 86.6926 77.4627 87.2285 76.8006 87.2285C76.1543 87.2285 75.6183 86.6926 75.6183 86.0305C75.6183 80.2294 84.3831 80.2451 84.3831 86.0305C84.3831 86.6926 83.8471 87.2285 83.185 87.2285Z\\\"\\n fill=\\\"#4F46E5\\\"\\n />\\n <path\\n d=\\\"M93.3528 77.0926H88.403C87.7409 77.0926 87.2049 76.5567 87.2049 75.8946C87.2049 75.2483 87.7409 74.7123 88.403 74.7123H93.3528C94.0149 74.7123 94.5509 75.2483 94.5509 75.8946C94.5509 76.5567 94.0149 77.0926 93.3528 77.0926Z\\\"\\n fill=\\\"#4F46E5\\\"\\n />\\n <path\\n d=\\\"M71.5987 77.0925H66.6488C65.9867 77.0925 65.4507 76.5565 65.4507 75.8945C65.4507 75.2481 65.9867 74.7122 66.6488 74.7122H71.5987C72.245 74.7122 72.781 75.2481 72.781 75.8945C72.781 76.5565 72.245 77.0925 71.5987 77.0925Z\\\"\\n fill=\\\"#4F46E5\\\"\\n />\\n <rect x=\\\"38.3522\\\" y=\\\"21.5128\\\" width=\\\"41.0256\\\" height=\\\"2.73504\\\" rx=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <rect x=\\\"38.3522\\\" y=\\\"133.65\\\" width=\\\"54.7009\\\" height=\\\"5.47009\\\" rx=\\\"2.73504\\\" fill=\\\"#A5B4FC\\\" />\\n <rect x=\\\"38.3522\\\" y=\\\"29.7179\\\" width=\\\"13.6752\\\" height=\\\"2.73504\\\" rx=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <circle cx=\\\"56.13\\\" cy=\\\"31.0854\\\" r=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <circle cx=\\\"61.6001\\\" cy=\\\"31.0854\\\" r=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <circle cx=\\\"67.0702\\\" cy=\\\"31.0854\\\" r=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n </svg>\\n <div>\\n <h2 class=\\\"ax-text-center ax-text-neutral-600 ax-font-semibold ax-leading-loose ax-pb-2\\\">\\n There is no Comment!\\n </h2>\\n </div>\\n </div>\\n </div>\\n }\\n </ax-comment-container>\\n <div>\\n @if (isReplyingMode() || isEditingMode()) {\\n <div\\n class=\\\"ax-flex ax-justify-between ax-rounded-b-none ax-border ax-border-b-0 ax-rounded-lg ax-px-6 ax-py-3 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\\\"\\n >\\n <div (click)=\\\"scrollMain()\\\" class=\\\"ax-flex ax-justify-start ax-items-center ax-cursor-pointer\\\">\\n <i\\n [class]=\\\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\\\"\\n class=\\\"fa-solid ax-text-primary-500 dark:ax-text-primary-300 ax-text-2xl ax-me-4\\\"\\n ></i>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle ax-leading-4 ax-overflow-hidden\\\">\\n <p class=\\\"ax-text-primary-500 dark:ax-text-primary-300\\\">\\n {{ isReplyingMode() ? 'Reply to ' : 'Edit Message' }}\\n <span class=\\\"ax-font-bold\\\">\\n {{ isReplyingMode() ? activeReplyComment()?.userName : '' }}\\n </span>\\n </p>\\n <div\\n class=\\\"ax-truncate\\\"\\n [innerHTML]=\\\"\\n isReplyingMode()\\n ? sanitizeHtml(activeReplyComment()?.message?.content ?? '')\\n : sanitizeHtml(activeEditComment()?.message?.content ?? '')\\n \\\"\\n ></div>\\n </div>\\n </div>\\n <div><i (click)=\\\"resetReplyEditState()\\\" class=\\\"fa-solid ax-text-2xl fa-xmark ax-cursor-pointer\\\"></i></div>\\n </div>\\n }\\n <ax-wysiwyg-container #w [look]=\\\"wysiwygOptions().look\\\" [(ngModel)]=\\\"commentContent\\\">\\n <ax-wysiwyg-view class=\\\"ax-min-h-28\\\"></ax-wysiwyg-view>\\n <ax-wysiwyg-toolbar>\\n <ax-prefix>\\n <ax-wysiwyg-history></ax-wysiwyg-history>\\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\\n <ax-wysiwyg-list></ax-wysiwyg-list>\\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\\n </ax-prefix>\\n <ax-suffix>\\n <ax-dropdown-button\\n [disabled]=\\\"hasCooldown() || !this.commentContent()\\\"\\n type=\\\"submit\\\"\\n color=\\\"primary\\\"\\n mode=\\\"split\\\"\\n text=\\\"Send\\\"\\n (onClick)=\\\"submitComment()\\\"\\n >\\n @if (isSubmitting()) {\\n <ax-loading></ax-loading>\\n }\\n <!-- <ax-button-item-list>\\n <ax-button-item (click)=\\\"submitComment()\\\" text=\\\"Send Private ...\\\" name=\\\"private\\\" data=\\\"private\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-regular fa-user-secret\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n </ax-button-item-list> -->\\n </ax-dropdown-button>\\n </ax-suffix>\\n </ax-wysiwyg-toolbar>\\n </ax-wysiwyg-container>\\n </div>\\n</div>\\n\", styles: [\":host{display:block;width:100%;height:100%}ax-wysiwyg-container .ax-editor-container{border-top-left-radius:0!important;border-top-right-radius:0!important}ax-wysiwyg-container .ax-error-message{padding-left:.5rem}ax-wysiwyg-container .highlighted{background:var(--ax-color-primary-050)!important;border-radius:.25rem;transition:background 1s ease-in-out}\\n\"] }]\n }], propDecorators: { refrenceType: [{ type: i0.Input, args: [{ isSignal: true, alias: \"refrenceType\", required: true }] }], refrenceId: [{ type: i0.Input, args: [{ isSignal: true, alias: \"refrenceId\", required: true }] }], subject: [{ type: i0.Input, args: [{ isSignal: true, alias: \"subject\", required: true }] }], wysiwygEditor: [{ type: i0.ViewChild, args: ['w', { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY29tbWVudC9jb21tZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jb21tZW50L2NvbW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUErQixlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIs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O3dCQUNQLGVBQWU7d0JBQ2Ysb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxTQUFTO3dCQUNULFlBQVk7d0JBQ1osZUFBZTt3QkFDZixXQUFXO3dCQUNYLHNCQUFzQjt3QkFDdEIsc0JBQXNCO3FCQUN2QixtQkFzQmdCLHVCQUF1QixDQUFDLE1BQU07a1hBdUIyQixHQUFHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhXeXNpd3lnQ29udGFpbmVyQ29tcG9uZW50LCBBWFd5c2l3eWdNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvd3lzaXd5Zyc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBEZXN0cm95UmVmLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQVhTdHlsZUxvb2tUeXBlIH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRGlhbG9nU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kaWFsb2cnO1xuaW1wb3J0IHsgQVhUb2FzdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9hc3QnO1xuaW1wb3J0IHsgQVhQVXNlclJlZmVyZW5jZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBWE1Db21tZW50LCBBWE1Db21tZW50VGhyZWFkIH0gZnJvbSAnLi9jb21tZW50LnR5cGUnO1xuXG5pbXBvcnQgeyBBWEF2YXRhck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9hdmF0YXInO1xuaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYQ29tbWVudE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tZW50JztcbmltcG9ydCB7IEFYQ29udmVyc2F0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbnZlcnNhdGlvbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgQVhEcm9wZG93bkJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kcm9wZG93bi1idXR0b24nO1xuaW1wb3J0IHsgQVhGb3JtTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IHsgQVhJbWFnZU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9pbWFnZSc7XG5pbXBvcnQgeyBBWExvYWRpbmdNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZyc7XG5pbXBvcnQgeyBBWFNrZWxldG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3NrZWxldG9uJztcbmltcG9ydCB7IEFYVG9vbEJhck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sYmFyJztcbmltcG9ydCB7IEFYRm9ybWF0TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWE1Ob3RpZmljYXRpb25Db25uZWN0b3JTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50JztcbmltcG9ydCB7IEFYUFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUFVzZXJBdmF0YXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWE1Db21tZW50TWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tICcuL2NvbW1lbnQtbWFuYWdlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbnZlcnRDb21tZW50VG9Ob3RpZmljYXRpb24gfSBmcm9tICcuL2NvbW1lbnQtbm90aWZpY2F0aW9uLmhlbHBlcic7XG5pbXBvcnQgeyBBWE1Db21tZW50UmVhbHRpbWVTZXJ2aWNlIH0gZnJvbSAnLi9jb21tZW50LXJlYWx0aW1lLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbW1lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzZWxlY3RvcjogJ2F4bS1jb21tZW50JyxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2ZhZGVJbicsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwcHgpJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH0pKSxcbiAgICAgIF0pLFxuICAgIF0pLFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQVhXeXNpd3lnTW9kdWxlLFxuICAgIEFYQ29udmVyc2F0aW9uTW9kdWxlLFxuICAgIEFYU2tlbGV0b25Nb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhDb21tZW50TW9kdWxlLFxuICAgIEFYQnV0dG9uTW9kdWxlLFxuICAgIEFYQXZhdGFyTW9kdWxlLFxuICAgIEFYSW1hZ2VNb2R1bGUsXG4gICAgQVhMb2FkaW5nTW9kdWxlLFxuICAgIEFYRHJvcGRvd25Nb2R1bGUsXG4gICAgQVhGb3JtYXRNb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYRm9ybU1vZHVsZSxcbiAgICBBWFRvb2xCYXJNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQVhEcm9wZG93bkJ1dHRvbk1vZHVsZSxcbiAgICBBWFBVc2VyQXZhdGFyQ29tcG9uZW50LFxuICBdLFxuICBzdHlsZXM6IGBcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cbiAgICBheC13eXNpd3lnLWNvbnRhaW5lciB7XG4gICAgICAuYXgtZWRpdG9yLWNvbnRhaW5lciB7XG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICAgIC5heC1lcnJvci1tZXNzYWdlIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gICAgICB9XG4gICAgICAuaGlnaGxpZ2h0ZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1heC1jb2xvci1wcmltYXJ5LTA1MCkgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxcyBlYXNlLWluLW91dDtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1Db21tZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcmVmcmVuY2VUeXBlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWZyZW5jZUlkID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICBzdWJqZWN0ID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuXG4gIG1vZHVsZU5hbWUgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBlbnRpdHlOYW1lID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcm90ZWN0ZWQgaGFzQ29vbGRvd24gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgY29tbWVudENvbnRlbnQgPSBzaWduYWw8c3RyaW5nPignJyk7XG5cbiAgcHJvdGVjdGVkIGlzU3VibWl0dGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBpc1JlcGx5aW5nTW9kZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBpc0VkaXRpbmdNb2RlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGlzTG9hZGluZyA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcblxuICBwcm90ZWN0ZWQgZmFpbGVkSW1hZ2VJZHMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcbiAgcHJvdGVjdGVkIGFjdGl2ZVJlcGx5Q29tbWVudCA9IHNpZ25hbDx1bmRlZmluZWQgfCAoQVhNQ29tbWVudCAmIHsgdXNlck5hbWU6IHN0cmluZyB9KT4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGFjdGl2ZUVkaXRDb21tZW50ID0gc2lnbmFsPHVuZGVmaW5lZCB8IChBWE1Db21tZW50ICYgeyB1c2VyTmFtZTogc3RyaW5nIH0pPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgaGlnaGxpZ2h0ZWRDb21tZW50SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJvdGVjdGVkIHd5c2l3eWdFZGl0b3IgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8QVhXeXNpd3lnQ29udGFpbmVyQ29tcG9uZW50PigndycpO1xuXG4gIHByaXZhdGUgY29tbWVudFNlcnZpY2UgPSBpbmplY3QoQVhNQ29tbWVudE1hbmFnZW1lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFsdGltZVNlcnZpY2UgPSBpbmplY3QoQVhNQ29tbWVudFJlYWx0aW1lU2VydmljZSk7XG4gIHByaXZhdGUgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0U2VydmljZSA9IGluamVjdChBWFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZGlhbG9nU2VydmljZSA9IGluamVjdChBWERpYWxvZ1NlcnZpY2UpO1xuICBwcml2YXRlIG5vdGlmaWNhdGlvbkNvbm5lY3RvclNlcnZpY2UgPSBpbmplY3QoQVhNTm90aWZpY2F0aW9uQ29ubmVjdG9yU2VydmljZSk7XG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgYWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuXG4gIHNhbml0aXplID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBwcm90ZWN0ZWQgY29tbWVudHMgPSBzaWduYWw8QVhNQ29tbWVudFtdPihbXSk7XG4gIHByb3RlY3RlZCB0aHJlYWQgPSBzaWduYWw8QVhNQ29tbWVudFRocmVhZCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5tb2R1bGVOYW1lLnNldCh0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtc1snbW9kdWxlJ10gfHwgbnVsbCk7XG4gICAgdGhpcy5lbnRpdHlOYW1lLnNldCh0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtc1snZW50aXR5J10gfHwgbnVsbCk7XG4gICAgdGhpcy5sb2FkQ29tbWVudHMoKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgfSwgMjUwKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLmNvbW1lbnQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+ICEhZXZlbnQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnYWRkJzpcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWRkQ29tbWVudChldmVudC5wYXlsb2FkIGFzIEFYTUNvbW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVXBkYXRlQ29tbWVudChldmVudC5wYXlsb2FkIGFzIEFYTUNvbW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVtb3ZlJzpcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVzc2FnZUJ5SWQoZXZlbnQucGF5bG9hZCBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBZGRDb21tZW50KGNvbW1lbnQ6IEFYTUNvbW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoY29tbWVudC5hdXRob3IuaWQgIT09IHRoaXMuZ2V0Q3VycmVudFVzZXIoKT8uaWQpIHtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGNvbnZlcnRDb21tZW50VG9Ob3RpZmljYXRpb24oXG4gICAgICAgIHRoaXMudGhyZWFkKCkhLFxuICAgICAgICBjb21tZW50LFxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXIgYXMgdW5rbm93biBhcyBBWFBVc2VyUmVmZXJlbmNlLFxuICAgICAgKTtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uQ29ubmVjdG9yU2VydmljZS5jcmVhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5ub3RpZmljYXRpb24sXG4gICAgICAgICAgaWQ6IGNvbW1lbnQuaWQsXG4gICAgICAgICAgZW50aXR5TmFtZTogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgIGNyZWF0ZUF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucmVmcmVuY2VUeXBlKCksICd0JywgdGhpcy5yZWZyZW5jZVR5cGUoKSwgJ2knLCB0aGlzLnJlZnJlbmNlSWQoKV0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYWN0aXZlV2luZG93OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvbW1lbnQucmVwbHlJZCkge1xuICAgICAgdGhpcy5jb21tZW50cy51cGRhdGUoKGNvbW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBjb21tZW50cy5tYXAoKGMpID0+IHtcbiAgICAgICAgICBpZiAoYy5pZCA9PT0gY29tbWVudC5yZXBseUlkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdSZXBsaWVzID0gYy5yZXBsaWVzID8gWy4uLmMucmVwbGllcywgY29tbWVudF0gOiBbY29tbWVudF07XG4gICAgICAgICAgICByZXR1cm4geyAuLi5jLCByZXBsaWVzOiBuZXdSZXBsaWVzLCByZXBseUNvdW50OiBuZXdSZXBsaWVzLmxlbmd0aCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb21tZW50cy51cGRhdGUoKGNvbW1lbnRzKSA9PiBbLi4uY29tbWVudHMsIGNvbW1lbnRdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVwZGF0ZUNvbW1lbnQodXBkYXRlZENvbW1lbnQ6IEFYTUNvbW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGUgPSAobGlzdDogQVhNQ29tbWVudFtdKTogQVhNQ29tbWVudFtdID0+IHtcbiAgICAgIHJldHVybiBsaXN0Lm1hcCgoYykgPT4ge1xuICAgICAgICBpZiAoYy5pZCA9PT0gdXBkYXRlZENvbW1lbnQuaWQpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5jLCAuLi51cGRhdGVkQ29tbWVudCwgcmVwbGllczogdXBkYXRlZENvbW1lbnQucmVwbGllcyB8fCBjLnJlcGxpZXMgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5yZXBsaWVzICYmIGMucmVwbGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uYywgcmVwbGllczogdXBkYXRlKGMucmVwbGllcykgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5jb21tZW50cy51cGRhdGUoKGNvbW1lbnRzKSA9PiB1cGRhdGUoY29tbWVudHMpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB3eXNpd3lnT3B0aW9ucyA9IHNpZ25hbDx7XG4gICAgbG9vazogQVhTdHlsZUxvb2tUeXBlO1xuICB9Pih7XG4gICAgbG9vazogJ3NvbGlkJyxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGF2YXRhckNvbmZpZyA9IHNpZ25hbDx7XG4gICAgY29sb3I6IHN0cmluZztcbiAgICBsb29rOiAnc2hhcnAnIHwgJ3NvZnQnIHwgJ3JvdW5kZWQnO1xuICAgIHR5cGU6IHN0cmluZztcbiAgfT4oe1xuICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgbG9vazogJ3JvdW5kZWQnLFxuICAgIHR5cGU6ICdzb2xpZCcsXG4gIH0pO1xuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFVzZXIoKTogQVhQVXNlclJlZmVyZW5jZSB8IG51bGwge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI7XG4gICAgcmV0dXJuIHVzZXIgPyB7IGlkOiB1c2VyLmlkLCB0eXBlOiAndXNlcicgfSA6IG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNMaWtlZEJ5VXNlcihjb21tZW50OiBBWE1Db21tZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBpZiAoIXVzZXIpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKGNvbW1lbnQucmVhY3Rpb25zIHx8IFtdKS5zb21lKChyKSA9PiByLmF1dGhvci5pZCA9PT0gdXNlci5pZCAmJiByLnR5cGUgPT09ICdsaWtlJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UmVhY3Rpb25zQ291bnQoY29tbWVudDogQVhNQ29tbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIChjb21tZW50LnJlYWN0aW9ucyB8fCBbXSkuZmlsdGVyKChyKSA9PiByLnR5cGUgPT09ICdsaWtlJykubGVuZ3RoO1xuICB9XG5cbiAgc2FuaXRpemVIdG1sKGh0bWxDb250ZW50OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWh0bWxDb250ZW50KSByZXR1cm4gdGhpcy5zYW5pdGl6ZS5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCgnJyk7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemUuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbENvbnRlbnQpO1xuICB9XG5cbiAgaGFuZGxlSW1hZ2VFcnJvcihpbWFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZhaWxlZEltYWdlSWRzLnVwZGF0ZSgoaWRzKSA9PiBbLi4uaWRzLCBpbWFnZUlkXSk7XG4gIH1cblxuICBjaGVja0ltYWdlRXhpc3RzKGltYWdlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5mYWlsZWRJbWFnZUlkcygpLmluY2x1ZGVzKGltYWdlSWQpO1xuICB9XG5cbiAgYXN5bmMgbG9hZENvbW1lbnRzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0aHJlYWQgPSBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLmdldFRocmVhZChcbiAgICAgICAge1xuICAgICAgICAgIGVudGl0eVR5cGVJZDogdGhpcy5yZWZyZW5jZVR5cGUoKSxcbiAgICAgICAgICBlbnRpdHlJZDogdGhpcy5yZWZyZW5jZUlkKCksXG4gICAgICAgICAgbW9kdWxlTmFtZTogdGhpcy5tb2R1bGVOYW1lKCksXG4gICAgICAgICAgZW50aXR5TmFtZTogdGhpcy5lbnRpdHlOYW1lKCksXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuc3ViamVjdCgpLFxuICAgICAgKTtcbiAgICAgIGlmICh0aHJlYWQpIHtcbiAgICAgICAgdGhpcy50aHJlYWQuc2V0KHRocmVhZCk7XG4gICAgICAgIHRoaXMuY29tbWVudHMuc2V0KHRocmVhZC5jb21tZW50cyB8fCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdUaHJlYWQgPSBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLmNyZWF0ZVRocmVhZChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRpdHlUeXBlSWQ6IHRoaXMucmVmcmVuY2VUeXBlKCksXG4gICAgICAgICAgICBlbnRpdHlJZDogdGhpcy5yZWZyZW5jZUlkKCksXG4gICAgICAgICAgICBtb2R1bGVOYW1lOiB0aGlzLm1vZHVsZU5hbWUoKSxcbiAgICAgICAgICAgIGVudGl0eU5hbWU6IHRoaXMuZW50aXR5TmFtZSgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zdWJqZWN0KCksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudGhyZWFkLnNldChuZXdUaHJlYWQpO1xuICAgICAgICB0aGlzLmNvbW1lbnRzLnNldChuZXdUaHJlYWQuY29tbWVudHMgfHwgW10pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBjb21tZW50czonLCBlcnJvcik7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHtcbiAgICAgICAgY29udGVudDogJ0ZhaWxlZCB0byBsb2FkIGNvbW1lbnRzLiBQbGVhc2UgdHJ5IGFnYWluLicsXG4gICAgICAgIGNvbG9yOiAnZGFuZ2VyJyxcbiAgICAgICAgbG9jYXRpb246ICdib3R0b20tY2VudGVyJyxcbiAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgIHRpbWVPdXQ6IDMwMDAsXG4gICAgICAgIHRpbWVPdXRQcm9ncmVzczogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb21tZW50cy5zZXQoW10pO1xuICAgIH1cbiAgfVxuXG4gIGVkaXRNZXNzYWdlKGNvbW1lbnQ6IEFYTUNvbW1lbnQsIHJlcGx5PzogQVhNQ29tbWVudCwgdXNlck5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzUmVwbHlpbmdNb2RlLnNldChmYWxzZSk7XG4gICAgdGhpcy5hY3RpdmVSZXBseUNvbW1lbnQuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5pc0VkaXRpbmdNb2RlLnNldCh0cnVlKTtcbiAgICB0aGlzLmFjdGl2ZUVkaXRDb21tZW50LnNldCh7IC4uLmNvbW1lbnQsIHVzZXJOYW1lOiB1c2VyTmFtZSB8fCAnJyB9KTtcbiAgICBjb25zdCBjb250ZW50VG9FZGl0ID0gcmVwbHkgPyByZXBseS5tZXNzYWdlPy5jb250ZW50IDogY29tbWVudC5tZXNzYWdlPy5jb250ZW50O1xuICAgIHRoaXMuY29tbWVudENvbnRlbnQuc2V0KGNvbnRlbnRUb0VkaXQgfHwgJycpO1xuICAgIHRoaXMud3lzaXd5Z0VkaXRvcigpLmdldEhvc3RFbGVtZW50KCkuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0pO1xuICB9XG5cbiAgcmVwbHlNZXNzYWdlKGNvbW1lbnQ6IEFYTUNvbW1lbnQsIHJlcGx5PzogQVhNQ29tbWVudCwgdXNlck5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzRWRpdGluZ01vZGUuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmFjdGl2ZUVkaXRDb21tZW50LnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuaXNSZXBseWluZ01vZGUuc2V0KHRydWUpO1xuICAgIHRoaXMuYWN0aXZlUmVwbHlDb21tZW50LnNldCh7IC4uLmNvbW1lbnQsIHVzZXJOYW1lOiB1c2VyTmFtZSB8fCAnJyB9KTtcbiAgICBpZiAocmVwbHkpIHtcbiAgICAgIGNvbnN0IGF1dGhvciA9IChyZXBseS5hdXRob3IgYXMgYW55KS5mdWxsTmFtZSB8fCByZXBseS5hdXRob3IuaWQ7XG4gICAgICBjb25zdCBtZW50aW9uID0gYDxzdHJvbmc+PGEgZGF0YS1pZD1cIiR7cmVwbHkuYXV0aG9yLnVzZXJuYW1lfVwiPkAke3VzZXJOYW1lIHx8IGF1dGhvcn08L2E+PC9zdHJvbmc+IGA7XG4gICAgICB0aGlzLmNvbW1lbnRDb250ZW50LnNldChtZW50aW9uKTtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3FsLWVkaXRvcicpWzBdLmlubmVySFRNTCA9IG1lbnRpb247XG4gICAgICB0aGlzLnd5c2l3eWdFZGl0b3IoKT8uZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy53eXNpd3lnRWRpdG9yKCkuZ2V0SG9zdEVsZW1lbnQoKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVDb21tZW50KGNvbW1lbnRJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oe1xuICAgICAgaWNvbjogJ2ZhLXJlZ3VsYXIgZmEtd2FybmluZycsXG4gICAgICBjb250ZW50OiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbW1lbnQ/JyxcbiAgICAgIHRpdGxlOiAnRGVsZXRlIENvbW1lbnQnLFxuICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgICBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnLFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJ0RlbGV0ZScsXG4gICAgICAgICAgY29sb3I6ICdkYW5nZXInLFxuICAgICAgICAgIG9uQ2xpY2s6IGFzeW5jIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGUuaGFuZGxlZCA9IHRydWU7XG4gICAgICAgICAgICBlLnNvdXJjZS50ZXh0ID0gJ0RlbGV0aW5nLi4uJztcbiAgICAgICAgICAgIGUuc291cmNlLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGUuc291cmNlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5kZWxldGVDb21tZW50KGNvbW1lbnRJZCk7XG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVzc2FnZUJ5SWQoY29tbWVudElkKTtcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICAgICAgICAgICAgY29udGVudDogJ0NvbW1lbnQgZGVsZXRlZCBzdWNjZXNzZnVsbHkuJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAnYm90dG9tLWNlbnRlcicsXG4gICAgICAgICAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgdGltZU91dDogMzAwMCxcbiAgICAgICAgICAgICAgICB0aW1lT3V0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAodGhpcy5pc0VkaXRpbmdNb2RlKCkgJiYgdGhpcy5hY3RpdmVFZGl0Q29tbWVudCgpPy5pZCA9PT0gY29tbWVudElkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFJlcGx5RWRpdFN0YXRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnID8gZXJyb3IgOiAnRmFpbGVkIHRvIGRlbGV0ZSBjb21tZW50IScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdkYW5nZXInLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAnYm90dG9tLWNlbnRlcicsXG4gICAgICAgICAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgdGltZU91dDogMzAwMCxcbiAgICAgICAgICAgICAgICB0aW1lT3V0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgICBjb2xvcjogJ2RlZmF1bHQnLFxuICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZSxcbiAgICAgICAgICBvbkNsaWNrOiAoZSkgPT4ge1xuICAgICAgICAgICAgZGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjbG9zZUJ1dHRvbjogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICByZXNldFJlcGx5RWRpdFN0YXRlKCkge1xuICAgIHRoaXMuaXNFZGl0aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlRWRpdENvbW1lbnQuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5pc1JlcGx5aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlUmVwbHlDb21tZW50LnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuY29tbWVudENvbnRlbnQuc2V0KCcnKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxbC1lZGl0b3InKVswXS5pbm5lckhUTUwgPSAnJztcbiAgfVxuXG4gIGFzeW5jIHRvZ2dsZUxpa2UoY29tbWVudDogQVhNQ29tbWVudCkge1xuICAgIGNvbnN0IGlzTGlrZWQgPSB0aGlzLmlzTGlrZWRCeVVzZXIoY29tbWVudCk7XG4gICAgdGhpcy51cGRhdGVMaWtlU3RhdHVzKGNvbW1lbnQuaWQsICFpc0xpa2VkKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGlzTGlrZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS51bmxpa2VDb21tZW50KGNvbW1lbnQuaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5saWtlQ29tbWVudChjb21tZW50LmlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHRvZ2dsZSBsaWtlOicsIGVycm9yKTtcbiAgICAgIHRoaXMudXBkYXRlTGlrZVN0YXR1cyhjb21tZW50LmlkLCBpc0xpa2VkKTsgLy8gUmV2ZXJ0IG9wdGltaXN0aWMgdXBkYXRlXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaWtlU3RhdHVzKGNvbW1lbnRJZDogc3RyaW5nLCB3aWxsQmVMaWtlZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGZpbmRBbmRUb2dnbGUgPSAoY29tbWVudHM6IEFYTUNvbW1lbnRbXSk6IEFYTUNvbW1lbnRbXSA9PiB7XG4gICAgICByZXR1cm4gY29tbWVudHMubWFwKChjKSA9PiB7XG4gICAgICAgIGlmIChjLmlkID09PSBjb21tZW50SWQpIHtcbiAgICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICAgIGlmICghdXNlcikgcmV0dXJuIGM7XG4gICAgICAgICAgbGV0IHJlYWN0aW9ucyA9IGMucmVhY3Rpb25zIHx8IFtdO1xuICAgICAgICAgIGlmICh3aWxsQmVMaWtlZCkge1xuICAgICAgICAgICAgcmVhY3Rpb25zLnB1c2goeyBhdXRob3I6IHVzZXIsIHR5cGU6ICdsaWtlJyB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVhY3Rpb25zID0gcmVhY3Rpb25zLmZpbHRlcigocikgPT4gci5hdXRob3IuaWQgIT09IHVzZXIuaWQgfHwgci50eXBlICE9PSAnbGlrZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAuLi5jLCByZWFjdGlvbnMgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5yZXBsaWVzICYmIGMucmVwbGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYy5yZXBsaWVzID0gZmluZEFuZFRvZ2dsZShjLnJlcGxpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLmNvbW1lbnRzLnVwZGF0ZSgoY29tbWVudHMpID0+IGZpbmRBbmRUb2dnbGUoY29tbWVudHMpKTtcbiAgfVxuICBwcml2YXRlIHJlbW92ZU1lc3NhZ2VCeUlkKGNvbW1lbnRJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyT3V0ID0gKGNvbW1lbnRzOiBBWE1Db21tZW50W10pOiBBWE1Db21tZW50W10gPT4ge1xuICAgICAgcmV0dXJuIGNvbW1lbnRzXG4gICAgICAgIC5maWx0ZXIoKGMpID0+IGMuaWQgIT09IGNvbW1lbnRJZClcbiAgICAgICAgLm1hcCgoYykgPT4ge1xuICAgICAgICAgIGlmIChjLnJlcGxpZXMgJiYgYy5yZXBsaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGMucmVwbGllcyA9IGZpbHRlck91dChjLnJlcGxpZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLmNvbW1lbnRzLnVwZGF0ZSgoY29tbWVudHMpID0+IGZpbHRlck91dChjb21tZW50cykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHN1Ym1pdENvbW1lbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KHRydWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBjdXJyZW50VGhyZWFkID0gdGhpcy50aHJlYWQoKTtcbiAgICAgIGlmICghY3VycmVudFRocmVhZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlzRWRpdGluZ01vZGUoKSAmJiB0aGlzLmFjdGl2ZUVkaXRDb21tZW50KCk/LmlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UuZWRpdENvbW1lbnQodGhpcy5hY3RpdmVFZGl0Q29tbWVudCgpIS5pZCwgdGhpcy5jb21tZW50Q29udGVudCgpKTtcbiAgICAgICAgdGhpcy5oYXNDb29sZG93bi5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNFZGl0aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmFjdGl2ZUVkaXRDb21tZW50LnNldCh1bmRlZmluZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5hZGRDb21tZW50KGN1cnJlbnRUaHJlYWQuaWQsIHRoaXMuY29tbWVudENvbnRlbnQoKSwgdGhpcy5hY3RpdmVSZXBseUNvbW1lbnQoKT8uaWQpO1xuICAgICAgICB0aGlzLmhhc0Nvb2xkb3duLnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5pc1JlcGx5aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmFjdGl2ZVJlcGx5Q29tbWVudC5zZXQodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29tbWVudENvbnRlbnQuc2V0KCcnKTtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3FsLWVkaXRvcicpWzBdLmlubmVySFRNTCA9ICcnO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5oYXNDb29sZG93bi5zZXQoZmFsc2UpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1Ym1pdHRpbmcgY29tbWVudDonLCBlcnJvcik7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHtcbiAgICAgICAgY29udGVudDogdHlwZW9mIGVycm9yID09PSAnc3RyaW5nJyA/IGVycm9yIDogJ0ZhaWxlZCB0byBzdWJtaXQgY29tbWVudC4gUGxlYXNlIHRyeSBhZ2Fpbi4nLFxuICAgICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgICAgIGxvY2F0aW9uOiAnYm90dG9tLWNlbnRlcicsXG4gICAgICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICB0aW1lT3V0OiAzMDAwLFxuICAgICAgICB0aW1lT3V0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGxNYWluKCkge1xuICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLmlzUmVwbHlpbmdNb2RlKCkgPyB0aGlzLmFjdGl2ZVJlcGx5Q29tbWVudCgpIDogdGhpcy5hY3RpdmVFZGl0Q29tbWVudCgpO1xuICAgIGlmIChjb21tZW50ICYmIGNvbW1lbnQuaWQpIHtcbiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29tbWVudC5pZCk7XG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZENvbW1lbnRJZC5zZXQoY29tbWVudC5pZCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRDb21tZW50SWQuc2V0KG51bGwpO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zaXplLWZ1bGwgYXgtZmxleCBheC1mbGV4LWNvbCBheC1qdXN0aWZ5LWJldHdlZW4gYXgtcC00IGF4LW92ZXJmbG93LWhpZGRlblwiPlxuICA8YXgtY29tbWVudC1jb250YWluZXIgY2xhc3M9XCJheC1vdmVyZmxvdy1hdXRvXCI+XG4gICAgQGlmIChpc0xvYWRpbmcoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LXB5LTEyIGF4LWJnLWxpZ2h0ZXN0IGF4LXB4LTVcIj5cbiAgICAgICAgPGF4LXNrZWxldG9uIGNsYXNzPVwiYXgtbWluLXctMTYgYXgtaC0xNiBheC1yb3VuZGVkLWZ1bGwgYXgtbWUtNFwiPjwvYXgtc2tlbGV0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0yIGF4LXctZnVsbFwiPlxuICAgICAgICAgIDxheC1za2VsZXRvbiBjbGFzcz1cImF4LXctZnVsbCBheC1oLTYgYXgtcm91bmRlZFwiPjwvYXgtc2tlbGV0b24+XG4gICAgICAgICAgPGF4LXNrZWxldG9uIGNsYXNzPVwiYXgtdy1mdWxsIGF4LWgtMiBheC1yb3VuZGVkLWZ1bGxcIj48L2F4LXNrZWxldG9uPlxuICAgICAgICAgIDxheC1za2VsZXRvbiBjbGFzcz1cImF4LXctZnVsbCBheC1oLTIgYXgtcm91bmRlZC1mdWxsXCI+PC9heC1za2VsZXRvbj5cbiAgICAgICAgICA8YXgtc2tlbGV0b24gY2xhc3M9XCJheC13LTgvMTIgYXgtaC0yIGF4LXJvdW5kZWQtZnVsbFwiPjwvYXgtc2tlbGV0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSBpZiAoIWlzTG9hZGluZygpICYmIGNvbW1lbnRzKCkubGVuZ3RoID4gMCkge1xuICAgICAgPGF4LWNvbW1lbnQtdmlldyBjbGFzcz1cImF4LWJnLWxpZ2h0ZXN0XCI+XG4gICAgICAgIEBmb3IgKGNvbW1lbnQgb2YgY29tbWVudHMoKTsgdHJhY2sgY29tbWVudC5pZCkge1xuICAgICAgICAgIDxheC1jb21tZW50LWl0ZW1cbiAgICAgICAgICAgIFtpZF09XCJjb21tZW50LmlkIVwiXG4gICAgICAgICAgICBbcmVwbHlDb3VudF09XCJjb21tZW50LnJlcGx5Q291bnRcIlxuICAgICAgICAgICAgW2NsYXNzLmhpZ2hsaWdodGVkXT1cImhpZ2hsaWdodGVkQ29tbWVudElkKCkgPT09IGNvbW1lbnQuaWRcIlxuICAgICAgICAgICAgW0BmYWRlSW5dXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGF4cC11c2VyLWF2YXRhciAjdXNlciBbc2l6ZV09XCI0OFwiIFt1c2VySWRdPVwiY29tbWVudC5hdXRob3IuaWRcIiBuZ1Byb2plY3RBcz1cIidheC1hdmF0YXInXCI+PC9heHAtdXNlci1hdmF0YXI+XG4gICAgICAgICAgICA8YXgtdGl0bGU+e3sgdXNlci5maXJzdE5hbWUoKSArICcgJyArIHVzZXIubGFzdE5hbWUoKSB9fTwvYXgtdGl0bGU+XG4gICAgICAgICAgICA8YXgtY29tbWVudC1kYXRlPnt7IGNvbW1lbnQuYXVkaXRJbmZvPy5jcmVhdGVkPy5hdCEgfCBmb3JtYXQ6ICd0aW1lbGVmdCcgfCBhc3luYyB9fSA8L2F4LWNvbW1lbnQtZGF0ZT5cbiAgICAgICAgICAgIDxheC1jb21tZW50LW1lbnUtb3B0aW9ucz5cbiAgICAgICAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXNtXCIgbG9vaz1cImJsYW5rXCIgY29sb3I9XCJuZXV0cmFsXCI+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImF4LWljb24gYXgtaWNvbi1zb2xpZCBheC1pY29uLW1vcmUtaG9yaXpvbnRhbFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgPC9heC1idXR0b24+XG5cbiAgICAgICAgICAgICAgPGF4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtXG4gICAgICAgICAgICAgICAgICAgIHRleHQ9XCJFZGl0XCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJuZXV0cmFsXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRNZXNzYWdlKGNvbW1lbnQsIHVuZGVmaW5lZCwgdXNlci5maXJzdE5hbWUoKSArICcgJyArIHVzZXIubGFzdE5hbWUoKSlcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1zb2xpZCBmYS1lZGl0XCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSB0ZXh0PVwiRGVsZXRlXCIgY29sb3I9XCJkYW5nZXJcIiAoY2xpY2spPVwiZGVsZXRlQ29tbWVudChjb21tZW50LmlkISlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWQgZmEtdHJhc2gtY2FuXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgICA8L2F4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICAgICAgPC9heC1jb21tZW50LW1lbnUtb3B0aW9ucz5cbiAgICAgICAgICAgIDxheC1jb250ZW50IFtpbm5lckhUTUxdPVwic2FuaXRpemVIdG1sKGNvbW1lbnQubWVzc2FnZS5jb250ZW50KVwiPjwvYXgtY29udGVudD5cbiAgICAgICAgICAgIDxheC1jb21tZW50LWxpa2UgKGNsaWNrKT1cInRvZ2dsZUxpa2UoY29tbWVudClcIiBbbGlrZV09XCJpc0xpa2VkQnlVc2VyKGNvbW1lbnQpXCI+XG4gICAgICAgICAgICAgIHt7IGdldFJlYWN0aW9uc0NvdW50KGNvbW1lbnQpIH19XG4gICAgICAgICAgICA8L2F4LWNvbW1lbnQtbGlrZT5cbiAgICAgICAgICAgIDxheC1jb21tZW50LXJlcGx5LXRleHRcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlcGx5TWVzc2FnZShjb21tZW50LCB1bmRlZmluZWQsIHVzZXIuZmlyc3ROYW1lKCkgKyAnICcgKyB1c2VyLmxhc3ROYW1lKCkpXCJcbiAgICAgICAgICAgID48L2F4LWNvbW1lbnQtcmVwbHktdGV4dD5cbiAgICAgICAgICAgIEBmb3IgKHJlcGx5IG9mIGNvbW1lbnQucmVwbGllczsgdHJhY2sgcmVwbHkuaWQpIHtcbiAgICAgICAgICAgICAgPGF4LWNvbW1lbnQtaXRlbSBbaWRdPVwicmVwbHkuaWRcIiBbY2xhc3MuaGlnaGxpZ2h0ZWRdPVwiaGlnaGxpZ2h0ZWRDb21tZW50SWQoKSA9PT0gcmVwbHkuaWRcIiBbQGZhZGVJbl0+XG4gICAgICAgICAgICAgICAgPGF4cC11c2VyLWF2YXRhclxuICAgICAgICAgICAgICAgICAgI3VzZXIyXG4gICAgICAgICAgICAgICAgICBbc2l6ZV09XCI0OFwiXG4gICAgICAgICAgICAgICAgICBbdXNlcklkXT1cInJlcGx5LmF1dGhvci5pZFwiXG4gICAgICAgICAgICAgICAgICBuZ1Byb2plY3RBcz1cIidheC1hdmF0YXInXCJcbiAgICAgICAgICAgICAgICA+PC9heHAtdXNlci1hdmF0YXI+XG4gICAgICAgICAgICAgICAgPGF4LXRpdGxlPnt7IHVzZXIyLmZpcnN0TmFtZSgpICsgJyAnICsgdXNlcjIubGFzdE5hbWUoKSB9fTwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGF4LWNvbW1lbnQtZGF0ZT57eyByZXBseS5hdWRpdEluZm8/LmNyZWF0ZWQ/LmF0ISB8IGZvcm1hdDogJ3RpbWVsZWZ0JyB8IGFzeW5jIH19IDwvYXgtY29tbWVudC1kYXRlPlxuICAgICAgICAgICAgICAgIDxheC1jb21tZW50LW1lbnUtb3B0aW9ucz5cbiAgICAgICAgICAgICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC1zbVwiIGxvb2s9XCJibGFua1wiIGNvbG9yPVwibmV1dHJhbFwiPlxuICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiYXgtaWNvbiBheC1pY29uLXNvbGlkIGF4LWljb24tbW9yZS1ob3Jpem9udGFsXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9heC1idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgIDxheC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiRWRpdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cIm5ldXRyYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRNZXNzYWdlKGNvbW1lbnQsIHJlcGx5LCB1c2VyMi5maXJzdE5hbWUoKSArICcgJyArIHVzZXIyLmxhc3ROYW1lKCkpXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWQgZmEtZWRpdFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtIHRleHQ9XCJEZWxldGVcIiBjb2xvcj1cImRhbmdlclwiIChjbGljayk9XCJkZWxldGVDb21tZW50KHJlcGx5LmlkISlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1zb2xpZCBmYS10cmFzaC1jYW5cIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgICAgICA8L2F4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICAgICAgICAgIDwvYXgtY29tbWVudC1tZW51LW9wdGlvbnM+XG4gICAgICAgICAgICAgICAgPGF4LWNvbnRlbnQgW2lubmVySFRNTF09XCJzYW5pdGl6ZUh0bWwocmVwbHkubWVzc2FnZS5jb250ZW50KVwiPjwvYXgtY29udGVudD5cbiAgICAgICAgICAgICAgICA8YXgtY29tbWVudC1saWtlIChjbGljayk9XCJ0b2dnbGVMaWtlKHJlcGx5KVwiIFtsaWtlXT1cImlzTGlrZWRCeVVzZXIocmVwbHkpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBnZXRSZWFjdGlvbnNDb3VudChyZXBseSkgfX1cbiAgICAgICAgICAgICAgICA8L2F4LWNvbW1lbnQtbGlrZT5cbiAgICAgICAgICAgICAgICA8YXgtY29tbWVudC1yZXBseS10ZXh0XG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVwbHlNZXNzYWdlKGNvbW1lbnQsIHJlcGx5LCB1c2VyMi5maXJzdE5hbWUoKSArICcgJyArIHVzZXIyLmxhc3ROYW1lKCkpXCJcbiAgICAgICAgICAgICAgICA+PC9heC1jb21tZW50LXJlcGx5LXRleHQ+XG4gICAgICAgICAgICAgIDwvYXgtY29tbWVudC1pdGVtPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtY29tbWVudC1pdGVtPlxuICAgICAgICB9XG4gICAgICA8L2F4LWNvbW1lbnQtdmlldz5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC00IGF4LWp1c3RpZnktY2VudGVyIGF4LWl0ZW1zLWNlbnRlciBheC1wLTEwXCI+XG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgY2xhc3M9XCJheC1teC1hdXRvXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgd2lkdGg9XCIxNTRcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMTYxXCJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTU0IDE2MVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk0wLjA2MTY0NTUgODQuNDI2OEMwLjA2MTY0NTUgNDIuMDIxMyAzNC40MzUgNy44Mzc2NSA3Ni42NTA3IDcuODM3NjVDMTE4LjgwMyA3LjgzNzY1IDE1My4yMjQgNDIuMDA1NSAxNTMuMjI0IDg0LjQyNjhDMTUzLjIyNCAxMDIuNDIgMTQ3LjAyNiAxMTguOTc0IDEzNi42MjIgMTMyLjAzNEMxMjIuMjgyIDE1MC4xMzggMTAwLjM2NyAxNjEgNzYuNjUwNyAxNjFDNTIuNzc1OSAxNjEgMzAuOTg4MiAxNTAuMDU5IDE2LjY2MzMgMTMyLjAzNEM2LjI1OTYxIDExOC45NzQgMC4wNjE2NDU1IDEwMi40MiAwLjA2MTY0NTUgODQuNDI2OFpcIlxuICAgICAgICAgICAgICBmaWxsPVwiI0VFRjJGRlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk05Ni44MTg5IDAuNjMyNDk4TDk2LjgxODkgMC42MzIzODRMOTYuODA4MyAwLjYzMDk1NEM5Ni4yMDM0IDAuNTQ5NTgxIDk1LjU5MzEgMC41IDk0Ljk3ODcgMC41SDI5LjMzOEMyMi43MTEyIDAuNSAxNy4zMzk0IDUuODQ0NTUgMTcuMzM5NCAxMi40NDczVjE0Mi43MTVDMTcuMzM5NCAxNDkuMzE4IDIyLjcxMTIgMTU0LjY2MiAyOS4zMzggMTU0LjY2MkgxMjMuOTQ4QzEzMC41OTEgMTU0LjY2MiAxMzUuOTQ2IDE0OS4zMTcgMTM1Ljk0NiAxNDIuNzE1VjM4LjkzMDlDMTM1Ljk0NiAzOC4wMjQ0IDEzNS44NDcgMzcuMTMzNCAxMzUuNjQ4IDM2LjI1ODZMMTM1LjY0OCAzNi4yNTg0QzEzNS4xMTcgMzMuOTMwOSAxMzMuODc0IDMxLjc2ODYgMTMyLjA2NiAzMC4xMzMzQzEzMi4wNjYgMzAuMTMzMSAxMzIuMDY1IDMwLjEzMjkgMTMyLjA2NSAzMC4xMzI3TDEwMy4wNjggMy42NTIwM0MxMDMuMDY4IDMuNjUxOSAxMDMuMDY3IDMuNjUxNzcgMTAzLjA2NyAzLjY1MTY0QzEwMS4zMTEgMi4wMzUyNiA5OS4xMzk2IDAuOTk1NTUyIDk2LjgxODkgMC42MzI0OThaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiI0U1RTdFQlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGVsbGlwc2UgY3g9XCI4MC4wNjE4XCIgY3k9XCI4MVwiIHJ4PVwiMjguMDM0MlwiIHJ5PVwiMjguMDM0MlwiIGZpbGw9XCIjRUVGMkZGXCIgLz5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNOTkuMjM5MyA2MS4zMDYxTDk5LjIzOTEgNjEuMzA1OEM4OC40OTggNTAuNTgwOCA3MS4xMDkyIDUwLjU4MDQgNjAuMzgzNSA2MS4zMDYxQzQ5LjY0MjMgNzIuMDMxNiA0OS42NDIyIDg5LjQzNjEgNjAuMzgzMiAxMDAuMTYyQzcxLjEwOSAxMTAuOTAzIDg4LjQ5ODIgMTEwLjkwMyA5OS4yMzkzIDEwMC4xNjJDMTA5Ljk2NSA4OS40MzYzIDEwOS45NjUgNzIuMDMxNyA5OS4yMzkzIDYxLjMwNjFaTTEwNS44NjMgNTQuNjgzMkMxMjAuMjQ5IDY5LjA2OTUgMTIwLjI0OSA5Mi4zOTg1IDEwNS44NjMgMTA2Ljc4NUM5MS40NjA1IDEyMS4xNzEgNjguMTQ2OCAxMjEuMTcxIDUzLjc0NDYgMTA2Ljc4NUMzOS4zNTgyIDkyLjM5ODcgMzkuMzU4MiA2OS4wNjkzIDUzLjc0NDYgNTQuNjgzQzY4LjE0NjggNDAuMjk2NSA5MS40NjA1IDQwLjI5NjYgMTA1Ljg2MyA1NC42ODMyWlwiXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiNFNUU3RUJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTEwLjc4MiAxMTkuMjY3TDEwMi4wMTYgMTEwLjQ5MkMxMDQuODg4IDEwOC4yNjcgMTA3LjQ3NiAxMDUuNjUxIDEwOS41NjQgMTAyLjk1NUwxMTguMzI5IDExMS43MjlMMTEwLjc4MiAxMTkuMjY3WlwiXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiNFNUU3RUJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTM5LjEyMiAxMjUuNzgxTDEzOS4xMjIgMTI1Ljc4TDEyMy4zMTMgMTA5Ljk4OEMxMjMuMzEzIDEwOS45ODcgMTIzLjMxMyAxMDkuOTg3IDEyMy4zMTIgMTA5Ljk4NkMxMjEuOTk2IDEwOC42NTMgMTE5Ljg0OSAxMDguNjU3IDExOC41MjEgMTA5Ljk4NUwxMTguODcxIDExMC4zMzVMMTE4LjUyMSAxMDkuOTg1TDEwOS4wNDcgMTE5LjQ1OUMxMDcuNzMxIDEyMC43NzUgMTA3LjczNSAxMjIuOTE4IDEwOS4wNDQgMTI0LjI0N0wxMDkuMDQ3IDEyNC4yNDlMMTI0Ljg1OCAxNDAuMDZDMTI4Ljc4OSAxNDMuOTkyIDEzNS4xOTEgMTQzLjk5MiAxMzkuMTIyIDE0MC4wNkMxNDMuMDY5IDEzNi4xMTMgMTQzLjA2OSAxMjkuNzI4IDEzOS4xMjIgMTI1Ljc4MVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiI0E1QjRGQ1wiXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiM4MThDRjhcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNODMuMTg1IDg3LjIyODVDODIuNTM4NyA4Ny4yMjg1IDgyLjAwMjcgODYuNjkyNiA4Mi4wMDI3IDg2LjAzMDVDODIuMDAyNyA4My4zODIxIDc3Ljk5ODcgODMuMzgyMSA3Ny45OTg3IDg2LjAzMDVDNzcuOTk4NyA4Ni42OTI2IDc3LjQ2MjcgODcuMjI4NSA3Ni44MDA2IDg3LjIyODVDNzYuMTU0MyA4Ny4yMjg1IDc1LjYxODMgODYuNjkyNiA3NS42MTgzIDg2LjAzMDVDNzUuNjE4MyA4MC4yMjk0IDg0LjM4MzEgODAuMjQ1MSA4NC4zODMxIDg2LjAzMDVDODQuMzgzMSA4Ni42OTI2IDgzLjg0NzEgODcuMjI4NSA4My4xODUgODcuMjI4NVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzRGNDZFNVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk05My4zNTI4IDc3LjA5MjZIODguNDAzQzg3Ljc0MDkgNzcuMDkyNiA4Ny4yMDQ5IDc2LjU1NjcgODcuMjA0OSA3NS44OTQ2Qzg3LjIwNDkgNzUuMjQ4MyA4Ny43NDA5IDc0LjcxMjMgODguNDAzIDc0LjcxMjNIOTMuMzUyOEM5NC4wMTQ5IDc0LjcxMjMgOTQuNTUwOSA3NS4yNDgzIDk0LjU1MDkgNzUuODk0NkM5NC41NTA5IDc2LjU1NjcgOTQuMDE0OSA3Ny4wOTI2IDkzLjM1MjggNzcuMDkyNlpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzRGNDZFNVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk03MS41OTg3IDc3LjA5MjVINjYuNjQ4OEM2NS45ODY3IDc3LjA5MjUgNjUuNDUwNyA3Ni41NTY1IDY1LjQ1MDcgNzUuODk0NUM2NS40NTA3IDc1LjI0ODEgNjUuOTg2NyA3NC43MTIyIDY2LjY0ODggNzQuNzEyMkg3MS41OTg3QzcyLjI0NSA3NC43MTIyIDcyLjc4MSA3NS4yNDgxIDcyLjc4MSA3NS44OTQ1QzcyLjc4MSA3Ni41NTY1IDcyLjI0NSA3Ny4wOTI1IDcxLjU5ODcgNzcuMDkyNVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzRGNDZFNVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjM4LjM1MjJcIiB5PVwiMjEuNTEyOFwiIHdpZHRoPVwiNDEuMDI1NlwiIGhlaWdodD1cIjIuNzM1MDRcIiByeD1cIjEuMzY3NTJcIiBmaWxsPVwiIzRGNDZFNVwiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMzguMzUyMlwiIHk9XCIxMzMuNjVcIiB3aWR0aD1cIjU0LjcwMDlcIiBoZWlnaHQ9XCI1LjQ3MDA5XCIgcng9XCIyLjczNTA0XCIgZmlsbD1cIiNBNUI0RkNcIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjM4LjM1MjJcIiB5PVwiMjkuNzE3OVwiIHdpZHRoPVwiMTMuNjc1MlwiIGhlaWdodD1cIjIuNzM1MDRcIiByeD1cIjEuMzY3NTJcIiBmaWxsPVwiIzRGNDZFNVwiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNTYuMTNcIiBjeT1cIjMxLjA4NTRcIiByPVwiMS4zNjc1MlwiIGZpbGw9XCIjNEY0NkU1XCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI2MS42MDAxXCIgY3k9XCIzMS4wODU0XCIgcj1cIjEuMzY3NTJcIiBmaWxsPVwiIzRGNDZFNVwiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNjcuMDcwMlwiIGN5PVwiMzEuMDg1NFwiIHI9XCIxLjM2NzUyXCIgZmlsbD1cIiM0RjQ2RTVcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJheC10ZXh0LWNlbnRlciBheC10ZXh0LW5ldXRyYWwtNjAwIGF4LWZvbnQtc2VtaWJvbGQgYXgtbGVhZGluZy1sb29zZSBheC1wYi0yXCI+XG4gICAgICAgICAgICAgIFRoZXJlIGlzIG5vIENvbW1lbnQhXG4gICAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9heC1jb21tZW50LWNvbnRhaW5lcj5cbiAgPGRpdj5cbiAgICBAaWYgKGlzUmVwbHlpbmdNb2RlKCkgfHwgaXNFZGl0aW5nTW9kZSgpKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYXgtZmxleCBheC1qdXN0aWZ5LWJldHdlZW4gYXgtcm91bmRlZC1iLW5vbmUgYXgtYm9yZGVyIGF4LWJvcmRlci1iLTAgYXgtcm91bmRlZC1sZyBheC1weC02IGF4LXB5LTMgYXgtdy1mdWxsIGF4LWl0ZW1zLWNlbnRlciBheC1vdmVyZmxvdy1oaWRkZW4gYXgtdGV4dC1zbSBheC1sZWFkaW5nLW5vbmVcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IChjbGljayk9XCJzY3JvbGxNYWluKClcIiBjbGFzcz1cImF4LWZsZXggYXgtanVzdGlmeS1zdGFydCBheC1pdGVtcy1jZW50ZXIgYXgtY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgW2NsYXNzXT1cImlzUmVwbHlpbmdNb2RlKCkgPyAnZmEtcmVwbHknIDogJ2ZhLXBlbidcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYS1zb2xpZCBheC10ZXh0LXByaW1hcnktNTAwIGRhcms6YXgtdGV4dC1wcmltYXJ5LTMwMCBheC10ZXh0LTJ4bCBheC1tZS00XCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0yIGF4LWp1c3RpZnktYmV0d2VlbiBheC1hbGlnbi1taWRkbGUgYXgtbGVhZGluZy00IGF4LW92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJheC10ZXh0LXByaW1hcnktNTAwIGRhcms6YXgtdGV4dC1wcmltYXJ5LTMwMFwiPlxuICAgICAgICAgICAgICB7eyBpc1JlcGx5aW5nTW9kZSgpID8gJ1JlcGx5IHRvICcgOiAnRWRpdCBNZXNzYWdlJyB9fVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LWZvbnQtYm9sZFwiPlxuICAgICAgICAgICAgICAgIHt7IGlzUmVwbHlpbmdNb2RlKCkgPyBhY3RpdmVSZXBseUNvbW1lbnQoKT8udXNlck5hbWUgOiAnJyB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJ1bmNhdGVcIlxuICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgIGlzUmVwbHlpbmdNb2RlKClcbiAgICAgICAgICAgICAgICAgID8gc2FuaXRpemVIdG1sKGFjdGl2ZVJlcGx5Q29tbWVudCgpPy5tZXNzYWdlPy5jb250ZW50ID8/ICcnKVxuICAgICAgICAgICAgICAgICAgOiBzYW5pdGl6ZUh0bWwoYWN0aXZlRWRpdENvbW1lbnQoKT8ubWVzc2FnZT8uY29udGVudCA/PyAnJylcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+PGkgKGNsaWNrKT1cInJlc2V0UmVwbHlFZGl0U3RhdGUoKVwiIGNsYXNzPVwiZmEtc29saWQgYXgtdGV4dC0yeGwgZmEteG1hcmsgYXgtY3Vyc29yLXBvaW50ZXJcIj48L2k+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGF4LXd5c2l3eWctY29udGFpbmVyICN3IFtsb29rXT1cInd5c2l3eWdPcHRpb25zKCkubG9va1wiIFsobmdNb2RlbCldPVwiY29tbWVudENvbnRlbnRcIj5cbiAgICAgIDxheC13eXNpd3lnLXZpZXcgY2xhc3M9XCJheC1taW4taC0yOFwiPjwvYXgtd3lzaXd5Zy12aWV3PlxuICAgICAgPGF4LXd5c2l3eWctdG9vbGJhcj5cbiAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICA8YXgtd3lzaXd5Zy1oaXN0b3J5PjwvYXgtd3lzaXd5Zy1oaXN0b3J5PlxuICAgICAgICAgIDxheC13eXNpd3lnLWZvbnQtc3R5bGU+PC9heC13eXNpd3lnLWZvbnQtc3R5bGU+XG4gICAgICAgICAgPGF4LXd5c2l3eWctY29sb3JzPjwvYXgtd3lzaXd5Zy1jb2xvcnM+XG4gICAgICAgICAgPGF4LXd5c2l3eWctbGlzdD48L2F4LXd5c2l3eWctbGlzdD5cbiAgICAgICAgICA8YXgtd3lzaXd5Zy1hbGlnbm1lbnQ+PC9heC13eXNpd3lnLWFsaWdubWVudD5cbiAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgIDxheC1zdWZmaXg+XG4gICAgICAgICAgPGF4LWRyb3Bkb3duLWJ1dHRvblxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImhhc0Nvb2xkb3duKCkgfHwgIXRoaXMuY29tbWVudENvbnRlbnQoKVwiXG4gICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBtb2RlPVwic3BsaXRcIlxuICAgICAgICAgICAgdGV4dD1cIlNlbmRcIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwic3VibWl0Q29tbWVudCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGlzU3VibWl0dGluZygpKSB7XG4gICAgICAgICAgICAgIDxheC1sb2FkaW5nPjwvYXgtbG9hZGluZz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwhLS0gPGF4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gKGNsaWNrKT1cInN1Ym1pdENvbW1lbnQoKVwiIHRleHQ9XCJTZW5kIFByaXZhdGUgLi4uXCIgbmFtZT1cInByaXZhdGVcIiBkYXRhPVwicHJpdmF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1yZWd1bGFyIGZhLXVzZXItc2VjcmV0XCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbS1saXN0PiAtLT5cbiAgICAgICAgICA8L2F4LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICA8L2F4LXd5c2l3eWctdG9vbGJhcj5cbiAgICA8L2F4LXd5c2l3eWctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { CommonModule } from '@angular/common';\nimport { Component, ViewEncapsulation, input } from '@angular/core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXMCommentComponent } from '../comment.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/decorators\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@angular/common\";\nimport * as i4 from \"@acorex/core/translation\";\nexport class AXMCommentPopupComponent extends AXBasePageComponent {\n constructor() {\n super(...arguments);\n this.refrenceType = input.required(...(ngDevMode ? [{ debugName: \"refrenceType\" }] : []));\n this.refrenceId = input.required(...(ngDevMode ? [{ debugName: \"refrenceId\" }] : []));\n this.subject = input.required(...(ngDevMode ? [{ debugName: \"subject\" }] : []));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.3.12\", type: AXMCommentPopupComponent, isStandalone: true, selector: \"axm-comment-popup\", inputs: { refrenceType: { classPropertyName: \"refrenceType\", publicName: \"refrenceType\", isSignal: true, isRequired: true, transformFunction: null }, refrenceId: { classPropertyName: \"refrenceId\", publicName: \"refrenceId\", isSignal: true, isRequired: true, transformFunction: null }, subject: { classPropertyName: \"subject\", publicName: \"subject\", isSignal: true, isRequired: true, transformFunction: null } }, providers: [], usesInheritance: true, ngImport: i0, template: \"<ax-content>\\n <div class=\\\"ax-p-6 ax-min-h-[30vh] ax-overflow-y-auto\\\">\\n <axm-comment [refrenceType]=\\\"refrenceType()\\\" [refrenceId]=\\\"refrenceId()\\\" [subject]=\\\"subject()\\\"></axm-comment>\\n </div>\\n</ax-content>\\n<ax-footer>\\n <ax-prefix></ax-prefix>\\n <ax-suffix>\\n <ax-button\\n [text]=\\\"'@general:actions.close.title' | translate | async\\\"\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n (onClick)=\\\"close()\\\"\\n >\\n </ax-button>\\n </ax-suffix>\\n</ax-footer>\\n\", dependencies: [{ kind: \"ngmodule\", type: \n // Angular\n CommonModule }, { kind: \"ngmodule\", type: \n // ACoreX\n AXDecoratorModule }, { kind: \"component\", type: i1.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"component\", type: \n // Comment\n AXMCommentComponent, selector: \"axm-comment\", inputs: [\"refrenceType\", \"refrenceId\", \"subject\"] }, { kind: \"pipe\", type: i3.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i4.AXTranslatorPipe, name: \"translate\" }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentPopupComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-comment-popup', standalone: true, imports: [\n // Angular\n CommonModule,\n // ACoreX\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n // Comment\n AXMCommentComponent,\n ], encapsulation: ViewEncapsulation.None, providers: [], template: \"<ax-content>\\n <div class=\\\"ax-p-6 ax-min-h-[30vh] ax-overflow-y-auto\\\">\\n <axm-comment [refrenceType]=\\\"refrenceType()\\\" [refrenceId]=\\\"refrenceId()\\\" [subject]=\\\"subject()\\\"></axm-comment>\\n </div>\\n</ax-content>\\n<ax-footer>\\n <ax-prefix></ax-prefix>\\n <ax-suffix>\\n <ax-button\\n [text]=\\\"'@general:actions.close.title' | translate | async\\\"\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n (onClick)=\\\"close()\\\"\\n >\\n </ax-button>\\n </ax-suffix>\\n</ax-footer>\\n\" }]\n }], propDecorators: { refrenceType: [{ type: i0.Input, args: [{ isSignal: true, alias: \"refrenceType\", required: true }] }], refrenceId: [{ type: i0.Input, args: [{ isSignal: true, alias: \"refrenceId\", required: true }] }], subject: [{ type: i0.Input, args: [{ isSignal: true, alias: \"subject\", required: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY29tbWVudC9wb3B1cC9jb21tZW50LXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jb21tZW50L3BvcHVwL2NvbW1lbnQtcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7O0FBbUIzRCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsbUJBQW1CO0lBakJqRTs7UUFrQkUsaUJBQVksR0FBRyxLQUFLLENBQUMsUUFBUSx1REFBVSxDQUFDO1FBQ3hDLGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxxREFBVSxDQUFDO1FBQ3RDLFlBQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxrREFBVSxDQUFDO0tBQ3BDOytHQUpZLHdCQUF3QjttR0FBeEIsd0JBQXdCLDJkQUZ4QixFQUFFLGlEQ3hCZiw4ZUFpQkE7Z0JESkksVUFBVTtnQkFDVixZQUFZO2dCQUNaLFNBQVM7Z0JBQ1QsaUJBQWlCLHFQQUNqQixjQUFjLDZYQUNkLG1CQUFtQjtnQkFDbkIsVUFBVTtnQkFDVixtQkFBbUI7OzRGQU1WLHdCQUF3QjtrQkFqQnBDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUDt3QkFDUCxVQUFVO3dCQUNWLFlBQVk7d0JBQ1osU0FBUzt3QkFDVCxpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixVQUFVO3dCQUNWLG1CQUFtQjtxQkFDcEIsaUJBRWMsaUJBQWlCLENBQUMsSUFBSSxhQUMxQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYQmFzZVBhZ2VDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcGFnZSc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYTUNvbW1lbnRDb21wb25lbnQgfSBmcm9tICcuLi9jb21tZW50LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4bS1jb21tZW50LXBvcHVwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIC8vIEFuZ3VsYXJcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgLy8gQUNvcmVYXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhUcmFuc2xhdGlvbk1vZHVsZSxcbiAgICAvLyBDb21tZW50XG4gICAgQVhNQ29tbWVudENvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbW1lbnQtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1Db21tZW50UG9wdXBDb21wb25lbnQgZXh0ZW5kcyBBWEJhc2VQYWdlQ29tcG9uZW50IHtcbiAgcmVmcmVuY2VUeXBlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWZyZW5jZUlkID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICBzdWJqZWN0ID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xufVxuIiwiPGF4LWNvbnRlbnQ+XG4gIDxkaXYgY2xhc3M9XCJheC1wLTYgYXgtbWluLWgtWzMwdmhdIGF4LW92ZXJmbG93LXktYXV0b1wiPlxuICAgIDxheG0tY29tbWVudCBbcmVmcmVuY2VUeXBlXT1cInJlZnJlbmNlVHlwZSgpXCIgW3JlZnJlbmNlSWRdPVwicmVmcmVuY2VJZCgpXCIgW3N1YmplY3RdPVwic3ViamVjdCgpXCI+PC9heG0tY29tbWVudD5cbiAgPC9kaXY+XG48L2F4LWNvbnRlbnQ+XG48YXgtZm9vdGVyPlxuICA8YXgtcHJlZml4PjwvYXgtcHJlZml4PlxuICA8YXgtc3VmZml4PlxuICAgIDxheC1idXR0b25cbiAgICAgIFt0ZXh0XT1cIidAZ2VuZXJhbDphY3Rpb25zLmNsb3NlLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgIGxvb2s9XCJzb2xpZFwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgKG9uQ2xpY2spPVwiY2xvc2UoKVwiXG4gICAgPlxuICAgIDwvYXgtYnV0dG9uPlxuICA8L2F4LXN1ZmZpeD5cbjwvYXgtZm9vdGVyPlxuIl19","import { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { AXMCommentComponent } from '..';\nimport * as i0 from \"@angular/core\";\nexport class AXMCommentWidgetViewComponent extends AXPValueWidgetComponent {\n constructor() {\n super(...arguments);\n this.refrenceType = computed(() => this.options()?.['refrenceType'], ...(ngDevMode ? [{ debugName: \"refrenceType\" }] : []));\n this.refrenceId = computed(() => this.options()?.['refrenceId'], ...(ngDevMode ? [{ debugName: \"refrenceId\" }] : []));\n this.subject = computed(() => this.options()?.['subject'], ...(ngDevMode ? [{ debugName: \"subject\" }] : []));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.12\", type: AXMCommentWidgetViewComponent, isStandalone: true, selector: \"ng-component\", usesInheritance: true, ngImport: i0, template: `\n <axm-comment [refrenceId]=\"refrenceId()\" [refrenceType]=\"refrenceType()\" [subject]=\"subject()\"></axm-comment>\n `, isInline: true, dependencies: [{ kind: \"component\", type: AXMCommentComponent, selector: \"axm-comment\", inputs: [\"refrenceType\", \"refrenceId\", \"subject\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentWidgetViewComponent, decorators: [{\n type: Component,\n args: [{\n template: `\n <axm-comment [refrenceId]=\"refrenceId()\" [refrenceType]=\"refrenceType()\" [subject]=\"subject()\"></axm-comment>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMCommentComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC13aWRnZXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY29tbWVudC93aWRnZXQvY29tbWVudC13aWRnZXQtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sSUFBSSxDQUFDOztBQVN6QyxNQUFNLE9BQU8sNkJBQThCLFNBQVEsdUJBQWlFO0lBUHBIOztRQVFZLGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyx3REFBQyxDQUFDO1FBQ2hFLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLHNEQUFDLENBQUM7UUFDNUQsWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsbURBQUMsQ0FBQztLQUNqRTsrR0FKWSw2QkFBNkI7bUdBQTdCLDZCQUE2QiwrRkFOOUI7O0dBRVQsNERBRVMsbUJBQW1COzs0RkFFbEIsNkJBQTZCO2tCQVB6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRTs7R0FFVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7aUJBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQRW50aXR5UmVmZXJlbmNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUFZhbHVlV2lkZ2V0Q29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTUNvbW1lbnRDb21wb25lbnQgfSBmcm9tICcuLic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYFxuICAgIDxheG0tY29tbWVudCBbcmVmcmVuY2VJZF09XCJyZWZyZW5jZUlkKClcIiBbcmVmcmVuY2VUeXBlXT1cInJlZnJlbmNlVHlwZSgpXCIgW3N1YmplY3RdPVwic3ViamVjdCgpXCI+PC9heG0tY29tbWVudD5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtBWE1Db21tZW50Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNQ29tbWVudFdpZGdldFZpZXdDb21wb25lbnQgZXh0ZW5kcyBBWFBWYWx1ZVdpZGdldENvbXBvbmVudDxBWFBFbnRpdHlSZWZlcmVuY2UgJiB7IHN1YmplY3Q6IHN0cmluZyB9PiB7XG4gIHByb3RlY3RlZCByZWZyZW5jZVR5cGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uWydyZWZyZW5jZVR5cGUnXSk7XG4gIHByb3RlY3RlZCByZWZyZW5jZUlkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LlsncmVmcmVuY2VJZCddKTtcbiAgcHJvdGVjdGVkIHN1YmplY3QgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uWydzdWJqZWN0J10pO1xufVxuIl19","import { AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\nexport const AXPCommentWidget = {\n name: 'comment',\n title: 'Comments',\n description: 'Display and manage comments for entities',\n type: 'view',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n icon: 'fa-solid fa-comments',\n properties: [],\n components: {\n view: {\n component: () => import('./comment-widget-view.component').then((c) => c.AXMCommentWidgetViewComponent),\n },\n edit: {\n component: () => import('./comment-widget-view.component').then((c) => c.AXMCommentWidgetViewComponent),\n },\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC13aWRnZXQuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NvbW1lbnQvd2lkZ2V0L2NvbW1lbnQtd2lkZ2V0LmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFMUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQW9CO0lBQy9DLElBQUksRUFBRSxTQUFTO0lBQ2YsS0FBSyxFQUFFLFVBQVU7SUFDakIsV0FBVyxFQUFFLDBDQUEwQztJQUN2RCxJQUFJLEVBQUUsTUFBTTtJQUNaLFVBQVUsRUFBRSxFQUFFO0lBQ2QsTUFBTSxFQUFFLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDO0lBQ3pDLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsVUFBVSxFQUFFLEVBQUU7SUFDZCxVQUFVLEVBQUU7UUFDVixJQUFJLEVBQUU7WUFDSixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUM7U0FDeEc7UUFDRCxJQUFJLEVBQUU7WUFDSixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUM7U0FDeEc7S0FDRjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBXaWRnZXRDb25maWcsIEFYUFdpZGdldEdyb3VwRW51bSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3dpZGdldC1jb3JlJztcblxuZXhwb3J0IGNvbnN0IEFYUENvbW1lbnRXaWRnZXQ6IEFYUFdpZGdldENvbmZpZyA9IHtcbiAgbmFtZTogJ2NvbW1lbnQnLFxuICB0aXRsZTogJ0NvbW1lbnRzJyxcbiAgZGVzY3JpcHRpb246ICdEaXNwbGF5IGFuZCBtYW5hZ2UgY29tbWVudHMgZm9yIGVudGl0aWVzJyxcbiAgdHlwZTogJ3ZpZXcnLFxuICBjYXRlZ29yaWVzOiBbXSxcbiAgZ3JvdXBzOiBbQVhQV2lkZ2V0R3JvdXBFbnVtLkVudGl0eVdpZGdldF0sXG4gIGljb246ICdmYS1zb2xpZCBmYS1jb21tZW50cycsXG4gIHByb3BlcnRpZXM6IFtdLFxuICBjb21wb25lbnRzOiB7XG4gICAgdmlldzoge1xuICAgICAgY29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vY29tbWVudC13aWRnZXQtdmlldy5jb21wb25lbnQnKS50aGVuKChjKSA9PiBjLkFYTUNvbW1lbnRXaWRnZXRWaWV3Q29tcG9uZW50KSxcbiAgICB9LFxuICAgIGVkaXQ6IHtcbiAgICAgIGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL2NvbW1lbnQtd2lkZ2V0LXZpZXcuY29tcG9uZW50JykudGhlbigoYykgPT4gYy5BWE1Db21tZW50V2lkZ2V0Vmlld0NvbXBvbmVudCksXG4gICAgfSxcbiAgfSxcbn07XG4iXX0=","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWorkflowAction } from '@acorex/platform/workflow';\nimport { inject, Injectable, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXMCommentPopupStartAction extends AXPWorkflowAction {\n constructor() {\n super(...arguments);\n this.popupService = inject(AXPopupService);\n this.translate = inject(AXTranslationService);\n }\n async execute(context) {\n const comp = (await import('../popup/comment-popup.component')).AXMCommentPopupComponent;\n this.popupService.open(comp, {\n title: await this.translate.translateAsync('Comments'),\n size: 'lg',\n data: {\n refrenceType: signal(context.getVariable('options.refType')),\n refrenceId: signal(context.getVariable('options.refId')),\n subject: signal(context.getVariable('options.subject')),\n },\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentPopupStartAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentPopupStartAction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentPopupStartAction, decorators: [{\n type: Injectable\n }] });\nexport const AXMCommentPopupWorkflow = {\n startStepId: 'start',\n steps: {\n start: {\n action: 'show-comment-popup-action',\n },\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC53b3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jb21tZW50L3dvcmtmbG93L2NvbW1lbnQud29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBZSxpQkFBaUIsRUFBc0IsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNELE1BQU0sT0FBTywwQkFBMkIsU0FBUSxpQkFBaUI7SUFEakU7O1FBRVUsaUJBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0tBZWxEO0lBYlUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUEyQjtRQUNoRCxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQztRQUV6RixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDM0IsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO1lBQ3RELElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFO2dCQUNKLFlBQVksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM1RCxVQUFVLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3hELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3hEO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FoQlUsMEJBQTBCO21IQUExQiwwQkFBMEI7OzRGQUExQiwwQkFBMEI7a0JBRHRDLFVBQVU7O0FBb0JYLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFnQjtJQUNsRCxXQUFXLEVBQUUsT0FBTztJQUNwQixLQUFLLEVBQUU7UUFDTCxLQUFLLEVBQUU7WUFDTCxNQUFNLEVBQUUsMkJBQTJCO1NBQ3BDO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQb3B1cFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wdXAnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3csIEFYUFdvcmtmbG93QWN0aW9uLCBBWFBXb3JrZmxvd0NvbnRleHQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWE1Db21tZW50UG9wdXBTdGFydEFjdGlvbiBleHRlbmRzIEFYUFdvcmtmbG93QWN0aW9uIHtcbiAgcHJpdmF0ZSBwb3B1cFNlcnZpY2UgPSBpbmplY3QoQVhQb3B1cFNlcnZpY2UpO1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChBWFRyYW5zbGF0aW9uU2VydmljZSk7XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZXhlY3V0ZShjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb21wID0gKGF3YWl0IGltcG9ydCgnLi4vcG9wdXAvY29tbWVudC1wb3B1cC5jb21wb25lbnQnKSkuQVhNQ29tbWVudFBvcHVwQ29tcG9uZW50O1xuXG4gICAgdGhpcy5wb3B1cFNlcnZpY2Uub3Blbihjb21wLCB7XG4gICAgICB0aXRsZTogYXdhaXQgdGhpcy50cmFuc2xhdGUudHJhbnNsYXRlQXN5bmMoJ0NvbW1lbnRzJyksXG4gICAgICBzaXplOiAnbGcnLFxuICAgICAgZGF0YToge1xuICAgICAgICByZWZyZW5jZVR5cGU6IHNpZ25hbChjb250ZXh0LmdldFZhcmlhYmxlKCdvcHRpb25zLnJlZlR5cGUnKSksXG4gICAgICAgIHJlZnJlbmNlSWQ6IHNpZ25hbChjb250ZXh0LmdldFZhcmlhYmxlKCdvcHRpb25zLnJlZklkJykpLFxuICAgICAgICBzdWJqZWN0OiBzaWduYWwoY29udGV4dC5nZXRWYXJpYWJsZSgnb3B0aW9ucy5zdWJqZWN0JykpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQVhNQ29tbWVudFBvcHVwV29ya2Zsb3c6IEFYUFdvcmtmbG93ID0ge1xuICBzdGFydFN0ZXBJZDogJ3N0YXJ0JyxcbiAgc3RlcHM6IHtcbiAgICBzdGFydDoge1xuICAgICAgYWN0aW9uOiAnc2hvdy1jb21tZW50LXBvcHVwLWFjdGlvbicsXG4gICAgfSxcbiAgfSxcbn07XG4iXX0=","import { Injectable, effect, inject, signal } from '@angular/core';\nimport { AXMChatManagementService } from './features';\nimport * as i0 from \"@angular/core\";\nexport class AXMChatBadgeProviderSimple {\n constructor() {\n this.chatService = inject(AXMChatManagementService);\n this.key = 'badge-chat';\n this.count = signal(0, ...(ngDevMode ? [{ debugName: \"count\" }] : []));\n this.#eff = effect(async () => {\n const response = await this.chatService.listRooms();\n this.count.set(response.items.filter((i) => i.unreadCount > 0).length);\n }, ...(ngDevMode ? [{ debugName: \"#eff\" }] : []));\n }\n #eff;\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatBadgeProviderSimple, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatBadgeProviderSimple }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatBadgeProviderSimple, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvYmFkZ2UucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBR3RELE1BQU0sT0FBTywwQkFBMEI7SUFEdkM7UUFFbUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUV2RCxRQUFHLEdBQUcsWUFBWSxDQUFDO1FBQ25CLFVBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxpREFBQyxDQUFDO1FBRTNCLFNBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLENBQUMsZ0RBQUMsQ0FBQztLQUNKO0lBSkMsSUFBSSxDQUdEOytHQVRRLDBCQUEwQjttSEFBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQUR0QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQVGFza0JhZGdlUHJvdmlkZXIgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcbmltcG9ydCB7IEluamVjdGFibGUsIGVmZmVjdCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTUNoYXRNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4vZmVhdHVyZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNQ2hhdEJhZGdlUHJvdmlkZXJTaW1wbGUgaW1wbGVtZW50cyBBWFBUYXNrQmFkZ2VQcm92aWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhdFNlcnZpY2UgPSBpbmplY3QoQVhNQ2hhdE1hbmFnZW1lbnRTZXJ2aWNlKTtcblxuICByZWFkb25seSBrZXkgPSAnYmFkZ2UtY2hhdCc7XG4gIHJlYWRvbmx5IGNvdW50ID0gc2lnbmFsKDApO1xuXG4gICNlZmYgPSBlZmZlY3QoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5saXN0Um9vbXMoKTtcbiAgICB0aGlzLmNvdW50LnNldChyZXNwb25zZS5pdGVtcy5maWx0ZXIoKGkpID0+IGkudW5yZWFkQ291bnQgPiAwKS5sZW5ndGgpO1xuICB9KTtcbn1cbiJdfQ==","import { AXButtonModule } from '@acorex/components/button';\nimport { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXMChatNotificationContentComponent {\n constructor() {\n this.item = input(...(ngDevMode ? [undefined, { debugName: \"item\" }] : []));\n this.execute = output();\n }\n onMarkAsSeen(e) {\n e.nativeEvent.stopPropagation();\n this.execute.emit({ name: 'mark-as-seen' });\n }\n goToChat(e) {\n e.nativeEvent.stopPropagation();\n this.execute.emit({ name: 'go-to-chat' });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatNotificationContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.3.12\", type: AXMChatNotificationContentComponent, isStandalone: true, selector: \"axm-chat-notification-content\", inputs: { item: { classPropertyName: \"item\", publicName: \"item\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { execute: \"execute\" }, ngImport: i0, template: `\n <div class=\"ax-text-sm ax-mt-1 ax-line-clamp-2\">\n <p>{{ item()?.body || 'You have a new message.' }}</p>\n <div class=\"ax-flex ax-gap-2 ax-pt-2\">\n <!-- <ax-button (onClick)=\"onMarkAsSeen($event)\" [text]=\"'Mark as Seen'\"></ax-button>\n <ax-button (onClick)=\"goToChat($event)\" [text]=\"'Go to Chat'\"></ax-button> -->\n </div>\n </div>\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: AXButtonModule }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatNotificationContentComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'axm-chat-notification-content',\n template: `\n <div class=\"ax-text-sm ax-mt-1 ax-line-clamp-2\">\n <p>{{ item()?.body || 'You have a new message.' }}</p>\n <div class=\"ax-flex ax-gap-2 ax-pt-2\">\n <!-- <ax-button (onClick)=\"onMarkAsSeen($event)\" [text]=\"'Mark as Seen'\"></ax-button>\n <ax-button (onClick)=\"goToChat($event)\" [text]=\"'Go to Chat'\"></ax-button> -->\n </div>\n </div>\n `,\n standalone: true,\n imports: [CommonModule, AXButtonModule],\n }]\n }], propDecorators: { item: [{ type: i0.Input, args: [{ isSignal: true, alias: \"item\", required: false }] }], execute: [{ type: i0.Output, args: [\"execute\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1ub3RpZmljYXRpb24tY29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY2hhdC9jb21wb25lbnRzL2NoYXQtbm90aWZpY2F0aW9uLWNvbnRlbnQvY2hhdC1ub3RpZmljYXRpb24tY29udGVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBZ0J6RCxNQUFNLE9BQU8sbUNBQW1DO0lBZGhEO1FBZUUsU0FBSSxHQUFHLEtBQUssMERBQXVCLENBQUM7UUFDcEMsWUFBTyxHQUFHLE1BQU0sRUFBcUIsQ0FBQztLQVd2QztJQVRDLFlBQVksQ0FBQyxDQUFlO1FBQzFCLENBQUMsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsUUFBUSxDQUFDLENBQWU7UUFDdEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7K0dBWlUsbUNBQW1DO21HQUFuQyxtQ0FBbUMsMlBBWnBDOzs7Ozs7OztHQVFULDJEQUVTLFlBQVksOEJBQUUsY0FBYzs7NEZBRTNCLG1DQUFtQztrQkFkL0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsK0JBQStCO29CQUN6QyxRQUFRLEVBQUU7Ozs7Ozs7O0dBUVQ7b0JBQ0QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUM7aUJBQ3hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDbGlja0V2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWE1Ob3RpZmljYXRpb25JdGVtLCBBWFBOb3RpZmljYXRpb25Db250ZW50IH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50JztcbmltcG9ydCB7IEFYUEV4ZWN1dGVDb21tYW5kIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhtLWNoYXQtbm90aWZpY2F0aW9uLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJheC10ZXh0LXNtIGF4LW10LTEgYXgtbGluZS1jbGFtcC0yXCI+XG4gICAgICA8cD57eyBpdGVtKCk/LmJvZHkgfHwgJ1lvdSBoYXZlIGEgbmV3IG1lc3NhZ2UuJyB9fTwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0yIGF4LXB0LTJcIj5cbiAgICAgICAgPCEtLSA8YXgtYnV0dG9uIChvbkNsaWNrKT1cIm9uTWFya0FzU2VlbigkZXZlbnQpXCIgW3RleHRdPVwiJ01hcmsgYXMgU2VlbidcIj48L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LWJ1dHRvbiAob25DbGljayk9XCJnb1RvQ2hhdCgkZXZlbnQpXCIgW3RleHRdPVwiJ0dvIHRvIENoYXQnXCI+PC9heC1idXR0b24+IC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEFYQnV0dG9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNQ2hhdE5vdGlmaWNhdGlvbkNvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBBWFBOb3RpZmljYXRpb25Db250ZW50IHtcbiAgaXRlbSA9IGlucHV0PEFYTU5vdGlmaWNhdGlvbkl0ZW0+KCk7XG4gIGV4ZWN1dGUgPSBvdXRwdXQ8QVhQRXhlY3V0ZUNvbW1hbmQ+KCk7XG5cbiAgb25NYXJrQXNTZWVuKGU6IEFYQ2xpY2tFdmVudCkge1xuICAgIGUubmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5leGVjdXRlLmVtaXQoeyBuYW1lOiAnbWFyay1hcy1zZWVuJyB9KTtcbiAgfVxuXG4gIGdvVG9DaGF0KGU6IEFYQ2xpY2tFdmVudCkge1xuICAgIGUubmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5leGVjdXRlLmVtaXQoeyBuYW1lOiAnZ28tdG8tY2hhdCcgfSk7XG4gIH1cbn1cbiJdfQ==","//#region ---- Imports ----\nimport { AXP_NOTIFICATION_DEFINITION_PROVIDER, } from '@acorex/modules/notification-management';\nimport { Injector } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXMChatManagementService } from './chat-management.service';\nimport { AXMChatNotificationContentComponent } from './components/chat-notification-content/chat-notification-content.component';\n//#endregion\n//#region ---- Chat Notification Provider ----\n/**\n * Provides notification handling and content for Chat.\n */\nexport class AXMChatNotificationProvider {\n constructor(injector) {\n this.injector = injector;\n this.name = 'Chat';\n this.title = 'Chat';\n this.icon = 'fa-solid fa-comment-sms';\n }\n content() {\n return Promise.resolve(AXMChatNotificationContentComponent);\n }\n async execute(command, item) {\n const router = this.injector.get(Router);\n const chatService = this.injector.get(AXMChatManagementService);\n const activatedRoute = this.injector.get(ActivatedRoute);\n const roomId = item.data?.['roomId'];\n if (!roomId) {\n console.error('Room ID is missing from notification item.');\n return;\n }\n const app = activatedRoute.snapshot.firstChild?.paramMap.get('app') || 'platform';\n switch (command.name) {\n case 'mark-as-seen':\n await chatService.markRoomSeen(roomId);\n break;\n case 'go-to-chat':\n router.navigate([app, 'chat', roomId]);\n break;\n case 'click':\n router.navigate([app, 'chat', roomId]);\n break;\n default:\n break;\n }\n }\n}\n//#endregion\n//#region ---- Providers ----\n/**\n * Providers for chat notification definition registration.\n */\nexport const AXM_CHAT_NOTIFICATION_PROVIDERS = [\n {\n provide: AXP_NOTIFICATION_DEFINITION_PROVIDER,\n useFactory: (injector) => new AXMChatNotificationProvider(injector),\n deps: [Injector],\n multi: true,\n },\n];\n//#endregion\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1ub3RpZmljYXRpb24ucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY2hhdC9jaGF0LW5vdGlmaWNhdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFFL0IsT0FBTyxFQUVMLG9DQUFvQyxHQUVyQyxNQUFNLHlDQUF5QyxDQUFDO0FBRWpELE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSw0RUFBNEUsQ0FBQztBQUVqSSxZQUFZO0FBRVosa0RBQWtEO0FBRWxEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLDJCQUEyQjtJQUt0QyxZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBSnRDLFNBQUksR0FBRyxNQUFlLENBQUM7UUFDdkIsVUFBSyxHQUFHLE1BQU0sQ0FBQztRQUNmLFNBQUksR0FBRyx5QkFBeUIsQ0FBQztJQUVRLENBQUM7SUFFMUMsT0FBTztRQUNMLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQTBCLEVBQUUsSUFBeUI7UUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNoRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFXLENBQUM7UUFFL0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQzVELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUM7UUFFbEYsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsS0FBSyxjQUFjO2dCQUNqQixNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU07WUFDUixLQUFLLFlBQVk7Z0JBQ2YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxZQUFZO0FBRVosaUNBQWlDO0FBRWpDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQWU7SUFDekQ7UUFDRSxPQUFPLEVBQUUsb0NBQW9DO1FBQzdDLFVBQVUsRUFBRSxDQUFDLFFBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksMkJBQTJCLENBQUMsUUFBUSxDQUFDO1FBQzdFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUNoQixLQUFLLEVBQUUsSUFBSTtLQUNaO0NBQ0YsQ0FBQztBQUVGLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gLS0tLSAgIEltcG9ydHMgICAtLS0tXG5cbmltcG9ydCB7XG4gIEFYTU5vdGlmaWNhdGlvbkl0ZW0sXG4gIEFYUF9OT1RJRklDQVRJT05fREVGSU5JVElPTl9QUk9WSURFUixcbiAgQVhQTm90aWZpY2F0aW9uRGVmaW5pdGlvblByb3ZpZGVyLFxufSBmcm9tICdAYWNvcmV4L21vZHVsZXMvbm90aWZpY2F0aW9uLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQRXhlY3V0ZUNvbW1hbmQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgSW5qZWN0b3IsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFYTUNoYXRNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4vY2hhdC1tYW5hZ2VtZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNQ2hhdE5vdGlmaWNhdGlvbkNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC1ub3RpZmljYXRpb24tY29udGVudC9jaGF0LW5vdGlmaWNhdGlvbi1jb250ZW50LmNvbXBvbmVudCc7XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIENoYXQgTm90aWZpY2F0aW9uIFByb3ZpZGVyICAgLS0tLVxuXG4vKipcbiAqIFByb3ZpZGVzIG5vdGlmaWNhdGlvbiBoYW5kbGluZyBhbmQgY29udGVudCBmb3IgQ2hhdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFYTUNoYXROb3RpZmljYXRpb25Qcm92aWRlciBpbXBsZW1lbnRzIEFYUE5vdGlmaWNhdGlvbkRlZmluaXRpb25Qcm92aWRlciB7XG4gIG5hbWUgPSAnQ2hhdCcgYXMgY29uc3Q7XG4gIHRpdGxlID0gJ0NoYXQnO1xuICBpY29uID0gJ2ZhLXNvbGlkIGZhLWNvbW1lbnQtc21zJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICBjb250ZW50KCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQVhNQ2hhdE5vdGlmaWNhdGlvbkNvbnRlbnRDb21wb25lbnQpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZShjb21tYW5kOiBBWFBFeGVjdXRlQ29tbWFuZCwgaXRlbTogQVhNTm90aWZpY2F0aW9uSXRlbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgY29uc3QgY2hhdFNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChBWE1DaGF0TWFuYWdlbWVudFNlcnZpY2UpO1xuICAgIGNvbnN0IGFjdGl2YXRlZFJvdXRlID0gdGhpcy5pbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpO1xuICAgIGNvbnN0IHJvb21JZCA9IGl0ZW0uZGF0YT8uWydyb29tSWQnXSBhcyBzdHJpbmc7XG5cbiAgICBpZiAoIXJvb21JZCkge1xuICAgICAgY29uc29sZS5lcnJvcignUm9vbSBJRCBpcyBtaXNzaW5nIGZyb20gbm90aWZpY2F0aW9uIGl0ZW0uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXBwID0gYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZmlyc3RDaGlsZD8ucGFyYW1NYXAuZ2V0KCdhcHAnKSB8fCAncGxhdGZvcm0nO1xuXG4gICAgc3dpdGNoIChjb21tYW5kLm5hbWUpIHtcbiAgICAgIGNhc2UgJ21hcmstYXMtc2Vlbic6XG4gICAgICAgIGF3YWl0IGNoYXRTZXJ2aWNlLm1hcmtSb29tU2Vlbihyb29tSWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dvLXRvLWNoYXQnOlxuICAgICAgICByb3V0ZXIubmF2aWdhdGUoW2FwcCwgJ2NoYXQnLCByb29tSWRdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjbGljayc6XG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbYXBwLCAnY2hhdCcsIHJvb21JZF0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBQcm92aWRlcnMgICAtLS0tXG5cbi8qKlxuICogUHJvdmlkZXJzIGZvciBjaGF0IG5vdGlmaWNhdGlvbiBkZWZpbml0aW9uIHJlZ2lzdHJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFYTV9DSEFUX05PVElGSUNBVElPTl9QUk9WSURFUlM6IFByb3ZpZGVyW10gPSBbXG4gIHtcbiAgICBwcm92aWRlOiBBWFBfTk9USUZJQ0FUSU9OX0RFRklOSVRJT05fUFJPVklERVIsXG4gICAgdXNlRmFjdG9yeTogKGluamVjdG9yOiBJbmplY3RvcikgPT4gbmV3IEFYTUNoYXROb3RpZmljYXRpb25Qcm92aWRlcihpbmplY3RvciksXG4gICAgZGVwczogW0luamVjdG9yXSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfSxcbl07XG5cbi8vI2VuZHJlZ2lvblxuIl19","//#region ---- Imports ----\nimport { AXP_NOTIFICATION_DEFINITION_PROVIDER, } from '@acorex/modules/notification-management';\nimport { Injector } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n//#endregion\n//#region ---- Comment Notification Provider ----\n/**\n * Provides notification handling for Comment feature.\n */\nexport class AXMCommentNotificationProvider {\n constructor(injector) {\n this.injector = injector;\n this.name = 'Comment';\n this.title = 'Comment';\n this.icon = 'fa-solid fa-comment';\n }\n async execute(command, item) {\n const router = this.injector.get(Router);\n const activatedRoute = this.injector.get(ActivatedRoute);\n const app = activatedRoute.snapshot.firstChild?.paramMap.get('app') || 'platform';\n switch (command.name) {\n case 'click':\n if (item.data?.['moduleName'] && item.data?.['entityName'] && item.data?.['entityId']) {\n router.navigate([\n app,\n 'm',\n item.data?.['moduleName'],\n 'e',\n item.data?.['entityName'],\n item.data?.['entityId'],\n ]);\n }\n break;\n default:\n break;\n }\n }\n}\n//#endregion\n//#region ---- Providers ----\n/**\n * Providers for comment notification definition registration.\n */\nexport const AXM_COMMENT_NOTIFICATION_PROVIDERS = [\n {\n provide: AXP_NOTIFICATION_DEFINITION_PROVIDER,\n useFactory: (injector) => new AXMCommentNotificationProvider(injector),\n deps: [Injector],\n multi: true,\n },\n];\n//#endregion\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1ub3RpZmljYXRpb24ucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY29tbWVudC9jb21tZW50LW5vdGlmaWNhdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFFL0IsT0FBTyxFQUVMLG9DQUFvQyxHQUVyQyxNQUFNLHlDQUF5QyxDQUFDO0FBRWpELE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxZQUFZO0FBRVoscURBQXFEO0FBRXJEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLDhCQUE4QjtJQUt6QyxZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBSnRDLFNBQUksR0FBRyxTQUFrQixDQUFDO1FBQzFCLFVBQUssR0FBRyxTQUFTLENBQUM7UUFDbEIsU0FBSSxHQUFHLHFCQUFxQixDQUFDO0lBRVksQ0FBQztJQUUxQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQTBCLEVBQUUsSUFBeUI7UUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFekQsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUM7UUFFbEYsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsS0FBSyxPQUFPO2dCQUNWLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDdEYsTUFBTSxDQUFDLFFBQVEsQ0FBQzt3QkFDZCxHQUFHO3dCQUNILEdBQUc7d0JBQ0gsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQzt3QkFDekIsR0FBRzt3QkFDSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDO3dCQUN6QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO3FCQUN4QixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxZQUFZO0FBRVosaUNBQWlDO0FBRWpDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQWU7SUFDNUQ7UUFDRSxPQUFPLEVBQUUsb0NBQW9DO1FBQzdDLFVBQVUsRUFBRSxDQUFDLFFBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksOEJBQThCLENBQUMsUUFBUSxDQUFDO1FBQ2hGLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUNoQixLQUFLLEVBQUUsSUFBSTtLQUNaO0NBQ0YsQ0FBQztBQUVGLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gLS0tLSAgIEltcG9ydHMgICAtLS0tXG5cbmltcG9ydCB7XG4gIEFYTU5vdGlmaWNhdGlvbkl0ZW0sXG4gIEFYUF9OT1RJRklDQVRJT05fREVGSU5JVElPTl9QUk9WSURFUixcbiAgQVhQTm90aWZpY2F0aW9uRGVmaW5pdGlvblByb3ZpZGVyLFxufSBmcm9tICdAYWNvcmV4L21vZHVsZXMvbm90aWZpY2F0aW9uLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQRXhlY3V0ZUNvbW1hbmQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgSW5qZWN0b3IsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgQ29tbWVudCBOb3RpZmljYXRpb24gUHJvdmlkZXIgICAtLS0tXG5cbi8qKlxuICogUHJvdmlkZXMgbm90aWZpY2F0aW9uIGhhbmRsaW5nIGZvciBDb21tZW50IGZlYXR1cmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBBWE1Db21tZW50Tm90aWZpY2F0aW9uUHJvdmlkZXIgaW1wbGVtZW50cyBBWFBOb3RpZmljYXRpb25EZWZpbml0aW9uUHJvdmlkZXIge1xuICBuYW1lID0gJ0NvbW1lbnQnIGFzIGNvbnN0O1xuICB0aXRsZSA9ICdDb21tZW50JztcbiAgaWNvbiA9ICdmYS1zb2xpZCBmYS1jb21tZW50JztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICBhc3luYyBleGVjdXRlKGNvbW1hbmQ6IEFYUEV4ZWN1dGVDb21tYW5kLCBpdGVtOiBBWE1Ob3RpZmljYXRpb25JdGVtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgcm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICBjb25zdCBhY3RpdmF0ZWRSb3V0ZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcblxuICAgIGNvbnN0IGFwcCA9IGFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmZpcnN0Q2hpbGQ/LnBhcmFtTWFwLmdldCgnYXBwJykgfHwgJ3BsYXRmb3JtJztcblxuICAgIHN3aXRjaCAoY29tbWFuZC5uYW1lKSB7XG4gICAgICBjYXNlICdjbGljayc6XG4gICAgICAgIGlmIChpdGVtLmRhdGE/LlsnbW9kdWxlTmFtZSddICYmIGl0ZW0uZGF0YT8uWydlbnRpdHlOYW1lJ10gJiYgaXRlbS5kYXRhPy5bJ2VudGl0eUlkJ10pIHtcbiAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoW1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgJ20nLFxuICAgICAgICAgICAgaXRlbS5kYXRhPy5bJ21vZHVsZU5hbWUnXSxcbiAgICAgICAgICAgICdlJyxcbiAgICAgICAgICAgIGl0ZW0uZGF0YT8uWydlbnRpdHlOYW1lJ10sXG4gICAgICAgICAgICBpdGVtLmRhdGE/LlsnZW50aXR5SWQnXSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBQcm92aWRlcnMgICAtLS0tXG5cbi8qKlxuICogUHJvdmlkZXJzIGZvciBjb21tZW50IG5vdGlmaWNhdGlvbiBkZWZpbml0aW9uIHJlZ2lzdHJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFYTV9DT01NRU5UX05PVElGSUNBVElPTl9QUk9WSURFUlM6IFByb3ZpZGVyW10gPSBbXG4gIHtcbiAgICBwcm92aWRlOiBBWFBfTk9USUZJQ0FUSU9OX0RFRklOSVRJT05fUFJPVklERVIsXG4gICAgdXNlRmFjdG9yeTogKGluamVjdG9yOiBJbmplY3RvcikgPT4gbmV3IEFYTUNvbW1lbnROb3RpZmljYXRpb25Qcm92aWRlcihpbmplY3RvciksXG4gICAgZGVwczogW0luamVjdG9yXSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfSxcbl07XG5cbi8vI2VuZHJlZ2lvblxuIl19","import { AXPEntityCommandScope } from '@acorex/platform/common';\nimport { ensureListActions, actionExists } from '@acorex/platform/layout/entity';\nexport const commentsPlugin = {\n name: 'comments',\n order: 50,\n apply: (ctx) => {\n // Ensure group exists\n const groups = ctx.groups.list() ?? [];\n if (!groups.some((g) => g.id === 'comments')) {\n ctx.groups.add({ id: 'comments', title: 'Comments' });\n }\n // Ensure property exists\n const props = ctx.properties.list();\n if (!props.some((p) => p.name === 'comments')) {\n ctx.properties.add({\n name: 'comments',\n title: 'Comments',\n groupId: 'comments',\n schema: {\n dataType: 'object',\n interface: {\n type: 'comment',\n options: {\n refrenceType: `${ctx.entity.module}.${ctx.entity.name}`,\n refrenceId: '{{ context.eval(\"id\") }}',\n subject: '{{ context.eval(\"title\") }}',\n },\n },\n },\n });\n }\n // Ensure single view section and property layout exists\n ctx.interfaces.master.single.update((single) => {\n const next = single ?? { title: ctx.entity.title, sections: [], properties: [] };\n next.sections = next.sections ?? [];\n if (!next.sections.some((s) => s.id === 'comments')) {\n next.sections.push({ id: 'comments' });\n }\n next.properties = next.properties ?? [];\n if (!next.properties.some((p) => p.name === 'comments')) {\n next.properties.push({\n name: 'comments',\n layout: {\n label: { visible: false },\n positions: { lg: { colSpan: 12, order: 7 } },\n },\n });\n }\n //\n return next;\n });\n // Ensure list action to open comments popup exists\n ensureListActions(ctx);\n ctx.interfaces.update((i) => {\n const actions = i.master.list.actions;\n const cmdName = 'show-comment-popup';\n if (!actionExists(actions, cmdName)) {\n actions.push({\n title: '@conversation:actions.show-comment-popup',\n command: {\n name: cmdName,\n options: {\n refId: '{{ context.eval(\"id\") }}',\n refType: `${ctx.entity.module}.${ctx.entity.name}`,\n subject: '{{ context.eval(\"title\") }}',\n },\n },\n priority: 'secondary',\n type: 'comments',\n separated: true,\n scope: AXPEntityCommandScope.Individual,\n });\n }\n return i;\n });\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudHMucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NvbW1lbnQvY29tbWVudHMucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIscUJBQXFCLEVBQW1DLE1BQU0seUJBQXlCLENBQUM7QUFDbEgsT0FBTyxFQUF5QixpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQTBCO0lBQ2pELElBQUksRUFBRSxVQUFVO0lBQ2hCLEtBQUssRUFBRSxFQUFFO0lBQ1QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDWCxzQkFBc0I7UUFDdEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBUyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDakQsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7Z0JBQ2YsSUFBSSxFQUFF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QUUscUJBQXFCLENBQUMsVUFBVTtpQkFDMUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUNELE9BQU8sQ0FBUSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBFbnRpdHlBY3Rpb24sIEFYUEVudGl0eUNvbW1hbmRTY29wZSwgQVhQRW50aXR5TWFzdGVyU2luZ2xlTGF5b3V0VmlldyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUEVudGl0eUFjdGlvblBsdWdpbiwgZW5zdXJlTGlzdEFjdGlvbnMsIGFjdGlvbkV4aXN0cyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5cbmV4cG9ydCBjb25zdCBjb21tZW50c1BsdWdpbjogQVhQRW50aXR5QWN0aW9uUGx1Z2luID0ge1xuICAgIG5hbWU6ICdjb21tZW50cycsXG4gICAgb3JkZXI6IDUwLFxuICAgIGFwcGx5OiAoY3R4KSA9PiB7XG4gICAgICAgIC8vIEVuc3VyZSBncm91cCBleGlzdHNcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gY3R4Lmdyb3Vwcy5saXN0KCkgPz8gW107XG4gICAgICAgIGlmICghZ3JvdXBzLnNvbWUoKGc6IGFueSkgPT4gZy5pZCA9PT0gJ2NvbW1lbnRzJykpIHtcbiAgICAgICAgICAgIGN0eC5ncm91cHMuYWRkKHsgaWQ6ICdjb21tZW50cycsIHRpdGxlOiAnQ29tbWVudHMnIH0gYXMgYW55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVuc3VyZSBwcm9wZXJ0eSBleGlzdHNcbiAgICAgICAgY29uc3QgcHJvcHMgPSBjdHgucHJvcGVydGllcy5saXN0KCk7XG4gICAgICAgIGlmICghcHJvcHMuc29tZSgocDogYW55KSA9PiBwLm5hbWUgPT09ICdjb21tZW50cycpKSB7XG4gICAgICAgICAgICBjdHgucHJvcGVydGllcy5hZGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjb21tZW50cycsXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdDb21tZW50cycsXG4gICAgICAgICAgICAgICAgZ3JvdXBJZDogJ2NvbW1lbnRzJyxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb21tZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZW5jZVR5cGU6IGAke2N0eC5lbnRpdHkubW9kdWxlfS4ke2N0eC5lbnRpdHkubmFtZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlbmNlSWQ6ICd7eyBjb250ZXh0LmV2YWwoXCJpZFwiKSB9fScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdDogJ3t7IGNvbnRleHQuZXZhbChcInRpdGxlXCIpIH19JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0gYXMgYW55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVuc3VyZSBzaW5nbGUgdmlldyBzZWN0aW9uIGFuZCBwcm9wZXJ0eSBsYXlvdXQgZXhpc3RzXG4gICAgICAgIGN0eC5pbnRlcmZhY2VzLm1hc3Rlci5zaW5nbGUudXBkYXRlKChzaW5nbGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQ6IGFueSA9IHNpbmdsZSA/PyB7IHRpdGxlOiBjdHguZW50aXR5LnRpdGxlLCBzZWN0aW9uczogW10sIHByb3BlcnRpZXM6IFtdIH0gYXMgQVhQRW50aXR5TWFzdGVyU2luZ2xlTGF5b3V0VmlldztcbiAgICAgICAgICAgIG5leHQuc2VjdGlvbnMgPSBuZXh0LnNlY3Rpb25zID8/IFtdO1xuICAgICAgICAgICAgaWYgKCFuZXh0LnNlY3Rpb25zLnNvbWUoKHM6IGFueSkgPT4gcy5pZCA9PT0gJ2NvbW1lbnRzJykpIHtcbiAgICAgICAgICAgICAgICBuZXh0LnNlY3Rpb25zLnB1c2goeyBpZDogJ2NvbW1lbnRzJyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQucHJvcGVydGllcyA9IG5leHQucHJvcGVydGllcyA/PyBbXTtcbiAgICAgICAgICAgIGlmICghbmV4dC5wcm9wZXJ0aWVzLnNvbWUoKHA6IGFueSkgPT4gcC5uYW1lID09PSAnY29tbWVudHMnKSkge1xuICAgICAgICAgICAgICAgIG5leHQucHJvcGVydGllcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogeyB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7IGxnOiB7IGNvbFNwYW46IDEyLCBvcmRlcjogNyB9IH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEVuc3VyZSBsaXN0IGFjdGlvbiB0byBvcGVuIGNvbW1lbnRzIHBvcHVwIGV4aXN0c1xuICAgICAgICBlbnN1cmVMaXN0QWN0aW9ucyhjdHgpO1xuICAgICAgICBjdHguaW50ZXJmYWNlcy51cGRhdGUoKGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSAoaSBhcyBhbnkpLm1hc3Rlci5saXN0LmFjdGlvbnMgYXMgQVhQRW50aXR5QWN0aW9uW107XG4gICAgICAgICAgICBjb25zdCBjbWROYW1lID0gJ3Nob3ctY29tbWVudC1wb3B1cCc7XG4gICAgICAgICAgICBpZiAoIWFjdGlvbkV4aXN0cyhhY3Rpb25zLCBjbWROYW1lKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnQGNvbnZlcnNhdGlvbjphY3Rpb25zLnNob3ctY29tbWVudC1wb3B1cCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNtZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmSWQ6ICd7eyBjb250ZXh0LmV2YWwoXCJpZFwiKSB9fScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmVHlwZTogYCR7Y3R4LmVudGl0eS5tb2R1bGV9LiR7Y3R4LmVudGl0eS5uYW1lfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdDogJ3t7IGNvbnRleHQuZXZhbChcInRpdGxlXCIpIH19JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiAnc2Vjb25kYXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzY29wZTogQVhQRW50aXR5Q29tbWFuZFNjb3BlLkluZGl2aWR1YWwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaSBhcyBhbnk7XG4gICAgICAgIH0pO1xuICAgIH0sXG59O1xuXG5cbiJdfQ==","import { AXConversationModule } from '@acorex/components/conversation';\nimport { AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { AXPRootLayoutComponent } from '@acorex/platform/themes/default';\nimport { DatePipe } from '@angular/common';\nimport { importProvidersFrom, NgModule } from '@angular/core';\nimport { RouterModule, ROUTES } from '@angular/router';\n// Entity Modules\nimport { AXMConversationTabEntityModule, AXMRoomEntityModule, AXMMessageEntityModule, } from './entities';\nimport { AXMConversationModuleEntityProvider } from './entity.provider';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXP_MENU_PROVIDER } from '@acorex/platform/common';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXP_TASK_BADGE_PROVIDERS } from '@acorex/platform/layout/components';\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport { AXMChatBadgeProviderSimple } from './badge.provider';\nimport { AXMChatService, AXMChatServiceImpl, AXMCommentPopupStartAction, AXMCommentPopupWorkflow, AXMCommentRealtimeService, AXMCommentRealtimeServiceImpl, AXMCommentService, AXMCommentServiceImpl, AXPCommentWidget, } from './features';\nimport { AXM_CHAT_NOTIFICATION_PROVIDERS } from './features/chat/chat-notification.provider';\nimport { AXMChatRealtimeService, AXMChatRealtimeServiceImpl } from './features/chat/chat-realtime.service';\nimport { AXM_COMMENT_NOTIFICATION_PROVIDERS } from './features/comment/comment-notification.provider';\nimport { commentsPlugin } from './features/comment/comments.plugin';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/platform/layout/widget-core\";\nimport * as i2 from \"@acorex/platform/workflow\";\nfunction routesFactory() {\n const routes = [\n {\n path: ':app/chat',\n canActivate: [AXPAuthGuard],\n loadComponent: () => {\n return AXPRootLayoutComponent;\n },\n title: 'Chat',\n children: [\n {\n path: '',\n loadComponent: () => import('./features/chat/chat.component').then((c) => c.AXMChatComponent),\n data: { reuse: true },\n children: [\n {\n path: ':id',\n loadComponent: () => import('./features/chat/components/chat-preview/chat-preview.component').then((c) => c.AXMChatPreviewComponent),\n },\n ],\n },\n ],\n },\n {\n path: ':app/comments/t/:refrenceType/i/:refrenceId/s/:subject',\n title: 'Comments',\n canActivate: [AXPAuthGuard],\n loadComponent: () => AXPRootLayoutComponent,\n // resolve: {\n // refrenceType: {\n // resolve: refrenceTypeResolver,\n // },\n // refrenceId: {\n // resolve: refrenceIdResolver,\n // },\n // subject: {\n // resolve: subjectResolver,\n // },\n // },\n children: [\n {\n path: '',\n loadComponent: () => import('./features/comment/comment.component').then((c) => c.AXMCommentComponent),\n },\n ],\n },\n {\n path: ':app/comments/',\n title: 'Comments',\n canActivate: [AXPAuthGuard],\n loadComponent: () => AXPRootLayoutComponent,\n children: [\n {\n path: '',\n loadComponent: () => import('./features/comment/comment.component').then((c) => c.AXMCommentComponent),\n },\n ],\n },\n ];\n return routes;\n}\nexport class AXMConversationModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModule, imports: [i1.AXPWidgetCoreModule, i2.AXPWorkflowModule, \n // Entity Modules\n AXMConversationTabEntityModule,\n AXMRoomEntityModule,\n AXMMessageEntityModule], exports: [\n // Modules\n RouterModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModule, providers: [\n // Chat and Comment Services\n {\n provide: AXMChatService,\n useClass: AXMChatServiceImpl,\n },\n {\n provide: AXMChatRealtimeService,\n useClass: AXMChatRealtimeServiceImpl,\n },\n {\n provide: AXMCommentService,\n useClass: AXMCommentServiceImpl,\n },\n {\n provide: AXMCommentRealtimeService,\n useClass: AXMCommentRealtimeServiceImpl,\n },\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: commentsPlugin,\n multi: true,\n },\n // Entity Provider\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMConversationModuleEntityProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_TASK_BADGE_PROVIDERS,\n useClass: AXMChatBadgeProviderSimple,\n multi: true,\n },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useFactory: async () => {\n const provider = (await import('./permission-definition.provider')).AXMPermissionDefinitionProvider;\n return new provider();\n },\n multi: true,\n },\n // Menu Provider\n // {\n // provide: AXP_MENU_PROVIDER,\n // useClass: AXMConversationMenuProvider,\n // multi: true,\n // },\n // Conversation Module\n importProvidersFrom(AXConversationModule.forRoot()),\n DatePipe,\n ...AXM_CHAT_NOTIFICATION_PROVIDERS,\n ...AXM_COMMENT_NOTIFICATION_PROVIDERS,\n ], imports: [AXPWidgetCoreModule.forChild({\n widgets: [AXPCommentWidget],\n }),\n AXPWorkflowModule.forChild({\n actions: {\n 'show-comment-popup-action': AXMCommentPopupStartAction,\n },\n workflows: {\n 'show-comment-popup': AXMCommentPopupWorkflow,\n },\n }),\n // Entity Modules\n AXMConversationTabEntityModule,\n AXMRoomEntityModule,\n AXMMessageEntityModule, \n // Modules\n RouterModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [],\n imports: [\n AXPWidgetCoreModule.forChild({\n widgets: [AXPCommentWidget],\n }),\n AXPWorkflowModule.forChild({\n actions: {\n 'show-comment-popup-action': AXMCommentPopupStartAction,\n },\n workflows: {\n 'show-comment-popup': AXMCommentPopupWorkflow,\n },\n }),\n // Entity Modules\n AXMConversationTabEntityModule,\n AXMRoomEntityModule,\n AXMMessageEntityModule,\n ],\n exports: [\n // Modules\n RouterModule,\n ],\n providers: [\n // Chat and Comment Services\n {\n provide: AXMChatService,\n useClass: AXMChatServiceImpl,\n },\n {\n provide: AXMChatRealtimeService,\n useClass: AXMChatRealtimeServiceImpl,\n },\n {\n provide: AXMCommentService,\n useClass: AXMCommentServiceImpl,\n },\n {\n provide: AXMCommentRealtimeService,\n useClass: AXMCommentRealtimeServiceImpl,\n },\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: commentsPlugin,\n multi: true,\n },\n // Entity Provider\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMConversationModuleEntityProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_TASK_BADGE_PROVIDERS,\n useClass: AXMChatBadgeProviderSimple,\n multi: true,\n },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useFactory: async () => {\n const provider = (await import('./permission-definition.provider')).AXMPermissionDefinitionProvider;\n return new provider();\n },\n multi: true,\n },\n // Menu Provider\n // {\n // provide: AXP_MENU_PROVIDER,\n // useClass: AXMConversationMenuProvider,\n // multi: true,\n // },\n // Conversation Module\n importProvidersFrom(AXConversationModule.forRoot()),\n DatePipe,\n ...AXM_CHAT_NOTIFICATION_PROVIDERS,\n ...AXM_COMMENT_NOTIFICATION_PROVIDERS,\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9jb252ZXJzYXRpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9ELGlCQUFpQjtBQUNqQixPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLG1CQUFtQixFQUNuQixzQkFBc0IsR0FDdkIsTUFBTSxZQUFZLENBQUM7QUFFcEIsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWxELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSwwQkFBMEIsRUFB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QW1CLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ25ELFFBQVE7d0JBQ1IsR0FBRywrQkFBK0I7d0JBQ2xDLEdBQUcsa0NBQWtDO3FCQUN0QztpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29udmVyc2F0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbnZlcnNhdGlvbic7XG5pbXBvcnQgeyBBWFBBdXRoR3VhcmQsIEFYUF9QRVJNSVNTSU9OX0RFRklOSVRJT05fUFJPVklERVIgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2F1dGgnO1xuaW1wb3J0IHsgQVhQX0VOVElUWV9BQ1RJT05fUExVR0lOLCBBWFBfRU5USVRZX0RFRklOSVRJT05fTE9BREVSIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYUFJvb3RMYXlvdXRDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3RoZW1lcy9kZWZhdWx0JztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGltcG9ydFByb3ZpZGVyc0Zyb20sIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUsIFJvdXRlcywgUk9VVEVTIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuLy8gRW50aXR5IE1vZHVsZXNcbmltcG9ydCB7XG4gIEFYTUNvbnZlcnNhdGlvblRhYkVudGl0eU1vZHVsZSxcbiAgQVhNUm9vbUVudGl0eU1vZHVsZSxcbiAgQVhNTWVzc2FnZUVudGl0eU1vZHVsZSxcbn0gZnJvbSAnLi9lbnRpdGllcyc7XG5cbmltcG9ydCB7IEFYTUNvbnZlcnNhdGlvbk1vZHVsZUVudGl0eVByb3ZpZGVyIH0gZnJvbSAnLi9lbnRpdHkucHJvdmlkZXInO1xuaW1wb3J0IHsgQVhNTWVudVByb3ZpZGVyIH0gZnJvbSAnLi9tZW51LnByb3ZpZGVyJztcblxuaW1wb3J0IHsgQVhQX01FTlVfUFJPVklERVIgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBXaWRnZXRDb3JlTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgQVhQX1RBU0tfQkFER0VfUFJPVklERVJTIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd01vZHVsZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vd29ya2Zsb3cnO1xuaW1wb3J0IHsgQVhNQ2hhdEJhZGdlUHJvdmlkZXJTaW1wbGUgfSBmcm9tICcuL2JhZGdlLnByb3ZpZGVyJztcbmltcG9ydCB7XG4gIEFYTUNoYXRTZXJ2aWNlLFxuICBBWE1DaGF0U2VydmljZUltcGwsXG4gIEFYTUNvbW1lbnRQb3B1cFN0YXJ0QWN0aW9uLFxuICBBWE1Db21tZW50UG9wdXBXb3JrZmxvdyxcbiAgQVhNQ29tbWVudFJlYWx0aW1lU2VydmljZSxcbiAgQVhNQ29tbWVudFJlYWx0aW1lU2VydmljZUltcGwsXG4gIEFYTUNvbW1lbnRTZXJ2aWNlLFxuICBBWE1Db21tZW50U2VydmljZUltcGwsXG4gIEFYUENvbW1lbnRXaWRnZXQsXG59IGZyb20gJy4vZmVhdHVyZXMnO1xuaW1wb3J0IHsgQVhNX0NIQVRfTk9USUZJQ0FUSU9OX1BST1ZJREVSUyB9IGZyb20gJy4vZmVhdHVyZXMvY2hhdC9jaGF0LW5vdGlmaWNhdGlvbi5wcm92aWRlcic7XG5pbXBvcnQgeyBBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlLCBBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlSW1wbCB9IGZyb20gJy4vZmVhdHVyZXMvY2hhdC9jaGF0LXJlYWx0aW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNX0NPTU1FTlRfTk9USUZJQ0FUSU9OX1BST1ZJREVSUyB9IGZyb20gJy4vZmVhdHVyZXMvY29tbWVudC9jb21tZW50LW5vdGlmaWNhdGlvbi5wcm92aWRlcic7XG5pbXBvcnQgeyBjb21tZW50c1BsdWdpbiB9IGZyb20gJy4vZmVhdHVyZXMvY29tbWVudC9jb21tZW50cy5wbHVnaW4nO1xuXG5mdW5jdGlvbiByb3V0ZXNGYWN0b3J5KCk6IFJvdXRlcyB7XG4gIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICAgIHtcbiAgICAgIHBhdGg6ICc6YXBwL2NoYXQnLFxuICAgICAgY2FuQWN0aXZhdGU6IFtBWFBBdXRoR3VhcmRdLFxuICAgICAgbG9hZENvbXBvbmVudDogKCkgPT4ge1xuICAgICAgICByZXR1cm4gQVhQUm9vdExheW91dENvbXBvbmVudDtcbiAgICAgIH0sXG4gICAgICB0aXRsZTogJ0NoYXQnLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIHBhdGg6ICcnLFxuICAgICAgICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9mZWF0dXJlcy9jaGF0L2NoYXQuY29tcG9uZW50JykudGhlbigoYykgPT4gYy5BWE1DaGF0Q29tcG9uZW50KSxcbiAgICAgICAgICBkYXRhOiB7IHJldXNlOiB0cnVlIH0sXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcGF0aDogJzppZCcsXG4gICAgICAgICAgICAgIGxvYWRDb21wb25lbnQ6ICgpID0+XG4gICAgICAgICAgICAgICAgaW1wb3J0KCcuL2ZlYXR1cmVzL2NoYXQvY29tcG9uZW50cy9jaGF0LXByZXZpZXcvY2hhdC1wcmV2aWV3LmNvbXBvbmVudCcpLnRoZW4oXG4gICAgICAgICAgICAgICAgICAoYykgPT4gYy5BWE1DaGF0UHJldmlld0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHBhdGg6ICc6YXBwL2NvbW1lbnRzL3QvOnJlZnJlbmNlVHlwZS9pLzpyZWZyZW5jZUlkL3MvOnN1YmplY3QnLFxuICAgICAgdGl0bGU6ICdDb21tZW50cycsXG4gICAgICBjYW5BY3RpdmF0ZTogW0FYUEF1dGhHdWFyZF0sXG4gICAgICBsb2FkQ29tcG9uZW50OiAoKSA9PiBBWFBSb290TGF5b3V0Q29tcG9uZW50LFxuICAgICAgLy8gcmVzb2x2ZToge1xuICAgICAgLy8gICByZWZyZW5jZVR5cGU6IHtcbiAgICAgIC8vICAgICByZXNvbHZlOiByZWZyZW5jZVR5cGVSZXNvbHZlcixcbiAgICAgIC8vICAgfSxcbiAgICAgIC8vICAgcmVmcmVuY2VJZDoge1xuICAgICAgLy8gICAgIHJlc29sdmU6IHJlZnJlbmNlSWRSZXNvbHZlcixcbiAgICAgIC8vICAgfSxcbiAgICAgIC8vICAgc3ViamVjdDoge1xuICAgICAgLy8gICAgIHJlc29sdmU6IHN1YmplY3RSZXNvbHZlcixcbiAgICAgIC8vICAgfSxcbiAgICAgIC8vIH0sXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgcGF0aDogJycsXG4gICAgICAgICAgbG9hZENvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2NvbW1lbnQvY29tbWVudC5jb21wb25lbnQnKS50aGVuKChjKSA9PiBjLkFYTUNvbW1lbnRDb21wb25lbnQpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHBhdGg6ICc6YXBwL2NvbW1lbnRzLycsXG4gICAgICB0aXRsZTogJ0NvbW1lbnRzJyxcbiAgICAgIGNhbkFjdGl2YXRlOiBbQVhQQXV0aEd1YXJkXSxcbiAgICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IEFYUFJvb3RMYXlvdXRDb21wb25lbnQsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgcGF0aDogJycsXG4gICAgICAgICAgbG9hZENvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2NvbW1lbnQvY29tbWVudC5jb21wb25lbnQnKS50aGVuKChjKSA9PiBjLkFYTUNvbW1lbnRDb21wb25lbnQpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuICByZXR1cm4gcm91dGVzO1xufVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBpbXBvcnRzOiBbXG4gICAgQVhQV2lkZ2V0Q29yZU1vZHVsZS5mb3JDaGlsZCh7XG4gICAgICB3aWRnZXRzOiBbQVhQQ29tbWVudFdpZGdldF0sXG4gICAgfSksXG4gICAgQVhQV29ya2Zsb3dNb2R1bGUuZm9yQ2hpbGQoe1xuICAgICAgYWN0aW9uczoge1xuICAgICAgICAnc2hvdy1jb21tZW50LXBvcHVwLWFjdGlvbic6IEFYTUNvbW1lbnRQb3B1cFN0YXJ0QWN0aW9uLFxuICAgICAgfSxcbiAgICAgIHdvcmtmbG93czoge1xuICAgICAgICAnc2hvdy1jb21tZW50LXBvcHVwJzogQVhNQ29tbWVudFBvcHVwV29ya2Zsb3csXG4gICAgICB9LFxuICAgIH0pLFxuICAgIC8vIEVudGl0eSBNb2R1bGVzXG4gICAgQVhNQ29udmVyc2F0aW9uVGFiRW50aXR5TW9kdWxlLFxuICAgIEFYTVJvb21FbnRpdHlNb2R1bGUsXG4gICAgQVhNTWVzc2FnZUVudGl0eU1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIC8vIE1vZHVsZXNcbiAgICBSb3V0ZXJNb2R1bGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIC8vIENoYXQgYW5kIENvbW1lbnQgU2VydmljZXNcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWE1DaGF0U2VydmljZSxcbiAgICAgIHVzZUNsYXNzOiBBWE1DaGF0U2VydmljZUltcGwsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlLFxuICAgICAgdXNlQ2xhc3M6IEFYTUNoYXRSZWFsdGltZVNlcnZpY2VJbXBsLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhNQ29tbWVudFNlcnZpY2UsXG4gICAgICB1c2VDbGFzczogQVhNQ29tbWVudFNlcnZpY2VJbXBsLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhNQ29tbWVudFJlYWx0aW1lU2VydmljZSxcbiAgICAgIHVzZUNsYXNzOiBBWE1Db21tZW50UmVhbHRpbWVTZXJ2aWNlSW1wbCxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9FTlRJVFlfQUNUSU9OX1BMVUdJTixcbiAgICAgIHVzZVZhbHVlOiBjb21tZW50c1BsdWdpbixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAgLy8gRW50aXR5IFByb3ZpZGVyXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX0VOVElUWV9ERUZJTklUSU9OX0xPQURFUixcbiAgICAgIHVzZUNsYXNzOiBBWE1Db252ZXJzYXRpb25Nb2R1bGVFbnRpdHlQcm92aWRlcixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX01FTlVfUFJPVklERVIsXG4gICAgICB1c2VDbGFzczogQVhNTWVudVByb3ZpZGVyLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBfVEFTS19CQURHRV9QUk9WSURFUlMsXG4gICAgICB1c2VDbGFzczogQVhNQ2hhdEJhZGdlUHJvdmlkZXJTaW1wbGUsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJPVVRFUyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRmFjdG9yeTogcm91dGVzRmFjdG9yeSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9QRVJNSVNTSU9OX0RFRklOSVRJT05fUFJPVklERVIsXG4gICAgICB1c2VGYWN0b3J5OiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gKGF3YWl0IGltcG9ydCgnLi9wZXJtaXNzaW9uLWRlZmluaXRpb24ucHJvdmlkZXInKSkuQVhNUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm92aWRlcigpO1xuICAgICAgfSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAgLy8gTWVudSBQcm92aWRlclxuICAgIC8vIHtcbiAgICAvLyAgIHByb3ZpZGU6IEFYUF9NRU5VX1BST1ZJREVSLFxuICAgIC8vICAgdXNlQ2xhc3M6IEFYTUNvbnZlcnNhdGlvbk1lbnVQcm92aWRlcixcbiAgICAvLyAgIG11bHRpOiB0cnVlLFxuICAgIC8vIH0sXG4gICAgLy8gQ29udmVyc2F0aW9uIE1vZHVsZVxuICAgIGltcG9ydFByb3ZpZGVyc0Zyb20oQVhDb252ZXJzYXRpb25Nb2R1bGUuZm9yUm9vdCgpKSxcbiAgICBEYXRlUGlwZSxcbiAgICAuLi5BWE1fQ0hBVF9OT1RJRklDQVRJT05fUFJPVklERVJTLFxuICAgIC4uLkFYTV9DT01NRU5UX05PVElGSUNBVElPTl9QUk9WSURFUlMsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTUNvbnZlcnNhdGlvbk1vZHVsZSB7IH1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LW1vZHVsZXMtY29udmVyc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvYWNvcmV4LW1vZHVsZXMtY29udmVyc2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1","i2","i3","i4","i8","i10","i5","i6","i7","i9"],"mappings":"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"}
1
+ {"version":3,"file":"acorex-modules-conversation.mjs","sources":["../tmp-esm2022/conversation/lib/const.js","../tmp-esm2022/conversation/lib/entities/tab/tab.service.js","../tmp-esm2022/conversation/lib/entities/tab/tab.entity.js","../tmp-esm2022/conversation/lib/entities/room/room.service.js","../tmp-esm2022/conversation/lib/entities/room/room.entity.js","../tmp-esm2022/conversation/lib/entities/message/message.service.js","../tmp-esm2022/conversation/lib/entities/message/message.entity.js","../tmp-esm2022/conversation/lib/entities/message/message.types.js","../tmp-esm2022/conversation/lib/entities/tab/tab.module.js","../tmp-esm2022/conversation/lib/entities/room/room.module.js","../tmp-esm2022/conversation/lib/entities/message/message.module.js","../tmp-esm2022/conversation/lib/entities/index.js","../tmp-esm2022/conversation/lib/entity.provider.js","../tmp-esm2022/conversation/lib/menu.keys.js","../tmp-esm2022/conversation/lib/menu.provider.js","../tmp-esm2022/conversation/lib/features/chat/chat-notification.helper.js","../tmp-esm2022/conversation/lib/features/chat/chat-realtime.service.js","../tmp-esm2022/conversation/lib/features/chat/chat.service.js","../tmp-esm2022/conversation/lib/features/chat/chat-management.service.js","../tmp-esm2022/conversation/lib/features/chat/components/chat-item/chat-item.component.js","../tmp-esm2022/conversation/lib/features/chat/chat.component.js","../tmp-esm2022/conversation/lib/features/chat/chat-preview.helper.js","../tmp-esm2022/conversation/lib/features/chat/components/chat-preview/chat-preview.component.js","../tmp-esm2022/conversation/lib/features/comment/comment-realtime.service.js","../tmp-esm2022/conversation/lib/features/comment/comment.service.js","../tmp-esm2022/conversation/lib/features/comment/comment-management.service.js","../tmp-esm2022/conversation/lib/features/comment/comment-notification.helper.js","../tmp-esm2022/conversation/lib/features/comment/comment.component.js","../tmp-esm2022/conversation/lib/features/comment/popup/comment-popup.component.js","../tmp-esm2022/conversation/lib/features/comment/widget/comment-widget-view.component.js","../tmp-esm2022/conversation/lib/features/comment/widget/comment-widget.config.js","../tmp-esm2022/conversation/lib/features/comment/workflow/comment.workflow.js","../tmp-esm2022/conversation/lib/badge.provider.js","../tmp-esm2022/conversation/lib/features/chat/components/chat-notification-content/chat-notification-content.component.js","../tmp-esm2022/conversation/lib/features/chat/chat-notification.provider.js","../tmp-esm2022/conversation/lib/features/comment/comment-notification.provider.js","../tmp-esm2022/conversation/lib/features/comment/comments.plugin.js","../tmp-esm2022/conversation/lib/conversation.module.js","../tmp-esm2022/conversation/acorex-modules-conversation.js"],"sourcesContent":["const config = {\n i18n: 'conversation',\n module: 'Conversation',\n route: 'chat',\n};\nexport const RootConfig = {\n config,\n module: {\n route: 'conversation',\n name: config.module,\n title: `t('module-name', {scope:\"${config.i18n}\"})`,\n icon: 'fa-light fa-comments',\n },\n entities: {\n room: {\n name: 'room',\n title: `t(\"room.plural-title\", { scope: \"${config.i18n}\" })`,\n source: `${config.module}.Room`,\n icon: 'fa-light fa-comments',\n },\n message: {\n name: 'message',\n title: `t(\"message.plural-title\", { scope: \"${config.i18n}\" })`,\n source: `${config.module}.Message`,\n icon: 'fa-light fa-message',\n },\n tab: {\n name: 'tab',\n title: `t(\"tab.plural-title\", { scope: \"${config.i18n}\" })`,\n source: `${config.module}.Tab`,\n icon: 'fa-light fa-folder',\n },\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvY29uc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxNQUFNLEdBQUc7SUFDYixJQUFJLEVBQUUsY0FBYztJQUNwQixNQUFNLEVBQUUsY0FBYztJQUN0QixLQUFLLEVBQUUsTUFBTTtDQUNkLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUc7SUFDeEIsTUFBTTtJQUNOLE1BQU0sRUFBRTtRQUNOLEtBQUssRUFBRSxjQUFjO1FBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTTtRQUNuQixLQUFLLEVBQUUsNEJBQTRCLE1BQU0sQ0FBQyxJQUFJLEtBQUs7UUFDbkQsSUFBSSxFQUFFLHNCQUFzQjtLQUM3QjtJQUNELFFBQVEsRUFBRTtRQUNSLElBQUksRUFBRTtZQUNKLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLG9DQUFvQyxNQUFNLENBQUMsSUFBSSxNQUFNO1lBQzVELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLE9BQU87WUFDL0IsSUFBSSxFQUFFLHNCQUFzQjtTQUM3QjtRQUNELE9BQU8sRUFBRTtZQUNQLElBQUksRUFBRSxTQUFTO1lBQ2YsS0FBSyxFQUFFLHVDQUF1QyxNQUFNLENBQUMsSUFBSSxNQUFNO1lBQy9ELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLFVBQVU7WUFDbEMsSUFBSSxFQUFFLHFCQUFxQjtTQUM1QjtRQUNELEdBQUcsRUFBRTtZQUNILElBQUksRUFBRSxLQUFLO1lBQ1gsS0FBSyxFQUFFLG1DQUFtQyxNQUFNLENBQUMsSUFBSSxNQUFNO1lBQzNELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLE1BQU07WUFDOUIsSUFBSSxFQUFFLG9CQUFvQjtTQUMzQjtLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGNvbmZpZyA9IHtcbiAgaTE4bjogJ2NvbnZlcnNhdGlvbicsXG4gIG1vZHVsZTogJ0NvbnZlcnNhdGlvbicsXG4gIHJvdXRlOiAnY2hhdCcsXG59O1xuXG5leHBvcnQgY29uc3QgUm9vdENvbmZpZyA9IHtcbiAgY29uZmlnLFxuICBtb2R1bGU6IHtcbiAgICByb3V0ZTogJ2NvbnZlcnNhdGlvbicsXG4gICAgbmFtZTogY29uZmlnLm1vZHVsZSxcbiAgICB0aXRsZTogYHQoJ21vZHVsZS1uYW1lJywge3Njb3BlOlwiJHtjb25maWcuaTE4bn1cIn0pYCxcbiAgICBpY29uOiAnZmEtbGlnaHQgZmEtY29tbWVudHMnLFxuICB9LFxuICBlbnRpdGllczoge1xuICAgIHJvb206IHtcbiAgICAgIG5hbWU6ICdyb29tJyxcbiAgICAgIHRpdGxlOiBgdChcInJvb20ucGx1cmFsLXRpdGxlXCIsIHsgc2NvcGU6IFwiJHtjb25maWcuaTE4bn1cIiB9KWAsXG4gICAgICBzb3VyY2U6IGAke2NvbmZpZy5tb2R1bGV9LlJvb21gLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWNvbW1lbnRzJyxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIG5hbWU6ICdtZXNzYWdlJyxcbiAgICAgIHRpdGxlOiBgdChcIm1lc3NhZ2UucGx1cmFsLXRpdGxlXCIsIHsgc2NvcGU6IFwiJHtjb25maWcuaTE4bn1cIiB9KWAsXG4gICAgICBzb3VyY2U6IGAke2NvbmZpZy5tb2R1bGV9Lk1lc3NhZ2VgLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLW1lc3NhZ2UnLFxuICAgIH0sXG4gICAgdGFiOiB7XG4gICAgICBuYW1lOiAndGFiJyxcbiAgICAgIHRpdGxlOiBgdChcInRhYi5wbHVyYWwtdGl0bGVcIiwgeyBzY29wZTogXCIke2NvbmZpZy5pMThufVwiIH0pYCxcbiAgICAgIHNvdXJjZTogYCR7Y29uZmlnLm1vZHVsZX0uVGFiYCxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS1mb2xkZXInLFxuICAgIH0sXG4gIH0sXG59O1xuIl19","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport * as i0 from \"@angular/core\";\nexport class AXMConversationTabService extends AXMEntityCrudServiceImpl {\n}\nexport class AXMConversationTabServiceImpl extends AXMConversationTabService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.tab.name}`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabServiceImpl }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabServiceImpl, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZW50aXRpZXMvdGFiL3RhYi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFHekMsTUFBTSxPQUFnQix5QkFBMEIsU0FBUSx3QkFBb0Q7Q0FBRztBQUcvRyxNQUFNLE9BQU8sNkJBQThCLFNBQVEseUJBQXlCO0lBQzFFO1FBQ0UsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDOytHQUhVLDZCQUE2QjttSEFBN0IsNkJBQTZCOzs0RkFBN0IsNkJBQTZCO2tCQUR6QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhNRW50aXR5Q3J1ZFNlcnZpY2VJbXBsIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1Db252ZXJzYXRpb25UYWIgfSBmcm9tICcuL3RhYi50eXBlcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWE1Db252ZXJzYXRpb25UYWJTZXJ2aWNlIGV4dGVuZHMgQVhNRW50aXR5Q3J1ZFNlcnZpY2VJbXBsPHN0cmluZywgQVhNQ29udmVyc2F0aW9uVGFiPiB7fVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNQ29udmVyc2F0aW9uVGFiU2VydmljZUltcGwgZXh0ZW5kcyBBWE1Db252ZXJzYXRpb25UYWJTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoYCR7Um9vdENvbmZpZy5tb2R1bGUubmFtZX0uJHtSb290Q29uZmlnLmVudGl0aWVzLnRhYi5uYW1lfWApO1xuICB9XG59XG4iXX0=","import { AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';\nimport { RootConfig } from '../../const';\nimport { AXMConversationTabService } from './tab.service';\nexport async function tabFactory(injector) {\n const dataService = injector.get(AXMConversationTabService);\n const i18n = RootConfig.config.i18n;\n const entityDef = {\n module: RootConfig.module.name,\n name: RootConfig.entities.tab.name,\n title: RootConfig.entities.tab.title,\n icon: RootConfig.entities.tab.icon,\n formats: {\n individual: `t(\"tab.individual-title\", { scope: \"${i18n}\" })`,\n plural: RootConfig.entities.tab.title,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: `t(\"tab.basic-info\", { scope: \"${i18n}\" })`,\n },\n ],\n properties: [\n {\n name: 'name',\n title: `t(\"tab.props.name\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'title',\n title: `t(\"tab.props.title\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [{ rule: 'required' }],\n },\n {\n name: 'color',\n title: `t(\"tab.props.color\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.color,\n },\n },\n },\n {\n name: 'rooms',\n title: `t(\"tab.props.rooms\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.room.name}`,\n multiple: true,\n },\n },\n },\n },\n {\n name: 'excludeRooms',\n title: `t(\"tab.props.excludeRooms\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.room.name}`,\n multiple: true,\n },\n },\n },\n },\n {\n name: 'includeRooms',\n title: `t(\"tab.props.includeRooms\", { scope: \"${i18n}\" })`,\n groupId: 'section',\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.lookup,\n options: {\n entity: `${RootConfig.module.name}.${RootConfig.entities.room.name}`,\n multiple: true,\n },\n },\n },\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n commands: {\n create: {\n execute: async (data) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e) => {\n return await dataService.query(e);\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [{ id: 'section' }],\n properties: [\n { name: 'name', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'title', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'color', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'rooms', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'excludeRooms', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'includeRooms', layout: { positions: { lg: { colSpan: 12 } } } },\n ],\n },\n update: {\n sections: [{ id: 'section' }],\n properties: [\n { name: 'name', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'title', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'color', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'rooms', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'excludeRooms', layout: { positions: { lg: { colSpan: 12 } } } },\n { name: 'includeRooms', layout: { positions: { lg: { colSpan: 12 } } } },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [{ id: 'section' }],\n properties: [\n { name: 'name', layout: { positions: { lg: { colSpan: 6 } } } },\n { name: 'title', layout: { positions: { lg: { colSpan: 6 } } } },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions()],\n views: [\n createAllQueryView({\n columns: ['name', 'title'],\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n return entityDef;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmVudGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9lbnRpdGllcy90YWIvdGFiLmVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUQsTUFBTSxDQUFDLEtBQUssVUFBVSxVQUFVLENBQUMsUUFBa0I7SUFDakQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzVELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBRXBDLE1BQU0sU0FBUyxHQUFjO1FBQzNCLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUk7UUFDOUIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUk7UUFDbEMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUs7UUFDcEMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUk7UUFDbEMsT0FBTyxFQUFFO1lBQ1AsVUFBVSxFQUFFLHVDQUF1QyxJQUFJLE1BQU07WUFDN0QsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUs7WUFDckMsWUFBWSxFQUFFO2dC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d0JBQy9ELEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO3FCQUNqRTtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLHlCQUF5QixFQUFFLENBQUM7aUJBQzFDO2dCQUNELElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsQ0FBQyxHQUFHLHVCQUF1QixFQUFFLENBQUM7b0JBQ3ZDLEtBQUssRUFBRTt3QkFDTCxrQkFBa0IsQ0FBQzs0QkFDakIsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQzs0QkFDMUIsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQzt5QkFDdEMsQ0FBQztxQkFDSDtpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDO0lBRUYsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEVudGl0eSwgQVhQRW50aXR5Q29tbWFuZFNjb3BlLCBBWFBFbnRpdHlRdWVyeVR5cGUsIGNyZWF0ZUFsbFF1ZXJ5VmlldyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUFdpZGdldHNDYXRhbG9nIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgZW50aXR5TWFzdGVyQ3J1ZEFjdGlvbnMsIGVudGl0eU1hc3RlclJlY29yZEFjdGlvbnMgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1Db252ZXJzYXRpb25UYWJTZXJ2aWNlIH0gZnJvbSAnLi90YWIuc2VydmljZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0YWJGYWN0b3J5KGluamVjdG9yOiBJbmplY3Rvcik6IFByb21pc2U8QVhQRW50aXR5IHwgbnVsbD4ge1xuICBjb25zdCBkYXRhU2VydmljZSA9IGluamVjdG9yLmdldChBWE1Db252ZXJzYXRpb25UYWJTZXJ2aWNlKTtcbiAgY29uc3QgaTE4biA9IFJvb3RDb25maWcuY29uZmlnLmkxOG47XG5cbiAgY29uc3QgZW50aXR5RGVmOiBBWFBFbnRpdHkgPSB7XG4gICAgbW9kdWxlOiBSb290Q29uZmlnLm1vZHVsZS5uYW1lLFxuICAgIG5hbWU6IFJvb3RDb25maWcuZW50aXRpZXMudGFiLm5hbWUsXG4gICAgdGl0bGU6IFJvb3RDb25maWcuZW50aXRpZXMudGFiLnRpdGxlLFxuICAgIGljb246IFJvb3RDb25maWcuZW50aXRpZXMudGFiLmljb24sXG4gICAgZm9ybWF0czoge1xuICAgICAgaW5kaXZpZHVhbDogYHQoXCJ0YWIuaW5kaXZpZHVhbC10aXRsZVwiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICBwbHVyYWw6IFJvb3RDb25maWcuZW50aXRpZXMudGFiLnRpdGxlLFxuICAgICAgc2VhcmNoUmVzdWx0OiB7XG4gICAgICAgIHRpdGxlOiAne3sgdGl0bGUgfX0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogUm9vdENvbmZpZy5tb2R1bGUudGl0bGUsXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVsYXRlZEVudGl0aWVzOiBbXSxcbiAgICBncm91cHM6IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgdGl0bGU6IGB0KFwidGFiLmJhc2ljLWluZm9cIiwgeyBzY29wZTogXCIke2kxOG59XCIgfSlgLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHByb3BlcnRpZXM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICB0aXRsZTogYHQoXCJ0YWIucHJvcHMubmFtZVwiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cudGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0aW9uczogW3sgcnVsZTogJ3JlcXVpcmVkJyB9XSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgIHRpdGxlOiBgdChcInRhYi5wcm9wcy50aXRsZVwiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cudGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0aW9uczogW3sgcnVsZTogJ3JlcXVpcmVkJyB9XSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjb2xvcicsXG4gICAgICAgIHRpdGxlOiBgdChcInRhYi5wcm9wcy5jb2xvclwiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cuY29sb3IsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdyb29tcycsXG4gICAgICAgIHRpdGxlOiBgdChcInRhYi5wcm9wcy5yb29tc1wiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cubG9va3VwLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBlbnRpdHk6IGAke1Jvb3RDb25maWcubW9kdWxlLm5hbWV9LiR7Um9vdENvbmZpZy5lbnRpdGllcy5yb29tLm5hbWV9YCxcbiAgICAgICAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZXhjbHVkZVJvb21zJyxcbiAgICAgICAgdGl0bGU6IGB0KFwidGFiLnByb3BzLmV4Y2x1ZGVSb29tc1wiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cubG9va3VwLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBlbnRpdHk6IGAke1Jvb3RDb25maWcubW9kdWxlLm5hbWV9LiR7Um9vdENvbmZpZy5lbnRpdGllcy5yb29tLm5hbWV9YCxcbiAgICAgICAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnaW5jbHVkZVJvb21zJyxcbiAgICAgICAgdGl0bGU6IGB0KFwidGFiLnByb3BzLmluY2x1ZGVSb29tc1wiLCB7IHNjb3BlOiBcIiR7aTE4bn1cIiB9KWAsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cubG9va3VwLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICBlbnRpdHk6IGAke1Jvb3RDb25maWcubW9kdWxlLm5hbWV9LiR7Um9vdENvbmZpZy5lbnRpdGllcy5yb29tLm5hbWV9YCxcbiAgICAgICAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgY29sdW1uczogW3sgbmFtZTogJ25hbWUnIH0sIHsgbmFtZTogJ3RpdGxlJyB9XSxcbiAgICBjb21tYW5kczoge1xuICAgICAgY3JlYXRlOiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBkYXRhU2VydmljZS5pbnNlcnRPbmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuIHsgaWQ6IHJlcyB9O1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRlbGV0ZToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoaWQ6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBkYXRhU2VydmljZS5kZWxldGVPbmUoaWQpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHVwZGF0ZToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFTZXJ2aWNlLnVwZGF0ZU9uZShkYXRhLmlkLCBkYXRhKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyaWVzOiB7XG4gICAgICBieUtleToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBkYXRhU2VydmljZS5nZXRPbmUoaWQpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBBWFBFbnRpdHlRdWVyeVR5cGUuU2luZ2xlLFxuICAgICAgfSxcbiAgICAgIGxpc3Q6IHtcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGU6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBkYXRhU2VydmljZS5xdWVyeShlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogQVhQRW50aXR5UXVlcnlUeXBlLkxpc3QsXG4gICAgICB9LFxuICAgIH0sXG4gICAgaW50ZXJmYWNlczoge1xuICAgICAgbWFzdGVyOiB7XG4gICAgICAgIGNyZWF0ZToge1xuICAgICAgICAgIHNlY3Rpb25zOiBbeyBpZDogJ3NlY3Rpb24nIH1dLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnLCBsYXlvdXQ6IHsgcG9zaXRpb25zOiB7IGxnOiB7IGNvbFNwYW46IDYgfSB9IH0gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3RpdGxlJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiA2IH0gfSB9IH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdjb2xvcicsIGxheW91dDogeyBwb3NpdGlvbnM6IHsgbGc6IHsgY29sU3BhbjogMTIgfSB9IH0gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3Jvb21zJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiAxMiB9IH0gfSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnZXhjbHVkZVJvb21zJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiAxMiB9IH0gfSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnaW5jbHVkZVJvb21zJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiAxMiB9IH0gfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZToge1xuICAgICAgICAgIHNlY3Rpb25zOiBbeyBpZDogJ3NlY3Rpb24nIH1dLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ25hbWUnLCBsYXlvdXQ6IHsgcG9zaXRpb25zOiB7IGxnOiB7IGNvbFNwYW46IDYgfSB9IH0gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3RpdGxlJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiA2IH0gfSB9IH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdjb2xvcicsIGxheW91dDogeyBwb3NpdGlvbnM6IHsgbGc6IHsgY29sU3BhbjogMTIgfSB9IH0gfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ3Jvb21zJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiAxMiB9IH0gfSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnZXhjbHVkZVJvb21zJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiAxMiB9IH0gfSB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnaW5jbHVkZVJvb21zJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiAxMiB9IH0gfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHNpbmdsZToge1xuICAgICAgICAgIHRpdGxlOiAne3t0aXRsZX19JyxcbiAgICAgICAgICBzZWN0aW9uczogW3sgaWQ6ICdzZWN0aW9uJyB9XSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICduYW1lJywgbGF5b3V0OiB7IHBvc2l0aW9uczogeyBsZzogeyBjb2xTcGFuOiA2IH0gfSB9IH0sXG4gICAgICAgICAgICB7IG5hbWU6ICd0aXRsZScsIGxheW91dDogeyBwb3NpdGlvbnM6IHsgbGc6IHsgY29sU3BhbjogNiB9IH0gfSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYWN0aW9uczogWy4uLmVudGl0eU1hc3RlclJlY29yZEFjdGlvbnMoKV0sXG4gICAgICAgIH0sXG4gICAgICAgIGxpc3Q6IHtcbiAgICAgICAgICBhY3Rpb25zOiBbLi4uZW50aXR5TWFzdGVyQ3J1ZEFjdGlvbnMoKV0sXG4gICAgICAgICAgdmlld3M6IFtcbiAgICAgICAgICAgIGNyZWF0ZUFsbFF1ZXJ5Vmlldyh7XG4gICAgICAgICAgICAgIGNvbHVtbnM6IFsnbmFtZScsICd0aXRsZSddLFxuICAgICAgICAgICAgICBzb3J0czogW3sgbmFtZTogJ25hbWUnLCBkaXI6ICdhc2MnIH1dLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gZW50aXR5RGVmO1xufVxuIl19","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport * as i0 from \"@angular/core\";\nexport class AXMRoomService extends AXMEntityCrudServiceImpl {\n}\nexport class AXMRoomServiceImpl extends AXMRoomService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.room.name}`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomServiceImpl }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomServiceImpl, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2VudGl0aWVzL3Jvb20vcm9vbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFHekMsTUFBTSxPQUFnQixjQUFlLFNBQVEsd0JBQXFEO0NBQUc7QUFHckcsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQWM7SUFDcEQ7UUFDRSxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7K0dBSFUsa0JBQWtCO21IQUFsQixrQkFBa0I7OzRGQUFsQixrQkFBa0I7a0JBRDlCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWE1FbnRpdHlDcnVkU2VydmljZUltcGwgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm9vdENvbmZpZyB9IGZyb20gJy4uLy4uL2NvbnN0JztcbmltcG9ydCB7IEFYTUNvbnZlcnNhdGlvblJvb20gfSBmcm9tICcuL3Jvb20udHlwZXMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQVhNUm9vbVNlcnZpY2UgZXh0ZW5kcyBBWE1FbnRpdHlDcnVkU2VydmljZUltcGw8c3RyaW5nLCBBWE1Db252ZXJzYXRpb25Sb29tPiB7fVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNUm9vbVNlcnZpY2VJbXBsIGV4dGVuZHMgQVhNUm9vbVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihgJHtSb290Q29uZmlnLm1vZHVsZS5uYW1lfS4ke1Jvb3RDb25maWcuZW50aXRpZXMucm9vbS5uYW1lfWApO1xuICB9XG59XG4iXX0=","import { AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';\nimport { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../const';\nimport { AXMRoomService } from './room.service';\nexport async function roomFactory(injector) {\n const dataService = injector.get(AXMRoomService);\n const i18n = RootConfig.config.i18n;\n const entityDef = {\n module: RootConfig.module.name,\n name: RootConfig.entities.room.name,\n title: RootConfig.entities.room.title,\n icon: RootConfig.entities.room.icon,\n formats: {\n individual: RootConfig.entities.room.title,\n plural: RootConfig.entities.room.title,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: RootConfig.entities.room.title,\n },\n ],\n properties: [\n {\n name: 'name',\n title: '@general:terms.common.name',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n {\n name: 'title',\n title: '@general:terms.common.title',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n commands: {\n create: {\n execute: async (data) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e) => {\n return await dataService.query(e);\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'section',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions()],\n views: [\n createAllQueryView({\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n return entityDef;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS5lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZW50aXRpZXMvcm9vbS9yb29tLmVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsTUFBTSxDQUFDLEtBQUssVUFBVSxXQUFXLENBQUMsUUFBa0I7SUFDbEQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUVwQyxNQUFNLFNBQVMsR0FBYztRQUMzQixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJO1FBQzlCLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJO1FBQ25DLEtBQUssRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLO1FBQ3JDLElBQUksRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJO1FBQ25DLE9BQU8sRUFBRTtZQUNQLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQzFDLE1BQU0sRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFL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OzZCQUNGO3lCQUNGO3FCQUNGO2lCQUNGO2dCQUNELE1BQU0sRUFBRTtvQkFDTixLQUFLLEVBQUUsV0FBVztvQkFDbEIsUUFBUSxFQUFFO3dCQUNSOzRCQUNFLEVBQUUsRUFBRSxTQUFTOzRCQUNiLE1BQU0sRUFBRTtnQ0FDTixTQUFTLEVBQUU7b0NBQ1QsRUFBRSxFQUFFO3dDQUNGLE9BQU8sRUFBRSxFQUFFO3FDQUNaO2lDQUNGOzZCQUNGO3lCQUNGO3FCQUNGO29CQUNELFVBQVUsRUFBRTt3QkFDVjs0QkFDRSxJQUFJLEVBQUUsTUFBTTs0QkFDWixNQUFNLEVBQUU7Z0NBQ04sU0FBUyxFQUFFO29DQUNULEVBQUUsRUFBRTt3Q0FDRixPQUFPLEVBQUUsQ0FBQzt3Q0FDVixLQUFLLEVBQUUsQ0FBQztxQ0FDVDtpQ0FDRjs2QkFDRjt5QkFDRjt3QkFFRDs0QkFDRSxJQUFJLEVBQUUsT0FBTzs0QkFDYixNQUFNLEVBQUU7Z0NBQ04sU0FBUyxFQUFFO29DQUNULEVBQUUsRUFBRTt3Q0FDRixPQUFPLEVBQUUsQ0FBQzt3Q0FDVixLQUFLLEVBQUUsQ0FBQztxQ0FDVDtpQ0FDRjs2QkFDRjt5QkFDRjtxQkFDRjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxHQUFHLHlCQUF5QixFQUFFLENBQUM7aUJBQzFDO2dCQUNELElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsQ0FBQyxHQUFHLHVCQUF1QixFQUFFLENBQUM7b0JBQ3ZDLEtBQUssRUFBRTt3QkFDTCxrQkFBa0IsQ0FBQzs0QkFDakIsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQzt5QkFDdEMsQ0FBQztxQkFDSDtpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDO0lBRUYsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEVudGl0eSwgQVhQRW50aXR5Q29tbWFuZFNjb3BlLCBBWFBFbnRpdHlRdWVyeVR5cGUsIGNyZWF0ZUFsbFF1ZXJ5VmlldyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IGVudGl0eU1hc3RlckNydWRBY3Rpb25zLCBlbnRpdHlNYXN0ZXJSZWNvcmRBY3Rpb25zIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYUFdpZGdldHNDYXRhbG9nIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1Sb29tU2VydmljZSB9IGZyb20gJy4vcm9vbS5zZXJ2aWNlJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJvb21GYWN0b3J5KGluamVjdG9yOiBJbmplY3Rvcik6IFByb21pc2U8QVhQRW50aXR5IHwgbnVsbD4ge1xuICBjb25zdCBkYXRhU2VydmljZSA9IGluamVjdG9yLmdldChBWE1Sb29tU2VydmljZSk7XG4gIGNvbnN0IGkxOG4gPSBSb290Q29uZmlnLmNvbmZpZy5pMThuO1xuXG4gIGNvbnN0IGVudGl0eURlZjogQVhQRW50aXR5ID0ge1xuICAgIG1vZHVsZTogUm9vdENvbmZpZy5tb2R1bGUubmFtZSxcbiAgICBuYW1lOiBSb290Q29uZmlnLmVudGl0aWVzLnJvb20ubmFtZSxcbiAgICB0aXRsZTogUm9vdENvbmZpZy5lbnRpdGllcy5yb29tLnRpdGxlLFxuICAgIGljb246IFJvb3RDb25maWcuZW50aXRpZXMucm9vbS5pY29uLFxuICAgIGZvcm1hdHM6IHtcbiAgICAgIGluZGl2aWR1YWw6IFJvb3RDb25maWcuZW50aXRpZXMucm9vbS50aXRsZSxcbiAgICAgIHBsdXJhbDogUm9vdENvbmZpZy5lbnRpdGllcy5yb29tLnRpdGxlLFxuICAgICAgc2VhcmNoUmVzdWx0OiB7XG4gICAgICAgIHRpdGxlOiAne3sgdGl0bGUgfX0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogUm9vdENvbmZpZy5tb2R1bGUudGl0bGUsXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVsYXRlZEVudGl0aWVzOiBbXSxcbiAgICBncm91cHM6IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgdGl0bGU6IFJvb3RDb25maWcuZW50aXRpZXMucm9vbS50aXRsZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgdGl0bGU6ICdAZ2VuZXJhbDp0ZXJtcy5jb21tb24ubmFtZScsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHNvcnQ6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgIGFkdmFuY2U6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmxpbmU6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBpbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdmFsaWRhdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBydWxlOiAncmVxdWlyZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgIHRpdGxlOiAnQGdlbmVyYWw6dGVybXMuY29tbW9uLnRpdGxlJyxcbiAgICAgICAgZ3JvdXBJZDogJ3NlY3Rpb24nLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgc29ydDoge1xuICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgICAgYWR2YW5jZToge1xuICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlubGluZToge1xuICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGludGVyZmFjZToge1xuICAgICAgICAgICAgdHlwZTogQVhQV2lkZ2V0c0NhdGFsb2cudGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2YWxpZGF0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJ1bGU6ICdyZXF1aXJlZCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjb2x1bW5zOiBbeyBuYW1lOiAnbmFtZScgfSwgeyBuYW1lOiAndGl0bGUnIH1dLFxuICAgIGNvbW1hbmRzOiB7XG4gICAgICBjcmVhdGU6IHtcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGRhdGFTZXJ2aWNlLmluc2VydE9uZShkYXRhKTtcbiAgICAgICAgICByZXR1cm4geyBpZDogcmVzIH07XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZGVsZXRlOiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChpZDogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFTZXJ2aWNlLmRlbGV0ZU9uZShpZCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdXBkYXRlOiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgZGF0YVNlcnZpY2UudXBkYXRlT25lKGRhdGEuaWQsIGRhdGEpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHF1ZXJpZXM6IHtcbiAgICAgIGJ5S2V5OiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChpZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFTZXJ2aWNlLmdldE9uZShpZCk7XG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IEFYUEVudGl0eVF1ZXJ5VHlwZS5TaW5nbGUsXG4gICAgICB9LFxuICAgICAgbGlzdDoge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFTZXJ2aWNlLnF1ZXJ5KGUpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBBWFBFbnRpdHlRdWVyeVR5cGUuTGlzdCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBpbnRlcmZhY2VzOiB7XG4gICAgICBtYXN0ZXI6IHtcbiAgICAgICAgY3JlYXRlOiB7XG4gICAgICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiA2LFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiA2LFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogMixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgdXBkYXRlOiB7XG4gICAgICAgICAgc2VjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiA2LFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogMSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICBsZzoge1xuICAgICAgICAgICAgICAgICAgICBjb2xTcGFuOiA2LFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogMixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAgc2luZ2xlOiB7XG4gICAgICAgICAgdGl0bGU6ICd7e3RpdGxlfX0nLFxuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnc2VjdGlvbicsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogMTIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYWN0aW9uczogWy4uLmVudGl0eU1hc3RlclJlY29yZEFjdGlvbnMoKV0sXG4gICAgICAgIH0sXG4gICAgICAgIGxpc3Q6IHtcbiAgICAgICAgICBhY3Rpb25zOiBbLi4uZW50aXR5TWFzdGVyQ3J1ZEFjdGlvbnMoKV0sXG4gICAgICAgICAgdmlld3M6IFtcbiAgICAgICAgICAgIGNyZWF0ZUFsbFF1ZXJ5Vmlldyh7XG4gICAgICAgICAgICAgIHNvcnRzOiBbeyBuYW1lOiAnbmFtZScsIGRpcjogJ2FzYycgfV0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBlbnRpdHlEZWY7XG59XG4iXX0=","import { AXMEntityCrudServiceImpl } from '@acorex/platform/layout/entity';\nimport { Injectable } from '@angular/core';\nimport { RootConfig } from '../../const';\nimport * as i0 from \"@angular/core\";\nexport class AXMMessageService extends AXMEntityCrudServiceImpl {\n}\nexport class AXMMessageServiceImpl extends AXMMessageService {\n constructor() {\n super(`${RootConfig.module.name}.${RootConfig.entities.message.name}`);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageServiceImpl }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageServiceImpl, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2VudGl0aWVzL21lc3NhZ2UvbWVzc2FnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFHekMsTUFBTSxPQUFnQixpQkFBa0IsU0FBUSx3QkFBd0Q7Q0FBRztBQUczRyxNQUFNLE9BQU8scUJBQXNCLFNBQVEsaUJBQWlCO0lBQzFEO1FBQ0UsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDOytHQUhVLHFCQUFxQjttSEFBckIscUJBQXFCOzs0RkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhNRW50aXR5Q3J1ZFNlcnZpY2VJbXBsIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdCc7XG5pbXBvcnQgeyBBWE1Db252ZXJzYXRpb25NZXNzYWdlIH0gZnJvbSAnLi9tZXNzYWdlLnR5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYTU1lc3NhZ2VTZXJ2aWNlIGV4dGVuZHMgQVhNRW50aXR5Q3J1ZFNlcnZpY2VJbXBsPHN0cmluZywgQVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge31cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFYTU1lc3NhZ2VTZXJ2aWNlSW1wbCBleHRlbmRzIEFYTU1lc3NhZ2VTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoYCR7Um9vdENvbmZpZy5tb2R1bGUubmFtZX0uJHtSb290Q29uZmlnLmVudGl0aWVzLm1lc3NhZ2UubmFtZX1gKTtcbiAgfVxufVxuIl19","import { AXPEntityQueryType, createAllQueryView } from '@acorex/platform/common';\nimport { entityMasterCrudActions, entityMasterRecordActions } from '@acorex/platform/layout/entity';\nimport { AXPWidgetsCatalog } from '@acorex/platform/layout/widget-core';\nimport { RootConfig } from '../../const';\nimport { AXMMessageService } from './message.service';\nexport async function messageFactory(injector) {\n const dataService = injector.get(AXMMessageService);\n const i18n = RootConfig.config.i18n;\n const entityDef = {\n module: RootConfig.module.name,\n name: RootConfig.entities.message.name,\n title: RootConfig.entities.message.title,\n icon: RootConfig.entities.message.icon,\n formats: {\n individual: RootConfig.entities.message.title,\n plural: RootConfig.entities.message.title,\n searchResult: {\n title: '{{ title }}',\n description: RootConfig.module.title,\n },\n },\n relatedEntities: [],\n groups: [\n {\n id: 'section',\n title: RootConfig.entities.message.title,\n },\n ],\n properties: [\n {\n name: 'name',\n title: '@general:terms.common.name',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n {\n name: 'title',\n title: '@general:terms.common.title',\n groupId: 'section',\n options: {\n sort: {\n enabled: true,\n },\n filter: {\n advance: {\n enabled: true,\n },\n inline: {\n enabled: false,\n },\n },\n },\n schema: {\n dataType: 'string',\n interface: {\n type: AXPWidgetsCatalog.text,\n },\n },\n validations: [\n {\n rule: 'required',\n },\n ],\n },\n ],\n columns: [{ name: 'name' }, { name: 'title' }],\n commands: {\n create: {\n execute: async (data) => {\n const res = await dataService.insertOne(data);\n return { id: res };\n },\n },\n delete: {\n execute: async (id) => {\n return await dataService.deleteOne(id);\n },\n },\n update: {\n execute: async (data) => {\n return await dataService.updateOne(data.id, data);\n },\n },\n },\n queries: {\n byKey: {\n execute: async (id) => {\n return await dataService.getOne(id);\n },\n type: AXPEntityQueryType.Single,\n },\n list: {\n execute: async (e) => {\n return await dataService.query(e);\n },\n type: AXPEntityQueryType.List,\n },\n },\n interfaces: {\n master: {\n create: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n update: {\n sections: [\n {\n id: 'section',\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n },\n single: {\n title: '{{title}}',\n sections: [\n {\n id: 'section',\n layout: {\n positions: {\n lg: {\n colSpan: 12,\n },\n },\n },\n },\n ],\n properties: [\n {\n name: 'name',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 1,\n },\n },\n },\n },\n {\n name: 'title',\n layout: {\n positions: {\n lg: {\n colSpan: 6,\n order: 2,\n },\n },\n },\n },\n ],\n actions: [...entityMasterRecordActions()],\n },\n list: {\n actions: [...entityMasterCrudActions()],\n views: [\n createAllQueryView({\n sorts: [{ name: 'name', dir: 'asc' }],\n }),\n ],\n },\n },\n },\n };\n return entityDef;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5lbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZW50aXRpZXMvbWVzc2FnZS9tZXNzYWdlLmVudGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9DLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RCxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FBQyxRQUFrQjtJQUNyRCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDcEQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFFcEMsTUFBTSxTQUFTLEdBQWM7UUFDM0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSTtRQUM5QixJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSTtRQUN0QyxLQUFLLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSztRQUN4QyxJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSTtRQUN0QyxPQUFPLEVBQUU7WUFDUCxVQUFVLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSztZQUM3QyxNQUFNLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxP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QztxQ0FDVDtpQ0FDRjs2QkFDRjt5QkFDRjtxQkFDRjtpQkFDRjtnQkFDRCxNQUFNLEVBQUU7b0JBQ04sS0FBSyxFQUFFLFdBQVc7b0JBQ2xCLFFBQVEsRUFBRTt3QkFDUjs0QkFDRSxFQUFFLEVBQUUsU0FBUzs0QkFDYixNQUFNLEVBQUU7Z0NBQ04sU0FBUyxFQUFFO29DQUNULEVBQUUsRUFBRTt3Q0FDRixPQUFPLEVBQUUsRUFBRTtxQ0FDWjtpQ0FDRjs2QkFDRjt5QkFDRjtxQkFDRjtvQkFDRCxVQUFVLEVBQUU7d0JBQ1Y7NEJBQ0UsSUFBSSxFQUFFLE1BQU07NEJBQ1osTUFBTSxFQUFFO2dDQUNOLFNBQVMsRUFBRTtvQ0FDVCxFQUFFLEVBQUU7d0NBQ0YsT0FBTyxFQUFFLENBQUM7d0NBQ1YsS0FBSyxFQUFFLENBQUM7cUNBQ1Q7aUNBQ0Y7NkJBQ0Y7eUJBQ0Y7d0JBRUQ7NEJBQ0UsSUFBSSxFQUFFLE9BQU87NEJBQ2IsTUFBTSxFQUFFO2dDQUNOLFNBQVMsRUFBRTtvQ0FDVCxFQUFFLEVBQUU7d0NBQ0YsT0FBTyxFQUFFLENBQUM7d0NBQ1YsS0FBSyxFQUFFLENBQUM7cUNBQ1Q7aUNBQ0Y7NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7b0JBQ0QsT0FBTyxFQUFFLENBQUMsR0FBRyx5QkFBeUIsRUFBRSxDQUFDO2lCQUMxQztnQkFDRCxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLENBQUMsR0FBRyx1QkFBdUIsRUFBRSxDQUFDO29CQUN2QyxLQUFLLEVBQUU7d0JBQ0wsa0JBQWtCLENBQUM7NEJBQ2pCLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7eUJBQ3RDLENBQUM7cUJBQ0g7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0YsQ0FBQztJQUVGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBFbnRpdHksIEFYUEVudGl0eUNvbW1hbmRTY29wZSwgQVhQRW50aXR5UXVlcnlUeXBlLCBjcmVhdGVBbGxRdWVyeVZpZXcgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBlbnRpdHlNYXN0ZXJDcnVkQWN0aW9ucywgZW50aXR5TWFzdGVyUmVjb3JkQWN0aW9ucyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5pbXBvcnQgeyBBWFBXaWRnZXRzQ2F0YWxvZyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3dpZGdldC1jb3JlJztcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb290Q29uZmlnIH0gZnJvbSAnLi4vLi4vY29uc3QnO1xuaW1wb3J0IHsgQVhNTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuL21lc3NhZ2Uuc2VydmljZSc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtZXNzYWdlRmFjdG9yeShpbmplY3RvcjogSW5qZWN0b3IpOiBQcm9taXNlPEFYUEVudGl0eSB8IG51bGw+IHtcbiAgY29uc3QgZGF0YVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQVhNTWVzc2FnZVNlcnZpY2UpO1xuICBjb25zdCBpMThuID0gUm9vdENvbmZpZy5jb25maWcuaTE4bjtcblxuICBjb25zdCBlbnRpdHlEZWY6IEFYUEVudGl0eSA9IHtcbiAgICBtb2R1bGU6IFJvb3RDb25maWcubW9kdWxlLm5hbWUsXG4gICAgbmFtZTogUm9vdENvbmZpZy5lbnRpdGllcy5tZXNzYWdlLm5hbWUsXG4gICAgdGl0bGU6IFJvb3RDb25maWcuZW50aXRpZXMubWVzc2FnZS50aXRsZSxcbiAgICBpY29uOiBSb290Q29uZmlnLmVudGl0aWVzLm1lc3NhZ2UuaWNvbixcbiAgICBmb3JtYXRzOiB7XG4gICAgICBpbmRpdmlkdWFsOiBSb290Q29uZmlnLmVudGl0aWVzLm1lc3NhZ2UudGl0bGUsXG4gICAgICBwbHVyYWw6IFJvb3RDb25maWcuZW50aXRpZXMubWVzc2FnZS50aXRsZSxcbiAgICAgIHNlYXJjaFJlc3VsdDoge1xuICAgICAgICB0aXRsZTogJ3t7IHRpdGxlIH19JyxcbiAgICAgICAgZGVzY3JpcHRpb246IFJvb3RDb25maWcubW9kdWxlLnRpdGxlLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHJlbGF0ZWRFbnRpdGllczogW10sXG4gICAgZ3JvdXBzOiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnc2VjdGlvbicsXG4gICAgICAgIHRpdGxlOiBSb290Q29uZmlnLmVudGl0aWVzLm1lc3NhZ2UudGl0bGUsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcHJvcGVydGllczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgIHRpdGxlOiAnQGdlbmVyYWw6dGVybXMuY29tbW9uLm5hbWUnLFxuICAgICAgICBncm91cElkOiAnc2VjdGlvbicsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBzb3J0OiB7XG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgICBhZHZhbmNlOiB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5saW5lOiB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgaW50ZXJmYWNlOiB7XG4gICAgICAgICAgICB0eXBlOiBBWFBXaWRnZXRzQ2F0YWxvZy50ZXh0LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcnVsZTogJ3JlcXVpcmVkJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcblxuICAgICAge1xuICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICB0aXRsZTogJ0BnZW5lcmFsOnRlcm1zLmNvbW1vbi50aXRsZScsXG4gICAgICAgIGdyb3VwSWQ6ICdzZWN0aW9uJyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHNvcnQ6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgIGFkdmFuY2U6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbmxpbmU6IHtcbiAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICBpbnRlcmZhY2U6IHtcbiAgICAgICAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdmFsaWRhdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBydWxlOiAncmVxdWlyZWQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgY29sdW1uczogW3sgbmFtZTogJ25hbWUnIH0sIHsgbmFtZTogJ3RpdGxlJyB9XSxcbiAgICBjb21tYW5kczoge1xuICAgICAgY3JlYXRlOiB7XG4gICAgICAgIGV4ZWN1dGU6IGFzeW5jIChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBkYXRhU2VydmljZS5pbnNlcnRPbmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuIHsgaWQ6IHJlcyB9O1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRlbGV0ZToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoaWQ6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBkYXRhU2VydmljZS5kZWxldGVPbmUoaWQpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHVwZGF0ZToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGRhdGFTZXJ2aWNlLnVwZGF0ZU9uZShkYXRhLmlkLCBkYXRhKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBxdWVyaWVzOiB7XG4gICAgICBieUtleToge1xuICAgICAgICBleGVjdXRlOiBhc3luYyAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBkYXRhU2VydmljZS5nZXRPbmUoaWQpO1xuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBBWFBFbnRpdHlRdWVyeVR5cGUuU2luZ2xlLFxuICAgICAgfSxcbiAgICAgIGxpc3Q6IHtcbiAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGU6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBkYXRhU2VydmljZS5xdWVyeShlKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogQVhQRW50aXR5UXVlcnlUeXBlLkxpc3QsXG4gICAgICB9LFxuICAgIH0sXG4gICAgaW50ZXJmYWNlczoge1xuICAgICAgbWFzdGVyOiB7XG4gICAgICAgIGNyZWF0ZToge1xuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnc2VjdGlvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZToge1xuICAgICAgICAgIHNlY3Rpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAnc2VjdGlvbicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDEsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6ICd0aXRsZScsXG4gICAgICAgICAgICAgIGxheW91dDoge1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgICAgICAgICAgbGc6IHtcbiAgICAgICAgICAgICAgICAgICAgY29sU3BhbjogNixcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6IDIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHNpbmdsZToge1xuICAgICAgICAgIHRpdGxlOiAne3t0aXRsZX19JyxcbiAgICAgICAgICBzZWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ3NlY3Rpb24nLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDEyLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ25hbWUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiAxLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiAndGl0bGUnLFxuICAgICAgICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgIGxnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbFNwYW46IDYsXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiAyLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFjdGlvbnM6IFsuLi5lbnRpdHlNYXN0ZXJSZWNvcmRBY3Rpb25zKCldLFxuICAgICAgICB9LFxuICAgICAgICBsaXN0OiB7XG4gICAgICAgICAgYWN0aW9uczogWy4uLmVudGl0eU1hc3RlckNydWRBY3Rpb25zKCldLFxuICAgICAgICAgIHZpZXdzOiBbXG4gICAgICAgICAgICBjcmVhdGVBbGxRdWVyeVZpZXcoe1xuICAgICAgICAgICAgICBzb3J0czogW3sgbmFtZTogJ25hbWUnLCBkaXI6ICdhc2MnIH1dLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gZW50aXR5RGVmO1xufVxuIl19","// === Shared Types ===\nexport {};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9lbnRpdGllcy9tZXNzYWdlL21lc3NhZ2UudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gPT09IFNoYXJlZCBUeXBlcyA9PT1cblxuaW1wb3J0IHsgQVhQQ29udGVudCwgQVhQVXNlclJlZmVyZW5jZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBFbnRpdHlNb2RlbCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5cbmV4cG9ydCB0eXBlIEFYTVNlZW5UeXBlID0gJ2RlbGl2ZXJlZCcgfCAncmVhZCc7XG5leHBvcnQgdHlwZSBBWE1SZWFjdGlvblR5cGUgPSAnbGlrZScgfCAnbG92ZScgfCAnbGF1Z2gnIHwgJ2FuZ3J5JyB8ICdzYWQnIHwgc3RyaW5nO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uIHtcbiAgYXV0aG9yOiBBWFBVc2VyUmVmZXJlbmNlO1xuICB0eXBlOiBBWE1SZWFjdGlvblR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhNQ29udmVyc2F0aW9uU2VlbiB7XG4gIGF1dGhvcjogQVhQVXNlclJlZmVyZW5jZTtcbiAgdHlwZTogQVhNU2VlblR5cGU7XG59XG5cbi8vID09PSBDb3JlIE1vZGVscyA9PT1cblxuZXhwb3J0IGludGVyZmFjZSBBWE1Db252ZXJzYXRpb25NZXNzYWdlIGV4dGVuZHMgQVhQRW50aXR5TW9kZWw8c3RyaW5nPiB7XG4gIHJvb21JZDogc3RyaW5nO1xuICBtZXNzYWdlOiBBWFBDb250ZW50O1xuICBhdXRob3I6IEFYUFVzZXJSZWZlcmVuY2U7XG4gIHJlcGx5SWQ/OiBzdHJpbmcgfCBudWxsO1xuICByZWFjdGlvbnM6IEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW107XG4gIHNlZW46IEFYTUNvbnZlcnNhdGlvblNlZW5bXTtcbiAgaXNQaW5uZWQ/OiBib29sZWFuO1xufVxuIl19","import { NgModule } from '@angular/core';\nimport { AXMConversationTabService, AXMConversationTabServiceImpl } from './tab.service';\nimport * as i0 from \"@angular/core\";\nexport class AXMConversationTabEntityModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabEntityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabEntityModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabEntityModule, providers: [\n {\n provide: AXMConversationTabService,\n useClass: AXMConversationTabServiceImpl,\n },\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationTabEntityModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXMConversationTabService,\n useClass: AXMConversationTabServiceImpl,\n },\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9lbnRpdGllcy90YWIvdGFiLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFhekYsTUFBTSxPQUFPLDhCQUE4QjsrR0FBOUIsOEJBQThCO2dIQUE5Qiw4QkFBOEI7Z0hBQTlCLDhCQUE4QixhQVA1QjtZQUNQO2dCQUNJLE9BQU8sRUFBRSx5QkFBeUI7Z0JBQ2xDLFFBQVEsRUFBRSw2QkFBNkI7YUFDMUM7U0FDSjs7NEZBRVEsOEJBQThCO2tCQVgxQyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxFQUFFO29CQUNYLE9BQU8sRUFBRSxFQUFFO29CQUNYLFlBQVksRUFBRSxFQUFFO29CQUNoQixTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLHlCQUF5Qjs0QkFDbEMsUUFBUSxFQUFFLDZCQUE2Qjt5QkFDMUM7cUJBQ0o7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhNQ29udmVyc2F0aW9uVGFiU2VydmljZSwgQVhNQ29udmVyc2F0aW9uVGFiU2VydmljZUltcGwgfSBmcm9tICcuL3RhYi5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXSxcbiAgICBleHBvcnRzOiBbXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBBWE1Db252ZXJzYXRpb25UYWJTZXJ2aWNlLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IEFYTUNvbnZlcnNhdGlvblRhYlNlcnZpY2VJbXBsLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTUNvbnZlcnNhdGlvblRhYkVudGl0eU1vZHVsZSB7IH1cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { AXMRoomService, AXMRoomServiceImpl } from './room.service';\nimport * as i0 from \"@angular/core\";\nexport class AXMRoomEntityModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomEntityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomEntityModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomEntityModule, providers: [\n {\n provide: AXMRoomService,\n useClass: AXMRoomServiceImpl,\n },\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMRoomEntityModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXMRoomService,\n useClass: AXMRoomServiceImpl,\n },\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZW50aXRpZXMvcm9vbS9yb29tLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFhcEUsTUFBTSxPQUFPLG1CQUFtQjsrR0FBbkIsbUJBQW1CO2dIQUFuQixtQkFBbUI7Z0hBQW5CLG1CQUFtQixhQVBqQjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxjQUFjO2dCQUN2QixRQUFRLEVBQUUsa0JBQWtCO2FBQy9CO1NBQ0o7OzRGQUVRLG1CQUFtQjtrQkFYL0IsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsRUFBRTtvQkFDWCxPQUFPLEVBQUUsRUFBRTtvQkFDWCxZQUFZLEVBQUUsRUFBRTtvQkFDaEIsU0FBUyxFQUFFO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxjQUFjOzRCQUN2QixRQUFRLEVBQUUsa0JBQWtCO3lCQUMvQjtxQkFDSjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWE1Sb29tU2VydmljZSwgQVhNUm9vbVNlcnZpY2VJbXBsIH0gZnJvbSAnLi9yb29tLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtdLFxuICAgIGV4cG9ydHM6IFtdLFxuICAgIGRlY2xhcmF0aW9uczogW10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEFYTVJvb21TZXJ2aWNlLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IEFYTVJvb21TZXJ2aWNlSW1wbCxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1Sb29tRW50aXR5TW9kdWxlIHsgfVxuIl19","import { NgModule } from '@angular/core';\nimport { AXMMessageService, AXMMessageServiceImpl } from './message.service';\nimport * as i0 from \"@angular/core\";\nexport class AXMMessageEntityModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageEntityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageEntityModule }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageEntityModule, providers: [\n {\n provide: AXMMessageService,\n useClass: AXMMessageServiceImpl,\n },\n ] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMessageEntityModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [],\n exports: [],\n declarations: [],\n providers: [\n {\n provide: AXMMessageService,\n useClass: AXMMessageServiceImpl,\n },\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZW50aXRpZXMvbWVzc2FnZS9tZXNzYWdlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQWE3RSxNQUFNLE9BQU8sc0JBQXNCOytHQUF0QixzQkFBc0I7Z0hBQXRCLHNCQUFzQjtnSEFBdEIsc0JBQXNCLGFBUHBCO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsUUFBUSxFQUFFLHFCQUFxQjthQUNsQztTQUNKOzs0RkFFUSxzQkFBc0I7a0JBWGxDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixRQUFRLEVBQUUscUJBQXFCO3lCQUNsQztxQkFDSjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWE1NZXNzYWdlU2VydmljZSwgQVhNTWVzc2FnZVNlcnZpY2VJbXBsIH0gZnJvbSAnLi9tZXNzYWdlLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtdLFxuICAgIGV4cG9ydHM6IFtdLFxuICAgIGRlY2xhcmF0aW9uczogW10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEFYTU1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgdXNlQ2xhc3M6IEFYTU1lc3NhZ2VTZXJ2aWNlSW1wbCxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1NZXNzYWdlRW50aXR5TW9kdWxlIHsgfVxuIl19","// Entity Services\nexport * from './tab';\nexport * from './room';\nexport * from './message';\n// Entity Modules\nexport * from './tab/tab.module';\nexport * from './room/room.module';\nexport * from './message/message.module';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZW50aXRpZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0JBQWtCO0FBQ2xCLGNBQWMsT0FBTyxDQUFDO0FBQ3RCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsV0FBVyxDQUFDO0FBRTFCLGlCQUFpQjtBQUNqQixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEVudGl0eSBTZXJ2aWNlc1xuZXhwb3J0ICogZnJvbSAnLi90YWInO1xuZXhwb3J0ICogZnJvbSAnLi9yb29tJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnZSc7XG5cbi8vIEVudGl0eSBNb2R1bGVzXG5leHBvcnQgKiBmcm9tICcuL3RhYi90YWIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vcm9vbS9yb29tLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL21lc3NhZ2UvbWVzc2FnZS5tb2R1bGUnO1xuIl19","import { Injectable, Injector } from '@angular/core';\nimport { RootConfig } from './const';\nimport { messageFactory, roomFactory, tabFactory } from './entities';\nimport * as i0 from \"@angular/core\";\nexport class AXMConversationModuleEntityProvider {\n constructor(injector) {\n this.injector = injector;\n }\n preload() {\n const module = RootConfig.module.name;\n return Array.from(Object.values(RootConfig.entities)).map((entity) => ({\n module: module,\n entity: entity.name,\n }));\n }\n async get(moduleName, entityName) {\n switch (entityName) {\n case 'room':\n return roomFactory(this.injector);\n case 'message':\n return messageFactory(this.injector);\n case 'tab':\n return tabFactory(this.injector);\n default:\n return null;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModuleEntityProvider, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModuleEntityProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModuleEntityProvider, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i0.Injector }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2VudGl0eS5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFHckUsTUFBTSxPQUFPLG1DQUFtQztJQUM5QyxZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQUcsQ0FBQztJQUVuQyxPQUFPO1FBQ1osTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDdEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sRUFBRSxNQUFNO1lBQ2QsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1NBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVNLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBa0IsRUFBRSxVQUFrQjtRQUNyRCxRQUFRLFVBQVUsRUFBRSxDQUFDO1lBQ25CLEtBQUssTUFBTTtnQkFDVCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEMsS0FBSyxTQUFTO2dCQUNaLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxLQUFLLEtBQUs7Z0JBQ1IsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DO2dCQUNFLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDOytHQXRCVSxtQ0FBbUM7bUhBQW5DLG1DQUFtQzs7NEZBQW5DLG1DQUFtQztrQkFEL0MsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEVudGl0eSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUEVudGl0eURlZmluaXRpb25Mb2FkZXIsIEFYUEVudGl0eVByZWxvYWRFbnRpdHkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuL2NvbnN0JztcbmltcG9ydCB7IG1lc3NhZ2VGYWN0b3J5LCByb29tRmFjdG9yeSwgdGFiRmFjdG9yeSB9IGZyb20gJy4vZW50aXRpZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNQ29udmVyc2F0aW9uTW9kdWxlRW50aXR5UHJvdmlkZXIgaW1wbGVtZW50cyBBWFBFbnRpdHlEZWZpbml0aW9uTG9hZGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgcHVibGljIHByZWxvYWQoKTogQVhQRW50aXR5UHJlbG9hZEVudGl0eVtdIHtcbiAgICBjb25zdCBtb2R1bGUgPSBSb290Q29uZmlnLm1vZHVsZS5uYW1lO1xuICAgIHJldHVybiBBcnJheS5mcm9tKE9iamVjdC52YWx1ZXMoUm9vdENvbmZpZy5lbnRpdGllcykpLm1hcCgoZW50aXR5OiBhbnkpID0+ICh7XG4gICAgICBtb2R1bGU6IG1vZHVsZSxcbiAgICAgIGVudGl0eTogZW50aXR5Lm5hbWUsXG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldChtb2R1bGVOYW1lOiBzdHJpbmcsIGVudGl0eU5hbWU6IHN0cmluZyk6IFByb21pc2U8QVhQRW50aXR5IHwgbnVsbD4ge1xuICAgIHN3aXRjaCAoZW50aXR5TmFtZSkge1xuICAgICAgY2FzZSAncm9vbSc6XG4gICAgICAgIHJldHVybiByb29tRmFjdG9yeSh0aGlzLmluamVjdG9yKTtcbiAgICAgIGNhc2UgJ21lc3NhZ2UnOlxuICAgICAgICByZXR1cm4gbWVzc2FnZUZhY3RvcnkodGhpcy5pbmplY3Rvcik7XG4gICAgICBjYXNlICd0YWInOlxuICAgICAgICByZXR1cm4gdGFiRmFjdG9yeSh0aGlzLmluamVjdG9yKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19","export const AXPConversationMenuKeys = {\n Conversations: 'conversation:messages',\n Divider1: 'conversation:divider-1',\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5rZXlzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL21lbnUua2V5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNuQyxhQUFhLEVBQUUsdUJBQXVCO0lBQ3RDLFFBQVEsRUFBRSx3QkFBd0I7Q0FDNUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBWFBDb252ZXJzYXRpb25NZW51S2V5cyA9IHtcbiAgICBDb252ZXJzYXRpb25zOiAnY29udmVyc2F0aW9uOm1lc3NhZ2VzJyxcbiAgICBEaXZpZGVyMTogJ2NvbnZlcnNhdGlvbjpkaXZpZGVyLTEnLFxufSBhcyBjb25zdDtcblxuIl19","import { AXPSessionService } from '@acorex/platform/auth';\nimport { Injectable, inject } from '@angular/core';\nimport { RootConfig } from './const';\nimport { AXPConversationMenuKeys } from './menu.keys';\nimport * as i0 from \"@angular/core\";\nexport class AXMMenuProvider {\n constructor() {\n this.sessionService = inject(AXPSessionService);\n }\n async provide(context) {\n const module = RootConfig;\n const scope = RootConfig.config.i18n;\n context.addItems([\n {\n name: AXPConversationMenuKeys.Conversations,\n text: `t('plural-title', {scope:\"${scope}\"})`,\n path: `${this.sessionService.application?.name}/${module.config.route}`,\n priority: 2,\n icon: RootConfig.entities.room.icon,\n badgeKey: 'badge-chat',\n },\n {\n name: AXPConversationMenuKeys.Divider1,\n text: '',\n type: 'break',\n priority: 3,\n }\n ]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMenuProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMenuProvider }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMenuProvider, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9tZW51LnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDckMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUd0RCxNQUFNLE9BQU8sZUFBZTtJQUQ1QjtRQUVVLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0F1QnBEO0lBckJDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBK0I7UUFDM0MsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDO1FBQzFCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBRXJDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDZjtnQkFDRSxJQUFJLEVBQUUsdUJBQXVCLENBQUMsYUFBYTtnQkFDM0MsSUFBSSxFQUFFLDZCQUE2QixLQUFLLEtBQUs7Z0JBQzdDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtnQkFDdkUsUUFBUSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUk7Z0JBQ25DLFFBQVEsRUFBRSxZQUFZO2FBQ3ZCO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHVCQUF1QixDQUFDLFFBQVE7Z0JBQ3RDLElBQUksRUFBRSxFQUFFO2dCQUNSLElBQUksRUFBRSxPQUFPO2dCQUNiLFFBQVEsRUFBRSxDQUFDO2FBQ1o7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOytHQXZCVSxlQUFlO21IQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBTZXNzaW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vYXV0aCc7XG5pbXBvcnQgeyBBWFBNZW51UHJvdmlkZXIsIEFYUE1lbnVQcm92aWRlckNvbnRleHQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvb3RDb25maWcgfSBmcm9tICcuL2NvbnN0JztcbmltcG9ydCB7IEFYUENvbnZlcnNhdGlvbk1lbnVLZXlzIH0gZnJvbSAnLi9tZW51LmtleXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNTWVudVByb3ZpZGVyIGltcGxlbWVudHMgQVhQTWVudVByb3ZpZGVyIHtcbiAgcHJpdmF0ZSBzZXNzaW9uU2VydmljZSA9IGluamVjdChBWFBTZXNzaW9uU2VydmljZSk7XG5cbiAgYXN5bmMgcHJvdmlkZShjb250ZXh0OiBBWFBNZW51UHJvdmlkZXJDb250ZXh0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbW9kdWxlID0gUm9vdENvbmZpZztcbiAgICBjb25zdCBzY29wZSA9IFJvb3RDb25maWcuY29uZmlnLmkxOG47XG5cbiAgICBjb250ZXh0LmFkZEl0ZW1zKFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogQVhQQ29udmVyc2F0aW9uTWVudUtleXMuQ29udmVyc2F0aW9ucyxcbiAgICAgICAgdGV4dDogYHQoJ3BsdXJhbC10aXRsZScsIHtzY29wZTpcIiR7c2NvcGV9XCJ9KWAsXG4gICAgICAgIHBhdGg6IGAke3RoaXMuc2Vzc2lvblNlcnZpY2UuYXBwbGljYXRpb24/Lm5hbWV9LyR7bW9kdWxlLmNvbmZpZy5yb3V0ZX1gLFxuICAgICAgICBwcmlvcml0eTogMixcbiAgICAgICAgaWNvbjogUm9vdENvbmZpZy5lbnRpdGllcy5yb29tLmljb24sXG4gICAgICAgIGJhZGdlS2V5OiAnYmFkZ2UtY2hhdCcsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiBBWFBDb252ZXJzYXRpb25NZW51S2V5cy5EaXZpZGVyMSxcbiAgICAgICAgdGV4dDogJycsXG4gICAgICAgIHR5cGU6ICdicmVhaycsXG4gICAgICAgIHByaW9yaXR5OiAzLFxuICAgICAgfVxuICAgIF0pO1xuICB9XG59XG4iXX0=","export function convertChatMessageToNotification(room, message, currentUser) {\n return {\n channel: 'InApp',\n template: {\n category: 'Inbox',\n prority: 'Notice',\n icon: 'fa-light fa-comment',\n isPinned: false,\n },\n title: room.title || 'New Message',\n body: message.message.content,\n sender: message.author,\n receiver: currentUser,\n content: message.message,\n readAt: null,\n type: 'Chat',\n data: {\n roomId: room.id,\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1ub3RpZmljYXRpb24uaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NoYXQvY2hhdC1ub3RpZmljYXRpb24uaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sVUFBVSxnQ0FBZ0MsQ0FDOUMsSUFBaUIsRUFDakIsT0FBdUIsRUFDdkIsV0FBNkI7SUFFN0IsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFFBQVEsRUFBRTtZQUNSLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLElBQUksRUFBRSxxQkFBcUI7WUFDM0IsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxhQUFhO1FBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU87UUFDN0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixNQUFNLEVBQUUsSUFBSTtRQUNaLElBQUksRUFBRSxNQUFNO1FBQ1osSUFBSSxFQUFFO1lBQ0osTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1NBQ2hCO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWE1Ob3RpZmljYXRpb25JdGVtIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50JztcbmltcG9ydCB7IEFYUFVzZXJSZWZlcmVuY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhNQ2hhdE1lc3NhZ2UsIEFYTUNoYXRSb29tIH0gZnJvbSAnLi9jaGF0LnR5cGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydENoYXRNZXNzYWdlVG9Ob3RpZmljYXRpb24oXG4gIHJvb206IEFYTUNoYXRSb29tLFxuICBtZXNzYWdlOiBBWE1DaGF0TWVzc2FnZSxcbiAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4pOiBPbWl0PEFYTU5vdGlmaWNhdGlvbkl0ZW0sICdpZCcgfCAnZW50aXR5TmFtZScgfCAnY3JlYXRlQXQnPiB7XG4gIHJldHVybiB7XG4gICAgY2hhbm5lbDogJ0luQXBwJyxcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgY2F0ZWdvcnk6ICdJbmJveCcsXG4gICAgICBwcm9yaXR5OiAnTm90aWNlJyxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS1jb21tZW50JyxcbiAgICAgIGlzUGlubmVkOiBmYWxzZSxcbiAgICB9LFxuICAgIHRpdGxlOiByb29tLnRpdGxlIHx8ICdOZXcgTWVzc2FnZScsXG4gICAgYm9keTogbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnQsXG4gICAgc2VuZGVyOiBtZXNzYWdlLmF1dGhvcixcbiAgICByZWNlaXZlcjogY3VycmVudFVzZXIsXG4gICAgY29udGVudDogbWVzc2FnZS5tZXNzYWdlLFxuICAgIHJlYWRBdDogbnVsbCxcbiAgICB0eXBlOiAnQ2hhdCcsXG4gICAgZGF0YToge1xuICAgICAgcm9vbUlkOiByb29tLmlkLFxuICAgIH0sXG4gIH07XG59XG4iXX0=","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class AXMChatRealtimeService {\n}\nexport class AXMChatRealtimeServiceImpl extends AXMChatRealtimeService {\n constructor() {\n super(...arguments);\n this._room$ = new Subject();\n this.room$ = this._room$.asObservable();\n this._message$ = new Subject();\n this.message$ = this._message$.asObservable();\n this._tab$ = new Subject();\n this.tab$ = this._tab$.asObservable();\n this._typingStatus$ = new Subject();\n this.typingStatus$ = this._typingStatus$.asObservable();\n }\n notifyRoom(event) {\n this._room$.next(event);\n }\n notifyMessage(event) {\n this._message$.next(event);\n }\n notifyTab(event) {\n this._tab$.next(event);\n }\n startTyping(user, roomId) {\n this._typingStatus$.next({ roomId, user, isTyping: true });\n }\n stopTyping(user, roomId) {\n this._typingStatus$.next({ roomId, user, isTyping: false });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatRealtimeServiceImpl, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatRealtimeServiceImpl, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatRealtimeServiceImpl, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1yZWFsdGltZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NoYXQvY2hhdC1yZWFsdGltZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFHM0MsTUFBTSxPQUFnQixzQkFBc0I7Q0FXM0M7QUFLRCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsc0JBQXNCO0lBSHRFOztRQUltQixXQUFNLEdBQUcsSUFBSSxPQUFPLEVBQW9CLENBQUM7UUFDakQsVUFBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFM0IsY0FBUyxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBQ3ZELGFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRWpDLFVBQUssR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUMvQyxTQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV6QixtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFpRSxDQUFDO1FBQ3RHLGtCQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztLQXFCN0Q7SUFuQkMsVUFBVSxDQUFDLEtBQXVCO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBMEI7UUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFzQjtRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQXNCLEVBQUUsTUFBYztRQUNoRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFzQixFQUFFLE1BQWM7UUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7K0dBL0JVLDBCQUEwQjttSEFBMUIsMEJBQTBCLGNBRnpCLE1BQU07OzRGQUVQLDBCQUEwQjtrQkFIdEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBVc2VyUmVmZXJlbmNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYTUNoYXRNZXNzYWdlRXZlbnQsIEFYTUNoYXRSb29tRXZlbnQsIEFYTUNoYXRUYWJFdmVudCB9IGZyb20gJy4vY2hhdC50eXBlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYTUNoYXRSZWFsdGltZVNlcnZpY2Uge1xuICBhYnN0cmFjdCByZWFkb25seSByb29tJDogT2JzZXJ2YWJsZTxBWE1DaGF0Um9vbUV2ZW50PjtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgbWVzc2FnZSQ6IE9ic2VydmFibGU8QVhNQ2hhdE1lc3NhZ2VFdmVudD47XG4gIGFic3RyYWN0IHJlYWRvbmx5IHRhYiQ6IE9ic2VydmFibGU8QVhNQ2hhdFRhYkV2ZW50PjtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgdHlwaW5nU3RhdHVzJDogT2JzZXJ2YWJsZTx7IHJvb21JZDogc3RyaW5nOyB1c2VyOiBBWFBVc2VyUmVmZXJlbmNlOyBpc1R5cGluZzogYm9vbGVhbiB9PjtcblxuICBhYnN0cmFjdCBub3RpZnlSb29tKGV2ZW50OiBBWE1DaGF0Um9vbUV2ZW50KTogdm9pZDtcbiAgYWJzdHJhY3Qgbm90aWZ5TWVzc2FnZShldmVudDogQVhNQ2hhdE1lc3NhZ2VFdmVudCk6IHZvaWQ7XG4gIGFic3RyYWN0IG5vdGlmeVRhYihldmVudDogQVhNQ2hhdFRhYkV2ZW50KTogdm9pZDtcbiAgYWJzdHJhY3Qgc3RhcnRUeXBpbmcodXNlcjogQVhQVXNlclJlZmVyZW5jZSwgcm9vbUlkOiBzdHJpbmcpOiB2b2lkO1xuICBhYnN0cmFjdCBzdG9wVHlwaW5nKHVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsIHJvb21JZDogc3RyaW5nKTogdm9pZDtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYTUNoYXRSZWFsdGltZVNlcnZpY2VJbXBsIGV4dGVuZHMgQVhNQ2hhdFJlYWx0aW1lU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jvb20kID0gbmV3IFN1YmplY3Q8QVhNQ2hhdFJvb21FdmVudD4oKTtcbiAgcmVhZG9ubHkgcm9vbSQgPSB0aGlzLl9yb29tJC5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tZXNzYWdlJCA9IG5ldyBTdWJqZWN0PEFYTUNoYXRNZXNzYWdlRXZlbnQ+KCk7XG4gIHJlYWRvbmx5IG1lc3NhZ2UkID0gdGhpcy5fbWVzc2FnZSQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdGFiJCA9IG5ldyBTdWJqZWN0PEFYTUNoYXRUYWJFdmVudD4oKTtcbiAgcmVhZG9ubHkgdGFiJCA9IHRoaXMuX3RhYiQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwaW5nU3RhdHVzJCA9IG5ldyBTdWJqZWN0PHsgcm9vbUlkOiBzdHJpbmc7IHVzZXI6IEFYUFVzZXJSZWZlcmVuY2U7IGlzVHlwaW5nOiBib29sZWFuIH0+KCk7XG4gIHJlYWRvbmx5IHR5cGluZ1N0YXR1cyQgPSB0aGlzLl90eXBpbmdTdGF0dXMkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIG5vdGlmeVJvb20oZXZlbnQ6IEFYTUNoYXRSb29tRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9yb29tJC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeU1lc3NhZ2UoZXZlbnQ6IEFYTUNoYXRNZXNzYWdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLl9tZXNzYWdlJC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIG5vdGlmeVRhYihldmVudDogQVhNQ2hhdFRhYkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fdGFiJC5uZXh0KGV2ZW50KTtcbiAgfVxuXG4gIHN0YXJ0VHlwaW5nKHVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsIHJvb21JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwaW5nU3RhdHVzJC5uZXh0KHsgcm9vbUlkLCB1c2VyLCBpc1R5cGluZzogdHJ1ZSB9KTtcbiAgfVxuXG4gIHN0b3BUeXBpbmcodXNlcjogQVhQVXNlclJlZmVyZW5jZSwgcm9vbUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl90eXBpbmdTdGF0dXMkLm5leHQoeyByb29tSWQsIHVzZXIsIGlzVHlwaW5nOiBmYWxzZSB9KTtcbiAgfVxufVxuIl19","import { inject, Injectable } from '@angular/core';\nimport { AXMMessageService } from '../../entities/message/message.service';\nimport { AXMRoomService } from '../../entities/room/room.service';\nimport { AXMConversationTabService } from '../../entities/tab/tab.service';\nimport * as i0 from \"@angular/core\";\nexport class AXMChatService {\n}\nexport class AXMChatServiceImpl extends AXMChatService {\n constructor() {\n super(...arguments);\n this.roomService = inject(AXMRoomService);\n this.messageService = inject(AXMMessageService);\n this.tabService = inject(AXMConversationTabService);\n }\n createRoom(members, title, currentUser, avatar) {\n const room = {\n members,\n title: title,\n topic: members.length > 2 ? 'group' : 'personal',\n auditInfo: {\n created: { at: new Date(), by: currentUser },\n updated: { at: new Date(), by: currentUser },\n },\n type: 'chat',\n avatar: avatar ?? null,\n };\n return this.roomService.insertOne(room).then((id) => this.roomService.getOne(id));\n }\n getRoom(roomId) {\n return this.roomService.getOne(roomId);\n }\n async listRooms(skip = 0, take = 100) {\n return this.roomService.query({\n skip,\n take,\n filter: { field: 'type', value: 'chat', operator: { type: 'equal' } },\n });\n }\n updateRoom(roomId, data, currentUser) {\n const update = { ...data, auditInfo: { updated: { at: new Date(), by: currentUser } } };\n return this.roomService.updateOne(roomId, update);\n }\n async deleteRoom(roomId) {\n await this.roomService.deleteOne(roomId);\n return true;\n }\n createTab(data) {\n return this.tabService.insertOne(data).then((id) => this.tabService.getOne(id));\n }\n getTab(tabId) {\n return this.tabService.getOne(tabId);\n }\n listTabs(skip = 0, take = 100) {\n return this.tabService.query({ skip, take });\n }\n updateTab(tabId, data) {\n return this.tabService.updateOne(tabId, data);\n }\n async deleteTab(tabId) {\n await this.tabService.deleteOne(tabId);\n return true;\n }\n sendMessage(roomId, content, author, contentType = 'text', replyId) {\n const messageContent = { content, contentType };\n const message = {\n roomId,\n message: messageContent,\n author,\n replyId,\n auditInfo: {\n created: { at: new Date(), by: author },\n updated: { at: new Date(), by: author },\n },\n reactions: [],\n seen: [],\n };\n return this.messageService.insertOne({ ...message }).then((id) => this.messageService.getOne(id));\n }\n async getMessages(roomId, skip = 0, take = 99) {\n return this.messageService.query({\n skip,\n take,\n filter: { field: 'roomId', value: roomId, operator: { type: 'equal' } },\n sort: [{ field: 'created.at', dir: 'desc' }],\n });\n }\n getMessage(messageId) {\n return this.messageService.getOne(messageId);\n }\n editMessage(messageId, content, currentUser, contentType = 'text') {\n const messageContent = { content, contentType };\n return this.messageService.updateOne(messageId, {\n message: messageContent,\n auditInfo: {\n updated: { at: new Date(), by: currentUser },\n },\n });\n }\n async deleteMessage(messageId) {\n await this.messageService.deleteOne(messageId);\n return true;\n }\n pinMessage(messageId, isPinned, currentUser) {\n return this.messageService.updateOne(messageId, {\n isPinned,\n auditInfo: {\n updated: { at: new Date(), by: currentUser },\n },\n });\n }\n updateReactions(messageId, reactions, currentUser) {\n return this.messageService.updateOne(messageId, {\n reactions,\n auditInfo: {\n updated: { at: new Date(), by: currentUser },\n },\n });\n }\n getReactions(messageId) {\n return this.messageService.getOne(messageId).then((m) => m.reactions || []);\n }\n updateSeen(messageId, seen, currentUser) {\n return this.messageService.updateOne(messageId, {\n seen,\n auditInfo: {\n updated: { at: new Date(), by: currentUser },\n },\n });\n }\n getSeenBy(messageId) {\n return this.messageService.getOne(messageId).then((m) => m.seen || []);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatServiceImpl, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatServiceImpl, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatServiceImpl, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NoYXQvY2hhdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBTTNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFHM0UsTUFBTSxPQUFnQixjQUFjO0NBa0VuQztBQUtELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxjQUFjO0lBSHREOztRQUltQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNDLGVBQVUsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztLQXVLakU7SUFyS0MsVUFBVSxDQUNSLE9BQTJCLEVBQzNCLEtBQXlCLEVBQ3pCLFdBQTZCLEVBQzdCLE1BQWU7UUFFZixNQUFNLElBQUksR0FBb0M7WUFDNUMsT0FBTztZQUNQLEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVU7WUFDaEQsU0FBUyxFQUFFO2dCQUNULE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUU7Z0JBQzVDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUs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QUNqQixJQUEyQixFQUMzQixXQUE2QjtRQUU3QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUM5QyxJQUFJO1lBQ0osU0FBUyxFQUFFO2dCQUNULE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUU7YUFDN0M7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQWlCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7K0dBektVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBDb250ZW50LCBBWFBDb250ZW50VHlwZSwgQVhQVXNlclJlZmVyZW5jZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTU1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZW50aXRpZXMvbWVzc2FnZS9tZXNzYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQVhNQ29udmVyc2F0aW9uTWVzc2FnZSxcbiAgQVhNQ29udmVyc2F0aW9uUmVhY3Rpb24sXG4gIEFYTUNvbnZlcnNhdGlvblNlZW4sXG59IGZyb20gJy4uLy4uL2VudGl0aWVzL21lc3NhZ2UvbWVzc2FnZS50eXBlcyc7XG5pbXBvcnQgeyBBWE1Sb29tU2VydmljZSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3Jvb20vcm9vbS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTUNvbnZlcnNhdGlvblJvb20gfSBmcm9tICcuLi8uLi9lbnRpdGllcy9yb29tL3Jvb20udHlwZXMnO1xuaW1wb3J0IHsgQVhNQ29udmVyc2F0aW9uVGFiU2VydmljZSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3RhYi90YWIuc2VydmljZSc7XG5pbXBvcnQgeyBBWE1Db252ZXJzYXRpb25UYWIgfSBmcm9tICcuLi8uLi9lbnRpdGllcy90YWIvdGFiLnR5cGVzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYTUNoYXRTZXJ2aWNlIHtcbiAgLy8gQ2hhdFJvb21TZXJ2aWNlIE1ldGhvZHNcbiAgYWJzdHJhY3QgY3JlYXRlUm9vbShcbiAgICBtZW1iZXJzOiBBWFBVc2VyUmVmZXJlbmNlW10sXG4gICAgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50VXNlcjogQVhQVXNlclJlZmVyZW5jZSxcbiAgICBhdmF0YXI/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uUm9vbT47XG4gIGFic3RyYWN0IGdldFJvb20ocm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJvb20+O1xuICBhYnN0cmFjdCBsaXN0Um9vbXMoc2tpcD86IG51bWJlciwgdGFrZT86IG51bWJlcik6IFByb21pc2U8eyBpdGVtczogQVhNQ29udmVyc2F0aW9uUm9vbVtdOyB0b3RhbDogbnVtYmVyIH0+O1xuICBhYnN0cmFjdCB1cGRhdGVSb29tKFxuICAgIHJvb21JZDogc3RyaW5nLFxuICAgIGRhdGE6IFBhcnRpYWw8QVhNQ29udmVyc2F0aW9uUm9vbT4sXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uUm9vbT47XG4gIGFic3RyYWN0IGRlbGV0ZVJvb20ocm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8vIENoYXRUYWJTZXJ2aWNlIE1ldGhvZHNcbiAgYWJzdHJhY3QgY3JlYXRlVGFiKGRhdGE6IE9taXQ8QVhNQ29udmVyc2F0aW9uVGFiLCAnaWQnPik6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uVGFiPjtcbiAgYWJzdHJhY3QgZ2V0VGFiKHRhYklkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblRhYj47XG4gIGFic3RyYWN0IGxpc3RUYWJzKHNraXA/OiBudW1iZXIsIHRha2U/OiBudW1iZXIpOiBQcm9taXNlPHsgaXRlbXM6IEFYTUNvbnZlcnNhdGlvblRhYltdOyB0b3RhbDogbnVtYmVyIH0+O1xuICBhYnN0cmFjdCB1cGRhdGVUYWIodGFiSWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxBWE1Db252ZXJzYXRpb25UYWI+KTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25UYWI+O1xuICBhYnN0cmFjdCBkZWxldGVUYWIodGFiSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLy8gQ2hhdE1lc3NhZ2VTZXJ2aWNlIE1ldGhvZHNcbiAgYWJzdHJhY3Qgc2VuZE1lc3NhZ2UoXG4gICAgcm9vbUlkOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIGF1dGhvcjogQVhQVXNlclJlZmVyZW5jZSxcbiAgICBjb250ZW50VHlwZT86IEFYUENvbnRlbnRUeXBlLFxuICAgIHJlcGx5SWQ/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT47XG4gIGFic3RyYWN0IGdldE1lc3NhZ2VzKFxuICAgIHJvb21JZDogc3RyaW5nLFxuICAgIHNraXA/OiBudW1iZXIsXG4gICAgdGFrZT86IG51bWJlcixcbiAgKTogUHJvbWlzZTx7IGl0ZW1zOiBBWE1Db252ZXJzYXRpb25NZXNzYWdlW107IHRvdGFsOiBudW1iZXIgfT47XG4gIGFic3RyYWN0IGdldE1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2U+O1xuICBhYnN0cmFjdCBlZGl0TWVzc2FnZShcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICAgY29udGVudFR5cGU/OiBBWFBDb250ZW50VHlwZSxcbiAgKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25NZXNzYWdlPjtcbiAgYWJzdHJhY3QgZGVsZXRlTWVzc2FnZShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj47XG4gIGFic3RyYWN0IHBpbk1lc3NhZ2UoXG4gICAgbWVzc2FnZUlkOiBzdHJpbmcsXG4gICAgaXNQaW5uZWQ6IGJvb2xlYW4sXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT47XG5cbiAgLy8gQ2hhdFJlYWN0aW9uU2VydmljZSBNZXRob2RzXG4gIGFic3RyYWN0IHVwZGF0ZVJlYWN0aW9ucyhcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICByZWFjdGlvbnM6IEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW10sXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT47XG4gIGFic3RyYWN0IGdldFJlYWN0aW9ucyhtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uUmVhY3Rpb25bXT47XG5cbiAgLy8gQ2hhdFNlZW5TZXJ2aWNlIE1ldGhvZHNcbiAgYWJzdHJhY3QgdXBkYXRlU2VlbihcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICBzZWVuOiBBWE1Db252ZXJzYXRpb25TZWVuW10sXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT47XG4gIGFic3RyYWN0IGdldFNlZW5CeShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uU2VlbltdPjtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYTUNoYXRTZXJ2aWNlSW1wbCBleHRlbmRzIEFYTUNoYXRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSByb29tU2VydmljZSA9IGluamVjdChBWE1Sb29tU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2UgPSBpbmplY3QoQVhNTWVzc2FnZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHRhYlNlcnZpY2UgPSBpbmplY3QoQVhNQ29udmVyc2F0aW9uVGFiU2VydmljZSk7XG5cbiAgY3JlYXRlUm9vbShcbiAgICBtZW1iZXJzOiBBWFBVc2VyUmVmZXJlbmNlW10sXG4gICAgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50VXNlcjogQVhQVXNlclJlZmVyZW5jZSxcbiAgICBhdmF0YXI/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uUm9vbT4ge1xuICAgIGNvbnN0IHJvb206IE9taXQ8QVhNQ29udmVyc2F0aW9uUm9vbSwgJ2lkJz4gPSB7XG4gICAgICBtZW1iZXJzLFxuICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgdG9waWM6IG1lbWJlcnMubGVuZ3RoID4gMiA/ICdncm91cCcgOiAncGVyc29uYWwnLFxuICAgICAgYXVkaXRJbmZvOiB7XG4gICAgICAgIGNyZWF0ZWQ6IHsgYXQ6IG5ldyBEYXRlKCksIGJ5OiBjdXJyZW50VXNlciB9LFxuICAgICAgICB1cGRhdGVkOiB7IGF0OiBuZXcgRGF0ZSgpLCBieTogY3VycmVudFVzZXIgfSxcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnY2hhdCcsXG4gICAgICBhdmF0YXI6IGF2YXRhciA/PyBudWxsLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucm9vbVNlcnZpY2UuaW5zZXJ0T25lKHJvb20pLnRoZW4oKGlkKSA9PiB0aGlzLnJvb21TZXJ2aWNlLmdldE9uZShpZCkpO1xuICB9XG5cbiAgZ2V0Um9vbShyb29tSWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uUm9vbT4ge1xuICAgIHJldHVybiB0aGlzLnJvb21TZXJ2aWNlLmdldE9uZShyb29tSWQpO1xuICB9XG5cbiAgYXN5bmMgbGlzdFJvb21zKHNraXAgPSAwLCB0YWtlID0gMTAwKTogUHJvbWlzZTx7IGl0ZW1zOiBBWE1Db252ZXJzYXRpb25Sb29tW107IHRvdGFsOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLnJvb21TZXJ2aWNlLnF1ZXJ5KHtcbiAgICAgIHNraXAsXG4gICAgICB0YWtlLFxuICAgICAgZmlsdGVyOiB7IGZpZWxkOiAndHlwZScsIHZhbHVlOiAnY2hhdCcsIG9wZXJhdG9yOiB7IHR5cGU6ICdlcXVhbCcgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlUm9vbShcbiAgICByb29tSWQ6IHN0cmluZyxcbiAgICBkYXRhOiBQYXJ0aWFsPEFYTUNvbnZlcnNhdGlvblJvb20+LFxuICAgIGN1cnJlbnRVc2VyOiBBWFBVc2VyUmVmZXJlbmNlLFxuICApOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJvb20+IHtcbiAgICBjb25zdCB1cGRhdGUgPSB7IC4uLmRhdGEsIGF1ZGl0SW5mbzogeyB1cGRhdGVkOiB7IGF0OiBuZXcgRGF0ZSgpLCBieTogY3VycmVudFVzZXIgfSB9IH07XG4gICAgcmV0dXJuIHRoaXMucm9vbVNlcnZpY2UudXBkYXRlT25lKHJvb21JZCwgdXBkYXRlKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVJvb20ocm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLnJvb21TZXJ2aWNlLmRlbGV0ZU9uZShyb29tSWQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY3JlYXRlVGFiKGRhdGE6IE9taXQ8QVhNQ29udmVyc2F0aW9uVGFiLCAnaWQnPik6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uVGFiPiB7XG4gICAgcmV0dXJuIHRoaXMudGFiU2VydmljZS5pbnNlcnRPbmUoZGF0YSkudGhlbigoaWQpID0+IHRoaXMudGFiU2VydmljZS5nZXRPbmUoaWQpKTtcbiAgfVxuXG4gIGdldFRhYih0YWJJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25UYWI+IHtcbiAgICByZXR1cm4gdGhpcy50YWJTZXJ2aWNlLmdldE9uZSh0YWJJZCk7XG4gIH1cblxuICBsaXN0VGFicyhza2lwID0gMCwgdGFrZSA9IDEwMCk6IFByb21pc2U8eyBpdGVtczogQVhNQ29udmVyc2F0aW9uVGFiW107IHRvdGFsOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLnRhYlNlcnZpY2UucXVlcnkoeyBza2lwLCB0YWtlIH0pO1xuICB9XG5cbiAgdXBkYXRlVGFiKHRhYklkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8QVhNQ29udmVyc2F0aW9uVGFiPik6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uVGFiPiB7XG4gICAgcmV0dXJuIHRoaXMudGFiU2VydmljZS51cGRhdGVPbmUodGFiSWQsIGRhdGEpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlVGFiKHRhYklkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLnRhYlNlcnZpY2UuZGVsZXRlT25lKHRhYklkKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHNlbmRNZXNzYWdlKFxuICAgIHJvb21JZDogc3RyaW5nLFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBhdXRob3I6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICAgY29udGVudFR5cGU6IEFYUENvbnRlbnRUeXBlID0gJ3RleHQnLFxuICAgIHJlcGx5SWQ/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VDb250ZW50OiBBWFBDb250ZW50ID0geyBjb250ZW50LCBjb250ZW50VHlwZSB9O1xuICAgIGNvbnN0IG1lc3NhZ2U6IE9taXQ8QVhNQ29udmVyc2F0aW9uTWVzc2FnZSwgJ2lkJz4gPSB7XG4gICAgICByb29tSWQsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlQ29udGVudCxcbiAgICAgIGF1dGhvcixcbiAgICAgIHJlcGx5SWQsXG4gICAgICBhdWRpdEluZm86IHtcbiAgICAgICAgY3JlYXRlZDogeyBhdDogbmV3IERhdGUoKSwgYnk6IGF1dGhvciB9LFxuICAgICAgICB1cGRhdGVkOiB7IGF0OiBuZXcgRGF0ZSgpLCBieTogYXV0aG9yIH0sXG4gICAgICB9LFxuICAgICAgcmVhY3Rpb25zOiBbXSxcbiAgICAgIHNlZW46IFtdLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5zZXJ0T25lKHsgLi4ubWVzc2FnZSB9KS50aGVuKChpZCkgPT4gdGhpcy5tZXNzYWdlU2VydmljZS5nZXRPbmUoaWQpKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1lc3NhZ2VzKHJvb21JZDogc3RyaW5nLCBza2lwID0gMCwgdGFrZSA9IDk5KTogUHJvbWlzZTx7IGl0ZW1zOiBBWE1Db252ZXJzYXRpb25NZXNzYWdlW107IHRvdGFsOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnF1ZXJ5KHtcbiAgICAgIHNraXAsXG4gICAgICB0YWtlLFxuICAgICAgZmlsdGVyOiB7IGZpZWxkOiAncm9vbUlkJywgdmFsdWU6IHJvb21JZCwgb3BlcmF0b3I6IHsgdHlwZTogJ2VxdWFsJyB9IH0sXG4gICAgICBzb3J0OiBbeyBmaWVsZDogJ2NyZWF0ZWQuYXQnLCBkaXI6ICdkZXNjJyB9IGFzIGFueV0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRNZXNzYWdlKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25NZXNzYWdlPiB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVNlcnZpY2UuZ2V0T25lKG1lc3NhZ2VJZCk7XG4gIH1cblxuICBlZGl0TWVzc2FnZShcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICAgY29udGVudFR5cGU6IEFYUENvbnRlbnRUeXBlID0gJ3RleHQnLFxuICApOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2U+IHtcbiAgICBjb25zdCBtZXNzYWdlQ29udGVudDogQVhQQ29udGVudCA9IHsgY29udGVudCwgY29udGVudFR5cGUgfTtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU2VydmljZS51cGRhdGVPbmUobWVzc2FnZUlkLCB7XG4gICAgICBtZXNzYWdlOiBtZXNzYWdlQ29udGVudCxcbiAgICAgIGF1ZGl0SW5mbzoge1xuICAgICAgICB1cGRhdGVkOiB7IGF0OiBuZXcgRGF0ZSgpLCBieTogY3VycmVudFVzZXIgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVNZXNzYWdlKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgYXdhaXQgdGhpcy5tZXNzYWdlU2VydmljZS5kZWxldGVPbmUobWVzc2FnZUlkKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHBpbk1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcsIGlzUGlubmVkOiBib29sZWFuLCBjdXJyZW50VXNlcjogQVhQVXNlclJlZmVyZW5jZSk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnVwZGF0ZU9uZShtZXNzYWdlSWQsIHtcbiAgICAgIGlzUGlubmVkLFxuICAgICAgYXVkaXRJbmZvOiB7XG4gICAgICAgIHVwZGF0ZWQ6IHsgYXQ6IG5ldyBEYXRlKCksIGJ5OiBjdXJyZW50VXNlciB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZVJlYWN0aW9ucyhcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICByZWFjdGlvbnM6IEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW10sXG4gICAgY3VycmVudFVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnVwZGF0ZU9uZShtZXNzYWdlSWQsIHtcbiAgICAgIHJlYWN0aW9ucyxcbiAgICAgIGF1ZGl0SW5mbzoge1xuICAgICAgICB1cGRhdGVkOiB7IGF0OiBuZXcgRGF0ZSgpLCBieTogY3VycmVudFVzZXIgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRSZWFjdGlvbnMobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU2VydmljZS5nZXRPbmUobWVzc2FnZUlkKS50aGVuKChtKSA9PiBtLnJlYWN0aW9ucyB8fCBbXSk7XG4gIH1cblxuICB1cGRhdGVTZWVuKFxuICAgIG1lc3NhZ2VJZDogc3RyaW5nLFxuICAgIHNlZW46IEFYTUNvbnZlcnNhdGlvblNlZW5bXSxcbiAgICBjdXJyZW50VXNlcjogQVhQVXNlclJlZmVyZW5jZSxcbiAgKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25NZXNzYWdlPiB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVNlcnZpY2UudXBkYXRlT25lKG1lc3NhZ2VJZCwge1xuICAgICAgc2VlbixcbiAgICAgIGF1ZGl0SW5mbzoge1xuICAgICAgICB1cGRhdGVkOiB7IGF0OiBuZXcgRGF0ZSgpLCBieTogY3VycmVudFVzZXIgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRTZWVuQnkobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblNlZW5bXT4ge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmdldE9uZShtZXNzYWdlSWQpLnRoZW4oKG0pID0+IG0uc2VlbiB8fCBbXSk7XG4gIH1cbn1cbiJdfQ==","import { AXMNotificationConnectorService } from '@acorex/modules/notification-management';\nimport { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable } from '@angular/core';\nimport { convertChatMessageToNotification } from './chat-notification.helper';\nimport { AXMChatRealtimeService } from './chat-realtime.service';\nimport { AXMChatService } from './chat.service';\nimport * as i0 from \"@angular/core\";\nexport class AXMChatManagementService {\n constructor() {\n this.chatService = inject(AXMChatService);\n this.sessionService = inject(AXPSessionService);\n this.usersService = inject(AXMUsersEntityService);\n this.realtimeService = inject(AXMChatRealtimeService);\n this.notificationConnectorService = inject(AXMNotificationConnectorService);\n }\n getCurrentUser() {\n const user = this.sessionService.user;\n if (!user) {\n throw new Error('No authenticated user found.');\n }\n return {\n id: user.id,\n type: 'user',\n fullName: user.title?.trim(),\n username: user.name?.trim(),\n };\n }\n async getUserInfo(userId) {\n try {\n const user = await this.usersService.getOne(userId);\n return {\n id: user.id,\n type: 'user',\n fullName: `${user.displayName}`.trim(),\n username: user.username?.trim(),\n };\n }\n catch (error) {\n console.error(`Failed to get user info for ID: ${userId}`, error);\n return {\n id: userId,\n type: 'user',\n fullName: 'Unknown User',\n username: 'Unknown User',\n };\n }\n }\n async formatMessage(message) {\n if (message.author && !message.author.fullName) {\n const authorInfo = await this.getUserInfo(message.author.id);\n return {\n ...message,\n author: authorInfo,\n };\n }\n return message;\n }\n async getUnreadCount(roomId) {\n const { items } = await this.chatService.getMessages(roomId, 0, 99);\n const currentUserId = this.getCurrentUser().id;\n const unreadMessages = items.filter((message) => {\n const isFromCurrentUser = message.author.id === currentUserId;\n const isReadByCurrentUser = (message.seen || []).some((seen) => seen.author.id === currentUserId);\n return !isFromCurrentUser && !isReadByCurrentUser;\n });\n return unreadMessages.length;\n }\n async formatRoom(room) {\n const messages = await this.getMessages(room.id, 0, 1);\n const lastMessage = messages.items.length > 0 ? messages.items[0] : undefined;\n const unreadCount = await this.getUnreadCount(room.id);\n const currentUserId = this.getCurrentUser().id;\n const members = await Promise.all(room.members.map(async (member) => {\n if (member.fullName) {\n return member;\n }\n return this.getUserInfo(member.id);\n }));\n return {\n ...room,\n lastMessage,\n unreadCount,\n members: members.filter((m) => m.id !== currentUserId),\n };\n }\n async createRoom(memberIds, title, avatar) {\n if (memberIds.length === 0) {\n throw new Error('At least one member is required to create a room');\n }\n const currentUser = this.getCurrentUser();\n const allMemberIds = [...new Set([...memberIds, currentUser.id])];\n const memberReferences = await Promise.all(allMemberIds.map((id) => this.getUserInfo(id)));\n const newRoom = await this.chatService.createRoom(memberReferences, title, currentUser, avatar || undefined);\n const newChatRoom = await this.formatRoom(newRoom);\n this.realtimeService.notifyRoom({ type: 'add', payload: newChatRoom });\n return newChatRoom;\n }\n async getRoom(roomId) {\n const room = await this.chatService.getRoom(roomId);\n if (!room) {\n throw new Error(`Chat room with ID ${roomId} not found.`);\n }\n return this.formatRoom(room);\n }\n async listRooms(skip = 0, take = 100) {\n const { items } = await this.chatService.listRooms(skip, take);\n const settledRooms = await Promise.allSettled(items.map((room) => this.formatRoom(room)));\n const chatRooms = settledRooms\n .filter((result) => {\n if (result.status === 'rejected') {\n console.error('Failed to fetch room details:', result.reason);\n return false;\n }\n return true;\n })\n .map((result) => result.value);\n return { items: chatRooms, total: chatRooms.length };\n }\n async updateRoom(roomId, data) {\n const currentUser = this.getCurrentUser();\n return this.chatService.updateRoom(roomId, data, currentUser);\n }\n async deleteRoom(roomId) {\n const result = await this.chatService.deleteRoom(roomId);\n if (result) {\n this.realtimeService.notifyRoom({ type: 'remove', payload: roomId });\n }\n return result;\n }\n async addParticipant(roomId, userId) {\n const room = await this.chatService.getRoom(roomId);\n if (room.members.some((m) => m.id === userId))\n return room;\n const userRef = await this.getUserInfo(userId);\n const updatedMembers = [...room.members, userRef];\n const currentUser = this.getCurrentUser();\n return this.chatService.updateRoom(roomId, { members: updatedMembers }, currentUser);\n }\n async removeParticipant(roomId, userId) {\n const room = await this.chatService.getRoom(roomId);\n const updatedMembers = room.members.filter((member) => member.id !== userId);\n const currentUser = this.getCurrentUser();\n return this.chatService.updateRoom(roomId, { members: updatedMembers }, currentUser);\n }\n async createTab(data) {\n const newTab = await this.chatService.createTab(data);\n this.realtimeService.notifyTab({ type: 'add', payload: newTab });\n return newTab;\n }\n getTab(tabId) {\n return this.chatService.getTab(tabId);\n }\n listTabs(skip, take) {\n return this.chatService.listTabs(skip, take);\n }\n updateTab(tabId, data) {\n return this.chatService.updateTab(tabId, data);\n }\n async deleteTab(tabId) {\n const result = await this.chatService.deleteTab(tabId);\n if (result) {\n this.realtimeService.notifyTab({ type: 'remove', payload: tabId });\n }\n return result;\n }\n async addIncludeRoomToTab(tabId, roomId) {\n const tab = await this.getTab(tabId);\n const room = await this.getRoom(roomId);\n if (tab && room) {\n const updatedRooms = [...tab.includeRooms, room];\n return this.updateTab(tabId, { includeRooms: updatedRooms });\n }\n else {\n throw new Error(`Tab with ID ${tabId} or room with ID ${roomId} not found.`);\n }\n }\n async removeIncludeRoomFromTab(tabId, roomId) {\n const tab = await this.getTab(tabId);\n const room = await this.getRoom(roomId);\n if (tab && room) {\n if (tab.includeRooms.some((r) => r.id === roomId)) {\n const updatedRooms = tab.includeRooms.filter((r) => r.id !== roomId);\n return this.updateTab(tabId, { includeRooms: updatedRooms });\n }\n else {\n throw new Error(`${tabId} tab does not include room with ID ${roomId}.`);\n }\n }\n else {\n throw new Error(`Tab with ID ${tabId} or room with ID ${roomId} not found.`);\n }\n }\n async addExcludeRoomToTab(tabId, roomId) {\n const tab = await this.getTab(tabId);\n const room = await this.getRoom(roomId);\n if (tab && room) {\n const updatedRooms = [...tab.excludeRooms, room];\n return this.updateTab(tabId, { excludeRooms: updatedRooms });\n }\n else {\n throw new Error(`Tab with ID ${tabId} or room with ID ${roomId} not found.`);\n }\n }\n async removeExcludeRoomFromTab(tabId, roomId) {\n const tab = await this.getTab(tabId);\n const room = await this.getRoom(roomId);\n if (tab && room) {\n if (tab.excludeRooms.some((r) => r.id === roomId)) {\n const updatedRooms = tab.excludeRooms.filter((r) => r.id !== roomId);\n return this.updateTab(tabId, { excludeRooms: updatedRooms });\n }\n else {\n throw new Error(`${tabId} tab does not exclude room with ID ${roomId}.`);\n }\n }\n else {\n throw new Error(`Tab with ID ${tabId} or room with ID ${roomId} not found.`);\n }\n }\n async sendMessage(roomId, content, contentType = 'text', replyId, userId) {\n const author = userId ? await this.getUserInfo(userId) : this.getCurrentUser();\n const newMessage = await this.chatService.sendMessage(roomId, content, author, contentType, replyId);\n const formattedMessage = await this.formatMessage(newMessage);\n this.realtimeService.notifyMessage({ type: 'add', payload: formattedMessage });\n // Create a notification when a new message is sent by someone else\n try {\n const currentUser = this.getCurrentUser();\n if (formattedMessage.author.id !== currentUser.id) {\n const room = await this.getRoom(formattedMessage.roomId);\n const notification = convertChatMessageToNotification(room, formattedMessage, currentUser);\n await this.notificationConnectorService.create({\n ...notification,\n id: formattedMessage.id,\n entityName: 'notifications',\n createAt: new Date(),\n });\n }\n }\n catch (error) {\n // Non-blocking: log and continue\n console.error('Failed to create notification for new message', error);\n }\n return formattedMessage;\n }\n async getMessages(roomId, skip, take) {\n const result = await this.chatService.getMessages(roomId, skip, take);\n const formattedMessages = await Promise.all(result.items.map((m) => this.formatMessage(m)));\n return { items: formattedMessages, total: result.total };\n }\n async getMessage(messageId) {\n const message = await this.chatService.getMessage(messageId);\n return this.formatMessage(message);\n }\n async editMessage(messageId, content, contentType = 'text') {\n const currentUser = this.getCurrentUser();\n const updatedMessage = await this.chatService.editMessage(messageId, content, currentUser, contentType);\n this.realtimeService.notifyMessage({ type: 'update', payload: await this.formatMessage(updatedMessage) });\n return updatedMessage;\n }\n async deleteMessage(messageId) {\n const result = await this.chatService.deleteMessage(messageId);\n if (result) {\n this.realtimeService.notifyMessage({ type: 'remove', payload: messageId });\n }\n return result;\n }\n async replyMessage(replyToMessageId, content, contentType = 'text') {\n const originalMessage = await this.chatService.getMessage(replyToMessageId);\n return this.sendMessage(originalMessage.roomId, content, contentType, replyToMessageId);\n }\n async pinMessage(messageId) {\n const currentUser = this.getCurrentUser();\n return this.chatService.pinMessage(messageId, true, currentUser);\n }\n async unpinMessage(messageId) {\n const currentUser = this.getCurrentUser();\n return this.chatService.pinMessage(messageId, false, currentUser);\n }\n async addReaction(messageId, type) {\n const author = this.getCurrentUser();\n const message = await this.chatService.getMessage(messageId);\n const reactions = message.reactions || [];\n if (reactions.some((r) => r.author.id === author.id && r.type === type)) {\n return message;\n }\n const updatedReactions = [...reactions, { author, type }];\n const res = await this.chatService.updateReactions(messageId, updatedReactions, author);\n this.realtimeService.notifyMessage({ type: 'update', payload: await this.formatMessage(res) });\n return res;\n }\n async removeReaction(messageId, type) {\n const author = this.getCurrentUser();\n const message = await this.chatService.getMessage(messageId);\n const updatedReactions = (message.reactions || []).filter((r) => !(r.author.id === author.id && r.type === type));\n const res = await this.chatService.updateReactions(messageId, updatedReactions, author);\n this.realtimeService.notifyMessage({ type: 'update', payload: await this.formatMessage(res) });\n return res;\n }\n async getReactions(messageId) {\n return this.chatService.getReactions(messageId);\n }\n async markSeen(messageId) {\n const author = this.getCurrentUser();\n const message = await this.chatService.getMessage(messageId);\n const seen = message.seen || [];\n if (seen.some((s) => s.author.id === author.id)) {\n return message;\n }\n const updatedSeen = [...seen, { author, type: 'read' }];\n const updatedMessage = await this.chatService.updateSeen(messageId, updatedSeen, author);\n this.realtimeService.notifyRoom({ type: 'seen', payload: updatedMessage.roomId });\n return updatedMessage;\n }\n async getSeenBy(messageId) {\n return this.chatService.getSeenBy(messageId);\n }\n async markRoomSeen(roomId) {\n try {\n if (!roomId) {\n return true;\n }\n const { items } = await this.getMessages(roomId, 0, 99);\n const currentUserId = this.getCurrentUser().id;\n const unreadMessages = items.filter((message) => message.author.id !== currentUserId && !message.seen?.some((s) => s.author.id === currentUserId));\n if (unreadMessages.length > 0) {\n await Promise.all(unreadMessages.map((message) => this.markSeen(message.id)));\n }\n this.realtimeService.notifyRoom({ type: 'seen', payload: roomId });\n return true;\n }\n catch (error) {\n console.error(`Error marking room ${roomId} as seen:`, error);\n return false;\n }\n }\n async startTyping(roomId, userId) {\n const user = userId ? await this.getUserInfo(userId) : this.getCurrentUser();\n this.realtimeService.startTyping(user, roomId);\n }\n async stopTyping(roomId, userId) {\n const user = userId ? await this.getUserInfo(userId) : this.getCurrentUser();\n this.realtimeService.stopTyping(user, roomId);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatManagementService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatManagementService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatManagementService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1tYW5hZ2VtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY2hhdC9jaGF0LW1hbmFnZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMxRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVVuRCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBTWhELE1BQU0sT0FBTyx3QkFBd0I7SUFIckM7UUFJbUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckMsbUJBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzQyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQzdDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDakQsaUNBQTRCLEdBQUcsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUM7S0FvWXpGO0lBbFlTLGNBQWM7UUFDcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIs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QyxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFjLEVBQUUsTUFBZTtRQUM5QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzdFLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRCxDQUFDOytHQXhZVSx3QkFBd0I7bUhBQXhCLHdCQUF3QixjQUZ2QixNQUFNOzs0RkFFUCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhNTm90aWZpY2F0aW9uQ29ubmVjdG9yU2VydmljZSB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9ub3RpZmljYXRpb24tbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBBWE1Vc2Vyc0VudGl0eVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvc2VjdXJpdHktbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBBWFBTZXNzaW9uU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vYXV0aCc7XG5pbXBvcnQgeyBBWFBDb250ZW50VHlwZSwgQVhQVXNlclJlZmVyZW5jZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2UsXG4gIEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uLFxuICBBWE1Db252ZXJzYXRpb25TZWVuLFxuICBBWE1SZWFjdGlvblR5cGUsXG4gIEFYTVNlZW5UeXBlLFxufSBmcm9tICcuLi8uLi9lbnRpdGllcy9tZXNzYWdlL21lc3NhZ2UudHlwZXMnO1xuaW1wb3J0IHsgQVhNQ29udmVyc2F0aW9uUm9vbSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3Jvb20vcm9vbS50eXBlcyc7XG5pbXBvcnQgeyBBWE1Db252ZXJzYXRpb25UYWIgfSBmcm9tICcuLi8uLi9lbnRpdGllcy90YWIvdGFiLnR5cGVzJztcbmltcG9ydCB7IGNvbnZlcnRDaGF0TWVzc2FnZVRvTm90aWZpY2F0aW9uIH0gZnJvbSAnLi9jaGF0LW5vdGlmaWNhdGlvbi5oZWxwZXInO1xuaW1wb3J0IHsgQVhNQ2hhdFJlYWx0aW1lU2VydmljZSB9IGZyb20gJy4vY2hhdC1yZWFsdGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTUNoYXRTZXJ2aWNlIH0gZnJvbSAnLi9jaGF0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNQ2hhdE1lc3NhZ2UsIEFYTUNoYXRSb29tIH0gZnJvbSAnLi9jaGF0LnR5cGUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhNQ2hhdE1hbmFnZW1lbnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjaGF0U2VydmljZSA9IGluamVjdChBWE1DaGF0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHVzZXJzU2VydmljZSA9IGluamVjdChBWE1Vc2Vyc0VudGl0eVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlYWx0aW1lU2VydmljZSA9IGluamVjdChBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBub3RpZmljYXRpb25Db25uZWN0b3JTZXJ2aWNlID0gaW5qZWN0KEFYTU5vdGlmaWNhdGlvbkNvbm5lY3RvclNlcnZpY2UpO1xuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFVzZXIoKTogQVhQVXNlclJlZmVyZW5jZSB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuc2Vzc2lvblNlcnZpY2UudXNlcjtcbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYXV0aGVudGljYXRlZCB1c2VyIGZvdW5kLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHVzZXIuaWQsXG4gICAgICB0eXBlOiAndXNlcicsXG4gICAgICBmdWxsTmFtZTogdXNlci50aXRsZT8udHJpbSgpLFxuICAgICAgdXNlcm5hbWU6IHVzZXIubmFtZT8udHJpbSgpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFVzZXJJbmZvKHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxBWFBVc2VyUmVmZXJlbmNlPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLnVzZXJzU2VydmljZS5nZXRPbmUodXNlcklkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB1c2VyLmlkLFxuICAgICAgICB0eXBlOiAndXNlcicsXG4gICAgICAgIGZ1bGxOYW1lOiBgJHt1c2VyLmRpc3BsYXlOYW1lfWAudHJpbSgpLFxuICAgICAgICB1c2VybmFtZTogdXNlci51c2VybmFtZT8udHJpbSgpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGdldCB1c2VyIGluZm8gZm9yIElEOiAke3VzZXJJZH1gLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0eXBlOiAndXNlcicsXG4gICAgICAgIGZ1bGxOYW1lOiAnVW5rbm93biBVc2VyJyxcbiAgICAgICAgdXNlcm5hbWU6ICdVbmtub3duIFVzZXInLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZvcm1hdE1lc3NhZ2UobWVzc2FnZTogQVhNQ29udmVyc2F0aW9uTWVzc2FnZSk6IFByb21pc2U8QVhNQ2hhdE1lc3NhZ2U+IHtcbiAgICBpZiAobWVzc2FnZS5hdXRob3IgJiYgIW1lc3NhZ2UuYXV0aG9yLmZ1bGxOYW1lKSB7XG4gICAgICBjb25zdCBhdXRob3JJbmZvID0gYXdhaXQgdGhpcy5nZXRVc2VySW5mbyhtZXNzYWdlLmF1dGhvci5pZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5tZXNzYWdlLFxuICAgICAgICBhdXRob3I6IGF1dGhvckluZm8sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0VW5yZWFkQ291bnQocm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHsgaXRlbXMgfSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZ2V0TWVzc2FnZXMocm9vbUlkLCAwLCA5OSk7XG4gICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKS5pZDtcblxuICAgIGNvbnN0IHVucmVhZE1lc3NhZ2VzID0gaXRlbXMuZmlsdGVyKChtZXNzYWdlKSA9PiB7XG4gICAgICBjb25zdCBpc0Zyb21DdXJyZW50VXNlciA9IG1lc3NhZ2UuYXV0aG9yLmlkID09PSBjdXJyZW50VXNlcklkO1xuICAgICAgY29uc3QgaXNSZWFkQnlDdXJyZW50VXNlciA9IChtZXNzYWdlLnNlZW4gfHwgW10pLnNvbWUoKHNlZW4pID0+IHNlZW4uYXV0aG9yLmlkID09PSBjdXJyZW50VXNlcklkKTtcbiAgICAgIHJldHVybiAhaXNGcm9tQ3VycmVudFVzZXIgJiYgIWlzUmVhZEJ5Q3VycmVudFVzZXI7XG4gICAgfSk7XG4gICAgcmV0dXJuIHVucmVhZE1lc3NhZ2VzLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZm9ybWF0Um9vbShyb29tOiBBWE1Db252ZXJzYXRpb25Sb29tKTogUHJvbWlzZTxBWE1DaGF0Um9vbT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5nZXRNZXNzYWdlcyhyb29tLmlkLCAwLCAxKTtcbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzLml0ZW1zLmxlbmd0aCA+IDAgPyBtZXNzYWdlcy5pdGVtc1swXSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCB1bnJlYWRDb3VudCA9IGF3YWl0IHRoaXMuZ2V0VW5yZWFkQ291bnQocm9vbS5pZCk7XG4gICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKS5pZDtcblxuICAgIGNvbnN0IG1lbWJlcnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHJvb20ubWVtYmVycy5tYXAoYXN5bmMgKG1lbWJlcikgPT4ge1xuICAgICAgICBpZiAobWVtYmVyLmZ1bGxOYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG1lbWJlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRVc2VySW5mbyhtZW1iZXIuaWQpO1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5yb29tLFxuICAgICAgbGFzdE1lc3NhZ2UsXG4gICAgICB1bnJlYWRDb3VudCxcbiAgICAgIG1lbWJlcnM6IG1lbWJlcnMuZmlsdGVyKChtKSA9PiBtLmlkICE9PSBjdXJyZW50VXNlcklkKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlUm9vbShtZW1iZXJJZHM6IHN0cmluZ1tdLCB0aXRsZT86IHN0cmluZywgYXZhdGFyPzogc3RyaW5nIHwgbnVsbCk6IFByb21pc2U8QVhNQ2hhdFJvb20+IHtcbiAgICBpZiAobWVtYmVySWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCBvbmUgbWVtYmVyIGlzIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIHJvb20nKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBjb25zdCBhbGxNZW1iZXJJZHMgPSBbLi4ubmV3IFNldChbLi4ubWVtYmVySWRzLCBjdXJyZW50VXNlci5pZF0pXTtcblxuICAgIGNvbnN0IG1lbWJlclJlZmVyZW5jZXMgPSBhd2FpdCBQcm9taXNlLmFsbChhbGxNZW1iZXJJZHMubWFwKChpZCkgPT4gdGhpcy5nZXRVc2VySW5mbyhpZCkpKTtcbiAgICBjb25zdCBuZXdSb29tID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5jcmVhdGVSb29tKG1lbWJlclJlZmVyZW5jZXMsIHRpdGxlLCBjdXJyZW50VXNlciwgYXZhdGFyIHx8IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgbmV3Q2hhdFJvb20gPSBhd2FpdCB0aGlzLmZvcm1hdFJvb20obmV3Um9vbSk7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5Um9vbSh7IHR5cGU6ICdhZGQnLCBwYXlsb2FkOiBuZXdDaGF0Um9vbSB9KTtcbiAgICByZXR1cm4gbmV3Q2hhdFJvb207XG4gIH1cblxuICBhc3luYyBnZXRSb29tKHJvb21JZDogc3RyaW5nKTogUHJvbWlzZTxBWE1DaGF0Um9vbT4ge1xuICAgIGNvbnN0IHJvb20gPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmdldFJvb20ocm9vbUlkKTtcbiAgICBpZiAoIXJvb20pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2hhdCByb29tIHdpdGggSUQgJHtyb29tSWR9IG5vdCBmb3VuZC5gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0Um9vbShyb29tKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RSb29tcyhza2lwID0gMCwgdGFrZSA9IDEwMCk6IFByb21pc2U8eyBpdGVtczogQVhNQ2hhdFJvb21bXTsgdG90YWw6IG51bWJlciB9PiB7XG4gICAgY29uc3QgeyBpdGVtcyB9ID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5saXN0Um9vbXMoc2tpcCwgdGFrZSk7XG4gICAgY29uc3Qgc2V0dGxlZFJvb21zID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKGl0ZW1zLm1hcCgocm9vbSkgPT4gdGhpcy5mb3JtYXRSb29tKHJvb20pKSk7XG5cbiAgICBjb25zdCBjaGF0Um9vbXMgPSBzZXR0bGVkUm9vbXNcbiAgICAgIC5maWx0ZXIoKHJlc3VsdCk6IHJlc3VsdCBpcyBQcm9taXNlRnVsZmlsbGVkUmVzdWx0PEFYTUNoYXRSb29tPiA9PiB7XG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAncmVqZWN0ZWQnKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHJvb20gZGV0YWlsczonLCByZXN1bHQucmVhc29uKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgICAgLm1hcCgocmVzdWx0KSA9PiByZXN1bHQudmFsdWUpO1xuXG4gICAgcmV0dXJuIHsgaXRlbXM6IGNoYXRSb29tcywgdG90YWw6IGNoYXRSb29tcy5sZW5ndGggfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVJvb20ocm9vbUlkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8QVhNQ29udmVyc2F0aW9uUm9vbT4pOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJvb20+IHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICByZXR1cm4gdGhpcy5jaGF0U2VydmljZS51cGRhdGVSb29tKHJvb21JZCwgZGF0YSwgY3VycmVudFVzZXIpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlUm9vbShyb29tSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZGVsZXRlUm9vbShyb29tSWQpO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeVJvb20oeyB0eXBlOiAncmVtb3ZlJywgcGF5bG9hZDogcm9vbUlkIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgYWRkUGFydGljaXBhbnQocm9vbUlkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25Sb29tPiB7XG4gICAgY29uc3Qgcm9vbSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZ2V0Um9vbShyb29tSWQpO1xuICAgIGlmIChyb29tLm1lbWJlcnMuc29tZSgobSkgPT4gbS5pZCA9PT0gdXNlcklkKSkgcmV0dXJuIHJvb207XG4gICAgY29uc3QgdXNlclJlZiA9IGF3YWl0IHRoaXMuZ2V0VXNlckluZm8odXNlcklkKTtcbiAgICBjb25zdCB1cGRhdGVkTWVtYmVycyA9IFsuLi5yb29tLm1lbWJlcnMsIHVzZXJSZWZdO1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHJldHVybiB0aGlzLmNoYXRTZXJ2aWNlLnVwZGF0ZVJvb20ocm9vbUlkLCB7IG1lbWJlcnM6IHVwZGF0ZWRNZW1iZXJzIH0sIGN1cnJlbnRVc2VyKTtcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVBhcnRpY2lwYW50KHJvb21JZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uUm9vbT4ge1xuICAgIGNvbnN0IHJvb20gPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmdldFJvb20ocm9vbUlkKTtcbiAgICBjb25zdCB1cGRhdGVkTWVtYmVycyA9IHJvb20ubWVtYmVycy5maWx0ZXIoKG1lbWJlcikgPT4gbWVtYmVyLmlkICE9PSB1c2VySWQpO1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHJldHVybiB0aGlzLmNoYXRTZXJ2aWNlLnVwZGF0ZVJvb20ocm9vbUlkLCB7IG1lbWJlcnM6IHVwZGF0ZWRNZW1iZXJzIH0sIGN1cnJlbnRVc2VyKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVRhYihkYXRhOiBPbWl0PEFYTUNvbnZlcnNhdGlvblRhYiwgJ2lkJz4pOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblRhYj4ge1xuICAgIGNvbnN0IG5ld1RhYiA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuY3JlYXRlVGFiKGRhdGEpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeVRhYih7IHR5cGU6ICdhZGQnLCBwYXlsb2FkOiBuZXdUYWIgfSk7XG4gICAgcmV0dXJuIG5ld1RhYjtcbiAgfVxuXG4gIGdldFRhYih0YWJJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25UYWI+IHtcbiAgICByZXR1cm4gdGhpcy5jaGF0U2VydmljZS5nZXRUYWIodGFiSWQpO1xuICB9XG5cbiAgbGlzdFRhYnMoc2tpcD86IG51bWJlciwgdGFrZT86IG51bWJlcik6IFByb21pc2U8eyBpdGVtczogQVhNQ29udmVyc2F0aW9uVGFiW107IHRvdGFsOiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLmNoYXRTZXJ2aWNlLmxpc3RUYWJzKHNraXAsIHRha2UpO1xuICB9XG5cbiAgdXBkYXRlVGFiKHRhYklkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8QVhNQ29udmVyc2F0aW9uVGFiPik6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uVGFiPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hhdFNlcnZpY2UudXBkYXRlVGFiKHRhYklkLCBkYXRhKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVRhYih0YWJJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5kZWxldGVUYWIodGFiSWQpO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeVRhYih7IHR5cGU6ICdyZW1vdmUnLCBwYXlsb2FkOiB0YWJJZCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIGFkZEluY2x1ZGVSb29tVG9UYWIodGFiSWQ6IHN0cmluZywgcm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblRhYj4ge1xuICAgIGNvbnN0IHRhYiA9IGF3YWl0IHRoaXMuZ2V0VGFiKHRhYklkKTtcbiAgICBjb25zdCByb29tID0gYXdhaXQgdGhpcy5nZXRSb29tKHJvb21JZCk7XG5cbiAgICBpZiAodGFiICYmIHJvb20pIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRSb29tcyA9IFsuLi50YWIuaW5jbHVkZVJvb21zLCByb29tXTtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVRhYih0YWJJZCwgeyBpbmNsdWRlUm9vbXM6IHVwZGF0ZWRSb29tcyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWIgd2l0aCBJRCAke3RhYklkfSBvciByb29tIHdpdGggSUQgJHtyb29tSWR9IG5vdCBmb3VuZC5gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZW1vdmVJbmNsdWRlUm9vbUZyb21UYWIodGFiSWQ6IHN0cmluZywgcm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblRhYj4ge1xuICAgIGNvbnN0IHRhYiA9IGF3YWl0IHRoaXMuZ2V0VGFiKHRhYklkKTtcbiAgICBjb25zdCByb29tID0gYXdhaXQgdGhpcy5nZXRSb29tKHJvb21JZCk7XG5cbiAgICBpZiAodGFiICYmIHJvb20pIHtcbiAgICAgIGlmICh0YWIuaW5jbHVkZVJvb21zLnNvbWUoKHIpID0+IHIuaWQgPT09IHJvb21JZCkpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZFJvb21zID0gdGFiLmluY2x1ZGVSb29tcy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IHJvb21JZCk7XG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVRhYih0YWJJZCwgeyBpbmNsdWRlUm9vbXM6IHVwZGF0ZWRSb29tcyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0YWJJZH0gdGFiIGRvZXMgbm90IGluY2x1ZGUgcm9vbSB3aXRoIElEICR7cm9vbUlkfS5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUYWIgd2l0aCBJRCAke3RhYklkfSBvciByb29tIHdpdGggSUQgJHtyb29tSWR9IG5vdCBmb3VuZC5gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBhZGRFeGNsdWRlUm9vbVRvVGFiKHRhYklkOiBzdHJpbmcsIHJvb21JZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25UYWI+IHtcbiAgICBjb25zdCB0YWIgPSBhd2FpdCB0aGlzLmdldFRhYih0YWJJZCk7XG4gICAgY29uc3Qgcm9vbSA9IGF3YWl0IHRoaXMuZ2V0Um9vbShyb29tSWQpO1xuXG4gICAgaWYgKHRhYiAmJiByb29tKSB7XG4gICAgICBjb25zdCB1cGRhdGVkUm9vbXMgPSBbLi4udGFiLmV4Y2x1ZGVSb29tcywgcm9vbV07XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVUYWIodGFiSWQsIHsgZXhjbHVkZVJvb21zOiB1cGRhdGVkUm9vbXMgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFiIHdpdGggSUQgJHt0YWJJZH0gb3Igcm9vbSB3aXRoIElEICR7cm9vbUlkfSBub3QgZm91bmQuYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcmVtb3ZlRXhjbHVkZVJvb21Gcm9tVGFiKHRhYklkOiBzdHJpbmcsIHJvb21JZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25UYWI+IHtcbiAgICBjb25zdCB0YWIgPSBhd2FpdCB0aGlzLmdldFRhYih0YWJJZCk7XG4gICAgY29uc3Qgcm9vbSA9IGF3YWl0IHRoaXMuZ2V0Um9vbShyb29tSWQpO1xuXG4gICAgaWYgKHRhYiAmJiByb29tKSB7XG4gICAgICBpZiAodGFiLmV4Y2x1ZGVSb29tcy5zb21lKChyKSA9PiByLmlkID09PSByb29tSWQpKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRSb29tcyA9IHRhYi5leGNsdWRlUm9vbXMuZmlsdGVyKChyKSA9PiByLmlkICE9PSByb29tSWQpO1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVUYWIodGFiSWQsIHsgZXhjbHVkZVJvb21zOiB1cGRhdGVkUm9vbXMgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGFiSWR9IHRhYiBkb2VzIG5vdCBleGNsdWRlIHJvb20gd2l0aCBJRCAke3Jvb21JZH0uYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGFiIHdpdGggSUQgJHt0YWJJZH0gb3Igcm9vbSB3aXRoIElEICR7cm9vbUlkfSBub3QgZm91bmQuYCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UoXG4gICAgcm9vbUlkOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIGNvbnRlbnRUeXBlOiBBWFBDb250ZW50VHlwZSA9ICd0ZXh0JyxcbiAgICByZXBseUlkPzogc3RyaW5nLFxuICAgIHVzZXJJZD86IHN0cmluZyxcbiAgKTogUHJvbWlzZTxBWE1DaGF0TWVzc2FnZT4ge1xuICAgIGNvbnN0IGF1dGhvciA9IHVzZXJJZCA/IGF3YWl0IHRoaXMuZ2V0VXNlckluZm8odXNlcklkKSA6IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBjb25zdCBuZXdNZXNzYWdlID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5zZW5kTWVzc2FnZShyb29tSWQsIGNvbnRlbnQsIGF1dGhvciwgY29udGVudFR5cGUsIHJlcGx5SWQpO1xuICAgIGNvbnN0IGZvcm1hdHRlZE1lc3NhZ2UgPSBhd2FpdCB0aGlzLmZvcm1hdE1lc3NhZ2UobmV3TWVzc2FnZSk7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5TWVzc2FnZSh7IHR5cGU6ICdhZGQnLCBwYXlsb2FkOiBmb3JtYXR0ZWRNZXNzYWdlIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGEgbm90aWZpY2F0aW9uIHdoZW4gYSBuZXcgbWVzc2FnZSBpcyBzZW50IGJ5IHNvbWVvbmUgZWxzZVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICAgIGlmIChmb3JtYXR0ZWRNZXNzYWdlLmF1dGhvci5pZCAhPT0gY3VycmVudFVzZXIuaWQpIHtcbiAgICAgICAgY29uc3Qgcm9vbSA9IGF3YWl0IHRoaXMuZ2V0Um9vbShmb3JtYXR0ZWRNZXNzYWdlLnJvb21JZCk7XG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGNvbnZlcnRDaGF0TWVzc2FnZVRvTm90aWZpY2F0aW9uKHJvb20sIGZvcm1hdHRlZE1lc3NhZ2UsIGN1cnJlbnRVc2VyKTtcbiAgICAgICAgYXdhaXQgdGhpcy5ub3RpZmljYXRpb25Db25uZWN0b3JTZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgICAgLi4ubm90aWZpY2F0aW9uLFxuICAgICAgICAgIGlkOiBmb3JtYXR0ZWRNZXNzYWdlLmlkLFxuICAgICAgICAgIGVudGl0eU5hbWU6ICdub3RpZmljYXRpb25zJyxcbiAgICAgICAgICBjcmVhdGVBdDogbmV3IERhdGUoKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIE5vbi1ibG9ja2luZzogbG9nIGFuZCBjb250aW51ZVxuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBub3RpZmljYXRpb24gZm9yIG5ldyBtZXNzYWdlJywgZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0dGVkTWVzc2FnZTtcbiAgfVxuXG4gIGFzeW5jIGdldE1lc3NhZ2VzKHJvb21JZDogc3RyaW5nLCBza2lwPzogbnVtYmVyLCB0YWtlPzogbnVtYmVyKTogUHJvbWlzZTx7IGl0ZW1zOiBBWE1DaGF0TWVzc2FnZVtdOyB0b3RhbDogbnVtYmVyIH0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmdldE1lc3NhZ2VzKHJvb21JZCwgc2tpcCwgdGFrZSk7XG4gICAgY29uc3QgZm9ybWF0dGVkTWVzc2FnZXMgPSBhd2FpdCBQcm9taXNlLmFsbChyZXN1bHQuaXRlbXMubWFwKChtKSA9PiB0aGlzLmZvcm1hdE1lc3NhZ2UobSkpKTtcbiAgICByZXR1cm4geyBpdGVtczogZm9ybWF0dGVkTWVzc2FnZXMsIHRvdGFsOiByZXN1bHQudG90YWwgfTtcbiAgfVxuXG4gIGFzeW5jIGdldE1lc3NhZ2UobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNoYXRNZXNzYWdlPiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZ2V0TWVzc2FnZShtZXNzYWdlSWQpO1xuICAgIHJldHVybiB0aGlzLmZvcm1hdE1lc3NhZ2UobWVzc2FnZSk7XG4gIH1cblxuICBhc3luYyBlZGl0TWVzc2FnZShcbiAgICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgY29udGVudFR5cGU6IEFYUENvbnRlbnRUeXBlID0gJ3RleHQnLFxuICApOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2U+IHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBjb25zdCB1cGRhdGVkTWVzc2FnZSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZWRpdE1lc3NhZ2UobWVzc2FnZUlkLCBjb250ZW50LCBjdXJyZW50VXNlciwgY29udGVudFR5cGUpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeU1lc3NhZ2UoeyB0eXBlOiAndXBkYXRlJywgcGF5bG9hZDogYXdhaXQgdGhpcy5mb3JtYXRNZXNzYWdlKHVwZGF0ZWRNZXNzYWdlKSB9KTtcbiAgICByZXR1cm4gdXBkYXRlZE1lc3NhZ2U7XG4gIH1cblxuICBhc3luYyBkZWxldGVNZXNzYWdlKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5kZWxldGVNZXNzYWdlKG1lc3NhZ2VJZCk7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5TWVzc2FnZSh7IHR5cGU6ICdyZW1vdmUnLCBwYXlsb2FkOiBtZXNzYWdlSWQgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyByZXBseU1lc3NhZ2UoXG4gICAgcmVwbHlUb01lc3NhZ2VJZDogc3RyaW5nLFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBjb250ZW50VHlwZTogQVhQQ29udGVudFR5cGUgPSAndGV4dCcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsTWVzc2FnZSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZ2V0TWVzc2FnZShyZXBseVRvTWVzc2FnZUlkKTtcbiAgICByZXR1cm4gdGhpcy5zZW5kTWVzc2FnZShvcmlnaW5hbE1lc3NhZ2Uucm9vbUlkLCBjb250ZW50LCBjb250ZW50VHlwZSwgcmVwbHlUb01lc3NhZ2VJZCk7XG4gIH1cblxuICBhc3luYyBwaW5NZXNzYWdlKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25NZXNzYWdlPiB7XG4gICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgcmV0dXJuIHRoaXMuY2hhdFNlcnZpY2UucGluTWVzc2FnZShtZXNzYWdlSWQsIHRydWUsIGN1cnJlbnRVc2VyKTtcbiAgfVxuXG4gIGFzeW5jIHVucGluTWVzc2FnZShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHJldHVybiB0aGlzLmNoYXRTZXJ2aWNlLnBpbk1lc3NhZ2UobWVzc2FnZUlkLCBmYWxzZSwgY3VycmVudFVzZXIpO1xuICB9XG5cbiAgYXN5bmMgYWRkUmVhY3Rpb24obWVzc2FnZUlkOiBzdHJpbmcsIHR5cGU6IEFYTVJlYWN0aW9uVHlwZSk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5nZXRNZXNzYWdlKG1lc3NhZ2VJZCk7XG4gICAgY29uc3QgcmVhY3Rpb25zID0gbWVzc2FnZS5yZWFjdGlvbnMgfHwgW107XG4gICAgaWYgKHJlYWN0aW9ucy5zb21lKChyKSA9PiByLmF1dGhvci5pZCA9PT0gYXV0aG9yLmlkICYmIHIudHlwZSA9PT0gdHlwZSkpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkUmVhY3Rpb25zOiBBWE1Db252ZXJzYXRpb25SZWFjdGlvbltdID0gWy4uLnJlYWN0aW9ucywgeyBhdXRob3IsIHR5cGUgfV07XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS51cGRhdGVSZWFjdGlvbnMobWVzc2FnZUlkLCB1cGRhdGVkUmVhY3Rpb25zLCBhdXRob3IpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeU1lc3NhZ2UoeyB0eXBlOiAndXBkYXRlJywgcGF5bG9hZDogYXdhaXQgdGhpcy5mb3JtYXRNZXNzYWdlKHJlcykgfSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGFzeW5jIHJlbW92ZVJlYWN0aW9uKG1lc3NhZ2VJZDogc3RyaW5nLCB0eXBlOiBBWE1SZWFjdGlvblR5cGUpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2U+IHtcbiAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZ2V0TWVzc2FnZShtZXNzYWdlSWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRSZWFjdGlvbnMgPSAobWVzc2FnZS5yZWFjdGlvbnMgfHwgW10pLmZpbHRlcigocikgPT4gIShyLmF1dGhvci5pZCA9PT0gYXV0aG9yLmlkICYmIHIudHlwZSA9PT0gdHlwZSkpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UudXBkYXRlUmVhY3Rpb25zKG1lc3NhZ2VJZCwgdXBkYXRlZFJlYWN0aW9ucywgYXV0aG9yKTtcbiAgICB0aGlzLnJlYWx0aW1lU2VydmljZS5ub3RpZnlNZXNzYWdlKHsgdHlwZTogJ3VwZGF0ZScsIHBheWxvYWQ6IGF3YWl0IHRoaXMuZm9ybWF0TWVzc2FnZShyZXMpIH0pO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBhc3luYyBnZXRSZWFjdGlvbnMobWVzc2FnZUlkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5jaGF0U2VydmljZS5nZXRSZWFjdGlvbnMobWVzc2FnZUlkKTtcbiAgfVxuXG4gIGFzeW5jIG1hcmtTZWVuKG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25NZXNzYWdlPiB7XG4gICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmdldE1lc3NhZ2UobWVzc2FnZUlkKTtcbiAgICBjb25zdCBzZWVuID0gbWVzc2FnZS5zZWVuIHx8IFtdO1xuICAgIGlmIChzZWVuLnNvbWUoKHMpID0+IHMuYXV0aG9yLmlkID09PSBhdXRob3IuaWQpKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlZFNlZW46IEFYTUNvbnZlcnNhdGlvblNlZW5bXSA9IFsuLi5zZWVuLCB7IGF1dGhvciwgdHlwZTogJ3JlYWQnIGFzIEFYTVNlZW5UeXBlIH1dO1xuICAgIGNvbnN0IHVwZGF0ZWRNZXNzYWdlID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS51cGRhdGVTZWVuKG1lc3NhZ2VJZCwgdXBkYXRlZFNlZW4sIGF1dGhvcik7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5Um9vbSh7IHR5cGU6ICdzZWVuJywgcGF5bG9hZDogdXBkYXRlZE1lc3NhZ2Uucm9vbUlkIH0pO1xuICAgIHJldHVybiB1cGRhdGVkTWVzc2FnZTtcbiAgfVxuXG4gIGFzeW5jIGdldFNlZW5CeShtZXNzYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uU2VlbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hhdFNlcnZpY2UuZ2V0U2VlbkJ5KG1lc3NhZ2VJZCk7XG4gIH1cblxuICBhc3luYyBtYXJrUm9vbVNlZW4ocm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFyb29tSWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB7IGl0ZW1zIH0gPSBhd2FpdCB0aGlzLmdldE1lc3NhZ2VzKHJvb21JZCwgMCwgOTkpO1xuICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKS5pZDtcblxuICAgICAgY29uc3QgdW5yZWFkTWVzc2FnZXMgPSBpdGVtcy5maWx0ZXIoXG4gICAgICAgIChtZXNzYWdlKSA9PiBtZXNzYWdlLmF1dGhvci5pZCAhPT0gY3VycmVudFVzZXJJZCAmJiAhbWVzc2FnZS5zZWVuPy5zb21lKChzKSA9PiBzLmF1dGhvci5pZCA9PT0gY3VycmVudFVzZXJJZCksXG4gICAgICApO1xuXG4gICAgICBpZiAodW5yZWFkTWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh1bnJlYWRNZXNzYWdlcy5tYXAoKG1lc3NhZ2UpID0+IHRoaXMubWFya1NlZW4obWVzc2FnZS5pZCkpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeVJvb20oeyB0eXBlOiAnc2VlbicsIHBheWxvYWQ6IHJvb21JZCB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBtYXJraW5nIHJvb20gJHtyb29tSWR9IGFzIHNlZW46YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VHlwaW5nKHJvb21JZDogc3RyaW5nLCB1c2VySWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1c2VyID0gdXNlcklkID8gYXdhaXQgdGhpcy5nZXRVc2VySW5mbyh1c2VySWQpIDogdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLnN0YXJ0VHlwaW5nKHVzZXIsIHJvb21JZCk7XG4gIH1cblxuICBhc3luYyBzdG9wVHlwaW5nKHJvb21JZDogc3RyaW5nLCB1c2VySWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1c2VyID0gdXNlcklkID8gYXdhaXQgdGhpcy5nZXRVc2VySW5mbyh1c2VySWQpIDogdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLnN0b3BUeXBpbmcodXNlciwgcm9vbUlkKTtcbiAgfVxufVxuIl19","import { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPFileStorageService } from '@acorex/platform/common';\nimport { AXPUserAvatarComponent } from '@acorex/platform/layout/components';\nimport { AsyncPipe, DatePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, input, output, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/decorators\";\nimport * as i2 from \"@acorex/components/badge\";\nimport * as i3 from \"@acorex/components/avatar\";\nimport * as i4 from \"@acorex/core/translation\";\nexport class AXMChatItemComponent {\n constructor() {\n // Input\n this.data = input.required(...(ngDevMode ? [{ debugName: \"data\" }] : []));\n this.typing = input(null, ...(ngDevMode ? [{ debugName: \"typing\" }] : []));\n this.lastMessageReaction = input(null, ...(ngDevMode ? [{ debugName: \"lastMessageReaction\" }] : []));\n // Output\n this.pressChatItem = output();\n // Services\n this.sessionService = inject(AXPSessionService);\n this.datePipe = inject(DatePipe);\n this.fileStorage = inject(AXPFileStorageService);\n this.chatName = signal({\n fullName: 'Loading...',\n id: '',\n isPrivate: false,\n }, ...(ngDevMode ? [{ debugName: \"chatName\" }] : []));\n this.#chatInfoEffect = effect(async () => {\n const { members, title, id } = this.data();\n if (members.length > 1) {\n this.chatName.set({\n fullName: title || 'Group Chat',\n id,\n isPrivate: false,\n });\n return;\n }\n const member = members[0];\n if (!member) {\n this.chatName.set({ fullName: 'Unknown User', id: '', isPrivate: true });\n return;\n }\n this.chatName.set({\n fullName: member.fullName || 'Unknown User',\n id: member.id,\n isPrivate: true,\n });\n }, ...(ngDevMode ? [{ debugName: \"#chatInfoEffect\" }] : []));\n // Group avatar preview handling\n this.groupAvatarUrl = signal(null, ...(ngDevMode ? [{ debugName: \"groupAvatarUrl\" }] : []));\n this.groupBlobUrl = signal(null, ...(ngDevMode ? [{ debugName: \"groupBlobUrl\" }] : []));\n this.isGroupAvatarLoading = signal(true, ...(ngDevMode ? [{ debugName: \"isGroupAvatarLoading\" }] : []));\n this.#groupAvatarEffect = effect(async () => {\n const room = this.data();\n // Only for group chats\n if (!room || (room.members?.length ?? 0) <= 1) {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n return;\n }\n const avatar = room.avatar;\n if (!avatar) {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n return;\n }\n if (typeof avatar === 'string') {\n const val = avatar.trim();\n // Resolve stored file identifiers like \"file:<id>\" or bare file IDs\n if (val.startsWith('file:')) {\n try {\n const fileId = val.substring(5);\n const info = await this.fileStorage.getInfo(fileId);\n const url = info?.url ? String(info.url) : null;\n if (url) {\n await this.preloadAndSetGroupAvatar(url);\n }\n else {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n }\n }\n catch {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n }\n return;\n }\n // If it's a full URL or data URI, use as-is; otherwise treat as a fileId\n if (/^(https?:)?\\/\\//i.test(val) || val.startsWith('data:')) {\n await this.preloadAndSetGroupAvatar(val);\n return;\n }\n try {\n const info = await this.fileStorage.getInfo(val);\n const url = info?.url ? String(info.url) : null;\n if (url) {\n await this.preloadAndSetGroupAvatar(url);\n }\n else {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n }\n }\n catch {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n }\n return;\n }\n const source = avatar.source;\n if (!source) {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n return;\n }\n switch (source.kind) {\n case 'url':\n await this.preloadAndSetGroupAvatar(String(source.value));\n return;\n case 'blob': {\n const prev = this.groupBlobUrl();\n if (prev)\n URL.revokeObjectURL(prev);\n const blob = source.value;\n const next = URL.createObjectURL(blob);\n this.groupBlobUrl.set(next);\n await this.preloadAndSetGroupAvatar(next);\n return;\n }\n case 'fileId': {\n try {\n const info = await this.fileStorage.getInfo(String(source.value));\n const url = info?.url ? String(info.url) : null;\n if (url) {\n await this.preloadAndSetGroupAvatar(url);\n }\n else {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n }\n }\n catch {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n }\n return;\n }\n default:\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n return;\n }\n }, ...(ngDevMode ? [{ debugName: \"#groupAvatarEffect\" }] : []));\n this.formattedLastMessageDate = computed(() => {\n const lastMessage = this.data().lastMessage;\n const createdAt = lastMessage?.auditInfo?.created?.at;\n if (!createdAt) {\n return '';\n }\n const messageDate = new Date(createdAt);\n const today = new Date();\n const isToday = messageDate.getFullYear() === today.getFullYear() &&\n messageDate.getMonth() === today.getMonth() &&\n messageDate.getDate() === today.getDate();\n if (isToday) {\n return this.datePipe.transform(messageDate, 'shortTime');\n }\n else {\n return this.datePipe.transform(messageDate, 'mediumDate');\n }\n }, ...(ngDevMode ? [{ debugName: \"formattedLastMessageDate\" }] : []));\n this.lastMessage = computed(() => {\n const message = this.data().lastMessage;\n if (!message)\n return { content: 'No messages yet', contentType: 'text', reactions: [] };\n return {\n content: message.message.contentType === 'text' ? message.message.content : message.message.contentType,\n contentType: message.message.contentType,\n reactions: message.reactions || [],\n author: message.author,\n };\n }, ...(ngDevMode ? [{ debugName: \"lastMessage\" }] : []));\n this.hasUnread = computed(() => {\n return this.data().unreadCount > 0;\n }, ...(ngDevMode ? [{ debugName: \"hasUnread\" }] : []));\n this.unreadCount = computed(() => {\n return this.data().unreadCount.toString();\n }, ...(ngDevMode ? [{ debugName: \"unreadCount\" }] : []));\n }\n #chatInfoEffect;\n async preloadAndSetGroupAvatar(url) {\n this.isGroupAvatarLoading.set(true);\n await new Promise((resolve) => {\n const img = new Image();\n img.onload = () => {\n this.groupAvatarUrl.set(url);\n this.isGroupAvatarLoading.set(false);\n resolve();\n };\n img.onerror = () => {\n this.groupAvatarUrl.set(null);\n this.isGroupAvatarLoading.set(false);\n resolve();\n };\n img.src = url;\n });\n }\n #groupAvatarEffect;\n ngOnDestroy() {\n const prev = this.groupBlobUrl();\n if (prev)\n URL.revokeObjectURL(prev);\n }\n onPressChatItem(id) {\n this.pressChatItem.emit(id);\n }\n messageSeenStatus() {\n const lastMessage = this.data().lastMessage;\n if (!lastMessage)\n return '';\n // Check if current user is the author\n if (this.sessionService.user?.id === lastMessage.author?.id) {\n // Check if message has been seen by anyone\n return lastMessage.seen.length > 0 ? 'ax-icon-dobble-check' : 'ax-icon-check';\n }\n return '';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMChatItemComponent, isStandalone: true, selector: \"axm-chat-item\", inputs: { data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: true, transformFunction: null }, typing: { classPropertyName: \"typing\", publicName: \"typing\", isSignal: true, isRequired: false, transformFunction: null }, lastMessageReaction: { classPropertyName: \"lastMessageReaction\", publicName: \"lastMessageReaction\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pressChatItem: \"pressChatItem\" }, ngImport: i0, template: \"<div\\n [id]=\\\"data().id\\\"\\n class=\\\"ax-cursor-pointer ax-p-4 ax-flex ax-items-center ax-justify-between ax-gap-4 ax-border-b ax-border-divider\\\"\\n (click)=\\\"onPressChatItem(data().id)\\\"\\n>\\n <!-- Avatar and User Info Section -->\\n <div class=\\\"ax-flex ax-min-w-0 ax-gap-4 ax-flex-1\\\">\\n <!-- Avatar with Online Status -->\\n <div class=\\\"ax-flex-shrink-0\\\">\\n @if (chatName().isPrivate) {\\n <axp-user-avatar [size]=\\\"48\\\" [userId]=\\\"chatName().id\\\"></axp-user-avatar>\\n } @else {\\n @if (isGroupAvatarLoading()) {\\n <div class=\\\"ax-w-12 ax-h-12 ax-rounded-full ax-flex ax-items-center ax-justify-center ax-bg-surface\\\">\\n <i class=\\\"fa-solid fa-spinner-third fa-spin\\\"></i>\\n </div>\\n } @else if (groupAvatarUrl()) {\\n <div\\n class=\\\"ax-w-12 ax-h-12 ax-rounded-full ax-bg-center ax-bg-cover\\\"\\n [style.backgroundImage]=\\\"'url(' + groupAvatarUrl() + ')'\\\"\\n ></div>\\n } @else {\\n <ax-avatar [size]=\\\"48\\\">\\n <ax-text class=\\\"ax-primary-lightest\\\">\\n <small class=\\\"ax-text-xs ax-font-semibold fas fa-users\\\"></small>\\n </ax-text>\\n </ax-avatar>\\n }\\n }\\n <!--Temp-->\\n </div>\\n\\n <!-- User Details and Last Message -->\\n <div class=\\\"ax-flex ax-flex-col ax-min-w-0 ax-flex-1 ax-gap-1\\\">\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2\\\">\\n <p class=\\\"ax-font-semibold ax-text-on-surface ax-truncate ax-py-1\\\" [title]=\\\"chatName().fullName\\\">\\n {{ chatName().fullName }}\\n </p>\\n <div class=\\\"ax-flex ax-items-center ax-gap-1\\\">\\n @if (messageSeenStatus()) {\\n <ax-icon class=\\\"ax-icon ax-text-success ax-size-5\\\" [class]=\\\"messageSeenStatus()\\\"></ax-icon>\\n }\\n @if (this.data().lastMessage) {\\n <span class=\\\"ax-text-xs ax-whitespace-nowrap\\\">\\n {{ formattedLastMessageDate() }}\\n </span>\\n }\\n </div>\\n </div>\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-mt-1 ax-overflow-hidden\\\">\\n @if (typing()?.isTyping) {\\n <div class=\\\"ax-pb-1 ax-flex ax-justify-center ax-items-end ax-gap-1\\\">\\n <span class=\\\"ax-text-on-surface-light ax-font-semibold ax-capitalize ax-whitespace-nowrap ax-text-sm\\\">\\n @if (!chatName().isPrivate) {\\n {{ typing()?.user }}\\n }\\n {{ '@conversation:is-typing' | translate | async }}\\n </span>\\n <div class=\\\"typing-indicator\\\">\\n <span></span>\\n <span></span>\\n <span></span>\\n </div>\\n </div>\\n } @else {\\n <div class=\\\"ax-flex ax-items-center ax-gap-2 ax-text-sm ax-shrink ax-min-w-0\\\">\\n @if ((lastMessage().author?.fullName || lastMessage().author?.username) && !chatName().isPrivate) {\\n <span class=\\\"ax-text-on-surface-light ax-font-semibold ax-capitalize ax-whitespace-nowrap\\\">\\n {{ (lastMessage().author?.fullName || lastMessage().author?.username) + ': ' }}\\n </span>\\n }\\n @switch (lastMessage().contentType) {\\n @case ('image') {\\n <i class=\\\"fa-regular fa-image\\\"></i>\\n }\\n @case ('video') {\\n <i class=\\\"fa-regular fa-video\\\"></i>\\n }\\n @case ('file') {\\n <i class=\\\"fa-regular fa-file\\\"></i>\\n }\\n @case ('audio') {\\n <i class=\\\"fa-regular fa-microphone\\\"></i>\\n }\\n @case ('link') {\\n <i class=\\\"fa-regular fa-link\\\"></i>\\n }\\n }\\n\\n <span class=\\\"ax-truncate ax-capitalize\\\">\\n {{ lastMessage().content }}\\n </span>\\n </div>\\n }\\n <div class=\\\"ax-flex ax-items-center ax-gap-2\\\">\\n @if (hasUnread()) {\\n <ax-badge color=\\\"primary\\\" [text]=\\\"unreadCount()\\\" class=\\\"ax-flex-shrink-0 ax-ml-auto\\\"></ax-badge>\\n }\\n <!-- @if (lastMessageReaction()) {\\n <div class=\\\"ax-flex ax-items-center ax-gap-1 ax-bg-surface ax-rounded-full ax-p-1 ax-px-2\\\">\\n <span class=\\\"ax-text-sm\\\">{{ lastMessageReaction() }}</span>\\n <span class=\\\"ax-text-xs\\\">{{ lastMessage().reactions.length }}</span>\\n </div>\\n } -->\\n </div>\\n </div>\\n </div>\\n </div>\\n</div>\\n\", styles: [\":host{display:block;width:100%}.typing-indicator{display:flex;align-items:center;padding-bottom:.4rem}.typing-indicator span{height:4px;width:4px;margin:0 1px;background-color:#9e9ea1;border-radius:50%;display:inline-block;animation:bounce 1.4s infinite ease-in-out both}.typing-indicator span:nth-child(1){animation-delay:-.32s}.typing-indicator span:nth-child(2){animation-delay:-.16s}@keyframes bounce{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}\\n\"], dependencies: [{ kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i1.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i1.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"component\", type: i2.AXBadgeComponent, selector: \"ax-badge\", inputs: [\"color\", \"look\", \"text\"] }, { kind: \"component\", type: AXPUserAvatarComponent, selector: \"axp-user-avatar\", inputs: [\"size\", \"userId\"] }, { kind: \"ngmodule\", type: AXAvatarModule }, { kind: \"component\", type: i3.AXAvatarComponent, selector: \"ax-avatar\", inputs: [\"color\", \"size\", \"shape\", \"look\"], outputs: [\"sizeChange\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"pipe\", type: i4.AXTranslatorPipe, name: \"translate\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatItemComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-chat-item', changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n AXDecoratorModule,\n AXBadgeModule,\n AXPUserAvatarComponent,\n AXAvatarModule,\n AXDecoratorModule,\n AXTranslationModule,\n AsyncPipe,\n ], template: \"<div\\n [id]=\\\"data().id\\\"\\n class=\\\"ax-cursor-pointer ax-p-4 ax-flex ax-items-center ax-justify-between ax-gap-4 ax-border-b ax-border-divider\\\"\\n (click)=\\\"onPressChatItem(data().id)\\\"\\n>\\n <!-- Avatar and User Info Section -->\\n <div class=\\\"ax-flex ax-min-w-0 ax-gap-4 ax-flex-1\\\">\\n <!-- Avatar with Online Status -->\\n <div class=\\\"ax-flex-shrink-0\\\">\\n @if (chatName().isPrivate) {\\n <axp-user-avatar [size]=\\\"48\\\" [userId]=\\\"chatName().id\\\"></axp-user-avatar>\\n } @else {\\n @if (isGroupAvatarLoading()) {\\n <div class=\\\"ax-w-12 ax-h-12 ax-rounded-full ax-flex ax-items-center ax-justify-center ax-bg-surface\\\">\\n <i class=\\\"fa-solid fa-spinner-third fa-spin\\\"></i>\\n </div>\\n } @else if (groupAvatarUrl()) {\\n <div\\n class=\\\"ax-w-12 ax-h-12 ax-rounded-full ax-bg-center ax-bg-cover\\\"\\n [style.backgroundImage]=\\\"'url(' + groupAvatarUrl() + ')'\\\"\\n ></div>\\n } @else {\\n <ax-avatar [size]=\\\"48\\\">\\n <ax-text class=\\\"ax-primary-lightest\\\">\\n <small class=\\\"ax-text-xs ax-font-semibold fas fa-users\\\"></small>\\n </ax-text>\\n </ax-avatar>\\n }\\n }\\n <!--Temp-->\\n </div>\\n\\n <!-- User Details and Last Message -->\\n <div class=\\\"ax-flex ax-flex-col ax-min-w-0 ax-flex-1 ax-gap-1\\\">\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2\\\">\\n <p class=\\\"ax-font-semibold ax-text-on-surface ax-truncate ax-py-1\\\" [title]=\\\"chatName().fullName\\\">\\n {{ chatName().fullName }}\\n </p>\\n <div class=\\\"ax-flex ax-items-center ax-gap-1\\\">\\n @if (messageSeenStatus()) {\\n <ax-icon class=\\\"ax-icon ax-text-success ax-size-5\\\" [class]=\\\"messageSeenStatus()\\\"></ax-icon>\\n }\\n @if (this.data().lastMessage) {\\n <span class=\\\"ax-text-xs ax-whitespace-nowrap\\\">\\n {{ formattedLastMessageDate() }}\\n </span>\\n }\\n </div>\\n </div>\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-2 ax-mt-1 ax-overflow-hidden\\\">\\n @if (typing()?.isTyping) {\\n <div class=\\\"ax-pb-1 ax-flex ax-justify-center ax-items-end ax-gap-1\\\">\\n <span class=\\\"ax-text-on-surface-light ax-font-semibold ax-capitalize ax-whitespace-nowrap ax-text-sm\\\">\\n @if (!chatName().isPrivate) {\\n {{ typing()?.user }}\\n }\\n {{ '@conversation:is-typing' | translate | async }}\\n </span>\\n <div class=\\\"typing-indicator\\\">\\n <span></span>\\n <span></span>\\n <span></span>\\n </div>\\n </div>\\n } @else {\\n <div class=\\\"ax-flex ax-items-center ax-gap-2 ax-text-sm ax-shrink ax-min-w-0\\\">\\n @if ((lastMessage().author?.fullName || lastMessage().author?.username) && !chatName().isPrivate) {\\n <span class=\\\"ax-text-on-surface-light ax-font-semibold ax-capitalize ax-whitespace-nowrap\\\">\\n {{ (lastMessage().author?.fullName || lastMessage().author?.username) + ': ' }}\\n </span>\\n }\\n @switch (lastMessage().contentType) {\\n @case ('image') {\\n <i class=\\\"fa-regular fa-image\\\"></i>\\n }\\n @case ('video') {\\n <i class=\\\"fa-regular fa-video\\\"></i>\\n }\\n @case ('file') {\\n <i class=\\\"fa-regular fa-file\\\"></i>\\n }\\n @case ('audio') {\\n <i class=\\\"fa-regular fa-microphone\\\"></i>\\n }\\n @case ('link') {\\n <i class=\\\"fa-regular fa-link\\\"></i>\\n }\\n }\\n\\n <span class=\\\"ax-truncate ax-capitalize\\\">\\n {{ lastMessage().content }}\\n </span>\\n </div>\\n }\\n <div class=\\\"ax-flex ax-items-center ax-gap-2\\\">\\n @if (hasUnread()) {\\n <ax-badge color=\\\"primary\\\" [text]=\\\"unreadCount()\\\" class=\\\"ax-flex-shrink-0 ax-ml-auto\\\"></ax-badge>\\n }\\n <!-- @if (lastMessageReaction()) {\\n <div class=\\\"ax-flex ax-items-center ax-gap-1 ax-bg-surface ax-rounded-full ax-p-1 ax-px-2\\\">\\n <span class=\\\"ax-text-sm\\\">{{ lastMessageReaction() }}</span>\\n <span class=\\\"ax-text-xs\\\">{{ lastMessage().reactions.length }}</span>\\n </div>\\n } -->\\n </div>\\n </div>\\n </div>\\n </div>\\n</div>\\n\", styles: [\":host{display:block;width:100%}.typing-indicator{display:flex;align-items:center;padding-bottom:.4rem}.typing-indicator span{height:4px;width:4px;margin:0 1px;background-color:#9e9ea1;border-radius:50%;display:inline-block;animation:bounce 1.4s infinite ease-in-out both}.typing-indicator span:nth-child(1){animation-delay:-.32s}.typing-indicator span:nth-child(2){animation-delay:-.16s}@keyframes bounce{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}\\n\"] }]\n }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: \"data\", required: true }] }], typing: [{ type: i0.Input, args: [{ isSignal: true, alias: \"typing\", required: false }] }], lastMessageReaction: [{ type: i0.Input, args: [{ isSignal: true, alias: \"lastMessageReaction\", required: false }] }], pressChatItem: [{ type: i0.Output, args: [\"pressChatItem\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jaGF0L2NvbXBvbmVudHMvY2hhdC1pdGVtL2NoYXQtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY2hhdC9jb21wb25lbnRzL2NoYXQtaXRlbS9jaGF0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7OztBQWtCcEgsTUFBTSxPQUFPLG9CQUFvQjtJQWZqQztRQWdCRSxRQUFRO1FBQ1IsU0FBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLCtDQUFlLENBQUM7UUFDckMsV0FBTSxHQUFHLEtBQUssQ0FBNkMsSUFBSSxrREFBQyxDQUFDO1FBQ2pFLHdCQUFtQixHQUFHLEtBQUssQ0FBZ0IsSUFBSSwrREFBQyxDQUFDO1FBRWpELFNBQVM7UUFDVCxrQkFBYSxHQUFHLE1BQU0sRUFBVSxDQUFDO1FBRWpDLFdBQVc7UUFDSCxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNDLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUUxQyxhQUFRLEdBQUcsTUFBTSxDQUF1RDtZQUNoRixRQUFRLEVBQUUsWUFBWTtZQUN0QixFQUFFLEVBQUUsRUFBRTtZQUNOLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLG9EQUFDLENBQUM7UUFFSCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNsQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFM0MsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztvQkFDaEIsUUFBUSxFQUFFLEtBQUssSUFBSSxZQUFZO29CQUMvQixFQUFFO29CQUNGLFNBQVMsRUFBRSxLQUFLO2lCQUNqQixDQUFDLENBQUM7Z0JBQ0gsT0FBTztZQUNULENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RSxPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2dCQUNoQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSxjQUFjO2dCQUMzQyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ2IsU0FBUyxFQUFFLElBQUk7YUFDaEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQywyREFBQyxDQUFDO1FBRUgsZ0NBQWdDO1FBQ3RCLG1CQUFjLEdBQUcsTUFBTSxDQUFnQixJQUFJLDBEQUFDLENBQUM7UUFDL0MsaUJBQVksR0FBRyxNQUFNLENBQWdCLElBQUksd0RBQUMsQ0FBQztRQUN6Qyx5QkFBb0IsR0FBRyxNQUFNLENBQVUsSUFBSSxnRUFBQyxDQUFDO1FBb0J2RCx1QkFBa0IsR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3pCLHVCQUF1QjtZQUN2QixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxPQUFPO1lBQ1QsQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFJLElBQVksQ0FBQyxNQUFxRCxDQUFDO1lBQ25GLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckMsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzFCLG9FQUFvRTtnQkFDcEUsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQzt3QkFDSCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNoQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ2hELElBQUksR0FBRyxFQUFFLENBQUM7NEJBQ1IsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzNDLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDOUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDdkMsQ0FBQztvQkFDSCxDQUFDO29CQUFDLE1BQU0sQ0FBQzt3QkFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdkMsQ0FBQztvQkFDRCxPQUFPO2dCQUNULENBQUM7Z0JBQ0QseUVBQXlFO2dCQUN6RSxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQzVELE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUN6QyxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsSUFBSSxDQUFDO29CQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2pELE1BQU0sR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDaEQsSUFBSSxHQUFHLEVBQUUsQ0FBQzt3QkFDUixNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDM0MsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN2QyxDQUFDO2dCQUNILENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO2dCQUNELE9BQU87WUFDVCxDQUFDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQWtELENBQUM7WUFDekUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5QixJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxPQUFPO1lBQ1QsQ0FBQztZQUNELFFBQVEsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNwQixLQUFLLEtBQUs7b0JBQ1IsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUMxRCxPQUFPO2dCQUNULEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDWixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ2pDLElBQUksSUFBSTt3QkFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNwQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBYSxDQUFDO29CQUNsQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDNUIsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzFDLE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ2QsSUFBSSxDQUFDO3dCQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxNQUFNLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ2hELElBQUksR0FBRyxFQUFFLENBQUM7NEJBQ1IsTUFBTSxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzNDLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDOUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDdkMsQ0FBQztvQkFDSCxDQUFDO29CQUFDLE1BQU0sQ0FBQzt3QkFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdkMsQ0FBQztvQkFDRCxPQUFPO2dCQUNULENBQUM7Z0JBQ0Q7b0JBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzlCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3JDLE9BQU87WUFDWCxDQUFDO1FBQ0gsQ0FBQyw4REFBQyxDQUFDO1FBT08sNkJBQXdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNqRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQzVDLE1BQU0sU0FBUyxHQUFHLFdBQVcsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQXNCLENBQUM7WUFDMUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNmLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDekIsTUFBTSxPQUFPLEdBQ1gsV0FBVyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxXQUFXLEVBQUU7Z0JBQ2pELFdBQVcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxLQUFLLENBQUMsUUFBUSxFQUFFO2dCQUMzQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRTVDLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDM0QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVELENBQUM7UUFDSCxDQUFDLG9FQUFDLENBQUM7UUFFTyxnQkFBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQztZQUN4QyxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3hGLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVztnQkFDdkcsV0FBVyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVztnQkFDeEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRTtnQkFDbEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2FBQ3ZCLENBQUM7UUFDSixDQUFDLHVEQUFDLENBQUM7UUFFTyxjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLENBQUMscURBQUMsQ0FBQztRQUVPLGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUMsQ0FBQyx1REFBQyxDQUFDO0tBa0JKO0lBNU1DLGVBQWUsQ0F1Qlo7SUFPSyxLQUFLLENBQUMsd0JBQXdCLENBQUMsR0FBVztRQUNoRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNsQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO2dCQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckMsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDLENBQUM7WUFDRixHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JDLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQyxDQUFDO1lBQ0YsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBOEZmO0lBRUgsV0FBVztRQUNULE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNqQyxJQUFJLElBQUk7WUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUF5Q1MsZUFBZSxDQUFDLEVBQVU7UUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVTLGlCQUFpQjtRQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDO1FBQzVDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFNUIsc0NBQXNDO1FBQ3RDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDNUQsMkNBQTJDO1lBQzNDLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1FBQ2hGLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7K0dBL05VLG9CQUFvQjttR0FBcEIsb0JBQW9CLG1oQkMzQmpDLHEvSUE2R0EscWdCRDNGSSxpQkFBaUIsc1ZBQ2pCLGFBQWEsMElBQ2Isc0JBQXNCLHVGQUN0QixjQUFjLDZLQUVkLG1CQUFtQiwwRkFDbkIsU0FBUzs7NEZBR0Esb0JBQW9CO2tCQWZoQyxTQUFTOytCQUNFLGVBQWUsbUJBR1IsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2Isc0JBQXNCO3dCQUN0QixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixTQUFTO3FCQUNWIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhBdmF0YXJNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYXZhdGFyJztcbmltcG9ydCB7IEFYQmFkZ2VNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYUFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUEZpbGVTdG9yYWdlU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUEZpbGVMaXN0SXRlbSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBVc2VyQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWE1DaGF0Um9vbSB9IGZyb20gJy4uLy4uL2NoYXQudHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4bS1jaGF0LWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhdC1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhdC1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhCYWRnZU1vZHVsZSxcbiAgICBBWFBVc2VyQXZhdGFyQ29tcG9uZW50LFxuICAgIEFYQXZhdGFyTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1DaGF0SXRlbUNvbXBvbmVudCB7XG4gIC8vIElucHV0XG4gIGRhdGEgPSBpbnB1dC5yZXF1aXJlZDxBWE1DaGF0Um9vbT4oKTtcbiAgdHlwaW5nID0gaW5wdXQ8eyB1c2VyOiBzdHJpbmc7IGlzVHlwaW5nOiBib29sZWFuIH0gfCBudWxsPihudWxsKTtcbiAgbGFzdE1lc3NhZ2VSZWFjdGlvbiA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8vIE91dHB1dFxuICBwcmVzc0NoYXRJdGVtID0gb3V0cHV0PHN0cmluZz4oKTtcblxuICAvLyBTZXJ2aWNlc1xuICBwcml2YXRlIHNlc3Npb25TZXJ2aWNlID0gaW5qZWN0KEFYUFNlc3Npb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkYXRlUGlwZSA9IGluamVjdChEYXRlUGlwZSk7XG4gIHByaXZhdGUgZmlsZVN0b3JhZ2UgPSBpbmplY3QoQVhQRmlsZVN0b3JhZ2VTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgY2hhdE5hbWUgPSBzaWduYWw8eyBmdWxsTmFtZTogc3RyaW5nOyBpZDogc3RyaW5nOyBpc1ByaXZhdGU6IGJvb2xlYW4gfT4oe1xuICAgIGZ1bGxOYW1lOiAnTG9hZGluZy4uLicsXG4gICAgaWQ6ICcnLFxuICAgIGlzUHJpdmF0ZTogZmFsc2UsXG4gIH0pO1xuXG4gICNjaGF0SW5mb0VmZmVjdCA9IGVmZmVjdChhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBtZW1iZXJzLCB0aXRsZSwgaWQgfSA9IHRoaXMuZGF0YSgpO1xuXG4gICAgaWYgKG1lbWJlcnMubGVuZ3RoID4gMSkge1xuICAgICAgdGhpcy5jaGF0TmFtZS5zZXQoe1xuICAgICAgICBmdWxsTmFtZTogdGl0bGUgfHwgJ0dyb3VwIENoYXQnLFxuICAgICAgICBpZCxcbiAgICAgICAgaXNQcml2YXRlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1lbWJlciA9IG1lbWJlcnNbMF07XG4gICAgaWYgKCFtZW1iZXIpIHtcbiAgICAgIHRoaXMuY2hhdE5hbWUuc2V0KHsgZnVsbE5hbWU6ICdVbmtub3duIFVzZXInLCBpZDogJycsIGlzUHJpdmF0ZTogdHJ1ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNoYXROYW1lLnNldCh7XG4gICAgICBmdWxsTmFtZTogbWVtYmVyLmZ1bGxOYW1lIHx8ICdVbmtub3duIFVzZXInLFxuICAgICAgaWQ6IG1lbWJlci5pZCxcbiAgICAgIGlzUHJpdmF0ZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gR3JvdXAgYXZhdGFyIHByZXZpZXcgaGFuZGxpbmdcbiAgcHJvdGVjdGVkIGdyb3VwQXZhdGFyVXJsID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIGdyb3VwQmxvYlVybCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIGlzR3JvdXBBdmF0YXJMb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuXG4gIHByaXZhdGUgYXN5bmMgcHJlbG9hZEFuZFNldEdyb3VwQXZhdGFyKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5ncm91cEF2YXRhclVybC5zZXQodXJsKTtcbiAgICAgICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuICAgICAgaW1nLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuZ3JvdXBBdmF0YXJVcmwuc2V0KG51bGwpO1xuICAgICAgICB0aGlzLmlzR3JvdXBBdmF0YXJMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG4gICAgICBpbWcuc3JjID0gdXJsO1xuICAgIH0pO1xuICB9XG5cbiAgI2dyb3VwQXZhdGFyRWZmZWN0ID0gZWZmZWN0KGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByb29tID0gdGhpcy5kYXRhKCk7XG4gICAgLy8gT25seSBmb3IgZ3JvdXAgY2hhdHNcbiAgICBpZiAoIXJvb20gfHwgKHJvb20ubWVtYmVycz8ubGVuZ3RoID8/IDApIDw9IDEpIHtcbiAgICAgIHRoaXMuZ3JvdXBBdmF0YXJVcmwuc2V0KG51bGwpO1xuICAgICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhdmF0YXIgPSAocm9vbSBhcyBhbnkpLmF2YXRhciBhcyBzdHJpbmcgfCBBWFBGaWxlTGlzdEl0ZW0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGlmICghYXZhdGFyKSB7XG4gICAgICB0aGlzLmdyb3VwQXZhdGFyVXJsLnNldChudWxsKTtcbiAgICAgIHRoaXMuaXNHcm91cEF2YXRhckxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhdmF0YXIgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB2YWwgPSBhdmF0YXIudHJpbSgpO1xuICAgICAgLy8gUmVzb2x2ZSBzdG9yZWQgZmlsZSBpZGVudGlmaWVycyBsaWtlIFwiZmlsZTo8aWQ+XCIgb3IgYmFyZSBmaWxlIElEc1xuICAgICAgaWYgKHZhbC5zdGFydHNXaXRoKCdmaWxlOicpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZmlsZUlkID0gdmFsLnN1YnN0cmluZyg1KTtcbiAgICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgdGhpcy5maWxlU3RvcmFnZS5nZXRJbmZvKGZpbGVJZCk7XG4gICAgICAgICAgY29uc3QgdXJsID0gaW5mbz8udXJsID8gU3RyaW5nKGluZm8udXJsKSA6IG51bGw7XG4gICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcmVsb2FkQW5kU2V0R3JvdXBBdmF0YXIodXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncm91cEF2YXRhclVybC5zZXQobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmlzR3JvdXBBdmF0YXJMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB0aGlzLmdyb3VwQXZhdGFyVXJsLnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLmlzR3JvdXBBdmF0YXJMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gSWYgaXQncyBhIGZ1bGwgVVJMIG9yIGRhdGEgVVJJLCB1c2UgYXMtaXM7IG90aGVyd2lzZSB0cmVhdCBhcyBhIGZpbGVJZFxuICAgICAgaWYgKC9eKGh0dHBzPzopP1xcL1xcLy9pLnRlc3QodmFsKSB8fCB2YWwuc3RhcnRzV2l0aCgnZGF0YTonKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnByZWxvYWRBbmRTZXRHcm91cEF2YXRhcih2YWwpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgdGhpcy5maWxlU3RvcmFnZS5nZXRJbmZvKHZhbCk7XG4gICAgICAgIGNvbnN0IHVybCA9IGluZm8/LnVybCA/IFN0cmluZyhpbmZvLnVybCkgOiBudWxsO1xuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5wcmVsb2FkQW5kU2V0R3JvdXBBdmF0YXIodXJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmdyb3VwQXZhdGFyVXJsLnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLmlzR3JvdXBBdmF0YXJMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aGlzLmdyb3VwQXZhdGFyVXJsLnNldChudWxsKTtcbiAgICAgICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzb3VyY2UgPSBhdmF0YXIuc291cmNlIGFzIHsga2luZDogc3RyaW5nOyB2YWx1ZTogYW55IH0gfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFzb3VyY2UpIHtcbiAgICAgIHRoaXMuZ3JvdXBBdmF0YXJVcmwuc2V0KG51bGwpO1xuICAgICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKHNvdXJjZS5raW5kKSB7XG4gICAgICBjYXNlICd1cmwnOlxuICAgICAgICBhd2FpdCB0aGlzLnByZWxvYWRBbmRTZXRHcm91cEF2YXRhcihTdHJpbmcoc291cmNlLnZhbHVlKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgJ2Jsb2InOiB7XG4gICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmdyb3VwQmxvYlVybCgpO1xuICAgICAgICBpZiAocHJldikgVVJMLnJldm9rZU9iamVjdFVSTChwcmV2KTtcbiAgICAgICAgY29uc3QgYmxvYiA9IHNvdXJjZS52YWx1ZSBhcyBCbG9iO1xuICAgICAgICBjb25zdCBuZXh0ID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgdGhpcy5ncm91cEJsb2JVcmwuc2V0KG5leHQpO1xuICAgICAgICBhd2FpdCB0aGlzLnByZWxvYWRBbmRTZXRHcm91cEF2YXRhcihuZXh0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnZmlsZUlkJzoge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCB0aGlzLmZpbGVTdG9yYWdlLmdldEluZm8oU3RyaW5nKHNvdXJjZS52YWx1ZSkpO1xuICAgICAgICAgIGNvbnN0IHVybCA9IGluZm8/LnVybCA/IFN0cmluZyhpbmZvLnVybCkgOiBudWxsO1xuICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJlbG9hZEFuZFNldEdyb3VwQXZhdGFyKHVybCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBBdmF0YXJVcmwuc2V0KG51bGwpO1xuICAgICAgICAgICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgdGhpcy5ncm91cEF2YXRhclVybC5zZXQobnVsbCk7XG4gICAgICAgICAgdGhpcy5pc0dyb3VwQXZhdGFyTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuZ3JvdXBBdmF0YXJVcmwuc2V0KG51bGwpO1xuICAgICAgICB0aGlzLmlzR3JvdXBBdmF0YXJMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pO1xuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLmdyb3VwQmxvYlVybCgpO1xuICAgIGlmIChwcmV2KSBVUkwucmV2b2tlT2JqZWN0VVJMKHByZXYpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZvcm1hdHRlZExhc3RNZXNzYWdlRGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IHRoaXMuZGF0YSgpLmxhc3RNZXNzYWdlO1xuICAgIGNvbnN0IGNyZWF0ZWRBdCA9IGxhc3RNZXNzYWdlPy5hdWRpdEluZm8/LmNyZWF0ZWQ/LmF0IGFzIERhdGUgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFjcmVhdGVkQXQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgbWVzc2FnZURhdGUgPSBuZXcgRGF0ZShjcmVhdGVkQXQpO1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBpc1RvZGF5ID1cbiAgICAgIG1lc3NhZ2VEYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRvZGF5LmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgIG1lc3NhZ2VEYXRlLmdldE1vbnRoKCkgPT09IHRvZGF5LmdldE1vbnRoKCkgJiZcbiAgICAgIG1lc3NhZ2VEYXRlLmdldERhdGUoKSA9PT0gdG9kYXkuZ2V0RGF0ZSgpO1xuXG4gICAgaWYgKGlzVG9kYXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShtZXNzYWdlRGF0ZSwgJ3Nob3J0VGltZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0obWVzc2FnZURhdGUsICdtZWRpdW1EYXRlJyk7XG4gICAgfVxuICB9KTtcblxuICBwcm90ZWN0ZWQgbGFzdE1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMuZGF0YSgpLmxhc3RNZXNzYWdlO1xuICAgIGlmICghbWVzc2FnZSkgcmV0dXJuIHsgY29udGVudDogJ05vIG1lc3NhZ2VzIHlldCcsIGNvbnRlbnRUeXBlOiAndGV4dCcsIHJlYWN0aW9uczogW10gfTtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGVudDogbWVzc2FnZS5tZXNzYWdlLmNvbnRlbnRUeXBlID09PSAndGV4dCcgPyBtZXNzYWdlLm1lc3NhZ2UuY29udGVudCA6IG1lc3NhZ2UubWVzc2FnZS5jb250ZW50VHlwZSxcbiAgICAgIGNvbnRlbnRUeXBlOiBtZXNzYWdlLm1lc3NhZ2UuY29udGVudFR5cGUsXG4gICAgICByZWFjdGlvbnM6IG1lc3NhZ2UucmVhY3Rpb25zIHx8IFtdLFxuICAgICAgYXV0aG9yOiBtZXNzYWdlLmF1dGhvcixcbiAgICB9O1xuICB9KTtcblxuICBwcm90ZWN0ZWQgaGFzVW5yZWFkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEoKS51bnJlYWRDb3VudCA+IDA7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCB1bnJlYWRDb3VudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhKCkudW5yZWFkQ291bnQudG9TdHJpbmcoKTtcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIG9uUHJlc3NDaGF0SXRlbShpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5wcmVzc0NoYXRJdGVtLmVtaXQoaWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1lc3NhZ2VTZWVuU3RhdHVzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSB0aGlzLmRhdGEoKS5sYXN0TWVzc2FnZTtcbiAgICBpZiAoIWxhc3RNZXNzYWdlKSByZXR1cm4gJyc7XG5cbiAgICAvLyBDaGVjayBpZiBjdXJyZW50IHVzZXIgaXMgdGhlIGF1dGhvclxuICAgIGlmICh0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI/LmlkID09PSBsYXN0TWVzc2FnZS5hdXRob3I/LmlkKSB7XG4gICAgICAvLyBDaGVjayBpZiBtZXNzYWdlIGhhcyBiZWVuIHNlZW4gYnkgYW55b25lXG4gICAgICByZXR1cm4gbGFzdE1lc3NhZ2Uuc2Vlbi5sZW5ndGggPiAwID8gJ2F4LWljb24tZG9iYmxlLWNoZWNrJyA6ICdheC1pY29uLWNoZWNrJztcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn1cbiIsIjxkaXZcbiAgW2lkXT1cImRhdGEoKS5pZFwiXG4gIGNsYXNzPVwiYXgtY3Vyc29yLXBvaW50ZXIgYXgtcC00IGF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktYmV0d2VlbiBheC1nYXAtNCBheC1ib3JkZXItYiBheC1ib3JkZXItZGl2aWRlclwiXG4gIChjbGljayk9XCJvblByZXNzQ2hhdEl0ZW0oZGF0YSgpLmlkKVwiXG4+XG4gIDwhLS0gQXZhdGFyIGFuZCBVc2VyIEluZm8gU2VjdGlvbiAtLT5cbiAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtbWluLXctMCBheC1nYXAtNCBheC1mbGV4LTFcIj5cbiAgICA8IS0tIEF2YXRhciB3aXRoIE9ubGluZSBTdGF0dXMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImF4LWZsZXgtc2hyaW5rLTBcIj5cbiAgICAgIEBpZiAoY2hhdE5hbWUoKS5pc1ByaXZhdGUpIHtcbiAgICAgICAgPGF4cC11c2VyLWF2YXRhciBbc2l6ZV09XCI0OFwiIFt1c2VySWRdPVwiY2hhdE5hbWUoKS5pZFwiPjwvYXhwLXVzZXItYXZhdGFyPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBpZiAoaXNHcm91cEF2YXRhckxvYWRpbmcoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC13LTEyIGF4LWgtMTIgYXgtcm91bmRlZC1mdWxsIGF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktY2VudGVyIGF4LWJnLXN1cmZhY2VcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtc3Bpbm5lci10aGlyZCBmYS1zcGluXCI+PC9pPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIGlmIChncm91cEF2YXRhclVybCgpKSB7XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJheC13LTEyIGF4LWgtMTIgYXgtcm91bmRlZC1mdWxsIGF4LWJnLWNlbnRlciBheC1iZy1jb3ZlclwiXG4gICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZEltYWdlXT1cIid1cmwoJyArIGdyb3VwQXZhdGFyVXJsKCkgKyAnKSdcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGF4LWF2YXRhciBbc2l6ZV09XCI0OFwiPlxuICAgICAgICAgICAgPGF4LXRleHQgY2xhc3M9XCJheC1wcmltYXJ5LWxpZ2h0ZXN0XCI+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImF4LXRleHQteHMgYXgtZm9udC1zZW1pYm9sZCBmYXMgZmEtdXNlcnNcIj48L3NtYWxsPlxuICAgICAgICAgICAgPC9heC10ZXh0PlxuICAgICAgICAgIDwvYXgtYXZhdGFyPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgICA8IS0tVGVtcC0tPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBVc2VyIERldGFpbHMgYW5kIExhc3QgTWVzc2FnZSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1taW4tdy0wIGF4LWZsZXgtMSBheC1nYXAtMVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktYmV0d2VlbiBheC1nYXAtMlwiPlxuICAgICAgICA8cCBjbGFzcz1cImF4LWZvbnQtc2VtaWJvbGQgYXgtdGV4dC1vbi1zdXJmYWNlIGF4LXRydW5jYXRlIGF4LXB5LTFcIiBbdGl0bGVdPVwiY2hhdE5hbWUoKS5mdWxsTmFtZVwiPlxuICAgICAgICAgIHt7IGNoYXROYW1lKCkuZnVsbE5hbWUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTFcIj5cbiAgICAgICAgICBAaWYgKG1lc3NhZ2VTZWVuU3RhdHVzKCkpIHtcbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiYXgtaWNvbiBheC10ZXh0LXN1Y2Nlc3MgYXgtc2l6ZS01XCIgW2NsYXNzXT1cIm1lc3NhZ2VTZWVuU3RhdHVzKClcIj48L2F4LWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAodGhpcy5kYXRhKCkubGFzdE1lc3NhZ2UpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdGV4dC14cyBheC13aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICB7eyBmb3JtYXR0ZWRMYXN0TWVzc2FnZURhdGUoKSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWJldHdlZW4gYXgtZ2FwLTIgYXgtbXQtMSBheC1vdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgQGlmICh0eXBpbmcoKT8uaXNUeXBpbmcpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtcGItMSBheC1mbGV4IGF4LWp1c3RpZnktY2VudGVyIGF4LWl0ZW1zLWVuZCBheC1nYXAtMVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10ZXh0LW9uLXN1cmZhY2UtbGlnaHQgYXgtZm9udC1zZW1pYm9sZCBheC1jYXBpdGFsaXplIGF4LXdoaXRlc3BhY2Utbm93cmFwIGF4LXRleHQtc21cIj5cbiAgICAgICAgICAgICAgQGlmICghY2hhdE5hbWUoKS5pc1ByaXZhdGUpIHtcbiAgICAgICAgICAgICAgICB7eyB0eXBpbmcoKT8udXNlciB9fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHt7ICdAY29udmVyc2F0aW9uOmlzLXR5cGluZycgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR5cGluZy1pbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTIgYXgtdGV4dC1zbSBheC1zaHJpbmsgYXgtbWluLXctMFwiPlxuICAgICAgICAgICAgQGlmICgobGFzdE1lc3NhZ2UoKS5hdXRob3I/LmZ1bGxOYW1lIHx8IGxhc3RNZXNzYWdlKCkuYXV0aG9yPy51c2VybmFtZSkgJiYgIWNoYXROYW1lKCkuaXNQcml2YXRlKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdGV4dC1vbi1zdXJmYWNlLWxpZ2h0IGF4LWZvbnQtc2VtaWJvbGQgYXgtY2FwaXRhbGl6ZSBheC13aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgIHt7IChsYXN0TWVzc2FnZSgpLmF1dGhvcj8uZnVsbE5hbWUgfHwgbGFzdE1lc3NhZ2UoKS5hdXRob3I/LnVzZXJuYW1lKSArICc6ICcgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQHN3aXRjaCAobGFzdE1lc3NhZ2UoKS5jb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICBAY2FzZSAoJ2ltYWdlJykge1xuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtcmVndWxhciBmYS1pbWFnZVwiPjwvaT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAY2FzZSAoJ3ZpZGVvJykge1xuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtcmVndWxhciBmYS12aWRlb1wiPjwvaT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAY2FzZSAoJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLWZpbGVcIj48L2k+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGNhc2UgKCdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXJlZ3VsYXIgZmEtbWljcm9waG9uZVwiPjwvaT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAY2FzZSAoJ2xpbmsnKSB7XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1yZWd1bGFyIGZhLWxpbmtcIj48L2k+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10cnVuY2F0ZSBheC1jYXBpdGFsaXplXCI+XG4gICAgICAgICAgICAgIHt7IGxhc3RNZXNzYWdlKCkuY29udGVudCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtMlwiPlxuICAgICAgICAgIEBpZiAoaGFzVW5yZWFkKCkpIHtcbiAgICAgICAgICAgIDxheC1iYWRnZSBjb2xvcj1cInByaW1hcnlcIiBbdGV4dF09XCJ1bnJlYWRDb3VudCgpXCIgY2xhc3M9XCJheC1mbGV4LXNocmluay0wIGF4LW1sLWF1dG9cIj48L2F4LWJhZGdlPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8IS0tIEBpZiAobGFzdE1lc3NhZ2VSZWFjdGlvbigpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTEgYXgtYmctc3VyZmFjZSBheC1yb3VuZGVkLWZ1bGwgYXgtcC0xIGF4LXB4LTJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10ZXh0LXNtXCI+e3sgbGFzdE1lc3NhZ2VSZWFjdGlvbigpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXRleHQteHNcIj57eyBsYXN0TWVzc2FnZSgpLnJlYWN0aW9ucy5sZW5ndGggfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCommentModule } from '@acorex/components/comment';\nimport { AXConversationModule } from '@acorex/components/conversation';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXLabelModule } from '@acorex/components/label';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXContextMenuComponent, } from '@acorex/components/menu';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSelectBoxModule } from '@acorex/components/select-box';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXSlidingItemModule } from '@acorex/components/sliding-item';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { AXWysiwygModule } from '@acorex/components/wysiwyg';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXMNotificationConnectorService } from '@acorex/modules/notification-management';\nimport { AXPStateMessageComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, } from '@acorex/platform/layout/components';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPEntityDataSelectorService, AXPEntityDefinitionRegistryService } from '@acorex/platform/layout/entity';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, HostListener, inject, signal, viewChild, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationEnd, Router, RouterModule } from '@angular/router';\nimport { filter, startWith } from 'rxjs';\nimport { AXMChatManagementService } from './chat-management.service';\nimport { convertChatMessageToNotification } from './chat-notification.helper';\nimport { AXMChatRealtimeService } from './chat-realtime.service';\nimport { AXMChatItemComponent } from './components/chat-item/chat-item.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/router\";\nimport * as i3 from \"@acorex/components/badge\";\nimport * as i4 from \"@acorex/components/sliding-item\";\nimport * as i5 from \"@acorex/components/decorators\";\nimport * as i6 from \"@acorex/components/search-box\";\nimport * as i7 from \"@acorex/components/tabs\";\nimport * as i8 from \"@acorex/components/button\";\nimport * as i9 from \"@acorex/components/skeleton\";\nimport * as i10 from \"@acorex/core/translation\";\nexport class AXMChatComponent extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n this.activatedRoute = inject(ActivatedRoute);\n this.chatService = inject(AXMChatManagementService);\n this.realtimeService = inject(AXMChatRealtimeService);\n this.dialogService = inject(AXDialogService);\n this.layoutBuilder = inject(AXPLayoutBuilderService);\n this.router = inject(Router);\n this.unsubscribe = inject(AXUnsubscriber);\n this.notificationConnectorService = inject(AXMNotificationConnectorService);\n this.dataSelectorService = inject(AXPEntityDataSelectorService);\n this.entityRegistry = inject(AXPEntityDefinitionRegistryService);\n // View Children\n this.tab = viewChild('tab', ...(ngDevMode ? [{ debugName: \"tab\" }] : []));\n this.container = viewChild('container', ...(ngDevMode ? [{ debugName: \"container\" }] : []));\n this.chatContext = viewChild('chatContext', ...(ngDevMode ? [{ debugName: \"chatContext\" }] : []));\n this.tabContext = viewChild('tabContext', ...(ngDevMode ? [{ debugName: \"tabContext\" }] : []));\n // State signals\n this.rooms = signal([], ...(ngDevMode ? [{ debugName: \"rooms\" }] : []));\n this.allRooms = signal([], ...(ngDevMode ? [{ debugName: \"allRooms\" }] : []));\n this.tabs = signal([], ...(ngDevMode ? [{ debugName: \"tabs\" }] : []));\n this.selectedRoom = signal(null, ...(ngDevMode ? [{ debugName: \"selectedRoom\" }] : []));\n this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n this.typingStatus = signal({}, ...(ngDevMode ? [{ debugName: \"typingStatus\" }] : []));\n this.error = signal(null, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n this.activeTabIndex = signal(0, ...(ngDevMode ? [{ debugName: \"activeTabIndex\" }] : []));\n this.isSearching = signal(false, ...(ngDevMode ? [{ debugName: \"isSearching\" }] : []));\n this.searchQuery = signal('', ...(ngDevMode ? [{ debugName: \"searchQuery\" }] : []));\n this.showSearch = signal(true, ...(ngDevMode ? [{ debugName: \"showSearch\" }] : []));\n this.placeholder = signal('@conversation:search.placeholder', ...(ngDevMode ? [{ debugName: \"placeholder\" }] : []));\n // Localized labels (preloaded for sync menu building)\n this.tOpen = signal('Open', ...(ngDevMode ? [{ debugName: \"tOpen\" }] : []));\n this.tMarkSeen = signal('Mark as seen', ...(ngDevMode ? [{ debugName: \"tMarkSeen\" }] : []));\n this.tTab = signal('Tab', ...(ngDevMode ? [{ debugName: \"tTab\" }] : []));\n this.tRemoveFromTab = signal('Remove from tab', ...(ngDevMode ? [{ debugName: \"tRemoveFromTab\" }] : []));\n this.tDelete = signal('Delete', ...(ngDevMode ? [{ debugName: \"tDelete\" }] : []));\n this.tRemoveChat = signal('Remove Chat', ...(ngDevMode ? [{ debugName: \"tRemoveChat\" }] : []));\n // Computed signals\n this.activeTab = computed(() => {\n const tabs = this.tabs();\n const index = this.activeTabIndex();\n if (tabs.length > 0 && index >= 0 && index < tabs.length) {\n return tabs[index];\n }\n return undefined;\n }, ...(ngDevMode ? [{ debugName: \"activeTab\" }] : []));\n this.filteredRooms = signal([], ...(ngDevMode ? [{ debugName: \"filteredRooms\" }] : []));\n this.searchEffect = effect(() => {\n const allRooms = this.allRooms();\n let chatRooms = [...allRooms]; // Start with all rooms\n // Tab filter\n const activeTab = this.activeTab();\n if (activeTab) {\n if (activeTab.name === 'unread') {\n // Special local state for unread\n chatRooms = allRooms.filter((room) => room.unreadCount > 0);\n }\n else if (activeTab.name === 'all') {\n // Local state for all\n chatRooms = allRooms;\n }\n else {\n // For other tabs defined by the service\n const includedIds = new Set(activeTab.includeRooms.map((r) => r.id));\n chatRooms = allRooms.filter((room) => includedIds.has(room.id));\n }\n }\n // Search filter (applies on top of tab filter)\n const query = (this.searchQuery() || '').toLowerCase();\n if (query) {\n const filtered = [];\n for (const room of chatRooms) {\n try {\n let roomName = '';\n // Handle group chats vs. single-user chats\n if (room.members && room.members.length > 1) {\n roomName = room.title || '';\n }\n else if (room.members && room.members.length === 1) {\n const member = room.members[0];\n if (member) {\n roomName = member.fullName || '';\n }\n }\n const lastMessage = room.lastMessage?.message?.content || '';\n if (roomName.toLowerCase().includes(query) || lastMessage.toLowerCase().includes(query)) {\n filtered.push(room);\n }\n }\n catch (error) {\n console.error(`Failed to process search for room ${room.id}`, error);\n }\n }\n chatRooms = filtered;\n }\n this.filteredRooms.set(chatRooms);\n }, ...(ngDevMode ? [{ debugName: \"searchEffect\" }] : []));\n this.unreadCount = computed(() => this.allRooms().filter((i) => i.unreadCount > 0).length, ...(ngDevMode ? [{ debugName: \"unreadCount\" }] : []));\n this.allCount = computed(() => this.allRooms().length, ...(ngDevMode ? [{ debugName: \"allCount\" }] : []));\n this.hasUnread = computed(() => this.allRooms().some((i) => i.unreadCount > 0), ...(ngDevMode ? [{ debugName: \"hasUnread\" }] : []));\n this.totalCount = computed(() => this.allRooms().length || 0, ...(ngDevMode ? [{ debugName: \"totalCount\" }] : []));\n // Context menus (desktop)\n this.contextRoom = null;\n this.contextTab = null;\n this.contextTabIndex = -1;\n }\n async deleteTab(tab) {\n const result = await this.dialogService.confirm(await this.translateService.translateAsync('@conversation:confirmations.delete-tab.title'), await this.translateService.translateAsync('@conversation:confirmations.delete-tab.message', {\n params: { title: tab.title },\n }));\n if (result.result) {\n await this.chatService.deleteTab(tab.id);\n await this.loadTabs();\n }\n }\n async ngOnInit() {\n super.ngOnInit();\n this.isLoading.set(true);\n this.error.set(null);\n const [openText, markSeenText, tabText, removeFromTabText, deleteText, removeChatText] = await Promise.all([\n this.translateService.translateAsync('@conversation:actions.open'),\n this.translateService.translateAsync('@conversation:actions.mark-seen'),\n this.translateService.translateAsync('@conversation:actions.tab'),\n this.translateService.translateAsync('@conversation:actions.remove-from-tab'),\n this.translateService.translateAsync('@conversation:actions.delete'),\n this.translateService.translateAsync('@conversation:remove-chat'),\n ]);\n this.tOpen.set(openText);\n this.tMarkSeen.set(markSeenText);\n this.tTab.set(tabText);\n this.tRemoveFromTab.set(removeFromTabText);\n this.tDelete.set(deleteText);\n this.tRemoveChat.set(removeChatText);\n await Promise.all([this.loadChats(), this.loadTabs()]);\n this.isLoading.set(false);\n //\n this.router.events\n .pipe(this.unsubscribe.takeUntilDestroy, filter((event) => event instanceof NavigationEnd), startWith(null))\n .subscribe(async () => {\n await this.loadFromRoute();\n });\n //\n this.realtimeService.room$.pipe(this.unsubscribe.takeUntilDestroy).subscribe((event) => {\n switch (event.type) {\n case 'add':\n this.allRooms.update((rooms) => [event.payload, ...rooms.filter((r) => r.id !== event.payload.id)]);\n break;\n case 'remove':\n this.allRooms.update((rooms) => rooms.filter((r) => r.id !== event.payload));\n if (event.payload === this.selectedRoom()?.id) {\n this.selectedRoom.set(null);\n this.router.navigate(['./'], { relativeTo: this.activatedRoute });\n }\n break;\n case 'update':\n this.allRooms.update((rooms) => rooms.map((r) => (r.id === event.payload.id ? event.payload : r)));\n break;\n case 'seen':\n this.allRooms.update((rooms) => rooms.map((room) => (room.id === event.payload ? { ...room, unreadCount: 0 } : room)));\n break;\n }\n });\n this.realtimeService.message$.pipe(this.unsubscribe.takeUntilDestroy).subscribe((event) => {\n switch (event.type) {\n case 'add': {\n const message = event.payload;\n const rooms = this.allRooms();\n const roomIndex = rooms.findIndex((r) => r.id === message.roomId);\n if (roomIndex > -1) {\n const roomToUpdate = rooms[roomIndex];\n const isCurrentUser = message.author.id === this.sessionService.user?.id;\n const updatedRoom = {\n ...roomToUpdate,\n lastMessage: message,\n unreadCount: !isCurrentUser ? (roomToUpdate.unreadCount || 0) + 1 : roomToUpdate.unreadCount,\n };\n const newRooms = [updatedRoom, ...rooms.filter((r) => r.id !== message.roomId)];\n this.allRooms.set(newRooms);\n if (!isCurrentUser && (this.selectedRoom()?.id !== message.roomId || document.hidden)) {\n const notification = convertChatMessageToNotification(roomToUpdate, message, this.sessionService.user);\n this.notificationConnectorService.create({\n ...notification,\n id: message.id,\n entityName: 'notifications',\n createAt: new Date(),\n }, {\n onClick: () => {\n this.router.navigate([roomToUpdate.id], { relativeTo: this.activatedRoute });\n },\n activeWindow: true,\n });\n }\n }\n else {\n this.chatService.getRoom(message.roomId).then((newRoom) => {\n this.allRooms.update((currentRooms) => [newRoom, ...currentRooms]);\n });\n }\n break;\n }\n case 'update': {\n const message = event.payload;\n this.allRooms.update((rooms) => {\n return rooms.map((room) => {\n if (room.lastMessage?.id === message.id) {\n return {\n ...room,\n lastMessage: {\n ...room.lastMessage,\n ...message,\n },\n };\n }\n return room;\n });\n });\n break;\n }\n }\n });\n this.realtimeService.typingStatus$.pipe(this.unsubscribe.takeUntilDestroy).subscribe(async (status) => {\n const currentUserId = this.sessionService.user?.id;\n if (status.user.id !== currentUserId) {\n if (status.isTyping) {\n this.typingStatus.update((value) => ({\n ...value,\n [status.roomId]: { user: status.user.fullName || '', isTyping: true },\n }));\n }\n else {\n this.typingStatus.update((value) => {\n const { [status.roomId]: _, ...rest } = value;\n return rest;\n });\n }\n }\n });\n }\n async loadFromRoute() {\n const chatId = this.activatedRoute.snapshot.firstChild?.paramMap.get('id');\n if (chatId) {\n this.openChat(chatId);\n }\n else {\n this.selectedRoom.set(null);\n }\n }\n // Page Interface Implementation\n async getPageTitle() {\n const room = this.selectedRoom();\n if (!room && this.layoutService.isMobileDevice()) {\n return await this.translateService.translateAsync('@conversation:plural-title');\n }\n if (!room) {\n return '';\n }\n const { members, title, id } = room;\n if (members.length > 1) {\n return title || (await this.translateService.translateAsync('@conversation:labels.group-chat'));\n }\n const member = members[0];\n if (!member) {\n return await this.translateService.translateAsync('@conversation:labels.unknown-user');\n }\n return member.fullName || (await this.translateService.translateAsync('@conversation:labels.unknown-user'));\n }\n getPageDescription() {\n const typing = this.typingStatus();\n const selectedRoomId = this.selectedRoom()?.id;\n if (selectedRoomId && typing[selectedRoomId]?.isTyping) {\n return `${typing[selectedRoomId].user} is typing...`;\n }\n const room = this.selectedRoom();\n return room?.topic || '';\n }\n async getBackButton() {\n if (this.selectedRoom()) {\n return {\n title: await this.translateService.translateAsync('@conversation:back-to-chat-list'),\n };\n }\n else\n return null;\n }\n async getSecondaryMenuItems() {\n const items = [];\n const hasRoom = !!this.selectedRoom();\n if (hasRoom) {\n const room = this.selectedRoom();\n const currentUserId = this.sessionService.user?.id;\n const creatorId = room.auditInfo?.created?.by?.id;\n const isCreator = !!currentUserId && !!creatorId && currentUserId === creatorId;\n const isGroup = (room.members?.length ?? 0) > 1;\n const isChannel = room.topic === 'channel';\n const kindKey = isGroup ? '@conversation:labels.group-chat' : '@conversation:room.individual-title';\n const kindText = await this.translateService.translateAsync(kindKey);\n const deleteText = await this.translateService.translateAsync('@conversation:actions.delete');\n const removeChatText = await this.translateService.translateAsync('@conversation:remove-chat');\n items.push({\n title: 'Edit Room',\n icon: 'fa-light fa-pen-to-square',\n command: { name: 'edit-room' },\n }, {\n title: isCreator ? `${deleteText} ${kindText}` : removeChatText,\n icon: 'fa-light fa-trash-can',\n color: 'danger',\n command: { name: isCreator ? 'delete-room' : 'leave-room' },\n });\n }\n return items;\n }\n async execute(command) {\n switch (command.name) {\n case 'remove-chat':\n const response = await this.dialogService.confirm(await this.translateService.translateAsync('@conversation:confirmations.remove-chat.title'), await this.translateService.translateAsync('@conversation:confirmations.remove-chat.message'));\n if (response.result) {\n await this.chatService.deleteRoom(this.selectedRoom()?.id);\n this.router.navigate(['./'], { relativeTo: this.activatedRoute });\n }\n break;\n case 'edit-room': {\n const room = await this.chatService.getRoom(this.selectedRoom()?.id);\n if (!room)\n return;\n const currentMemberIds = (room.members || []).map((m) => m.id);\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog(dialog => {\n dialog\n .setTitle('Edit Room')\n .setSize('sm')\n .setContext({ title: room.title || '', members: currentMemberIds, avatar: room.avatar })\n .content(layoutBuilder => {\n layoutBuilder.flex(flex => {\n flex\n .setDirection('column')\n .formField('@conversation:new-conversation.title.label', field => {\n field.path('title');\n field.textBox({ placeholder: '@conversation:new-conversation.title.placeholder' });\n })\n .formField('@conversation:new-conversation.lookup.label', field => {\n field.path('members');\n field.lookupBox({\n entity: 'SecurityManagement.User',\n multiple: true,\n customFilter: {\n field: 'id',\n operator: { type: 'notEqual' },\n value: this.sessionService.user?.id,\n },\n });\n })\n .formField('Avatar', field => {\n field.path('avatar');\n field.customWidget('avatar', {});\n });\n });\n })\n .setActions(actions => {\n actions.cancel('@general:actions.cancel.title').submit('Save');\n });\n })\n .show();\n const ctx = dialogRef.context();\n const action = dialogRef.action();\n dialogRef.close();\n if (action === 'cancel')\n return;\n const selectedIds = Array.isArray(ctx.members) ? ctx.members : [];\n const toAdd = selectedIds.filter((id) => !currentMemberIds.includes(id));\n const toRemove = currentMemberIds.filter((id) => !selectedIds.includes(id));\n const trimmedTitle = typeof ctx.title === 'string' ? ctx.title.trim() : undefined;\n const titleChanged = typeof trimmedTitle === 'string' && trimmedTitle !== (room.title || '').trim();\n const avatarChanged = (ctx.avatar ?? null) !== (room.avatar ?? null);\n const updatePayload = {};\n if (titleChanged) {\n updatePayload.title = trimmedTitle;\n }\n if (avatarChanged) {\n updatePayload.avatar = ctx.avatar ?? null;\n }\n const ops = [];\n if (Object.keys(updatePayload).length > 0) {\n ops.push(this.chatService.updateRoom(room.id, updatePayload));\n }\n toAdd.forEach((id) => ops.push(this.chatService.addParticipant(room.id, id)));\n toRemove.forEach((id) => ops.push(this.chatService.removeParticipant(room.id, id)));\n try {\n if (ops.length) {\n await Promise.all(ops);\n await this.loadChats();\n }\n }\n catch (e) {\n this.toastService.danger('Failed to update room');\n }\n break;\n }\n case 'delete-room': {\n const room = this.selectedRoom();\n if (!room)\n return;\n const response = await this.dialogService.confirm(await this.translateService.translateAsync('@conversation:confirmations.delete-room.title'), await this.translateService.translateAsync('@conversation:confirmations.delete-room.message'));\n if (response.result) {\n await this.chatService.deleteRoom(room.id);\n this.router.navigate(['./'], { relativeTo: this.activatedRoute });\n }\n break;\n }\n case 'leave-room': {\n const room = this.selectedRoom();\n if (!room)\n return;\n const currentUserId = this.sessionService.user?.id;\n const response = await this.dialogService.confirm(await this.translateService.translateAsync('@conversation:confirmations.remove-chat.title'), await this.translateService.translateAsync('@conversation:confirmations.remove-chat.message'));\n if (response.result) {\n await this.chatService.removeParticipant(room.id, currentUserId);\n this.router.navigate(['./'], { relativeTo: this.activatedRoute });\n }\n break;\n }\n }\n }\n onBackButtonClick() {\n this.selectedRoom.set(null);\n this.typingStatus.update((value) => {\n const { [this.selectedRoom()?.id]: _, ...rest } = value;\n return rest;\n });\n this.router.navigate(['./'], { relativeTo: this.activatedRoute });\n }\n // Methods\n getRoomCountForTab(tab) {\n const allRooms = this.allRooms();\n // For all tab types, only count rooms that have unread messages\n if (tab.name === 'all' || tab.name === 'unread') {\n return allRooms.filter((room) => room.unreadCount > 0).length;\n }\n const includedIds = new Set(tab.includeRooms.map((r) => r.id));\n return allRooms.filter((room) => includedIds.has(room.id) && room.unreadCount > 0).length;\n }\n async loadTabs() {\n const localTabs = [\n {\n id: 'all-local',\n name: 'all',\n title: 'All',\n excludeRooms: [],\n includeRooms: [],\n },\n {\n id: 'unread-local',\n name: 'unread',\n title: 'Unread',\n excludeRooms: [],\n includeRooms: [],\n },\n ];\n try {\n const result = await this.chatService.listTabs();\n this.tabs.set([...localTabs, ...result.items]);\n }\n catch (error) {\n console.error('Failed to load tabs:', error);\n this.tabs.set(localTabs);\n }\n }\n async loadChats() {\n try {\n // Use the updated service method to get rooms with last messages\n const response = await this.chatService.listRooms();\n // Sort rooms by last message created.at timestamp in descending order\n const sortedRooms = response.items.sort((a, b) => {\n const dateA = a.lastMessage?.auditInfo?.created?.at || a.auditInfo?.created?.at || 0;\n const dateB = b.lastMessage?.auditInfo?.created?.at || b.auditInfo?.created?.at || 0;\n return new Date(dateB).getTime() - new Date(dateA).getTime();\n });\n this.allRooms.set(sortedRooms);\n this.rooms.set(sortedRooms);\n }\n catch (error) {\n this.error.set('Failed to load chats. Please try again.');\n console.error('Error loading chats:', error);\n }\n }\n async refreshChat() {\n await this.loadChats();\n }\n async openChat(chatId) {\n try {\n this.typingStatus.update((value) => {\n const { [chatId]: _, ...rest } = value;\n return rest;\n });\n // Use the service method to mark chat as read\n await this.chatService.markRoomSeen(chatId);\n // Update local state without making another network request\n const currentRooms = this.allRooms();\n const updatedRooms = currentRooms.map((room) => {\n if (room.id === chatId) {\n // Reset unread count for the selected room\n return { ...room, unreadCount: 0 };\n }\n return room;\n });\n // Update the rooms signals\n this.allRooms.set(updatedRooms);\n this.rooms.set(updatedRooms);\n // Find the selected room\n const selectedRoom = updatedRooms.find((room) => room.id === chatId) || null;\n this.selectedRoom.set(selectedRoom);\n // Navigate to the chat details\n this.router.navigate([chatId], { relativeTo: this.activatedRoute });\n }\n catch (error) {\n console.error('Failed to mark chat as read:', error);\n }\n }\n searchChat(query) {\n this.searchQuery.set(query);\n this.isSearching.set(!!query);\n }\n // Header methods\n onSearch(query) {\n this.searchChat(query);\n }\n clearSearch() {\n this.searchQuery.set('');\n this.isSearching.set(false);\n }\n async openSelector() {\n try {\n const entity = await this.entityRegistry.resolve('SecurityManagement', 'User');\n const result = await this.dataSelectorService.open({\n entity,\n title: 'Select Users',\n allowMultiple: true,\n columns: ['username', 'displayName', 'roleIds'],\n filters: {\n field: 'id',\n operator: { type: 'equal' },\n // value: this.sessionService.user?.id,\n value: '{{ session.currentUser().id }}',\n },\n });\n return Array.isArray(result?.items)\n ? result.items\n .map((u) => u?.id)\n .filter((id) => typeof id === 'string' && id.length > 0)\n : [];\n }\n catch {\n return [];\n }\n }\n // Footer methods\n async onNewConversation() {\n const preselectedUserIds = await this.openSelector();\n if (!preselectedUserIds.length) {\n return;\n }\n let members = preselectedUserIds;\n let title;\n let avatar;\n if (preselectedUserIds.length > 1) {\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog(dialog => {\n dialog\n .setTitle('@conversation:new-conversation.header')\n .setSize('sm')\n .setContext({ lookup: preselectedUserIds, title: '', avatar: null })\n .content(layoutBuilder => {\n layoutBuilder.flex(flex => {\n flex\n .setDirection('column')\n .formField('@conversation:new-conversation.lookup.label', field => {\n field.path('lookup');\n field.lookupBox({ entity: 'SecurityManagement.User', multiple: true });\n })\n .formField('@conversation:new-conversation.title.label', field => {\n field.path('title');\n field.visible(`{{!(context.eval('lookup')?.length > 1) }}`);\n field.textBox({\n placeholder: '@conversation:new-conversation.title.placeholder',\n });\n })\n .formField('Avatar', field => {\n field.path('avatar');\n field.customWidget('avatar', { refId: 'group', refType: 'group' });\n });\n });\n })\n .setActions(actions => {\n actions.cancel('@general:actions.cancel.title').submit('@conversation:new-conversation.actions.accept-send');\n });\n })\n .show();\n const ctx = dialogRef.context();\n const action = dialogRef.action();\n dialogRef.close();\n const selected = ctx?.lookup ?? [];\n if (action === 'cancel' || !selected.length) {\n return;\n }\n members = selected;\n title = ctx?.title;\n avatar = ctx?.avatar;\n }\n try {\n const res = await this.chatService.createRoom(members, title, avatar || undefined);\n await this.refreshChat();\n this.router.navigate([res.id], { relativeTo: this.activatedRoute });\n }\n catch (error) {\n this.toastService.danger('Failed to create room');\n }\n }\n // Sliding item actions (mobile)\n onSlideAction(room, action) {\n switch (action) {\n // case 'mute':\n // this.toastService.warning('Mute not implemented yet');\n // break;\n case 'delete':\n this.deleteRoom(room.id);\n break;\n }\n }\n async deleteRoom(roomId) {\n try {\n const dialogResult = await this.dialogService.confirm('Delete Room', 'Are you sure you want to delete Room?', 'danger', 'horizontal');\n if (dialogResult.result) {\n this.chatService.deleteRoom(roomId);\n }\n }\n catch (error) {\n console.error(`Error Deleting Room with Room id: ${roomId}`, error);\n }\n }\n openContextMenu(ev, room) {\n ev.preventDefault();\n this.contextRoom = room;\n this.chatContext()?.showAt({ x: ev.clientX, y: ev.clientY });\n }\n openTabContextMenu(ev, tab, index) {\n ev.preventDefault();\n this.contextTab = tab;\n this.contextTabIndex = index;\n this.tabContext()?.showAt({ x: ev.clientX, y: ev.clientY });\n }\n onContextOpening(e) {\n const items = [];\n // General Items\n items.push({ name: 'open', text: this.tOpen(), icon: 'fa-light fa-message-lines' });\n // Resolve context room once\n const contextRoom = this.contextRoom;\n // Mark as seen (only if the room has unread messages)\n if (contextRoom && (contextRoom.unreadCount || 0) > 0) {\n items.push({ name: 'mark-seen', text: this.tMarkSeen(), icon: 'fa-light fa-envelope-open' });\n }\n // Tab submenu behavior (Telegram-like)\n const allTabs = this.tabs();\n const activeTab = this.activeTab();\n const customTabs = allTabs.filter((t) => t.name !== 'all' && t.name !== 'unread');\n if (contextRoom && customTabs.length > 0) {\n if (activeTab?.name === 'all') {\n const tabMenuItems = customTabs.map((t) => {\n const isIncluded = (t.includeRooms || []).some((r) => r.id === contextRoom.id);\n return {\n name: `tab.toggle:${t.id}`,\n text: t.title,\n icon: isIncluded ? 'fa-light fa-check' : undefined,\n };\n });\n items.push({ name: 'tab', text: this.tTab(), icon: 'fa-light fa-folder-tree', items: tabMenuItems });\n }\n else if (activeTab?.name === 'unread') {\n // No tab submenu in unread\n }\n else {\n // Only remove from current custom tab\n items.push({\n name: 'tab.remove-current',\n text: this.tRemoveFromTab(),\n icon: 'fa-light fa-square-minus',\n color: 'warning',\n });\n }\n }\n // Dangerous action at the end\n if (contextRoom) {\n const currentUserId = this.sessionService.user?.id;\n const creatorId = contextRoom.auditInfo?.created?.by?.id;\n const isCreator = !!currentUserId && !!creatorId && currentUserId === creatorId;\n const text = isCreator ? this.tDelete() : this.tRemoveChat();\n const name = isCreator ? 'delete-room' : 'leave-room';\n items.push({ name, text, icon: 'fa-light fa-trash-can', color: 'danger' });\n }\n e.items = items;\n }\n // Tab header context menu (synchronous build)\n onTabContextOpening(e) {\n const items = [];\n const tab = this.contextTab;\n if (!tab) {\n e.items = items;\n return;\n }\n if (tab.name === 'all' || tab.name === 'unread') {\n items.push({ name: 'tab.add', text: 'Add tab', icon: 'fa-light fa-square-plus' });\n }\n else {\n items.push({ name: 'tab.remove', text: 'Remove tab', icon: 'fa-light fa-trash-can', color: 'danger' });\n }\n e.items = items;\n }\n async onTabContextItemClick(e) {\n if (!this.contextTab)\n return;\n switch (e.item.name) {\n case 'tab.add': {\n // Build dialog for creating a new custom tab\n const rooms = this.allRooms();\n const roomOptions = rooms.map((r) => ({\n id: r.id,\n title: (r.members?.length ?? 0) > 1 ? r.title || '' : r.members?.[0]?.fullName || '',\n }));\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog(dialog => {\n dialog\n .setTitle('New Tab')\n .setSize('sm')\n .setContext({ title: '', rooms: [] })\n .content(layoutBuilder => {\n layoutBuilder.flex(flex => {\n flex\n .setDirection('column')\n .formField('Title', field => {\n field.path('title');\n field.textBox({ placeholder: 'Enter tab title' });\n })\n .formField('Chats', field => {\n field.path('rooms');\n field.selectBox({ valueField: 'id', textField: 'title', dataSource: roomOptions, multiple: true });\n });\n });\n })\n .setActions(actions => {\n actions.cancel('Cancel').submit('Create');\n });\n })\n .show();\n const action = dialogRef.action();\n const ctx = dialogRef.context();\n dialogRef.close();\n if (action === 'cancel' || !ctx?.title)\n return;\n try {\n const name = ctx.title.trim().toLowerCase().replace(/\\s+/g, '-').slice(0, 64);\n const selected = Array.isArray(ctx.rooms) ? ctx.rooms : [];\n const selectedIds = selected\n .map((v) => (typeof v === 'string' ? v : v?.id))\n .filter((v) => typeof v === 'string' && v.length > 0);\n const includeRooms = rooms.filter((r) => selectedIds.includes(r.id));\n await this.chatService.createTab({ name, title: ctx.title.trim(), includeRooms, excludeRooms: [] });\n await this.loadTabs();\n }\n catch (err) {\n console.error('Failed to create tab', err);\n }\n break;\n }\n case 'tab.remove': {\n await this.deleteTab(this.contextTab);\n break;\n }\n }\n // (this.tab() as any).setIndicatorPosition(this.activeTab());\n }\n onContextItemClick(e) {\n if (!this.contextRoom)\n return;\n const roomId = this.contextRoom.id;\n switch (e.item.name) {\n case 'open':\n this.openChat(roomId);\n break;\n case 'mark-seen':\n this.chatService\n .markRoomSeen(roomId)\n .catch(async () => this.toastService.danger(await this.translateService.translateAsync('@conversation:messages.mark-seen-failed')));\n break;\n // case 'mute':\n // this.toastService.warning('Mute not implemented yet');\n // break;\n default: {\n // Toggle tab inclusion: names are in the form 'tab.toggle:<tabId>'\n if (typeof e.item.name === 'string' && e.item.name.startsWith('tab.toggle:')) {\n const tabId = e.item.name.split(':')[1];\n const currentTabs = this.tabs();\n const foundTab = currentTabs.find((t) => t.id === tabId);\n if (!foundTab) {\n this.toastService.danger('@conversation:messages.tab-not-found');\n return;\n }\n const isIncluded = (foundTab.includeRooms || []).some((r) => r.id === roomId);\n const op = isIncluded\n ? this.chatService.removeIncludeRoomFromTab(tabId, roomId)\n : this.chatService.addIncludeRoomToTab(tabId, roomId);\n op.then(async (updatedTab) => {\n this.tabs.update((tabs) => tabs.map((t) => (t.id === updatedTab.id ? updatedTab : t)));\n this.toastService.success(await this.translateService.translateAsync(isIncluded ? '@conversation:messages.tab-removed' : '@conversation:messages.tab-added'));\n }).catch(async () => this.toastService.danger(await this.translateService.translateAsync('@conversation:messages.tab-update-failed')));\n return;\n }\n break;\n }\n case 'tab.remove-current': {\n const at = this.activeTab();\n if (!at || at.name === 'all' || at.name === 'unread') {\n return;\n }\n this.chatService\n .removeIncludeRoomFromTab(at.id, roomId)\n .then(async (updatedTab) => {\n this.tabs.update((tabs) => tabs.map((t) => (t.id === updatedTab.id ? updatedTab : t)));\n this.toastService.success(await this.translateService.translateAsync('@conversation:messages.tab-removed'));\n })\n .catch(async () => this.toastService.danger(await this.translateService.translateAsync('@conversation:messages.tab-remove-failed')));\n break;\n }\n case 'delete-room':\n this.deleteRoom(roomId);\n break;\n case 'leave-room': {\n const currentUserId = this.sessionService.user?.id;\n this.chatService\n .removeParticipant(roomId, currentUserId)\n .then(() => {\n if (this.selectedRoom()?.id === roomId) {\n this.router.navigate(['./'], { relativeTo: this.activatedRoute });\n }\n })\n .catch(async () => this.toastService.danger('Failed to leave'));\n break;\n }\n }\n }\n onKeydownHandler(event) {\n if (this.selectedRoom()) {\n this.onBackButtonClick();\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMChatComponent, isStandalone: true, selector: \"axm-chat\", host: { listeners: { \"document:keydown.escape\": \"onKeydownHandler($event)\" } }, providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMChatComponent,\n },\n AXUnsubscriber,\n ], viewQueries: [{ propertyName: \"tab\", first: true, predicate: [\"tab\"], descendants: true, isSignal: true }, { propertyName: \"container\", first: true, predicate: [\"container\"], descendants: true, isSignal: true }, { propertyName: \"chatContext\", first: true, predicate: [\"chatContext\"], descendants: true, isSignal: true }, { propertyName: \"tabContext\", first: true, predicate: [\"tabContext\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout #container>\\n <axp-layout-start-side class=\\\"ax-border-e ax-lightest-surface ax-h-full\\\">\\n <axp-layout-header>\\n <axp-layout-title>{{ '@conversation:module-name' | translate | async }}</axp-layout-title>\\n <axp-layout-toolbar>\\n <ax-search-box\\n #searchInput\\n look=\\\"solid\\\"\\n [placeholder]=\\\"'@conversation:search.placeholder' | translate | async\\\"\\n [value]=\\\"searchQuery()\\\"\\n (onValueChanged)=\\\"onSearch($event.value)\\\"\\n class=\\\"ax-w-full\\\"\\n >\\n <ax-clear-button></ax-clear-button>\\n </ax-search-box>\\n </axp-layout-toolbar>\\n </axp-layout-header>\\n <axp-layout-content class=\\\"ax-flex ax-flex-col ax-min-h-0 ax-max-w-80\\\">\\n @if (!layoutService.isMobileDevice()) {\\n <ng-container [ngTemplateOutlet]=\\\"template\\\"></ng-container>\\n }\\n </axp-layout-content>\\n </axp-layout-start-side>\\n\\n <axp-page-content\\n style=\\\"height: calc(100vh - 22rem)\\\"\\n [style.padding]=\\\"layoutService.isMobileDevice() ? '1rem !important' : '0 !important'\\\"\\n >\\n @if (selectedRoom()) {\\n <router-outlet></router-outlet>\\n } @else if (layoutService.isMobileDevice()) {\\n <ax-search-box\\n #searchInput\\n look=\\\"solid\\\"\\n [placeholder]=\\\"'@conversation:search.placeholder' | translate | async\\\"\\n [value]=\\\"searchQuery()\\\"\\n (onValueChanged)=\\\"onSearch($event.value)\\\"\\n class=\\\"ax-w-full ax-mb-2\\\"\\n >\\n <ax-clear-button></ax-clear-button>\\n </ax-search-box>\\n <ng-container [ngTemplateOutlet]=\\\"template\\\"></ng-container>\\n }\\n </axp-page-content>\\n</axp-page-layout>\\n<ng-template #template>\\n <!-- Tabs -->\\n <div [class]=\\\"!layoutService.isMobileDevice() ? 'ax-px-4' : ''\\\">\\n <ax-tabs\\n #tab\\n class=\\\"ax-text-neutral-400 !ax-overflow-x-hidden\\\"\\n [look]=\\\"'with-line'\\\"\\n [location]=\\\"'bottom'\\\"\\n [fitParent]=\\\"true\\\"\\n (onActiveTabChanged)=\\\"activeTabIndex.set($event.index)\\\"\\n >\\n @for (tab of tabs(); track tab.id; let i = $index) {\\n <ax-tab-item\\n [text]=\\\"tab.title\\\"\\n [active]=\\\"activeTabIndex() === i\\\"\\n (contextmenu)=\\\"openTabContextMenu($event, tab, i)\\\"\\n >\\n @if (getRoomCountForTab(tab) > 0) {\\n <ax-suffix>\\n <ax-badge\\n [text]=\\\"getRoomCountForTab(tab).toString()\\\"\\n [color]=\\\"activeTabIndex() === i ? 'primary' : 'secondary'\\\"\\n class=\\\"ax-min-w-[1.5rem] ax-justify-center\\\"\\n ></ax-badge>\\n </ax-suffix>\\n }\\n </ax-tab-item>\\n }\\n </ax-tabs>\\n </div>\\n\\n <!-- Chat List Content -->\\n <div\\n class=\\\"ax-flex-1 ax-overflow-hidden ax-flex ax-flex-col ax-justify-between ax-min-w-80\\\"\\n [class.ax-border-t]=\\\"tabs().length > 0\\\"\\n >\\n <!-- Loading State -->\\n @if (isLoading()) {\\n <div class=\\\"ax-p-4 ax-space-y-4\\\">\\n @for (_ of [1, 2, 3, 4, 5, 6]; track $index) {\\n <div class=\\\"ax-flex ax-items-center ax-space-x-3\\\">\\n <ax-skeleton [animated]=\\\"true\\\" class=\\\"ax-w-12 ax-h-12 ax-rounded-full\\\"></ax-skeleton>\\n <div class=\\\"ax-flex-1 ax-space-y-2\\\">\\n <ax-skeleton [animated]=\\\"true\\\" class=\\\"ax-w-3/4 ax-h-4 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton [animated]=\\\"true\\\" class=\\\"ax-w-1/2 ax-h-3 ax-rounded-md\\\"></ax-skeleton>\\n </div>\\n </div>\\n }\\n </div>\\n } @else if (error()) {\\n <axp-state-message\\n mode=\\\"error\\\"\\n icon=\\\"fa-light fa-circle-exclamation\\\"\\n [title]=\\\"'@conversation:chat-error'\\\"\\n [description]=\\\"error() || '@conversation:state-message.error.description'\\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@conversation:try-again' | translate | async\\\"\\n color=\\\"primary\\\"\\n (onClick)=\\\"refreshChat()\\\"\\n ></ax-button>\\n </axp-state-message>\\n } @else {\\n <div class=\\\"ax-flex-1 ax-overflow-y-auto ax-pt-1\\\">\\n @for (i of filteredRooms(); track i.id) {\\n @if (layoutService.isMobileDevice()) {\\n <ax-sliding-item class=\\\"ax-h-20\\\">\\n <ax-content class=\\\"!ax-p-0\\\">\\n <axm-chat-item\\n [data]=\\\"i\\\"\\n [typing]=\\\"$any(typingStatus()[i.id])\\\"\\n [lastMessageReaction]=\\\"i.lastMessage?.reactions?.[0]?.type ?? null\\\"\\n [attr.data-id]=\\\"i.id\\\"\\n (click)=\\\"openChat(i.id)\\\"\\n [class.ax-bg-dark]=\\\"selectedRoom()?.id === i.id\\\"\\n class=\\\"ax-transition-all ax-duration-100 hover:ax-bg-surface ax-block\\\"\\n [@fadeIn]\\n tabindex=\\\"0\\\"\\n (keydown.enter)=\\\"openChat(i.id)\\\"\\n role=\\\"button\\\"\\n (contextmenu)=\\\"openContextMenu($event, i)\\\"\\n ></axm-chat-item>\\n </ax-content>\\n\\n <!-- <ax-sliding-item-suffix (onClick)=\\\"onSlideAction(i, 'mute')\\\" color=\\\"warning\\\">\\n <ax-icon class=\\\"fa-light fa-bell-slash fa-lg\\\"></ax-icon>\\n </ax-sliding-item-suffix> -->\\n <ax-sliding-item-suffix (onClick)=\\\"onSlideAction(i, 'delete')\\\" color=\\\"danger\\\">\\n <ax-icon class=\\\"fa-light fa-trash-can fa-lg\\\"></ax-icon>\\n </ax-sliding-item-suffix>\\n </ax-sliding-item>\\n } @else {\\n <axm-chat-item\\n [data]=\\\"i\\\"\\n [typing]=\\\"$any(typingStatus()[i.id])\\\"\\n [lastMessageReaction]=\\\"i.lastMessage?.reactions?.[0]?.type ?? null\\\"\\n [attr.data-id]=\\\"i.id\\\"\\n (click)=\\\"openChat(i.id)\\\"\\n [class.ax-bg-dark]=\\\"selectedRoom()?.id === i.id\\\"\\n class=\\\"ax-transition-all ax-duration-100 hover:ax-bg-surface\\\"\\n [@fadeIn]\\n tabindex=\\\"0\\\"\\n (keydown.enter)=\\\"openChat(i.id)\\\"\\n role=\\\"button\\\"\\n (contextmenu)=\\\"openContextMenu($event, i)\\\"\\n ></axm-chat-item>\\n }\\n } @empty {\\n <axp-state-message\\n icon=\\\"fa-light fa-comments\\\"\\n [title]=\\\"'@conversation:no-chats-found.title'\\\"\\n [description]=\\\"'@conversation:no-chats-found.description'\\\"\\n >\\n </axp-state-message>\\n }\\n </div>\\n }\\n\\n <!-- Footer Content -->\\n @if (!layoutService.isMobileDevice()) {\\n <div class=\\\"ax-border-t ax-border-divider ax-bg-lightest ax-p-4\\\">\\n <ax-button\\n class=\\\"ax-w-full\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"'@conversation:new-conversation.button' | translate | async\\\"\\n (onClick)=\\\"onNewConversation()\\\"\\n >\\n <ax-prefix>\\n <ax-icon>\\n <i class=\\\"fa-solid fa-plus\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n </ax-button>\\n </div>\\n } @else {\\n <ax-button\\n class=\\\"ax-fixed ax-bottom-16 ax-right-8 !ax-rounded-full !ax-w-14 !ax-h-14 ax-shadow-lg\\\"\\n color=\\\"primary\\\"\\n (onClick)=\\\"onNewConversation()\\\"\\n >\\n <ax-icon class=\\\"ax-text-2xl\\\">\\n <i class=\\\"fa-solid fa-plus\\\"></i>\\n </ax-icon>\\n </ax-button>\\n }\\n </div>\\n</ng-template>\\n\\n<ax-context-menu\\n #chatContext\\n [openOn]=\\\"'click'\\\"\\n [closeOn]=\\\"'click'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n (onOpening)=\\\"onContextOpening($event)\\\"\\n (onItemClick)=\\\"onContextItemClick($event)\\\"\\n></ax-context-menu>\\n\\n<ax-context-menu\\n #tabContext\\n [openOn]=\\\"'click'\\\"\\n [closeOn]=\\\"'click'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n (onOpening)=\\\"onTabContextOpening($event)\\\"\\n (onItemClick)=\\\"onTabContextItemClick($event)\\\"\\n></ax-context-menu>\\n\", styles: [\"\"], dependencies: [{ kind: \"component\", type: AXMChatItemComponent, selector: \"axm-chat-item\", inputs: [\"data\", \"typing\", \"lastMessageReaction\"], outputs: [\"pressChatItem\"] }, { kind: \"ngmodule\", type: \n // Common Modules\n CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: RouterModule }, { kind: \"directive\", type: i2.RouterOutlet, selector: \"router-outlet\", inputs: [\"name\", \"routerOutletData\"], outputs: [\"activate\", \"deactivate\", \"attach\", \"detach\"], exportAs: [\"outlet\"] }, { kind: \"ngmodule\", type: \n // Acorex Core Modules\n AXFormatModule }, { kind: \"ngmodule\", type: AXConversationModule }, { kind: \"ngmodule\", type: AXCommentModule }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"ngmodule\", type: \n // Acorex Component Modules\n // AXResizableDirective,\n AXImageModule }, { kind: \"ngmodule\", type: AXAvatarModule }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"component\", type: i3.AXBadgeComponent, selector: \"ax-badge\", inputs: [\"color\", \"look\", \"text\"] }, { kind: \"ngmodule\", type: AXSlidingItemModule }, { kind: \"component\", type: i4.AXSlidingItemComponent, selector: \"ax-sliding-item\" }, { kind: \"component\", type: i4.AXSlidingItemSuffixComponent, selector: \"ax-sliding-item-suffix\", inputs: [\"color\", \"text\"], outputs: [\"onClick\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i5.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i5.AXDecoratorClearButtonComponent, selector: \"ax-clear-button\", inputs: [\"icon\"] }, { kind: \"component\", type: i5.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXTextBoxModule }, { kind: \"ngmodule\", type: AXSearchBoxModule }, { kind: \"component\", type: i6.AXSearchBoxComponent, selector: \"ax-search-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"value\", \"state\", \"name\", \"id\", \"look\", \"class\", \"delayTime\", \"type\", \"autoSearch\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onKeyDown\", \"onKeyUp\", \"onKeyPress\"] }, { kind: \"ngmodule\", type: AXTabsModule }, { kind: \"component\", type: i7.AXTabsComponent, selector: \"ax-tabs\", inputs: [\"look\", \"location\", \"fitParent\", \"minWidth\", \"content\"], outputs: [\"onActiveTabChanged\"] }, { kind: \"component\", type: i7.AXTabItemComponent, selector: \"ax-tab-item\", inputs: [\"disabled\", \"text\", \"key\", \"headerTemplate\", \"active\"], outputs: [\"disabledChange\", \"onClick\", \"onBlur\", \"onFocus\", \"activeChange\"] }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i8.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"ngmodule\", type: AXWysiwygModule }, { kind: \"ngmodule\", type: AXLabelModule }, { kind: \"ngmodule\", type: AXSelectBoxModule }, { kind: \"ngmodule\", type: AXFormModule }, { kind: \"ngmodule\", type: AXDropdownButtonModule }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"ngmodule\", type: AXToolBarModule }, { kind: \"ngmodule\", type: AXSkeletonModule }, { kind: \"component\", type: i9.AXSkeletonComponent, selector: \"ax-skeleton\", inputs: [\"animated\"] }, { kind: \"component\", type: AXPPageLayoutComponent, selector: \"axp-page-layout\" }, { kind: \"component\", type: AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPThemeLayoutStartSideComponent, selector: \"axp-layout-page-start-side, axp-layout-start-side\" }, { kind: \"component\", type: AXPThemeLayoutHeaderComponent, selector: \"axp-layout-header\" }, { kind: \"component\", type: AXPThemeLayoutToolbarComponent, selector: \"axp-layout-toolbar\" }, { kind: \"component\", type: AXContextMenuComponent, selector: \"ax-context-menu\", inputs: [\"orientation\", \"openOn\", \"closeOn\", \"items\", \"target\"], outputs: [\"onItemClick\", \"onOpening\"] }, { kind: \"component\", type: AXPStateMessageComponent, selector: \"axp-state-message\", inputs: [\"mode\", \"icon\", \"title\", \"description\", \"variant\"] }, { kind: \"pipe\", type: i1.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i10.AXTranslatorPipe, name: \"translate\" }], animations: [\n trigger('fadeIn', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(10px)' }),\n animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n ]),\n ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-chat', changeDetection: ChangeDetectionStrategy.OnPush, providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMChatComponent,\n },\n AXUnsubscriber,\n ], imports: [\n AXMChatItemComponent,\n // Common Modules\n CommonModule,\n FormsModule,\n RouterModule,\n // Acorex Core Modules\n AXFormatModule,\n AXConversationModule,\n AXCommentModule,\n AXTranslationModule,\n // Acorex Component Modules\n // AXResizableDirective,\n AXImageModule,\n AXAvatarModule,\n AXBadgeModule,\n AXSlidingItemModule,\n AXDecoratorModule,\n AXTextBoxModule,\n AXSearchBoxModule,\n AXTabsModule,\n AXButtonModule,\n AXLoadingModule,\n AXWysiwygModule,\n AXLabelModule,\n AXSelectBoxModule,\n AXFormModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXToolBarModule,\n AXSkeletonModule,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPThemeLayoutStartSideComponent,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutToolbarComponent,\n AXContextMenuComponent,\n AXPStateMessageComponent,\n ], animations: [\n trigger('fadeIn', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(10px)' }),\n animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n ]),\n ], template: \"<axp-page-layout #container>\\n <axp-layout-start-side class=\\\"ax-border-e ax-lightest-surface ax-h-full\\\">\\n <axp-layout-header>\\n <axp-layout-title>{{ '@conversation:module-name' | translate | async }}</axp-layout-title>\\n <axp-layout-toolbar>\\n <ax-search-box\\n #searchInput\\n look=\\\"solid\\\"\\n [placeholder]=\\\"'@conversation:search.placeholder' | translate | async\\\"\\n [value]=\\\"searchQuery()\\\"\\n (onValueChanged)=\\\"onSearch($event.value)\\\"\\n class=\\\"ax-w-full\\\"\\n >\\n <ax-clear-button></ax-clear-button>\\n </ax-search-box>\\n </axp-layout-toolbar>\\n </axp-layout-header>\\n <axp-layout-content class=\\\"ax-flex ax-flex-col ax-min-h-0 ax-max-w-80\\\">\\n @if (!layoutService.isMobileDevice()) {\\n <ng-container [ngTemplateOutlet]=\\\"template\\\"></ng-container>\\n }\\n </axp-layout-content>\\n </axp-layout-start-side>\\n\\n <axp-page-content\\n style=\\\"height: calc(100vh - 22rem)\\\"\\n [style.padding]=\\\"layoutService.isMobileDevice() ? '1rem !important' : '0 !important'\\\"\\n >\\n @if (selectedRoom()) {\\n <router-outlet></router-outlet>\\n } @else if (layoutService.isMobileDevice()) {\\n <ax-search-box\\n #searchInput\\n look=\\\"solid\\\"\\n [placeholder]=\\\"'@conversation:search.placeholder' | translate | async\\\"\\n [value]=\\\"searchQuery()\\\"\\n (onValueChanged)=\\\"onSearch($event.value)\\\"\\n class=\\\"ax-w-full ax-mb-2\\\"\\n >\\n <ax-clear-button></ax-clear-button>\\n </ax-search-box>\\n <ng-container [ngTemplateOutlet]=\\\"template\\\"></ng-container>\\n }\\n </axp-page-content>\\n</axp-page-layout>\\n<ng-template #template>\\n <!-- Tabs -->\\n <div [class]=\\\"!layoutService.isMobileDevice() ? 'ax-px-4' : ''\\\">\\n <ax-tabs\\n #tab\\n class=\\\"ax-text-neutral-400 !ax-overflow-x-hidden\\\"\\n [look]=\\\"'with-line'\\\"\\n [location]=\\\"'bottom'\\\"\\n [fitParent]=\\\"true\\\"\\n (onActiveTabChanged)=\\\"activeTabIndex.set($event.index)\\\"\\n >\\n @for (tab of tabs(); track tab.id; let i = $index) {\\n <ax-tab-item\\n [text]=\\\"tab.title\\\"\\n [active]=\\\"activeTabIndex() === i\\\"\\n (contextmenu)=\\\"openTabContextMenu($event, tab, i)\\\"\\n >\\n @if (getRoomCountForTab(tab) > 0) {\\n <ax-suffix>\\n <ax-badge\\n [text]=\\\"getRoomCountForTab(tab).toString()\\\"\\n [color]=\\\"activeTabIndex() === i ? 'primary' : 'secondary'\\\"\\n class=\\\"ax-min-w-[1.5rem] ax-justify-center\\\"\\n ></ax-badge>\\n </ax-suffix>\\n }\\n </ax-tab-item>\\n }\\n </ax-tabs>\\n </div>\\n\\n <!-- Chat List Content -->\\n <div\\n class=\\\"ax-flex-1 ax-overflow-hidden ax-flex ax-flex-col ax-justify-between ax-min-w-80\\\"\\n [class.ax-border-t]=\\\"tabs().length > 0\\\"\\n >\\n <!-- Loading State -->\\n @if (isLoading()) {\\n <div class=\\\"ax-p-4 ax-space-y-4\\\">\\n @for (_ of [1, 2, 3, 4, 5, 6]; track $index) {\\n <div class=\\\"ax-flex ax-items-center ax-space-x-3\\\">\\n <ax-skeleton [animated]=\\\"true\\\" class=\\\"ax-w-12 ax-h-12 ax-rounded-full\\\"></ax-skeleton>\\n <div class=\\\"ax-flex-1 ax-space-y-2\\\">\\n <ax-skeleton [animated]=\\\"true\\\" class=\\\"ax-w-3/4 ax-h-4 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton [animated]=\\\"true\\\" class=\\\"ax-w-1/2 ax-h-3 ax-rounded-md\\\"></ax-skeleton>\\n </div>\\n </div>\\n }\\n </div>\\n } @else if (error()) {\\n <axp-state-message\\n mode=\\\"error\\\"\\n icon=\\\"fa-light fa-circle-exclamation\\\"\\n [title]=\\\"'@conversation:chat-error'\\\"\\n [description]=\\\"error() || '@conversation:state-message.error.description'\\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@conversation:try-again' | translate | async\\\"\\n color=\\\"primary\\\"\\n (onClick)=\\\"refreshChat()\\\"\\n ></ax-button>\\n </axp-state-message>\\n } @else {\\n <div class=\\\"ax-flex-1 ax-overflow-y-auto ax-pt-1\\\">\\n @for (i of filteredRooms(); track i.id) {\\n @if (layoutService.isMobileDevice()) {\\n <ax-sliding-item class=\\\"ax-h-20\\\">\\n <ax-content class=\\\"!ax-p-0\\\">\\n <axm-chat-item\\n [data]=\\\"i\\\"\\n [typing]=\\\"$any(typingStatus()[i.id])\\\"\\n [lastMessageReaction]=\\\"i.lastMessage?.reactions?.[0]?.type ?? null\\\"\\n [attr.data-id]=\\\"i.id\\\"\\n (click)=\\\"openChat(i.id)\\\"\\n [class.ax-bg-dark]=\\\"selectedRoom()?.id === i.id\\\"\\n class=\\\"ax-transition-all ax-duration-100 hover:ax-bg-surface ax-block\\\"\\n [@fadeIn]\\n tabindex=\\\"0\\\"\\n (keydown.enter)=\\\"openChat(i.id)\\\"\\n role=\\\"button\\\"\\n (contextmenu)=\\\"openContextMenu($event, i)\\\"\\n ></axm-chat-item>\\n </ax-content>\\n\\n <!-- <ax-sliding-item-suffix (onClick)=\\\"onSlideAction(i, 'mute')\\\" color=\\\"warning\\\">\\n <ax-icon class=\\\"fa-light fa-bell-slash fa-lg\\\"></ax-icon>\\n </ax-sliding-item-suffix> -->\\n <ax-sliding-item-suffix (onClick)=\\\"onSlideAction(i, 'delete')\\\" color=\\\"danger\\\">\\n <ax-icon class=\\\"fa-light fa-trash-can fa-lg\\\"></ax-icon>\\n </ax-sliding-item-suffix>\\n </ax-sliding-item>\\n } @else {\\n <axm-chat-item\\n [data]=\\\"i\\\"\\n [typing]=\\\"$any(typingStatus()[i.id])\\\"\\n [lastMessageReaction]=\\\"i.lastMessage?.reactions?.[0]?.type ?? null\\\"\\n [attr.data-id]=\\\"i.id\\\"\\n (click)=\\\"openChat(i.id)\\\"\\n [class.ax-bg-dark]=\\\"selectedRoom()?.id === i.id\\\"\\n class=\\\"ax-transition-all ax-duration-100 hover:ax-bg-surface\\\"\\n [@fadeIn]\\n tabindex=\\\"0\\\"\\n (keydown.enter)=\\\"openChat(i.id)\\\"\\n role=\\\"button\\\"\\n (contextmenu)=\\\"openContextMenu($event, i)\\\"\\n ></axm-chat-item>\\n }\\n } @empty {\\n <axp-state-message\\n icon=\\\"fa-light fa-comments\\\"\\n [title]=\\\"'@conversation:no-chats-found.title'\\\"\\n [description]=\\\"'@conversation:no-chats-found.description'\\\"\\n >\\n </axp-state-message>\\n }\\n </div>\\n }\\n\\n <!-- Footer Content -->\\n @if (!layoutService.isMobileDevice()) {\\n <div class=\\\"ax-border-t ax-border-divider ax-bg-lightest ax-p-4\\\">\\n <ax-button\\n class=\\\"ax-w-full\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"'@conversation:new-conversation.button' | translate | async\\\"\\n (onClick)=\\\"onNewConversation()\\\"\\n >\\n <ax-prefix>\\n <ax-icon>\\n <i class=\\\"fa-solid fa-plus\\\"></i>\\n </ax-icon>\\n </ax-prefix>\\n </ax-button>\\n </div>\\n } @else {\\n <ax-button\\n class=\\\"ax-fixed ax-bottom-16 ax-right-8 !ax-rounded-full !ax-w-14 !ax-h-14 ax-shadow-lg\\\"\\n color=\\\"primary\\\"\\n (onClick)=\\\"onNewConversation()\\\"\\n >\\n <ax-icon class=\\\"ax-text-2xl\\\">\\n <i class=\\\"fa-solid fa-plus\\\"></i>\\n </ax-icon>\\n </ax-button>\\n }\\n </div>\\n</ng-template>\\n\\n<ax-context-menu\\n #chatContext\\n [openOn]=\\\"'click'\\\"\\n [closeOn]=\\\"'click'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n (onOpening)=\\\"onContextOpening($event)\\\"\\n (onItemClick)=\\\"onContextItemClick($event)\\\"\\n></ax-context-menu>\\n\\n<ax-context-menu\\n #tabContext\\n [openOn]=\\\"'click'\\\"\\n [closeOn]=\\\"'click'\\\"\\n [orientation]=\\\"'vertical'\\\"\\n (onOpening)=\\\"onTabContextOpening($event)\\\"\\n (onItemClick)=\\\"onTabContextItemClick($event)\\\"\\n></ax-context-menu>\\n\" }]\n }], propDecorators: { tab: [{ type: i0.ViewChild, args: ['tab', { isSignal: true }] }], container: [{ type: i0.ViewChild, args: ['container', { isSignal: true }] }], chatContext: [{ type: i0.ViewChild, args: ['chatContext', { isSignal: true }] }], tabContext: [{ type: i0.ViewChild, args: ['tabContext', { isSignal: true }] }], onKeydownHandler: [{\n type: HostListener,\n args: ['document:keydown.escape', ['$event']]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY2hhdC9jaGF0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jaGF0L2NoYXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUNMLHNCQUFzQixHQUl2QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8s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QUFDLENBQUM7NkJBQzdFLENBQUM7eUJBQ0gsQ0FBQztxQkFDSDtpRUFlZ0MsS0FBSyxtRUFDUSxXQUFXLHFFQUNULGFBQWEsb0VBQ2QsWUFBWTtzQkF3NkIxRCxZQUFZO3VCQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhBdmF0YXJNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYXZhdGFyJztcbmltcG9ydCB7IEFYQmFkZ2VNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYQ29tbWVudE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tZW50JztcbmltcG9ydCB7IEFYQ29udmVyc2F0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbnZlcnNhdGlvbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYRGlhbG9nU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kaWFsb2cnO1xuaW1wb3J0IHsgQVhEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBBWERyb3Bkb3duQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duLWJ1dHRvbic7XG5pbXBvcnQgeyBBWEZvcm1Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgeyBBWEltYWdlTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2ltYWdlJztcbmltcG9ydCB7IEFYTGFiZWxNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbGFiZWwnO1xuaW1wb3J0IHsgQVhMb2FkaW5nTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xvYWRpbmcnO1xuaW1wb3J0IHtcbiAgQVhDb250ZXh0TWVudUNvbXBvbmVudCxcbiAgQVhDb250ZXh0TWVudUl0ZW1zQ2xpY2tFdmVudCxcbiAgQVhDb250ZXh0TWVudU9wZW5pbmdFdmVudCxcbiAgQVhNZW51SXRlbSxcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL21lbnUnO1xuaW1wb3J0IHsgQVhTZWFyY2hCb3hNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvc2VhcmNoLWJveCc7XG5pbXBvcnQgeyBBWFNlbGVjdEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWxlY3QtYm94JztcbmltcG9ydCB7IEFYU2tlbGV0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvc2tlbGV0b24nO1xuaW1wb3J0IHsgQVhTbGlkaW5nSXRlbU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zbGlkaW5nLWl0ZW0nO1xuaW1wb3J0IHsgQVhUYWJzQ29tcG9uZW50LCBBWFRhYnNNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdGFicyc7XG5pbXBvcnQgeyBBWFRleHRCb3hNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdGV4dC1ib3gnO1xuaW1wb3J0IHsgQVhUb29sQmFyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2xiYXInO1xuaW1wb3J0IHsgQVhXeXNpd3lnTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3d5c2l3eWcnO1xuaW1wb3J0IHsgQVhGb3JtYXRNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvZm9ybWF0JztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhVbnN1YnNjcmliZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgQVhNTm90aWZpY2F0aW9uQ29ubmVjdG9yU2VydmljZSB9IGZyb20gJ0BhY29yZXgvbW9kdWxlcy9ub3RpZmljYXRpb24tbWFuYWdlbWVudCc7XG5pbXBvcnQgeyBBWFBFbnRpdHkgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQge1xuICBBWFBBY3Rpb25NZW51SXRlbSxcbiAgQVhQQmFja0J1dHRvbixcbiAgQVhQRXhlY3V0ZUNvbW1hbmQsXG4gIEFYUEZpbGVMaXN0SXRlbSxcbiAgQVhQVXNlclJlZmVyZW5jZSxcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7XG4gIEFYUFN0YXRlTWVzc2FnZUNvbXBvbmVudCxcbiAgQVhQVGhlbWVMYXlvdXRCbG9ja0NvbXBvbmVudCxcbiAgQVhQVGhlbWVMYXlvdXRIZWFkZXJDb21wb25lbnQsXG4gIEFYUFRoZW1lTGF5b3V0U3RhcnRTaWRlQ29tcG9uZW50LFxuICBBWFBUaGVtZUxheW91dFRvb2xiYXJDb21wb25lbnQsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQVhQTGF5b3V0QnVpbGRlclNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9idWlsZGVyJztcbmltcG9ydCB7IEFYUEVudGl0eURhdGFTZWxlY3RvclNlcnZpY2UsIEFYUEVudGl0eURlZmluaXRpb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9lbnRpdHknO1xuaW1wb3J0IHsgQVhQUGFnZUxheW91dEJhc2UsIEFYUFBhZ2VMYXlvdXRCYXNlQ29tcG9uZW50LCBBWFBQYWdlTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvdmlld3MnO1xuaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgT25Jbml0LFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhNQ29udmVyc2F0aW9uVGFiIH0gZnJvbSAnLi4vLi4vZW50aXRpZXMvdGFiJztcbmltcG9ydCB7IEFYTUNoYXRNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4vY2hhdC1tYW5hZ2VtZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgY29udmVydENoYXRNZXNzYWdlVG9Ob3RpZmljYXRpb24gfSBmcm9tICcuL2NoYXQtbm90aWZpY2F0aW9uLmhlbHBlcic7XG5pbXBvcnQgeyBBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlIH0gZnJvbSAnLi9jaGF0LXJlYWx0aW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNQ2hhdFJvb20gfSBmcm9tICcuL2NoYXQudHlwZSc7XG5pbXBvcnQgeyBBWE1DaGF0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jaGF0LWl0ZW0vY2hhdC1pdGVtLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4bS1jaGF0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGF0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBQYWdlTGF5b3V0QmFzZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBBWE1DaGF0Q29tcG9uZW50LFxuICAgIH0sXG4gICAgQVhVbnN1YnNjcmliZXIsXG4gIF0sXG4gIGltcG9ydHM6IFtcbiAgICBBWE1DaGF0SXRlbUNvbXBvbmVudCxcbiAgICAvLyBDb21tb24gTW9kdWxlc1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gICAgLy8gQWNvcmV4IENvcmUgTW9kdWxlc1xuICAgIEFYRm9ybWF0TW9kdWxlLFxuICAgIEFYQ29udmVyc2F0aW9uTW9kdWxlLFxuICAgIEFYQ29tbWVudE1vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgIC8vIEFjb3JleCBDb21wb25lbnQgTW9kdWxlc1xuICAgIC8vIEFYUmVzaXphYmxlRGlyZWN0aXZlLFxuICAgIEFYSW1hZ2VNb2R1bGUsXG4gICAgQVhBdmF0YXJNb2R1bGUsXG4gICAgQVhCYWRnZU1vZHVsZSxcbiAgICBBWFNsaWRpbmdJdGVtTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYVGV4dEJveE1vZHVsZSxcbiAgICBBWFNlYXJjaEJveE1vZHVsZSxcbiAgICBBWFRhYnNNb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhMb2FkaW5nTW9kdWxlLFxuICAgIEFYV3lzaXd5Z01vZHVsZSxcbiAgICBBWExhYmVsTW9kdWxlLFxuICAgIEFYU2VsZWN0Qm94TW9kdWxlLFxuICAgIEFYRm9ybU1vZHVsZSxcbiAgICBBWERyb3Bkb3duQnV0dG9uTW9kdWxlLFxuICAgIEFYRHJvcGRvd25Nb2R1bGUsXG4gICAgQVhUb29sQmFyTW9kdWxlLFxuICAgIEFYU2tlbGV0b25Nb2R1bGUsXG4gICAgQVhQUGFnZUxheW91dENvbXBvbmVudCxcbiAgICBBWFBUaGVtZUxheW91dEJsb2NrQ29tcG9uZW50LFxuICAgIEFYUFRoZW1lTGF5b3V0U3RhcnRTaWRlQ29tcG9uZW50LFxuICAgIEFYUFRoZW1lTGF5b3V0SGVhZGVyQ29tcG9uZW50LFxuICAgIEFYUFRoZW1lTGF5b3V0VG9vbGJhckNvbXBvbmVudCxcbiAgICBBWENvbnRleHRNZW51Q29tcG9uZW50LFxuICAgIEFYUFN0YXRlTWVzc2FnZUNvbXBvbmVudCxcbiAgXSxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2ZhZGVJbicsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwcHgpJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH0pKSxcbiAgICAgIF0pLFxuICAgIF0pLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1DaGF0Q29tcG9uZW50IGV4dGVuZHMgQVhQUGFnZUxheW91dEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSBjaGF0U2VydmljZSA9IGluamVjdChBWE1DaGF0TWFuYWdlbWVudFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWx0aW1lU2VydmljZSA9IGluamVjdChBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEFYRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgbGF5b3V0QnVpbGRlciA9IGluamVjdChBWFBMYXlvdXRCdWlsZGVyU2VydmljZSk7XG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmUgPSBpbmplY3QoQVhVbnN1YnNjcmliZXIpO1xuICBwcml2YXRlIG5vdGlmaWNhdGlvbkNvbm5lY3RvclNlcnZpY2UgPSBpbmplY3QoQVhNTm90aWZpY2F0aW9uQ29ubmVjdG9yU2VydmljZSk7XG4gIHByaXZhdGUgZGF0YVNlbGVjdG9yU2VydmljZSA9IGluamVjdChBWFBFbnRpdHlEYXRhU2VsZWN0b3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlbnRpdHlSZWdpc3RyeSA9IGluamVjdChBWFBFbnRpdHlEZWZpbml0aW9uUmVnaXN0cnlTZXJ2aWNlKTtcblxuICAvLyBWaWV3IENoaWxkcmVuXG4gIHRhYiA9IHZpZXdDaGlsZDxBWFRhYnNDb21wb25lbnQ+KCd0YWInKTtcbiAgY29udGFpbmVyID0gdmlld0NoaWxkPEFYUFBhZ2VMYXlvdXRDb21wb25lbnQ+KCdjb250YWluZXInKTtcbiAgY2hhdENvbnRleHQgPSB2aWV3Q2hpbGQ8QVhDb250ZXh0TWVudUNvbXBvbmVudD4oJ2NoYXRDb250ZXh0Jyk7XG4gIHRhYkNvbnRleHQgPSB2aWV3Q2hpbGQ8QVhDb250ZXh0TWVudUNvbXBvbmVudD4oJ3RhYkNvbnRleHQnKTtcblxuICAvLyBTdGF0ZSBzaWduYWxzXG4gIHJvb21zID0gc2lnbmFsPEFYTUNoYXRSb29tW10+KFtdKTtcbiAgYWxsUm9vbXMgPSBzaWduYWw8QVhNQ2hhdFJvb21bXT4oW10pO1xuICB0YWJzID0gc2lnbmFsPEFYTUNvbnZlcnNhdGlvblRhYltdPihbXSk7XG4gIHNlbGVjdGVkUm9vbSA9IHNpZ25hbDxBWE1DaGF0Um9vbSB8IG51bGw+KG51bGwpO1xuICBpc0xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICB0eXBpbmdTdGF0dXMgPSBzaWduYWw8eyBba2V5OiBzdHJpbmddOiB7IHVzZXI6IHN0cmluZzsgaXNUeXBpbmc/OiBib29sZWFuIH0gfT4oe30pO1xuXG4gIGVycm9yID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBhY3RpdmVUYWJJbmRleCA9IHNpZ25hbDxudW1iZXI+KDApO1xuICBpc1NlYXJjaGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHNlYXJjaFF1ZXJ5ID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBzaG93U2VhcmNoID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBwbGFjZWhvbGRlciA9IHNpZ25hbDxzdHJpbmc+KCdAY29udmVyc2F0aW9uOnNlYXJjaC5wbGFjZWhvbGRlcicpO1xuXG4gIC8vIExvY2FsaXplZCBsYWJlbHMgKHByZWxvYWRlZCBmb3Igc3luYyBtZW51IGJ1aWxkaW5nKVxuICB0T3BlbiA9IHNpZ25hbDxzdHJpbmc+KCdPcGVuJyk7XG4gIHRNYXJrU2VlbiA9IHNpZ25hbDxzdHJpbmc+KCdNYXJrIGFzIHNlZW4nKTtcbiAgdFRhYiA9IHNpZ25hbDxzdHJpbmc+KCdUYWInKTtcbiAgdFJlbW92ZUZyb21UYWIgPSBzaWduYWw8c3RyaW5nPignUmVtb3ZlIGZyb20gdGFiJyk7XG4gIHREZWxldGUgPSBzaWduYWw8c3RyaW5nPignRGVsZXRlJyk7XG4gIHRSZW1vdmVDaGF0ID0gc2lnbmFsPHN0cmluZz4oJ1JlbW92ZSBDaGF0Jyk7XG5cbiAgLy8gQ29tcHV0ZWQgc2lnbmFsc1xuICBhY3RpdmVUYWIgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdGFicyA9IHRoaXMudGFicygpO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5hY3RpdmVUYWJJbmRleCgpO1xuICAgIGlmICh0YWJzLmxlbmd0aCA+IDAgJiYgaW5kZXggPj0gMCAmJiBpbmRleCA8IHRhYnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGFic1tpbmRleF07XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIGZpbHRlcmVkUm9vbXMgPSBzaWduYWw8QVhNQ2hhdFJvb21bXT4oW10pO1xuXG4gIHNlYXJjaEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYWxsUm9vbXMgPSB0aGlzLmFsbFJvb21zKCk7XG4gICAgbGV0IGNoYXRSb29tcyA9IFsuLi5hbGxSb29tc107IC8vIFN0YXJ0IHdpdGggYWxsIHJvb21zXG5cbiAgICAvLyBUYWIgZmlsdGVyXG4gICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5hY3RpdmVUYWIoKTtcbiAgICBpZiAoYWN0aXZlVGFiKSB7XG4gICAgICBpZiAoYWN0aXZlVGFiLm5hbWUgPT09ICd1bnJlYWQnKSB7XG4gICAgICAgIC8vIFNwZWNpYWwgbG9jYWwgc3RhdGUgZm9yIHVucmVhZFxuICAgICAgICBjaGF0Um9vbXMgPSBhbGxSb29tcy5maWx0ZXIoKHJvb20pID0+IHJvb20udW5yZWFkQ291bnQgPiAwKTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlVGFiLm5hbWUgPT09ICdhbGwnKSB7XG4gICAgICAgIC8vIExvY2FsIHN0YXRlIGZvciBhbGxcbiAgICAgICAgY2hhdFJvb21zID0gYWxsUm9vbXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb3RoZXIgdGFicyBkZWZpbmVkIGJ5IHRoZSBzZXJ2aWNlXG4gICAgICAgIGNvbnN0IGluY2x1ZGVkSWRzID0gbmV3IFNldChhY3RpdmVUYWIuaW5jbHVkZVJvb21zLm1hcCgocikgPT4gci5pZCkpO1xuICAgICAgICBjaGF0Um9vbXMgPSBhbGxSb29tcy5maWx0ZXIoKHJvb20pID0+IGluY2x1ZGVkSWRzLmhhcyhyb29tLmlkKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIGZpbHRlciAoYXBwbGllcyBvbiB0b3Agb2YgdGFiIGZpbHRlcilcbiAgICBjb25zdCBxdWVyeSA9ICh0aGlzLnNlYXJjaFF1ZXJ5KCkgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IFtdO1xuICAgICAgZm9yIChjb25zdCByb29tIG9mIGNoYXRSb29tcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCByb29tTmFtZSA9ICcnO1xuICAgICAgICAgIC8vIEhhbmRsZSBncm91cCBjaGF0cyB2cy4gc2luZ2xlLXVzZXIgY2hhdHNcbiAgICAgICAgICBpZiAocm9vbS5tZW1iZXJzICYmIHJvb20ubWVtYmVycy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByb29tTmFtZSA9IHJvb20udGl0bGUgfHwgJyc7XG4gICAgICAgICAgfSBlbHNlIGlmIChyb29tLm1lbWJlcnMgJiYgcm9vbS5tZW1iZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgbWVtYmVyID0gcm9vbS5tZW1iZXJzWzBdO1xuICAgICAgICAgICAgaWYgKG1lbWJlcikge1xuICAgICAgICAgICAgICByb29tTmFtZSA9IG1lbWJlci5mdWxsTmFtZSB8fCAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBsYXN0TWVzc2FnZSA9IHJvb20ubGFzdE1lc3NhZ2U/Lm1lc3NhZ2U/LmNvbnRlbnQgfHwgJyc7XG4gICAgICAgICAgaWYgKHJvb21OYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpIHx8IGxhc3RNZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZC5wdXNoKHJvb20pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcHJvY2VzcyBzZWFyY2ggZm9yIHJvb20gJHtyb29tLmlkfWAsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2hhdFJvb21zID0gZmlsdGVyZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJlZFJvb21zLnNldChjaGF0Um9vbXMpO1xuICB9KTtcblxuICBhc3luYyBkZWxldGVUYWIodGFiOiBBWE1Db252ZXJzYXRpb25UYWIpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcbiAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjpjb25maXJtYXRpb25zLmRlbGV0ZS10YWIudGl0bGUnKSxcbiAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjpjb25maXJtYXRpb25zLmRlbGV0ZS10YWIubWVzc2FnZScsIHtcbiAgICAgICAgcGFyYW1zOiB7IHRpdGxlOiB0YWIudGl0bGUgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgaWYgKHJlc3VsdC5yZXN1bHQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZGVsZXRlVGFiKHRhYi5pZCk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRUYWJzKCk7XG4gICAgfVxuICB9XG5cbiAgdW5yZWFkQ291bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmFsbFJvb21zKCkuZmlsdGVyKChpKSA9PiBpLnVucmVhZENvdW50ID4gMCkubGVuZ3RoKTtcbiAgYWxsQ291bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmFsbFJvb21zKCkubGVuZ3RoKTtcbiAgaGFzVW5yZWFkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hbGxSb29tcygpLnNvbWUoKGkpID0+IGkudW5yZWFkQ291bnQgPiAwKSk7XG4gIHRvdGFsQ291bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmFsbFJvb21zKCkubGVuZ3RoIHx8IDApO1xuXG4gIG92ZXJyaWRlIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMuZXJyb3Iuc2V0KG51bGwpO1xuICAgIGNvbnN0IFtvcGVuVGV4dCwgbWFya1NlZW5UZXh0LCB0YWJUZXh0LCByZW1vdmVGcm9tVGFiVGV4dCwgZGVsZXRlVGV4dCwgcmVtb3ZlQ2hhdFRleHRdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOmFjdGlvbnMub3BlbicpLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOmFjdGlvbnMubWFyay1zZWVuJyksXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246YWN0aW9ucy50YWInKSxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjphY3Rpb25zLnJlbW92ZS1mcm9tLXRhYicpLFxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOmFjdGlvbnMuZGVsZXRlJyksXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246cmVtb3ZlLWNoYXQnKSxcbiAgICBdKTtcbiAgICB0aGlzLnRPcGVuLnNldChvcGVuVGV4dCk7XG4gICAgdGhpcy50TWFya1NlZW4uc2V0KG1hcmtTZWVuVGV4dCk7XG4gICAgdGhpcy50VGFiLnNldCh0YWJUZXh0KTtcbiAgICB0aGlzLnRSZW1vdmVGcm9tVGFiLnNldChyZW1vdmVGcm9tVGFiVGV4dCk7XG4gICAgdGhpcy50RGVsZXRlLnNldChkZWxldGVUZXh0KTtcbiAgICB0aGlzLnRSZW1vdmVDaGF0LnNldChyZW1vdmVDaGF0VGV4dCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5sb2FkQ2hhdHMoKSwgdGhpcy5sb2FkVGFicygpXSk7XG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAvL1xuICAgIHRoaXMucm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUudGFrZVVudGlsRGVzdHJveSxcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcbiAgICAgICAgc3RhcnRXaXRoKG51bGwpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZEZyb21Sb3V0ZSgpO1xuICAgICAgfSk7XG4gICAgLy9cblxuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLnJvb20kLnBpcGUodGhpcy51bnN1YnNjcmliZS50YWtlVW50aWxEZXN0cm95KS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnYWRkJzpcbiAgICAgICAgICB0aGlzLmFsbFJvb21zLnVwZGF0ZSgocm9vbXMpID0+IFtldmVudC5wYXlsb2FkLCAuLi5yb29tcy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGV2ZW50LnBheWxvYWQuaWQpXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JlbW92ZSc6XG4gICAgICAgICAgdGhpcy5hbGxSb29tcy51cGRhdGUoKHJvb21zKSA9PiByb29tcy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGV2ZW50LnBheWxvYWQpKTtcbiAgICAgICAgICBpZiAoZXZlbnQucGF5bG9hZCA9PT0gdGhpcy5zZWxlY3RlZFJvb20oKT8uaWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSb29tLnNldChudWxsKTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgICB0aGlzLmFsbFJvb21zLnVwZGF0ZSgocm9vbXMpID0+IHJvb21zLm1hcCgocikgPT4gKHIuaWQgPT09IGV2ZW50LnBheWxvYWQuaWQgPyBldmVudC5wYXlsb2FkIDogcikpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc2Vlbic6XG4gICAgICAgICAgdGhpcy5hbGxSb29tcy51cGRhdGUoKHJvb21zKSA9PlxuICAgICAgICAgICAgcm9vbXMubWFwKChyb29tKSA9PiAocm9vbS5pZCA9PT0gZXZlbnQucGF5bG9hZCA/IHsgLi4ucm9vbSwgdW5yZWFkQ291bnQ6IDAgfSA6IHJvb20pKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2UubWVzc2FnZSQucGlwZSh0aGlzLnVuc3Vic2NyaWJlLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgICBjYXNlICdhZGQnOiB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGV2ZW50LnBheWxvYWQ7XG4gICAgICAgICAgY29uc3Qgcm9vbXMgPSB0aGlzLmFsbFJvb21zKCk7XG4gICAgICAgICAgY29uc3Qgcm9vbUluZGV4ID0gcm9vbXMuZmluZEluZGV4KChyKSA9PiByLmlkID09PSBtZXNzYWdlLnJvb21JZCk7XG5cbiAgICAgICAgICBpZiAocm9vbUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb21Ub1VwZGF0ZSA9IHJvb21zW3Jvb21JbmRleF07XG4gICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRVc2VyID0gbWVzc2FnZS5hdXRob3IuaWQgPT09IHRoaXMuc2Vzc2lvblNlcnZpY2UudXNlcj8uaWQ7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkUm9vbSA9IHtcbiAgICAgICAgICAgICAgLi4ucm9vbVRvVXBkYXRlLFxuICAgICAgICAgICAgICBsYXN0TWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgICAgICAgdW5yZWFkQ291bnQ6ICFpc0N1cnJlbnRVc2VyID8gKHJvb21Ub1VwZGF0ZS51bnJlYWRDb3VudCB8fCAwKSArIDEgOiByb29tVG9VcGRhdGUudW5yZWFkQ291bnQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgbmV3Um9vbXMgPSBbdXBkYXRlZFJvb20sIC4uLnJvb21zLmZpbHRlcigocikgPT4gci5pZCAhPT0gbWVzc2FnZS5yb29tSWQpXTtcbiAgICAgICAgICAgIHRoaXMuYWxsUm9vbXMuc2V0KG5ld1Jvb21zKTtcblxuICAgICAgICAgICAgaWYgKCFpc0N1cnJlbnRVc2VyICYmICh0aGlzLnNlbGVjdGVkUm9vbSgpPy5pZCAhPT0gbWVzc2FnZS5yb29tSWQgfHwgZG9jdW1lbnQuaGlkZGVuKSkge1xuICAgICAgICAgICAgICBjb25zdCBub3RpZmljYXRpb24gPSBjb252ZXJ0Q2hhdE1lc3NhZ2VUb05vdGlmaWNhdGlvbihcbiAgICAgICAgICAgICAgICByb29tVG9VcGRhdGUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXIgYXMgdW5rbm93biBhcyBBWFBVc2VyUmVmZXJlbmNlLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbkNvbm5lY3RvclNlcnZpY2UuY3JlYXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLm5vdGlmaWNhdGlvbixcbiAgICAgICAgICAgICAgICAgIGlkOiBtZXNzYWdlLmlkLFxuICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZTogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlQXQ6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb29tVG9VcGRhdGUuaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYWN0aXZlV2luZG93OiB0cnVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hhdFNlcnZpY2UuZ2V0Um9vbShtZXNzYWdlLnJvb21JZCkudGhlbigobmV3Um9vbSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmFsbFJvb21zLnVwZGF0ZSgoY3VycmVudFJvb21zKSA9PiBbbmV3Um9vbSwgLi4uY3VycmVudFJvb21zXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAndXBkYXRlJzoge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBldmVudC5wYXlsb2FkO1xuICAgICAgICAgIHRoaXMuYWxsUm9vbXMudXBkYXRlKChyb29tcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJvb21zLm1hcCgocm9vbSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocm9vbS5sYXN0TWVzc2FnZT8uaWQgPT09IG1lc3NhZ2UuaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgLi4ucm9vbSxcbiAgICAgICAgICAgICAgICAgIGxhc3RNZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnJvb20ubGFzdE1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJvb207XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2UudHlwaW5nU3RhdHVzJC5waXBlKHRoaXMudW5zdWJzY3JpYmUudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKGFzeW5jIChzdGF0dXMpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI/LmlkO1xuICAgICAgaWYgKHN0YXR1cy51c2VyLmlkICE9PSBjdXJyZW50VXNlcklkKSB7XG4gICAgICAgIGlmIChzdGF0dXMuaXNUeXBpbmcpIHtcbiAgICAgICAgICB0aGlzLnR5cGluZ1N0YXR1cy51cGRhdGUoKHZhbHVlKSA9PiAoe1xuICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICBbc3RhdHVzLnJvb21JZF06IHsgdXNlcjogc3RhdHVzLnVzZXIuZnVsbE5hbWUgfHwgJycsIGlzVHlwaW5nOiB0cnVlIH0sXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudHlwaW5nU3RhdHVzLnVwZGF0ZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgW3N0YXR1cy5yb29tSWRdOiBfLCAuLi5yZXN0IH0gPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiByZXN0O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRGcm9tUm91dGUoKSB7XG4gICAgY29uc3QgY2hhdElkID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5maXJzdENoaWxkPy5wYXJhbU1hcC5nZXQoJ2lkJyk7XG4gICAgaWYgKGNoYXRJZCkge1xuICAgICAgdGhpcy5vcGVuQ2hhdChjaGF0SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm9vbS5zZXQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgLy8gUGFnZSBJbnRlcmZhY2UgSW1wbGVtZW50YXRpb25cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UGFnZVRpdGxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgcm9vbSA9IHRoaXMuc2VsZWN0ZWRSb29tKCk7XG5cbiAgICBpZiAoIXJvb20gJiYgdGhpcy5sYXlvdXRTZXJ2aWNlLmlzTW9iaWxlRGV2aWNlKCkpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246cGx1cmFsLXRpdGxlJyk7XG4gICAgfVxuXG4gICAgaWYgKCFyb29tKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgeyBtZW1iZXJzLCB0aXRsZSwgaWQgfSA9IHJvb207XG5cbiAgICBpZiAobWVtYmVycy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gdGl0bGUgfHwgKGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjpsYWJlbHMuZ3JvdXAtY2hhdCcpKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZW1iZXIgPSBtZW1iZXJzWzBdO1xuICAgIGlmICghbWVtYmVyKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOmxhYmVscy51bmtub3duLXVzZXInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVtYmVyLmZ1bGxOYW1lIHx8IChhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246bGFiZWxzLnVua25vd24tdXNlcicpKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFBhZ2VEZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGluZyA9IHRoaXMudHlwaW5nU3RhdHVzKCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb29tSWQgPSB0aGlzLnNlbGVjdGVkUm9vbSgpPy5pZDtcbiAgICBpZiAoc2VsZWN0ZWRSb29tSWQgJiYgdHlwaW5nW3NlbGVjdGVkUm9vbUlkXT8uaXNUeXBpbmcpIHtcbiAgICAgIHJldHVybiBgJHt0eXBpbmdbc2VsZWN0ZWRSb29tSWRdLnVzZXJ9IGlzIHR5cGluZy4uLmA7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vbSA9IHRoaXMuc2VsZWN0ZWRSb29tKCk7XG4gICAgcmV0dXJuIHJvb20/LnRvcGljIHx8ICcnO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0QmFja0J1dHRvbigpOiBQcm9taXNlPEFYUEJhY2tCdXR0b24gfCBudWxsPiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb29tKCkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246YmFjay10by1jaGF0LWxpc3QnKSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHJldHVybiBudWxsO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0U2Vjb25kYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIGNvbnN0IGl0ZW1zOiBBWFBBY3Rpb25NZW51SXRlbVtdID0gW107XG4gICAgY29uc3QgaGFzUm9vbSA9ICEhdGhpcy5zZWxlY3RlZFJvb20oKTtcblxuICAgIGlmIChoYXNSb29tKSB7XG4gICAgICBjb25zdCByb29tID0gdGhpcy5zZWxlY3RlZFJvb20oKSE7XG4gICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gdGhpcy5zZXNzaW9uU2VydmljZS51c2VyPy5pZDtcbiAgICAgIGNvbnN0IGNyZWF0b3JJZCA9IHJvb20uYXVkaXRJbmZvPy5jcmVhdGVkPy5ieT8uaWQ7XG4gICAgICBjb25zdCBpc0NyZWF0b3IgPSAhIWN1cnJlbnRVc2VySWQgJiYgISFjcmVhdG9ySWQgJiYgY3VycmVudFVzZXJJZCA9PT0gY3JlYXRvcklkO1xuICAgICAgY29uc3QgaXNHcm91cCA9IChyb29tLm1lbWJlcnM/Lmxlbmd0aCA/PyAwKSA+IDE7XG4gICAgICBjb25zdCBpc0NoYW5uZWwgPSByb29tLnRvcGljID09PSAnY2hhbm5lbCc7XG4gICAgICBjb25zdCBraW5kS2V5ID0gaXNHcm91cCA/ICdAY29udmVyc2F0aW9uOmxhYmVscy5ncm91cC1jaGF0JyA6ICdAY29udmVyc2F0aW9uOnJvb20uaW5kaXZpZHVhbC10aXRsZSc7XG4gICAgICBjb25zdCBraW5kVGV4dCA9IGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYyhraW5kS2V5KTtcbiAgICAgIGNvbnN0IGRlbGV0ZVRleHQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246YWN0aW9ucy5kZWxldGUnKTtcbiAgICAgIGNvbnN0IHJlbW92ZUNoYXRUZXh0ID0gYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOnJlbW92ZS1jaGF0Jyk7XG5cbiAgICAgIGl0ZW1zLnB1c2goXG4gICAgICAgIHtcbiAgICAgICAgICB0aXRsZTogJ0VkaXQgUm9vbScsXG4gICAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXBlbi10by1zcXVhcmUnLFxuICAgICAgICAgIGNvbW1hbmQ6IHsgbmFtZTogJ2VkaXQtcm9vbScgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRpdGxlOiBpc0NyZWF0b3IgPyBgJHtkZWxldGVUZXh0fSAke2tpbmRUZXh0fWAgOiByZW1vdmVDaGF0VGV4dCxcbiAgICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtdHJhc2gtY2FuJyxcbiAgICAgICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgICAgICAgY29tbWFuZDogeyBuYW1lOiBpc0NyZWF0b3IgPyAnZGVsZXRlLXJvb20nIDogJ2xlYXZlLXJvb20nIH0sXG4gICAgICAgIH0gYXMgQVhQQWN0aW9uTWVudUl0ZW0sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBleGVjdXRlKGNvbW1hbmQ6IEFYUEV4ZWN1dGVDb21tYW5kKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3dpdGNoIChjb21tYW5kLm5hbWUpIHtcbiAgICAgIGNhc2UgJ3JlbW92ZS1jaGF0JzpcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246Y29uZmlybWF0aW9ucy5yZW1vdmUtY2hhdC50aXRsZScpLFxuICAgICAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjpjb25maXJtYXRpb25zLnJlbW92ZS1jaGF0Lm1lc3NhZ2UnKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZGVsZXRlUm9vbSh0aGlzLnNlbGVjdGVkUm9vbSgpPy5pZCEpO1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZWRpdC1yb29tJzoge1xuICAgICAgICBjb25zdCByb29tID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5nZXRSb29tKHRoaXMuc2VsZWN0ZWRSb29tKCk/LmlkISk7XG5cbiAgICAgICAgaWYgKCFyb29tKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgY3VycmVudE1lbWJlcklkcyA9IChyb29tLm1lbWJlcnMgfHwgW10pLm1hcCgobSkgPT4gbS5pZCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IGF3YWl0IHRoaXMubGF5b3V0QnVpbGRlclxuICAgICAgICAgIC5jcmVhdGUoKVxuICAgICAgICAgIC5kaWFsb2coZGlhbG9nID0+IHtcbiAgICAgICAgICAgIGRpYWxvZ1xuICAgICAgICAgICAgICAuc2V0VGl0bGUoJ0VkaXQgUm9vbScpXG4gICAgICAgICAgICAgIC5zZXRTaXplKCdzbScpXG4gICAgICAgICAgICAgIC5zZXRDb250ZXh0KHsgdGl0bGU6IHJvb20udGl0bGUgfHwgJycsIG1lbWJlcnM6IGN1cnJlbnRNZW1iZXJJZHMsIGF2YXRhcjogcm9vbS5hdmF0YXIgfSlcbiAgICAgICAgICAgICAgLmNvbnRlbnQobGF5b3V0QnVpbGRlciA9PiB7XG4gICAgICAgICAgICAgICAgbGF5b3V0QnVpbGRlci5mbGV4KGZsZXggPT4ge1xuICAgICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgICAgICAuc2V0RGlyZWN0aW9uKCdjb2x1bW4nKVxuICAgICAgICAgICAgICAgICAgICAuZm9ybUZpZWxkKCdAY29udmVyc2F0aW9uOm5ldy1jb252ZXJzYXRpb24udGl0bGUubGFiZWwnLCBmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgndGl0bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC50ZXh0Qm94KHsgcGxhY2Vob2xkZXI6ICdAY29udmVyc2F0aW9uOm5ldy1jb252ZXJzYXRpb24udGl0bGUucGxhY2Vob2xkZXInIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuZm9ybUZpZWxkKCdAY29udmVyc2F0aW9uOm5ldy1jb252ZXJzYXRpb24ubG9va3VwLmxhYmVsJywgZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ21lbWJlcnMnKTtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5sb29rdXBCb3goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnU2VjdXJpdHlNYW5hZ2VtZW50LlVzZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdpZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdub3RFcXVhbCcgYXMgYW55IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI/LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICB9IGFzIGFueSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0F2YXRhcicsIGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdhdmF0YXInKTtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5jdXN0b21XaWRnZXQoJ2F2YXRhcicsIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5zZXRBY3Rpb25zKGFjdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGFjdGlvbnMuY2FuY2VsKCdAZ2VuZXJhbDphY3Rpb25zLmNhbmNlbC50aXRsZScpLnN1Ym1pdCgnU2F2ZScpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG93KCk7XG5cbiAgICAgICAgY29uc3QgY3R4ID0gZGlhbG9nUmVmLmNvbnRleHQoKSBhcyB7XG4gICAgICAgICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgICAgICAgbWVtYmVycz86IHN0cmluZ1tdO1xuICAgICAgICAgIGF2YXRhcj86IEFYUEZpbGVMaXN0SXRlbSB8IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGRpYWxvZ1JlZi5hY3Rpb24oKTtcbiAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIGlmIChhY3Rpb24gPT09ICdjYW5jZWwnKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBBcnJheS5pc0FycmF5KGN0eC5tZW1iZXJzKSA/IGN0eC5tZW1iZXJzIDogW107XG4gICAgICAgIGNvbnN0IHRvQWRkID0gc2VsZWN0ZWRJZHMuZmlsdGVyKChpZCkgPT4gIWN1cnJlbnRNZW1iZXJJZHMuaW5jbHVkZXMoaWQpKTtcbiAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBjdXJyZW50TWVtYmVySWRzLmZpbHRlcigoaWQpID0+ICFzZWxlY3RlZElkcy5pbmNsdWRlcyhpZCkpO1xuXG4gICAgICAgIGNvbnN0IHRyaW1tZWRUaXRsZSA9IHR5cGVvZiBjdHgudGl0bGUgPT09ICdzdHJpbmcnID8gY3R4LnRpdGxlLnRyaW0oKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdGl0bGVDaGFuZ2VkID0gdHlwZW9mIHRyaW1tZWRUaXRsZSA9PT0gJ3N0cmluZycgJiYgdHJpbW1lZFRpdGxlICE9PSAocm9vbS50aXRsZSB8fCAnJykudHJpbSgpO1xuICAgICAgICBjb25zdCBhdmF0YXJDaGFuZ2VkID0gKGN0eC5hdmF0YXIgPz8gbnVsbCkgIT09IChyb29tLmF2YXRhciA/PyBudWxsKTtcblxuICAgICAgICBjb25zdCB1cGRhdGVQYXlsb2FkOiBhbnkgPSB7fTtcbiAgICAgICAgaWYgKHRpdGxlQ2hhbmdlZCkge1xuICAgICAgICAgIHVwZGF0ZVBheWxvYWQudGl0bGUgPSB0cmltbWVkVGl0bGUhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdmF0YXJDaGFuZ2VkKSB7XG4gICAgICAgICAgdXBkYXRlUGF5bG9hZC5hdmF0YXIgPSBjdHguYXZhdGFyID8/IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHM6IFByb21pc2U8YW55PltdID0gW107XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh1cGRhdGVQYXlsb2FkKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgb3BzLnB1c2godGhpcy5jaGF0U2VydmljZS51cGRhdGVSb29tKHJvb20uaWQsIHVwZGF0ZVBheWxvYWQpKTtcbiAgICAgICAgfVxuICAgICAgICB0b0FkZC5mb3JFYWNoKChpZCkgPT4gb3BzLnB1c2godGhpcy5jaGF0U2VydmljZS5hZGRQYXJ0aWNpcGFudChyb29tLmlkLCBpZCkpKTtcbiAgICAgICAgdG9SZW1vdmUuZm9yRWFjaCgoaWQpID0+IG9wcy5wdXNoKHRoaXMuY2hhdFNlcnZpY2UucmVtb3ZlUGFydGljaXBhbnQocm9vbS5pZCwgaWQpKSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAob3BzLmxlbmd0aCkge1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwob3BzKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZENoYXRzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKCdGYWlsZWQgdG8gdXBkYXRlIHJvb20nKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2RlbGV0ZS1yb29tJzoge1xuICAgICAgICBjb25zdCByb29tID0gdGhpcy5zZWxlY3RlZFJvb20oKTtcbiAgICAgICAgaWYgKCFyb29tKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOmNvbmZpcm1hdGlvbnMuZGVsZXRlLXJvb20udGl0bGUnKSxcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246Y29uZmlybWF0aW9ucy5kZWxldGUtcm9vbS5tZXNzYWdlJyksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmRlbGV0ZVJvb20ocm9vbS5pZCk7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLyddLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdsZWF2ZS1yb29tJzoge1xuICAgICAgICBjb25zdCByb29tID0gdGhpcy5zZWxlY3RlZFJvb20oKTtcbiAgICAgICAgaWYgKCFyb29tKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI/LmlkITtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcbiAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246Y29uZmlybWF0aW9ucy5yZW1vdmUtY2hhdC50aXRsZScpLFxuICAgICAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjpjb25maXJtYXRpb25zLnJlbW92ZS1jaGF0Lm1lc3NhZ2UnKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UucmVtb3ZlUGFydGljaXBhbnQocm9vbS5pZCwgY3VycmVudFVzZXJJZCk7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLyddLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgb25CYWNrQnV0dG9uQ2xpY2soKTogdm9pZCB8IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2VsZWN0ZWRSb29tLnNldChudWxsKTtcbiAgICB0aGlzLnR5cGluZ1N0YXR1cy51cGRhdGUoKHZhbHVlKSA9PiB7XG4gICAgICBjb25zdCB7IFt0aGlzLnNlbGVjdGVkUm9vbSgpPy5pZCFdOiBfLCAuLi5yZXN0IH0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiByZXN0O1xuICAgIH0pO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xuICB9XG5cbiAgLy8gTWV0aG9kc1xuICBnZXRSb29tQ291bnRGb3JUYWIodGFiOiBBWE1Db252ZXJzYXRpb25UYWIpOiBudW1iZXIge1xuICAgIGNvbnN0IGFsbFJvb21zID0gdGhpcy5hbGxSb29tcygpO1xuICAgIC8vIEZvciBhbGwgdGFiIHR5cGVzLCBvbmx5IGNvdW50IHJvb21zIHRoYXQgaGF2ZSB1bnJlYWQgbWVzc2FnZXNcbiAgICBpZiAodGFiLm5hbWUgPT09ICdhbGwnIHx8IHRhYi5uYW1lID09PSAndW5yZWFkJykge1xuICAgICAgcmV0dXJuIGFsbFJvb21zLmZpbHRlcigocm9vbSkgPT4gcm9vbS51bnJlYWRDb3VudCA+IDApLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgaW5jbHVkZWRJZHMgPSBuZXcgU2V0KHRhYi5pbmNsdWRlUm9vbXMubWFwKChyKSA9PiByLmlkKSk7XG4gICAgcmV0dXJuIGFsbFJvb21zLmZpbHRlcigocm9vbSkgPT4gaW5jbHVkZWRJZHMuaGFzKHJvb20uaWQpICYmIHJvb20udW5yZWFkQ291bnQgPiAwKS5sZW5ndGg7XG4gIH1cblxuICBhc3luYyBsb2FkVGFicygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2NhbFRhYnM6IEFYTUNvbnZlcnNhdGlvblRhYltdID0gW1xuICAgICAge1xuICAgICAgICBpZDogJ2FsbC1sb2NhbCcsXG4gICAgICAgIG5hbWU6ICdhbGwnLFxuICAgICAgICB0aXRsZTogJ0FsbCcsXG4gICAgICAgIGV4Y2x1ZGVSb29tczogW10sXG4gICAgICAgIGluY2x1ZGVSb29tczogW10sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogJ3VucmVhZC1sb2NhbCcsXG4gICAgICAgIG5hbWU6ICd1bnJlYWQnLFxuICAgICAgICB0aXRsZTogJ1VucmVhZCcsXG4gICAgICAgIGV4Y2x1ZGVSb29tczogW10sXG4gICAgICAgIGluY2x1ZGVSb29tczogW10sXG4gICAgICB9LFxuICAgIF07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UubGlzdFRhYnMoKTtcbiAgICAgIHRoaXMudGFicy5zZXQoWy4uLmxvY2FsVGFicywgLi4ucmVzdWx0Lml0ZW1zXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIHRhYnM6JywgZXJyb3IpO1xuICAgICAgdGhpcy50YWJzLnNldChsb2NhbFRhYnMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRDaGF0cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgLy8gVXNlIHRoZSB1cGRhdGVkIHNlcnZpY2UgbWV0aG9kIHRvIGdldCByb29tcyB3aXRoIGxhc3QgbWVzc2FnZXNcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5saXN0Um9vbXMoKTtcbiAgICAgIC8vIFNvcnQgcm9vbXMgYnkgbGFzdCBtZXNzYWdlIGNyZWF0ZWQuYXQgdGltZXN0YW1wIGluIGRlc2NlbmRpbmcgb3JkZXJcbiAgICAgIGNvbnN0IHNvcnRlZFJvb21zID0gcmVzcG9uc2UuaXRlbXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBkYXRlQSA9IGEubGFzdE1lc3NhZ2U/LmF1ZGl0SW5mbz8uY3JlYXRlZD8uYXQgfHwgYS5hdWRpdEluZm8/LmNyZWF0ZWQ/LmF0IHx8IDA7XG4gICAgICAgIGNvbnN0IGRhdGVCID0gYi5sYXN0TWVzc2FnZT8uYXVkaXRJbmZvPy5jcmVhdGVkPy5hdCB8fCBiLmF1ZGl0SW5mbz8uY3JlYXRlZD8uYXQgfHwgMDtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVCKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShkYXRlQSkuZ2V0VGltZSgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmFsbFJvb21zLnNldChzb3J0ZWRSb29tcyk7XG4gICAgICB0aGlzLnJvb21zLnNldChzb3J0ZWRSb29tcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KCdGYWlsZWQgdG8gbG9hZCBjaGF0cy4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgY2hhdHM6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hDaGF0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZENoYXRzKCk7XG4gIH1cblxuICBhc3luYyBvcGVuQ2hhdChjaGF0SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnR5cGluZ1N0YXR1cy51cGRhdGUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgW2NoYXRJZF06IF8sIC4uLnJlc3QgfSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcmVzdDtcbiAgICAgIH0pO1xuICAgICAgLy8gVXNlIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBtYXJrIGNoYXQgYXMgcmVhZFxuICAgICAgYXdhaXQgdGhpcy5jaGF0U2VydmljZS5tYXJrUm9vbVNlZW4oY2hhdElkKTtcblxuICAgICAgLy8gVXBkYXRlIGxvY2FsIHN0YXRlIHdpdGhvdXQgbWFraW5nIGFub3RoZXIgbmV0d29yayByZXF1ZXN0XG4gICAgICBjb25zdCBjdXJyZW50Um9vbXMgPSB0aGlzLmFsbFJvb21zKCk7XG4gICAgICBjb25zdCB1cGRhdGVkUm9vbXMgPSBjdXJyZW50Um9vbXMubWFwKChyb29tKSA9PiB7XG4gICAgICAgIGlmIChyb29tLmlkID09PSBjaGF0SWQpIHtcbiAgICAgICAgICAvLyBSZXNldCB1bnJlYWQgY291bnQgZm9yIHRoZSBzZWxlY3RlZCByb29tXG4gICAgICAgICAgcmV0dXJuIHsgLi4ucm9vbSwgdW5yZWFkQ291bnQ6IDAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm9vbTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBVcGRhdGUgdGhlIHJvb21zIHNpZ25hbHNcbiAgICAgIHRoaXMuYWxsUm9vbXMuc2V0KHVwZGF0ZWRSb29tcyk7XG4gICAgICB0aGlzLnJvb21zLnNldCh1cGRhdGVkUm9vbXMpO1xuXG4gICAgICAvLyBGaW5kIHRoZSBzZWxlY3RlZCByb29tXG4gICAgICBjb25zdCBzZWxlY3RlZFJvb20gPSB1cGRhdGVkUm9vbXMuZmluZCgocm9vbSkgPT4gcm9vbS5pZCA9PT0gY2hhdElkKSB8fCBudWxsO1xuICAgICAgdGhpcy5zZWxlY3RlZFJvb20uc2V0KHNlbGVjdGVkUm9vbSk7XG5cbiAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjaGF0IGRldGFpbHNcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtjaGF0SWRdLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBtYXJrIGNoYXQgYXMgcmVhZDonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgc2VhcmNoQ2hhdChxdWVyeTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWFyY2hRdWVyeS5zZXQocXVlcnkpO1xuICAgIHRoaXMuaXNTZWFyY2hpbmcuc2V0KCEhcXVlcnkpO1xuICB9XG5cbiAgLy8gSGVhZGVyIG1ldGhvZHNcbiAgb25TZWFyY2gocXVlcnk6IHN0cmluZykge1xuICAgIHRoaXMuc2VhcmNoQ2hhdChxdWVyeSk7XG4gIH1cblxuICBjbGVhclNlYXJjaCgpIHtcbiAgICB0aGlzLnNlYXJjaFF1ZXJ5LnNldCgnJyk7XG4gICAgdGhpcy5pc1NlYXJjaGluZy5zZXQoZmFsc2UpO1xuICB9XG5cbiAgYXN5bmMgb3BlblNlbGVjdG9yKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW50aXR5OiBBWFBFbnRpdHkgPSBhd2FpdCB0aGlzLmVudGl0eVJlZ2lzdHJ5LnJlc29sdmUoJ1NlY3VyaXR5TWFuYWdlbWVudCcsICdVc2VyJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmRhdGFTZWxlY3RvclNlcnZpY2Uub3Blbih7XG4gICAgICAgIGVudGl0eSxcbiAgICAgICAgdGl0bGU6ICdTZWxlY3QgVXNlcnMnLFxuICAgICAgICBhbGxvd011bHRpcGxlOiB0cnVlLFxuICAgICAgICBjb2x1bW5zOiBbJ3VzZXJuYW1lJywgJ2Rpc3BsYXlOYW1lJywgJ3JvbGVJZHMnXSxcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgIGZpZWxkOiAnaWQnLFxuICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdlcXVhbCcgfSxcbiAgICAgICAgICAvLyB2YWx1ZTogdGhpcy5zZXNzaW9uU2VydmljZS51c2VyPy5pZCxcbiAgICAgICAgICB2YWx1ZTogJ3t7IHNlc3Npb24uY3VycmVudFVzZXIoKS5pZCB9fScsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHJlc3VsdD8uaXRlbXMpXG4gICAgICAgID8gcmVzdWx0IS5pdGVtc1xuICAgICAgICAgIC5tYXAoKHU6IGFueSkgPT4gdT8uaWQpXG4gICAgICAgICAgLmZpbHRlcigoaWQ6IGFueSk6IGlkIGlzIHN0cmluZyA9PiB0eXBlb2YgaWQgPT09ICdzdHJpbmcnICYmIGlkLmxlbmd0aCA+IDApXG4gICAgICAgIDogW107XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLy8gRm9vdGVyIG1ldGhvZHNcbiAgYXN5bmMgb25OZXdDb252ZXJzYXRpb24oKSB7XG4gICAgY29uc3QgcHJlc2VsZWN0ZWRVc2VySWRzID0gYXdhaXQgdGhpcy5vcGVuU2VsZWN0b3IoKTtcbiAgICBpZiAoIXByZXNlbGVjdGVkVXNlcklkcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbWVtYmVycyA9IHByZXNlbGVjdGVkVXNlcklkcztcbiAgICBsZXQgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYXZhdGFyOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHByZXNlbGVjdGVkVXNlcklkcy5sZW5ndGggPiAxKSB7XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSBhd2FpdCB0aGlzLmxheW91dEJ1aWxkZXJcbiAgICAgICAgLmNyZWF0ZSgpXG4gICAgICAgIC5kaWFsb2coZGlhbG9nID0+IHtcbiAgICAgICAgICBkaWFsb2dcbiAgICAgICAgICAgIC5zZXRUaXRsZSgnQGNvbnZlcnNhdGlvbjpuZXctY29udmVyc2F0aW9uLmhlYWRlcicpXG4gICAgICAgICAgICAuc2V0U2l6ZSgnc20nKVxuICAgICAgICAgICAgLnNldENvbnRleHQoeyBsb29rdXA6IHByZXNlbGVjdGVkVXNlcklkcywgdGl0bGU6ICcnLCBhdmF0YXI6IG51bGwgfSlcbiAgICAgICAgICAgIC5jb250ZW50KGxheW91dEJ1aWxkZXIgPT4ge1xuICAgICAgICAgICAgICBsYXlvdXRCdWlsZGVyLmZsZXgoZmxleCA9PiB7XG4gICAgICAgICAgICAgICAgZmxleFxuICAgICAgICAgICAgICAgICAgLnNldERpcmVjdGlvbignY29sdW1uJylcbiAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0Bjb252ZXJzYXRpb246bmV3LWNvbnZlcnNhdGlvbi5sb29rdXAubGFiZWwnLCBmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ2xvb2t1cCcpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5sb29rdXBCb3goeyBlbnRpdHk6ICdTZWN1cml0eU1hbmFnZW1lbnQuVXNlcicsIG11bHRpcGxlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0Bjb252ZXJzYXRpb246bmV3LWNvbnZlcnNhdGlvbi50aXRsZS5sYWJlbCcsIGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgndGl0bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQudmlzaWJsZShge3shKGNvbnRleHQuZXZhbCgnbG9va3VwJyk/Lmxlbmd0aCA+IDEpIH19YCk7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLnRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQGNvbnZlcnNhdGlvbjpuZXctY29udmVyc2F0aW9uLnRpdGxlLnBsYWNlaG9sZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCgnQXZhdGFyJywgZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCdhdmF0YXInKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuY3VzdG9tV2lkZ2V0KCdhdmF0YXInLCB7IHJlZklkOiAnZ3JvdXAnLCByZWZUeXBlOiAnZ3JvdXAnIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zZXRBY3Rpb25zKGFjdGlvbnMgPT4ge1xuICAgICAgICAgICAgICBhY3Rpb25zLmNhbmNlbCgnQGdlbmVyYWw6YWN0aW9ucy5jYW5jZWwudGl0bGUnKS5zdWJtaXQoJ0Bjb252ZXJzYXRpb246bmV3LWNvbnZlcnNhdGlvbi5hY3Rpb25zLmFjY2VwdC1zZW5kJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3coKTtcblxuICAgICAgY29uc3QgY3R4ID0gZGlhbG9nUmVmLmNvbnRleHQoKSBhcyB7IGxvb2t1cD86IHN0cmluZ1tdOyB0aXRsZT86IHN0cmluZzsgYXZhdGFyPzogc3RyaW5nIHwgbnVsbCB9O1xuICAgICAgY29uc3QgYWN0aW9uID0gZGlhbG9nUmVmLmFjdGlvbigpO1xuICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IGN0eD8ubG9va3VwID8/IFtdO1xuICAgICAgaWYgKGFjdGlvbiA9PT0gJ2NhbmNlbCcgfHwgIXNlbGVjdGVkLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBtZW1iZXJzID0gc2VsZWN0ZWQ7XG4gICAgICB0aXRsZSA9IGN0eD8udGl0bGU7XG4gICAgICBhdmF0YXIgPSBjdHg/LmF2YXRhcjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5jcmVhdGVSb29tKG1lbWJlcnMsIHRpdGxlLCBhdmF0YXIgfHwgdW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaENoYXQoKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyZXMuaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcignRmFpbGVkIHRvIGNyZWF0ZSByb29tJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2xpZGluZyBpdGVtIGFjdGlvbnMgKG1vYmlsZSlcbiAgb25TbGlkZUFjdGlvbihcbiAgICByb29tOiBBWE1DaGF0Um9vbSxcbiAgICBhY3Rpb246IC8vICdtdXRlJyB8XG4gICAgICAnZGVsZXRlJyxcbiAgKSB7XG4gICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgIC8vIGNhc2UgJ211dGUnOlxuICAgICAgLy8gICB0aGlzLnRvYXN0U2VydmljZS53YXJuaW5nKCdNdXRlIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICB0aGlzLmRlbGV0ZVJvb20ocm9vbS5pZCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZVJvb20ocm9vbUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZGlhbG9nUmVzdWx0ID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oXG4gICAgICAgICdEZWxldGUgUm9vbScsXG4gICAgICAgICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIFJvb20/JyxcbiAgICAgICAgJ2RhbmdlcicsXG4gICAgICAgICdob3Jpem9udGFsJyxcbiAgICAgICk7XG4gICAgICBpZiAoZGlhbG9nUmVzdWx0LnJlc3VsdCkge1xuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLmRlbGV0ZVJvb20ocm9vbUlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgRGVsZXRpbmcgUm9vbSB3aXRoIFJvb20gaWQ6ICR7cm9vbUlkfWAsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyBDb250ZXh0IG1lbnVzIChkZXNrdG9wKVxuICBwcml2YXRlIGNvbnRleHRSb29tOiBBWE1DaGF0Um9vbSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbnRleHRUYWI6IEFYTUNvbnZlcnNhdGlvblRhYiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbnRleHRUYWJJbmRleCA9IC0xO1xuICBvcGVuQ29udGV4dE1lbnUoZXY6IE1vdXNlRXZlbnQsIHJvb206IEFYTUNoYXRSb29tKSB7XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmNvbnRleHRSb29tID0gcm9vbTtcbiAgICB0aGlzLmNoYXRDb250ZXh0KCk/LnNob3dBdCh7IHg6IGV2LmNsaWVudFgsIHk6IGV2LmNsaWVudFkgfSk7XG4gIH1cbiAgb3BlblRhYkNvbnRleHRNZW51KGV2OiBNb3VzZUV2ZW50LCB0YWI6IEFYTUNvbnZlcnNhdGlvblRhYiwgaW5kZXg6IG51bWJlcikge1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jb250ZXh0VGFiID0gdGFiO1xuICAgIHRoaXMuY29udGV4dFRhYkluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy50YWJDb250ZXh0KCk/LnNob3dBdCh7IHg6IGV2LmNsaWVudFgsIHk6IGV2LmNsaWVudFkgfSk7XG4gIH1cbiAgb25Db250ZXh0T3BlbmluZyhlOiBBWENvbnRleHRNZW51T3BlbmluZ0V2ZW50KSB7XG4gICAgY29uc3QgaXRlbXM6IEFYTWVudUl0ZW1bXSA9IFtdO1xuXG4gICAgLy8gR2VuZXJhbCBJdGVtc1xuICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAnb3BlbicsIHRleHQ6IHRoaXMudE9wZW4oKSwgaWNvbjogJ2ZhLWxpZ2h0IGZhLW1lc3NhZ2UtbGluZXMnIH0pO1xuXG4gICAgLy8gUmVzb2x2ZSBjb250ZXh0IHJvb20gb25jZVxuICAgIGNvbnN0IGNvbnRleHRSb29tID0gdGhpcy5jb250ZXh0Um9vbTtcblxuICAgIC8vIE1hcmsgYXMgc2VlbiAob25seSBpZiB0aGUgcm9vbSBoYXMgdW5yZWFkIG1lc3NhZ2VzKVxuICAgIGlmIChjb250ZXh0Um9vbSAmJiAoY29udGV4dFJvb20udW5yZWFkQ291bnQgfHwgMCkgPiAwKSB7XG4gICAgICBpdGVtcy5wdXNoKHsgbmFtZTogJ21hcmstc2VlbicsIHRleHQ6IHRoaXMudE1hcmtTZWVuKCksIGljb246ICdmYS1saWdodCBmYS1lbnZlbG9wZS1vcGVuJyB9KTtcbiAgICB9XG5cbiAgICAvLyBUYWIgc3VibWVudSBiZWhhdmlvciAoVGVsZWdyYW0tbGlrZSlcbiAgICBjb25zdCBhbGxUYWJzID0gdGhpcy50YWJzKCk7XG4gICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5hY3RpdmVUYWIoKTtcbiAgICBjb25zdCBjdXN0b21UYWJzID0gYWxsVGFicy5maWx0ZXIoKHQpID0+IHQubmFtZSAhPT0gJ2FsbCcgJiYgdC5uYW1lICE9PSAndW5yZWFkJyk7XG4gICAgaWYgKGNvbnRleHRSb29tICYmIGN1c3RvbVRhYnMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGFjdGl2ZVRhYj8ubmFtZSA9PT0gJ2FsbCcpIHtcbiAgICAgICAgY29uc3QgdGFiTWVudUl0ZW1zOiBBWE1lbnVJdGVtW10gPSBjdXN0b21UYWJzLm1hcCgodCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzSW5jbHVkZWQgPSAodC5pbmNsdWRlUm9vbXMgfHwgW10pLnNvbWUoKHIpID0+IHIuaWQgPT09IGNvbnRleHRSb29tLmlkKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogYHRhYi50b2dnbGU6JHt0LmlkfWAsXG4gICAgICAgICAgICB0ZXh0OiB0LnRpdGxlLFxuICAgICAgICAgICAgaWNvbjogaXNJbmNsdWRlZCA/ICdmYS1saWdodCBmYS1jaGVjaycgOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSBhcyBBWE1lbnVJdGVtO1xuICAgICAgICB9KTtcbiAgICAgICAgaXRlbXMucHVzaCh7IG5hbWU6ICd0YWInLCB0ZXh0OiB0aGlzLnRUYWIoKSwgaWNvbjogJ2ZhLWxpZ2h0IGZhLWZvbGRlci10cmVlJywgaXRlbXM6IHRhYk1lbnVJdGVtcyB9KTtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlVGFiPy5uYW1lID09PSAndW5yZWFkJykge1xuICAgICAgICAvLyBObyB0YWIgc3VibWVudSBpbiB1bnJlYWRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE9ubHkgcmVtb3ZlIGZyb20gY3VycmVudCBjdXN0b20gdGFiXG4gICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgIG5hbWU6ICd0YWIucmVtb3ZlLWN1cnJlbnQnLFxuICAgICAgICAgIHRleHQ6IHRoaXMudFJlbW92ZUZyb21UYWIoKSxcbiAgICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtc3F1YXJlLW1pbnVzJyxcbiAgICAgICAgICBjb2xvcjogJ3dhcm5pbmcnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEYW5nZXJvdXMgYWN0aW9uIGF0IHRoZSBlbmRcbiAgICBpZiAoY29udGV4dFJvb20pIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVc2VySWQgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI/LmlkO1xuICAgICAgY29uc3QgY3JlYXRvcklkID0gY29udGV4dFJvb20uYXVkaXRJbmZvPy5jcmVhdGVkPy5ieT8uaWQ7XG4gICAgICBjb25zdCBpc0NyZWF0b3IgPSAhIWN1cnJlbnRVc2VySWQgJiYgISFjcmVhdG9ySWQgJiYgY3VycmVudFVzZXJJZCA9PT0gY3JlYXRvcklkO1xuICAgICAgY29uc3QgdGV4dCA9IGlzQ3JlYXRvciA/IHRoaXMudERlbGV0ZSgpIDogdGhpcy50UmVtb3ZlQ2hhdCgpO1xuICAgICAgY29uc3QgbmFtZSA9IGlzQ3JlYXRvciA/ICdkZWxldGUtcm9vbScgOiAnbGVhdmUtcm9vbSc7XG4gICAgICBpdGVtcy5wdXNoKHsgbmFtZSwgdGV4dCwgaWNvbjogJ2ZhLWxpZ2h0IGZhLXRyYXNoLWNhbicsIGNvbG9yOiAnZGFuZ2VyJyB9KTtcbiAgICB9XG5cbiAgICBlLml0ZW1zID0gaXRlbXM7XG4gIH1cbiAgLy8gVGFiIGhlYWRlciBjb250ZXh0IG1lbnUgKHN5bmNocm9ub3VzIGJ1aWxkKVxuICBvblRhYkNvbnRleHRPcGVuaW5nKGU6IEFYQ29udGV4dE1lbnVPcGVuaW5nRXZlbnQpIHtcbiAgICBjb25zdCBpdGVtczogQVhNZW51SXRlbVtdID0gW107XG4gICAgY29uc3QgdGFiID0gdGhpcy5jb250ZXh0VGFiO1xuICAgIGlmICghdGFiKSB7XG4gICAgICBlLml0ZW1zID0gaXRlbXM7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0YWIubmFtZSA9PT0gJ2FsbCcgfHwgdGFiLm5hbWUgPT09ICd1bnJlYWQnKSB7XG4gICAgICBpdGVtcy5wdXNoKHsgbmFtZTogJ3RhYi5hZGQnLCB0ZXh0OiAnQWRkIHRhYicsIGljb246ICdmYS1saWdodCBmYS1zcXVhcmUtcGx1cycgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zLnB1c2goeyBuYW1lOiAndGFiLnJlbW92ZScsIHRleHQ6ICdSZW1vdmUgdGFiJywgaWNvbjogJ2ZhLWxpZ2h0IGZhLXRyYXNoLWNhbicsIGNvbG9yOiAnZGFuZ2VyJyB9KTtcbiAgICB9XG4gICAgZS5pdGVtcyA9IGl0ZW1zO1xuICB9XG4gIGFzeW5jIG9uVGFiQ29udGV4dEl0ZW1DbGljayhlOiBBWENvbnRleHRNZW51SXRlbXNDbGlja0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHRUYWIpIHJldHVybjtcbiAgICBzd2l0Y2ggKGUuaXRlbS5uYW1lKSB7XG4gICAgICBjYXNlICd0YWIuYWRkJzoge1xuICAgICAgICAvLyBCdWlsZCBkaWFsb2cgZm9yIGNyZWF0aW5nIGEgbmV3IGN1c3RvbSB0YWJcbiAgICAgICAgY29uc3Qgcm9vbXMgPSB0aGlzLmFsbFJvb21zKCk7XG4gICAgICAgIGNvbnN0IHJvb21PcHRpb25zID0gcm9vbXMubWFwKChyKSA9PiAoe1xuICAgICAgICAgIGlkOiByLmlkLFxuICAgICAgICAgIHRpdGxlOiAoci5tZW1iZXJzPy5sZW5ndGggPz8gMCkgPiAxID8gci50aXRsZSB8fCAnJyA6IHIubWVtYmVycz8uWzBdPy5mdWxsTmFtZSB8fCAnJyxcbiAgICAgICAgfSkpO1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSBhd2FpdCB0aGlzLmxheW91dEJ1aWxkZXJcbiAgICAgICAgICAuY3JlYXRlKClcbiAgICAgICAgICAuZGlhbG9nKGRpYWxvZyA9PiB7XG4gICAgICAgICAgICBkaWFsb2dcbiAgICAgICAgICAgICAgLnNldFRpdGxlKCdOZXcgVGFiJylcbiAgICAgICAgICAgICAgLnNldFNpemUoJ3NtJylcbiAgICAgICAgICAgICAgLnNldENvbnRleHQoeyB0aXRsZTogJycsIHJvb21zOiBbXSB9KVxuICAgICAgICAgICAgICAuY29udGVudChsYXlvdXRCdWlsZGVyID0+IHtcbiAgICAgICAgICAgICAgICBsYXlvdXRCdWlsZGVyLmZsZXgoZmxleCA9PiB7XG4gICAgICAgICAgICAgICAgICBmbGV4XG4gICAgICAgICAgICAgICAgICAgIC5zZXREaXJlY3Rpb24oJ2NvbHVtbicpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JtRmllbGQoJ1RpdGxlJywgZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ3RpdGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQudGV4dEJveCh7IHBsYWNlaG9sZGVyOiAnRW50ZXIgdGFiIHRpdGxlJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmZvcm1GaWVsZCgnQ2hhdHMnLCBmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgZmllbGQucGF0aCgncm9vbXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5zZWxlY3RCb3goeyB2YWx1ZUZpZWxkOiAnaWQnLCB0ZXh0RmllbGQ6ICd0aXRsZScsIGRhdGFTb3VyY2U6IHJvb21PcHRpb25zLCBtdWx0aXBsZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5zZXRBY3Rpb25zKGFjdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIGFjdGlvbnMuY2FuY2VsKCdDYW5jZWwnKS5zdWJtaXQoJ0NyZWF0ZScpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zaG93KCk7XG5cbiAgICAgICAgY29uc3QgYWN0aW9uID0gZGlhbG9nUmVmLmFjdGlvbigpO1xuICAgICAgICBjb25zdCBjdHggPSBkaWFsb2dSZWYuY29udGV4dCgpIGFzIHsgdGl0bGU/OiBzdHJpbmc7IHJvb21zPzogYW55W10gfTtcbiAgICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIGlmIChhY3Rpb24gPT09ICdjYW5jZWwnIHx8ICFjdHg/LnRpdGxlKSByZXR1cm47XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gY3R4LnRpdGxlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJy0nKS5zbGljZSgwLCA2NCk7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBBcnJheS5pc0FycmF5KGN0eC5yb29tcykgPyBjdHgucm9vbXMgOiBbXTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHNlbGVjdGVkXG4gICAgICAgICAgICAubWFwKCh2OiBhbnkpID0+ICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2IDogdj8uaWQpKVxuICAgICAgICAgICAgLmZpbHRlcigodjogYW55KTogdiBpcyBzdHJpbmcgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoID4gMCk7XG4gICAgICAgICAgY29uc3QgaW5jbHVkZVJvb21zID0gcm9vbXMuZmlsdGVyKChyKSA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyhyLmlkKSk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGF0U2VydmljZS5jcmVhdGVUYWIoeyBuYW1lLCB0aXRsZTogY3R4LnRpdGxlLnRyaW0oKSwgaW5jbHVkZVJvb21zLCBleGNsdWRlUm9vbXM6IFtdIH0pO1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFRhYnMoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSB0YWInLCBlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAndGFiLnJlbW92ZSc6IHtcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVUYWIodGhpcy5jb250ZXh0VGFiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIC8vICh0aGlzLnRhYigpIGFzIGFueSkuc2V0SW5kaWNhdG9yUG9zaXRpb24odGhpcy5hY3RpdmVUYWIoKSk7XG4gIH1cbiAgb25Db250ZXh0SXRlbUNsaWNrKGU6IEFYQ29udGV4dE1lbnVJdGVtc0NsaWNrRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuY29udGV4dFJvb20pIHJldHVybjtcbiAgICBjb25zdCByb29tSWQgPSB0aGlzLmNvbnRleHRSb29tLmlkO1xuICAgIHN3aXRjaCAoZS5pdGVtLm5hbWUpIHtcbiAgICAgIGNhc2UgJ29wZW4nOlxuICAgICAgICB0aGlzLm9wZW5DaGF0KHJvb21JZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWFyay1zZWVuJzpcbiAgICAgICAgdGhpcy5jaGF0U2VydmljZVxuICAgICAgICAgIC5tYXJrUm9vbVNlZW4ocm9vbUlkKVxuICAgICAgICAgIC5jYXRjaChhc3luYyAoKSA9PlxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKFxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246bWVzc2FnZXMubWFyay1zZWVuLWZhaWxlZCcpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIC8vIGNhc2UgJ211dGUnOlxuICAgICAgLy8gICB0aGlzLnRvYXN0U2VydmljZS53YXJuaW5nKCdNdXRlIG5vdCBpbXBsZW1lbnRlZCB5ZXQnKTtcbiAgICAgIC8vICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIC8vIFRvZ2dsZSB0YWIgaW5jbHVzaW9uOiBuYW1lcyBhcmUgaW4gdGhlIGZvcm0gJ3RhYi50b2dnbGU6PHRhYklkPidcbiAgICAgICAgaWYgKHR5cGVvZiBlLml0ZW0ubmFtZSA9PT0gJ3N0cmluZycgJiYgZS5pdGVtLm5hbWUuc3RhcnRzV2l0aCgndGFiLnRvZ2dsZTonKSkge1xuICAgICAgICAgIGNvbnN0IHRhYklkID0gZS5pdGVtLm5hbWUuc3BsaXQoJzonKVsxXTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VGFicyA9IHRoaXMudGFicygpO1xuICAgICAgICAgIGNvbnN0IGZvdW5kVGFiID0gY3VycmVudFRhYnMuZmluZCgodCkgPT4gdC5pZCA9PT0gdGFiSWQpO1xuICAgICAgICAgIGlmICghZm91bmRUYWIpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcignQGNvbnZlcnNhdGlvbjptZXNzYWdlcy50YWItbm90LWZvdW5kJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlzSW5jbHVkZWQgPSAoZm91bmRUYWIuaW5jbHVkZVJvb21zIHx8IFtdKS5zb21lKChyKSA9PiByLmlkID09PSByb29tSWQpO1xuICAgICAgICAgIGNvbnN0IG9wID0gaXNJbmNsdWRlZFxuICAgICAgICAgICAgPyB0aGlzLmNoYXRTZXJ2aWNlLnJlbW92ZUluY2x1ZGVSb29tRnJvbVRhYih0YWJJZCwgcm9vbUlkKVxuICAgICAgICAgICAgOiB0aGlzLmNoYXRTZXJ2aWNlLmFkZEluY2x1ZGVSb29tVG9UYWIodGFiSWQsIHJvb21JZCk7XG4gICAgICAgICAgb3AudGhlbihhc3luYyAodXBkYXRlZFRhYikgPT4ge1xuICAgICAgICAgICAgdGhpcy50YWJzLnVwZGF0ZSgodGFicykgPT4gdGFicy5tYXAoKHQpID0+ICh0LmlkID09PSB1cGRhdGVkVGFiLmlkID8gdXBkYXRlZFRhYiA6IHQpKSk7XG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zdWNjZXNzKFxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoXG4gICAgICAgICAgICAgICAgaXNJbmNsdWRlZCA/ICdAY29udmVyc2F0aW9uOm1lc3NhZ2VzLnRhYi1yZW1vdmVkJyA6ICdAY29udmVyc2F0aW9uOm1lc3NhZ2VzLnRhYi1hZGRlZCcsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLmNhdGNoKGFzeW5jICgpID0+XG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIoXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYygnQGNvbnZlcnNhdGlvbjptZXNzYWdlcy50YWItdXBkYXRlLWZhaWxlZCcpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhYi5yZW1vdmUtY3VycmVudCc6IHtcbiAgICAgICAgY29uc3QgYXQgPSB0aGlzLmFjdGl2ZVRhYigpO1xuICAgICAgICBpZiAoIWF0IHx8IGF0Lm5hbWUgPT09ICdhbGwnIHx8IGF0Lm5hbWUgPT09ICd1bnJlYWQnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2VcbiAgICAgICAgICAucmVtb3ZlSW5jbHVkZVJvb21Gcm9tVGFiKGF0LmlkLCByb29tSWQpXG4gICAgICAgICAgLnRoZW4oYXN5bmMgKHVwZGF0ZWRUYWIpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGFicy51cGRhdGUoKHRhYnMpID0+IHRhYnMubWFwKCh0KSA9PiAodC5pZCA9PT0gdXBkYXRlZFRhYi5pZCA/IHVwZGF0ZWRUYWIgOiB0KSkpO1xuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2Vzcyhhd2FpdCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0Bjb252ZXJzYXRpb246bWVzc2FnZXMudGFiLXJlbW92ZWQnKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goYXN5bmMgKCkgPT5cbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcihcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAY29udmVyc2F0aW9uOm1lc3NhZ2VzLnRhYi1yZW1vdmUtZmFpbGVkJyksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnZGVsZXRlLXJvb20nOlxuICAgICAgICB0aGlzLmRlbGV0ZVJvb20ocm9vbUlkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZWF2ZS1yb29tJzoge1xuICAgICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gdGhpcy5zZXNzaW9uU2VydmljZS51c2VyPy5pZCE7XG4gICAgICAgIHRoaXMuY2hhdFNlcnZpY2VcbiAgICAgICAgICAucmVtb3ZlUGFydGljaXBhbnQocm9vbUlkLCBjdXJyZW50VXNlcklkKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm9vbSgpPy5pZCA9PT0gcm9vbUlkKSB7XG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi8nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGFzeW5jICgpID0+IHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcignRmFpbGVkIHRvIGxlYXZlJykpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXG4gIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRSb29tKCkpIHtcbiAgICAgIHRoaXMub25CYWNrQnV0dG9uQ2xpY2soKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxheHAtcGFnZS1sYXlvdXQgI2NvbnRhaW5lcj5cbiAgPGF4cC1sYXlvdXQtc3RhcnQtc2lkZSBjbGFzcz1cImF4LWJvcmRlci1lIGF4LWxpZ2h0ZXN0LXN1cmZhY2UgYXgtaC1mdWxsXCI+XG4gICAgPGF4cC1sYXlvdXQtaGVhZGVyPlxuICAgICAgPGF4cC1sYXlvdXQtdGl0bGU+e3sgJ0Bjb252ZXJzYXRpb246bW9kdWxlLW5hbWUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L2F4cC1sYXlvdXQtdGl0bGU+XG4gICAgICA8YXhwLWxheW91dC10b29sYmFyPlxuICAgICAgICA8YXgtc2VhcmNoLWJveFxuICAgICAgICAgICNzZWFyY2hJbnB1dFxuICAgICAgICAgIGxvb2s9XCJzb2xpZFwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAY29udmVyc2F0aW9uOnNlYXJjaC5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFF1ZXJ5KClcIlxuICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJvblNlYXJjaCgkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgICBjbGFzcz1cImF4LXctZnVsbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtY2xlYXItYnV0dG9uPjwvYXgtY2xlYXItYnV0dG9uPlxuICAgICAgICA8L2F4LXNlYXJjaC1ib3g+XG4gICAgICA8L2F4cC1sYXlvdXQtdG9vbGJhcj5cbiAgICA8L2F4cC1sYXlvdXQtaGVhZGVyPlxuICAgIDxheHAtbGF5b3V0LWNvbnRlbnQgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LW1pbi1oLTAgYXgtbWF4LXctODBcIj5cbiAgICAgIEBpZiAoIWxheW91dFNlcnZpY2UuaXNNb2JpbGVEZXZpY2UoKSkge1xuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICB9XG4gICAgPC9heHAtbGF5b3V0LWNvbnRlbnQ+XG4gIDwvYXhwLWxheW91dC1zdGFydC1zaWRlPlxuXG4gIDxheHAtcGFnZS1jb250ZW50XG4gICAgc3R5bGU9XCJoZWlnaHQ6IGNhbGMoMTAwdmggLSAyMnJlbSlcIlxuICAgIFtzdHlsZS5wYWRkaW5nXT1cImxheW91dFNlcnZpY2UuaXNNb2JpbGVEZXZpY2UoKSA/ICcxcmVtICFpbXBvcnRhbnQnIDogJzAgIWltcG9ydGFudCdcIlxuICA+XG4gICAgQGlmIChzZWxlY3RlZFJvb20oKSkge1xuICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICAgIH0gQGVsc2UgaWYgKGxheW91dFNlcnZpY2UuaXNNb2JpbGVEZXZpY2UoKSkge1xuICAgICAgPGF4LXNlYXJjaC1ib3hcbiAgICAgICAgI3NlYXJjaElucHV0XG4gICAgICAgIGxvb2s9XCJzb2xpZFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCInQGNvbnZlcnNhdGlvbjpzZWFyY2gucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICBbdmFsdWVdPVwic2VhcmNoUXVlcnkoKVwiXG4gICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJvblNlYXJjaCgkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgY2xhc3M9XCJheC13LWZ1bGwgYXgtbWItMlwiXG4gICAgICA+XG4gICAgICAgIDxheC1jbGVhci1idXR0b24+PC9heC1jbGVhci1idXR0b24+XG4gICAgICA8L2F4LXNlYXJjaC1ib3g+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICA8L2F4cC1wYWdlLWNvbnRlbnQ+XG48L2F4cC1wYWdlLWxheW91dD5cbjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGU+XG4gIDwhLS0gVGFicyAtLT5cbiAgPGRpdiBbY2xhc3NdPVwiIWxheW91dFNlcnZpY2UuaXNNb2JpbGVEZXZpY2UoKSA/ICdheC1weC00JyA6ICcnXCI+XG4gICAgPGF4LXRhYnNcbiAgICAgICN0YWJcbiAgICAgIGNsYXNzPVwiYXgtdGV4dC1uZXV0cmFsLTQwMCAhYXgtb3ZlcmZsb3cteC1oaWRkZW5cIlxuICAgICAgW2xvb2tdPVwiJ3dpdGgtbGluZSdcIlxuICAgICAgW2xvY2F0aW9uXT1cIidib3R0b20nXCJcbiAgICAgIFtmaXRQYXJlbnRdPVwidHJ1ZVwiXG4gICAgICAob25BY3RpdmVUYWJDaGFuZ2VkKT1cImFjdGl2ZVRhYkluZGV4LnNldCgkZXZlbnQuaW5kZXgpXCJcbiAgICA+XG4gICAgICBAZm9yICh0YWIgb2YgdGFicygpOyB0cmFjayB0YWIuaWQ7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDxheC10YWItaXRlbVxuICAgICAgICAgIFt0ZXh0XT1cInRhYi50aXRsZVwiXG4gICAgICAgICAgW2FjdGl2ZV09XCJhY3RpdmVUYWJJbmRleCgpID09PSBpXCJcbiAgICAgICAgICAoY29udGV4dG1lbnUpPVwib3BlblRhYkNvbnRleHRNZW51KCRldmVudCwgdGFiLCBpKVwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKGdldFJvb21Db3VudEZvclRhYih0YWIpID4gMCkge1xuICAgICAgICAgICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgICAgICAgPGF4LWJhZGdlXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiZ2V0Um9vbUNvdW50Rm9yVGFiKHRhYikudG9TdHJpbmcoKVwiXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cImFjdGl2ZVRhYkluZGV4KCkgPT09IGkgPyAncHJpbWFyeScgOiAnc2Vjb25kYXJ5J1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC1taW4tdy1bMS41cmVtXSBheC1qdXN0aWZ5LWNlbnRlclwiXG4gICAgICAgICAgICAgID48L2F4LWJhZGdlPlxuICAgICAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICAgICAgfVxuICAgICAgICA8L2F4LXRhYi1pdGVtPlxuICAgICAgfVxuICAgIDwvYXgtdGFicz5cbiAgPC9kaXY+XG5cbiAgPCEtLSBDaGF0IExpc3QgQ29udGVudCAtLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYXgtZmxleC0xIGF4LW92ZXJmbG93LWhpZGRlbiBheC1mbGV4IGF4LWZsZXgtY29sIGF4LWp1c3RpZnktYmV0d2VlbiBheC1taW4tdy04MFwiXG4gICAgW2NsYXNzLmF4LWJvcmRlci10XT1cInRhYnMoKS5sZW5ndGggPiAwXCJcbiAgPlxuICAgIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cbiAgICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtcC00IGF4LXNwYWNlLXktNFwiPlxuICAgICAgICBAZm9yIChfIG9mIFsxLCAyLCAzLCA0LCA1LCA2XTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LXNwYWNlLXgtM1wiPlxuICAgICAgICAgICAgPGF4LXNrZWxldG9uIFthbmltYXRlZF09XCJ0cnVlXCIgY2xhc3M9XCJheC13LTEyIGF4LWgtMTIgYXgtcm91bmRlZC1mdWxsXCI+PC9heC1za2VsZXRvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4LTEgYXgtc3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgIDxheC1za2VsZXRvbiBbYW5pbWF0ZWRdPVwidHJ1ZVwiIGNsYXNzPVwiYXgtdy0zLzQgYXgtaC00IGF4LXJvdW5kZWQtbWRcIj48L2F4LXNrZWxldG9uPlxuICAgICAgICAgICAgICA8YXgtc2tlbGV0b24gW2FuaW1hdGVkXT1cInRydWVcIiBjbGFzcz1cImF4LXctMS8yIGF4LWgtMyBheC1yb3VuZGVkLW1kXCI+PC9heC1za2VsZXRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIGlmIChlcnJvcigpKSB7XG4gICAgICA8YXhwLXN0YXRlLW1lc3NhZ2VcbiAgICAgICAgbW9kZT1cImVycm9yXCJcbiAgICAgICAgaWNvbj1cImZhLWxpZ2h0IGZhLWNpcmNsZS1leGNsYW1hdGlvblwiXG4gICAgICAgIFt0aXRsZV09XCInQGNvbnZlcnNhdGlvbjpjaGF0LWVycm9yJ1wiXG4gICAgICAgIFtkZXNjcmlwdGlvbl09XCJlcnJvcigpIHx8ICdAY29udmVyc2F0aW9uOnN0YXRlLW1lc3NhZ2UuZXJyb3IuZGVzY3JpcHRpb24nXCJcbiAgICAgID5cbiAgICAgICAgPGF4LWJ1dHRvblxuICAgICAgICAgIHNsb3Q9XCJhY3Rpb25zXCJcbiAgICAgICAgICBbdGV4dF09XCInQGNvbnZlcnNhdGlvbjp0cnktYWdhaW4nIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgKG9uQ2xpY2spPVwicmVmcmVzaENoYXQoKVwiXG4gICAgICAgID48L2F4LWJ1dHRvbj5cbiAgICAgIDwvYXhwLXN0YXRlLW1lc3NhZ2U+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleC0xIGF4LW92ZXJmbG93LXktYXV0byBheC1wdC0xXCI+XG4gICAgICAgIEBmb3IgKGkgb2YgZmlsdGVyZWRSb29tcygpOyB0cmFjayBpLmlkKSB7XG4gICAgICAgICAgQGlmIChsYXlvdXRTZXJ2aWNlLmlzTW9iaWxlRGV2aWNlKCkpIHtcbiAgICAgICAgICAgIDxheC1zbGlkaW5nLWl0ZW0gY2xhc3M9XCJheC1oLTIwXCI+XG4gICAgICAgICAgICAgIDxheC1jb250ZW50IGNsYXNzPVwiIWF4LXAtMFwiPlxuICAgICAgICAgICAgICAgIDxheG0tY2hhdC1pdGVtXG4gICAgICAgICAgICAgICAgICBbZGF0YV09XCJpXCJcbiAgICAgICAgICAgICAgICAgIFt0eXBpbmddPVwiJGFueSh0eXBpbmdTdGF0dXMoKVtpLmlkXSlcIlxuICAgICAgICAgICAgICAgICAgW2xhc3RNZXNzYWdlUmVhY3Rpb25dPVwiaS5sYXN0TWVzc2FnZT8ucmVhY3Rpb25zPy5bMF0/LnR5cGUgPz8gbnVsbFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cImkuaWRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5DaGF0KGkuaWQpXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5heC1iZy1kYXJrXT1cInNlbGVjdGVkUm9vbSgpPy5pZCA9PT0gaS5pZFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyYW5zaXRpb24tYWxsIGF4LWR1cmF0aW9uLTEwMCBob3ZlcjpheC1iZy1zdXJmYWNlIGF4LWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgIFtAZmFkZUluXVxuICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9wZW5DaGF0KGkuaWQpXCJcbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cIm9wZW5Db250ZXh0TWVudSgkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICA+PC9heG0tY2hhdC1pdGVtPlxuICAgICAgICAgICAgICA8L2F4LWNvbnRlbnQ+XG5cbiAgICAgICAgICAgICAgPCEtLSA8YXgtc2xpZGluZy1pdGVtLXN1ZmZpeCAob25DbGljayk9XCJvblNsaWRlQWN0aW9uKGksICdtdXRlJylcIiBjb2xvcj1cIndhcm5pbmdcIj5cbiAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLWxpZ2h0IGZhLWJlbGwtc2xhc2ggZmEtbGdcIj48L2F4LWljb24+XG4gICAgICAgIDwvYXgtc2xpZGluZy1pdGVtLXN1ZmZpeD4gLS0+XG4gICAgICAgICAgICAgIDxheC1zbGlkaW5nLWl0ZW0tc3VmZml4IChvbkNsaWNrKT1cIm9uU2xpZGVBY3Rpb24oaSwgJ2RlbGV0ZScpXCIgY29sb3I9XCJkYW5nZXJcIj5cbiAgICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhLWxpZ2h0IGZhLXRyYXNoLWNhbiBmYS1sZ1wiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgPC9heC1zbGlkaW5nLWl0ZW0tc3VmZml4PlxuICAgICAgICAgICAgPC9heC1zbGlkaW5nLWl0ZW0+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8YXhtLWNoYXQtaXRlbVxuICAgICAgICAgICAgICBbZGF0YV09XCJpXCJcbiAgICAgICAgICAgICAgW3R5cGluZ109XCIkYW55KHR5cGluZ1N0YXR1cygpW2kuaWRdKVwiXG4gICAgICAgICAgICAgIFtsYXN0TWVzc2FnZVJlYWN0aW9uXT1cImkubGFzdE1lc3NhZ2U/LnJlYWN0aW9ucz8uWzBdPy50eXBlID8/IG51bGxcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLWlkXT1cImkuaWRcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNoYXQoaS5pZClcIlxuICAgICAgICAgICAgICBbY2xhc3MuYXgtYmctZGFya109XCJzZWxlY3RlZFJvb20oKT8uaWQgPT09IGkuaWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyYW5zaXRpb24tYWxsIGF4LWR1cmF0aW9uLTEwMCBob3ZlcjpheC1iZy1zdXJmYWNlXCJcbiAgICAgICAgICAgICAgW0BmYWRlSW5dXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9wZW5DaGF0KGkuaWQpXCJcbiAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJvcGVuQ29udGV4dE1lbnUoJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICA+PC9heG0tY2hhdC1pdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgIDxheHAtc3RhdGUtbWVzc2FnZVxuICAgICAgICAgICAgaWNvbj1cImZhLWxpZ2h0IGZhLWNvbW1lbnRzXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInQGNvbnZlcnNhdGlvbjpuby1jaGF0cy1mb3VuZC50aXRsZSdcIlxuICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidAY29udmVyc2F0aW9uOm5vLWNoYXRzLWZvdW5kLmRlc2NyaXB0aW9uJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvYXhwLXN0YXRlLW1lc3NhZ2U+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0gRm9vdGVyIENvbnRlbnQgLS0+XG4gICAgQGlmICghbGF5b3V0U2VydmljZS5pc01vYmlsZURldmljZSgpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtYm9yZGVyLXQgYXgtYm9yZGVyLWRpdmlkZXIgYXgtYmctbGlnaHRlc3QgYXgtcC00XCI+XG4gICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICBjbGFzcz1cImF4LXctZnVsbFwiXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICBbdGV4dF09XCInQGNvbnZlcnNhdGlvbjpuZXctY29udmVyc2F0aW9uLmJ1dHRvbicgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgKG9uQ2xpY2spPVwib25OZXdDb252ZXJzYXRpb24oKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgPGF4LWljb24+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtcGx1c1wiPjwvaT5cbiAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxheC1idXR0b25cbiAgICAgICAgY2xhc3M9XCJheC1maXhlZCBheC1ib3R0b20tMTYgYXgtcmlnaHQtOCAhYXgtcm91bmRlZC1mdWxsICFheC13LTE0ICFheC1oLTE0IGF4LXNoYWRvdy1sZ1wiXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIChvbkNsaWNrKT1cIm9uTmV3Q29udmVyc2F0aW9uKClcIlxuICAgICAgPlxuICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImF4LXRleHQtMnhsXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1wbHVzXCI+PC9pPlxuICAgICAgICA8L2F4LWljb24+XG4gICAgICA8L2F4LWJ1dHRvbj5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPGF4LWNvbnRleHQtbWVudVxuICAjY2hhdENvbnRleHRcbiAgW29wZW5Pbl09XCInY2xpY2snXCJcbiAgW2Nsb3NlT25dPVwiJ2NsaWNrJ1wiXG4gIFtvcmllbnRhdGlvbl09XCIndmVydGljYWwnXCJcbiAgKG9uT3BlbmluZyk9XCJvbkNvbnRleHRPcGVuaW5nKCRldmVudClcIlxuICAob25JdGVtQ2xpY2spPVwib25Db250ZXh0SXRlbUNsaWNrKCRldmVudClcIlxuPjwvYXgtY29udGV4dC1tZW51PlxuXG48YXgtY29udGV4dC1tZW51XG4gICN0YWJDb250ZXh0XG4gIFtvcGVuT25dPVwiJ2NsaWNrJ1wiXG4gIFtjbG9zZU9uXT1cIidjbGljaydcIlxuICBbb3JpZW50YXRpb25dPVwiJ3ZlcnRpY2FsJ1wiXG4gIChvbk9wZW5pbmcpPVwib25UYWJDb250ZXh0T3BlbmluZygkZXZlbnQpXCJcbiAgKG9uSXRlbUNsaWNrKT1cIm9uVGFiQ29udGV4dEl0ZW1DbGljaygkZXZlbnQpXCJcbj48L2F4LWNvbnRleHQtbWVudT5cbiJdfQ==","/**\n * Converts chat service response to chat preview format\n * @param chatResponse - The response from chat service containing items and total\n * @returns Array of formatted chat preview messages\n */\nexport function convertToChatPreview(currentUserId, chatResponse, userName) {\n if (!chatResponse || !chatResponse.items?.length) {\n return [];\n }\n // Map from AXMChatMessage to ChatPreviewMessage\n return chatResponse.items.map((message) => {\n // Determine message type based on content type\n let messageType = 'text';\n // Map contentType to preview type\n if (message.message?.contentType) {\n switch (message.message.contentType) {\n case 'text':\n messageType = 'text';\n break;\n case 'file':\n messageType = 'file';\n break;\n case 'image':\n messageType = 'image';\n break;\n case 'video':\n messageType = 'video';\n break;\n case 'link':\n // Determine if link is for audio or other content\n const content = message.message.content || '';\n if (content.includes('.mp3') || content.includes('.ogg') || content.includes('audio')) {\n messageType = 'audio';\n }\n else {\n messageType = 'text';\n }\n break;\n default:\n messageType = 'text';\n }\n }\n // Extract author name if available\n const name = message.author ? message.author.id : 'Unknown';\n // Create the chat preview message\n const previewMessage = {\n id: message.id,\n sendTime: new Date(message.auditInfo?.created?.at || new Date()),\n readTime: new Date(), // Assuming \"read\" when converted\n type: messageType,\n content: message.message?.content || '',\n name: name,\n userName,\n };\n // Add fromId if the message is not from current user\n if (currentUserId !== message.author.id) {\n previewMessage.fromId = message.author?.id;\n }\n else {\n previewMessage.showActionButton = true;\n }\n // Note: Reply information would need to be looked up from the actual messages\n // This would typically be done by the service that has access to all messages\n return previewMessage;\n });\n}\n/**\n * Creates a ChatPreviewMessage from reply information\n * @param message - The original message that is being referenced\n * @returns A ChatPreviewMessage formatted for use as a replyTo\n */\nexport function createReplyPreview(currentUserId, message, userName) {\n if (!message)\n return undefined;\n return {\n id: message.id,\n sendTime: new Date(message.auditInfo?.created?.at || new Date()),\n readTime: new Date(),\n type: message.message?.contentType === 'image'\n ? 'image'\n : message.message?.contentType === 'video'\n ? 'video'\n : message.message?.contentType === 'file'\n ? 'file'\n : 'text',\n content: message.message?.content || '',\n name: message.author?.id || 'Unknown',\n fromId: currentUserId !== message.author.id ? message.author?.id : undefined,\n showActionButton: true,\n userName,\n };\n}\n/**\n * Generate demo chat preview data with a variety of message types\n * @returns Array of sample chat preview messages\n */\nexport function generateDemoChatPreview() {\n return [\n {\n id: '0',\n sendTime: new Date(),\n type: 'text',\n readTime: new Date(),\n content: 'Hello John, How are you?',\n name: 'test name',\n },\n {\n id: '1',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'text',\n content: 'Hello',\n name: 'test name',\n replyTo: {\n id: '0',\n sendTime: new Date(),\n type: 'text',\n readTime: new Date(),\n content: 'Hello John, How are you?',\n name: 'test name',\n },\n },\n {\n id: '2',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'voice',\n name: 'test name',\n content: `data:audio/webm;codecs=opus;base64,GkXfoEF34fJ`,\n },\n {\n id: '3',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'text',\n content: 'Can i have your address information?',\n name: 'test name',\n replyTo: {\n id: '1',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'text',\n content: 'Hello',\n name: 'test name',\n },\n },\n {\n id: '4',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'file',\n name: 'test name',\n content: `data:audio/webm;codecs=opus;base64,GkXfoEF34fJ`,\n },\n {\n id: '5',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'image',\n name: 'test name',\n content: `https://picsum.photos/300/200`,\n },\n {\n id: '6',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'video',\n name: 'test name',\n content: `https://www.pexels.com/download/video/5495322/?fps=29.97&h=540&w=960`,\n },\n {\n id: '7',\n sendTime: new Date(),\n type: 'text',\n readTime: new Date(),\n content: 'Hello John, How are you?',\n name: 'test name',\n },\n {\n id: '8',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'audio',\n name: 'kids',\n content: `https://actions.google.com/sounds/v1/ambiences/kids_playing.ogg`,\n },\n {\n id: '9',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'image',\n name: 'test name',\n content: `https://picsum.photos/300/200`,\n },\n {\n id: '10',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'image',\n name: 'test name',\n content: `https://picsum.photos/200/300`,\n },\n {\n id: '11',\n fromId: '10',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'video',\n name: 'test name',\n content: `https://www.pexels.com/download/video/5495322/?fps=29.97&h=540&w=960`,\n },\n {\n id: '12',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'file',\n name: 'test name',\n content: `data:audio/webm;codecs=opus;base64,GkXfo59ChoE+u5BxHVL7ZAS1EF34fJ`,\n },\n {\n id: '13',\n sendTime: new Date(),\n readTime: new Date(),\n type: 'audio',\n name: 'alarm',\n content: `https://actions.google.com/sounds/v1/alarms/digital_watch_alarm_long.ogg`,\n },\n ];\n}\n/**\n * Usage Examples:\n *\n * Example 1: Converting chat service response to chat preview format\n * ```typescript\n * import { AXMChatService } from '../chat.service';\n * import { convertToChatPreview } from './chat-preview.helper';\n *\n * export class ChatPreviewComponent {\n * constructor(private chatService: AXMChatService) {}\n *\n * async loadChatMessages(roomId: string) {\n * const response = await this.chatService.getChatMessages(roomId);\n *\n * // Convert to chat preview format\n * const previewMessages = convertToChatPreview(response);\n *\n * // Use the converted messages\n * this.conversationService.chats.set(previewMessages);\n * }\n * }\n * ```\n *\n * Example 2: Using demo data for development/testing\n * ```typescript\n * import { generateDemoChatPreview } from './chat-preview.helper';\n *\n * export class ChatPreviewDemoComponent {\n * ngOnInit() {\n * // Load demo messages\n * const demoMessages = generateDemoChatPreview();\n *\n * // Use the demo messages\n * this.conversationService.chats.set(demoMessages);\n * }\n * }\n */\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1wcmV2aWV3LmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jaGF0L2NoYXQtcHJldmlldy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUE7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsYUFBcUIsRUFDckIsWUFBd0QsRUFDeEQsUUFBaUI7SUFFakIsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDakQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUN4QywrQ0FBK0M7UUFDL0MsSUFBSSxXQUFXLEdBQStCLE1BQU0sQ0FBQztRQUVyRCxrQ0FBa0M7UUFDbEMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ2pDLFFBQVEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDcEMsS0FBSyxNQUFNO29CQUNULFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBQ3JCLE1BQU07Z0JBQ1IsS0FBSyxNQUFNO29CQUNULFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBQ3JCLE1BQU07Z0JBQ1IsS0FBSyxPQUFPO29CQUNWLFdBQVcsR0FBRyxPQUFPLENBQUM7b0JBQ3RCLE1BQU07Z0JBQ1IsS0FBSyxPQUFPO29CQUNWLFdBQVcsR0FBRyxPQUFPLENBQUM7b0JBQ3RCLE1BQU07Z0JBQ1IsS0FBSyxNQUFNO29CQUNULGtEQUFrRDtvQkFDbEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO29CQUM5QyxJ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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhNQ2hhdE1lc3NhZ2UgfSBmcm9tICcuL2NoYXQudHlwZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFByZXZpZXdNZXNzYWdlIHtcbiAgaWQ6IHN0cmluZztcbiAgZnJvbUlkPzogc3RyaW5nO1xuICBzZW5kVGltZTogRGF0ZTtcbiAgcmVhZFRpbWU6IERhdGU7XG4gIHR5cGU6ICd0ZXh0JyB8ICd2b2ljZScgfCAnZmlsZScgfCAnaW1hZ2UnIHwgJ3ZpZGVvJyB8ICdhdWRpbyc7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICByZXBseVRvPzogQ2hhdFByZXZpZXdNZXNzYWdlO1xuICBzaG93QWN0aW9uQnV0dG9uPzogYm9vbGVhbjtcbiAgdXNlck5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgY2hhdCBzZXJ2aWNlIHJlc3BvbnNlIHRvIGNoYXQgcHJldmlldyBmb3JtYXRcbiAqIEBwYXJhbSBjaGF0UmVzcG9uc2UgLSBUaGUgcmVzcG9uc2UgZnJvbSBjaGF0IHNlcnZpY2UgY29udGFpbmluZyBpdGVtcyBhbmQgdG90YWxcbiAqIEByZXR1cm5zIEFycmF5IG9mIGZvcm1hdHRlZCBjaGF0IHByZXZpZXcgbWVzc2FnZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0NoYXRQcmV2aWV3KFxuICBjdXJyZW50VXNlcklkOiBzdHJpbmcsXG4gIGNoYXRSZXNwb25zZTogeyBpdGVtczogQVhNQ2hhdE1lc3NhZ2VbXTsgdG90YWw6IG51bWJlciB9LFxuICB1c2VyTmFtZT86IHN0cmluZyxcbik6IENoYXRQcmV2aWV3TWVzc2FnZVtdIHtcbiAgaWYgKCFjaGF0UmVzcG9uc2UgfHwgIWNoYXRSZXNwb25zZS5pdGVtcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gTWFwIGZyb20gQVhNQ2hhdE1lc3NhZ2UgdG8gQ2hhdFByZXZpZXdNZXNzYWdlXG4gIHJldHVybiBjaGF0UmVzcG9uc2UuaXRlbXMubWFwKChtZXNzYWdlKSA9PiB7XG4gICAgLy8gRGV0ZXJtaW5lIG1lc3NhZ2UgdHlwZSBiYXNlZCBvbiBjb250ZW50IHR5cGVcbiAgICBsZXQgbWVzc2FnZVR5cGU6IENoYXRQcmV2aWV3TWVzc2FnZVsndHlwZSddID0gJ3RleHQnO1xuXG4gICAgLy8gTWFwIGNvbnRlbnRUeXBlIHRvIHByZXZpZXcgdHlwZVxuICAgIGlmIChtZXNzYWdlLm1lc3NhZ2U/LmNvbnRlbnRUeXBlKSB7XG4gICAgICBzd2l0Y2ggKG1lc3NhZ2UubWVzc2FnZS5jb250ZW50VHlwZSkge1xuICAgICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgICBtZXNzYWdlVHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZmlsZSc6XG4gICAgICAgICAgbWVzc2FnZVR5cGUgPSAnZmlsZSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgICBtZXNzYWdlVHlwZSA9ICdpbWFnZSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgICBtZXNzYWdlVHlwZSA9ICd2aWRlbyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgICAgIC8vIERldGVybWluZSBpZiBsaW5rIGlzIGZvciBhdWRpbyBvciBvdGhlciBjb250ZW50XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IG1lc3NhZ2UubWVzc2FnZS5jb250ZW50IHx8ICcnO1xuICAgICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKCcubXAzJykgfHwgY29udGVudC5pbmNsdWRlcygnLm9nZycpIHx8IGNvbnRlbnQuaW5jbHVkZXMoJ2F1ZGlvJykpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VUeXBlID0gJ2F1ZGlvJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZVR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG1lc3NhZ2VUeXBlID0gJ3RleHQnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgYXV0aG9yIG5hbWUgaWYgYXZhaWxhYmxlXG4gICAgY29uc3QgbmFtZSA9IG1lc3NhZ2UuYXV0aG9yID8gbWVzc2FnZS5hdXRob3IuaWQgOiAnVW5rbm93bic7XG5cbiAgICAvLyBDcmVhdGUgdGhlIGNoYXQgcHJldmlldyBtZXNzYWdlXG4gICAgY29uc3QgcHJldmlld01lc3NhZ2U6IENoYXRQcmV2aWV3TWVzc2FnZSA9IHtcbiAgICAgIGlkOiBtZXNzYWdlLmlkLFxuICAgICAgc2VuZFRpbWU6IG5ldyBEYXRlKG1lc3NhZ2UuYXVkaXRJbmZvPy5jcmVhdGVkPy5hdCB8fCBuZXcgRGF0ZSgpKSxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLCAvLyBBc3N1bWluZyBcInJlYWRcIiB3aGVuIGNvbnZlcnRlZFxuICAgICAgdHlwZTogbWVzc2FnZVR5cGUsXG4gICAgICBjb250ZW50OiBtZXNzYWdlLm1lc3NhZ2U/LmNvbnRlbnQgfHwgJycsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdXNlck5hbWUsXG4gICAgfTtcblxuICAgIC8vIEFkZCBmcm9tSWQgaWYgdGhlIG1lc3NhZ2UgaXMgbm90IGZyb20gY3VycmVudCB1c2VyXG4gICAgaWYgKGN1cnJlbnRVc2VySWQgIT09IG1lc3NhZ2UuYXV0aG9yLmlkKSB7XG4gICAgICBwcmV2aWV3TWVzc2FnZS5mcm9tSWQgPSBtZXNzYWdlLmF1dGhvcj8uaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZXZpZXdNZXNzYWdlLnNob3dBY3Rpb25CdXR0b24gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IFJlcGx5IGluZm9ybWF0aW9uIHdvdWxkIG5lZWQgdG8gYmUgbG9va2VkIHVwIGZyb20gdGhlIGFjdHVhbCBtZXNzYWdlc1xuICAgIC8vIFRoaXMgd291bGQgdHlwaWNhbGx5IGJlIGRvbmUgYnkgdGhlIHNlcnZpY2UgdGhhdCBoYXMgYWNjZXNzIHRvIGFsbCBtZXNzYWdlc1xuXG4gICAgcmV0dXJuIHByZXZpZXdNZXNzYWdlO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgQ2hhdFByZXZpZXdNZXNzYWdlIGZyb20gcmVwbHkgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG9yaWdpbmFsIG1lc3NhZ2UgdGhhdCBpcyBiZWluZyByZWZlcmVuY2VkXG4gKiBAcmV0dXJucyBBIENoYXRQcmV2aWV3TWVzc2FnZSBmb3JtYXR0ZWQgZm9yIHVzZSBhcyBhIHJlcGx5VG9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlcGx5UHJldmlldyhcbiAgY3VycmVudFVzZXJJZDogc3RyaW5nLFxuICBtZXNzYWdlOiBBWE1DaGF0TWVzc2FnZSxcbiAgdXNlck5hbWU/OiBzdHJpbmcsXG4pOiBDaGF0UHJldmlld01lc3NhZ2UgfCB1bmRlZmluZWQge1xuICBpZiAoIW1lc3NhZ2UpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogbWVzc2FnZS5pZCxcbiAgICBzZW5kVGltZTogbmV3IERhdGUobWVzc2FnZS5hdWRpdEluZm8/LmNyZWF0ZWQ/LmF0IHx8IG5ldyBEYXRlKCkpLFxuICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgIHR5cGU6XG4gICAgICBtZXNzYWdlLm1lc3NhZ2U/LmNvbnRlbnRUeXBlID09PSAnaW1hZ2UnXG4gICAgICAgID8gJ2ltYWdlJ1xuICAgICAgICA6IG1lc3NhZ2UubWVzc2FnZT8uY29udGVudFR5cGUgPT09ICd2aWRlbydcbiAgICAgICAgICA/ICd2aWRlbydcbiAgICAgICAgICA6IG1lc3NhZ2UubWVzc2FnZT8uY29udGVudFR5cGUgPT09ICdmaWxlJ1xuICAgICAgICAgICAgPyAnZmlsZSdcbiAgICAgICAgICAgIDogJ3RleHQnLFxuICAgIGNvbnRlbnQ6IG1lc3NhZ2UubWVzc2FnZT8uY29udGVudCB8fCAnJyxcbiAgICBuYW1lOiBtZXNzYWdlLmF1dGhvcj8uaWQgfHwgJ1Vua25vd24nLFxuICAgIGZyb21JZDogY3VycmVudFVzZXJJZCAhPT0gbWVzc2FnZS5hdXRob3IuaWQgPyBtZXNzYWdlLmF1dGhvcj8uaWQgOiB1bmRlZmluZWQsXG4gICAgc2hvd0FjdGlvbkJ1dHRvbjogdHJ1ZSxcbiAgICB1c2VyTmFtZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBkZW1vIGNoYXQgcHJldmlldyBkYXRhIHdpdGggYSB2YXJpZXR5IG9mIG1lc3NhZ2UgdHlwZXNcbiAqIEByZXR1cm5zIEFycmF5IG9mIHNhbXBsZSBjaGF0IHByZXZpZXcgbWVzc2FnZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRGVtb0NoYXRQcmV2aWV3KCk6IENoYXRQcmV2aWV3TWVzc2FnZVtdIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBpZDogJzAnLFxuICAgICAgc2VuZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAndGV4dCcsXG4gICAgICByZWFkVGltZTogbmV3IERhdGUoKSxcbiAgICAgIGNvbnRlbnQ6ICdIZWxsbyBKb2huLCBIb3cgYXJlIHlvdT8nLFxuICAgICAgbmFtZTogJ3Rlc3QgbmFtZScsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzEnLFxuICAgICAgZnJvbUlkOiAnMTAnLFxuICAgICAgc2VuZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICByZWFkVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIGNvbnRlbnQ6ICdIZWxsbycsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIHJlcGx5VG86IHtcbiAgICAgICAgaWQ6ICcwJyxcbiAgICAgICAgc2VuZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgcmVhZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgIGNvbnRlbnQ6ICdIZWxsbyBKb2huLCBIb3cgYXJlIHlvdT8nLFxuICAgICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzInLFxuICAgICAgZnJvbUlkOiAnMTAnLFxuICAgICAgc2VuZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICByZWFkVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHR5cGU6ICd2b2ljZScsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIGNvbnRlbnQ6IGBkYXRhOmF1ZGlvL3dlYm07Y29kZWNzPW9wdXM7YmFzZTY0LEdrWGZvRUYzNGZKYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnMycsXG4gICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgY29udGVudDogJ0NhbiBpIGhhdmUgeW91ciBhZGRyZXNzIGluZm9ybWF0aW9uPycsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIHJlcGx5VG86IHtcbiAgICAgICAgaWQ6ICcxJyxcbiAgICAgICAgZnJvbUlkOiAnMTAnLFxuICAgICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgcmVhZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgY29udGVudDogJ0hlbGxvJyxcbiAgICAgICAgbmFtZTogJ3Rlc3QgbmFtZScsXG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICc0JyxcbiAgICAgIGZyb21JZDogJzEwJyxcbiAgICAgIHNlbmRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgcmVhZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAnZmlsZScsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIGNvbnRlbnQ6IGBkYXRhOmF1ZGlvL3dlYm07Y29kZWNzPW9wdXM7YmFzZTY0LEdrWGZvRUYzNGZKYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnNScsXG4gICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgIG5hbWU6ICd0ZXN0IG5hbWUnLFxuICAgICAgY29udGVudDogYGh0dHBzOi8vcGljc3VtLnBob3Rvcy8zMDAvMjAwYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnNicsXG4gICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgdHlwZTogJ3ZpZGVvJyxcbiAgICAgIG5hbWU6ICd0ZXN0IG5hbWUnLFxuICAgICAgY29udGVudDogYGh0dHBzOi8vd3d3LnBleGVscy5jb20vZG93bmxvYWQvdmlkZW8vNTQ5NTMyMi8/ZnBzPTI5Ljk3Jmg9NTQwJnc9OTYwYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnNycsXG4gICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgY29udGVudDogJ0hlbGxvIEpvaG4sIEhvdyBhcmUgeW91PycsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnOCcsXG4gICAgICBmcm9tSWQ6ICcxMCcsXG4gICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgdHlwZTogJ2F1ZGlvJyxcbiAgICAgIG5hbWU6ICdraWRzJyxcbiAgICAgIGNvbnRlbnQ6IGBodHRwczovL2FjdGlvbnMuZ29vZ2xlLmNvbS9zb3VuZHMvdjEvYW1iaWVuY2VzL2tpZHNfcGxheWluZy5vZ2dgLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICc5JyxcbiAgICAgIGZyb21JZDogJzEwJyxcbiAgICAgIHNlbmRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgcmVhZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgbmFtZTogJ3Rlc3QgbmFtZScsXG4gICAgICBjb250ZW50OiBgaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzMwMC8yMDBgLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICcxMCcsXG4gICAgICBmcm9tSWQ6ICcxMCcsXG4gICAgICBzZW5kVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHJlYWRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgIG5hbWU6ICd0ZXN0IG5hbWUnLFxuICAgICAgY29udGVudDogYGh0dHBzOi8vcGljc3VtLnBob3Rvcy8yMDAvMzAwYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnMTEnLFxuICAgICAgZnJvbUlkOiAnMTAnLFxuICAgICAgc2VuZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICByZWFkVGltZTogbmV3IERhdGUoKSxcbiAgICAgIHR5cGU6ICd2aWRlbycsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIGNvbnRlbnQ6IGBodHRwczovL3d3dy5wZXhlbHMuY29tL2Rvd25sb2FkL3ZpZGVvLzU0OTUzMjIvP2Zwcz0yOS45NyZoPTU0MCZ3PTk2MGAsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzEyJyxcbiAgICAgIHNlbmRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgcmVhZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAnZmlsZScsXG4gICAgICBuYW1lOiAndGVzdCBuYW1lJyxcbiAgICAgIGNvbnRlbnQ6IGBkYXRhOmF1ZGlvL3dlYm07Y29kZWNzPW9wdXM7YmFzZTY0LEdrWGZvNTlDaG9FK3U1QnhIVkw3WkFTMUVGMzRmSmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzEzJyxcbiAgICAgIHNlbmRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgcmVhZFRpbWU6IG5ldyBEYXRlKCksXG4gICAgICB0eXBlOiAnYXVkaW8nLFxuICAgICAgbmFtZTogJ2FsYXJtJyxcbiAgICAgIGNvbnRlbnQ6IGBodHRwczovL2FjdGlvbnMuZ29vZ2xlLmNvbS9zb3VuZHMvdjEvYWxhcm1zL2RpZ2l0YWxfd2F0Y2hfYWxhcm1fbG9uZy5vZ2dgLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogVXNhZ2UgRXhhbXBsZXM6XG4gKlxuICogRXhhbXBsZSAxOiBDb252ZXJ0aW5nIGNoYXQgc2VydmljZSByZXNwb25zZSB0byBjaGF0IHByZXZpZXcgZm9ybWF0XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBBWE1DaGF0U2VydmljZSB9IGZyb20gJy4uL2NoYXQuc2VydmljZSc7XG4gKiBpbXBvcnQgeyBjb252ZXJ0VG9DaGF0UHJldmlldyB9IGZyb20gJy4vY2hhdC1wcmV2aWV3LmhlbHBlcic7XG4gKlxuICogZXhwb3J0IGNsYXNzIENoYXRQcmV2aWV3Q29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGF0U2VydmljZTogQVhNQ2hhdFNlcnZpY2UpIHt9XG4gKlxuICogICBhc3luYyBsb2FkQ2hhdE1lc3NhZ2VzKHJvb21JZDogc3RyaW5nKSB7XG4gKiAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmdldENoYXRNZXNzYWdlcyhyb29tSWQpO1xuICpcbiAqICAgICAvLyBDb252ZXJ0IHRvIGNoYXQgcHJldmlldyBmb3JtYXRcbiAqICAgICBjb25zdCBwcmV2aWV3TWVzc2FnZXMgPSBjb252ZXJ0VG9DaGF0UHJldmlldyhyZXNwb25zZSk7XG4gKlxuICogICAgIC8vIFVzZSB0aGUgY29udmVydGVkIG1lc3NhZ2VzXG4gKiAgICAgdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmNoYXRzLnNldChwcmV2aWV3TWVzc2FnZXMpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBFeGFtcGxlIDI6IFVzaW5nIGRlbW8gZGF0YSBmb3IgZGV2ZWxvcG1lbnQvdGVzdGluZ1xuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgZ2VuZXJhdGVEZW1vQ2hhdFByZXZpZXcgfSBmcm9tICcuL2NoYXQtcHJldmlldy5oZWxwZXInO1xuICpcbiAqIGV4cG9ydCBjbGFzcyBDaGF0UHJldmlld0RlbW9Db21wb25lbnQge1xuICogICBuZ09uSW5pdCgpIHtcbiAqICAgICAvLyBMb2FkIGRlbW8gbWVzc2FnZXNcbiAqICAgICBjb25zdCBkZW1vTWVzc2FnZXMgPSBnZW5lcmF0ZURlbW9DaGF0UHJldmlldygpO1xuICpcbiAqICAgICAvLyBVc2UgdGhlIGRlbW8gbWVzc2FnZXNcbiAqICAgICB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuY2hhdHMuc2V0KGRlbW9NZXNzYWdlcyk7XG4gKiAgIH1cbiAqIH1cbiAqL1xuIl19","import { AXDomChangeDirective } from '@acorex/cdk/dom';\nimport { AXConversationInputComponent, AXConversationModule, } from '@acorex/components/conversation';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXFileService } from '@acorex/core/file';\nimport { AXUnsubscriber } from '@acorex/core/utils';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { CommonModule } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, computed, inject, signal, viewChild, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { debounceTime, Subject } from 'rxjs';\nimport { AXMChatManagementService } from '../../chat-management.service';\nimport { convertToChatPreview } from '../../chat-preview.helper';\nimport { AXMChatRealtimeService } from '../../chat-realtime.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@acorex/components/conversation\";\nimport * as i3 from \"@acorex/components/loading\";\nexport class AXMChatPreviewComponent {\n constructor() {\n this.activatedRoute = inject(ActivatedRoute);\n this.fileService = inject(AXFileService);\n this.chatService = inject(AXMChatManagementService);\n this.realtimeService = inject(AXMChatRealtimeService);\n this.sessionService = inject(AXPSessionService);\n this.toastService = inject(AXToastService);\n this.unsubscribe = inject(AXUnsubscriber);\n this.inputRef = viewChild(AXConversationInputComponent, ...(ngDevMode ? [{ debugName: \"inputRef\" }] : []));\n this.activeMessage = signal(null, ...(ngDevMode ? [{ debugName: \"activeMessage\" }] : []));\n this.typing$ = new Subject();\n this.chatData = signal([], ...(ngDevMode ? [{ debugName: \"chatData\" }] : []));\n this.room = signal(null, ...(ngDevMode ? [{ debugName: \"room\" }] : []));\n this.isEditing = signal(false, ...(ngDevMode ? [{ debugName: \"isEditing\" }] : []));\n this.editId = signal(null, ...(ngDevMode ? [{ debugName: \"editId\" }] : []));\n this.height = signal(0, ...(ngDevMode ? [{ debugName: \"height\" }] : []));\n this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n this.error = signal(null, ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n this.isChannel = computed(() => this.room()?.topic === 'channel', ...(ngDevMode ? [{ debugName: \"isChannel\" }] : []));\n this.options = signal({\n disabled: false,\n readonly: false,\n value: '',\n }, ...(ngDevMode ? [{ debugName: \"options\" }] : []));\n this.roomId = '';\n //GO TO LAST MESSAGE EFFECT.\n this.#af = afterNextRender(() => {\n setTimeout(() => {\n const div = document.querySelector('ax-conversation-view > div');\n if (div) {\n div.scrollTo({ top: div.scrollHeight, behavior: 'smooth' });\n }\n }, 500);\n });\n }\n setHeight(height) {\n this.height.set(height);\n }\n ngOnInit() {\n this.activatedRoute.params.subscribe((params) => {\n this.roomId = params['id'];\n if (this.roomId) {\n this.loadMessages(this.roomId);\n this.loadRoomInfo(this.roomId);\n }\n });\n this.realtimeService.message$.pipe(this.unsubscribe.takeUntilDestroy).subscribe(async (event) => {\n if (event.type === 'add') {\n const message = event.payload;\n if (message.author.id !== this.sessionService.user?.id && message.roomId === this.roomId) {\n await this.chatService.markSeen(message.id);\n this.chatData.update((values) => {\n const newMessage = convertToChatPreview(this.sessionService.user?.id || '', {\n items: [message],\n total: 1,\n })[0];\n return [...values, newMessage];\n });\n }\n }\n else if (event.type === 'remove') {\n this.chatData.update((values) => values.filter((item) => item.id !== event.payload));\n }\n else if (event.type === 'update') {\n const message = event.payload;\n const convertedNewMessage = convertToChatPreview(this.sessionService.user?.id || '', {\n items: [message],\n total: 1,\n })[0];\n this.chatData.update((values) => values.map((item) => (item.id === message.id ? { ...convertedNewMessage, ...item } : item)));\n }\n });\n this.typingSubscription = this.typing$.pipe(debounceTime(1000)).subscribe(() => {\n if (this.roomId) {\n this.chatService.stopTyping(this.roomId);\n }\n });\n }\n //GO TO LAST MESSAGE EFFECT.\n #af;\n ngOnDestroy() {\n this.typingSubscription?.unsubscribe();\n }\n handleTyping(event) {\n if (this.roomId) {\n this.chatService.startTyping(this.roomId);\n this.typing$.next();\n }\n }\n handleFileChange(event) {\n console.log('File Changed:', event);\n }\n handleCancelRecord(event) {\n console.log('Recording Cancelled:', event);\n }\n handleEndRecord(event) {\n this.fileService.blobToBase64(event.data.value).then((base64Content) => {\n // Create a properly formatted chat preview message for voice\n const newVoiceMessage = {\n id: `${Math.floor(Math.random() * 10000)}`,\n content: base64Content,\n sendTime: new Date(),\n readTime: new Date(),\n type: 'voice',\n name: 'test name',\n };\n this.chatData.update((values) => [...values, newVoiceMessage]);\n });\n }\n handleOnSend(e) {\n if (this.isEditing() && this.editId()) {\n this.chatService\n .editMessage(this.editId(), e.data.value, e.data.type || 'text')\n .then((newMessage) => {\n const convertedNewMessage = convertToChatPreview(this.sessionService.user?.id || '', {\n items: [newMessage],\n total: 1,\n })[0];\n this.chatData.update((values) => values.map((item) => (item.id === this.editId() ? { ...convertedNewMessage } : item)));\n this.editId.set(null);\n this.options.update((prev) => ({ ...prev, value: '' }));\n this.isEditing.set(false);\n })\n .catch((error) => {\n this.toastService.danger('Failed to edit message');\n });\n }\n else {\n if (e.data.value && this.roomId) {\n const replyId = e.data.replyChat?.id;\n this.chatService\n .sendMessage(this.roomId, e.data.value, e.data.type || 'text', replyId)\n .then((newMessage) => {\n const convertedNewMessage = convertToChatPreview(this.sessionService.user?.id || '', {\n items: [newMessage],\n total: 1,\n })[0];\n this.chatData.update((values) => [...values, { ...convertedNewMessage, replyTo: replyId }]);\n this.options.update((prev) => ({ ...prev, value: '' }));\n this.scrollToEnd();\n })\n .catch((error) => {\n this.toastService.danger('Failed to send message');\n });\n }\n }\n }\n handleEnter() {\n if (this.options().value && this.roomId) {\n this.handleOnSend({ data: { value: this.options().value } });\n }\n }\n handleOnAction(e) {\n console.log('Action Triggered:', e);\n }\n scrollToEnd() {\n const conversationView = document.querySelector('ax-conversation-view');\n if (conversationView) {\n conversationView.scrollTo({\n top: conversationView.scrollHeight,\n behavior: 'smooth',\n });\n }\n }\n async loadMessages(roomId) {\n this.isLoading.set(true);\n this.error.set(null);\n try {\n // Get messages from the chat service\n const messageResponse = await this.chatService.getMessages(roomId);\n // Convert to chat preview format\n const chatPreviewMessages = convertToChatPreview(this.sessionService.user?.id || '', messageResponse).sort((a, b) => {\n return new Date(a.sendTime).getTime() - new Date(b.sendTime).getTime();\n });\n // Set the messages in the conversation service\n this.chatData.set(chatPreviewMessages);\n }\n catch (error) {\n this.error.set('Failed to load messages. Please try again.');\n console.error('Failed to load messages:', error);\n }\n finally {\n this.isLoading.set(false);\n }\n }\n async loadRoomInfo(roomId) {\n try {\n const roomData = await this.chatService.getRoom(roomId);\n this.room.set(roomData);\n }\n catch (error) {\n console.error('Failed to load room info:', error);\n }\n }\n addItemHandler(e) {\n this.activeMessage.set(e.data);\n if (e.data.fromId) {\n e.canceled = true;\n return;\n }\n const userItem = [];\n if (e.data.type === 'text') {\n userItem.push({\n text: 'Edit',\n color: 'primary',\n icon: 'fa-solid fa-pencil',\n onClick: (id) => {\n try {\n this.isEditing.set(true);\n this.editId.set(e.data.id);\n this.options.update((prev) => ({ ...prev, value: e.data.content }));\n this.addInputOverlay('edit', e.data);\n }\n catch (error) {\n this.toastService.danger('Failed to edit message');\n }\n },\n });\n }\n if (e.data.type === 'text') {\n userItem.push({\n text: 'Delete',\n color: 'danger',\n icon: 'fa-solid fa-trash-can',\n onClick: (id) => {\n try {\n this.chatService.deleteMessage(id).then((res) => {\n this.chatData.update((values) => values.filter((item) => item.id !== id));\n if (!res) {\n this.toastService.danger('Failed to delete message');\n }\n });\n }\n catch (error) {\n this.toastService.danger('Failed to delete message');\n }\n },\n });\n }\n e.items.push(...userItem);\n }\n addInputOverlay(type, message) {\n const input = this.inputRef();\n const icon = type === 'reply' ? 'fa-solid fa-reply' : 'fa-solid fa-pencil';\n if (input) {\n input.setActionBoxContainer(icon, message?.content || this.activeMessage()?.content || '');\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMChatPreviewComponent, isStandalone: true, selector: \"axm-chat-preview\", viewQueries: [{ propertyName: \"inputRef\", first: true, predicate: AXConversationInputComponent, descendants: true, isSignal: true }], ngImport: i0, template: \"@if (isLoading()) {\\n <div class=\\\"ax-h-full ax-w-full ax-flex ax-items-center ax-justify-center\\\">\\n <ax-loading></ax-loading>\\n </div>\\n} @else if (error()) {\\n <div class=\\\"ax-h-full ax-w-full ax-flex ax-items-center ax-justify-center\\\">\\n <div class=\\\"ax-text-center\\\">\\n <p class=\\\"ax-text-danger\\\">{{ error() }}</p>\\n <button (click)=\\\"loadMessages(roomId)\\\" class=\\\"ax-mt-2 ax-button ax-primary\\\">Retry</button>\\n </div>\\n </div>\\n} @else {\\n <div\\n axDomChange\\n (axResizeObserver)=\\\"setHeight($event[0].contentRect.height)\\\"\\n class=\\\"ax-bg-surface-container ax-h-full\\\"\\n >\\n <!-- Messages Container -->\\n <ax-conversation-container class=\\\"ax-overflow-hidden\\\" [chatData]=\\\"chatData()\\\">\\n <ax-conversation-view\\n (onActionMenuOpening)=\\\"addItemHandler($event)\\\"\\n (onAction)=\\\"handleOnAction($event)\\\"\\n (onReplyClick)=\\\"addInputOverlay('reply', $event.data)\\\"\\n [chatBoxHeight]=\\\"height() - (isChannel() ? 5 : 68) + 'px'\\\"\\n ></ax-conversation-view>\\n @if (!isChannel()) {\\n <ax-conversation-input\\n class=\\\"ax-px-2\\\"\\n placeholder=\\\"Type a message...\\\"\\n [(ngModel)]=\\\"options().value\\\"\\n (ngModelChange)=\\\"handleTyping($event)\\\"\\n (onSendClick)=\\\"handleOnSend($event)\\\"\\n (onFileChange)=\\\"handleFileChange($event)\\\"\\n (onStopRecording)=\\\"handleEndRecord($event)\\\"\\n (onCancelRecording)=\\\"handleCancelRecord($event)\\\"\\n (onEnterPressed)=\\\"handleEnter()\\\"\\n ></ax-conversation-input>\\n }\\n </ax-conversation-container>\\n </div>\\n}\\n\", styles: [\":host{display:block;width:100%;height:100%}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: AXDomChangeDirective, selector: \"[axDomChange]\", outputs: [\"axMutationObserver\", \"axResizeObserver\"] }, { kind: \"ngmodule\", type: AXConversationModule }, { kind: \"component\", type: i2.AXConversationViewComponent, selector: \"ax-conversation-view\", inputs: [\"chatBoxHeight\", \"isReplyArrowShown\", \"avatar\"], outputs: [\"onActionMenuOpening\", \"onAction\", \"onReplyClick\", \"onScrollEnd\"] }, { kind: \"component\", type: i2.AXConversationInputComponent, selector: \"ax-conversation-input\", inputs: [\"look\", \"placeholder\", \"maxLength\", \"hasAttachment\", \"hasVoice\", \"hasEmoji\", \"isLoading\", \"acceptFileType\"], outputs: [\"onActionClose\", \"onSendClick\", \"onStartRecording\", \"onCancelRecording\", \"onEnterPressed\"] }, { kind: \"component\", type: i2.AXConversationContainerComponent, selector: \"ax-conversation-container\", inputs: [\"chatData\"] }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"component\", type: i3.AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatPreviewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-chat-preview', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormsModule, AXDomChangeDirective, AXConversationModule, AXLoadingModule], template: \"@if (isLoading()) {\\n <div class=\\\"ax-h-full ax-w-full ax-flex ax-items-center ax-justify-center\\\">\\n <ax-loading></ax-loading>\\n </div>\\n} @else if (error()) {\\n <div class=\\\"ax-h-full ax-w-full ax-flex ax-items-center ax-justify-center\\\">\\n <div class=\\\"ax-text-center\\\">\\n <p class=\\\"ax-text-danger\\\">{{ error() }}</p>\\n <button (click)=\\\"loadMessages(roomId)\\\" class=\\\"ax-mt-2 ax-button ax-primary\\\">Retry</button>\\n </div>\\n </div>\\n} @else {\\n <div\\n axDomChange\\n (axResizeObserver)=\\\"setHeight($event[0].contentRect.height)\\\"\\n class=\\\"ax-bg-surface-container ax-h-full\\\"\\n >\\n <!-- Messages Container -->\\n <ax-conversation-container class=\\\"ax-overflow-hidden\\\" [chatData]=\\\"chatData()\\\">\\n <ax-conversation-view\\n (onActionMenuOpening)=\\\"addItemHandler($event)\\\"\\n (onAction)=\\\"handleOnAction($event)\\\"\\n (onReplyClick)=\\\"addInputOverlay('reply', $event.data)\\\"\\n [chatBoxHeight]=\\\"height() - (isChannel() ? 5 : 68) + 'px'\\\"\\n ></ax-conversation-view>\\n @if (!isChannel()) {\\n <ax-conversation-input\\n class=\\\"ax-px-2\\\"\\n placeholder=\\\"Type a message...\\\"\\n [(ngModel)]=\\\"options().value\\\"\\n (ngModelChange)=\\\"handleTyping($event)\\\"\\n (onSendClick)=\\\"handleOnSend($event)\\\"\\n (onFileChange)=\\\"handleFileChange($event)\\\"\\n (onStopRecording)=\\\"handleEndRecord($event)\\\"\\n (onCancelRecording)=\\\"handleCancelRecord($event)\\\"\\n (onEnterPressed)=\\\"handleEnter()\\\"\\n ></ax-conversation-input>\\n }\\n </ax-conversation-container>\\n </div>\\n}\\n\", styles: [\":host{display:block;width:100%;height:100%}\\n\"] }]\n }], propDecorators: { inputRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXConversationInputComponent), { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jaGF0L2NvbXBvbmVudHMvY2hhdC1wcmV2aWV3L2NoYXQtcHJldmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY2hhdC9jb21wb25lbnRzL2NoYXQtcHJldmlldy9jaGF0LXByZXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUVMLDRCQUE0QixFQUk1QixvQkFBb0IsR0FDckIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUdOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFB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RUFBRSxDQUFDO1lBQ1YsS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0YsQ0FBQztJQUNILENBQUM7K0dBL1FVLHVCQUF1QjttR0FBdkIsdUJBQXVCLHNIQVN5Qiw0QkFBNEIsZ0VDbkR6RixrbURBeUNBLHNHRERZLFlBQVksOEJBQUUsV0FBVywrVkFBRSxvQkFBb0IsOEdBQUUsb0JBQW9CLGdzQkFBRSxlQUFlOzs0RkFFckYsdUJBQXVCO2tCQVJuQyxTQUFTOytCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxDQUFDOzBGQVd0Qyw0QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWERvbUNoYW5nZURpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvY2RrL2RvbSc7XG5pbXBvcnQge1xuICBBWENvbnZlcnNhdGlvbkFjdGlvbkV2ZW50LFxuICBBWENvbnZlcnNhdGlvbklucHV0Q29tcG9uZW50LFxuICBBWENvbnZlcnNhdGlvbk1lbnVPcGVuaW5nRXZlbnQsXG4gIEFYQ29udmVyc2F0aW9uTWVzc2FnZSxcbiAgQVhDb252ZXJzYXRpb25NZXNzYWdlQWN0aW9uLFxuICBBWENvbnZlcnNhdGlvbk1vZHVsZSxcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbnZlcnNhdGlvbic7XG5pbXBvcnQgeyBBWExvYWRpbmdNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZyc7XG5pbXBvcnQgeyBBWFRvYXN0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b2FzdCc7XG5pbXBvcnQgeyBBWEZpbGVTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2ZpbGUnO1xuaW1wb3J0IHsgQVhVbnN1YnNjcmliZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgQVhQU2Vzc2lvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2F1dGgnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYTUNoYXRNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NoYXQtbWFuYWdlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbnZlcnRUb0NoYXRQcmV2aWV3IH0gZnJvbSAnLi4vLi4vY2hhdC1wcmV2aWV3LmhlbHBlcic7XG5pbXBvcnQgeyBBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2hhdC1yZWFsdGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTUNoYXRSb29tIH0gZnJvbSAnLi4vLi4vY2hhdC50eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhtLWNoYXQtcHJldmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGF0LXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGF0LXByZXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBBWERvbUNoYW5nZURpcmVjdGl2ZSwgQVhDb252ZXJzYXRpb25Nb2R1bGUsIEFYTG9hZGluZ01vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTUNoYXRQcmV2aWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSBmaWxlU2VydmljZSA9IGluamVjdChBWEZpbGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjaGF0U2VydmljZSA9IGluamVjdChBWE1DaGF0TWFuYWdlbWVudFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWx0aW1lU2VydmljZSA9IGluamVjdChBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzZXNzaW9uU2VydmljZSA9IGluamVjdChBWFBTZXNzaW9uU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3RTZXJ2aWNlID0gaW5qZWN0KEFYVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSA9IGluamVjdChBWFVuc3Vic2NyaWJlcik7XG5cbiAgcHJpdmF0ZSBpbnB1dFJlZiA9IHZpZXdDaGlsZDxBWENvbnZlcnNhdGlvbklucHV0Q29tcG9uZW50PihBWENvbnZlcnNhdGlvbklucHV0Q29tcG9uZW50KTtcbiAgcHJpdmF0ZSBhY3RpdmVNZXNzYWdlID0gc2lnbmFsPEFYQ29udmVyc2F0aW9uTWVzc2FnZSB8IG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgdHlwaW5nJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgdHlwaW5nU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIHByb3RlY3RlZCBjaGF0RGF0YSA9IHNpZ25hbDxBWENvbnZlcnNhdGlvbk1lc3NhZ2VbXT4oW10pO1xuICBwcm90ZWN0ZWQgcm9vbSA9IHNpZ25hbDxBWE1DaGF0Um9vbSB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgaXNFZGl0aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIGVkaXRJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIGhlaWdodCA9IHNpZ25hbCgwKTtcbiAgcHJvdGVjdGVkIGlzTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBlcnJvciA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICBwcm90ZWN0ZWQgaXNDaGFubmVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yb29tKCk/LnRvcGljID09PSAnY2hhbm5lbCcpO1xuXG4gIHByb3RlY3RlZCBzZXRIZWlnaHQoaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLmhlaWdodC5zZXQoaGVpZ2h0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvcHRpb25zID0gc2lnbmFsKHtcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgcmVhZG9ubHk6IGZhbHNlLFxuICAgIHZhbHVlOiAnJyxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIHJvb21JZDogc3RyaW5nID0gJyc7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcbiAgICAgIHRoaXMucm9vbUlkID0gcGFyYW1zWydpZCddO1xuICAgICAgaWYgKHRoaXMucm9vbUlkKSB7XG4gICAgICAgIHRoaXMubG9hZE1lc3NhZ2VzKHRoaXMucm9vbUlkKTtcbiAgICAgICAgdGhpcy5sb2FkUm9vbUluZm8odGhpcy5yb29tSWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2UubWVzc2FnZSQucGlwZSh0aGlzLnVuc3Vic2NyaWJlLnRha2VVbnRpbERlc3Ryb3kpLnN1YnNjcmliZShhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAnYWRkJykge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gZXZlbnQucGF5bG9hZDtcbiAgICAgICAgaWYgKG1lc3NhZ2UuYXV0aG9yLmlkICE9PSB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI/LmlkICYmIG1lc3NhZ2Uucm9vbUlkID09PSB0aGlzLnJvb21JZCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UubWFya1NlZW4obWVzc2FnZS5pZCk7XG4gICAgICAgICAgdGhpcy5jaGF0RGF0YS51cGRhdGUoKHZhbHVlcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3TWVzc2FnZSA9IGNvbnZlcnRUb0NoYXRQcmV2aWV3KHRoaXMuc2Vzc2lvblNlcnZpY2UudXNlcj8uaWQgfHwgJycsIHtcbiAgICAgICAgICAgICAgaXRlbXM6IFttZXNzYWdlXSxcbiAgICAgICAgICAgICAgdG90YWw6IDEsXG4gICAgICAgICAgICB9KVswXTtcbiAgICAgICAgICAgIHJldHVybiBbLi4udmFsdWVzLCBuZXdNZXNzYWdlXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAncmVtb3ZlJykge1xuICAgICAgICB0aGlzLmNoYXREYXRhLnVwZGF0ZSgodmFsdWVzKSA9PiB2YWx1ZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlkICE9PSBldmVudC5wYXlsb2FkKSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICd1cGRhdGUnKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBldmVudC5wYXlsb2FkO1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWROZXdNZXNzYWdlID0gY29udmVydFRvQ2hhdFByZXZpZXcodGhpcy5zZXNzaW9uU2VydmljZS51c2VyPy5pZCB8fCAnJywge1xuICAgICAgICAgIGl0ZW1zOiBbbWVzc2FnZV0sXG4gICAgICAgICAgdG90YWw6IDEsXG4gICAgICAgIH0pWzBdO1xuICAgICAgICB0aGlzLmNoYXREYXRhLnVwZGF0ZSgodmFsdWVzKSA9PlxuICAgICAgICAgIHZhbHVlcy5tYXAoKGl0ZW0pID0+IChpdGVtLmlkID09PSBtZXNzYWdlLmlkID8geyAuLi5jb252ZXJ0ZWROZXdNZXNzYWdlLCAuLi5pdGVtIH0gOiBpdGVtKSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnR5cGluZ1N1YnNjcmlwdGlvbiA9IHRoaXMudHlwaW5nJC5waXBlKGRlYm91bmNlVGltZSgxMDAwKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnJvb21JZCkge1xuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlLnN0b3BUeXBpbmcodGhpcy5yb29tSWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy9HTyBUTyBMQVNUIE1FU1NBR0UgRUZGRUNULlxuICAjYWYgPSBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXgtY29udmVyc2F0aW9uLXZpZXcgPiBkaXYnKTtcbiAgICAgIGlmIChkaXYpIHtcbiAgICAgICAgZGl2LnNjcm9sbFRvKHsgdG9wOiBkaXYuc2Nyb2xsSGVpZ2h0LCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICB9XG4gICAgfSwgNTAwKTtcbiAgfSk7XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy50eXBpbmdTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBoYW5kbGVUeXBpbmcoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJvb21JZCkge1xuICAgICAgdGhpcy5jaGF0U2VydmljZS5zdGFydFR5cGluZyh0aGlzLnJvb21JZCk7XG4gICAgICB0aGlzLnR5cGluZyQubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUZpbGVDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdGaWxlIENoYW5nZWQ6JywgZXZlbnQpO1xuICB9XG5cbiAgaGFuZGxlQ2FuY2VsUmVjb3JkKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnUmVjb3JkaW5nIENhbmNlbGxlZDonLCBldmVudCk7XG4gIH1cblxuICBoYW5kbGVFbmRSZWNvcmQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZmlsZVNlcnZpY2UuYmxvYlRvQmFzZTY0KGV2ZW50LmRhdGEudmFsdWUpLnRoZW4oKGJhc2U2NENvbnRlbnQpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBhIHByb3Blcmx5IGZvcm1hdHRlZCBjaGF0IHByZXZpZXcgbWVzc2FnZSBmb3Igdm9pY2VcbiAgICAgIGNvbnN0IG5ld1ZvaWNlTWVzc2FnZTogQVhDb252ZXJzYXRpb25NZXNzYWdlID0ge1xuICAgICAgICBpZDogYCR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDApfWAsXG4gICAgICAgIGNvbnRlbnQ6IGJhc2U2NENvbnRlbnQsXG4gICAgICAgIHNlbmRUaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICByZWFkVGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgdHlwZTogJ3ZvaWNlJyxcbiAgICAgICAgbmFtZTogJ3Rlc3QgbmFtZScsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNoYXREYXRhLnVwZGF0ZSgodmFsdWVzKSA9PiBbLi4udmFsdWVzLCBuZXdWb2ljZU1lc3NhZ2VdKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZU9uU2VuZChlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0VkaXRpbmcoKSAmJiB0aGlzLmVkaXRJZCgpKSB7XG4gICAgICB0aGlzLmNoYXRTZXJ2aWNlXG4gICAgICAgIC5lZGl0TWVzc2FnZSh0aGlzLmVkaXRJZCgpISwgZS5kYXRhLnZhbHVlLCBlLmRhdGEudHlwZSB8fCAndGV4dCcpXG4gICAgICAgIC50aGVuKChuZXdNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29udmVydGVkTmV3TWVzc2FnZSA9IGNvbnZlcnRUb0NoYXRQcmV2aWV3KHRoaXMuc2Vzc2lvblNlcnZpY2UudXNlcj8uaWQgfHwgJycsIHtcbiAgICAgICAgICAgIGl0ZW1zOiBbbmV3TWVzc2FnZV0sXG4gICAgICAgICAgICB0b3RhbDogMSxcbiAgICAgICAgICB9KVswXTtcbiAgICAgICAgICB0aGlzLmNoYXREYXRhLnVwZGF0ZSgodmFsdWVzKSA9PlxuICAgICAgICAgICAgdmFsdWVzLm1hcCgoaXRlbSkgPT4gKGl0ZW0uaWQgPT09IHRoaXMuZWRpdElkKCkgPyB7IC4uLmNvbnZlcnRlZE5ld01lc3NhZ2UgfSA6IGl0ZW0pKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuZWRpdElkLnNldChudWxsKTtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMudXBkYXRlKChwcmV2KSA9PiAoeyAuLi5wcmV2LCB2YWx1ZTogJycgfSkpO1xuICAgICAgICAgIHRoaXMuaXNFZGl0aW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIoJ0ZhaWxlZCB0byBlZGl0IG1lc3NhZ2UnKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlLmRhdGEudmFsdWUgJiYgdGhpcy5yb29tSWQpIHtcbiAgICAgICAgY29uc3QgcmVwbHlJZCA9IGUuZGF0YS5yZXBseUNoYXQ/LmlkO1xuICAgICAgICB0aGlzLmNoYXRTZXJ2aWNlXG4gICAgICAgICAgLnNlbmRNZXNzYWdlKHRoaXMucm9vbUlkLCBlLmRhdGEudmFsdWUsIGUuZGF0YS50eXBlIHx8ICd0ZXh0JywgcmVwbHlJZClcbiAgICAgICAgICAudGhlbigobmV3TWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVkTmV3TWVzc2FnZSA9IGNvbnZlcnRUb0NoYXRQcmV2aWV3KHRoaXMuc2Vzc2lvblNlcnZpY2UudXNlcj8uaWQgfHwgJycsIHtcbiAgICAgICAgICAgICAgaXRlbXM6IFtuZXdNZXNzYWdlXSxcbiAgICAgICAgICAgICAgdG90YWw6IDEsXG4gICAgICAgICAgICB9KVswXTtcbiAgICAgICAgICAgIHRoaXMuY2hhdERhdGEudXBkYXRlKCh2YWx1ZXMpID0+IFsuLi52YWx1ZXMsIHsgLi4uY29udmVydGVkTmV3TWVzc2FnZSwgcmVwbHlUbzogcmVwbHlJZCB9XSk7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMudXBkYXRlKChwcmV2KSA9PiAoeyAuLi5wcmV2LCB2YWx1ZTogJycgfSkpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0VuZCgpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKCdGYWlsZWQgdG8gc2VuZCBtZXNzYWdlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRW50ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucygpLnZhbHVlICYmIHRoaXMucm9vbUlkKSB7XG4gICAgICB0aGlzLmhhbmRsZU9uU2VuZCh7IGRhdGE6IHsgdmFsdWU6IHRoaXMub3B0aW9ucygpLnZhbHVlIH0gfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlT25BY3Rpb24oZTogQVhDb252ZXJzYXRpb25BY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdBY3Rpb24gVHJpZ2dlcmVkOicsIGUpO1xuICB9XG5cbiAgc2Nyb2xsVG9FbmQoKTogdm9pZCB7XG4gICAgY29uc3QgY29udmVyc2F0aW9uVmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2F4LWNvbnZlcnNhdGlvbi12aWV3Jyk7XG4gICAgaWYgKGNvbnZlcnNhdGlvblZpZXcpIHtcbiAgICAgIGNvbnZlcnNhdGlvblZpZXcuc2Nyb2xsVG8oe1xuICAgICAgICB0b3A6IGNvbnZlcnNhdGlvblZpZXcuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkTWVzc2FnZXMocm9vbUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5lcnJvci5zZXQobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBtZXNzYWdlcyBmcm9tIHRoZSBjaGF0IHNlcnZpY2VcbiAgICAgIGNvbnN0IG1lc3NhZ2VSZXNwb25zZSA9IGF3YWl0IHRoaXMuY2hhdFNlcnZpY2UuZ2V0TWVzc2FnZXMocm9vbUlkKTtcblxuICAgICAgLy8gQ29udmVydCB0byBjaGF0IHByZXZpZXcgZm9ybWF0XG4gICAgICBjb25zdCBjaGF0UHJldmlld01lc3NhZ2VzID0gY29udmVydFRvQ2hhdFByZXZpZXcodGhpcy5zZXNzaW9uU2VydmljZS51c2VyPy5pZCB8fCAnJywgbWVzc2FnZVJlc3BvbnNlKS5zb3J0KFxuICAgICAgICAoYSwgYikgPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShhLnNlbmRUaW1lKS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShiLnNlbmRUaW1lKS5nZXRUaW1lKCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICAvLyBTZXQgdGhlIG1lc3NhZ2VzIGluIHRoZSBjb252ZXJzYXRpb24gc2VydmljZVxuICAgICAgdGhpcy5jaGF0RGF0YS5zZXQoY2hhdFByZXZpZXdNZXNzYWdlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KCdGYWlsZWQgdG8gbG9hZCBtZXNzYWdlcy4gUGxlYXNlIHRyeSBhZ2Fpbi4nKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIG1lc3NhZ2VzOicsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBsb2FkUm9vbUluZm8ocm9vbUlkOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgcm9vbURhdGEgPSBhd2FpdCB0aGlzLmNoYXRTZXJ2aWNlLmdldFJvb20ocm9vbUlkKTtcbiAgICAgIHRoaXMucm9vbS5zZXQocm9vbURhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCByb29tIGluZm86JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRJdGVtSGFuZGxlcihlOiBBWENvbnZlcnNhdGlvbk1lbnVPcGVuaW5nRXZlbnQpIHtcbiAgICB0aGlzLmFjdGl2ZU1lc3NhZ2Uuc2V0KGUuZGF0YSk7XG4gICAgaWYgKGUuZGF0YS5mcm9tSWQpIHtcbiAgICAgIGUuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1c2VySXRlbTogQVhDb252ZXJzYXRpb25NZXNzYWdlQWN0aW9uW10gPSBbXTtcbiAgICBpZiAoZS5kYXRhLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgdXNlckl0ZW0ucHVzaCh7XG4gICAgICAgIHRleHQ6ICdFZGl0JyxcbiAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgaWNvbjogJ2ZhLXNvbGlkIGZhLXBlbmNpbCcsXG4gICAgICAgIG9uQ2xpY2s6IChpZCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmlzRWRpdGluZy5zZXQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLmVkaXRJZC5zZXQoZS5kYXRhLmlkKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy51cGRhdGUoKHByZXYpID0+ICh7IC4uLnByZXYsIHZhbHVlOiBlLmRhdGEuY29udGVudCB9KSk7XG4gICAgICAgICAgICB0aGlzLmFkZElucHV0T3ZlcmxheSgnZWRpdCcsIGUuZGF0YSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcignRmFpbGVkIHRvIGVkaXQgbWVzc2FnZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZS5kYXRhLnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgdXNlckl0ZW0ucHVzaCh7XG4gICAgICAgIHRleHQ6ICdEZWxldGUnLFxuICAgICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgICAgIGljb246ICdmYS1zb2xpZCBmYS10cmFzaC1jYW4nLFxuICAgICAgICBvbkNsaWNrOiAoaWQpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jaGF0U2VydmljZS5kZWxldGVNZXNzYWdlKGlkKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jaGF0RGF0YS51cGRhdGUoKHZhbHVlcykgPT4gdmFsdWVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZCAhPT0gaWQpKTtcbiAgICAgICAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIoJ0ZhaWxlZCB0byBkZWxldGUgbWVzc2FnZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKCdGYWlsZWQgdG8gZGVsZXRlIG1lc3NhZ2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBlLml0ZW1zLnB1c2goLi4udXNlckl0ZW0pO1xuICB9XG5cbiAgYWRkSW5wdXRPdmVybGF5KHR5cGU6ICdyZXBseScgfCAnZWRpdCcsIG1lc3NhZ2U/OiBBWENvbnZlcnNhdGlvbk1lc3NhZ2UpIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRSZWYoKTtcbiAgICBjb25zdCBpY29uID0gdHlwZSA9PT0gJ3JlcGx5JyA/ICdmYS1zb2xpZCBmYS1yZXBseScgOiAnZmEtc29saWQgZmEtcGVuY2lsJztcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIGlucHV0LnNldEFjdGlvbkJveENvbnRhaW5lcihpY29uLCBtZXNzYWdlPy5jb250ZW50IHx8IHRoaXMuYWN0aXZlTWVzc2FnZSgpPy5jb250ZW50IHx8ICcnKTtcbiAgICB9XG4gIH1cbn1cbiIsIkBpZiAoaXNMb2FkaW5nKCkpIHtcbiAgPGRpdiBjbGFzcz1cImF4LWgtZnVsbCBheC13LWZ1bGwgYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1jZW50ZXJcIj5cbiAgICA8YXgtbG9hZGluZz48L2F4LWxvYWRpbmc+XG4gIDwvZGl2PlxufSBAZWxzZSBpZiAoZXJyb3IoKSkge1xuICA8ZGl2IGNsYXNzPVwiYXgtaC1mdWxsIGF4LXctZnVsbCBheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWNlbnRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJheC10ZXh0LWNlbnRlclwiPlxuICAgICAgPHAgY2xhc3M9XCJheC10ZXh0LWRhbmdlclwiPnt7IGVycm9yKCkgfX08L3A+XG4gICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTWVzc2FnZXMocm9vbUlkKVwiIGNsYXNzPVwiYXgtbXQtMiBheC1idXR0b24gYXgtcHJpbWFyeVwiPlJldHJ5PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufSBAZWxzZSB7XG4gIDxkaXZcbiAgICBheERvbUNoYW5nZVxuICAgIChheFJlc2l6ZU9ic2VydmVyKT1cInNldEhlaWdodCgkZXZlbnRbMF0uY29udGVudFJlY3QuaGVpZ2h0KVwiXG4gICAgY2xhc3M9XCJheC1iZy1zdXJmYWNlLWNvbnRhaW5lciBheC1oLWZ1bGxcIlxuICA+XG4gICAgPCEtLSBNZXNzYWdlcyBDb250YWluZXIgLS0+XG4gICAgPGF4LWNvbnZlcnNhdGlvbi1jb250YWluZXIgY2xhc3M9XCJheC1vdmVyZmxvdy1oaWRkZW5cIiBbY2hhdERhdGFdPVwiY2hhdERhdGEoKVwiPlxuICAgICAgPGF4LWNvbnZlcnNhdGlvbi12aWV3XG4gICAgICAgIChvbkFjdGlvbk1lbnVPcGVuaW5nKT1cImFkZEl0ZW1IYW5kbGVyKCRldmVudClcIlxuICAgICAgICAob25BY3Rpb24pPVwiaGFuZGxlT25BY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgIChvblJlcGx5Q2xpY2spPVwiYWRkSW5wdXRPdmVybGF5KCdyZXBseScsICRldmVudC5kYXRhKVwiXG4gICAgICAgIFtjaGF0Qm94SGVpZ2h0XT1cImhlaWdodCgpIC0gKGlzQ2hhbm5lbCgpID8gNSA6IDY4KSArICdweCdcIlxuICAgICAgPjwvYXgtY29udmVyc2F0aW9uLXZpZXc+XG4gICAgICBAaWYgKCFpc0NoYW5uZWwoKSkge1xuICAgICAgICA8YXgtY29udmVyc2F0aW9uLWlucHV0XG4gICAgICAgICAgY2xhc3M9XCJheC1weC0yXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgYSBtZXNzYWdlLi4uXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9wdGlvbnMoKS52YWx1ZVwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlVHlwaW5nKCRldmVudClcIlxuICAgICAgICAgIChvblNlbmRDbGljayk9XCJoYW5kbGVPblNlbmQoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uRmlsZUNoYW5nZSk9XCJoYW5kbGVGaWxlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIChvblN0b3BSZWNvcmRpbmcpPVwiaGFuZGxlRW5kUmVjb3JkKCRldmVudClcIlxuICAgICAgICAgIChvbkNhbmNlbFJlY29yZGluZyk9XCJoYW5kbGVDYW5jZWxSZWNvcmQoJGV2ZW50KVwiXG4gICAgICAgICAgKG9uRW50ZXJQcmVzc2VkKT1cImhhbmRsZUVudGVyKClcIlxuICAgICAgICA+PC9heC1jb252ZXJzYXRpb24taW5wdXQ+XG4gICAgICB9XG4gICAgPC9heC1jb252ZXJzYXRpb24tY29udGFpbmVyPlxuICA8L2Rpdj5cbn1cbiJdfQ==","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class AXMCommentRealtimeService {\n}\nexport class AXMCommentRealtimeServiceImpl extends AXMCommentRealtimeService {\n constructor() {\n super(...arguments);\n this._comment$ = new Subject();\n this.comment$ = this._comment$.asObservable();\n this._thread$ = new Subject();\n this.thread$ = this._thread$.asObservable();\n }\n notifyComment(event) {\n this._comment$.next(event);\n }\n notifyThread(event) {\n this._thread$.next(event);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentRealtimeServiceImpl, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentRealtimeServiceImpl, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentRealtimeServiceImpl, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1yZWFsdGltZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NvbW1lbnQvY29tbWVudC1yZWFsdGltZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFHM0MsTUFBTSxPQUFnQix5QkFBeUI7Q0FNOUM7QUFLRCxNQUFNLE9BQU8sNkJBQThCLFNBQVEseUJBQXlCO0lBSDVFOztRQUltQixjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQW1CLENBQUM7UUFDbkQsYUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFakMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFrQixDQUFDO1FBQ2pELFlBQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0tBU2pEO0lBUEMsYUFBYSxDQUFDLEtBQXNCO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBcUI7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQzsrR0FiVSw2QkFBNkI7bUhBQTdCLDZCQUE2QixjQUY1QixNQUFNOzs0RkFFUCw2QkFBNkI7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhNQ29tbWVudEV2ZW50LCBBWE1UaHJlYWRFdmVudCB9IGZyb20gJy4vY29tbWVudC50eXBlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYTUNvbW1lbnRSZWFsdGltZVNlcnZpY2Uge1xuICBhYnN0cmFjdCByZWFkb25seSBjb21tZW50JDogT2JzZXJ2YWJsZTxBWE1Db21tZW50RXZlbnQ+O1xuICBhYnN0cmFjdCByZWFkb25seSB0aHJlYWQkOiBPYnNlcnZhYmxlPEFYTVRocmVhZEV2ZW50PjtcblxuICBhYnN0cmFjdCBub3RpZnlDb21tZW50KGV2ZW50OiBBWE1Db21tZW50RXZlbnQpOiB2b2lkO1xuICBhYnN0cmFjdCBub3RpZnlUaHJlYWQoZXZlbnQ6IEFYTVRocmVhZEV2ZW50KTogdm9pZDtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYTUNvbW1lbnRSZWFsdGltZVNlcnZpY2VJbXBsIGV4dGVuZHMgQVhNQ29tbWVudFJlYWx0aW1lU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbW1lbnQkID0gbmV3IFN1YmplY3Q8QVhNQ29tbWVudEV2ZW50PigpO1xuICByZWFkb25seSBjb21tZW50JCA9IHRoaXMuX2NvbW1lbnQkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RocmVhZCQgPSBuZXcgU3ViamVjdDxBWE1UaHJlYWRFdmVudD4oKTtcbiAgcmVhZG9ubHkgdGhyZWFkJCA9IHRoaXMuX3RocmVhZCQuYXNPYnNlcnZhYmxlKCk7XG5cbiAgbm90aWZ5Q29tbWVudChldmVudDogQVhNQ29tbWVudEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fY29tbWVudCQubmV4dChldmVudCk7XG4gIH1cblxuICBub3RpZnlUaHJlYWQoZXZlbnQ6IEFYTVRocmVhZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fdGhyZWFkJC5uZXh0KGV2ZW50KTtcbiAgfVxufVxuIl19","import { AXPFilterOperatorMiddlewareService } from '@acorex/platform/common';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMMessageService } from '../../entities/message/message.service';\nimport { AXMRoomService } from '../../entities/room/room.service';\nimport * as i0 from \"@angular/core\";\n//#region ---- Abstract Comment Service ----\nexport class AXMCommentService {\n}\n//#endregion\nexport class AXMCommentServiceImpl {\n constructor() {\n this.roomService = inject(AXMRoomService);\n this.messageService = inject(AXMMessageService);\n this.filterService = inject(AXPFilterOperatorMiddlewareService);\n }\n async createThread(creatorUser, entityRef, topic, title) {\n const room = {\n type: 'comment',\n topic: topic,\n title: title || `Comments for ${entityRef.entityTypeId}#${entityRef.entityId}`,\n members: [creatorUser],\n entityRef: {\n ...entityRef,\n },\n auditInfo: {\n created: { at: new Date(), by: creatorUser },\n },\n };\n const newRoomId = await this.roomService.insertOne(room);\n return this.roomService.getOne(newRoomId);\n }\n async getThread(entityRef, topic) {\n const { items } = await this.roomService.query({\n skip: 0,\n take: 1,\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'entityRef.entityId',\n value: entityRef.entityId,\n operator: this.filterService.getOperator('equal'),\n },\n {\n field: 'entityRef.entityTypeId',\n value: entityRef.entityTypeId,\n operator: this.filterService.getOperator('equal'),\n },\n {\n field: 'topic',\n value: topic,\n operator: this.filterService.getOperator('equal'),\n },\n ],\n },\n });\n return items[0] || null;\n }\n async listThreads(entityRef, topic) {\n const { items } = await this.roomService.query({\n skip: 0,\n take: 100,\n filter: {\n logic: 'and',\n filters: [\n {\n field: 'entityRef.id',\n value: entityRef.entityId,\n operator: this.filterService.getOperator('equal'),\n },\n {\n field: 'entityRef.type',\n value: entityRef.entityTypeId,\n operator: this.filterService.getOperator('equal'),\n },\n {\n field: 'topic',\n value: topic,\n operator: this.filterService.getOperator('equal'),\n },\n ],\n },\n });\n return items;\n }\n async updateThread(threadId, data) {\n await this.roomService.updateOne(threadId, data);\n return this.roomService.getOne(threadId);\n }\n async deleteThread(threadId) {\n await this.roomService.deleteOne(threadId);\n return true;\n }\n async addComment(threadId, content, author, parentCommentId, contentType = 'text') {\n const messageContent = { content, contentType };\n const message = {\n roomId: threadId,\n message: messageContent,\n author,\n replyId: parentCommentId,\n reactions: [],\n seen: [],\n auditInfo: {\n created: { at: new Date(), by: author },\n },\n };\n const messageId = await this.messageService.insertOne(message);\n return this.messageService.getOne(messageId);\n }\n async getComments(threadId) {\n const { items } = await this.messageService.query({\n skip: 0,\n filter: { field: 'roomId', value: threadId, operator: this.filterService.getOperator('equal') },\n sort: [{ field: 'created.at', dir: 'asc' }],\n take: 500,\n });\n return items;\n }\n async getComment(commentId) {\n return this.messageService.getOne(commentId);\n }\n async editComment(commentId, content, editor, contentType = 'text') {\n const messageContent = { content, contentType };\n await this.messageService.updateOne(commentId, {\n message: messageContent,\n auditInfo: {\n updated: { at: new Date(), by: editor },\n },\n });\n return this.messageService.getOne(commentId);\n }\n async deleteComment(commentId) {\n await this.messageService.deleteOne(commentId);\n return true;\n }\n async updateReactions(commentId, reactions) {\n await this.messageService.updateOne(commentId, { reactions });\n return this.messageService.getOne(commentId);\n }\n async getReactions(commentId) {\n const comment = await this.messageService.getOne(commentId);\n return comment.reactions || [];\n }\n async pinComment(commentId, isPinned) {\n await this.messageService.updateOne(commentId, { isPinned });\n return this.messageService.getOne(commentId);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentServiceImpl, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentServiceImpl, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentServiceImpl, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NvbW1lbnQvY29tbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7QUFJbEUsZ0RBQWdEO0FBRWhELE1BQU0sT0FBZ0IsaUJBQWlCO0NBK0N0QztBQUVELFlBQVk7QUFLWixNQUFNLE9BQU8scUJBQXFCO0lBSGxDO1FBSW1CLGdCQUFXLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0Msa0JBQWEsR0FBRyxNQUFNLENBQUMsa0NBQWtDLENBQUMsQ0FBQztLQW9LN0U7SUFsS0MsS0FBSyxDQUFDLFlBQVksQ0FDaEIsV0FBNkIsRUFDN0IsU0FBK0IsRUFDL0IsS0FBYSxFQUNiLEtBQWM7UUFFZCxNQUFNLElBQUksR0FBb0M7WUFDNUMsSUFBSSxFQUFFLFNBQVM7WUFDZixLQUFLLEVBQUUsS0FBSztZQUNaLEtBQUssRUFBRSxLQUFLLElBQUksZ0JBQWdCLFNBQVMsQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFDLFFBQVEsRUFBRTtZQUM5RSxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFDdEIsU0FBUyxFQUFFO2dCQUNULEdBQUcsU0FBUzthQUNiO1lBQ0QsU0FBUyxFQUFFO2dCQUNULE9BQU8sRUFBRSxFQUFFLEVBQUUs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TSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQzsrR0F0S1UscUJBQXFCO21IQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs7NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUEZpbHRlck9wZXJhdG9yTWlkZGxld2FyZVNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBDb250ZW50LCBBWFBDb250ZW50VHlwZSwgQVhQVXNlclJlZmVyZW5jZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTU1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZW50aXRpZXMvbWVzc2FnZS9tZXNzYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNQ29udmVyc2F0aW9uTWVzc2FnZSwgQVhNQ29udmVyc2F0aW9uUmVhY3Rpb24sIEFYTVJlYWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL21lc3NhZ2UvbWVzc2FnZS50eXBlcyc7XG5pbXBvcnQgeyBBWE1Sb29tU2VydmljZSB9IGZyb20gJy4uLy4uL2VudGl0aWVzL3Jvb20vcm9vbS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTUNvbnZlcnNhdGlvblJvb20gfSBmcm9tICcuLi8uLi9lbnRpdGllcy9yb29tL3Jvb20udHlwZXMnO1xuaW1wb3J0IHsgQVhNQ29tbWVudCwgQVhNQ29tbWVudEVudGl0eURhdGEsIEFYTUNvbW1lbnRUaHJlYWQgfSBmcm9tICcuL2NvbW1lbnQudHlwZSc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgQWJzdHJhY3QgQ29tbWVudCBTZXJ2aWNlICAgLS0tLVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQVhNQ29tbWVudFNlcnZpY2Uge1xuICAvLyNyZWdpb24gLS0tLSAgIENvbW1lbnQgVGhyZWFkIFNlcnZpY2UgICAtLS0tXG5cbiAgYWJzdHJhY3QgY3JlYXRlVGhyZWFkKGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsIHRvcGljOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogUHJvbWlzZTxBWE1Db21tZW50VGhyZWFkPjtcbiAgYWJzdHJhY3QgZ2V0VGhyZWFkKGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsIHRvcGljOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbW1lbnRUaHJlYWQgfCBudWxsPjtcbiAgYWJzdHJhY3QgbGlzdFRocmVhZHMoZW50aXR5UmVmOiBBWE1Db21tZW50RW50aXR5RGF0YSwgdG9waWM6IHN0cmluZyk6IFByb21pc2U8QVhNQ29tbWVudFRocmVhZFtdPjtcbiAgYWJzdHJhY3QgdXBkYXRlVGhyZWFkKFxuICAgIGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsXG4gICAgdG9waWM6IHN0cmluZyxcbiAgICBkYXRhOiBQYXJ0aWFsPHsgdGl0bGU6IHN0cmluZyB9PixcbiAgKTogUHJvbWlzZTxBWE1Db21tZW50VGhyZWFkPjtcbiAgYWJzdHJhY3QgZGVsZXRlVGhyZWFkKGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsIHRvcGljOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ29tbWVudCBTZXJ2aWNlICAgLS0tLVxuXG4gIGFic3RyYWN0IGFkZENvbW1lbnQoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcGFyZW50Q29tbWVudElkPzogc3RyaW5nLFxuICAgIGNvbnRlbnRUeXBlPzogQVhQQ29udGVudFR5cGUsXG4gICAgdXNlcklkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPEFYTUNvbW1lbnQ+O1xuICBhYnN0cmFjdCBnZXRDb21tZW50cyh0aHJlYWRJZDogc3RyaW5nLCBuZXN0ZWQ6IGJvb2xlYW4pOiBQcm9taXNlPEFYTUNvbW1lbnRbXT47XG4gIGFic3RyYWN0IGdldENvbW1lbnQoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbW1lbnQ+O1xuICBhYnN0cmFjdCBlZGl0Q29tbWVudChjb21tZW50SWQ6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBjb250ZW50VHlwZT86IEFYUENvbnRlbnRUeXBlKTogUHJvbWlzZTxBWE1Db21tZW50PjtcbiAgYWJzdHJhY3QgZGVsZXRlQ29tbWVudChjb21tZW50SWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21tZW50IFJlYWN0aW9uIFNlcnZpY2UgICAtLS0tXG5cbiAgYWJzdHJhY3QgYWRkUmVhY3Rpb24oY29tbWVudElkOiBzdHJpbmcsIHR5cGU6IEFYTVJlYWN0aW9uVHlwZSk6IFByb21pc2U8QVhNQ29tbWVudD47XG4gIGFic3RyYWN0IHJlbW92ZVJlYWN0aW9uKGNvbW1lbnRJZDogc3RyaW5nLCB0eXBlOiBBWE1SZWFjdGlvblR5cGUpOiBQcm9taXNlPEFYTUNvbW1lbnQ+O1xuICBhYnN0cmFjdCBnZXRSZWFjdGlvbnMoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW10+O1xuICBhYnN0cmFjdCBsaWtlQ29tbWVudChjb21tZW50SWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29tbWVudD47XG4gIGFic3RyYWN0IHVubGlrZUNvbW1lbnQoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbW1lbnQ+O1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ29tbWVudCBQaW4gU2VydmljZSAgIC0tLS1cblxuICBhYnN0cmFjdCBwaW5Db21tZW50KGNvbW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db21tZW50PjtcbiAgYWJzdHJhY3QgdW5waW5Db21tZW50KGNvbW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db21tZW50PjtcblxuICAvLyNlbmRyZWdpb25cbn1cblxuLy8jZW5kcmVnaW9uXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1Db21tZW50U2VydmljZUltcGwge1xuICBwcml2YXRlIHJlYWRvbmx5IHJvb21TZXJ2aWNlID0gaW5qZWN0KEFYTVJvb21TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZSA9IGluamVjdChBWE1NZXNzYWdlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyU2VydmljZSA9IGluamVjdChBWFBGaWx0ZXJPcGVyYXRvck1pZGRsZXdhcmVTZXJ2aWNlKTtcblxuICBhc3luYyBjcmVhdGVUaHJlYWQoXG4gICAgY3JlYXRvclVzZXI6IEFYUFVzZXJSZWZlcmVuY2UsXG4gICAgZW50aXR5UmVmOiBBWE1Db21tZW50RW50aXR5RGF0YSxcbiAgICB0b3BpYzogc3RyaW5nLFxuICAgIHRpdGxlPzogc3RyaW5nLFxuICApOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJvb20+IHtcbiAgICBjb25zdCByb29tOiBPbWl0PEFYTUNvbnZlcnNhdGlvblJvb20sICdpZCc+ID0ge1xuICAgICAgdHlwZTogJ2NvbW1lbnQnLFxuICAgICAgdG9waWM6IHRvcGljLFxuICAgICAgdGl0bGU6IHRpdGxlIHx8IGBDb21tZW50cyBmb3IgJHtlbnRpdHlSZWYuZW50aXR5VHlwZUlkfSMke2VudGl0eVJlZi5lbnRpdHlJZH1gLFxuICAgICAgbWVtYmVyczogW2NyZWF0b3JVc2VyXSxcbiAgICAgIGVudGl0eVJlZjoge1xuICAgICAgICAuLi5lbnRpdHlSZWYsXG4gICAgICB9LFxuICAgICAgYXVkaXRJbmZvOiB7XG4gICAgICAgIGNyZWF0ZWQ6IHsgYXQ6IG5ldyBEYXRlKCksIGJ5OiBjcmVhdG9yVXNlciB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IG5ld1Jvb21JZCA9IGF3YWl0IHRoaXMucm9vbVNlcnZpY2UuaW5zZXJ0T25lKHJvb20pO1xuICAgIHJldHVybiB0aGlzLnJvb21TZXJ2aWNlLmdldE9uZShuZXdSb29tSWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VGhyZWFkKGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsIHRvcGljOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJvb20gfCBudWxsPiB7XG4gICAgY29uc3QgeyBpdGVtcyB9ID0gYXdhaXQgdGhpcy5yb29tU2VydmljZS5xdWVyeSh7XG4gICAgICBza2lwOiAwLFxuICAgICAgdGFrZTogMSxcbiAgICAgIGZpbHRlcjoge1xuICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ2VudGl0eVJlZi5lbnRpdHlJZCcsXG4gICAgICAgICAgICB2YWx1ZTogZW50aXR5UmVmLmVudGl0eUlkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuZmlsdGVyU2VydmljZS5nZXRPcGVyYXRvcignZXF1YWwnKSBhcyBhbnksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ2VudGl0eVJlZi5lbnRpdHlUeXBlSWQnLFxuICAgICAgICAgICAgdmFsdWU6IGVudGl0eVJlZi5lbnRpdHlUeXBlSWQsXG4gICAgICAgICAgICBvcGVyYXRvcjogdGhpcy5maWx0ZXJTZXJ2aWNlLmdldE9wZXJhdG9yKCdlcXVhbCcpIGFzIGFueSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZpZWxkOiAndG9waWMnLFxuICAgICAgICAgICAgdmFsdWU6IHRvcGljLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuZmlsdGVyU2VydmljZS5nZXRPcGVyYXRvcignZXF1YWwnKSBhcyBhbnksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaXRlbXNbMF0gfHwgbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGxpc3RUaHJlYWRzKGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsIHRvcGljOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvblJvb21bXT4ge1xuICAgIGNvbnN0IHsgaXRlbXMgfSA9IGF3YWl0IHRoaXMucm9vbVNlcnZpY2UucXVlcnkoe1xuICAgICAgc2tpcDogMCxcbiAgICAgIHRha2U6IDEwMCxcbiAgICAgIGZpbHRlcjoge1xuICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ2VudGl0eVJlZi5pZCcsXG4gICAgICAgICAgICB2YWx1ZTogZW50aXR5UmVmLmVudGl0eUlkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuZmlsdGVyU2VydmljZS5nZXRPcGVyYXRvcignZXF1YWwnKSBhcyBhbnksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ2VudGl0eVJlZi50eXBlJyxcbiAgICAgICAgICAgIHZhbHVlOiBlbnRpdHlSZWYuZW50aXR5VHlwZUlkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuZmlsdGVyU2VydmljZS5nZXRPcGVyYXRvcignZXF1YWwnKSBhcyBhbnksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWVsZDogJ3RvcGljJyxcbiAgICAgICAgICAgIHZhbHVlOiB0b3BpYyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiB0aGlzLmZpbHRlclNlcnZpY2UuZ2V0T3BlcmF0b3IoJ2VxdWFsJykgYXMgYW55LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVGhyZWFkKHRocmVhZElkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8eyB0aXRsZTogc3RyaW5nIH0+KTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25Sb29tPiB7XG4gICAgYXdhaXQgdGhpcy5yb29tU2VydmljZS51cGRhdGVPbmUodGhyZWFkSWQsIGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJvb21TZXJ2aWNlLmdldE9uZSh0aHJlYWRJZCk7XG4gIH1cblxuICBhc3luYyBkZWxldGVUaHJlYWQodGhyZWFkSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGF3YWl0IHRoaXMucm9vbVNlcnZpY2UuZGVsZXRlT25lKHRocmVhZElkKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIGFkZENvbW1lbnQoXG4gICAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgYXV0aG9yOiBBWFBVc2VyUmVmZXJlbmNlLFxuICAgIHBhcmVudENvbW1lbnRJZD86IHN0cmluZyxcbiAgICBjb250ZW50VHlwZTogQVhQQ29udGVudFR5cGUgPSAndGV4dCcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VDb250ZW50OiBBWFBDb250ZW50ID0geyBjb250ZW50LCBjb250ZW50VHlwZSB9O1xuICAgIGNvbnN0IG1lc3NhZ2U6IE9taXQ8QVhNQ29udmVyc2F0aW9uTWVzc2FnZSwgJ2lkJz4gPSB7XG4gICAgICByb29tSWQ6IHRocmVhZElkLFxuICAgICAgbWVzc2FnZTogbWVzc2FnZUNvbnRlbnQsXG4gICAgICBhdXRob3IsXG4gICAgICByZXBseUlkOiBwYXJlbnRDb21tZW50SWQsXG4gICAgICByZWFjdGlvbnM6IFtdLFxuICAgICAgc2VlbjogW10sXG4gICAgICBhdWRpdEluZm86IHtcbiAgICAgICAgY3JlYXRlZDogeyBhdDogbmV3IERhdGUoKSwgYnk6IGF1dGhvciB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IGF3YWl0IHRoaXMubWVzc2FnZVNlcnZpY2UuaW5zZXJ0T25lKG1lc3NhZ2UpO1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmdldE9uZShtZXNzYWdlSWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q29tbWVudHModGhyZWFkSWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZVtdPiB7XG4gICAgY29uc3QgeyBpdGVtcyB9ID0gYXdhaXQgdGhpcy5tZXNzYWdlU2VydmljZS5xdWVyeSh7XG4gICAgICBza2lwOiAwLFxuICAgICAgZmlsdGVyOiB7IGZpZWxkOiAncm9vbUlkJywgdmFsdWU6IHRocmVhZElkLCBvcGVyYXRvcjogdGhpcy5maWx0ZXJTZXJ2aWNlLmdldE9wZXJhdG9yKCdlcXVhbCcpIGFzIGFueSB9LFxuICAgICAgc29ydDogW3sgZmllbGQ6ICdjcmVhdGVkLmF0JywgZGlyOiAnYXNjJyB9IGFzIGFueV0sXG4gICAgICB0YWtlOiA1MDAsXG4gICAgfSk7XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q29tbWVudChjb21tZW50SWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmdldE9uZShjb21tZW50SWQpO1xuICB9XG5cbiAgYXN5bmMgZWRpdENvbW1lbnQoXG4gICAgY29tbWVudElkOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIGVkaXRvcjogQVhQVXNlclJlZmVyZW5jZSxcbiAgICBjb250ZW50VHlwZTogQVhQQ29udGVudFR5cGUgPSAndGV4dCcsXG4gICk6IFByb21pc2U8QVhNQ29udmVyc2F0aW9uTWVzc2FnZT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VDb250ZW50OiBBWFBDb250ZW50ID0geyBjb250ZW50LCBjb250ZW50VHlwZSB9O1xuICAgIGF3YWl0IHRoaXMubWVzc2FnZVNlcnZpY2UudXBkYXRlT25lKGNvbW1lbnRJZCwge1xuICAgICAgbWVzc2FnZTogbWVzc2FnZUNvbnRlbnQsXG4gICAgICBhdWRpdEluZm86IHtcbiAgICAgICAgdXBkYXRlZDogeyBhdDogbmV3IERhdGUoKSwgYnk6IGVkaXRvciB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU2VydmljZS5nZXRPbmUoY29tbWVudElkKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUNvbW1lbnQoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBhd2FpdCB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmRlbGV0ZU9uZShjb21tZW50SWQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlUmVhY3Rpb25zKGNvbW1lbnRJZDogc3RyaW5nLCByZWFjdGlvbnM6IEFYTUNvbnZlcnNhdGlvblJlYWN0aW9uW10pOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2U+IHtcbiAgICBhd2FpdCB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnVwZGF0ZU9uZShjb21tZW50SWQsIHsgcmVhY3Rpb25zIH0pO1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmdldE9uZShjb21tZW50SWQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNvbW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25SZWFjdGlvbltdPiB7XG4gICAgY29uc3QgY29tbWVudCA9IGF3YWl0IHRoaXMubWVzc2FnZVNlcnZpY2UuZ2V0T25lKGNvbW1lbnRJZCk7XG4gICAgcmV0dXJuIGNvbW1lbnQucmVhY3Rpb25zIHx8IFtdO1xuICB9XG5cbiAgYXN5bmMgcGluQ29tbWVudChjb21tZW50SWQ6IHN0cmluZywgaXNQaW5uZWQ6IGJvb2xlYW4pOiBQcm9taXNlPEFYTUNvbnZlcnNhdGlvbk1lc3NhZ2U+IHtcbiAgICBhd2FpdCB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnVwZGF0ZU9uZShjb21tZW50SWQsIHsgaXNQaW5uZWQgfSk7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZVNlcnZpY2UuZ2V0T25lKGNvbW1lbnRJZCk7XG4gIH1cbn1cbiJdfQ==","import { AXMUsersEntityService } from '@acorex/modules/security-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { inject, Injectable } from '@angular/core';\nimport { AXMCommentRealtimeService } from './comment-realtime.service';\nimport { AXMCommentServiceImpl } from './comment.service';\nimport * as i0 from \"@angular/core\";\nexport class AXMCommentManagementService {\n constructor() {\n this.commentImplService = inject(AXMCommentServiceImpl);\n this.sessionService = inject(AXPSessionService);\n this.usersService = inject(AXMUsersEntityService);\n this.realtimeService = inject(AXMCommentRealtimeService);\n }\n getCurrentUser() {\n const user = this.sessionService.user;\n if (!user) {\n throw new Error('No authenticated user found.');\n }\n return {\n id: user.id,\n type: 'user',\n fullName: user.title,\n username: user.name,\n };\n }\n async getUserInfo(userId) {\n try {\n const user = await this.usersService.getOne(userId);\n return { id: userId, type: 'user', fullName: user.displayName, username: user.username };\n }\n catch {\n throw new Error(`User with ID ${userId} not found`);\n }\n }\n formatComment(message, depth = 0) {\n return {\n ...message,\n depth,\n replies: [],\n replyCount: 0,\n };\n }\n buildCommentTree(comments) {\n const commentMap = new Map(comments.map((c) => [c.id, c]));\n const tree = [];\n comments.forEach((comment) => {\n if (comment.replyId && commentMap.has(comment.replyId)) {\n const parent = commentMap.get(comment.replyId);\n parent.replies.push(comment);\n comment.depth = (parent.depth ?? 0) + 1;\n }\n else {\n tree.push(comment);\n }\n });\n commentMap.forEach((comment) => {\n comment.replyCount = comment.replies.length;\n });\n return tree;\n }\n async formatThread(room) {\n const comments = await this.getComments(room.id, true);\n return {\n ...room,\n comments,\n commentCount: comments.length,\n };\n }\n async createThread(entityRef, topic, title) {\n const currentUser = this.getCurrentUser();\n const newRoom = await this.commentImplService.createThread(currentUser, entityRef, topic, title);\n const newThread = await this.formatThread(newRoom);\n this.realtimeService.notifyThread({ type: 'add', payload: newThread });\n return newThread;\n }\n async getThread(entityRef, topic) {\n const room = await this.commentImplService.getThread(entityRef, topic);\n if (!room) {\n return null;\n }\n return this.formatThread(room);\n }\n async listThreads(entityRef, topic) {\n const rooms = await this.commentImplService.listThreads(entityRef, topic);\n return Promise.all(rooms.map((room) => this.formatThread(room)));\n }\n async updateThread(entityRef, topic, data) {\n const thread = await this.getThread(entityRef, topic);\n if (!thread) {\n throw new Error(`Thread for entity ${entityRef.entityTypeId}#${entityRef.entityId} not found.`);\n }\n const updatedRoom = await this.commentImplService.updateThread(thread.id, data);\n const updatedThread = await this.formatThread(updatedRoom);\n this.realtimeService.notifyThread({ type: 'update', payload: updatedThread });\n return updatedThread;\n }\n async deleteThread(entityRef, topic) {\n const thread = await this.getThread(entityRef, topic);\n if (thread) {\n await this.commentImplService.deleteThread(thread.id);\n this.realtimeService.notifyThread({ type: 'remove', payload: thread.id });\n return true;\n }\n return false;\n }\n async addComment(threadId, content, parentCommentId, contentType = 'text', userId) {\n const author = userId ? await this.getUserInfo(userId) : this.getCurrentUser();\n const rawComment = await this.commentImplService.addComment(threadId, content, author, parentCommentId, contentType);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'add', payload: formattedComment });\n return formattedComment;\n }\n async getComments(threadId, nested) {\n const rawComments = await this.commentImplService.getComments(threadId);\n const formattedComments = rawComments.map((c) => this.formatComment(c));\n if (nested) {\n return this.buildCommentTree(formattedComments);\n }\n return formattedComments;\n }\n async getComment(commentId) {\n const rawComment = await this.commentImplService.getComment(commentId);\n return this.formatComment(rawComment);\n }\n async editComment(commentId, content, contentType = 'text') {\n const editor = this.getCurrentUser();\n const rawComment = await this.commentImplService.editComment(commentId, content, editor, contentType);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n async deleteComment(commentId) {\n const result = await this.commentImplService.deleteComment(commentId);\n if (result) {\n this.realtimeService.notifyComment({ type: 'remove', payload: commentId });\n }\n return result;\n }\n async addReaction(commentId, type) {\n const author = this.getCurrentUser();\n const comment = await this.commentImplService.getComment(commentId);\n const reactions = comment.reactions || [];\n if (reactions.some((r) => r.author.id === author.id && r.type === type)) {\n return this.formatComment(comment);\n }\n const updatedReactions = [...reactions, { author, type }];\n const rawComment = await this.commentImplService.updateReactions(commentId, updatedReactions);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n async removeReaction(commentId, type) {\n const author = this.getCurrentUser();\n const comment = await this.commentImplService.getComment(commentId);\n const updatedReactions = (comment.reactions || []).filter((r) => !(r.author.id === author.id && r.type === type));\n const rawComment = await this.commentImplService.updateReactions(commentId, updatedReactions);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n getReactions(commentId) {\n return this.commentImplService.getReactions(commentId);\n }\n likeComment(commentId) {\n return this.addReaction(commentId, 'like');\n }\n unlikeComment(commentId) {\n return this.removeReaction(commentId, 'like');\n }\n async pinComment(commentId) {\n const rawComment = await this.commentImplService.pinComment(commentId, true);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n async unpinComment(commentId) {\n const rawComment = await this.commentImplService.pinComment(commentId, false);\n const formattedComment = this.formatComment(rawComment);\n this.realtimeService.notifyComment({ type: 'update', payload: formattedComment });\n return formattedComment;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentManagementService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentManagementService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentManagementService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1tYW5hZ2VtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY29tbWVudC9jb21tZW50LW1hbmFnZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFNMUQsTUFBTSxPQUFPLDJCQUEyQjtJQUh4QztRQUltQix1QkFBa0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNuRCxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNDLGlCQUFZLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDN0Msb0JBQWUsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztLQW1OdEU7SUFqTlMsY0FBYztRQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELE9BQU87WUFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDWCxJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSztZQUNwQixRQUFR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a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhNVXNlcnNFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL3NlY3VyaXR5LW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQU2Vzc2lvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2F1dGgnO1xuaW1wb3J0IHsgQVhQQ29udGVudFR5cGUsIEFYUFVzZXJSZWZlcmVuY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWE1Db252ZXJzYXRpb25NZXNzYWdlLCBBWE1Db252ZXJzYXRpb25SZWFjdGlvbiwgQVhNUmVhY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vZW50aXRpZXMvbWVzc2FnZS9tZXNzYWdlLnR5cGVzJztcbmltcG9ydCB7IEFYTUNvbnZlcnNhdGlvblJvb20gfSBmcm9tICcuLi8uLi9lbnRpdGllcy9yb29tL3Jvb20udHlwZXMnO1xuaW1wb3J0IHsgQVhNQ29tbWVudFJlYWx0aW1lU2VydmljZSB9IGZyb20gJy4vY29tbWVudC1yZWFsdGltZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTUNvbW1lbnRTZXJ2aWNlSW1wbCB9IGZyb20gJy4vY29tbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFYTUNvbW1lbnQsIEFYTUNvbW1lbnRFbnRpdHlEYXRhLCBBWE1Db21tZW50VGhyZWFkIH0gZnJvbSAnLi9jb21tZW50LnR5cGUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhNQ29tbWVudE1hbmFnZW1lbnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb21tZW50SW1wbFNlcnZpY2UgPSBpbmplY3QoQVhNQ29tbWVudFNlcnZpY2VJbXBsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU2VydmljZSA9IGluamVjdChBWFBTZXNzaW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdXNlcnNTZXJ2aWNlID0gaW5qZWN0KEFYTVVzZXJzRW50aXR5U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVhbHRpbWVTZXJ2aWNlID0gaW5qZWN0KEFYTUNvbW1lbnRSZWFsdGltZVNlcnZpY2UpO1xuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFVzZXIoKTogQVhQVXNlclJlZmVyZW5jZSB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuc2Vzc2lvblNlcnZpY2UudXNlcjtcbiAgICBpZiAoIXVzZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYXV0aGVudGljYXRlZCB1c2VyIGZvdW5kLicpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHVzZXIuaWQsXG4gICAgICB0eXBlOiAndXNlcicsXG4gICAgICBmdWxsTmFtZTogdXNlci50aXRsZSxcbiAgICAgIHVzZXJuYW1lOiB1c2VyLm5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0VXNlckluZm8odXNlcklkOiBzdHJpbmcpOiBQcm9taXNlPEFYUFVzZXJSZWZlcmVuY2U+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMudXNlcnNTZXJ2aWNlLmdldE9uZSh1c2VySWQpO1xuICAgICAgcmV0dXJuIHsgaWQ6IHVzZXJJZCwgdHlwZTogJ3VzZXInLCBmdWxsTmFtZTogdXNlci5kaXNwbGF5TmFtZSwgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWUgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVXNlciB3aXRoIElEICR7dXNlcklkfSBub3QgZm91bmRgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdENvbW1lbnQobWVzc2FnZTogQVhNQ29udmVyc2F0aW9uTWVzc2FnZSwgZGVwdGggPSAwKTogQVhNQ29tbWVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICBkZXB0aCxcbiAgICAgIHJlcGxpZXM6IFtdLFxuICAgICAgcmVwbHlDb3VudDogMCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbW1lbnRUcmVlKGNvbW1lbnRzOiBBWE1Db21tZW50W10pOiBBWE1Db21tZW50W10ge1xuICAgIGNvbnN0IGNvbW1lbnRNYXAgPSBuZXcgTWFwPHN0cmluZywgQVhNQ29tbWVudD4oY29tbWVudHMubWFwKChjKSA9PiBbYy5pZCwgY10pKTtcbiAgICBjb25zdCB0cmVlOiBBWE1Db21tZW50W10gPSBbXTtcblxuICAgIGNvbW1lbnRzLmZvckVhY2goKGNvbW1lbnQpID0+IHtcbiAgICAgIGlmIChjb21tZW50LnJlcGx5SWQgJiYgY29tbWVudE1hcC5oYXMoY29tbWVudC5yZXBseUlkKSkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBjb21tZW50TWFwLmdldChjb21tZW50LnJlcGx5SWQpITtcbiAgICAgICAgcGFyZW50LnJlcGxpZXMucHVzaChjb21tZW50KTtcbiAgICAgICAgY29tbWVudC5kZXB0aCA9IChwYXJlbnQuZGVwdGggPz8gMCkgKyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJlZS5wdXNoKGNvbW1lbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29tbWVudE1hcC5mb3JFYWNoKChjb21tZW50KSA9PiB7XG4gICAgICBjb21tZW50LnJlcGx5Q291bnQgPSBjb21tZW50LnJlcGxpZXMubGVuZ3RoO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRyZWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZvcm1hdFRocmVhZChyb29tOiBBWE1Db252ZXJzYXRpb25Sb29tKTogUHJvbWlzZTxBWE1Db21tZW50VGhyZWFkPiB7XG4gICAgY29uc3QgY29tbWVudHMgPSBhd2FpdCB0aGlzLmdldENvbW1lbnRzKHJvb20uaWQsIHRydWUpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yb29tLFxuICAgICAgY29tbWVudHMsXG4gICAgICBjb21tZW50Q291bnQ6IGNvbW1lbnRzLmxlbmd0aCxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlVGhyZWFkKGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsIHRvcGljOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nKTogUHJvbWlzZTxBWE1Db21tZW50VGhyZWFkPiB7XG4gICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgY29uc3QgbmV3Um9vbSA9IGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLmNyZWF0ZVRocmVhZChjdXJyZW50VXNlciwgZW50aXR5UmVmLCB0b3BpYywgdGl0bGUpO1xuICAgIGNvbnN0IG5ld1RocmVhZCA9IGF3YWl0IHRoaXMuZm9ybWF0VGhyZWFkKG5ld1Jvb20pO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeVRocmVhZCh7IHR5cGU6ICdhZGQnLCBwYXlsb2FkOiBuZXdUaHJlYWQgfSk7XG4gICAgcmV0dXJuIG5ld1RocmVhZDtcbiAgfVxuXG4gIGFzeW5jIGdldFRocmVhZChlbnRpdHlSZWY6IEFYTUNvbW1lbnRFbnRpdHlEYXRhLCB0b3BpYzogc3RyaW5nKTogUHJvbWlzZTxBWE1Db21tZW50VGhyZWFkIHwgbnVsbD4ge1xuICAgIGNvbnN0IHJvb20gPSBhd2FpdCB0aGlzLmNvbW1lbnRJbXBsU2VydmljZS5nZXRUaHJlYWQoZW50aXR5UmVmLCB0b3BpYyk7XG4gICAgaWYgKCFyb29tKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0VGhyZWFkKHJvb20pO1xuICB9XG5cbiAgYXN5bmMgbGlzdFRocmVhZHMoZW50aXR5UmVmOiBBWE1Db21tZW50RW50aXR5RGF0YSwgdG9waWM6IHN0cmluZyk6IFByb21pc2U8QVhNQ29tbWVudFRocmVhZFtdPiB7XG4gICAgY29uc3Qgcm9vbXMgPSBhd2FpdCB0aGlzLmNvbW1lbnRJbXBsU2VydmljZS5saXN0VGhyZWFkcyhlbnRpdHlSZWYsIHRvcGljKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocm9vbXMubWFwKChyb29tKSA9PiB0aGlzLmZvcm1hdFRocmVhZChyb29tKSkpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlVGhyZWFkKFxuICAgIGVudGl0eVJlZjogQVhNQ29tbWVudEVudGl0eURhdGEsXG4gICAgdG9waWM6IHN0cmluZyxcbiAgICBkYXRhOiBQYXJ0aWFsPHsgdGl0bGU6IHN0cmluZyB9PixcbiAgKTogUHJvbWlzZTxBWE1Db21tZW50VGhyZWFkPiB7XG4gICAgY29uc3QgdGhyZWFkID0gYXdhaXQgdGhpcy5nZXRUaHJlYWQoZW50aXR5UmVmLCB0b3BpYyk7XG4gICAgaWYgKCF0aHJlYWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhyZWFkIGZvciBlbnRpdHkgJHtlbnRpdHlSZWYuZW50aXR5VHlwZUlkfSMke2VudGl0eVJlZi5lbnRpdHlJZH0gbm90IGZvdW5kLmApO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkUm9vbSA9IGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLnVwZGF0ZVRocmVhZCh0aHJlYWQuaWQsIGRhdGEpO1xuICAgIGNvbnN0IHVwZGF0ZWRUaHJlYWQgPSBhd2FpdCB0aGlzLmZvcm1hdFRocmVhZCh1cGRhdGVkUm9vbSk7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5VGhyZWFkKHsgdHlwZTogJ3VwZGF0ZScsIHBheWxvYWQ6IHVwZGF0ZWRUaHJlYWQgfSk7XG4gICAgcmV0dXJuIHVwZGF0ZWRUaHJlYWQ7XG4gIH1cblxuICBhc3luYyBkZWxldGVUaHJlYWQoZW50aXR5UmVmOiBBWE1Db21tZW50RW50aXR5RGF0YSwgdG9waWM6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHRocmVhZCA9IGF3YWl0IHRoaXMuZ2V0VGhyZWFkKGVudGl0eVJlZiwgdG9waWMpO1xuICAgIGlmICh0aHJlYWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLmRlbGV0ZVRocmVhZCh0aHJlYWQuaWQpO1xuICAgICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5VGhyZWFkKHsgdHlwZTogJ3JlbW92ZScsIHBheWxvYWQ6IHRocmVhZC5pZCB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyBhZGRDb21tZW50KFxuICAgIHRocmVhZElkOiBzdHJpbmcsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHBhcmVudENvbW1lbnRJZD86IHN0cmluZyxcbiAgICBjb250ZW50VHlwZTogQVhQQ29udGVudFR5cGUgPSAndGV4dCcsXG4gICAgdXNlcklkPzogc3RyaW5nLFxuICApOiBQcm9taXNlPEFYTUNvbW1lbnQ+IHtcbiAgICBjb25zdCBhdXRob3IgPSB1c2VySWQgPyBhd2FpdCB0aGlzLmdldFVzZXJJbmZvKHVzZXJJZCkgOiB0aGlzLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgY29uc3QgcmF3Q29tbWVudCA9IGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLmFkZENvbW1lbnQoXG4gICAgICB0aHJlYWRJZCxcbiAgICAgIGNvbnRlbnQsXG4gICAgICBhdXRob3IsXG4gICAgICBwYXJlbnRDb21tZW50SWQsXG4gICAgICBjb250ZW50VHlwZSxcbiAgICApO1xuICAgIGNvbnN0IGZvcm1hdHRlZENvbW1lbnQgPSB0aGlzLmZvcm1hdENvbW1lbnQocmF3Q29tbWVudCk7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5Q29tbWVudCh7IHR5cGU6ICdhZGQnLCBwYXlsb2FkOiBmb3JtYXR0ZWRDb21tZW50IH0pO1xuICAgIHJldHVybiBmb3JtYXR0ZWRDb21tZW50O1xuICB9XG5cbiAgYXN5bmMgZ2V0Q29tbWVudHModGhyZWFkSWQ6IHN0cmluZywgbmVzdGVkOiBib29sZWFuKTogUHJvbWlzZTxBWE1Db21tZW50W10+IHtcbiAgICBjb25zdCByYXdDb21tZW50cyA9IGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLmdldENvbW1lbnRzKHRocmVhZElkKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRDb21tZW50cyA9IHJhd0NvbW1lbnRzLm1hcCgoYykgPT4gdGhpcy5mb3JtYXRDb21tZW50KGMpKTtcbiAgICBpZiAobmVzdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZENvbW1lbnRUcmVlKGZvcm1hdHRlZENvbW1lbnRzKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1hdHRlZENvbW1lbnRzO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q29tbWVudChjb21tZW50SWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29tbWVudD4ge1xuICAgIGNvbnN0IHJhd0NvbW1lbnQgPSBhd2FpdCB0aGlzLmNvbW1lbnRJbXBsU2VydmljZS5nZXRDb21tZW50KGNvbW1lbnRJZCk7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0Q29tbWVudChyYXdDb21tZW50KTtcbiAgfVxuXG4gIGFzeW5jIGVkaXRDb21tZW50KGNvbW1lbnRJZDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGNvbnRlbnRUeXBlOiBBWFBDb250ZW50VHlwZSA9ICd0ZXh0Jyk6IFByb21pc2U8QVhNQ29tbWVudD4ge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBjb25zdCByYXdDb21tZW50ID0gYXdhaXQgdGhpcy5jb21tZW50SW1wbFNlcnZpY2UuZWRpdENvbW1lbnQoY29tbWVudElkLCBjb250ZW50LCBlZGl0b3IsIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRDb21tZW50ID0gdGhpcy5mb3JtYXRDb21tZW50KHJhd0NvbW1lbnQpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeUNvbW1lbnQoeyB0eXBlOiAndXBkYXRlJywgcGF5bG9hZDogZm9ybWF0dGVkQ29tbWVudCB9KTtcbiAgICByZXR1cm4gZm9ybWF0dGVkQ29tbWVudDtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUNvbW1lbnQoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbW1lbnRJbXBsU2VydmljZS5kZWxldGVDb21tZW50KGNvbW1lbnRJZCk7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5Q29tbWVudCh7IHR5cGU6ICdyZW1vdmUnLCBwYXlsb2FkOiBjb21tZW50SWQgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBhZGRSZWFjdGlvbihjb21tZW50SWQ6IHN0cmluZywgdHlwZTogQVhNUmVhY3Rpb25UeXBlKTogUHJvbWlzZTxBWE1Db21tZW50PiB7XG4gICAgY29uc3QgYXV0aG9yID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgIGNvbnN0IGNvbW1lbnQgPSBhd2FpdCB0aGlzLmNvbW1lbnRJbXBsU2VydmljZS5nZXRDb21tZW50KGNvbW1lbnRJZCk7XG4gICAgY29uc3QgcmVhY3Rpb25zID0gY29tbWVudC5yZWFjdGlvbnMgfHwgW107XG5cbiAgICBpZiAocmVhY3Rpb25zLnNvbWUoKHIpID0+IHIuYXV0aG9yLmlkID09PSBhdXRob3IuaWQgJiYgci50eXBlID09PSB0eXBlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0Q29tbWVudChjb21tZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkUmVhY3Rpb25zID0gWy4uLnJlYWN0aW9ucywgeyBhdXRob3IsIHR5cGUgfV07XG4gICAgY29uc3QgcmF3Q29tbWVudCA9IGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLnVwZGF0ZVJlYWN0aW9ucyhjb21tZW50SWQsIHVwZGF0ZWRSZWFjdGlvbnMpO1xuICAgIGNvbnN0IGZvcm1hdHRlZENvbW1lbnQgPSB0aGlzLmZvcm1hdENvbW1lbnQocmF3Q29tbWVudCk7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5Q29tbWVudCh7IHR5cGU6ICd1cGRhdGUnLCBwYXlsb2FkOiBmb3JtYXR0ZWRDb21tZW50IH0pO1xuICAgIHJldHVybiBmb3JtYXR0ZWRDb21tZW50O1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlUmVhY3Rpb24oY29tbWVudElkOiBzdHJpbmcsIHR5cGU6IEFYTVJlYWN0aW9uVHlwZSk6IFByb21pc2U8QVhNQ29tbWVudD4ge1xuICAgIGNvbnN0IGF1dGhvciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBjb25zdCBjb21tZW50ID0gYXdhaXQgdGhpcy5jb21tZW50SW1wbFNlcnZpY2UuZ2V0Q29tbWVudChjb21tZW50SWQpO1xuICAgIGNvbnN0IHVwZGF0ZWRSZWFjdGlvbnMgPSAoY29tbWVudC5yZWFjdGlvbnMgfHwgW10pLmZpbHRlcigocikgPT4gIShyLmF1dGhvci5pZCA9PT0gYXV0aG9yLmlkICYmIHIudHlwZSA9PT0gdHlwZSkpO1xuXG4gICAgY29uc3QgcmF3Q29tbWVudCA9IGF3YWl0IHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLnVwZGF0ZVJlYWN0aW9ucyhjb21tZW50SWQsIHVwZGF0ZWRSZWFjdGlvbnMpO1xuICAgIGNvbnN0IGZvcm1hdHRlZENvbW1lbnQgPSB0aGlzLmZvcm1hdENvbW1lbnQocmF3Q29tbWVudCk7XG4gICAgdGhpcy5yZWFsdGltZVNlcnZpY2Uubm90aWZ5Q29tbWVudCh7IHR5cGU6ICd1cGRhdGUnLCBwYXlsb2FkOiBmb3JtYXR0ZWRDb21tZW50IH0pO1xuICAgIHJldHVybiBmb3JtYXR0ZWRDb21tZW50O1xuICB9XG5cbiAgZ2V0UmVhY3Rpb25zKGNvbW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db252ZXJzYXRpb25SZWFjdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWVudEltcGxTZXJ2aWNlLmdldFJlYWN0aW9ucyhjb21tZW50SWQpO1xuICB9XG5cbiAgbGlrZUNvbW1lbnQoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbW1lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRSZWFjdGlvbihjb21tZW50SWQsICdsaWtlJyk7XG4gIH1cblxuICB1bmxpa2VDb21tZW50KGNvbW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBWE1Db21tZW50PiB7XG4gICAgcmV0dXJuIHRoaXMucmVtb3ZlUmVhY3Rpb24oY29tbWVudElkLCAnbGlrZScpO1xuICB9XG5cbiAgYXN5bmMgcGluQ29tbWVudChjb21tZW50SWQ6IHN0cmluZyk6IFByb21pc2U8QVhNQ29tbWVudD4ge1xuICAgIGNvbnN0IHJhd0NvbW1lbnQgPSBhd2FpdCB0aGlzLmNvbW1lbnRJbXBsU2VydmljZS5waW5Db21tZW50KGNvbW1lbnRJZCwgdHJ1ZSk7XG4gICAgY29uc3QgZm9ybWF0dGVkQ29tbWVudCA9IHRoaXMuZm9ybWF0Q29tbWVudChyYXdDb21tZW50KTtcbiAgICB0aGlzLnJlYWx0aW1lU2VydmljZS5ub3RpZnlDb21tZW50KHsgdHlwZTogJ3VwZGF0ZScsIHBheWxvYWQ6IGZvcm1hdHRlZENvbW1lbnQgfSk7XG4gICAgcmV0dXJuIGZvcm1hdHRlZENvbW1lbnQ7XG4gIH1cblxuICBhc3luYyB1bnBpbkNvbW1lbnQoY29tbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEFYTUNvbW1lbnQ+IHtcbiAgICBjb25zdCByYXdDb21tZW50ID0gYXdhaXQgdGhpcy5jb21tZW50SW1wbFNlcnZpY2UucGluQ29tbWVudChjb21tZW50SWQsIGZhbHNlKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRDb21tZW50ID0gdGhpcy5mb3JtYXRDb21tZW50KHJhd0NvbW1lbnQpO1xuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLm5vdGlmeUNvbW1lbnQoeyB0eXBlOiAndXBkYXRlJywgcGF5bG9hZDogZm9ybWF0dGVkQ29tbWVudCB9KTtcbiAgICByZXR1cm4gZm9ybWF0dGVkQ29tbWVudDtcbiAgfVxufVxuIl19","export function convertCommentToNotification(thread, comment, currentUser) {\n return {\n channel: 'InApp',\n template: {\n category: 'Inbox',\n prority: 'Notice',\n icon: 'fa-light fa-comment',\n isPinned: false,\n },\n title: thread.title || 'New Comment',\n body: comment.message.content,\n sender: comment.author,\n receiver: currentUser,\n content: comment.message,\n readAt: null,\n type: 'Comment',\n data: {\n threadId: thread.id,\n entityTypeId: thread.entityRef?.entityTypeId,\n entityId: thread.entityRef?.entityId,\n moduleName: thread.entityRef?.moduleName,\n entityName: thread.entityRef?.entityName,\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1ub3RpZmljYXRpb24uaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NvbW1lbnQvY29tbWVudC1ub3RpZmljYXRpb24uaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sVUFBVSw0QkFBNEIsQ0FDMUMsTUFBd0IsRUFDeEIsT0FBbUIsRUFDbkIsV0FBNkI7SUFFN0IsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPO1FBQ2hCLFFBQVEsRUFBRTtZQUNSLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLElBQUksRUFBRSxxQkFBcUI7WUFDM0IsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFDRCxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssSUFBSSxhQUFhO1FBQ3BDLElBQUksRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU87UUFDN0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixNQUFNLEVBQUUsSUFBSTtRQUNaLElBQUksRUFBRSxTQUFTO1FBQ2YsSUFBSSxFQUFFO1lBQ0osUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLFlBQVksRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLFlBQVk7WUFDNUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUTtZQUNwQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxVQUFVO1lBQ3hDLFVBQVUsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVU7U0FDekM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYTU5vdGlmaWNhdGlvbkl0ZW0gfSBmcm9tICdAYWNvcmV4L21vZHVsZXMvbm90aWZpY2F0aW9uLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQVXNlclJlZmVyZW5jZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWE1Db21tZW50LCBBWE1Db21tZW50VGhyZWFkIH0gZnJvbSAnLi9jb21tZW50LnR5cGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydENvbW1lbnRUb05vdGlmaWNhdGlvbihcbiAgdGhyZWFkOiBBWE1Db21tZW50VGhyZWFkLFxuICBjb21tZW50OiBBWE1Db21tZW50LFxuICBjdXJyZW50VXNlcjogQVhQVXNlclJlZmVyZW5jZSxcbik6IE9taXQ8QVhNTm90aWZpY2F0aW9uSXRlbSwgJ2lkJyB8ICdlbnRpdHlOYW1lJyB8ICdjcmVhdGVBdCc+IHtcbiAgcmV0dXJuIHtcbiAgICBjaGFubmVsOiAnSW5BcHAnLFxuICAgIHRlbXBsYXRlOiB7XG4gICAgICBjYXRlZ29yeTogJ0luYm94JyxcbiAgICAgIHByb3JpdHk6ICdOb3RpY2UnLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWNvbW1lbnQnLFxuICAgICAgaXNQaW5uZWQ6IGZhbHNlLFxuICAgIH0sXG4gICAgdGl0bGU6IHRocmVhZC50aXRsZSB8fCAnTmV3IENvbW1lbnQnLFxuICAgIGJvZHk6IGNvbW1lbnQubWVzc2FnZS5jb250ZW50LFxuICAgIHNlbmRlcjogY29tbWVudC5hdXRob3IsXG4gICAgcmVjZWl2ZXI6IGN1cnJlbnRVc2VyLFxuICAgIGNvbnRlbnQ6IGNvbW1lbnQubWVzc2FnZSxcbiAgICByZWFkQXQ6IG51bGwsXG4gICAgdHlwZTogJ0NvbW1lbnQnLFxuICAgIGRhdGE6IHtcbiAgICAgIHRocmVhZElkOiB0aHJlYWQuaWQsXG4gICAgICBlbnRpdHlUeXBlSWQ6IHRocmVhZC5lbnRpdHlSZWY/LmVudGl0eVR5cGVJZCxcbiAgICAgIGVudGl0eUlkOiB0aHJlYWQuZW50aXR5UmVmPy5lbnRpdHlJZCxcbiAgICAgIG1vZHVsZU5hbWU6IHRocmVhZC5lbnRpdHlSZWY/Lm1vZHVsZU5hbWUsXG4gICAgICBlbnRpdHlOYW1lOiB0aHJlYWQuZW50aXR5UmVmPy5lbnRpdHlOYW1lLFxuICAgIH0sXG4gIH07XG59XG4iXX0=","import { AXWysiwygModule } from '@acorex/components/wysiwyg';\nimport { ChangeDetectionStrategy, Component, DestroyRef, inject, input, signal, viewChild, } from '@angular/core';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXToastService } from '@acorex/components/toast';\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { AXAvatarModule } from '@acorex/components/avatar';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXCommentModule } from '@acorex/components/comment';\nimport { AXConversationModule } from '@acorex/components/conversation';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXImageModule } from '@acorex/components/image';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXToolBarModule } from '@acorex/components/toolbar';\nimport { AXFormatModule } from '@acorex/core/format';\nimport { AXMNotificationConnectorService } from '@acorex/modules/notification-management';\nimport { AXPSessionService } from '@acorex/platform/auth';\nimport { AXPUserAvatarComponent } from '@acorex/platform/layout/components';\nimport { AsyncPipe } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { filter } from 'rxjs';\nimport { AXMCommentManagementService } from './comment-management.service';\nimport { convertCommentToNotification } from './comment-notification.helper';\nimport { AXMCommentRealtimeService } from './comment-realtime.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/wysiwyg\";\nimport * as i2 from \"@acorex/components/skeleton\";\nimport * as i3 from \"@acorex/components/decorators\";\nimport * as i4 from \"@acorex/components/comment\";\nimport * as i5 from \"@acorex/components/button\";\nimport * as i6 from \"@acorex/components/loading\";\nimport * as i7 from \"@acorex/components/dropdown\";\nimport * as i8 from \"@angular/forms\";\nimport * as i9 from \"@acorex/components/dropdown-button\";\nimport * as i10 from \"@acorex/core/format\";\nexport class AXMCommentComponent {\n constructor() {\n this.refrenceType = input.required(...(ngDevMode ? [{ debugName: \"refrenceType\" }] : []));\n this.refrenceId = input.required(...(ngDevMode ? [{ debugName: \"refrenceId\" }] : []));\n this.subject = input.required(...(ngDevMode ? [{ debugName: \"subject\" }] : []));\n this.moduleName = signal(undefined, ...(ngDevMode ? [{ debugName: \"moduleName\" }] : []));\n this.entityName = signal(undefined, ...(ngDevMode ? [{ debugName: \"entityName\" }] : []));\n this.hasCooldown = signal(false, ...(ngDevMode ? [{ debugName: \"hasCooldown\" }] : []));\n this.commentContent = signal('', ...(ngDevMode ? [{ debugName: \"commentContent\" }] : []));\n this.isSubmitting = signal(false, ...(ngDevMode ? [{ debugName: \"isSubmitting\" }] : []));\n this.isReplyingMode = signal(false, ...(ngDevMode ? [{ debugName: \"isReplyingMode\" }] : []));\n this.isEditingMode = signal(false, ...(ngDevMode ? [{ debugName: \"isEditingMode\" }] : []));\n this.isLoading = signal(true, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n this.failedImageIds = signal([], ...(ngDevMode ? [{ debugName: \"failedImageIds\" }] : []));\n this.activeReplyComment = signal(undefined, ...(ngDevMode ? [{ debugName: \"activeReplyComment\" }] : []));\n this.activeEditComment = signal(undefined, ...(ngDevMode ? [{ debugName: \"activeEditComment\" }] : []));\n this.highlightedCommentId = signal(null, ...(ngDevMode ? [{ debugName: \"highlightedCommentId\" }] : []));\n this.wysiwygEditor = viewChild.required('w');\n this.commentService = inject(AXMCommentManagementService);\n this.realtimeService = inject(AXMCommentRealtimeService);\n this.sessionService = inject(AXPSessionService);\n this.toastService = inject(AXToastService);\n this.dialogService = inject(AXDialogService);\n this.notificationConnectorService = inject(AXMNotificationConnectorService);\n this.router = inject(Router);\n this.activatedRoute = inject(ActivatedRoute);\n this.sanitize = inject(DomSanitizer);\n this.destroyRef = inject(DestroyRef);\n this.comments = signal([], ...(ngDevMode ? [{ debugName: \"comments\" }] : []));\n this.thread = signal(undefined, ...(ngDevMode ? [{ debugName: \"thread\" }] : []));\n this.wysiwygOptions = signal({\n look: 'solid',\n }, ...(ngDevMode ? [{ debugName: \"wysiwygOptions\" }] : []));\n this.avatarConfig = signal({\n color: 'primary',\n look: 'rounded',\n type: 'solid',\n }, ...(ngDevMode ? [{ debugName: \"avatarConfig\" }] : []));\n }\n ngOnInit() {\n this.isLoading.set(true);\n this.moduleName.set(this.activatedRoute.snapshot.params['module'] || null);\n this.entityName.set(this.activatedRoute.snapshot.params['entity'] || null);\n this.loadComments().finally(() => {\n setTimeout(() => {\n this.isLoading.set(false);\n }, 250);\n });\n this.realtimeService.comment$\n .pipe(takeUntilDestroyed(this.destroyRef), filter((event) => !!event))\n .subscribe((event) => {\n switch (event.type) {\n case 'add':\n this.handleAddComment(event.payload);\n break;\n case 'update':\n this.handleUpdateComment(event.payload);\n break;\n case 'remove':\n this.removeMessageById(event.payload);\n break;\n }\n });\n }\n handleAddComment(comment) {\n if (comment.author.id !== this.getCurrentUser()?.id) {\n const notification = convertCommentToNotification(this.thread(), comment, this.sessionService.user);\n this.notificationConnectorService.create({\n ...notification,\n id: comment.id,\n entityName: 'notifications',\n createAt: new Date(),\n }, {\n onClick: () => {\n this.router.navigate([this.refrenceType(), 't', this.refrenceType(), 'i', this.refrenceId()]);\n },\n activeWindow: true,\n });\n }\n if (comment.replyId) {\n this.comments.update((comments) => {\n return comments.map((c) => {\n if (c.id === comment.replyId) {\n const newReplies = c.replies ? [...c.replies, comment] : [comment];\n return { ...c, replies: newReplies, replyCount: newReplies.length };\n }\n return c;\n });\n });\n }\n else {\n this.comments.update((comments) => [...comments, comment]);\n }\n }\n handleUpdateComment(updatedComment) {\n const update = (list) => {\n return list.map((c) => {\n if (c.id === updatedComment.id) {\n return { ...c, ...updatedComment, replies: updatedComment.replies || c.replies };\n }\n if (c.replies && c.replies.length > 0) {\n return { ...c, replies: update(c.replies) };\n }\n return c;\n });\n };\n this.comments.update((comments) => update(comments));\n }\n getCurrentUser() {\n const user = this.sessionService.user;\n return user ? { id: user.id, type: 'user' } : null;\n }\n isLikedByUser(comment) {\n const user = this.getCurrentUser();\n if (!user)\n return false;\n return (comment.reactions || []).some((r) => r.author.id === user.id && r.type === 'like');\n }\n getReactionsCount(comment) {\n return (comment.reactions || []).filter((r) => r.type === 'like').length;\n }\n sanitizeHtml(htmlContent) {\n if (!htmlContent)\n return this.sanitize.bypassSecurityTrustHtml('');\n return this.sanitize.bypassSecurityTrustHtml(htmlContent);\n }\n handleImageError(imageId) {\n this.failedImageIds.update((ids) => [...ids, imageId]);\n }\n checkImageExists(imageId) {\n return !this.failedImageIds().includes(imageId);\n }\n async loadComments() {\n try {\n const thread = await this.commentService.getThread({\n entityTypeId: this.refrenceType(),\n entityId: this.refrenceId(),\n moduleName: this.moduleName(),\n entityName: this.entityName(),\n }, this.subject());\n if (thread) {\n this.thread.set(thread);\n this.comments.set(thread.comments || []);\n }\n else {\n const newThread = await this.commentService.createThread({\n entityTypeId: this.refrenceType(),\n entityId: this.refrenceId(),\n moduleName: this.moduleName(),\n entityName: this.entityName(),\n }, this.subject());\n this.thread.set(newThread);\n this.comments.set(newThread.comments || []);\n }\n }\n catch (error) {\n console.error('Failed to load comments:', error);\n this.toastService.show({\n content: 'Failed to load comments. Please try again.',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n this.comments.set([]);\n }\n }\n editMessage(comment, reply, userName) {\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n this.isEditingMode.set(true);\n this.activeEditComment.set({ ...comment, userName: userName || '' });\n const contentToEdit = reply ? reply.message?.content : comment.message?.content;\n this.commentContent.set(contentToEdit || '');\n this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n replyMessage(comment, reply, userName) {\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n this.isReplyingMode.set(true);\n this.activeReplyComment.set({ ...comment, userName: userName || '' });\n if (reply) {\n const author = reply.author.fullName || reply.author.id;\n const mention = `<strong><a data-id=\"${reply.author.username}\">@${userName || author}</a></strong> `;\n this.commentContent.set(mention);\n document.getElementsByClassName('ql-editor')[0].innerHTML = mention;\n this.wysiwygEditor()?.focus();\n }\n this.wysiwygEditor().getHostElement().scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n async deleteComment(commentId) {\n const dialog = this.dialogService.open({\n icon: 'fa-regular fa-warning',\n content: 'Are you sure you want to delete this comment?',\n title: 'Delete Comment',\n type: 'danger',\n orientation: 'horizontal',\n buttons: [\n {\n text: 'Delete',\n color: 'danger',\n onClick: async (e) => {\n e.handled = true;\n e.source.text = 'Deleting...';\n e.source.disabled = true;\n e.source.loading = true;\n try {\n await this.commentService.deleteComment(commentId);\n this.removeMessageById(commentId);\n this.toastService.show({\n content: 'Comment deleted successfully.',\n color: 'success',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n if (this.isEditingMode() && this.activeEditComment()?.id === commentId) {\n this.resetReplyEditState();\n }\n dialog.close();\n }\n catch (error) {\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to delete comment!',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n },\n },\n {\n text: 'Cancel',\n color: 'default',\n autofocus: true,\n onClick: (e) => {\n dialog.close();\n },\n },\n ],\n closeButton: false,\n });\n }\n resetReplyEditState() {\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n this.commentContent.set('');\n document.getElementsByClassName('ql-editor')[0].innerHTML = '';\n }\n async toggleLike(comment) {\n const isLiked = this.isLikedByUser(comment);\n this.updateLikeStatus(comment.id, !isLiked);\n try {\n if (isLiked) {\n await this.commentService.unlikeComment(comment.id);\n }\n else {\n await this.commentService.likeComment(comment.id);\n }\n }\n catch (error) {\n console.error('Failed to toggle like:', error);\n this.updateLikeStatus(comment.id, isLiked); // Revert optimistic update\n }\n }\n updateLikeStatus(commentId, willBeLiked) {\n const findAndToggle = (comments) => {\n return comments.map((c) => {\n if (c.id === commentId) {\n const user = this.getCurrentUser();\n if (!user)\n return c;\n let reactions = c.reactions || [];\n if (willBeLiked) {\n reactions.push({ author: user, type: 'like' });\n }\n else {\n reactions = reactions.filter((r) => r.author.id !== user.id || r.type !== 'like');\n }\n return { ...c, reactions };\n }\n if (c.replies && c.replies.length > 0) {\n c.replies = findAndToggle(c.replies);\n }\n return c;\n });\n };\n this.comments.update((comments) => findAndToggle(comments));\n }\n removeMessageById(commentId) {\n const filterOut = (comments) => {\n return comments\n .filter((c) => c.id !== commentId)\n .map((c) => {\n if (c.replies && c.replies.length > 0) {\n c.replies = filterOut(c.replies);\n }\n return c;\n });\n };\n this.comments.update((comments) => filterOut(comments));\n }\n async submitComment() {\n this.isSubmitting.set(true);\n try {\n let currentThread = this.thread();\n if (!currentThread) {\n return;\n }\n if (this.isEditingMode() && this.activeEditComment()?.id) {\n await this.commentService.editComment(this.activeEditComment().id, this.commentContent());\n this.hasCooldown.set(true);\n this.isEditingMode.set(false);\n this.activeEditComment.set(undefined);\n }\n else {\n await this.commentService.addComment(currentThread.id, this.commentContent(), this.activeReplyComment()?.id);\n this.hasCooldown.set(true);\n this.isReplyingMode.set(false);\n this.activeReplyComment.set(undefined);\n }\n this.commentContent.set('');\n document.getElementsByClassName('ql-editor')[0].innerHTML = '';\n setTimeout(() => {\n this.hasCooldown.set(false);\n }, 1000);\n }\n catch (error) {\n console.error('Error submitting comment:', error);\n this.toastService.show({\n content: typeof error === 'string' ? error : 'Failed to submit comment. Please try again.',\n color: 'danger',\n location: 'bottom-center',\n closeButton: true,\n timeOut: 3000,\n timeOutProgress: true,\n });\n }\n finally {\n this.isSubmitting.set(false);\n }\n }\n scrollMain() {\n const comment = this.isReplyingMode() ? this.activeReplyComment() : this.activeEditComment();\n if (comment && comment.id) {\n const el = document.getElementById(comment.id);\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'center' });\n this.highlightedCommentId.set(comment.id);\n setTimeout(() => {\n this.highlightedCommentId.set(null);\n }, 1000);\n }\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMCommentComponent, isStandalone: true, selector: \"axm-comment\", inputs: { refrenceType: { classPropertyName: \"refrenceType\", publicName: \"refrenceType\", isSignal: true, isRequired: true, transformFunction: null }, refrenceId: { classPropertyName: \"refrenceId\", publicName: \"refrenceId\", isSignal: true, isRequired: true, transformFunction: null }, subject: { classPropertyName: \"subject\", publicName: \"subject\", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: \"wysiwygEditor\", first: true, predicate: [\"w\"], descendants: true, isSignal: true }], ngImport: i0, template: \"<div class=\\\"ax-size-full ax-flex ax-flex-col ax-justify-between ax-p-4 ax-overflow-hidden\\\">\\n <ax-comment-container class=\\\"ax-overflow-auto\\\">\\n @if (isLoading()) {\\n <div class=\\\"ax-flex ax-items-center ax-py-12 ax-bg-lightest ax-px-5\\\">\\n <ax-skeleton class=\\\"ax-min-w-16 ax-h-16 ax-rounded-full ax-me-4\\\"></ax-skeleton>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 ax-w-full\\\">\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-2 ax-rounded-full\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-2 ax-rounded-full\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-8/12 ax-h-2 ax-rounded-full\\\"></ax-skeleton>\\n </div>\\n </div>\\n } @else if (!isLoading() && comments().length > 0) {\\n <ax-comment-view class=\\\"ax-bg-lightest\\\">\\n @for (comment of comments(); track comment.id) {\\n <ax-comment-item\\n [id]=\\\"comment.id!\\\"\\n [replyCount]=\\\"comment.replyCount\\\"\\n [class.highlighted]=\\\"highlightedCommentId() === comment.id\\\"\\n [@fadeIn]\\n >\\n <axp-user-avatar #user [size]=\\\"48\\\" [userId]=\\\"comment.author.id\\\" ngProjectAs=\\\"'ax-avatar'\\\"></axp-user-avatar>\\n <ax-title>{{ user.firstName() + ' ' + user.lastName() }}</ax-title>\\n <ax-comment-date>{{ comment.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\\n <ax-comment-menu-options>\\n <ax-button class=\\\"ax-sm\\\" look=\\\"blank\\\" color=\\\"neutral\\\">\\n <ax-icon icon=\\\"ax-icon ax-icon-solid ax-icon-more-horizontal\\\"></ax-icon>\\n </ax-button>\\n\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n <ax-button-item\\n text=\\\"Edit\\\"\\n color=\\\"neutral\\\"\\n (click)=\\\"editMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\\\"\\n >\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-edit\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n\\n <ax-button-item text=\\\"Delete\\\" color=\\\"danger\\\" (click)=\\\"deleteComment(comment.id!)\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-trash-can\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-comment-menu-options>\\n <ax-content [innerHTML]=\\\"sanitizeHtml(comment.message.content)\\\"></ax-content>\\n <ax-comment-like (click)=\\\"toggleLike(comment)\\\" [like]=\\\"isLikedByUser(comment)\\\">\\n {{ getReactionsCount(comment) }}\\n </ax-comment-like>\\n <ax-comment-reply-text\\n (click)=\\\"replyMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\\\"\\n ></ax-comment-reply-text>\\n @for (reply of comment.replies; track reply.id) {\\n <ax-comment-item [id]=\\\"reply.id\\\" [class.highlighted]=\\\"highlightedCommentId() === reply.id\\\" [@fadeIn]>\\n <axp-user-avatar\\n #user2\\n [size]=\\\"48\\\"\\n [userId]=\\\"reply.author.id\\\"\\n ngProjectAs=\\\"'ax-avatar'\\\"\\n ></axp-user-avatar>\\n <ax-title>{{ user2.firstName() + ' ' + user2.lastName() }}</ax-title>\\n <ax-comment-date>{{ reply.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\\n <ax-comment-menu-options>\\n <ax-button class=\\\"ax-sm\\\" look=\\\"blank\\\" color=\\\"neutral\\\">\\n <ax-icon icon=\\\"ax-icon ax-icon-solid ax-icon-more-horizontal\\\"></ax-icon>\\n </ax-button>\\n\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n <ax-button-item\\n text=\\\"Edit\\\"\\n color=\\\"neutral\\\"\\n (click)=\\\"editMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\\\"\\n >\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-edit\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n <ax-button-item text=\\\"Delete\\\" color=\\\"danger\\\" (click)=\\\"deleteComment(reply.id!)\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-trash-can\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-comment-menu-options>\\n <ax-content [innerHTML]=\\\"sanitizeHtml(reply.message.content)\\\"></ax-content>\\n <ax-comment-like (click)=\\\"toggleLike(reply)\\\" [like]=\\\"isLikedByUser(reply)\\\">\\n {{ getReactionsCount(reply) }}\\n </ax-comment-like>\\n <ax-comment-reply-text\\n (click)=\\\"replyMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\\\"\\n ></ax-comment-reply-text>\\n </ax-comment-item>\\n }\\n </ax-comment-item>\\n }\\n </ax-comment-view>\\n } @else {\\n <div>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-4 ax-justify-center ax-items-center ax-p-10\\\">\\n <svg\\n class=\\\"ax-mx-auto\\\"\\n xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n width=\\\"154\\\"\\n height=\\\"161\\\"\\n viewBox=\\\"0 0 154 161\\\"\\n fill=\\\"none\\\"\\n >\\n <path\\n d=\\\"M0.0616455 84.4268C0.0616455 42.0213 34.435 7.83765 76.6507 7.83765C118.803 7.83765 153.224 42.0055 153.224 84.4268C153.224 102.42 147.026 118.974 136.622 132.034C122.282 150.138 100.367 161 76.6507 161C52.7759 161 30.9882 150.059 16.6633 132.034C6.25961 118.974 0.0616455 102.42 0.0616455 84.4268Z\\\"\\n fill=\\\"#EEF2FF\\\"\\n />\\n <path\\n d=\\\"M96.8189 0.632498L96.8189 0.632384L96.8083 0.630954C96.2034 0.549581 95.5931 0.5 94.9787 0.5H29.338C22.7112 0.5 17.3394 5.84455 17.3394 12.4473V142.715C17.3394 149.318 22.7112 154.662 29.338 154.662H123.948C130.591 154.662 135.946 149.317 135.946 142.715V38.9309C135.946 38.0244 135.847 37.1334 135.648 36.2586L135.648 36.2584C135.117 33.9309 133.874 31.7686 132.066 30.1333C132.066 30.1331 132.065 30.1329 132.065 30.1327L103.068 3.65203C103.068 3.6519 103.067 3.65177 103.067 3.65164C101.311 2.03526 99.1396 0.995552 96.8189 0.632498Z\\\"\\n fill=\\\"white\\\"\\n stroke=\\\"#E5E7EB\\\"\\n />\\n <ellipse cx=\\\"80.0618\\\" cy=\\\"81\\\" rx=\\\"28.0342\\\" ry=\\\"28.0342\\\" fill=\\\"#EEF2FF\\\" />\\n <path\\n d=\\\"M99.2393 61.3061L99.2391 61.3058C88.498 50.5808 71.1092 50.5804 60.3835 61.3061C49.6423 72.0316 49.6422 89.4361 60.3832 100.162C71.109 110.903 88.4982 110.903 99.2393 100.162C109.965 89.4363 109.965 72.0317 99.2393 61.3061ZM105.863 54.6832C120.249 69.0695 120.249 92.3985 105.863 106.785C91.4605 121.171 68.1468 121.171 53.7446 106.785C39.3582 92.3987 39.3582 69.0693 53.7446 54.683C68.1468 40.2965 91.4605 40.2966 105.863 54.6832Z\\\"\\n stroke=\\\"#E5E7EB\\\"\\n />\\n <path\\n d=\\\"M110.782 119.267L102.016 110.492C104.888 108.267 107.476 105.651 109.564 102.955L118.329 111.729L110.782 119.267Z\\\"\\n stroke=\\\"#E5E7EB\\\"\\n />\\n <path\\n d=\\\"M139.122 125.781L139.122 125.78L123.313 109.988C123.313 109.987 123.313 109.987 123.312 109.986C121.996 108.653 119.849 108.657 118.521 109.985L118.871 110.335L118.521 109.985L109.047 119.459C107.731 120.775 107.735 122.918 109.044 124.247L109.047 124.249L124.858 140.06C128.789 143.992 135.191 143.992 139.122 140.06C143.069 136.113 143.069 129.728 139.122 125.781Z\\\"\\n fill=\\\"#A5B4FC\\\"\\n stroke=\\\"#818CF8\\\"\\n />\\n <path\\n d=\\\"M83.185 87.2285C82.5387 87.2285 82.0027 86.6926 82.0027 86.0305C82.0027 83.3821 77.9987 83.3821 77.9987 86.0305C77.9987 86.6926 77.4627 87.2285 76.8006 87.2285C76.1543 87.2285 75.6183 86.6926 75.6183 86.0305C75.6183 80.2294 84.3831 80.2451 84.3831 86.0305C84.3831 86.6926 83.8471 87.2285 83.185 87.2285Z\\\"\\n fill=\\\"#4F46E5\\\"\\n />\\n <path\\n d=\\\"M93.3528 77.0926H88.403C87.7409 77.0926 87.2049 76.5567 87.2049 75.8946C87.2049 75.2483 87.7409 74.7123 88.403 74.7123H93.3528C94.0149 74.7123 94.5509 75.2483 94.5509 75.8946C94.5509 76.5567 94.0149 77.0926 93.3528 77.0926Z\\\"\\n fill=\\\"#4F46E5\\\"\\n />\\n <path\\n d=\\\"M71.5987 77.0925H66.6488C65.9867 77.0925 65.4507 76.5565 65.4507 75.8945C65.4507 75.2481 65.9867 74.7122 66.6488 74.7122H71.5987C72.245 74.7122 72.781 75.2481 72.781 75.8945C72.781 76.5565 72.245 77.0925 71.5987 77.0925Z\\\"\\n fill=\\\"#4F46E5\\\"\\n />\\n <rect x=\\\"38.3522\\\" y=\\\"21.5128\\\" width=\\\"41.0256\\\" height=\\\"2.73504\\\" rx=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <rect x=\\\"38.3522\\\" y=\\\"133.65\\\" width=\\\"54.7009\\\" height=\\\"5.47009\\\" rx=\\\"2.73504\\\" fill=\\\"#A5B4FC\\\" />\\n <rect x=\\\"38.3522\\\" y=\\\"29.7179\\\" width=\\\"13.6752\\\" height=\\\"2.73504\\\" rx=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <circle cx=\\\"56.13\\\" cy=\\\"31.0854\\\" r=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <circle cx=\\\"61.6001\\\" cy=\\\"31.0854\\\" r=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <circle cx=\\\"67.0702\\\" cy=\\\"31.0854\\\" r=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n </svg>\\n <div>\\n <h2 class=\\\"ax-text-center ax-text-neutral-600 ax-font-semibold ax-leading-loose ax-pb-2\\\">\\n There is no Comment!\\n </h2>\\n </div>\\n </div>\\n </div>\\n }\\n </ax-comment-container>\\n <div>\\n @if (isReplyingMode() || isEditingMode()) {\\n <div\\n class=\\\"ax-flex ax-justify-between ax-rounded-b-none ax-border ax-border-b-0 ax-rounded-lg ax-px-6 ax-py-3 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\\\"\\n >\\n <div (click)=\\\"scrollMain()\\\" class=\\\"ax-flex ax-justify-start ax-items-center ax-cursor-pointer\\\">\\n <i\\n [class]=\\\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\\\"\\n class=\\\"fa-solid ax-text-primary-500 dark:ax-text-primary-300 ax-text-2xl ax-me-4\\\"\\n ></i>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle ax-leading-4 ax-overflow-hidden\\\">\\n <p class=\\\"ax-text-primary-500 dark:ax-text-primary-300\\\">\\n {{ isReplyingMode() ? 'Reply to ' : 'Edit Message' }}\\n <span class=\\\"ax-font-bold\\\">\\n {{ isReplyingMode() ? activeReplyComment()?.userName : '' }}\\n </span>\\n </p>\\n <div\\n class=\\\"ax-truncate\\\"\\n [innerHTML]=\\\"\\n isReplyingMode()\\n ? sanitizeHtml(activeReplyComment()?.message?.content ?? '')\\n : sanitizeHtml(activeEditComment()?.message?.content ?? '')\\n \\\"\\n ></div>\\n </div>\\n </div>\\n <div><i (click)=\\\"resetReplyEditState()\\\" class=\\\"fa-solid ax-text-2xl fa-xmark ax-cursor-pointer\\\"></i></div>\\n </div>\\n }\\n <ax-wysiwyg-container #w [look]=\\\"wysiwygOptions().look\\\" [(ngModel)]=\\\"commentContent\\\">\\n <ax-wysiwyg-view class=\\\"ax-min-h-28\\\"></ax-wysiwyg-view>\\n <ax-wysiwyg-toolbar>\\n <ax-prefix>\\n <ax-wysiwyg-history></ax-wysiwyg-history>\\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\\n <ax-wysiwyg-list></ax-wysiwyg-list>\\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\\n </ax-prefix>\\n <ax-suffix>\\n <ax-dropdown-button\\n [disabled]=\\\"hasCooldown() || !this.commentContent()\\\"\\n type=\\\"submit\\\"\\n color=\\\"primary\\\"\\n mode=\\\"split\\\"\\n text=\\\"Send\\\"\\n (onClick)=\\\"submitComment()\\\"\\n >\\n @if (isSubmitting()) {\\n <ax-loading></ax-loading>\\n }\\n <!-- <ax-button-item-list>\\n <ax-button-item (click)=\\\"submitComment()\\\" text=\\\"Send Private ...\\\" name=\\\"private\\\" data=\\\"private\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-regular fa-user-secret\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n </ax-button-item-list> -->\\n </ax-dropdown-button>\\n </ax-suffix>\\n </ax-wysiwyg-toolbar>\\n </ax-wysiwyg-container>\\n </div>\\n</div>\\n\", styles: [\":host{display:block;width:100%;height:100%}ax-wysiwyg-container .ax-editor-container{border-top-left-radius:0!important;border-top-right-radius:0!important}ax-wysiwyg-container .ax-error-message{padding-left:.5rem}ax-wysiwyg-container .highlighted{background:var(--ax-color-primary-050)!important;border-radius:.25rem;transition:background 1s ease-in-out}\\n\"], dependencies: [{ kind: \"ngmodule\", type: AXWysiwygModule }, { kind: \"component\", type: i1.AXWysiwygContainerComponent, selector: \"ax-wysiwyg-container\", inputs: [\"look\", \"readonly\", \"disabled\", \"placeHolder\"], outputs: [\"onValueChanged\"] }, { kind: \"component\", type: i1.AXWysiwygViewComponent, selector: \"ax-wysiwyg-view\" }, { kind: \"component\", type: i1.AXWysiwygAlignmentComponent, selector: \"ax-wysiwyg-alignment\" }, { kind: \"component\", type: i1.AXWysiwygColorsComponent, selector: \"ax-wysiwyg-colors\" }, { kind: \"component\", type: i1.AXWysiwygFontStyleComponent, selector: \"ax-wysiwyg-font-style\" }, { kind: \"component\", type: i1.AXWysiwygHistoryComponent, selector: \"ax-wysiwyg-history\" }, { kind: \"component\", type: i1.AXWysiwygListComponent, selector: \"ax-wysiwyg-list\" }, { kind: \"component\", type: i1.AXWysiwygToolbarComponent, selector: \"ax-wysiwyg-toolbar\" }, { kind: \"ngmodule\", type: AXConversationModule }, { kind: \"ngmodule\", type: AXSkeletonModule }, { kind: \"component\", type: i2.AXSkeletonComponent, selector: \"ax-skeleton\", inputs: [\"animated\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i3.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i3.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXCommentModule }, { kind: \"component\", type: i4.AXCommentViewComponent, selector: \"ax-comment-view\" }, { kind: \"component\", type: i4.AXCommentContainerComponent, selector: \"ax-comment-container\" }, { kind: \"component\", type: i4.AXCommentItemComponent, selector: \"ax-comment-item\", inputs: [\"replyCount\"] }, { kind: \"component\", type: i4.AXCommentLikeComponent, selector: \"ax-comment-like\", inputs: [\"like\"], outputs: [\"likeChange\"] }, { kind: \"component\", type: i4.AXMenuOptionsComponent, selector: \"ax-comment-menu-options\" }, { kind: \"component\", type: i4.AXCommentReplyTextComponent, selector: \"ax-comment-reply-text\" }, { kind: \"component\", type: i4.AXCommentDateComponent, selector: \"ax-comment-date\" }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i5.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"component\", type: i5.AXButtonItemComponent, selector: \"ax-button-item\", inputs: [\"color\", \"disabled\", \"text\", \"selected\", \"divided\", \"data\", \"name\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\", \"disabledChange\"] }, { kind: \"component\", type: i5.AXButtonItemListComponent, selector: \"ax-button-item-list\", inputs: [\"items\", \"closeParentOnClick\", \"lockOnLoading\"], outputs: [\"onItemClick\"] }, { kind: \"ngmodule\", type: AXAvatarModule }, { kind: \"ngmodule\", type: AXImageModule }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"component\", type: i6.AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"component\", type: i7.AXDropdownPanelComponent, selector: \"ax-dropdown-panel\", inputs: [\"isOpen\", \"fitParent\", \"dropdownWidth\", \"position\", \"placement\", \"_target\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"ngmodule\", type: AXFormatModule }, { kind: \"ngmodule\", type: AXFormModule }, { kind: \"ngmodule\", type: AXToolBarModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i8.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i8.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"ngmodule\", type: AXDropdownButtonModule }, { kind: \"component\", type: i9.AXDropdownButtonComponent, selector: \"ax-dropdown-button\", inputs: [\"disabled\", \"size\", \"color\", \"look\", \"text\", \"type\", \"mode\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"lookChange\", \"colorChange\", \"disabledChange\"] }, { kind: \"component\", type: AXPUserAvatarComponent, selector: \"axp-user-avatar\", inputs: [\"size\", \"userId\"] }, { kind: \"pipe\", type: i10.AXFormatPipe, name: \"format\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }], animations: [\n trigger('fadeIn', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(10px)' }),\n animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n ]),\n ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-comment', animations: [\n trigger('fadeIn', [\n transition(':enter', [\n style({ opacity: 0, transform: 'translateY(10px)' }),\n animate('300ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\n ]),\n ]),\n ], imports: [\n AXWysiwygModule,\n AXConversationModule,\n AXSkeletonModule,\n AXDecoratorModule,\n AXCommentModule,\n AXButtonModule,\n AXAvatarModule,\n AXImageModule,\n AXLoadingModule,\n AXDropdownModule,\n AXFormatModule,\n AsyncPipe,\n AXFormModule,\n AXToolBarModule,\n FormsModule,\n AXDropdownButtonModule,\n AXPUserAvatarComponent,\n ], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"ax-size-full ax-flex ax-flex-col ax-justify-between ax-p-4 ax-overflow-hidden\\\">\\n <ax-comment-container class=\\\"ax-overflow-auto\\\">\\n @if (isLoading()) {\\n <div class=\\\"ax-flex ax-items-center ax-py-12 ax-bg-lightest ax-px-5\\\">\\n <ax-skeleton class=\\\"ax-min-w-16 ax-h-16 ax-rounded-full ax-me-4\\\"></ax-skeleton>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 ax-w-full\\\">\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-2 ax-rounded-full\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-2 ax-rounded-full\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-8/12 ax-h-2 ax-rounded-full\\\"></ax-skeleton>\\n </div>\\n </div>\\n } @else if (!isLoading() && comments().length > 0) {\\n <ax-comment-view class=\\\"ax-bg-lightest\\\">\\n @for (comment of comments(); track comment.id) {\\n <ax-comment-item\\n [id]=\\\"comment.id!\\\"\\n [replyCount]=\\\"comment.replyCount\\\"\\n [class.highlighted]=\\\"highlightedCommentId() === comment.id\\\"\\n [@fadeIn]\\n >\\n <axp-user-avatar #user [size]=\\\"48\\\" [userId]=\\\"comment.author.id\\\" ngProjectAs=\\\"'ax-avatar'\\\"></axp-user-avatar>\\n <ax-title>{{ user.firstName() + ' ' + user.lastName() }}</ax-title>\\n <ax-comment-date>{{ comment.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\\n <ax-comment-menu-options>\\n <ax-button class=\\\"ax-sm\\\" look=\\\"blank\\\" color=\\\"neutral\\\">\\n <ax-icon icon=\\\"ax-icon ax-icon-solid ax-icon-more-horizontal\\\"></ax-icon>\\n </ax-button>\\n\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n <ax-button-item\\n text=\\\"Edit\\\"\\n color=\\\"neutral\\\"\\n (click)=\\\"editMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\\\"\\n >\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-edit\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n\\n <ax-button-item text=\\\"Delete\\\" color=\\\"danger\\\" (click)=\\\"deleteComment(comment.id!)\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-trash-can\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-comment-menu-options>\\n <ax-content [innerHTML]=\\\"sanitizeHtml(comment.message.content)\\\"></ax-content>\\n <ax-comment-like (click)=\\\"toggleLike(comment)\\\" [like]=\\\"isLikedByUser(comment)\\\">\\n {{ getReactionsCount(comment) }}\\n </ax-comment-like>\\n <ax-comment-reply-text\\n (click)=\\\"replyMessage(comment, undefined, user.firstName() + ' ' + user.lastName())\\\"\\n ></ax-comment-reply-text>\\n @for (reply of comment.replies; track reply.id) {\\n <ax-comment-item [id]=\\\"reply.id\\\" [class.highlighted]=\\\"highlightedCommentId() === reply.id\\\" [@fadeIn]>\\n <axp-user-avatar\\n #user2\\n [size]=\\\"48\\\"\\n [userId]=\\\"reply.author.id\\\"\\n ngProjectAs=\\\"'ax-avatar'\\\"\\n ></axp-user-avatar>\\n <ax-title>{{ user2.firstName() + ' ' + user2.lastName() }}</ax-title>\\n <ax-comment-date>{{ reply.auditInfo?.created?.at! | format: 'timeleft' | async }} </ax-comment-date>\\n <ax-comment-menu-options>\\n <ax-button class=\\\"ax-sm\\\" look=\\\"blank\\\" color=\\\"neutral\\\">\\n <ax-icon icon=\\\"ax-icon ax-icon-solid ax-icon-more-horizontal\\\"></ax-icon>\\n </ax-button>\\n\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n <ax-button-item\\n text=\\\"Edit\\\"\\n color=\\\"neutral\\\"\\n (click)=\\\"editMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\\\"\\n >\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-edit\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n <ax-button-item text=\\\"Delete\\\" color=\\\"danger\\\" (click)=\\\"deleteComment(reply.id!)\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-solid fa-trash-can\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-comment-menu-options>\\n <ax-content [innerHTML]=\\\"sanitizeHtml(reply.message.content)\\\"></ax-content>\\n <ax-comment-like (click)=\\\"toggleLike(reply)\\\" [like]=\\\"isLikedByUser(reply)\\\">\\n {{ getReactionsCount(reply) }}\\n </ax-comment-like>\\n <ax-comment-reply-text\\n (click)=\\\"replyMessage(comment, reply, user2.firstName() + ' ' + user2.lastName())\\\"\\n ></ax-comment-reply-text>\\n </ax-comment-item>\\n }\\n </ax-comment-item>\\n }\\n </ax-comment-view>\\n } @else {\\n <div>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-4 ax-justify-center ax-items-center ax-p-10\\\">\\n <svg\\n class=\\\"ax-mx-auto\\\"\\n xmlns=\\\"http://www.w3.org/2000/svg\\\"\\n width=\\\"154\\\"\\n height=\\\"161\\\"\\n viewBox=\\\"0 0 154 161\\\"\\n fill=\\\"none\\\"\\n >\\n <path\\n d=\\\"M0.0616455 84.4268C0.0616455 42.0213 34.435 7.83765 76.6507 7.83765C118.803 7.83765 153.224 42.0055 153.224 84.4268C153.224 102.42 147.026 118.974 136.622 132.034C122.282 150.138 100.367 161 76.6507 161C52.7759 161 30.9882 150.059 16.6633 132.034C6.25961 118.974 0.0616455 102.42 0.0616455 84.4268Z\\\"\\n fill=\\\"#EEF2FF\\\"\\n />\\n <path\\n d=\\\"M96.8189 0.632498L96.8189 0.632384L96.8083 0.630954C96.2034 0.549581 95.5931 0.5 94.9787 0.5H29.338C22.7112 0.5 17.3394 5.84455 17.3394 12.4473V142.715C17.3394 149.318 22.7112 154.662 29.338 154.662H123.948C130.591 154.662 135.946 149.317 135.946 142.715V38.9309C135.946 38.0244 135.847 37.1334 135.648 36.2586L135.648 36.2584C135.117 33.9309 133.874 31.7686 132.066 30.1333C132.066 30.1331 132.065 30.1329 132.065 30.1327L103.068 3.65203C103.068 3.6519 103.067 3.65177 103.067 3.65164C101.311 2.03526 99.1396 0.995552 96.8189 0.632498Z\\\"\\n fill=\\\"white\\\"\\n stroke=\\\"#E5E7EB\\\"\\n />\\n <ellipse cx=\\\"80.0618\\\" cy=\\\"81\\\" rx=\\\"28.0342\\\" ry=\\\"28.0342\\\" fill=\\\"#EEF2FF\\\" />\\n <path\\n d=\\\"M99.2393 61.3061L99.2391 61.3058C88.498 50.5808 71.1092 50.5804 60.3835 61.3061C49.6423 72.0316 49.6422 89.4361 60.3832 100.162C71.109 110.903 88.4982 110.903 99.2393 100.162C109.965 89.4363 109.965 72.0317 99.2393 61.3061ZM105.863 54.6832C120.249 69.0695 120.249 92.3985 105.863 106.785C91.4605 121.171 68.1468 121.171 53.7446 106.785C39.3582 92.3987 39.3582 69.0693 53.7446 54.683C68.1468 40.2965 91.4605 40.2966 105.863 54.6832Z\\\"\\n stroke=\\\"#E5E7EB\\\"\\n />\\n <path\\n d=\\\"M110.782 119.267L102.016 110.492C104.888 108.267 107.476 105.651 109.564 102.955L118.329 111.729L110.782 119.267Z\\\"\\n stroke=\\\"#E5E7EB\\\"\\n />\\n <path\\n d=\\\"M139.122 125.781L139.122 125.78L123.313 109.988C123.313 109.987 123.313 109.987 123.312 109.986C121.996 108.653 119.849 108.657 118.521 109.985L118.871 110.335L118.521 109.985L109.047 119.459C107.731 120.775 107.735 122.918 109.044 124.247L109.047 124.249L124.858 140.06C128.789 143.992 135.191 143.992 139.122 140.06C143.069 136.113 143.069 129.728 139.122 125.781Z\\\"\\n fill=\\\"#A5B4FC\\\"\\n stroke=\\\"#818CF8\\\"\\n />\\n <path\\n d=\\\"M83.185 87.2285C82.5387 87.2285 82.0027 86.6926 82.0027 86.0305C82.0027 83.3821 77.9987 83.3821 77.9987 86.0305C77.9987 86.6926 77.4627 87.2285 76.8006 87.2285C76.1543 87.2285 75.6183 86.6926 75.6183 86.0305C75.6183 80.2294 84.3831 80.2451 84.3831 86.0305C84.3831 86.6926 83.8471 87.2285 83.185 87.2285Z\\\"\\n fill=\\\"#4F46E5\\\"\\n />\\n <path\\n d=\\\"M93.3528 77.0926H88.403C87.7409 77.0926 87.2049 76.5567 87.2049 75.8946C87.2049 75.2483 87.7409 74.7123 88.403 74.7123H93.3528C94.0149 74.7123 94.5509 75.2483 94.5509 75.8946C94.5509 76.5567 94.0149 77.0926 93.3528 77.0926Z\\\"\\n fill=\\\"#4F46E5\\\"\\n />\\n <path\\n d=\\\"M71.5987 77.0925H66.6488C65.9867 77.0925 65.4507 76.5565 65.4507 75.8945C65.4507 75.2481 65.9867 74.7122 66.6488 74.7122H71.5987C72.245 74.7122 72.781 75.2481 72.781 75.8945C72.781 76.5565 72.245 77.0925 71.5987 77.0925Z\\\"\\n fill=\\\"#4F46E5\\\"\\n />\\n <rect x=\\\"38.3522\\\" y=\\\"21.5128\\\" width=\\\"41.0256\\\" height=\\\"2.73504\\\" rx=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <rect x=\\\"38.3522\\\" y=\\\"133.65\\\" width=\\\"54.7009\\\" height=\\\"5.47009\\\" rx=\\\"2.73504\\\" fill=\\\"#A5B4FC\\\" />\\n <rect x=\\\"38.3522\\\" y=\\\"29.7179\\\" width=\\\"13.6752\\\" height=\\\"2.73504\\\" rx=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <circle cx=\\\"56.13\\\" cy=\\\"31.0854\\\" r=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <circle cx=\\\"61.6001\\\" cy=\\\"31.0854\\\" r=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n <circle cx=\\\"67.0702\\\" cy=\\\"31.0854\\\" r=\\\"1.36752\\\" fill=\\\"#4F46E5\\\" />\\n </svg>\\n <div>\\n <h2 class=\\\"ax-text-center ax-text-neutral-600 ax-font-semibold ax-leading-loose ax-pb-2\\\">\\n There is no Comment!\\n </h2>\\n </div>\\n </div>\\n </div>\\n }\\n </ax-comment-container>\\n <div>\\n @if (isReplyingMode() || isEditingMode()) {\\n <div\\n class=\\\"ax-flex ax-justify-between ax-rounded-b-none ax-border ax-border-b-0 ax-rounded-lg ax-px-6 ax-py-3 ax-w-full ax-items-center ax-overflow-hidden ax-text-sm ax-leading-none\\\"\\n >\\n <div (click)=\\\"scrollMain()\\\" class=\\\"ax-flex ax-justify-start ax-items-center ax-cursor-pointer\\\">\\n <i\\n [class]=\\\"isReplyingMode() ? 'fa-reply' : 'fa-pen'\\\"\\n class=\\\"fa-solid ax-text-primary-500 dark:ax-text-primary-300 ax-text-2xl ax-me-4\\\"\\n ></i>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-2 ax-justify-between ax-align-middle ax-leading-4 ax-overflow-hidden\\\">\\n <p class=\\\"ax-text-primary-500 dark:ax-text-primary-300\\\">\\n {{ isReplyingMode() ? 'Reply to ' : 'Edit Message' }}\\n <span class=\\\"ax-font-bold\\\">\\n {{ isReplyingMode() ? activeReplyComment()?.userName : '' }}\\n </span>\\n </p>\\n <div\\n class=\\\"ax-truncate\\\"\\n [innerHTML]=\\\"\\n isReplyingMode()\\n ? sanitizeHtml(activeReplyComment()?.message?.content ?? '')\\n : sanitizeHtml(activeEditComment()?.message?.content ?? '')\\n \\\"\\n ></div>\\n </div>\\n </div>\\n <div><i (click)=\\\"resetReplyEditState()\\\" class=\\\"fa-solid ax-text-2xl fa-xmark ax-cursor-pointer\\\"></i></div>\\n </div>\\n }\\n <ax-wysiwyg-container #w [look]=\\\"wysiwygOptions().look\\\" [(ngModel)]=\\\"commentContent\\\">\\n <ax-wysiwyg-view class=\\\"ax-min-h-28\\\"></ax-wysiwyg-view>\\n <ax-wysiwyg-toolbar>\\n <ax-prefix>\\n <ax-wysiwyg-history></ax-wysiwyg-history>\\n <ax-wysiwyg-font-style></ax-wysiwyg-font-style>\\n <ax-wysiwyg-colors></ax-wysiwyg-colors>\\n <ax-wysiwyg-list></ax-wysiwyg-list>\\n <ax-wysiwyg-alignment></ax-wysiwyg-alignment>\\n </ax-prefix>\\n <ax-suffix>\\n <ax-dropdown-button\\n [disabled]=\\\"hasCooldown() || !this.commentContent()\\\"\\n type=\\\"submit\\\"\\n color=\\\"primary\\\"\\n mode=\\\"split\\\"\\n text=\\\"Send\\\"\\n (onClick)=\\\"submitComment()\\\"\\n >\\n @if (isSubmitting()) {\\n <ax-loading></ax-loading>\\n }\\n <!-- <ax-button-item-list>\\n <ax-button-item (click)=\\\"submitComment()\\\" text=\\\"Send Private ...\\\" name=\\\"private\\\" data=\\\"private\\\">\\n <ax-prefix>\\n <ax-icon icon=\\\"fa-regular fa-user-secret\\\"></ax-icon>\\n </ax-prefix>\\n </ax-button-item>\\n </ax-button-item-list> -->\\n </ax-dropdown-button>\\n </ax-suffix>\\n </ax-wysiwyg-toolbar>\\n </ax-wysiwyg-container>\\n </div>\\n</div>\\n\", styles: [\":host{display:block;width:100%;height:100%}ax-wysiwyg-container .ax-editor-container{border-top-left-radius:0!important;border-top-right-radius:0!important}ax-wysiwyg-container .ax-error-message{padding-left:.5rem}ax-wysiwyg-container .highlighted{background:var(--ax-color-primary-050)!important;border-radius:.25rem;transition:background 1s ease-in-out}\\n\"] }]\n }], propDecorators: { refrenceType: [{ type: i0.Input, args: [{ isSignal: true, alias: \"refrenceType\", required: true }] }], refrenceId: [{ type: i0.Input, args: [{ isSignal: true, alias: \"refrenceId\", required: true }] }], subject: [{ type: i0.Input, args: [{ isSignal: true, alias: \"subject\", required: true }] }], wysiwygEditor: [{ type: i0.ViewChild, args: ['w', { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY29tbWVudC9jb21tZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jb21tZW50L2NvbW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUErQixlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUd6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlCLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7QUF1RHZFLE1BQU0sT0FBTyxtQkFBbUI7SUFyRGhDO1FBc0RFLGlCQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsdURBQVUsQ0FBQztRQUN4QyxlQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEscURBQVUsQ0FBQztRQUN0QyxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsa0RBQVUsQ0FBQztRQUVuQyxlQUFVLEdBQUcsTUFBTSxDQUFxQixTQUFTLHNEQUFDLENBQUM7UUFDbkQsZUFBVSxHQUFHLE1BQU0sQ0FBcUIsU0FBUyxzREFBQyxDQUFDO1FBRXpDLGdCQUFXLEdBQUcsTUFBTSxDQUFVLEtBQUssdURBQUMsQ0FBQztRQUNyQyxtQkFBYyxHQUFHLE1BQU0sQ0FBUyxFQUFFLDBEQUFDLENBQUM7UUFFcEMsaUJBQVksR0FBRyxNQUFNLENBQVUsS0FBSyx3REFBQyxDQUFDO1FBQ3RDLG1CQUFjLEdBQUcsTUFBTSxDQUFVLEtBQUssMERBQUMsQ0FBQztRQUN4QyxrQkFBYSxHQUFHLE1BQU0sQ0FBVSxLQUFLLHlEQUFDLENBQUM7UUFDdkMsY0FBUyxHQUFHLE1BQU0sQ0FBVSxJQUFJLHFEQUFDLENBQUM7UUFFbEMsbUJBQWMsR0FBRyxNQUFNLENBQVcsRUFBRSwwREFBQyxDQUFDO1FBQ3RDLHVCQUFrQixHQUFHLE1BQU0sQ0FBa0QsU0FBUyw4REFBQyxDQUFDO1FBQ3hGLHNCQUFpQixHQUFHLE1BQU0sQ0FBa0QsU0FBUyw2REFBQyxDQUFDO1FBQ3ZGLHlCQUFvQixHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxnRUFBQyxDQUFDO1FBRW5ELGtCQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBOEIsR0FBRyxDQUFDLENBQUM7UUFFdkUsbUJBQWMsR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUNyRCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQ3BELG1CQUFjLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDM0MsaUJBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsa0JBQWEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEMsaUNBQTRCLEdBQUcsTUFBTSxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDdkUsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVoRCxhQUFRLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hCLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFOUIsYUFBUSxHQUFHLE1BQU0sQ0FBZSxFQUFFLG9EQUFDLENBQUM7UUFDcEMsV0FBTSxHQUFHLE1BQU0sQ0FBK0IsU0FBUyxrREFBQyxDQUFDO1FBb0Z6RCxtQkFBYyxHQUFHLE1BQU0sQ0FFOUI7WUFDRCxJQUFJLEVBQUUsT0FBTztTQUNkLDBEQUFDLENBQUM7UUFFTyxpQkFBWSxHQUFHLE1BQU0sQ0FJNUI7WUFDRCxLQUFLLEVBQUUsU0FBUztZQUNoQixJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxPQUFPO1NBQ2Qsd0RBQUMsQ0FBQztLQTBRSjtJQTFXQyxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUMvQixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNWLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRO2FBQzFCLElBQUksQ0FDSCxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQ25DLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUMzQjthQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNuQixLQUFLLEtBQUs7b0JBQ1IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFxQixDQUFDLENBQUM7b0JBQ25ELE1BQU07Z0JBQ1IsS0FBSyxRQUFRO29CQUNYLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsT0FBcUIsQ0FBQyxDQUFDO29CQUN0RCxNQUFNO2dCQUNSLEtBQUssUUFBUTtvQkFDWCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQWlCLENBQUMsQ0FBQztvQkFDaEQsTUFBTTtZQUNWLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxPQUFtQjtRQUMxQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNwRCxNQUFNLFlBQVksR0FBRyw0QkFBNEIsQ0FDL0MsSUFBSSxDQUFDLE1BQU0sRUFBRyxFQUNkLE9BQU8sRUFDUCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQW1DLENBQ3hELENBQUM7WUFDRixJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUN0QztnQkFDRSxHQUFHLFlBQVk7Z0JBQ2YsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNkLFVBQVUsRUFBRSxlQUFlO2dCQUMzQixRQUFRLEVBQUUsSUFBSSxJQUFJLEVBQUU7YUFDckIsRUFDRDtnQkFDRSxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hHLENBQUM7Z0JBQ0QsWUFBWSxFQUFFLElBQUk7YUFDbkIsQ0FDRixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ2hDLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUN4QixJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUM3QixNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDbkUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdEUsQ0FBQztvQkFDRCxPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsY0FBMEI7UUFDcEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFrQixFQUFnQixFQUFFO1lBQ2xELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNwQixJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUMvQixPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxjQUFjLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuRixDQUFDO2dCQUNELElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDdEMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBa0JPLGNBQWM7UUFDcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUVTLGFBQWEsQ0FBQyxPQUFtQjtRQUN6QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QixPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRVMsaUJBQWlCLENBQUMsT0FBbUI7UUFDN0MsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzRSxDQUFDO0lBRUQsWUFBWSxDQUFDLFdBQStCO1FBQzFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBZTtRQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFlO1FBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWTtRQUNoQixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUNoRDtnQkFDRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQzNCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUM3QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTthQUM5QixFQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FDZixDQUFDO1lBQ0YsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMzQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FDdEQ7b0JBQ0UsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUMzQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDN0IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7aUJBQzlCLEVBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUNmLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsT0FBTyxFQUFFLDRDQUE0QztnQkFDckQsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixPQUFPLEVBQUUsSUFBSTtnQkFDYixlQUFlLEVBQUUsSUFBSTthQUN0QixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFtQixFQUFFLEtBQWtCLEVBQUUsUUFBaUI7UUFDcEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQW1CLEVBQUUsS0FBa0IsRUFBRSxRQUFpQjtRQUNyRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sTUFBTSxHQUFJLEtBQUssQ0FBQyxNQUFjLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sT0FBTyxHQUFHLHVCQUF1QixLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsTUFBTSxRQUFRLElBQUksTUFBTSxnQkFBZ0IsQ0FBQztZQUNyRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztZQUNwRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQWlCO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1lBQ3JDLElBQUksRUFBRSx1QkFBdUI7WUFDN0IsT0FBTyxFQUFFLCtDQUErQztZQUN4RCxLQUFLLEVBQUUsZ0JBQWdCO1lBQ3ZCLElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLFlBQVk7WUFDekIsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLEtBQUssRUFBRSxRQUFRO29CQUNmLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBTSxFQUFFLEVBQUU7d0JBQ3hCLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7d0JBQzlCLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzt3QkFDekIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUN4QixJQUFJLENBQUM7NEJBQ0gsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQzs0QkFDbkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQ0FDckIsT0FBTyxFQUFFLCtCQUErQjtnQ0FDeEMsS0FBSyxFQUFFLFNBQVM7Z0NBQ2hCLFFBQVEsRUFBRSxlQUFlO2dDQUN6QixXQUFXLEVBQUUsSUFBSTtnQ0FDakIsT0FBTyxFQUFFLElBQUk7Z0NBQ2IsZUFBZSxFQUFFLElBQUk7NkJBQ3RCLENBQUMsQ0FBQzs0QkFDSCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7Z0NBQ3ZFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDOzRCQUM3QixDQUFDOzRCQUNELE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDakIsQ0FBQzt3QkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDOzRCQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dDQUNyQixPQUFPLEVBQUUsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtnQ0FDeEUsS0FBSyxFQUFFLFFBQVE7Z0NBQ2YsUUFBUSxFQUFFLGVBQWU7Z0NBQ3pCLFdBQVcsRUFBRSxJQUFJO2dDQUNqQixPQUFPLEVBQUUsSUFBSTtnQ0FDYixlQUFlLEVBQUUsSUFBSTs2QkFDdEIsQ0FBQyxDQUFDO3dCQUNMLENBQUM7b0JBQ0gsQ0FBQztpQkFDRjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsUUFBUTtvQkFDZCxLQUFLLEVBQUUsU0FBUztvQkFDaEIsU0FBUyxFQUFFLElBQUk7b0JBQ2YsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0JBQ2IsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNqQixDQUFDO2lCQUNGO2FBQ0Y7WUFDRCxXQUFXLEVBQUUsS0FBSztTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QixRQUFRLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFtQjtRQUNsQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLDJCQUEyQjtRQUN6RSxDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFNBQWlCLEVBQUUsV0FBb0I7UUFDOUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFzQixFQUFnQixFQUFFO1lBQzdELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUN4QixJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQ3ZCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLElBQUk7d0JBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ3BCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO29CQUNsQyxJQUFJLFdBQVcsRUFBRSxDQUFDO3dCQUNoQixTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztvQkFDakQsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUM7b0JBQ3BGLENBQUM7b0JBQ0QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixDQUFDO2dCQUNELElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDdEMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUNPLGlCQUFpQixDQUFDLFNBQWlCO1FBQ3pDLE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBc0IsRUFBZ0IsRUFBRTtZQUN6RCxPQUFPLFFBQVE7aUJBQ1osTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQztpQkFDakMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN0QyxDQUFDLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRVMsS0FBSyxDQUFDLGFBQWE7UUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDO1lBQ0gsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkIsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDekQsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7Z0JBQzNGLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN4QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDN0csSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pDLENBQUM7WUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QixRQUFRLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUUvRCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNYLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDckIsT0FBTyxFQUFFLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw2Q0FBNkM7Z0JBQzFGLEtBQUssRUFBRSxRQUFRO2dCQUNmLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixXQUFXLEVBQUUsSUFBSTtnQkFDakIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsZUFBZSxFQUFFLElBQUk7YUFDdEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0YsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzFCLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ1AsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQzNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNYLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzsrR0EvWVUsbUJBQW1CO21HQUFuQixtQkFBbUIsc2xCQ2xHaEMsOHBaQXFPQSw4WkQ1S0ksZUFBZSwyMEJBQ2Ysb0JBQW9CLDhCQUNwQixnQkFBZ0Isa0lBQ2hCLGlCQUFpQixzVkFDakIsZUFBZSxpdEJBQ2YsY0FBYywyd0JBQ2QsY0FBYyw4QkFDZCxhQUFhLDhCQUNiLGVBQWUsOEtBQ2YsZ0JBQWdCLHFRQUNoQixjQUFjLDhCQUVkLFlBQVksOEJBQ1osZUFBZSw4QkFDZixXQUFXLDhWQUNYLHNCQUFzQiw2U0FDdEIsc0JBQXNCLDZJQUx0QixTQUFTLGdDQXBCQztZQUNWLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ2hCLFVBQVUsQ0FBQyxRQUFRLEVBQUU7b0JBQ25CLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLENBQUM7b0JBQ3BELE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO2lCQUM3RSxDQUFDO2FBQ0gsQ0FBQztTQUNIOzs0RkEyQ1UsbUJBQW1CO2tCQXJEL0IsU0FBUzsrQkFFRSxhQUFhLGNBQ1g7d0JBQ1YsT0FBTyxDQUFDLFFBQVEsRUFBRTs0QkFDaEIsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDbkIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztnQ0FDcEQsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7NkJBQzdFLENBQUM7eUJBQ0gsQ0FBQztxQkFDSCxXQUNRO3dCQUNQLGVBQWU7d0JBQ2Ysb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixjQUFjO3dCQUNkLGNBQWM7d0JBQ2QsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxTQUFTO3dCQUNULFlBQVk7d0JBQ1osZUFBZTt3QkFDZixXQUFXO3dCQUNYLHNCQUFzQjt3QkFDdEIsc0JBQXNCO3FCQUN2QixtQkFzQmdCLHVCQUF1QixDQUFDLE1BQU07a1hBdUIyQixHQUFHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhXeXNpd3lnQ29udGFpbmVyQ29tcG9uZW50LCBBWFd5c2l3eWdNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvd3lzaXd5Zyc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBEZXN0cm95UmVmLFxuICBpbmplY3QsXG4gIGlucHV0LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQVhTdHlsZUxvb2tUeXBlIH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYRGlhbG9nU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kaWFsb2cnO1xuaW1wb3J0IHsgQVhUb2FzdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9hc3QnO1xuaW1wb3J0IHsgQVhQVXNlclJlZmVyZW5jZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBBWE1Db21tZW50LCBBWE1Db21tZW50VGhyZWFkIH0gZnJvbSAnLi9jb21tZW50LnR5cGUnO1xuXG5pbXBvcnQgeyBBWEF2YXRhck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9hdmF0YXInO1xuaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYQ29tbWVudE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tZW50JztcbmltcG9ydCB7IEFYQ29udmVyc2F0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbnZlcnNhdGlvbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgQVhEcm9wZG93bkJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kcm9wZG93bi1idXR0b24nO1xuaW1wb3J0IHsgQVhGb3JtTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IHsgQVhJbWFnZU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9pbWFnZSc7XG5pbXBvcnQgeyBBWExvYWRpbmdNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZyc7XG5pbXBvcnQgeyBBWFNrZWxldG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3NrZWxldG9uJztcbmltcG9ydCB7IEFYVG9vbEJhck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b29sYmFyJztcbmltcG9ydCB7IEFYRm9ybWF0TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2Zvcm1hdCc7XG5pbXBvcnQgeyBBWE1Ob3RpZmljYXRpb25Db25uZWN0b3JTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50JztcbmltcG9ydCB7IEFYUFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUFVzZXJBdmF0YXJDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWE1Db21tZW50TWFuYWdlbWVudFNlcnZpY2UgfSBmcm9tICcuL2NvbW1lbnQtbWFuYWdlbWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbnZlcnRDb21tZW50VG9Ob3RpZmljYXRpb24gfSBmcm9tICcuL2NvbW1lbnQtbm90aWZpY2F0aW9uLmhlbHBlcic7XG5pbXBvcnQgeyBBWE1Db21tZW50UmVhbHRpbWVTZXJ2aWNlIH0gZnJvbSAnLi9jb21tZW50LXJlYWx0aW1lLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbW1lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzZWxlY3RvcjogJ2F4bS1jb21tZW50JyxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ2ZhZGVJbicsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDEwcHgpJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH0pKSxcbiAgICAgIF0pLFxuICAgIF0pLFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQVhXeXNpd3lnTW9kdWxlLFxuICAgIEFYQ29udmVyc2F0aW9uTW9kdWxlLFxuICAgIEFYU2tlbGV0b25Nb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhDb21tZW50TW9kdWxlLFxuICAgIEFYQnV0dG9uTW9kdWxlLFxuICAgIEFYQXZhdGFyTW9kdWxlLFxuICAgIEFYSW1hZ2VNb2R1bGUsXG4gICAgQVhMb2FkaW5nTW9kdWxlLFxuICAgIEFYRHJvcGRvd25Nb2R1bGUsXG4gICAgQVhGb3JtYXRNb2R1bGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIEFYRm9ybU1vZHVsZSxcbiAgICBBWFRvb2xCYXJNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQVhEcm9wZG93bkJ1dHRvbk1vZHVsZSxcbiAgICBBWFBVc2VyQXZhdGFyQ29tcG9uZW50LFxuICBdLFxuICBzdHlsZXM6IGBcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cbiAgICBheC13eXNpd3lnLWNvbnRhaW5lciB7XG4gICAgICAuYXgtZWRpdG9yLWNvbnRhaW5lciB7XG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDAgIWltcG9ydGFudDtcbiAgICAgIH1cbiAgICAgIC5heC1lcnJvci1tZXNzYWdlIHtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwLjVyZW07XG4gICAgICB9XG4gICAgICAuaGlnaGxpZ2h0ZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1heC1jb2xvci1wcmltYXJ5LTA1MCkgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4yNXJlbTtcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxcyBlYXNlLWluLW91dDtcbiAgICAgIH1cbiAgICB9XG4gIGAsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1Db21tZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcmVmcmVuY2VUeXBlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWZyZW5jZUlkID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICBzdWJqZWN0ID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuXG4gIG1vZHVsZU5hbWUgPSBzaWduYWw8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBlbnRpdHlOYW1lID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBwcm90ZWN0ZWQgaGFzQ29vbGRvd24gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgY29tbWVudENvbnRlbnQgPSBzaWduYWw8c3RyaW5nPignJyk7XG5cbiAgcHJvdGVjdGVkIGlzU3VibWl0dGluZyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBpc1JlcGx5aW5nTW9kZSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBpc0VkaXRpbmdNb2RlID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGlzTG9hZGluZyA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcblxuICBwcm90ZWN0ZWQgZmFpbGVkSW1hZ2VJZHMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcbiAgcHJvdGVjdGVkIGFjdGl2ZVJlcGx5Q29tbWVudCA9IHNpZ25hbDx1bmRlZmluZWQgfCAoQVhNQ29tbWVudCAmIHsgdXNlck5hbWU6IHN0cmluZyB9KT4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGFjdGl2ZUVkaXRDb21tZW50ID0gc2lnbmFsPHVuZGVmaW5lZCB8IChBWE1Db21tZW50ICYgeyB1c2VyTmFtZTogc3RyaW5nIH0pPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgaGlnaGxpZ2h0ZWRDb21tZW50SWQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJvdGVjdGVkIHd5c2l3eWdFZGl0b3IgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8QVhXeXNpd3lnQ29udGFpbmVyQ29tcG9uZW50PigndycpO1xuXG4gIHByaXZhdGUgY29tbWVudFNlcnZpY2UgPSBpbmplY3QoQVhNQ29tbWVudE1hbmFnZW1lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFsdGltZVNlcnZpY2UgPSBpbmplY3QoQVhNQ29tbWVudFJlYWx0aW1lU2VydmljZSk7XG4gIHByaXZhdGUgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQU2Vzc2lvblNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0U2VydmljZSA9IGluamVjdChBWFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZGlhbG9nU2VydmljZSA9IGluamVjdChBWERpYWxvZ1NlcnZpY2UpO1xuICBwcml2YXRlIG5vdGlmaWNhdGlvbkNvbm5lY3RvclNlcnZpY2UgPSBpbmplY3QoQVhNTm90aWZpY2F0aW9uQ29ubmVjdG9yU2VydmljZSk7XG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgYWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuXG4gIHNhbml0aXplID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICBwcm90ZWN0ZWQgY29tbWVudHMgPSBzaWduYWw8QVhNQ29tbWVudFtdPihbXSk7XG4gIHByb3RlY3RlZCB0aHJlYWQgPSBzaWduYWw8QVhNQ29tbWVudFRocmVhZCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5tb2R1bGVOYW1lLnNldCh0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtc1snbW9kdWxlJ10gfHwgbnVsbCk7XG4gICAgdGhpcy5lbnRpdHlOYW1lLnNldCh0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmFtc1snZW50aXR5J10gfHwgbnVsbCk7XG4gICAgdGhpcy5sb2FkQ29tbWVudHMoKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgfSwgMjUwKTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVhbHRpbWVTZXJ2aWNlLmNvbW1lbnQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksXG4gICAgICAgIGZpbHRlcigoZXZlbnQpID0+ICEhZXZlbnQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICAgICAgY2FzZSAnYWRkJzpcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWRkQ29tbWVudChldmVudC5wYXlsb2FkIGFzIEFYTUNvbW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAndXBkYXRlJzpcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVXBkYXRlQ29tbWVudChldmVudC5wYXlsb2FkIGFzIEFYTUNvbW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAncmVtb3ZlJzpcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVzc2FnZUJ5SWQoZXZlbnQucGF5bG9hZCBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBZGRDb21tZW50KGNvbW1lbnQ6IEFYTUNvbW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoY29tbWVudC5hdXRob3IuaWQgIT09IHRoaXMuZ2V0Q3VycmVudFVzZXIoKT8uaWQpIHtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGNvbnZlcnRDb21tZW50VG9Ob3RpZmljYXRpb24oXG4gICAgICAgIHRoaXMudGhyZWFkKCkhLFxuICAgICAgICBjb21tZW50LFxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXIgYXMgdW5rbm93biBhcyBBWFBVc2VyUmVmZXJlbmNlLFxuICAgICAgKTtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uQ29ubmVjdG9yU2VydmljZS5jcmVhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5ub3RpZmljYXRpb24sXG4gICAgICAgICAgaWQ6IGNvbW1lbnQuaWQsXG4gICAgICAgICAgZW50aXR5TmFtZTogJ25vdGlmaWNhdGlvbnMnLFxuICAgICAgICAgIGNyZWF0ZUF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucmVmcmVuY2VUeXBlKCksICd0JywgdGhpcy5yZWZyZW5jZVR5cGUoKSwgJ2knLCB0aGlzLnJlZnJlbmNlSWQoKV0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYWN0aXZlV2luZG93OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGNvbW1lbnQucmVwbHlJZCkge1xuICAgICAgdGhpcy5jb21tZW50cy51cGRhdGUoKGNvbW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBjb21tZW50cy5tYXAoKGMpID0+IHtcbiAgICAgICAgICBpZiAoYy5pZCA9PT0gY29tbWVudC5yZXBseUlkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdSZXBsaWVzID0gYy5yZXBsaWVzID8gWy4uLmMucmVwbGllcywgY29tbWVudF0gOiBbY29tbWVudF07XG4gICAgICAgICAgICByZXR1cm4geyAuLi5jLCByZXBsaWVzOiBuZXdSZXBsaWVzLCByZXBseUNvdW50OiBuZXdSZXBsaWVzLmxlbmd0aCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb21tZW50cy51cGRhdGUoKGNvbW1lbnRzKSA9PiBbLi4uY29tbWVudHMsIGNvbW1lbnRdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVwZGF0ZUNvbW1lbnQodXBkYXRlZENvbW1lbnQ6IEFYTUNvbW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGUgPSAobGlzdDogQVhNQ29tbWVudFtdKTogQVhNQ29tbWVudFtdID0+IHtcbiAgICAgIHJldHVybiBsaXN0Lm1hcCgoYykgPT4ge1xuICAgICAgICBpZiAoYy5pZCA9PT0gdXBkYXRlZENvbW1lbnQuaWQpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5jLCAuLi51cGRhdGVkQ29tbWVudCwgcmVwbGllczogdXBkYXRlZENvbW1lbnQucmVwbGllcyB8fCBjLnJlcGxpZXMgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5yZXBsaWVzICYmIGMucmVwbGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uYywgcmVwbGllczogdXBkYXRlKGMucmVwbGllcykgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5jb21tZW50cy51cGRhdGUoKGNvbW1lbnRzKSA9PiB1cGRhdGUoY29tbWVudHMpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB3eXNpd3lnT3B0aW9ucyA9IHNpZ25hbDx7XG4gICAgbG9vazogQVhTdHlsZUxvb2tUeXBlO1xuICB9Pih7XG4gICAgbG9vazogJ3NvbGlkJyxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIGF2YXRhckNvbmZpZyA9IHNpZ25hbDx7XG4gICAgY29sb3I6IHN0cmluZztcbiAgICBsb29rOiAnc2hhcnAnIHwgJ3NvZnQnIHwgJ3JvdW5kZWQnO1xuICAgIHR5cGU6IHN0cmluZztcbiAgfT4oe1xuICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgbG9vazogJ3JvdW5kZWQnLFxuICAgIHR5cGU6ICdzb2xpZCcsXG4gIH0pO1xuXG4gIHByaXZhdGUgZ2V0Q3VycmVudFVzZXIoKTogQVhQVXNlclJlZmVyZW5jZSB8IG51bGwge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnNlc3Npb25TZXJ2aWNlLnVzZXI7XG4gICAgcmV0dXJuIHVzZXIgPyB7IGlkOiB1c2VyLmlkLCB0eXBlOiAndXNlcicgfSA6IG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNMaWtlZEJ5VXNlcihjb21tZW50OiBBWE1Db21tZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZ2V0Q3VycmVudFVzZXIoKTtcbiAgICBpZiAoIXVzZXIpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gKGNvbW1lbnQucmVhY3Rpb25zIHx8IFtdKS5zb21lKChyKSA9PiByLmF1dGhvci5pZCA9PT0gdXNlci5pZCAmJiByLnR5cGUgPT09ICdsaWtlJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UmVhY3Rpb25zQ291bnQoY29tbWVudDogQVhNQ29tbWVudCk6IG51bWJlciB7XG4gICAgcmV0dXJuIChjb21tZW50LnJlYWN0aW9ucyB8fCBbXSkuZmlsdGVyKChyKSA9PiByLnR5cGUgPT09ICdsaWtlJykubGVuZ3RoO1xuICB9XG5cbiAgc2FuaXRpemVIdG1sKGh0bWxDb250ZW50OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWh0bWxDb250ZW50KSByZXR1cm4gdGhpcy5zYW5pdGl6ZS5ieXBhc3NTZWN1cml0eVRydXN0SHRtbCgnJyk7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemUuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbENvbnRlbnQpO1xuICB9XG5cbiAgaGFuZGxlSW1hZ2VFcnJvcihpbWFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZhaWxlZEltYWdlSWRzLnVwZGF0ZSgoaWRzKSA9PiBbLi4uaWRzLCBpbWFnZUlkXSk7XG4gIH1cblxuICBjaGVja0ltYWdlRXhpc3RzKGltYWdlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5mYWlsZWRJbWFnZUlkcygpLmluY2x1ZGVzKGltYWdlSWQpO1xuICB9XG5cbiAgYXN5bmMgbG9hZENvbW1lbnRzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0aHJlYWQgPSBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLmdldFRocmVhZChcbiAgICAgICAge1xuICAgICAgICAgIGVudGl0eVR5cGVJZDogdGhpcy5yZWZyZW5jZVR5cGUoKSxcbiAgICAgICAgICBlbnRpdHlJZDogdGhpcy5yZWZyZW5jZUlkKCksXG4gICAgICAgICAgbW9kdWxlTmFtZTogdGhpcy5tb2R1bGVOYW1lKCksXG4gICAgICAgICAgZW50aXR5TmFtZTogdGhpcy5lbnRpdHlOYW1lKCksXG4gICAgICAgIH0sXG4gICAgICAgIHRoaXMuc3ViamVjdCgpLFxuICAgICAgKTtcbiAgICAgIGlmICh0aHJlYWQpIHtcbiAgICAgICAgdGhpcy50aHJlYWQuc2V0KHRocmVhZCk7XG4gICAgICAgIHRoaXMuY29tbWVudHMuc2V0KHRocmVhZC5jb21tZW50cyB8fCBbXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdUaHJlYWQgPSBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLmNyZWF0ZVRocmVhZChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRpdHlUeXBlSWQ6IHRoaXMucmVmcmVuY2VUeXBlKCksXG4gICAgICAgICAgICBlbnRpdHlJZDogdGhpcy5yZWZyZW5jZUlkKCksXG4gICAgICAgICAgICBtb2R1bGVOYW1lOiB0aGlzLm1vZHVsZU5hbWUoKSxcbiAgICAgICAgICAgIGVudGl0eU5hbWU6IHRoaXMuZW50aXR5TmFtZSgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zdWJqZWN0KCksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudGhyZWFkLnNldChuZXdUaHJlYWQpO1xuICAgICAgICB0aGlzLmNvbW1lbnRzLnNldChuZXdUaHJlYWQuY29tbWVudHMgfHwgW10pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBjb21tZW50czonLCBlcnJvcik7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHtcbiAgICAgICAgY29udGVudDogJ0ZhaWxlZCB0byBsb2FkIGNvbW1lbnRzLiBQbGVhc2UgdHJ5IGFnYWluLicsXG4gICAgICAgIGNvbG9yOiAnZGFuZ2VyJyxcbiAgICAgICAgbG9jYXRpb246ICdib3R0b20tY2VudGVyJyxcbiAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgIHRpbWVPdXQ6IDMwMDAsXG4gICAgICAgIHRpbWVPdXRQcm9ncmVzczogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb21tZW50cy5zZXQoW10pO1xuICAgIH1cbiAgfVxuXG4gIGVkaXRNZXNzYWdlKGNvbW1lbnQ6IEFYTUNvbW1lbnQsIHJlcGx5PzogQVhNQ29tbWVudCwgdXNlck5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzUmVwbHlpbmdNb2RlLnNldChmYWxzZSk7XG4gICAgdGhpcy5hY3RpdmVSZXBseUNvbW1lbnQuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5pc0VkaXRpbmdNb2RlLnNldCh0cnVlKTtcbiAgICB0aGlzLmFjdGl2ZUVkaXRDb21tZW50LnNldCh7IC4uLmNvbW1lbnQsIHVzZXJOYW1lOiB1c2VyTmFtZSB8fCAnJyB9KTtcbiAgICBjb25zdCBjb250ZW50VG9FZGl0ID0gcmVwbHkgPyByZXBseS5tZXNzYWdlPy5jb250ZW50IDogY29tbWVudC5tZXNzYWdlPy5jb250ZW50O1xuICAgIHRoaXMuY29tbWVudENvbnRlbnQuc2V0KGNvbnRlbnRUb0VkaXQgfHwgJycpO1xuICAgIHRoaXMud3lzaXd5Z0VkaXRvcigpLmdldEhvc3RFbGVtZW50KCkuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0pO1xuICB9XG5cbiAgcmVwbHlNZXNzYWdlKGNvbW1lbnQ6IEFYTUNvbW1lbnQsIHJlcGx5PzogQVhNQ29tbWVudCwgdXNlck5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzRWRpdGluZ01vZGUuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmFjdGl2ZUVkaXRDb21tZW50LnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuaXNSZXBseWluZ01vZGUuc2V0KHRydWUpO1xuICAgIHRoaXMuYWN0aXZlUmVwbHlDb21tZW50LnNldCh7IC4uLmNvbW1lbnQsIHVzZXJOYW1lOiB1c2VyTmFtZSB8fCAnJyB9KTtcbiAgICBpZiAocmVwbHkpIHtcbiAgICAgIGNvbnN0IGF1dGhvciA9IChyZXBseS5hdXRob3IgYXMgYW55KS5mdWxsTmFtZSB8fCByZXBseS5hdXRob3IuaWQ7XG4gICAgICBjb25zdCBtZW50aW9uID0gYDxzdHJvbmc+PGEgZGF0YS1pZD1cIiR7cmVwbHkuYXV0aG9yLnVzZXJuYW1lfVwiPkAke3VzZXJOYW1lIHx8IGF1dGhvcn08L2E+PC9zdHJvbmc+IGA7XG4gICAgICB0aGlzLmNvbW1lbnRDb250ZW50LnNldChtZW50aW9uKTtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3FsLWVkaXRvcicpWzBdLmlubmVySFRNTCA9IG1lbnRpb247XG4gICAgICB0aGlzLnd5c2l3eWdFZGl0b3IoKT8uZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy53eXNpd3lnRWRpdG9yKCkuZ2V0SG9zdEVsZW1lbnQoKS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7XG4gIH1cblxuICBhc3luYyBkZWxldGVDb21tZW50KGNvbW1lbnRJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgZGlhbG9nID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oe1xuICAgICAgaWNvbjogJ2ZhLXJlZ3VsYXIgZmEtd2FybmluZycsXG4gICAgICBjb250ZW50OiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNvbW1lbnQ/JyxcbiAgICAgIHRpdGxlOiAnRGVsZXRlIENvbW1lbnQnLFxuICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgICBvcmllbnRhdGlvbjogJ2hvcml6b250YWwnLFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJ0RlbGV0ZScsXG4gICAgICAgICAgY29sb3I6ICdkYW5nZXInLFxuICAgICAgICAgIG9uQ2xpY2s6IGFzeW5jIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGUuaGFuZGxlZCA9IHRydWU7XG4gICAgICAgICAgICBlLnNvdXJjZS50ZXh0ID0gJ0RlbGV0aW5nLi4uJztcbiAgICAgICAgICAgIGUuc291cmNlLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGUuc291cmNlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5kZWxldGVDb21tZW50KGNvbW1lbnRJZCk7XG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlTWVzc2FnZUJ5SWQoY29tbWVudElkKTtcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICAgICAgICAgICAgY29udGVudDogJ0NvbW1lbnQgZGVsZXRlZCBzdWNjZXNzZnVsbHkuJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAnYm90dG9tLWNlbnRlcicsXG4gICAgICAgICAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgdGltZU91dDogMzAwMCxcbiAgICAgICAgICAgICAgICB0aW1lT3V0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAodGhpcy5pc0VkaXRpbmdNb2RlKCkgJiYgdGhpcy5hY3RpdmVFZGl0Q29tbWVudCgpPy5pZCA9PT0gY29tbWVudElkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFJlcGx5RWRpdFN0YXRlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0eXBlb2YgZXJyb3IgPT09ICdzdHJpbmcnID8gZXJyb3IgOiAnRmFpbGVkIHRvIGRlbGV0ZSBjb21tZW50IScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdkYW5nZXInLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiAnYm90dG9tLWNlbnRlcicsXG4gICAgICAgICAgICAgICAgY2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgICAgICAgICAgdGltZU91dDogMzAwMCxcbiAgICAgICAgICAgICAgICB0aW1lT3V0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgICBjb2xvcjogJ2RlZmF1bHQnLFxuICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZSxcbiAgICAgICAgICBvbkNsaWNrOiAoZSkgPT4ge1xuICAgICAgICAgICAgZGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBjbG9zZUJ1dHRvbjogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICByZXNldFJlcGx5RWRpdFN0YXRlKCkge1xuICAgIHRoaXMuaXNFZGl0aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlRWRpdENvbW1lbnQuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5pc1JlcGx5aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuYWN0aXZlUmVwbHlDb21tZW50LnNldCh1bmRlZmluZWQpO1xuICAgIHRoaXMuY29tbWVudENvbnRlbnQuc2V0KCcnKTtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxbC1lZGl0b3InKVswXS5pbm5lckhUTUwgPSAnJztcbiAgfVxuXG4gIGFzeW5jIHRvZ2dsZUxpa2UoY29tbWVudDogQVhNQ29tbWVudCkge1xuICAgIGNvbnN0IGlzTGlrZWQgPSB0aGlzLmlzTGlrZWRCeVVzZXIoY29tbWVudCk7XG4gICAgdGhpcy51cGRhdGVMaWtlU3RhdHVzKGNvbW1lbnQuaWQsICFpc0xpa2VkKTtcbiAgICB0cnkge1xuICAgICAgaWYgKGlzTGlrZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS51bmxpa2VDb21tZW50KGNvbW1lbnQuaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5saWtlQ29tbWVudChjb21tZW50LmlkKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHRvZ2dsZSBsaWtlOicsIGVycm9yKTtcbiAgICAgIHRoaXMudXBkYXRlTGlrZVN0YXR1cyhjb21tZW50LmlkLCBpc0xpa2VkKTsgLy8gUmV2ZXJ0IG9wdGltaXN0aWMgdXBkYXRlXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaWtlU3RhdHVzKGNvbW1lbnRJZDogc3RyaW5nLCB3aWxsQmVMaWtlZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGZpbmRBbmRUb2dnbGUgPSAoY29tbWVudHM6IEFYTUNvbW1lbnRbXSk6IEFYTUNvbW1lbnRbXSA9PiB7XG4gICAgICByZXR1cm4gY29tbWVudHMubWFwKChjKSA9PiB7XG4gICAgICAgIGlmIChjLmlkID09PSBjb21tZW50SWQpIHtcbiAgICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICAgIGlmICghdXNlcikgcmV0dXJuIGM7XG4gICAgICAgICAgbGV0IHJlYWN0aW9ucyA9IGMucmVhY3Rpb25zIHx8IFtdO1xuICAgICAgICAgIGlmICh3aWxsQmVMaWtlZCkge1xuICAgICAgICAgICAgcmVhY3Rpb25zLnB1c2goeyBhdXRob3I6IHVzZXIsIHR5cGU6ICdsaWtlJyB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVhY3Rpb25zID0gcmVhY3Rpb25zLmZpbHRlcigocikgPT4gci5hdXRob3IuaWQgIT09IHVzZXIuaWQgfHwgci50eXBlICE9PSAnbGlrZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAuLi5jLCByZWFjdGlvbnMgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5yZXBsaWVzICYmIGMucmVwbGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYy5yZXBsaWVzID0gZmluZEFuZFRvZ2dsZShjLnJlcGxpZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLmNvbW1lbnRzLnVwZGF0ZSgoY29tbWVudHMpID0+IGZpbmRBbmRUb2dnbGUoY29tbWVudHMpKTtcbiAgfVxuICBwcml2YXRlIHJlbW92ZU1lc3NhZ2VCeUlkKGNvbW1lbnRJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgZmlsdGVyT3V0ID0gKGNvbW1lbnRzOiBBWE1Db21tZW50W10pOiBBWE1Db21tZW50W10gPT4ge1xuICAgICAgcmV0dXJuIGNvbW1lbnRzXG4gICAgICAgIC5maWx0ZXIoKGMpID0+IGMuaWQgIT09IGNvbW1lbnRJZClcbiAgICAgICAgLm1hcCgoYykgPT4ge1xuICAgICAgICAgIGlmIChjLnJlcGxpZXMgJiYgYy5yZXBsaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGMucmVwbGllcyA9IGZpbHRlck91dChjLnJlcGxpZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLmNvbW1lbnRzLnVwZGF0ZSgoY29tbWVudHMpID0+IGZpbHRlck91dChjb21tZW50cykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHN1Ym1pdENvbW1lbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KHRydWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBjdXJyZW50VGhyZWFkID0gdGhpcy50aHJlYWQoKTtcbiAgICAgIGlmICghY3VycmVudFRocmVhZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmlzRWRpdGluZ01vZGUoKSAmJiB0aGlzLmFjdGl2ZUVkaXRDb21tZW50KCk/LmlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UuZWRpdENvbW1lbnQodGhpcy5hY3RpdmVFZGl0Q29tbWVudCgpIS5pZCwgdGhpcy5jb21tZW50Q29udGVudCgpKTtcbiAgICAgICAgdGhpcy5oYXNDb29sZG93bi5zZXQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNFZGl0aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmFjdGl2ZUVkaXRDb21tZW50LnNldCh1bmRlZmluZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5hZGRDb21tZW50KGN1cnJlbnRUaHJlYWQuaWQsIHRoaXMuY29tbWVudENvbnRlbnQoKSwgdGhpcy5hY3RpdmVSZXBseUNvbW1lbnQoKT8uaWQpO1xuICAgICAgICB0aGlzLmhhc0Nvb2xkb3duLnNldCh0cnVlKTtcbiAgICAgICAgdGhpcy5pc1JlcGx5aW5nTW9kZS5zZXQoZmFsc2UpO1xuICAgICAgICB0aGlzLmFjdGl2ZVJlcGx5Q29tbWVudC5zZXQodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29tbWVudENvbnRlbnQuc2V0KCcnKTtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3FsLWVkaXRvcicpWzBdLmlubmVySFRNTCA9ICcnO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5oYXNDb29sZG93bi5zZXQoZmFsc2UpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1Ym1pdHRpbmcgY29tbWVudDonLCBlcnJvcik7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KHtcbiAgICAgICAgY29udGVudDogdHlwZW9mIGVycm9yID09PSAnc3RyaW5nJyA/IGVycm9yIDogJ0ZhaWxlZCB0byBzdWJtaXQgY29tbWVudC4gUGxlYXNlIHRyeSBhZ2Fpbi4nLFxuICAgICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgICAgIGxvY2F0aW9uOiAnYm90dG9tLWNlbnRlcicsXG4gICAgICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICB0aW1lT3V0OiAzMDAwLFxuICAgICAgICB0aW1lT3V0UHJvZ3Jlc3M6IHRydWUsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGxNYWluKCkge1xuICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLmlzUmVwbHlpbmdNb2RlKCkgPyB0aGlzLmFjdGl2ZVJlcGx5Q29tbWVudCgpIDogdGhpcy5hY3RpdmVFZGl0Q29tbWVudCgpO1xuICAgIGlmIChjb21tZW50ICYmIGNvbW1lbnQuaWQpIHtcbiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29tbWVudC5pZCk7XG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZENvbW1lbnRJZC5zZXQoY29tbWVudC5pZCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRDb21tZW50SWQuc2V0KG51bGwpO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1zaXplLWZ1bGwgYXgtZmxleCBheC1mbGV4LWNvbCBheC1qdXN0aWZ5LWJldHdlZW4gYXgtcC00IGF4LW92ZXJmbG93LWhpZGRlblwiPlxuICA8YXgtY29tbWVudC1jb250YWluZXIgY2xhc3M9XCJheC1vdmVyZmxvdy1hdXRvXCI+XG4gICAgQGlmIChpc0xvYWRpbmcoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LXB5LTEyIGF4LWJnLWxpZ2h0ZXN0IGF4LXB4LTVcIj5cbiAgICAgICAgPGF4LXNrZWxldG9uIGNsYXNzPVwiYXgtbWluLXctMTYgYXgtaC0xNiBheC1yb3VuZGVkLWZ1bGwgYXgtbWUtNFwiPjwvYXgtc2tlbGV0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0yIGF4LXctZnVsbFwiPlxuICAgICAgICAgIDxheC1za2VsZXRvbiBjbGFzcz1cImF4LXctZnVsbCBheC1oLTYgYXgtcm91bmRlZFwiPjwvYXgtc2tlbGV0b24+XG4gICAgICAgICAgPGF4LXNrZWxldG9uIGNsYXNzPVwiYXgtdy1mdWxsIGF4LWgtMiBheC1yb3VuZGVkLWZ1bGxcIj48L2F4LXNrZWxldG9uPlxuICAgICAgICAgIDxheC1za2VsZXRvbiBjbGFzcz1cImF4LXctZnVsbCBheC1oLTIgYXgtcm91bmRlZC1mdWxsXCI+PC9heC1za2VsZXRvbj5cbiAgICAgICAgICA8YXgtc2tlbGV0b24gY2xhc3M9XCJheC13LTgvMTIgYXgtaC0yIGF4LXJvdW5kZWQtZnVsbFwiPjwvYXgtc2tlbGV0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSBpZiAoIWlzTG9hZGluZygpICYmIGNvbW1lbnRzKCkubGVuZ3RoID4gMCkge1xuICAgICAgPGF4LWNvbW1lbnQtdmlldyBjbGFzcz1cImF4LWJnLWxpZ2h0ZXN0XCI+XG4gICAgICAgIEBmb3IgKGNvbW1lbnQgb2YgY29tbWVudHMoKTsgdHJhY2sgY29tbWVudC5pZCkge1xuICAgICAgICAgIDxheC1jb21tZW50LWl0ZW1cbiAgICAgICAgICAgIFtpZF09XCJjb21tZW50LmlkIVwiXG4gICAgICAgICAgICBbcmVwbHlDb3VudF09XCJjb21tZW50LnJlcGx5Q291bnRcIlxuICAgICAgICAgICAgW2NsYXNzLmhpZ2hsaWdodGVkXT1cImhpZ2hsaWdodGVkQ29tbWVudElkKCkgPT09IGNvbW1lbnQuaWRcIlxuICAgICAgICAgICAgW0BmYWRlSW5dXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGF4cC11c2VyLWF2YXRhciAjdXNlciBbc2l6ZV09XCI0OFwiIFt1c2VySWRdPVwiY29tbWVudC5hdXRob3IuaWRcIiBuZ1Byb2plY3RBcz1cIidheC1hdmF0YXInXCI+PC9heHAtdXNlci1hdmF0YXI+XG4gICAgICAgICAgICA8YXgtdGl0bGU+e3sgdXNlci5maXJzdE5hbWUoKSArICcgJyArIHVzZXIubGFzdE5hbWUoKSB9fTwvYXgtdGl0bGU+XG4gICAgICAgICAgICA8YXgtY29tbWVudC1kYXRlPnt7IGNvbW1lbnQuYXVkaXRJbmZvPy5jcmVhdGVkPy5hdCEgfCBmb3JtYXQ6ICd0aW1lbGVmdCcgfCBhc3luYyB9fSA8L2F4LWNvbW1lbnQtZGF0ZT5cbiAgICAgICAgICAgIDxheC1jb21tZW50LW1lbnUtb3B0aW9ucz5cbiAgICAgICAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXNtXCIgbG9vaz1cImJsYW5rXCIgY29sb3I9XCJuZXV0cmFsXCI+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gaWNvbj1cImF4LWljb24gYXgtaWNvbi1zb2xpZCBheC1pY29uLW1vcmUtaG9yaXpvbnRhbFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgPC9heC1idXR0b24+XG5cbiAgICAgICAgICAgICAgPGF4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtXG4gICAgICAgICAgICAgICAgICAgIHRleHQ9XCJFZGl0XCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJuZXV0cmFsXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRNZXNzYWdlKGNvbW1lbnQsIHVuZGVmaW5lZCwgdXNlci5maXJzdE5hbWUoKSArICcgJyArIHVzZXIubGFzdE5hbWUoKSlcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1zb2xpZCBmYS1lZGl0XCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG5cbiAgICAgICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSB0ZXh0PVwiRGVsZXRlXCIgY29sb3I9XCJkYW5nZXJcIiAoY2xpY2spPVwiZGVsZXRlQ29tbWVudChjb21tZW50LmlkISlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWQgZmEtdHJhc2gtY2FuXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbS1saXN0PlxuICAgICAgICAgICAgICA8L2F4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICAgICAgPC9heC1jb21tZW50LW1lbnUtb3B0aW9ucz5cbiAgICAgICAgICAgIDxheC1jb250ZW50IFtpbm5lckhUTUxdPVwic2FuaXRpemVIdG1sKGNvbW1lbnQubWVzc2FnZS5jb250ZW50KVwiPjwvYXgtY29udGVudD5cbiAgICAgICAgICAgIDxheC1jb21tZW50LWxpa2UgKGNsaWNrKT1cInRvZ2dsZUxpa2UoY29tbWVudClcIiBbbGlrZV09XCJpc0xpa2VkQnlVc2VyKGNvbW1lbnQpXCI+XG4gICAgICAgICAgICAgIHt7IGdldFJlYWN0aW9uc0NvdW50KGNvbW1lbnQpIH19XG4gICAgICAgICAgICA8L2F4LWNvbW1lbnQtbGlrZT5cbiAgICAgICAgICAgIDxheC1jb21tZW50LXJlcGx5LXRleHRcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlcGx5TWVzc2FnZShjb21tZW50LCB1bmRlZmluZWQsIHVzZXIuZmlyc3ROYW1lKCkgKyAnICcgKyB1c2VyLmxhc3ROYW1lKCkpXCJcbiAgICAgICAgICAgID48L2F4LWNvbW1lbnQtcmVwbHktdGV4dD5cbiAgICAgICAgICAgIEBmb3IgKHJlcGx5IG9mIGNvbW1lbnQucmVwbGllczsgdHJhY2sgcmVwbHkuaWQpIHtcbiAgICAgICAgICAgICAgPGF4LWNvbW1lbnQtaXRlbSBbaWRdPVwicmVwbHkuaWRcIiBbY2xhc3MuaGlnaGxpZ2h0ZWRdPVwiaGlnaGxpZ2h0ZWRDb21tZW50SWQoKSA9PT0gcmVwbHkuaWRcIiBbQGZhZGVJbl0+XG4gICAgICAgICAgICAgICAgPGF4cC11c2VyLWF2YXRhclxuICAgICAgICAgICAgICAgICAgI3VzZXIyXG4gICAgICAgICAgICAgICAgICBbc2l6ZV09XCI0OFwiXG4gICAgICAgICAgICAgICAgICBbdXNlcklkXT1cInJlcGx5LmF1dGhvci5pZFwiXG4gICAgICAgICAgICAgICAgICBuZ1Byb2plY3RBcz1cIidheC1hdmF0YXInXCJcbiAgICAgICAgICAgICAgICA+PC9heHAtdXNlci1hdmF0YXI+XG4gICAgICAgICAgICAgICAgPGF4LXRpdGxlPnt7IHVzZXIyLmZpcnN0TmFtZSgpICsgJyAnICsgdXNlcjIubGFzdE5hbWUoKSB9fTwvYXgtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGF4LWNvbW1lbnQtZGF0ZT57eyByZXBseS5hdWRpdEluZm8/LmNyZWF0ZWQ/LmF0ISB8IGZvcm1hdDogJ3RpbWVsZWZ0JyB8IGFzeW5jIH19IDwvYXgtY29tbWVudC1kYXRlPlxuICAgICAgICAgICAgICAgIDxheC1jb21tZW50LW1lbnUtb3B0aW9ucz5cbiAgICAgICAgICAgICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC1zbVwiIGxvb2s9XCJibGFua1wiIGNvbG9yPVwibmV1dHJhbFwiPlxuICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiYXgtaWNvbiBheC1pY29uLXNvbGlkIGF4LWljb24tbW9yZS1ob3Jpem9udGFsXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9heC1idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgIDxheC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PVwiRWRpdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cIm5ldXRyYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVkaXRNZXNzYWdlKGNvbW1lbnQsIHJlcGx5LCB1c2VyMi5maXJzdE5hbWUoKSArICcgJyArIHVzZXIyLmxhc3ROYW1lKCkpXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwiZmEtc29saWQgZmEtZWRpdFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtIHRleHQ9XCJEZWxldGVcIiBjb2xvcj1cImRhbmdlclwiIChjbGljayk9XCJkZWxldGVDb21tZW50KHJlcGx5LmlkISlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1zb2xpZCBmYS10cmFzaC1jYW5cIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgICAgICA8L2F4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICAgICAgICAgIDwvYXgtY29tbWVudC1tZW51LW9wdGlvbnM+XG4gICAgICAgICAgICAgICAgPGF4LWNvbnRlbnQgW2lubmVySFRNTF09XCJzYW5pdGl6ZUh0bWwocmVwbHkubWVzc2FnZS5jb250ZW50KVwiPjwvYXgtY29udGVudD5cbiAgICAgICAgICAgICAgICA8YXgtY29tbWVudC1saWtlIChjbGljayk9XCJ0b2dnbGVMaWtlKHJlcGx5KVwiIFtsaWtlXT1cImlzTGlrZWRCeVVzZXIocmVwbHkpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBnZXRSZWFjdGlvbnNDb3VudChyZXBseSkgfX1cbiAgICAgICAgICAgICAgICA8L2F4LWNvbW1lbnQtbGlrZT5cbiAgICAgICAgICAgICAgICA8YXgtY29tbWVudC1yZXBseS10ZXh0XG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVwbHlNZXNzYWdlKGNvbW1lbnQsIHJlcGx5LCB1c2VyMi5maXJzdE5hbWUoKSArICcgJyArIHVzZXIyLmxhc3ROYW1lKCkpXCJcbiAgICAgICAgICAgICAgICA+PC9heC1jb21tZW50LXJlcGx5LXRleHQ+XG4gICAgICAgICAgICAgIDwvYXgtY29tbWVudC1pdGVtPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtY29tbWVudC1pdGVtPlxuICAgICAgICB9XG4gICAgICA8L2F4LWNvbW1lbnQtdmlldz5cbiAgICB9IEBlbHNlIHtcbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC00IGF4LWp1c3RpZnktY2VudGVyIGF4LWl0ZW1zLWNlbnRlciBheC1wLTEwXCI+XG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgY2xhc3M9XCJheC1teC1hdXRvXCJcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgd2lkdGg9XCIxNTRcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMTYxXCJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTU0IDE2MVwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk0wLjA2MTY0NTUgODQuNDI2OEMwLjA2MTY0NTUgNDIuMDIxMyAzNC40MzUgNy44Mzc2NSA3Ni42NTA3IDcuODM3NjVDMTE4LjgwMyA3LjgzNzY1IDE1My4yMjQgNDIuMDA1NSAxNTMuMjI0IDg0LjQyNjhDMTUzLjIyNCAxMDIuNDIgMTQ3LjAyNiAxMTguOTc0IDEzNi42MjIgMTMyLjAzNEMxMjIuMjgyIDE1MC4xMzggMTAwLjM2NyAxNjEgNzYuNjUwNyAxNjFDNTIuNzc1OSAxNjEgMzAuOTg4MiAxNTAuMDU5IDE2LjY2MzMgMTMyLjAzNEM2LjI1OTYxIDExOC45NzQgMC4wNjE2NDU1IDEwMi40MiAwLjA2MTY0NTUgODQuNDI2OFpcIlxuICAgICAgICAgICAgICBmaWxsPVwiI0VFRjJGRlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk05Ni44MTg5IDAuNjMyNDk4TDk2LjgxODkgMC42MzIzODRMOTYuODA4MyAwLjYzMDk1NEM5Ni4yMDM0IDAuNTQ5NTgxIDk1LjU5MzEgMC41IDk0Ljk3ODcgMC41SDI5LjMzOEMyMi43MTEyIDAuNSAxNy4zMzk0IDUuODQ0NTUgMTcuMzM5NCAxMi40NDczVjE0Mi43MTVDMTcuMzM5NCAxNDkuMzE4IDIyLjcxMTIgMTU0LjY2MiAyOS4zMzggMTU0LjY2MkgxMjMuOTQ4QzEzMC41OTEgMTU0LjY2MiAxMzUuOTQ2IDE0OS4zMTcgMTM1Ljk0NiAxNDIuNzE1VjM4LjkzMDlDMTM1Ljk0NiAzOC4wMjQ0IDEzNS44NDcgMzcuMTMzNCAxMzUuNjQ4IDM2LjI1ODZMMTM1LjY0OCAzNi4yNTg0QzEzNS4xMTcgMzMuOTMwOSAxMzMuODc0IDMxLjc2ODYgMTMyLjA2NiAzMC4xMzMzQzEzMi4wNjYgMzAuMTMzMSAxMzIuMDY1IDMwLjEzMjkgMTMyLjA2NSAzMC4xMzI3TDEwMy4wNjggMy42NTIwM0MxMDMuMDY4IDMuNjUxOSAxMDMuMDY3IDMuNjUxNzcgMTAzLjA2NyAzLjY1MTY0QzEwMS4zMTEgMi4wMzUyNiA5OS4xMzk2IDAuOTk1NTUyIDk2LjgxODkgMC42MzI0OThaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiI0U1RTdFQlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGVsbGlwc2UgY3g9XCI4MC4wNjE4XCIgY3k9XCI4MVwiIHJ4PVwiMjguMDM0MlwiIHJ5PVwiMjguMDM0MlwiIGZpbGw9XCIjRUVGMkZGXCIgLz5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNOTkuMjM5MyA2MS4zMDYxTDk5LjIzOTEgNjEuMzA1OEM4OC40OTggNTAuNTgwOCA3MS4xMDkyIDUwLjU4MDQgNjAuMzgzNSA2MS4zMDYxQzQ5LjY0MjMgNzIuMDMxNiA0OS42NDIyIDg5LjQzNjEgNjAuMzgzMiAxMDAuMTYyQzcxLjEwOSAxMTAuOTAzIDg4LjQ5ODIgMTEwLjkwMyA5OS4yMzkzIDEwMC4xNjJDMTA5Ljk2NSA4OS40MzYzIDEwOS45NjUgNzIuMDMxNyA5OS4yMzkzIDYxLjMwNjFaTTEwNS44NjMgNTQuNjgzMkMxMjAuMjQ5IDY5LjA2OTUgMTIwLjI0OSA5Mi4zOTg1IDEwNS44NjMgMTA2Ljc4NUM5MS40NjA1IDEyMS4xNzEgNjguMTQ2OCAxMjEuMTcxIDUzLjc0NDYgMTA2Ljc4NUMzOS4zNTgyIDkyLjM5ODcgMzkuMzU4MiA2OS4wNjkzIDUzLjc0NDYgNTQuNjgzQzY4LjE0NjggNDAuMjk2NSA5MS40NjA1IDQwLjI5NjYgMTA1Ljg2MyA1NC42ODMyWlwiXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiNFNUU3RUJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTEwLjc4MiAxMTkuMjY3TDEwMi4wMTYgMTEwLjQ5MkMxMDQuODg4IDEwOC4yNjcgMTA3LjQ3NiAxMDUuNjUxIDEwOS41NjQgMTAyLjk1NUwxMTguMzI5IDExMS43MjlMMTEwLjc4MiAxMTkuMjY3WlwiXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiNFNUU3RUJcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTM5LjEyMiAxMjUuNzgxTDEzOS4xMjIgMTI1Ljc4TDEyMy4zMTMgMTA5Ljk4OEMxMjMuMzEzIDEwOS45ODcgMTIzLjMxMyAxMDkuOTg3IDEyMy4zMTIgMTA5Ljk4NkMxMjEuOTk2IDEwOC42NTMgMTE5Ljg0OSAxMDguNjU3IDExOC41MjEgMTA5Ljk4NUwxMTguODcxIDExMC4zMzVMMTE4LjUyMSAxMDkuOTg1TDEwOS4wNDcgMTE5LjQ1OUMxMDcuNzMxIDEyMC43NzUgMTA3LjczNSAxMjIuOTE4IDEwOS4wNDQgMTI0LjI0N0wxMDkuMDQ3IDEyNC4yNDlMMTI0Ljg1OCAxNDAuMDZDMTI4Ljc4OSAxNDMuOTkyIDEzNS4xOTEgMTQzLjk5MiAxMzkuMTIyIDE0MC4wNkMxNDMuMDY5IDEzNi4xMTMgMTQzLjA2OSAxMjkuNzI4IDEzOS4xMjIgMTI1Ljc4MVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiI0E1QjRGQ1wiXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiM4MThDRjhcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNODMuMTg1IDg3LjIyODVDODIuNTM4NyA4Ny4yMjg1IDgyLjAwMjcgODYuNjkyNiA4Mi4wMDI3IDg2LjAzMDVDODIuMDAyNyA4My4zODIxIDc3Ljk5ODcgODMuMzgyMSA3Ny45OTg3IDg2LjAzMDVDNzcuOTk4NyA4Ni42OTI2IDc3LjQ2MjcgODcuMjI4NSA3Ni44MDA2IDg3LjIyODVDNzYuMTU0MyA4Ny4yMjg1IDc1LjYxODMgODYuNjkyNiA3NS42MTgzIDg2LjAzMDVDNzUuNjE4MyA4MC4yMjk0IDg0LjM4MzEgODAuMjQ1MSA4NC4zODMxIDg2LjAzMDVDODQuMzgzMSA4Ni42OTI2IDgzLjg0NzEgODcuMjI4NSA4My4xODUgODcuMjI4NVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzRGNDZFNVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk05My4zNTI4IDc3LjA5MjZIODguNDAzQzg3Ljc0MDkgNzcuMDkyNiA4Ny4yMDQ5IDc2LjU1NjcgODcuMjA0OSA3NS44OTQ2Qzg3LjIwNDkgNzUuMjQ4MyA4Ny43NDA5IDc0LjcxMjMgODguNDAzIDc0LjcxMjNIOTMuMzUyOEM5NC4wMTQ5IDc0LjcxMjMgOTQuNTUwOSA3NS4yNDgzIDk0LjU1MDkgNzUuODk0NkM5NC41NTA5IDc2LjU1NjcgOTQuMDE0OSA3Ny4wOTI2IDkzLjM1MjggNzcuMDkyNlpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzRGNDZFNVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk03MS41OTg3IDc3LjA5MjVINjYuNjQ4OEM2NS45ODY3IDc3LjA5MjUgNjUuNDUwNyA3Ni41NTY1IDY1LjQ1MDcgNzUuODk0NUM2NS40NTA3IDc1LjI0ODEgNjUuOTg2NyA3NC43MTIyIDY2LjY0ODggNzQuNzEyMkg3MS41OTg3QzcyLjI0NSA3NC43MTIyIDcyLjc4MSA3NS4yNDgxIDcyLjc4MSA3NS44OTQ1QzcyLjc4MSA3Ni41NTY1IDcyLjI0NSA3Ny4wOTI1IDcxLjU5ODcgNzcuMDkyNVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzRGNDZFNVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjM4LjM1MjJcIiB5PVwiMjEuNTEyOFwiIHdpZHRoPVwiNDEuMDI1NlwiIGhlaWdodD1cIjIuNzM1MDRcIiByeD1cIjEuMzY3NTJcIiBmaWxsPVwiIzRGNDZFNVwiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PVwiMzguMzUyMlwiIHk9XCIxMzMuNjVcIiB3aWR0aD1cIjU0LjcwMDlcIiBoZWlnaHQ9XCI1LjQ3MDA5XCIgcng9XCIyLjczNTA0XCIgZmlsbD1cIiNBNUI0RkNcIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD1cIjM4LjM1MjJcIiB5PVwiMjkuNzE3OVwiIHdpZHRoPVwiMTMuNjc1MlwiIGhlaWdodD1cIjIuNzM1MDRcIiByeD1cIjEuMzY3NTJcIiBmaWxsPVwiIzRGNDZFNVwiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNTYuMTNcIiBjeT1cIjMxLjA4NTRcIiByPVwiMS4zNjc1MlwiIGZpbGw9XCIjNEY0NkU1XCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9XCI2MS42MDAxXCIgY3k9XCIzMS4wODU0XCIgcj1cIjEuMzY3NTJcIiBmaWxsPVwiIzRGNDZFNVwiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiNjcuMDcwMlwiIGN5PVwiMzEuMDg1NFwiIHI9XCIxLjM2NzUyXCIgZmlsbD1cIiM0RjQ2RTVcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aDIgY2xhc3M9XCJheC10ZXh0LWNlbnRlciBheC10ZXh0LW5ldXRyYWwtNjAwIGF4LWZvbnQtc2VtaWJvbGQgYXgtbGVhZGluZy1sb29zZSBheC1wYi0yXCI+XG4gICAgICAgICAgICAgIFRoZXJlIGlzIG5vIENvbW1lbnQhXG4gICAgICAgICAgICA8L2gyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9heC1jb21tZW50LWNvbnRhaW5lcj5cbiAgPGRpdj5cbiAgICBAaWYgKGlzUmVwbHlpbmdNb2RlKCkgfHwgaXNFZGl0aW5nTW9kZSgpKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYXgtZmxleCBheC1qdXN0aWZ5LWJldHdlZW4gYXgtcm91bmRlZC1iLW5vbmUgYXgtYm9yZGVyIGF4LWJvcmRlci1iLTAgYXgtcm91bmRlZC1sZyBheC1weC02IGF4LXB5LTMgYXgtdy1mdWxsIGF4LWl0ZW1zLWNlbnRlciBheC1vdmVyZmxvdy1oaWRkZW4gYXgtdGV4dC1zbSBheC1sZWFkaW5nLW5vbmVcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IChjbGljayk9XCJzY3JvbGxNYWluKClcIiBjbGFzcz1cImF4LWZsZXggYXgtanVzdGlmeS1zdGFydCBheC1pdGVtcy1jZW50ZXIgYXgtY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgW2NsYXNzXT1cImlzUmVwbHlpbmdNb2RlKCkgPyAnZmEtcmVwbHknIDogJ2ZhLXBlbidcIlxuICAgICAgICAgICAgY2xhc3M9XCJmYS1zb2xpZCBheC10ZXh0LXByaW1hcnktNTAwIGRhcms6YXgtdGV4dC1wcmltYXJ5LTMwMCBheC10ZXh0LTJ4bCBheC1tZS00XCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0yIGF4LWp1c3RpZnktYmV0d2VlbiBheC1hbGlnbi1taWRkbGUgYXgtbGVhZGluZy00IGF4LW92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJheC10ZXh0LXByaW1hcnktNTAwIGRhcms6YXgtdGV4dC1wcmltYXJ5LTMwMFwiPlxuICAgICAgICAgICAgICB7eyBpc1JlcGx5aW5nTW9kZSgpID8gJ1JlcGx5IHRvICcgOiAnRWRpdCBNZXNzYWdlJyB9fVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LWZvbnQtYm9sZFwiPlxuICAgICAgICAgICAgICAgIHt7IGlzUmVwbHlpbmdNb2RlKCkgPyBhY3RpdmVSZXBseUNvbW1lbnQoKT8udXNlck5hbWUgOiAnJyB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJ1bmNhdGVcIlxuICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlxuICAgICAgICAgICAgICAgIGlzUmVwbHlpbmdNb2RlKClcbiAgICAgICAgICAgICAgICAgID8gc2FuaXRpemVIdG1sKGFjdGl2ZVJlcGx5Q29tbWVudCgpPy5tZXNzYWdlPy5jb250ZW50ID8/ICcnKVxuICAgICAgICAgICAgICAgICAgOiBzYW5pdGl6ZUh0bWwoYWN0aXZlRWRpdENvbW1lbnQoKT8ubWVzc2FnZT8uY29udGVudCA/PyAnJylcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+PGkgKGNsaWNrKT1cInJlc2V0UmVwbHlFZGl0U3RhdGUoKVwiIGNsYXNzPVwiZmEtc29saWQgYXgtdGV4dC0yeGwgZmEteG1hcmsgYXgtY3Vyc29yLXBvaW50ZXJcIj48L2k+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGF4LXd5c2l3eWctY29udGFpbmVyICN3IFtsb29rXT1cInd5c2l3eWdPcHRpb25zKCkubG9va1wiIFsobmdNb2RlbCldPVwiY29tbWVudENvbnRlbnRcIj5cbiAgICAgIDxheC13eXNpd3lnLXZpZXcgY2xhc3M9XCJheC1taW4taC0yOFwiPjwvYXgtd3lzaXd5Zy12aWV3PlxuICAgICAgPGF4LXd5c2l3eWctdG9vbGJhcj5cbiAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICA8YXgtd3lzaXd5Zy1oaXN0b3J5PjwvYXgtd3lzaXd5Zy1oaXN0b3J5PlxuICAgICAgICAgIDxheC13eXNpd3lnLWZvbnQtc3R5bGU+PC9heC13eXNpd3lnLWZvbnQtc3R5bGU+XG4gICAgICAgICAgPGF4LXd5c2l3eWctY29sb3JzPjwvYXgtd3lzaXd5Zy1jb2xvcnM+XG4gICAgICAgICAgPGF4LXd5c2l3eWctbGlzdD48L2F4LXd5c2l3eWctbGlzdD5cbiAgICAgICAgICA8YXgtd3lzaXd5Zy1hbGlnbm1lbnQ+PC9heC13eXNpd3lnLWFsaWdubWVudD5cbiAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgIDxheC1zdWZmaXg+XG4gICAgICAgICAgPGF4LWRyb3Bkb3duLWJ1dHRvblxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImhhc0Nvb2xkb3duKCkgfHwgIXRoaXMuY29tbWVudENvbnRlbnQoKVwiXG4gICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBtb2RlPVwic3BsaXRcIlxuICAgICAgICAgICAgdGV4dD1cIlNlbmRcIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwic3VibWl0Q29tbWVudCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKGlzU3VibWl0dGluZygpKSB7XG4gICAgICAgICAgICAgIDxheC1sb2FkaW5nPjwvYXgtbG9hZGluZz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwhLS0gPGF4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gKGNsaWNrKT1cInN1Ym1pdENvbW1lbnQoKVwiIHRleHQ9XCJTZW5kIFByaXZhdGUgLi4uXCIgbmFtZT1cInByaXZhdGVcIiBkYXRhPVwicHJpdmF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGljb249XCJmYS1yZWd1bGFyIGZhLXVzZXItc2VjcmV0XCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbS1saXN0PiAtLT5cbiAgICAgICAgICA8L2F4LWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgPC9heC1zdWZmaXg+XG4gICAgICA8L2F4LXd5c2l3eWctdG9vbGJhcj5cbiAgICA8L2F4LXd5c2l3eWctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { CommonModule } from '@angular/common';\nimport { Component, ViewEncapsulation, input } from '@angular/core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXMCommentComponent } from '../comment.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/decorators\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@angular/common\";\nimport * as i4 from \"@acorex/core/translation\";\nexport class AXMCommentPopupComponent extends AXBasePageComponent {\n constructor() {\n super(...arguments);\n this.refrenceType = input.required(...(ngDevMode ? [{ debugName: \"refrenceType\" }] : []));\n this.refrenceId = input.required(...(ngDevMode ? [{ debugName: \"refrenceId\" }] : []));\n this.subject = input.required(...(ngDevMode ? [{ debugName: \"subject\" }] : []));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.3.12\", type: AXMCommentPopupComponent, isStandalone: true, selector: \"axm-comment-popup\", inputs: { refrenceType: { classPropertyName: \"refrenceType\", publicName: \"refrenceType\", isSignal: true, isRequired: true, transformFunction: null }, refrenceId: { classPropertyName: \"refrenceId\", publicName: \"refrenceId\", isSignal: true, isRequired: true, transformFunction: null }, subject: { classPropertyName: \"subject\", publicName: \"subject\", isSignal: true, isRequired: true, transformFunction: null } }, providers: [], usesInheritance: true, ngImport: i0, template: \"<ax-content>\\n <div class=\\\"ax-p-6 ax-min-h-[30vh] ax-overflow-y-auto\\\">\\n <axm-comment [refrenceType]=\\\"refrenceType()\\\" [refrenceId]=\\\"refrenceId()\\\" [subject]=\\\"subject()\\\"></axm-comment>\\n </div>\\n</ax-content>\\n<ax-footer>\\n <ax-prefix></ax-prefix>\\n <ax-suffix>\\n <ax-button\\n [text]=\\\"'@general:actions.close.title' | translate | async\\\"\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n (onClick)=\\\"close()\\\"\\n >\\n </ax-button>\\n </ax-suffix>\\n</ax-footer>\\n\", dependencies: [{ kind: \"ngmodule\", type: \n // Angular\n CommonModule }, { kind: \"ngmodule\", type: \n // ACoreX\n AXDecoratorModule }, { kind: \"component\", type: i1.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"component\", type: \n // Comment\n AXMCommentComponent, selector: \"axm-comment\", inputs: [\"refrenceType\", \"refrenceId\", \"subject\"] }, { kind: \"pipe\", type: i3.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i4.AXTranslatorPipe, name: \"translate\" }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentPopupComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-comment-popup', standalone: true, imports: [\n // Angular\n CommonModule,\n // ACoreX\n AXDecoratorModule,\n AXButtonModule,\n AXTranslationModule,\n // Comment\n AXMCommentComponent,\n ], encapsulation: ViewEncapsulation.None, providers: [], template: \"<ax-content>\\n <div class=\\\"ax-p-6 ax-min-h-[30vh] ax-overflow-y-auto\\\">\\n <axm-comment [refrenceType]=\\\"refrenceType()\\\" [refrenceId]=\\\"refrenceId()\\\" [subject]=\\\"subject()\\\"></axm-comment>\\n </div>\\n</ax-content>\\n<ax-footer>\\n <ax-prefix></ax-prefix>\\n <ax-suffix>\\n <ax-button\\n [text]=\\\"'@general:actions.close.title' | translate | async\\\"\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n (onClick)=\\\"close()\\\"\\n >\\n </ax-button>\\n </ax-suffix>\\n</ax-footer>\\n\" }]\n }], propDecorators: { refrenceType: [{ type: i0.Input, args: [{ isSignal: true, alias: \"refrenceType\", required: true }] }], refrenceId: [{ type: i0.Input, args: [{ isSignal: true, alias: \"refrenceId\", required: true }] }], subject: [{ type: i0.Input, args: [{ isSignal: true, alias: \"subject\", required: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY29tbWVudC9wb3B1cC9jb21tZW50LXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jb21tZW50L3BvcHVwL2NvbW1lbnQtcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7O0FBbUIzRCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsbUJBQW1CO0lBakJqRTs7UUFrQkUsaUJBQVksR0FBRyxLQUFLLENBQUMsUUFBUSx1REFBVSxDQUFDO1FBQ3hDLGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxxREFBVSxDQUFDO1FBQ3RDLFlBQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxrREFBVSxDQUFDO0tBQ3BDOytHQUpZLHdCQUF3QjttR0FBeEIsd0JBQXdCLDJkQUZ4QixFQUFFLGlEQ3hCZiw4ZUFpQkE7Z0JESkksVUFBVTtnQkFDVixZQUFZO2dCQUNaLFNBQVM7Z0JBQ1QsaUJBQWlCLHFQQUNqQixjQUFjLDZYQUNkLG1CQUFtQjtnQkFDbkIsVUFBVTtnQkFDVixtQkFBbUI7OzRGQU1WLHdCQUF3QjtrQkFqQnBDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUDt3QkFDUCxVQUFVO3dCQUNWLFlBQVk7d0JBQ1osU0FBUzt3QkFDVCxpQkFBaUI7d0JBQ2pCLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixVQUFVO3dCQUNWLG1CQUFtQjtxQkFDcEIsaUJBRWMsaUJBQWlCLENBQUMsSUFBSSxhQUMxQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24sIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYQmFzZVBhZ2VDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcGFnZSc7XG5pbXBvcnQgeyBBWFRyYW5zbGF0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYTUNvbW1lbnRDb21wb25lbnQgfSBmcm9tICcuLi9jb21tZW50LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4bS1jb21tZW50LXBvcHVwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIC8vIEFuZ3VsYXJcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgLy8gQUNvcmVYXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhUcmFuc2xhdGlvbk1vZHVsZSxcbiAgICAvLyBDb21tZW50XG4gICAgQVhNQ29tbWVudENvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbW1lbnQtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1Db21tZW50UG9wdXBDb21wb25lbnQgZXh0ZW5kcyBBWEJhc2VQYWdlQ29tcG9uZW50IHtcbiAgcmVmcmVuY2VUeXBlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWZyZW5jZUlkID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuICBzdWJqZWN0ID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xufVxuIiwiPGF4LWNvbnRlbnQ+XG4gIDxkaXYgY2xhc3M9XCJheC1wLTYgYXgtbWluLWgtWzMwdmhdIGF4LW92ZXJmbG93LXktYXV0b1wiPlxuICAgIDxheG0tY29tbWVudCBbcmVmcmVuY2VUeXBlXT1cInJlZnJlbmNlVHlwZSgpXCIgW3JlZnJlbmNlSWRdPVwicmVmcmVuY2VJZCgpXCIgW3N1YmplY3RdPVwic3ViamVjdCgpXCI+PC9heG0tY29tbWVudD5cbiAgPC9kaXY+XG48L2F4LWNvbnRlbnQ+XG48YXgtZm9vdGVyPlxuICA8YXgtcHJlZml4PjwvYXgtcHJlZml4PlxuICA8YXgtc3VmZml4PlxuICAgIDxheC1idXR0b25cbiAgICAgIFt0ZXh0XT1cIidAZ2VuZXJhbDphY3Rpb25zLmNsb3NlLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgIGxvb2s9XCJzb2xpZFwiXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgKG9uQ2xpY2spPVwiY2xvc2UoKVwiXG4gICAgPlxuICAgIDwvYXgtYnV0dG9uPlxuICA8L2F4LXN1ZmZpeD5cbjwvYXgtZm9vdGVyPlxuIl19","import { AXPValueWidgetComponent } from '@acorex/platform/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\nimport { AXMCommentComponent } from '..';\nimport * as i0 from \"@angular/core\";\nexport class AXMCommentWidgetViewComponent extends AXPValueWidgetComponent {\n constructor() {\n super(...arguments);\n this.refrenceType = computed(() => this.options()?.['refrenceType'], ...(ngDevMode ? [{ debugName: \"refrenceType\" }] : []));\n this.refrenceId = computed(() => this.options()?.['refrenceId'], ...(ngDevMode ? [{ debugName: \"refrenceId\" }] : []));\n this.subject = computed(() => this.options()?.['subject'], ...(ngDevMode ? [{ debugName: \"subject\" }] : []));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.12\", type: AXMCommentWidgetViewComponent, isStandalone: true, selector: \"ng-component\", usesInheritance: true, ngImport: i0, template: `\n <axm-comment [refrenceId]=\"refrenceId()\" [refrenceType]=\"refrenceType()\" [subject]=\"subject()\"></axm-comment>\n `, isInline: true, dependencies: [{ kind: \"component\", type: AXMCommentComponent, selector: \"axm-comment\", inputs: [\"refrenceType\", \"refrenceId\", \"subject\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentWidgetViewComponent, decorators: [{\n type: Component,\n args: [{\n template: `\n <axm-comment [refrenceId]=\"refrenceId()\" [refrenceType]=\"refrenceType()\" [subject]=\"subject()\"></axm-comment>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMCommentComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC13aWRnZXQtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY29tbWVudC93aWRnZXQvY29tbWVudC13aWRnZXQtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sSUFBSSxDQUFDOztBQVN6QyxNQUFNLE9BQU8sNkJBQThCLFNBQVEsdUJBQWlFO0lBUHBIOztRQVFZLGlCQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyx3REFBQyxDQUFDO1FBQ2hFLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLHNEQUFDLENBQUM7UUFDNUQsWUFBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsbURBQUMsQ0FBQztLQUNqRTsrR0FKWSw2QkFBNkI7bUdBQTdCLDZCQUE2QiwrRkFOOUI7O0dBRVQsNERBRVMsbUJBQW1COzs0RkFFbEIsNkJBQTZCO2tCQVB6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRTs7R0FFVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7aUJBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQRW50aXR5UmVmZXJlbmNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUFZhbHVlV2lkZ2V0Q29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTUNvbW1lbnRDb21wb25lbnQgfSBmcm9tICcuLic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYFxuICAgIDxheG0tY29tbWVudCBbcmVmcmVuY2VJZF09XCJyZWZyZW5jZUlkKClcIiBbcmVmcmVuY2VUeXBlXT1cInJlZnJlbmNlVHlwZSgpXCIgW3N1YmplY3RdPVwic3ViamVjdCgpXCI+PC9heG0tY29tbWVudD5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtBWE1Db21tZW50Q29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNQ29tbWVudFdpZGdldFZpZXdDb21wb25lbnQgZXh0ZW5kcyBBWFBWYWx1ZVdpZGdldENvbXBvbmVudDxBWFBFbnRpdHlSZWZlcmVuY2UgJiB7IHN1YmplY3Q6IHN0cmluZyB9PiB7XG4gIHByb3RlY3RlZCByZWZyZW5jZVR5cGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uWydyZWZyZW5jZVR5cGUnXSk7XG4gIHByb3RlY3RlZCByZWZyZW5jZUlkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/LlsncmVmcmVuY2VJZCddKTtcbiAgcHJvdGVjdGVkIHN1YmplY3QgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKT8uWydzdWJqZWN0J10pO1xufVxuIl19","import { AXPWidgetGroupEnum } from '@acorex/platform/layout/widget-core';\nexport const AXPCommentWidget = {\n name: 'comment',\n title: 'Comments',\n description: 'Display and manage comments for entities',\n type: 'view',\n categories: [],\n groups: [AXPWidgetGroupEnum.EntityWidget],\n icon: 'fa-solid fa-comments',\n properties: [],\n components: {\n view: {\n component: () => import('./comment-widget-view.component').then((c) => c.AXMCommentWidgetViewComponent),\n },\n edit: {\n component: () => import('./comment-widget-view.component').then((c) => c.AXMCommentWidgetViewComponent),\n },\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC13aWRnZXQuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NvbW1lbnQvd2lkZ2V0L2NvbW1lbnQtd2lkZ2V0LmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLGtCQUFrQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFMUYsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQW9CO0lBQy9DLElBQUksRUFBRSxTQUFTO0lBQ2YsS0FBSyxFQUFFLFVBQVU7SUFDakIsV0FBVyxFQUFFLDBDQUEwQztJQUN2RCxJQUFJLEVBQUUsTUFBTTtJQUNaLFVBQVUsRUFBRSxFQUFFO0lBQ2QsTUFBTSxFQUFFLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDO0lBQ3pDLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsVUFBVSxFQUFFLEVBQUU7SUFDZCxVQUFVLEVBQUU7UUFDVixJQUFJLEVBQUU7WUFDSixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUM7U0FDeEc7UUFDRCxJQUFJLEVBQUU7WUFDSixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUM7U0FDeEc7S0FDRjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBXaWRnZXRDb25maWcsIEFYUFdpZGdldEdyb3VwRW51bSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3dpZGdldC1jb3JlJztcblxuZXhwb3J0IGNvbnN0IEFYUENvbW1lbnRXaWRnZXQ6IEFYUFdpZGdldENvbmZpZyA9IHtcbiAgbmFtZTogJ2NvbW1lbnQnLFxuICB0aXRsZTogJ0NvbW1lbnRzJyxcbiAgZGVzY3JpcHRpb246ICdEaXNwbGF5IGFuZCBtYW5hZ2UgY29tbWVudHMgZm9yIGVudGl0aWVzJyxcbiAgdHlwZTogJ3ZpZXcnLFxuICBjYXRlZ29yaWVzOiBbXSxcbiAgZ3JvdXBzOiBbQVhQV2lkZ2V0R3JvdXBFbnVtLkVudGl0eVdpZGdldF0sXG4gIGljb246ICdmYS1zb2xpZCBmYS1jb21tZW50cycsXG4gIHByb3BlcnRpZXM6IFtdLFxuICBjb21wb25lbnRzOiB7XG4gICAgdmlldzoge1xuICAgICAgY29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vY29tbWVudC13aWRnZXQtdmlldy5jb21wb25lbnQnKS50aGVuKChjKSA9PiBjLkFYTUNvbW1lbnRXaWRnZXRWaWV3Q29tcG9uZW50KSxcbiAgICB9LFxuICAgIGVkaXQ6IHtcbiAgICAgIGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL2NvbW1lbnQtd2lkZ2V0LXZpZXcuY29tcG9uZW50JykudGhlbigoYykgPT4gYy5BWE1Db21tZW50V2lkZ2V0Vmlld0NvbXBvbmVudCksXG4gICAgfSxcbiAgfSxcbn07XG4iXX0=","import { AXPopupService } from '@acorex/components/popup';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { AXPWorkflowAction } from '@acorex/platform/workflow';\nimport { inject, Injectable, signal } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXMCommentPopupStartAction extends AXPWorkflowAction {\n constructor() {\n super(...arguments);\n this.popupService = inject(AXPopupService);\n this.translate = inject(AXTranslationService);\n }\n async execute(context) {\n const comp = (await import('../popup/comment-popup.component')).AXMCommentPopupComponent;\n this.popupService.open(comp, {\n title: await this.translate.translateAsync('Comments'),\n size: 'lg',\n data: {\n refrenceType: signal(context.getVariable('options.refType')),\n refrenceId: signal(context.getVariable('options.refId')),\n subject: signal(context.getVariable('options.subject')),\n },\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentPopupStartAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentPopupStartAction }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMCommentPopupStartAction, decorators: [{\n type: Injectable\n }] });\nexport const AXMCommentPopupWorkflow = {\n startStepId: 'start',\n steps: {\n start: {\n action: 'show-comment-popup-action',\n },\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC53b3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9mZWF0dXJlcy9jb21tZW50L3dvcmtmbG93L2NvbW1lbnQud29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBZSxpQkFBaUIsRUFBc0IsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRixPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNELE1BQU0sT0FBTywwQkFBMkIsU0FBUSxpQkFBaUI7SUFEakU7O1FBRVUsaUJBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0tBZWxEO0lBYlUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUEyQjtRQUNoRCxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQztRQUV6RixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDM0IsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDO1lBQ3RELElBQUksRUFBRSxJQUFJO1lBQ1YsSUFBSSxFQUFFO2dCQUNKLFlBQVksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM1RCxVQUFVLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3hELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3hEO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FoQlUsMEJBQTBCO21IQUExQiwwQkFBMEI7OzRGQUExQiwwQkFBMEI7a0JBRHRDLFVBQVU7O0FBb0JYLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFnQjtJQUNsRCxXQUFXLEVBQUUsT0FBTztJQUNwQixLQUFLLEVBQUU7UUFDTCxLQUFLLEVBQUU7WUFDTCxNQUFNLEVBQUUsMkJBQTJCO1NBQ3BDO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQb3B1cFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wdXAnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQV29ya2Zsb3csIEFYUFdvcmtmbG93QWN0aW9uLCBBWFBXb3JrZmxvd0NvbnRleHQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWE1Db21tZW50UG9wdXBTdGFydEFjdGlvbiBleHRlbmRzIEFYUFdvcmtmbG93QWN0aW9uIHtcbiAgcHJpdmF0ZSBwb3B1cFNlcnZpY2UgPSBpbmplY3QoQVhQb3B1cFNlcnZpY2UpO1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChBWFRyYW5zbGF0aW9uU2VydmljZSk7XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZXhlY3V0ZShjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb21wID0gKGF3YWl0IGltcG9ydCgnLi4vcG9wdXAvY29tbWVudC1wb3B1cC5jb21wb25lbnQnKSkuQVhNQ29tbWVudFBvcHVwQ29tcG9uZW50O1xuXG4gICAgdGhpcy5wb3B1cFNlcnZpY2Uub3Blbihjb21wLCB7XG4gICAgICB0aXRsZTogYXdhaXQgdGhpcy50cmFuc2xhdGUudHJhbnNsYXRlQXN5bmMoJ0NvbW1lbnRzJyksXG4gICAgICBzaXplOiAnbGcnLFxuICAgICAgZGF0YToge1xuICAgICAgICByZWZyZW5jZVR5cGU6IHNpZ25hbChjb250ZXh0LmdldFZhcmlhYmxlKCdvcHRpb25zLnJlZlR5cGUnKSksXG4gICAgICAgIHJlZnJlbmNlSWQ6IHNpZ25hbChjb250ZXh0LmdldFZhcmlhYmxlKCdvcHRpb25zLnJlZklkJykpLFxuICAgICAgICBzdWJqZWN0OiBzaWduYWwoY29udGV4dC5nZXRWYXJpYWJsZSgnb3B0aW9ucy5zdWJqZWN0JykpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQVhNQ29tbWVudFBvcHVwV29ya2Zsb3c6IEFYUFdvcmtmbG93ID0ge1xuICBzdGFydFN0ZXBJZDogJ3N0YXJ0JyxcbiAgc3RlcHM6IHtcbiAgICBzdGFydDoge1xuICAgICAgYWN0aW9uOiAnc2hvdy1jb21tZW50LXBvcHVwLWFjdGlvbicsXG4gICAgfSxcbiAgfSxcbn07XG4iXX0=","import { Injectable, effect, inject, signal } from '@angular/core';\nimport { AXMChatManagementService } from './features';\nimport * as i0 from \"@angular/core\";\nexport class AXMChatBadgeProviderSimple {\n constructor() {\n this.chatService = inject(AXMChatManagementService);\n this.key = 'badge-chat';\n this.count = signal(0, ...(ngDevMode ? [{ debugName: \"count\" }] : []));\n this.#eff = effect(async () => {\n const response = await this.chatService.listRooms();\n this.count.set(response.items.filter((i) => i.unreadCount > 0).length);\n }, ...(ngDevMode ? [{ debugName: \"#eff\" }] : []));\n }\n #eff;\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatBadgeProviderSimple, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatBadgeProviderSimple }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatBadgeProviderSimple, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFkZ2UucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvYmFkZ2UucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBR3RELE1BQU0sT0FBTywwQkFBMEI7SUFEdkM7UUFFbUIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUV2RCxRQUFHLEdBQUcsWUFBWSxDQUFDO1FBQ25CLFVBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxpREFBQyxDQUFDO1FBRTNCLFNBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDdkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pFLENBQUMsZ0RBQUMsQ0FBQztLQUNKO0lBSkMsSUFBSSxDQUdEOytHQVRRLDBCQUEwQjttSEFBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQUR0QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQVGFza0JhZGdlUHJvdmlkZXIgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcbmltcG9ydCB7IEluamVjdGFibGUsIGVmZmVjdCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTUNoYXRNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4vZmVhdHVyZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhNQ2hhdEJhZGdlUHJvdmlkZXJTaW1wbGUgaW1wbGVtZW50cyBBWFBUYXNrQmFkZ2VQcm92aWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhdFNlcnZpY2UgPSBpbmplY3QoQVhNQ2hhdE1hbmFnZW1lbnRTZXJ2aWNlKTtcblxuICByZWFkb25seSBrZXkgPSAnYmFkZ2UtY2hhdCc7XG4gIHJlYWRvbmx5IGNvdW50ID0gc2lnbmFsKDApO1xuXG4gICNlZmYgPSBlZmZlY3QoYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jaGF0U2VydmljZS5saXN0Um9vbXMoKTtcbiAgICB0aGlzLmNvdW50LnNldChyZXNwb25zZS5pdGVtcy5maWx0ZXIoKGkpID0+IGkudW5yZWFkQ291bnQgPiAwKS5sZW5ndGgpO1xuICB9KTtcbn1cbiJdfQ==","import { AXButtonModule } from '@acorex/components/button';\nimport { CommonModule } from '@angular/common';\nimport { Component, input, output } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXMChatNotificationContentComponent {\n constructor() {\n this.item = input(...(ngDevMode ? [undefined, { debugName: \"item\" }] : []));\n this.execute = output();\n }\n onMarkAsSeen(e) {\n e.nativeEvent.stopPropagation();\n this.execute.emit({ name: 'mark-as-seen' });\n }\n goToChat(e) {\n e.nativeEvent.stopPropagation();\n this.execute.emit({ name: 'go-to-chat' });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatNotificationContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.1.0\", version: \"20.3.12\", type: AXMChatNotificationContentComponent, isStandalone: true, selector: \"axm-chat-notification-content\", inputs: { item: { classPropertyName: \"item\", publicName: \"item\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { execute: \"execute\" }, ngImport: i0, template: `\n <div class=\"ax-text-sm ax-mt-1 ax-line-clamp-2\">\n <p>{{ item()?.body || 'You have a new message.' }}</p>\n <div class=\"ax-flex ax-gap-2 ax-pt-2\">\n <!-- <ax-button (onClick)=\"onMarkAsSeen($event)\" [text]=\"'Mark as Seen'\"></ax-button>\n <ax-button (onClick)=\"goToChat($event)\" [text]=\"'Go to Chat'\"></ax-button> -->\n </div>\n </div>\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: AXButtonModule }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMChatNotificationContentComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'axm-chat-notification-content',\n template: `\n <div class=\"ax-text-sm ax-mt-1 ax-line-clamp-2\">\n <p>{{ item()?.body || 'You have a new message.' }}</p>\n <div class=\"ax-flex ax-gap-2 ax-pt-2\">\n <!-- <ax-button (onClick)=\"onMarkAsSeen($event)\" [text]=\"'Mark as Seen'\"></ax-button>\n <ax-button (onClick)=\"goToChat($event)\" [text]=\"'Go to Chat'\"></ax-button> -->\n </div>\n </div>\n `,\n standalone: true,\n imports: [CommonModule, AXButtonModule],\n }]\n }], propDecorators: { item: [{ type: i0.Input, args: [{ isSignal: true, alias: \"item\", required: false }] }], execute: [{ type: i0.Output, args: [\"execute\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1ub3RpZmljYXRpb24tY29udGVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY2hhdC9jb21wb25lbnRzL2NoYXQtbm90aWZpY2F0aW9uLWNvbnRlbnQvY2hhdC1ub3RpZmljYXRpb24tY29udGVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBZ0J6RCxNQUFNLE9BQU8sbUNBQW1DO0lBZGhEO1FBZUUsU0FBSSxHQUFHLEtBQUssMERBQXVCLENBQUM7UUFDcEMsWUFBTyxHQUFHLE1BQU0sRUFBcUIsQ0FBQztLQVd2QztJQVRDLFlBQVksQ0FBQyxDQUFlO1FBQzFCLENBQUMsQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsUUFBUSxDQUFDLENBQWU7UUFDdEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7K0dBWlUsbUNBQW1DO21HQUFuQyxtQ0FBbUMsMlBBWnBDOzs7Ozs7OztHQVFULDJEQUVTLFlBQVksOEJBQUUsY0FBYzs7NEZBRTNCLG1DQUFtQztrQkFkL0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsK0JBQStCO29CQUN6QyxRQUFRLEVBQUU7Ozs7Ozs7O0dBUVQ7b0JBQ0QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUM7aUJBQ3hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhDbGlja0V2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWE1Ob3RpZmljYXRpb25JdGVtLCBBWFBOb3RpZmljYXRpb25Db250ZW50IH0gZnJvbSAnQGFjb3JleC9tb2R1bGVzL25vdGlmaWNhdGlvbi1tYW5hZ2VtZW50JztcbmltcG9ydCB7IEFYUEV4ZWN1dGVDb21tYW5kIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGlucHV0LCBvdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhtLWNoYXQtbm90aWZpY2F0aW9uLWNvbnRlbnQnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJheC10ZXh0LXNtIGF4LW10LTEgYXgtbGluZS1jbGFtcC0yXCI+XG4gICAgICA8cD57eyBpdGVtKCk/LmJvZHkgfHwgJ1lvdSBoYXZlIGEgbmV3IG1lc3NhZ2UuJyB9fTwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWdhcC0yIGF4LXB0LTJcIj5cbiAgICAgICAgPCEtLSA8YXgtYnV0dG9uIChvbkNsaWNrKT1cIm9uTWFya0FzU2VlbigkZXZlbnQpXCIgW3RleHRdPVwiJ01hcmsgYXMgU2VlbidcIj48L2F4LWJ1dHRvbj5cbiAgICAgICAgPGF4LWJ1dHRvbiAob25DbGljayk9XCJnb1RvQ2hhdCgkZXZlbnQpXCIgW3RleHRdPVwiJ0dvIHRvIENoYXQnXCI+PC9heC1idXR0b24+IC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEFYQnV0dG9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNQ2hhdE5vdGlmaWNhdGlvbkNvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBBWFBOb3RpZmljYXRpb25Db250ZW50IHtcbiAgaXRlbSA9IGlucHV0PEFYTU5vdGlmaWNhdGlvbkl0ZW0+KCk7XG4gIGV4ZWN1dGUgPSBvdXRwdXQ8QVhQRXhlY3V0ZUNvbW1hbmQ+KCk7XG5cbiAgb25NYXJrQXNTZWVuKGU6IEFYQ2xpY2tFdmVudCkge1xuICAgIGUubmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5leGVjdXRlLmVtaXQoeyBuYW1lOiAnbWFyay1hcy1zZWVuJyB9KTtcbiAgfVxuXG4gIGdvVG9DaGF0KGU6IEFYQ2xpY2tFdmVudCkge1xuICAgIGUubmF0aXZlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5leGVjdXRlLmVtaXQoeyBuYW1lOiAnZ28tdG8tY2hhdCcgfSk7XG4gIH1cbn1cbiJdfQ==","//#region ---- Imports ----\nimport { AXP_NOTIFICATION_DEFINITION_PROVIDER, } from '@acorex/modules/notification-management';\nimport { Injector } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AXMChatManagementService } from './chat-management.service';\nimport { AXMChatNotificationContentComponent } from './components/chat-notification-content/chat-notification-content.component';\n//#endregion\n//#region ---- Chat Notification Provider ----\n/**\n * Provides notification handling and content for Chat.\n */\nexport class AXMChatNotificationProvider {\n constructor(injector) {\n this.injector = injector;\n this.name = 'Chat';\n this.title = 'Chat';\n this.icon = 'fa-solid fa-comment-sms';\n }\n content() {\n return Promise.resolve(AXMChatNotificationContentComponent);\n }\n async execute(command, item) {\n const router = this.injector.get(Router);\n const chatService = this.injector.get(AXMChatManagementService);\n const activatedRoute = this.injector.get(ActivatedRoute);\n const roomId = item.data?.['roomId'];\n if (!roomId) {\n console.error('Room ID is missing from notification item.');\n return;\n }\n const app = activatedRoute.snapshot.firstChild?.paramMap.get('app') || 'platform';\n switch (command.name) {\n case 'mark-as-seen':\n await chatService.markRoomSeen(roomId);\n break;\n case 'go-to-chat':\n router.navigate([app, 'chat', roomId]);\n break;\n case 'click':\n router.navigate([app, 'chat', roomId]);\n break;\n default:\n break;\n }\n }\n}\n//#endregion\n//#region ---- Providers ----\n/**\n * Providers for chat notification definition registration.\n */\nexport const AXM_CHAT_NOTIFICATION_PROVIDERS = [\n {\n provide: AXP_NOTIFICATION_DEFINITION_PROVIDER,\n useFactory: (injector) => new AXMChatNotificationProvider(injector),\n deps: [Injector],\n multi: true,\n },\n];\n//#endregion\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1ub3RpZmljYXRpb24ucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY2hhdC9jaGF0LW5vdGlmaWNhdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFFL0IsT0FBTyxFQUVMLG9DQUFvQyxHQUVyQyxNQUFNLHlDQUF5QyxDQUFDO0FBRWpELE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSw0RUFBNEUsQ0FBQztBQUVqSSxZQUFZO0FBRVosa0RBQWtEO0FBRWxEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLDJCQUEyQjtJQUt0QyxZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBSnRDLFNBQUksR0FBRyxNQUFlLENBQUM7UUFDdkIsVUFBSyxHQUFHLE1BQU0sQ0FBQztRQUNmLFNBQUksR0FBRyx5QkFBeUIsQ0FBQztJQUVRLENBQUM7SUFFMUMsT0FBTztRQUNMLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQTBCLEVBQUUsSUFBeUI7UUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUNoRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFXLENBQUM7UUFFL0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQzVELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUM7UUFFbEYsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsS0FBSyxjQUFjO2dCQUNqQixNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU07WUFDUixLQUFLLFlBQVk7Z0JBQ2YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTTtZQUNSLEtBQUssT0FBTztnQkFDVixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxZQUFZO0FBRVosaUNBQWlDO0FBRWpDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQWU7SUFDekQ7UUFDRSxPQUFPLEVBQUUsb0NBQW9DO1FBQzdDLFVBQVUsRUFBRSxDQUFDLFFBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksMkJBQTJCLENBQUMsUUFBUSxDQUFDO1FBQzdFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUNoQixLQUFLLEVBQUUsSUFBSTtLQUNaO0NBQ0YsQ0FBQztBQUVGLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gLS0tLSAgIEltcG9ydHMgICAtLS0tXG5cbmltcG9ydCB7XG4gIEFYTU5vdGlmaWNhdGlvbkl0ZW0sXG4gIEFYUF9OT1RJRklDQVRJT05fREVGSU5JVElPTl9QUk9WSURFUixcbiAgQVhQTm90aWZpY2F0aW9uRGVmaW5pdGlvblByb3ZpZGVyLFxufSBmcm9tICdAYWNvcmV4L21vZHVsZXMvbm90aWZpY2F0aW9uLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQRXhlY3V0ZUNvbW1hbmQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgSW5qZWN0b3IsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFYTUNoYXRNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4vY2hhdC1tYW5hZ2VtZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNQ2hhdE5vdGlmaWNhdGlvbkNvbnRlbnRDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2hhdC1ub3RpZmljYXRpb24tY29udGVudC9jaGF0LW5vdGlmaWNhdGlvbi1jb250ZW50LmNvbXBvbmVudCc7XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIENoYXQgTm90aWZpY2F0aW9uIFByb3ZpZGVyICAgLS0tLVxuXG4vKipcbiAqIFByb3ZpZGVzIG5vdGlmaWNhdGlvbiBoYW5kbGluZyBhbmQgY29udGVudCBmb3IgQ2hhdC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFYTUNoYXROb3RpZmljYXRpb25Qcm92aWRlciBpbXBsZW1lbnRzIEFYUE5vdGlmaWNhdGlvbkRlZmluaXRpb25Qcm92aWRlciB7XG4gIG5hbWUgPSAnQ2hhdCcgYXMgY29uc3Q7XG4gIHRpdGxlID0gJ0NoYXQnO1xuICBpY29uID0gJ2ZhLXNvbGlkIGZhLWNvbW1lbnQtc21zJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICBjb250ZW50KCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQVhNQ2hhdE5vdGlmaWNhdGlvbkNvbnRlbnRDb21wb25lbnQpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZShjb21tYW5kOiBBWFBFeGVjdXRlQ29tbWFuZCwgaXRlbTogQVhNTm90aWZpY2F0aW9uSXRlbSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgY29uc3QgY2hhdFNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChBWE1DaGF0TWFuYWdlbWVudFNlcnZpY2UpO1xuICAgIGNvbnN0IGFjdGl2YXRlZFJvdXRlID0gdGhpcy5pbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpO1xuICAgIGNvbnN0IHJvb21JZCA9IGl0ZW0uZGF0YT8uWydyb29tSWQnXSBhcyBzdHJpbmc7XG5cbiAgICBpZiAoIXJvb21JZCkge1xuICAgICAgY29uc29sZS5lcnJvcignUm9vbSBJRCBpcyBtaXNzaW5nIGZyb20gbm90aWZpY2F0aW9uIGl0ZW0uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXBwID0gYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZmlyc3RDaGlsZD8ucGFyYW1NYXAuZ2V0KCdhcHAnKSB8fCAncGxhdGZvcm0nO1xuXG4gICAgc3dpdGNoIChjb21tYW5kLm5hbWUpIHtcbiAgICAgIGNhc2UgJ21hcmstYXMtc2Vlbic6XG4gICAgICAgIGF3YWl0IGNoYXRTZXJ2aWNlLm1hcmtSb29tU2Vlbihyb29tSWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dvLXRvLWNoYXQnOlxuICAgICAgICByb3V0ZXIubmF2aWdhdGUoW2FwcCwgJ2NoYXQnLCByb29tSWRdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjbGljayc6XG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbYXBwLCAnY2hhdCcsIHJvb21JZF0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBQcm92aWRlcnMgICAtLS0tXG5cbi8qKlxuICogUHJvdmlkZXJzIGZvciBjaGF0IG5vdGlmaWNhdGlvbiBkZWZpbml0aW9uIHJlZ2lzdHJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFYTV9DSEFUX05PVElGSUNBVElPTl9QUk9WSURFUlM6IFByb3ZpZGVyW10gPSBbXG4gIHtcbiAgICBwcm92aWRlOiBBWFBfTk9USUZJQ0FUSU9OX0RFRklOSVRJT05fUFJPVklERVIsXG4gICAgdXNlRmFjdG9yeTogKGluamVjdG9yOiBJbmplY3RvcikgPT4gbmV3IEFYTUNoYXROb3RpZmljYXRpb25Qcm92aWRlcihpbmplY3RvciksXG4gICAgZGVwczogW0luamVjdG9yXSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfSxcbl07XG5cbi8vI2VuZHJlZ2lvblxuIl19","//#region ---- Imports ----\nimport { AXP_NOTIFICATION_DEFINITION_PROVIDER, } from '@acorex/modules/notification-management';\nimport { Injector } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n//#endregion\n//#region ---- Comment Notification Provider ----\n/**\n * Provides notification handling for Comment feature.\n */\nexport class AXMCommentNotificationProvider {\n constructor(injector) {\n this.injector = injector;\n this.name = 'Comment';\n this.title = 'Comment';\n this.icon = 'fa-solid fa-comment';\n }\n async execute(command, item) {\n const router = this.injector.get(Router);\n const activatedRoute = this.injector.get(ActivatedRoute);\n const app = activatedRoute.snapshot.firstChild?.paramMap.get('app') || 'platform';\n switch (command.name) {\n case 'click':\n if (item.data?.['moduleName'] && item.data?.['entityName'] && item.data?.['entityId']) {\n router.navigate([\n app,\n 'm',\n item.data?.['moduleName'],\n 'e',\n item.data?.['entityName'],\n item.data?.['entityId'],\n ]);\n }\n break;\n default:\n break;\n }\n }\n}\n//#endregion\n//#region ---- Providers ----\n/**\n * Providers for comment notification definition registration.\n */\nexport const AXM_COMMENT_NOTIFICATION_PROVIDERS = [\n {\n provide: AXP_NOTIFICATION_DEFINITION_PROVIDER,\n useFactory: (injector) => new AXMCommentNotificationProvider(injector),\n deps: [Injector],\n multi: true,\n },\n];\n//#endregion\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1ub3RpZmljYXRpb24ucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvY29udmVyc2F0aW9uL3NyYy9saWIvZmVhdHVyZXMvY29tbWVudC9jb21tZW50LW5vdGlmaWNhdGlvbi5wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFFL0IsT0FBTyxFQUVMLG9DQUFvQyxHQUVyQyxNQUFNLHlDQUF5QyxDQUFDO0FBRWpELE9BQU8sRUFBRSxRQUFRLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxZQUFZO0FBRVoscURBQXFEO0FBRXJEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLDhCQUE4QjtJQUt6QyxZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBSnRDLFNBQUksR0FBRyxTQUFrQixDQUFDO1FBQzFCLFVBQUssR0FBRyxTQUFTLENBQUM7UUFDbEIsU0FBSSxHQUFHLHFCQUFxQixDQUFDO0lBRVksQ0FBQztJQUUxQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQTBCLEVBQUUsSUFBeUI7UUFDakUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFekQsTUFBTSxHQUFHLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUM7UUFFbEYsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsS0FBSyxPQUFPO2dCQUNWLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztvQkFDdEYsTUFBTSxDQUFDLFFBQVEsQ0FBQzt3QkFDZCxHQUFHO3dCQUNILEdBQUc7d0JBQ0gsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQzt3QkFDekIsR0FBRzt3QkFDSCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDO3dCQUN6QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO3FCQUN4QixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxZQUFZO0FBRVosaUNBQWlDO0FBRWpDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQWU7SUFDNUQ7UUFDRSxPQUFPLEVBQUUsb0NBQW9DO1FBQzdDLFVBQVUsRUFBRSxDQUFDLFFBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksOEJBQThCLENBQUMsUUFBUSxDQUFDO1FBQ2hGLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQztRQUNoQixLQUFLLEVBQUUsSUFBSTtLQUNaO0NBQ0YsQ0FBQztBQUVGLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvLyNyZWdpb24gLS0tLSAgIEltcG9ydHMgICAtLS0tXG5cbmltcG9ydCB7XG4gIEFYTU5vdGlmaWNhdGlvbkl0ZW0sXG4gIEFYUF9OT1RJRklDQVRJT05fREVGSU5JVElPTl9QUk9WSURFUixcbiAgQVhQTm90aWZpY2F0aW9uRGVmaW5pdGlvblByb3ZpZGVyLFxufSBmcm9tICdAYWNvcmV4L21vZHVsZXMvbm90aWZpY2F0aW9uLW1hbmFnZW1lbnQnO1xuaW1wb3J0IHsgQVhQRXhlY3V0ZUNvbW1hbmQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgSW5qZWN0b3IsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgQ29tbWVudCBOb3RpZmljYXRpb24gUHJvdmlkZXIgICAtLS0tXG5cbi8qKlxuICogUHJvdmlkZXMgbm90aWZpY2F0aW9uIGhhbmRsaW5nIGZvciBDb21tZW50IGZlYXR1cmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBBWE1Db21tZW50Tm90aWZpY2F0aW9uUHJvdmlkZXIgaW1wbGVtZW50cyBBWFBOb3RpZmljYXRpb25EZWZpbml0aW9uUHJvdmlkZXIge1xuICBuYW1lID0gJ0NvbW1lbnQnIGFzIGNvbnN0O1xuICB0aXRsZSA9ICdDb21tZW50JztcbiAgaWNvbiA9ICdmYS1zb2xpZCBmYS1jb21tZW50JztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICBhc3luYyBleGVjdXRlKGNvbW1hbmQ6IEFYUEV4ZWN1dGVDb21tYW5kLCBpdGVtOiBBWE1Ob3RpZmljYXRpb25JdGVtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgcm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICBjb25zdCBhY3RpdmF0ZWRSb3V0ZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcblxuICAgIGNvbnN0IGFwcCA9IGFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LmZpcnN0Q2hpbGQ/LnBhcmFtTWFwLmdldCgnYXBwJykgfHwgJ3BsYXRmb3JtJztcblxuICAgIHN3aXRjaCAoY29tbWFuZC5uYW1lKSB7XG4gICAgICBjYXNlICdjbGljayc6XG4gICAgICAgIGlmIChpdGVtLmRhdGE/LlsnbW9kdWxlTmFtZSddICYmIGl0ZW0uZGF0YT8uWydlbnRpdHlOYW1lJ10gJiYgaXRlbS5kYXRhPy5bJ2VudGl0eUlkJ10pIHtcbiAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoW1xuICAgICAgICAgICAgYXBwLFxuICAgICAgICAgICAgJ20nLFxuICAgICAgICAgICAgaXRlbS5kYXRhPy5bJ21vZHVsZU5hbWUnXSxcbiAgICAgICAgICAgICdlJyxcbiAgICAgICAgICAgIGl0ZW0uZGF0YT8uWydlbnRpdHlOYW1lJ10sXG4gICAgICAgICAgICBpdGVtLmRhdGE/LlsnZW50aXR5SWQnXSxcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBQcm92aWRlcnMgICAtLS0tXG5cbi8qKlxuICogUHJvdmlkZXJzIGZvciBjb21tZW50IG5vdGlmaWNhdGlvbiBkZWZpbml0aW9uIHJlZ2lzdHJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IEFYTV9DT01NRU5UX05PVElGSUNBVElPTl9QUk9WSURFUlM6IFByb3ZpZGVyW10gPSBbXG4gIHtcbiAgICBwcm92aWRlOiBBWFBfTk9USUZJQ0FUSU9OX0RFRklOSVRJT05fUFJPVklERVIsXG4gICAgdXNlRmFjdG9yeTogKGluamVjdG9yOiBJbmplY3RvcikgPT4gbmV3IEFYTUNvbW1lbnROb3RpZmljYXRpb25Qcm92aWRlcihpbmplY3RvciksXG4gICAgZGVwczogW0luamVjdG9yXSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfSxcbl07XG5cbi8vI2VuZHJlZ2lvblxuIl19","import { AXPEntityCommandScope } from '@acorex/platform/common';\nimport { ensureListActions, actionExists } from '@acorex/platform/layout/entity';\nexport const commentsPlugin = {\n name: 'comments',\n order: 50,\n apply: (ctx) => {\n // Ensure group exists\n const groups = ctx.groups.list() ?? [];\n if (!groups.some((g) => g.id === 'comments')) {\n ctx.groups.add({ id: 'comments', title: 'Comments' });\n }\n // Ensure property exists\n const props = ctx.properties.list();\n if (!props.some((p) => p.name === 'comments')) {\n ctx.properties.add({\n name: 'comments',\n title: 'Comments',\n groupId: 'comments',\n schema: {\n dataType: 'object',\n interface: {\n type: 'comment',\n options: {\n refrenceType: `${ctx.entity.module}.${ctx.entity.name}`,\n refrenceId: '{{ context.eval(\"id\") }}',\n subject: '{{ context.eval(\"title\") }}',\n },\n },\n },\n });\n }\n // Ensure single view section and property layout exists\n ctx.interfaces.master.single.update((single) => {\n const next = single ?? { title: ctx.entity.title, sections: [], properties: [] };\n next.sections = next.sections ?? [];\n if (!next.sections.some((s) => s.id === 'comments')) {\n next.sections.push({ id: 'comments' });\n }\n next.properties = next.properties ?? [];\n if (!next.properties.some((p) => p.name === 'comments')) {\n next.properties.push({\n name: 'comments',\n layout: {\n label: { visible: false },\n positions: { lg: { colSpan: 12, order: 7 } },\n },\n });\n }\n //\n return next;\n });\n // Ensure list action to open comments popup exists\n ensureListActions(ctx);\n ctx.interfaces.update((i) => {\n const actions = i.master.list.actions;\n const cmdName = 'show-comment-popup';\n if (!actionExists(actions, cmdName)) {\n actions.push({\n title: '@conversation:actions.show-comment-popup',\n command: {\n name: cmdName,\n options: {\n refId: '{{ context.eval(\"id\") }}',\n refType: `${ctx.entity.module}.${ctx.entity.name}`,\n subject: '{{ context.eval(\"title\") }}',\n },\n },\n priority: 'secondary',\n type: 'comments',\n separated: true,\n scope: AXPEntityCommandScope.Individual,\n });\n }\n return i;\n });\n },\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudHMucGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvbGliL2ZlYXR1cmVzL2NvbW1lbnQvY29tbWVudHMucGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIscUJBQXFCLEVBQW1DLE1BQU0seUJBQXlCLENBQUM7QUFDbEgsT0FBTyxFQUF5QixpQkFBaUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQTBCO0lBQ2pELElBQUksRUFBRSxVQUFVO0lBQ2hCLEtBQUssRUFBRSxFQUFFO0lBQ1QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDWCxzQkFBc0I7UUFDdEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNoRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBUyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDakQsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7Z0JBQ2YsSUFBSSxFQUFF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QUUscUJBQXFCLENBQUMsVUFBVTtpQkFDMUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztZQUNELE9BQU8sQ0FBUSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBFbnRpdHlBY3Rpb24sIEFYUEVudGl0eUNvbW1hbmRTY29wZSwgQVhQRW50aXR5TWFzdGVyU2luZ2xlTGF5b3V0VmlldyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUEVudGl0eUFjdGlvblBsdWdpbiwgZW5zdXJlTGlzdEFjdGlvbnMsIGFjdGlvbkV4aXN0cyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5cbmV4cG9ydCBjb25zdCBjb21tZW50c1BsdWdpbjogQVhQRW50aXR5QWN0aW9uUGx1Z2luID0ge1xuICAgIG5hbWU6ICdjb21tZW50cycsXG4gICAgb3JkZXI6IDUwLFxuICAgIGFwcGx5OiAoY3R4KSA9PiB7XG4gICAgICAgIC8vIEVuc3VyZSBncm91cCBleGlzdHNcbiAgICAgICAgY29uc3QgZ3JvdXBzID0gY3R4Lmdyb3Vwcy5saXN0KCkgPz8gW107XG4gICAgICAgIGlmICghZ3JvdXBzLnNvbWUoKGc6IGFueSkgPT4gZy5pZCA9PT0gJ2NvbW1lbnRzJykpIHtcbiAgICAgICAgICAgIGN0eC5ncm91cHMuYWRkKHsgaWQ6ICdjb21tZW50cycsIHRpdGxlOiAnQ29tbWVudHMnIH0gYXMgYW55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVuc3VyZSBwcm9wZXJ0eSBleGlzdHNcbiAgICAgICAgY29uc3QgcHJvcHMgPSBjdHgucHJvcGVydGllcy5saXN0KCk7XG4gICAgICAgIGlmICghcHJvcHMuc29tZSgocDogYW55KSA9PiBwLm5hbWUgPT09ICdjb21tZW50cycpKSB7XG4gICAgICAgICAgICBjdHgucHJvcGVydGllcy5hZGQoe1xuICAgICAgICAgICAgICAgIG5hbWU6ICdjb21tZW50cycsXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdDb21tZW50cycsXG4gICAgICAgICAgICAgICAgZ3JvdXBJZDogJ2NvbW1lbnRzJyxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb21tZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZW5jZVR5cGU6IGAke2N0eC5lbnRpdHkubW9kdWxlfS4ke2N0eC5lbnRpdHkubmFtZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlbmNlSWQ6ICd7eyBjb250ZXh0LmV2YWwoXCJpZFwiKSB9fScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdDogJ3t7IGNvbnRleHQuZXZhbChcInRpdGxlXCIpIH19JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0gYXMgYW55KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVuc3VyZSBzaW5nbGUgdmlldyBzZWN0aW9uIGFuZCBwcm9wZXJ0eSBsYXlvdXQgZXhpc3RzXG4gICAgICAgIGN0eC5pbnRlcmZhY2VzLm1hc3Rlci5zaW5nbGUudXBkYXRlKChzaW5nbGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQ6IGFueSA9IHNpbmdsZSA/PyB7IHRpdGxlOiBjdHguZW50aXR5LnRpdGxlLCBzZWN0aW9uczogW10sIHByb3BlcnRpZXM6IFtdIH0gYXMgQVhQRW50aXR5TWFzdGVyU2luZ2xlTGF5b3V0VmlldztcbiAgICAgICAgICAgIG5leHQuc2VjdGlvbnMgPSBuZXh0LnNlY3Rpb25zID8/IFtdO1xuICAgICAgICAgICAgaWYgKCFuZXh0LnNlY3Rpb25zLnNvbWUoKHM6IGFueSkgPT4gcy5pZCA9PT0gJ2NvbW1lbnRzJykpIHtcbiAgICAgICAgICAgICAgICBuZXh0LnNlY3Rpb25zLnB1c2goeyBpZDogJ2NvbW1lbnRzJyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQucHJvcGVydGllcyA9IG5leHQucHJvcGVydGllcyA/PyBbXTtcbiAgICAgICAgICAgIGlmICghbmV4dC5wcm9wZXJ0aWVzLnNvbWUoKHA6IGFueSkgPT4gcC5uYW1lID09PSAnY29tbWVudHMnKSkge1xuICAgICAgICAgICAgICAgIG5leHQucHJvcGVydGllcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NvbW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogeyB2aXNpYmxlOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zOiB7IGxnOiB7IGNvbFNwYW46IDEyLCBvcmRlcjogNyB9IH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEVuc3VyZSBsaXN0IGFjdGlvbiB0byBvcGVuIGNvbW1lbnRzIHBvcHVwIGV4aXN0c1xuICAgICAgICBlbnN1cmVMaXN0QWN0aW9ucyhjdHgpO1xuICAgICAgICBjdHguaW50ZXJmYWNlcy51cGRhdGUoKGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSAoaSBhcyBhbnkpLm1hc3Rlci5saXN0LmFjdGlvbnMgYXMgQVhQRW50aXR5QWN0aW9uW107XG4gICAgICAgICAgICBjb25zdCBjbWROYW1lID0gJ3Nob3ctY29tbWVudC1wb3B1cCc7XG4gICAgICAgICAgICBpZiAoIWFjdGlvbkV4aXN0cyhhY3Rpb25zLCBjbWROYW1lKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnQGNvbnZlcnNhdGlvbjphY3Rpb25zLnNob3ctY29tbWVudC1wb3B1cCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGNtZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmSWQ6ICd7eyBjb250ZXh0LmV2YWwoXCJpZFwiKSB9fScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmVHlwZTogYCR7Y3R4LmVudGl0eS5tb2R1bGV9LiR7Y3R4LmVudGl0eS5uYW1lfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdDogJ3t7IGNvbnRleHQuZXZhbChcInRpdGxlXCIpIH19JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OiAnc2Vjb25kYXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzY29wZTogQVhQRW50aXR5Q29tbWFuZFNjb3BlLkluZGl2aWR1YWwsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaSBhcyBhbnk7XG4gICAgICAgIH0pO1xuICAgIH0sXG59O1xuXG5cbiJdfQ==","import { AXConversationModule } from '@acorex/components/conversation';\nimport { AXPAuthGuard, AXP_PERMISSION_DEFINITION_PROVIDER } from '@acorex/platform/auth';\nimport { AXP_ENTITY_ACTION_PLUGIN, AXP_ENTITY_DEFINITION_LOADER } from '@acorex/platform/layout/entity';\nimport { AXPRootLayoutComponent } from '@acorex/platform/themes/default';\nimport { DatePipe } from '@angular/common';\nimport { importProvidersFrom, NgModule } from '@angular/core';\nimport { RouterModule, ROUTES } from '@angular/router';\n// Entity Modules\nimport { AXMConversationTabEntityModule, AXMRoomEntityModule, AXMMessageEntityModule, } from './entities';\nimport { AXMConversationModuleEntityProvider } from './entity.provider';\nimport { AXMMenuProvider } from './menu.provider';\nimport { AXP_MENU_PROVIDER } from '@acorex/platform/common';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXP_TASK_BADGE_PROVIDERS } from '@acorex/platform/layout/components';\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport { AXMChatBadgeProviderSimple } from './badge.provider';\nimport { AXMChatService, AXMChatServiceImpl, AXMCommentPopupStartAction, AXMCommentPopupWorkflow, AXMCommentRealtimeService, AXMCommentRealtimeServiceImpl, AXMCommentService, AXMCommentServiceImpl, AXPCommentWidget, } from './features';\nimport { AXM_CHAT_NOTIFICATION_PROVIDERS } from './features/chat/chat-notification.provider';\nimport { AXMChatRealtimeService, AXMChatRealtimeServiceImpl } from './features/chat/chat-realtime.service';\nimport { AXM_COMMENT_NOTIFICATION_PROVIDERS } from './features/comment/comment-notification.provider';\nimport { commentsPlugin } from './features/comment/comments.plugin';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/platform/layout/widget-core\";\nimport * as i2 from \"@acorex/platform/workflow\";\nfunction routesFactory() {\n const routes = [\n {\n path: ':app/chat',\n canActivate: [AXPAuthGuard],\n loadComponent: () => {\n return AXPRootLayoutComponent;\n },\n title: 'Chat',\n children: [\n {\n path: '',\n loadComponent: () => import('./features/chat/chat.component').then((c) => c.AXMChatComponent),\n data: { reuse: true },\n children: [\n {\n path: ':id',\n loadComponent: () => import('./features/chat/components/chat-preview/chat-preview.component').then((c) => c.AXMChatPreviewComponent),\n },\n ],\n },\n ],\n },\n {\n path: ':app/comments/t/:refrenceType/i/:refrenceId/s/:subject',\n title: 'Comments',\n canActivate: [AXPAuthGuard],\n loadComponent: () => AXPRootLayoutComponent,\n // resolve: {\n // refrenceType: {\n // resolve: refrenceTypeResolver,\n // },\n // refrenceId: {\n // resolve: refrenceIdResolver,\n // },\n // subject: {\n // resolve: subjectResolver,\n // },\n // },\n children: [\n {\n path: '',\n loadComponent: () => import('./features/comment/comment.component').then((c) => c.AXMCommentComponent),\n },\n ],\n },\n {\n path: ':app/comments/',\n title: 'Comments',\n canActivate: [AXPAuthGuard],\n loadComponent: () => AXPRootLayoutComponent,\n children: [\n {\n path: '',\n loadComponent: () => import('./features/comment/comment.component').then((c) => c.AXMCommentComponent),\n },\n ],\n },\n ];\n return routes;\n}\nexport class AXMConversationModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModule, imports: [i1.AXPWidgetCoreModule, i2.AXPWorkflowModule, \n // Entity Modules\n AXMConversationTabEntityModule,\n AXMRoomEntityModule,\n AXMMessageEntityModule], exports: [\n // Modules\n RouterModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModule, providers: [\n // Chat and Comment Services\n {\n provide: AXMChatService,\n useClass: AXMChatServiceImpl,\n },\n {\n provide: AXMChatRealtimeService,\n useClass: AXMChatRealtimeServiceImpl,\n },\n {\n provide: AXMCommentService,\n useClass: AXMCommentServiceImpl,\n },\n {\n provide: AXMCommentRealtimeService,\n useClass: AXMCommentRealtimeServiceImpl,\n },\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: commentsPlugin,\n multi: true,\n },\n // Entity Provider\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMConversationModuleEntityProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_TASK_BADGE_PROVIDERS,\n useClass: AXMChatBadgeProviderSimple,\n multi: true,\n },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useFactory: async () => {\n const provider = (await import('./permission-definition.provider')).AXMPermissionDefinitionProvider;\n return new provider();\n },\n multi: true,\n },\n // Menu Provider\n // {\n // provide: AXP_MENU_PROVIDER,\n // useClass: AXMConversationMenuProvider,\n // multi: true,\n // },\n // Conversation Module\n importProvidersFrom(AXConversationModule.forRoot()),\n DatePipe,\n ...AXM_CHAT_NOTIFICATION_PROVIDERS,\n ...AXM_COMMENT_NOTIFICATION_PROVIDERS,\n ], imports: [AXPWidgetCoreModule.forChild({\n widgets: [AXPCommentWidget],\n }),\n AXPWorkflowModule.forChild({\n actions: {\n 'show-comment-popup-action': AXMCommentPopupStartAction,\n },\n workflows: {\n 'show-comment-popup': AXMCommentPopupWorkflow,\n },\n }),\n // Entity Modules\n AXMConversationTabEntityModule,\n AXMRoomEntityModule,\n AXMMessageEntityModule, \n // Modules\n RouterModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMConversationModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [],\n imports: [\n AXPWidgetCoreModule.forChild({\n widgets: [AXPCommentWidget],\n }),\n AXPWorkflowModule.forChild({\n actions: {\n 'show-comment-popup-action': AXMCommentPopupStartAction,\n },\n workflows: {\n 'show-comment-popup': AXMCommentPopupWorkflow,\n },\n }),\n // Entity Modules\n AXMConversationTabEntityModule,\n AXMRoomEntityModule,\n AXMMessageEntityModule,\n ],\n exports: [\n // Modules\n RouterModule,\n ],\n providers: [\n // Chat and Comment Services\n {\n provide: AXMChatService,\n useClass: AXMChatServiceImpl,\n },\n {\n provide: AXMChatRealtimeService,\n useClass: AXMChatRealtimeServiceImpl,\n },\n {\n provide: AXMCommentService,\n useClass: AXMCommentServiceImpl,\n },\n {\n provide: AXMCommentRealtimeService,\n useClass: AXMCommentRealtimeServiceImpl,\n },\n {\n provide: AXP_ENTITY_ACTION_PLUGIN,\n useValue: commentsPlugin,\n multi: true,\n },\n // Entity Provider\n {\n provide: AXP_ENTITY_DEFINITION_LOADER,\n useClass: AXMConversationModuleEntityProvider,\n multi: true,\n },\n {\n provide: AXP_MENU_PROVIDER,\n useClass: AXMMenuProvider,\n multi: true,\n },\n {\n provide: AXP_TASK_BADGE_PROVIDERS,\n useClass: AXMChatBadgeProviderSimple,\n multi: true,\n },\n {\n provide: ROUTES,\n multi: true,\n useFactory: routesFactory,\n },\n {\n provide: AXP_PERMISSION_DEFINITION_PROVIDER,\n useFactory: async () => {\n const provider = (await import('./permission-definition.provider')).AXMPermissionDefinitionProvider;\n return new provider();\n },\n multi: true,\n },\n // Menu Provider\n // {\n // provide: AXP_MENU_PROVIDER,\n // useClass: AXMConversationMenuProvider,\n // multi: true,\n // },\n // Conversation Module\n importProvidersFrom(AXConversationModule.forRoot()),\n DatePipe,\n ...AXM_CHAT_NOTIFICATION_PROVIDERS,\n ...AXM_COMMENT_NOTIFICATION_PROVIDERS,\n ],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9jb252ZXJzYXRpb24vc3JjL2xpYi9jb252ZXJzYXRpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9ELGlCQUFpQjtBQUNqQixPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLG1CQUFtQixFQUNuQixzQkFBc0IsR0FDdkIsTUFBTSxZQUFZLENBQUM7QUFFcEIsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWxELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSwwQkFBMEIsRUFB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QW1CLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ25ELFFBQVE7d0JBQ1IsR0FBRywrQkFBK0I7d0JBQ2xDLEdBQUcsa0NBQWtDO3FCQUN0QztpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQ29udmVyc2F0aW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbnZlcnNhdGlvbic7XG5pbXBvcnQgeyBBWFBBdXRoR3VhcmQsIEFYUF9QRVJNSVNTSU9OX0RFRklOSVRJT05fUFJPVklERVIgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2F1dGgnO1xuaW1wb3J0IHsgQVhQX0VOVElUWV9BQ1RJT05fUExVR0lOLCBBWFBfRU5USVRZX0RFRklOSVRJT05fTE9BREVSIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYUFJvb3RMYXlvdXRDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3RoZW1lcy9kZWZhdWx0JztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGltcG9ydFByb3ZpZGVyc0Zyb20sIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2R1bGUsIFJvdXRlcywgUk9VVEVTIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuLy8gRW50aXR5IE1vZHVsZXNcbmltcG9ydCB7XG4gIEFYTUNvbnZlcnNhdGlvblRhYkVudGl0eU1vZHVsZSxcbiAgQVhNUm9vbUVudGl0eU1vZHVsZSxcbiAgQVhNTWVzc2FnZUVudGl0eU1vZHVsZSxcbn0gZnJvbSAnLi9lbnRpdGllcyc7XG5cbmltcG9ydCB7IEFYTUNvbnZlcnNhdGlvbk1vZHVsZUVudGl0eVByb3ZpZGVyIH0gZnJvbSAnLi9lbnRpdHkucHJvdmlkZXInO1xuaW1wb3J0IHsgQVhNTWVudVByb3ZpZGVyIH0gZnJvbSAnLi9tZW51LnByb3ZpZGVyJztcblxuaW1wb3J0IHsgQVhQX01FTlVfUFJPVklERVIgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBXaWRnZXRDb3JlTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgQVhQX1RBU0tfQkFER0VfUFJPVklERVJTIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd01vZHVsZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vd29ya2Zsb3cnO1xuaW1wb3J0IHsgQVhNQ2hhdEJhZGdlUHJvdmlkZXJTaW1wbGUgfSBmcm9tICcuL2JhZGdlLnByb3ZpZGVyJztcbmltcG9ydCB7XG4gIEFYTUNoYXRTZXJ2aWNlLFxuICBBWE1DaGF0U2VydmljZUltcGwsXG4gIEFYTUNvbW1lbnRQb3B1cFN0YXJ0QWN0aW9uLFxuICBBWE1Db21tZW50UG9wdXBXb3JrZmxvdyxcbiAgQVhNQ29tbWVudFJlYWx0aW1lU2VydmljZSxcbiAgQVhNQ29tbWVudFJlYWx0aW1lU2VydmljZUltcGwsXG4gIEFYTUNvbW1lbnRTZXJ2aWNlLFxuICBBWE1Db21tZW50U2VydmljZUltcGwsXG4gIEFYUENvbW1lbnRXaWRnZXQsXG59IGZyb20gJy4vZmVhdHVyZXMnO1xuaW1wb3J0IHsgQVhNX0NIQVRfTk9USUZJQ0FUSU9OX1BST1ZJREVSUyB9IGZyb20gJy4vZmVhdHVyZXMvY2hhdC9jaGF0LW5vdGlmaWNhdGlvbi5wcm92aWRlcic7XG5pbXBvcnQgeyBBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlLCBBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlSW1wbCB9IGZyb20gJy4vZmVhdHVyZXMvY2hhdC9jaGF0LXJlYWx0aW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNX0NPTU1FTlRfTk9USUZJQ0FUSU9OX1BST1ZJREVSUyB9IGZyb20gJy4vZmVhdHVyZXMvY29tbWVudC9jb21tZW50LW5vdGlmaWNhdGlvbi5wcm92aWRlcic7XG5pbXBvcnQgeyBjb21tZW50c1BsdWdpbiB9IGZyb20gJy4vZmVhdHVyZXMvY29tbWVudC9jb21tZW50cy5wbHVnaW4nO1xuXG5mdW5jdGlvbiByb3V0ZXNGYWN0b3J5KCk6IFJvdXRlcyB7XG4gIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICAgIHtcbiAgICAgIHBhdGg6ICc6YXBwL2NoYXQnLFxuICAgICAgY2FuQWN0aXZhdGU6IFtBWFBBdXRoR3VhcmRdLFxuICAgICAgbG9hZENvbXBvbmVudDogKCkgPT4ge1xuICAgICAgICByZXR1cm4gQVhQUm9vdExheW91dENvbXBvbmVudDtcbiAgICAgIH0sXG4gICAgICB0aXRsZTogJ0NoYXQnLFxuICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAge1xuICAgICAgICAgIHBhdGg6ICcnLFxuICAgICAgICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9mZWF0dXJlcy9jaGF0L2NoYXQuY29tcG9uZW50JykudGhlbigoYykgPT4gYy5BWE1DaGF0Q29tcG9uZW50KSxcbiAgICAgICAgICBkYXRhOiB7IHJldXNlOiB0cnVlIH0sXG4gICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcGF0aDogJzppZCcsXG4gICAgICAgICAgICAgIGxvYWRDb21wb25lbnQ6ICgpID0+XG4gICAgICAgICAgICAgICAgaW1wb3J0KCcuL2ZlYXR1cmVzL2NoYXQvY29tcG9uZW50cy9jaGF0LXByZXZpZXcvY2hhdC1wcmV2aWV3LmNvbXBvbmVudCcpLnRoZW4oXG4gICAgICAgICAgICAgICAgICAoYykgPT4gYy5BWE1DaGF0UHJldmlld0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHBhdGg6ICc6YXBwL2NvbW1lbnRzL3QvOnJlZnJlbmNlVHlwZS9pLzpyZWZyZW5jZUlkL3MvOnN1YmplY3QnLFxuICAgICAgdGl0bGU6ICdDb21tZW50cycsXG4gICAgICBjYW5BY3RpdmF0ZTogW0FYUEF1dGhHdWFyZF0sXG4gICAgICBsb2FkQ29tcG9uZW50OiAoKSA9PiBBWFBSb290TGF5b3V0Q29tcG9uZW50LFxuICAgICAgLy8gcmVzb2x2ZToge1xuICAgICAgLy8gICByZWZyZW5jZVR5cGU6IHtcbiAgICAgIC8vICAgICByZXNvbHZlOiByZWZyZW5jZVR5cGVSZXNvbHZlcixcbiAgICAgIC8vICAgfSxcbiAgICAgIC8vICAgcmVmcmVuY2VJZDoge1xuICAgICAgLy8gICAgIHJlc29sdmU6IHJlZnJlbmNlSWRSZXNvbHZlcixcbiAgICAgIC8vICAgfSxcbiAgICAgIC8vICAgc3ViamVjdDoge1xuICAgICAgLy8gICAgIHJlc29sdmU6IHN1YmplY3RSZXNvbHZlcixcbiAgICAgIC8vICAgfSxcbiAgICAgIC8vIH0sXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgcGF0aDogJycsXG4gICAgICAgICAgbG9hZENvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2NvbW1lbnQvY29tbWVudC5jb21wb25lbnQnKS50aGVuKChjKSA9PiBjLkFYTUNvbW1lbnRDb21wb25lbnQpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHBhdGg6ICc6YXBwL2NvbW1lbnRzLycsXG4gICAgICB0aXRsZTogJ0NvbW1lbnRzJyxcbiAgICAgIGNhbkFjdGl2YXRlOiBbQVhQQXV0aEd1YXJkXSxcbiAgICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IEFYUFJvb3RMYXlvdXRDb21wb25lbnQsXG4gICAgICBjaGlsZHJlbjogW1xuICAgICAgICB7XG4gICAgICAgICAgcGF0aDogJycsXG4gICAgICAgICAgbG9hZENvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL2ZlYXR1cmVzL2NvbW1lbnQvY29tbWVudC5jb21wb25lbnQnKS50aGVuKChjKSA9PiBjLkFYTUNvbW1lbnRDb21wb25lbnQpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdO1xuICByZXR1cm4gcm91dGVzO1xufVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBpbXBvcnRzOiBbXG4gICAgQVhQV2lkZ2V0Q29yZU1vZHVsZS5mb3JDaGlsZCh7XG4gICAgICB3aWRnZXRzOiBbQVhQQ29tbWVudFdpZGdldF0sXG4gICAgfSksXG4gICAgQVhQV29ya2Zsb3dNb2R1bGUuZm9yQ2hpbGQoe1xuICAgICAgYWN0aW9uczoge1xuICAgICAgICAnc2hvdy1jb21tZW50LXBvcHVwLWFjdGlvbic6IEFYTUNvbW1lbnRQb3B1cFN0YXJ0QWN0aW9uLFxuICAgICAgfSxcbiAgICAgIHdvcmtmbG93czoge1xuICAgICAgICAnc2hvdy1jb21tZW50LXBvcHVwJzogQVhNQ29tbWVudFBvcHVwV29ya2Zsb3csXG4gICAgICB9LFxuICAgIH0pLFxuICAgIC8vIEVudGl0eSBNb2R1bGVzXG4gICAgQVhNQ29udmVyc2F0aW9uVGFiRW50aXR5TW9kdWxlLFxuICAgIEFYTVJvb21FbnRpdHlNb2R1bGUsXG4gICAgQVhNTWVzc2FnZUVudGl0eU1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIC8vIE1vZHVsZXNcbiAgICBSb3V0ZXJNb2R1bGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIC8vIENoYXQgYW5kIENvbW1lbnQgU2VydmljZXNcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWE1DaGF0U2VydmljZSxcbiAgICAgIHVzZUNsYXNzOiBBWE1DaGF0U2VydmljZUltcGwsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWE1DaGF0UmVhbHRpbWVTZXJ2aWNlLFxuICAgICAgdXNlQ2xhc3M6IEFYTUNoYXRSZWFsdGltZVNlcnZpY2VJbXBsLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhNQ29tbWVudFNlcnZpY2UsXG4gICAgICB1c2VDbGFzczogQVhNQ29tbWVudFNlcnZpY2VJbXBsLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhNQ29tbWVudFJlYWx0aW1lU2VydmljZSxcbiAgICAgIHVzZUNsYXNzOiBBWE1Db21tZW50UmVhbHRpbWVTZXJ2aWNlSW1wbCxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9FTlRJVFlfQUNUSU9OX1BMVUdJTixcbiAgICAgIHVzZVZhbHVlOiBjb21tZW50c1BsdWdpbixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAgLy8gRW50aXR5IFByb3ZpZGVyXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX0VOVElUWV9ERUZJTklUSU9OX0xPQURFUixcbiAgICAgIHVzZUNsYXNzOiBBWE1Db252ZXJzYXRpb25Nb2R1bGVFbnRpdHlQcm92aWRlcixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQX01FTlVfUFJPVklERVIsXG4gICAgICB1c2VDbGFzczogQVhNTWVudVByb3ZpZGVyLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFBfVEFTS19CQURHRV9QUk9WSURFUlMsXG4gICAgICB1c2VDbGFzczogQVhNQ2hhdEJhZGdlUHJvdmlkZXJTaW1wbGUsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJPVVRFUyxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRmFjdG9yeTogcm91dGVzRmFjdG9yeSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUF9QRVJNSVNTSU9OX0RFRklOSVRJT05fUFJPVklERVIsXG4gICAgICB1c2VGYWN0b3J5OiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gKGF3YWl0IGltcG9ydCgnLi9wZXJtaXNzaW9uLWRlZmluaXRpb24ucHJvdmlkZXInKSkuQVhNUGVybWlzc2lvbkRlZmluaXRpb25Qcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm92aWRlcigpO1xuICAgICAgfSxcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgIH0sXG4gICAgLy8gTWVudSBQcm92aWRlclxuICAgIC8vIHtcbiAgICAvLyAgIHByb3ZpZGU6IEFYUF9NRU5VX1BST1ZJREVSLFxuICAgIC8vICAgdXNlQ2xhc3M6IEFYTUNvbnZlcnNhdGlvbk1lbnVQcm92aWRlcixcbiAgICAvLyAgIG11bHRpOiB0cnVlLFxuICAgIC8vIH0sXG4gICAgLy8gQ29udmVyc2F0aW9uIE1vZHVsZVxuICAgIGltcG9ydFByb3ZpZGVyc0Zyb20oQVhDb252ZXJzYXRpb25Nb2R1bGUuZm9yUm9vdCgpKSxcbiAgICBEYXRlUGlwZSxcbiAgICAuLi5BWE1fQ0hBVF9OT1RJRklDQVRJT05fUFJPVklERVJTLFxuICAgIC4uLkFYTV9DT01NRU5UX05PVElGSUNBVElPTl9QUk9WSURFUlMsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTUNvbnZlcnNhdGlvbk1vZHVsZSB7IH1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LW1vZHVsZXMtY29udmVyc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2NvbnZlcnNhdGlvbi9zcmMvYWNvcmV4LW1vZHVsZXMtY29udmVyc2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1","i2","i3","i4","i8","i10","i5","i6","i7","i9"],"mappings":"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"}