@acorex/components 20.8.33 → 20.9.0

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 (116) hide show
  1. package/{conversation2 → conversation}/README.md +23 -23
  2. package/{conversation2 → conversation}/index.d.ts +991 -1792
  3. package/fesm2022/acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs +13711 -0
  4. package/fesm2022/acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs.map +1 -0
  5. package/fesm2022/acorex-components-conversation-audio-attachment.component-Ri-Jx210.mjs +119 -0
  6. package/fesm2022/acorex-components-conversation-audio-attachment.component-Ri-Jx210.mjs.map +1 -0
  7. package/fesm2022/acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs +59 -0
  8. package/fesm2022/acorex-components-conversation-audio-composer.payload-DiMDlVl9.mjs.map +1 -0
  9. package/fesm2022/acorex-components-conversation-audio-picker.component-CqrKBDIF.mjs +432 -0
  10. package/fesm2022/acorex-components-conversation-audio-picker.component-CqrKBDIF.mjs.map +1 -0
  11. package/fesm2022/acorex-components-conversation-audio-renderer.component-CO8owVrA.mjs +177 -0
  12. package/fesm2022/acorex-components-conversation-audio-renderer.component-CO8owVrA.mjs.map +1 -0
  13. package/fesm2022/acorex-components-conversation-audio.payload-CLnYjmYY.mjs +54 -0
  14. package/fesm2022/acorex-components-conversation-audio.payload-CLnYjmYY.mjs.map +1 -0
  15. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs +101 -0
  16. package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs.map +1 -0
  17. package/fesm2022/acorex-components-conversation-conversation-audio.file-type-D-hIBwQ2.mjs +100 -0
  18. package/fesm2022/acorex-components-conversation-conversation-audio.file-type-D-hIBwQ2.mjs.map +1 -0
  19. package/fesm2022/acorex-components-conversation-conversation-file.file-type-DQUy3C64.mjs +121 -0
  20. package/fesm2022/acorex-components-conversation-conversation-file.file-type-DQUy3C64.mjs.map +1 -0
  21. package/fesm2022/acorex-components-conversation-conversation-image.file-type-Bd_SkwR0.mjs +84 -0
  22. package/fesm2022/acorex-components-conversation-conversation-image.file-type-Bd_SkwR0.mjs.map +1 -0
  23. package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BalIIAFB.mjs +238 -0
  24. package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BalIIAFB.mjs.map +1 -0
  25. package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BJMo9bDd.mjs +1080 -0
  26. package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BJMo9bDd.mjs.map +1 -0
  27. package/fesm2022/acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs +102 -0
  28. package/fesm2022/acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs.map +1 -0
  29. package/fesm2022/acorex-components-conversation-conversation-voice.file-type-v3rFWDv6.mjs +90 -0
  30. package/fesm2022/acorex-components-conversation-conversation-voice.file-type-v3rFWDv6.mjs.map +1 -0
  31. package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs +1840 -0
  32. package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs.map +1 -0
  33. package/fesm2022/acorex-components-conversation-fallback-renderer.component-DOQkZWwP.mjs +44 -0
  34. package/fesm2022/acorex-components-conversation-fallback-renderer.component-DOQkZWwP.mjs.map +1 -0
  35. package/fesm2022/acorex-components-conversation-file-composer.payload-azPSH99m.mjs +64 -0
  36. package/fesm2022/acorex-components-conversation-file-composer.payload-azPSH99m.mjs.map +1 -0
  37. package/fesm2022/acorex-components-conversation-file-picker.component-cmUkgSF3.mjs +468 -0
  38. package/fesm2022/acorex-components-conversation-file-picker.component-cmUkgSF3.mjs.map +1 -0
  39. package/fesm2022/acorex-components-conversation-file-renderer.component-CpUgRTR4.mjs +125 -0
  40. package/fesm2022/acorex-components-conversation-file-renderer.component-CpUgRTR4.mjs.map +1 -0
  41. package/fesm2022/acorex-components-conversation-file.payload-DXwzNWxT.mjs +50 -0
  42. package/fesm2022/acorex-components-conversation-file.payload-DXwzNWxT.mjs.map +1 -0
  43. package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs +21 -0
  44. package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs.map +1 -0
  45. package/fesm2022/acorex-components-conversation-image-attachment.component-BZto5LFo.mjs +77 -0
  46. package/fesm2022/acorex-components-conversation-image-attachment.component-BZto5LFo.mjs.map +1 -0
  47. package/fesm2022/acorex-components-conversation-image-picker.component-G9EEOyDg.mjs +407 -0
  48. package/fesm2022/acorex-components-conversation-image-picker.component-G9EEOyDg.mjs.map +1 -0
  49. package/fesm2022/acorex-components-conversation-image-renderer.component-Bwa6rG6C.mjs +83 -0
  50. package/fesm2022/acorex-components-conversation-image-renderer.component-Bwa6rG6C.mjs.map +1 -0
  51. package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs +180 -0
  52. package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs.map +1 -0
  53. package/fesm2022/acorex-components-conversation-index-DtGEWeKN.mjs +266 -0
  54. package/fesm2022/acorex-components-conversation-index-DtGEWeKN.mjs.map +1 -0
  55. package/fesm2022/acorex-components-conversation-location-picker.component-Cx993j_c.mjs +149 -0
  56. package/fesm2022/acorex-components-conversation-location-picker.component-Cx993j_c.mjs.map +1 -0
  57. package/fesm2022/acorex-components-conversation-location-renderer.component-BiynmAJw.mjs +118 -0
  58. package/fesm2022/acorex-components-conversation-location-renderer.component-BiynmAJw.mjs.map +1 -0
  59. package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs +17 -0
  60. package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs.map +1 -0
  61. package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-a7OSpfB1.mjs +140 -0
  62. package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-a7OSpfB1.mjs.map +1 -0
  63. package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-D_eAnM6v.mjs +33 -0
  64. package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-D_eAnM6v.mjs.map +1 -0
  65. package/fesm2022/acorex-components-conversation-message-renderer-state.component-DSnNoz1N.mjs +172 -0
  66. package/fesm2022/acorex-components-conversation-message-renderer-state.component-DSnNoz1N.mjs.map +1 -0
  67. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-CbNyy2Ws.mjs +224 -0
  68. package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-CbNyy2Ws.mjs.map +1 -0
  69. package/fesm2022/acorex-components-conversation-pagination-demo-data-DRr9PXjJ.mjs +81 -0
  70. package/fesm2022/acorex-components-conversation-pagination-demo-data-DRr9PXjJ.mjs.map +1 -0
  71. package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs +91 -0
  72. package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs.map +1 -0
  73. package/fesm2022/acorex-components-conversation-picker-toolbar.component-CpyS0j6P.mjs +537 -0
  74. package/fesm2022/acorex-components-conversation-picker-toolbar.component-CpyS0j6P.mjs.map +1 -0
  75. package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs +163 -0
  76. package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs.map +1 -0
  77. package/fesm2022/acorex-components-conversation-playback-banner-sync-BMsx6Fuy.mjs +68 -0
  78. package/fesm2022/acorex-components-conversation-playback-banner-sync-BMsx6Fuy.mjs.map +1 -0
  79. package/fesm2022/acorex-components-conversation-renderer-shared.styles-Digah3Zn.mjs +95 -0
  80. package/fesm2022/acorex-components-conversation-renderer-shared.styles-Digah3Zn.mjs.map +1 -0
  81. package/fesm2022/acorex-components-conversation-search.component-96NI2ERG.mjs +187 -0
  82. package/fesm2022/acorex-components-conversation-search.component-96NI2ERG.mjs.map +1 -0
  83. package/fesm2022/acorex-components-conversation-send-message-media--Rbrne7k.mjs +170 -0
  84. package/fesm2022/acorex-components-conversation-send-message-media--Rbrne7k.mjs.map +1 -0
  85. package/fesm2022/acorex-components-conversation-shared-storage.seed-zFjNXfKF.mjs +750 -0
  86. package/fesm2022/acorex-components-conversation-shared-storage.seed-zFjNXfKF.mjs.map +1 -0
  87. package/fesm2022/acorex-components-conversation-sticker-renderer.component-BZgx_Ylk.mjs +103 -0
  88. package/fesm2022/acorex-components-conversation-sticker-renderer.component-BZgx_Ylk.mjs.map +1 -0
  89. package/fesm2022/acorex-components-conversation-system-renderer.component-D1Aj-LuF.mjs +55 -0
  90. package/fesm2022/acorex-components-conversation-system-renderer.component-D1Aj-LuF.mjs.map +1 -0
  91. package/fesm2022/acorex-components-conversation-text-renderer.component-Cxvwjr2p.mjs +109 -0
  92. package/fesm2022/acorex-components-conversation-text-renderer.component-Cxvwjr2p.mjs.map +1 -0
  93. package/fesm2022/acorex-components-conversation-video-attachment.component-DBY_4Ri2.mjs +105 -0
  94. package/fesm2022/acorex-components-conversation-video-attachment.component-DBY_4Ri2.mjs.map +1 -0
  95. package/fesm2022/acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs +62 -0
  96. package/fesm2022/acorex-components-conversation-video-composer.payload-CWGxsPg5.mjs.map +1 -0
  97. package/fesm2022/acorex-components-conversation-video-picker.component-D1JYwEm_.mjs +446 -0
  98. package/fesm2022/acorex-components-conversation-video-picker.component-D1JYwEm_.mjs.map +1 -0
  99. package/fesm2022/acorex-components-conversation-video-renderer.component-iwf2bU29.mjs +181 -0
  100. package/fesm2022/acorex-components-conversation-video-renderer.component-iwf2bU29.mjs.map +1 -0
  101. package/fesm2022/acorex-components-conversation-video.payload-DfBEjqQ4.mjs +54 -0
  102. package/fesm2022/acorex-components-conversation-video.payload-DfBEjqQ4.mjs.map +1 -0
  103. package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs +17 -0
  104. package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs.map +1 -0
  105. package/fesm2022/acorex-components-conversation-voice-recorder.component-P8J_5OH0.mjs +328 -0
  106. package/fesm2022/acorex-components-conversation-voice-recorder.component-P8J_5OH0.mjs.map +1 -0
  107. package/fesm2022/acorex-components-conversation-voice-renderer.component-CZpEqbXL.mjs +270 -0
  108. package/fesm2022/acorex-components-conversation-voice-renderer.component-CZpEqbXL.mjs.map +1 -0
  109. package/fesm2022/acorex-components-conversation.mjs +2 -0
  110. package/fesm2022/acorex-components-conversation.mjs.map +1 -0
  111. package/fesm2022/acorex-components-scheduler-picker.mjs +22 -14
  112. package/fesm2022/acorex-components-scheduler-picker.mjs.map +1 -1
  113. package/package.json +37 -37
  114. package/scheduler-picker/index.d.ts +2 -0
  115. package/fesm2022/acorex-components-conversation2.mjs +0 -22331
  116. package/fesm2022/acorex-components-conversation2.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-components-conversation-conversation-info-panel.component-BJMo9bDd.mjs","sources":["../tmp-esm2022/conversation/lib/plugins/info-bar/components/conversation-info-panel.utils.js","../tmp-esm2022/conversation/lib/plugins/info-bar/components/conversation-info-panel.component.js"],"sourcesContent":["import { resolvePrivatePeerUserId } from '../../../utils/avatar-context.utils';\nimport { resolveParticipantProfile } from '../../../utils/participant-profile.utils';\nimport { resolvePersistedThumbnailUrl } from '../../composer/components/shared/persisted-media-url';\nimport { normalizeAudioPayload } from '../../message-list/components/audio-renderer/audio.payload';\nimport { normalizeFilePayload } from '../../message-list/components/file-renderer/file.payload';\nimport { normalizeImagePayload, resolveImageDisplayUrl } from '../../message-list/components/image-renderer/image.payload';\nimport { normalizeVideoPayload } from '../../message-list/components/video-renderer/video.payload';\nconst AX_CONVERSATION_URL_PATTERN = /https?:\\/\\/[^\\s<>\"']+/i;\nexport function messageContainsLink(message) {\n return countLinksInMessage(message) > 0;\n}\nfunction countLinksInMessage(message) {\n if (message.type !== 'text') {\n return 0;\n }\n const payload = message.payload;\n if (payload.links?.length) {\n return payload.links.length;\n }\n const text = payload.text ?? '';\n const matches = text.match(new RegExp(AX_CONVERSATION_URL_PATTERN.source, 'gi'));\n return matches?.length ?? 0;\n}\nfunction countMediaItemsInMessage(message) {\n const linkCount = countLinksInMessage(message);\n if (linkCount > 0) {\n return { link: linkCount };\n }\n switch (message.type) {\n case 'image': {\n const count = normalizeImagePayload(message.payload).images.length;\n return count > 0 ? { image: count } : {};\n }\n case 'video': {\n const count = normalizeVideoPayload(message.payload).videos.length;\n return count > 0 ? { video: count } : {};\n }\n case 'audio': {\n const count = normalizeAudioPayload(message.payload).audios.length;\n return count > 0 ? { audio: count } : {};\n }\n case 'file': {\n const count = normalizeFilePayload(message.payload).files.length;\n return count > 0 ? { file: count } : {};\n }\n case 'voice':\n return { voice: 1 };\n case 'sticker':\n return { sticker: 1 };\n case 'location':\n return { location: 1 };\n default:\n return {};\n }\n}\nexport function getPrivatePeerParticipant(conversation, currentUserId) {\n const peerId = resolvePrivatePeerUserId(conversation, currentUserId);\n if (!peerId)\n return undefined;\n return conversation.participants.find((p) => p.id === peerId);\n}\nexport function getConversationProfileFields(conversation, currentUserId) {\n const fields = [];\n if (conversation.type === 'private') {\n const peer = getPrivatePeerParticipant(conversation, currentUserId);\n const profile = resolveParticipantProfile(peer);\n const addField = (id, labelKey, icon, value) => {\n if (value?.trim()) {\n fields.push({ id, labelKey, icon, value: value.trim() });\n }\n };\n addField('bio', '@acorex:chat.info-panel.profile.bio', 'fa-light fa-align-left', profile.bio);\n addField('phone', '@acorex:chat.info-panel.profile.phone', 'fa-light fa-phone', profile.phone);\n addField('email', '@acorex:chat.info-panel.profile.email', 'fa-light fa-envelope', profile.email);\n addField('username', '@acorex:chat.info-panel.profile.username', 'fa-light fa-at', profile.username);\n addField('location', '@acorex:chat.info-panel.profile.location', 'fa-light fa-location-dot', profile.location);\n addField('company', '@acorex:chat.info-panel.profile.company', 'fa-light fa-building', profile.company);\n addField('title', '@acorex:chat.info-panel.profile.title', 'fa-light fa-briefcase', profile.title);\n if (peer?.description?.trim()) {\n fields.unshift({\n id: 'description',\n labelKey: '@acorex:chat.info-panel.profile.about',\n icon: 'fa-light fa-user',\n value: peer.description.trim(),\n });\n }\n }\n else if (conversation.description?.trim()) {\n fields.push({\n id: 'description',\n labelKey: '@acorex:chat.info-panel.profile.about',\n icon: 'fa-light fa-align-left',\n value: conversation.description.trim(),\n });\n }\n const groupInfo = conversation.metadata?.['profile']?.groupInfo;\n if (groupInfo?.purpose?.trim()) {\n fields.push({\n id: 'purpose',\n labelKey: '@acorex:chat.info-panel.profile.purpose',\n icon: 'fa-light fa-bullseye',\n value: groupInfo.purpose.trim(),\n });\n }\n return fields;\n}\nexport function getConversationMediaCategories(messages) {\n const counts = {\n image: 0,\n video: 0,\n file: 0,\n audio: 0,\n voice: 0,\n sticker: 0,\n location: 0,\n link: 0,\n };\n for (const message of messages) {\n const itemCounts = countMediaItemsInMessage(message);\n for (const [categoryId, count] of Object.entries(itemCounts)) {\n counts[categoryId] += count;\n }\n }\n const definitions = [\n {\n id: 'image',\n labelKey: '@acorex:chat.info-panel.media.photos',\n countLabelKey: '@acorex:chat.info-panel.media.count-photos',\n icon: 'fa-light fa-image',\n },\n {\n id: 'video',\n labelKey: '@acorex:chat.info-panel.media.videos',\n countLabelKey: '@acorex:chat.info-panel.media.count-videos',\n icon: 'fa-light fa-video',\n },\n {\n id: 'file',\n labelKey: '@acorex:chat.info-panel.media.files',\n countLabelKey: '@acorex:chat.info-panel.media.count-files',\n icon: 'fa-light fa-file',\n },\n {\n id: 'audio',\n labelKey: '@acorex:chat.info-panel.media.audio',\n countLabelKey: '@acorex:chat.info-panel.media.count-audio',\n icon: 'fa-light fa-headphones',\n },\n {\n id: 'link',\n labelKey: '@acorex:chat.info-panel.media.links',\n countLabelKey: '@acorex:chat.info-panel.media.count-links',\n icon: 'fa-light fa-link',\n },\n {\n id: 'voice',\n labelKey: '@acorex:chat.info-panel.media.voice',\n countLabelKey: '@acorex:chat.info-panel.media.count-voice',\n icon: 'fa-light fa-microphone',\n },\n {\n id: 'sticker',\n labelKey: '@acorex:chat.info-panel.media.stickers',\n countLabelKey: '@acorex:chat.info-panel.media.count-stickers',\n icon: 'fa-light fa-note-sticky',\n },\n {\n id: 'location',\n labelKey: '@acorex:chat.info-panel.media.locations',\n countLabelKey: '@acorex:chat.info-panel.media.count-locations',\n icon: 'fa-light fa-location-dot',\n },\n ];\n return definitions\n .map((definition) => ({ ...definition, count: counts[definition.id] }))\n .filter((category) => category.count > 0);\n}\nexport function filterMessagesByMediaCategory(messages, categoryId) {\n return messages.filter((message) => {\n if (categoryId === 'link') {\n return messageContainsLink(message);\n }\n return message.type === categoryId;\n });\n}\nexport function isGridMediaCategory(categoryId) {\n return categoryId === 'image' || categoryId === 'sticker';\n}\nexport function isAttachmentListCategory(categoryId) {\n return categoryId === 'video' || categoryId === 'audio';\n}\nexport function buildMediaGalleryTiles(messages, categoryId) {\n const filtered = filterMessagesByMediaCategory(messages, categoryId);\n const tiles = [];\n for (const message of filtered) {\n if (categoryId === 'image') {\n const payload = normalizeImagePayload(message.payload);\n for (const image of payload.images) {\n tiles.push({\n key: `${message.id}:${image.mediaId ?? image.url ?? tiles.length}`,\n message,\n kind: 'image',\n image,\n });\n }\n continue;\n }\n if (categoryId === 'video') {\n const payload = normalizeVideoPayload(message.payload);\n for (const video of payload.videos) {\n tiles.push({\n key: `${message.id}:${video.mediaId ?? video.url ?? tiles.length}`,\n message,\n kind: 'video',\n video,\n });\n }\n continue;\n }\n if (categoryId === 'sticker') {\n const payload = message.payload;\n tiles.push({\n key: message.id,\n message,\n kind: 'sticker',\n stickerUrl: payload.url,\n stickerAlt: payload.emoji || 'Sticker',\n });\n }\n }\n return tiles;\n}\nexport function resolveVideoThumbnailUrl(video) {\n return resolvePersistedThumbnailUrl(video.thumbnailUrl, video.url) ?? video.url;\n}\nexport function resolveGalleryImageUrl(image) {\n return resolveImageDisplayUrl(image);\n}\nexport function getMessageVideoItems(message) {\n if (message.type !== 'video') {\n return [];\n }\n return normalizeVideoPayload(message.payload).videos;\n}\nexport function getMessageAudioItems(message) {\n if (message.type !== 'audio') {\n return [];\n }\n return normalizeAudioPayload(message.payload).audios;\n}\nexport async function fetchAllConversationMessages(messageApi, conversationId, pageSize) {\n const collected = [];\n let page = 0;\n let hasMore = true;\n let cursor;\n while (hasMore) {\n const result = await messageApi.getMessages(conversationId, {\n page,\n pageSize,\n cursor,\n });\n collected.push(...result.items);\n hasMore = result.hasMore;\n cursor = result.nextCursor;\n page += 1;\n if (!result.items.length) {\n break;\n }\n }\n return collected.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uLWluZm8tcGFuZWwudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2NvbnZlcnNhdGlvbi9zcmMvbGliL3BsdWdpbnMvaW5mby1iYXIvY29tcG9uZW50cy9jb252ZXJzYXRpb24taW5mby1wYW5lbC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFjQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNwRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNoRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUMzSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQTJCbkcsTUFBTSwyQkFBMkIsR0FBRyx3QkFBd0IsQ0FBQztBQUU3RCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsT0FBOEI7SUFDaEUsT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsT0FBOEI7SUFDekQsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFvQyxDQUFDO0lBQzdELElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUMxQixPQUFPLE9BQU8s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QyxPQUFxQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3JGLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLDRCQUE0QixDQUNoRCxVQUFvQyxFQUNwQyxjQUFzQixFQUN0QixRQUFnQjtJQUVoQixNQUFNLFNBQVMsR0FBNEIsRUFBRSxDQUFDO0lBQzlDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztJQUNuQixJQUFJLE1BQTBCLENBQUM7SUFFL0IsT0FBTyxPQUFPLEVBQUUsQ0FBQztRQUNmLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUU7WUFDMUQsSUFBSTtZQUNKLFFBQVE7WUFDUixNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN6QixNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxDQUFDO1FBRVYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekIsTUFBTTtRQUNSLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDakYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgQVhDb252ZXJzYXRpb25BdWRpb01lZGlhSXRlbSxcbiAgQVhDb252ZXJzYXRpb25BdWRpb1BheWxvYWQsXG4gIEFYQ29udmVyc2F0aW9uRmlsZVBheWxvYWQsXG4gIEFYQ29udmVyc2F0aW9uSW1hZ2VNZWRpYUl0ZW0sXG4gIEFYQ29udmVyc2F0aW9uSW1hZ2VQYXlsb2FkLFxuICBBWENvbnZlcnNhdGlvbk1lc3NhZ2UsXG4gIEFYQ29udmVyc2F0aW9uU3RpY2tlclBheWxvYWQsXG4gIEFYQ29udmVyc2F0aW9uVGV4dFBheWxvYWQsXG4gIEFYQ29udmVyc2F0aW9uVmlkZW9NZWRpYUl0ZW0sXG4gIEFYQ29udmVyc2F0aW9uVmlkZW9QYXlsb2FkLFxufSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHR5cGUgeyBBWENvbnZlcnNhdGlvbiwgQVhDb252ZXJzYXRpb25QYXJ0aWNpcGFudCB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uTWVzc2FnZUFwaSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwaSc7XG5pbXBvcnQgeyByZXNvbHZlUHJpdmF0ZVBlZXJVc2VySWQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hdmF0YXItY29udGV4dC51dGlscyc7XG5pbXBvcnQgeyByZXNvbHZlUGFydGljaXBhbnRQcm9maWxlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcGFydGljaXBhbnQtcHJvZmlsZS51dGlscyc7XG5pbXBvcnQgeyByZXNvbHZlUGVyc2lzdGVkVGh1bWJuYWlsVXJsIH0gZnJvbSAnLi4vLi4vY29tcG9zZXIvY29tcG9uZW50cy9zaGFyZWQvcGVyc2lzdGVkLW1lZGlhLXVybCc7XG5pbXBvcnQgeyBub3JtYWxpemVBdWRpb1BheWxvYWQgfSBmcm9tICcuLi8uLi9tZXNzYWdlLWxpc3QvY29tcG9uZW50cy9hdWRpby1yZW5kZXJlci9hdWRpby5wYXlsb2FkJztcbmltcG9ydCB7IG5vcm1hbGl6ZUZpbGVQYXlsb2FkIH0gZnJvbSAnLi4vLi4vbWVzc2FnZS1saXN0L2NvbXBvbmVudHMvZmlsZS1yZW5kZXJlci9maWxlLnBheWxvYWQnO1xuaW1wb3J0IHsgbm9ybWFsaXplSW1hZ2VQYXlsb2FkLCByZXNvbHZlSW1hZ2VEaXNwbGF5VXJsIH0gZnJvbSAnLi4vLi4vbWVzc2FnZS1saXN0L2NvbXBvbmVudHMvaW1hZ2UtcmVuZGVyZXIvaW1hZ2UucGF5bG9hZCc7XG5pbXBvcnQgeyBub3JtYWxpemVWaWRlb1BheWxvYWQgfSBmcm9tICcuLi8uLi9tZXNzYWdlLWxpc3QvY29tcG9uZW50cy92aWRlby1yZW5kZXJlci92aWRlby5wYXlsb2FkJztcblxuZXhwb3J0IGludGVyZmFjZSBBWENvbnZlcnNhdGlvbkluZm9Qcm9maWxlRmllbGQge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbEtleTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIEFYQ29udmVyc2F0aW9uTWVkaWFDYXRlZ29yeUlkID1cbiAgfCAnaW1hZ2UnXG4gIHwgJ3ZpZGVvJ1xuICB8ICdmaWxlJ1xuICB8ICdhdWRpbydcbiAgfCAndm9pY2UnXG4gIHwgJ3N0aWNrZXInXG4gIHwgJ2xvY2F0aW9uJ1xuICB8ICdsaW5rJztcblxuZXhwb3J0IGludGVyZmFjZSBBWENvbnZlcnNhdGlvbk1lZGlhQ2F0ZWdvcnkge1xuICBpZDogQVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5SWQ7XG4gIGxhYmVsS2V5OiBzdHJpbmc7XG4gIGNvdW50TGFiZWxLZXk6IHN0cmluZztcbiAgaWNvbjogc3RyaW5nO1xuICBjb3VudDogbnVtYmVyO1xufVxuXG5jb25zdCBBWF9DT05WRVJTQVRJT05fVVJMX1BBVFRFUk4gPSAvaHR0cHM/OlxcL1xcL1teXFxzPD5cIiddKy9pO1xuXG5leHBvcnQgZnVuY3Rpb24gbWVzc2FnZUNvbnRhaW5zTGluayhtZXNzYWdlOiBBWENvbnZlcnNhdGlvbk1lc3NhZ2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvdW50TGlua3NJbk1lc3NhZ2UobWVzc2FnZSkgPiAwO1xufVxuXG5mdW5jdGlvbiBjb3VudExpbmtzSW5NZXNzYWdlKG1lc3NhZ2U6IEFYQ29udmVyc2F0aW9uTWVzc2FnZSk6IG51bWJlciB7XG4gIGlmIChtZXNzYWdlLnR5cGUgIT09ICd0ZXh0Jykge1xuICAgIHJldHVybiAwO1xuICB9XG4gIGNvbnN0IHBheWxvYWQgPSBtZXNzYWdlLnBheWxvYWQgYXMgQVhDb252ZXJzYXRpb25UZXh0UGF5bG9hZDtcbiAgaWYgKHBheWxvYWQubGlua3M/Lmxlbmd0aCkge1xuICAgIHJldHVybiBwYXlsb2FkLmxpbmtzLmxlbmd0aDtcbiAgfVxuICBjb25zdCB0ZXh0ID0gcGF5bG9hZC50ZXh0ID8/ICcnO1xuICBjb25zdCBtYXRjaGVzID0gdGV4dC5tYXRjaChuZXcgUmVnRXhwKEFYX0NPTlZFUlNBVElPTl9VUkxfUEFUVEVSTi5zb3VyY2UsICdnaScpKTtcbiAgcmV0dXJuIG1hdGNoZXM/Lmxlbmd0aCA/PyAwO1xufVxuXG5mdW5jdGlvbiBjb3VudE1lZGlhSXRlbXNJbk1lc3NhZ2UobWVzc2FnZTogQVhDb252ZXJzYXRpb25NZXNzYWdlKTogUGFydGlhbDxSZWNvcmQ8QVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5SWQsIG51bWJlcj4+IHtcbiAgY29uc3QgbGlua0NvdW50ID0gY291bnRMaW5rc0luTWVzc2FnZShtZXNzYWdlKTtcbiAgaWYgKGxpbmtDb3VudCA+IDApIHtcbiAgICByZXR1cm4geyBsaW5rOiBsaW5rQ291bnQgfTtcbiAgfVxuXG4gIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UnOiB7XG4gICAgICBjb25zdCBjb3VudCA9IG5vcm1hbGl6ZUltYWdlUGF5bG9hZChtZXNzYWdlLnBheWxvYWQgYXMgQVhDb252ZXJzYXRpb25JbWFnZVBheWxvYWQpLmltYWdlcy5sZW5ndGg7XG4gICAgICByZXR1cm4gY291bnQgPiAwID8geyBpbWFnZTogY291bnQgfSA6IHt9O1xuICAgIH1cbiAgICBjYXNlICd2aWRlbyc6IHtcbiAgICAgIGNvbnN0IGNvdW50ID0gbm9ybWFsaXplVmlkZW9QYXlsb2FkKG1lc3NhZ2UucGF5bG9hZCBhcyBBWENvbnZlcnNhdGlvblZpZGVvUGF5bG9hZCkudmlkZW9zLmxlbmd0aDtcbiAgICAgIHJldHVybiBjb3VudCA+IDAgPyB7IHZpZGVvOiBjb3VudCB9IDoge307XG4gICAgfVxuICAgIGNhc2UgJ2F1ZGlvJzoge1xuICAgICAgY29uc3QgY291bnQgPSBub3JtYWxpemVBdWRpb1BheWxvYWQobWVzc2FnZS5wYXlsb2FkIGFzIEFYQ29udmVyc2F0aW9uQXVkaW9QYXlsb2FkKS5hdWRpb3MubGVuZ3RoO1xuICAgICAgcmV0dXJuIGNvdW50ID4gMCA/IHsgYXVkaW86IGNvdW50IH0gOiB7fTtcbiAgICB9XG4gICAgY2FzZSAnZmlsZSc6IHtcbiAgICAgIGNvbnN0IGNvdW50ID0gbm9ybWFsaXplRmlsZVBheWxvYWQobWVzc2FnZS5wYXlsb2FkIGFzIEFYQ29udmVyc2F0aW9uRmlsZVBheWxvYWQpLmZpbGVzLmxlbmd0aDtcbiAgICAgIHJldHVybiBjb3VudCA+IDAgPyB7IGZpbGU6IGNvdW50IH0gOiB7fTtcbiAgICB9XG4gICAgY2FzZSAndm9pY2UnOlxuICAgICAgcmV0dXJuIHsgdm9pY2U6IDEgfTtcbiAgICBjYXNlICdzdGlja2VyJzpcbiAgICAgIHJldHVybiB7IHN0aWNrZXI6IDEgfTtcbiAgICBjYXNlICdsb2NhdGlvbic6XG4gICAgICByZXR1cm4geyBsb2NhdGlvbjogMSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge307XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByaXZhdGVQZWVyUGFydGljaXBhbnQoXG4gIGNvbnZlcnNhdGlvbjogQVhDb252ZXJzYXRpb24sXG4gIGN1cnJlbnRVc2VySWQ/OiBzdHJpbmcsXG4pOiBBWENvbnZlcnNhdGlvblBhcnRpY2lwYW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcGVlcklkID0gcmVzb2x2ZVByaXZhdGVQZWVyVXNlcklkKGNvbnZlcnNhdGlvbiwgY3VycmVudFVzZXJJZCk7XG4gIGlmICghcGVlcklkKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gY29udmVyc2F0aW9uLnBhcnRpY2lwYW50cy5maW5kKChwKSA9PiBwLmlkID09PSBwZWVySWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udmVyc2F0aW9uUHJvZmlsZUZpZWxkcyhcbiAgY29udmVyc2F0aW9uOiBBWENvbnZlcnNhdGlvbixcbiAgY3VycmVudFVzZXJJZD86IHN0cmluZyxcbik6IEFYQ29udmVyc2F0aW9uSW5mb1Byb2ZpbGVGaWVsZFtdIHtcbiAgY29uc3QgZmllbGRzOiBBWENvbnZlcnNhdGlvbkluZm9Qcm9maWxlRmllbGRbXSA9IFtdO1xuXG4gIGlmIChjb252ZXJzYXRpb24udHlwZSA9PT0gJ3ByaXZhdGUnKSB7XG4gICAgY29uc3QgcGVlciA9IGdldFByaXZhdGVQZWVyUGFydGljaXBhbnQoY29udmVyc2F0aW9uLCBjdXJyZW50VXNlcklkKTtcbiAgICBjb25zdCBwcm9maWxlID0gcmVzb2x2ZVBhcnRpY2lwYW50UHJvZmlsZShwZWVyKTtcblxuICAgIGNvbnN0IGFkZEZpZWxkID0gKGlkOiBzdHJpbmcsIGxhYmVsS2V5OiBzdHJpbmcsIGljb246IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHZhbHVlPy50cmltKCkpIHtcbiAgICAgICAgZmllbGRzLnB1c2goeyBpZCwgbGFiZWxLZXksIGljb24sIHZhbHVlOiB2YWx1ZS50cmltKCkgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGFkZEZpZWxkKCdiaW8nLCAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwucHJvZmlsZS5iaW8nLCAnZmEtbGlnaHQgZmEtYWxpZ24tbGVmdCcsIHByb2ZpbGUuYmlvKTtcbiAgICBhZGRGaWVsZCgncGhvbmUnLCAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwucHJvZmlsZS5waG9uZScsICdmYS1saWdodCBmYS1waG9uZScsIHByb2ZpbGUucGhvbmUpO1xuICAgIGFkZEZpZWxkKCdlbWFpbCcsICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5wcm9maWxlLmVtYWlsJywgJ2ZhLWxpZ2h0IGZhLWVudmVsb3BlJywgcHJvZmlsZS5lbWFpbCk7XG4gICAgYWRkRmllbGQoJ3VzZXJuYW1lJywgJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnByb2ZpbGUudXNlcm5hbWUnLCAnZmEtbGlnaHQgZmEtYXQnLCBwcm9maWxlLnVzZXJuYW1lKTtcbiAgICBhZGRGaWVsZCgnbG9jYXRpb24nLCAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwucHJvZmlsZS5sb2NhdGlvbicsICdmYS1saWdodCBmYS1sb2NhdGlvbi1kb3QnLCBwcm9maWxlLmxvY2F0aW9uKTtcbiAgICBhZGRGaWVsZCgnY29tcGFueScsICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5wcm9maWxlLmNvbXBhbnknLCAnZmEtbGlnaHQgZmEtYnVpbGRpbmcnLCBwcm9maWxlLmNvbXBhbnkpO1xuICAgIGFkZEZpZWxkKCd0aXRsZScsICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5wcm9maWxlLnRpdGxlJywgJ2ZhLWxpZ2h0IGZhLWJyaWVmY2FzZScsIHByb2ZpbGUudGl0bGUpO1xuXG4gICAgaWYgKHBlZXI/LmRlc2NyaXB0aW9uPy50cmltKCkpIHtcbiAgICAgIGZpZWxkcy51bnNoaWZ0KHtcbiAgICAgICAgaWQ6ICdkZXNjcmlwdGlvbicsXG4gICAgICAgIGxhYmVsS2V5OiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwucHJvZmlsZS5hYm91dCcsXG4gICAgICAgIGljb246ICdmYS1saWdodCBmYS11c2VyJyxcbiAgICAgICAgdmFsdWU6IHBlZXIuZGVzY3JpcHRpb24udHJpbSgpLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbnZlcnNhdGlvbi5kZXNjcmlwdGlvbj8udHJpbSgpKSB7XG4gICAgZmllbGRzLnB1c2goe1xuICAgICAgaWQ6ICdkZXNjcmlwdGlvbicsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnByb2ZpbGUuYWJvdXQnLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWFsaWduLWxlZnQnLFxuICAgICAgdmFsdWU6IGNvbnZlcnNhdGlvbi5kZXNjcmlwdGlvbi50cmltKCksXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBncm91cEluZm8gPSAoY29udmVyc2F0aW9uLm1ldGFkYXRhPy5bJ3Byb2ZpbGUnXSBhcyB7IGdyb3VwSW5mbz86IHsgcHVycG9zZT86IHN0cmluZyB9IH0gfCB1bmRlZmluZWQpPy5ncm91cEluZm87XG4gIGlmIChncm91cEluZm8/LnB1cnBvc2U/LnRyaW0oKSkge1xuICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgIGlkOiAncHVycG9zZScsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnByb2ZpbGUucHVycG9zZScsXG4gICAgICBpY29uOiAnZmEtbGlnaHQgZmEtYnVsbHNleWUnLFxuICAgICAgdmFsdWU6IGdyb3VwSW5mby5wdXJwb3NlLnRyaW0oKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmaWVsZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb252ZXJzYXRpb25NZWRpYUNhdGVnb3JpZXMobWVzc2FnZXM6IEFYQ29udmVyc2F0aW9uTWVzc2FnZVtdKTogQVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5W10ge1xuICBjb25zdCBjb3VudHM6IFJlY29yZDxBWENvbnZlcnNhdGlvbk1lZGlhQ2F0ZWdvcnlJZCwgbnVtYmVyPiA9IHtcbiAgICBpbWFnZTogMCxcbiAgICB2aWRlbzogMCxcbiAgICBmaWxlOiAwLFxuICAgIGF1ZGlvOiAwLFxuICAgIHZvaWNlOiAwLFxuICAgIHN0aWNrZXI6IDAsXG4gICAgbG9jYXRpb246IDAsXG4gICAgbGluazogMCxcbiAgfTtcblxuICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMpIHtcbiAgICBjb25zdCBpdGVtQ291bnRzID0gY291bnRNZWRpYUl0ZW1zSW5NZXNzYWdlKG1lc3NhZ2UpO1xuICAgIGZvciAoY29uc3QgW2NhdGVnb3J5SWQsIGNvdW50XSBvZiBPYmplY3QuZW50cmllcyhpdGVtQ291bnRzKSBhcyBBcnJheTxbQVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5SWQsIG51bWJlcl0+KSB7XG4gICAgICBjb3VudHNbY2F0ZWdvcnlJZF0gKz0gY291bnQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGVmaW5pdGlvbnM6IEFycmF5PE9taXQ8QVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5LCAnY291bnQnPj4gPSBbXG4gICAge1xuICAgICAgaWQ6ICdpbWFnZScsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLnBob3RvcycsXG4gICAgICBjb3VudExhYmVsS2V5OiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwubWVkaWEuY291bnQtcGhvdG9zJyxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS1pbWFnZScsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ3ZpZGVvJyxcbiAgICAgIGxhYmVsS2V5OiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwubWVkaWEudmlkZW9zJyxcbiAgICAgIGNvdW50TGFiZWxLZXk6ICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5tZWRpYS5jb3VudC12aWRlb3MnLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXZpZGVvJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnZmlsZScsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLmZpbGVzJyxcbiAgICAgIGNvdW50TGFiZWxLZXk6ICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5tZWRpYS5jb3VudC1maWxlcycsXG4gICAgICBpY29uOiAnZmEtbGlnaHQgZmEtZmlsZScsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ2F1ZGlvJyxcbiAgICAgIGxhYmVsS2V5OiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwubWVkaWEuYXVkaW8nLFxuICAgICAgY291bnRMYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLmNvdW50LWF1ZGlvJyxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS1oZWFkcGhvbmVzJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnbGluaycsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLmxpbmtzJyxcbiAgICAgIGNvdW50TGFiZWxLZXk6ICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5tZWRpYS5jb3VudC1saW5rcycsXG4gICAgICBpY29uOiAnZmEtbGlnaHQgZmEtbGluaycsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ3ZvaWNlJyxcbiAgICAgIGxhYmVsS2V5OiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwubWVkaWEudm9pY2UnLFxuICAgICAgY291bnRMYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLmNvdW50LXZvaWNlJyxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS1taWNyb3Bob25lJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnc3RpY2tlcicsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLnN0aWNrZXJzJyxcbiAgICAgIGNvdW50TGFiZWxLZXk6ICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5tZWRpYS5jb3VudC1zdGlja2VycycsXG4gICAgICBpY29uOiAnZmEtbGlnaHQgZmEtbm90ZS1zdGlja3knLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICdsb2NhdGlvbicsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLmxvY2F0aW9ucycsXG4gICAgICBjb3VudExhYmVsS2V5OiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwubWVkaWEuY291bnQtbG9jYXRpb25zJyxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS1sb2NhdGlvbi1kb3QnLFxuICAgIH0sXG4gIF07XG5cbiAgcmV0dXJuIGRlZmluaXRpb25zXG4gICAgLm1hcCgoZGVmaW5pdGlvbikgPT4gKHsgLi4uZGVmaW5pdGlvbiwgY291bnQ6IGNvdW50c1tkZWZpbml0aW9uLmlkXSB9KSlcbiAgICAuZmlsdGVyKChjYXRlZ29yeSkgPT4gY2F0ZWdvcnkuY291bnQgPiAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlck1lc3NhZ2VzQnlNZWRpYUNhdGVnb3J5KFxuICBtZXNzYWdlczogQVhDb252ZXJzYXRpb25NZXNzYWdlW10sXG4gIGNhdGVnb3J5SWQ6IEFYQ29udmVyc2F0aW9uTWVkaWFDYXRlZ29yeUlkLFxuKTogQVhDb252ZXJzYXRpb25NZXNzYWdlW10ge1xuICByZXR1cm4gbWVzc2FnZXMuZmlsdGVyKChtZXNzYWdlKSA9PiB7XG4gICAgaWYgKGNhdGVnb3J5SWQgPT09ICdsaW5rJykge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VDb250YWluc0xpbmsobWVzc2FnZSk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlLnR5cGUgPT09IGNhdGVnb3J5SWQ7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNHcmlkTWVkaWFDYXRlZ29yeShjYXRlZ29yeUlkOiBBWENvbnZlcnNhdGlvbk1lZGlhQ2F0ZWdvcnlJZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2F0ZWdvcnlJZCA9PT0gJ2ltYWdlJyB8fCBjYXRlZ29yeUlkID09PSAnc3RpY2tlcic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0F0dGFjaG1lbnRMaXN0Q2F0ZWdvcnkoY2F0ZWdvcnlJZDogQVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5SWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNhdGVnb3J5SWQgPT09ICd2aWRlbycgfHwgY2F0ZWdvcnlJZCA9PT0gJ2F1ZGlvJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWENvbnZlcnNhdGlvbk1lZGlhR2FsbGVyeVRpbGUge1xuICBrZXk6IHN0cmluZztcbiAgbWVzc2FnZTogQVhDb252ZXJzYXRpb25NZXNzYWdlO1xuICBraW5kOiAnaW1hZ2UnIHwgJ3ZpZGVvJyB8ICdzdGlja2VyJztcbiAgaW1hZ2U/OiBBWENvbnZlcnNhdGlvbkltYWdlTWVkaWFJdGVtO1xuICB2aWRlbz86IEFYQ29udmVyc2F0aW9uVmlkZW9NZWRpYUl0ZW07XG4gIHN0aWNrZXJVcmw/OiBzdHJpbmc7XG4gIHN0aWNrZXJBbHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE1lZGlhR2FsbGVyeVRpbGVzKFxuICBtZXNzYWdlczogQVhDb252ZXJzYXRpb25NZXNzYWdlW10sXG4gIGNhdGVnb3J5SWQ6IEFYQ29udmVyc2F0aW9uTWVkaWFDYXRlZ29yeUlkLFxuKTogQVhDb252ZXJzYXRpb25NZWRpYUdhbGxlcnlUaWxlW10ge1xuICBjb25zdCBmaWx0ZXJlZCA9IGZpbHRlck1lc3NhZ2VzQnlNZWRpYUNhdGVnb3J5KG1lc3NhZ2VzLCBjYXRlZ29yeUlkKTtcbiAgY29uc3QgdGlsZXM6IEFYQ29udmVyc2F0aW9uTWVkaWFHYWxsZXJ5VGlsZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBtZXNzYWdlIG9mIGZpbHRlcmVkKSB7XG4gICAgaWYgKGNhdGVnb3J5SWQgPT09ICdpbWFnZScpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBub3JtYWxpemVJbWFnZVBheWxvYWQobWVzc2FnZS5wYXlsb2FkIGFzIEFYQ29udmVyc2F0aW9uSW1hZ2VQYXlsb2FkKTtcbiAgICAgIGZvciAoY29uc3QgaW1hZ2Ugb2YgcGF5bG9hZC5pbWFnZXMpIHtcbiAgICAgICAgdGlsZXMucHVzaCh7XG4gICAgICAgICAga2V5OiBgJHttZXNzYWdlLmlkfToke2ltYWdlLm1lZGlhSWQgPz8gaW1hZ2UudXJsID8/IHRpbGVzLmxlbmd0aH1gLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAga2luZDogJ2ltYWdlJyxcbiAgICAgICAgICBpbWFnZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2F0ZWdvcnlJZCA9PT0gJ3ZpZGVvJykge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IG5vcm1hbGl6ZVZpZGVvUGF5bG9hZChtZXNzYWdlLnBheWxvYWQgYXMgQVhDb252ZXJzYXRpb25WaWRlb1BheWxvYWQpO1xuICAgICAgZm9yIChjb25zdCB2aWRlbyBvZiBwYXlsb2FkLnZpZGVvcykge1xuICAgICAgICB0aWxlcy5wdXNoKHtcbiAgICAgICAgICBrZXk6IGAke21lc3NhZ2UuaWR9OiR7dmlkZW8ubWVkaWFJZCA/PyB2aWRlby51cmwgPz8gdGlsZXMubGVuZ3RofWAsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBraW5kOiAndmlkZW8nLFxuICAgICAgICAgIHZpZGVvLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjYXRlZ29yeUlkID09PSAnc3RpY2tlcicpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBtZXNzYWdlLnBheWxvYWQgYXMgQVhDb252ZXJzYXRpb25TdGlja2VyUGF5bG9hZDtcbiAgICAgIHRpbGVzLnB1c2goe1xuICAgICAgICBrZXk6IG1lc3NhZ2UuaWQsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGtpbmQ6ICdzdGlja2VyJyxcbiAgICAgICAgc3RpY2tlclVybDogcGF5bG9hZC51cmwsXG4gICAgICAgIHN0aWNrZXJBbHQ6IHBheWxvYWQuZW1vamkgfHwgJ1N0aWNrZXInLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRpbGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVZpZGVvVGh1bWJuYWlsVXJsKHZpZGVvOiBBWENvbnZlcnNhdGlvblZpZGVvTWVkaWFJdGVtKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHJlc29sdmVQZXJzaXN0ZWRUaHVtYm5haWxVcmwodmlkZW8udGh1bWJuYWlsVXJsLCB2aWRlby51cmwpID8/IHZpZGVvLnVybDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVHYWxsZXJ5SW1hZ2VVcmwoaW1hZ2U6IEFYQ29udmVyc2F0aW9uSW1hZ2VNZWRpYUl0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcmVzb2x2ZUltYWdlRGlzcGxheVVybChpbWFnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlVmlkZW9JdGVtcyhtZXNzYWdlOiBBWENvbnZlcnNhdGlvbk1lc3NhZ2UpOiBBWENvbnZlcnNhdGlvblZpZGVvTWVkaWFJdGVtW10ge1xuICBpZiAobWVzc2FnZS50eXBlICE9PSAndmlkZW8nKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVWaWRlb1BheWxvYWQobWVzc2FnZS5wYXlsb2FkIGFzIEFYQ29udmVyc2F0aW9uVmlkZW9QYXlsb2FkKS52aWRlb3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlQXVkaW9JdGVtcyhtZXNzYWdlOiBBWENvbnZlcnNhdGlvbk1lc3NhZ2UpOiBBWENvbnZlcnNhdGlvbkF1ZGlvTWVkaWFJdGVtW10ge1xuICBpZiAobWVzc2FnZS50eXBlICE9PSAnYXVkaW8nKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVBdWRpb1BheWxvYWQobWVzc2FnZS5wYXlsb2FkIGFzIEFYQ29udmVyc2F0aW9uQXVkaW9QYXlsb2FkKS5hdWRpb3M7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEFsbENvbnZlcnNhdGlvbk1lc3NhZ2VzKFxuICBtZXNzYWdlQXBpOiBBWENvbnZlcnNhdGlvbk1lc3NhZ2VBcGksXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gIHBhZ2VTaXplOiBudW1iZXIsXG4pOiBQcm9taXNlPEFYQ29udmVyc2F0aW9uTWVzc2FnZVtdPiB7XG4gIGNvbnN0IGNvbGxlY3RlZDogQVhDb252ZXJzYXRpb25NZXNzYWdlW10gPSBbXTtcbiAgbGV0IHBhZ2UgPSAwO1xuICBsZXQgaGFzTW9yZSA9IHRydWU7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICB3aGlsZSAoaGFzTW9yZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1lc3NhZ2VBcGkuZ2V0TWVzc2FnZXMoY29udmVyc2F0aW9uSWQsIHtcbiAgICAgIHBhZ2UsXG4gICAgICBwYWdlU2l6ZSxcbiAgICAgIGN1cnNvcixcbiAgICB9KTtcblxuICAgIGNvbGxlY3RlZC5wdXNoKC4uLnJlc3VsdC5pdGVtcyk7XG4gICAgaGFzTW9yZSA9IHJlc3VsdC5oYXNNb3JlO1xuICAgIGN1cnNvciA9IHJlc3VsdC5uZXh0Q3Vyc29yO1xuICAgIHBhZ2UgKz0gMTtcblxuICAgIGlmICghcmVzdWx0Lml0ZW1zLmxlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3RlZC5zb3J0KChhLCBiKSA9PiBiLnRpbWVzdGFtcC5nZXRUaW1lKCkgLSBhLnRpbWVzdGFtcC5nZXRUaW1lKCkpO1xufVxuIl19","/**\n * Conversation Info Panel — Telegram-inspired profile / group details sheet.\n */\nimport { AXClosableComponent, AXComponentCloseEvent } from '@acorex/cdk/common';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLabelComponent } from '@acorex/components/label';\nimport { AXSearchBoxComponent } from '@acorex/components/search-box';\nimport { AXSwitchModule } from '@acorex/components/switch';\nimport { AXTextBoxComponent } from '@acorex/components/text-box';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, inject, output, signal, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { AXConversationAvatarPickerComponent } from '../../../components/shared/avatar-picker.component';\nimport { AXConversationAvatarComponent } from '../../../components/shared/conversation-avatar.component';\nimport { AXConversationRegistryComponentOutletComponent } from '../../../components/shared/registry-component-outlet.component';\nimport { AXConversationService } from '../../../services/conversation.service';\nimport { AXConversationMessageUtilsService } from '../../../utils';\nimport { fetchAllConversationMessages, getConversationMediaCategories, getConversationProfileFields, } from './conversation-info-panel.utils';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nimport * as i2 from \"@acorex/components/switch\";\nimport * as i3 from \"@angular/common\";\nimport * as i4 from \"@acorex/core/translation\";\nexport class AXConversationInfoPanelComponent extends AXClosableComponent {\n constructor() {\n super(...arguments);\n this.toastService = inject(AXToastService);\n this.translation = inject(AXTranslationService);\n this.injectedConversationService = inject(AXConversationService, { optional: true });\n this.onClosed = output();\n this.activeTab = signal('profile', ...(ngDevMode ? [{ debugName: \"activeTab\" }] : []));\n this.showMemberSearch = signal(false, ...(ngDevMode ? [{ debugName: \"showMemberSearch\" }] : []));\n this.panelView = signal('main', ...(ngDevMode ? [{ debugName: \"panelView\" }] : []));\n this.selectedMediaCategory = signal(null, ...(ngDevMode ? [{ debugName: \"selectedMediaCategory\" }] : []));\n this.mediaViewLoader = () => import('./conversation-info-media-view.component').then((m) => m.AXConversationInfoMediaViewComponent);\n this.conversationMessages = signal([], ...(ngDevMode ? [{ debugName: \"conversationMessages\" }] : []));\n this.loadingMessages = signal(false, ...(ngDevMode ? [{ debugName: \"loadingMessages\" }] : []));\n this.memberSearchQuery = signal('', ...(ngDevMode ? [{ debugName: \"memberSearchQuery\" }] : []));\n this.archived = false;\n this.initialNotifications = false;\n this.initialArchived = false;\n this.editTitle = '';\n this.editAvatar = '';\n this.groupDetailsSaveInFlight = false;\n this.backgroundPresets = [\n {\n id: 'solid-default',\n label: this.translation.translateSync('@acorex:chat.info-panel.background.presets.default'),\n value: 'rgb(var(--ax-sys-color-primary-lightest-surface))',\n },\n {\n id: 'solid-graphite',\n label: this.translation.translateSync('@acorex:chat.info-panel.background.presets.graphite'),\n value: 'rgb(var(--ax-sys-color-lighter-surface))',\n },\n {\n id: 'solid-olive',\n label: this.translation.translateSync('@acorex:chat.info-panel.background.presets.olive'),\n value: 'rgba(132, 144, 88, 0.24)',\n },\n {\n id: 'solid-sky',\n label: this.translation.translateSync('@acorex:chat.info-panel.background.presets.sky'),\n value: 'rgba(56, 189, 248, 0.2)',\n },\n {\n id: 'grad-aurora',\n label: this.translation.translateSync('@acorex:chat.info-panel.background.presets.aurora'),\n value: 'linear-gradient(140deg, #60a5fa 0%, #a78bfa 55%, #f472b6 100%)',\n },\n {\n id: 'grad-sunset',\n label: this.translation.translateSync('@acorex:chat.info-panel.background.presets.sunset'),\n value: 'linear-gradient(140deg, rgba(251, 113, 133, 0.34) 0%, rgba(251, 191, 36, 0.32) 100%)',\n },\n ];\n this.heroSubtitle = computed(() => {\n const conversation = this.liveConversation();\n if (!conversation)\n return '';\n return AXConversationMessageUtilsService.getConversationSubtitle(conversation);\n }, ...(ngDevMode ? [{ debugName: \"heroSubtitle\" }] : []));\n this.liveConversation = computed(() => {\n const conversation = this.conversation;\n if (!conversation?.id)\n return conversation;\n const fromStore = this.conversationService?.conversations().find((c) => c.id === conversation.id);\n return fromStore ?? conversation;\n }, ...(ngDevMode ? [{ debugName: \"liveConversation\" }] : []));\n this.isConversationMuted = computed(() => this.liveConversation()?.settings?.notifications === false, ...(ngDevMode ? [{ debugName: \"isConversationMuted\" }] : []));\n this.profileFields = computed(() => {\n const conversation = this.liveConversation();\n if (!conversation)\n return [];\n return getConversationProfileFields(conversation, this.conversationService?.currentUser()?.id);\n }, ...(ngDevMode ? [{ debugName: \"profileFields\" }] : []));\n this.mediaCategories = computed(() => {\n if (!this.conversation)\n return [];\n return getConversationMediaCategories(this.conversationMessages());\n }, ...(ngDevMode ? [{ debugName: \"mediaCategories\" }] : []));\n this.quickActions = computed(() => {\n if (!this.conversation)\n return [];\n const muted = this.isConversationMuted();\n const actions = [\n {\n id: 'mute',\n labelKey: muted ? '@acorex:chat.actions.unmute' : '@acorex:chat.actions.mute',\n icon: muted ? 'fa-light fa-bell-slash' : 'fa-light fa-bell',\n },\n ];\n if (!this.isPrivateConversation()) {\n actions.push({\n id: 'leave',\n labelKey: '@acorex:chat.actions.leave-and-delete',\n icon: 'fa-light fa-door-open',\n danger: true,\n });\n }\n return actions;\n }, ...(ngDevMode ? [{ debugName: \"quickActions\" }] : []));\n this.filteredMembers = computed(() => {\n if (!this.conversation)\n return [];\n const query = this.memberSearchQuery().toLowerCase().trim();\n const members = this.conversation?.participants ?? [];\n if (!query)\n return members;\n return members.filter((p) => p.name.toLowerCase().includes(query) ||\n (p.description ?? '').toLowerCase().includes(query) ||\n (p.role ?? '').toLowerCase().includes(query));\n }, ...(ngDevMode ? [{ debugName: \"filteredMembers\" }] : []));\n }\n ngOnInit() {\n const resolvedService = this.conversationService ?? this.injectedConversationService;\n if (!resolvedService) {\n console.warn('AXConversationInfoPanelComponent opened without conversationService.');\n this.close();\n return;\n }\n this.conversationService = resolvedService;\n if (!this.conversation) {\n const activeConversation = this.conversationService.activeConversation();\n if (activeConversation) {\n this.conversation = activeConversation;\n }\n else {\n console.warn('AXConversationInfoPanelComponent opened without conversation context.');\n this.close();\n return;\n }\n }\n this.initialNotifications = this.conversation.settings?.notifications ?? true;\n this.archived = this.conversation.archived ?? false;\n this.initialArchived = this.archived;\n this.editTitle = this.conversation.title || '';\n this.editAvatar = this.conversation.avatar || '';\n void this.loadConversationMessages();\n }\n async loadConversationMessages() {\n this.loadingMessages.set(true);\n try {\n if (this.conversationService.activeConversationId() === this.conversation.id) {\n const activeMessages = this.conversationService.activeMessages();\n if (activeMessages.length > 0) {\n this.conversationMessages.set(activeMessages);\n }\n }\n const messages = await fetchAllConversationMessages(this.conversationService.messageApi, this.conversation.id, 30);\n this.conversationMessages.set(messages);\n }\n catch (error) {\n console.error('Failed to load conversation media messages:', error);\n }\n finally {\n this.loadingMessages.set(false);\n }\n }\n isPrivateConversation() {\n return this.conversation.type === 'private';\n }\n isGroupConversation() {\n return this.conversation.type === 'group' || this.conversation.type === 'channel';\n }\n membersSectionTitle() {\n return this.translation.translateSync('@acorex:chat.info-panel.tabs.members-count-upper', {\n params: { count: this.conversation.participants.length },\n });\n }\n getMemberRoleLabel(participant) {\n switch (participant.role) {\n case 'admin':\n return '@acorex:chat.info-panel.member-role.admin';\n case 'moderator':\n return '@acorex:chat.info-panel.member-role.moderator';\n default:\n return null;\n }\n }\n onMemberSearchChange(value) {\n this.memberSearchQuery.set(value ?? '');\n }\n setActiveTab(tab) {\n this.activeTab.set(tab);\n }\n toggleMemberSearch() {\n this.showMemberSearch.update((value) => !value);\n if (!this.showMemberSearch()) {\n this.memberSearchQuery.set('');\n }\n }\n openMediaCategory(category) {\n this.selectedMediaCategory.set(category);\n this.panelView.set('media');\n }\n closeMediaView() {\n this.panelView.set('main');\n this.selectedMediaCategory.set(null);\n }\n getMediaViewInputs(category) {\n return {\n category,\n messages: this.conversationMessages(),\n conversation: this.conversation,\n conversationService: this.conversationService,\n onBack: () => this.closeMediaView(),\n };\n }\n getMediaRowLabel(category) {\n return this.translation.translateSync(category.countLabelKey, {\n params: { count: category.count },\n });\n }\n getMemberSubtitle(participant) {\n if (participant.status === 'online') {\n return this.translation.translateSync('@acorex:chat.status.online');\n }\n if (participant.description?.trim())\n return participant.description.trim();\n if (participant.role && participant.role !== 'member')\n return participant.role;\n return '';\n }\n onQuickAction(actionId) {\n switch (actionId) {\n case 'mute':\n void this.toggleConversationMute();\n break;\n case 'leave':\n void this.onLeave();\n break;\n }\n }\n async toggleConversationMute() {\n const notificationsEnabled = this.liveConversation()?.settings?.notifications ?? true;\n await this.onNotificationsChange(!notificationsEnabled);\n }\n async onNotificationsChange(value) {\n try {\n await this.conversationService.updateConversationSettings(this.conversation.id, {\n notifications: value,\n });\n const settings = this.conversation.settings ?? { notifications: true, showPreview: true };\n this.conversation.settings = { ...settings, notifications: value };\n }\n catch (error) {\n console.error('Failed to update notifications:', error);\n }\n }\n async onArchivedChange(value) {\n const previous = this.archived;\n this.archived = value;\n try {\n await this.conversationService.updateConversation(this.conversation.id, { archived: value });\n this.conversation.archived = value;\n this.initialArchived = value;\n }\n catch {\n this.archived = previous;\n }\n }\n close(data) {\n const event = new AXComponentCloseEvent();\n event.component = this;\n event.data = data;\n this.onClosed.emit(event);\n }\n closeAll() {\n this.close();\n }\n async onLeave() {\n const isGroup = this.isGroupConversation();\n await this.conversationService.deleteConversation(this.conversation.id);\n if (this.conversationService.activeConversation()?.id === this.conversation.id) {\n this.conversationService.closeActiveConversation();\n }\n this.toastService.success(isGroup\n ? this.translation.translateSync('@acorex:chat.info-panel.toasts.left-conversation')\n : this.translation.translateSync('@acorex:chat.info-panel.toasts.deleted-conversation'));\n this.close();\n }\n onGroupTitleChange(value) {\n this.editTitle = value;\n clearTimeout(this.groupTitleSaveTimer);\n this.groupTitleSaveTimer = setTimeout(() => void this.persistGroupDetails(), 400);\n }\n onGroupAvatarChange(value) {\n this.editAvatar = value;\n void this.persistGroupDetails();\n }\n async persistGroupDetails() {\n if (this.isPrivateConversation() || this.groupDetailsSaveInFlight) {\n return;\n }\n const title = this.editTitle.trim();\n if (!title) {\n return;\n }\n const nextAvatar = this.editAvatar.trim() || undefined;\n const currentTitle = this.conversation.title || '';\n const currentAvatar = this.conversation.avatar || undefined;\n if (title === currentTitle && nextAvatar === currentAvatar) {\n return;\n }\n this.groupDetailsSaveInFlight = true;\n try {\n await this.conversationService.updateConversation(this.conversation.id, {\n title,\n avatar: nextAvatar,\n });\n this.conversation.title = title;\n this.conversation.avatar = nextAvatar;\n }\n catch (error) {\n console.error('Failed to update group details:', error);\n this.toastService.danger(this.translation.translateSync('@acorex:chat.info-panel.toasts.failed-group-update'));\n }\n finally {\n this.groupDetailsSaveInFlight = false;\n }\n }\n isBackgroundSelected(value) {\n const bg = this.conversation?.metadata?.['messageListBackground'];\n return (typeof bg === 'string' ? bg : '') === value;\n }\n async applyMessageListBackground(value) {\n try {\n const metadata = {\n ...(this.conversation.metadata ?? {}),\n messageListBackground: value,\n };\n await this.conversationService.updateConversationMetadata(this.conversation.id, metadata);\n this.conversation.metadata = metadata;\n this.toastService.success(value\n ? this.translation.translateSync('@acorex:chat.info-panel.toasts.background-updated')\n : this.translation.translateSync('@acorex:chat.info-panel.toasts.background-reset'));\n }\n catch (error) {\n console.error('Failed to update message list background:', error);\n this.toastService.danger(this.translation.translateSync('@acorex:chat.info-panel.toasts.failed-background-update'));\n }\n }\n getBackgroundAriaLabel(label) {\n return this.translation.translateSync('@acorex:chat.info-panel.background.set-label', {\n params: { label },\n });\n }\n ngOnDestroy() {\n if (this.groupTitleSaveTimer) {\n clearTimeout(this.groupTitleSaveTimer);\n this.groupTitleSaveTimer = undefined;\n void this.persistGroupDetails();\n }\n const currentNotifications = this.liveConversation()?.settings?.notifications ?? true;\n const hasChanges = currentNotifications !== this.initialNotifications ||\n this.archived !== this.initialArchived;\n if (hasChanges) {\n this.toastService.success(this.translation.translateSync('@acorex:chat.info-panel.toasts.settings-saved'));\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXConversationInfoPanelComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.3\", type: AXConversationInfoPanelComponent, isStandalone: true, selector: \"ax-conversation-info-panel\", outputs: { onClosed: \"onClosed\" }, providers: [\n { provide: AXClosableComponent, useExisting: AXConversationInfoPanelComponent },\n ], usesInheritance: true, ngImport: i0, template: `\n @if (conversation) {\n <div class=\"tg-info-panel\">\n @if (panelView() === 'media' && selectedMediaCategory(); as category) {\n <ax-conversation-registry-component-outlet\n [componentLoader]=\"mediaViewLoader\"\n [inputs]=\"getMediaViewInputs(category)\"\n />\n } @else {\n <div class=\"tg-info-panel__scroll\">\n <section class=\"tg-hero\">\n <ax-conversation-avatar kind=\"auto\" [conversation]=\"conversation\" [size]=\"96\" />\n <h2 class=\"tg-hero__title\">{{ conversation.title }}</h2>\n <p class=\"tg-hero__subtitle\">{{ heroSubtitle() }}</p>\n </section>\n\n <section class=\"tg-quick-actions\">\n @for (action of quickActions(); track action.id) {\n <button\n type=\"button\"\n class=\"tg-quick-action\"\n [class.tg-quick-action--danger]=\"action.danger\"\n [class.tg-quick-action--active]=\"action.id === 'mute' && isConversationMuted()\"\n (click)=\"onQuickAction(action.id)\"\n >\n <span class=\"tg-quick-action__icon\"><i [class]=\"action.icon\"></i></span>\n <span class=\"tg-quick-action__label\">{{ action.labelKey | translate | async }}</span>\n </button>\n }\n </section>\n\n <nav class=\"tg-tabs\" role=\"tablist\">\n <button\n type=\"button\"\n class=\"tg-tab\"\n role=\"tab\"\n [class.tg-tab--active]=\"activeTab() === 'profile'\"\n [attr.aria-selected]=\"activeTab() === 'profile'\"\n (click)=\"setActiveTab('profile')\"\n >\n {{ '@acorex:chat.info-panel.tabs.profile' | translate | async }}\n </button>\n <button\n type=\"button\"\n class=\"tg-tab\"\n role=\"tab\"\n [class.tg-tab--active]=\"activeTab() === 'manage'\"\n [attr.aria-selected]=\"activeTab() === 'manage'\"\n (click)=\"setActiveTab('manage')\"\n >\n {{ '@acorex:chat.info-panel.tabs.manage' | translate | async }}\n </button>\n </nav>\n\n @if (activeTab() === 'profile') {\n @if (profileFields().length > 0) {\n <section class=\"tg-section tg-details\">\n @for (field of profileFields(); track field.id) {\n <div class=\"tg-detail-row\">\n <span class=\"tg-detail-row__icon\"><i [class]=\"field.icon\"></i></span>\n <div class=\"tg-detail-row__content\">\n <span class=\"tg-detail-row__value\">{{ field.value }}</span>\n <span class=\"tg-detail-row__label\">{{ field.labelKey | translate | async }}</span>\n </div>\n </div>\n }\n </section>\n }\n\n @if (loadingMessages()) {\n <div class=\"tg-loading\">{{ '@acorex:chat.info-panel.media.loading' | translate | async }}</div>\n } @else if (mediaCategories().length > 0) {\n <section class=\"tg-section tg-media\">\n @for (category of mediaCategories(); track category.id) {\n <button type=\"button\" class=\"tg-media-row\" (click)=\"openMediaCategory(category)\">\n <span class=\"tg-media-row__icon\"><i [class]=\"category.icon\"></i></span>\n <span class=\"tg-media-row__label\">{{ getMediaRowLabel(category) }}</span>\n <i class=\"fa-light fa-chevron-right tg-media-row__chevron\"></i>\n </button>\n }\n </section>\n }\n\n @if (isGroupConversation()) {\n <section class=\"tg-section tg-members\">\n <div class=\"tg-section-header tg-section-header--row\">\n <span class=\"tg-section-header__title\">{{ membersSectionTitle() }}</span>\n <div class=\"tg-section-header__actions\">\n <button\n type=\"button\"\n class=\"tg-icon-btn\"\n (click)=\"toggleMemberSearch()\"\n [attr.aria-label]=\"'@acorex:chat.info-panel.placeholders.search-members' | translate | async\"\n >\n <i class=\"fa-light fa-magnifying-glass\"></i>\n </button>\n </div>\n </div>\n @if (showMemberSearch()) {\n <div class=\"tg-members-search-wrap\">\n <ax-search-box\n class=\"tg-members-search\"\n [value]=\"memberSearchQuery()\"\n (valueChange)=\"onMemberSearchChange($event)\"\n [placeholder]=\"'@acorex:chat.info-panel.placeholders.search-members' | translate | async\"\n ></ax-search-box>\n </div>\n }\n @for (participant of filteredMembers(); track participant.id) {\n <div class=\"tg-member-row\">\n <ax-conversation-avatar\n kind=\"user\"\n [userId]=\"participant.id\"\n [conversation]=\"conversation\"\n [size]=\"42\"\n />\n <div class=\"tg-member-row__content\">\n <span class=\"tg-member-row__name\">{{ participant.name }}</span>\n <span\n class=\"tg-member-row__meta\"\n [class.tg-member-row__meta--online]=\"participant.status === 'online'\"\n >\n {{ getMemberSubtitle(participant) }}\n </span>\n </div>\n @if (getMemberRoleLabel(participant); as roleLabel) {\n <span class=\"tg-member-row__badge\">{{ roleLabel | translate | async }}</span>\n }\n </div>\n }\n </section>\n }\n }\n\n @if (activeTab() === 'manage') {\n <section class=\"tg-section tg-manage\">\n @if (!isPrivateConversation()) {\n <div class=\"tg-manage-block\">\n <ax-label class=\"tg-manage-label\">{{\n '@acorex:chat.info-panel.group-details.title' | translate | async\n }}</ax-label>\n <ax-text-box\n [value]=\"editTitle\"\n (valueChange)=\"onGroupTitleChange($event)\"\n [placeholder]=\"'@acorex:chat.info-panel.placeholders.enter-group-title' | translate | async\"\n ></ax-text-box>\n <div class=\"tg-manage-avatar\">\n <ax-conversation-avatar-picker\n [(avatarUrl)]=\"editAvatar\"\n (avatarUrlChange)=\"onGroupAvatarChange($event)\"\n ></ax-conversation-avatar-picker>\n </div>\n </div>\n }\n\n <div class=\"tg-setting-row\">\n <div class=\"tg-setting-row__info\">\n <span class=\"tg-setting-row__title\">{{\n '@acorex:chat.info-panel.settings.archived' | translate | async\n }}</span>\n <span class=\"tg-setting-row__desc\">{{\n '@acorex:chat.info-panel.settings.archived-description' | translate | async\n }}</span>\n </div>\n <ax-switch [(ngModel)]=\"archived\" (ngModelChange)=\"onArchivedChange($event)\"></ax-switch>\n </div>\n\n <div class=\"tg-manage-block tg-background-block\">\n <ax-label class=\"tg-manage-label\">{{\n '@acorex:chat.info-panel.background.title' | translate | async\n }}</ax-label>\n <p class=\"tg-background-desc\">\n {{ '@acorex:chat.info-panel.background.description' | translate | async }}\n </p>\n <div class=\"tg-background-grid\">\n @for (preset of backgroundPresets; track preset.id) {\n <button\n type=\"button\"\n class=\"tg-background-swatch\"\n [class.tg-background-swatch--active]=\"isBackgroundSelected(preset.value)\"\n [style.background]=\"preset.value\"\n (click)=\"applyMessageListBackground(preset.value)\"\n [attr.aria-label]=\"getBackgroundAriaLabel(preset.label)\"\n >\n <span class=\"tg-background-swatch__label\">{{ preset.label }}</span>\n </button>\n }\n </div>\n <ax-button\n [text]=\"'@acorex:chat.info-panel.actions.reset-to-default' | translate | async\"\n [look]=\"'ghost'\"\n (onClick)=\"applyMessageListBackground('')\"\n ></ax-button>\n </div>\n </section>\n }\n </div>\n }\n </div>\n }\n `, isInline: true, styles: [\":host{display:block;width:100%;height:100%}.tg-info-panel{display:flex;flex-direction:column;max-height:min(85vh,40rem)}.tg-info-panel__scroll{overflow-y:auto;overscroll-behavior:contain}.tg-hero{display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:1.25rem 1.5rem 1rem;text-align:center}.tg-hero__title{margin:.25rem 0 0;font-size:1.25rem;font-weight:600;line-height:1.35;color:rgb(var(--ax-sys-color-on-surface));word-break:break-word}.tg-hero__subtitle{margin:0;font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface));opacity:.65}.tg-quick-actions{display:flex;justify-content:center;gap:.35rem;padding:0 .75rem 1rem;flex-wrap:nowrap}.tg-quick-action{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.35rem;flex:1;min-width:0;max-width:5.5rem;padding:.55rem .4rem;border:none;border-radius:.75rem;background:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-primary-500));cursor:pointer;transition:background-color .15s ease}.tg-quick-action:hover{background:rgb(var(--ax-sys-color-border-light-surface))}.tg-quick-action--danger{color:rgb(var(--ax-sys-color-danger-500))}.tg-quick-action--active{background:rgba(var(--ax-sys-color-warning-500),.14);color:rgb(var(--ax-sys-color-warning-500))}.tg-quick-action--active .tg-quick-action__label{color:rgb(var(--ax-sys-color-warning-500));opacity:1}.tg-quick-action__icon{font-size:1.125rem;line-height:1}.tg-quick-action__label{font-size:.6875rem;font-weight:500;line-height:1.1;color:rgb(var(--ax-sys-color-on-surface));opacity:.85;text-align:center}.tg-tabs{display:flex;gap:0;margin:0 .75rem;border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface))}.tg-tab{flex:1;padding:.65rem .5rem;border:none;border-bottom:2px solid transparent;background:transparent;font-size:.875rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));opacity:.55;cursor:pointer;transition:opacity .15s ease,color .15s ease,border-color .15s ease}.tg-tab:hover{opacity:.8}.tg-tab--active{opacity:1;color:rgb(var(--ax-sys-color-primary-500));border-bottom-color:rgb(var(--ax-sys-color-primary-500))}.tg-section{// border-top: 1px solid rgb(var(--ax-sys-color-border-light-surface));padding:.25rem 0}.tg-detail-row,.tg-member-row{display:flex;align-items:center;gap:.875rem;padding:.65rem 1rem;min-width:0}.tg-media-row{display:flex;align-items:center;gap:.875rem;width:100%;padding:.7rem 1rem;border:none;background:transparent;text-align:start;cursor:pointer;transition:background-color .15s ease}.tg-media-row:hover{background:rgb(var(--ax-sys-color-lighter-surface))}.tg-media-row__icon{flex-shrink:0;width:1.5rem;text-align:center;color:rgb(var(--ax-sys-color-on-surface));opacity:.75}.tg-media-row__label{flex:1;min-width:0;font-size:.9375rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface))}.tg-media-row__chevron{flex-shrink:0;font-size:.75rem;opacity:.45}.tg-loading{padding:.75rem 1rem 1rem;font-size:.8125rem;color:rgb(var(--ax-sys-color-on-surface));opacity:.6;text-align:center}.tg-detail-row__icon{flex-shrink:0;width:1.5rem;text-align:center;color:rgb(var(--ax-sys-color-primary-500));opacity:.9}.tg-detail-row__content,.tg-member-row__content{flex:1;min-width:0;display:flex;flex-direction:column;gap:.125rem}.tg-detail-row__value,.tg-member-row__name{font-size:.9375rem;font-weight:500;line-height:1.3;color:rgb(var(--ax-sys-color-on-surface));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tg-detail-row__label,.tg-member-row__meta{font-size:.75rem;line-height:1.2;color:rgb(var(--ax-sys-color-on-surface));opacity:.6}.tg-member-row__meta--online{color:rgb(var(--ax-sys-color-primary-500));opacity:1}.tg-section-header{display:flex;flex-direction:column;gap:.5rem;padding:.75rem 1rem .35rem}.tg-section-header--row{flex-direction:row;align-items:center;justify-content:space-between}.tg-section-header__actions{display:flex;align-items:center;gap:.25rem}.tg-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:none;border-radius:999px;background:transparent;color:rgb(var(--ax-sys-color-primary-500));cursor:pointer}.tg-icon-btn:hover{background:rgb(var(--ax-sys-color-lighter-surface))}.tg-members-search-wrap{padding:0 1rem .5rem}.tg-section-header__title{font-size:.75rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:rgb(var(--ax-sys-color-on-surface));opacity:.55}.tg-members-search{width:100%}.tg-member-row__badge{flex-shrink:0;padding:.15rem .5rem;border-radius:999px;font-size:.6875rem;font-weight:600;color:rgb(var(--ax-sys-color-primary-500));background:rgba(var(--ax-sys-color-primary-500),.14)}.tg-manage{padding:.75rem 1rem 1rem;display:flex;flex-direction:column;gap:.75rem}.tg-manage-block{display:flex;flex-direction:column;gap:.5rem}.tg-manage-label{font-size:.8125rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface))}.tg-setting-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.5rem 0}.tg-setting-row__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:.125rem}.tg-setting-row__title{font-size:.875rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface))}.tg-setting-row__desc{font-size:.75rem;color:rgb(var(--ax-sys-color-on-surface));opacity:.65}.tg-background-desc{margin:0;font-size:.75rem;opacity:.7}.tg-background-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem}.tg-background-swatch{position:relative;height:2.75rem;border-radius:.5rem;border:2px solid transparent;cursor:pointer;overflow:hidden}.tg-background-swatch--active{border-color:rgb(var(--ax-sys-color-primary-500))}.tg-background-swatch__label{position:absolute;inset-inline-start:.35rem;bottom:.2rem;font-size:.65rem;letter-spacing:.1rem;font-weight:300;mix-blend-mode:difference;color:#fff}.tg-danger{padding:.25rem 0 .75rem}.tg-danger-row{display:flex;align-items:center;gap:.75rem;width:100%;padding:.75rem 1rem;border:none;background:transparent;font-size:.9375rem;font-weight:500;color:rgb(var(--ax-sys-color-danger-500));cursor:pointer;text-align:start}.tg-danger-row:hover{background:rgba(var(--ax-sys-color-danger-500),.06)}\\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: \"component\", type: 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: AXDecoratorModule }, { kind: \"component\", type: AXLabelComponent, selector: \"ax-label\", inputs: [\"required\", \"for\"], outputs: [\"requiredChange\"] }, { kind: \"component\", type: 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: AXSwitchModule }, { kind: \"component\", type: i2.AXSwitchComponent, selector: \"ax-switch\", inputs: [\"disabled\", \"readonly\", \"color\", \"tabIndex\", \"value\", \"name\", \"isLoading\"], outputs: [\"onBlur\", \"onFocus\", \"valueChange\", \"onValueChanged\", \"readonlyChange\", \"disabledChange\"] }, { kind: \"component\", type: AXTextBoxComponent, selector: \"ax-text-box\", inputs: [\"disabled\", \"tabIndex\", \"readonly\", \"value\", \"state\", \"name\", \"id\", \"placeholder\", \"maxLength\", \"allowNull\", \"type\", \"autoComplete\", \"look\", \"maskPattern\", \"customTokens\", \"class\"], outputs: [\"onBlur\", \"onFocus\", \"valueChange\", \"stateChange\", \"onValueChanged\", \"readonlyChange\", \"disabledChange\", \"onKeyDown\", \"onKeyUp\", \"onKeyPress\", \"onMaskChanged\"] }, { kind: \"component\", type: AXConversationAvatarPickerComponent, selector: \"ax-conversation-avatar-picker\", inputs: [\"showClearButton\", \"avatarUrl\"], outputs: [\"avatarUrlChange\", \"onFileSelected\"] }, { kind: \"component\", type: AXConversationAvatarComponent, selector: \"ax-conversation-avatar\", inputs: [\"kind\", \"userId\", \"conversation\", \"message\", \"size\", \"showStatus\", \"name\", \"avatar\", \"icon\"] }, { kind: \"component\", type: AXConversationRegistryComponentOutletComponent, selector: \"ax-conversation-registry-component-outlet\", inputs: [\"component\", \"componentLoader\", \"inputs\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"pipe\", type: i3.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i4.AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXConversationInfoPanelComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-conversation-info-panel', changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n CommonModule,\n FormsModule,\n AXButtonComponent,\n AXDecoratorModule,\n AXLabelComponent,\n AXSearchBoxComponent,\n AXSwitchModule,\n AXTextBoxComponent,\n AXConversationAvatarPickerComponent,\n AXConversationAvatarComponent,\n AXConversationRegistryComponentOutletComponent,\n AXTranslationModule,\n ], providers: [\n { provide: AXClosableComponent, useExisting: AXConversationInfoPanelComponent },\n ], template: `\n @if (conversation) {\n <div class=\"tg-info-panel\">\n @if (panelView() === 'media' && selectedMediaCategory(); as category) {\n <ax-conversation-registry-component-outlet\n [componentLoader]=\"mediaViewLoader\"\n [inputs]=\"getMediaViewInputs(category)\"\n />\n } @else {\n <div class=\"tg-info-panel__scroll\">\n <section class=\"tg-hero\">\n <ax-conversation-avatar kind=\"auto\" [conversation]=\"conversation\" [size]=\"96\" />\n <h2 class=\"tg-hero__title\">{{ conversation.title }}</h2>\n <p class=\"tg-hero__subtitle\">{{ heroSubtitle() }}</p>\n </section>\n\n <section class=\"tg-quick-actions\">\n @for (action of quickActions(); track action.id) {\n <button\n type=\"button\"\n class=\"tg-quick-action\"\n [class.tg-quick-action--danger]=\"action.danger\"\n [class.tg-quick-action--active]=\"action.id === 'mute' && isConversationMuted()\"\n (click)=\"onQuickAction(action.id)\"\n >\n <span class=\"tg-quick-action__icon\"><i [class]=\"action.icon\"></i></span>\n <span class=\"tg-quick-action__label\">{{ action.labelKey | translate | async }}</span>\n </button>\n }\n </section>\n\n <nav class=\"tg-tabs\" role=\"tablist\">\n <button\n type=\"button\"\n class=\"tg-tab\"\n role=\"tab\"\n [class.tg-tab--active]=\"activeTab() === 'profile'\"\n [attr.aria-selected]=\"activeTab() === 'profile'\"\n (click)=\"setActiveTab('profile')\"\n >\n {{ '@acorex:chat.info-panel.tabs.profile' | translate | async }}\n </button>\n <button\n type=\"button\"\n class=\"tg-tab\"\n role=\"tab\"\n [class.tg-tab--active]=\"activeTab() === 'manage'\"\n [attr.aria-selected]=\"activeTab() === 'manage'\"\n (click)=\"setActiveTab('manage')\"\n >\n {{ '@acorex:chat.info-panel.tabs.manage' | translate | async }}\n </button>\n </nav>\n\n @if (activeTab() === 'profile') {\n @if (profileFields().length > 0) {\n <section class=\"tg-section tg-details\">\n @for (field of profileFields(); track field.id) {\n <div class=\"tg-detail-row\">\n <span class=\"tg-detail-row__icon\"><i [class]=\"field.icon\"></i></span>\n <div class=\"tg-detail-row__content\">\n <span class=\"tg-detail-row__value\">{{ field.value }}</span>\n <span class=\"tg-detail-row__label\">{{ field.labelKey | translate | async }}</span>\n </div>\n </div>\n }\n </section>\n }\n\n @if (loadingMessages()) {\n <div class=\"tg-loading\">{{ '@acorex:chat.info-panel.media.loading' | translate | async }}</div>\n } @else if (mediaCategories().length > 0) {\n <section class=\"tg-section tg-media\">\n @for (category of mediaCategories(); track category.id) {\n <button type=\"button\" class=\"tg-media-row\" (click)=\"openMediaCategory(category)\">\n <span class=\"tg-media-row__icon\"><i [class]=\"category.icon\"></i></span>\n <span class=\"tg-media-row__label\">{{ getMediaRowLabel(category) }}</span>\n <i class=\"fa-light fa-chevron-right tg-media-row__chevron\"></i>\n </button>\n }\n </section>\n }\n\n @if (isGroupConversation()) {\n <section class=\"tg-section tg-members\">\n <div class=\"tg-section-header tg-section-header--row\">\n <span class=\"tg-section-header__title\">{{ membersSectionTitle() }}</span>\n <div class=\"tg-section-header__actions\">\n <button\n type=\"button\"\n class=\"tg-icon-btn\"\n (click)=\"toggleMemberSearch()\"\n [attr.aria-label]=\"'@acorex:chat.info-panel.placeholders.search-members' | translate | async\"\n >\n <i class=\"fa-light fa-magnifying-glass\"></i>\n </button>\n </div>\n </div>\n @if (showMemberSearch()) {\n <div class=\"tg-members-search-wrap\">\n <ax-search-box\n class=\"tg-members-search\"\n [value]=\"memberSearchQuery()\"\n (valueChange)=\"onMemberSearchChange($event)\"\n [placeholder]=\"'@acorex:chat.info-panel.placeholders.search-members' | translate | async\"\n ></ax-search-box>\n </div>\n }\n @for (participant of filteredMembers(); track participant.id) {\n <div class=\"tg-member-row\">\n <ax-conversation-avatar\n kind=\"user\"\n [userId]=\"participant.id\"\n [conversation]=\"conversation\"\n [size]=\"42\"\n />\n <div class=\"tg-member-row__content\">\n <span class=\"tg-member-row__name\">{{ participant.name }}</span>\n <span\n class=\"tg-member-row__meta\"\n [class.tg-member-row__meta--online]=\"participant.status === 'online'\"\n >\n {{ getMemberSubtitle(participant) }}\n </span>\n </div>\n @if (getMemberRoleLabel(participant); as roleLabel) {\n <span class=\"tg-member-row__badge\">{{ roleLabel | translate | async }}</span>\n }\n </div>\n }\n </section>\n }\n }\n\n @if (activeTab() === 'manage') {\n <section class=\"tg-section tg-manage\">\n @if (!isPrivateConversation()) {\n <div class=\"tg-manage-block\">\n <ax-label class=\"tg-manage-label\">{{\n '@acorex:chat.info-panel.group-details.title' | translate | async\n }}</ax-label>\n <ax-text-box\n [value]=\"editTitle\"\n (valueChange)=\"onGroupTitleChange($event)\"\n [placeholder]=\"'@acorex:chat.info-panel.placeholders.enter-group-title' | translate | async\"\n ></ax-text-box>\n <div class=\"tg-manage-avatar\">\n <ax-conversation-avatar-picker\n [(avatarUrl)]=\"editAvatar\"\n (avatarUrlChange)=\"onGroupAvatarChange($event)\"\n ></ax-conversation-avatar-picker>\n </div>\n </div>\n }\n\n <div class=\"tg-setting-row\">\n <div class=\"tg-setting-row__info\">\n <span class=\"tg-setting-row__title\">{{\n '@acorex:chat.info-panel.settings.archived' | translate | async\n }}</span>\n <span class=\"tg-setting-row__desc\">{{\n '@acorex:chat.info-panel.settings.archived-description' | translate | async\n }}</span>\n </div>\n <ax-switch [(ngModel)]=\"archived\" (ngModelChange)=\"onArchivedChange($event)\"></ax-switch>\n </div>\n\n <div class=\"tg-manage-block tg-background-block\">\n <ax-label class=\"tg-manage-label\">{{\n '@acorex:chat.info-panel.background.title' | translate | async\n }}</ax-label>\n <p class=\"tg-background-desc\">\n {{ '@acorex:chat.info-panel.background.description' | translate | async }}\n </p>\n <div class=\"tg-background-grid\">\n @for (preset of backgroundPresets; track preset.id) {\n <button\n type=\"button\"\n class=\"tg-background-swatch\"\n [class.tg-background-swatch--active]=\"isBackgroundSelected(preset.value)\"\n [style.background]=\"preset.value\"\n (click)=\"applyMessageListBackground(preset.value)\"\n [attr.aria-label]=\"getBackgroundAriaLabel(preset.label)\"\n >\n <span class=\"tg-background-swatch__label\">{{ preset.label }}</span>\n </button>\n }\n </div>\n <ax-button\n [text]=\"'@acorex:chat.info-panel.actions.reset-to-default' | translate | async\"\n [look]=\"'ghost'\"\n (onClick)=\"applyMessageListBackground('')\"\n ></ax-button>\n </div>\n </section>\n }\n </div>\n }\n </div>\n }\n `, styles: [\":host{display:block;width:100%;height:100%}.tg-info-panel{display:flex;flex-direction:column;max-height:min(85vh,40rem)}.tg-info-panel__scroll{overflow-y:auto;overscroll-behavior:contain}.tg-hero{display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:1.25rem 1.5rem 1rem;text-align:center}.tg-hero__title{margin:.25rem 0 0;font-size:1.25rem;font-weight:600;line-height:1.35;color:rgb(var(--ax-sys-color-on-surface));word-break:break-word}.tg-hero__subtitle{margin:0;font-size:.875rem;line-height:1.25rem;color:rgb(var(--ax-sys-color-on-surface));opacity:.65}.tg-quick-actions{display:flex;justify-content:center;gap:.35rem;padding:0 .75rem 1rem;flex-wrap:nowrap}.tg-quick-action{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.35rem;flex:1;min-width:0;max-width:5.5rem;padding:.55rem .4rem;border:none;border-radius:.75rem;background:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-primary-500));cursor:pointer;transition:background-color .15s ease}.tg-quick-action:hover{background:rgb(var(--ax-sys-color-border-light-surface))}.tg-quick-action--danger{color:rgb(var(--ax-sys-color-danger-500))}.tg-quick-action--active{background:rgba(var(--ax-sys-color-warning-500),.14);color:rgb(var(--ax-sys-color-warning-500))}.tg-quick-action--active .tg-quick-action__label{color:rgb(var(--ax-sys-color-warning-500));opacity:1}.tg-quick-action__icon{font-size:1.125rem;line-height:1}.tg-quick-action__label{font-size:.6875rem;font-weight:500;line-height:1.1;color:rgb(var(--ax-sys-color-on-surface));opacity:.85;text-align:center}.tg-tabs{display:flex;gap:0;margin:0 .75rem;border-bottom:1px solid rgb(var(--ax-sys-color-border-light-surface))}.tg-tab{flex:1;padding:.65rem .5rem;border:none;border-bottom:2px solid transparent;background:transparent;font-size:.875rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface));opacity:.55;cursor:pointer;transition:opacity .15s ease,color .15s ease,border-color .15s ease}.tg-tab:hover{opacity:.8}.tg-tab--active{opacity:1;color:rgb(var(--ax-sys-color-primary-500));border-bottom-color:rgb(var(--ax-sys-color-primary-500))}.tg-section{// border-top: 1px solid rgb(var(--ax-sys-color-border-light-surface));padding:.25rem 0}.tg-detail-row,.tg-member-row{display:flex;align-items:center;gap:.875rem;padding:.65rem 1rem;min-width:0}.tg-media-row{display:flex;align-items:center;gap:.875rem;width:100%;padding:.7rem 1rem;border:none;background:transparent;text-align:start;cursor:pointer;transition:background-color .15s ease}.tg-media-row:hover{background:rgb(var(--ax-sys-color-lighter-surface))}.tg-media-row__icon{flex-shrink:0;width:1.5rem;text-align:center;color:rgb(var(--ax-sys-color-on-surface));opacity:.75}.tg-media-row__label{flex:1;min-width:0;font-size:.9375rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface))}.tg-media-row__chevron{flex-shrink:0;font-size:.75rem;opacity:.45}.tg-loading{padding:.75rem 1rem 1rem;font-size:.8125rem;color:rgb(var(--ax-sys-color-on-surface));opacity:.6;text-align:center}.tg-detail-row__icon{flex-shrink:0;width:1.5rem;text-align:center;color:rgb(var(--ax-sys-color-primary-500));opacity:.9}.tg-detail-row__content,.tg-member-row__content{flex:1;min-width:0;display:flex;flex-direction:column;gap:.125rem}.tg-detail-row__value,.tg-member-row__name{font-size:.9375rem;font-weight:500;line-height:1.3;color:rgb(var(--ax-sys-color-on-surface));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tg-detail-row__label,.tg-member-row__meta{font-size:.75rem;line-height:1.2;color:rgb(var(--ax-sys-color-on-surface));opacity:.6}.tg-member-row__meta--online{color:rgb(var(--ax-sys-color-primary-500));opacity:1}.tg-section-header{display:flex;flex-direction:column;gap:.5rem;padding:.75rem 1rem .35rem}.tg-section-header--row{flex-direction:row;align-items:center;justify-content:space-between}.tg-section-header__actions{display:flex;align-items:center;gap:.25rem}.tg-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:none;border-radius:999px;background:transparent;color:rgb(var(--ax-sys-color-primary-500));cursor:pointer}.tg-icon-btn:hover{background:rgb(var(--ax-sys-color-lighter-surface))}.tg-members-search-wrap{padding:0 1rem .5rem}.tg-section-header__title{font-size:.75rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:rgb(var(--ax-sys-color-on-surface));opacity:.55}.tg-members-search{width:100%}.tg-member-row__badge{flex-shrink:0;padding:.15rem .5rem;border-radius:999px;font-size:.6875rem;font-weight:600;color:rgb(var(--ax-sys-color-primary-500));background:rgba(var(--ax-sys-color-primary-500),.14)}.tg-manage{padding:.75rem 1rem 1rem;display:flex;flex-direction:column;gap:.75rem}.tg-manage-block{display:flex;flex-direction:column;gap:.5rem}.tg-manage-label{font-size:.8125rem;font-weight:600;color:rgb(var(--ax-sys-color-on-surface))}.tg-setting-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.5rem 0}.tg-setting-row__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:.125rem}.tg-setting-row__title{font-size:.875rem;font-weight:500;color:rgb(var(--ax-sys-color-on-surface))}.tg-setting-row__desc{font-size:.75rem;color:rgb(var(--ax-sys-color-on-surface));opacity:.65}.tg-background-desc{margin:0;font-size:.75rem;opacity:.7}.tg-background-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.5rem}.tg-background-swatch{position:relative;height:2.75rem;border-radius:.5rem;border:2px solid transparent;cursor:pointer;overflow:hidden}.tg-background-swatch--active{border-color:rgb(var(--ax-sys-color-primary-500))}.tg-background-swatch__label{position:absolute;inset-inline-start:.35rem;bottom:.2rem;font-size:.65rem;letter-spacing:.1rem;font-weight:300;mix-blend-mode:difference;color:#fff}.tg-danger{padding:.25rem 0 .75rem}.tg-danger-row{display:flex;align-items:center;gap:.75rem;width:100%;padding:.75rem 1rem;border:none;background:transparent;font-size:.9375rem;font-weight:500;color:rgb(var(--ax-sys-color-danger-500));cursor:pointer;text-align:start}.tg-danger-row:hover{background:rgba(var(--ax-sys-color-danger-500),.06)}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uLWluZm8tcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9jb252ZXJzYXRpb24vc3JjL2xpYi9wbHVnaW5zL2luZm8tYmFyL2NvbXBvbmVudHMvY29udmVyc2F0aW9uLWluZm8tcGFuZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFHTixNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsbUNBQW1DLEVBQUUsTUFBTSxvREFBb0Qs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LFdBQVcsK1ZBQ1gsaUJBQWlCLDBVQUNqQixpQkFBaUIsK0JBQ2pCLGdCQUFnQiwrR0FDaEIsb0JBQW9CLG9XQUNwQixjQUFjLG1TQUNkLGtCQUFrQixrYUFDbEIsbUNBQW1DLG9LQUNuQyw2QkFBNkIsMEtBQzdCLDhDQUE4Qyx5SUFDOUMsbUJBQW1COzsyRkF3bUJWLGdDQUFnQztrQkF2bkI1QyxTQUFTOytCQUNFLDRCQUE0QixtQkFDckIsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsaUJBQWlCO3dCQUNqQixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsbUNBQW1DO3dCQUNuQyw2QkFBNkI7d0JBQzdCLDhDQUE4Qzt3QkFDOUMsbUJBQW1CO3FCQUNwQixhQUNVO3dCQUNULEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsa0NBQWtDLEVBQUU7cUJBQ2hGLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd01UIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb252ZXJzYXRpb24gSW5mbyBQYW5lbCDigJQgVGVsZWdyYW0taW5zcGlyZWQgcHJvZmlsZSAvIGdyb3VwIGRldGFpbHMgc2hlZXQuXG4gKi9cblxuaW1wb3J0IHsgQVhDbG9zYWJsZUNvbXBvbmVudCwgQVhDb21wb25lbnRDbG9zZUV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYTGFiZWxDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbGFiZWwnO1xuaW1wb3J0IHsgQVhTZWFyY2hCb3hDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvc2VhcmNoLWJveCc7XG5pbXBvcnQgeyBBWFN3aXRjaE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zd2l0Y2gnO1xuaW1wb3J0IHsgQVhUZXh0Qm94Q29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RleHQtYm94JztcbmltcG9ydCB7IEFYVG9hc3RTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RvYXN0JztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25Nb2R1bGUsIEFYVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBWENvbnZlcnNhdGlvbkF2YXRhclBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvc2hhcmVkL2F2YXRhci1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYQ29udmVyc2F0aW9uQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9zaGFyZWQvY29udmVyc2F0aW9uLWF2YXRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhDb252ZXJzYXRpb25SZWdpc3RyeUNvbXBvbmVudE91dGxldENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvc2hhcmVkL3JlZ2lzdHJ5LWNvbXBvbmVudC1vdXRsZXQuY29tcG9uZW50JztcbmltcG9ydCB0eXBlIHsgQVhDb252ZXJzYXRpb24sIEFYQ29udmVyc2F0aW9uTWVzc2FnZSwgQVhDb252ZXJzYXRpb25QYXJ0aWNpcGFudCB9IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBBWENvbnZlcnNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb252ZXJzYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBBWENvbnZlcnNhdGlvbk1lc3NhZ2VVdGlsc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQge1xuICBmZXRjaEFsbENvbnZlcnNhdGlvbk1lc3NhZ2VzLFxuICBnZXRDb252ZXJzYXRpb25NZWRpYUNhdGVnb3JpZXMsXG4gIGdldENvbnZlcnNhdGlvblByb2ZpbGVGaWVsZHMsXG4gIHR5cGUgQVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5LFxufSBmcm9tICcuL2NvbnZlcnNhdGlvbi1pbmZvLXBhbmVsLnV0aWxzJztcblxuaW50ZXJmYWNlIEFYSW5mb1BhbmVsUXVpY2tBY3Rpb24ge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbEtleTogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG4gIGRhbmdlcj86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWNvbnZlcnNhdGlvbi1pbmZvLXBhbmVsJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQVhCdXR0b25Db21wb25lbnQsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhMYWJlbENvbXBvbmVudCxcbiAgICBBWFNlYXJjaEJveENvbXBvbmVudCxcbiAgICBBWFN3aXRjaE1vZHVsZSxcbiAgICBBWFRleHRCb3hDb21wb25lbnQsXG4gICAgQVhDb252ZXJzYXRpb25BdmF0YXJQaWNrZXJDb21wb25lbnQsXG4gICAgQVhDb252ZXJzYXRpb25BdmF0YXJDb21wb25lbnQsXG4gICAgQVhDb252ZXJzYXRpb25SZWdpc3RyeUNvbXBvbmVudE91dGxldENvbXBvbmVudCxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7IHByb3ZpZGU6IEFYQ2xvc2FibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWENvbnZlcnNhdGlvbkluZm9QYW5lbENvbXBvbmVudCB9LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIEBpZiAoY29udmVyc2F0aW9uKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidGctaW5mby1wYW5lbFwiPlxuICAgICAgICBAaWYgKHBhbmVsVmlldygpID09PSAnbWVkaWEnICYmIHNlbGVjdGVkTWVkaWFDYXRlZ29yeSgpOyBhcyBjYXRlZ29yeSkge1xuICAgICAgICAgIDxheC1jb252ZXJzYXRpb24tcmVnaXN0cnktY29tcG9uZW50LW91dGxldFxuICAgICAgICAgICAgW2NvbXBvbmVudExvYWRlcl09XCJtZWRpYVZpZXdMb2FkZXJcIlxuICAgICAgICAgICAgW2lucHV0c109XCJnZXRNZWRpYVZpZXdJbnB1dHMoY2F0ZWdvcnkpXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGctaW5mby1wYW5lbF9fc2Nyb2xsXCI+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInRnLWhlcm9cIj5cbiAgICAgICAgICAgICAgPGF4LWNvbnZlcnNhdGlvbi1hdmF0YXIga2luZD1cImF1dG9cIiBbY29udmVyc2F0aW9uXT1cImNvbnZlcnNhdGlvblwiIFtzaXplXT1cIjk2XCIgLz5cbiAgICAgICAgICAgICAgPGgyIGNsYXNzPVwidGctaGVyb19fdGl0bGVcIj57eyBjb252ZXJzYXRpb24udGl0bGUgfX08L2gyPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cInRnLWhlcm9fX3N1YnRpdGxlXCI+e3sgaGVyb1N1YnRpdGxlKCkgfX08L3A+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwidGctcXVpY2stYWN0aW9uc1wiPlxuICAgICAgICAgICAgICBAZm9yIChhY3Rpb24gb2YgcXVpY2tBY3Rpb25zKCk7IHRyYWNrIGFjdGlvbi5pZCkge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0Zy1xdWljay1hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnRnLXF1aWNrLWFjdGlvbi0tZGFuZ2VyXT1cImFjdGlvbi5kYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLnRnLXF1aWNrLWFjdGlvbi0tYWN0aXZlXT1cImFjdGlvbi5pZCA9PT0gJ211dGUnICYmIGlzQ29udmVyc2F0aW9uTXV0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25RdWlja0FjdGlvbihhY3Rpb24uaWQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnLXF1aWNrLWFjdGlvbl9faWNvblwiPjxpIFtjbGFzc109XCJhY3Rpb24uaWNvblwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnLXF1aWNrLWFjdGlvbl9fbGFiZWxcIj57eyBhY3Rpb24ubGFiZWxLZXkgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgICA8bmF2IGNsYXNzPVwidGctdGFic1wiIHJvbGU9XCJ0YWJsaXN0XCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRnLXRhYlwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInRhYlwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnRnLXRhYi0tYWN0aXZlXT1cImFjdGl2ZVRhYigpID09PSAncHJvZmlsZSdcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiYWN0aXZlVGFiKCkgPT09ICdwcm9maWxlJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEFjdGl2ZVRhYigncHJvZmlsZScpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC50YWJzLnByb2ZpbGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRnLXRhYlwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInRhYlwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnRnLXRhYi0tYWN0aXZlXT1cImFjdGl2ZVRhYigpID09PSAnbWFuYWdlJ1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJhY3RpdmVUYWIoKSA9PT0gJ21hbmFnZSdcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVUYWIoJ21hbmFnZScpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC50YWJzLm1hbmFnZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmF2PlxuXG4gICAgICAgICAgICBAaWYgKGFjdGl2ZVRhYigpID09PSAncHJvZmlsZScpIHtcbiAgICAgICAgICAgICAgQGlmIChwcm9maWxlRmllbGRzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInRnLXNlY3Rpb24gdGctZGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGZpZWxkIG9mIHByb2ZpbGVGaWVsZHMoKTsgdHJhY2sgZmllbGQuaWQpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Zy1kZXRhaWwtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGctZGV0YWlsLXJvd19faWNvblwiPjxpIFtjbGFzc109XCJmaWVsZC5pY29uXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnLWRldGFpbC1yb3dfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnLWRldGFpbC1yb3dfX3ZhbHVlXCI+e3sgZmllbGQudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Zy1kZXRhaWwtcm93X19sYWJlbFwiPnt7IGZpZWxkLmxhYmVsS2V5IHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAobG9hZGluZ01lc3NhZ2VzKCkpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnLWxvYWRpbmdcIj57eyAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwubWVkaWEubG9hZGluZycgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAobWVkaWFDYXRlZ29yaWVzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInRnLXNlY3Rpb24gdGctbWVkaWFcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChjYXRlZ29yeSBvZiBtZWRpYUNhdGVnb3JpZXMoKTsgdHJhY2sgY2F0ZWdvcnkuaWQpIHtcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidGctbWVkaWEtcm93XCIgKGNsaWNrKT1cIm9wZW5NZWRpYUNhdGVnb3J5KGNhdGVnb3J5KVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnLW1lZGlhLXJvd19faWNvblwiPjxpIFtjbGFzc109XCJjYXRlZ29yeS5pY29uXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Zy1tZWRpYS1yb3dfX2xhYmVsXCI+e3sgZ2V0TWVkaWFSb3dMYWJlbChjYXRlZ29yeSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtY2hldnJvbi1yaWdodCB0Zy1tZWRpYS1yb3dfX2NoZXZyb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChpc0dyb3VwQ29udmVyc2F0aW9uKCkpIHtcbiAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJ0Zy1zZWN0aW9uIHRnLW1lbWJlcnNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGctc2VjdGlvbi1oZWFkZXIgdGctc2VjdGlvbi1oZWFkZXItLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Zy1zZWN0aW9uLWhlYWRlcl9fdGl0bGVcIj57eyBtZW1iZXJzU2VjdGlvblRpdGxlKCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGctc2VjdGlvbi1oZWFkZXJfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGctaWNvbi1idG5cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNZW1iZXJTZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQGFjb3JleDpjaGF0LmluZm8tcGFuZWwucGxhY2Vob2xkZXJzLnNlYXJjaC1tZW1iZXJzJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtbWFnbmlmeWluZy1nbGFzc1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dNZW1iZXJTZWFyY2goKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnLW1lbWJlcnMtc2VhcmNoLXdyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGF4LXNlYXJjaC1ib3hcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRnLW1lbWJlcnMtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibWVtYmVyU2VhcmNoUXVlcnkoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uTWVtYmVyU2VhcmNoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQGFjb3JleDpjaGF0LmluZm8tcGFuZWwucGxhY2Vob2xkZXJzLnNlYXJjaC1tZW1iZXJzJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXgtc2VhcmNoLWJveD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZm9yIChwYXJ0aWNpcGFudCBvZiBmaWx0ZXJlZE1lbWJlcnMoKTsgdHJhY2sgcGFydGljaXBhbnQuaWQpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Zy1tZW1iZXItcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxheC1jb252ZXJzYXRpb24tYXZhdGFyXG4gICAgICAgICAgICAgICAgICAgICAga2luZD1cInVzZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFt1c2VySWRdPVwicGFydGljaXBhbnQuaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb252ZXJzYXRpb25dPVwiY29udmVyc2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2l6ZV09XCI0MlwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Zy1tZW1iZXItcm93X19jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Zy1tZW1iZXItcm93X19uYW1lXCI+e3sgcGFydGljaXBhbnQubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0Zy1tZW1iZXItcm93X19tZXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50Zy1tZW1iZXItcm93X19tZXRhLS1vbmxpbmVdPVwicGFydGljaXBhbnQuc3RhdHVzID09PSAnb25saW5lJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0TWVtYmVyU3VidGl0bGUocGFydGljaXBhbnQpIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChnZXRNZW1iZXJSb2xlTGFiZWwocGFydGljaXBhbnQpOyBhcyByb2xlTGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnLW1lbWJlci1yb3dfX2JhZGdlXCI+e3sgcm9sZUxhYmVsIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGFjdGl2ZVRhYigpID09PSAnbWFuYWdlJykge1xuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInRnLXNlY3Rpb24gdGctbWFuYWdlXCI+XG4gICAgICAgICAgICAgICAgQGlmICghaXNQcml2YXRlQ29udmVyc2F0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Zy1tYW5hZ2UtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWxhYmVsIGNsYXNzPVwidGctbWFuYWdlLWxhYmVsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwuZ3JvdXAtZGV0YWlscy50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICB9fTwvYXgtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxheC10ZXh0LWJveFxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJlZGl0VGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkdyb3VwVGl0bGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5wbGFjZWhvbGRlcnMuZW50ZXItZ3JvdXAtdGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICA+PC9heC10ZXh0LWJveD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnLW1hbmFnZS1hdmF0YXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YXgtY29udmVyc2F0aW9uLWF2YXRhci1waWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsoYXZhdGFyVXJsKV09XCJlZGl0QXZhdGFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChhdmF0YXJVcmxDaGFuZ2UpPVwib25Hcm91cEF2YXRhckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9heC1jb252ZXJzYXRpb24tYXZhdGFyLXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGctc2V0dGluZy1yb3dcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Zy1zZXR0aW5nLXJvd19faW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnLXNldHRpbmctcm93X190aXRsZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnNldHRpbmdzLmFyY2hpdmVkJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnLXNldHRpbmctcm93X19kZXNjXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwuc2V0dGluZ3MuYXJjaGl2ZWQtZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxheC1zd2l0Y2ggWyhuZ01vZGVsKV09XCJhcmNoaXZlZFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uQXJjaGl2ZWRDaGFuZ2UoJGV2ZW50KVwiPjwvYXgtc3dpdGNoPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnLW1hbmFnZS1ibG9jayB0Zy1iYWNrZ3JvdW5kLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICA8YXgtbGFiZWwgY2xhc3M9XCJ0Zy1tYW5hZ2UtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwuYmFja2dyb3VuZC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgfX08L2F4LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0Zy1iYWNrZ3JvdW5kLWRlc2NcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLmJhY2tncm91bmQuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Zy1iYWNrZ3JvdW5kLWdyaWRcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAocHJlc2V0IG9mIGJhY2tncm91bmRQcmVzZXRzOyB0cmFjayBwcmVzZXQuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGctYmFja2dyb3VuZC1zd2F0Y2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRnLWJhY2tncm91bmQtc3dhdGNoLS1hY3RpdmVdPVwiaXNCYWNrZ3JvdW5kU2VsZWN0ZWQocHJlc2V0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJwcmVzZXQudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5TWVzc2FnZUxpc3RCYWNrZ3JvdW5kKHByZXNldC52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRCYWNrZ3JvdW5kQXJpYUxhYmVsKHByZXNldC5sYWJlbClcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGctYmFja2dyb3VuZC1zd2F0Y2hfX2xhYmVsXCI+e3sgcHJlc2V0LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLmFjdGlvbnMucmVzZXQtdG8tZGVmYXVsdCcgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIFtsb29rXT1cIidnaG9zdCdcIlxuICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJhcHBseU1lc3NhZ2VMaXN0QmFja2dyb3VuZCgnJylcIlxuICAgICAgICAgICAgICAgICAgPjwvYXgtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLnRnLWluZm8tcGFuZWwge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBtYXgtaGVpZ2h0OiBtaW4oODV2aCwgNDByZW0pO1xuICAgICAgfVxuXG4gICAgICAudGctaW5mby1wYW5lbF9fc2Nyb2xsIHtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjtcbiAgICAgIH1cblxuICAgICAgLnRnLWhlcm8ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgICAgcGFkZGluZzogMS4yNXJlbSAxLjVyZW0gMXJlbTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAudGctaGVyb19fdGl0bGUge1xuICAgICAgICBtYXJnaW46IDAuMjVyZW0gMCAwO1xuICAgICAgICBmb250LXNpemU6IDEuMjVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM1O1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1vbi1zdXJmYWNlKSk7XG4gICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gICAgICB9XG5cbiAgICAgIC50Zy1oZXJvX19zdWJ0aXRsZSB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjVyZW07XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLW9uLXN1cmZhY2UpKTtcbiAgICAgICAgb3BhY2l0eTogMC42NTtcbiAgICAgIH1cblxuICAgICAgLnRnLXF1aWNrLWFjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjM1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuNzVyZW0gMXJlbTtcbiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC50Zy1xdWljay1hY3Rpb24ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjM1cmVtO1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG1heC13aWR0aDogNS41cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjU1cmVtIDAuNHJlbTtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLWxpZ2h0ZXItc3VyZmFjZSkpO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LTUwMCkpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLnRnLXF1aWNrLWFjdGlvbjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItYm9yZGVyLWxpZ2h0LXN1cmZhY2UpKTtcbiAgICAgIH1cblxuICAgICAgLnRnLXF1aWNrLWFjdGlvbi0tZGFuZ2VyIHtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItZGFuZ2VyLTUwMCkpO1xuICAgICAgfVxuXG4gICAgICAudGctcXVpY2stYWN0aW9uLS1hY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWF4LXN5cy1jb2xvci13YXJuaW5nLTUwMCksIDAuMTQpO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci13YXJuaW5nLTUwMCkpO1xuICAgICAgfVxuXG4gICAgICAudGctcXVpY2stYWN0aW9uLS1hY3RpdmUgLnRnLXF1aWNrLWFjdGlvbl9fbGFiZWwge1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci13YXJuaW5nLTUwMCkpO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICAudGctcXVpY2stYWN0aW9uX19pY29uIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjEyNXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICB9XG5cbiAgICAgIC50Zy1xdWljay1hY3Rpb25fX2xhYmVsIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLW9uLXN1cmZhY2UpKTtcbiAgICAgICAgb3BhY2l0eTogMC44NTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAudGctdGFicyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMDtcbiAgICAgICAgbWFyZ2luOiAwIDAuNzVyZW07XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLWJvcmRlci1saWdodC1zdXJmYWNlKSk7XG4gICAgICB9XG5cbiAgICAgIC50Zy10YWIge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBwYWRkaW5nOiAwLjY1cmVtIDAuNXJlbTtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1vbi1zdXJmYWNlKSk7XG4gICAgICAgIG9wYWNpdHk6IDAuNTU7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICBvcGFjaXR5IDAuMTVzIGVhc2UsXG4gICAgICAgICAgY29sb3IgMC4xNXMgZWFzZSxcbiAgICAgICAgICBib3JkZXItY29sb3IgMC4xNXMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLnRnLXRhYjpob3ZlciB7XG4gICAgICAgIG9wYWNpdHk6IDAuODtcbiAgICAgIH1cblxuICAgICAgLnRnLXRhYi0tYWN0aXZlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS01MDApKTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LTUwMCkpO1xuICAgICAgfVxuXG4gICAgICAudGctc2VjdGlvbiB7XG4gICAgICAgIC8vIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLWJvcmRlci1saWdodC1zdXJmYWNlKSk7XG4gICAgICAgIHBhZGRpbmc6IDAuMjVyZW0gMDtcbiAgICAgIH1cblxuICAgICAgLnRnLWRldGFpbC1yb3csXG4gICAgICAudGctbWVtYmVyLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMC44NzVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNjVyZW0gMXJlbTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAudGctbWVkaWEtcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjg3NXJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICB0ZXh0LWFsaWduOiBzdGFydDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC50Zy1tZWRpYS1yb3c6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLWxpZ2h0ZXItc3VyZmFjZSkpO1xuICAgICAgfVxuXG4gICAgICAudGctbWVkaWEtcm93X19pY29uIHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIHdpZHRoOiAxLjVyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3Itb24tc3VyZmFjZSkpO1xuICAgICAgICBvcGFjaXR5OiAwLjc1O1xuICAgICAgfVxuXG4gICAgICAudGctbWVkaWEtcm93X19sYWJlbCB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLW9uLXN1cmZhY2UpKTtcbiAgICAgIH1cblxuICAgICAgLnRnLW1lZGlhLXJvd19fY2hldnJvbiB7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICAgIG9wYWNpdHk6IDAuNDU7XG4gICAgICB9XG5cbiAgICAgIC50Zy1sb2FkaW5nIHtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbSAxcmVtIDFyZW07XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1vbi1zdXJmYWNlKSk7XG4gICAgICAgIG9wYWNpdHk6IDAuNjtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAudGctZGV0YWlsLXJvd19faWNvbiB7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgICB3aWR0aDogMS41cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktNTAwKSk7XG4gICAgICAgIG9wYWNpdHk6IDAuOTtcbiAgICAgIH1cblxuICAgICAgLnRnLWRldGFpbC1yb3dfX2NvbnRlbnQsXG4gICAgICAudGctbWVtYmVyLXJvd19fY29udGVudCB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAwLjEyNXJlbTtcbiAgICAgIH1cblxuICAgICAgLnRnLWRldGFpbC1yb3dfX3ZhbHVlLFxuICAgICAgLnRnLW1lbWJlci1yb3dfX25hbWUge1xuICAgICAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMztcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3Itb24tc3VyZmFjZSkpO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLnRnLWRldGFpbC1yb3dfX2xhYmVsLFxuICAgICAgLnRnLW1lbWJlci1yb3dfX21ldGEge1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLW9uLXN1cmZhY2UpKTtcbiAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgfVxuXG4gICAgICAudGctbWVtYmVyLXJvd19fbWV0YS0tb25saW5lIHtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS01MDApKTtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgIH1cblxuICAgICAgLnRnLXNlY3Rpb24taGVhZGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNzVyZW0gMXJlbSAwLjM1cmVtO1xuICAgICAgfVxuXG4gICAgICAudGctc2VjdGlvbi1oZWFkZXItLXJvdyB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIH1cblxuICAgICAgLnRnLXNlY3Rpb24taGVhZGVyX19hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjI1cmVtO1xuICAgICAgfVxuXG4gICAgICAudGctaWNvbi1idG4ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAycmVtO1xuICAgICAgICBoZWlnaHQ6IDJyZW07XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LTUwMCkpO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC50Zy1pY29uLWJ0bjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItbGlnaHRlci1zdXJmYWNlKSk7XG4gICAgICB9XG5cbiAgICAgIC50Zy1tZW1iZXJzLXNlYXJjaC13cmFwIHtcbiAgICAgICAgcGFkZGluZzogMCAxcmVtIDAuNXJlbTtcbiAgICAgIH1cblxuICAgICAgLnRnLXNlY3Rpb24taGVhZGVyX190aXRsZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3Itb24tc3VyZmFjZSkpO1xuICAgICAgICBvcGFjaXR5OiAwLjU1O1xuICAgICAgfVxuXG4gICAgICAudGctbWVtYmVycy1zZWFyY2gge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLnRnLW1lbWJlci1yb3dfX2JhZGdlIHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIHBhZGRpbmc6IDAuMTVyZW0gMC41cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktNTAwKSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktNTAwKSwgMC4xNCk7XG4gICAgICB9XG5cbiAgICAgIC50Zy1tYW5hZ2Uge1xuICAgICAgICBwYWRkaW5nOiAwLjc1cmVtIDFyZW0gMXJlbTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAudGctbWFuYWdlLWJsb2NrIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICB9XG5cbiAgICAgIC50Zy1tYW5hZ2UtbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3Itb24tc3VyZmFjZSkpO1xuICAgICAgfVxuXG4gICAgICAudGctc2V0dGluZy1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGdhcDogMXJlbTtcbiAgICAgICAgcGFkZGluZzogMC41cmVtIDA7XG4gICAgICB9XG5cbiAgICAgIC50Zy1zZXR0aW5nLXJvd19faW5mbyB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAwLjEyNXJlbTtcbiAgICAgIH1cblxuICAgICAgLnRnLXNldHRpbmctcm93X190aXRsZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLW9uLXN1cmZhY2UpKTtcbiAgICAgIH1cblxuICAgICAgLnRnLXNldHRpbmctcm93X19kZXNjIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1vbi1zdXJmYWNlKSk7XG4gICAgICAgIG9wYWNpdHk6IDAuNjU7XG4gICAgICB9XG5cbiAgICAgIC50Zy1iYWNrZ3JvdW5kLWRlc2Mge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgfVxuXG4gICAgICAudGctYmFja2dyb3VuZC1ncmlkIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgbWlubWF4KDAsIDFmcikpO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgIH1cblxuICAgICAgLnRnLWJhY2tncm91bmQtc3dhdGNoIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBoZWlnaHQ6IDIuNzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgLnRnLWJhY2tncm91bmQtc3dhdGNoLS1hY3RpdmUge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS01MDApKTtcbiAgICAgIH1cblxuICAgICAgLnRnLWJhY2tncm91bmQtc3dhdGNoX19sYWJlbCB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQtaW5saW5lLXN0YXJ0OiAwLjM1cmVtO1xuICAgICAgICBib3R0b206IDAuMnJlbTtcbiAgICAgICAgZm9udC1zaXplOiAwLjY1cmVtO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4xcmVtO1xuICAgICAgICBmb250LXdlaWdodDogMzAwO1xuICAgICAgICBtaXgtYmxlbmQtbW9kZTogZGlmZmVyZW5jZTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9XG5cbiAgICAgIC50Zy1kYW5nZXIge1xuICAgICAgICBwYWRkaW5nOiAwLjI1cmVtIDAgMC43NXJlbTtcbiAgICAgIH1cblxuICAgICAgLnRnLWRhbmdlci1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDAuNzVyZW07XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBwYWRkaW5nOiAwLjc1cmVtIDFyZW07XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1kYW5nZXItNTAwKSk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdGV4dC1hbGlnbjogc3RhcnQ7XG4gICAgICB9XG5cbiAgICAgIC50Zy1kYW5nZXItcm93OmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1heC1zeXMtY29sb3ItZGFuZ2VyLTUwMCksIDAuMDYpO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYQ29udmVyc2F0aW9uSW5mb1BhbmVsQ29tcG9uZW50IGV4dGVuZHMgQVhDbG9zYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0b2FzdFNlcnZpY2UgPSBpbmplY3QoQVhUb2FzdFNlcnZpY2UpO1xuICByZWFkb25seSB0cmFuc2xhdGlvbiA9IGluamVjdChBWFRyYW5zbGF0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0ZWRDb252ZXJzYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYQ29udmVyc2F0aW9uU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBvbkNsb3NlZCA9IG91dHB1dDxBWENvbXBvbmVudENsb3NlRXZlbnQ+KCk7XG5cbiAgY29udmVyc2F0aW9uITogQVhDb252ZXJzYXRpb247XG4gIGNvbnZlcnNhdGlvblNlcnZpY2UhOiBBWENvbnZlcnNhdGlvblNlcnZpY2U7XG5cbiAgcmVhZG9ubHkgYWN0aXZlVGFiID0gc2lnbmFsPCdwcm9maWxlJyB8ICdtYW5hZ2UnPigncHJvZmlsZScpO1xuICByZWFkb25seSBzaG93TWVtYmVyU2VhcmNoID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgcGFuZWxWaWV3ID0gc2lnbmFsPCdtYWluJyB8ICdtZWRpYSc+KCdtYWluJyk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkTWVkaWFDYXRlZ29yeSA9IHNpZ25hbDxBWENvbnZlcnNhdGlvbk1lZGlhQ2F0ZWdvcnkgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgbWVkaWFWaWV3TG9hZGVyID0gKCkgPT5cbiAgICBpbXBvcnQoJy4vY29udmVyc2F0aW9uLWluZm8tbWVkaWEtdmlldy5jb21wb25lbnQnKS50aGVuKChtKSA9PiBtLkFYQ29udmVyc2F0aW9uSW5mb01lZGlhVmlld0NvbXBvbmVudCk7XG4gIHJlYWRvbmx5IGNvbnZlcnNhdGlvbk1lc3NhZ2VzID0gc2lnbmFsPEFYQ29udmVyc2F0aW9uTWVzc2FnZVtdPihbXSk7XG4gIHJlYWRvbmx5IGxvYWRpbmdNZXNzYWdlcyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IG1lbWJlclNlYXJjaFF1ZXJ5ID0gc2lnbmFsKCcnKTtcblxuICBhcmNoaXZlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgaW5pdGlhbE5vdGlmaWNhdGlvbnMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbml0aWFsQXJjaGl2ZWQgPSBmYWxzZTtcblxuICBlZGl0VGl0bGUgPSAnJztcbiAgZWRpdEF2YXRhciA9ICcnO1xuXG4gIHByaXZhdGUgZ3JvdXBUaXRsZVNhdmVUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgZ3JvdXBEZXRhaWxzU2F2ZUluRmxpZ2h0ID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgYmFja2dyb3VuZFByZXNldHM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9PiA9IFtcbiAgICB7XG4gICAgICBpZDogJ3NvbGlkLWRlZmF1bHQnLFxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwuYmFja2dyb3VuZC5wcmVzZXRzLmRlZmF1bHQnKSxcbiAgICAgIHZhbHVlOiAncmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LWxpZ2h0ZXN0LXN1cmZhY2UpKScsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ3NvbGlkLWdyYXBoaXRlJyxcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLmJhY2tncm91bmQucHJlc2V0cy5ncmFwaGl0ZScpLFxuICAgICAgdmFsdWU6ICdyZ2IodmFyKC0tYXgtc3lzLWNvbG9yLWxpZ2h0ZXItc3VyZmFjZSkpJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnc29saWQtb2xpdmUnLFxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwuYmFja2dyb3VuZC5wcmVzZXRzLm9saXZlJyksXG4gICAgICB2YWx1ZTogJ3JnYmEoMTMyLCAxNDQsIDg4LCAwLjI0KScsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ3NvbGlkLXNreScsXG4gICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5iYWNrZ3JvdW5kLnByZXNldHMuc2t5JyksXG4gICAgICB2YWx1ZTogJ3JnYmEoNTYsIDE4OSwgMjQ4LCAwLjIpJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnZ3JhZC1hdXJvcmEnLFxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwuYmFja2dyb3VuZC5wcmVzZXRzLmF1cm9yYScpLFxuICAgICAgdmFsdWU6ICdsaW5lYXItZ3JhZGllbnQoMTQwZGVnLCAjNjBhNWZhIDAlLCAjYTc4YmZhIDU1JSwgI2Y0NzJiNiAxMDAlKScsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ2dyYWQtc3Vuc2V0JyxcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLmJhY2tncm91bmQucHJlc2V0cy5zdW5zZXQnKSxcbiAgICAgIHZhbHVlOiAnbGluZWFyLWdyYWRpZW50KDE0MGRlZywgcmdiYSgyNTEsIDExMywgMTMzLCAwLjM0KSAwJSwgcmdiYSgyNTEsIDE5MSwgMzYsIDAuMzIpIDEwMCUpJyxcbiAgICB9LFxuICBdO1xuXG4gIHJlYWRvbmx5IGhlcm9TdWJ0aXRsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSB0aGlzLmxpdmVDb252ZXJzYXRpb24oKTtcbiAgICBpZiAoIWNvbnZlcnNhdGlvbikgcmV0dXJuICcnO1xuICAgIHJldHVybiBBWENvbnZlcnNhdGlvbk1lc3NhZ2VVdGlsc1NlcnZpY2UuZ2V0Q29udmVyc2F0aW9uU3VidGl0bGUoY29udmVyc2F0aW9uKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbGl2ZUNvbnZlcnNhdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSB0aGlzLmNvbnZlcnNhdGlvbjtcbiAgICBpZiAoIWNvbnZlcnNhdGlvbj8uaWQpIHJldHVybiBjb252ZXJzYXRpb247XG4gICAgY29uc3QgZnJvbVN0b3JlID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlPy5jb252ZXJzYXRpb25zKCkuZmluZCgoYykgPT4gYy5pZCA9PT0gY29udmVyc2F0aW9uLmlkKTtcbiAgICByZXR1cm4gZnJvbVN0b3JlID8/IGNvbnZlcnNhdGlvbjtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaXNDb252ZXJzYXRpb25NdXRlZCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMubGl2ZUNvbnZlcnNhdGlvbigpPy5zZXR0aW5ncz8ubm90aWZpY2F0aW9ucyA9PT0gZmFsc2UsXG4gICk7XG5cbiAgcmVhZG9ubHkgcHJvZmlsZUZpZWxkcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSB0aGlzLmxpdmVDb252ZXJzYXRpb24oKTtcbiAgICBpZiAoIWNvbnZlcnNhdGlvbikgcmV0dXJuIFtdO1xuICAgIHJldHVybiBnZXRDb252ZXJzYXRpb25Qcm9maWxlRmllbGRzKGNvbnZlcnNhdGlvbiwgdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlPy5jdXJyZW50VXNlcigpPy5pZCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IG1lZGlhQ2F0ZWdvcmllcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGdldENvbnZlcnNhdGlvbk1lZGlhQ2F0ZWdvcmllcyh0aGlzLmNvbnZlcnNhdGlvbk1lc3NhZ2VzKCkpO1xuICB9KTtcblxuICByZWFkb25seSBxdWlja0FjdGlvbnMgPSBjb21wdXRlZCgoKTogQVhJbmZvUGFuZWxRdWlja0FjdGlvbltdID0+IHtcbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uKSByZXR1cm4gW107XG4gICAgY29uc3QgbXV0ZWQgPSB0aGlzLmlzQ29udmVyc2F0aW9uTXV0ZWQoKTtcbiAgICBjb25zdCBhY3Rpb25zOiBBWEluZm9QYW5lbFF1aWNrQWN0aW9uW10gPSBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnbXV0ZScsXG4gICAgICAgIGxhYmVsS2V5OiBtdXRlZCA/ICdAYWNvcmV4OmNoYXQuYWN0aW9ucy51bm11dGUnIDogJ0BhY29yZXg6Y2hhdC5hY3Rpb25zLm11dGUnLFxuICAgICAgICBpY29uOiBtdXRlZCA/ICdmYS1saWdodCBmYS1iZWxsLXNsYXNoJyA6ICdmYS1saWdodCBmYS1iZWxsJyxcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGlmICghdGhpcy5pc1ByaXZhdGVDb252ZXJzYXRpb24oKSkge1xuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgaWQ6ICdsZWF2ZScsXG4gICAgICAgIGxhYmVsS2V5OiAnQGFjb3JleDpjaGF0LmFjdGlvbnMubGVhdmUtYW5kLWRlbGV0ZScsXG4gICAgICAgIGljb246ICdmYS1saWdodCBmYS1kb29yLW9wZW4nLFxuICAgICAgICBkYW5nZXI6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZmlsdGVyZWRNZW1iZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5jb252ZXJzYXRpb24pIHJldHVybiBbXTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMubWVtYmVyU2VhcmNoUXVlcnkoKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBjb25zdCBtZW1iZXJzID0gdGhpcy5jb252ZXJzYXRpb24/LnBhcnRpY2lwYW50cyA/PyBbXTtcbiAgICBpZiAoIXF1ZXJ5KSByZXR1cm4gbWVtYmVycztcbiAgICByZXR1cm4gbWVtYmVycy5maWx0ZXIoXG4gICAgICAocCkgPT5cbiAgICAgICAgcC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpIHx8XG4gICAgICAgIChwLmRlc2NyaXB0aW9uID8/ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSB8fFxuICAgICAgICAocC5yb2xlID8/ICcnKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSxcbiAgICApO1xuICB9KTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCByZXNvbHZlZFNlcnZpY2UgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UgPz8gdGhpcy5pbmplY3RlZENvbnZlcnNhdGlvblNlcnZpY2U7XG4gICAgaWYgKCFyZXNvbHZlZFNlcnZpY2UpIHtcbiAgICAgIGNvbnNvbGUud2FybignQVhDb252ZXJzYXRpb25JbmZvUGFuZWxDb21wb25lbnQgb3BlbmVkIHdpdGhvdXQgY29udmVyc2F0aW9uU2VydmljZS4nKTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlID0gcmVzb2x2ZWRTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbikge1xuICAgICAgY29uc3QgYWN0aXZlQ29udmVyc2F0aW9uID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmFjdGl2ZUNvbnZlcnNhdGlvbigpO1xuICAgICAgaWYgKGFjdGl2ZUNvbnZlcnNhdGlvbikge1xuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbiA9IGFjdGl2ZUNvbnZlcnNhdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQVhDb252ZXJzYXRpb25JbmZvUGFuZWxDb21wb25lbnQgb3BlbmVkIHdpdGhvdXQgY29udmVyc2F0aW9uIGNvbnRleHQuJyk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbE5vdGlmaWNhdGlvbnMgPSB0aGlzLmNvbnZlcnNhdGlvbi5zZXR0aW5ncz8ubm90aWZpY2F0aW9ucyA/PyB0cnVlO1xuICAgIHRoaXMuYXJjaGl2ZWQgPSB0aGlzLmNvbnZlcnNhdGlvbi5hcmNoaXZlZCA/PyBmYWxzZTtcblxuICAgIHRoaXMuaW5pdGlhbEFyY2hpdmVkID0gdGhpcy5hcmNoaXZlZDtcblxuICAgIHRoaXMuZWRpdFRpdGxlID0gdGhpcy5jb252ZXJzYXRpb24udGl0bGUgfHwgJyc7XG4gICAgdGhpcy5lZGl0QXZhdGFyID0gdGhpcy5jb252ZXJzYXRpb24uYXZhdGFyIHx8ICcnO1xuXG4gICAgdm9pZCB0aGlzLmxvYWRDb252ZXJzYXRpb25NZXNzYWdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkQ29udmVyc2F0aW9uTWVzc2FnZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2FkaW5nTWVzc2FnZXMuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmFjdGl2ZUNvbnZlcnNhdGlvbklkKCkgPT09IHRoaXMuY29udmVyc2F0aW9uLmlkKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU1lc3NhZ2VzID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmFjdGl2ZU1lc3NhZ2VzKCk7XG4gICAgICAgIGlmIChhY3RpdmVNZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5jb252ZXJzYXRpb25NZXNzYWdlcy5zZXQoYWN0aXZlTWVzc2FnZXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgZmV0Y2hBbGxDb252ZXJzYXRpb25NZXNzYWdlcyhcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLm1lc3NhZ2VBcGksXG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uLmlkLFxuICAgICAgICAzMCxcbiAgICAgICk7XG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbk1lc3NhZ2VzLnNldChtZXNzYWdlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGNvbnZlcnNhdGlvbiBtZWRpYSBtZXNzYWdlczonLCBlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZ01lc3NhZ2VzLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgaXNQcml2YXRlQ29udmVyc2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvbi50eXBlID09PSAncHJpdmF0ZSc7XG4gIH1cblxuICBpc0dyb3VwQ29udmVyc2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvbi50eXBlID09PSAnZ3JvdXAnIHx8IHRoaXMuY29udmVyc2F0aW9uLnR5cGUgPT09ICdjaGFubmVsJztcbiAgfVxuXG4gIG1lbWJlcnNTZWN0aW9uVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC50YWJzLm1lbWJlcnMtY291bnQtdXBwZXInLCB7XG4gICAgICBwYXJhbXM6IHsgY291bnQ6IHRoaXMuY29udmVyc2F0aW9uLnBhcnRpY2lwYW50cy5sZW5ndGggfSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldE1lbWJlclJvbGVMYWJlbChwYXJ0aWNpcGFudDogQVhDb252ZXJzYXRpb25QYXJ0aWNpcGFudCk6IHN0cmluZyB8IG51bGwge1xuICAgIHN3aXRjaCAocGFydGljaXBhbnQucm9sZSkge1xuICAgICAgY2FzZSAnYWRtaW4nOlxuICAgICAgICByZXR1cm4gJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lbWJlci1yb2xlLmFkbWluJztcbiAgICAgIGNhc2UgJ21vZGVyYXRvcic6XG4gICAgICAgIHJldHVybiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwubWVtYmVyLXJvbGUubW9kZXJhdG9yJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIG9uTWVtYmVyU2VhcmNoQ2hhbmdlKHZhbHVlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5tZW1iZXJTZWFyY2hRdWVyeS5zZXQodmFsdWUgPz8gJycpO1xuICB9XG5cbiAgc2V0QWN0aXZlVGFiKHRhYjogJ3Byb2ZpbGUnIHwgJ21hbmFnZScpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZVRhYi5zZXQodGFiKTtcbiAgfVxuXG4gIHRvZ2dsZU1lbWJlclNlYXJjaCgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dNZW1iZXJTZWFyY2gudXBkYXRlKCh2YWx1ZSkgPT4gIXZhbHVlKTtcbiAgICBpZiAoIXRoaXMuc2hvd01lbWJlclNlYXJjaCgpKSB7XG4gICAgICB0aGlzLm1lbWJlclNlYXJjaFF1ZXJ5LnNldCgnJyk7XG4gICAgfVxuICB9XG5cbiAgb3Blbk1lZGlhQ2F0ZWdvcnkoY2F0ZWdvcnk6IEFYQ29udmVyc2F0aW9uTWVkaWFDYXRlZ29yeSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRNZWRpYUNhdGVnb3J5LnNldChjYXRlZ29yeSk7XG4gICAgdGhpcy5wYW5lbFZpZXcuc2V0KCdtZWRpYScpO1xuICB9XG5cbiAgY2xvc2VNZWRpYVZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5wYW5lbFZpZXcuc2V0KCdtYWluJyk7XG4gICAgdGhpcy5zZWxlY3RlZE1lZGlhQ2F0ZWdvcnkuc2V0KG51bGwpO1xuICB9XG5cbiAgZ2V0TWVkaWFWaWV3SW5wdXRzKGNhdGVnb3J5OiBBWENvbnZlcnNhdGlvbk1lZGlhQ2F0ZWdvcnkpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZXM6IHRoaXMuY29udmVyc2F0aW9uTWVzc2FnZXMoKSxcbiAgICAgIGNvbnZlcnNhdGlvbjogdGhpcy5jb252ZXJzYXRpb24sXG4gICAgICBjb252ZXJzYXRpb25TZXJ2aWNlOiB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UsXG4gICAgICBvbkJhY2s6ICgpID0+IHRoaXMuY2xvc2VNZWRpYVZpZXcoKSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0TWVkaWFSb3dMYWJlbChjYXRlZ29yeTogQVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKGNhdGVnb3J5LmNvdW50TGFiZWxLZXksIHtcbiAgICAgIHBhcmFtczogeyBjb3VudDogY2F0ZWdvcnkuY291bnQgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGdldE1lbWJlclN1YnRpdGxlKHBhcnRpY2lwYW50OiBBWENvbnZlcnNhdGlvblBhcnRpY2lwYW50KTogc3RyaW5nIHtcbiAgICBpZiAocGFydGljaXBhbnQuc3RhdHVzID09PSAnb25saW5lJykge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LnN0YXR1cy5vbmxpbmUnKTtcbiAgICB9XG4gICAgaWYgKHBhcnRpY2lwYW50LmRlc2NyaXB0aW9uPy50cmltKCkpIHJldHVybiBwYXJ0aWNpcGFudC5kZXNjcmlwdGlvbi50cmltKCk7XG4gICAgaWYgKHBhcnRpY2lwYW50LnJvbGUgJiYgcGFydGljaXBhbnQucm9sZSAhPT0gJ21lbWJlcicpIHJldHVybiBwYXJ0aWNpcGFudC5yb2xlO1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uUXVpY2tBY3Rpb24oYWN0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHN3aXRjaCAoYWN0aW9uSWQpIHtcbiAgICAgIGNhc2UgJ211dGUnOlxuICAgICAgICB2b2lkIHRoaXMudG9nZ2xlQ29udmVyc2F0aW9uTXV0ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xlYXZlJzpcbiAgICAgICAgdm9pZCB0aGlzLm9uTGVhdmUoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdG9nZ2xlQ29udmVyc2F0aW9uTXV0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBub3RpZmljYXRpb25zRW5hYmxlZCA9IHRoaXMubGl2ZUNvbnZlcnNhdGlvbigpPy5zZXR0aW5ncz8ubm90aWZpY2F0aW9ucyA/PyB0cnVlO1xuICAgIGF3YWl0IHRoaXMub25Ob3RpZmljYXRpb25zQ2hhbmdlKCFub3RpZmljYXRpb25zRW5hYmxlZCk7XG4gIH1cblxuICBhc3luYyBvbk5vdGlmaWNhdGlvbnNDaGFuZ2UodmFsdWU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLnVwZGF0ZUNvbnZlcnNhdGlvblNldHRpbmdzKHRoaXMuY29udmVyc2F0aW9uLmlkLCB7XG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IHZhbHVlLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuY29udmVyc2F0aW9uLnNldHRpbmdzID8/IHsgbm90aWZpY2F0aW9uczogdHJ1ZSwgc2hvd1ByZXZpZXc6IHRydWUgfTtcbiAgICAgIHRoaXMuY29udmVyc2F0aW9uLnNldHRpbmdzID0geyAuLi5zZXR0aW5ncywgbm90aWZpY2F0aW9uczogdmFsdWUgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHVwZGF0ZSBub3RpZmljYXRpb25zOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvbkFyY2hpdmVkQ2hhbmdlKHZhbHVlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmFyY2hpdmVkO1xuICAgIHRoaXMuYXJjaGl2ZWQgPSB2YWx1ZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLnVwZGF0ZUNvbnZlcnNhdGlvbih0aGlzLmNvbnZlcnNhdGlvbi5pZCwgeyBhcmNoaXZlZDogdmFsdWUgfSk7XG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbi5hcmNoaXZlZCA9IHZhbHVlO1xuICAgICAgdGhpcy5pbml0aWFsQXJjaGl2ZWQgPSB2YWx1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuYXJjaGl2ZWQgPSBwcmV2aW91cztcbiAgICB9XG4gIH1cblxuICBjbG9zZShkYXRhPzogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IEFYQ29tcG9uZW50Q2xvc2VFdmVudCgpO1xuICAgIGV2ZW50LmNvbXBvbmVudCA9IHRoaXM7XG4gICAgZXZlbnQuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5vbkNsb3NlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGNsb3NlQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIGFzeW5jIG9uTGVhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXNHcm91cCA9IHRoaXMuaXNHcm91cENvbnZlcnNhdGlvbigpO1xuICAgIGF3YWl0IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5kZWxldGVDb252ZXJzYXRpb24odGhpcy5jb252ZXJzYXRpb24uaWQpO1xuXG4gICAgaWYgKHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5hY3RpdmVDb252ZXJzYXRpb24oKT8uaWQgPT09IHRoaXMuY29udmVyc2F0aW9uLmlkKSB7XG4gICAgICB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuY2xvc2VBY3RpdmVDb252ZXJzYXRpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLnRvYXN0U2VydmljZS5zdWNjZXNzKFxuICAgICAgaXNHcm91cFxuICAgICAgICA/IHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwudG9hc3RzLmxlZnQtY29udmVyc2F0aW9uJylcbiAgICAgICAgOiB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnRvYXN0cy5kZWxldGVkLWNvbnZlcnNhdGlvbicpLFxuICAgICk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgb25Hcm91cFRpdGxlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRUaXRsZSA9IHZhbHVlO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmdyb3VwVGl0bGVTYXZlVGltZXIpO1xuICAgIHRoaXMuZ3JvdXBUaXRsZVNhdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdm9pZCB0aGlzLnBlcnNpc3RHcm91cERldGFpbHMoKSwgNDAwKTtcbiAgfVxuXG4gIG9uR3JvdXBBdmF0YXJDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZWRpdEF2YXRhciA9IHZhbHVlO1xuICAgIHZvaWQgdGhpcy5wZXJzaXN0R3JvdXBEZXRhaWxzKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBlcnNpc3RHcm91cERldGFpbHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNQcml2YXRlQ29udmVyc2F0aW9uKCkgfHwgdGhpcy5ncm91cERldGFpbHNTYXZlSW5GbGlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuZWRpdFRpdGxlLnRyaW0oKTtcbiAgICBpZiAoIXRpdGxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEF2YXRhciA9IHRoaXMuZWRpdEF2YXRhci50cmltKCkgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGN1cnJlbnRUaXRsZSA9IHRoaXMuY29udmVyc2F0aW9uLnRpdGxlIHx8ICcnO1xuICAgIGNvbnN0IGN1cnJlbnRBdmF0YXIgPSB0aGlzLmNvbnZlcnNhdGlvbi5hdmF0YXIgfHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRpdGxlID09PSBjdXJyZW50VGl0bGUgJiYgbmV4dEF2YXRhciA9PT0gY3VycmVudEF2YXRhcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZ3JvdXBEZXRhaWxzU2F2ZUluRmxpZ2h0ID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLnVwZGF0ZUNvbnZlcnNhdGlvbih0aGlzLmNvbnZlcnNhdGlvbi5pZCwge1xuICAgICAgICB0aXRsZSxcbiAgICAgICAgYXZhdGFyOiBuZXh0QXZhdGFyLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbi50aXRsZSA9IHRpdGxlO1xuICAgICAgdGhpcy5jb252ZXJzYXRpb24uYXZhdGFyID0gbmV4dEF2YXRhcjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHVwZGF0ZSBncm91cCBkZXRhaWxzOicsIGVycm9yKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcih0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnRvYXN0cy5mYWlsZWQtZ3JvdXAtdXBkYXRlJykpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmdyb3VwRGV0YWlsc1NhdmVJbkZsaWdodCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzQmFja2dyb3VuZFNlbGVjdGVkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBiZyA9IHRoaXMuY29udmVyc2F0aW9uPy5tZXRhZGF0YT8uWydtZXNzYWdlTGlzdEJhY2tncm91bmQnXTtcbiAgICByZXR1cm4gKHR5cGVvZiBiZyA9PT0gJ3N0cmluZycgPyBiZyA6ICcnKSA9PT0gdmFsdWU7XG4gIH1cblxuICBhc3luYyBhcHBseU1lc3NhZ2VMaXN0QmFja2dyb3VuZCh2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgICAgICAuLi4odGhpcy5jb252ZXJzYXRpb24ubWV0YWRhdGEgPz8ge30pLFxuICAgICAgICBtZXNzYWdlTGlzdEJhY2tncm91bmQ6IHZhbHVlLFxuICAgICAgfTtcbiAgICAgIGF3YWl0IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS51cGRhdGVDb252ZXJzYXRpb25NZXRhZGF0YSh0aGlzLmNvbnZlcnNhdGlvbi5pZCwgbWV0YWRhdGEpO1xuICAgICAgdGhpcy5jb252ZXJzYXRpb24ubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MoXG4gICAgICAgIHZhbHVlXG4gICAgICAgICAgPyB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnRvYXN0cy5iYWNrZ3JvdW5kLXVwZGF0ZWQnKVxuICAgICAgICAgIDogdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC50b2FzdHMuYmFja2dyb3VuZC1yZXNldCcpLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHVwZGF0ZSBtZXNzYWdlIGxpc3QgYmFja2dyb3VuZDonLCBlcnJvcik7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIoXG4gICAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwudG9hc3RzLmZhaWxlZC1iYWNrZ3JvdW5kLXVwZGF0ZScpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXRCYWNrZ3JvdW5kQXJpYUxhYmVsKGxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLmJhY2tncm91bmQuc2V0LWxhYmVsJywge1xuICAgICAgcGFyYW1zOiB7IGxhYmVsIH0sXG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ncm91cFRpdGxlU2F2ZVRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5ncm91cFRpdGxlU2F2ZVRpbWVyKTtcbiAgICAgIHRoaXMuZ3JvdXBUaXRsZVNhdmVUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgIHZvaWQgdGhpcy5wZXJzaXN0R3JvdXBEZXRhaWxzKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudE5vdGlmaWNhdGlvbnMgPSB0aGlzLmxpdmVDb252ZXJzYXRpb24oKT8uc2V0dGluZ3M/Lm5vdGlmaWNhdGlvbnMgPz8gdHJ1ZTtcbiAgICBjb25zdCBoYXNDaGFuZ2VzID1cbiAgICAgIGN1cnJlbnROb3RpZmljYXRpb25zICE9PSB0aGlzLmluaXRpYWxOb3RpZmljYXRpb25zIHx8XG4gICAgICB0aGlzLmFyY2hpdmVkICE9PSB0aGlzLmluaXRpYWxBcmNoaXZlZDtcblxuICAgIGlmIChoYXNDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwudG9hc3RzLnNldHRpbmdzLXNhdmVkJykpO1xuICAgIH1cbiAgfVxufVxuIl19"],"names":["i3","i4"],"mappings":"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,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE;AAC9O,YAAY,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,gCAAgC,EAAE;AAC3F,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,+gMAA+gM,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,2CAA2C,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,qDAAqD,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,mCAAmC,EAAE,QAAQ,EAAE,+BAA+B,EAAE,MAAM,EAAE,CAAC,iBAAiB,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,6BAA6B,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,8CAA8C,EAAE,QAAQ,EAAE,2CAA2C,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAEA,IAAE,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAEC,EAAE,CAAC,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC51R;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE,UAAU,EAAE,CAAC;AAC1I,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,4BAA4B,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,OAAO,EAAE;AACvH,wBAAwB,YAAY;AACpC,wBAAwB,WAAW;AACnC,wBAAwB,iBAAiB;AACzC,wBAAwB,iBAAiB;AACzC,wBAAwB,gBAAgB;AACxC,wBAAwB,oBAAoB;AAC5C,wBAAwB,cAAc;AACtC,wBAAwB,kBAAkB;AAC1C,wBAAwB,mCAAmC;AAC3D,wBAAwB,6BAA6B;AACrD,wBAAwB,8CAA8C;AACtE,wBAAwB,mBAAmB;AAC3C,qBAAqB,EAAE,SAAS,EAAE;AAClC,wBAAwB,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,gCAAgC,EAAE;AACvG,qBAAqB,EAAE,QAAQ,EAAE;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,+gMAA+gM,CAAC,EAAE;AAChiM,SAAS,CAAC,EAAE,CAAC;;;;;;;;;"}
@@ -0,0 +1,102 @@
1
+ import { createFileTypeMetadata, AXFileTypeInfoProvider } from '@acorex/core/file';
2
+ import { isPlatformBrowser } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { Injectable } from '@angular/core';
5
+ import { u as AX_CONVERSATION_VIDEO_CATALOG } from './acorex-components-conversation-acorex-components-conversation-CjVDCoJw.mjs';
6
+ import { normalizeVideoPayload } from './acorex-components-conversation-video.payload-DfBEjqQ4.mjs';
7
+ import { f as formatDuration, a as formatFileSize } from './acorex-components-conversation-media-formatters-DV3wEEno.mjs';
8
+
9
+ const MB = 1024 * 1024;
10
+ const AX_CONVERSATION_VIDEO_PRESENTATION = {
11
+ icon: 'fa-light fa-video ax-text-blue-500',
12
+ title: 'Video',
13
+ };
14
+ const AX_CONVERSATION_VIDEO_UTILITY = {
15
+ preview: 'preview',
16
+ duration: 'duration',
17
+ formatSize: 'formatSize',
18
+ formatDuration: 'formatDuration',
19
+ createLocalPreviewUrl: 'createLocalPreviewUrl',
20
+ };
21
+ function blobUrl(ctx, blob) {
22
+ if (!isPlatformBrowser(ctx.platformId)) {
23
+ return '';
24
+ }
25
+ return URL.createObjectURL(blob);
26
+ }
27
+ function mediaDuration(ctx, file, tag) {
28
+ if (!isPlatformBrowser(ctx.platformId)) {
29
+ return Promise.resolve(0);
30
+ }
31
+ return new Promise((resolve, reject) => {
32
+ const el = document.createElement(tag);
33
+ el.preload = 'metadata';
34
+ el.onloadedmetadata = () => {
35
+ URL.revokeObjectURL(el.src);
36
+ resolve(el.duration);
37
+ };
38
+ el.onerror = () => {
39
+ URL.revokeObjectURL(el.src);
40
+ reject(new Error(`Failed to load ${tag} metadata`));
41
+ };
42
+ el.src = URL.createObjectURL(file);
43
+ });
44
+ }
45
+ function conversationVideoUtilities() {
46
+ return {
47
+ [AX_CONVERSATION_VIDEO_UTILITY.preview]: (ctx, file) => ctx.readAsDataUrl(file),
48
+ [AX_CONVERSATION_VIDEO_UTILITY.duration]: (ctx, file) => mediaDuration(ctx, file, 'video'),
49
+ [AX_CONVERSATION_VIDEO_UTILITY.formatSize]: (_ctx, bytes) => formatFileSize(bytes),
50
+ [AX_CONVERSATION_VIDEO_UTILITY.formatDuration]: (_ctx, seconds) => formatDuration(seconds),
51
+ [AX_CONVERSATION_VIDEO_UTILITY.createLocalPreviewUrl]: async (ctx, source) => {
52
+ const blob = source;
53
+ if (blob.type.startsWith('image/')) {
54
+ return ctx.readAsDataUrl(blob);
55
+ }
56
+ return blobUrl(ctx, blob);
57
+ },
58
+ };
59
+ }
60
+ function createConversationVideoFileType() {
61
+ const presentation = AX_CONVERSATION_VIDEO_PRESENTATION;
62
+ return {
63
+ name: AX_CONVERSATION_VIDEO_CATALOG,
64
+ metadata: createFileTypeMetadata('conversation'),
65
+ title: presentation.title,
66
+ icon: presentation.icon,
67
+ validations: {
68
+ mimeTypes: ['video/*'],
69
+ minSize: 1,
70
+ maxSize: 500 * MB,
71
+ },
72
+ extensions: [
73
+ { name: 'mp4', title: 'MP4' },
74
+ { name: 'webm', title: 'WebM', validations: { maxSize: 200 * MB } },
75
+ { name: 'ogg', title: 'OGG' },
76
+ ],
77
+ utilities: conversationVideoUtilities(),
78
+ copy: (payload) => {
79
+ const video = normalizeVideoPayload(payload);
80
+ const caption = video.caption?.trim();
81
+ const urls = video.videos.map((item) => item.url?.trim()).filter((url) => !!url);
82
+ return {
83
+ text: caption ?? '',
84
+ meta: { kind: 'video', caption, urls, count: video.videos.length },
85
+ };
86
+ },
87
+ };
88
+ }
89
+ class AXConversationVideoFileTypeProvider extends AXFileTypeInfoProvider {
90
+ items() {
91
+ return Promise.resolve([createConversationVideoFileType()]);
92
+ }
93
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXConversationVideoFileTypeProvider, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
94
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXConversationVideoFileTypeProvider, providedIn: 'root' }); }
95
+ }
96
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXConversationVideoFileTypeProvider, decorators: [{
97
+ type: Injectable,
98
+ args: [{ providedIn: 'root' }]
99
+ }] });
100
+
101
+ export { AXConversationVideoFileTypeProvider, AX_CONVERSATION_VIDEO_CATALOG, AX_CONVERSATION_VIDEO_PRESENTATION, conversationVideoUtilities, createConversationVideoFileType };
102
+ //# sourceMappingURL=acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-components-conversation-conversation-video.file-type-DyK0bLE5.mjs","sources":["../tmp-esm2022/conversation/lib/plugins/composer/components/video-picker/conversation-video.file-type.js"],"sourcesContent":["import { AXFileTypeInfoProvider, createFileTypeMetadata } from '@acorex/core/file';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { AX_CONVERSATION_VIDEO_CATALOG } from '../../../../models/message-file-type-catalog';\nimport { normalizeVideoPayload } from '../../../message-list/components/video-renderer/video.payload';\nimport { formatDuration, formatFileSize } from '../shared/media-formatters';\nimport * as i0 from \"@angular/core\";\nexport { AX_CONVERSATION_VIDEO_CATALOG };\nconst MB = 1024 * 1024;\nexport const AX_CONVERSATION_VIDEO_PRESENTATION = {\n icon: 'fa-light fa-video ax-text-blue-500',\n title: 'Video',\n};\nconst AX_CONVERSATION_VIDEO_UTILITY = {\n preview: 'preview',\n duration: 'duration',\n formatSize: 'formatSize',\n formatDuration: 'formatDuration',\n createLocalPreviewUrl: 'createLocalPreviewUrl',\n};\nfunction blobUrl(ctx, blob) {\n if (!isPlatformBrowser(ctx.platformId)) {\n return '';\n }\n return URL.createObjectURL(blob);\n}\nfunction mediaDuration(ctx, file, tag) {\n if (!isPlatformBrowser(ctx.platformId)) {\n return Promise.resolve(0);\n }\n return new Promise((resolve, reject) => {\n const el = document.createElement(tag);\n el.preload = 'metadata';\n el.onloadedmetadata = () => {\n URL.revokeObjectURL(el.src);\n resolve(el.duration);\n };\n el.onerror = () => {\n URL.revokeObjectURL(el.src);\n reject(new Error(`Failed to load ${tag} metadata`));\n };\n el.src = URL.createObjectURL(file);\n });\n}\nexport function conversationVideoUtilities() {\n return {\n [AX_CONVERSATION_VIDEO_UTILITY.preview]: (ctx, file) => ctx.readAsDataUrl(file),\n [AX_CONVERSATION_VIDEO_UTILITY.duration]: (ctx, file) => mediaDuration(ctx, file, 'video'),\n [AX_CONVERSATION_VIDEO_UTILITY.formatSize]: (_ctx, bytes) => formatFileSize(bytes),\n [AX_CONVERSATION_VIDEO_UTILITY.formatDuration]: (_ctx, seconds) => formatDuration(seconds),\n [AX_CONVERSATION_VIDEO_UTILITY.createLocalPreviewUrl]: async (ctx, source) => {\n const blob = source;\n if (blob.type.startsWith('image/')) {\n return ctx.readAsDataUrl(blob);\n }\n return blobUrl(ctx, blob);\n },\n };\n}\nexport function createConversationVideoFileType() {\n const presentation = AX_CONVERSATION_VIDEO_PRESENTATION;\n return {\n name: AX_CONVERSATION_VIDEO_CATALOG,\n metadata: createFileTypeMetadata('conversation'),\n title: presentation.title,\n icon: presentation.icon,\n validations: {\n mimeTypes: ['video/*'],\n minSize: 1,\n maxSize: 500 * MB,\n },\n extensions: [\n { name: 'mp4', title: 'MP4' },\n { name: 'webm', title: 'WebM', validations: { maxSize: 200 * MB } },\n { name: 'ogg', title: 'OGG' },\n ],\n utilities: conversationVideoUtilities(),\n copy: (payload) => {\n const video = normalizeVideoPayload(payload);\n const caption = video.caption?.trim();\n const urls = video.videos.map((item) => item.url?.trim()).filter((url) => !!url);\n return {\n text: caption ?? '',\n meta: { kind: 'video', caption, urls, count: video.videos.length },\n };\n },\n };\n}\nexport class AXConversationVideoFileTypeProvider extends AXFileTypeInfoProvider {\n items() {\n return Promise.resolve([createConversationVideoFileType()]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXConversationVideoFileTypeProvider, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXConversationVideoFileTypeProvider, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXConversationVideoFileTypeProvider, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uLXZpZGVvLmZpbGUtdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvY29udmVyc2F0aW9uL3NyYy9saWIvcGx1Z2lucy9jb21wb3Nlci9jb21wb25lbnRzL3ZpZGVvLXBpY2tlci9jb252ZXJzYXRpb24tdmlkZW8uZmlsZS10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDN0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDdEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFNUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLENBQUM7QUFFekMsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUV2QixNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRztJQUNoRCxJQUFJLEVBQUUsb0NBQW9DO0lBQzFDLEtBQUssRUFBRSxPQUFPO0NBQ04sQ0FBQztBQU9YLE1BQU0sNkJBQTZCLEdBQUc7SUFDcEMsT0FBTyxFQUFFLFNBQVM7SUFDbEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsVUFBVSxFQUFFLFlBQVk7SUFDeEIsY0FBYyxFQUFFLGdCQUFnQjtJQUNoQyxxQkFBcUIsRUFBRSx1QkFBdUI7Q0FDdEMsQ0FBQztBQUVYLFNBQVMsT0FBTyxDQUFDLEdBQXlDLEVBQUUsSUFBVTtJQUNwRSxJQUFJLENBQUMsaUJBQWlC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LCtCQUErQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7OEdBSFUsbUNBQW1DO2tIQUFuQyxtQ0FBbUMsY0FEdEIsTUFBTTs7MkZBQ25CLG1DQUFtQztrQkFEL0MsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFYRmlsZUNvcHlEYXRhLCBBWEZpbGVUeXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2ZpbGUnO1xuaW1wb3J0IHsgQVhGaWxlVHlwZUluZm9Qcm92aWRlciwgY3JlYXRlRmlsZVR5cGVNZXRhZGF0YSB9IGZyb20gJ0BhY29yZXgvY29yZS9maWxlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQVhDb252ZXJzYXRpb25WaWRlb1BheWxvYWQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgQVhfQ09OVkVSU0FUSU9OX1ZJREVPX0NBVEFMT0cgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvbWVzc2FnZS1maWxlLXR5cGUtY2F0YWxvZyc7XG5pbXBvcnQgeyBub3JtYWxpemVWaWRlb1BheWxvYWQgfSBmcm9tICcuLi8uLi8uLi9tZXNzYWdlLWxpc3QvY29tcG9uZW50cy92aWRlby1yZW5kZXJlci92aWRlby5wYXlsb2FkJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uLCBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3NoYXJlZC9tZWRpYS1mb3JtYXR0ZXJzJztcblxuZXhwb3J0IHsgQVhfQ09OVkVSU0FUSU9OX1ZJREVPX0NBVEFMT0cgfTtcblxuY29uc3QgTUIgPSAxMDI0ICogMTAyNDtcblxuZXhwb3J0IGNvbnN0IEFYX0NPTlZFUlNBVElPTl9WSURFT19QUkVTRU5UQVRJT04gPSB7XG4gIGljb246ICdmYS1saWdodCBmYS12aWRlbyBheC10ZXh0LWJsdWUtNTAwJyxcbiAgdGl0bGU6ICdWaWRlbycsXG59IGFzIGNvbnN0O1xuXG50eXBlIEFYQ29udmVyc2F0aW9uRmlsZVR5cGVVdGlsaXR5Q29udGV4dCA9IHtcbiAgcmVhZEFzRGF0YVVybDogKGZpbGU6IEZpbGUgfCBCbG9iKSA9PiBQcm9taXNlPHN0cmluZz47XG4gIHBsYXRmb3JtSWQ6IG9iamVjdDtcbn07XG5cbmNvbnN0IEFYX0NPTlZFUlNBVElPTl9WSURFT19VVElMSVRZID0ge1xuICBwcmV2aWV3OiAncHJldmlldycsXG4gIGR1cmF0aW9uOiAnZHVyYXRpb24nLFxuICBmb3JtYXRTaXplOiAnZm9ybWF0U2l6ZScsXG4gIGZvcm1hdER1cmF0aW9uOiAnZm9ybWF0RHVyYXRpb24nLFxuICBjcmVhdGVMb2NhbFByZXZpZXdVcmw6ICdjcmVhdGVMb2NhbFByZXZpZXdVcmwnLFxufSBhcyBjb25zdDtcblxuZnVuY3Rpb24gYmxvYlVybChjdHg6IEFYQ29udmVyc2F0aW9uRmlsZVR5cGVVdGlsaXR5Q29udGV4dCwgYmxvYjogQmxvYik6IHN0cmluZyB7XG4gIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIoY3R4LnBsYXRmb3JtSWQpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xufVxuXG5mdW5jdGlvbiBtZWRpYUR1cmF0aW9uKGN0eDogQVhDb252ZXJzYXRpb25GaWxlVHlwZVV0aWxpdHlDb250ZXh0LCBmaWxlOiBGaWxlIHwgQmxvYiwgdGFnOiAndmlkZW8nIHwgJ2F1ZGlvJyk6IFByb21pc2U8bnVtYmVyPiB7XG4gIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIoY3R4LnBsYXRmb3JtSWQpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgwKTtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAgIGVsLnByZWxvYWQgPSAnbWV0YWRhdGEnO1xuICAgIGVsLm9ubG9hZGVkbWV0YWRhdGEgPSAoKSA9PiB7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGVsLnNyYyk7XG4gICAgICByZXNvbHZlKGVsLmR1cmF0aW9uKTtcbiAgICB9O1xuICAgIGVsLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGVsLnNyYyk7XG4gICAgICByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gbG9hZCAke3RhZ30gbWV0YWRhdGFgKSk7XG4gICAgfTtcbiAgICBlbC5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnNhdGlvblZpZGVvVXRpbGl0aWVzKCk6IE5vbk51bGxhYmxlPEFYRmlsZVR5cGVbJ3V0aWxpdGllcyddPiB7XG4gIHJldHVybiB7XG4gICAgW0FYX0NPTlZFUlNBVElPTl9WSURFT19VVElMSVRZLnByZXZpZXddOiAoY3R4LCBmaWxlKSA9PiAoY3R4IGFzIEFYQ29udmVyc2F0aW9uRmlsZVR5cGVVdGlsaXR5Q29udGV4dCkucmVhZEFzRGF0YVVybChmaWxlIGFzIEZpbGUpLFxuICAgIFtBWF9DT05WRVJTQVRJT05fVklERU9fVVRJTElUWS5kdXJhdGlvbl06IChjdHgsIGZpbGUpID0+IG1lZGlhRHVyYXRpb24oY3R4IGFzIEFYQ29udmVyc2F0aW9uRmlsZVR5cGVVdGlsaXR5Q29udGV4dCwgZmlsZSBhcyBGaWxlLCAndmlkZW8nKSxcbiAgICBbQVhfQ09OVkVSU0FUSU9OX1ZJREVPX1VUSUxJVFkuZm9ybWF0U2l6ZV06IChfY3R4LCBieXRlcykgPT4gZm9ybWF0RmlsZVNpemUoYnl0ZXMgYXMgbnVtYmVyKSxcbiAgICBbQVhfQ09OVkVSU0FUSU9OX1ZJREVPX1VUSUxJVFkuZm9ybWF0RHVyYXRpb25dOiAoX2N0eCwgc2Vjb25kcykgPT4gZm9ybWF0RHVyYXRpb24oc2Vjb25kcyBhcyBudW1iZXIpLFxuICAgIFtBWF9DT05WRVJTQVRJT05fVklERU9fVVRJTElUWS5jcmVhdGVMb2NhbFByZXZpZXdVcmxdOiBhc3luYyAoY3R4LCBzb3VyY2UpID0+IHtcbiAgICAgIGNvbnN0IGJsb2IgPSBzb3VyY2UgYXMgRmlsZSB8IEJsb2I7XG4gICAgICBpZiAoYmxvYi50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSB7XG4gICAgICAgIHJldHVybiAoY3R4IGFzIEFYQ29udmVyc2F0aW9uRmlsZVR5cGVVdGlsaXR5Q29udGV4dCkucmVhZEFzRGF0YVVybChibG9iKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBibG9iVXJsKGN0eCBhcyBBWENvbnZlcnNhdGlvbkZpbGVUeXBlVXRpbGl0eUNvbnRleHQsIGJsb2IpO1xuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb252ZXJzYXRpb25WaWRlb0ZpbGVUeXBlKCk6IEFYRmlsZVR5cGUge1xuICBjb25zdCBwcmVzZW50YXRpb24gPSBBWF9DT05WRVJTQVRJT05fVklERU9fUFJFU0VOVEFUSU9OO1xuICByZXR1cm4ge1xuICAgIG5hbWU6IEFYX0NPTlZFUlNBVElPTl9WSURFT19DQVRBTE9HLFxuICAgIG1ldGFkYXRhOiBjcmVhdGVGaWxlVHlwZU1ldGFkYXRhKCdjb252ZXJzYXRpb24nKSxcbiAgICB0aXRsZTogcHJlc2VudGF0aW9uLnRpdGxlLFxuICAgIGljb246IHByZXNlbnRhdGlvbi5pY29uLFxuICAgIHZhbGlkYXRpb25zOiB7XG4gICAgICBtaW1lVHlwZXM6IFsndmlkZW8vKiddLFxuICAgICAgbWluU2l6ZTogMSxcbiAgICAgIG1heFNpemU6IDUwMCAqIE1CLFxuICAgIH0sXG4gICAgZXh0ZW5zaW9uczogW1xuICAgICAgeyBuYW1lOiAnbXA0JywgdGl0bGU6ICdNUDQnIH0sXG4gICAgICB7IG5hbWU6ICd3ZWJtJywgdGl0bGU6ICdXZWJNJywgdmFsaWRhdGlvbnM6IHsgbWF4U2l6ZTogMjAwICogTUIgfSB9LFxuICAgICAgeyBuYW1lOiAnb2dnJywgdGl0bGU6ICdPR0cnIH0sXG4gICAgXSxcbiAgICB1dGlsaXRpZXM6IGNvbnZlcnNhdGlvblZpZGVvVXRpbGl0aWVzKCksXG4gICAgY29weTogKHBheWxvYWQpOiBBWEZpbGVDb3B5RGF0YSA9PiB7XG4gICAgICBjb25zdCB2aWRlbyA9IG5vcm1hbGl6ZVZpZGVvUGF5bG9hZChwYXlsb2FkIGFzIEFYQ29udmVyc2F0aW9uVmlkZW9QYXlsb2FkKTtcbiAgICAgIGNvbnN0IGNhcHRpb24gPSB2aWRlby5jYXB0aW9uPy50cmltKCk7XG4gICAgICBjb25zdCB1cmxzID0gdmlkZW8udmlkZW9zLm1hcCgoaXRlbSkgPT4gaXRlbS51cmw/LnRyaW0oKSkuZmlsdGVyKCh1cmwpOiB1cmwgaXMgc3RyaW5nID0+ICEhdXJsKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6IGNhcHRpb24gPz8gJycsXG4gICAgICAgIG1ldGE6IHsga2luZDogJ3ZpZGVvJywgY2FwdGlvbiwgdXJscywgY291bnQ6IHZpZGVvLnZpZGVvcy5sZW5ndGggfSxcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBWENvbnZlcnNhdGlvblZpZGVvRmlsZVR5cGVQcm92aWRlciBleHRlbmRzIEFYRmlsZVR5cGVJbmZvUHJvdmlkZXIge1xuICBpdGVtcygpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtjcmVhdGVDb252ZXJzYXRpb25WaWRlb0ZpbGVUeXBlKCldKTtcbiAgfVxufVxuIl19"],"names":[],"mappings":"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"}