@cometchat/chat-uikit-angular 4.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.
- package/Calls/CallingExtension.d.ts +5 -0
- package/Calls/CallingExtensionDecorator.d.ts +17 -0
- package/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.d.ts +75 -0
- package/Calls/CometChatCallButtons/cometchat-call-buttons.module.d.ts +11 -0
- package/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.d.ts +80 -0
- package/Calls/CometChatIncomingCall/cometchat-incoming-call.module.d.ts +11 -0
- package/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.d.ts +26 -0
- package/Calls/CometChatOngoingCall/cometchat-ongoing-call.module.d.ts +9 -0
- package/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.d.ts +58 -0
- package/Calls/CometChatOutgoingCall/cometchat-outgoing-call.module.d.ts +10 -0
- package/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.d.ts +109 -0
- package/CometChatAddMembers/cometchat-add-members.module.d.ts +12 -0
- package/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.d.ts +140 -0
- package/CometChatBannedMembers/cometchat-banned-members.module.d.ts +13 -0
- package/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +335 -0
- package/CometChatConversations/cometchat-conversations.module.d.ts +10 -0
- package/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.d.ts +86 -0
- package/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.d.ts +12 -0
- package/CometChatDetails/cometchat-details/cometchat-details.component.d.ts +149 -0
- package/CometChatDetails/cometchat-details.module.d.ts +12 -0
- package/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.d.ts +145 -0
- package/CometChatGroupMembers/cometchat-group-members.module.d.ts +13 -0
- package/CometChatGroups/cometchat-groups/cometchat-groups.component.d.ts +136 -0
- package/CometChatGroups/cometchat-groups.module.d.ts +10 -0
- package/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.d.ts +100 -0
- package/CometChatGroupsWithMessages/cometchat-groups-with-messages.module.d.ts +13 -0
- package/CometChatList/cometchat-list.component.d.ts +87 -0
- package/CometChatList/cometchat-list.module.d.ts +10 -0
- package/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.d.ts +62 -0
- package/CometChatMessageBubble/cometchat-message-bubble.module.d.ts +8 -0
- package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +165 -0
- package/CometChatMessageComposer/cometchat-message-composer.module.d.ts +9 -0
- package/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.d.ts +85 -0
- package/CometChatMessageHeader/cometchat-message-header.module.d.ts +9 -0
- package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +510 -0
- package/CometChatMessageList/cometchat-message-list.module.d.ts +11 -0
- package/CometChatMessages/cometchat-messages/cometchat-messages.component.d.ts +136 -0
- package/CometChatMessages/cometchat-messages.module.d.ts +15 -0
- package/CometChatTheme.service.d.ts +7 -0
- package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +73 -0
- package/CometChatThreadedMessages/cometchat-threaded-messages.module.d.ts +12 -0
- package/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.d.ts +88 -0
- package/CometChatTransferOwnership/cometchat-transfer-ownership.module.d.ts +10 -0
- package/CometChatUsers/cometchat-users/cometchat-users.component.d.ts +105 -0
- package/CometChatUsers/cometchat-users.module.d.ts +11 -0
- package/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.d.ts +71 -0
- package/CometChatUsersWithMessages/cometchat-users-with-messages.module.d.ts +12 -0
- package/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.d.ts +9 -0
- package/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.d.ts +17 -0
- package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.d.ts +9 -0
- package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.d.ts +17 -0
- package/Extensions/ImageModeration/ImageModerationExtension.d.ts +5 -0
- package/Extensions/ImageModeration/ImageModerationExtensionDecorator.d.ts +6 -0
- package/Extensions/LinkPreviewExtension/LinkPreviewExtension.d.ts +5 -0
- package/Extensions/LinkPreviewExtension/LinkPreviewExtensionDecorator.d.ts +6 -0
- package/Extensions/MessageTranslation/MessageTranslationExtension.d.ts +9 -0
- package/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.d.ts +12 -0
- package/Extensions/PollsExtension/PollsExtension.d.ts +5 -0
- package/Extensions/PollsExtension/PollsExtensionDecorator.d.ts +15 -0
- package/Extensions/Reactions/ReactionExtension.d.ts +5 -0
- package/Extensions/Reactions/ReactionExtensionDecorator.d.ts +10 -0
- package/Extensions/SmartReplies/SmartRepliesExtension.d.ts +9 -0
- package/Extensions/SmartReplies/SmartRepliesExtensionDecorator.d.ts +16 -0
- package/Extensions/Stickers/StickersExtension.d.ts +9 -0
- package/Extensions/Stickers/StickersExtensionDecorator.d.ts +27 -0
- package/Extensions/TextModerator/TextModeratorExtension.d.ts +5 -0
- package/Extensions/TextModerator/TextModeratorExtensionDecorator.d.ts +9 -0
- package/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.d.ts +5 -0
- package/Extensions/ThumbnailGeneration/ThumbnailGenerationExtensionDecorator.d.ts +6 -0
- package/README.md +60 -0
- package/Shared/CometChatUIkit/CometChatUIKit.d.ts +18 -0
- package/Shared/Framework/ChatConfigurator.d.ts +8 -0
- package/Shared/Framework/DataSource.d.ts +29 -0
- package/Shared/Framework/DataSourceDecorator.d.ts +32 -0
- package/Shared/Framework/ExtensionDataSource.d.ts +3 -0
- package/Shared/Utils/MessageUtils.d.ts +43 -0
- package/assets/.gitkeep +0 -0
- package/assets/Audio-Call.svg +11 -0
- package/assets/Audio-Call2x.svg +11 -0
- package/assets/Copy.svg +17 -0
- package/assets/Grid-layout.svg +1 -0
- package/assets/Heart.svg +11 -0
- package/assets/Imagemoderation.svg +14 -0
- package/assets/Info.svg +13 -0
- package/assets/Locked.svg +10 -0
- package/assets/More@2x.svg +9 -0
- package/assets/Plus.svg +13 -0
- package/assets/Private.svg +10 -0
- package/assets/Reactionsicon.svg +9 -0
- package/assets/Send.svg +12 -0
- package/assets/Spinner.svg +15 -0
- package/assets/Stickers.svg +16 -0
- package/assets/Stipop.svg +9 -0
- package/assets/Video-call.svg +12 -0
- package/assets/Video-call2x.svg +12 -0
- package/assets/activity.svg +22 -0
- package/assets/addreaction.svg +9 -0
- package/assets/animals.svg +15 -0
- package/assets/attachment-file.svg +14 -0
- package/assets/audio-file.svg +12 -0
- package/assets/back.png +0 -0
- package/assets/backbutton.svg +12 -0
- package/assets/call.svg +1 -0
- package/assets/chats.svg +1 -0
- package/assets/checkmark.svg +11 -0
- package/assets/close.svg +12 -0
- package/assets/close2x.svg +12 -0
- package/assets/collaborativedocument.svg +13 -0
- package/assets/collaborativewhiteboard.svg +12 -0
- package/assets/create-button.svg +12 -0
- package/assets/declaration.d.ts +3 -0
- package/assets/delete.svg +7 -0
- package/assets/deleteicon.svg +15 -0
- package/assets/down-arrow.svg +1 -0
- package/assets/download.svg +13 -0
- package/assets/editicon.svg +14 -0
- package/assets/emoji.svg +2693 -0
- package/assets/file-upload.svg +2693 -0
- package/assets/flags.svg +12 -0
- package/assets/food.svg +26 -0
- package/assets/group.svg +40 -0
- package/assets/heart-reaction.png +0 -0
- package/assets/heart.png +0 -0
- package/assets/image.svg +2693 -0
- package/assets/incomingcall.wav +0 -0
- package/assets/increase-size.svg +6 -0
- package/assets/location.svg +2693 -0
- package/assets/message-delivered.png +0 -0
- package/assets/message-delivered.svg +4 -0
- package/assets/message-read.png +0 -0
- package/assets/message-read.svg +4 -0
- package/assets/message-sent.png +0 -0
- package/assets/message-sent.svg +3 -0
- package/assets/moreicon.svg +9 -0
- package/assets/objects.svg +13 -0
- package/assets/open-thread.svg +11 -0
- package/assets/password-protected-group.svg +3 -0
- package/assets/photolibrary.svg +11 -0
- package/assets/placeholder.png +0 -0
- package/assets/plus-rotated.svg +13 -0
- package/assets/polls.svg +14 -0
- package/assets/privacy.svg +4 -0
- package/assets/private-group.svg +9 -0
- package/assets/public.svg +3 -0
- package/assets/reduce-size.svg +6 -0
- package/assets/right-arrow.svg +6 -0
- package/assets/search.png +0 -0
- package/assets/search.svg +4 -0
- package/assets/side-arrow.svg +1 -0
- package/assets/smileys.svg +16 -0
- package/assets/start-chat.svg +1 -0
- package/assets/symbols.svg +16 -0
- package/assets/thread-arrow.svg +1 -0
- package/assets/thread-icon.svg +38 -0
- package/assets/threadicon.svg +14 -0
- package/assets/translation.svg +16 -0
- package/assets/travel.svg +18 -0
- package/assets/unsafe-content.svg +23 -0
- package/assets/user.svg +31 -0
- package/assets/video-upload.svg +2693 -0
- package/assets/video.svg +12 -0
- package/assets/wait.png +0 -0
- package/assets/wait.svg +4 -0
- package/assets/warning-small.png +0 -0
- package/assets/warning-small.svg +5 -0
- package/cometchat-chat-uikit-angular.d.ts +5 -0
- package/esm2020/Calls/CallingExtension.mjs +11 -0
- package/esm2020/Calls/CallingExtensionDecorator.mjs +114 -0
- package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.mjs +358 -0
- package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons.module.mjs +32 -0
- package/esm2020/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.mjs +423 -0
- package/esm2020/Calls/CometChatIncomingCall/cometchat-incoming-call.module.mjs +32 -0
- package/esm2020/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.mjs +54 -0
- package/esm2020/Calls/CometChatOngoingCall/cometchat-ongoing-call.module.mjs +27 -0
- package/esm2020/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.mjs +196 -0
- package/esm2020/Calls/CometChatOutgoingCall/cometchat-outgoing-call.module.mjs +28 -0
- package/esm2020/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.mjs +353 -0
- package/esm2020/CometChatAddMembers/cometchat-add-members.module.mjs +23 -0
- package/esm2020/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.mjs +446 -0
- package/esm2020/CometChatBannedMembers/cometchat-banned-members.module.mjs +24 -0
- package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +1400 -0
- package/esm2020/CometChatConversations/cometchat-conversations.module.mjs +28 -0
- package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +272 -0
- package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.mjs +39 -0
- package/esm2020/CometChatDetails/cometchat-details/cometchat-details.component.mjs +696 -0
- package/esm2020/CometChatDetails/cometchat-details.module.mjs +27 -0
- package/esm2020/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.mjs +676 -0
- package/esm2020/CometChatGroupMembers/cometchat-group-members.module.mjs +24 -0
- package/esm2020/CometChatGroups/cometchat-groups/cometchat-groups.component.mjs +564 -0
- package/esm2020/CometChatGroups/cometchat-groups.module.mjs +28 -0
- package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.mjs +430 -0
- package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages.module.mjs +43 -0
- package/esm2020/CometChatList/cometchat-list.component.mjs +210 -0
- package/esm2020/CometChatList/cometchat-list.module.mjs +28 -0
- package/esm2020/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.mjs +157 -0
- package/esm2020/CometChatMessageBubble/cometchat-message-bubble.module.mjs +23 -0
- package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +930 -0
- package/esm2020/CometChatMessageComposer/cometchat-message-composer.module.mjs +24 -0
- package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +420 -0
- package/esm2020/CometChatMessageHeader/cometchat-message-header.module.mjs +26 -0
- package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +2598 -0
- package/esm2020/CometChatMessageList/cometchat-message-list.module.mjs +34 -0
- package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +393 -0
- package/esm2020/CometChatMessages/cometchat-messages.module.mjs +48 -0
- package/esm2020/CometChatTheme.service.mjs +17 -0
- package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +304 -0
- package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages.module.mjs +36 -0
- package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.mjs +337 -0
- package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership.module.mjs +21 -0
- package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +447 -0
- package/esm2020/CometChatUsers/cometchat-users.module.mjs +32 -0
- package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.mjs +185 -0
- package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages.module.mjs +39 -0
- package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.mjs +11 -0
- package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.mjs +89 -0
- package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.mjs +11 -0
- package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.mjs +89 -0
- package/esm2020/Extensions/ImageModeration/ImageModerationExtension.mjs +10 -0
- package/esm2020/Extensions/ImageModeration/ImageModerationExtensionDecorator.mjs +10 -0
- package/esm2020/Extensions/LinkPreviewExtension/LinkPreviewExtension.mjs +10 -0
- package/esm2020/Extensions/LinkPreviewExtension/LinkPreviewExtensionDecorator.mjs +10 -0
- package/esm2020/Extensions/MessageTranslation/MessageTranslationExtension.mjs +11 -0
- package/esm2020/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.mjs +33 -0
- package/esm2020/Extensions/PollsExtension/PollsExtension.mjs +10 -0
- package/esm2020/Extensions/PollsExtension/PollsExtensionDecorator.mjs +75 -0
- package/esm2020/Extensions/Reactions/ReactionExtension.mjs +10 -0
- package/esm2020/Extensions/Reactions/ReactionExtensionDecorator.mjs +30 -0
- package/esm2020/Extensions/SmartReplies/SmartRepliesExtension.mjs +11 -0
- package/esm2020/Extensions/SmartReplies/SmartRepliesExtensionDecorator.mjs +117 -0
- package/esm2020/Extensions/Stickers/StickersExtension.mjs +15 -0
- package/esm2020/Extensions/Stickers/StickersExtensionDecorator.mjs +118 -0
- package/esm2020/Extensions/TextModerator/TextModeratorExtension.mjs +10 -0
- package/esm2020/Extensions/TextModerator/TextModeratorExtensionDecorator.mjs +32 -0
- package/esm2020/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.mjs +10 -0
- package/esm2020/Extensions/ThumbnailGeneration/ThumbnailGenerationExtensionDecorator.mjs +10 -0
- package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +180 -0
- package/esm2020/Shared/Framework/ChatConfigurator.mjs +20 -0
- package/esm2020/Shared/Framework/DataSource.mjs +3 -0
- package/esm2020/Shared/Framework/DataSourceDecorator.mjs +80 -0
- package/esm2020/Shared/Framework/ExtensionDataSource.mjs +4 -0
- package/esm2020/Shared/Utils/MessageUtils.mjs +342 -0
- package/esm2020/cometchat-chat-uikit-angular.mjs +5 -0
- package/esm2020/public-api.mjs +93 -0
- package/fesm2015/cometchat-chat-uikit-angular.mjs +13683 -0
- package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -0
- package/fesm2020/cometchat-chat-uikit-angular.mjs +13586 -0
- package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -0
- package/package.json +51 -0
- package/public-api.d.ts +79 -0
|
@@ -0,0 +1,696 @@
|
|
|
1
|
+
import { Component, Input, ChangeDetectionStrategy, } from "@angular/core";
|
|
2
|
+
import '@cometchat/uikit-elements';
|
|
3
|
+
import { AvatarStyle, ConfirmDialogStyle, ListItemStyle, } from '@cometchat/uikit-elements';
|
|
4
|
+
import { AddMembersConfiguration, BannedMembersConfiguration, CometChatUIKitUtility, DetailsStyle, DetailsUtils, GroupMembersConfiguration, SelectionMode, TransferOwnershipConfiguration, } from "@cometchat/uikit-shared";
|
|
5
|
+
import { fontHelper, localize, CometChatGroupEvents, CometChatUIKitConstants, CometChatUserEvents } from '@cometchat/uikit-resources';
|
|
6
|
+
import { CometChat } from "@cometchat-pro/chat";
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "../../CometChatTheme.service";
|
|
9
|
+
import * as i2 from "../../CometChatAddMembers/cometchat-add-members/cometchat-add-members.component";
|
|
10
|
+
import * as i3 from "../../CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component";
|
|
11
|
+
import * as i4 from "../../CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component";
|
|
12
|
+
import * as i5 from "../../CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component";
|
|
13
|
+
import * as i6 from "@angular/common";
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* CometChatDetailsComponent renders details of user or group.
|
|
17
|
+
*
|
|
18
|
+
* @version 1.0.0
|
|
19
|
+
* @author CometChatTeam
|
|
20
|
+
* @copyright © 2022 CometChat Inc.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
export class CometChatDetailsComponent {
|
|
24
|
+
constructor(ref, themeService) {
|
|
25
|
+
this.ref = ref;
|
|
26
|
+
this.themeService = themeService;
|
|
27
|
+
this.title = localize("DETAILS");
|
|
28
|
+
this.closeButtonIconURL = "assets/close2x.svg";
|
|
29
|
+
this.hideProfile = false;
|
|
30
|
+
this.data = [];
|
|
31
|
+
this.disableUsersPresence = false;
|
|
32
|
+
this.privateGroupIcon = "assets/Private.svg";
|
|
33
|
+
this.protectedGroupIcon = "assets/Locked.svg";
|
|
34
|
+
this.onError = (error) => {
|
|
35
|
+
console.log(error);
|
|
36
|
+
};
|
|
37
|
+
this.leaveButtonText = localize("TRANSFER_OWNERSHIP");
|
|
38
|
+
this.cancelButtonText = localize("CANCEL");
|
|
39
|
+
this.confirmDialogMessage = localize("TRANSFER_CONFIRM");
|
|
40
|
+
this.addMembersConfiguration = new AddMembersConfiguration({});
|
|
41
|
+
this.bannedMembersConfiguration = new BannedMembersConfiguration({});
|
|
42
|
+
this.groupMembersConfiguration = new GroupMembersConfiguration({});
|
|
43
|
+
this.transferOwnershipConfiguration = new TransferOwnershipConfiguration({});
|
|
44
|
+
this.leaveDialogStyle = {
|
|
45
|
+
confirmButtonBackground: "RGB(51, 153, 255)",
|
|
46
|
+
cancelButtonBackground: "RGBA(20, 20, 20, 0.06)",
|
|
47
|
+
confirmButtonTextColor: "white",
|
|
48
|
+
confirmButtonTextFont: "600 15px Inter",
|
|
49
|
+
cancelButtonTextColor: "black",
|
|
50
|
+
cancelButtonTextFont: "600 15px Inter",
|
|
51
|
+
titleFont: "",
|
|
52
|
+
titleColor: "",
|
|
53
|
+
messageTextFont: "400 13px Inter",
|
|
54
|
+
messageTextColor: "RGBA(20, 20, 20, 0.58)",
|
|
55
|
+
background: "white",
|
|
56
|
+
border: "1px solid #F2F2F2",
|
|
57
|
+
height: "220px",
|
|
58
|
+
width: "360px"
|
|
59
|
+
};
|
|
60
|
+
this.backiconurl = "assets/backbutton.svg";
|
|
61
|
+
this.statusIndicatorStyle = {
|
|
62
|
+
height: "10px",
|
|
63
|
+
width: "10px",
|
|
64
|
+
borderRadius: "16px",
|
|
65
|
+
border: ""
|
|
66
|
+
};
|
|
67
|
+
this.backdropStyle = {
|
|
68
|
+
height: "100%",
|
|
69
|
+
width: "100%",
|
|
70
|
+
background: "rgba(0, 0, 0, 0.5)"
|
|
71
|
+
};
|
|
72
|
+
this.avatarStyle = {
|
|
73
|
+
borderRadius: "16px",
|
|
74
|
+
width: "28px",
|
|
75
|
+
height: "28px",
|
|
76
|
+
border: "none",
|
|
77
|
+
};
|
|
78
|
+
this.detailsStyle = {
|
|
79
|
+
width: "100%",
|
|
80
|
+
height: "100%",
|
|
81
|
+
border: "",
|
|
82
|
+
borderRadius: "",
|
|
83
|
+
padding: "0 100px"
|
|
84
|
+
};
|
|
85
|
+
this.listItemStyle = {
|
|
86
|
+
height: "100%",
|
|
87
|
+
width: "100%",
|
|
88
|
+
background: "",
|
|
89
|
+
activeBackground: "transparent",
|
|
90
|
+
borderRadius: "grey",
|
|
91
|
+
titleFont: "600 15px Inter",
|
|
92
|
+
titleColor: "black",
|
|
93
|
+
border: "",
|
|
94
|
+
hoverBackground: "transparent",
|
|
95
|
+
separatorColor: "rgb(222 222 222 / 46%)"
|
|
96
|
+
};
|
|
97
|
+
this.leaveGroupText = localize("LEAVE_GROUP");
|
|
98
|
+
this.leaveGroupMessage = localize("LEAVE_CONFIRM");
|
|
99
|
+
this.transferText = localize("TRANSFER_OWNERSHIP");
|
|
100
|
+
this.transferConfirm = localize("TRANSFER_CONFIRM");
|
|
101
|
+
this.defaultTemplate = [];
|
|
102
|
+
this.loggedInUser = null;
|
|
103
|
+
this.openViewMembersPage = false;
|
|
104
|
+
this.openBannedMembersPage = false;
|
|
105
|
+
this.openAddMembersPage = false;
|
|
106
|
+
this.confirmLeaveGroupModal = false;
|
|
107
|
+
this.openTransferOwnershipModal = false;
|
|
108
|
+
this.selectionmodeEnum = SelectionMode.multiple;
|
|
109
|
+
this.statusColor = {
|
|
110
|
+
private: "",
|
|
111
|
+
password: "#F7A500",
|
|
112
|
+
public: ""
|
|
113
|
+
};
|
|
114
|
+
this.closeButtonStyle = {
|
|
115
|
+
height: "24px",
|
|
116
|
+
width: "24px",
|
|
117
|
+
border: "none",
|
|
118
|
+
borderRadius: "0",
|
|
119
|
+
background: "transparent",
|
|
120
|
+
buttonIconTint: this.detailsStyle.closeButtonIconTint || this.themeService.theme.palette.getPrimary()
|
|
121
|
+
};
|
|
122
|
+
this.buttonStyle = {
|
|
123
|
+
height: "100%",
|
|
124
|
+
width: "100%",
|
|
125
|
+
border: "none",
|
|
126
|
+
borderRadius: "0",
|
|
127
|
+
background: "transparent",
|
|
128
|
+
buttonTextColor: this.themeService.theme.palette.getPrimary() || "rgba(51, 153, 255)",
|
|
129
|
+
buttonTextFont: "500 16px Inter"
|
|
130
|
+
};
|
|
131
|
+
this.dividerStyle = {
|
|
132
|
+
background: "rgb(222 222 222 / 46%)",
|
|
133
|
+
height: "1px",
|
|
134
|
+
width: "100%"
|
|
135
|
+
};
|
|
136
|
+
this.subtitleText = "";
|
|
137
|
+
this.userListenerId = "userlist_" + new Date().getTime();
|
|
138
|
+
this.checkStatusType = () => {
|
|
139
|
+
return this.user && !this.disableUsersPresence ? this.statusColor[this.user?.getStatus()] : this.statusColor[this.group?.getType()];
|
|
140
|
+
};
|
|
141
|
+
this.onCloseClick = () => {
|
|
142
|
+
if (this.onClose) {
|
|
143
|
+
this.onClose();
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
this.viewMembers = () => {
|
|
147
|
+
this.openViewMembersPage = !this.openViewMembersPage;
|
|
148
|
+
this.openBannedMembersPage = false;
|
|
149
|
+
this.openAddMembersPage = false;
|
|
150
|
+
};
|
|
151
|
+
this.addMembers = () => {
|
|
152
|
+
this.openAddMembersPage = !this.openAddMembersPage;
|
|
153
|
+
this.openBannedMembersPage = false;
|
|
154
|
+
this.openViewMembersPage = false;
|
|
155
|
+
};
|
|
156
|
+
this.bannedMembers = () => {
|
|
157
|
+
this.openAddMembersPage = false;
|
|
158
|
+
this.openViewMembersPage = false;
|
|
159
|
+
this.openBannedMembersPage = !this.openBannedMembersPage;
|
|
160
|
+
};
|
|
161
|
+
this.openTransferOwnership = () => {
|
|
162
|
+
this.openTransferOwnershipModal = !this.openTransferOwnershipModal;
|
|
163
|
+
this.confirmLeaveGroupModal = false;
|
|
164
|
+
};
|
|
165
|
+
this.subtitleStyle = () => {
|
|
166
|
+
if (this.user && this.user.getStatus() == CometChatUIKitConstants.userStatusType.online) {
|
|
167
|
+
return {
|
|
168
|
+
textFont: this.detailsStyle.subtitleTextFont,
|
|
169
|
+
textColor: this.themeService.theme.palette.getPrimary()
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
return {
|
|
174
|
+
textFont: this.detailsStyle.subtitleTextFont,
|
|
175
|
+
textColor: this.detailsStyle.subtitleTextColor
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* @param {CometChat.Group} group
|
|
181
|
+
*/
|
|
182
|
+
this.getGroupIcon = (group) => {
|
|
183
|
+
let status;
|
|
184
|
+
if (group) {
|
|
185
|
+
switch (group.getType()) {
|
|
186
|
+
case CometChatUIKitConstants.GroupTypes.password:
|
|
187
|
+
status = this.protectedGroupIcon;
|
|
188
|
+
break;
|
|
189
|
+
case CometChatUIKitConstants.GroupTypes.private:
|
|
190
|
+
status = this.privateGroupIcon;
|
|
191
|
+
break;
|
|
192
|
+
default:
|
|
193
|
+
status = null;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return status;
|
|
198
|
+
};
|
|
199
|
+
this.getTemplateOptions = (template) => {
|
|
200
|
+
if (template.options) {
|
|
201
|
+
return template.options(this.user, this.group, template.id);
|
|
202
|
+
}
|
|
203
|
+
else
|
|
204
|
+
return [];
|
|
205
|
+
};
|
|
206
|
+
this.wrapperStyle = () => {
|
|
207
|
+
return {
|
|
208
|
+
width: this.detailsStyle.width,
|
|
209
|
+
height: this.detailsStyle.height,
|
|
210
|
+
border: this.detailsStyle.border,
|
|
211
|
+
borderRadius: this.detailsStyle.borderRadius,
|
|
212
|
+
background: this.detailsStyle.background,
|
|
213
|
+
};
|
|
214
|
+
};
|
|
215
|
+
this.marginStyle = () => {
|
|
216
|
+
return {
|
|
217
|
+
padding: this.detailsStyle?.padding
|
|
218
|
+
};
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
//
|
|
222
|
+
getTitleStyle() {
|
|
223
|
+
return {
|
|
224
|
+
textFont: this.detailsStyle.titleTextFont || fontHelper(this.themeService.theme.typography.title1),
|
|
225
|
+
textColor: this.detailsStyle.titleTextColor || this.themeService.theme.palette.getAccent()
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
getCustomOptionView(option) {
|
|
229
|
+
return option?.customView;
|
|
230
|
+
}
|
|
231
|
+
ngOnChanges(changes) {
|
|
232
|
+
if (changes["user"] || changes["group"]) {
|
|
233
|
+
if (this.loggedInUser) {
|
|
234
|
+
this.getTemplate();
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
CometChat.getLoggedinUser().then((user) => {
|
|
238
|
+
this.loggedInUser = user;
|
|
239
|
+
this.getTemplate();
|
|
240
|
+
}).catch((error) => {
|
|
241
|
+
if (this.onError) {
|
|
242
|
+
this.onError(error);
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
getTemplate() {
|
|
249
|
+
if (this.data && this.data?.length > 0) {
|
|
250
|
+
this.defaultTemplate = this.data;
|
|
251
|
+
this.ref.detectChanges();
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
this.defaultTemplate = DetailsUtils.getDefaultDetailsTemplate(this.loggedInUser, this.user, this.group, this.themeService.theme);
|
|
255
|
+
this.ref.detectChanges();
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
removeListener() {
|
|
259
|
+
CometChat.removeUserListener(this.userListenerId);
|
|
260
|
+
}
|
|
261
|
+
ngOnDestroy() {
|
|
262
|
+
this.removeListener();
|
|
263
|
+
this.data = [];
|
|
264
|
+
this.defaultTemplate = [];
|
|
265
|
+
if (this.onClose) {
|
|
266
|
+
this.onClose();
|
|
267
|
+
}
|
|
268
|
+
this.unsubscribeToEvents();
|
|
269
|
+
}
|
|
270
|
+
ngOnInit() {
|
|
271
|
+
this.setThemeStyle();
|
|
272
|
+
this.subscribeToEvents();
|
|
273
|
+
this.statusColor.online = this.detailsStyle.onlineStatusColor || this.themeService.theme.palette.getSuccess();
|
|
274
|
+
this.attachListeners();
|
|
275
|
+
this.updateSubtitle();
|
|
276
|
+
}
|
|
277
|
+
subscribeToEvents() {
|
|
278
|
+
this.ccGroupMemberAdded = CometChatGroupEvents.ccGroupMemberAdded.subscribe((item) => {
|
|
279
|
+
this.group = item?.userAddedIn;
|
|
280
|
+
this.group = item?.userAddedIn;
|
|
281
|
+
this.openAddMembersPage = false;
|
|
282
|
+
this.updateSubtitle();
|
|
283
|
+
this.ref.detectChanges();
|
|
284
|
+
});
|
|
285
|
+
this.ccGroupMemberJoined = CometChatGroupEvents.ccGroupMemberJoined.subscribe((item) => {
|
|
286
|
+
this.group = item?.joinedGroup;
|
|
287
|
+
this.updateSubtitle();
|
|
288
|
+
this.ref.detectChanges();
|
|
289
|
+
});
|
|
290
|
+
this.ccGroupMemberKicked = CometChatGroupEvents.ccGroupMemberKicked.subscribe((item) => {
|
|
291
|
+
this.group = item?.kickedFrom;
|
|
292
|
+
this.updateSubtitle();
|
|
293
|
+
this.ref.detectChanges();
|
|
294
|
+
});
|
|
295
|
+
this.ccGroupMemberBanned = CometChatGroupEvents.ccGroupMemberBanned.subscribe((item) => {
|
|
296
|
+
this.group = item?.kickedFrom;
|
|
297
|
+
this.updateSubtitle();
|
|
298
|
+
this.ref.detectChanges();
|
|
299
|
+
});
|
|
300
|
+
this.ccOwnershipChanged = CometChatGroupEvents.ccOwnershipChanged.subscribe((item) => {
|
|
301
|
+
this.group = item?.group;
|
|
302
|
+
this.updateSubtitle();
|
|
303
|
+
this.confirmLeaveGroupModal = false;
|
|
304
|
+
this.openTransferOwnershipModal = false;
|
|
305
|
+
this.ref.detectChanges();
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
unsubscribeToEvents() {
|
|
309
|
+
this.ccGroupMemberAdded?.unsubscribe();
|
|
310
|
+
this.ccGroupMemberJoined?.unsubscribe();
|
|
311
|
+
this.ccGroupMemberKicked?.unsubscribe();
|
|
312
|
+
this.ccGroupMemberBanned?.unsubscribe();
|
|
313
|
+
this.ccOwnershipChanged?.unsubscribe();
|
|
314
|
+
}
|
|
315
|
+
updateSubtitle() {
|
|
316
|
+
const count = this.group?.getMembersCount();
|
|
317
|
+
const membersText = localize(count > 1 ? "MEMBERS" : "MEMBER");
|
|
318
|
+
this.subtitleText = this.user ? this.user.getStatus() : `${count} ${membersText}`;
|
|
319
|
+
this.ref.detectChanges();
|
|
320
|
+
}
|
|
321
|
+
getButtonStyle(option) {
|
|
322
|
+
return {
|
|
323
|
+
height: "100%",
|
|
324
|
+
width: "100%",
|
|
325
|
+
border: "none",
|
|
326
|
+
borderRadius: "0",
|
|
327
|
+
buttonTextFont: option?.titleFont,
|
|
328
|
+
buttonTextColor: option?.titleColor,
|
|
329
|
+
background: option?.backgroundColor || "transparent"
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
checkGroupType() {
|
|
333
|
+
let image = "";
|
|
334
|
+
if (this.group) {
|
|
335
|
+
switch (this.group?.getType()) {
|
|
336
|
+
case CometChatUIKitConstants.GroupTypes.password:
|
|
337
|
+
image = this.protectedGroupIcon;
|
|
338
|
+
break;
|
|
339
|
+
case CometChatUIKitConstants.GroupTypes.private:
|
|
340
|
+
image = this.privateGroupIcon;
|
|
341
|
+
break;
|
|
342
|
+
default:
|
|
343
|
+
image = "";
|
|
344
|
+
break;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return image;
|
|
348
|
+
}
|
|
349
|
+
updateUserStatus(user) {
|
|
350
|
+
if (this.user && this.user.getUid() && this.user.getUid() === user.getUid()) {
|
|
351
|
+
this.user.setStatus(user.getStatus());
|
|
352
|
+
this.updateSubtitle();
|
|
353
|
+
}
|
|
354
|
+
// this.ref.detectChanges();
|
|
355
|
+
}
|
|
356
|
+
attachListeners() {
|
|
357
|
+
try {
|
|
358
|
+
if (!this.disableUsersPresence) {
|
|
359
|
+
CometChat.addUserListener(this.userListenerId, new CometChat.UserListener({
|
|
360
|
+
onUserOnline: (onlineUser) => {
|
|
361
|
+
/* when someuser/friend comes online, user will be received here */
|
|
362
|
+
this.updateUserStatus(onlineUser);
|
|
363
|
+
},
|
|
364
|
+
onUserOffline: (offlineUser) => {
|
|
365
|
+
/* when someuser/friend went offline, user will be received here */
|
|
366
|
+
this.updateUserStatus(offlineUser);
|
|
367
|
+
},
|
|
368
|
+
}));
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
console.log(error);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
getSectionHeaderStyle(template) {
|
|
376
|
+
return {
|
|
377
|
+
textFont: template.titleFont,
|
|
378
|
+
textColor: template.titleColor
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
onOptionClick(option) {
|
|
382
|
+
const { onClick, id } = option;
|
|
383
|
+
if (onClick) {
|
|
384
|
+
onClick(this.user ?? this.group);
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
switch (id) {
|
|
388
|
+
case CometChatUIKitConstants.UserOptions.viewProfile:
|
|
389
|
+
if (this.user?.getLink()) {
|
|
390
|
+
window.location.href = this.user.getLink();
|
|
391
|
+
}
|
|
392
|
+
break;
|
|
393
|
+
case CometChatUIKitConstants.UserOptions.block:
|
|
394
|
+
this.blockUser();
|
|
395
|
+
break;
|
|
396
|
+
case CometChatUIKitConstants.UserOptions.unblock:
|
|
397
|
+
this.unBlockUser();
|
|
398
|
+
break;
|
|
399
|
+
case CometChatUIKitConstants.GroupOptions.viewMembers:
|
|
400
|
+
this.viewMembers();
|
|
401
|
+
break;
|
|
402
|
+
case CometChatUIKitConstants.GroupOptions.addMembers:
|
|
403
|
+
this.addMembers();
|
|
404
|
+
break;
|
|
405
|
+
case CometChatUIKitConstants.GroupOptions.bannedMembers:
|
|
406
|
+
this.bannedMembers();
|
|
407
|
+
break;
|
|
408
|
+
case CometChatUIKitConstants.GroupOptions.leave:
|
|
409
|
+
this.leaveGroup();
|
|
410
|
+
break;
|
|
411
|
+
case CometChatUIKitConstants.GroupOptions.delete:
|
|
412
|
+
this.deleteGroup();
|
|
413
|
+
break;
|
|
414
|
+
default:
|
|
415
|
+
break;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
onLeaveClick() {
|
|
419
|
+
if (this.group.getOwner() == this.loggedInUser?.getUid()) {
|
|
420
|
+
this.openTransferOwnershipModal = true;
|
|
421
|
+
this.confirmLeaveGroupModal = false;
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
CometChat.leaveGroup(this.group.getGuid())
|
|
425
|
+
.then((response) => {
|
|
426
|
+
this.group.setMembersCount(this.group.getMembersCount() - 1);
|
|
427
|
+
this.group.setHasJoined(false);
|
|
428
|
+
this.updateSubtitle();
|
|
429
|
+
this.ref.detectChanges();
|
|
430
|
+
this.openTransferOwnershipModal = false;
|
|
431
|
+
this.confirmLeaveGroupModal = false;
|
|
432
|
+
if (this.onClose) {
|
|
433
|
+
this.onClose();
|
|
434
|
+
}
|
|
435
|
+
CometChatGroupEvents.ccGroupLeft.next({
|
|
436
|
+
userLeft: this.loggedInUser,
|
|
437
|
+
leftGroup: this.group,
|
|
438
|
+
message: this.createUserLeftAction(this.loggedInUser, CometChatUIKitConstants.groupMemberAction.LEFT)
|
|
439
|
+
});
|
|
440
|
+
})
|
|
441
|
+
.catch((error) => {
|
|
442
|
+
if (this.onError) {
|
|
443
|
+
this.onError(error);
|
|
444
|
+
}
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
createActionMessage(actionOn, action) {
|
|
449
|
+
let actionMessage = new CometChat.Action(this.group.getGuid(), CometChatUIKitConstants.MessageTypes.groupMember, CometChatUIKitConstants.MessageReceiverType.group, CometChatUIKitConstants.MessageCategory.action);
|
|
450
|
+
actionMessage.setAction(action);
|
|
451
|
+
actionMessage.setActionBy(this.loggedInUser);
|
|
452
|
+
actionMessage.setActionFor(this.group);
|
|
453
|
+
actionMessage.setActionOn(actionOn);
|
|
454
|
+
actionMessage.setReceiver(this.group);
|
|
455
|
+
actionMessage.setSender(this.loggedInUser);
|
|
456
|
+
actionMessage.setConversationId("group_" + this.group.getGuid());
|
|
457
|
+
actionMessage.setMuid(CometChatUIKitUtility.ID());
|
|
458
|
+
actionMessage.setMessage(`${this.loggedInUser?.getName()} ${action} ${actionOn.getUid()}`);
|
|
459
|
+
actionMessage.setSentAt(CometChatUIKitUtility.getUnixTimestamp());
|
|
460
|
+
actionMessage.setNewScope(actionOn.getScope());
|
|
461
|
+
return actionMessage;
|
|
462
|
+
}
|
|
463
|
+
createUserLeftAction(actionOn, action) {
|
|
464
|
+
let actionMessage = new CometChat.Action(this.group.getGuid(), CometChatUIKitConstants.MessageTypes.groupMember, CometChatUIKitConstants.MessageReceiverType.group, CometChatUIKitConstants.MessageCategory.action);
|
|
465
|
+
actionMessage.setAction(action);
|
|
466
|
+
actionMessage.setActionBy(this.loggedInUser);
|
|
467
|
+
actionMessage.setActionFor(this.group);
|
|
468
|
+
actionMessage.setActionOn(actionOn);
|
|
469
|
+
actionMessage.setReceiver(this.group);
|
|
470
|
+
actionMessage.setSender(this.loggedInUser);
|
|
471
|
+
actionMessage.setConversationId("group_" + this.group.getGuid());
|
|
472
|
+
actionMessage.setMuid(CometChatUIKitUtility.ID());
|
|
473
|
+
actionMessage.setMessage(`${this.loggedInUser?.getName()} ${action} ${actionOn.getUid()}`);
|
|
474
|
+
actionMessage.setSentAt(CometChatUIKitUtility.getUnixTimestamp());
|
|
475
|
+
return actionMessage;
|
|
476
|
+
}
|
|
477
|
+
onCancelClick() {
|
|
478
|
+
this.confirmLeaveGroupModal = false;
|
|
479
|
+
}
|
|
480
|
+
blockUser() {
|
|
481
|
+
// block user
|
|
482
|
+
if (this.user && !this.user.getBlockedByMe()) {
|
|
483
|
+
CometChat.blockUsers([this.user.getUid()]).then(() => {
|
|
484
|
+
this.user.setBlockedByMe(true);
|
|
485
|
+
CometChatUserEvents.ccUserBlocked;
|
|
486
|
+
this.getTemplate();
|
|
487
|
+
if (this.onClose) {
|
|
488
|
+
this.onClose();
|
|
489
|
+
}
|
|
490
|
+
})
|
|
491
|
+
.catch((error) => {
|
|
492
|
+
if (this.onError) {
|
|
493
|
+
this.onError(error);
|
|
494
|
+
}
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
unBlockUser() {
|
|
499
|
+
// unblock user
|
|
500
|
+
if (this.user && this.user.getBlockedByMe()) {
|
|
501
|
+
CometChat.unblockUsers([this.user.getUid()]).then(() => {
|
|
502
|
+
this.user.setBlockedByMe(false);
|
|
503
|
+
CometChatUserEvents.ccUserUnblocked.next(this.user);
|
|
504
|
+
this.getTemplate();
|
|
505
|
+
})
|
|
506
|
+
.catch((error) => {
|
|
507
|
+
if (this.onError) {
|
|
508
|
+
this.onError(error);
|
|
509
|
+
}
|
|
510
|
+
});
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
leaveGroup() {
|
|
514
|
+
if (this.group.getOwner() == this.loggedInUser?.getUid()) {
|
|
515
|
+
this.leaveButtonText = this.transferText;
|
|
516
|
+
this.confirmDialogMessage = this.transferConfirm;
|
|
517
|
+
}
|
|
518
|
+
else {
|
|
519
|
+
this.leaveButtonText = this.leaveGroupText;
|
|
520
|
+
this.confirmDialogMessage = this.leaveGroupMessage;
|
|
521
|
+
}
|
|
522
|
+
this.confirmLeaveGroupModal = true;
|
|
523
|
+
this.ref.detectChanges();
|
|
524
|
+
}
|
|
525
|
+
deleteGroup() {
|
|
526
|
+
CometChat.deleteGroup(this.group?.getGuid()).then(() => {
|
|
527
|
+
CometChatGroupEvents.ccGroupDeleted.next(this.group);
|
|
528
|
+
if (this.onClose) {
|
|
529
|
+
this.onClose();
|
|
530
|
+
}
|
|
531
|
+
})
|
|
532
|
+
.catch((error) => {
|
|
533
|
+
if (this.onError) {
|
|
534
|
+
this.onError(error);
|
|
535
|
+
}
|
|
536
|
+
});
|
|
537
|
+
}
|
|
538
|
+
onCloseDetails() {
|
|
539
|
+
if (this.onClose) {
|
|
540
|
+
this.onClose();
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
/**
|
|
544
|
+
* @param {CometChat.Group} group
|
|
545
|
+
*/
|
|
546
|
+
getStatusIndicatorColor(group) {
|
|
547
|
+
return this.statusColor[group?.getType()];
|
|
548
|
+
}
|
|
549
|
+
setThemeStyle() {
|
|
550
|
+
this.setDetailsStyle();
|
|
551
|
+
this.setAvatarStyle();
|
|
552
|
+
this.setStatusStyle();
|
|
553
|
+
this.setListItemStyle();
|
|
554
|
+
this.setConfirmDialogStyle();
|
|
555
|
+
this.statusColor.private = this.detailsStyle.privateGroupIconBackground;
|
|
556
|
+
this.statusColor.online = this.detailsStyle.onlineStatusColor;
|
|
557
|
+
this.statusColor.password = this.detailsStyle.passwordGroupIconBackground;
|
|
558
|
+
}
|
|
559
|
+
setConfirmDialogStyle() {
|
|
560
|
+
let defaultStyle = new ConfirmDialogStyle({
|
|
561
|
+
confirmButtonBackground: this.themeService.theme.palette.getPrimary(),
|
|
562
|
+
cancelButtonBackground: this.themeService.theme.palette.getSecondary(),
|
|
563
|
+
confirmButtonTextColor: this.themeService.theme.palette.getAccent900("light"),
|
|
564
|
+
confirmButtonTextFont: fontHelper(this.themeService.theme.typography.text2),
|
|
565
|
+
cancelButtonTextColor: this.themeService.theme.palette.getAccent900("dark"),
|
|
566
|
+
cancelButtonTextFont: fontHelper(this.themeService.theme.typography.text2),
|
|
567
|
+
titleFont: fontHelper(this.themeService.theme.typography.title1),
|
|
568
|
+
titleColor: this.themeService.theme.palette.getAccent(),
|
|
569
|
+
messageTextFont: fontHelper(this.themeService.theme.typography.subtitle2),
|
|
570
|
+
messageTextColor: this.themeService.theme.palette.getAccent600(),
|
|
571
|
+
background: this.themeService.theme.palette.getBackground(),
|
|
572
|
+
height: "100%",
|
|
573
|
+
width: "350px",
|
|
574
|
+
border: `1px solid ${this.themeService.theme.palette.getAccent200()}`,
|
|
575
|
+
borderRadius: "8px"
|
|
576
|
+
});
|
|
577
|
+
this.leaveDialogStyle = { ...defaultStyle, ...this.leaveDialogStyle };
|
|
578
|
+
}
|
|
579
|
+
setListItemStyle() {
|
|
580
|
+
let defaultStyle = new ListItemStyle({
|
|
581
|
+
height: "45px",
|
|
582
|
+
width: "100%",
|
|
583
|
+
background: this.themeService.theme.palette.getBackground(),
|
|
584
|
+
activeBackground: "transparent",
|
|
585
|
+
borderRadius: "0",
|
|
586
|
+
titleFont: fontHelper(this.themeService.theme.typography.title2),
|
|
587
|
+
titleColor: this.themeService.theme.palette.getAccent(),
|
|
588
|
+
border: "none",
|
|
589
|
+
separatorColor: this.themeService.theme.palette.getAccent200(),
|
|
590
|
+
hoverBackground: "transparent"
|
|
591
|
+
});
|
|
592
|
+
this.listItemStyle = { ...defaultStyle, ...this.listItemStyle };
|
|
593
|
+
}
|
|
594
|
+
setAvatarStyle() {
|
|
595
|
+
let defaultStyle = new AvatarStyle({
|
|
596
|
+
borderRadius: "24px",
|
|
597
|
+
width: "36px",
|
|
598
|
+
height: "36px",
|
|
599
|
+
border: "none",
|
|
600
|
+
backgroundColor: this.themeService.theme.palette.getAccent700(),
|
|
601
|
+
nameTextColor: this.themeService.theme.palette.getAccent900(),
|
|
602
|
+
backgroundSize: "cover",
|
|
603
|
+
nameTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
|
|
604
|
+
outerViewBorder: "",
|
|
605
|
+
outerViewBorderSpacing: "",
|
|
606
|
+
});
|
|
607
|
+
this.avatarStyle = { ...defaultStyle, ...this.avatarStyle };
|
|
608
|
+
}
|
|
609
|
+
setStatusStyle() {
|
|
610
|
+
let defaultStyle = {
|
|
611
|
+
height: "12px",
|
|
612
|
+
width: "12px",
|
|
613
|
+
border: "none",
|
|
614
|
+
borderRadius: "24px",
|
|
615
|
+
};
|
|
616
|
+
this.statusIndicatorStyle = { ...defaultStyle, ...this.statusIndicatorStyle };
|
|
617
|
+
}
|
|
618
|
+
setDetailsStyle() {
|
|
619
|
+
let defaultStyle = new DetailsStyle({
|
|
620
|
+
background: this.themeService.theme.palette.getBackground(),
|
|
621
|
+
border: `1px solid ${this.themeService.theme.palette.getAccent50()}`,
|
|
622
|
+
titleTextFont: fontHelper(this.themeService.theme.typography.title1),
|
|
623
|
+
titleTextColor: this.themeService.theme.palette.getAccent(),
|
|
624
|
+
onlineStatusColor: this.themeService.theme.palette.getSuccess(),
|
|
625
|
+
privateGroupIconBackground: this.themeService.theme.palette.getSuccess(),
|
|
626
|
+
passwordGroupIconBackground: "RGB(247, 165, 0)",
|
|
627
|
+
closeButtonIconTint: this.themeService.theme.palette.getPrimary(),
|
|
628
|
+
width: "100%",
|
|
629
|
+
height: "100%",
|
|
630
|
+
borderRadius: "",
|
|
631
|
+
subtitleTextFont: fontHelper(this.themeService.theme.typography.subtitle2),
|
|
632
|
+
subtitleTextColor: this.themeService.theme.palette.getAccent600(),
|
|
633
|
+
padding: "0 100px"
|
|
634
|
+
});
|
|
635
|
+
this.detailsStyle = { ...defaultStyle, ...this.detailsStyle };
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
CometChatDetailsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatDetailsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
639
|
+
CometChatDetailsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatDetailsComponent, selector: "cometchat-details", inputs: { group: "group", user: "user", title: "title", closeButtonIconURL: "closeButtonIconURL", hideProfile: "hideProfile", subtitleView: "subtitleView", customProfileView: "customProfileView", data: "data", disableUsersPresence: "disableUsersPresence", privateGroupIcon: "privateGroupIcon", protectedGroupIcon: "protectedGroupIcon", onError: "onError", onClose: "onClose", leaveButtonText: "leaveButtonText", cancelButtonText: "cancelButtonText", confirmDialogMessage: "confirmDialogMessage", addMembersConfiguration: "addMembersConfiguration", bannedMembersConfiguration: "bannedMembersConfiguration", groupMembersConfiguration: "groupMembersConfiguration", transferOwnershipConfiguration: "transferOwnershipConfiguration", leaveDialogStyle: "leaveDialogStyle", statusIndicatorStyle: "statusIndicatorStyle", backdropStyle: "backdropStyle", avatarStyle: "avatarStyle", detailsStyle: "detailsStyle", listItemStyle: "listItemStyle" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-details__wrapper\" *ngIf=\"user || group\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-details__header\">\n <cometchat-label [text]=\"title\" [labelStyle]=\"getTitleStyle()\"></cometchat-label>\n <cometchat-button [iconURL]=\"closeButtonIconURL\" class=\"cc-details__close-button\" [buttonStyle]=\"closeButtonStyle\" (cc-button-clicked)=\"onCloseDetails()\"></cometchat-button>\n </div>\n<div class=\"cc-details\" [ngStyle]=\"marginStyle()\">\n <div class=\"cc-details__profile\" *ngIf=\"!hideProfile\">\n <cometchat-list-item *ngIf=\"!customProfileView;else listitem\" [avatarName]=\"user?.getName() ?? this.group?.getName()\" [avatarURL]=\"this.user?.getAvatar() ?? this.group?.getIcon()\" [listItemStyle]=\"listItemStyle\"\n [statusIndicatorColor]=\"checkStatusType()\" [statusIndicatorIcon]=\"checkGroupType()\" [title]=\"this.user?.getName() ?? this.group?.getName()\" [hideSeparator]=\"false\"\n [statusIndicatorStyle]=\"statusIndicatorStyle\" [avatarStyle]=\"avatarStyle\">\n <div slot=\"subtitleView\">\n <div *ngIf=\"!subtitleView; else subtitle\">\n <cometchat-label [text]=\"subtitleText\" [labelStyle]=\"subtitleStyle()\">\n </cometchat-label>\n </div>\n <ng-template #subtitle>\n <ng-container *ngTemplateOutlet=\"subtitleView;context:{ $implicit: user ?? group }\">\n </ng-container>\n </ng-template>\n </div>\n </cometchat-list-item>\n </div>\n<div class=\"cc-details__section-list\" *ngIf=\"defaultTemplate && defaultTemplate.length > 0\">\n <div class=\"cc-details__section\" *ngFor=\"let item of defaultTemplate\" >\n <div class=\"cc-details__section-separator\" *ngIf=\"item.title\">\n <cometchat-label [text]=\"item.title\" [labelStyle]=\"getSectionHeaderStyle(item)\"></cometchat-label>\n </div>\n <div class=\"cc-details__options-wrapper\" *ngIf=\"getTemplateOptions(item)\">\n<div class=\"cc-details__options\"*ngFor=\"let option of getTemplateOptions(item)\" >\n<div class=\"cc-details__option\" *ngIf=\"!getCustomOptionView(option);else customView\" (click)=\"onOptionClick(option)\">\n <div class=\"cc-details__option-title\" >\n <cometchat-button [text]=\"option.title\" [buttonStyle]=\"getButtonStyle(option)\"></cometchat-button>\n <div class=\"cc-details__option-tail\" *ngIf=\"option?.tail\">\n <ng-container *ngTemplateOutlet=\"option?.tail\"></ng-container>\n </div>\n </div>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n</div>\n<ng-template #customView>\n <ng-container *ngTemplateOutlet=\"getCustomOptionView(option)\" >\n </ng-container>\n</ng-template>\n</div>\n </div>\n </div>\n</div>\n</div>\n</div>\n<ng-template #listitem>\n <ng-container *ngTemplateOutlet=\"customProfileView\">\n </ng-container>\n</ng-template>\n<div class=\"cc-details__view\" *ngIf=\"openAddMembersPage\">\n <cometchat-add-members\n [titleAlignment]=\"addMembersConfiguration.titleAlignment\"\n [listItemStyle]=\"addMembersConfiguration.listItemStyle\"\n [addMembersStyle]=\"addMembersConfiguration.addMembersStyle\"\n [avatarStyle]=\"addMembersConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"addMembersConfiguration.statusIndicatorStyle\"\n [loadingStateView]=\"addMembersConfiguration.loadingStateView\"\n [loadingIconURL]=\"addMembersConfiguration.loadingIconURL\"\n [errorStateView]=\"addMembersConfiguration.errorStateView\"\n [emptyStateView]=\"addMembersConfiguration.emptyStateView\"\n [onSelect]=\"addMembersConfiguration.onSelect\"\n [onError]=\"addMembersConfiguration.onError\"\n [hideError]=\"addMembersConfiguration.hideError\"\n [hideSearch]=\"addMembersConfiguration.hideSearch\"\n [searchIconURL]=\"addMembersConfiguration.searchIconURL\"\n [selectionMode]=\"addMembersConfiguration.selectionMode\"\n [hideSeparator]=\"addMembersConfiguration.hideSeparator\"\n [showBackButton]=\"addMembersConfiguration.showBackButton\"\n [backButtonIconURL]=\"addMembersConfiguration.backButtonIconURL\"\n [closeButtonIconURL]=\"addMembersConfiguration.closeButtonIconURL\"\n [options]=\"addMembersConfiguration.options\"\n [menu]=\"addMembersConfiguration.menu\"\n [disableUsersPresence]=\"addMembersConfiguration.disableUsersPresence\"\n [subtitleView]=\"addMembersConfiguration.subtitleView\"\n [group]=\"group\"\n [selectionMode]=\"selectionmodeEnum\"\n [onClose]=\"addMembersConfiguration.onClose ||onCloseClick\"\n [onBack]=\"addMembersConfiguration.onBack || addMembers\">\n </cometchat-add-members>\n</div>\n<div class=\"cc-details__view\" *ngIf=\"openBannedMembersPage\">\n <cometchat-banned-members\n [titleAlignment]=\"bannedMembersConfiguration.titleAlignment\"\n [listItemStyle]=\"bannedMembersConfiguration.listItemStyle\"\n [bannedMembersStyle]=\"bannedMembersConfiguration.bannedMembersStyle\"\n [avatarStyle]=\"bannedMembersConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"bannedMembersConfiguration.statusIndicatorStyle\"\n [loadingStateView]=\"bannedMembersConfiguration.loadingStateView\"\n [loadingIconURL]=\"bannedMembersConfiguration.loadingIconURL\"\n [errorStateView]=\"bannedMembersConfiguration.errorStateView\"\n [emptyStateView]=\"bannedMembersConfiguration.emptyStateView\"\n [onSelect]=\"bannedMembersConfiguration.onSelect\"\n [onError]=\"bannedMembersConfiguration.onError\"\n [hideError]=\"bannedMembersConfiguration.hideError\"\n [hideSearch]=\"bannedMembersConfiguration.hideSearch\"\n [searchIconURL]=\"bannedMembersConfiguration.searchIconURL\"\n [selectionMode]=\"bannedMembersConfiguration.selectionMode\"\n [hideSeparator]=\"bannedMembersConfiguration.hideSeparator\"\n [showBackButton]=\"bannedMembersConfiguration.showBackButton\"\n [backButtonIconURL]=\"bannedMembersConfiguration.backButtonIconURL\"\n [closeButtonIconURL]=\"bannedMembersConfiguration.closeButtonIconURL\"\n [options]=\"bannedMembersConfiguration.options\"\n [menu]=\"bannedMembersConfiguration.menu\"\n [disableUsersPresence]=\"bannedMembersConfiguration.disableUsersPresence\"\n [subtitleView]=\"bannedMembersConfiguration.subtitleView\"\n [group]=\"group\" [onClose]=\"onCloseClick\" [onBack]=\"bannedMembersConfiguration.onBack || bannedMembers\">\n </cometchat-banned-members>\n</div>\n<div class=\"cc-details__view\" *ngIf=\"openViewMembersPage\">\n <cometchat-group-members\n [titleAlignment]=\"groupMembersConfiguration.titleAlignment\"\n [listItemStyle]=\"groupMembersConfiguration.listItemStyle\"\n [groupMembersStyle]=\"groupMembersConfiguration.groupMembersStyle\"\n [avatarStyle]=\"groupMembersConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"groupMembersConfiguration.statusIndicatorStyle\"\n [loadingStateView]=\"groupMembersConfiguration.loadingStateView\"\n [loadingIconURL]=\"groupMembersConfiguration.loadingIconURL\"\n [errorStateView]=\"groupMembersConfiguration.errorStateView\"\n [emptyStateView]=\"groupMembersConfiguration.emptyStateView\"\n [onSelect]=\"groupMembersConfiguration.onSelect\"\n [onError]=\"groupMembersConfiguration.onError\"\n [hideError]=\"groupMembersConfiguration.hideError\"\n [hideSearch]=\"groupMembersConfiguration.hideSearch\"\n [searchIconURL]=\"groupMembersConfiguration.searchIconURL\"\n [selectionMode]=\"groupMembersConfiguration.selectionMode\"\n [backdropStyle]=\"groupMembersConfiguration.backdropStyle\"\n [hideSeparator]=\"groupMembersConfiguration.hideSeparator\"\n [showBackButton]=\"groupMembersConfiguration.showBackButton\"\n [backButtonIconURL]=\"groupMembersConfiguration.backButtonIconURL\"\n [closeButtonIconURL]=\"groupMembersConfiguration.closeButtonIconURL\"\n [options]=\"groupMembersConfiguration.options\"\n [menu]=\"groupMembersConfiguration.menu\"\n [disableUsersPresence]=\"groupMembersConfiguration.disableUsersPresence\"\n [subtitleView]=\"groupMembersConfiguration.subtitleView\"\n [groupScopeStyle]=\"groupMembersConfiguration.groupScopeStyle\"\n [group]=\"group\" [onClose]=\" groupMembersConfiguration.onClose || onCloseClick\" [onBack]=\"groupMembersConfiguration.onBack || viewMembers\">\n </cometchat-group-members>\n</div>\n<cometchat-backdrop [backdropStyle]=\"backdropStyle\" *ngIf=\"confirmLeaveGroupModal\">\n <cometchat-confirm-dialog [title]=\"''\" [messageText]=\"confirmDialogMessage\" [cancelButtonText]=\"cancelButtonText\" [confirmButtonText]=\"leaveButtonText\" (cc-confirm-clicked)=\"onLeaveClick()\" (cc-cancel-clicked)=\"onCancelClick()\" [confirmDialogStyle]=\"leaveDialogStyle\">\n </cometchat-confirm-dialog>\n</cometchat-backdrop>\n<cometchat-backdrop [backdropStyle]=\"backdropStyle\" *ngIf=\"openTransferOwnershipModal\">\n <cometchat-transfer-ownership\n [transferOwnershipStyle]=\"transferOwnershipConfiguration.transferOwnershipStyle\"\n [onTransferOwnership]=\"transferOwnershipConfiguration.onTransferOwnership\"\n [titleAlignment]=\"transferOwnershipConfiguration.titleAlignment\"\n [listItemStyle]=\"transferOwnershipConfiguration.listItemStyle\"\n [avatarStyle]=\"transferOwnershipConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"transferOwnershipConfiguration.statusIndicatorStyle\"\n [loadingStateView]=\"transferOwnershipConfiguration.loadingStateView\"\n [loadingIconURL]=\"transferOwnershipConfiguration.loadingIconURL\"\n [errorStateView]=\"transferOwnershipConfiguration.errorStateView\"\n [emptyStateView]=\"transferOwnershipConfiguration.emptyStateView\"\n [onError]=\"transferOwnershipConfiguration.onError\"\n [hideSearch]=\"transferOwnershipConfiguration.hideSearch\"\n [searchIconURL]=\"transferOwnershipConfiguration.searchIconURL\"\n [hideSeparator]=\"transferOwnershipConfiguration.hideSeparator\"\n [closeButtonIconURL]=\"transferOwnershipConfiguration.closeButtonIconURL\"\n [options]=\"transferOwnershipConfiguration.options\"\n [disableUsersPresence]=\"transferOwnershipConfiguration.disableUsersPresence\"\n [subtitleView]=\"transferOwnershipConfiguration.subtitleView\"\n [group]=\"group\" [onClose]=\"transferOwnershipConfiguration.onClose || openTransferOwnership\">\n </cometchat-transfer-ownership>\n</cometchat-backdrop>", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-details__wrapper{padding:8px;border-radius:5px;height:100%}.cc-details__profile{margin-bottom:50px;height:8%}.cc-details__section-list{height:84%;width:100%;overflow-y:auto;overflow-x:hidden}.cc-details__header{display:flex;justify-content:center;align-items:center;margin-bottom:30px}.cc-details__close-button{position:absolute;right:20px}.cc-details__section{margin-bottom:32px}.cc-details__section-separator{margin-bottom:16px;padding-left:6px;height:5%}.cc-details__options-wrapper{list-style:none;padding:0;display:flex;flex-direction:column;gap:8px}.cc-details__option{display:flex;flex-direction:column;justify-content:space-evenly;min-height:50px}.cc-details__option-title{padding-bottom:12px;display:flex;align-items:center;justify-content:space-between}.cc-details__view{position:absolute;top:0;left:0;height:100%;width:100%;max-height:100%;overflow-y:auto;overflow-x:hidden;max-width:100%;z-index:1}.cc-details__section-list::-webkit-scrollbar{background:transparent;width:8px}.cc-details__section-list::-webkit-scrollbar-thumb{background:#e8e5e5;border-radius:8px}.cc-details__leavedialog,.cc-details__transferownership{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:-moz-fit-content;height:fit-content;width:100%;z-index:2}\n"], components: [{ type: i2.CometChatAddMembersComponent, selector: "cometchat-add-members", inputs: ["usersRequestBuilder", "searchRequestBuilder", "subtitleView", "listItemView", "disableUsersPresence", "menu", "options", "backButtonIconURL", "closeButtonIconURL", "showBackButton", "hideSeparator", "selectionMode", "searchPlaceholder", "hideError", "searchIconURL", "hideSearch", "title", "onError", "onBack", "onClose", "onSelect", "buttonText", "group", "emptyStateView", "errorStateView", "loadingIconURL", "listItemStyle", "showSectionHeader", "sectionHeaderField", "loadingStateView", "emptyStateText", "errorStateText", "onAddMembersButtonClick", "titleAlignment", "addMembersStyle"] }, { type: i3.CometChatBannedMembersComponent, selector: "cometchat-banned-members", inputs: ["bannedMembersRequestBuilder", "searchRequestBuilder", "subtitleView", "listItemView", "disableUsersPresence", "menu", "options", "backButtonIconURL", "closeButtonIconURL", "showBackButton", "hideSeparator", "selectionMode", "searchPlaceholder", "searchIconURL", "hideSearch", "title", "onError", "onSelect", "onBack", "onClose", "group", "emptyStateView", "errorStateView", "loadingIconURL", "loadingStateView", "emptyStateText", "errorStateText", "titleAlignment", "unbanIconURL", "avatarStyle", "bannedMembersStyle", "listItemStyle"] }, { type: i4.CometChatGroupMembersComponent, selector: "cometchat-group-members", inputs: ["groupMemberRequestBuilder", "searchRequestBuilder", "subtitleView", "listItemView", "tailView", "disableUsersPresence", "menu", "options", "backButtonIconURL", "closeButtonIconURL", "showBackButton", "hideSeparator", "selectionMode", "searchPlaceholder", "searchIconURL", "hideSearch", "title", "onError", "backdropStyle", "onBack", "onClose", "onSelect", "group", "emptyStateView", "errorStateView", "loadingIconURL", "loadingStateView", "emptyStateText", "errorStateText", "titleAlignment", "dropdownIconURL", "statusIndicatorStyle", "avatarStyle", "groupMemberStyle", "groupScopeStyle", "listItemStyle"] }, { type: i5.CometChatTransferOwnershipComponent, selector: "cometchat-transfer-ownership", inputs: ["groupMemberRequestBuilder", "searchRequestBuilder", "subtitleView", "listItemView", "disableUsersPresence", "options", "closeButtonIconURL", "hideSeparator", "searchPlaceholder", "searchIconURL", "hideSearch", "title", "onError", "onClose", "onTransferOwnership", "group", "emptyStateView", "errorStateView", "loadingIconURL", "loadingStateView", "emptyStateText", "errorStateText", "statusIndicatorStyle", "transferOwnershipStyle", "transferButtonText", "cancelButtonText", "avatarStyle", "groupMemberStyle", "listItemStyle", "titleAlignment"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
640
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatDetailsComponent, decorators: [{
|
|
641
|
+
type: Component,
|
|
642
|
+
args: [{ selector: "cometchat-details", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-details__wrapper\" *ngIf=\"user || group\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-details__header\">\n <cometchat-label [text]=\"title\" [labelStyle]=\"getTitleStyle()\"></cometchat-label>\n <cometchat-button [iconURL]=\"closeButtonIconURL\" class=\"cc-details__close-button\" [buttonStyle]=\"closeButtonStyle\" (cc-button-clicked)=\"onCloseDetails()\"></cometchat-button>\n </div>\n<div class=\"cc-details\" [ngStyle]=\"marginStyle()\">\n <div class=\"cc-details__profile\" *ngIf=\"!hideProfile\">\n <cometchat-list-item *ngIf=\"!customProfileView;else listitem\" [avatarName]=\"user?.getName() ?? this.group?.getName()\" [avatarURL]=\"this.user?.getAvatar() ?? this.group?.getIcon()\" [listItemStyle]=\"listItemStyle\"\n [statusIndicatorColor]=\"checkStatusType()\" [statusIndicatorIcon]=\"checkGroupType()\" [title]=\"this.user?.getName() ?? this.group?.getName()\" [hideSeparator]=\"false\"\n [statusIndicatorStyle]=\"statusIndicatorStyle\" [avatarStyle]=\"avatarStyle\">\n <div slot=\"subtitleView\">\n <div *ngIf=\"!subtitleView; else subtitle\">\n <cometchat-label [text]=\"subtitleText\" [labelStyle]=\"subtitleStyle()\">\n </cometchat-label>\n </div>\n <ng-template #subtitle>\n <ng-container *ngTemplateOutlet=\"subtitleView;context:{ $implicit: user ?? group }\">\n </ng-container>\n </ng-template>\n </div>\n </cometchat-list-item>\n </div>\n<div class=\"cc-details__section-list\" *ngIf=\"defaultTemplate && defaultTemplate.length > 0\">\n <div class=\"cc-details__section\" *ngFor=\"let item of defaultTemplate\" >\n <div class=\"cc-details__section-separator\" *ngIf=\"item.title\">\n <cometchat-label [text]=\"item.title\" [labelStyle]=\"getSectionHeaderStyle(item)\"></cometchat-label>\n </div>\n <div class=\"cc-details__options-wrapper\" *ngIf=\"getTemplateOptions(item)\">\n<div class=\"cc-details__options\"*ngFor=\"let option of getTemplateOptions(item)\" >\n<div class=\"cc-details__option\" *ngIf=\"!getCustomOptionView(option);else customView\" (click)=\"onOptionClick(option)\">\n <div class=\"cc-details__option-title\" >\n <cometchat-button [text]=\"option.title\" [buttonStyle]=\"getButtonStyle(option)\"></cometchat-button>\n <div class=\"cc-details__option-tail\" *ngIf=\"option?.tail\">\n <ng-container *ngTemplateOutlet=\"option?.tail\"></ng-container>\n </div>\n </div>\n <cometchat-divider [dividerStyle]=\"dividerStyle\"></cometchat-divider>\n</div>\n<ng-template #customView>\n <ng-container *ngTemplateOutlet=\"getCustomOptionView(option)\" >\n </ng-container>\n</ng-template>\n</div>\n </div>\n </div>\n</div>\n</div>\n</div>\n<ng-template #listitem>\n <ng-container *ngTemplateOutlet=\"customProfileView\">\n </ng-container>\n</ng-template>\n<div class=\"cc-details__view\" *ngIf=\"openAddMembersPage\">\n <cometchat-add-members\n [titleAlignment]=\"addMembersConfiguration.titleAlignment\"\n [listItemStyle]=\"addMembersConfiguration.listItemStyle\"\n [addMembersStyle]=\"addMembersConfiguration.addMembersStyle\"\n [avatarStyle]=\"addMembersConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"addMembersConfiguration.statusIndicatorStyle\"\n [loadingStateView]=\"addMembersConfiguration.loadingStateView\"\n [loadingIconURL]=\"addMembersConfiguration.loadingIconURL\"\n [errorStateView]=\"addMembersConfiguration.errorStateView\"\n [emptyStateView]=\"addMembersConfiguration.emptyStateView\"\n [onSelect]=\"addMembersConfiguration.onSelect\"\n [onError]=\"addMembersConfiguration.onError\"\n [hideError]=\"addMembersConfiguration.hideError\"\n [hideSearch]=\"addMembersConfiguration.hideSearch\"\n [searchIconURL]=\"addMembersConfiguration.searchIconURL\"\n [selectionMode]=\"addMembersConfiguration.selectionMode\"\n [hideSeparator]=\"addMembersConfiguration.hideSeparator\"\n [showBackButton]=\"addMembersConfiguration.showBackButton\"\n [backButtonIconURL]=\"addMembersConfiguration.backButtonIconURL\"\n [closeButtonIconURL]=\"addMembersConfiguration.closeButtonIconURL\"\n [options]=\"addMembersConfiguration.options\"\n [menu]=\"addMembersConfiguration.menu\"\n [disableUsersPresence]=\"addMembersConfiguration.disableUsersPresence\"\n [subtitleView]=\"addMembersConfiguration.subtitleView\"\n [group]=\"group\"\n [selectionMode]=\"selectionmodeEnum\"\n [onClose]=\"addMembersConfiguration.onClose ||onCloseClick\"\n [onBack]=\"addMembersConfiguration.onBack || addMembers\">\n </cometchat-add-members>\n</div>\n<div class=\"cc-details__view\" *ngIf=\"openBannedMembersPage\">\n <cometchat-banned-members\n [titleAlignment]=\"bannedMembersConfiguration.titleAlignment\"\n [listItemStyle]=\"bannedMembersConfiguration.listItemStyle\"\n [bannedMembersStyle]=\"bannedMembersConfiguration.bannedMembersStyle\"\n [avatarStyle]=\"bannedMembersConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"bannedMembersConfiguration.statusIndicatorStyle\"\n [loadingStateView]=\"bannedMembersConfiguration.loadingStateView\"\n [loadingIconURL]=\"bannedMembersConfiguration.loadingIconURL\"\n [errorStateView]=\"bannedMembersConfiguration.errorStateView\"\n [emptyStateView]=\"bannedMembersConfiguration.emptyStateView\"\n [onSelect]=\"bannedMembersConfiguration.onSelect\"\n [onError]=\"bannedMembersConfiguration.onError\"\n [hideError]=\"bannedMembersConfiguration.hideError\"\n [hideSearch]=\"bannedMembersConfiguration.hideSearch\"\n [searchIconURL]=\"bannedMembersConfiguration.searchIconURL\"\n [selectionMode]=\"bannedMembersConfiguration.selectionMode\"\n [hideSeparator]=\"bannedMembersConfiguration.hideSeparator\"\n [showBackButton]=\"bannedMembersConfiguration.showBackButton\"\n [backButtonIconURL]=\"bannedMembersConfiguration.backButtonIconURL\"\n [closeButtonIconURL]=\"bannedMembersConfiguration.closeButtonIconURL\"\n [options]=\"bannedMembersConfiguration.options\"\n [menu]=\"bannedMembersConfiguration.menu\"\n [disableUsersPresence]=\"bannedMembersConfiguration.disableUsersPresence\"\n [subtitleView]=\"bannedMembersConfiguration.subtitleView\"\n [group]=\"group\" [onClose]=\"onCloseClick\" [onBack]=\"bannedMembersConfiguration.onBack || bannedMembers\">\n </cometchat-banned-members>\n</div>\n<div class=\"cc-details__view\" *ngIf=\"openViewMembersPage\">\n <cometchat-group-members\n [titleAlignment]=\"groupMembersConfiguration.titleAlignment\"\n [listItemStyle]=\"groupMembersConfiguration.listItemStyle\"\n [groupMembersStyle]=\"groupMembersConfiguration.groupMembersStyle\"\n [avatarStyle]=\"groupMembersConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"groupMembersConfiguration.statusIndicatorStyle\"\n [loadingStateView]=\"groupMembersConfiguration.loadingStateView\"\n [loadingIconURL]=\"groupMembersConfiguration.loadingIconURL\"\n [errorStateView]=\"groupMembersConfiguration.errorStateView\"\n [emptyStateView]=\"groupMembersConfiguration.emptyStateView\"\n [onSelect]=\"groupMembersConfiguration.onSelect\"\n [onError]=\"groupMembersConfiguration.onError\"\n [hideError]=\"groupMembersConfiguration.hideError\"\n [hideSearch]=\"groupMembersConfiguration.hideSearch\"\n [searchIconURL]=\"groupMembersConfiguration.searchIconURL\"\n [selectionMode]=\"groupMembersConfiguration.selectionMode\"\n [backdropStyle]=\"groupMembersConfiguration.backdropStyle\"\n [hideSeparator]=\"groupMembersConfiguration.hideSeparator\"\n [showBackButton]=\"groupMembersConfiguration.showBackButton\"\n [backButtonIconURL]=\"groupMembersConfiguration.backButtonIconURL\"\n [closeButtonIconURL]=\"groupMembersConfiguration.closeButtonIconURL\"\n [options]=\"groupMembersConfiguration.options\"\n [menu]=\"groupMembersConfiguration.menu\"\n [disableUsersPresence]=\"groupMembersConfiguration.disableUsersPresence\"\n [subtitleView]=\"groupMembersConfiguration.subtitleView\"\n [groupScopeStyle]=\"groupMembersConfiguration.groupScopeStyle\"\n [group]=\"group\" [onClose]=\" groupMembersConfiguration.onClose || onCloseClick\" [onBack]=\"groupMembersConfiguration.onBack || viewMembers\">\n </cometchat-group-members>\n</div>\n<cometchat-backdrop [backdropStyle]=\"backdropStyle\" *ngIf=\"confirmLeaveGroupModal\">\n <cometchat-confirm-dialog [title]=\"''\" [messageText]=\"confirmDialogMessage\" [cancelButtonText]=\"cancelButtonText\" [confirmButtonText]=\"leaveButtonText\" (cc-confirm-clicked)=\"onLeaveClick()\" (cc-cancel-clicked)=\"onCancelClick()\" [confirmDialogStyle]=\"leaveDialogStyle\">\n </cometchat-confirm-dialog>\n</cometchat-backdrop>\n<cometchat-backdrop [backdropStyle]=\"backdropStyle\" *ngIf=\"openTransferOwnershipModal\">\n <cometchat-transfer-ownership\n [transferOwnershipStyle]=\"transferOwnershipConfiguration.transferOwnershipStyle\"\n [onTransferOwnership]=\"transferOwnershipConfiguration.onTransferOwnership\"\n [titleAlignment]=\"transferOwnershipConfiguration.titleAlignment\"\n [listItemStyle]=\"transferOwnershipConfiguration.listItemStyle\"\n [avatarStyle]=\"transferOwnershipConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"transferOwnershipConfiguration.statusIndicatorStyle\"\n [loadingStateView]=\"transferOwnershipConfiguration.loadingStateView\"\n [loadingIconURL]=\"transferOwnershipConfiguration.loadingIconURL\"\n [errorStateView]=\"transferOwnershipConfiguration.errorStateView\"\n [emptyStateView]=\"transferOwnershipConfiguration.emptyStateView\"\n [onError]=\"transferOwnershipConfiguration.onError\"\n [hideSearch]=\"transferOwnershipConfiguration.hideSearch\"\n [searchIconURL]=\"transferOwnershipConfiguration.searchIconURL\"\n [hideSeparator]=\"transferOwnershipConfiguration.hideSeparator\"\n [closeButtonIconURL]=\"transferOwnershipConfiguration.closeButtonIconURL\"\n [options]=\"transferOwnershipConfiguration.options\"\n [disableUsersPresence]=\"transferOwnershipConfiguration.disableUsersPresence\"\n [subtitleView]=\"transferOwnershipConfiguration.subtitleView\"\n [group]=\"group\" [onClose]=\"transferOwnershipConfiguration.onClose || openTransferOwnership\">\n </cometchat-transfer-ownership>\n</cometchat-backdrop>", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-details__wrapper{padding:8px;border-radius:5px;height:100%}.cc-details__profile{margin-bottom:50px;height:8%}.cc-details__section-list{height:84%;width:100%;overflow-y:auto;overflow-x:hidden}.cc-details__header{display:flex;justify-content:center;align-items:center;margin-bottom:30px}.cc-details__close-button{position:absolute;right:20px}.cc-details__section{margin-bottom:32px}.cc-details__section-separator{margin-bottom:16px;padding-left:6px;height:5%}.cc-details__options-wrapper{list-style:none;padding:0;display:flex;flex-direction:column;gap:8px}.cc-details__option{display:flex;flex-direction:column;justify-content:space-evenly;min-height:50px}.cc-details__option-title{padding-bottom:12px;display:flex;align-items:center;justify-content:space-between}.cc-details__view{position:absolute;top:0;left:0;height:100%;width:100%;max-height:100%;overflow-y:auto;overflow-x:hidden;max-width:100%;z-index:1}.cc-details__section-list::-webkit-scrollbar{background:transparent;width:8px}.cc-details__section-list::-webkit-scrollbar-thumb{background:#e8e5e5;border-radius:8px}.cc-details__leavedialog,.cc-details__transferownership{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:-moz-fit-content;height:fit-content;width:100%;z-index:2}\n"] }]
|
|
643
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }]; }, propDecorators: { group: [{
|
|
644
|
+
type: Input
|
|
645
|
+
}], user: [{
|
|
646
|
+
type: Input
|
|
647
|
+
}], title: [{
|
|
648
|
+
type: Input
|
|
649
|
+
}], closeButtonIconURL: [{
|
|
650
|
+
type: Input
|
|
651
|
+
}], hideProfile: [{
|
|
652
|
+
type: Input
|
|
653
|
+
}], subtitleView: [{
|
|
654
|
+
type: Input
|
|
655
|
+
}], customProfileView: [{
|
|
656
|
+
type: Input
|
|
657
|
+
}], data: [{
|
|
658
|
+
type: Input
|
|
659
|
+
}], disableUsersPresence: [{
|
|
660
|
+
type: Input
|
|
661
|
+
}], privateGroupIcon: [{
|
|
662
|
+
type: Input
|
|
663
|
+
}], protectedGroupIcon: [{
|
|
664
|
+
type: Input
|
|
665
|
+
}], onError: [{
|
|
666
|
+
type: Input
|
|
667
|
+
}], onClose: [{
|
|
668
|
+
type: Input
|
|
669
|
+
}], leaveButtonText: [{
|
|
670
|
+
type: Input
|
|
671
|
+
}], cancelButtonText: [{
|
|
672
|
+
type: Input
|
|
673
|
+
}], confirmDialogMessage: [{
|
|
674
|
+
type: Input
|
|
675
|
+
}], addMembersConfiguration: [{
|
|
676
|
+
type: Input
|
|
677
|
+
}], bannedMembersConfiguration: [{
|
|
678
|
+
type: Input
|
|
679
|
+
}], groupMembersConfiguration: [{
|
|
680
|
+
type: Input
|
|
681
|
+
}], transferOwnershipConfiguration: [{
|
|
682
|
+
type: Input
|
|
683
|
+
}], leaveDialogStyle: [{
|
|
684
|
+
type: Input
|
|
685
|
+
}], statusIndicatorStyle: [{
|
|
686
|
+
type: Input
|
|
687
|
+
}], backdropStyle: [{
|
|
688
|
+
type: Input
|
|
689
|
+
}], avatarStyle: [{
|
|
690
|
+
type: Input
|
|
691
|
+
}], detailsStyle: [{
|
|
692
|
+
type: Input
|
|
693
|
+
}], listItemStyle: [{
|
|
694
|
+
type: Input
|
|
695
|
+
}] } });
|
|
696
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9Db21ldENoYXREZXRhaWxzL2NvbWV0Y2hhdC1kZXRhaWxzL2NvbWV0Y2hhdC1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0RGV0YWlscy9jb21ldGNoYXQtZGV0YWlscy9jb21ldGNoYXQtZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCx1QkFBdUIsR0FLeEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTywyQkFBMkIsQ0FBQTtBQUNsQyxPQUFPLEVBQUMsV0FBVyxFQUFtQixrQkFBa0IsRUFBQyxhQUFhLEdBQUcsTUFBTywyQkFBMkIsQ0FBQTtBQUMzRyxPQUFPLEVBQUcsdUJBQXVCLEVBQW1CLDBCQUEwQixFQUFxQixxQkFBcUIsRUFBRyxZQUFZLEVBQUUsWUFBWSxFQUFHLHlCQUF5QixFQUFxQixhQUFhLEVBQWtCLDhCQUE4QixHQUEwRCxNQUFNLHlCQUF5QixDQUFDO0FBQzdWLE9BQU8sRUFBaUIsVUFBVSxFQUFFLFFBQVEsRUFBa0Isb0JBQW9CLEVBQUUsdUJBQXVCLEVBQThGLG1CQUFtQixFQUErSSxNQUFNLDRCQUE0QixDQUFBO0FBQzdZLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7QUFFaEQ7Ozs7Ozs7O0VBUUU7QUFPRixNQUFNLE9BQU8seUJBQXlCO0lBd0lwQyxZQUFvQixHQUFxQixFQUFTLFlBQWtDO1FBQWhFLFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVMsaUJBQVksR0FBWixZQUFZLENBQXNCO1FBckkzRSxVQUFLLEdBQVcs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SztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBaUJHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFNRyxhQUFhO3NCQUFyQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBT0csWUFBWTtzQkFBcEIsS0FBSztnQkFPRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyAgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCAnQGNvbWV0Y2hhdC91aWtpdC1lbGVtZW50cydcbmltcG9ydCB7QXZhdGFyU3R5bGUsIENoYW5nZVNjb3BlU3R5bGUsQ29uZmlybURpYWxvZ1N0eWxlLExpc3RJdGVtU3R5bGUsIH0gZnJvbSAgJ0Bjb21ldGNoYXQvdWlraXQtZWxlbWVudHMnXG5pbXBvcnQgeyAgQWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24sIEFkZE1lbWJlcnNTdHlsZSwgQmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24sIEJhbm5lZE1lbWJlcnNTdHlsZSxDb21ldENoYXRVSUtpdFV0aWxpdHksICBEZXRhaWxzU3R5bGUsIERldGFpbHNVdGlscywgIEdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24sIEdyb3VwTWVtYmVyc1N0eWxlLCBTZWxlY3Rpb25Nb2RlLCBUaXRsZUFsaWdubWVudCwgVHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uLCBUcmFuc2Zlck93bmVyc2hpcFN0eWxlLCBVc2Vyc0NvbmZpZ3VyYXRpb24sIEJhc2VTdHlsZSwgfSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1zaGFyZWRcIjtcbmltcG9ydCB7Q29tZXRDaGF0VGhlbWUsIGZvbnRIZWxwZXIsIGxvY2FsaXplLENvbWV0Q2hhdE9wdGlvbiwgQ29tZXRDaGF0R3JvdXBFdmVudHMsIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLElHcm91cExlZnQsIElHcm91cE1lbWJlckFkZGVkLCBJR3JvdXBNZW1iZXJLaWNrZWRCYW5uZWQsIElHcm91cE1lbWJlclNjb3BlQ2hhbmdlZCxJTWVzc2FnZXMsIENvbWV0Q2hhdFVzZXJFdmVudHMsIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMsIENvbWV0Q2hhdENvbnZlcnNhdGlvbkV2ZW50cywgSUdyb3VwTWVtYmVySm9pbmVkLCBJT3duZXJzaGlwQ2hhbmdlZCwgQ29tZXRDaGF0RGV0YWlsc09wdGlvbiwgQ29tZXRDaGF0RGV0YWlsc1RlbXBsYXRlfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlcydcbmltcG9ydCB7IENvbWV0Q2hhdCB9IGZyb20gXCJAY29tZXRjaGF0LXByby9jaGF0XCI7XG5pbXBvcnQgeyBDb21ldENoYXRUaGVtZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0VGhlbWUuc2VydmljZVwiO1xuLyoqXG4qXG4qIENvbWV0Q2hhdERldGFpbHNDb21wb25lbnQgcmVuZGVycyBkZXRhaWxzIG9mIHVzZXIgb3IgZ3JvdXAuXG4qXG4qIEB2ZXJzaW9uIDEuMC4wXG4qIEBhdXRob3IgQ29tZXRDaGF0VGVhbVxuKiBAY29weXJpZ2h0IMKpIDIwMjIgQ29tZXRDaGF0IEluYy5cbipcbiovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY29tZXRjaGF0LWRldGFpbHNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9jb21ldGNoYXQtZGV0YWlscy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vY29tZXRjaGF0LWRldGFpbHMuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ldENoYXREZXRhaWxzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMgIHtcbiAgQElucHV0KCkgZ3JvdXAhOiBDb21ldENoYXQuR3JvdXA7XG4gIEBJbnB1dCgpIHVzZXIhOiBDb21ldENoYXQuVXNlcjtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9IGxvY2FsaXplKFwiREVUQUlMU1wiKTtcbiAgQElucHV0KCkgY2xvc2VCdXR0b25JY29uVVJMOiBzdHJpbmcgPSBcImFzc2V0cy9jbG9zZTJ4LnN2Z1wiO1xuICBASW5wdXQoKSBoaWRlUHJvZmlsZTpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHN1YnRpdGxlVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGN1c3RvbVByb2ZpbGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgZGF0YTpDb21ldENoYXREZXRhaWxzVGVtcGxhdGVbXSA9IFtdO1xuICBASW5wdXQoKSBkaXNhYmxlVXNlcnNQcmVzZW5jZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwcml2YXRlR3JvdXBJY29uOnN0cmluZyA9XCJhc3NldHMvUHJpdmF0ZS5zdmdcIjtcbiAgQElucHV0KCkgcHJvdGVjdGVkR3JvdXBJY29uOnN0cmluZyA9IFwiYXNzZXRzL0xvY2tlZC5zdmdcIjtcbiAgQElucHV0KCkgb25FcnJvcjooKGVycm9yOiBhbnkpID0+IHZvaWQpIHwgbnVsbCA9IChlcnJvcjphbnkpPT57XG4gICAgY29uc29sZS5sb2coZXJyb3IpXG4gIH1cbiAgQElucHV0KCkgb25DbG9zZSE6KCk9PnZvaWQ7XG4gIEBJbnB1dCgpIGxlYXZlQnV0dG9uVGV4dDogc3RyaW5nID0gbG9jYWxpemUoXCJUUkFOU0ZFUl9PV05FUlNISVBcIik7XG4gIEBJbnB1dCgpIGNhbmNlbEJ1dHRvblRleHQ6IHN0cmluZyA9IGxvY2FsaXplKFwiQ0FOQ0VMXCIpO1xuICBASW5wdXQoKSBjb25maXJtRGlhbG9nTWVzc2FnZTogc3RyaW5nID0gbG9jYWxpemUoXCJUUkFOU0ZFUl9DT05GSVJNXCIpO1xuICBASW5wdXQoKSBhZGRNZW1iZXJzQ29uZmlndXJhdGlvbjogQWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24gPSBuZXcgQWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBiYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbjogQmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24gPSBuZXcgQmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBncm91cE1lbWJlcnNDb25maWd1cmF0aW9uOiBHcm91cE1lbWJlcnNDb25maWd1cmF0aW9uID0gbmV3IEdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSB0cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb246IFRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbiA9IG5ldyBUcmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBsZWF2ZURpYWxvZ1N0eWxlOiBDb25maXJtRGlhbG9nU3R5bGUgPSB7XG4gICAgY29uZmlybUJ1dHRvbkJhY2tncm91bmQ6IFwiUkdCKDUxLCAxNTMsIDI1NSlcIixcbiAgICBjYW5jZWxCdXR0b25CYWNrZ3JvdW5kOiBcIlJHQkEoMjAsIDIwLCAyMCwgMC4wNilcIixcbiAgICBjb25maXJtQnV0dG9uVGV4dENvbG9yOiBcIndoaXRlXCIsXG4gICAgY29uZmlybUJ1dHRvblRleHRGb250OiBcIjYwMCAxNXB4IEludGVyXCIsXG4gICAgY2FuY2VsQnV0dG9uVGV4dENvbG9yOiBcImJsYWNrXCIsXG4gICAgY2FuY2VsQnV0dG9uVGV4dEZvbnQ6IFwiNjAwIDE1cHggSW50ZXJcIixcbiAgICB0aXRsZUZvbnQ6IFwiXCIsXG4gICAgdGl0bGVDb2xvcjogXCJcIixcbiAgICBtZXNzYWdlVGV4dEZvbnQ6IFwiNDAwIDEzcHggSW50ZXJcIixcbiAgICBtZXNzYWdlVGV4dENvbG9yOiBcIlJHQkEoMjAsIDIwLCAyMCwgMC41OClcIixcbiAgICBiYWNrZ3JvdW5kOiBcIndoaXRlXCIsXG4gICAgYm9yZGVyOlwiMXB4IHNvbGlkICNGMkYyRjJcIixcbiAgICBoZWlnaHQ6XCIyMjBweFwiLFxuICAgIHdpZHRoOlwiMzYwcHhcIlxuICB9XG4gIGJhY2tpY29udXJsID0gXCJhc3NldHMvYmFja2J1dHRvbi5zdmdcIlxuICBASW5wdXQoKSBzdGF0dXNJbmRpY2F0b3JTdHlsZTogYW55ID0ge1xuICAgIGhlaWdodDogXCIxMHB4XCIsXG4gICAgd2lkdGg6IFwiMTBweFwiLFxuICAgIGJvcmRlclJhZGl1czogXCIxNnB4XCIsXG4gICAgYm9yZGVyOlwiXCJcbiAgfTtcbiAgQElucHV0KCkgYmFja2Ryb3BTdHlsZSA6QmFzZVN0eWxlID0ge1xuICAgIGhlaWdodDpcIjEwMCVcIixcbiAgICB3aWR0aDpcIjEwMCVcIixcbiAgICBiYWNrZ3JvdW5kOlwicmdiYSgwLCAwLCAwLCAwLjUpXCJcbiAgfVxuICBASW5wdXQoKSBhdmF0YXJTdHlsZTogQXZhdGFyU3R5bGUgPSB7XG4gICAgYm9yZGVyUmFkaXVzOiBcIjE2cHhcIixcbiAgICB3aWR0aDogXCIyOHB4XCIsXG4gICAgaGVpZ2h0OiBcIjI4cHhcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuXG4gIH07XG4gIEBJbnB1dCgpIGRldGFpbHNTdHlsZTogRGV0YWlsc1N0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJvcmRlcjogXCJcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiXCIsXG4gICAgcGFkZGluZzpcIjAgMTAwcHhcIlxuICB9O1xuICBASW5wdXQoKSBsaXN0SXRlbVN0eWxlOiBMaXN0SXRlbVN0eWxlID0ge1xuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGJhY2tncm91bmQ6IFwiXCIsXG4gICAgYWN0aXZlQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJvcmRlclJhZGl1czogXCJncmV5XCIsXG4gICAgdGl0bGVGb250OiBcIjYwMCAxNXB4IEludGVyXCIsXG4gICAgdGl0bGVDb2xvcjogXCJibGFja1wiLFxuICAgIGJvcmRlcjogXCJcIixcbiAgICBob3ZlckJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICBzZXBhcmF0b3JDb2xvcjogXCJyZ2IoMjIyIDIyMiAyMjIgLyA0NiUpXCJcbiAgfTtcblxuXG4gIGxlYXZlR3JvdXBUZXh0OnN0cmluZyA9IGxvY2FsaXplKFwiTEVBVkVfR1JPVVBcIilcbiAgbGVhdmVHcm91cE1lc3NhZ2U6c3RyaW5nID0gbG9jYWxpemUoXCJMRUFWRV9DT05GSVJNXCIpXG4gIHRyYW5zZmVyVGV4dDpzdHJpbmcgPSBsb2NhbGl6ZShcIlRSQU5TRkVSX09XTkVSU0hJUFwiKVxuICB0cmFuc2ZlckNvbmZpcm06c3RyaW5nID0gbG9jYWxpemUoXCJUUkFOU0ZFUl9DT05GSVJNXCIpXG4gIGRlZmF1bHRUZW1wbGF0ZTpDb21ldENoYXREZXRhaWxzVGVtcGxhdGVbXSA9IFtdXG4gIHB1YmxpYyBsb2dnZWRJblVzZXI6Q29tZXRDaGF0LlVzZXIgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIG9wZW5WaWV3TWVtYmVyc1BhZ2U6Ym9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgb3BlbkJhbm5lZE1lbWJlcnNQYWdlOmJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG9wZW5BZGRNZW1iZXJzUGFnZTpib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBjb25maXJtTGVhdmVHcm91cE1vZGFsOmJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG9wZW5UcmFuc2Zlck93bmVyc2hpcE1vZGFsOmJvb2xlYW4gPSBmYWxzZVxuICBzZWxlY3Rpb25tb2RlRW51bTogIFNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLm11bHRpcGxlO1xuICBjY0dyb3VwTWVtYmVyQWRkZWQhOlN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cE1lbWJlckpvaW5lZCE6U3Vic2NyaXB0aW9uO1xuICBjY0dyb3VwTWVtYmVyS2lja2VkITpTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJCYW5uZWQhOlN1YnNjcmlwdGlvbjtcbiAgY2NPd25lcnNoaXBDaGFuZ2VkITpTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBzdGF0dXNDb2xvcjogYW55ID0ge1xuICAgIHByaXZhdGU6IFwiXCIsXG4gICAgcGFzc3dvcmQ6IFwiI0Y3QTUwMFwiLFxuICAgIHB1YmxpYzogXCJcIlxuICB9XG4gIGNsb3NlQnV0dG9uU3R5bGU6YW55ID17XG4gICAgaGVpZ2h0OlwiMjRweFwiLFxuICAgIHdpZHRoOlwiMjRweFwiLFxuICAgIGJvcmRlcjpcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6XCIwXCIsXG4gICAgYmFja2dyb3VuZDpcInRyYW5zcGFyZW50XCIsXG4gICAgYnV0dG9uSWNvblRpbnQ6dGhpcy5kZXRhaWxzU3R5bGUuY2xvc2VCdXR0b25JY29uVGludCB8fCB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKVxuICB9XG4gIGJ1dHRvblN0eWxlOmFueSA9e1xuICAgIGhlaWdodDpcIjEwMCVcIixcbiAgICB3aWR0aDpcIjEwMCVcIixcbiAgICBib3JkZXI6XCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOlwiMFwiLFxuICAgIGJhY2tncm91bmQ6XCJ0cmFuc3BhcmVudFwiLFxuICAgIGJ1dHRvblRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCkgfHwgXCJyZ2JhKDUxLCAxNTMsIDI1NSlcIixcbiAgICBidXR0b25UZXh0Rm9udDogXCI1MDAgMTZweCBJbnRlclwiXG4gIH1cbiAgZGl2aWRlclN0eWxlOmFueSA9IHtcbiAgICBiYWNrZ3JvdW5kOlwicmdiKDIyMiAyMjIgMjIyIC8gNDYlKVwiLFxuICAgIGhlaWdodDpcIjFweFwiLFxuICAgIHdpZHRoOlwiMTAwJVwiXG4gIH1cblxuLy9cbiAgZ2V0VGl0bGVTdHlsZSAoKXtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dEZvbnQ6IHRoaXMuZGV0YWlsc1N0eWxlLnRpdGxlVGV4dEZvbnQgfHwgZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgICB0ZXh0Q29sb3I6IHRoaXMuZGV0YWlsc1N0eWxlLnRpdGxlVGV4dENvbG9yIHx8IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KClcbiAgICB9XG4gIH1cbiAgZ2V0Q3VzdG9tT3B0aW9uVmlldyhvcHRpb246Q29tZXRDaGF0RGV0YWlsc09wdGlvbil7XG4gIHJldHVybiBvcHRpb24/LmN1c3RvbVZpZXdcbiAgfVxuICBwdWJsaWMgc3VidGl0bGVUZXh0OnN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyB1c2VyTGlzdGVuZXJJZCA9IFwidXNlcmxpc3RfXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6Q2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSB0aGVtZVNlcnZpY2U6Q29tZXRDaGF0VGhlbWVTZXJ2aWNlKXt9XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZihjaGFuZ2VzW1widXNlclwiXSB8fCBjaGFuZ2VzW1wiZ3JvdXBcIl0pe1xuICAgICAgaWYodGhpcy5sb2dnZWRJblVzZXIpe1xuICAgICAgIHRoaXMuZ2V0VGVtcGxhdGUoKVxuICAgICAgfVxuICAgICAgZWxzZXtcbiAgICAgICAgQ29tZXRDaGF0LmdldExvZ2dlZGluVXNlcigpLnRoZW4oKHVzZXI6Q29tZXRDaGF0LlVzZXIgfCBudWxsKT0+e1xuICAgICAgICAgIHRoaXMubG9nZ2VkSW5Vc2VyID0gdXNlciBhcyBDb21ldENoYXQuVXNlclxuICAgICAgICAgIHRoaXMuZ2V0VGVtcGxhdGUoKVxuICAgICAgICB9KS5jYXRjaCgoZXJyb3I6Q29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbik9PntcbiAgICAgICAgICBpZih0aGlzLm9uRXJyb3Ipe1xuICAgICAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0VGVtcGxhdGUoKXtcbiAgICBpZih0aGlzLmRhdGEgJiYgdGhpcy5kYXRhPy5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlID0gdGhpcy5kYXRhXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICB0aGlzLmRlZmF1bHRUZW1wbGF0ZSA9IERldGFpbHNVdGlscy5nZXREZWZhdWx0RGV0YWlsc1RlbXBsYXRlKHRoaXMubG9nZ2VkSW5Vc2VyLHRoaXMudXNlcix0aGlzLmdyb3VwLHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lKVxuXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG4gIHJlbW92ZUxpc3RlbmVyKCl7XG4gICAgQ29tZXRDaGF0LnJlbW92ZVVzZXJMaXN0ZW5lcih0aGlzLnVzZXJMaXN0ZW5lcklkKVxuICB9XG4gIG5nT25EZXN0cm95KCl7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcigpO1xuICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgIHRoaXMuZGVmYXVsdFRlbXBsYXRlID0gW107XG4gICBpZih0aGlzLm9uQ2xvc2Upe1xuICAgIHRoaXMub25DbG9zZSgpXG4gICB9XG4gdGhpcy51bnN1YnNjcmliZVRvRXZlbnRzKClcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0VGhlbWVTdHlsZSgpXG4gICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cygpXG4gICAgdGhpcy5zdGF0dXNDb2xvci5vbmxpbmUgPSB0aGlzLmRldGFpbHNTdHlsZS5vbmxpbmVTdGF0dXNDb2xvciB8fCB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFN1Y2Nlc3MoKVxuICAgIHRoaXMuYXR0YWNoTGlzdGVuZXJzKClcbiAgICB0aGlzLnVwZGF0ZVN1YnRpdGxlKClcbiAgfVxuXG4gIHN1YnNjcmliZVRvRXZlbnRzKCl7XG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQWRkZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTWVtYmVyQWRkZWQuc3Vic2NyaWJlKChpdGVtOklHcm91cE1lbWJlckFkZGVkKT0+eyB0aGlzLmdyb3VwID0gaXRlbT8udXNlckFkZGVkSW4hO1xuICAgICAgdGhpcy5ncm91cCA9IGl0ZW0/LnVzZXJBZGRlZEluIVxuICAgICAgdGhpcy5vcGVuQWRkTWVtYmVyc1BhZ2UgPSBmYWxzZTtcbiAgICAgIHRoaXMudXBkYXRlU3VidGl0bGUoKVxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfSlcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJKb2luZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTWVtYmVySm9pbmVkLnN1YnNjcmliZSgoaXRlbTpJR3JvdXBNZW1iZXJKb2luZWQpPT57XG4gICAgICB0aGlzLmdyb3VwID0gaXRlbT8uam9pbmVkR3JvdXA7XG4gICAgICB0aGlzLnVwZGF0ZVN1YnRpdGxlKClcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgIH0pO1xuICAgIHRoaXMuY2NHcm91cE1lbWJlcktpY2tlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBNZW1iZXJLaWNrZWQuc3Vic2NyaWJlKChpdGVtOklHcm91cE1lbWJlcktpY2tlZEJhbm5lZCk9PntcbiAgICAgIHRoaXMuZ3JvdXAgPSBpdGVtPy5raWNrZWRGcm9tITtcbiAgICAgIHRoaXMudXBkYXRlU3VidGl0bGUoKVxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfSk7XG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQmFubmVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cE1lbWJlckJhbm5lZC5zdWJzY3JpYmUoKGl0ZW06SUdyb3VwTWVtYmVyS2lja2VkQmFubmVkKT0+e1xuICAgICAgdGhpcy5ncm91cCA9IGl0ZW0/LmtpY2tlZEZyb20hO1xuICAgICAgdGhpcy51cGRhdGVTdWJ0aXRsZSgpXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICB9KTtcbiAgICB0aGlzLmNjT3duZXJzaGlwQ2hhbmdlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjT3duZXJzaGlwQ2hhbmdlZC5zdWJzY3JpYmUoKGl0ZW06SU93bmVyc2hpcENoYW5nZWQpPT57XG4gICAgICB0aGlzLmdyb3VwID0gaXRlbT8uZ3JvdXAhO1xuICAgICAgdGhpcy51cGRhdGVTdWJ0aXRsZSgpO1xuICAgICAgdGhpcy5jb25maXJtTGVhdmVHcm91cE1vZGFsID0gZmFsc2U7XG4gICAgICB0aGlzLm9wZW5UcmFuc2Zlck93bmVyc2hpcE1vZGFsID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cbiAgdW5zdWJzY3JpYmVUb0V2ZW50cygpe1xuICAgIHRoaXMuY2NHcm91cE1lbWJlckFkZGVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cE1lbWJlckpvaW5lZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJLaWNrZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQmFubmVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NPd25lcnNoaXBDaGFuZ2VkPy51bnN1YnNjcmliZSgpO1xuICB9XG4gIGNoZWNrU3RhdHVzVHlwZSA9ICgpPT4ge1xuICAgIHJldHVybiAgIHRoaXMudXNlciAmJiAhdGhpcy5kaXNhYmxlVXNlcnNQcmVzZW5jZSA/IHRoaXMuc3RhdHVzQ29sb3JbdGhpcy51c2VyPy5nZXRTdGF0dXMoKV0gOiB0aGlzLnN0YXR1c0NvbG9yW3RoaXMuZ3JvdXA/LmdldFR5cGUoKV1cbiAgfVxuICB1cGRhdGVTdWJ0aXRsZSgpIHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuZ3JvdXA/LmdldE1lbWJlcnNDb3VudCgpO1xuICAgIGNvbnN0IG1lbWJlcnNUZXh0ID0gbG9jYWxpemUoY291bnQgPiAxID8gXCJNRU1CRVJTXCIgOiBcIk1FTUJFUlwiKTtcbiAgICB0aGlzLnN1YnRpdGxlVGV4dCA9IHRoaXMudXNlciA/IHRoaXMudXNlci5nZXRTdGF0dXMoKSA6IGAke2NvdW50fSAke21lbWJlcnNUZXh0fWA7XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIGdldEJ1dHRvblN0eWxlKG9wdGlvbjpDb21ldENoYXREZXRhaWxzT3B0aW9uKXtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OlwiMTAwJVwiLFxuICAgICAgd2lkdGg6XCIxMDAlXCIsXG4gICAgICBib3JkZXI6XCJub25lXCIsXG4gICAgICBib3JkZXJSYWRpdXM6XCIwXCIsXG4gICAgICBidXR0b25UZXh0Rm9udDpvcHRpb24/LnRpdGxlRm9udCxcbiAgICAgIGJ1dHRvblRleHRDb2xvcjpvcHRpb24/LnRpdGxlQ29sb3IsXG4gICAgICBiYWNrZ3JvdW5kOm9wdGlvbj8uYmFja2dyb3VuZENvbG9yIHx8IFwidHJhbnNwYXJlbnRcIlxuICAgIH1cbiAgfVxuICBjaGVja0dyb3VwVHlwZSgpOiBzdHJpbmcge1xuICAgIGxldCBpbWFnZTogc3RyaW5nID0gXCJcIjtcbiAgICBpZiAodGhpcy5ncm91cCkge1xuICAgICAgc3dpdGNoICh0aGlzLmdyb3VwPy5nZXRUeXBlKCkpIHtcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5Hcm91cFR5cGVzLnBhc3N3b3JkOlxuICAgICAgICAgIGltYWdlID0gdGhpcy5wcm90ZWN0ZWRHcm91cEljb247XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuR3JvdXBUeXBlcy5wcml2YXRlOlxuICAgICAgICAgIGltYWdlID0gdGhpcy5wcml2YXRlR3JvdXBJY29uO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGltYWdlID0gXCJcIlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW1hZ2VcbiAgfVxuICB1cGRhdGVVc2VyU3RhdHVzKHVzZXI6Q29tZXRDaGF0LlVzZXIpe1xuICAgIGlmICh0aGlzLnVzZXIgJiYgdGhpcy51c2VyLmdldFVpZCgpICYmIHRoaXMudXNlci5nZXRVaWQoKSA9PT0gdXNlci5nZXRVaWQoKSkge1xuICAgICAgdGhpcy51c2VyLnNldFN0YXR1cyh1c2VyLmdldFN0YXR1cygpKTtcbiAgICAgIHRoaXMudXBkYXRlU3VidGl0bGUoKVxuICAgIH1cbiAgICAvLyB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgYXR0YWNoTGlzdGVuZXJzKCkge1xuICAgIHRyeSB7XG4gICAgICBpZighdGhpcy5kaXNhYmxlVXNlcnNQcmVzZW5jZSl7XG4gICAgICAgIENvbWV0Q2hhdC5hZGRVc2VyTGlzdGVuZXIoXG4gICAgICAgICAgdGhpcy51c2VyTGlzdGVuZXJJZCxcbiAgICAgICAgICBuZXcgQ29tZXRDaGF0LlVzZXJMaXN0ZW5lcih7XG4gICAgICAgICAgICBvblVzZXJPbmxpbmU6IChvbmxpbmVVc2VyOiBDb21ldENoYXQuVXNlcikgPT4ge1xuICAgICAgICAgICAgICAvKiB3aGVuIHNvbWV1c2VyL2ZyaWVuZCBjb21lcyBvbmxpbmUsIHVzZXIgd2lsbCBiZSByZWNlaXZlZCBoZXJlICovXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlVXNlclN0YXR1cyhvbmxpbmVVc2VyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblVzZXJPZmZsaW5lOiAob2ZmbGluZVVzZXI6IENvbWV0Q2hhdC5Vc2VyKSA9PiB7XG4gICAgICAgICAgICAgIC8qIHdoZW4gc29tZXVzZXIvZnJpZW5kIHdlbnQgb2ZmbGluZSwgdXNlciB3aWxsIGJlIHJlY2VpdmVkIGhlcmUgKi9cbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVVc2VyU3RhdHVzKCBvZmZsaW5lVXNlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6YW55KSB7XG5jb25zb2xlLmxvZyhlcnJvcilcbiAgICB9XG4gIH1cbiAgZ2V0U2VjdGlvbkhlYWRlclN0eWxlKHRlbXBsYXRlOkNvbWV0Q2hhdERldGFpbHNUZW1wbGF0ZSl7XG4gICAgcmV0dXJuICB7XG4gICAgICB0ZXh0Rm9udDp0ZW1wbGF0ZS50aXRsZUZvbnQsXG4gICAgICB0ZXh0Q29sb3I6dGVtcGxhdGUudGl0bGVDb2xvclxuICAgIH1cbiAgfVxuICBvbk9wdGlvbkNsaWNrKG9wdGlvbjogQ29tZXRDaGF0RGV0YWlsc09wdGlvbikge1xuICAgIGNvbnN0IHsgb25DbGljaywgaWQgfSA9IG9wdGlvbjtcbiAgICBpZiAob25DbGljaykge1xuICAgICAgb25DbGljayh0aGlzLnVzZXIgPz8gdGhpcy5ncm91cCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAoaWQpIHtcbiAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuVXNlck9wdGlvbnMudmlld1Byb2ZpbGU6XG4gICAgICAgIGlmICh0aGlzLnVzZXI/LmdldExpbmsoKSkge1xuICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGhpcy51c2VyLmdldExpbmsoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuVXNlck9wdGlvbnMuYmxvY2s6XG4gICAgICAgIHRoaXMuYmxvY2tVc2VyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5Vc2VyT3B0aW9ucy51bmJsb2NrOlxuICAgICAgICB0aGlzLnVuQmxvY2tVc2VyKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5Hcm91cE9wdGlvbnMudmlld01lbWJlcnM6XG4gICAgICAgIHRoaXMudmlld01lbWJlcnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLkdyb3VwT3B0aW9ucy5hZGRNZW1iZXJzOlxuICAgICAgICB0aGlzLmFkZE1lbWJlcnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLkdyb3VwT3B0aW9ucy5iYW5uZWRNZW1iZXJzOlxuICAgICAgICB0aGlzLmJhbm5lZE1lbWJlcnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLkdyb3VwT3B0aW9ucy5sZWF2ZTpcbiAgICAgICAgdGhpcy5sZWF2ZUdyb3VwKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5Hcm91cE9wdGlvbnMuZGVsZXRlOlxuICAgICAgICB0aGlzLmRlbGV0ZUdyb3VwKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIG9uTGVhdmVDbGljaygpe1xuICAgIGlmKHRoaXMuZ3JvdXAuZ2V0T3duZXIoKSA9PSB0aGlzLmxvZ2dlZEluVXNlcj8uZ2V0VWlkKCkpe1xuICAgICAgdGhpcy5vcGVuVHJhbnNmZXJPd25lcnNoaXBNb2RhbCA9IHRydWU7XG4gICAgICB0aGlzLmNvbmZpcm1MZWF2ZUdyb3VwTW9kYWwgPSBmYWxzZVxuICAgICB9XG4gICAgIGVsc2V7XG4gICAgICBDb21ldENoYXQubGVhdmVHcm91cCh0aGlzLmdyb3VwLmdldEd1aWQoKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTphbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmdyb3VwLnNldE1lbWJlcnNDb3VudCh0aGlzLmdyb3VwLmdldE1lbWJlcnNDb3VudCgpIC0xKVxuICAgICAgICAgIHRoaXMuZ3JvdXAuc2V0SGFzSm9pbmVkKGZhbHNlKVxuICAgICAgICAgIHRoaXMudXBkYXRlU3VidGl0bGUoKVxuICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB0aGlzLm9wZW5UcmFuc2Zlck93bmVyc2hpcE1vZGFsID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jb25maXJtTGVhdmVHcm91cE1vZGFsID0gZmFsc2U7XG4gICAgICAgICAgaWYodGhpcy5vbkNsb3NlKXtcbiAgICAgICAgICAgIHRoaXMub25DbG9zZSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBMZWZ0Lm5leHQoe1xuICAgICAgICAgICAgdXNlckxlZnQ6dGhpcy5sb2dnZWRJblVzZXIhLFxuICAgICAgICAgICAgbGVmdEdyb3VwOnRoaXMuZ3JvdXAsXG4gICAgICAgICAgICBtZXNzYWdlOnRoaXMuY3JlYXRlVXNlckxlZnRBY3Rpb24odGhpcy5sb2dnZWRJblVzZXIhLENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkxFRlQpXG5cbiAgICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6YW55KT0+e1xuICAgICAgICBpZih0aGlzLm9uRXJyb3Ipe3RoaXMub25FcnJvcihlcnJvcil9XG4gICAgICB9KTtcbiAgICAgfVxuICB9XG4gIGNyZWF0ZUFjdGlvbk1lc3NhZ2UoYWN0aW9uT246Q29tZXRDaGF0Lkdyb3VwTWVtYmVyLGFjdGlvbjpzdHJpbmcpe1xuICAgIGxldCBhY3Rpb25NZXNzYWdlOkNvbWV0Q2hhdC5BY3Rpb24gID0gbmV3IENvbWV0Q2hhdC5BY3Rpb24odGhpcy5ncm91cC5nZXRHdWlkKCksQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmdyb3VwTWVtYmVyLENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUuZ3JvdXAsQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmFjdGlvbiBhcyBhbnkpXG4gICAgYWN0aW9uTWVzc2FnZS5zZXRBY3Rpb24oYWN0aW9uKVxuICAgIGFjdGlvbk1lc3NhZ2Uuc2V0QWN0aW9uQnkodGhpcy5sb2dnZWRJblVzZXIhKVxuICAgIGFjdGlvbk1lc3NhZ2Uuc2V0QWN0aW9uRm9yKHRoaXMuZ3JvdXApXG4gICAgYWN0aW9uTWVzc2FnZS5zZXRBY3Rpb25PbihhY3Rpb25PbilcbiAgICBhY3Rpb25NZXNzYWdlLnNldFJlY2VpdmVyKHRoaXMuZ3JvdXApXG4gICAgYWN0aW9uTWVzc2FnZS5zZXRTZW5kZXIodGhpcy5sb2dnZWRJblVzZXIhKVxuICAgIGFjdGlvbk1lc3NhZ2Uuc2V0Q29udmVyc2F0aW9uSWQoXCJncm91cF9cIisgdGhpcy5ncm91cC5nZXRHdWlkKCkpXG4gICAgYWN0aW9uTWVzc2FnZS5zZXRNdWlkKENvbWV0Q2hhdFVJS2l0VXRpbGl0eS5JRCgpKVxuICAgIGFjdGlvbk1lc3NhZ2Uuc2V0TWVzc2FnZShgJHt0aGlzLmxvZ2dlZEluVXNlcj8uZ2V0TmFtZSgpfSAke2FjdGlvbn0gJHthY3Rpb25Pbi5nZXRVaWQoKX1gKVxuICAgIGFjdGlvbk1lc3NhZ2Uuc2V0U2VudEF0KENvbWV0Q2hhdFVJS2l0VXRpbGl0eS5nZXRVbml4VGltZXN0YW1wKCkpXG4gICAgYWN0aW9uTWVzc2FnZS5zZXROZXdTY29wZShhY3Rpb25Pbi5nZXRTY29wZSgpKVxuXG4gICByZXR1cm4gYWN0aW9uTWVzc2FnZVxuICB9XG4gIGNyZWF0ZVVzZXJMZWZ0QWN0aW9uKGFjdGlvbk9uOkNvbWV0Q2hhdC5Vc2VyLGFjdGlvbjpzdHJpbmcpe1xuICAgIGxldCBhY3Rpb25NZXNzYWdlOkNvbWV0Q2hhdC5BY3Rpb24gID0gbmV3IENvbWV0Q2hhdC5BY3Rpb24odGhpcy5ncm91cC5nZXRHdWlkKCksQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmdyb3VwTWVtYmVyLENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUuZ3JvdXAsQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmFjdGlvbiBhcyBhbnkpXG4gICAgYWN0aW9uTWVzc2FnZS5zZXRBY3Rpb24oYWN0aW9uKVxuICAgIGFjdGlvbk1lc3NhZ2Uuc2V0QWN0aW9uQnkodGhpcy5sb2dnZWRJblVzZXIhKVxuICAgIGFjdGlvbk1lc3NhZ2Uuc2V0QWN0aW9uRm9yKHRoaXMuZ3JvdXApXG4gICAgYWN0aW9uTWVzc2FnZS5zZXRBY3Rpb25PbihhY3Rpb25PbilcbiAgICBhY3Rpb25NZXNzYWdlLnNldFJlY2VpdmVyKHRoaXMuZ3JvdXApXG4gICAgYWN0aW9uTWVzc2FnZS5zZXRTZW5kZXIodGhpcy5sb2dnZWRJblVzZXIhKVxuICAgIGFjdGlvbk1lc3NhZ2Uuc2V0Q29udmVyc2F0aW9uSWQoXCJncm91cF9cIisgdGhpcy5ncm91cC5nZXRHdWlkKCkpXG4gICAgYWN0aW9uTWVzc2FnZS5zZXRNdWlkKENvbWV0Q2hhdFVJS2l0VXRpbGl0eS5JRCgpKVxuICAgIGFjdGlvbk1lc3NhZ2Uuc2V0TWVzc2FnZShgJHt0aGlzLmxvZ2dlZEluVXNlcj8uZ2V0TmFtZSgpfSAke2FjdGlvbn0gJHthY3Rpb25Pbi5nZXRVaWQoKX1gKVxuICAgIGFjdGlvbk1lc3NhZ2Uuc2V0U2VudEF0KENvbWV0Q2hhdFVJS2l0VXRpbGl0eS5nZXRVbml4VGltZXN0YW1wKCkpO1xuICAgIHJldHVybiBhY3Rpb25NZXNzYWdlXG4gIH1cbiAgb25DbG9zZUNsaWNrID0oKT0+e1xuICAgIGlmKHRoaXMub25DbG9zZSl7XG4gICAgICB0aGlzLm9uQ2xvc2UoKVxuICAgIH1cblxuICB9XG4gIG9uQ2FuY2VsQ2xpY2soKXtcbiAgICB0aGlzLmNvbmZpcm1MZWF2ZUdyb3VwTW9kYWwgPSBmYWxzZTtcbiAgfVxuICAgYmxvY2tVc2VyKCl7XG4gICAgLy8gYmxvY2sgdXNlclxuICAgIGlmKHRoaXMudXNlciAmJiAhdGhpcy51c2VyLmdldEJsb2NrZWRCeU1lKCkpe1xuICAgICAgQ29tZXRDaGF0LmJsb2NrVXNlcnMoW3RoaXMudXNlci5nZXRVaWQoKV0pLnRoZW4oKCk9PntcbiAgICAgICAgdGhpcy51c2VyLnNldEJsb2NrZWRCeU1lKHRydWUpXG4gICAgICAgIENvbWV0Q2hhdFVzZXJFdmVudHMuY2NVc2VyQmxvY2tlZFxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlKCk7XG4gICAgICAgIGlmKHRoaXMub25DbG9zZSl7XG4gICAgICAgICAgdGhpcy5vbkNsb3NlKClcbiAgICAgICAgfVxuXG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjphbnkpPT57XG4gICAgICAgIGlmKHRoaXMub25FcnJvcil7XG4gICAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgfVxuICAgfVxuICAgdW5CbG9ja1VzZXIoKXtcbi8vIHVuYmxvY2sgdXNlclxuaWYodGhpcy51c2VyICYmIHRoaXMudXNlci5nZXRCbG9ja2VkQnlNZSgpKXtcbiAgQ29tZXRDaGF0LnVuYmxvY2tVc2VycyhbdGhpcy51c2VyLmdldFVpZCgpXSkudGhlbigoKT0+e1xuICAgIHRoaXMudXNlci5zZXRCbG9ja2VkQnlNZShmYWxzZSlcbiAgICBDb21ldENoYXRVc2VyRXZlbnRzLmNjVXNlclVuYmxvY2tlZC5uZXh0KHRoaXMudXNlcilcbiAgICB0aGlzLmdldFRlbXBsYXRlKClcbiAgfSlcbiAgLmNhdGNoKChlcnJvcjphbnkpPT57XG4gICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgIHRoaXMub25FcnJvcihlcnJvcilcbiAgICB9XG4gIH0pXG5cbn1cbiAgIH1cbiAgIHZpZXdNZW1iZXJzID0oKT0+e1xuIHRoaXMub3BlblZpZXdNZW1iZXJzUGFnZSA9ICF0aGlzLm9wZW5WaWV3TWVtYmVyc1BhZ2VcbiB0aGlzLm9wZW5CYW5uZWRNZW1iZXJzUGFnZSA9IGZhbHNlXG4gdGhpcy5vcGVuQWRkTWVtYmVyc1BhZ2UgPSBmYWxzZVxuICAgfVxuICAgYWRkTWVtYmVycyA9KCk9PntcbiAgICB0aGlzLm9wZW5BZGRNZW1iZXJzUGFnZSA9ICF0aGlzLm9wZW5BZGRNZW1iZXJzUGFnZVxuICAgIHRoaXMub3BlbkJhbm5lZE1lbWJlcnNQYWdlID0gZmFsc2VcbiAgICB0aGlzLm9wZW5WaWV3TWVtYmVyc1BhZ2UgPSBmYWxzZVxuICAgfVxuICAgYmFubmVkTWVtYmVycyA9KCk9PntcbiAgICB0aGlzLm9wZW5BZGRNZW1iZXJzUGFnZSA9IGZhbHNlXG4gICAgdGhpcy5vcGVuVmlld01lbWJlcnNQYWdlID0gZmFsc2VcbiAgICB0aGlzLm9wZW5CYW5uZWRNZW1iZXJzUGFnZSA9ICF0aGlzLm9wZW5CYW5uZWRNZW1iZXJzUGFnZVxuICAgfVxuICAgbGVhdmVHcm91cCgpe1xuICAgIGlmKHRoaXMuZ3JvdXAuZ2V0T3duZXIoKSA9PSB0aGlzLmxvZ2dlZEluVXNlcj8uZ2V0VWlkKCkpe1xuICB0aGlzLmxlYXZlQnV0dG9uVGV4dCA9IHRoaXMudHJhbnNmZXJUZXh0XG4gIHRoaXMuY29uZmlybURpYWxvZ01lc3NhZ2UgPSB0aGlzLnRyYW5zZmVyQ29uZmlybVxuICAgICB9XG4gICAgIGVsc2V7XG4gICAgICB0aGlzLmxlYXZlQnV0dG9uVGV4dCA9IHRoaXMubGVhdmVHcm91cFRleHRcbiAgICAgIHRoaXMuY29uZmlybURpYWxvZ01lc3NhZ2UgPSB0aGlzLmxlYXZlR3JvdXBNZXNzYWdlXG4gICAgIH1cbiAgICB0aGlzLmNvbmZpcm1MZWF2ZUdyb3VwTW9kYWwgPSB0cnVlXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICB9XG4gICBkZWxldGVHcm91cCgpe1xuQ29tZXRDaGF0LmRlbGV0ZUdyb3VwKHRoaXMuZ3JvdXA/LmdldEd1aWQoKSkudGhlbigoKT0+e1xuICBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwRGVsZXRlZC5uZXh0KHRoaXMuZ3JvdXApXG4gIGlmKHRoaXMub25DbG9zZSl7XG4gICAgdGhpcy5vbkNsb3NlKClcbiAgfVxufSlcbi5jYXRjaCgoZXJyb3I6YW55KT0+e1xuICBpZih0aGlzLm9uRXJyb3Ipe1xuICAgIHRoaXMub25FcnJvcihlcnJvcilcbiAgfVxufSlcbiAgIH1cbiAgIG9wZW5UcmFuc2Zlck93bmVyc2hpcCA9ICgpPT57XG4gICAgIHRoaXMub3BlblRyYW5zZmVyT3duZXJzaGlwTW9kYWwgPSAhdGhpcy5vcGVuVHJhbnNmZXJPd25lcnNoaXBNb2RhbDtcbiAgICAgdGhpcy5jb25maXJtTGVhdmVHcm91cE1vZGFsID0gZmFsc2U7XG4gICB9XG4gICBvbkNsb3NlRGV0YWlscygpe1xuICAgICBpZih0aGlzLm9uQ2xvc2Upe1xuICAgICAgIHRoaXMub25DbG9zZSgpXG4gICAgIH1cbiAgIH1cbiAgc3VidGl0bGVTdHlsZSA9ICgpPT57XG4gaWYodGhpcy51c2VyICYmIHRoaXMudXNlci5nZXRTdGF0dXMoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy51c2VyU3RhdHVzVHlwZS5vbmxpbmUpe1xuICByZXR1cm57XG4gICAgdGV4dEZvbnQ6dGhpcy5kZXRhaWxzU3R5bGUuc3VidGl0bGVUZXh0Rm9udCxcbiAgICB0ZXh0Q29sb3I6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KClcbiAgfVxuIH1cbiBlbHNle1xuICByZXR1cm57XG4gICAgdGV4dEZvbnQ6dGhpcy5kZXRhaWxzU3R5bGUuc3VidGl0bGVUZXh0Rm9udCxcbiAgICB0ZXh0Q29sb3I6dGhpcy5kZXRhaWxzU3R5bGUuc3VidGl0bGVUZXh0Q29sb3JcbiAgfVxuIH1cbiAgfVxuICAgIC8qKlxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuR3JvdXB9IGdyb3VwXG4gICAqL1xuICAgICBnZXRHcm91cEljb24gPSAoZ3JvdXA6IENvbWV0Q2hhdC5Hcm91cCkgPT4ge1xuICAgICAgbGV0IHN0YXR1cztcbiAgICAgIGlmIChncm91cCkge1xuICAgICAgICBzd2l0Y2ggKGdyb3VwLmdldFR5cGUoKSkge1xuICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuR3JvdXBUeXBlcy5wYXNzd29yZDpcbiAgICAgICAgICAgIHN0YXR1cyA9IHRoaXMucHJvdGVjdGVkR3JvdXBJY29uO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5Hcm91cFR5cGVzLnByaXZhdGU6XG4gICAgICAgICAgICBzdGF0dXMgPSB0aGlzLnByaXZhdGVHcm91cEljb247XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgc3RhdHVzID0gbnVsbFxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0dXNcbiAgICB9XG4gICAgICAvKipcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0Lkdyb3VwfSBncm91cFxuICAgKi9cbiAgIGdldFN0YXR1c0luZGljYXRvckNvbG9yKGdyb3VwOiBDb21ldENoYXQuR3JvdXApIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNDb2xvclsoZ3JvdXA/LmdldFR5cGUoKSBhcyBzdHJpbmcpXTtcbiAgfVxuICBnZXRUZW1wbGF0ZU9wdGlvbnMgPSAodGVtcGxhdGU6Q29tZXRDaGF0RGV0YWlsc1RlbXBsYXRlKT0+e1xuICAgIGlmKHRlbXBsYXRlLm9wdGlvbnMpe1xuICAgICAgcmV0dXJuIHRlbXBsYXRlLm9wdGlvbnModGhpcy51c2VyLHRoaXMuZ3JvdXAsdGVtcGxhdGUuaWQgYXMgc3RyaW5nKVxuICAgIH1cbiAgICBlbHNlIHJldHVybiBbXVxuICB9XG4gIHNldFRoZW1lU3R5bGUoKSB7XG4gICAgdGhpcy5zZXREZXRhaWxzU3R5bGUoKVxuICAgIHRoaXMuc2V0QXZhdGFyU3R5bGUoKVxuICAgIHRoaXMuc2V0U3RhdHVzU3R5bGUoKVxuICAgIHRoaXMuc2V0TGlzdEl0ZW1TdHlsZSgpO1xuICAgIHRoaXMuc2V0Q29uZmlybURpYWxvZ1N0eWxlKCk7XG4gICAgdGhpcy5zdGF0dXNDb2xvci5wcml2YXRlID0gIHRoaXMuZGV0YWlsc1N0eWxlLnByaXZhdGVHcm91cEljb25CYWNrZ3JvdW5kIDtcbiAgICB0aGlzLnN0YXR1c0NvbG9yLm9ubGluZSA9IHRoaXMuZGV0YWlsc1N0eWxlLm9ubGluZVN0YXR1c0NvbG9yIDtcbiAgICB0aGlzLnN0YXR1c0NvbG9yLnBhc3N3b3JkID0gdGhpcy5kZXRhaWxzU3R5bGUucGFzc3dvcmRHcm91cEljb25CYWNrZ3JvdW5kXG4gIH1cbiAgc2V0Q29uZmlybURpYWxvZ1N0eWxlKCl7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTpDb25maXJtRGlhbG9nU3R5bGUgPSBuZXcgQ29uZmlybURpYWxvZ1N0eWxlKHtcbiAgICAgIGNvbmZpcm1CdXR0b25CYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKSxcbiAgICAgIGNhbmNlbEJ1dHRvbkJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0U2Vjb25kYXJ5KCksXG4gICAgICBjb25maXJtQnV0dG9uVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMChcImxpZ2h0XCIpLFxuICAgICAgY29uZmlybUJ1dHRvblRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGV4dDIpLFxuICAgICAgY2FuY2VsQnV0dG9uVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMChcImRhcmtcIiksXG4gICAgICBjYW5jZWxCdXR0b25UZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRleHQyKSxcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgbWVzc2FnZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUyKSxcbiAgICAgIG1lc3NhZ2VUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGhlaWdodDpcIjEwMCVcIixcbiAgICAgIHdpZHRoOlwiMzUwcHhcIixcbiAgICAgIGJvcmRlcjpgMXB4IHNvbGlkICR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQyMDAoKX1gLFxuICAgICAgYm9yZGVyUmFkaXVzOlwiOHB4XCJcbiAgICB9KVxuICAgIHRoaXMubGVhdmVEaWFsb2dTdHlsZSA9IHsuLi5kZWZhdWx0U3R5bGUsLi4udGhpcy5sZWF2ZURpYWxvZ1N0eWxlfVxuICB9XG4gIHNldExpc3RJdGVtU3R5bGUoKXtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOkxpc3RJdGVtU3R5bGUgPSBuZXcgTGlzdEl0ZW1TdHlsZSh7XG4gICAgICBoZWlnaHQ6IFwiNDVweFwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBhY3RpdmVCYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUyKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KCksXG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgc2VwYXJhdG9yQ29sb3I6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQyMDAoKSxcbiAgICAgIGhvdmVyQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiXG4gICAgfSlcbiAgICB0aGlzLmxpc3RJdGVtU3R5bGUgPSB7Li4uZGVmYXVsdFN0eWxlLC4uLnRoaXMubGlzdEl0ZW1TdHlsZX1cbiAgfVxuICBzZXRBdmF0YXJTdHlsZSgpe1xuICAgIGxldCBkZWZhdWx0U3R5bGU6QXZhdGFyU3R5bGUgPSBuZXcgQXZhdGFyU3R5bGUoe1xuICAgICAgYm9yZGVyUmFkaXVzOiBcIjI0cHhcIixcbiAgICAgIHdpZHRoOiBcIjM2cHhcIixcbiAgICAgIGhlaWdodDogXCIzNnB4XCIsXG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgbmFtZVRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ5MDAoKSxcbiAgICAgIGJhY2tncm91bmRTaXplOiBcImNvdmVyXCIsXG4gICAgICBuYW1lVGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgb3V0ZXJWaWV3Qm9yZGVyOiBcIlwiLFxuICAgICAgb3V0ZXJWaWV3Qm9yZGVyU3BhY2luZzogXCJcIixcbiAgICB9KVxuICAgIHRoaXMuYXZhdGFyU3R5bGUgPSB7Li4uZGVmYXVsdFN0eWxlLC4uLnRoaXMuYXZhdGFyU3R5bGV9XG4gIH1cbiAgc2V0U3RhdHVzU3R5bGUoKXtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOkJhc2VTdHlsZSA9IHtcbiAgICAgICAgaGVpZ2h0OiBcIjEycHhcIixcbiAgICAgICAgd2lkdGg6XCIxMnB4XCIsXG4gICAgICAgIGJvcmRlcjpcIm5vbmVcIixcbiAgICAgICAgYm9yZGVyUmFkaXVzOlwiMjRweFwiLFxuXG4gICAgfVxuICAgIHRoaXMuc3RhdHVzSW5kaWNhdG9yU3R5bGUgPSB7Li4uZGVmYXVsdFN0eWxlLC4uLnRoaXMuc3RhdHVzSW5kaWNhdG9yU3R5bGV9XG4gIH1cbiAgc2V0RGV0YWlsc1N0eWxlKCl7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTpEZXRhaWxzU3R5bGUgPSBuZXcgRGV0YWlsc1N0eWxlKHtcbiAgICAgIGJhY2tncm91bmQ6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBib3JkZXI6YDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NTAoKX1gLFxuICAgICAgdGl0bGVUZXh0Rm9udDpmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUxKSxcbiAgICAgIHRpdGxlVGV4dENvbG9yOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KCksXG4gICAgICBvbmxpbmVTdGF0dXNDb2xvcjp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFN1Y2Nlc3MoKSxcbiAgICAgIHByaXZhdGVHcm91cEljb25CYWNrZ3JvdW5kOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0U3VjY2VzcygpLFxuICAgICAgcGFzc3dvcmRHcm91cEljb25CYWNrZ3JvdW5kOlwiUkdCKDI0NywgMTY1LCAwKVwiLFxuICAgICAgY2xvc2VCdXR0b25JY29uVGludDp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKSxcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICBib3JkZXJSYWRpdXM6IFwiXCIsXG4gICAgICBzdWJ0aXRsZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUyKSxcbiAgICAgIHN1YnRpdGxlVGV4dENvbG9yOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBwYWRkaW5nOlwiMCAxMDBweFwiXG4gICAgfSlcbiAgICB0aGlzLmRldGFpbHNTdHlsZSA9IHsuLi5kZWZhdWx0U3R5bGUsLi4udGhpcy5kZXRhaWxzU3R5bGV9XG4gIH1cbiAgd3JhcHBlclN0eWxlID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogdGhpcy5kZXRhaWxzU3R5bGUud2lkdGgsXG4gICAgICBoZWlnaHQ6IHRoaXMuZGV0YWlsc1N0eWxlLmhlaWdodCxcbiAgICAgIGJvcmRlcjogdGhpcy5kZXRhaWxzU3R5bGUuYm9yZGVyLFxuICAgICAgYm9yZGVyUmFkaXVzOnRoaXMuZGV0YWlsc1N0eWxlLmJvcmRlclJhZGl1cyxcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMuZGV0YWlsc1N0eWxlLmJhY2tncm91bmQsXG4gICAgfVxuICB9XG4gIG1hcmdpblN0eWxlID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBwYWRkaW5nOnRoaXMuZGV0YWlsc1N0eWxlPy5wYWRkaW5nXG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjYy1kZXRhaWxzX193cmFwcGVyXCIgKm5nSWY9XCJ1c2VyIHx8IGdyb3VwXCIgW25nU3R5bGVdPVwid3JhcHBlclN0eWxlKClcIj5cbiAgPGRpdiBjbGFzcz1cImNjLWRldGFpbHNfX2hlYWRlclwiPlxuICAgIDxjb21ldGNoYXQtbGFiZWwgW3RleHRdPVwidGl0bGVcIiBbbGFiZWxTdHlsZV09XCJnZXRUaXRsZVN0eWxlKClcIj48L2NvbWV0Y2hhdC1sYWJlbD5cbiAgICA8Y29tZXRjaGF0LWJ1dHRvbiBbaWNvblVSTF09XCJjbG9zZUJ1dHRvbkljb25VUkxcIiBjbGFzcz1cImNjLWRldGFpbHNfX2Nsb3NlLWJ1dHRvblwiIFtidXR0b25TdHlsZV09XCJjbG9zZUJ1dHRvblN0eWxlXCIgKGNjLWJ1dHRvbi1jbGlja2VkKT1cIm9uQ2xvc2VEZXRhaWxzKClcIj48L2NvbWV0Y2hhdC1idXR0b24+XG4gIDwvZGl2PlxuPGRpdiBjbGFzcz1cImNjLWRldGFpbHNcIiBbbmdTdHlsZV09XCJtYXJnaW5TdHlsZSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJjYy1kZXRhaWxzX19wcm9maWxlXCIgKm5nSWY9XCIhaGlkZVByb2ZpbGVcIj5cbiAgICA8Y29tZXRjaGF0LWxpc3QtaXRlbSAqbmdJZj1cIiFjdXN0b21Qcm9maWxlVmlldztlbHNlIGxpc3RpdGVtXCIgW2F2YXRhck5hbWVdPVwidXNlcj8uZ2V0TmFtZSgpID8/IHRoaXMuZ3JvdXA/LmdldE5hbWUoKVwiIFthdmF0YXJVUkxdPVwidGhpcy51c2VyPy5nZXRBdmF0YXIoKSA/PyB0aGlzLmdyb3VwPy5nZXRJY29uKClcIiBbbGlzdEl0ZW1TdHlsZV09XCJsaXN0SXRlbVN0eWxlXCJcbiAgICBbc3RhdHVzSW5kaWNhdG9yQ29sb3JdPVwiY2hlY2tTdGF0dXNUeXBlKClcIiBbc3RhdHVzSW5kaWNhdG9ySWNvbl09XCJjaGVja0dyb3VwVHlwZSgpXCIgW3RpdGxlXT1cInRoaXMudXNlcj8uZ2V0TmFtZSgpID8/IHRoaXMuZ3JvdXA/LmdldE5hbWUoKVwiICBbaGlkZVNlcGFyYXRvcl09XCJmYWxzZVwiXG4gICAgIFtzdGF0dXNJbmRpY2F0b3JTdHlsZV09XCJzdGF0dXNJbmRpY2F0b3JTdHlsZVwiIFthdmF0YXJTdHlsZV09XCJhdmF0YXJTdHlsZVwiPlxuICAgPGRpdiBzbG90PVwic3VidGl0bGVWaWV3XCI+XG4gICA8ZGl2ICpuZ0lmPVwiIXN1YnRpdGxlVmlldzsgZWxzZSBzdWJ0aXRsZVwiPlxuICAgPGNvbWV0Y2hhdC1sYWJlbCBbdGV4dF09XCJzdWJ0aXRsZVRleHRcIiBbbGFiZWxTdHlsZV09XCJzdWJ0aXRsZVN0eWxlKClcIj5cbiAgIDwvY29tZXRjaGF0LWxhYmVsPlxuICAgPC9kaXY+XG4gICA8bmctdGVtcGxhdGUgI3N1YnRpdGxlPlxuICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VidGl0bGVWaWV3O2NvbnRleHQ6eyAkaW1wbGljaXQ6IHVzZXIgPz8gZ3JvdXAgfVwiPlxuICAgICA8L25nLWNvbnRhaW5lcj5cbiAgIDwvbmctdGVtcGxhdGU+XG4gICA8L2Rpdj5cbiAgIDwvY29tZXRjaGF0LWxpc3QtaXRlbT5cbiAgPC9kaXY+XG48ZGl2IGNsYXNzPVwiY2MtZGV0YWlsc19fc2VjdGlvbi1saXN0XCIgKm5nSWY9XCJkZWZhdWx0VGVtcGxhdGUgJiYgZGVmYXVsdFRlbXBsYXRlLmxlbmd0aCA+IDBcIj5cbiAgPGRpdiBjbGFzcz1cImNjLWRldGFpbHNfX3NlY3Rpb25cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkZWZhdWx0VGVtcGxhdGVcIiA+XG4gICAgPGRpdiBjbGFzcz1cImNjLWRldGFpbHNfX3NlY3Rpb24tc2VwYXJhdG9yXCIgKm5nSWY9XCJpdGVtLnRpdGxlXCI+XG4gICAgICA8Y29tZXRjaGF0LWxhYmVsIFt0ZXh0XT1cIml0ZW0udGl0bGVcIiBbbGFiZWxTdHlsZV09XCJnZXRTZWN0aW9uSGVhZGVyU3R5bGUoaXRlbSlcIj48L2NvbWV0Y2hhdC1sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtZGV0YWlsc19fb3B0aW9ucy13cmFwcGVyXCIgKm5nSWY9XCJnZXRUZW1wbGF0ZU9wdGlvbnMoaXRlbSlcIj5cbjxkaXYgY2xhc3M9XCJjYy1kZXRhaWxzX19vcHRpb25zXCIqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdldFRlbXBsYXRlT3B0aW9ucyhpdGVtKVwiID5cbjxkaXYgY2xhc3M9XCJjYy1kZXRhaWxzX19vcHRpb25cIiAqbmdJZj1cIiFnZXRDdXN0b21PcHRpb25WaWV3KG9wdGlvbik7ZWxzZSBjdXN0b21WaWV3XCIgKGNsaWNrKT1cIm9uT3B0aW9uQ2xpY2sob3B0aW9uKVwiPlxuICA8ZGl2IGNsYXNzPVwiY2MtZGV0YWlsc19fb3B0aW9uLXRpdGxlXCIgPlxuICAgIDxjb21ldGNoYXQtYnV0dG9uICBbdGV4dF09XCJvcHRpb24udGl0bGVcIiBbYnV0dG9uU3R5bGVdPVwiZ2V0QnV0dG9uU3R5bGUob3B0aW9uKVwiPjwvY29tZXRjaGF0LWJ1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtZGV0YWlsc19fb3B0aW9uLXRhaWxcIiAqbmdJZj1cIm9wdGlvbj8udGFpbFwiPlxuIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcHRpb24/LnRhaWxcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxjb21ldGNoYXQtZGl2aWRlciBbZGl2aWRlclN0eWxlXT1cImRpdmlkZXJTdHlsZVwiPjwvY29tZXRjaGF0LWRpdmlkZXI+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tVmlldz5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0Q3VzdG9tT3B0aW9uVmlldyhvcHRpb24pXCIgPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjbGlzdGl0ZW0+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21Qcm9maWxlVmlld1wiPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48ZGl2IGNsYXNzPVwiY2MtZGV0YWlsc19fdmlld1wiICpuZ0lmPVwib3BlbkFkZE1lbWJlcnNQYWdlXCI+XG4gIDxjb21ldGNoYXQtYWRkLW1lbWJlcnNcbiAgW3RpdGxlQWxpZ25tZW50XT1cImFkZE1lbWJlcnNDb25maWd1cmF0aW9uLnRpdGxlQWxpZ25tZW50XCJcbiAgW2xpc3RJdGVtU3R5bGVdPVwiYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24ubGlzdEl0ZW1TdHlsZVwiXG4gIFthZGRNZW1iZXJzU3R5bGVdPVwiYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc1N0eWxlXCJcbiAgW2F2YXRhclN0eWxlXT1cImFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmF2YXRhclN0eWxlXCJcbiAgW3N0YXR1c0luZGljYXRvclN0eWxlXT1cImFkZE1lbWJlcnNDb25maWd1cmF0aW9uLnN0YXR1c0luZGljYXRvclN0eWxlXCJcbiAgW2xvYWRpbmdTdGF0ZVZpZXddPVwiYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24ubG9hZGluZ1N0YXRlVmlld1wiXG4gIFtsb2FkaW5nSWNvblVSTF09XCJhZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5sb2FkaW5nSWNvblVSTFwiXG4gIFtlcnJvclN0YXRlVmlld109XCJhZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5lcnJvclN0YXRlVmlld1wiXG4gIFtlbXB0eVN0YXRlVmlld109XCJhZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5lbXB0eVN0YXRlVmlld1wiXG4gIFtvblNlbGVjdF09XCJhZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5vblNlbGVjdFwiXG4gIFtvbkVycm9yXT1cImFkZE1lbWJlcnNDb25maWd1cmF0aW9uLm9uRXJyb3JcIlxuICBbaGlkZUVycm9yXT1cImFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmhpZGVFcnJvclwiXG4gIFtoaWRlU2VhcmNoXT1cImFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmhpZGVTZWFyY2hcIlxuICBbc2VhcmNoSWNvblVSTF09XCJhZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5zZWFyY2hJY29uVVJMXCJcbiAgW3NlbGVjdGlvbk1vZGVdPVwiYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24uc2VsZWN0aW9uTW9kZVwiXG4gIFtoaWRlU2VwYXJhdG9yXT1cImFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmhpZGVTZXBhcmF0b3JcIlxuICBbc2hvd0JhY2tCdXR0b25dPVwiYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24uc2hvd0JhY2tCdXR0b25cIlxuICBbYmFja0J1dHRvbkljb25VUkxdPVwiYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFja0J1dHRvbkljb25VUkxcIlxuICBbY2xvc2VCdXR0b25JY29uVVJMXT1cImFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmNsb3NlQnV0dG9uSWNvblVSTFwiXG4gIFtvcHRpb25zXT1cImFkZE1lbWJlcnNDb25maWd1cmF0aW9uLm9wdGlvbnNcIlxuICBbbWVudV09XCJhZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5tZW51XCJcbiAgW2Rpc2FibGVVc2Vyc1ByZXNlbmNlXT1cImFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmRpc2FibGVVc2Vyc1ByZXNlbmNlXCJcbiAgW3N1YnRpdGxlVmlld109XCJhZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5zdWJ0aXRsZVZpZXdcIlxuICBbZ3JvdXBdPVwiZ3JvdXBcIlxuICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9ubW9kZUVudW1cIlxuICAgW29uQ2xvc2VdPVwiYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24ub25DbG9zZSB8fG9uQ2xvc2VDbGlja1wiXG4gICBbb25CYWNrXT1cImFkZE1lbWJlcnNDb25maWd1cmF0aW9uLm9uQmFjayB8fCBhZGRNZW1iZXJzXCI+XG4gIDwvY29tZXRjaGF0LWFkZC1tZW1iZXJzPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiY2MtZGV0YWlsc19fdmlld1wiICpuZ0lmPVwib3BlbkJhbm5lZE1lbWJlcnNQYWdlXCI+XG4gIDxjb21ldGNoYXQtYmFubmVkLW1lbWJlcnNcbiAgW3RpdGxlQWxpZ25tZW50XT1cImJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLnRpdGxlQWxpZ25tZW50XCJcbiAgW2xpc3RJdGVtU3R5bGVdPVwiYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24ubGlzdEl0ZW1TdHlsZVwiXG4gIFtiYW5uZWRNZW1iZXJzU3R5bGVdPVwiYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc1N0eWxlXCJcbiAgW2F2YXRhclN0eWxlXT1cImJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmF2YXRhclN0eWxlXCJcbiAgW3N0YXR1c0luZGljYXRvclN0eWxlXT1cImJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLnN0YXR1c0luZGljYXRvclN0eWxlXCJcbiAgW2xvYWRpbmdTdGF0ZVZpZXddPVwiYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24ubG9hZGluZ1N0YXRlVmlld1wiXG4gIFtsb2FkaW5nSWNvblVSTF09XCJiYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5sb2FkaW5nSWNvblVSTFwiXG4gIFtlcnJvclN0YXRlVmlld109XCJiYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5lcnJvclN0YXRlVmlld1wiXG4gIFtlbXB0eVN0YXRlVmlld109XCJiYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5lbXB0eVN0YXRlVmlld1wiXG4gIFtvblNlbGVjdF09XCJiYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5vblNlbGVjdFwiXG4gIFtvbkVycm9yXT1cImJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLm9uRXJyb3JcIlxuICBbaGlkZUVycm9yXT1cImJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmhpZGVFcnJvclwiXG4gIFtoaWRlU2VhcmNoXT1cImJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmhpZGVTZWFyY2hcIlxuICBbc2VhcmNoSWNvblVSTF09XCJiYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5zZWFyY2hJY29uVVJMXCJcbiAgW3NlbGVjdGlvbk1vZGVdPVwiYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24uc2VsZWN0aW9uTW9kZVwiXG4gIFtoaWRlU2VwYXJhdG9yXT1cImJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmhpZGVTZXBhcmF0b3JcIlxuICBbc2hvd0JhY2tCdXR0b25dPVwiYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24uc2hvd0JhY2tCdXR0b25cIlxuICBbYmFja0J1dHRvbkljb25VUkxdPVwiYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFja0J1dHRvbkljb25VUkxcIlxuICBbY2xvc2VCdXR0b25JY29uVVJMXT1cImJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmNsb3NlQnV0dG9uSWNvblVSTFwiXG4gIFtvcHRpb25zXT1cImJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLm9wdGlvbnNcIlxuICBbbWVudV09XCJiYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5tZW51XCJcbiAgW2Rpc2FibGVVc2Vyc1ByZXNlbmNlXT1cImJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmRpc2FibGVVc2Vyc1ByZXNlbmNlXCJcbiAgW3N1YnRpdGxlVmlld109XCJiYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5zdWJ0aXRsZVZpZXdcIlxuICBbZ3JvdXBdPVwiZ3JvdXBcIiBbb25DbG9zZV09XCJvbkNsb3NlQ2xpY2tcIiBbb25CYWNrXT1cImJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLm9uQmFjayB8fCBiYW5uZWRNZW1iZXJzXCI+XG4gIDwvY29tZXRjaGF0LWJhbm5lZC1tZW1iZXJzPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiY2MtZGV0YWlsc19fdmlld1wiICpuZ0lmPVwib3BlblZpZXdNZW1iZXJzUGFnZVwiPlxuICA8Y29tZXRjaGF0LWdyb3VwLW1lbWJlcnNcbiAgW3RpdGxlQWxpZ25tZW50XT1cImdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24udGl0bGVBbGlnbm1lbnRcIlxuICBbbGlzdEl0ZW1TdHlsZV09XCJncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmxpc3RJdGVtU3R5bGVcIlxuICBbZ3JvdXBNZW1iZXJzU3R5bGVdPVwiZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNTdHlsZVwiXG4gIFthdmF0YXJTdHlsZV09XCJncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmF2YXRhclN0eWxlXCJcbiAgW3N0YXR1c0luZGljYXRvclN0eWxlXT1cImdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uc3RhdHVzSW5kaWNhdG9yU3R5bGVcIlxuICBbbG9hZGluZ1N0YXRlVmlld109XCJncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmxvYWRpbmdTdGF0ZVZpZXdcIlxuICBbbG9hZGluZ0ljb25VUkxdPVwiZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5sb2FkaW5nSWNvblVSTFwiXG4gIFtlcnJvclN0YXRlVmlld109XCJncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmVycm9yU3RhdGVWaWV3XCJcbiAgW2VtcHR5U3RhdGVWaWV3XT1cImdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uZW1wdHlTdGF0ZVZpZXdcIlxuICBbb25TZWxlY3RdPVwiZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5vblNlbGVjdFwiXG4gIFtvbkVycm9yXT1cImdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24ub25FcnJvclwiXG4gIFtoaWRlRXJyb3JdPVwiZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5oaWRlRXJyb3JcIlxuICBbaGlkZVNlYXJjaF09XCJncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmhpZGVTZWFyY2hcIlxuICBbc2VhcmNoSWNvblVSTF09XCJncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLnNlYXJjaEljb25VUkxcIlxuICBbc2VsZWN0aW9uTW9kZV09XCJncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLnNlbGVjdGlvbk1vZGVcIlxuICBbYmFja2Ryb3BTdHlsZV09XCJncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGVcIlxuICBbaGlkZVNlcGFyYXRvcl09XCJncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmhpZGVTZXBhcmF0b3JcIlxuICBbc2hvd0JhY2tCdXR0b25dPVwiZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5zaG93QmFja0J1dHRvblwiXG4gIFtiYWNrQnV0dG9uSWNvblVSTF09XCJncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmJhY2tCdXR0b25JY29uVVJMXCJcbiAgW2Nsb3NlQnV0dG9uSWNvblVSTF09XCJncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmNsb3NlQnV0dG9uSWNvblVSTFwiXG4gIFtvcHRpb25zXT1cImdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24ub3B0aW9uc1wiXG4gIFttZW51XT1cImdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24ubWVudVwiXG4gIFtkaXNhYmxlVXNlcnNQcmVzZW5jZV09XCJncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmRpc2FibGVVc2Vyc1ByZXNlbmNlXCJcbiAgW3N1YnRpdGxlVmlld109XCJncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLnN1YnRpdGxlVmlld1wiXG4gIFtncm91cFNjb3BlU3R5bGVdPVwiZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5ncm91cFNjb3BlU3R5bGVcIlxuICBbZ3JvdXBdPVwiZ3JvdXBcIiBbb25DbG9zZV09XCIgZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5vbkNsb3NlIHx8IG9uQ2xvc2VDbGlja1wiIFtvbkJhY2tdPVwiZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5vbkJhY2sgfHwgdmlld01lbWJlcnNcIj5cbiAgPC9jb21ldGNoYXQtZ3JvdXAtbWVtYmVycz5cbjwvZGl2PlxuPGNvbWV0Y2hhdC1iYWNrZHJvcCBbYmFja2Ryb3BTdHlsZV09XCJiYWNrZHJvcFN0eWxlXCIgKm5nSWY9XCJjb25maXJtTGVhdmVHcm91cE1vZGFsXCI+XG4gIDxjb21ldGNoYXQtY29uZmlybS1kaWFsb2cgW3RpdGxlXT1cIicnXCIgIFttZXNzYWdlVGV4dF09XCJjb25maXJtRGlhbG9nTWVzc2FnZVwiIFtjYW5jZWxCdXR0b25UZXh0XT1cImNhbmNlbEJ1dHRvblRleHRcIiBbY29uZmlybUJ1dHRvblRleHRdPVwibGVhdmVCdXR0b25UZXh0XCIgKGNjLWNvbmZpcm0tY2xpY2tlZCk9XCJvbkxlYXZlQ2xpY2soKVwiIChjYy1jYW5jZWwtY2xpY2tlZCk9XCJvbkNhbmNlbENsaWNrKClcIiBbY29uZmlybURpYWxvZ1N0eWxlXT1cImxlYXZlRGlhbG9nU3R5bGVcIj5cbiAgPC9jb21ldGNoYXQtY29uZmlybS1kaWFsb2c+XG48L2NvbWV0Y2hhdC1iYWNrZHJvcD5cbjxjb21ldGNoYXQtYmFja2Ryb3AgW2JhY2tkcm9wU3R5bGVdPVwiYmFja2Ryb3BTdHlsZVwiICpuZ0lmPVwib3BlblRyYW5zZmVyT3duZXJzaGlwTW9kYWxcIj5cbiAgPGNvbWV0Y2hhdC10cmFuc2Zlci1vd25lcnNoaXBcbiAgW3RyYW5zZmVyT3duZXJzaGlwU3R5bGVdPVwidHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uLnRyYW5zZmVyT3duZXJzaGlwU3R5bGVcIlxuICBbb25UcmFuc2Zlck93bmVyc2hpcF09XCJ0cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24ub25UcmFuc2Zlck93bmVyc2hpcFwiXG4gIFt0aXRsZUFsaWdubWVudF09XCJ0cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24udGl0bGVBbGlnbm1lbnRcIlxuICBbbGlzdEl0ZW1TdHlsZV09XCJ0cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24ubGlzdEl0ZW1TdHlsZVwiXG4gIFthdmF0YXJTdHlsZV09XCJ0cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIlxuICBbc3RhdHVzSW5kaWNhdG9yU3R5bGVdPVwidHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uLnN0YXR1c0luZGljYXRvclN0eWxlXCJcbiAgW2xvYWRpbmdTdGF0ZVZpZXddPVwidHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uLmxvYWRpbmdTdGF0ZVZpZXdcIlxuICBbbG9hZGluZ0ljb25VUkxdPVwidHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uLmxvYWRpbmdJY29uVVJMXCJcbiAgW2Vycm9yU3RhdGVWaWV3XT1cInRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbi5lcnJvclN0YXRlVmlld1wiXG4gIFtlbXB0eVN0YXRlVmlld109XCJ0cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24uZW1wdHlTdGF0ZVZpZXdcIlxuICBbb25FcnJvcl09XCJ0cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24ub25FcnJvclwiXG4gIFtoaWRlU2VhcmNoXT1cInRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbi5oaWRlU2VhcmNoXCJcbiAgW3NlYXJjaEljb25VUkxdPVwidHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uLnNlYXJjaEljb25VUkxcIlxuICBbaGlkZVNlcGFyYXRvcl09XCJ0cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24uaGlkZVNlcGFyYXRvclwiXG4gIFtjbG9zZUJ1dHRvbkljb25VUkxdPVwidHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uLmNsb3NlQnV0dG9uSWNvblVSTFwiXG4gIFtvcHRpb25zXT1cInRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbi5vcHRpb25zXCJcbiAgW2Rpc2FibGVVc2Vyc1ByZXNlbmNlXT1cInRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbi5kaXNhYmxlVXNlcnNQcmVzZW5jZVwiXG4gIFtzdWJ0aXRsZVZpZXddPVwidHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uLnN1YnRpdGxlVmlld1wiXG4gIFtncm91cF09XCJncm91cFwiIFtvbkNsb3NlXT1cInRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbi5vbkNsb3NlIHx8IG9wZW5UcmFuc2Zlck93bmVyc2hpcFwiPlxuICA8L2NvbWV0Y2hhdC10cmFuc2Zlci1vd25lcnNoaXA+XG48L2NvbWV0Y2hhdC1iYWNrZHJvcD4iXX0=
|