@acorex/components 21.0.3-next.26 → 21.0.3-next.28
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.
- package/conversation/README.md +462 -2
- package/conversation/index.d.ts +5386 -471
- package/fesm2022/acorex-components-button.mjs +2 -2
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation-acorex-components-conversation-DwQUs1nf.mjs +13711 -0
- package/fesm2022/acorex-components-conversation-acorex-components-conversation-DwQUs1nf.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-attachment.component-BetJSSUw.mjs +119 -0
- package/fesm2022/acorex-components-conversation-audio-attachment.component-BetJSSUw.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-composer.payload-Df5vP2nM.mjs +59 -0
- package/fesm2022/acorex-components-conversation-audio-composer.payload-Df5vP2nM.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-picker.component-Bu_gHDt8.mjs +432 -0
- package/fesm2022/acorex-components-conversation-audio-picker.component-Bu_gHDt8.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio-renderer.component-DbSFJLI3.mjs +177 -0
- package/fesm2022/acorex-components-conversation-audio-renderer.component-DbSFJLI3.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-audio.payload-DgepxpPu.mjs +54 -0
- package/fesm2022/acorex-components-conversation-audio.payload-DgepxpPu.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs +101 -0
- package/fesm2022/acorex-components-conversation-composer-action-choice-dialog.component-CYutyq7i.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-audio.file-type-Bb5KhRuV.mjs +100 -0
- package/fesm2022/acorex-components-conversation-conversation-audio.file-type-Bb5KhRuV.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-file.file-type-BhDs60mK.mjs +121 -0
- package/fesm2022/acorex-components-conversation-conversation-file.file-type-BhDs60mK.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-image.file-type-CSHQEhf7.mjs +84 -0
- package/fesm2022/acorex-components-conversation-conversation-image.file-type-CSHQEhf7.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BEM7-bMT.mjs +238 -0
- package/fesm2022/acorex-components-conversation-conversation-info-media-view.component-BEM7-bMT.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BCkqJ44O.mjs +1080 -0
- package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BCkqJ44O.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-video.file-type-gkAIyZr1.mjs +102 -0
- package/fesm2022/acorex-components-conversation-conversation-video.file-type-gkAIyZr1.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-conversation-voice.file-type-Blu6Q1jU.mjs +90 -0
- package/fesm2022/acorex-components-conversation-conversation-voice.file-type-Blu6Q1jU.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs +1840 -0
- package/fesm2022/acorex-components-conversation-emoji-categories-C7Gm95V0.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-fallback-renderer.component-BXGAL-OM.mjs +44 -0
- package/fesm2022/acorex-components-conversation-fallback-renderer.component-BXGAL-OM.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file-composer.payload-EKWI9aI0.mjs +64 -0
- package/fesm2022/acorex-components-conversation-file-composer.payload-EKWI9aI0.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file-picker.component-BxadB4pm.mjs +468 -0
- package/fesm2022/acorex-components-conversation-file-picker.component-BxadB4pm.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file-renderer.component-D1OaDxCO.mjs +125 -0
- package/fesm2022/acorex-components-conversation-file-renderer.component-D1OaDxCO.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-file.payload-BDURM80G.mjs +50 -0
- package/fesm2022/acorex-components-conversation-file.payload-BDURM80G.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs +21 -0
- package/fesm2022/acorex-components-conversation-format-media-DUD4vA6F.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-image-attachment.component-Cyog5lmA.mjs +77 -0
- package/fesm2022/acorex-components-conversation-image-attachment.component-Cyog5lmA.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-image-picker.component-DFxi6Pca.mjs +407 -0
- package/fesm2022/acorex-components-conversation-image-picker.component-DFxi6Pca.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-image-renderer.component-Cjuqy3aa.mjs +83 -0
- package/fesm2022/acorex-components-conversation-image-renderer.component-Cjuqy3aa.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs +180 -0
- package/fesm2022/acorex-components-conversation-index-BbrYsQ84.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-index-Ci13MEJt.mjs +266 -0
- package/fesm2022/acorex-components-conversation-index-Ci13MEJt.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-location-picker.component-D9im1sJf.mjs +149 -0
- package/fesm2022/acorex-components-conversation-location-picker.component-D9im1sJf.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-location-renderer.component-C3S23ZNs.mjs +118 -0
- package/fesm2022/acorex-components-conversation-location-renderer.component-C3S23ZNs.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs +17 -0
- package/fesm2022/acorex-components-conversation-media-formatters-DV3wEEno.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-C935AOnQ.mjs +140 -0
- package/fesm2022/acorex-components-conversation-media-playback-info-bar-banner.component-C935AOnQ.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-Dqh1bctR.mjs +33 -0
- package/fesm2022/acorex-components-conversation-message-renderer-copy-host.component-Dqh1bctR.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-message-renderer-state.component-BNNAiHG3.mjs +172 -0
- package/fesm2022/acorex-components-conversation-message-renderer-state.component-BNNAiHG3.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-B-V_YJ-b.mjs +224 -0
- package/fesm2022/acorex-components-conversation-open-composer-picker-for-files-B-V_YJ-b.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-pagination-demo-data-5NXkBiVx.mjs +81 -0
- package/fesm2022/acorex-components-conversation-pagination-demo-data-5NXkBiVx.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs +91 -0
- package/fesm2022/acorex-components-conversation-picker-header.component-BhTzlufI.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-picker-toolbar.component-Co_0gFoo.mjs +537 -0
- package/fesm2022/acorex-components-conversation-picker-toolbar.component-Co_0gFoo.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs +163 -0
- package/fesm2022/acorex-components-conversation-picker-upload-C-PlKPaU.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-playback-banner-sync-KIB8QkNB.mjs +68 -0
- package/fesm2022/acorex-components-conversation-playback-banner-sync-KIB8QkNB.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-renderer-shared.styles-DRkq3IOC.mjs +95 -0
- package/fesm2022/acorex-components-conversation-renderer-shared.styles-DRkq3IOC.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-search.component-kEt1wdJg.mjs +187 -0
- package/fesm2022/acorex-components-conversation-search.component-kEt1wdJg.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-send-message-media-DxscxSdF.mjs +170 -0
- package/fesm2022/acorex-components-conversation-send-message-media-DxscxSdF.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-shared-storage.seed-BFjUsIZR.mjs +750 -0
- package/fesm2022/acorex-components-conversation-shared-storage.seed-BFjUsIZR.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-sticker-renderer.component-DM69QYiU.mjs +103 -0
- package/fesm2022/acorex-components-conversation-sticker-renderer.component-DM69QYiU.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-system-renderer.component-DQjXQB3C.mjs +55 -0
- package/fesm2022/acorex-components-conversation-system-renderer.component-DQjXQB3C.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-text-renderer.component-BKo40hvy.mjs +109 -0
- package/fesm2022/acorex-components-conversation-text-renderer.component-BKo40hvy.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-attachment.component-I2tGGqTw.mjs +105 -0
- package/fesm2022/acorex-components-conversation-video-attachment.component-I2tGGqTw.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-composer.payload-hfh8MMMF.mjs +62 -0
- package/fesm2022/acorex-components-conversation-video-composer.payload-hfh8MMMF.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-picker.component-BIjsVQuQ.mjs +446 -0
- package/fesm2022/acorex-components-conversation-video-picker.component-BIjsVQuQ.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video-renderer.component-DBRMg_xE.mjs +181 -0
- package/fesm2022/acorex-components-conversation-video-renderer.component-DBRMg_xE.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-video.payload-gfWFG79w.mjs +54 -0
- package/fesm2022/acorex-components-conversation-video.payload-gfWFG79w.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs +17 -0
- package/fesm2022/acorex-components-conversation-voice-composer.payload-DLVow7ex.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-voice-recorder.component-r2jF_LEt.mjs +328 -0
- package/fesm2022/acorex-components-conversation-voice-recorder.component-r2jF_LEt.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation-voice-renderer.component-1tgo8WfV.mjs +270 -0
- package/fesm2022/acorex-components-conversation-voice-renderer.component-1tgo8WfV.mjs.map +1 -0
- package/fesm2022/acorex-components-conversation.mjs +1 -1402
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/package.json +7 -11
- package/conversation2/README.md +0 -463
- package/conversation2/index.d.ts +0 -6410
- package/fesm2022/acorex-components-conversation2.mjs +0 -22331
- package/fesm2022/acorex-components-conversation2.mjs.map +0 -1
package/fesm2022/acorex-components-conversation-conversation-info-panel.component-BCkqJ44O.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-components-conversation-conversation-info-panel.component-BCkqJ44O.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 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(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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uLWluZm8tcGFuZWwudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2NvbnZlcnNhdGlvbi9zcmMvbGliL3BsdWdpbnMvaW5mby1iYXIvY29tcG9uZW50cy9jb252ZXJzYXRpb24taW5mby1wYW5lbC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFjQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUNwRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNoRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUMzSCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQTJCbkcsTUFBTSxXQUFXLEdBQUcsd0JBQXdCLENBQUM7QUFFN0MsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE9BQWtCO0lBQ3BELE9BQU8sbUJBQW1CLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLE9BQWtCO0lBQzdDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUM1QixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBd0IsQ0FBQztJQUNqRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDMUIsT0FBTyxPQUFPLENB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QXlCLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDekUsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsNEJBQTRCLENBQ2hELFVBQW9DLEVBQ3BDLGNBQXNCLEVBQ3RCLFFBQWdCO0lBRWhCLE1BQU0sU0FBUyxHQUFnQixFQUFFLENBQUM7SUFDbEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ25CLElBQUksTUFBMEIsQ0FBQztJQUUvQixPQUFPLE9BQU8sRUFBRSxDQUFDO1FBQ2YsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRTtZQUMxRCxJQUFJO1lBQ0osUUFBUTtZQUNSLE1BQU07U0FDUCxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLENBQUM7UUFFVixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN6QixNQUFNO1FBQ1IsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNqRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBBWEF1ZGlvTWVkaWFJdGVtLFxuICBBWEF1ZGlvUGF5bG9hZCxcbiAgQVhGaWxlUGF5bG9hZCxcbiAgQVhJbWFnZU1lZGlhSXRlbSxcbiAgQVhJbWFnZVBheWxvYWQsXG4gIEFYTWVzc2FnZSxcbiAgQVhTdGlja2VyUGF5bG9hZCxcbiAgQVhUZXh0UGF5bG9hZCxcbiAgQVhWaWRlb01lZGlhSXRlbSxcbiAgQVhWaWRlb1BheWxvYWQsXG59IGZyb20gJy4uLy4uLy4uL21vZGVscyc7XG5pbXBvcnQgdHlwZSB7IEFYQ29udmVyc2F0aW9uLCBBWFBhcnRpY2lwYW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB0eXBlIHsgQVhDb252ZXJzYXRpb25NZXNzYWdlQXBpIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBpJztcbmltcG9ydCB7IHJlc29sdmVQcml2YXRlUGVlclVzZXJJZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2F2YXRhci1jb250ZXh0LnV0aWxzJztcbmltcG9ydCB7IHJlc29sdmVQYXJ0aWNpcGFudFByb2ZpbGUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9wYXJ0aWNpcGFudC1wcm9maWxlLnV0aWxzJztcbmltcG9ydCB7IHJlc29sdmVQZXJzaXN0ZWRUaHVtYm5haWxVcmwgfSBmcm9tICcuLi8uLi9jb21wb3Nlci9jb21wb25lbnRzL3NoYXJlZC9wZXJzaXN0ZWQtbWVkaWEtdXJsJztcbmltcG9ydCB7IG5vcm1hbGl6ZUF1ZGlvUGF5bG9hZCB9IGZyb20gJy4uLy4uL21lc3NhZ2UtbGlzdC9jb21wb25lbnRzL2F1ZGlvLXJlbmRlcmVyL2F1ZGlvLnBheWxvYWQnO1xuaW1wb3J0IHsgbm9ybWFsaXplRmlsZVBheWxvYWQgfSBmcm9tICcuLi8uLi9tZXNzYWdlLWxpc3QvY29tcG9uZW50cy9maWxlLXJlbmRlcmVyL2ZpbGUucGF5bG9hZCc7XG5pbXBvcnQgeyBub3JtYWxpemVJbWFnZVBheWxvYWQsIHJlc29sdmVJbWFnZURpc3BsYXlVcmwgfSBmcm9tICcuLi8uLi9tZXNzYWdlLWxpc3QvY29tcG9uZW50cy9pbWFnZS1yZW5kZXJlci9pbWFnZS5wYXlsb2FkJztcbmltcG9ydCB7IG5vcm1hbGl6ZVZpZGVvUGF5bG9hZCB9IGZyb20gJy4uLy4uL21lc3NhZ2UtbGlzdC9jb21wb25lbnRzL3ZpZGVvLXJlbmRlcmVyL3ZpZGVvLnBheWxvYWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYQ29udmVyc2F0aW9uSW5mb1Byb2ZpbGVGaWVsZCB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsS2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5SWQgPVxuICB8ICdpbWFnZSdcbiAgfCAndmlkZW8nXG4gIHwgJ2ZpbGUnXG4gIHwgJ2F1ZGlvJ1xuICB8ICd2b2ljZSdcbiAgfCAnc3RpY2tlcidcbiAgfCAnbG9jYXRpb24nXG4gIHwgJ2xpbmsnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYQ29udmVyc2F0aW9uTWVkaWFDYXRlZ29yeSB7XG4gIGlkOiBBWENvbnZlcnNhdGlvbk1lZGlhQ2F0ZWdvcnlJZDtcbiAgbGFiZWxLZXk6IHN0cmluZztcbiAgY291bnRMYWJlbEtleTogc3RyaW5nO1xuICBpY29uOiBzdHJpbmc7XG4gIGNvdW50OiBudW1iZXI7XG59XG5cbmNvbnN0IFVSTF9QQVRURVJOID0gL2h0dHBzPzpcXC9cXC9bXlxcczw+XCInXSsvaTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1lc3NhZ2VDb250YWluc0xpbmsobWVzc2FnZTogQVhNZXNzYWdlKTogYm9vbGVhbiB7XG4gIHJldHVybiBjb3VudExpbmtzSW5NZXNzYWdlKG1lc3NhZ2UpID4gMDtcbn1cblxuZnVuY3Rpb24gY291bnRMaW5rc0luTWVzc2FnZShtZXNzYWdlOiBBWE1lc3NhZ2UpOiBudW1iZXIge1xuICBpZiAobWVzc2FnZS50eXBlICE9PSAndGV4dCcpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuICBjb25zdCBwYXlsb2FkID0gbWVzc2FnZS5wYXlsb2FkIGFzIEFYVGV4dFBheWxvYWQ7XG4gIGlmIChwYXlsb2FkLmxpbmtzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gcGF5bG9hZC5saW5rcy5sZW5ndGg7XG4gIH1cbiAgY29uc3QgdGV4dCA9IHBheWxvYWQudGV4dCA/PyAnJztcbiAgY29uc3QgbWF0Y2hlcyA9IHRleHQubWF0Y2gobmV3IFJlZ0V4cChVUkxfUEFUVEVSTi5zb3VyY2UsICdnaScpKTtcbiAgcmV0dXJuIG1hdGNoZXM/Lmxlbmd0aCA/PyAwO1xufVxuXG5mdW5jdGlvbiBjb3VudE1lZGlhSXRlbXNJbk1lc3NhZ2UobWVzc2FnZTogQVhNZXNzYWdlKTogUGFydGlhbDxSZWNvcmQ8QVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5SWQsIG51bWJlcj4+IHtcbiAgY29uc3QgbGlua0NvdW50ID0gY291bnRMaW5rc0luTWVzc2FnZShtZXNzYWdlKTtcbiAgaWYgKGxpbmtDb3VudCA+IDApIHtcbiAgICByZXR1cm4geyBsaW5rOiBsaW5rQ291bnQgfTtcbiAgfVxuXG4gIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UnOiB7XG4gICAgICBjb25zdCBjb3VudCA9IG5vcm1hbGl6ZUltYWdlUGF5bG9hZChtZXNzYWdlLnBheWxvYWQgYXMgQVhJbWFnZVBheWxvYWQpLmltYWdlcy5sZW5ndGg7XG4gICAgICByZXR1cm4gY291bnQgPiAwID8geyBpbWFnZTogY291bnQgfSA6IHt9O1xuICAgIH1cbiAgICBjYXNlICd2aWRlbyc6IHtcbiAgICAgIGNvbnN0IGNvdW50ID0gbm9ybWFsaXplVmlkZW9QYXlsb2FkKG1lc3NhZ2UucGF5bG9hZCBhcyBBWFZpZGVvUGF5bG9hZCkudmlkZW9zLmxlbmd0aDtcbiAgICAgIHJldHVybiBjb3VudCA+IDAgPyB7IHZpZGVvOiBjb3VudCB9IDoge307XG4gICAgfVxuICAgIGNhc2UgJ2F1ZGlvJzoge1xuICAgICAgY29uc3QgY291bnQgPSBub3JtYWxpemVBdWRpb1BheWxvYWQobWVzc2FnZS5wYXlsb2FkIGFzIEFYQXVkaW9QYXlsb2FkKS5hdWRpb3MubGVuZ3RoO1xuICAgICAgcmV0dXJuIGNvdW50ID4gMCA/IHsgYXVkaW86IGNvdW50IH0gOiB7fTtcbiAgICB9XG4gICAgY2FzZSAnZmlsZSc6IHtcbiAgICAgIGNvbnN0IGNvdW50ID0gbm9ybWFsaXplRmlsZVBheWxvYWQobWVzc2FnZS5wYXlsb2FkIGFzIEFYRmlsZVBheWxvYWQpLmZpbGVzLmxlbmd0aDtcbiAgICAgIHJldHVybiBjb3VudCA+IDAgPyB7IGZpbGU6IGNvdW50IH0gOiB7fTtcbiAgICB9XG4gICAgY2FzZSAndm9pY2UnOlxuICAgICAgcmV0dXJuIHsgdm9pY2U6IDEgfTtcbiAgICBjYXNlICdzdGlja2VyJzpcbiAgICAgIHJldHVybiB7IHN0aWNrZXI6IDEgfTtcbiAgICBjYXNlICdsb2NhdGlvbic6XG4gICAgICByZXR1cm4geyBsb2NhdGlvbjogMSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4ge307XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByaXZhdGVQZWVyUGFydGljaXBhbnQoXG4gIGNvbnZlcnNhdGlvbjogQVhDb252ZXJzYXRpb24sXG4gIGN1cnJlbnRVc2VySWQ/OiBzdHJpbmcsXG4pOiBBWFBhcnRpY2lwYW50IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcGVlcklkID0gcmVzb2x2ZVByaXZhdGVQZWVyVXNlcklkKGNvbnZlcnNhdGlvbiwgY3VycmVudFVzZXJJZCk7XG4gIGlmICghcGVlcklkKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gY29udmVyc2F0aW9uLnBhcnRpY2lwYW50cy5maW5kKChwKSA9PiBwLmlkID09PSBwZWVySWQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udmVyc2F0aW9uUHJvZmlsZUZpZWxkcyhcbiAgY29udmVyc2F0aW9uOiBBWENvbnZlcnNhdGlvbixcbiAgY3VycmVudFVzZXJJZD86IHN0cmluZyxcbik6IEFYQ29udmVyc2F0aW9uSW5mb1Byb2ZpbGVGaWVsZFtdIHtcbiAgY29uc3QgZmllbGRzOiBBWENvbnZlcnNhdGlvbkluZm9Qcm9maWxlRmllbGRbXSA9IFtdO1xuXG4gIGlmIChjb252ZXJzYXRpb24udHlwZSA9PT0gJ3ByaXZhdGUnKSB7XG4gICAgY29uc3QgcGVlciA9IGdldFByaXZhdGVQZWVyUGFydGljaXBhbnQoY29udmVyc2F0aW9uLCBjdXJyZW50VXNlcklkKTtcbiAgICBjb25zdCBwcm9maWxlID0gcmVzb2x2ZVBhcnRpY2lwYW50UHJvZmlsZShwZWVyKTtcblxuICAgIGNvbnN0IGFkZEZpZWxkID0gKGlkOiBzdHJpbmcsIGxhYmVsS2V5OiBzdHJpbmcsIGljb246IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHZhbHVlPy50cmltKCkpIHtcbiAgICAgICAgZmllbGRzLnB1c2goeyBpZCwgbGFiZWxLZXksIGljb24sIHZhbHVlOiB2YWx1ZS50cmltKCkgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGFkZEZpZWxkKCdiaW8nLCAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwucHJvZmlsZS5iaW8nLCAnZmEtbGlnaHQgZmEtYWxpZ24tbGVmdCcsIHByb2ZpbGUuYmlvKTtcbiAgICBhZGRGaWVsZCgncGhvbmUnLCAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwucHJvZmlsZS5waG9uZScsICdmYS1saWdodCBmYS1waG9uZScsIHByb2ZpbGUucGhvbmUpO1xuICAgIGFkZEZpZWxkKCdlbWFpbCcsICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5wcm9maWxlLmVtYWlsJywgJ2ZhLWxpZ2h0IGZhLWVudmVsb3BlJywgcHJvZmlsZS5lbWFpbCk7XG4gICAgYWRkRmllbGQoJ3VzZXJuYW1lJywgJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnByb2ZpbGUudXNlcm5hbWUnLCAnZmEtbGlnaHQgZmEtYXQnLCBwcm9maWxlLnVzZXJuYW1lKTtcbiAgICBhZGRGaWVsZCgnbG9jYXRpb24nLCAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwucHJvZmlsZS5sb2NhdGlvbicsICdmYS1saWdodCBmYS1sb2NhdGlvbi1kb3QnLCBwcm9maWxlLmxvY2F0aW9uKTtcbiAgICBhZGRGaWVsZCgnY29tcGFueScsICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5wcm9maWxlLmNvbXBhbnknLCAnZmEtbGlnaHQgZmEtYnVpbGRpbmcnLCBwcm9maWxlLmNvbXBhbnkpO1xuICAgIGFkZEZpZWxkKCd0aXRsZScsICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5wcm9maWxlLnRpdGxlJywgJ2ZhLWxpZ2h0IGZhLWJyaWVmY2FzZScsIHByb2ZpbGUudGl0bGUpO1xuXG4gICAgaWYgKHBlZXI/LmRlc2NyaXB0aW9uPy50cmltKCkpIHtcbiAgICAgIGZpZWxkcy51bnNoaWZ0KHtcbiAgICAgICAgaWQ6ICdkZXNjcmlwdGlvbicsXG4gICAgICAgIGxhYmVsS2V5OiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwucHJvZmlsZS5hYm91dCcsXG4gICAgICAgIGljb246ICdmYS1saWdodCBmYS11c2VyJyxcbiAgICAgICAgdmFsdWU6IHBlZXIuZGVzY3JpcHRpb24udHJpbSgpLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGNvbnZlcnNhdGlvbi5kZXNjcmlwdGlvbj8udHJpbSgpKSB7XG4gICAgZmllbGRzLnB1c2goe1xuICAgICAgaWQ6ICdkZXNjcmlwdGlvbicsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnByb2ZpbGUuYWJvdXQnLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWFsaWduLWxlZnQnLFxuICAgICAgdmFsdWU6IGNvbnZlcnNhdGlvbi5kZXNjcmlwdGlvbi50cmltKCksXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBncm91cEluZm8gPSAoY29udmVyc2F0aW9uLm1ldGFkYXRhPy5bJ3Byb2ZpbGUnXSBhcyB7IGdyb3VwSW5mbz86IHsgcHVycG9zZT86IHN0cmluZyB9IH0gfCB1bmRlZmluZWQpPy5ncm91cEluZm87XG4gIGlmIChncm91cEluZm8/LnB1cnBvc2U/LnRyaW0oKSkge1xuICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgIGlkOiAncHVycG9zZScsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnByb2ZpbGUucHVycG9zZScsXG4gICAgICBpY29uOiAnZmEtbGlnaHQgZmEtYnVsbHNleWUnLFxuICAgICAgdmFsdWU6IGdyb3VwSW5mby5wdXJwb3NlLnRyaW0oKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmaWVsZHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb252ZXJzYXRpb25NZWRpYUNhdGVnb3JpZXMobWVzc2FnZXM6IEFYTWVzc2FnZVtdKTogQVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5W10ge1xuICBjb25zdCBjb3VudHM6IFJlY29yZDxBWENvbnZlcnNhdGlvbk1lZGlhQ2F0ZWdvcnlJZCwgbnVtYmVyPiA9IHtcbiAgICBpbWFnZTogMCxcbiAgICB2aWRlbzogMCxcbiAgICBmaWxlOiAwLFxuICAgIGF1ZGlvOiAwLFxuICAgIHZvaWNlOiAwLFxuICAgIHN0aWNrZXI6IDAsXG4gICAgbG9jYXRpb246IDAsXG4gICAgbGluazogMCxcbiAgfTtcblxuICBmb3IgKGNvbnN0IG1lc3NhZ2Ugb2YgbWVzc2FnZXMpIHtcbiAgICBjb25zdCBpdGVtQ291bnRzID0gY291bnRNZWRpYUl0ZW1zSW5NZXNzYWdlKG1lc3NhZ2UpO1xuICAgIGZvciAoY29uc3QgW2NhdGVnb3J5SWQsIGNvdW50XSBvZiBPYmplY3QuZW50cmllcyhpdGVtQ291bnRzKSBhcyBBcnJheTxbQVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5SWQsIG51bWJlcl0+KSB7XG4gICAgICBjb3VudHNbY2F0ZWdvcnlJZF0gKz0gY291bnQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGVmaW5pdGlvbnM6IEFycmF5PE9taXQ8QVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5LCAnY291bnQnPj4gPSBbXG4gICAge1xuICAgICAgaWQ6ICdpbWFnZScsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLnBob3RvcycsXG4gICAgICBjb3VudExhYmVsS2V5OiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwubWVkaWEuY291bnQtcGhvdG9zJyxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS1pbWFnZScsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ3ZpZGVvJyxcbiAgICAgIGxhYmVsS2V5OiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwubWVkaWEudmlkZW9zJyxcbiAgICAgIGNvdW50TGFiZWxLZXk6ICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5tZWRpYS5jb3VudC12aWRlb3MnLFxuICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLXZpZGVvJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnZmlsZScsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLmZpbGVzJyxcbiAgICAgIGNvdW50TGFiZWxLZXk6ICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5tZWRpYS5jb3VudC1maWxlcycsXG4gICAgICBpY29uOiAnZmEtbGlnaHQgZmEtZmlsZScsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ2F1ZGlvJyxcbiAgICAgIGxhYmVsS2V5OiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwubWVkaWEuYXVkaW8nLFxuICAgICAgY291bnRMYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLmNvdW50LWF1ZGlvJyxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS1oZWFkcGhvbmVzJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnbGluaycsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLmxpbmtzJyxcbiAgICAgIGNvdW50TGFiZWxLZXk6ICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5tZWRpYS5jb3VudC1saW5rcycsXG4gICAgICBpY29uOiAnZmEtbGlnaHQgZmEtbGluaycsXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ3ZvaWNlJyxcbiAgICAgIGxhYmVsS2V5OiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwubWVkaWEudm9pY2UnLFxuICAgICAgY291bnRMYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLmNvdW50LXZvaWNlJyxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS1taWNyb3Bob25lJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnc3RpY2tlcicsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLnN0aWNrZXJzJyxcbiAgICAgIGNvdW50TGFiZWxLZXk6ICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5tZWRpYS5jb3VudC1zdGlja2VycycsXG4gICAgICBpY29uOiAnZmEtbGlnaHQgZmEtbm90ZS1zdGlja3knLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICdsb2NhdGlvbicsXG4gICAgICBsYWJlbEtleTogJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLm1lZGlhLmxvY2F0aW9ucycsXG4gICAgICBjb3VudExhYmVsS2V5OiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwubWVkaWEuY291bnQtbG9jYXRpb25zJyxcbiAgICAgIGljb246ICdmYS1saWdodCBmYS1sb2NhdGlvbi1kb3QnLFxuICAgIH0sXG4gIF07XG5cbiAgcmV0dXJuIGRlZmluaXRpb25zXG4gICAgLm1hcCgoZGVmaW5pdGlvbikgPT4gKHsgLi4uZGVmaW5pdGlvbiwgY291bnQ6IGNvdW50c1tkZWZpbml0aW9uLmlkXSB9KSlcbiAgICAuZmlsdGVyKChjYXRlZ29yeSkgPT4gY2F0ZWdvcnkuY291bnQgPiAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlck1lc3NhZ2VzQnlNZWRpYUNhdGVnb3J5KFxuICBtZXNzYWdlczogQVhNZXNzYWdlW10sXG4gIGNhdGVnb3J5SWQ6IEFYQ29udmVyc2F0aW9uTWVkaWFDYXRlZ29yeUlkLFxuKTogQVhNZXNzYWdlW10ge1xuICByZXR1cm4gbWVzc2FnZXMuZmlsdGVyKChtZXNzYWdlKSA9PiB7XG4gICAgaWYgKGNhdGVnb3J5SWQgPT09ICdsaW5rJykge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VDb250YWluc0xpbmsobWVzc2FnZSk7XG4gICAgfVxuICAgIHJldHVybiBtZXNzYWdlLnR5cGUgPT09IGNhdGVnb3J5SWQ7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNHcmlkTWVkaWFDYXRlZ29yeShjYXRlZ29yeUlkOiBBWENvbnZlcnNhdGlvbk1lZGlhQ2F0ZWdvcnlJZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gY2F0ZWdvcnlJZCA9PT0gJ2ltYWdlJyB8fCBjYXRlZ29yeUlkID09PSAnc3RpY2tlcic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0F0dGFjaG1lbnRMaXN0Q2F0ZWdvcnkoY2F0ZWdvcnlJZDogQVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5SWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNhdGVnb3J5SWQgPT09ICd2aWRlbycgfHwgY2F0ZWdvcnlJZCA9PT0gJ2F1ZGlvJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWENvbnZlcnNhdGlvbk1lZGlhR2FsbGVyeVRpbGUge1xuICBrZXk6IHN0cmluZztcbiAgbWVzc2FnZTogQVhNZXNzYWdlO1xuICBraW5kOiAnaW1hZ2UnIHwgJ3ZpZGVvJyB8ICdzdGlja2VyJztcbiAgaW1hZ2U/OiBBWEltYWdlTWVkaWFJdGVtO1xuICB2aWRlbz86IEFYVmlkZW9NZWRpYUl0ZW07XG4gIHN0aWNrZXJVcmw/OiBzdHJpbmc7XG4gIHN0aWNrZXJBbHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZE1lZGlhR2FsbGVyeVRpbGVzKFxuICBtZXNzYWdlczogQVhNZXNzYWdlW10sXG4gIGNhdGVnb3J5SWQ6IEFYQ29udmVyc2F0aW9uTWVkaWFDYXRlZ29yeUlkLFxuKTogQVhDb252ZXJzYXRpb25NZWRpYUdhbGxlcnlUaWxlW10ge1xuICBjb25zdCBmaWx0ZXJlZCA9IGZpbHRlck1lc3NhZ2VzQnlNZWRpYUNhdGVnb3J5KG1lc3NhZ2VzLCBjYXRlZ29yeUlkKTtcbiAgY29uc3QgdGlsZXM6IEFYQ29udmVyc2F0aW9uTWVkaWFHYWxsZXJ5VGlsZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBtZXNzYWdlIG9mIGZpbHRlcmVkKSB7XG4gICAgaWYgKGNhdGVnb3J5SWQgPT09ICdpbWFnZScpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBub3JtYWxpemVJbWFnZVBheWxvYWQobWVzc2FnZS5wYXlsb2FkIGFzIEFYSW1hZ2VQYXlsb2FkKTtcbiAgICAgIGZvciAoY29uc3QgaW1hZ2Ugb2YgcGF5bG9hZC5pbWFnZXMpIHtcbiAgICAgICAgdGlsZXMucHVzaCh7XG4gICAgICAgICAga2V5OiBgJHttZXNzYWdlLmlkfToke2ltYWdlLm1lZGlhSWQgPz8gaW1hZ2UudXJsID8/IHRpbGVzLmxlbmd0aH1gLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAga2luZDogJ2ltYWdlJyxcbiAgICAgICAgICBpbWFnZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY2F0ZWdvcnlJZCA9PT0gJ3ZpZGVvJykge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IG5vcm1hbGl6ZVZpZGVvUGF5bG9hZChtZXNzYWdlLnBheWxvYWQgYXMgQVhWaWRlb1BheWxvYWQpO1xuICAgICAgZm9yIChjb25zdCB2aWRlbyBvZiBwYXlsb2FkLnZpZGVvcykge1xuICAgICAgICB0aWxlcy5wdXNoKHtcbiAgICAgICAgICBrZXk6IGAke21lc3NhZ2UuaWR9OiR7dmlkZW8ubWVkaWFJZCA/PyB2aWRlby51cmwgPz8gdGlsZXMubGVuZ3RofWAsXG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBraW5kOiAndmlkZW8nLFxuICAgICAgICAgIHZpZGVvLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjYXRlZ29yeUlkID09PSAnc3RpY2tlcicpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBtZXNzYWdlLnBheWxvYWQgYXMgQVhTdGlja2VyUGF5bG9hZDtcbiAgICAgIHRpbGVzLnB1c2goe1xuICAgICAgICBrZXk6IG1lc3NhZ2UuaWQsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGtpbmQ6ICdzdGlja2VyJyxcbiAgICAgICAgc3RpY2tlclVybDogcGF5bG9hZC51cmwsXG4gICAgICAgIHN0aWNrZXJBbHQ6IHBheWxvYWQuZW1vamkgfHwgJ1N0aWNrZXInLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRpbGVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVZpZGVvVGh1bWJuYWlsVXJsKHZpZGVvOiBBWFZpZGVvTWVkaWFJdGVtKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHJlc29sdmVQZXJzaXN0ZWRUaHVtYm5haWxVcmwodmlkZW8udGh1bWJuYWlsVXJsLCB2aWRlby51cmwpID8/IHZpZGVvLnVybDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVHYWxsZXJ5SW1hZ2VVcmwoaW1hZ2U6IEFYSW1hZ2VNZWRpYUl0ZW0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcmVzb2x2ZUltYWdlRGlzcGxheVVybChpbWFnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlVmlkZW9JdGVtcyhtZXNzYWdlOiBBWE1lc3NhZ2UpOiBBWFZpZGVvTWVkaWFJdGVtW10ge1xuICBpZiAobWVzc2FnZS50eXBlICE9PSAndmlkZW8nKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVWaWRlb1BheWxvYWQobWVzc2FnZS5wYXlsb2FkIGFzIEFYVmlkZW9QYXlsb2FkKS52aWRlb3M7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNzYWdlQXVkaW9JdGVtcyhtZXNzYWdlOiBBWE1lc3NhZ2UpOiBBWEF1ZGlvTWVkaWFJdGVtW10ge1xuICBpZiAobWVzc2FnZS50eXBlICE9PSAnYXVkaW8nKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVBdWRpb1BheWxvYWQobWVzc2FnZS5wYXlsb2FkIGFzIEFYQXVkaW9QYXlsb2FkKS5hdWRpb3M7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEFsbENvbnZlcnNhdGlvbk1lc3NhZ2VzKFxuICBtZXNzYWdlQXBpOiBBWENvbnZlcnNhdGlvbk1lc3NhZ2VBcGksXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gIHBhZ2VTaXplOiBudW1iZXIsXG4pOiBQcm9taXNlPEFYTWVzc2FnZVtdPiB7XG4gIGNvbnN0IGNvbGxlY3RlZDogQVhNZXNzYWdlW10gPSBbXTtcbiAgbGV0IHBhZ2UgPSAwO1xuICBsZXQgaGFzTW9yZSA9IHRydWU7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICB3aGlsZSAoaGFzTW9yZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1lc3NhZ2VBcGkuZ2V0TWVzc2FnZXMoY29udmVyc2F0aW9uSWQsIHtcbiAgICAgIHBhZ2UsXG4gICAgICBwYWdlU2l6ZSxcbiAgICAgIGN1cnNvcixcbiAgICB9KTtcblxuICAgIGNvbGxlY3RlZC5wdXNoKC4uLnJlc3VsdC5pdGVtcyk7XG4gICAgaGFzTW9yZSA9IHJlc3VsdC5oYXNNb3JlO1xuICAgIGN1cnNvciA9IHJlc3VsdC5uZXh0Q3Vyc29yO1xuICAgIHBhZ2UgKz0gMTtcblxuICAgIGlmICghcmVzdWx0Lml0ZW1zLmxlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3RlZC5zb3J0KChhLCBiKSA9PiBiLnRpbWVzdGFtcC5nZXRUaW1lKCkgLSBhLnRpbWVzdGFtcC5nZXRUaW1lKCkpO1xufVxuIl19","/**\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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V0FBVywrVkFDWCxpQkFBaUIsMFVBQ2pCLGlCQUFpQiwrQkFDakIsZ0JBQWdCLCtHQUNoQixvQkFBb0Isb1dBQ3BCLGNBQWMsbVNBQ2Qsa0JBQWtCLGthQUNsQixtQ0FBbUMsb0tBQ25DLDZCQUE2QiwwS0FDN0IsOENBQThDLHlJQUM5QyxtQkFBbUI7OzJGQXdtQlYsZ0NBQWdDO2tCQXZuQjVDLFNBQVM7K0JBQ0UsNEJBQTRCLG1CQUNyQix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxpQkFBaUI7d0JBQ2pCLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixvQkFBb0I7d0JBQ3BCLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixtQ0FBbUM7d0JBQ25DLDZCQUE2Qjt3QkFDN0IsOENBQThDO3dCQUM5QyxtQkFBbUI7cUJBQ3BCLGFBQ1U7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxrQ0FBa0MsRUFBRTtxQkFDaEYsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3TVQiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnZlcnNhdGlvbiBJbmZvIFBhbmVsIOKAlCBUZWxlZ3JhbS1pbnNwaXJlZCBwcm9maWxlIC8gZ3JvdXAgZGV0YWlscyBzaGVldC5cbiAqL1xuXG5pbXBvcnQgeyBBWENsb3NhYmxlQ29tcG9uZW50LCBBWENvbXBvbmVudENsb3NlRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHsgQVhCdXR0b25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhMYWJlbENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9sYWJlbCc7XG5pbXBvcnQgeyBBWFNlYXJjaEJveENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWFyY2gtYm94JztcbmltcG9ydCB7IEFYU3dpdGNoTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3N3aXRjaCc7XG5pbXBvcnQgeyBBWFRleHRCb3hDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdGV4dC1ib3gnO1xuaW1wb3J0IHsgQVhUb2FzdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9hc3QnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSwgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbmplY3QsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFYQ29udmVyc2F0aW9uQXZhdGFyUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9zaGFyZWQvYXZhdGFyLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhDb252ZXJzYXRpb25BdmF0YXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3NoYXJlZC9jb252ZXJzYXRpb24tYXZhdGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWENvbnZlcnNhdGlvblJlZ2lzdHJ5Q29tcG9uZW50T3V0bGV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9zaGFyZWQvcmVnaXN0cnktY29tcG9uZW50LW91dGxldC5jb21wb25lbnQnO1xuaW1wb3J0IHR5cGUgeyBBWENvbnZlcnNhdGlvbiwgQVhNZXNzYWdlLCBBWFBhcnRpY2lwYW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7IEFYQ29udmVyc2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvbnZlcnNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFYQ29udmVyc2F0aW9uTWVzc2FnZVV0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7XG4gIGZldGNoQWxsQ29udmVyc2F0aW9uTWVzc2FnZXMsXG4gIGdldENvbnZlcnNhdGlvbk1lZGlhQ2F0ZWdvcmllcyxcbiAgZ2V0Q29udmVyc2F0aW9uUHJvZmlsZUZpZWxkcyxcbiAgdHlwZSBBWENvbnZlcnNhdGlvbk1lZGlhQ2F0ZWdvcnksXG59IGZyb20gJy4vY29udmVyc2F0aW9uLWluZm8tcGFuZWwudXRpbHMnO1xuXG5pbnRlcmZhY2UgQVhJbmZvUGFuZWxRdWlja0FjdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsS2V5OiBzdHJpbmc7XG4gIGljb246IHN0cmluZztcbiAgZGFuZ2VyPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtY29udmVyc2F0aW9uLWluZm8tcGFuZWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBBWEJ1dHRvbkNvbXBvbmVudCxcbiAgICBBWERlY29yYXRvck1vZHVsZSxcbiAgICBBWExhYmVsQ29tcG9uZW50LFxuICAgIEFYU2VhcmNoQm94Q29tcG9uZW50LFxuICAgIEFYU3dpdGNoTW9kdWxlLFxuICAgIEFYVGV4dEJveENvbXBvbmVudCxcbiAgICBBWENvbnZlcnNhdGlvbkF2YXRhclBpY2tlckNvbXBvbmVudCxcbiAgICBBWENvbnZlcnNhdGlvbkF2YXRhckNvbXBvbmVudCxcbiAgICBBWENvbnZlcnNhdGlvblJlZ2lzdHJ5Q29tcG9uZW50T3V0bGV0Q29tcG9uZW50LFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogQVhDbG9zYWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYQ29udmVyc2F0aW9uSW5mb1BhbmVsQ29tcG9uZW50IH0sXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChjb252ZXJzYXRpb24pIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ0Zy1pbmZvLXBhbmVsXCI+XG4gICAgICAgIEBpZiAocGFuZWxWaWV3KCkgPT09ICdtZWRpYScgJiYgc2VsZWN0ZWRNZWRpYUNhdGVnb3J5KCk7IGFzIGNhdGVnb3J5KSB7XG4gICAgICAgICAgPGF4LWNvbnZlcnNhdGlvbi1yZWdpc3RyeS1jb21wb25lbnQtb3V0bGV0XG4gICAgICAgICAgICBbY29tcG9uZW50TG9hZGVyXT1cIm1lZGlhVmlld0xvYWRlclwiXG4gICAgICAgICAgICBbaW5wdXRzXT1cImdldE1lZGlhVmlld0lucHV0cyhjYXRlZ29yeSlcIlxuICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Zy1pbmZvLXBhbmVsX19zY3JvbGxcIj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwidGctaGVyb1wiPlxuICAgICAgICAgICAgICA8YXgtY29udmVyc2F0aW9uLWF2YXRhciBraW5kPVwiYXV0b1wiIFtjb252ZXJzYXRpb25dPVwiY29udmVyc2F0aW9uXCIgW3NpemVdPVwiOTZcIiAvPlxuICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJ0Zy1oZXJvX190aXRsZVwiPnt7IGNvbnZlcnNhdGlvbi50aXRsZSB9fTwvaDI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwidGctaGVyb19fc3VidGl0bGVcIj57eyBoZXJvU3VidGl0bGUoKSB9fTwvcD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJ0Zy1xdWljay1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIEBmb3IgKGFjdGlvbiBvZiBxdWlja0FjdGlvbnMoKTsgdHJhY2sgYWN0aW9uLmlkKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInRnLXF1aWNrLWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MudGctcXVpY2stYWN0aW9uLS1kYW5nZXJdPVwiYWN0aW9uLmRhbmdlclwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MudGctcXVpY2stYWN0aW9uLS1hY3RpdmVdPVwiYWN0aW9uLmlkID09PSAnbXV0ZScgJiYgaXNDb252ZXJzYXRpb25NdXRlZCgpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblF1aWNrQWN0aW9uKGFjdGlvbi5pZClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGctcXVpY2stYWN0aW9uX19pY29uXCI+PGkgW2NsYXNzXT1cImFjdGlvbi5pY29uXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGctcXVpY2stYWN0aW9uX19sYWJlbFwiPnt7IGFjdGlvbi5sYWJlbEtleSB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICAgIDxuYXYgY2xhc3M9XCJ0Zy10YWJzXCIgcm9sZT1cInRhYmxpc3RcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGctdGFiXCJcbiAgICAgICAgICAgICAgICByb2xlPVwidGFiXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudGctdGFiLS1hY3RpdmVdPVwiYWN0aXZlVGFiKCkgPT09ICdwcm9maWxlJ1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJhY3RpdmVUYWIoKSA9PT0gJ3Byb2ZpbGUnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0QWN0aXZlVGFiKCdwcm9maWxlJylcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnRhYnMucHJvZmlsZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGctdGFiXCJcbiAgICAgICAgICAgICAgICByb2xlPVwidGFiXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudGctdGFiLS1hY3RpdmVdPVwiYWN0aXZlVGFiKCkgPT09ICdtYW5hZ2UnXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImFjdGl2ZVRhYigpID09PSAnbWFuYWdlJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEFjdGl2ZVRhYignbWFuYWdlJylcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnRhYnMubWFuYWdlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uYXY+XG5cbiAgICAgICAgICAgIEBpZiAoYWN0aXZlVGFiKCkgPT09ICdwcm9maWxlJykge1xuICAgICAgICAgICAgICBAaWYgKHByb2ZpbGVGaWVsZHMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwidGctc2VjdGlvbiB0Zy1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoZmllbGQgb2YgcHJvZmlsZUZpZWxkcygpOyB0cmFjayBmaWVsZC5pZCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnLWRldGFpbC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Zy1kZXRhaWwtcm93X19pY29uXCI+PGkgW2NsYXNzXT1cImZpZWxkLmljb25cIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGctZGV0YWlsLXJvd19fY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGctZGV0YWlsLXJvd19fdmFsdWVcIj57eyBmaWVsZC52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnLWRldGFpbC1yb3dfX2xhYmVsXCI+e3sgZmllbGQubGFiZWxLZXkgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChsb2FkaW5nTWVzc2FnZXMoKSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGctbG9hZGluZ1wiPnt7ICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5tZWRpYS5sb2FkaW5nJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChtZWRpYUNhdGVnb3JpZXMoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwidGctc2VjdGlvbiB0Zy1tZWRpYVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNhdGVnb3J5IG9mIG1lZGlhQ2F0ZWdvcmllcygpOyB0cmFjayBjYXRlZ29yeS5pZCkge1xuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ0Zy1tZWRpYS1yb3dcIiAoY2xpY2spPVwib3Blbk1lZGlhQ2F0ZWdvcnkoY2F0ZWdvcnkpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGctbWVkaWEtcm93X19pY29uXCI+PGkgW2NsYXNzXT1cImNhdGVnb3J5Lmljb25cIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnLW1lZGlhLXJvd19fbGFiZWxcIj57eyBnZXRNZWRpYVJvd0xhYmVsKGNhdGVnb3J5KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1jaGV2cm9uLXJpZ2h0IHRnLW1lZGlhLXJvd19fY2hldnJvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGlzR3JvdXBDb252ZXJzYXRpb24oKSkge1xuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInRnLXNlY3Rpb24gdGctbWVtYmVyc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Zy1zZWN0aW9uLWhlYWRlciB0Zy1zZWN0aW9uLWhlYWRlci0tcm93XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnLXNlY3Rpb24taGVhZGVyX190aXRsZVwiPnt7IG1lbWJlcnNTZWN0aW9uVGl0bGUoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Zy1zZWN0aW9uLWhlYWRlcl9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0Zy1pY29uLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1lbWJlclNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5wbGFjZWhvbGRlcnMuc2VhcmNoLW1lbWJlcnMnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1tYWduaWZ5aW5nLWdsYXNzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIEBpZiAoc2hvd01lbWJlclNlYXJjaCgpKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGctbWVtYmVycy1zZWFyY2gtd3JhcFwiPlxuICAgICAgICAgICAgICAgICAgICA8YXgtc2VhcmNoLWJveFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGctbWVtYmVycy1zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJtZW1iZXJTZWFyY2hRdWVyeSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25NZW1iZXJTZWFyY2hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5wbGFjZWhvbGRlcnMuc2VhcmNoLW1lbWJlcnMnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICA+PC9heC1zZWFyY2gtYm94PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBmb3IgKHBhcnRpY2lwYW50IG9mIGZpbHRlcmVkTWVtYmVycygpOyB0cmFjayBwYXJ0aWNpcGFudC5pZCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnLW1lbWJlci1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWNvbnZlcnNhdGlvbi1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgICBraW5kPVwidXNlclwiXG4gICAgICAgICAgICAgICAgICAgICAgW3VzZXJJZF09XCJwYXJ0aWNpcGFudC5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbnZlcnNhdGlvbl09XCJjb252ZXJzYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaXplXT1cIjQyXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnLW1lbWJlci1yb3dfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRnLW1lbWJlci1yb3dfX25hbWVcIj57eyBwYXJ0aWNpcGFudC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRnLW1lbWJlci1yb3dfX21ldGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRnLW1lbWJlci1yb3dfX21ldGEtLW9ubGluZV09XCJwYXJ0aWNpcGFudC5zdGF0dXMgPT09ICdvbmxpbmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRNZW1iZXJTdWJ0aXRsZShwYXJ0aWNpcGFudCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGdldE1lbWJlclJvbGVMYWJlbChwYXJ0aWNpcGFudCk7IGFzIHJvbGVMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGctbWVtYmVyLXJvd19fYmFkZ2VcIj57eyByb2xlTGFiZWwgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoYWN0aXZlVGFiKCkgPT09ICdtYW5hZ2UnKSB7XG4gICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwidGctc2VjdGlvbiB0Zy1tYW5hZ2VcIj5cbiAgICAgICAgICAgICAgICBAaWYgKCFpc1ByaXZhdGVDb252ZXJzYXRpb24oKSkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnLW1hbmFnZS1ibG9ja1wiPlxuICAgICAgICAgICAgICAgICAgICA8YXgtbGFiZWwgY2xhc3M9XCJ0Zy1tYW5hZ2UtbGFiZWxcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5ncm91cC1kZXRhaWxzLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgIH19PC9heC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGF4LXRleHQtYm94XG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImVkaXRUaXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uR3JvdXBUaXRsZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnBsYWNlaG9sZGVycy5lbnRlci1ncm91cC10aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgID48L2F4LXRleHQtYm94PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGctbWFuYWdlLWF2YXRhclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxheC1jb252ZXJzYXRpb24tYXZhdGFyLXBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhhdmF0YXJVcmwpXT1cImVkaXRBdmF0YXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGF2YXRhclVybENoYW5nZSk9XCJvbkdyb3VwQXZhdGFyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2F4LWNvbnZlcnNhdGlvbi1hdmF0YXItcGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0Zy1zZXR0aW5nLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnLXNldHRpbmctcm93X19pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGctc2V0dGluZy1yb3dfX3RpdGxlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwuc2V0dGluZ3MuYXJjaGl2ZWQnIHwgdHJhbnNsYXRlIHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGctc2V0dGluZy1yb3dfX2Rlc2NcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5zZXR0aW5ncy5hcmNoaXZlZC1kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGUgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGF4LXN3aXRjaCBbKG5nTW9kZWwpXT1cImFyY2hpdmVkXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25BcmNoaXZlZENoYW5nZSgkZXZlbnQpXCI+PC9heC1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGctbWFuYWdlLWJsb2NrIHRnLWJhY2tncm91bmQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgIDxheC1sYWJlbCBjbGFzcz1cInRnLW1hbmFnZS1sYWJlbFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5iYWNrZ3JvdW5kLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICB9fTwvYXgtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRnLWJhY2tncm91bmQtZGVzY1wiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwuYmFja2dyb3VuZC5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRnLWJhY2tncm91bmQtZ3JpZFwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChwcmVzZXQgb2YgYmFja2dyb3VuZFByZXNldHM7IHRyYWNrIHByZXNldC5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0Zy1iYWNrZ3JvdW5kLXN3YXRjaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGctYmFja2dyb3VuZC1zd2F0Y2gtLWFjdGl2ZV09XCJpc0JhY2tncm91bmRTZWxlY3RlZChwcmVzZXQudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInByZXNldC52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlNZXNzYWdlTGlzdEJhY2tncm91bmQocHJlc2V0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImdldEJhY2tncm91bmRBcmlhTGFiZWwocHJlc2V0LmxhYmVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0Zy1iYWNrZ3JvdW5kLXN3YXRjaF9fbGFiZWxcIj57eyBwcmVzZXQubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGF4LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInQGFjb3JleDpjaGF0LmluZm8tcGFuZWwuYWN0aW9ucy5yZXNldC10by1kZWZhdWx0JyB8IHRyYW5zbGF0ZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvb2tdPVwiJ2dob3N0J1wiXG4gICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFwcGx5TWVzc2FnZUxpc3RCYWNrZ3JvdW5kKCcnKVwiXG4gICAgICAgICAgICAgICAgICA+PC9heC1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAudGctaW5mby1wYW5lbCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIG1heC1oZWlnaHQ6IG1pbig4NXZoLCA0MHJlbSk7XG4gICAgICB9XG5cbiAgICAgIC50Zy1pbmZvLXBhbmVsX19zY3JvbGwge1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluO1xuICAgICAgfVxuXG4gICAgICAudGctaGVybyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgICBwYWRkaW5nOiAxLjI1cmVtIDEuNXJlbSAxcmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC50Zy1oZXJvX190aXRsZSB7XG4gICAgICAgIG1hcmdpbjogMC4yNXJlbSAwIDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4yNXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzU7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLW9uLXN1cmZhY2UpKTtcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICAgIH1cblxuICAgICAgLnRnLWhlcm9fX3N1YnRpdGxlIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4yNXJlbTtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3Itb24tc3VyZmFjZSkpO1xuICAgICAgICBvcGFjaXR5OiAwLjY1O1xuICAgICAgfVxuXG4gICAgICAudGctcXVpY2stYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IDAuMzVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC43NXJlbSAxcmVtO1xuICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLnRnLXF1aWNrLWFjdGlvbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IDAuMzVyZW07XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgbWF4LXdpZHRoOiA1LjVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMC40cmVtO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItbGlnaHRlci1zdXJmYWNlKSk7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktNTAwKSk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE1cyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAudGctcXVpY2stYWN0aW9uOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1ib3JkZXItbGlnaHQtc3VyZmFjZSkpO1xuICAgICAgfVxuXG4gICAgICAudGctcXVpY2stYWN0aW9uLS1kYW5nZXIge1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1kYW5nZXItNTAwKSk7XG4gICAgICB9XG5cbiAgICAgIC50Zy1xdWljay1hY3Rpb24tLWFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0tYXgtc3lzLWNvbG9yLXdhcm5pbmctNTAwKSwgMC4xNCk7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXdhcm5pbmctNTAwKSk7XG4gICAgICB9XG5cbiAgICAgIC50Zy1xdWljay1hY3Rpb24tLWFjdGl2ZSAudGctcXVpY2stYWN0aW9uX19sYWJlbCB7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXdhcm5pbmctNTAwKSk7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB9XG5cbiAgICAgIC50Zy1xdWljay1hY3Rpb25fX2ljb24ge1xuICAgICAgICBmb250LXNpemU6IDEuMTI1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIH1cblxuICAgICAgLnRnLXF1aWNrLWFjdGlvbl9fbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3Itb24tc3VyZmFjZSkpO1xuICAgICAgICBvcGFjaXR5OiAwLjg1O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC50Zy10YWJzIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiAwO1xuICAgICAgICBtYXJnaW46IDAgMC43NXJlbTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYih2YXIoLS1heC1zeXMtY29sb3ItYm9yZGVyLWxpZ2h0LXN1cmZhY2UpKTtcbiAgICAgIH1cblxuICAgICAgLnRnLXRhYiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIHBhZGRpbmc6IDAuNjVyZW0gMC41cmVtO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLW9uLXN1cmZhY2UpKTtcbiAgICAgICAgb3BhY2l0eTogMC41NTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIG9wYWNpdHkgMC4xNXMgZWFzZSxcbiAgICAgICAgICBjb2xvciAwLjE1cyBlYXNlLFxuICAgICAgICAgIGJvcmRlci1jb2xvciAwLjE1cyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAudGctdGFiOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogMC44O1xuICAgICAgfVxuXG4gICAgICAudGctdGFiLS1hY3RpdmUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LTUwMCkpO1xuICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktNTAwKSk7XG4gICAgICB9XG5cbiAgICAgIC50Zy1zZWN0aW9uIHtcbiAgICAgICAgLy8gYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYih2YXIoLS1heC1zeXMtY29sb3ItYm9yZGVyLWxpZ2h0LXN1cmZhY2UpKTtcbiAgICAgICAgcGFkZGluZzogMC4yNXJlbSAwO1xuICAgICAgfVxuXG4gICAgICAudGctZGV0YWlsLXJvdyxcbiAgICAgIC50Zy1tZW1iZXItcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjg3NXJlbTtcbiAgICAgICAgcGFkZGluZzogMC42NXJlbSAxcmVtO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG5cbiAgICAgIC50Zy1tZWRpYS1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDAuODc1cmVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgcGFkZGluZzogMC43cmVtIDFyZW07XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIHRleHQtYWxpZ246IHN0YXJ0O1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLnRnLW1lZGlhLXJvdzpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItbGlnaHRlci1zdXJmYWNlKSk7XG4gICAgICB9XG5cbiAgICAgIC50Zy1tZWRpYS1yb3dfX2ljb24ge1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgd2lkdGg6IDEuNXJlbTtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1vbi1zdXJmYWNlKSk7XG4gICAgICAgIG9wYWNpdHk6IDAuNzU7XG4gICAgICB9XG5cbiAgICAgIC50Zy1tZWRpYS1yb3dfX2xhYmVsIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3Itb24tc3VyZmFjZSkpO1xuICAgICAgfVxuXG4gICAgICAudGctbWVkaWEtcm93X19jaGV2cm9uIHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgb3BhY2l0eTogMC40NTtcbiAgICAgIH1cblxuICAgICAgLnRnLWxvYWRpbmcge1xuICAgICAgICBwYWRkaW5nOiAwLjc1cmVtIDFyZW0gMXJlbTtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLW9uLXN1cmZhY2UpKTtcbiAgICAgICAgb3BhY2l0eTogMC42O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC50Zy1kZXRhaWwtcm93X19pY29uIHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIHdpZHRoOiAxLjVyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS01MDApKTtcbiAgICAgICAgb3BhY2l0eTogMC45O1xuICAgICAgfVxuXG4gICAgICAudGctZGV0YWlsLXJvd19fY29udGVudCxcbiAgICAgIC50Zy1tZW1iZXItcm93X19jb250ZW50IHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDAuMTI1cmVtO1xuICAgICAgfVxuXG4gICAgICAudGctZGV0YWlsLXJvd19fdmFsdWUsXG4gICAgICAudGctbWVtYmVyLXJvd19fbmFtZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1vbi1zdXJmYWNlKSk7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAudGctZGV0YWlsLXJvd19fbGFiZWwsXG4gICAgICAudGctbWVtYmVyLXJvd19fbWV0YSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3Itb24tc3VyZmFjZSkpO1xuICAgICAgICBvcGFjaXR5OiAwLjY7XG4gICAgICB9XG5cbiAgICAgIC50Zy1tZW1iZXItcm93X19tZXRhLS1vbmxpbmUge1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LTUwMCkpO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgfVxuXG4gICAgICAudGctc2VjdGlvbi1oZWFkZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbSAxcmVtIDAuMzVyZW07XG4gICAgICB9XG5cbiAgICAgIC50Zy1zZWN0aW9uLWhlYWRlci0tcm93IHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgfVxuXG4gICAgICAudGctc2VjdGlvbi1oZWFkZXJfX2FjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDAuMjVyZW07XG4gICAgICB9XG5cbiAgICAgIC50Zy1pY29uLWJ0biB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDJyZW07XG4gICAgICAgIGhlaWdodDogMnJlbTtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktNTAwKSk7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cblxuICAgICAgLnRnLWljb24tYnRuOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1saWdodGVyLXN1cmZhY2UpKTtcbiAgICAgIH1cblxuICAgICAgLnRnLW1lbWJlcnMtc2VhcmNoLXdyYXAge1xuICAgICAgICBwYWRkaW5nOiAwIDFyZW0gMC41cmVtO1xuICAgICAgfVxuXG4gICAgICAudGctc2VjdGlvbi1oZWFkZXJfX3RpdGxlIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNmVtO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1vbi1zdXJmYWNlKSk7XG4gICAgICAgIG9wYWNpdHk6IDAuNTU7XG4gICAgICB9XG5cbiAgICAgIC50Zy1tZW1iZXJzLXNlYXJjaCB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAudGctbWVtYmVyLXJvd19fYmFkZ2Uge1xuICAgICAgICBmbGV4LXNocmluazogMDtcbiAgICAgICAgcGFkZGluZzogMC4xNXJlbSAwLjVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS01MDApKTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1heC1zeXMtY29sb3ItcHJpbWFyeS01MDApLCAwLjE0KTtcbiAgICAgIH1cblxuICAgICAgLnRnLW1hbmFnZSB7XG4gICAgICAgIHBhZGRpbmc6IDAuNzVyZW0gMXJlbSAxcmVtO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDAuNzVyZW07XG4gICAgICB9XG5cbiAgICAgIC50Zy1tYW5hZ2UtYmxvY2sge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgIH1cblxuICAgICAgLnRnLW1hbmFnZS1sYWJlbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1vbi1zdXJmYWNlKSk7XG4gICAgICB9XG5cbiAgICAgIC50Zy1zZXR0aW5nLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiAxcmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjVyZW0gMDtcbiAgICAgIH1cblxuICAgICAgLnRnLXNldHRpbmctcm93X19pbmZvIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDAuMTI1cmVtO1xuICAgICAgfVxuXG4gICAgICAudGctc2V0dGluZy1yb3dfX3RpdGxlIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgY29sb3I6IHJnYih2YXIoLS1heC1zeXMtY29sb3Itb24tc3VyZmFjZSkpO1xuICAgICAgfVxuXG4gICAgICAudGctc2V0dGluZy1yb3dfX2Rlc2Mge1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLW9uLXN1cmZhY2UpKTtcbiAgICAgICAgb3BhY2l0eTogMC42NTtcbiAgICAgIH1cblxuICAgICAgLnRnLWJhY2tncm91bmQtZGVzYyB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICB9XG5cbiAgICAgIC50Zy1iYWNrZ3JvdW5kLWdyaWQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCBtaW5tYXgoMCwgMWZyKSk7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgfVxuXG4gICAgICAudGctYmFja2dyb3VuZC1zd2F0Y2gge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGhlaWdodDogMi43NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICAudGctYmFja2dyb3VuZC1zd2F0Y2gtLWFjdGl2ZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiKHZhcigtLWF4LXN5cy1jb2xvci1wcmltYXJ5LTUwMCkpO1xuICAgICAgfVxuXG4gICAgICAudGctYmFja2dyb3VuZC1zd2F0Y2hfX2xhYmVsIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldC1pbmxpbmUtc3RhcnQ6IDAuMzVyZW07XG4gICAgICAgIGJvdHRvbTogMC4ycmVtO1xuICAgICAgICBmb250LXNpemU6IDAuNjVyZW07XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjFyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgICAgIG1peC1ibGVuZC1tb2RlOiBkaWZmZXJlbmNlO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgIH1cblxuICAgICAgLnRnLWRhbmdlciB7XG4gICAgICAgIHBhZGRpbmc6IDAuMjVyZW0gMCAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAudGctZGFuZ2VyLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMC43NXJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHBhZGRpbmc6IDAuNzVyZW0gMXJlbTtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGNvbG9yOiByZ2IodmFyKC0tYXgtc3lzLWNvbG9yLWRhbmdlci01MDApKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBzdGFydDtcbiAgICAgIH1cblxuICAgICAgLnRnLWRhbmdlci1yb3c6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWF4LXN5cy1jb2xvci1kYW5nZXItNTAwKSwgMC4wNik7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhDb252ZXJzYXRpb25JbmZvUGFuZWxDb21wb25lbnQgZXh0ZW5kcyBBWENsb3NhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHRvYXN0U2VydmljZSA9IGluamVjdChBWFRvYXN0U2VydmljZSk7XG4gIHJlYWRvbmx5IHRyYW5zbGF0aW9uID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RlZENvbnZlcnNhdGlvblNlcnZpY2UgPSBpbmplY3QoQVhDb252ZXJzYXRpb25TZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHJlYWRvbmx5IG9uQ2xvc2VkID0gb3V0cHV0PEFYQ29tcG9uZW50Q2xvc2VFdmVudD4oKTtcblxuICBjb252ZXJzYXRpb24hOiBBWENvbnZlcnNhdGlvbjtcbiAgY29udmVyc2F0aW9uU2VydmljZSE6IEFYQ29udmVyc2F0aW9uU2VydmljZTtcblxuICByZWFkb25seSBhY3RpdmVUYWIgPSBzaWduYWw8J3Byb2ZpbGUnIHwgJ21hbmFnZSc+KCdwcm9maWxlJyk7XG4gIHJlYWRvbmx5IHNob3dNZW1iZXJTZWFyY2ggPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBwYW5lbFZpZXcgPSBzaWduYWw8J21haW4nIHwgJ21lZGlhJz4oJ21haW4nKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRNZWRpYUNhdGVnb3J5ID0gc2lnbmFsPEFYQ29udmVyc2F0aW9uTWVkaWFDYXRlZ29yeSB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBtZWRpYVZpZXdMb2FkZXIgPSAoKSA9PlxuICAgIGltcG9ydCgnLi9jb252ZXJzYXRpb24taW5mby1tZWRpYS12aWV3LmNvbXBvbmVudCcpLnRoZW4oKG0pID0+IG0uQVhDb252ZXJzYXRpb25JbmZvTWVkaWFWaWV3Q29tcG9uZW50KTtcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uTWVzc2FnZXMgPSBzaWduYWw8QVhNZXNzYWdlW10+KFtdKTtcbiAgcmVhZG9ubHkgbG9hZGluZ01lc3NhZ2VzID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgbWVtYmVyU2VhcmNoUXVlcnkgPSBzaWduYWwoJycpO1xuXG4gIGFyY2hpdmVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBpbml0aWFsTm90aWZpY2F0aW9ucyA9IGZhbHNlO1xuICBwcml2YXRlIGluaXRpYWxBcmNoaXZlZCA9IGZhbHNlO1xuXG4gIGVkaXRUaXRsZSA9ICcnO1xuICBlZGl0QXZhdGFyID0gJyc7XG5cbiAgcHJpdmF0ZSBncm91cFRpdGxlU2F2ZVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBncm91cERldGFpbHNTYXZlSW5GbGlnaHQgPSBmYWxzZTtcblxuICByZWFkb25seSBiYWNrZ3JvdW5kUHJlc2V0czogQXJyYXk8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+ID0gW1xuICAgIHtcbiAgICAgIGlkOiAnc29saWQtZGVmYXVsdCcsXG4gICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5iYWNrZ3JvdW5kLnByZXNldHMuZGVmYXVsdCcpLFxuICAgICAgdmFsdWU6ICdyZ2IodmFyKC0tYXgtc3lzLWNvbG9yLXByaW1hcnktbGlnaHRlc3Qtc3VyZmFjZSkpJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnc29saWQtZ3JhcGhpdGUnLFxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwuYmFja2dyb3VuZC5wcmVzZXRzLmdyYXBoaXRlJyksXG4gICAgICB2YWx1ZTogJ3JnYih2YXIoLS1heC1zeXMtY29sb3ItbGlnaHRlci1zdXJmYWNlKSknLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICdzb2xpZC1vbGl2ZScsXG4gICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5iYWNrZ3JvdW5kLnByZXNldHMub2xpdmUnKSxcbiAgICAgIHZhbHVlOiAncmdiYSgxMzIsIDE0NCwgODgsIDAuMjQpJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnc29saWQtc2t5JyxcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLmJhY2tncm91bmQucHJlc2V0cy5za3knKSxcbiAgICAgIHZhbHVlOiAncmdiYSg1NiwgMTg5LCAyNDgsIDAuMiknLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICdncmFkLWF1cm9yYScsXG4gICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5iYWNrZ3JvdW5kLnByZXNldHMuYXVyb3JhJyksXG4gICAgICB2YWx1ZTogJ2xpbmVhci1ncmFkaWVudCgxNDBkZWcsICM2MGE1ZmEgMCUsICNhNzhiZmEgNTUlLCAjZjQ3MmI2IDEwMCUpJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnZ3JhZC1zdW5zZXQnLFxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwuYmFja2dyb3VuZC5wcmVzZXRzLnN1bnNldCcpLFxuICAgICAgdmFsdWU6ICdsaW5lYXItZ3JhZGllbnQoMTQwZGVnLCByZ2JhKDI1MSwgMTEzLCAxMzMsIDAuMzQpIDAlLCByZ2JhKDI1MSwgMTkxLCAzNiwgMC4zMikgMTAwJSknLFxuICAgIH0sXG4gIF07XG5cbiAgcmVhZG9ubHkgaGVyb1N1YnRpdGxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IHRoaXMubGl2ZUNvbnZlcnNhdGlvbigpO1xuICAgIGlmICghY29udmVyc2F0aW9uKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIEFYQ29udmVyc2F0aW9uTWVzc2FnZVV0aWxzU2VydmljZS5nZXRDb252ZXJzYXRpb25TdWJ0aXRsZShjb252ZXJzYXRpb24pO1xuICB9KTtcblxuICByZWFkb25seSBsaXZlQ29udmVyc2F0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IHRoaXMuY29udmVyc2F0aW9uO1xuICAgIGlmICghY29udmVyc2F0aW9uPy5pZCkgcmV0dXJuIGNvbnZlcnNhdGlvbjtcbiAgICBjb25zdCBmcm9tU3RvcmUgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2U/LmNvbnZlcnNhdGlvbnMoKS5maW5kKChjKSA9PiBjLmlkID09PSBjb252ZXJzYXRpb24uaWQpO1xuICAgIHJldHVybiBmcm9tU3RvcmUgPz8gY29udmVyc2F0aW9uO1xuICB9KTtcblxuICByZWFkb25seSBpc0NvbnZlcnNhdGlvbk11dGVkID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5saXZlQ29udmVyc2F0aW9uKCk/LnNldHRpbmdzPy5ub3RpZmljYXRpb25zID09PSBmYWxzZSxcbiAgKTtcblxuICByZWFkb25seSBwcm9maWxlRmllbGRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IHRoaXMubGl2ZUNvbnZlcnNhdGlvbigpO1xuICAgIGlmICghY29udmVyc2F0aW9uKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGdldENvbnZlcnNhdGlvblByb2ZpbGVGaWVsZHMoY29udmVyc2F0aW9uLCB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2U/LmN1cnJlbnRVc2VyKCk/LmlkKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbWVkaWFDYXRlZ29yaWVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5jb252ZXJzYXRpb24pIHJldHVybiBbXTtcbiAgICByZXR1cm4gZ2V0Q29udmVyc2F0aW9uTWVkaWFDYXRlZ29yaWVzKHRoaXMuY29udmVyc2F0aW9uTWVzc2FnZXMoKSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHF1aWNrQWN0aW9ucyA9IGNvbXB1dGVkKCgpOiBBWEluZm9QYW5lbFF1aWNrQWN0aW9uW10gPT4ge1xuICAgIGlmICghdGhpcy5jb252ZXJzYXRpb24pIHJldHVybiBbXTtcbiAgICBjb25zdCBtdXRlZCA9IHRoaXMuaXNDb252ZXJzYXRpb25NdXRlZCgpO1xuICAgIGNvbnN0IGFjdGlvbnM6IEFYSW5mb1BhbmVsUXVpY2tBY3Rpb25bXSA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdtdXRlJyxcbiAgICAgICAgbGFiZWxLZXk6IG11dGVkID8gJ0BhY29yZXg6Y2hhdC5hY3Rpb25zLnVubXV0ZScgOiAnQGFjb3JleDpjaGF0LmFjdGlvbnMubXV0ZScsXG4gICAgICAgIGljb246IG11dGVkID8gJ2ZhLWxpZ2h0IGZhLWJlbGwtc2xhc2gnIDogJ2ZhLWxpZ2h0IGZhLWJlbGwnLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgaWYgKCF0aGlzLmlzUHJpdmF0ZUNvbnZlcnNhdGlvbigpKSB7XG4gICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogJ2xlYXZlJyxcbiAgICAgICAgbGFiZWxLZXk6ICdAYWNvcmV4OmNoYXQuYWN0aW9ucy5sZWF2ZS1hbmQtZGVsZXRlJyxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLWRvb3Itb3BlbicsXG4gICAgICAgIGRhbmdlcjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb25zO1xuICB9KTtcblxuICByZWFkb25seSBmaWx0ZXJlZE1lbWJlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbikgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5tZW1iZXJTZWFyY2hRdWVyeSgpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGNvbnN0IG1lbWJlcnMgPSB0aGlzLmNvbnZlcnNhdGlvbj8ucGFydGljaXBhbnRzID8/IFtdO1xuICAgIGlmICghcXVlcnkpIHJldHVybiBtZW1iZXJzO1xuICAgIHJldHVybiBtZW1iZXJzLmZpbHRlcihcbiAgICAgIChwKSA9PlxuICAgICAgICBwLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkgfHxcbiAgICAgICAgKHAuZGVzY3JpcHRpb24gPz8gJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpIHx8XG4gICAgICAgIChwLnJvbGUgPz8gJycpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkpLFxuICAgICk7XG4gIH0pO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc29sdmVkU2VydmljZSA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZSA/PyB0aGlzLmluamVjdGVkQ29udmVyc2F0aW9uU2VydmljZTtcbiAgICBpZiAoIXJlc29sdmVkU2VydmljZSkge1xuICAgICAgY29uc29sZS53YXJuKCdBWENvbnZlcnNhdGlvbkluZm9QYW5lbENvbXBvbmVudCBvcGVuZWQgd2l0aG91dCBjb252ZXJzYXRpb25TZXJ2aWNlLicpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UgPSByZXNvbHZlZFNlcnZpY2U7XG5cbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uKSB7XG4gICAgICBjb25zdCBhY3RpdmVDb252ZXJzYXRpb24gPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuYWN0aXZlQ29udmVyc2F0aW9uKCk7XG4gICAgICBpZiAoYWN0aXZlQ29udmVyc2F0aW9uKSB7XG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uID0gYWN0aXZlQ29udmVyc2F0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdBWENvbnZlcnNhdGlvbkluZm9QYW5lbENvbXBvbmVudCBvcGVuZWQgd2l0aG91dCBjb252ZXJzYXRpb24gY29udGV4dC4nKTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbml0aWFsTm90aWZpY2F0aW9ucyA9IHRoaXMuY29udmVyc2F0aW9uLnNldHRpbmdzPy5ub3RpZmljYXRpb25zID8/IHRydWU7XG4gICAgdGhpcy5hcmNoaXZlZCA9IHRoaXMuY29udmVyc2F0aW9uLmFyY2hpdmVkID8/IGZhbHNlO1xuXG4gICAgdGhpcy5pbml0aWFsQXJjaGl2ZWQgPSB0aGlzLmFyY2hpdmVkO1xuXG4gICAgdGhpcy5lZGl0VGl0bGUgPSB0aGlzLmNvbnZlcnNhdGlvbi50aXRsZSB8fCAnJztcbiAgICB0aGlzLmVkaXRBdmF0YXIgPSB0aGlzLmNvbnZlcnNhdGlvbi5hdmF0YXIgfHwgJyc7XG5cbiAgICB2b2lkIHRoaXMubG9hZENvbnZlcnNhdGlvbk1lc3NhZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRDb252ZXJzYXRpb25NZXNzYWdlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvYWRpbmdNZXNzYWdlcy5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuYWN0aXZlQ29udmVyc2F0aW9uSWQoKSA9PT0gdGhpcy5jb252ZXJzYXRpb24uaWQpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlTWVzc2FnZXMgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuYWN0aXZlTWVzc2FnZXMoKTtcbiAgICAgICAgaWYgKGFjdGl2ZU1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbk1lc3NhZ2VzLnNldChhY3RpdmVNZXNzYWdlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBmZXRjaEFsbENvbnZlcnNhdGlvbk1lc3NhZ2VzKFxuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UubWVzc2FnZUFwaSxcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb24uaWQsXG4gICAgICAgIDMwLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY29udmVyc2F0aW9uTWVzc2FnZXMuc2V0KG1lc3NhZ2VzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgY29udmVyc2F0aW9uIG1lZGlhIG1lc3NhZ2VzOicsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nTWVzc2FnZXMuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBpc1ByaXZhdGVDb252ZXJzYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29udmVyc2F0aW9uLnR5cGUgPT09ICdwcml2YXRlJztcbiAgfVxuXG4gIGlzR3JvdXBDb252ZXJzYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29udmVyc2F0aW9uLnR5cGUgPT09ICdncm91cCcgfHwgdGhpcy5jb252ZXJzYXRpb24udHlwZSA9PT0gJ2NoYW5uZWwnO1xuICB9XG5cbiAgbWVtYmVyc1NlY3Rpb25UaXRsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnRhYnMubWVtYmVycy1jb3VudC11cHBlcicsIHtcbiAgICAgIHBhcmFtczogeyBjb3VudDogdGhpcy5jb252ZXJzYXRpb24ucGFydGljaXBhbnRzLmxlbmd0aCB9LFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TWVtYmVyUm9sZUxhYmVsKHBhcnRpY2lwYW50OiBBWFBhcnRpY2lwYW50KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgc3dpdGNoIChwYXJ0aWNpcGFudC5yb2xlKSB7XG4gICAgICBjYXNlICdhZG1pbic6XG4gICAgICAgIHJldHVybiAnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwubWVtYmVyLXJvbGUuYWRtaW4nO1xuICAgICAgY2FzZSAnbW9kZXJhdG9yJzpcbiAgICAgICAgcmV0dXJuICdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC5tZW1iZXItcm9sZS5tb2RlcmF0b3InO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgb25NZW1iZXJTZWFyY2hDaGFuZ2UodmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLm1lbWJlclNlYXJjaFF1ZXJ5LnNldCh2YWx1ZSA/PyAnJyk7XG4gIH1cblxuICBzZXRBY3RpdmVUYWIodGFiOiAncHJvZmlsZScgfCAnbWFuYWdlJyk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlVGFiLnNldCh0YWIpO1xuICB9XG5cbiAgdG9nZ2xlTWVtYmVyU2VhcmNoKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd01lbWJlclNlYXJjaC51cGRhdGUoKHZhbHVlKSA9PiAhdmFsdWUpO1xuICAgIGlmICghdGhpcy5zaG93TWVtYmVyU2VhcmNoKCkpIHtcbiAgICAgIHRoaXMubWVtYmVyU2VhcmNoUXVlcnkuc2V0KCcnKTtcbiAgICB9XG4gIH1cblxuICBvcGVuTWVkaWFDYXRlZ29yeShjYXRlZ29yeTogQVhDb252ZXJzYXRpb25NZWRpYUNhdGVnb3J5KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZE1lZGlhQ2F0ZWdvcnkuc2V0KGNhdGVnb3J5KTtcbiAgICB0aGlzLnBhbmVsVmlldy5zZXQoJ21lZGlhJyk7XG4gIH1cblxuICBjbG9zZU1lZGlhVmlldygpOiB2b2lkIHtcbiAgICB0aGlzLnBhbmVsVmlldy5zZXQoJ21haW4nKTtcbiAgICB0aGlzLnNlbGVjdGVkTWVkaWFDYXRlZ29yeS5zZXQobnVsbCk7XG4gIH1cblxuICBnZXRNZWRpYVZpZXdJbnB1dHMoY2F0ZWdvcnk6IEFYQ29udmVyc2F0aW9uTWVkaWFDYXRlZ29yeSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgY2F0ZWdvcnksXG4gICAgICBtZXNzYWdlczogdGhpcy5jb252ZXJzYXRpb25NZXNzYWdlcygpLFxuICAgICAgY29udmVyc2F0aW9uOiB0aGlzLmNvbnZlcnNhdGlvbixcbiAgICAgIGNvbnZlcnNhdGlvblNlcnZpY2U6IHRoaXMuY29udmVyc2F0aW9uU2VydmljZSxcbiAgICAgIG9uQmFjazogKCkgPT4gdGhpcy5jbG9zZU1lZGlhVmlldygpLFxuICAgIH07XG4gIH1cblxuICBnZXRNZWRpYVJvd0xhYmVsKGNhdGVnb3J5OiBBWENvbnZlcnNhdGlvbk1lZGlhQ2F0ZWdvcnkpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoY2F0ZWdvcnkuY291bnRMYWJlbEtleSwge1xuICAgICAgcGFyYW1zOiB7IGNvdW50OiBjYXRlZ29yeS5jb3VudCB9LFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TWVtYmVyU3VidGl0bGUocGFydGljaXBhbnQ6IEFYUGFydGljaXBhbnQpOiBzdHJpbmcge1xuICAgIGlmIChwYXJ0aWNpcGFudC5zdGF0dXMgPT09ICdvbmxpbmUnKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQuc3RhdHVzLm9ubGluZScpO1xuICAgIH1cbiAgICBpZiAocGFydGljaXBhbnQuZGVzY3JpcHRpb24/LnRyaW0oKSkgcmV0dXJuIHBhcnRpY2lwYW50LmRlc2NyaXB0aW9uLnRyaW0oKTtcbiAgICBpZiAocGFydGljaXBhbnQucm9sZSAmJiBwYXJ0aWNpcGFudC5yb2xlICE9PSAnbWVtYmVyJykgcmV0dXJuIHBhcnRpY2lwYW50LnJvbGU7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgb25RdWlja0FjdGlvbihhY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgc3dpdGNoIChhY3Rpb25JZCkge1xuICAgICAgY2FzZSAnbXV0ZSc6XG4gICAgICAgIHZvaWQgdGhpcy50b2dnbGVDb252ZXJzYXRpb25NdXRlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGVhdmUnOlxuICAgICAgICB2b2lkIHRoaXMub25MZWF2ZSgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBhc3luYyB0b2dnbGVDb252ZXJzYXRpb25NdXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbnNFbmFibGVkID0gdGhpcy5saXZlQ29udmVyc2F0aW9uKCk/LnNldHRpbmdzPy5ub3RpZmljYXRpb25zID8/IHRydWU7XG4gICAgYXdhaXQgdGhpcy5vbk5vdGlmaWNhdGlvbnNDaGFuZ2UoIW5vdGlmaWNhdGlvbnNFbmFibGVkKTtcbiAgfVxuXG4gIGFzeW5jIG9uTm90aWZpY2F0aW9uc0NoYW5nZSh2YWx1ZTogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UudXBkYXRlQ29udmVyc2F0aW9uU2V0dGluZ3ModGhpcy5jb252ZXJzYXRpb24uaWQsIHtcbiAgICAgICAgbm90aWZpY2F0aW9uczogdmFsdWUsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5jb252ZXJzYXRpb24uc2V0dGluZ3MgPz8geyBub3RpZmljYXRpb25zOiB0cnVlLCBzaG93UHJldmlldzogdHJ1ZSB9O1xuICAgICAgdGhpcy5jb252ZXJzYXRpb24uc2V0dGluZ3MgPSB7IC4uLnNldHRpbmdzLCBub3RpZmljYXRpb25zOiB2YWx1ZSB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIG5vdGlmaWNhdGlvbnM6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uQXJjaGl2ZWRDaGFuZ2UodmFsdWU6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMuYXJjaGl2ZWQ7XG4gICAgdGhpcy5hcmNoaXZlZCA9IHZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UudXBkYXRlQ29udmVyc2F0aW9uKHRoaXMuY29udmVyc2F0aW9uLmlkLCB7IGFyY2hpdmVkOiB2YWx1ZSB9KTtcbiAgICAgIHRoaXMuY29udmVyc2F0aW9uLmFyY2hpdmVkID0gdmFsdWU7XG4gICAgICB0aGlzLmluaXRpYWxBcmNoaXZlZCA9IHZhbHVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhpcy5hcmNoaXZlZCA9IHByZXZpb3VzO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKGRhdGE/OiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgZXZlbnQgPSBuZXcgQVhDb21wb25lbnRDbG9zZUV2ZW50KCk7XG4gICAgZXZlbnQuY29tcG9uZW50ID0gdGhpcztcbiAgICBldmVudC5kYXRhID0gZGF0YTtcbiAgICB0aGlzLm9uQ2xvc2VkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgY2xvc2VBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgYXN5bmMgb25MZWF2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpc0dyb3VwID0gdGhpcy5pc0dyb3VwQ29udmVyc2F0aW9uKCk7XG4gICAgYXdhaXQgdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmRlbGV0ZUNvbnZlcnNhdGlvbih0aGlzLmNvbnZlcnNhdGlvbi5pZCk7XG5cbiAgICBpZiAodGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmFjdGl2ZUNvbnZlcnNhdGlvbigpPy5pZCA9PT0gdGhpcy5jb252ZXJzYXRpb24uaWQpIHtcbiAgICAgIHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5jbG9zZUFjdGl2ZUNvbnZlcnNhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MoXG4gICAgICBpc0dyb3VwXG4gICAgICAgID8gdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC50b2FzdHMubGVmdC1jb252ZXJzYXRpb24nKVxuICAgICAgICA6IHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwudG9hc3RzLmRlbGV0ZWQtY29udmVyc2F0aW9uJyksXG4gICAgKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBvbkdyb3VwVGl0bGVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZWRpdFRpdGxlID0gdmFsdWU7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZ3JvdXBUaXRsZVNhdmVUaW1lcik7XG4gICAgdGhpcy5ncm91cFRpdGxlU2F2ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB2b2lkIHRoaXMucGVyc2lzdEdyb3VwRGV0YWlscygpLCA0MDApO1xuICB9XG5cbiAgb25Hcm91cEF2YXRhckNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0QXZhdGFyID0gdmFsdWU7XG4gICAgdm9pZCB0aGlzLnBlcnNpc3RHcm91cERldGFpbHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGVyc2lzdEdyb3VwRGV0YWlscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1ByaXZhdGVDb252ZXJzYXRpb24oKSB8fCB0aGlzLmdyb3VwRGV0YWlsc1NhdmVJbkZsaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5lZGl0VGl0bGUudHJpbSgpO1xuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0QXZhdGFyID0gdGhpcy5lZGl0QXZhdGFyLnRyaW0oKSB8fCB1bmRlZmluZWQ7XG4gICAgY29uc3QgY3VycmVudFRpdGxlID0gdGhpcy5jb252ZXJzYXRpb24udGl0bGUgfHwgJyc7XG4gICAgY29uc3QgY3VycmVudEF2YXRhciA9IHRoaXMuY29udmVyc2F0aW9uLmF2YXRhciB8fCB1bmRlZmluZWQ7XG5cbiAgICBpZiAodGl0bGUgPT09IGN1cnJlbnRUaXRsZSAmJiBuZXh0QXZhdGFyID09PSBjdXJyZW50QXZhdGFyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5ncm91cERldGFpbHNTYXZlSW5GbGlnaHQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UudXBkYXRlQ29udmVyc2F0aW9uKHRoaXMuY29udmVyc2F0aW9uLmlkLCB7XG4gICAgICAgIHRpdGxlLFxuICAgICAgICBhdmF0YXI6IG5leHRBdmF0YXIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29udmVyc2F0aW9uLnRpdGxlID0gdGl0bGU7XG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbi5hdmF0YXIgPSBuZXh0QXZhdGFyO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIGdyb3VwIGRldGFpbHM6JywgZXJyb3IpO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwudG9hc3RzLmZhaWxlZC1ncm91cC11cGRhdGUnKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZ3JvdXBEZXRhaWxzU2F2ZUluRmxpZ2h0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaXNCYWNrZ3JvdW5kU2VsZWN0ZWQodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJnID0gdGhpcy5jb252ZXJzYXRpb24/Lm1ldGFkYXRhPy5bJ21lc3NhZ2VMaXN0QmFja2dyb3VuZCddO1xuICAgIHJldHVybiAodHlwZW9mIGJnID09PSAnc3RyaW5nJyA/IGJnIDogJycpID09PSB2YWx1ZTtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5TWVzc2FnZUxpc3RCYWNrZ3JvdW5kKHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLih0aGlzLmNvbnZlcnNhdGlvbi5tZXRhZGF0YSA/PyB7fSksXG4gICAgICAgIG1lc3NhZ2VMaXN0QmFja2dyb3VuZDogdmFsdWUsXG4gICAgICB9O1xuICAgICAgYXdhaXQgdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLnVwZGF0ZUNvbnZlcnNhdGlvbk1ldGFkYXRhKHRoaXMuY29udmVyc2F0aW9uLmlkLCBtZXRhZGF0YSk7XG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbi5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2VzcyhcbiAgICAgICAgdmFsdWVcbiAgICAgICAgICA/IHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwudG9hc3RzLmJhY2tncm91bmQtdXBkYXRlZCcpXG4gICAgICAgICAgOiB0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZVN5bmMoJ0BhY29yZXg6Y2hhdC5pbmZvLXBhbmVsLnRvYXN0cy5iYWNrZ3JvdW5kLXJlc2V0JyksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gdXBkYXRlIG1lc3NhZ2UgbGlzdCBiYWNrZ3JvdW5kOicsIGVycm9yKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcihcbiAgICAgICAgdGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC50b2FzdHMuZmFpbGVkLWJhY2tncm91bmQtdXBkYXRlJyksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEJhY2tncm91bmRBcmlhTGFiZWwobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlU3luYygnQGFjb3JleDpjaGF0LmluZm8tcGFuZWwuYmFja2dyb3VuZC5zZXQtbGFiZWwnLCB7XG4gICAgICBwYXJhbXM6IHsgbGFiZWwgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmdyb3VwVGl0bGVTYXZlVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmdyb3VwVGl0bGVTYXZlVGltZXIpO1xuICAgICAgdGhpcy5ncm91cFRpdGxlU2F2ZVRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgdm9pZCB0aGlzLnBlcnNpc3RHcm91cERldGFpbHMoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Tm90aWZpY2F0aW9ucyA9IHRoaXMubGl2ZUNvbnZlcnNhdGlvbigpPy5zZXR0aW5ncz8ubm90aWZpY2F0aW9ucyA/PyB0cnVlO1xuICAgIGNvbnN0IGhhc0NoYW5nZXMgPVxuICAgICAgY3VycmVudE5vdGlmaWNhdGlvbnMgIT09IHRoaXMuaW5pdGlhbE5vdGlmaWNhdGlvbnMgfHxcbiAgICAgIHRoaXMuYXJjaGl2ZWQgIT09IHRoaXMuaW5pdGlhbEFyY2hpdmVkO1xuXG4gICAgaWYgKGhhc0NoYW5nZXMpIHtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3ModGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGVTeW5jKCdAYWNvcmV4OmNoYXQuaW5mby1wYW5lbC50b2FzdHMuc2V0dGluZ3Mtc2F2ZWQnKSk7XG4gICAgfVxuICB9XG59XG4iXX0="],"names":["i3","i4"],"mappings":"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E,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-DwQUs1nf.mjs';
|
|
6
|
+
import { normalizeVideoPayload } from './acorex-components-conversation-video.payload-gfWFG79w.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 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
|
+
[VIDEO_UTILITY.preview]: (ctx, file) => ctx.readAsDataUrl(file),
|
|
48
|
+
[VIDEO_UTILITY.duration]: (ctx, file) => mediaDuration(ctx, file, 'video'),
|
|
49
|
+
[VIDEO_UTILITY.formatSize]: (_ctx, bytes) => formatFileSize(bytes),
|
|
50
|
+
[VIDEO_UTILITY.formatDuration]: (_ctx, seconds) => formatDuration(seconds),
|
|
51
|
+
[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-gkAIyZr1.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-components-conversation-conversation-video.file-type-gkAIyZr1.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 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 [VIDEO_UTILITY.preview]: (ctx, file) => ctx.readAsDataUrl(file),\n [VIDEO_UTILITY.duration]: (ctx, file) => mediaDuration(ctx, file, 'video'),\n [VIDEO_UTILITY.formatSize]: (_ctx, bytes) => formatFileSize(bytes),\n [VIDEO_UTILITY.formatDuration]: (_ctx, seconds) => formatDuration(seconds),\n [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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uLXZpZGVvLmZpbGUtdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvY29udmVyc2F0aW9uL3NyYy9saWIvcGx1Z2lucy9jb21wb3Nlci9jb21wb25lbnRzL3ZpZGVvLXBpY2tlci9jb252ZXJzYXRpb24tdmlkZW8uZmlsZS10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDN0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDdEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFFNUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLENBQUM7QUFFekMsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUV2QixNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRztJQUNoRCxJQUFJLEVBQUUsb0NBQW9DO0lBQzFDLEtBQUssRUFBRSxPQUFPO0NBQ04sQ0FBQztBQU9YLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLGNBQWMsRUFBRSxnQkFBZ0I7SUFDaEMscUJBQXFCLEVBQUUsdUJBQXVCO0NBQ3RDLENBQUM7QUFFWCxTQUFTLE9BQU8sQ0FBQyxHQUEyQixFQUFFLElBQVU7SUFDdEQsSUFBSSxDQUFDLGlCQUFpQixD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LENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7OEdBSFUsbUNBQW1DO2tIQUFuQyxtQ0FBbUMsY0FEdEIsTUFBTTs7MkZBQ25CLG1DQUFtQztrQkFEL0MsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFYRmlsZUNvcHlEYXRhLCBBWEZpbGVUeXBlIH0gZnJvbSAnQGFjb3JleC9jb3JlL2ZpbGUnO1xuaW1wb3J0IHsgQVhGaWxlVHlwZUluZm9Qcm92aWRlciwgY3JlYXRlRmlsZVR5cGVNZXRhZGF0YSB9IGZyb20gJ0BhY29yZXgvY29yZS9maWxlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQVhWaWRlb1BheWxvYWQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgQVhfQ09OVkVSU0FUSU9OX1ZJREVPX0NBVEFMT0cgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvbWVzc2FnZS1maWxlLXR5cGUtY2F0YWxvZyc7XG5pbXBvcnQgeyBub3JtYWxpemVWaWRlb1BheWxvYWQgfSBmcm9tICcuLi8uLi8uLi9tZXNzYWdlLWxpc3QvY29tcG9uZW50cy92aWRlby1yZW5kZXJlci92aWRlby5wYXlsb2FkJztcbmltcG9ydCB7IGZvcm1hdER1cmF0aW9uLCBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3NoYXJlZC9tZWRpYS1mb3JtYXR0ZXJzJztcblxuZXhwb3J0IHsgQVhfQ09OVkVSU0FUSU9OX1ZJREVPX0NBVEFMT0cgfTtcblxuY29uc3QgTUIgPSAxMDI0ICogMTAyNDtcblxuZXhwb3J0IGNvbnN0IEFYX0NPTlZFUlNBVElPTl9WSURFT19QUkVTRU5UQVRJT04gPSB7XG4gIGljb246ICdmYS1saWdodCBmYS12aWRlbyBheC10ZXh0LWJsdWUtNTAwJyxcbiAgdGl0bGU6ICdWaWRlbycsXG59IGFzIGNvbnN0O1xuXG50eXBlIEZpbGVUeXBlVXRpbGl0eUNvbnRleHQgPSB7XG4gIHJlYWRBc0RhdGFVcmw6IChmaWxlOiBGaWxlIHwgQmxvYikgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICBwbGF0Zm9ybUlkOiBvYmplY3Q7XG59O1xuXG5jb25zdCBWSURFT19VVElMSVRZID0ge1xuICBwcmV2aWV3OiAncHJldmlldycsXG4gIGR1cmF0aW9uOiAnZHVyYXRpb24nLFxuICBmb3JtYXRTaXplOiAnZm9ybWF0U2l6ZScsXG4gIGZvcm1hdER1cmF0aW9uOiAnZm9ybWF0RHVyYXRpb24nLFxuICBjcmVhdGVMb2NhbFByZXZpZXdVcmw6ICdjcmVhdGVMb2NhbFByZXZpZXdVcmwnLFxufSBhcyBjb25zdDtcblxuZnVuY3Rpb24gYmxvYlVybChjdHg6IEZpbGVUeXBlVXRpbGl0eUNvbnRleHQsIGJsb2I6IEJsb2IpOiBzdHJpbmcge1xuICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKGN0eC5wbGF0Zm9ybUlkKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbn1cblxuZnVuY3Rpb24gbWVkaWFEdXJhdGlvbihjdHg6IEZpbGVUeXBlVXRpbGl0eUNvbnRleHQsIGZpbGU6IEZpbGUgfCBCbG9iLCB0YWc6ICd2aWRlbycgfCAnYXVkaW8nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgaWYgKCFpc1BsYXRmb3JtQnJvd3NlcihjdHgucGxhdGZvcm1JZCkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKDApO1xuICB9XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICAgZWwucHJlbG9hZCA9ICdtZXRhZGF0YSc7XG4gICAgZWwub25sb2FkZWRtZXRhZGF0YSA9ICgpID0+IHtcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZWwuc3JjKTtcbiAgICAgIHJlc29sdmUoZWwuZHVyYXRpb24pO1xuICAgIH07XG4gICAgZWwub25lcnJvciA9ICgpID0+IHtcbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZWwuc3JjKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkICR7dGFnfSBtZXRhZGF0YWApKTtcbiAgICB9O1xuICAgIGVsLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVyc2F0aW9uVmlkZW9VdGlsaXRpZXMoKTogTm9uTnVsbGFibGU8QVhGaWxlVHlwZVsndXRpbGl0aWVzJ10+IHtcbiAgcmV0dXJuIHtcbiAgICBbVklERU9fVVRJTElUWS5wcmV2aWV3XTogKGN0eCwgZmlsZSkgPT4gKGN0eCBhcyBGaWxlVHlwZVV0aWxpdHlDb250ZXh0KS5yZWFkQXNEYXRhVXJsKGZpbGUgYXMgRmlsZSksXG4gICAgW1ZJREVPX1VUSUxJVFkuZHVyYXRpb25dOiAoY3R4LCBmaWxlKSA9PiBtZWRpYUR1cmF0aW9uKGN0eCBhcyBGaWxlVHlwZVV0aWxpdHlDb250ZXh0LCBmaWxlIGFzIEZpbGUsICd2aWRlbycpLFxuICAgIFtWSURFT19VVElMSVRZLmZvcm1hdFNpemVdOiAoX2N0eCwgYnl0ZXMpID0+IGZvcm1hdEZpbGVTaXplKGJ5dGVzIGFzIG51bWJlciksXG4gICAgW1ZJREVPX1VUSUxJVFkuZm9ybWF0RHVyYXRpb25dOiAoX2N0eCwgc2Vjb25kcykgPT4gZm9ybWF0RHVyYXRpb24oc2Vjb25kcyBhcyBudW1iZXIpLFxuICAgIFtWSURFT19VVElMSVRZLmNyZWF0ZUxvY2FsUHJldmlld1VybF06IGFzeW5jIChjdHgsIHNvdXJjZSkgPT4ge1xuICAgICAgY29uc3QgYmxvYiA9IHNvdXJjZSBhcyBGaWxlIHwgQmxvYjtcbiAgICAgIGlmIChibG9iLnR5cGUuc3RhcnRzV2l0aCgnaW1hZ2UvJykpIHtcbiAgICAgICAgcmV0dXJuIChjdHggYXMgRmlsZVR5cGVVdGlsaXR5Q29udGV4dCkucmVhZEFzRGF0YVVybChibG9iKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBibG9iVXJsKGN0eCBhcyBGaWxlVHlwZVV0aWxpdHlDb250ZXh0LCBibG9iKTtcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29udmVyc2F0aW9uVmlkZW9GaWxlVHlwZSgpOiBBWEZpbGVUeXBlIHtcbiAgY29uc3QgcHJlc2VudGF0aW9uID0gQVhfQ09OVkVSU0FUSU9OX1ZJREVPX1BSRVNFTlRBVElPTjtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBBWF9DT05WRVJTQVRJT05fVklERU9fQ0FUQUxPRyxcbiAgICBtZXRhZGF0YTogY3JlYXRlRmlsZVR5cGVNZXRhZGF0YSgnY29udmVyc2F0aW9uJyksXG4gICAgdGl0bGU6IHByZXNlbnRhdGlvbi50aXRsZSxcbiAgICBpY29uOiBwcmVzZW50YXRpb24uaWNvbixcbiAgICB2YWxpZGF0aW9uczoge1xuICAgICAgbWltZVR5cGVzOiBbJ3ZpZGVvLyonXSxcbiAgICAgIG1pblNpemU6IDEsXG4gICAgICBtYXhTaXplOiA1MDAgKiBNQixcbiAgICB9LFxuICAgIGV4dGVuc2lvbnM6IFtcbiAgICAgIHsgbmFtZTogJ21wNCcsIHRpdGxlOiAnTVA0JyB9LFxuICAgICAgeyBuYW1lOiAnd2VibScsIHRpdGxlOiAnV2ViTScsIHZhbGlkYXRpb25zOiB7IG1heFNpemU6IDIwMCAqIE1CIH0gfSxcbiAgICAgIHsgbmFtZTogJ29nZycsIHRpdGxlOiAnT0dHJyB9LFxuICAgIF0sXG4gICAgdXRpbGl0aWVzOiBjb252ZXJzYXRpb25WaWRlb1V0aWxpdGllcygpLFxuICAgIGNvcHk6IChwYXlsb2FkKTogQVhGaWxlQ29weURhdGEgPT4ge1xuICAgICAgY29uc3QgdmlkZW8gPSBub3JtYWxpemVWaWRlb1BheWxvYWQocGF5bG9hZCBhcyBBWFZpZGVvUGF5bG9hZCk7XG4gICAgICBjb25zdCBjYXB0aW9uID0gdmlkZW8uY2FwdGlvbj8udHJpbSgpO1xuICAgICAgY29uc3QgdXJscyA9IHZpZGVvLnZpZGVvcy5tYXAoKGl0ZW0pID0+IGl0ZW0udXJsPy50cmltKCkpLmZpbHRlcigodXJsKTogdXJsIGlzIHN0cmluZyA9PiAhIXVybCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0ZXh0OiBjYXB0aW9uID8/ICcnLFxuICAgICAgICBtZXRhOiB7IGtpbmQ6ICd2aWRlbycsIGNhcHRpb24sIHVybHMsIGNvdW50OiB2aWRlby52aWRlb3MubGVuZ3RoIH0sXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQVhDb252ZXJzYXRpb25WaWRlb0ZpbGVUeXBlUHJvdmlkZXIgZXh0ZW5kcyBBWEZpbGVUeXBlSW5mb1Byb3ZpZGVyIHtcbiAgaXRlbXMoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbY3JlYXRlQ29udmVyc2F0aW9uVmlkZW9GaWxlVHlwZSgpXSk7XG4gIH1cbn1cbiJdfQ=="],"names":[],"mappings":"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"}
|