@cometchat/chat-uikit-angular 4.3.35 → 5.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (648) hide show
  1. package/README.md +86 -14
  2. package/fesm2022/cometchat-chat-uikit-angular.mjs +107859 -0
  3. package/fesm2022/cometchat-chat-uikit-angular.mjs.map +1 -0
  4. package/package.json +14 -21
  5. package/screenshots/sample_app_overview.png +0 -0
  6. package/src/lib/assets/Collaborative-Whiteboard-Preview-Light.png +0 -0
  7. package/src/lib/assets/Collaborative-document-Preview-light.png +0 -0
  8. package/src/lib/assets/Collaborative_Document_Dark.png +0 -0
  9. package/src/lib/assets/Collaborative_Document_Light.png +0 -0
  10. package/src/lib/assets/Collaborative_Whiteboard_Dark.png +0 -0
  11. package/src/lib/assets/Collaborative_Whiteboard_Light.png +0 -0
  12. package/src/lib/assets/Copy.svg +5 -0
  13. package/src/lib/assets/Info.svg +8 -0
  14. package/src/lib/assets/Profile.png +0 -0
  15. package/src/lib/assets/Send.svg +3 -0
  16. package/src/lib/assets/Spinner-Gradient-1.svg +12 -0
  17. package/src/lib/assets/account_circle.svg +8 -0
  18. package/src/lib/assets/activity.svg +10 -0
  19. package/src/lib/assets/add.svg +8 -0
  20. package/src/lib/assets/add_a_photo.svg +8 -0
  21. package/src/lib/assets/add_box.svg +8 -0
  22. package/src/lib/assets/add_call.svg +8 -0
  23. package/src/lib/assets/add_circle.svg +3 -0
  24. package/src/lib/assets/add_circle_fill.svg +3 -0
  25. package/src/lib/assets/add_comment.svg +8 -0
  26. package/src/lib/assets/add_reaction.svg +8 -0
  27. package/src/lib/assets/add_reaction_icon.svg +5 -0
  28. package/src/lib/assets/ai_conversation_summary.svg +3 -0
  29. package/src/lib/assets/ai_fill.svg +4 -0
  30. package/src/lib/assets/ai_suggest_reply.svg +3 -0
  31. package/src/lib/assets/alternate_email.svg +8 -0
  32. package/src/lib/assets/animals_nature.svg +10 -0
  33. package/src/lib/assets/archive.svg +8 -0
  34. package/src/lib/assets/arrow_back.svg +8 -0
  35. package/src/lib/assets/arrow_forward.svg +8 -0
  36. package/src/lib/assets/attach_file.svg +8 -0
  37. package/src/lib/assets/audio_call_button.svg +5 -0
  38. package/src/lib/assets/audio_filter_icon.svg +3 -0
  39. package/src/lib/assets/bar_chart.svg +3 -0
  40. package/src/lib/assets/bedtime.svg +8 -0
  41. package/src/lib/assets/block.svg +8 -0
  42. package/src/lib/assets/bold-format.svg +3 -0
  43. package/src/lib/assets/bookmark.svg +8 -0
  44. package/src/lib/assets/bookmark_add.svg +8 -0
  45. package/src/lib/assets/bullet-list-format.svg +3 -0
  46. package/src/lib/assets/calendar_add_on.svg +8 -0
  47. package/src/lib/assets/calendar_today.svg +8 -0
  48. package/src/lib/assets/call-log-audio.svg +3 -0
  49. package/src/lib/assets/call-log_video.svg +3 -0
  50. package/src/lib/assets/call-logs_empty_state.svg +8 -0
  51. package/src/lib/assets/call-logs_empty_state_dark.svg +8 -0
  52. package/src/lib/assets/call.svg +8 -0
  53. package/src/lib/assets/call_end.svg +8 -0
  54. package/src/lib/assets/call_end_no_fill.svg +3 -0
  55. package/src/lib/assets/call_log.svg +8 -0
  56. package/src/lib/assets/call_made.svg +8 -0
  57. package/src/lib/assets/call_missed.svg +8 -0
  58. package/src/lib/assets/call_missed_outgoing.svg +8 -0
  59. package/src/lib/assets/call_received.svg +8 -0
  60. package/src/lib/assets/cancel.svg +8 -0
  61. package/src/lib/assets/cancel_fill.svg +8 -0
  62. package/src/lib/assets/change_circle.svg +3 -0
  63. package/src/lib/assets/change_scope.png +0 -0
  64. package/src/lib/assets/chat-history.svg +3 -0
  65. package/src/lib/assets/chat.svg +8 -0
  66. package/src/lib/assets/chat_bot.svg +3 -0
  67. package/src/lib/assets/chats_filter_icon.svg +1 -0
  68. package/src/lib/assets/check.svg +8 -0
  69. package/src/lib/assets/check_circle.svg +3 -0
  70. package/src/lib/assets/checkbox_tick.svg +5 -0
  71. package/src/lib/assets/chevron_left.svg +8 -0
  72. package/src/lib/assets/chevron_right.svg +8 -0
  73. package/src/lib/assets/circle.svg +3 -0
  74. package/src/lib/assets/close.svg +8 -0
  75. package/src/lib/assets/code-block-format.svg +3 -0
  76. package/src/lib/assets/code-format.svg +3 -0
  77. package/src/lib/assets/collaborative_document_fill.svg +4 -0
  78. package/src/lib/assets/collaborative_whiteboard.svg +4 -0
  79. package/src/lib/assets/collaborative_whiteboard_fill.svg +4 -0
  80. package/src/lib/assets/collabrative_document.svg +4 -0
  81. package/src/lib/assets/content_copy.svg +8 -0
  82. package/src/lib/assets/conversation_summary.svg +4 -0
  83. package/src/lib/assets/conversations_audio-message.svg +8 -0
  84. package/src/lib/assets/conversations_card-message.svg +8 -0
  85. package/src/lib/assets/conversations_collaborative-document-message.svg +4 -0
  86. package/src/lib/assets/conversations_collaborative-whiteboard-message.svg +5 -0
  87. package/src/lib/assets/conversations_delete.svg +8 -0
  88. package/src/lib/assets/conversations_delivered.svg +3 -0
  89. package/src/lib/assets/conversations_dropdown.svg +3 -0
  90. package/src/lib/assets/conversations_empty_state.svg +20 -0
  91. package/src/lib/assets/conversations_empty_state_dark.svg +20 -0
  92. package/src/lib/assets/conversations_error.svg +16 -0
  93. package/src/lib/assets/conversations_file-message.svg +8 -0
  94. package/src/lib/assets/conversations_form-message.svg +3 -0
  95. package/src/lib/assets/conversations_image-message.svg +8 -0
  96. package/src/lib/assets/conversations_incoming-video-call.svg +8 -0
  97. package/src/lib/assets/conversations_incoming-voice-call.svg +3 -0
  98. package/src/lib/assets/conversations_link.svg +8 -0
  99. package/src/lib/assets/conversations_missed-video-call.svg +8 -0
  100. package/src/lib/assets/conversations_missed-voice-call.svg +3 -0
  101. package/src/lib/assets/conversations_outgoing-video-call.svg +8 -0
  102. package/src/lib/assets/conversations_outgoing-voice-call.svg +4 -0
  103. package/src/lib/assets/conversations_poll-message.svg +3 -0
  104. package/src/lib/assets/conversations_read.svg +3 -0
  105. package/src/lib/assets/conversations_schedular-message.svg +8 -0
  106. package/src/lib/assets/conversations_sent.svg +3 -0
  107. package/src/lib/assets/conversations_sticker-message.svg +4 -0
  108. package/src/lib/assets/conversations_thread.svg +8 -0
  109. package/src/lib/assets/conversations_video-message.svg +8 -0
  110. package/{assets/wait.svg → src/lib/assets/conversations_wait.svg} +0 -0
  111. package/src/lib/assets/copy-text.svg +3 -0
  112. package/src/lib/assets/crop.svg +8 -0
  113. package/src/lib/assets/delete.svg +8 -0
  114. package/src/lib/assets/delete_icon.svg +4 -0
  115. package/src/lib/assets/deliveredIcon.svg +5 -0
  116. package/src/lib/assets/description.svg +8 -0
  117. package/src/lib/assets/document_icon.svg +10 -0
  118. package/src/lib/assets/done_all.svg +8 -0
  119. package/src/lib/assets/download.svg +8 -0
  120. package/src/lib/assets/dropdown-arrow.svg +3 -0
  121. package/src/lib/assets/edit.svg +8 -0
  122. package/src/lib/assets/edit_calendar.svg +8 -0
  123. package/src/lib/assets/edit_icon.svg +5 -0
  124. package/src/lib/assets/edit_square.svg +3 -0
  125. package/src/lib/assets/error.svg +9 -0
  126. package/src/lib/assets/error_icon.svg +3 -0
  127. package/src/lib/assets/error_info.svg +3 -0
  128. package/src/lib/assets/event.svg +8 -0
  129. package/src/lib/assets/favorite.svg +8 -0
  130. package/src/lib/assets/file_filter_icon.svg +4 -0
  131. package/src/lib/assets/file_type_jpg.png +0 -0
  132. package/src/lib/assets/file_type_link.png +0 -0
  133. package/src/lib/assets/file_type_mov.png +0 -0
  134. package/src/lib/assets/file_type_mp3.png +0 -0
  135. package/src/lib/assets/file_type_pdf.png +0 -0
  136. package/src/lib/assets/file_type_ppt.png +0 -0
  137. package/src/lib/assets/file_type_txt.png +0 -0
  138. package/src/lib/assets/file_type_unsupported.png +0 -0
  139. package/src/lib/assets/file_type_word.png +0 -0
  140. package/src/lib/assets/file_type_xlsx.png +0 -0
  141. package/src/lib/assets/file_type_zip.png +0 -0
  142. package/src/lib/assets/filter_list.svg +8 -0
  143. package/src/lib/assets/filter_list_off.svg +8 -0
  144. package/src/lib/assets/flags.svg +5 -0
  145. package/src/lib/assets/flip_camera_ios.svg +8 -0
  146. package/src/lib/assets/food_drink.svg +10 -0
  147. package/src/lib/assets/forward.svg +8 -0
  148. package/src/lib/assets/gif.svg +3 -0
  149. package/src/lib/assets/graphic_eq.svg +3 -0
  150. package/src/lib/assets/group_filter_icon.svg +3 -0
  151. package/src/lib/assets/groups_empty_state.svg +8 -0
  152. package/src/lib/assets/groups_empty_state_dark.svg +8 -0
  153. package/src/lib/assets/help.svg +8 -0
  154. package/src/lib/assets/history.svg +8 -0
  155. package/src/lib/assets/image_placeholder.png +0 -0
  156. package/src/lib/assets/incoming_video.svg +8 -0
  157. package/src/lib/assets/incoming_video_no_fill.svg +4 -0
  158. package/src/lib/assets/info_icon.svg +3 -0
  159. package/src/lib/assets/info_icon_fill.svg +5 -0
  160. package/src/lib/assets/italic-format.svg +3 -0
  161. package/src/lib/assets/keep.svg +8 -0
  162. package/src/lib/assets/keep_off.svg +8 -0
  163. package/src/lib/assets/keyboard.svg +8 -0
  164. package/src/lib/assets/keyboard_arrow_down.svg +8 -0
  165. package/src/lib/assets/keyboard_arrow_up.svg +8 -0
  166. package/src/lib/assets/language.svg +8 -0
  167. package/src/lib/assets/link.svg +8 -0
  168. package/src/lib/assets/link_filter_icon.svg +3 -0
  169. package/src/lib/assets/link_icon_2x.svg +3 -0
  170. package/src/lib/assets/list_error_state_icon.svg +20 -0
  171. package/src/lib/assets/list_error_state_icon_dark.svg +27 -0
  172. package/src/lib/assets/loading.svg +5 -0
  173. package/src/lib/assets/loading_animation.svg +5 -0
  174. package/src/lib/assets/loading_icon.svg +3 -0
  175. package/src/lib/assets/location_on.svg +8 -0
  176. package/src/lib/assets/lock.svg +8 -0
  177. package/src/lib/assets/lock_open.svg +8 -0
  178. package/src/lib/assets/logout.svg +3 -0
  179. package/src/lib/assets/mail.svg +8 -0
  180. package/src/lib/assets/message_blocked.svg +8 -0
  181. package/src/lib/assets/message_delete.svg +8 -0
  182. package/src/lib/assets/messages_filter_icon.svg +1 -0
  183. package/src/lib/assets/mic.svg +3 -0
  184. package/src/lib/assets/mic_fill.svg +8 -0
  185. package/src/lib/assets/mic_off.svg +8 -0
  186. package/src/lib/assets/missedCallIcon.svg +10 -0
  187. package/src/lib/assets/missed_video_call.svg +8 -0
  188. package/src/lib/assets/missed_video_call_no_fill.svg +3 -0
  189. package/src/lib/assets/mood.svg +3 -0
  190. package/src/lib/assets/mood_fill.svg +8 -0
  191. package/src/lib/assets/more_icon.svg +5 -0
  192. package/src/lib/assets/more_vert.svg +8 -0
  193. package/src/lib/assets/near_me.svg +3 -0
  194. package/src/lib/assets/new-chat.svg +3 -0
  195. package/src/lib/assets/no-messages.svg +8 -0
  196. package/src/lib/assets/no_photography.svg +8 -0
  197. package/src/lib/assets/notifications.svg +8 -0
  198. package/src/lib/assets/notifications_off.svg +8 -0
  199. package/src/lib/assets/number-list-format.svg +3 -0
  200. package/src/lib/assets/objects.svg +10 -0
  201. package/src/lib/assets/outgoing_video.svg +8 -0
  202. package/src/lib/assets/outgoing_video_no_fill.svg +4 -0
  203. package/src/lib/assets/pause.svg +8 -0
  204. package/src/lib/assets/person.svg +8 -0
  205. package/src/lib/assets/person_add.svg +8 -0
  206. package/src/lib/assets/phone_in_talk.svg +8 -0
  207. package/src/lib/assets/phone_incoming.svg +3 -0
  208. package/src/lib/assets/phone_incoming_no_fill.svg +3 -0
  209. package/src/lib/assets/phone_missed.svg +8 -0
  210. package/src/lib/assets/phone_missed_no_fill.svg +3 -0
  211. package/src/lib/assets/phone_outgoing.svg +4 -0
  212. package/src/lib/assets/phone_outgoing_no_fill.svg +4 -0
  213. package/src/lib/assets/photo.svg +8 -0
  214. package/src/lib/assets/photo_camera.svg +8 -0
  215. package/src/lib/assets/photo_filter_icon.svg +3 -0
  216. package/src/lib/assets/placeholder.png +0 -0
  217. package/src/lib/assets/play_arrow.svg +8 -0
  218. package/src/lib/assets/play_circle.svg +8 -0
  219. package/src/lib/assets/poll.svg +5 -0
  220. package/src/lib/assets/quote-format.svg +3 -0
  221. package/src/lib/assets/readIcon.svg +5 -0
  222. package/src/lib/assets/rearrange.svg +3 -0
  223. package/src/lib/assets/recording_icon.svg +10 -0
  224. package/src/lib/assets/recording_resume.svg +10 -0
  225. package/src/lib/assets/refresh.svg +8 -0
  226. package/src/lib/assets/reply.svg +8 -0
  227. package/src/lib/assets/reply_all.svg +8 -0
  228. package/src/lib/assets/reply_in_thread.svg +10 -0
  229. package/src/lib/assets/retry.svg +3 -0
  230. package/src/lib/assets/right-arrow.svg +3 -0
  231. package/src/lib/assets/sample-audio.wav +0 -0
  232. package/src/lib/assets/sample-video-thumbnail.svg +7 -0
  233. package/src/lib/assets/sample-video.mp4 +0 -0
  234. package/src/lib/assets/schedule.svg +8 -0
  235. package/src/lib/assets/screen_share.svg +8 -0
  236. package/src/lib/assets/search.svg +8 -0
  237. package/src/lib/assets/search_message_icon.svg +8 -0
  238. package/src/lib/assets/send-message.svg +3 -0
  239. package/src/lib/assets/send_fill.svg +8 -0
  240. package/src/lib/assets/settings.svg +8 -0
  241. package/src/lib/assets/share.svg +8 -0
  242. package/src/lib/assets/shield.svg +3 -0
  243. package/src/lib/assets/smileys_people.svg +10 -0
  244. package/src/lib/assets/star.svg +8 -0
  245. package/src/lib/assets/status_delivered.svg +5 -0
  246. package/src/lib/assets/status_error.svg +16 -0
  247. package/src/lib/assets/status_read.svg +3 -0
  248. package/src/lib/assets/status_sending.svg +5 -0
  249. package/src/lib/assets/status_sent.svg +5 -0
  250. package/src/lib/assets/sticker.svg +3 -0
  251. package/src/lib/assets/sticker_fill.svg +4 -0
  252. package/src/lib/assets/stop-message.svg +3 -0
  253. package/src/lib/assets/stop.svg +8 -0
  254. package/src/lib/assets/stop_circle.svg +8 -0
  255. package/src/lib/assets/stop_screen_share.svg +8 -0
  256. package/src/lib/assets/strike-out-format.svg +3 -0
  257. package/src/lib/assets/subdirectory_arrow_left.svg +8 -0
  258. package/src/lib/assets/subdirectory_arrow_right.svg +8 -0
  259. package/src/lib/assets/sunny.svg +8 -0
  260. package/src/lib/assets/symbols.svg +13 -0
  261. package/src/lib/assets/thumb_down.svg +8 -0
  262. package/src/lib/assets/thumb_up.svg +8 -0
  263. package/src/lib/assets/toast_check_circle.svg +3 -0
  264. package/src/lib/assets/toast_error.svg +3 -0
  265. package/src/lib/assets/toast_info.svg +3 -0
  266. package/src/lib/assets/toast_warning.svg +3 -0
  267. package/src/lib/assets/toolbar-toggle.svg +3 -0
  268. package/src/lib/assets/tooltip-side.svg +5 -0
  269. package/src/lib/assets/tooltip.svg +5 -0
  270. package/src/lib/assets/translate.svg +3 -0
  271. package/src/lib/assets/travel_places.svg +10 -0
  272. package/src/lib/assets/ulr-format.svg +3 -0
  273. package/src/lib/assets/underline-format.svg +3 -0
  274. package/src/lib/assets/unread_filter_icon.svg +7 -0
  275. package/src/lib/assets/upload.svg +3 -0
  276. package/src/lib/assets/user_empty.svg +8 -0
  277. package/src/lib/assets/user_empty_dark.svg +8 -0
  278. package/src/lib/assets/video_call.svg +8 -0
  279. package/src/lib/assets/video_call_button.svg +5 -0
  280. package/src/lib/assets/video_filter_icon.svg +3 -0
  281. package/src/lib/assets/videocam.svg +8 -0
  282. package/src/lib/assets/videocam_off.svg +8 -0
  283. package/src/lib/assets/visibility_off.svg +3 -0
  284. package/src/lib/assets/volume_down.svg +8 -0
  285. package/src/lib/assets/volume_mute.svg +8 -0
  286. package/src/lib/assets/volume_off.svg +8 -0
  287. package/src/lib/assets/volume_up.svg +8 -0
  288. package/src/lib/assets/warning.svg +8 -0
  289. package/src/lib/assets/warning_neutral.svg +3 -0
  290. package/src/lib/assets/wifi.svg +8 -0
  291. package/src/lib/assets/zoom_in_map.svg +8 -0
  292. package/src/lib/assets/zoom_out_map.svg +8 -0
  293. package/styles/accessibility.css +148 -0
  294. package/styles/css-variables.css +547 -0
  295. package/styles/fonts/Roboto/LICENSE.txt +202 -0
  296. package/styles/fonts/Roboto/Roboto-Black.ttf +0 -0
  297. package/styles/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
  298. package/styles/fonts/Roboto/Roboto-Bold.ttf +0 -0
  299. package/styles/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
  300. package/styles/fonts/Roboto/Roboto-Italic.ttf +0 -0
  301. package/styles/fonts/Roboto/Roboto-Light.ttf +0 -0
  302. package/styles/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
  303. package/styles/fonts/Roboto/Roboto-Medium.ttf +0 -0
  304. package/styles/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
  305. package/styles/fonts/Roboto/Roboto-Regular.ttf +0 -0
  306. package/styles/fonts/Roboto/Roboto-Thin.ttf +0 -0
  307. package/styles/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
  308. package/styles/mention-styles.css +190 -0
  309. package/styles/rich-text-styles.css +310 -0
  310. package/types/cometchat-chat-uikit-angular.d.ts +34636 -0
  311. package/AI/AIAssistBot/AIAssistBot.d.ts +0 -7
  312. package/AI/AIAssistBot/AIAssistBotDecorator.d.ts +0 -11
  313. package/AI/AIConversationStarter/AIConversationStarter.d.ts +0 -7
  314. package/AI/AIConversationStarter/AIConversationStarterDecorator.d.ts +0 -9
  315. package/AI/AIConversationSummary/AIConversationSummary.d.ts +0 -7
  316. package/AI/AIConversationSummary/AIConversationSummaryDecorator.d.ts +0 -10
  317. package/AI/AISmartReplies/AISmartReplies.d.ts +0 -7
  318. package/AI/AISmartReplies/AISmartRepliesDecorator.d.ts +0 -9
  319. package/Calls/CallingExtension.d.ts +0 -6
  320. package/Calls/CallingExtensionDecorator.d.ts +0 -16
  321. package/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.d.ts +0 -79
  322. package/Calls/CometChatCallButtons/cometchat-call-buttons.module.d.ts +0 -11
  323. package/Calls/CometChatCallLogDetails/cometchat-call-log-details/cometchat-call-log-details.component.d.ts +0 -136
  324. package/Calls/CometChatCallLogDetails/cometchat-call-log-details.module.d.ts +0 -14
  325. package/Calls/CometChatCallLogHistory/cometchat-call-log-history/cometchat-call-log-history.component.d.ts +0 -112
  326. package/Calls/CometChatCallLogHistory/cometchat-call-log-history.module.d.ts +0 -10
  327. package/Calls/CometChatCallLogParticipants/cometchat-call-log-participants/cometchat-call-log-participants.component.d.ts +0 -77
  328. package/Calls/CometChatCallLogParticipants/cometchat-call-log-participants.module.d.ts +0 -10
  329. package/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings/cometchat-call-log-recordings.component.d.ts +0 -91
  330. package/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings.module.d.ts +0 -10
  331. package/Calls/CometChatCallLogs/cometchat-call-logs/cometchat-call-logs.component.d.ts +0 -134
  332. package/Calls/CometChatCallLogs/cometchat-call-logs.module.d.ts +0 -12
  333. package/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details/cometchat-call-logs-with-details.component.d.ts +0 -54
  334. package/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details.module.d.ts +0 -12
  335. package/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.d.ts +0 -81
  336. package/Calls/CometChatIncomingCall/cometchat-incoming-call.module.d.ts +0 -11
  337. package/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.d.ts +0 -38
  338. package/Calls/CometChatOngoingCall/cometchat-ongoing-call.module.d.ts +0 -9
  339. package/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.d.ts +0 -57
  340. package/Calls/CometChatOutgoingCall/cometchat-outgoing-call.module.d.ts +0 -10
  341. package/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.d.ts +0 -117
  342. package/CometChatAddMembers/cometchat-add-members.module.d.ts +0 -12
  343. package/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.d.ts +0 -152
  344. package/CometChatBannedMembers/cometchat-banned-members.module.d.ts +0 -13
  345. package/CometChatContacts/cometchat-contacts/cometchat-contacts.component.d.ts +0 -66
  346. package/CometChatContacts/cometchat-contacts.module.d.ts +0 -12
  347. package/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +0 -387
  348. package/CometChatConversations/cometchat-conversations.module.d.ts +0 -10
  349. package/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.d.ts +0 -98
  350. package/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.d.ts +0 -11
  351. package/CometChatDetails/cometchat-details/cometchat-details.component.d.ts +0 -164
  352. package/CometChatDetails/cometchat-details.module.d.ts +0 -12
  353. package/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.d.ts +0 -162
  354. package/CometChatGroupMembers/cometchat-group-members.module.d.ts +0 -13
  355. package/CometChatGroups/cometchat-groups/cometchat-groups.component.d.ts +0 -150
  356. package/CometChatGroups/cometchat-groups.module.d.ts +0 -10
  357. package/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.d.ts +0 -103
  358. package/CometChatGroupsWithMessages/cometchat-groups-with-messages.module.d.ts +0 -11
  359. package/CometChatList/cometchat-list.component.d.ts +0 -91
  360. package/CometChatList/cometchat-list.module.d.ts +0 -10
  361. package/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.d.ts +0 -63
  362. package/CometChatMessageBubble/cometchat-message-bubble.module.d.ts +0 -8
  363. package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +0 -326
  364. package/CometChatMessageComposer/cometchat-message-composer.module.d.ts +0 -11
  365. package/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.d.ts +0 -99
  366. package/CometChatMessageHeader/cometchat-message-header.module.d.ts +0 -9
  367. package/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.d.ts +0 -99
  368. package/CometChatMessageInformation/cometchat-message-information.module.d.ts +0 -10
  369. package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +0 -819
  370. package/CometChatMessageList/cometchat-message-list.module.d.ts +0 -13
  371. package/CometChatMessages/cometchat-messages/cometchat-messages.component.d.ts +0 -149
  372. package/CometChatMessages/cometchat-messages.module.d.ts +0 -16
  373. package/CometChatTheme.service.d.ts +0 -7
  374. package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +0 -85
  375. package/CometChatThreadedMessages/cometchat-threaded-messages.module.d.ts +0 -12
  376. package/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.d.ts +0 -88
  377. package/CometChatTransferOwnership/cometchat-transfer-ownership.module.d.ts +0 -10
  378. package/CometChatUserMemberWrapper/cometchat-user-member-wrapper.component.d.ts +0 -41
  379. package/CometChatUserMemberWrapper/cometchat-user-member-wrapper.module.d.ts +0 -11
  380. package/CometChatUsers/cometchat-users/cometchat-users.component.d.ts +0 -194
  381. package/CometChatUsers/cometchat-users.module.d.ts +0 -11
  382. package/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.d.ts +0 -72
  383. package/CometChatUsersWithMessages/cometchat-users-with-messages.module.d.ts +0 -10
  384. package/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.d.ts +0 -5
  385. package/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.d.ts +0 -14
  386. package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.d.ts +0 -5
  387. package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.d.ts +0 -14
  388. package/Extensions/ImageModeration/ImageModerationExtension.d.ts +0 -5
  389. package/Extensions/ImageModeration/ImageModerationExtensionDecorator.d.ts +0 -6
  390. package/Extensions/LinkPreviewExtension/LinkPreviewExtension.d.ts +0 -5
  391. package/Extensions/LinkPreviewExtension/LinkPreviewExtensionDecorator.d.ts +0 -6
  392. package/Extensions/MessageTranslation/MessageTranslationExtension.d.ts +0 -5
  393. package/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.d.ts +0 -9
  394. package/Extensions/PollsExtension/PollsExtension.d.ts +0 -5
  395. package/Extensions/PollsExtension/PollsExtensionDecorator.d.ts +0 -14
  396. package/Extensions/SmartReplies/SmartRepliesExtension.d.ts +0 -5
  397. package/Extensions/SmartReplies/SmartRepliesExtensionDecorator.d.ts +0 -16
  398. package/Extensions/Stickers/StickersExtension.d.ts +0 -5
  399. package/Extensions/Stickers/StickersExtensionDecorator.d.ts +0 -28
  400. package/Extensions/TextModerator/TextModeratorExtension.d.ts +0 -6
  401. package/Extensions/TextModerator/TextModeratorExtensionDecorator.d.ts +0 -8
  402. package/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.d.ts +0 -5
  403. package/Extensions/ThumbnailGeneration/ThumbnailGenerationExtensionDecorator.d.ts +0 -6
  404. package/Screenshots/overview_cometchat_screens.png +0 -0
  405. package/Shared/CometChatUIkit/CometChatUIKit.d.ts +0 -49
  406. package/Shared/Framework/AIExtensionDataSource.d.ts +0 -5
  407. package/Shared/Framework/ChatConfigurator.d.ts +0 -8
  408. package/Shared/Framework/DataSource.d.ts +0 -40
  409. package/Shared/Framework/DataSourceDecorator.d.ts +0 -43
  410. package/Shared/Framework/ExtensionDataSource.d.ts +0 -3
  411. package/Shared/Utils/CallDetailUtils.d.ts +0 -8
  412. package/Shared/Utils/CallLogUtils.d.ts +0 -8
  413. package/Shared/Utils/ComeChatException.d.ts +0 -1
  414. package/Shared/Utils/MessageUtils.d.ts +0 -151
  415. package/Shared/Utils/UtilityFunctions.d.ts +0 -6
  416. package/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list/aiassist-bot-message-list.component.d.ts +0 -71
  417. package/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list.module.d.ts +0 -11
  418. package/Shared/Views/CometChatTabs/cometchat-tabs/cometchat-tabs.component.d.ts +0 -82
  419. package/Shared/Views/CometChatTabs/cometchat-tabs.module.d.ts +0 -8
  420. package/assets/.gitkeep +0 -0
  421. package/assets/Audio-Call.svg +0 -11
  422. package/assets/Audio-Call2x.svg +0 -11
  423. package/assets/Copy.svg +0 -17
  424. package/assets/Grid-layout.svg +0 -1
  425. package/assets/Heart.svg +0 -11
  426. package/assets/Imagemoderation.svg +0 -14
  427. package/assets/Info.svg +0 -13
  428. package/assets/InfoIcon.svg +0 -13
  429. package/assets/InfoSimpleIcon.svg +0 -4
  430. package/assets/Locked.svg +0 -10
  431. package/assets/More@2x.svg +0 -9
  432. package/assets/Plus.svg +0 -13
  433. package/assets/Private.svg +0 -10
  434. package/assets/Reactionsicon.svg +0 -9
  435. package/assets/Reply@2x.svg +0 -9
  436. package/assets/Send.svg +0 -12
  437. package/assets/Spinner.svg +0 -15
  438. package/assets/Stickers.svg +0 -16
  439. package/assets/Stipop.svg +0 -9
  440. package/assets/Video-call.svg +0 -12
  441. package/assets/Video-call2x.svg +0 -12
  442. package/assets/activity.svg +0 -22
  443. package/assets/addreaction.svg +0 -9
  444. package/assets/ai-bot.svg +0 -24
  445. package/assets/ai-empty.svg +0 -22
  446. package/assets/ai-error.svg +0 -21
  447. package/assets/animals.svg +0 -15
  448. package/assets/attachment-file.svg +0 -14
  449. package/assets/audio-file.svg +0 -12
  450. package/assets/back.png +0 -0
  451. package/assets/backbutton.svg +0 -12
  452. package/assets/call.svg +0 -1
  453. package/assets/chats.svg +0 -1
  454. package/assets/checkmark.svg +0 -11
  455. package/assets/close.svg +0 -12
  456. package/assets/close2x.svg +0 -12
  457. package/assets/collaborativedocument.svg +0 -13
  458. package/assets/collaborativewhiteboard.svg +0 -12
  459. package/assets/create-button.svg +0 -12
  460. package/assets/declaration.d.ts +0 -3
  461. package/assets/delete.svg +0 -7
  462. package/assets/deleteicon.svg +0 -15
  463. package/assets/down-arrow.svg +0 -1
  464. package/assets/download.svg +0 -13
  465. package/assets/editicon.svg +0 -14
  466. package/assets/emoji.svg +0 -2693
  467. package/assets/empty-slot.svg +0 -14
  468. package/assets/file-upload.svg +0 -2693
  469. package/assets/flags.svg +0 -12
  470. package/assets/food.svg +0 -26
  471. package/assets/greaterThanIcon.svg +0 -3
  472. package/assets/group.svg +0 -40
  473. package/assets/heart-reaction.png +0 -0
  474. package/assets/heart.png +0 -0
  475. package/assets/image.svg +0 -2693
  476. package/assets/incomingAudioCallIconUrl.svg +0 -5
  477. package/assets/incomingVideoCallIconUrl.svg +0 -6
  478. package/assets/incomingcall.wav +0 -0
  479. package/assets/increase-size.svg +0 -6
  480. package/assets/location.svg +0 -2693
  481. package/assets/message-delivered.png +0 -0
  482. package/assets/message-delivered.svg +0 -5
  483. package/assets/message-read.png +0 -0
  484. package/assets/message-read.svg +0 -5
  485. package/assets/message-sent.png +0 -0
  486. package/assets/message-sent.svg +0 -3
  487. package/assets/mic.svg +0 -11
  488. package/assets/missedAudioCallIconUrl.svg +0 -5
  489. package/assets/missedVideoCallIconUrl.svg +0 -6
  490. package/assets/moreicon.svg +0 -9
  491. package/assets/new-chat.svg +0 -13
  492. package/assets/new-message-icon.svg +0 -1
  493. package/assets/objects.svg +0 -13
  494. package/assets/open-thread.svg +0 -11
  495. package/assets/outgoingAudioCallIconUrl.svg +0 -5
  496. package/assets/outgoingVideoCallIconUrl.svg +0 -6
  497. package/assets/password-protected-group.svg +0 -3
  498. package/assets/pause-icon.svg +0 -14
  499. package/assets/photolibrary.svg +0 -11
  500. package/assets/placeholder.png +0 -0
  501. package/assets/play-icon.svg +0 -18
  502. package/assets/plus-rotated.svg +0 -13
  503. package/assets/polls.svg +0 -14
  504. package/assets/privacy.svg +0 -4
  505. package/assets/private-group.svg +0 -9
  506. package/assets/public.svg +0 -3
  507. package/assets/record-icon.svg +0 -8
  508. package/assets/reduce-size.svg +0 -6
  509. package/assets/right-arrow.svg +0 -6
  510. package/assets/search.png +0 -0
  511. package/assets/search.svg +0 -4
  512. package/assets/side-arrow.svg +0 -1
  513. package/assets/smileys.svg +0 -16
  514. package/assets/start-chat.svg +0 -1
  515. package/assets/start-conversation.svg +0 -46
  516. package/assets/stop.svg +0 -1
  517. package/assets/symbols.svg +0 -16
  518. package/assets/thread-arrow.svg +0 -1
  519. package/assets/thread-icon.svg +0 -38
  520. package/assets/threadIndicatorIcon.svg +0 -11
  521. package/assets/threadicon.svg +0 -14
  522. package/assets/translation.svg +0 -16
  523. package/assets/travel.svg +0 -18
  524. package/assets/unsafe-content.svg +0 -23
  525. package/assets/user.svg +0 -31
  526. package/assets/video-upload.svg +0 -2693
  527. package/assets/video.svg +0 -12
  528. package/assets/wait.png +0 -0
  529. package/assets/warning-small.png +0 -0
  530. package/assets/warning-small.svg +0 -5
  531. package/cometchat-chat-uikit-angular.d.ts +0 -5
  532. package/esm2020/AI/AIAssistBot/AIAssistBot.mjs +0 -21
  533. package/esm2020/AI/AIAssistBot/AIAssistBotDecorator.mjs +0 -68
  534. package/esm2020/AI/AIConversationStarter/AIConversationStarter.mjs +0 -21
  535. package/esm2020/AI/AIConversationStarter/AIConversationStarterDecorator.mjs +0 -31
  536. package/esm2020/AI/AIConversationSummary/AIConversationSummary.mjs +0 -21
  537. package/esm2020/AI/AIConversationSummary/AIConversationSummaryDecorator.mjs +0 -32
  538. package/esm2020/AI/AISmartReplies/AISmartReplies.mjs +0 -21
  539. package/esm2020/AI/AISmartReplies/AISmartRepliesDecorator.mjs +0 -31
  540. package/esm2020/Calls/CallingExtension.mjs +0 -14
  541. package/esm2020/Calls/CallingExtensionDecorator.mjs +0 -127
  542. package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.mjs +0 -409
  543. package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons.module.mjs +0 -32
  544. package/esm2020/Calls/CometChatCallLogDetails/cometchat-call-log-details/cometchat-call-log-details.component.mjs +0 -373
  545. package/esm2020/Calls/CometChatCallLogDetails/cometchat-call-log-details.module.mjs +0 -47
  546. package/esm2020/Calls/CometChatCallLogHistory/cometchat-call-log-history/cometchat-call-log-history.component.mjs +0 -352
  547. package/esm2020/Calls/CometChatCallLogHistory/cometchat-call-log-history.module.mjs +0 -21
  548. package/esm2020/Calls/CometChatCallLogParticipants/cometchat-call-log-participants/cometchat-call-log-participants.component.mjs +0 -189
  549. package/esm2020/Calls/CometChatCallLogParticipants/cometchat-call-log-participants.module.mjs +0 -21
  550. package/esm2020/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings/cometchat-call-log-recordings.component.mjs +0 -246
  551. package/esm2020/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings.module.mjs +0 -21
  552. package/esm2020/Calls/CometChatCallLogs/cometchat-call-logs/cometchat-call-logs.component.mjs +0 -592
  553. package/esm2020/Calls/CometChatCallLogs/cometchat-call-logs.module.mjs +0 -36
  554. package/esm2020/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details/cometchat-call-logs-with-details.component.mjs +0 -198
  555. package/esm2020/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details.module.mjs +0 -39
  556. package/esm2020/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.mjs +0 -464
  557. package/esm2020/Calls/CometChatIncomingCall/cometchat-incoming-call.module.mjs +0 -32
  558. package/esm2020/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.mjs +0 -176
  559. package/esm2020/Calls/CometChatOngoingCall/cometchat-ongoing-call.module.mjs +0 -27
  560. package/esm2020/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.mjs +0 -188
  561. package/esm2020/Calls/CometChatOutgoingCall/cometchat-outgoing-call.module.mjs +0 -28
  562. package/esm2020/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.mjs +0 -374
  563. package/esm2020/CometChatAddMembers/cometchat-add-members.module.mjs +0 -23
  564. package/esm2020/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.mjs +0 -530
  565. package/esm2020/CometChatBannedMembers/cometchat-banned-members.module.mjs +0 -24
  566. package/esm2020/CometChatContacts/cometchat-contacts/cometchat-contacts.component.mjs +0 -274
  567. package/esm2020/CometChatContacts/cometchat-contacts.module.mjs +0 -23
  568. package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +0 -1837
  569. package/esm2020/CometChatConversations/cometchat-conversations.module.mjs +0 -28
  570. package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +0 -413
  571. package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.mjs +0 -35
  572. package/esm2020/CometChatDetails/cometchat-details/cometchat-details.component.mjs +0 -789
  573. package/esm2020/CometChatDetails/cometchat-details.module.mjs +0 -27
  574. package/esm2020/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.mjs +0 -807
  575. package/esm2020/CometChatGroupMembers/cometchat-group-members.module.mjs +0 -24
  576. package/esm2020/CometChatGroups/cometchat-groups/cometchat-groups.component.mjs +0 -681
  577. package/esm2020/CometChatGroups/cometchat-groups.module.mjs +0 -28
  578. package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.mjs +0 -499
  579. package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages.module.mjs +0 -35
  580. package/esm2020/CometChatList/cometchat-list.component.mjs +0 -225
  581. package/esm2020/CometChatList/cometchat-list.module.mjs +0 -28
  582. package/esm2020/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.mjs +0 -166
  583. package/esm2020/CometChatMessageBubble/cometchat-message-bubble.module.mjs +0 -23
  584. package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +0 -1976
  585. package/esm2020/CometChatMessageComposer/cometchat-message-composer.module.mjs +0 -22
  586. package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +0 -467
  587. package/esm2020/CometChatMessageHeader/cometchat-message-header.module.mjs +0 -26
  588. package/esm2020/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.mjs +0 -308
  589. package/esm2020/CometChatMessageInformation/cometchat-message-information.module.mjs +0 -28
  590. package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +0 -4355
  591. package/esm2020/CometChatMessageList/cometchat-message-list.module.mjs +0 -42
  592. package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +0 -449
  593. package/esm2020/CometChatMessages/cometchat-messages.module.mjs +0 -52
  594. package/esm2020/CometChatTheme.service.mjs +0 -17
  595. package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +0 -372
  596. package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages.module.mjs +0 -36
  597. package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.mjs +0 -336
  598. package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership.module.mjs +0 -21
  599. package/esm2020/CometChatUserMemberWrapper/cometchat-user-member-wrapper.component.mjs +0 -75
  600. package/esm2020/CometChatUserMemberWrapper/cometchat-user-member-wrapper.module.mjs +0 -21
  601. package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +0 -785
  602. package/esm2020/CometChatUsers/cometchat-users.module.mjs +0 -32
  603. package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.mjs +0 -205
  604. package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages.module.mjs +0 -31
  605. package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.mjs +0 -12
  606. package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.mjs +0 -93
  607. package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.mjs +0 -12
  608. package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.mjs +0 -94
  609. package/esm2020/Extensions/ImageModeration/ImageModerationExtension.mjs +0 -12
  610. package/esm2020/Extensions/ImageModeration/ImageModerationExtensionDecorator.mjs +0 -10
  611. package/esm2020/Extensions/LinkPreviewExtension/LinkPreviewExtension.mjs +0 -12
  612. package/esm2020/Extensions/LinkPreviewExtension/LinkPreviewExtensionDecorator.mjs +0 -10
  613. package/esm2020/Extensions/MessageTranslation/MessageTranslationExtension.mjs +0 -12
  614. package/esm2020/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.mjs +0 -31
  615. package/esm2020/Extensions/PollsExtension/PollsExtension.mjs +0 -12
  616. package/esm2020/Extensions/PollsExtension/PollsExtensionDecorator.mjs +0 -77
  617. package/esm2020/Extensions/SmartReplies/SmartRepliesExtension.mjs +0 -12
  618. package/esm2020/Extensions/SmartReplies/SmartRepliesExtensionDecorator.mjs +0 -115
  619. package/esm2020/Extensions/Stickers/StickersExtension.mjs +0 -12
  620. package/esm2020/Extensions/Stickers/StickersExtensionDecorator.mjs +0 -125
  621. package/esm2020/Extensions/TextModerator/TextModeratorExtension.mjs +0 -22
  622. package/esm2020/Extensions/TextModerator/TextModeratorExtensionDecorator.mjs +0 -87
  623. package/esm2020/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.mjs +0 -12
  624. package/esm2020/Extensions/ThumbnailGeneration/ThumbnailGenerationExtensionDecorator.mjs +0 -10
  625. package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +0 -495
  626. package/esm2020/Shared/Framework/AIExtensionDataSource.mjs +0 -3
  627. package/esm2020/Shared/Framework/ChatConfigurator.mjs +0 -23
  628. package/esm2020/Shared/Framework/DataSource.mjs +0 -3
  629. package/esm2020/Shared/Framework/DataSourceDecorator.mjs +0 -113
  630. package/esm2020/Shared/Framework/ExtensionDataSource.mjs +0 -4
  631. package/esm2020/Shared/Utils/CallDetailUtils.mjs +0 -72
  632. package/esm2020/Shared/Utils/CallLogUtils.mjs +0 -122
  633. package/esm2020/Shared/Utils/ComeChatException.mjs +0 -10
  634. package/esm2020/Shared/Utils/MessageUtils.mjs +0 -682
  635. package/esm2020/Shared/Utils/UtilityFunctions.mjs +0 -36
  636. package/esm2020/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list/aiassist-bot-message-list.component.mjs +0 -290
  637. package/esm2020/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list.module.mjs +0 -22
  638. package/esm2020/Shared/Views/CometChatTabs/cometchat-tabs/cometchat-tabs.component.mjs +0 -124
  639. package/esm2020/Shared/Views/CometChatTabs/cometchat-tabs.module.mjs +0 -23
  640. package/esm2020/cometchat-chat-uikit-angular.mjs +0 -5
  641. package/esm2020/public-api.mjs +0 -115
  642. package/examples/sample-app/README.md +0 -50
  643. package/fesm2015/cometchat-chat-uikit-angular.mjs +0 -22641
  644. package/fesm2015/cometchat-chat-uikit-angular.mjs.map +0 -1
  645. package/fesm2020/cometchat-chat-uikit-angular.mjs +0 -22530
  646. package/fesm2020/cometchat-chat-uikit-angular.mjs.map +0 -1
  647. package/public-api.d.ts +0 -106
  648. /package/{assets/message-privately.svg → src/lib/assets/send_message_privately.svg} +0 -0
@@ -1,785 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChildren, } from "@angular/core";
2
- import { CometChat } from "@cometchat/chat-sdk-javascript";
3
- import { AvatarStyle, ListItemStyle, } from "@cometchat/uikit-elements";
4
- import { SelectionMode, localize, TitleAlignment, States, CometChatUserEvents, fontHelper, } from "@cometchat/uikit-resources";
5
- import { UsersStyle, SelectedUserPreviewStyle } from "@cometchat/uikit-shared";
6
- import { CometChatException } from "../../Shared/Utils/ComeChatException";
7
- import { UserPresencePlacement } from "@cometchat/uikit-resources";
8
- import { MessageUtils } from "../../Shared/Utils/MessageUtils";
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "../../CometChatTheme.service";
11
- import * as i2 from "../../CometChatList/cometchat-list.component";
12
- import * as i3 from "@angular/common";
13
- export class CometChatUsersComponent {
14
- constructor(ref, themeService) {
15
- this.ref = ref;
16
- this.themeService = themeService;
17
- this.disableUsersPresence = false;
18
- this.hideSeparator = false;
19
- this.searchPlaceholder = localize("SEARCH");
20
- this.hideError = false;
21
- this.selectionMode = SelectionMode.none;
22
- this.searchIconURL = "assets/search.svg";
23
- this.hideSearch = false;
24
- this.title = localize("USERS");
25
- this.onError = (error) => {
26
- console.log(error);
27
- };
28
- this.loadingIconURL = "assets/Spinner.svg";
29
- this.showSectionHeader = true;
30
- this.sectionHeaderField = "name";
31
- this.emptyStateText = localize("NO_USERS_FOUND");
32
- this.errorStateText = localize("SOMETHING_WRONG");
33
- this.titleAlignment = TitleAlignment.left;
34
- this.usersStyle = {
35
- width: "100%",
36
- height: "100%",
37
- separatorColor: "rgb(222 222 222 / 46%)",
38
- };
39
- this.listItemStyle = {
40
- height: "100%",
41
- width: "100%",
42
- };
43
- this.statusIndicatorStyle = {
44
- height: "10px",
45
- width: "10px",
46
- borderRadius: "16px",
47
- };
48
- this.avatarStyle = {
49
- borderRadius: "16px",
50
- width: "28px",
51
- height: "28px",
52
- };
53
- this.selectedUserPreviewStyle = {};
54
- this.showSelectedUsersPreview = false;
55
- this.searchKeyword = "";
56
- this.userPresencePlacement = UserPresencePlacement.bottom;
57
- this.disableLoadingState = false;
58
- this.fetchingUsers = false;
59
- this.userChecked = "";
60
- this.listStyle = {};
61
- this.state = States.loading;
62
- this.selectionmodeEnum = SelectionMode;
63
- this.usersList = [];
64
- this.limit = 30;
65
- this.userListenerId = "userlist_" + new Date().getTime();
66
- this.firstReload = false;
67
- this.connectionListenerId = "connection_" + new Date().getTime();
68
- this.previousSearchKeyword = "";
69
- this.isWebsocketReconnected = false;
70
- this.selectedUsers = {};
71
- this.checkboxStyle = {
72
- height: "24px",
73
- width: "24px",
74
- border: "none",
75
- borderRadius: "4px",
76
- checkedBackgroundColor: "#2196F3",
77
- uncheckedBackgroundColor: "#ccc"
78
- };
79
- this.removeMemberButtonStyle = {
80
- height: "16px",
81
- width: "16px",
82
- iconHeight: "16px",
83
- iconWidth: "16px",
84
- border: "none",
85
- borderRadius: "50%",
86
- background: "transparent",
87
- buttonIconTint: "black"
88
- };
89
- this.selectedUsersPreviewWrapper = {};
90
- // Bulk selection properties
91
- this.lastSelectedIndex = -1;
92
- this.isShiftPressed = false;
93
- this.selectedUserPillStyle = {};
94
- this.onScrolledToBottom = null;
95
- this.fetchUsersOnSearchKeyWordChange = () => {
96
- if (this.fetchingUsers) {
97
- clearTimeout(this.fetchTimeOut);
98
- this.fetchTimeOut = setTimeout(() => {
99
- this.searchForUser();
100
- }, 800);
101
- }
102
- else {
103
- this.searchForUser();
104
- }
105
- };
106
- this.searchForUser = () => {
107
- this.setRequestBuilder();
108
- if (!this.disableLoadingState) {
109
- this.usersList = [];
110
- }
111
- this.fetchNextUsersList();
112
- };
113
- /**
114
- * @param {CometChat.User} user
115
- */
116
- this.onClick = (user) => {
117
- if (this.onItemClick) {
118
- this.onItemClick(user);
119
- }
120
- this.onRowClicked(user.getUid());
121
- };
122
- /**
123
- * @param {CometChat.User} user
124
- */
125
- this.getActiveUser = (user) => {
126
- if (this.selectionMode == SelectionMode.none || !this.selectionMode) {
127
- if (user.getUid() == this.activeUser?.getUid()) {
128
- return true;
129
- }
130
- else {
131
- return false;
132
- }
133
- }
134
- else
135
- return false;
136
- };
137
- /**
138
- * @param {CometChat.User} user
139
- */
140
- this.getStatusIndicatorColor = (user) => {
141
- let userStatusVisibility = new MessageUtils().getUserStatusVisibility(user) || this.disableUsersPresence;
142
- if (!userStatusVisibility) {
143
- return (this.usersStyle?.onlineStatusColor ??
144
- this.themeService?.theme.palette.getSuccess());
145
- }
146
- return null;
147
- };
148
- /**
149
- * @param {CometChat.User} user
150
- */
151
- this.getStatusIndicatorStyle = (user) => {
152
- let userStatusVisibility = new MessageUtils().getUserStatusVisibility(user) || this.disableUsersPresence;
153
- if (!userStatusVisibility) {
154
- return (this.statusIndicatorStyle);
155
- }
156
- return null;
157
- };
158
- /**
159
- * @param {CometChat.User} user
160
- */
161
- this.updateUser = (user) => {
162
- let userlist = [...this.usersList];
163
- //search for user
164
- let userKey = userlist.findIndex((u, k) => u.getUid() == user.getUid());
165
- //if found in the list, update user object
166
- if (userKey > -1) {
167
- userlist.splice(userKey, 1, user);
168
- this.usersList = [...userlist];
169
- this.ref.detectChanges();
170
- }
171
- };
172
- this.addMembersToList = (user, event) => {
173
- let selected = event?.detail?.checked;
174
- const currentIndex = this.usersList.findIndex(u => u.getUid() === user.getUid());
175
- // Check if shift key was pressed for bulk selection
176
- if (this.isShiftPressed && this.lastSelectedIndex !== -1 && currentIndex !== -1) {
177
- this.handleBulkSelection(currentIndex, selected);
178
- }
179
- else {
180
- // Regular single selection
181
- if (this.selectionMode === this.selectionmodeEnum.single) {
182
- this.userChecked = user.getUid();
183
- }
184
- if (this.onSelect) {
185
- this.onSelect(user, selected);
186
- }
187
- if (selected) {
188
- this.selectedUsers[user.getUid()] = user;
189
- }
190
- else {
191
- delete this.selectedUsers[user.getUid()];
192
- }
193
- this.lastSelectedIndex = currentIndex;
194
- }
195
- this.ref.detectChanges();
196
- };
197
- /**
198
- * Handle checkbox click to detect shift key
199
- */
200
- this.onCheckboxClick = (user, event) => {
201
- this.isShiftPressed = event.shiftKey;
202
- };
203
- /**
204
- * Handle checkbox changed event
205
- */
206
- this.onCheckboxChanged = (user, event) => {
207
- this.addMembersToList(user, event);
208
- // Reset shift flag after processing
209
- this.isShiftPressed = false;
210
- };
211
- /**
212
- * Handle keyboard events for accessibility
213
- */
214
- this.onKeyDown = (event) => {
215
- // Track shift key state for keyboard navigation
216
- if (event.key === 'Shift') {
217
- this.isShiftPressed = true;
218
- }
219
- };
220
- /**
221
- * Handle keyboard events for accessibility
222
- */
223
- this.onKeyUp = (event) => {
224
- if (event.key === 'Shift') {
225
- this.isShiftPressed = false;
226
- }
227
- };
228
- this.fetchNextUsersList = (state = States.loading) => {
229
- this.onScrolledToBottom = null;
230
- if (!(this.disableLoadingState && state == States.loading)) {
231
- this.state = state;
232
- }
233
- if (this.requestBuilder &&
234
- this.requestBuilder.pagination &&
235
- (this.requestBuilder.pagination.current_page == 0 ||
236
- this.requestBuilder.pagination.current_page !=
237
- this.requestBuilder.pagination.total_pages)) {
238
- this.fetchingUsers = true;
239
- this.onScrolledToBottom = this.fetchNextUsersList;
240
- this.ref.detectChanges();
241
- try {
242
- this.requestBuilder.fetchNext().then((userList) => {
243
- console.log(userList);
244
- if (userList.length <= 0) {
245
- if (this.onEmpty) {
246
- this.onEmpty();
247
- this.previousSearchKeyword = "";
248
- }
249
- }
250
- if (userList.length <= 0 &&
251
- (this.usersList?.length <= 0 || this.disableLoadingState)) {
252
- this.state = States.empty;
253
- this.ref.detectChanges();
254
- }
255
- else {
256
- if (!this.disableLoadingState) {
257
- if (this.isWebsocketReconnected) {
258
- this.usersList = userList;
259
- this.isWebsocketReconnected = false;
260
- }
261
- else {
262
- this.usersList = [...this.usersList, ...userList];
263
- }
264
- }
265
- else {
266
- if (this.searchKeyword != this.previousSearchKeyword ||
267
- [0, 1].includes(this.requestBuilder.pagination.current_page)) {
268
- this.usersList = userList;
269
- }
270
- else {
271
- this.usersList = [...this.usersList, ...userList];
272
- }
273
- }
274
- this.state = States.loaded;
275
- this.ref.detectChanges();
276
- }
277
- if (this.firstReload) {
278
- this.attachConnectionListeners();
279
- this.firstReload = false;
280
- }
281
- this.fetchingUsers = false;
282
- this.previousSearchKeyword = this.searchKeyword;
283
- }, (error) => {
284
- if (this.onError) {
285
- this.onError(CometChatException(error));
286
- }
287
- this.state = States.error;
288
- this.fetchingUsers = false;
289
- this.ref.detectChanges();
290
- });
291
- }
292
- catch (error) {
293
- if (this.onError) {
294
- this.onError(CometChatException(error));
295
- }
296
- if (this.usersList?.length <= 0) {
297
- this.state = States.error;
298
- this.ref.detectChanges();
299
- }
300
- this.fetchingUsers = false;
301
- }
302
- }
303
- };
304
- /**
305
- * @param {string} key
306
- */
307
- this.onSearch = (key) => {
308
- try {
309
- this.searchKeyword = key;
310
- clearTimeout(this.timeout);
311
- this.timeout = setTimeout(() => {
312
- this.setRequestBuilder();
313
- if (!this.disableLoadingState) {
314
- this.usersList = [];
315
- this.ref.detectChanges();
316
- }
317
- if (!this.fetchingUsers || (this.fetchingUsers && key == "")) {
318
- this.usersList = [];
319
- this.fetchNextUsersList();
320
- }
321
- }, 500);
322
- }
323
- catch (error) {
324
- if (this.onError) {
325
- this.onError(CometChatException(error));
326
- }
327
- }
328
- };
329
- this.userStyle = () => {
330
- return {
331
- height: this.usersStyle.height,
332
- width: this.usersStyle.width,
333
- background: this.usersStyle.background,
334
- border: this.usersStyle.border,
335
- borderRadius: this.usersStyle.borderRadius,
336
- };
337
- };
338
- this.state = States.loading;
339
- }
340
- ngOnInit() {
341
- this.firstReload = true;
342
- this.state = States.loading;
343
- this.isWebsocketReconnected = false;
344
- this.setThemeStyle();
345
- this.subscribeToEvents();
346
- CometChat.getLoggedinUser()
347
- .then((user) => {
348
- this.setRequestBuilder();
349
- if (!this.fetchingUsers) {
350
- this.fetchNextUsersList();
351
- }
352
- this.attachListeners();
353
- this.loggedInUser = user;
354
- this.onScrolledToBottom = this.fetchNextUsersList;
355
- })
356
- .catch((error) => {
357
- if (this.onError) {
358
- this.onError(error);
359
- }
360
- });
361
- }
362
- ngOnChanges(changes) {
363
- if (changes["searchKeyword"]) {
364
- this.fetchUsersOnSearchKeyWordChange();
365
- }
366
- }
367
- onUserSelected(user, event) {
368
- let selected = event?.detail?.checked;
369
- if (this.onSelect) {
370
- this.onSelect(user, selected);
371
- }
372
- }
373
- fetchNewUsers() {
374
- this.setRequestBuilder();
375
- let state = this.firstReload ? States.loading : States.loaded;
376
- this.fetchNextUsersList(state);
377
- }
378
- // subscribe to global events
379
- subscribeToEvents() {
380
- this.ccUserBlocked = CometChatUserEvents.ccUserBlocked.subscribe((user) => {
381
- if (this.activeUser && user.getUid() == this.activeUser.getUid()) {
382
- this.activeUser = user;
383
- this.updateUser(user);
384
- this.ref.detectChanges();
385
- }
386
- });
387
- this.ccUserUnBlocked = CometChatUserEvents.ccUserUnblocked.subscribe((user) => {
388
- if (this.activeUser && user.getUid() == this.activeUser.getUid()) {
389
- this.activeUser = user;
390
- this.updateUser(user);
391
- this.ref.detectChanges();
392
- }
393
- });
394
- }
395
- unsubscribeToEvents() {
396
- this.ccUserBlocked?.unsubscribe();
397
- this.ccUserUnBlocked?.unsubscribe();
398
- }
399
- ngOnDestroy() {
400
- this.usersRequest = null;
401
- this.ref.detach();
402
- this.removeListener();
403
- this.state = States.loaded;
404
- this.unsubscribeToEvents();
405
- }
406
- isUserSelected(user) {
407
- return user.getUid() === this.userChecked
408
- || this.selectedUsers?.[user.getUid()];
409
- }
410
- onRowClicked(uid) {
411
- const userCheckbox = this.checkboxes.find(checkboxRef => uid === checkboxRef.nativeElement.getAttribute('data-uid'));
412
- const userRadio = this.radios.find(radioRef => uid === radioRef.nativeElement.getAttribute('data-uid'));
413
- let input = null;
414
- if (userCheckbox && this.selectionMode === this.selectionmodeEnum.multiple) {
415
- const root = userCheckbox.nativeElement.shadowRoot || userCheckbox.nativeElement;
416
- input = root.querySelector('input[type="checkbox"]');
417
- }
418
- else if (userRadio && this.selectionMode === this.selectionmodeEnum.single) {
419
- const root = userRadio.nativeElement.shadowRoot || userRadio.nativeElement;
420
- input = root.querySelector('input[type="radio"]');
421
- }
422
- if (input)
423
- input.click();
424
- }
425
- attachConnectionListeners() {
426
- CometChat.addConnectionListener(this.connectionListenerId, new CometChat.ConnectionListener({
427
- onConnected: () => {
428
- this.isWebsocketReconnected = true;
429
- console.log("ConnectionListener =>connected");
430
- this.fetchNewUsers();
431
- },
432
- inConnecting: () => {
433
- console.log("ConnectionListener => In connecting");
434
- },
435
- onDisconnected: () => {
436
- this.isWebsocketReconnected = false;
437
- console.log("ConnectionListener => On Disconnected");
438
- },
439
- }));
440
- }
441
- attachListeners() {
442
- this.state = States.loading;
443
- this.ref.detectChanges();
444
- //Attaching User Listeners to dynamilcally update when a user comes online and goes offline
445
- CometChat.addUserListener(this.userListenerId, new CometChat.UserListener({
446
- onUserOnline: (onlineUser) => {
447
- /* when someuser/friend comes online, user will be received here */
448
- this.updateUser(onlineUser);
449
- },
450
- onUserOffline: (offlineUser) => {
451
- /* when someuser/friend went offline, user will be received here */
452
- this.updateUser(offlineUser);
453
- },
454
- }));
455
- }
456
- removeListener() {
457
- CometChat.removeUserListener(this.userListenerId);
458
- this.userListenerId = "";
459
- CometChat.removeConnectionListener(this.connectionListenerId);
460
- }
461
- getUserNameStyle() {
462
- return {
463
- font: this.selectedUserPreviewStyle.textFont || fontHelper(this.themeService.theme.typography.name),
464
- color: this.selectedUserPreviewStyle.textColor || this.themeService.theme.palette.getAccent(),
465
- };
466
- }
467
- /**
468
- * Handle bulk selection when shift+click is used
469
- */
470
- handleBulkSelection(currentIndex, selected) {
471
- const startIndex = Math.min(this.lastSelectedIndex, currentIndex);
472
- const endIndex = Math.max(this.lastSelectedIndex, currentIndex);
473
- const shouldSelect = selected;
474
- // Apply selection/deselection to all users in range
475
- for (let i = startIndex; i <= endIndex; i++) {
476
- const user = this.usersList[i];
477
- if (user) {
478
- const wasSelected = !!this.selectedUsers[user.getUid()];
479
- if (shouldSelect && !wasSelected) {
480
- this.selectedUsers[user.getUid()] = user;
481
- if (this.onSelect) {
482
- this.onSelect(user, true);
483
- }
484
- this.updateCheckboxState(user.getUid(), true);
485
- }
486
- else if (!shouldSelect && wasSelected) {
487
- delete this.selectedUsers[user.getUid()];
488
- if (this.onSelect) {
489
- this.onSelect(user, false);
490
- }
491
- this.updateCheckboxState(user.getUid(), false);
492
- }
493
- }
494
- }
495
- this.lastSelectedIndex = currentIndex;
496
- }
497
- /**
498
- * Update checkbox state programmatically
499
- */
500
- updateCheckboxState(userId, checked) {
501
- setTimeout(() => {
502
- if (this.checkboxes) {
503
- const userCheckbox = this.checkboxes.find(checkboxRef => userId === checkboxRef.nativeElement.getAttribute('data-uid'));
504
- if (userCheckbox) {
505
- const root = userCheckbox.nativeElement.shadowRoot || userCheckbox.nativeElement;
506
- const input = root.querySelector('input[type="checkbox"]');
507
- if (input && input.checked !== checked) {
508
- input.checked = checked;
509
- const changeEvent = new Event('change', { bubbles: true });
510
- input.dispatchEvent(changeEvent);
511
- }
512
- }
513
- }
514
- }, 0);
515
- }
516
- /**
517
- * Get array of selected users for preview
518
- */
519
- getSelectedUsersArray() {
520
- return Object.values(this.selectedUsers);
521
- }
522
- /**
523
- * Get count of selected users
524
- */
525
- getSelectedUsersCount() {
526
- return Object.keys(this.selectedUsers).length;
527
- }
528
- /**
529
- * Remove user from selection by triggering checkbox click
530
- */
531
- removeSelectedUser(user) {
532
- const userCheckbox = this.checkboxes.find(checkboxRef => user.getUid() === checkboxRef.nativeElement.getAttribute('data-uid'));
533
- if (userCheckbox) {
534
- const root = userCheckbox.nativeElement.shadowRoot || userCheckbox.nativeElement;
535
- const input = root.querySelector('input[type="checkbox"]');
536
- if (input) {
537
- input.click();
538
- }
539
- }
540
- }
541
- /**
542
- * Track by function for ngFor performance
543
- */
544
- trackByUserId(index, user) {
545
- return user.getUid();
546
- }
547
- setRequestBuilder() {
548
- if (!this.searchKeyword) {
549
- this.previousSearchKeyword = "";
550
- }
551
- if (this.searchRequestBuilder && this.searchKeyword) {
552
- this.requestBuilder = this.searchRequestBuilder
553
- .setSearchKeyword(this.searchKeyword)
554
- .build();
555
- }
556
- else if (this.usersRequestBuilder) {
557
- this.requestBuilder = this.usersRequestBuilder
558
- .setSearchKeyword(this.searchKeyword)
559
- .build();
560
- }
561
- else {
562
- this.requestBuilder = new CometChat.UsersRequestBuilder()
563
- .setLimit(this.limit)
564
- .setSearchKeyword(this.searchKeyword)
565
- .build();
566
- }
567
- return this.requestBuilder;
568
- }
569
- setThemeStyle() {
570
- this.setUsersStyle();
571
- this.setListItemStyle();
572
- this.setAvatarStyle();
573
- this.setStatusStyle();
574
- this.setSelectedUserStyle();
575
- this.listStyle = {
576
- titleTextFont: this.usersStyle.titleTextFont,
577
- titleTextColor: this.usersStyle.titleTextColor,
578
- emptyStateTextFont: this.usersStyle.emptyStateTextFont,
579
- emptyStateTextColor: this.usersStyle.emptyStateTextColor,
580
- errorStateTextFont: this.usersStyle.errorStateTextFont,
581
- errorStateTextColor: this.usersStyle.errorStateTextColor,
582
- loadingIconTint: this.usersStyle.loadingIconTint,
583
- separatorColor: this.usersStyle.separatorColor,
584
- searchIconTint: this.usersStyle.searchIconTint,
585
- searchBorder: this.usersStyle.searchBorder,
586
- searchBorderRadius: this.usersStyle.searchBorderRadius,
587
- searchBackground: this.usersStyle.searchBackground,
588
- searchPlaceholderTextFont: this.usersStyle.searchPlaceholderTextFont,
589
- searchPlaceholderTextColor: this.usersStyle.searchPlaceholderTextColor,
590
- searchTextFont: this.usersStyle.searchTextFont,
591
- searchTextColor: this.usersStyle.searchTextColor,
592
- sectionHeaderTextColor: this.usersStyle.sectionHeaderTextColor,
593
- sectionHeaderTextFont: this.usersStyle.sectionHeaderTextFont,
594
- };
595
- this.ref.detectChanges();
596
- }
597
- setListItemStyle() {
598
- let defaultStyle = new ListItemStyle({
599
- height: "45px",
600
- width: "100%",
601
- background: this.themeService.theme.palette.getBackground(),
602
- activeBackground: this.themeService.theme.palette.getAccent100(),
603
- borderRadius: "0",
604
- titleFont: fontHelper(this.themeService.theme.typography.title2),
605
- titleColor: this.themeService.theme.palette.getAccent(),
606
- border: "none",
607
- separatorColor: this.themeService.theme.palette.getAccent200(),
608
- hoverBackground: this.themeService.theme.palette.getAccent50(),
609
- });
610
- this.listItemStyle = { ...defaultStyle, ...this.listItemStyle };
611
- }
612
- setAvatarStyle() {
613
- let defaultStyle = new AvatarStyle({
614
- borderRadius: "24px",
615
- width: "28px",
616
- height: "28px",
617
- border: "none",
618
- backgroundColor: this.themeService.theme.palette.getAccent700(),
619
- nameTextColor: this.themeService.theme.palette.getAccent900(),
620
- backgroundSize: "cover",
621
- nameTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
622
- outerViewBorderSpacing: "",
623
- });
624
- this.avatarStyle = { ...defaultStyle, ...this.avatarStyle };
625
- }
626
- setStatusStyle() {
627
- let defaultStyle = {
628
- height: "12px",
629
- width: "12px",
630
- border: "none",
631
- borderRadius: "24px",
632
- };
633
- this.statusIndicatorStyle = {
634
- ...defaultStyle,
635
- ...this.statusIndicatorStyle,
636
- };
637
- }
638
- setUsersStyle() {
639
- let defaultStyle = new UsersStyle({
640
- background: this.themeService.theme.palette.getBackground(),
641
- border: `1px solid ${this.themeService.theme.palette.getAccent50()}`,
642
- titleTextFont: fontHelper(this.themeService.theme.typography.title1),
643
- titleTextColor: this.themeService.theme.palette.getAccent(),
644
- emptyStateTextFont: fontHelper(this.themeService.theme.typography.title1),
645
- emptyStateTextColor: this.themeService.theme.palette.getAccent600(),
646
- errorStateTextFont: fontHelper(this.themeService.theme.typography.title1),
647
- errorStateTextColor: this.themeService.theme.palette.getAccent600(),
648
- loadingIconTint: this.themeService.theme.palette.getAccent600(),
649
- separatorColor: this.themeService.theme.palette.getAccent400(),
650
- onlineStatusColor: this.themeService.theme.palette.getSuccess(),
651
- sectionHeaderTextColor: this.themeService.theme.palette.getAccent600(),
652
- sectionHeaderTextFont: fontHelper(this.themeService.theme.typography.subtitle2),
653
- searchIconTint: this.themeService.theme.palette.getAccent600(),
654
- searchPlaceholderTextColor: this.themeService.theme.palette.getAccent600(),
655
- searchBackground: this.themeService.theme.palette.getAccent100(),
656
- searchPlaceholderTextFont: fontHelper(this.themeService.theme.typography.text3),
657
- searchTextColor: this.themeService.theme.palette.getAccent600(),
658
- searchTextFont: fontHelper(this.themeService.theme.typography.text3),
659
- });
660
- this.usersStyle = { ...defaultStyle, ...this.usersStyle };
661
- this.checkboxStyle = {
662
- height: "24px",
663
- width: "24px",
664
- border: "none",
665
- borderRadius: "4px",
666
- checkedBackgroundColor: this.themeService.theme.palette.getPrimary(),
667
- uncheckedBackgroundColor: this.themeService.theme.palette.getAccent400()
668
- };
669
- }
670
- setSelectedUserStyle() {
671
- let defaultStyle = new SelectedUserPreviewStyle({
672
- borderRadius: "1000px",
673
- width: "140px",
674
- height: "fit-content",
675
- border: `1px solid ${this.themeService.theme.palette.getAccent50()}`,
676
- textColor: this.themeService.theme.palette.getAccent(),
677
- textFont: fontHelper(this.themeService.theme.typography.name),
678
- background: this.themeService.theme.palette.getBackground(),
679
- closeIconTint: this.themeService.theme.palette.getPrimary(),
680
- });
681
- this.selectedUserPreviewStyle = { ...defaultStyle, ...this.selectedUserPreviewStyle };
682
- this.removeMemberButtonStyle.buttonIconTint = this.selectedUserPreviewStyle.closeIconTint || this.themeService.theme.palette.getAccent600();
683
- this.selectedUserPillStyle = {
684
- borderRadius: this.selectedUserPreviewStyle.borderRadius || "1000px",
685
- width: this.selectedUserPreviewStyle.width || "140px",
686
- height: this.selectedUserPreviewStyle.height || "fit-content",
687
- border: this.selectedUserPreviewStyle.border || `none`,
688
- color: this.selectedUserPreviewStyle.textColor || this.themeService.theme.palette.getAccent(),
689
- font: this.selectedUserPreviewStyle.textFont || fontHelper(this.themeService.theme.typography.name),
690
- background: this.selectedUserPreviewStyle.background || this.themeService.theme.palette.getBackground(),
691
- };
692
- this.selectedUsersPreviewWrapper = {
693
- borderTop: `1px solid ${this.themeService.theme.palette.getAccent100()}`,
694
- borderBottom: `none`,
695
- background: this.usersStyle.background || "transparent"
696
- };
697
- }
698
- }
699
- CometChatUsersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatUsersComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }], target: i0.ɵɵFactoryTarget.Component });
700
- CometChatUsersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatUsersComponent, selector: "cometchat-users", inputs: { usersRequestBuilder: "usersRequestBuilder", searchRequestBuilder: "searchRequestBuilder", subtitleView: "subtitleView", disableUsersPresence: "disableUsersPresence", listItemView: "listItemView", menu: "menu", options: "options", activeUser: "activeUser", hideSeparator: "hideSeparator", searchPlaceholder: "searchPlaceholder", hideError: "hideError", selectionMode: "selectionMode", searchIconURL: "searchIconURL", hideSearch: "hideSearch", title: "title", onError: "onError", emptyStateView: "emptyStateView", onSelect: "onSelect", errorStateView: "errorStateView", loadingIconURL: "loadingIconURL", showSectionHeader: "showSectionHeader", sectionHeaderField: "sectionHeaderField", loadingStateView: "loadingStateView", emptyStateText: "emptyStateText", errorStateText: "errorStateText", titleAlignment: "titleAlignment", usersStyle: "usersStyle", listItemStyle: "listItemStyle", statusIndicatorStyle: "statusIndicatorStyle", avatarStyle: "avatarStyle", selectedUserPreviewStyle: "selectedUserPreviewStyle", showSelectedUsersPreview: "showSelectedUsersPreview", onItemClick: "onItemClick", searchKeyword: "searchKeyword", onEmpty: "onEmpty", userPresencePlacement: "userPresencePlacement", disableLoadingState: "disableLoadingState" }, viewQueries: [{ propertyName: "checkboxes", predicate: ["checkboxElement"], descendants: true, read: ElementRef }, { propertyName: "radios", predicate: ["radioElement"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-users\" [ngStyle]=\"userStyle()\" (keydown)=\"onKeyDown($event)\" (keyup)=\"onKeyUp($event)\" tabindex=\"0\">\n <div class=\"cc-menus\" *ngIf=\"menu\">\n <ng-container *ngTemplateOutlet=\"menu\">\n </ng-container>\n </div>\n\n <!-- Users List -->\n <div class=\"cc-users__list\" [class.cc-users__list--with-selection]=\"getSelectedUsersCount() > 0\">\n <cometchat-list [listItemView]=\"listItemView ? listItemView : listItem\" [onScrolledToBottom]=\"onScrolledToBottom\" [onSearch]=\"onSearch\"\n [list]=\"usersList\" [searchText]=\"searchKeyword\" [searchPlaceholderText]=\"searchPlaceholder\"\n [searchIconURL]=\"searchIconURL\" [hideSearch]=\"hideSearch\" [hideError]=\"hideError\" [title]=\"title\"\n [sectionHeaderField]=\"sectionHeaderField\" [showSectionHeader]=\"showSectionHeader\"\n [emptyStateText]=\"emptyStateText\" [loadingIconURL]=\"loadingIconURL\"\n [titleAlignment]=\"titleAlignment\" [loadingStateView]=\"loadingStateView\" [emptyStateView]=\"emptyStateView\"\n [errorStateText]=\"errorStateText\" [errorStateView]=\"errorStateView\" [listStyle]=\"listStyle\" [state]=\"state\">\n </cometchat-list>\n </div>\n\n <!-- Selected Users Preview Section -->\n <div class=\"cc-selected-users\" [style]=\"selectedUsersPreviewWrapper\" *ngIf=\"showSelectedUsersPreview && getSelectedUsersCount() > 0\">\n <div class=\"cc-selected-users__list\">\n <div class=\"cc-selected-user\" *ngFor=\"let user of getSelectedUsersArray(); trackBy: trackByUserId\" [style]=\"selectedUserPillStyle\">\n <div class=\"cc-selected-user__avatar\">\n <cometchat-avatar \n [image]=\"user?.getAvatar() || ''\" \n [name]=\"user?.getName()\" \n [avatarStyle]=\"avatarStyle\">\n </cometchat-avatar>\n </div>\n <div class=\"cc-selected-user__name\" [style]=\"getUserNameStyle()\">{{user?.getName()}}</div>\n <div class=\"cc-selected-user__remove\" (click)=\"removeSelectedUser(user)\">\n <cometchat-button \n [iconURL]=\"'assets/close2x.svg'\" \n [buttonStyle]=\"removeMemberButtonStyle\">\n </cometchat-button>\n </div>\n </div>\n </div>\n </div>\n <ng-template #listItem let-user>\n <cometchat-list-item [title]=\"user?.name\" [avatarURL]=\"user?.avatar\" [avatarName]=\"user?.name\"\n [listItemStyle]=\"listItemStyle\" [avatarStyle]=\"avatarStyle\" [statusIndicatorStyle]=\"getStatusIndicatorStyle(user)\"\n [statusIndicatorColor]=\"getStatusIndicatorColor(user)\" [hideSeparator]=\"hideSeparator\" (cc-listitem-clicked)=\"onClick(user)\" [isActive]=\"getActiveUser(user)\"\n [userPresencePlacement]=\"userPresencePlacement\">\n <div slot=\"subtitleView\" *ngIf=\"subtitleView\">\n <ng-container *ngTemplateOutlet=\"subtitleView;context:{ $implicit: user }\">\n </ng-container>\n </div>\n\n <div slot=\"menuView\" class=\"cc-users__options\" *ngIf=\"options\">\n <cometchat-menu-list [data]=\"options(user)\">\n\n </cometchat-menu-list>\n </div>\n <div slot=\"tailView\" *ngIf=\"selectionMode != selectionmodeEnum.none\" class=\"cc-users__tail-view\">\n <ng-container *ngTemplateOutlet=\"tailView\">\n </ng-container>\n </div>\n <ng-template #tailView>\n <div *ngIf=\"selectionMode == selectionmodeEnum.single\" class=\"cc-users__selection--single\">\n <cometchat-radio-button [attr.data-uid]=\"user?.uid\" #radioElement (cc-radio-button-changed)=\"addMembersToList(user,$event)\" [checked]=\"isUserSelected(user)\" ></cometchat-radio-button>\n\n </div>\n <div *ngIf=\"selectionMode == selectionmodeEnum.multiple\" class=\"cc-users__selection--multiple\">\n <cometchat-checkbox \n [attr.data-uid]=\"user?.uid\" \n #checkboxElement \n [checkboxStyle]=\"checkboxStyle\" \n (cc-checkbox-changed)=\"onCheckboxChanged(user, $event)\"\n (click)=\"onCheckboxClick(user, $event)\" \n [checked]=\"isUserSelected(user)\">\n </cometchat-checkbox>\n </div>\n </ng-template>\n </cometchat-list-item>\n\n </ng-template>\n</div>\n", styles: [".cc-users{height:100%;width:100%;box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden}.cc-menus{position:absolute;right:12px;padding:12px;cursor:pointer}.cc-selected-users{padding:12px;background:transparent;max-height:150px;overflow-x:hidden;overflow-y:auto}.cc-selected-users__list{display:flex;flex-wrap:wrap;gap:8px}.cc-selected-user{display:flex;align-items:center;border-radius:20px;padding:4px 8px 4px 4px;width:140px;animation:slideInUp .3s ease-out}.cc-selected-user__avatar{flex-shrink:0}.cc-selected-user__name{flex:1;margin:0 8px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cc-selected-user__remove{flex-shrink:0;cursor:pointer}.cc-selected-user__remove:hover{opacity:.7}.cc-users__list{flex:1;overflow:hidden}.cc-selected-users::-webkit-scrollbar{background:transparent;width:8px}.cc-selected-users::-webkit-scrollbar-thumb{background:#e8e5e5;border-radius:8px}.cc-users__list--with-selection .cc-users__selection--multiple{position:relative}@keyframes slideInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"], components: [{ type: i2.CometchatListComponent, selector: "cometchat-list", inputs: ["listItemView", "onScrolledToBottom", "onScrolledToTop", "list", "onSearch", "getSectionHeader", "searchText", "searchIconURL", "listStyle", "searchPlaceholderText", "hideSearch", "hideError", "title", "titleAlignment", "errorStateView", "loadingStateView", "emptyStateView", "state", "errorStateText", "emptyStateText", "loadingIconURL", "showSectionHeader", "sectionHeaderField", "DateSeparatorPattern", "dateSeparatorStyle"] }], directives: [{ type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
701
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatUsersComponent, decorators: [{
702
- type: Component,
703
- args: [{ selector: "cometchat-users", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-users\" [ngStyle]=\"userStyle()\" (keydown)=\"onKeyDown($event)\" (keyup)=\"onKeyUp($event)\" tabindex=\"0\">\n <div class=\"cc-menus\" *ngIf=\"menu\">\n <ng-container *ngTemplateOutlet=\"menu\">\n </ng-container>\n </div>\n\n <!-- Users List -->\n <div class=\"cc-users__list\" [class.cc-users__list--with-selection]=\"getSelectedUsersCount() > 0\">\n <cometchat-list [listItemView]=\"listItemView ? listItemView : listItem\" [onScrolledToBottom]=\"onScrolledToBottom\" [onSearch]=\"onSearch\"\n [list]=\"usersList\" [searchText]=\"searchKeyword\" [searchPlaceholderText]=\"searchPlaceholder\"\n [searchIconURL]=\"searchIconURL\" [hideSearch]=\"hideSearch\" [hideError]=\"hideError\" [title]=\"title\"\n [sectionHeaderField]=\"sectionHeaderField\" [showSectionHeader]=\"showSectionHeader\"\n [emptyStateText]=\"emptyStateText\" [loadingIconURL]=\"loadingIconURL\"\n [titleAlignment]=\"titleAlignment\" [loadingStateView]=\"loadingStateView\" [emptyStateView]=\"emptyStateView\"\n [errorStateText]=\"errorStateText\" [errorStateView]=\"errorStateView\" [listStyle]=\"listStyle\" [state]=\"state\">\n </cometchat-list>\n </div>\n\n <!-- Selected Users Preview Section -->\n <div class=\"cc-selected-users\" [style]=\"selectedUsersPreviewWrapper\" *ngIf=\"showSelectedUsersPreview && getSelectedUsersCount() > 0\">\n <div class=\"cc-selected-users__list\">\n <div class=\"cc-selected-user\" *ngFor=\"let user of getSelectedUsersArray(); trackBy: trackByUserId\" [style]=\"selectedUserPillStyle\">\n <div class=\"cc-selected-user__avatar\">\n <cometchat-avatar \n [image]=\"user?.getAvatar() || ''\" \n [name]=\"user?.getName()\" \n [avatarStyle]=\"avatarStyle\">\n </cometchat-avatar>\n </div>\n <div class=\"cc-selected-user__name\" [style]=\"getUserNameStyle()\">{{user?.getName()}}</div>\n <div class=\"cc-selected-user__remove\" (click)=\"removeSelectedUser(user)\">\n <cometchat-button \n [iconURL]=\"'assets/close2x.svg'\" \n [buttonStyle]=\"removeMemberButtonStyle\">\n </cometchat-button>\n </div>\n </div>\n </div>\n </div>\n <ng-template #listItem let-user>\n <cometchat-list-item [title]=\"user?.name\" [avatarURL]=\"user?.avatar\" [avatarName]=\"user?.name\"\n [listItemStyle]=\"listItemStyle\" [avatarStyle]=\"avatarStyle\" [statusIndicatorStyle]=\"getStatusIndicatorStyle(user)\"\n [statusIndicatorColor]=\"getStatusIndicatorColor(user)\" [hideSeparator]=\"hideSeparator\" (cc-listitem-clicked)=\"onClick(user)\" [isActive]=\"getActiveUser(user)\"\n [userPresencePlacement]=\"userPresencePlacement\">\n <div slot=\"subtitleView\" *ngIf=\"subtitleView\">\n <ng-container *ngTemplateOutlet=\"subtitleView;context:{ $implicit: user }\">\n </ng-container>\n </div>\n\n <div slot=\"menuView\" class=\"cc-users__options\" *ngIf=\"options\">\n <cometchat-menu-list [data]=\"options(user)\">\n\n </cometchat-menu-list>\n </div>\n <div slot=\"tailView\" *ngIf=\"selectionMode != selectionmodeEnum.none\" class=\"cc-users__tail-view\">\n <ng-container *ngTemplateOutlet=\"tailView\">\n </ng-container>\n </div>\n <ng-template #tailView>\n <div *ngIf=\"selectionMode == selectionmodeEnum.single\" class=\"cc-users__selection--single\">\n <cometchat-radio-button [attr.data-uid]=\"user?.uid\" #radioElement (cc-radio-button-changed)=\"addMembersToList(user,$event)\" [checked]=\"isUserSelected(user)\" ></cometchat-radio-button>\n\n </div>\n <div *ngIf=\"selectionMode == selectionmodeEnum.multiple\" class=\"cc-users__selection--multiple\">\n <cometchat-checkbox \n [attr.data-uid]=\"user?.uid\" \n #checkboxElement \n [checkboxStyle]=\"checkboxStyle\" \n (cc-checkbox-changed)=\"onCheckboxChanged(user, $event)\"\n (click)=\"onCheckboxClick(user, $event)\" \n [checked]=\"isUserSelected(user)\">\n </cometchat-checkbox>\n </div>\n </ng-template>\n </cometchat-list-item>\n\n </ng-template>\n</div>\n", styles: [".cc-users{height:100%;width:100%;box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden}.cc-menus{position:absolute;right:12px;padding:12px;cursor:pointer}.cc-selected-users{padding:12px;background:transparent;max-height:150px;overflow-x:hidden;overflow-y:auto}.cc-selected-users__list{display:flex;flex-wrap:wrap;gap:8px}.cc-selected-user{display:flex;align-items:center;border-radius:20px;padding:4px 8px 4px 4px;width:140px;animation:slideInUp .3s ease-out}.cc-selected-user__avatar{flex-shrink:0}.cc-selected-user__name{flex:1;margin:0 8px;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cc-selected-user__remove{flex-shrink:0;cursor:pointer}.cc-selected-user__remove:hover{opacity:.7}.cc-users__list{flex:1;overflow:hidden}.cc-selected-users::-webkit-scrollbar{background:transparent;width:8px}.cc-selected-users::-webkit-scrollbar-thumb{background:#e8e5e5;border-radius:8px}.cc-users__list--with-selection .cc-users__selection--multiple{position:relative}@keyframes slideInUp{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}\n"] }]
704
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }]; }, propDecorators: { usersRequestBuilder: [{
705
- type: Input
706
- }], searchRequestBuilder: [{
707
- type: Input
708
- }], subtitleView: [{
709
- type: Input
710
- }], disableUsersPresence: [{
711
- type: Input
712
- }], listItemView: [{
713
- type: Input
714
- }], menu: [{
715
- type: Input
716
- }], options: [{
717
- type: Input
718
- }], activeUser: [{
719
- type: Input
720
- }], hideSeparator: [{
721
- type: Input
722
- }], searchPlaceholder: [{
723
- type: Input
724
- }], hideError: [{
725
- type: Input
726
- }], selectionMode: [{
727
- type: Input
728
- }], searchIconURL: [{
729
- type: Input
730
- }], hideSearch: [{
731
- type: Input
732
- }], title: [{
733
- type: Input
734
- }], onError: [{
735
- type: Input
736
- }], emptyStateView: [{
737
- type: Input
738
- }], onSelect: [{
739
- type: Input
740
- }], errorStateView: [{
741
- type: Input
742
- }], loadingIconURL: [{
743
- type: Input
744
- }], showSectionHeader: [{
745
- type: Input
746
- }], sectionHeaderField: [{
747
- type: Input
748
- }], loadingStateView: [{
749
- type: Input
750
- }], emptyStateText: [{
751
- type: Input
752
- }], errorStateText: [{
753
- type: Input
754
- }], titleAlignment: [{
755
- type: Input
756
- }], usersStyle: [{
757
- type: Input
758
- }], listItemStyle: [{
759
- type: Input
760
- }], statusIndicatorStyle: [{
761
- type: Input
762
- }], avatarStyle: [{
763
- type: Input
764
- }], selectedUserPreviewStyle: [{
765
- type: Input
766
- }], showSelectedUsersPreview: [{
767
- type: Input
768
- }], onItemClick: [{
769
- type: Input
770
- }], searchKeyword: [{
771
- type: Input
772
- }], onEmpty: [{
773
- type: Input
774
- }], userPresencePlacement: [{
775
- type: Input
776
- }], disableLoadingState: [{
777
- type: Input
778
- }], checkboxes: [{
779
- type: ViewChildren,
780
- args: ['checkboxElement', { read: ElementRef }]
781
- }], radios: [{
782
- type: ViewChildren,
783
- args: ['radioElement', { read: ElementRef }]
784
- }] } });
785
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LXVzZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0VXNlcnMvY29tZXRjaGF0LXVzZXJzL2NvbWV0Y2hhdC11c2Vycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdFVzZXJzL2NvbWV0Y2hhdC11c2Vycy9jb21ldGNoYXQtdXNlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFNTCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFDTCxXQUFXLEVBR1gsYUFBYSxHQUNkLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUVMLGFBQWEsRUFDYixRQUFRLEVBQ1IsY0FBYyxFQUNkLE1BQU0sRUFDTixtQkFBbUIsRUFFbkIsVUFBVSxHQUNYLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBYSx3QkFBd0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTFGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7QUFPL0QsTUFBTSxPQUFPLHVCQUF1QjtJQWdIbEMsWUFDVSxHQUFzQixFQUN0QixZQUFtQztRQURuQyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBdUI7UUE5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LEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBSUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFFRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ2lELFVBQVU7c0JBQWhFLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNELE1BQU07c0JBQXpELFlBQVk7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZHJlbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbWV0Q2hhdCB9IGZyb20gXCJAY29tZXRjaGF0L2NoYXQtc2RrLWphdmFzY3JpcHRcIjtcbmltcG9ydCB7XG4gIEF2YXRhclN0eWxlLFxuICBCYXNlU3R5bGUsXG4gIENoZWNrYm94U3R5bGUsXG4gIExpc3RJdGVtU3R5bGUsXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtcbiAgQ29tZXRDaGF0T3B0aW9uLFxuICBTZWxlY3Rpb25Nb2RlLFxuICBsb2NhbGl6ZSxcbiAgVGl0bGVBbGlnbm1lbnQsXG4gIFN0YXRlcyxcbiAgQ29tZXRDaGF0VXNlckV2ZW50cyxcbiAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMsXG4gIGZvbnRIZWxwZXIsXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlc1wiO1xuaW1wb3J0IHsgVXNlcnNTdHlsZSwgTGlzdFN0eWxlLCBTZWxlY3RlZFVzZXJQcmV2aWV3U3R5bGUgfSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1zaGFyZWRcIjtcbmltcG9ydCB7IENvbWV0Q2hhdFRoZW1lU2VydmljZSB9IGZyb20gXCIuLi8uLi9Db21ldENoYXRUaGVtZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBDb21ldENoYXRFeGNlcHRpb24gfSBmcm9tIFwiLi4vLi4vU2hhcmVkL1V0aWxzL0NvbWVDaGF0RXhjZXB0aW9uXCI7XG5pbXBvcnQgeyBVc2VyUHJlc2VuY2VQbGFjZW1lbnQgfSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IE1lc3NhZ2VVdGlscyB9IGZyb20gXCIuLi8uLi9TaGFyZWQvVXRpbHMvTWVzc2FnZVV0aWxzXCI7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY29tZXRjaGF0LXVzZXJzXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vY29tZXRjaGF0LXVzZXJzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9jb21ldGNoYXQtdXNlcnMuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ldENoYXRVc2Vyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHVzZXJzUmVxdWVzdEJ1aWxkZXIhOiBDb21ldENoYXQuVXNlcnNSZXF1ZXN0QnVpbGRlcjtcbiAgQElucHV0KCkgc2VhcmNoUmVxdWVzdEJ1aWxkZXIhOiBDb21ldENoYXQuVXNlcnNSZXF1ZXN0QnVpbGRlcjtcbiAgQElucHV0KCkgc3VidGl0bGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgZGlzYWJsZVVzZXJzUHJlc2VuY2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbGlzdEl0ZW1WaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgbWVudSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIG9wdGlvbnMhOiAoKG1lbWJlcjogQ29tZXRDaGF0LlVzZXIpID0+IENvbWV0Q2hhdE9wdGlvbltdKSB8IG51bGw7XG4gIEBJbnB1dCgpIGFjdGl2ZVVzZXIhOiBDb21ldENoYXQuVXNlciB8IG51bGw7XG4gIEBJbnB1dCgpIGhpZGVTZXBhcmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZyA9IGxvY2FsaXplKFwiU0VBUkNIXCIpO1xuICBASW5wdXQoKSBoaWRlRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGUubm9uZTtcbiAgQElucHV0KCkgc2VhcmNoSWNvblVSTDogc3RyaW5nID0gXCJhc3NldHMvc2VhcmNoLnN2Z1wiO1xuICBASW5wdXQoKSBoaWRlU2VhcmNoOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBsb2NhbGl6ZShcIlVTRVJTXCIpO1xuICBASW5wdXQoKSBvbkVycm9yPzogKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB2b2lkID0gKFxuICAgIGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uXG4gICkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgfTtcbiAgQElucHV0KCkgZW1wdHlTdGF0ZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBvblNlbGVjdCE6ICh1c2VyOiBDb21ldENoYXQuVXNlciwgc2VsZWN0ZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIEBJbnB1dCgpIGVycm9yU3RhdGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgbG9hZGluZ0ljb25VUkw6IHN0cmluZyA9IFwiYXNzZXRzL1NwaW5uZXIuc3ZnXCI7XG4gIEBJbnB1dCgpIHNob3dTZWN0aW9uSGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2VjdGlvbkhlYWRlckZpZWxkOiBzdHJpbmcgPSBcIm5hbWVcIjtcbiAgQElucHV0KCkgbG9hZGluZ1N0YXRlVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGVtcHR5U3RhdGVUZXh0OiBzdHJpbmcgPSBsb2NhbGl6ZShcIk5PX1VTRVJTX0ZPVU5EXCIpO1xuICBASW5wdXQoKSBlcnJvclN0YXRlVGV4dDogc3RyaW5nID0gbG9jYWxpemUoXCJTT01FVEhJTkdfV1JPTkdcIik7XG4gIEBJbnB1dCgpIHRpdGxlQWxpZ25tZW50OiBUaXRsZUFsaWdubWVudCA9IFRpdGxlQWxpZ25tZW50LmxlZnQ7XG4gIEBJbnB1dCgpIHVzZXJzU3R5bGU6IFVzZXJzU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgc2VwYXJhdG9yQ29sb3I6IFwicmdiKDIyMiAyMjIgMjIyIC8gNDYlKVwiLFxuICB9O1xuICBASW5wdXQoKSBsaXN0SXRlbVN0eWxlOiBMaXN0SXRlbVN0eWxlID0ge1xuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICB9O1xuICBASW5wdXQoKSBzdGF0dXNJbmRpY2F0b3JTdHlsZTogQmFzZVN0eWxlID0ge1xuICAgIGhlaWdodDogXCIxMHB4XCIsXG4gICAgd2lkdGg6IFwiMTBweFwiLFxuICAgIGJvcmRlclJhZGl1czogXCIxNnB4XCIsXG4gIH07XG4gIEBJbnB1dCgpIGF2YXRhclN0eWxlOiBBdmF0YXJTdHlsZSA9IHtcbiAgICBib3JkZXJSYWRpdXM6IFwiMTZweFwiLFxuICAgIHdpZHRoOiBcIjI4cHhcIixcbiAgICBoZWlnaHQ6IFwiMjhweFwiLFxuICB9O1xuICBASW5wdXQoKSBzZWxlY3RlZFVzZXJQcmV2aWV3U3R5bGU6IFNlbGVjdGVkVXNlclByZXZpZXdTdHlsZSA9IHt9O1xuICBASW5wdXQoKSBzaG93U2VsZWN0ZWRVc2Vyc1ByZXZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIEBJbnB1dCgpIG9uSXRlbUNsaWNrITogKHVzZXI6IENvbWV0Q2hhdC5Vc2VyKSA9PiB2b2lkO1xuICBASW5wdXQoKSBzZWFyY2hLZXl3b3JkOiBzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBvbkVtcHR5PzogKCkgPT4gdm9pZDtcbiAgQElucHV0KCkgdXNlclByZXNlbmNlUGxhY2VtZW50OiBVc2VyUHJlc2VuY2VQbGFjZW1lbnQgPVxuICAgIFVzZXJQcmVzZW5jZVBsYWNlbWVudC5ib3R0b207XG4gIEBJbnB1dCgpIGRpc2FibGVMb2FkaW5nU3RhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQFZpZXdDaGlsZHJlbignY2hlY2tib3hFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNoZWNrYm94ZXMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGRyZW4oJ3JhZGlvRWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSByYWRpb3MhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIGZldGNoaW5nVXNlcnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmV0Y2hUaW1lT3V0OiBhbnk7XG4gIHVzZXJDaGVja2VkOiBzdHJpbmcgPSBcIlwiO1xuICBsaXN0U3R5bGU6IExpc3RTdHlsZSA9IHt9O1xuICBwdWJsaWMgdXNlcnNSZXF1ZXN0OiBhbnk7XG4gIHB1YmxpYyBzdGF0ZTogU3RhdGVzID0gU3RhdGVzLmxvYWRpbmc7XG4gIHB1YmxpYyB0aW1lb3V0OiBhbnk7XG4gIHNlbGVjdGlvbm1vZGVFbnVtOiB0eXBlb2YgU2VsZWN0aW9uTW9kZSA9IFNlbGVjdGlvbk1vZGU7XG4gIHB1YmxpYyB1c2Vyc0xpc3Q6IENvbWV0Q2hhdC5Vc2VyW10gPSBbXTtcbiAgcHVibGljIGxpbWl0OiBudW1iZXIgPSAzMDtcbiAgcHVibGljIHVzZXJMaXN0ZW5lcklkOiBzdHJpbmcgPSBcInVzZXJsaXN0X1wiICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIGxvZ2dlZEluVXNlciE6IENvbWV0Q2hhdC5Vc2VyIHwgbnVsbDtcbiAgcmVxdWVzdEJ1aWxkZXIhOiBDb21ldENoYXQuVXNlcnNSZXF1ZXN0O1xuICBmaXJzdFJlbG9hZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY29ubmVjdGlvbkxpc3RlbmVySWQgPSBcImNvbm5lY3Rpb25fXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgcHVibGljIHByZXZpb3VzU2VhcmNoS2V5d29yZCA9IFwiXCI7XG4gIHB1YmxpYyBpc1dlYnNvY2tldFJlY29ubmVjdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzZWxlY3RlZFVzZXJzOiB7W3VpZDogc3RyaW5nXTogQ29tZXRDaGF0LlVzZXJ9ID0ge307XG4gIGNoZWNrYm94U3R5bGU6IENoZWNrYm94U3R5bGUgPSB7XG4gICAgaGVpZ2h0OiBcIjI0cHhcIixcbiAgICB3aWR0aDogXCIyNHB4XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiNHB4XCIsXG4gICAgY2hlY2tlZEJhY2tncm91bmRDb2xvcjogXCIjMjE5NkYzXCIsXG4gICAgdW5jaGVja2VkQmFja2dyb3VuZENvbG9yOiBcIiNjY2NcIlxuICB9XG5cblxuICByZW1vdmVNZW1iZXJCdXR0b25TdHlsZSA9IHtcbiAgICBoZWlnaHQ6IFwiMTZweFwiLFxuICAgIHdpZHRoOiBcIjE2cHhcIixcbiAgICBpY29uSGVpZ2h0OiBcIjE2cHhcIixcbiAgICBpY29uV2lkdGg6XCIxNnB4XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiNTAlXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJ1dHRvbkljb25UaW50OiBcImJsYWNrXCJcbiAgfTtcbiAgc2VsZWN0ZWRVc2Vyc1ByZXZpZXdXcmFwcGVyID0ge31cblxuICAvLyBCdWxrIHNlbGVjdGlvbiBwcm9wZXJ0aWVzXG4gIHByaXZhdGUgbGFzdFNlbGVjdGVkSW5kZXg6IG51bWJlciA9IC0xO1xuICBwcml2YXRlIGlzU2hpZnRQcmVzc2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGVkVXNlclBpbGxTdHlsZSA9IHt9O1xuXG4gIC8qKlxuICAgKiBFdmVudHNcbiAgICovXG4gIGNjVXNlckJsb2NrZWQhOiBTdWJzY3JpcHRpb247XG4gIGNjVXNlclVuQmxvY2tlZCE6IFN1YnNjcmlwdGlvbjtcbiAgb25TY3JvbGxlZFRvQm90dG9tOiBhbnkgPSBudWxsO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IENvbWV0Q2hhdFRoZW1lU2VydmljZVxuICApIHtcbiAgICB0aGlzLnN0YXRlID0gU3RhdGVzLmxvYWRpbmc7XG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maXJzdFJlbG9hZCA9IHRydWU7XG4gICAgdGhpcy5zdGF0ZSA9IFN0YXRlcy5sb2FkaW5nO1xuICAgIHRoaXMuaXNXZWJzb2NrZXRSZWNvbm5lY3RlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5zZXRUaGVtZVN0eWxlKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cygpO1xuICAgIENvbWV0Q2hhdC5nZXRMb2dnZWRpblVzZXIoKVxuICAgICAgLnRoZW4oKHVzZXI6IENvbWV0Q2hhdC5Vc2VyIHwgbnVsbCkgPT4ge1xuICAgICAgICB0aGlzLnNldFJlcXVlc3RCdWlsZGVyKCk7XG4gICAgICAgIGlmICghdGhpcy5mZXRjaGluZ1VzZXJzKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaE5leHRVc2Vyc0xpc3QoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF0dGFjaExpc3RlbmVycygpO1xuICAgICAgICB0aGlzLmxvZ2dlZEluVXNlciA9IHVzZXI7XG5cbiAgICAgICAgdGhpcy5vblNjcm9sbGVkVG9Cb3R0b20gPSB0aGlzLmZldGNoTmV4dFVzZXJzTGlzdDtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1tcInNlYXJjaEtleXdvcmRcIl0pIHtcbiAgICAgIHRoaXMuZmV0Y2hVc2Vyc09uU2VhcmNoS2V5V29yZENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZldGNoVXNlcnNPblNlYXJjaEtleVdvcmRDaGFuZ2UgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuZmV0Y2hpbmdVc2Vycykge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZmV0Y2hUaW1lT3V0KTtcbiAgICAgIHRoaXMuZmV0Y2hUaW1lT3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoRm9yVXNlcigpO1xuICAgICAgfSwgODAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hGb3JVc2VyKCk7XG4gICAgfVxuICB9O1xuXG4gIHNlYXJjaEZvclVzZXIgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRSZXF1ZXN0QnVpbGRlcigpO1xuICAgIGlmICghdGhpcy5kaXNhYmxlTG9hZGluZ1N0YXRlKSB7XG4gICAgICB0aGlzLnVzZXJzTGlzdCA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmZldGNoTmV4dFVzZXJzTGlzdCgpO1xuICB9O1xuXG4gIG9uVXNlclNlbGVjdGVkKHVzZXI6IENvbWV0Q2hhdC5Vc2VyLCBldmVudDogYW55KSB7XG4gICAgbGV0IHNlbGVjdGVkOiBib29sZWFuID0gZXZlbnQ/LmRldGFpbD8uY2hlY2tlZDtcbiAgICBpZiAodGhpcy5vblNlbGVjdCkge1xuICAgICAgdGhpcy5vblNlbGVjdCh1c2VyLCBzZWxlY3RlZCk7XG4gICAgfVxuICB9XG4gIGZldGNoTmV3VXNlcnMoKSB7XG4gICAgdGhpcy5zZXRSZXF1ZXN0QnVpbGRlcigpO1xuICAgIGxldCBzdGF0ZSA9IHRoaXMuZmlyc3RSZWxvYWQgPyBTdGF0ZXMubG9hZGluZyA6IFN0YXRlcy5sb2FkZWQ7XG4gICAgdGhpcy5mZXRjaE5leHRVc2Vyc0xpc3Qoc3RhdGUpO1xuICB9XG4gIC8vIHN1YnNjcmliZSB0byBnbG9iYWwgZXZlbnRzXG4gIHN1YnNjcmliZVRvRXZlbnRzKCkge1xuICAgIHRoaXMuY2NVc2VyQmxvY2tlZCA9IENvbWV0Q2hhdFVzZXJFdmVudHMuY2NVc2VyQmxvY2tlZC5zdWJzY3JpYmUoXG4gICAgICAodXNlcjogQ29tZXRDaGF0LlVzZXIpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVXNlciAmJiB1c2VyLmdldFVpZCgpID09IHRoaXMuYWN0aXZlVXNlci5nZXRVaWQoKSkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlVXNlciA9IHVzZXI7XG4gICAgICAgICAgdGhpcy51cGRhdGVVc2VyKHVzZXIpO1xuICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jY1VzZXJVbkJsb2NrZWQgPSBDb21ldENoYXRVc2VyRXZlbnRzLmNjVXNlclVuYmxvY2tlZC5zdWJzY3JpYmUoXG4gICAgICAodXNlcjogQ29tZXRDaGF0LlVzZXIpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVXNlciAmJiB1c2VyLmdldFVpZCgpID09IHRoaXMuYWN0aXZlVXNlci5nZXRVaWQoKSkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlVXNlciA9IHVzZXI7XG4gICAgICAgICAgdGhpcy51cGRhdGVVc2VyKHVzZXIpO1xuICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgdW5zdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNjVXNlckJsb2NrZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY1VzZXJVbkJsb2NrZWQ/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51c2Vyc1JlcXVlc3QgPSBudWxsO1xuICAgIHRoaXMucmVmLmRldGFjaCgpO1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIoKTtcbiAgICB0aGlzLnN0YXRlID0gU3RhdGVzLmxvYWRlZDtcbiAgICB0aGlzLnVuc3Vic2NyaWJlVG9FdmVudHMoKTtcbiAgfVxuICBpc1VzZXJTZWxlY3RlZCh1c2VyOiBDb21ldENoYXQuVXNlcikge1xuICAgIHJldHVybiB1c2VyLmdldFVpZCgpID09PSB0aGlzLnVzZXJDaGVja2VkIFxuICAgIHx8IHRoaXMuc2VsZWN0ZWRVc2Vycz8uW3VzZXIuZ2V0VWlkKCldO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuVXNlcn0gdXNlclxuICAgKi9cbiAgb25DbGljayA9ICh1c2VyOiBDb21ldENoYXQuVXNlcikgPT4ge1xuICAgIGlmICh0aGlzLm9uSXRlbUNsaWNrKSB7XG4gICAgICB0aGlzLm9uSXRlbUNsaWNrKHVzZXIpO1xuICAgIH1cbiAgICB0aGlzLm9uUm93Q2xpY2tlZCh1c2VyLmdldFVpZCgpKTtcbiAgfTtcblxuICBvblJvd0NsaWNrZWQodWlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCB1c2VyQ2hlY2tib3ggPSB0aGlzLmNoZWNrYm94ZXMuZmluZChjaGVja2JveFJlZiA9PiB1aWQgPT09IGNoZWNrYm94UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXVpZCcpKTtcbiAgICBjb25zdCB1c2VyUmFkaW8gPSB0aGlzLnJhZGlvcy5maW5kKHJhZGlvUmVmID0+IHVpZCA9PT0gcmFkaW9SZWYubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdWlkJykpO1xuICAgIGxldCBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHVzZXJDaGVja2JveCAmJiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09IHRoaXMuc2VsZWN0aW9ubW9kZUVudW0ubXVsdGlwbGUpIHtcbiAgICAgIGNvbnN0IHJvb3Q6IGFueSA9IHVzZXJDaGVja2JveC5uYXRpdmVFbGVtZW50LnNoYWRvd1Jvb3QgfHwgdXNlckNoZWNrYm94Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpbnB1dCA9IHJvb3QucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHVzZXJSYWRpbyAmJiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09IHRoaXMuc2VsZWN0aW9ubW9kZUVudW0uc2luZ2xlKSB7XG4gICAgICBjb25zdCByb290OiBhbnkgPSB1c2VyUmFkaW8ubmF0aXZlRWxlbWVudC5zaGFkb3dSb290IHx8IHVzZXJSYWRpby5uYXRpdmVFbGVtZW50O1xuICAgICAgaW5wdXQgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXScpO1xuICAgIH1cblxuICAgIGlmIChpbnB1dCkgaW5wdXQuY2xpY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuVXNlcn0gdXNlclxuICAgKi9cbiAgZ2V0QWN0aXZlVXNlciA9ICh1c2VyOiBDb21ldENoYXQuVXNlcikgPT4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT0gU2VsZWN0aW9uTW9kZS5ub25lIHx8ICF0aGlzLnNlbGVjdGlvbk1vZGUpIHtcbiAgICAgIGlmICh1c2VyLmdldFVpZCgpID09IHRoaXMuYWN0aXZlVXNlcj8uZ2V0VWlkKCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHJldHVybiBmYWxzZTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5Vc2VyfSB1c2VyXG4gICAqL1xuICBnZXRTdGF0dXNJbmRpY2F0b3JDb2xvciA9ICh1c2VyOiBDb21ldENoYXQuVXNlcikgPT4ge1xuICAgIGxldCB1c2VyU3RhdHVzVmlzaWJpbGl0eSA9IG5ldyBNZXNzYWdlVXRpbHMoKS5nZXRVc2VyU3RhdHVzVmlzaWJpbGl0eSh1c2VyKSB8fCB0aGlzLmRpc2FibGVVc2Vyc1ByZXNlbmNlO1xuXG4gICAgaWYgKCF1c2VyU3RhdHVzVmlzaWJpbGl0eSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51c2Vyc1N0eWxlPy5vbmxpbmVTdGF0dXNDb2xvciA/P1xuICAgICAgICB0aGlzLnRoZW1lU2VydmljZT8udGhlbWUucGFsZXR0ZS5nZXRTdWNjZXNzKClcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuICBcbiAgLyoqXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5Vc2VyfSB1c2VyXG4gICAqL1xuICBnZXRTdGF0dXNJbmRpY2F0b3JTdHlsZSA9ICh1c2VyOiBDb21ldENoYXQuVXNlcikgPT4ge1xuICAgIGxldCB1c2VyU3RhdHVzVmlzaWJpbGl0eSA9IG5ldyBNZXNzYWdlVXRpbHMoKS5nZXRVc2VyU3RhdHVzVmlzaWJpbGl0eSh1c2VyKSB8fCB0aGlzLmRpc2FibGVVc2Vyc1ByZXNlbmNlO1xuICAgIGlmKCF1c2VyU3RhdHVzVmlzaWJpbGl0eSl7XG4gICAgICByZXR1cm4oXG4gICAgICAgIHRoaXMuc3RhdHVzSW5kaWNhdG9yU3R5bGVcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5Vc2VyfSB1c2VyXG4gICAqL1xuICB1cGRhdGVVc2VyID0gKHVzZXI6IENvbWV0Q2hhdC5Vc2VyKSA9PiB7XG4gICAgbGV0IHVzZXJsaXN0ID0gWy4uLnRoaXMudXNlcnNMaXN0XTtcbiAgICAvL3NlYXJjaCBmb3IgdXNlclxuICAgIGxldCB1c2VyS2V5ID0gdXNlcmxpc3QuZmluZEluZGV4KFxuICAgICAgKHU6IENvbWV0Q2hhdC5Vc2VyLCBrKSA9PiB1LmdldFVpZCgpID09IHVzZXIuZ2V0VWlkKClcbiAgICApO1xuICAgIC8vaWYgZm91bmQgaW4gdGhlIGxpc3QsIHVwZGF0ZSB1c2VyIG9iamVjdFxuICAgIGlmICh1c2VyS2V5ID4gLTEpIHtcbiAgICAgIHVzZXJsaXN0LnNwbGljZSh1c2VyS2V5LCAxLCB1c2VyKTtcbiAgICAgIHRoaXMudXNlcnNMaXN0ID0gWy4uLnVzZXJsaXN0XTtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH07XG4gIGF0dGFjaENvbm5lY3Rpb25MaXN0ZW5lcnMoKSB7XG4gICAgQ29tZXRDaGF0LmFkZENvbm5lY3Rpb25MaXN0ZW5lcihcbiAgICAgIHRoaXMuY29ubmVjdGlvbkxpc3RlbmVySWQsXG4gICAgICBuZXcgQ29tZXRDaGF0LkNvbm5lY3Rpb25MaXN0ZW5lcih7XG4gICAgICAgIG9uQ29ubmVjdGVkOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1dlYnNvY2tldFJlY29ubmVjdGVkID0gdHJ1ZVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ29ubmVjdGlvbkxpc3RlbmVyID0+Y29ubmVjdGVkXCIpO1xuICAgICAgICAgIHRoaXMuZmV0Y2hOZXdVc2VycygpO1xuICAgICAgICB9LFxuICAgICAgICBpbkNvbm5lY3Rpbmc6ICgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3Rpb25MaXN0ZW5lciA9PiBJbiBjb25uZWN0aW5nXCIpO1xuICAgICAgICB9LFxuICAgICAgICBvbkRpc2Nvbm5lY3RlZDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNXZWJzb2NrZXRSZWNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ29ubmVjdGlvbkxpc3RlbmVyID0+IE9uIERpc2Nvbm5lY3RlZFwiKTtcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBhdHRhY2hMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5zdGF0ZSA9IFN0YXRlcy5sb2FkaW5nO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAvL0F0dGFjaGluZyBVc2VyIExpc3RlbmVycyB0byBkeW5hbWlsY2FsbHkgdXBkYXRlIHdoZW4gYSB1c2VyIGNvbWVzIG9ubGluZSBhbmQgZ29lcyBvZmZsaW5lXG4gICAgQ29tZXRDaGF0LmFkZFVzZXJMaXN0ZW5lcihcbiAgICAgIHRoaXMudXNlckxpc3RlbmVySWQsXG4gICAgICBuZXcgQ29tZXRDaGF0LlVzZXJMaXN0ZW5lcih7XG4gICAgICAgIG9uVXNlck9ubGluZTogKG9ubGluZVVzZXI6IENvbWV0Q2hhdC5Vc2VyKSA9PiB7XG4gICAgICAgICAgLyogd2hlbiBzb21ldXNlci9mcmllbmQgY29tZXMgb25saW5lLCB1c2VyIHdpbGwgYmUgcmVjZWl2ZWQgaGVyZSAqL1xuICAgICAgICAgIHRoaXMudXBkYXRlVXNlcihvbmxpbmVVc2VyKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25Vc2VyT2ZmbGluZTogKG9mZmxpbmVVc2VyOiBDb21ldENoYXQuVXNlcikgPT4ge1xuICAgICAgICAgIC8qIHdoZW4gc29tZXVzZXIvZnJpZW5kIHdlbnQgb2ZmbGluZSwgdXNlciB3aWxsIGJlIHJlY2VpdmVkIGhlcmUgKi9cbiAgICAgICAgICB0aGlzLnVwZGF0ZVVzZXIob2ZmbGluZVVzZXIpO1xuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICB9XG4gIHJlbW92ZUxpc3RlbmVyKCkge1xuICAgIENvbWV0Q2hhdC5yZW1vdmVVc2VyTGlzdGVuZXIodGhpcy51c2VyTGlzdGVuZXJJZCk7XG4gICAgdGhpcy51c2VyTGlzdGVuZXJJZCA9IFwiXCI7XG4gICAgQ29tZXRDaGF0LnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcih0aGlzLmNvbm5lY3Rpb25MaXN0ZW5lcklkKTtcbiAgfVxuICBhZGRNZW1iZXJzVG9MaXN0ID0gKHVzZXI6IENvbWV0Q2hhdC5Vc2VyLCBldmVudDogYW55KSA9PiB7XG4gICAgbGV0IHNlbGVjdGVkOiBib29sZWFuID0gZXZlbnQ/LmRldGFpbD8uY2hlY2tlZDtcbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLnVzZXJzTGlzdC5maW5kSW5kZXgodSA9PiB1LmdldFVpZCgpID09PSB1c2VyLmdldFVpZCgpKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBzaGlmdCBrZXkgd2FzIHByZXNzZWQgZm9yIGJ1bGsgc2VsZWN0aW9uXG4gICAgaWYgKHRoaXMuaXNTaGlmdFByZXNzZWQgJiYgdGhpcy5sYXN0U2VsZWN0ZWRJbmRleCAhPT0gLTEgJiYgY3VycmVudEluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5oYW5kbGVCdWxrU2VsZWN0aW9uKGN1cnJlbnRJbmRleCwgc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWd1bGFyIHNpbmdsZSBzZWxlY3Rpb25cbiAgICAgIGlmKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gdGhpcy5zZWxlY3Rpb25tb2RlRW51bS5zaW5nbGUpe1xuICAgICAgICB0aGlzLnVzZXJDaGVja2VkID0gdXNlci5nZXRVaWQoKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHRoaXMub25TZWxlY3QpIHtcbiAgICAgICAgdGhpcy5vblNlbGVjdCh1c2VyLCBzZWxlY3RlZCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnNbdXNlci5nZXRVaWQoKV0gPSB1c2VyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VsZWN0ZWRVc2Vyc1t1c2VyLmdldFVpZCgpXTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdFNlbGVjdGVkSW5kZXggPSBjdXJyZW50SW5kZXg7XG4gICAgfVxuICAgIFxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTsgXG4gIH07XG4gIGdldFVzZXJOYW1lU3R5bGUoKXtcbiAgICByZXR1cm4ge1xuICAgICAgZm9udDogdGhpcy5zZWxlY3RlZFVzZXJQcmV2aWV3U3R5bGUudGV4dEZvbnQgfHwgIGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5uYW1lKSxcbiAgICAgIGNvbG9yOiB0aGlzLnNlbGVjdGVkVXNlclByZXZpZXdTdHlsZS50ZXh0Q29sb3IgfHwgIHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KCksXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjaGVja2JveCBjbGljayB0byBkZXRlY3Qgc2hpZnQga2V5XG4gICAqL1xuICBvbkNoZWNrYm94Q2xpY2sgPSAodXNlcjogQ29tZXRDaGF0LlVzZXIsIGV2ZW50OiBFdmVudCkgPT4ge1xuICAgIHRoaXMuaXNTaGlmdFByZXNzZWQgPSAoZXZlbnQgYXMgTW91c2VFdmVudCkuc2hpZnRLZXk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjaGVja2JveCBjaGFuZ2VkIGV2ZW50IFxuICAgKi9cbiAgb25DaGVja2JveENoYW5nZWQgPSAodXNlcjogQ29tZXRDaGF0LlVzZXIsIGV2ZW50OiBhbnkpID0+IHtcbiAgICB0aGlzLmFkZE1lbWJlcnNUb0xpc3QodXNlciwgZXZlbnQpO1xuICAgIC8vIFJlc2V0IHNoaWZ0IGZsYWcgYWZ0ZXIgcHJvY2Vzc2luZ1xuICAgIHRoaXMuaXNTaGlmdFByZXNzZWQgPSBmYWxzZTtcbiAgfTtcblxuICAvKipcbiAgICogSGFuZGxlIGtleWJvYXJkIGV2ZW50cyBmb3IgYWNjZXNzaWJpbGl0eVxuICAgKi9cbiAgb25LZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgLy8gVHJhY2sgc2hpZnQga2V5IHN0YXRlIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ1NoaWZ0Jykge1xuICAgICAgdGhpcy5pc1NoaWZ0UHJlc3NlZCA9IHRydWU7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBIYW5kbGUga2V5Ym9hcmQgZXZlbnRzIGZvciBhY2Nlc3NpYmlsaXR5ICBcbiAgICovXG4gIG9uS2V5VXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnU2hpZnQnKSB7XG4gICAgICB0aGlzLmlzU2hpZnRQcmVzc2VkID0gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBIYW5kbGUgYnVsayBzZWxlY3Rpb24gd2hlbiBzaGlmdCtjbGljayBpcyB1c2VkXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUJ1bGtTZWxlY3Rpb24oY3VycmVudEluZGV4OiBudW1iZXIsIHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IE1hdGgubWluKHRoaXMubGFzdFNlbGVjdGVkSW5kZXgsIGN1cnJlbnRJbmRleCk7XG4gICAgY29uc3QgZW5kSW5kZXggPSBNYXRoLm1heCh0aGlzLmxhc3RTZWxlY3RlZEluZGV4LCBjdXJyZW50SW5kZXgpO1xuICAgIGNvbnN0IHNob3VsZFNlbGVjdCA9IHNlbGVjdGVkO1xuICAgIFxuICAgIC8vIEFwcGx5IHNlbGVjdGlvbi9kZXNlbGVjdGlvbiB0byBhbGwgdXNlcnMgaW4gcmFuZ2VcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgaSsrKSB7XG4gICAgICBjb25zdCB1c2VyID0gdGhpcy51c2Vyc0xpc3RbaV07XG4gICAgICBpZiAodXNlcikge1xuICAgICAgICBjb25zdCB3YXNTZWxlY3RlZCA9ICEhdGhpcy5zZWxlY3RlZFVzZXJzW3VzZXIuZ2V0VWlkKCldO1xuICAgICAgICBcbiAgICAgICAgaWYgKHNob3VsZFNlbGVjdCAmJiAhd2FzU2VsZWN0ZWQpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlcnNbdXNlci5nZXRVaWQoKV0gPSB1c2VyO1xuICAgICAgICAgIGlmICh0aGlzLm9uU2VsZWN0KSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0KHVzZXIsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrYm94U3RhdGUodXNlci5nZXRVaWQoKSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXNob3VsZFNlbGVjdCAmJiB3YXNTZWxlY3RlZCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlbGVjdGVkVXNlcnNbdXNlci5nZXRVaWQoKV07XG4gICAgICAgICAgaWYgKHRoaXMub25TZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3QodXNlciwgZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrYm94U3RhdGUodXNlci5nZXRVaWQoKSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMubGFzdFNlbGVjdGVkSW5kZXggPSBjdXJyZW50SW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNoZWNrYm94IHN0YXRlIHByb2dyYW1tYXRpY2FsbHlcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlQ2hlY2tib3hTdGF0ZSh1c2VySWQ6IHN0cmluZywgY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY2hlY2tib3hlcykge1xuICAgICAgICBjb25zdCB1c2VyQ2hlY2tib3ggPSB0aGlzLmNoZWNrYm94ZXMuZmluZChjaGVja2JveFJlZiA9PiBcbiAgICAgICAgICB1c2VySWQgPT09IGNoZWNrYm94UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXVpZCcpXG4gICAgICAgICk7XG4gICAgICAgIFxuICAgICAgICBpZiAodXNlckNoZWNrYm94KSB7XG4gICAgICAgICAgY29uc3Qgcm9vdDogYW55ID0gdXNlckNoZWNrYm94Lm5hdGl2ZUVsZW1lbnQuc2hhZG93Um9vdCB8fCB1c2VyQ2hlY2tib3gubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICBjb25zdCBpbnB1dDogSFRNTElucHV0RWxlbWVudCA9IHJvb3QucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGlucHV0ICYmIGlucHV0LmNoZWNrZWQgIT09IGNoZWNrZWQpIHtcbiAgICAgICAgICAgIGlucHV0LmNoZWNrZWQgPSBjaGVja2VkO1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlRXZlbnQgPSBuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KTtcbiAgICAgICAgICAgIGlucHV0LmRpc3BhdGNoRXZlbnQoY2hhbmdlRXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhcnJheSBvZiBzZWxlY3RlZCB1c2VycyBmb3IgcHJldmlld1xuICAgKi9cbiAgZ2V0U2VsZWN0ZWRVc2Vyc0FycmF5KCk6IENvbWV0Q2hhdC5Vc2VyW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuc2VsZWN0ZWRVc2Vycyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvdW50IG9mIHNlbGVjdGVkIHVzZXJzXG4gICAqL1xuICBnZXRTZWxlY3RlZFVzZXJzQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZWxlY3RlZFVzZXJzKS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHVzZXIgZnJvbSBzZWxlY3Rpb24gYnkgdHJpZ2dlcmluZyBjaGVja2JveCBjbGlja1xuICAgKi9cbiAgcmVtb3ZlU2VsZWN0ZWRVc2VyKHVzZXI6IENvbWV0Q2hhdC5Vc2VyKSB7XG4gICAgY29uc3QgdXNlckNoZWNrYm94ID0gdGhpcy5jaGVja2JveGVzLmZpbmQoY2hlY2tib3hSZWYgPT4gXG4gICAgICB1c2VyLmdldFVpZCgpID09PSBjaGVja2JveFJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS11aWQnKVxuICAgICk7XG5cbiAgICBpZiAodXNlckNoZWNrYm94KSB7XG4gICAgICBjb25zdCByb290OiBhbnkgPSB1c2VyQ2hlY2tib3gubmF0aXZlRWxlbWVudC5zaGFkb3dSb290IHx8IHVzZXJDaGVja2JveC5uYXRpdmVFbGVtZW50O1xuICAgICAgY29uc3QgaW5wdXQgPSByb290LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpO1xuICAgICAgXG4gICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgaW5wdXQuY2xpY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVHJhY2sgYnkgZnVuY3Rpb24gZm9yIG5nRm9yIHBlcmZvcm1hbmNlXG4gICAqL1xuICB0cmFja0J5VXNlcklkKGluZGV4OiBudW1iZXIsIHVzZXI6IENvbWV0Q2hhdC5Vc2VyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdXNlci5nZXRVaWQoKTtcbiAgfVxuICBmZXRjaE5leHRVc2Vyc0xpc3QgPSAoc3RhdGU6IFN0YXRlcyA9IFN0YXRlcy5sb2FkaW5nKSA9PiB7XG4gICAgdGhpcy5vblNjcm9sbGVkVG9Cb3R0b20gPSBudWxsO1xuICAgIGlmICghKHRoaXMuZGlzYWJsZUxvYWRpbmdTdGF0ZSAmJiBzdGF0ZSA9PSBTdGF0ZXMubG9hZGluZykpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5yZXF1ZXN0QnVpbGRlciAmJlxuICAgICAgKHRoaXMucmVxdWVzdEJ1aWxkZXIgYXMgYW55KS5wYWdpbmF0aW9uICYmXG4gICAgICAoKHRoaXMucmVxdWVzdEJ1aWxkZXIgYXMgYW55KS5wYWdpbmF0aW9uLmN1cnJlbnRfcGFnZSA9PSAwIHx8XG4gICAgICAgICh0aGlzLnJlcXVlc3RCdWlsZGVyIGFzIGFueSkucGFnaW5hdGlvbi5jdXJyZW50X3BhZ2UgIT1cbiAgICAgICAgKHRoaXMucmVxdWVzdEJ1aWxkZXIgYXMgYW55KS5wYWdpbmF0aW9uLnRvdGFsX3BhZ2VzKVxuICAgICkge1xuICAgICAgdGhpcy5mZXRjaGluZ1VzZXJzID0gdHJ1ZTtcbiAgICAgIHRoaXMub25TY3JvbGxlZFRvQm90dG9tID0gdGhpcy5mZXRjaE5leHRVc2Vyc0xpc3Q7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlcXVlc3RCdWlsZGVyLmZldGNoTmV4dCgpLnRoZW4oXG4gICAgICAgICAgKHVzZXJMaXN0OiBDb21ldENoYXQuVXNlcltdKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyh1c2VyTGlzdClcbiAgICAgICAgICAgIGlmICh1c2VyTGlzdC5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5vbkVtcHR5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVtcHR5KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c1NlYXJjaEtleXdvcmQgPSBcIlwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHVzZXJMaXN0Lmxlbmd0aCA8PSAwICYmXG4gICAgICAgICAgICAgICh0aGlzLnVzZXJzTGlzdD8ubGVuZ3RoIDw9IDAgfHwgdGhpcy5kaXNhYmxlTG9hZGluZ1N0YXRlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZXMuZW1wdHk7XG4gICAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlTG9hZGluZ1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNXZWJzb2NrZXRSZWNvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy51c2Vyc0xpc3QgPSB1c2VyTGlzdDtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNXZWJzb2NrZXRSZWNvbm5lY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0ID0gWy4uLnRoaXMudXNlcnNMaXN0LCAuLi51c2VyTGlzdF07XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hLZXl3b3JkICE9IHRoaXMucHJldmlvdXNTZWFyY2hLZXl3b3JkIHx8XG4gICAgICAgICAgICAgICAgICBbMCwgMV0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnJlcXVlc3RCdWlsZGVyIGFzIGFueSkucGFnaW5hdGlvbi5jdXJyZW50X3BhZ2VcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0ID0gdXNlckxpc3Q7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudXNlcnNMaXN0ID0gWy4uLnRoaXMudXNlcnNMaXN0LCAuLi51c2VyTGlzdF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZXMubG9hZGVkO1xuXG4gICAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0UmVsb2FkKSB7XG4gICAgICAgICAgICAgIHRoaXMuYXR0YWNoQ29ubmVjdGlvbkxpc3RlbmVycygpO1xuICAgICAgICAgICAgICB0aGlzLmZpcnN0UmVsb2FkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZldGNoaW5nVXNlcnMgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNTZWFyY2hLZXl3b3JkID0gdGhpcy5zZWFyY2hLZXl3b3JkO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlcy5lcnJvcjtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hpbmdVc2VycyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICAgIHRoaXMub25FcnJvcihDb21ldENoYXRFeGNlcHRpb24oZXJyb3IpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy51c2Vyc0xpc3Q/Lmxlbmd0aCA8PSAwKSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlcy5lcnJvcjtcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mZXRjaGluZ1VzZXJzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHNldFJlcXVlc3RCdWlsZGVyKCkge1xuICAgIGlmICghdGhpcy5zZWFyY2hLZXl3b3JkKSB7XG4gICAgICB0aGlzLnByZXZpb3VzU2VhcmNoS2V5d29yZCA9IFwiXCI7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlYXJjaFJlcXVlc3RCdWlsZGVyICYmIHRoaXMuc2VhcmNoS2V5d29yZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0QnVpbGRlciA9IHRoaXMuc2VhcmNoUmVxdWVzdEJ1aWxkZXJcbiAgICAgICAgLnNldFNlYXJjaEtleXdvcmQodGhpcy5zZWFyY2hLZXl3b3JkKVxuICAgICAgICAuYnVpbGQoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudXNlcnNSZXF1ZXN0QnVpbGRlcikge1xuICAgICAgdGhpcy5yZXF1ZXN0QnVpbGRlciA9IHRoaXMudXNlcnNSZXF1ZXN0QnVpbGRlclxuICAgICAgICAuc2V0U2VhcmNoS2V5d29yZCh0aGlzLnNlYXJjaEtleXdvcmQpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlcXVlc3RCdWlsZGVyID0gbmV3IENvbWV0Q2hhdC5Vc2Vyc1JlcXVlc3RCdWlsZGVyKClcbiAgICAgICAgLnNldExpbWl0KHRoaXMubGltaXQpXG4gICAgICAgIC5zZXRTZWFyY2hLZXl3b3JkKHRoaXMuc2VhcmNoS2V5d29yZClcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RCdWlsZGVyO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgb25TZWFyY2ggPSAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWFyY2hLZXl3b3JkID0ga2V5O1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRSZXF1ZXN0QnVpbGRlcigpO1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZUxvYWRpbmdTdGF0ZSkge1xuICAgICAgICAgIHRoaXMudXNlcnNMaXN0ID0gW107XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5mZXRjaGluZ1VzZXJzIHx8ICh0aGlzLmZldGNoaW5nVXNlcnMgJiYga2V5ID09IFwiXCIpKSB7XG4gICAgICAgICAgdGhpcy51c2Vyc0xpc3QgPSBbXTtcbiAgICAgICAgICB0aGlzLmZldGNoTmV4dFVzZXJzTGlzdCgpO1xuICAgICAgICB9XG4gICAgICB9LCA1MDApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgc2V0VGhlbWVTdHlsZSgpIHtcbiAgICB0aGlzLnNldFVzZXJzU3R5bGUoKTtcbiAgICB0aGlzLnNldExpc3RJdGVtU3R5bGUoKTtcbiAgICB0aGlzLnNldEF2YXRhclN0eWxlKCk7XG4gICAgdGhpcy5zZXRTdGF0dXNTdHlsZSgpO1xuICAgIHRoaXMuc2V0U2VsZWN0ZWRVc2VyU3R5bGUoKTtcblxuICAgIHRoaXMubGlzdFN0eWxlID0ge1xuICAgICAgdGl0bGVUZXh0Rm9udDogdGhpcy51c2Vyc1N0eWxlLnRpdGxlVGV4dEZvbnQsXG4gICAgICB0aXRsZVRleHRDb2xvcjogdGhpcy51c2Vyc1N0eWxlLnRpdGxlVGV4dENvbG9yLFxuICAgICAgZW1wdHlTdGF0ZVRleHRGb250OiB0aGlzLnVzZXJzU3R5bGUuZW1wdHlTdGF0ZVRleHRGb250LFxuICAgICAgZW1wdHlTdGF0ZVRleHRDb2xvcjogdGhpcy51c2Vyc1N0eWxlLmVtcHR5U3RhdGVUZXh0Q29sb3IsXG4gICAgICBlcnJvclN0YXRlVGV4dEZvbnQ6IHRoaXMudXNlcnNTdHlsZS5lcnJvclN0YXRlVGV4dEZvbnQsXG4gICAgICBlcnJvclN0YXRlVGV4dENvbG9yOiB0aGlzLnVzZXJzU3R5bGUuZXJyb3JTdGF0ZVRleHRDb2xvcixcbiAgICAgIGxvYWRpbmdJY29uVGludDogdGhpcy51c2Vyc1N0eWxlLmxvYWRpbmdJY29uVGludCxcbiAgICAgIHNlcGFyYXRvckNvbG9yOiB0aGlzLnVzZXJzU3R5bGUuc2VwYXJhdG9yQ29sb3IsXG4gICAgICBzZWFyY2hJY29uVGludDogdGhpcy51c2Vyc1N0eWxlLnNlYXJjaEljb25UaW50LFxuICAgICAgc2VhcmNoQm9yZGVyOiB0aGlzLnVzZXJzU3R5bGUuc2VhcmNoQm9yZGVyLFxuICAgICAgc2VhcmNoQm9yZGVyUmFkaXVzOiB0aGlzLnVzZXJzU3R5bGUuc2VhcmNoQm9yZGVyUmFkaXVzLFxuICAgICAgc2VhcmNoQmFja2dyb3VuZDogdGhpcy51c2Vyc1N0eWxlLnNlYXJjaEJhY2tncm91bmQsXG4gICAgICBzZWFyY2hQbGFjZWhvbGRlclRleHRGb250OiB0aGlzLnVzZXJzU3R5bGUuc2VhcmNoUGxhY2Vob2xkZXJUZXh0Rm9udCxcbiAgICAgIHNlYXJjaFBsYWNlaG9sZGVyVGV4dENvbG9yOiB0aGlzLnVzZXJzU3R5bGUuc2VhcmNoUGxhY2Vob2xkZXJUZXh0Q29sb3IsXG4gICAgICBzZWFyY2hUZXh0Rm9udDogdGhpcy51c2Vyc1N0eWxlLnNlYXJjaFRleHRGb250LFxuICAgICAgc2VhcmNoVGV4dENvbG9yOiB0aGlzLnVzZXJzU3R5bGUuc2VhcmNoVGV4dENvbG9yLFxuICAgICAgc2VjdGlvbkhlYWRlclRleHRDb2xvcjogdGhpcy51c2Vyc1N0eWxlLnNlY3Rpb25IZWFkZXJUZXh0Q29sb3IsXG4gICAgICBzZWN0aW9uSGVhZGVyVGV4dEZvbnQ6IHRoaXMudXNlcnNTdHlsZS5zZWN0aW9uSGVhZGVyVGV4dEZvbnQsXG4gICAgfTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgc2V0TGlzdEl0ZW1TdHlsZSgpIHtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOiBMaXN0SXRlbVN0eWxlID0gbmV3IExpc3RJdGVtU3R5bGUoe1xuICAgICAgaGVpZ2h0OiBcIjQ1cHhcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgYWN0aXZlQmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKSxcbiAgICAgIGJvcmRlclJhZGl1czogXCIwXCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS50aXRsZTIpLFxuICAgICAgdGl0bGVDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKSxcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICBzZXBhcmF0b3JDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQyMDAoKSxcbiAgICAgIGhvdmVyQmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ1MCgpLFxuICAgIH0pO1xuICAgIHRoaXMubGlzdEl0ZW1TdHlsZSA9IHsgLi4uZGVmYXVsdFN0eWxlLCAuLi50aGlzLmxpc3RJdGVtU3R5bGUgfTtcbiAgfVxuICBzZXRBdmF0YXJTdHlsZSgpIHtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOiBBdmF0YXJTdHlsZSA9IG5ldyBBdmF0YXJTdHlsZSh7XG4gICAgICBib3JkZXJSYWRpdXM6IFwiMjRweFwiLFxuICAgICAgd2lkdGg6IFwiMjhweFwiLFxuICAgICAgaGVpZ2h0OiBcIjI4cHhcIixcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICBuYW1lVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMCgpLFxuICAgICAgYmFja2dyb3VuZFNpemU6IFwiY292ZXJcIixcbiAgICAgIG5hbWVUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG5cbiAgICAgIG91dGVyVmlld0JvcmRlclNwYWNpbmc6IFwiXCIsXG4gICAgfSk7XG4gICAgdGhpcy5hdmF0YXJTdHlsZSA9IHsgLi4uZGVmYXVsdFN0eWxlLCAuLi50aGlzLmF2YXRhclN0eWxlIH07XG4gIH1cblxuICBzZXRTdGF0dXNTdHlsZSgpIHtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOiBCYXNlU3R5bGUgPSB7XG4gICAgICBoZWlnaHQ6IFwiMTJweFwiLFxuICAgICAgd2lkdGg6IFwiMTJweFwiLFxuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIGJvcmRlclJhZGl1czogXCIyNHB4XCIsXG4gICAgfTtcbiAgICB0aGlzLnN0YXR1c0luZGljYXRvclN0eWxlID0ge1xuICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICAgICAgLi4udGhpcy5zdGF0dXNJbmRpY2F0b3JTdHlsZSxcbiAgICB9O1xuICB9XG4gIHNldFVzZXJzU3R5bGUoKSB7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTogVXNlcnNTdHlsZSA9IG5ldyBVc2Vyc1N0eWxlKHtcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ1MCgpfWAsXG4gICAgICB0aXRsZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUxKSxcbiAgICAgIHRpdGxlVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgZW1wdHlTdGF0ZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUxKSxcbiAgICAgIGVtcHR5U3RhdGVUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBlcnJvclN0YXRlVGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS50aXRsZTEpLFxuICAgICAgZXJyb3JTdGF0ZVRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGxvYWRpbmdJY29uVGludDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIHNlcGFyYXRvckNvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDQwMCgpLFxuICAgICAgb25saW5lU3RhdHVzQ29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0U3VjY2VzcygpLFxuICAgICAgc2VjdGlvbkhlYWRlclRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIHNlY3Rpb25IZWFkZXJUZXh0Rm9udDogZm9udEhlbHBlcihcbiAgICAgICAgdGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTJcbiAgICAgICksXG4gICAgICBzZWFyY2hJY29uVGludDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIHNlYXJjaFBsYWNlaG9sZGVyVGV4dENvbG9yOlxuICAgICAgICB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgc2VhcmNoQmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKSxcbiAgICAgIHNlYXJjaFBsYWNlaG9sZGVyVGV4dEZvbnQ6IGZvbnRIZWxwZXIoXG4gICAgICAgIHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGV4dDNcbiAgICAgICksXG4gICAgICBzZWFyY2hUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBzZWFyY2hUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRleHQzKSxcbiAgICB9KTtcbiAgICB0aGlzLnVzZXJzU3R5bGUgPSB7IC4uLmRlZmF1bHRTdHlsZSwgLi4udGhpcy51c2Vyc1N0eWxlIH07XG4gICAgdGhpcy5jaGVja2JveFN0eWxlID0ge1xuICAgICAgaGVpZ2h0OiBcIjI0cHhcIixcbiAgICAgIHdpZHRoOiBcIjI0cHhcIixcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICBib3JkZXJSYWRpdXM6IFwiNHB4XCIsXG4gICAgICBjaGVja2VkQmFja2dyb3VuZENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKSxcbiAgICAgIHVuY2hlY2tlZEJhY2tncm91bmRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ0MDAoKVxuICAgIH1cbiAgfVxuXG4gIHNldFNlbGVjdGVkVXNlclN0eWxlKCkge1xuICAgIGxldCBkZWZhdWx0U3R5bGU6IFNlbGVjdGVkVXNlclByZXZpZXdTdHlsZSA9IG5ldyBTZWxlY3RlZFVzZXJQcmV2aWV3U3R5bGUoe1xuICAgICAgYm9yZGVyUmFkaXVzOiBcIjEwMDBweFwiLFxuICAgICAgd2lkdGg6IFwiMTQwcHhcIixcbiAgICAgIGhlaWdodDogXCJmaXQtY29udGVudFwiLFxuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ1MCgpfWAsXG4gICAgICB0ZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KCksXG4gICAgICB0ZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5Lm5hbWUpLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBjbG9zZUljb25UaW50OiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKSxcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkVXNlclByZXZpZXdTdHlsZSA9IHsgLi4uZGVmYXVsdFN0eWxlLCAuLi50aGlzLnNlbGVjdGVkVXNlclByZXZpZXdTdHlsZSB9O1xuICAgIHRoaXMucmVtb3ZlTWVtYmVyQnV0dG9uU3R5bGUuYnV0dG9uSWNvblRpbnQgPSB0aGlzLnNlbGVjdGVkVXNlclByZXZpZXdTdHlsZS5jbG9zZUljb25UaW50IHx8IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCkhO1xuICAgIHRoaXMuc2VsZWN0ZWRVc2VyUGlsbFN0eWxlID0ge1xuICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLnNlbGVjdGVkVXNlclByZXZpZXdTdHlsZS5ib3JkZXJSYWRpdXMgfHwgIFwiMTAwMHB4XCIsXG4gICAgICB3aWR0aDogdGhpcy5zZWxlY3RlZFVzZXJQcmV2aWV3U3R5bGUud2lkdGggfHwgXCIxNDBweFwiLFxuICAgICAgaGVpZ2h0OiB0aGlzLnNlbGVjdGVkVXNlclByZXZpZXdTdHlsZS5oZWlnaHQgfHwgXCJmaXQtY29udGVudFwiLFxuICAgICAgYm9yZGVyOiB0aGlzLnNlbGVjdGVkVXNlclByZXZpZXdTdHlsZS5ib3JkZXIgfHwgYG5vbmVgLFxuICAgICAgY29sb3I6IHRoaXMuc2VsZWN0ZWRVc2VyUHJldmlld1N0eWxlLnRleHRDb2xvciB8fCB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgZm9udDogdGhpcy5zZWxlY3RlZFVzZXJQcmV2aWV3U3R5bGUudGV4dEZvbnQgfHwgZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5Lm5hbWUpLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy5zZWxlY3RlZFVzZXJQcmV2aWV3U3R5bGUuYmFja2dyb3VuZCB8fCB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFVzZXJzUHJldmlld1dyYXBwZXIgPSB7XG4gICAgICBib3JkZXJUb3A6YDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MTAwKCl9YCxcbiAgICAgIGJvcmRlckJvdHRvbTpgbm9uZWAsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLnVzZXJzU3R5bGUuYmFja2dyb3VuZCB8fCBcInRyYW5zcGFyZW50XCJcbiAgICB9XG4gIH1cblxuICB1c2VyU3R5bGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogdGhpcy51c2Vyc1N0eWxlLmhlaWdodCxcbiAgICAgIHdpZHRoOiB0aGlzLnVzZXJzU3R5bGUud2lkdGgsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLnVzZXJzU3R5bGUuYmFja2dyb3VuZCxcbiAgICAgIGJvcmRlcjogdGhpcy51c2Vyc1N0eWxlLmJvcmRlcixcbiAgICAgIGJvcmRlclJhZGl1czogdGhpcy51c2Vyc1N0eWxlLmJvcmRlclJhZGl1cyxcbiAgICB9O1xuICB9O1xufVxuIiwiPGRpdiBjbGFzcz1cImNjLXVzZXJzXCIgW25nU3R5bGVdPVwidXNlclN0eWxlKClcIiAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiIChrZXl1cCk9XCJvbktleVVwKCRldmVudClcIiB0YWJpbmRleD1cIjBcIj5cbiAgPGRpdiBjbGFzcz1cImNjLW1lbnVzXCIgKm5nSWY9XCJtZW51XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lbnVcIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBVc2VycyBMaXN0IC0tPlxuICA8ZGl2IGNsYXNzPVwiY2MtdXNlcnNfX2xpc3RcIiBbY2xhc3MuY2MtdXNlcnNfX2xpc3QtLXdpdGgtc2VsZWN0aW9uXT1cImdldFNlbGVjdGVkVXNlcnNDb3VudCgpID4gMFwiPlxuICAgIDxjb21ldGNoYXQtbGlzdCBbbGlzdEl0ZW1WaWV3XT1cImxpc3RJdGVtVmlldyA/IGxpc3RJdGVtVmlldyA6IGxpc3RJdGVtXCIgW29uU2Nyb2xsZWRUb0JvdHRvbV09XCJvblNjcm9sbGVkVG9Cb3R0b21cIiBbb25TZWFyY2hdPVwib25TZWFyY2hcIlxuICAgICAgICBbbGlzdF09XCJ1c2Vyc0xpc3RcIiBbc2VhcmNoVGV4dF09XCJzZWFyY2hLZXl3b3JkXCIgW3NlYXJjaFBsYWNlaG9sZGVyVGV4dF09XCJzZWFyY2hQbGFjZWhvbGRlclwiXG4gICAgICAgIFtzZWFyY2hJY29uVVJMXT1cInNlYXJjaEljb25VUkxcIiBbaGlkZVNlYXJjaF09XCJoaWRlU2VhcmNoXCIgW2hpZGVFcnJvcl09XCJoaWRlRXJyb3JcIiBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgICBbc2VjdGlvbkhlYWRlckZpZWxkXT1cInNlY3Rpb25IZWFkZXJGaWVsZFwiIFtzaG93U2VjdGlvbkhlYWRlcl09XCJzaG93U2VjdGlvbkhlYWRlclwiXG4gICAgICAgIFtlbXB0eVN0YXRlVGV4dF09XCJlbXB0eVN0YXRlVGV4dFwiIFtsb2FkaW5nSWNvblVSTF09XCJsb2FkaW5nSWNvblVSTFwiXG4gICAgICAgIFt0aXRsZUFsaWdubWVudF09XCJ0aXRsZUFsaWdubWVudFwiIFtsb2FkaW5nU3RhdGVWaWV3XT1cImxvYWRpbmdTdGF0ZVZpZXdcIiBbZW1wdHlTdGF0ZVZpZXddPVwiZW1wdHlTdGF0ZVZpZXdcIlxuICAgICAgICBbZXJyb3JTdGF0ZVRleHRdPVwiZXJyb3JTdGF0ZVRleHRcIiBbZXJyb3JTdGF0ZVZpZXddPVwiZXJyb3JTdGF0ZVZpZXdcIiBbbGlzdFN0eWxlXT1cImxpc3RTdHlsZVwiIFtzdGF0ZV09XCJzdGF0ZVwiPlxuICAgIDwvY29tZXRjaGF0LWxpc3Q+XG4gIDwvZGl2PlxuXG4gIDwhLS0gU2VsZWN0ZWQgVXNlcnMgUHJldmlldyBTZWN0aW9uIC0tPlxuICA8ZGl2IGNsYXNzPVwiY2Mtc2VsZWN0ZWQtdXNlcnNcIiBbc3R5bGVdPVwic2VsZWN0ZWRVc2Vyc1ByZXZpZXdXcmFwcGVyXCIgKm5nSWY9XCJzaG93U2VsZWN0ZWRVc2Vyc1ByZXZpZXcgJiYgZ2V0U2VsZWN0ZWRVc2Vyc0NvdW50KCkgPiAwXCI+XG4gICAgPGRpdiBjbGFzcz1cImNjLXNlbGVjdGVkLXVzZXJzX19saXN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2Mtc2VsZWN0ZWQtdXNlclwiICpuZ0Zvcj1cImxldCB1c2VyIG9mIGdldFNlbGVjdGVkVXNlcnNBcnJheSgpOyB0cmFja0J5OiB0cmFja0J5VXNlcklkXCIgW3N0eWxlXT1cInNlbGVjdGVkVXNlclBpbGxTdHlsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2Mtc2VsZWN0ZWQtdXNlcl9fYXZhdGFyXCI+XG4gICAgICAgICAgPGNvbWV0Y2hhdC1hdmF0YXIgXG4gICAgICAgICAgICBbaW1hZ2VdPVwidXNlcj8uZ2V0QXZhdGFyKCkgfHwgJydcIiBcbiAgICAgICAgICAgIFtuYW1lXT1cInVzZXI/LmdldE5hbWUoKVwiIFxuICAgICAgICAgICAgW2F2YXRhclN0eWxlXT1cImF2YXRhclN0eWxlXCI+XG4gICAgICAgICAgPC9jb21ldGNoYXQtYXZhdGFyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNjLXNlbGVjdGVkLXVzZXJfX25hbWVcIiBbc3R5bGVdPVwiZ2V0VXNlck5hbWVTdHlsZSgpXCI+e3t1c2VyPy5nZXROYW1lKCl9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2Mtc2VsZWN0ZWQtdXNlcl9fcmVtb3ZlXCIgKGNsaWNrKT1cInJlbW92ZVNlbGVjdGVkVXNlcih1c2VyKVwiPlxuICAgICAgICAgIDxjb21ldGNoYXQtYnV0dG9uIFxuICAgICAgICAgICAgW2ljb25VUkxdPVwiJ2Fzc2V0cy9jbG9zZTJ4LnN2ZydcIiBcbiAgICAgICAgICAgIFtidXR0b25TdHlsZV09XCJyZW1vdmVNZW1iZXJCdXR0b25TdHlsZVwiPlxuICAgICAgICAgIDwvY29tZXRjaGF0LWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbGlzdEl0ZW0gbGV0LXVzZXI+XG4gICAgICA8Y29tZXRjaGF0LWxpc3QtaXRlbSBbdGl0bGVdPVwidXNlcj8ubmFtZVwiIFthdmF0YXJVUkxdPVwidXNlcj8uYXZhdGFyXCIgW2F2YXRhck5hbWVdPVwidXNlcj8ubmFtZVwiXG4gICAgICAgICAgW2xpc3RJdGVtU3R5bGVdPVwibGlzdEl0ZW1TdHlsZVwiIFthdmF0YXJTdHlsZV09XCJhdmF0YXJTdHlsZVwiIFtzdGF0dXNJbmRpY2F0b3JTdHlsZV09XCJnZXRTdGF0dXNJbmRpY2F0b3JTdHlsZSh1c2VyKVwiXG4gICAgICAgICAgW3N0YXR1c0luZGljYXRvckNvbG9yXT1cImdldFN0YXR1c0luZGljYXRvckNvbG9yKHVzZXIpXCIgW2hpZGVTZXBhcmF0b3JdPVwiaGlkZVNlcGFyYXRvclwiIChjYy1saXN0aXRlbS1jbGlja2VkKT1cIm9uQ2xpY2sodXNlcilcIiBbaXNBY3RpdmVdPVwiZ2V0QWN0aXZlVXNlcih1c2VyKVwiXG4gICAgICAgICAgW3VzZXJQcmVzZW5jZVBsYWNlbWVudF09XCJ1c2VyUHJlc2VuY2VQbGFjZW1lbnRcIj5cbiAgICAgICAgICA8ZGl2IHNsb3Q9XCJzdWJ0aXRsZVZpZXdcIiAqbmdJZj1cInN1YnRpdGxlVmlld1wiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICAqbmdUZW1wbGF0ZU91dGxldD1cInN1YnRpdGxlVmlldztjb250ZXh0OnsgJGltcGxpY2l0OiB1c2VyIH1cIj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IHNsb3Q9XCJtZW51Vmlld1wiIGNsYXNzPVwiY2MtdXNlcnNfX29wdGlvbnNcIiAqbmdJZj1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGNvbWV0Y2hhdC1tZW51LWxpc3QgW2RhdGFdPVwib3B0aW9ucyh1c2VyKVwiPlxuXG4gICAgICAgICAgICAgIDwvY29tZXRjaGF0LW1lbnUtbGlzdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgc2xvdD1cInRhaWxWaWV3XCIgICpuZ0lmPVwic2VsZWN0aW9uTW9kZSAhPSBzZWxlY3Rpb25tb2RlRW51bS5ub25lXCIgY2xhc3M9XCJjYy11c2Vyc19fdGFpbC12aWV3XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhaWxWaWV3XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGFpbFZpZXc+XG4gICAgICAgIDxkaXYgICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PSBzZWxlY3Rpb25tb2RlRW51bS5zaW5nbGVcIiBjbGFzcz1cImNjLXVzZXJzX19zZWxlY3Rpb24tLXNpbmdsZVwiPlxuICAgICAgICAgIDxjb21ldGNoYXQtcmFkaW8tYnV0dG9uIFthdHRyLmRhdGEtdWlkXT1cInVzZXI/LnVpZFwiICNyYWRpb0VsZW1lbnQgKGNjLXJhZGlvLWJ1dHRvbi1jaGFuZ2VkKT1cImFkZE1lbWJlcnNUb0xpc3QodXNlciwkZXZlbnQpXCIgW2NoZWNrZWRdPVwiaXNVc2VyU2VsZWN0ZWQodXNlcilcIiA+PC9jb21ldGNoYXQtcmFkaW8tYnV0dG9uPlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gc2VsZWN0aW9ubW9kZUVudW0ubXVsdGlwbGVcIiBjbGFzcz1cImNjLXVzZXJzX19zZWxlY3Rpb24tLW11bHRpcGxlXCI+XG4gICAgICAgICAgPGNvbWV0Y2hhdC1jaGVja2JveCBcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdWlkXT1cInVzZXI/LnVpZFwiIFxuICAgICAgICAgICAgI2NoZWNrYm94RWxlbWVudCBcbiAgICAgICAgICAgIFtjaGVja2JveFN0eWxlXT1cImNoZWNrYm94U3R5bGVcIiAgXG4gICAgICAgICAgICAoY2MtY2hlY2tib3gtY2hhbmdlZCk9XCJvbkNoZWNrYm94Q2hhbmdlZCh1c2VyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNoZWNrYm94Q2xpY2sodXNlciwgJGV2ZW50KVwiIFxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNVc2VyU2VsZWN0ZWQodXNlcilcIj5cbiAgICAgICAgICA8L2NvbWV0Y2hhdC1jaGVja2JveD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9jb21ldGNoYXQtbGlzdC1pdGVtPlxuXG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==