@cometchat/chat-uikit-angular 4.3.30 → 4.3.31

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.
@@ -395,10 +395,10 @@ export class CometChatMessagesComponent {
395
395
  }
396
396
  }
397
397
  CometChatMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatMessagesComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
398
- CometChatMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatMessagesComponent, selector: "cometchat-messages", inputs: { user: "user", group: "group", currentAskAIBot: "currentAskAIBot", hideMessageComposer: "hideMessageComposer", disableTyping: "disableTyping", messageHeaderConfiguration: "messageHeaderConfiguration", messageListConfiguration: "messageListConfiguration", messageComposerConfiguration: "messageComposerConfiguration", threadedMessageConfiguration: "threadedMessageConfiguration", detailsConfiguration: "detailsConfiguration", customSoundForIncomingMessages: "customSoundForIncomingMessages", customSoundForOutgoingMessages: "customSoundForOutgoingMessages", disableSoundForMessages: "disableSoundForMessages", messagesStyle: "messagesStyle", messageHeaderView: "messageHeaderView", messageComposerView: "messageComposerView", messageListView: "messageListView", hideMessageHeader: "hideMessageHeader", hideDetails: "hideDetails", auxiliaryMenu: "auxiliaryMenu" }, viewQueries: [{ propertyName: "messageComposerRef", first: true, predicate: ["messageComposerRef"], descendants: true }, { propertyName: "messageListRef", first: true, predicate: ["messageListRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-messages__wrapper\">\n <cometchat-backdrop *ngIf=\"showAiBotChat\">\n <aiassist-bot-message-list [user]=\"user\" [group]=\"group\"\n [currentAskAIBot]=\"currentAskAIBot\"></aiassist-bot-message-list>\n </cometchat-backdrop>\n <div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n <div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\"\n class=\"cc-messages__header-customview\">\n <ng-container\n *ngTemplateOutlet=\"messageHeaderView;context:{ user: user, group: group }\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\"\n [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\"\n [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"messageHeaderConfiguration.passwordGroupIcon\"\n [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\"\n [menu]=\"headerMenu\"\n [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\"\n [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\"\n [onError]=\"messageHeaderConfiguration.onError\"\n [onBack]=\"messageHeaderConfiguration.onBack\"\n [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\"\n [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\">\n </cometchat-message-header>\n </ng-template>\n </div>\n <div class=\"cc-messages__list\" *ngIf=\"!messageListView\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [messageInformationConfiguration]=\"\n messageListConfiguration.messageInformationConfiguration\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [customSoundForMessages]=\"customSoundForIncomingMessages\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [hideReceipt]=\"messageListConfiguration.hideReceipt\"\n [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\"\n [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\"\n [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\"\n [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\"\n [backdropStyle]=\"messageListConfiguration.backdropStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [hideError]=\"messageListConfiguration.hideError\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <ng-container *ngIf=\"messageListView\">\n <ng-container\n *ngTemplateOutlet=\"messageListView;context:{ user: user, group: group }\">\n </ng-container>\n </ng-container>\n\n <div class=\"cc-messages__composer\"\n *ngIf=\"!messageComposerView && !hideMessageComposer\">\n <cometchat-message-composer #messageComposerRef\n [hideVoiceRecording]=\"messageComposerConfiguration.hideVoiceRecording\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [customSoundForMessages]=\"customSoundForOutgoingMessages\" [user]=\"user\"\n [group]=\"group\" [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [aiOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [aiIconURL]=\"messageComposerConfiguration.AIIconURL\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\"\n [voiceRecordingIconURL]=\"messageComposerConfiguration.voiceRecordingIconURL\"\n [emojiIconURL]=\"messageComposerConfiguration.emojiIconURL\"\n [sendButtonIconURL]=\"messageComposerConfiguration.sendButtonIconURL\"\n >\n </cometchat-message-composer>\n </div>\n <div *ngIf=\"messageComposerView && !hideMessageComposer\"\n class=\"cc-messages__composer--customview\">\n <ng-container\n *ngTemplateOutlet=\"messageComposerView;context:{ user: user, group: group }\">\n </ng-container>\n </div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\"\n [reactionIconURL]=\"reactionName\"\n [liveReactionStyle]=\"liveReactionStyle\"></cometchat-live-reaction>\n </div>\n <div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n <cometchat-threaded-messages [onClose]=\"closeThreadView\"\n [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\"\n [messageActionView]=\"threadedMessageConfiguration.messageActionView\"\n [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\"\n [onError]=\"threadedMessageConfiguration.onError\"\n [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\"\n [parentMessage]=\"threadMessageObject\" [user]=\"user\" [group]=\"group\"\n [messageListConfiguration]=\"threadedMessageConfiguration.messageListConfiguration\"\n [messageComposerView]=\"threadedMessageConfiguration.messageComposerView\"\n [messageListView]=\"threadedMessageConfiguration.messageListView\"\n [hideMessageComposer]=\"threadedMessageConfiguration.hideMessageComposer\"\n [messageComposerConfiguration]=\"threadedMessageConfiguration.messageComposerConfiguration\"\n [disableSoundForMessages]=\"threadedMessageConfiguration.disableSoundForMessages\"\n ></cometchat-threaded-messages>\n </div>\n\n <div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details\n [protectedGroupIcon]=\"detailsConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"detailsConfiguration.passwordGroupIcon\"\n [privateGroupIcon]=\"detailsConfiguration.privateGroupIcon\"\n [backdropStyle]=\"detailsConfiguration.backdropStyle\"\n [disableUsersPresence]=\"detailsConfiguration?.disableUsersPresence!\"\n [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\"\n [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\"\n [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\"\n [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\"\n [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\"\n [listItemStyle]=\"detailsConfiguration.listItemStyle\"\n [detailsStyle]=\"detailsConfiguration.detailsStyle\"\n [avatarStyle]=\"detailsConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\"\n [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\"\n [data]=\"setDetailsTemplate()\"\n [customProfileView]=\"detailsConfiguration.customProfileView\"\n [subtitleView]=\"detailsConfiguration.subtitleView\"\n [hideProfile]=\"detailsConfiguration.hideProfile\"\n [onError]=\"detailsConfiguration.onError\"\n [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\"\n [user]=\"user\" [group]=\"group\"></cometchat-details>\n </div>\n</div>\n<ng-template #headerMenu>\n <div class=\"cc-messages__headermenu\">\n <div class=\"cc-messages__auxiliarymenu\"\n *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container\n *ngTemplateOutlet=\"getAuxilaryView();context:{ user: user, group: group }\">\n </ng-container>\n </div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\"\n videoCallIconText=\"\" [user]=\"user\" [group]=\"group\"\n [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\"\n [buttonStyle]=\"detailsButtonStyle\"\n (cc-button-clicked)=\"openDetailsPage()\"></cometchat-button>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-messages__wrapper{position:relative;height:100%;width:100%}.cc-messages{display:flex;flex-direction:column;position:relative;height:100%;width:100%;box-sizing:border-box;justify-content:space-between}.cc-messages__headermenu{display:flex;justify-content:center;align-items:center}.cc-messages__threadedmessages,.cc-messages__details{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-messages__header{width:100%}.cc-messages__list{overflow:hidden;width:100%;height:100%}cometchat-threaded-messages{height:100%;display:flex}.cc-messages__composer{width:100%;display:flex;flex-direction:column;justify-content:flex-end}\n"], components: [{ type: i2.AIAssistBotMessageListComponent, selector: "aiassist-bot-message-list", inputs: ["hideSearch", "footerView", "user", "group", "currentAskAIBot", "subtitleText", "sendIconUrl", "waitIcon", "errorIcon", "botFirstMessageText", "closeButtonIconURL", "sendButtonIconURL", "avatarStyle", "aiBotChatHeaderStyle", "aiBotChatContainerStyle", "datePattern", "alignment"] }, { type: i3.CometChatMessageHeaderComponent, selector: "cometchat-message-header", inputs: ["avatarStyle", "statusIndicatorStyle", "messageHeaderStyle", "listItemStyle", "subtitleView", "disableUsersPresence", "disableTyping", "protectedGroupIcon", "passwordGroupIcon", "privateGroupIcon", "menu", "user", "group", "backButtonIconURL", "hideBackButton", "listItemView", "onError", "onBack"] }, { type: i4.CometChatMessageListComponent, selector: "cometchat-message-list", inputs: ["hideError", "hideDateSeparator", "errorStateView", "loadingStateView", "emptyStateView", "errorStateText", "emptyStateText", "loadingIconURL", "user", "group", "disableReceipt", "hideReceipt", "disableSoundForMessages", "customSoundForMessages", "readIcon", "deliveredIcon", "sentIcon", "waitIcon", "errorIcon", "aiErrorIcon", "aiEmptyIcon", "alignment", "showAvatar", "datePattern", "timestampAlignment", "DateSeparatorPattern", "templates", "messagesRequestBuilder", "newMessageIndicatorText", "scrollToBottomOnNewMessages", "thresholdValue", "unreadMessageThreshold", "reactionsConfiguration", "disableReactions", "emojiKeyboardStyle", "apiConfiguration", "onThreadRepliesClick", "headerView", "footerView", "parentMessageId", "threadIndicatorIcon", "avatarStyle", "backdropStyle", "dateSeparatorStyle", "messageListStyle", "onError", "messageInformationConfiguration", "disableMentions", "textFormatters"] }, { type: i5.CometChatMessageComposerComponent, selector: "cometchat-message-composer", inputs: ["user", "group", "disableSoundForMessages", "customSoundForMessage", "customSoundForMessages", "disableTypingEvents", "text", "placeholderText", "headerView", "onTextChange", "attachmentIconURL", "attachmentOptions", "secondaryButtonView", "auxilaryButtonView", "auxiliaryButtonsAlignment", "sendButtonView", "parentMessageId", "hideLiveReaction", "LiveReactionIconURL", "backButtonIconURL", "mentionsWarningText", "mentionsWarningStyle", "messageComposerStyle", "onSendButtonClick", "onError", "backdropStyle", "actionSheetStyle", "aiActionSheetStyle", "hideVoiceRecording", "mediaRecorderStyle", "aiOptionsStyle", "aiIconURL", "voiceRecordingIconURL", "voiceRecordingCloseIconURL", "voiceRecordingStartIconURL", "voiceRecordingStopIconURL", "voiceRecordingSubmitIconURL", "hideLayoutMode", "emojiIconURL", "userMemberWrapperConfiguration", "disableMentions", "textFormatters", "sendButtonIconURL"], outputs: ["childEvent"] }, { type: i6.CometChatThreadedMessagesComponent, selector: "cometchat-threaded-messages", inputs: ["onClose", "onError", "parentMessage", "title", "closeIconURL", "bubbleView", "messageActionView", "messageListConfiguration", "userMemberWrapperConfiguration", "messageComposerConfiguration", "threadedMessagesStyle", "hideMessageComposer", "messageComposerView", "messageListView", "disableSoundForMessages"] }, { type: i7.CometChatDetailsComponent, selector: "cometchat-details", inputs: ["group", "user", "title", "closeButtonIconURL", "hideProfile", "subtitleView", "customProfileView", "data", "disableUsersPresence", "privateGroupIcon", "protectedGroupIcon", "passwordGroupIcon", "onError", "onClose", "leaveGroupConfirmButtonText", "leaveGroupCancelButtonText", "leaveGroupDialogMessage", "leaveGroupDialogStyle", "deleteGroupConfirmButtonText", "deleteGroupDialogMessage", "deleteGroupCancelButtonText", "deleteGroupDialogStyle", "transferOwnershipConfirmButtonText", "transferOwnershipDialogMessage", "transferOwnershipCancelButtonText", "transferOwnershipDialogStyle", "addMembersConfiguration", "bannedMembersConfiguration", "groupMembersConfiguration", "transferOwnershipConfiguration", "statusIndicatorStyle", "backdropStyle", "avatarStyle", "detailsStyle", "listItemStyle"] }, { type: i8.CometChatCallButtonsComponent, selector: "cometchat-call-buttons", inputs: ["user", "group", "voiceCallIconURL", "voiceCallIconText", "voiceCallIconHoverText", "videoCallIconURL", "videoCallIconText", "videoCallIconHoverText", "onVoiceCallClick", "onVideoCallClick", "onError", "callButtonsStyle", "outgoingCallConfiguration", "ongoingCallConfiguration"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
398
+ CometChatMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatMessagesComponent, selector: "cometchat-messages", inputs: { user: "user", group: "group", currentAskAIBot: "currentAskAIBot", hideMessageComposer: "hideMessageComposer", disableTyping: "disableTyping", messageHeaderConfiguration: "messageHeaderConfiguration", messageListConfiguration: "messageListConfiguration", messageComposerConfiguration: "messageComposerConfiguration", threadedMessageConfiguration: "threadedMessageConfiguration", detailsConfiguration: "detailsConfiguration", customSoundForIncomingMessages: "customSoundForIncomingMessages", customSoundForOutgoingMessages: "customSoundForOutgoingMessages", disableSoundForMessages: "disableSoundForMessages", messagesStyle: "messagesStyle", messageHeaderView: "messageHeaderView", messageComposerView: "messageComposerView", messageListView: "messageListView", hideMessageHeader: "hideMessageHeader", hideDetails: "hideDetails", auxiliaryMenu: "auxiliaryMenu" }, viewQueries: [{ propertyName: "messageComposerRef", first: true, predicate: ["messageComposerRef"], descendants: true }, { propertyName: "messageListRef", first: true, predicate: ["messageListRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-messages__wrapper\">\n <cometchat-backdrop *ngIf=\"showAiBotChat\">\n <aiassist-bot-message-list [user]=\"user\" [group]=\"group\"\n [currentAskAIBot]=\"currentAskAIBot\"></aiassist-bot-message-list>\n </cometchat-backdrop>\n <div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n <div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\"\n class=\"cc-messages__header-customview\">\n <ng-container\n *ngTemplateOutlet=\"messageHeaderView;context:{ user: user, group: group }\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\"\n [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\"\n [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"messageHeaderConfiguration.passwordGroupIcon\"\n [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\"\n [menu]=\"headerMenu\"\n [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\"\n [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\"\n [onError]=\"messageHeaderConfiguration.onError\"\n [onBack]=\"messageHeaderConfiguration.onBack\"\n [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\"\n [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\">\n </cometchat-message-header>\n </ng-template>\n </div>\n <div class=\"cc-messages__list\" *ngIf=\"!messageListView\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [messageInformationConfiguration]=\"\n messageListConfiguration.messageInformationConfiguration\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [customSoundForMessages]=\"customSoundForIncomingMessages\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [newMessageIndicatorStyle]=\"messageListConfiguration.newMessageIndicatorStyle\"\n [newMessageIndicatorIconUrl]=\"messageListConfiguration.newMessageIndicatorIconUrl\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [hideReceipt]=\"messageListConfiguration.hideReceipt\"\n [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\"\n [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\"\n [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\"\n [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\"\n [backdropStyle]=\"messageListConfiguration.backdropStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [hideError]=\"messageListConfiguration.hideError\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <ng-container *ngIf=\"messageListView\">\n <ng-container\n *ngTemplateOutlet=\"messageListView;context:{ user: user, group: group }\">\n </ng-container>\n </ng-container>\n\n <div class=\"cc-messages__composer\"\n *ngIf=\"!messageComposerView && !hideMessageComposer\">\n <cometchat-message-composer #messageComposerRef\n [hideVoiceRecording]=\"messageComposerConfiguration.hideVoiceRecording\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [customSoundForMessages]=\"customSoundForOutgoingMessages\" [user]=\"user\"\n [group]=\"group\" [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [aiOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [aiIconURL]=\"messageComposerConfiguration.AIIconURL\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\"\n [voiceRecordingIconURL]=\"messageComposerConfiguration.voiceRecordingIconURL\"\n [emojiIconURL]=\"messageComposerConfiguration.emojiIconURL\"\n [sendButtonIconURL]=\"messageComposerConfiguration.sendButtonIconURL\"\n >\n </cometchat-message-composer>\n </div>\n <div *ngIf=\"messageComposerView && !hideMessageComposer\"\n class=\"cc-messages__composer--customview\">\n <ng-container\n *ngTemplateOutlet=\"messageComposerView;context:{ user: user, group: group }\">\n </ng-container>\n </div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\"\n [reactionIconURL]=\"reactionName\"\n [liveReactionStyle]=\"liveReactionStyle\"></cometchat-live-reaction>\n </div>\n <div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n <cometchat-threaded-messages [onClose]=\"closeThreadView\"\n [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\"\n [messageActionView]=\"threadedMessageConfiguration.messageActionView\"\n [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\"\n [onError]=\"threadedMessageConfiguration.onError\"\n [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\"\n [parentMessage]=\"threadMessageObject\" [user]=\"user\" [group]=\"group\"\n [messageListConfiguration]=\"threadedMessageConfiguration.messageListConfiguration\"\n [messageComposerView]=\"threadedMessageConfiguration.messageComposerView\"\n [messageListView]=\"threadedMessageConfiguration.messageListView\"\n [hideMessageComposer]=\"threadedMessageConfiguration.hideMessageComposer\"\n [messageComposerConfiguration]=\"threadedMessageConfiguration.messageComposerConfiguration\"\n [disableSoundForMessages]=\"threadedMessageConfiguration.disableSoundForMessages\"\n ></cometchat-threaded-messages>\n </div>\n\n <div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details\n [protectedGroupIcon]=\"detailsConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"detailsConfiguration.passwordGroupIcon\"\n [privateGroupIcon]=\"detailsConfiguration.privateGroupIcon\"\n [backdropStyle]=\"detailsConfiguration.backdropStyle\"\n [disableUsersPresence]=\"detailsConfiguration?.disableUsersPresence!\"\n [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\"\n [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\"\n [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\"\n [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\"\n [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\"\n [listItemStyle]=\"detailsConfiguration.listItemStyle\"\n [detailsStyle]=\"detailsConfiguration.detailsStyle\"\n [avatarStyle]=\"detailsConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\"\n [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\"\n [data]=\"setDetailsTemplate()\"\n [customProfileView]=\"detailsConfiguration.customProfileView\"\n [subtitleView]=\"detailsConfiguration.subtitleView\"\n [hideProfile]=\"detailsConfiguration.hideProfile\"\n [onError]=\"detailsConfiguration.onError\"\n [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\"\n [user]=\"user\" [group]=\"group\"></cometchat-details>\n </div>\n</div>\n<ng-template #headerMenu>\n <div class=\"cc-messages__headermenu\">\n <div class=\"cc-messages__auxiliarymenu\"\n *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container\n *ngTemplateOutlet=\"getAuxilaryView();context:{ user: user, group: group }\">\n </ng-container>\n </div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\"\n videoCallIconText=\"\" [user]=\"user\" [group]=\"group\"\n [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\"\n [buttonStyle]=\"detailsButtonStyle\"\n (cc-button-clicked)=\"openDetailsPage()\"></cometchat-button>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-messages__wrapper{position:relative;height:100%;width:100%}.cc-messages{display:flex;flex-direction:column;position:relative;height:100%;width:100%;box-sizing:border-box;justify-content:space-between}.cc-messages__headermenu{display:flex;justify-content:center;align-items:center}.cc-messages__threadedmessages,.cc-messages__details{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-messages__header{width:100%}.cc-messages__list{overflow:hidden;width:100%;height:100%;position:relative}cometchat-threaded-messages{height:100%;display:flex}.cc-messages__composer{width:100%;display:flex;flex-direction:column;justify-content:flex-end}\n"], components: [{ type: i2.AIAssistBotMessageListComponent, selector: "aiassist-bot-message-list", inputs: ["hideSearch", "footerView", "user", "group", "currentAskAIBot", "subtitleText", "sendIconUrl", "waitIcon", "errorIcon", "botFirstMessageText", "closeButtonIconURL", "sendButtonIconURL", "avatarStyle", "aiBotChatHeaderStyle", "aiBotChatContainerStyle", "datePattern", "alignment"] }, { type: i3.CometChatMessageHeaderComponent, selector: "cometchat-message-header", inputs: ["avatarStyle", "statusIndicatorStyle", "messageHeaderStyle", "listItemStyle", "subtitleView", "disableUsersPresence", "disableTyping", "protectedGroupIcon", "passwordGroupIcon", "privateGroupIcon", "menu", "user", "group", "backButtonIconURL", "hideBackButton", "listItemView", "onError", "onBack"] }, { type: i4.CometChatMessageListComponent, selector: "cometchat-message-list", inputs: ["hideError", "hideDateSeparator", "errorStateView", "loadingStateView", "emptyStateView", "errorStateText", "emptyStateText", "loadingIconURL", "user", "group", "disableReceipt", "hideReceipt", "disableSoundForMessages", "customSoundForMessages", "readIcon", "deliveredIcon", "sentIcon", "waitIcon", "errorIcon", "aiErrorIcon", "aiEmptyIcon", "alignment", "showAvatar", "datePattern", "timestampAlignment", "DateSeparatorPattern", "templates", "messagesRequestBuilder", "newMessageIndicatorText", "newMessageIndicatorIconUrl", "scrollToBottomOnNewMessages", "thresholdValue", "unreadMessageThreshold", "reactionsConfiguration", "disableReactions", "emojiKeyboardStyle", "apiConfiguration", "onThreadRepliesClick", "headerView", "footerView", "parentMessageId", "threadIndicatorIcon", "avatarStyle", "newMessageIndicatorStyle", "backdropStyle", "dateSeparatorStyle", "messageListStyle", "onError", "messageInformationConfiguration", "disableMentions", "textFormatters"] }, { type: i5.CometChatMessageComposerComponent, selector: "cometchat-message-composer", inputs: ["user", "group", "disableSoundForMessages", "customSoundForMessage", "customSoundForMessages", "disableTypingEvents", "text", "placeholderText", "headerView", "onTextChange", "attachmentIconURL", "attachmentOptions", "secondaryButtonView", "auxilaryButtonView", "auxiliaryButtonsAlignment", "sendButtonView", "parentMessageId", "hideLiveReaction", "LiveReactionIconURL", "backButtonIconURL", "mentionsWarningText", "mentionsWarningStyle", "messageComposerStyle", "onSendButtonClick", "onError", "backdropStyle", "actionSheetStyle", "aiActionSheetStyle", "hideVoiceRecording", "mediaRecorderStyle", "aiOptionsStyle", "aiIconURL", "voiceRecordingIconURL", "voiceRecordingCloseIconURL", "voiceRecordingStartIconURL", "voiceRecordingStopIconURL", "voiceRecordingSubmitIconURL", "hideLayoutMode", "emojiIconURL", "userMemberWrapperConfiguration", "disableMentions", "textFormatters", "sendButtonIconURL"], outputs: ["childEvent"] }, { type: i6.CometChatThreadedMessagesComponent, selector: "cometchat-threaded-messages", inputs: ["onClose", "onError", "parentMessage", "title", "closeIconURL", "bubbleView", "messageActionView", "messageListConfiguration", "userMemberWrapperConfiguration", "messageComposerConfiguration", "threadedMessagesStyle", "hideMessageComposer", "messageComposerView", "messageListView", "disableSoundForMessages"] }, { type: i7.CometChatDetailsComponent, selector: "cometchat-details", inputs: ["group", "user", "title", "closeButtonIconURL", "hideProfile", "subtitleView", "customProfileView", "data", "disableUsersPresence", "privateGroupIcon", "protectedGroupIcon", "passwordGroupIcon", "onError", "onClose", "leaveGroupConfirmButtonText", "leaveGroupCancelButtonText", "leaveGroupDialogMessage", "leaveGroupDialogStyle", "deleteGroupConfirmButtonText", "deleteGroupDialogMessage", "deleteGroupCancelButtonText", "deleteGroupDialogStyle", "transferOwnershipConfirmButtonText", "transferOwnershipDialogMessage", "transferOwnershipCancelButtonText", "transferOwnershipDialogStyle", "addMembersConfiguration", "bannedMembersConfiguration", "groupMembersConfiguration", "transferOwnershipConfiguration", "statusIndicatorStyle", "backdropStyle", "avatarStyle", "detailsStyle", "listItemStyle"] }, { type: i8.CometChatCallButtonsComponent, selector: "cometchat-call-buttons", inputs: ["user", "group", "voiceCallIconURL", "voiceCallIconText", "voiceCallIconHoverText", "videoCallIconURL", "videoCallIconText", "videoCallIconHoverText", "onVoiceCallClick", "onVideoCallClick", "onError", "callButtonsStyle", "outgoingCallConfiguration", "ongoingCallConfiguration"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
399
399
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatMessagesComponent, decorators: [{
400
400
  type: Component,
401
- args: [{ selector: "cometchat-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-messages__wrapper\">\n <cometchat-backdrop *ngIf=\"showAiBotChat\">\n <aiassist-bot-message-list [user]=\"user\" [group]=\"group\"\n [currentAskAIBot]=\"currentAskAIBot\"></aiassist-bot-message-list>\n </cometchat-backdrop>\n <div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n <div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\"\n class=\"cc-messages__header-customview\">\n <ng-container\n *ngTemplateOutlet=\"messageHeaderView;context:{ user: user, group: group }\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\"\n [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\"\n [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"messageHeaderConfiguration.passwordGroupIcon\"\n [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\"\n [menu]=\"headerMenu\"\n [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\"\n [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\"\n [onError]=\"messageHeaderConfiguration.onError\"\n [onBack]=\"messageHeaderConfiguration.onBack\"\n [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\"\n [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\">\n </cometchat-message-header>\n </ng-template>\n </div>\n <div class=\"cc-messages__list\" *ngIf=\"!messageListView\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [messageInformationConfiguration]=\"\n messageListConfiguration.messageInformationConfiguration\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [customSoundForMessages]=\"customSoundForIncomingMessages\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [hideReceipt]=\"messageListConfiguration.hideReceipt\"\n [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\"\n [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\"\n [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\"\n [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\"\n [backdropStyle]=\"messageListConfiguration.backdropStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [hideError]=\"messageListConfiguration.hideError\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <ng-container *ngIf=\"messageListView\">\n <ng-container\n *ngTemplateOutlet=\"messageListView;context:{ user: user, group: group }\">\n </ng-container>\n </ng-container>\n\n <div class=\"cc-messages__composer\"\n *ngIf=\"!messageComposerView && !hideMessageComposer\">\n <cometchat-message-composer #messageComposerRef\n [hideVoiceRecording]=\"messageComposerConfiguration.hideVoiceRecording\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [customSoundForMessages]=\"customSoundForOutgoingMessages\" [user]=\"user\"\n [group]=\"group\" [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [aiOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [aiIconURL]=\"messageComposerConfiguration.AIIconURL\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\"\n [voiceRecordingIconURL]=\"messageComposerConfiguration.voiceRecordingIconURL\"\n [emojiIconURL]=\"messageComposerConfiguration.emojiIconURL\"\n [sendButtonIconURL]=\"messageComposerConfiguration.sendButtonIconURL\"\n >\n </cometchat-message-composer>\n </div>\n <div *ngIf=\"messageComposerView && !hideMessageComposer\"\n class=\"cc-messages__composer--customview\">\n <ng-container\n *ngTemplateOutlet=\"messageComposerView;context:{ user: user, group: group }\">\n </ng-container>\n </div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\"\n [reactionIconURL]=\"reactionName\"\n [liveReactionStyle]=\"liveReactionStyle\"></cometchat-live-reaction>\n </div>\n <div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n <cometchat-threaded-messages [onClose]=\"closeThreadView\"\n [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\"\n [messageActionView]=\"threadedMessageConfiguration.messageActionView\"\n [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\"\n [onError]=\"threadedMessageConfiguration.onError\"\n [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\"\n [parentMessage]=\"threadMessageObject\" [user]=\"user\" [group]=\"group\"\n [messageListConfiguration]=\"threadedMessageConfiguration.messageListConfiguration\"\n [messageComposerView]=\"threadedMessageConfiguration.messageComposerView\"\n [messageListView]=\"threadedMessageConfiguration.messageListView\"\n [hideMessageComposer]=\"threadedMessageConfiguration.hideMessageComposer\"\n [messageComposerConfiguration]=\"threadedMessageConfiguration.messageComposerConfiguration\"\n [disableSoundForMessages]=\"threadedMessageConfiguration.disableSoundForMessages\"\n ></cometchat-threaded-messages>\n </div>\n\n <div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details\n [protectedGroupIcon]=\"detailsConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"detailsConfiguration.passwordGroupIcon\"\n [privateGroupIcon]=\"detailsConfiguration.privateGroupIcon\"\n [backdropStyle]=\"detailsConfiguration.backdropStyle\"\n [disableUsersPresence]=\"detailsConfiguration?.disableUsersPresence!\"\n [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\"\n [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\"\n [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\"\n [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\"\n [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\"\n [listItemStyle]=\"detailsConfiguration.listItemStyle\"\n [detailsStyle]=\"detailsConfiguration.detailsStyle\"\n [avatarStyle]=\"detailsConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\"\n [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\"\n [data]=\"setDetailsTemplate()\"\n [customProfileView]=\"detailsConfiguration.customProfileView\"\n [subtitleView]=\"detailsConfiguration.subtitleView\"\n [hideProfile]=\"detailsConfiguration.hideProfile\"\n [onError]=\"detailsConfiguration.onError\"\n [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\"\n [user]=\"user\" [group]=\"group\"></cometchat-details>\n </div>\n</div>\n<ng-template #headerMenu>\n <div class=\"cc-messages__headermenu\">\n <div class=\"cc-messages__auxiliarymenu\"\n *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container\n *ngTemplateOutlet=\"getAuxilaryView();context:{ user: user, group: group }\">\n </ng-container>\n </div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\"\n videoCallIconText=\"\" [user]=\"user\" [group]=\"group\"\n [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\"\n [buttonStyle]=\"detailsButtonStyle\"\n (cc-button-clicked)=\"openDetailsPage()\"></cometchat-button>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-messages__wrapper{position:relative;height:100%;width:100%}.cc-messages{display:flex;flex-direction:column;position:relative;height:100%;width:100%;box-sizing:border-box;justify-content:space-between}.cc-messages__headermenu{display:flex;justify-content:center;align-items:center}.cc-messages__threadedmessages,.cc-messages__details{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-messages__header{width:100%}.cc-messages__list{overflow:hidden;width:100%;height:100%}cometchat-threaded-messages{height:100%;display:flex}.cc-messages__composer{width:100%;display:flex;flex-direction:column;justify-content:flex-end}\n"] }]
401
+ args: [{ selector: "cometchat-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-messages__wrapper\">\n <cometchat-backdrop *ngIf=\"showAiBotChat\">\n <aiassist-bot-message-list [user]=\"user\" [group]=\"group\"\n [currentAskAIBot]=\"currentAskAIBot\"></aiassist-bot-message-list>\n </cometchat-backdrop>\n <div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n <div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\"\n class=\"cc-messages__header-customview\">\n <ng-container\n *ngTemplateOutlet=\"messageHeaderView;context:{ user: user, group: group }\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\"\n [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\"\n [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"messageHeaderConfiguration.passwordGroupIcon\"\n [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\"\n [menu]=\"headerMenu\"\n [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\"\n [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\"\n [onError]=\"messageHeaderConfiguration.onError\"\n [onBack]=\"messageHeaderConfiguration.onBack\"\n [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\"\n [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\">\n </cometchat-message-header>\n </ng-template>\n </div>\n <div class=\"cc-messages__list\" *ngIf=\"!messageListView\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [messageInformationConfiguration]=\"\n messageListConfiguration.messageInformationConfiguration\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [customSoundForMessages]=\"customSoundForIncomingMessages\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [newMessageIndicatorStyle]=\"messageListConfiguration.newMessageIndicatorStyle\"\n [newMessageIndicatorIconUrl]=\"messageListConfiguration.newMessageIndicatorIconUrl\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [hideReceipt]=\"messageListConfiguration.hideReceipt\"\n [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\"\n [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\"\n [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\"\n [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\"\n [backdropStyle]=\"messageListConfiguration.backdropStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [hideError]=\"messageListConfiguration.hideError\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <ng-container *ngIf=\"messageListView\">\n <ng-container\n *ngTemplateOutlet=\"messageListView;context:{ user: user, group: group }\">\n </ng-container>\n </ng-container>\n\n <div class=\"cc-messages__composer\"\n *ngIf=\"!messageComposerView && !hideMessageComposer\">\n <cometchat-message-composer #messageComposerRef\n [hideVoiceRecording]=\"messageComposerConfiguration.hideVoiceRecording\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [customSoundForMessages]=\"customSoundForOutgoingMessages\" [user]=\"user\"\n [group]=\"group\" [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [aiOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [aiIconURL]=\"messageComposerConfiguration.AIIconURL\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\"\n [voiceRecordingIconURL]=\"messageComposerConfiguration.voiceRecordingIconURL\"\n [emojiIconURL]=\"messageComposerConfiguration.emojiIconURL\"\n [sendButtonIconURL]=\"messageComposerConfiguration.sendButtonIconURL\"\n >\n </cometchat-message-composer>\n </div>\n <div *ngIf=\"messageComposerView && !hideMessageComposer\"\n class=\"cc-messages__composer--customview\">\n <ng-container\n *ngTemplateOutlet=\"messageComposerView;context:{ user: user, group: group }\">\n </ng-container>\n </div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\"\n [reactionIconURL]=\"reactionName\"\n [liveReactionStyle]=\"liveReactionStyle\"></cometchat-live-reaction>\n </div>\n <div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n <cometchat-threaded-messages [onClose]=\"closeThreadView\"\n [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\"\n [messageActionView]=\"threadedMessageConfiguration.messageActionView\"\n [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\"\n [onError]=\"threadedMessageConfiguration.onError\"\n [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\"\n [parentMessage]=\"threadMessageObject\" [user]=\"user\" [group]=\"group\"\n [messageListConfiguration]=\"threadedMessageConfiguration.messageListConfiguration\"\n [messageComposerView]=\"threadedMessageConfiguration.messageComposerView\"\n [messageListView]=\"threadedMessageConfiguration.messageListView\"\n [hideMessageComposer]=\"threadedMessageConfiguration.hideMessageComposer\"\n [messageComposerConfiguration]=\"threadedMessageConfiguration.messageComposerConfiguration\"\n [disableSoundForMessages]=\"threadedMessageConfiguration.disableSoundForMessages\"\n ></cometchat-threaded-messages>\n </div>\n\n <div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details\n [protectedGroupIcon]=\"detailsConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"detailsConfiguration.passwordGroupIcon\"\n [privateGroupIcon]=\"detailsConfiguration.privateGroupIcon\"\n [backdropStyle]=\"detailsConfiguration.backdropStyle\"\n [disableUsersPresence]=\"detailsConfiguration?.disableUsersPresence!\"\n [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\"\n [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\"\n [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\"\n [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\"\n [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\"\n [listItemStyle]=\"detailsConfiguration.listItemStyle\"\n [detailsStyle]=\"detailsConfiguration.detailsStyle\"\n [avatarStyle]=\"detailsConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\"\n [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\"\n [data]=\"setDetailsTemplate()\"\n [customProfileView]=\"detailsConfiguration.customProfileView\"\n [subtitleView]=\"detailsConfiguration.subtitleView\"\n [hideProfile]=\"detailsConfiguration.hideProfile\"\n [onError]=\"detailsConfiguration.onError\"\n [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\"\n [user]=\"user\" [group]=\"group\"></cometchat-details>\n </div>\n</div>\n<ng-template #headerMenu>\n <div class=\"cc-messages__headermenu\">\n <div class=\"cc-messages__auxiliarymenu\"\n *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container\n *ngTemplateOutlet=\"getAuxilaryView();context:{ user: user, group: group }\">\n </ng-container>\n </div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\"\n videoCallIconText=\"\" [user]=\"user\" [group]=\"group\"\n [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\"\n [buttonStyle]=\"detailsButtonStyle\"\n (cc-button-clicked)=\"openDetailsPage()\"></cometchat-button>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-messages__wrapper{position:relative;height:100%;width:100%}.cc-messages{display:flex;flex-direction:column;position:relative;height:100%;width:100%;box-sizing:border-box;justify-content:space-between}.cc-messages__headermenu{display:flex;justify-content:center;align-items:center}.cc-messages__threadedmessages,.cc-messages__details{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-messages__header{width:100%}.cc-messages__list{overflow:hidden;width:100%;height:100%;position:relative}cometchat-threaded-messages{height:100%;display:flex}.cc-messages__composer{width:100%;display:flex;flex-direction:column;justify-content:flex-end}\n"] }]
402
402
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }, { type: i0.ElementRef }]; }, propDecorators: { messageComposerRef: [{
403
403
  type: ViewChild,
404
404
  args: ["messageComposerRef", { static: false }]
@@ -446,4 +446,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
446
446
  }], auxiliaryMenu: [{
447
447
  type: Input
448
448
  }] } });
449
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TWVzc2FnZXMvY29tZXRjaGF0LW1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdE1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUVMLG9CQUFvQixFQUNwQiw0QkFBNEIsRUFFNUIsMEJBQTBCLEVBQzFCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsYUFBYSxFQUNiLDZCQUE2QixHQUM5QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBS0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIsbUJBQW1CLEVBRW5CLFVBQVUsR0FDWCxNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7Ozs7QUFNMUU7Ozs7Ozs7O0dBUUc7QUFPSCxNQUFNLE9BQU8sMEJBQTBCO0lBNEpyQyxZQUNVLEdBQXNCLEVBQ3RCLFlBQW1DLEVBQ25DLFVBQXNCO1FBRnRCLFFBQUcsR0FBSCxHQUFH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Q0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEF2YXRhclN0eWxlLFxuICBCYXNlU3R5bGUsXG4gIERhdGVTdHlsZSxcbiAgTGlzdEl0ZW1TdHlsZSxcbiAgTWVudUxpc3RTdHlsZSxcbn0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtZWxlbWVudHNcIjtcbmltcG9ydCB7XG4gIENhbGxCdXR0b25zU3R5bGUsXG4gIERldGFpbHNDb25maWd1cmF0aW9uLFxuICBNZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLFxuICBNZXNzYWdlQ29tcG9zZXJTdHlsZSxcbiAgTWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24sXG4gIE1lc3NhZ2VIZWFkZXJTdHlsZSxcbiAgTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLFxuICBNZXNzYWdlc1N0eWxlLFxuICBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbixcbn0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtc2hhcmVkXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBDb21ldENoYXRHcm91cEV2ZW50cyxcbiAgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cyxcbiAgQ29tZXRDaGF0VUlFdmVudHMsXG4gIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLFxuICBDb21ldENoYXRVc2VyRXZlbnRzLFxuICBJR3JvdXBMZWZ0LFxuICBmb250SGVscGVyLFxufSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1yZXNvdXJjZXNcIjtcblxuaW1wb3J0IHsgQ2hhdENvbmZpZ3VyYXRvciB9IGZyb20gXCIuLi8uLi9TaGFyZWQvRnJhbWV3b3JrL0NoYXRDb25maWd1cmF0b3JcIjtcbmltcG9ydCB7IENvbWV0Q2hhdCB9IGZyb20gXCJAY29tZXRjaGF0L2NoYXQtc2RrLWphdmFzY3JpcHRcIjtcbmltcG9ydCB7IENvbWV0Q2hhdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9TaGFyZWQvVXRpbHMvQ29tZUNoYXRFeGNlcHRpb25cIjtcbmltcG9ydCB7IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9Db21ldENoYXRNZXNzYWdlQ29tcG9zZXIvY29tZXRjaGF0LW1lc3NhZ2UtY29tcG9zZXIvY29tZXRjaGF0LW1lc3NhZ2UtY29tcG9zZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb21ldENoYXRNZXNzYWdlTGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9Db21ldENoYXRNZXNzYWdlTGlzdC9jb21ldGNoYXQtbWVzc2FnZS1saXN0L2NvbWV0Y2hhdC1tZXNzYWdlLWxpc3QuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb21ldENoYXRUaGVtZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0VGhlbWUuc2VydmljZVwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcblxuLyoqXG4gKlxuICogQ29tZXRDaGF0TWVzc2FnZXMgaXMgYSB3cmFwcGVyIGNvbXBvbmVudCBmb3IgbWVzc2FnZUxpc3QsIG1lc3NhZ2VIZWFkZXIsIG1lc3NhZ2VDb21wb3NlciBhbmQgbGl2ZVJlYWN0aW9uIGNvbXBvbmVudC5cbiAqXG4gKiBAdmVyc2lvbiAxLjAuMFxuICogQGF1dGhvciBDb21ldENoYXRUZWFtXG4gKiBAY29weXJpZ2h0IMKpIDIwMjIgQ29tZXRDaGF0IEluYy5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJjb21ldGNoYXQtbWVzc2FnZXNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2NvbWV0Y2hhdC1tZXNzYWdlcy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENvbWV0Q2hhdE1lc3NhZ2VzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBAVmlld0NoaWxkKFwibWVzc2FnZUNvbXBvc2VyUmVmXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBtZXNzYWdlQ29tcG9zZXJSZWYhOiBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoXCJtZXNzYWdlTGlzdFJlZlwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbWVzc2FnZUxpc3RSZWYhOiBDb21ldENoYXRNZXNzYWdlTGlzdENvbXBvbmVudDtcbiAgQElucHV0KCkgdXNlciE6IENvbWV0Q2hhdC5Vc2VyO1xuICBASW5wdXQoKSBncm91cCE6IENvbWV0Q2hhdC5Hcm91cDtcbiAgQElucHV0KCkgY3VycmVudEFza0FJQm90ITogQ29tZXRDaGF0LlVzZXI7XG4gIEBJbnB1dCgpIGhpZGVNZXNzYWdlQ29tcG9zZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZVR5cGluZyE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uOiBNZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbiA9XG4gICAgbmV3IE1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgbWVzc2FnZUxpc3RDb25maWd1cmF0aW9uOiBNZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24gPVxuICAgIG5ldyBNZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uOiBNZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uID1cbiAgICBuZXcgTWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIHRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb246IFRocmVhZGVkTWVzc2FnZXNDb25maWd1cmF0aW9uID1cbiAgICBuZXcgVGhyZWFkZWRNZXNzYWdlc0NvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBkZXRhaWxzQ29uZmlndXJhdGlvbjogRGV0YWlsc0NvbmZpZ3VyYXRpb24gPVxuICAgIG5ldyBEZXRhaWxzQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIGN1c3RvbVNvdW5kRm9ySW5jb21pbmdNZXNzYWdlcyE6IHN0cmluZztcbiAgQElucHV0KCkgY3VzdG9tU291bmRGb3JPdXRnb2luZ01lc3NhZ2VzITogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlU291bmRGb3JNZXNzYWdlcyE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG1lc3NhZ2VzU3R5bGU6IE1lc3NhZ2VzU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYmFja2dyb3VuZDogXCJ3aGl0ZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCJub25lXCIsXG4gIH07XG4gIEBJbnB1dCgpIG1lc3NhZ2VIZWFkZXJWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgbWVzc2FnZUNvbXBvc2VyVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIG1lc3NhZ2VMaXN0VmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGhpZGVNZXNzYWdlSGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVEZXRhaWxzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1eGlsaWFyeU1lbnUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBjb252ZXJzYXRpb25TdW1tYXJ5Q2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGxvZ2dlZEluVXNlciE6IENvbWV0Q2hhdC5Vc2VyIHwgbnVsbDtcbiAgY2FsbEJ1dHRvbnNTdHlsZTogQ2FsbEJ1dHRvbnNTdHlsZSA9IHtcbiAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCIwXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJ1dHRvblBhZGRpbmc6IFwiMFwiLFxuICAgIGJ1dHRvbkJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICBidXR0b25Cb3JkZXI6IFwiMCA0cHhcIixcbiAgICBidXR0b25Cb3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gIH07XG4gIHB1YmxpYyBtZXNzYWdlVG9CZUVkaXRlZDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBsaXZlUmVhY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHJlYWN0aW9uTmFtZTogc3RyaW5nID0gXCJhc3NldHMvaGVhcnQtcmVhY3Rpb24ucG5nXCI7XG4gIHB1YmxpYyBtZXNzYWdlVG9SZWFjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBjb21wb3NlclN0eWxlczogTWVzc2FnZUNvbXBvc2VyU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMTJweFwiLFxuICAgIGJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50OTAwKCksXG4gICAgaW5wdXRCYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFNlY29uZGFyeSgpLCAvLyBkb25lXG4gICAgdGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLCAvLyBkb25lXG4gICAgdGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLCAvLyBkb25lXG4gIH07XG4gIHB1YmxpYyBsaXZlUmVhY3Rpb25UaW1lb3V0OiBhbnkgPSAwO1xuICBwdWJsaWMgb3BlblRocmVhZGVkTWVzc2FnZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNob3dBaUJvdENoYXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLypcbiBtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvblxuICovXG4gIHN1YnRpdGxlVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIGRpc2FibGVVc2Vyc1ByZXNlbmNlOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICogQGRlcHJlY2F0ZWRcbiAqXG4gKiBUaGlzIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgYXMgb2YgdmVyc2lvbiA0LjMuNyBkdWUgdG8gbmV3ZXIgcHJvcGVydHkgJ3Bhc3N3b3JkR3JvdXBJY29uJy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHN1YnNlcXVlbnQgdmVyc2lvbnMuXG4gKi9cbiAgcHJvdGVjdGVkR3JvdXBJY29uOiBzdHJpbmcgPSBcImFzc2V0cy9Mb2NrZWQuc3ZnXCI7XG4gIHBhc3N3b3JkR3JvdXBJY29uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGVHcm91cEljb246IHN0cmluZyA9IFwiYXNzZXRzL1ByaXZhdGUuc3ZnXCI7XG4gIG1lbnUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBoZWFkZXJTdHlsZTogTWVzc2FnZUhlYWRlclN0eWxlID0gbmV3IE1lc3NhZ2VIZWFkZXJTdHlsZSh7fSk7XG4gIGJhY2tCdXR0b25JY29uVVJMOiBzdHJpbmcgPSBcImFzc2V0cy9iYWNrYnV0dG9uLnN2Z1wiO1xuICBoaWRlQmFja0ljb246IGJvb2xlYW4gPSB0cnVlO1xuICBsaXN0SXRlbVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBvbkVycm9yITogKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB2b2lkO1xuICBvbkJhY2shOiAoKSA9PiB2b2lkO1xuICBhdmF0YXJTdHlsZTogQXZhdGFyU3R5bGUgPSB7XG4gICAgYm9yZGVyUmFkaXVzOiBcIjE2cHhcIixcbiAgICB3aWR0aDogXCIyOHB4XCIsXG4gICAgaGVpZ2h0OiBcIjI4cHhcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJhY2tncm91bmRDb2xvcjogXCJ3aGl0ZVwiLFxuICAgIG5hbWVUZXh0Q29sb3I6IFwicmdiKDIwLDIwLDIwKVwiLFxuICAgIGJhY2tncm91bmRTaXplOiBcImNvdmVyXCIsXG4gICAgbmFtZVRleHRGb250OiBcIjUwMCAxNnB4IEludGVyXCIsXG5cbiAgICBvdXRlclZpZXdCb3JkZXJTcGFjaW5nOiBcIlwiLFxuICB9O1xuICBzdGF0dXNJbmRpY2F0b3JTdHlsZTogQmFzZVN0eWxlID0ge1xuICAgIGJvcmRlclJhZGl1czogXCIxNnB4XCIsXG4gICAgd2lkdGg6IFwiMTBweFwiLFxuICAgIGhlaWdodDogXCIxMHB4XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgfTtcbiAgbWVzc2FnZUhlYWRlclN0eWxlOiBNZXNzYWdlSGVhZGVyU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjBcIixcbiAgICBiYWNrQnV0dG9uSWNvblRpbnQ6IFwiIzMzOTlGRlwiLFxuICAgIG9ubGluZVN0YXR1c0NvbG9yOiBcIiMwMGYzMDBcIixcbiAgICBzdWJ0aXRsZVRleHRDb2xvcjogXCJncmV5XCIsXG4gICAgc3VidGl0bGVUZXh0Rm9udDogXCI0MDAgMTRweCBJbnRlclwiLFxuICAgIHR5cGluZ0luZGljYXRvclRleHRDb2xvcjogXCIjMzM5OUZGXCIsXG4gICAgdHlwaW5nSW5kaWNhdG9yVGV4dEZvbnQ6IFwiNDAwIDEzcHggSW50ZXJcIixcbiAgfTtcbiAgbGlzdEl0ZW1TdHlsZTogTGlzdEl0ZW1TdHlsZSA9IHtcbiAgICBiYWNrZ3JvdW5kOiBcIndoaXRlXCIsXG4gICAgdGl0bGVDb2xvcjogXCJibGFja1wiLFxuICAgIHRpdGxlRm9udDogXCI1MDAgMTZweCBJbnRlclwiLFxuICAgIHdpZHRoOiBcIlwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMnB4XCIsXG4gICAgc2VwYXJhdG9yQ29sb3I6IFwiXCIsXG4gICAgYWN0aXZlQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGhvdmVyQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICB9O1xuXG4gIGluZm9JY29uU3R5bGU6IHN0cmluZyA9IFwiYXNzZXRzL0luZm8uc3ZnXCI7XG4gIGRldGFpbHNCdXR0b25TdHlsZTogYW55ID0ge1xuICAgIGhlaWdodDogXCIyNHB4XCIsXG4gICAgd2lkdGg6IFwiMjRweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjBcIixcbiAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgYnV0dG9uSWNvblRpbnQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgIHBhZGRpbmc6IFwiMCA4cHhcIixcbiAgfTtcbiAgZW5hYmxlQ2FsbGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBsaXZlUmVhY3Rpb25TdHlsZTogQmFzZVN0eWxlID0ge1xuICAgIGhlaWdodDogXCIyMHB4XCIsXG4gICAgd2lkdGg6IFwiMjVweFwiLFxuICAgIGJhY2tncm91bmQ6IFwicmVkXCJcbiAgfVxuICAvL1xuICBwdWJsaWMgY2NMaXZlUmVhY3Rpb24hOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBjY0dyb3VwRGVsZXRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNjR3JvdXBMZWZ0ITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2NVc2VyQmxvY2tlZCE6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNjVXNlclVuQmxvY2tlZCE6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNjU2hvd1BhbmVsITogU3Vic2NyaXB0aW9uO1xuICB0aHJlYWRNZXNzYWdlT2JqZWN0ITogQ29tZXRDaGF0LkJhc2VNZXNzYWdlIHwgbnVsbDtcbiAgcGFyZW50QnViYmxlVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIG9wZW5EZXRhaWxzOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRoZW1lU2VydmljZTogQ29tZXRDaGF0VGhlbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICApIHsgfVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKCk7XG4gICAgdGhpcy5zZXRNZXNzYWdlc1N0eWxlKCk7XG4gICAgdGhpcy5saXZlUmVhY3Rpb25TdHlsZSA9IHtcbiAgICAgIGhlaWdodDogXCIyMHB4XCIsXG4gICAgICB3aWR0aDogXCIyNXB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24/Lm1lc3NhZ2VDb21wb3NlclN0eWxlPy5saXZlUmVhY3Rpb25JY29uVGludCB8fCBcInJlZFwiXG4gICAgfVxuICAgIENvbWV0Q2hhdC5nZXRMb2dnZWRpblVzZXIoKVxuICAgICAgLnRoZW4oKHVzZXIpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZWRJblVzZXIgPSB1c2VyO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGlmIChDaGF0Q29uZmlndXJhdG9yLm5hbWVzLmluY2x1ZGVzKFwiY2FsbGluZ1wiKSkge1xuICAgICAgdGhpcy5lbmFibGVDYWxsaW5nID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNjTGl2ZVJlYWN0aW9uID0gQ29tZXRDaGF0TWVzc2FnZUV2ZW50cy5jY0xpdmVSZWFjdGlvbi5zdWJzY3JpYmUoXG4gICAgICAocmVhY3Rpb25OYW1lOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlYWN0aW9uTmFtZSAmJiByZWFjdGlvbk5hbWUgPT0gXCJoZWFydFwiKSB7XG4gICAgICAgICAgbGV0IGljb25VUkw6IHN0cmluZyA9XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uTGl2ZVJlYWN0aW9uSWNvblVSTCA/P1xuICAgICAgICAgICAgXCJhc3NldHMvaGVhcnQtcmVhY3Rpb24ucG5nXCI7XG4gICAgICAgICAgdGhpcy5saXZlUmVhY3Rpb25TdGFydChpY29uVVJMKTtcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuY2NHcm91cERlbGV0ZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwRGVsZXRlZC5zdWJzY3JpYmUoXG4gICAgICAoZ3JvdXA6IENvbWV0Q2hhdC5Hcm91cCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBncm91cC5nZXRHdWlkKCkpIHtcbiAgICAgICAgICB0aGlzLm9wZW5EZXRhaWxzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZ3JvdXAgPSBncm91cDtcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuY2NHcm91cExlZnQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTGVmdC5zdWJzY3JpYmUoXG4gICAgICAoaXRlbTogSUdyb3VwTGVmdCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtLmxlZnRHcm91cC5nZXRHdWlkKCkpIHtcbiAgICAgICAgICBpZiAodGhpcy5sb2dnZWRJblVzZXI/LmdldFVpZCgpID09IGl0ZW0/LnVzZXJMZWZ0LmdldFVpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5EZXRhaWxzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ3JvdXAgPSBpdGVtLmxlZnRHcm91cDtcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuY2NVc2VyQmxvY2tlZCA9IENvbWV0Q2hhdFVzZXJFdmVudHMuY2NVc2VyQmxvY2tlZC5zdWJzY3JpYmUoXG4gICAgICAodXNlcjogQ29tZXRDaGF0LlVzZXIpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudXNlciAmJiB1c2VyLmdldFVpZCgpID09IHRoaXMudXNlci5nZXRVaWQoKSkge1xuICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNjVXNlclVuQmxvY2tlZCA9IENvbWV0Q2hhdFVzZXJFdmVudHMuY2NVc2VyVW5ibG9ja2VkLnN1YnNjcmliZShcbiAgICAgICh1c2VyOiBDb21ldENoYXQuVXNlcikgPT4ge1xuICAgICAgICBpZiAodGhpcy51c2VyICYmIHVzZXIuZ2V0VWlkKCkgPT0gdGhpcy51c2VyLmdldFVpZCgpKSB7XG4gICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5jY1Nob3dQYW5lbCA9IENvbWV0Q2hhdFVJRXZlbnRzLmNjU2hvd1BhbmVsLnN1YnNjcmliZSgoZTogYW55KSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRBc2tBSUJvdCA9IGUuY2hpbGQ/LmJvdDtcbiAgICAgIGlmIChlLmNoaWxkPy5zaG93Qm90Vmlldykge1xuICAgICAgICB0aGlzLnNob3dBaUJvdENoYXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93QWlCb3RDaGF0ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuICBzZXREZXRhaWxzVGVtcGxhdGUoKSB7XG4gICAgaWYgKHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGF0YSh0aGlzLnVzZXIsIHRoaXMuZ3JvdXApXG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICB1bnN1YnNjcmliZVRvRXZlbnRzKCkge1xuICAgIHRoaXMuY2NMaXZlUmVhY3Rpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwRGVsZXRlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBMZWZ0Py51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NVc2VyQmxvY2tlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjVXNlclVuQmxvY2tlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjU2hvd1BhbmVsPy51bnN1YnNjcmliZSgpO1xuICB9XG4gIHNldE1lc3NhZ2VzU3R5bGUoKSB7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTogTWVzc2FnZXNTdHlsZSA9IG5ldyBNZXNzYWdlc1N0eWxlKHtcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGJvcmRlclJhZGl1czogXCJub25lXCIsXG4gICAgICBib3JkZXI6IGAxcHggc29saWQgJHt0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDIwMCgpfWAsXG4gICAgfSk7XG4gICAgdGhpcy5tZXNzYWdlc1N0eWxlID0ge1xuICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICAgICAgLi4udGhpcy5tZXNzYWdlc1N0eWxlLFxuICAgIH07XG4gICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGUuYm9yZGVyID1cbiAgICAgIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNTdHlsZS5ib3JkZXIgPVxuICAgICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzU3R5bGVcbiAgICAgICAgLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5ib3JkZXIgPVxuICAgICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzU3R5bGVcbiAgICAgICAgLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzU3R5bGUuYm9yZGVyID1cbiAgICAgIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNTdHlsZVxuICAgICAgICAuYm9yZGVyID8/IFwibm9uZVwiO1xuICB9XG4gIGdldEF1eGlsYXJ5VmlldygpIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZW51KSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZW51O1xuICAgIH0gZWxzZSBpZiAodGhpcy5hdXhpbGlhcnlNZW51KSB7XG4gICAgICByZXR1cm4gdGhpcy5hdXhpbGlhcnlNZW51O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgb3BlblRocmVhZFZpZXcgPSAoXG4gICAgbWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIGJ1YmJsZTogVGVtcGxhdGVSZWY8YW55PlxuICApID0+IHtcbiAgICB0aGlzLnRocmVhZE1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlO1xuICAgIHRoaXMucGFyZW50QnViYmxlVmlldyA9IGJ1YmJsZTtcbiAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gdHJ1ZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH07XG4gIG9wZW5EZXRhaWxzUGFnZSA9ICgpID0+IHtcbiAgICB0aGlzLm9wZW5EZXRhaWxzID0gdHJ1ZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH07XG4gIGNsb3NlRGV0YWlsc1BhZ2UgPSAoKSA9PiB7XG4gICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfTtcbiAgY2xvc2VUaHJlYWRWaWV3ID0gKCkgPT4ge1xuICAgIGlmKHRoaXMudGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5vbkNsb3NlKXtcbiAgICAgIHRoaXMudGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5vbkNsb3NlKClcbiAgICB9XG4gICAgdGhpcy50aHJlYWRNZXNzYWdlT2JqZWN0ID0gbnVsbDtcbiAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gZmFsc2U7XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9O1xuICAvKipcbiAgICogQHBhcmFtICB7c3RyaW5nfSByZWFjdGlvbk5hbWVcbiAgICovXG4gIGxpdmVSZWFjdGlvblN0YXJ0ID0gKHJlYWN0aW9uTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKHRoaXMubGl2ZVJlYWN0aW9uKSB7XG4gICAgICB0aGlzLnJlYWN0aW9uTmFtZSA9IFwiXCI7XG4gICAgICB0aGlzLmxpdmVSZWFjdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICB0aGlzLnJlYWN0aW9uTmFtZSA9IHJlYWN0aW9uTmFtZTtcbiAgICB0aGlzLmxpdmVSZWFjdGlvbiA9IHRydWU7XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWFjdGlvbk5hbWUgPSBcIlwiO1xuICAgICAgdGhpcy5saXZlUmVhY3Rpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxNTAwKTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH07XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hhbmdlW0NvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUudXNlcl0gfHxcbiAgICAgICAgY2hhbmdlW0NvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUuZ3JvdXBdXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9wZW5EZXRhaWxzID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy51c2VyKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIENvbWV0Q2hhdC5nZXRVc2VyKHRoaXMudXNlcikudGhlbigodXNlcjogQ29tZXRDaGF0LlVzZXIpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZ3JvdXApLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgQ29tZXRDaGF0LmdldEdyb3VwKHRoaXMuZ3JvdXApLnRoZW4oKGdyb3VwOiBDb21ldENoYXQuR3JvdXApID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCA9IGdyb3VwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2NMaXZlUmVhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gZmFsc2U7XG4gICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICB9XG4gIGNoYXRMaXN0U3R5bGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgIHRoaXMubWVzc2FnZXNTdHlsZS5iYWNrZ3JvdW5kIHx8XG4gICAgICAgIHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgaGVpZ2h0OiB0aGlzLm1lc3NhZ2VzU3R5bGUuaGVpZ2h0LFxuICAgICAgd2lkdGg6IHRoaXMubWVzc2FnZXNTdHlsZS53aWR0aCxcbiAgICAgIGJvcmRlcjogdGhpcy5tZXNzYWdlc1N0eWxlLmJvcmRlcixcbiAgICAgIGJvcmRlclJhZGl1czogdGhpcy5tZXNzYWdlc1N0eWxlLmJvcmRlclJhZGl1cyxcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBwdWJsaWMgbWV0aG9kc1xuICAgKiBtZXNzYWdlTGlzdFJlZiBtZXRob2RzXG4gICAqIFRoaXMgbWV0dGhvZCB3aWxsIGFwcGVuZCBtZXNzYWdlIGluIG1lc3NhZ2UgbGlzdFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICovXG4gIGFkZE1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIHVwZGF0ZSB0aGUgbWVzc2FnZSBpbiBtZXNzYWdlTGlzdFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICovXG4gIHVwZGF0ZU1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLCBtdWlkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VMaXN0UmVmLnVwZGF0ZU1lc3NhZ2UobWVzc2FnZSwgbXVpZCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgcmVtb3ZlICB0aGUgbWVzc2FnZSBmcm9tIG1lc3NhZ2VMaXN0XG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKi9cbiAgcmVtb3ZlTWVzc2FnZShtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VMaXN0UmVmLnJlbW92ZU1lc3NhZ2UobWVzc2FnZSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgZGVsZXRlIGFuZCByZW1vdmUgIHRoZSBtZXNzYWdlIGZyb20gbWVzc2FnZUxpc3RcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqL1xuICBkZWxldGVNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZUxpc3RSZWYuZGVsZXRlTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuICAvKipcbiAgICogdGhpcyBtZXRob2Qgd2lsbCBzZW5kIGEgdGV4dCBtZXNzYWdlXG4gICAqIEBwYXJhbSAge3N0cmluZ30gdGV4dFxuICAgKi9cbiAgc2VuZFRleHRNZXNzYWdlKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMubWVzc2FnZUNvbXBvc2VyUmVmLnNlbmRUZXh0TWVzc2FnZSh0ZXh0KTtcbiAgfVxuICAvKipcbiAgICogdGhpcyBtZXRob2Qgd2lsbCBvcGVuIHByZXZpZXcgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqIEBwYXJhbSAge3N0cmluZ30gbW9kZVxuICAgKi9cbiAgcHJldmlld01lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LlRleHRNZXNzYWdlLCBtb2RlOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgdGhpcy5tZXNzYWdlQ29tcG9zZXJSZWYubWVzc2FnZVRvQmVFZGl0ZWQgPSBtZXNzYWdlO1xuICAgIHRoaXMubWVzc2FnZUNvbXBvc2VyUmVmLm9wZW5FZGl0UHJldmlldygpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX3dyYXBwZXJcIj5cbiAgPGNvbWV0Y2hhdC1iYWNrZHJvcCAqbmdJZj1cInNob3dBaUJvdENoYXRcIj5cbiAgICA8YWlhc3Npc3QtYm90LW1lc3NhZ2UtbGlzdCBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCJcbiAgICAgIFtjdXJyZW50QXNrQUlCb3RdPVwiY3VycmVudEFza0FJQm90XCI+PC9haWFzc2lzdC1ib3QtbWVzc2FnZS1saXN0PlxuICA8L2NvbWV0Y2hhdC1iYWNrZHJvcD5cbiAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzXCIgW25nU3R5bGVdPVwiY2hhdExpc3RTdHlsZSgpXCIgKm5nSWY9XCJ1c2VyIHx8IGdyb3VwXCI+XG4gICAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX19oZWFkZXJcIiAqbmdJZj1cIiFoaWRlTWVzc2FnZUhlYWRlclwiPlxuICAgICAgPGRpdiAqbmdJZj1cIm1lc3NhZ2VIZWFkZXJWaWV3OyBlbHNlIGN1c3RvbUhlYWRlclZpZXdcIlxuICAgICAgICBjbGFzcz1cImNjLW1lc3NhZ2VzX19oZWFkZXItY3VzdG9tdmlld1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXNzYWdlSGVhZGVyVmlldztjb250ZXh0OnsgIHVzZXI6IHVzZXIsIGdyb3VwOiBncm91cCB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbUhlYWRlclZpZXc+XG4gICAgICAgIDxjb21ldGNoYXQtbWVzc2FnZS1oZWFkZXIgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICAgICAgW3N1YnRpdGxlVmlld109XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5zdWJ0aXRsZVZpZXdcIlxuICAgICAgICAgIFtkaXNhYmxlVXNlcnNQcmVzZW5jZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5kaXNhYmxlVXNlcnNQcmVzZW5jZVwiXG4gICAgICAgICAgW3Byb3RlY3RlZEdyb3VwSWNvbl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5wcm90ZWN0ZWRHcm91cEljb25cIlxuICAgICAgICAgIFtwYXNzd29yZEdyb3VwSWNvbl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5wYXNzd29yZEdyb3VwSWNvblwiXG4gICAgICAgICAgW3ByaXZhdGVHcm91cEljb25dPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ucHJpdmF0ZUdyb3VwSWNvblwiXG4gICAgICAgICAgW21lbnVdPVwiaGVhZGVyTWVudVwiXG4gICAgICAgICAgW21lc3NhZ2VIZWFkZXJTdHlsZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyU3R5bGVcIlxuICAgICAgICAgIFtiYWNrQnV0dG9uSWNvblVSTF09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5iYWNrQnV0dG9uSWNvblVSTFwiXG4gICAgICAgICAgW2hpZGVCYWNrQnV0dG9uXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLmhpZGVCYWNrQnV0dG9uXCJcbiAgICAgICAgICBbb25FcnJvcl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICAgICAgICBbb25CYWNrXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm9uQmFja1wiXG4gICAgICAgICAgW2xpc3RJdGVtU3R5bGVdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ubGlzdEl0ZW1TdHlsZVwiXG4gICAgICAgICAgW3N0YXR1c0luZGljYXRvclN0eWxlXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLnN0YXR1c0luZGljYXRvclN0eWxlXCJcbiAgICAgICAgICBbYXZhdGFyU3R5bGVdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIj5cbiAgICAgICAgPC9jb21ldGNoYXQtbWVzc2FnZS1oZWFkZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fbGlzdFwiICpuZ0lmPVwiIW1lc3NhZ2VMaXN0Vmlld1wiPlxuICAgICAgPGNvbWV0Y2hhdC1tZXNzYWdlLWxpc3QgI21lc3NhZ2VMaXN0UmVmXG4gICAgICAgIFtkaXNhYmxlUmVhY3Rpb25zXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbj8uZGlzYWJsZVJlYWN0aW9ucyFcIlxuICAgICAgICBbZW1vamlLZXlib2FyZFN0eWxlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbj8uZW1vamlLZXlib2FyZFN0eWxlIVwiXG4gICAgICAgIFt0aHJlYWRJbmRpY2F0b3JJY29uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbj8udGhyZWFkSW5kaWNhdG9ySWNvbiFcIlxuICAgICAgICBbcmVhY3Rpb25zQ29uZmlndXJhdGlvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24/LnJlYWN0aW9uc0NvbmZpZ3VyYXRpb24hXCJcbiAgICAgICAgW21lc3NhZ2VJbmZvcm1hdGlvbkNvbmZpZ3VyYXRpb25dPVwiXG4gICAgICAgIG1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25Db25maWd1cmF0aW9uXCJcbiAgICAgICAgW2Rpc2FibGVTb3VuZEZvck1lc3NhZ2VzXT1cImRpc2FibGVTb3VuZEZvck1lc3NhZ2VzXCJcbiAgICAgICAgW2N1c3RvbVNvdW5kRm9yTWVzc2FnZXNdPVwiY3VzdG9tU291bmRGb3JJbmNvbWluZ01lc3NhZ2VzXCJcbiAgICAgICAgW2VtcHR5U3RhdGVWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5lbXB0eVN0YXRlVmlld1wiXG4gICAgICAgIFtsb2FkaW5nSWNvblVSTF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24/LmxvYWRpbmdJY29uVVJMIVwiXG4gICAgICAgIFtsb2FkaW5nU3RhdGVWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5sb2FkaW5nU3RhdGVWaWV3XCJcbiAgICAgICAgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICAgIFtlcnJvclN0YXRlVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZXJyb3JTdGF0ZVZpZXdcIlxuICAgICAgICBbZGlzYWJsZVJlY2VpcHRdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRpc2FibGVSZWNlaXB0XCJcbiAgICAgICAgW2hpZGVSZWNlaXB0XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5oaWRlUmVjZWlwdFwiXG4gICAgICAgIFtyZWFkSWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ucmVhZEljb25cIlxuICAgICAgICBbZGVsaXZlcmVkSWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZGVsaXZlcmVkSWNvblwiXG4gICAgICAgIFtzZW50SWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uc2VudEljb25cIlxuICAgICAgICBbd2FpdEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLndhaXRJY29uXCJcbiAgICAgICAgW2Vycm9ySWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZXJyb3JJY29uXCJcbiAgICAgICAgW2FsaWdubWVudF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYWxpZ25tZW50XCJcbiAgICAgICAgW3Nob3dBdmF0YXJdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnNob3dBdmF0YXJcIlxuICAgICAgICBbZGF0ZVBhdHRlcm5dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRhdGVQYXR0ZXJuXCJcbiAgICAgICAgW3RpbWVzdGFtcEFsaWdubWVudF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24udGltZXN0YW1wQWxpZ25tZW50XCJcbiAgICAgICAgW0RhdGVTZXBhcmF0b3JQYXR0ZXJuXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5EYXRlU2VwYXJhdG9yUGF0dGVyblwiXG4gICAgICAgIFt0ZW1wbGF0ZXNdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnRlbXBsYXRlc1wiXG4gICAgICAgIFttZXNzYWdlc1JlcXVlc3RCdWlsZGVyXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlc1JlcXVlc3RCdWlsZGVyXCJcbiAgICAgICAgW3RocmVzaG9sZFZhbHVlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi50aHJlc2hvbGRWYWx1ZVwiXG4gICAgICAgIFtvblRocmVhZFJlcGxpZXNDbGlja109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ub25UaHJlYWRSZXBsaWVzQ2xpY2sgfHwgb3BlblRocmVhZFZpZXdcIlxuICAgICAgICBbaGVhZGVyVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uaGVhZGVyVmlld1wiXG4gICAgICAgIFtmb290ZXJWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5mb290ZXJWaWV3XCJcbiAgICAgICAgW2F2YXRhclN0eWxlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5hdmF0YXJTdHlsZVwiXG4gICAgICAgIFtzY3JvbGxUb0JvdHRvbU9uTmV3TWVzc2FnZXNdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnNjcm9sbFRvQm90dG9tT25OZXdNZXNzYWdlc1wiXG4gICAgICAgIFtiYWNrZHJvcFN0eWxlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlXCJcbiAgICAgICAgW2RhdGVTZXBhcmF0b3JTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZGF0ZVNlcGFyYXRvclN0eWxlXCJcbiAgICAgICAgW21lc3NhZ2VMaXN0U3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm1lc3NhZ2VMaXN0U3R5bGVcIlxuICAgICAgICBbb25FcnJvcl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ub25FcnJvclwiXG4gICAgICAgIFtoaWRlRXJyb3JdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmhpZGVFcnJvclwiXG4gICAgICAgIFtkaXNhYmxlTWVudGlvbnNdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRpc2FibGVNZW50aW9uc1wiXG4gICAgICAgIFt0ZXh0Rm9ybWF0dGVyc109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24/LnRleHRGb3JtYXR0ZXJzXCI+XG4gICAgICA8L2NvbWV0Y2hhdC1tZXNzYWdlLWxpc3Q+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lc3NhZ2VMaXN0Vmlld1wiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VMaXN0Vmlldztjb250ZXh0OnsgIHVzZXI6IHVzZXIsIGdyb3VwOiBncm91cCB9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fY29tcG9zZXJcIlxuICAgICAgKm5nSWY9XCIhbWVzc2FnZUNvbXBvc2VyVmlldyAmJiAhaGlkZU1lc3NhZ2VDb21wb3NlclwiPlxuICAgICAgPGNvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyICNtZXNzYWdlQ29tcG9zZXJSZWZcbiAgICAgICAgW2hpZGVWb2ljZVJlY29yZGluZ109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmhpZGVWb2ljZVJlY29yZGluZ1wiXG4gICAgICAgIFtkaXNhYmxlU291bmRGb3JNZXNzYWdlc109XCJkaXNhYmxlU291bmRGb3JNZXNzYWdlc1wiXG4gICAgICAgIFt2b2ljZVJlY29yZGluZ1N0b3BJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udm9pY2VSZWNvcmRpbmdTdG9wSWNvblVSTFwiXG4gICAgICAgIFt2b2ljZVJlY29yZGluZ1N0YXJ0SWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnZvaWNlUmVjb3JkaW5nU3RhcnRJY29uVVJMXCJcbiAgICAgICAgW3ZvaWNlUmVjb3JkaW5nQ2xvc2VJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udm9pY2VSZWNvcmRpbmdDbG9zZUljb25VUkxcIlxuICAgICAgICBbdm9pY2VSZWNvcmRpbmdTdWJtaXRJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udm9pY2VSZWNvcmRpbmdTdWJtaXRJY29uVVJMXCJcbiAgICAgICAgW21lZGlhUmVjb3JkZXJTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm1lZGlhUmVjb3JkZXJTdHlsZVwiXG4gICAgICAgIFtjdXN0b21Tb3VuZEZvck1lc3NhZ2VzXT1cImN1c3RvbVNvdW5kRm9yT3V0Z29pbmdNZXNzYWdlc1wiIFt1c2VyXT1cInVzZXJcIlxuICAgICAgICBbZ3JvdXBdPVwiZ3JvdXBcIiBbdGV4dF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnRleHRcIlxuICAgICAgICBbaGVhZGVyVmlld109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmhlYWRlclZpZXdcIlxuICAgICAgICBbb25UZXh0Q2hhbmdlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ub25UZXh0Q2hhbmdlXCJcbiAgICAgICAgW2F0dGFjaG1lbnRJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXR0YWNobWVudEljb25VUkxcIlxuICAgICAgICBbYXR0YWNobWVudE9wdGlvbnNdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdHRhY2htZW50T3B0aW9uc1wiXG4gICAgICAgIFtzZWNvbmRhcnlCdXR0b25WaWV3XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uc2Vjb25kYXJ5QnV0dG9uVmlld1wiXG4gICAgICAgIFthdXhpbGFyeUJ1dHRvblZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdXhpbGFyeUJ1dHRvblZpZXdcIlxuICAgICAgICBbYXV4aWxpYXJ5QnV0dG9uc0FsaWdubWVudF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmF1eGlsaWFyeUJ1dHRvbnNBbGlnbm1lbnRcIlxuICAgICAgICBbc2VuZEJ1dHRvblZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5zZW5kQnV0dG9uVmlld1wiXG4gICAgICAgIFtoaWRlTGl2ZVJlYWN0aW9uXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uaGlkZUxpdmVSZWFjdGlvblwiXG4gICAgICAgIFtMaXZlUmVhY3Rpb25JY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uTGl2ZVJlYWN0aW9uSWNvblVSTFwiXG4gICAgICAgIFttZXNzYWdlQ29tcG9zZXJTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlclN0eWxlXCJcbiAgICAgICAgW29uU2VuZEJ1dHRvbkNsaWNrXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ub25TZW5kQnV0dG9uQ2xpY2tcIlxuICAgICAgICBbb25TZW5kQnV0dG9uQ2xpY2tdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vblNlbmRCdXR0b25DbGlja1wiXG4gICAgICAgIFtvbkVycm9yXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ub25FcnJvclwiXG4gICAgICAgIFthY3Rpb25TaGVldFN0eWxlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYWN0aW9uU2hlZXRTdHlsZVwiXG4gICAgICAgIFthaU9wdGlvbnNTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkFJT3B0aW9uc1N0eWxlXCJcbiAgICAgICAgW2FpSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkFJSWNvblVSTFwiXG4gICAgICAgIFt1c2VyTWVtYmVyV3JhcHBlckNvbmZpZ3VyYXRpb25dPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi51c2VyTWVtYmVyV3JhcHBlckNvbmZpZ3VyYXRpb25cIlxuICAgICAgICBbdGV4dEZvcm1hdHRlcnNdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbj8udGV4dEZvcm1hdHRlcnNcIlxuICAgICAgICBbZGlzYWJsZU1lbnRpb25zXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uZGlzYWJsZU1lbnRpb25zXCJcbiAgICAgICAgW21lbnRpb25zV2FybmluZ1RleHRdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbj8ubWVudGlvbnNXYXJuaW5nVGV4dFwiXG4gICAgICAgIFttZW50aW9uc1dhcm5pbmdTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uPy5tZW50aW9uc1dhcm5pbmdTdHlsZVwiXG4gICAgICAgIFt2b2ljZVJlY29yZGluZ0ljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi52b2ljZVJlY29yZGluZ0ljb25VUkxcIlxuICAgICAgICBbZW1vamlJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uZW1vamlJY29uVVJMXCJcbiAgICAgICAgW3NlbmRCdXR0b25JY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uc2VuZEJ1dHRvbkljb25VUkxcIlxuICAgICAgICA+XG4gICAgICA8L2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJtZXNzYWdlQ29tcG9zZXJWaWV3ICYmICFoaWRlTWVzc2FnZUNvbXBvc2VyXCJcbiAgICAgIGNsYXNzPVwiY2MtbWVzc2FnZXNfX2NvbXBvc2VyLS1jdXN0b212aWV3XCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVzc2FnZUNvbXBvc2VyVmlldztjb250ZXh0OnsgIHVzZXI6IHVzZXIsIGdyb3VwOiBncm91cCB9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fbGl2ZXJlYWN0aW9uXCI+XG4gICAgPGNvbWV0Y2hhdC1saXZlLXJlYWN0aW9uICpuZ0lmPVwibGl2ZVJlYWN0aW9uXCJcbiAgICAgIFtyZWFjdGlvbkljb25VUkxdPVwicmVhY3Rpb25OYW1lXCJcbiAgICAgIFtsaXZlUmVhY3Rpb25TdHlsZV09XCJsaXZlUmVhY3Rpb25TdHlsZVwiPjwvY29tZXRjaGF0LWxpdmUtcmVhY3Rpb24+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwib3BlblRocmVhZGVkTWVzc2FnZXNcIiBjbGFzcz1cImNjLW1lc3NhZ2VzX190aHJlYWRlZG1lc3NhZ2VzXCI+XG4gICAgPGNvbWV0Y2hhdC10aHJlYWRlZC1tZXNzYWdlcyBbb25DbG9zZV09XCJjbG9zZVRocmVhZFZpZXdcIlxuICAgICAgW3RocmVhZGVkTWVzc2FnZXNTdHlsZV09XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLnRocmVhZGVkTWVzc2FnZXNTdHlsZVwiXG4gICAgICBbbWVzc2FnZUFjdGlvblZpZXddPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5tZXNzYWdlQWN0aW9uVmlld1wiXG4gICAgICBbY2xvc2VJY29uVVJMXT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24uY2xvc2VJY29uVVJMXCJcbiAgICAgIFtvbkVycm9yXT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24ub25FcnJvclwiXG4gICAgICBbYnViYmxlVmlld109XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLmJ1YmJsZVZpZXcgfHwgcGFyZW50QnViYmxlVmlld1wiXG4gICAgICBbcGFyZW50TWVzc2FnZV09XCJ0aHJlYWRNZXNzYWdlT2JqZWN0XCIgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICBbbWVzc2FnZUxpc3RDb25maWd1cmF0aW9uXT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RDb25maWd1cmF0aW9uXCJcbiAgICAgIFttZXNzYWdlQ29tcG9zZXJWaWV3XT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24ubWVzc2FnZUNvbXBvc2VyVmlld1wiXG4gICAgICBbbWVzc2FnZUxpc3RWaWV3XT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RWaWV3XCJcbiAgICAgIFtoaWRlTWVzc2FnZUNvbXBvc2VyXT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24uaGlkZU1lc3NhZ2VDb21wb3NlclwiXG4gICAgICBbbWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbl09XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb25cIlxuICAgICAgW2Rpc2FibGVTb3VuZEZvck1lc3NhZ2VzXT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24uZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNcIlxuICAgICAgPjwvY29tZXRjaGF0LXRocmVhZGVkLW1lc3NhZ2VzPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwib3BlbkRldGFpbHNcIiBjbGFzcz1cImNjLW1lc3NhZ2VzX19kZXRhaWxzXCI+XG4gICAgPGNvbWV0Y2hhdC1kZXRhaWxzXG4gICAgICBbcHJvdGVjdGVkR3JvdXBJY29uXT1cImRldGFpbHNDb25maWd1cmF0aW9uLnByb3RlY3RlZEdyb3VwSWNvblwiXG4gICAgICBbcGFzc3dvcmRHcm91cEljb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24ucGFzc3dvcmRHcm91cEljb25cIlxuICAgICAgW3ByaXZhdGVHcm91cEljb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24ucHJpdmF0ZUdyb3VwSWNvblwiXG4gICAgICBbYmFja2Ryb3BTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlXCJcbiAgICAgIFtkaXNhYmxlVXNlcnNQcmVzZW5jZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbj8uZGlzYWJsZVVzZXJzUHJlc2VuY2UhXCJcbiAgICAgIFt0cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24udHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uXCJcbiAgICAgIFtncm91cE1lbWJlcnNDb25maWd1cmF0aW9uXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb25cIlxuICAgICAgW2Jhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uXCJcbiAgICAgIFthZGRNZW1iZXJzQ29uZmlndXJhdGlvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvblwiXG4gICAgICBbb25DbG9zZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5vbkNsb3NlIHx8IGNsb3NlRGV0YWlsc1BhZ2VcIlxuICAgICAgW2xpc3RJdGVtU3R5bGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24ubGlzdEl0ZW1TdHlsZVwiXG4gICAgICBbZGV0YWlsc1N0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmRldGFpbHNTdHlsZVwiXG4gICAgICBbYXZhdGFyU3R5bGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIlxuICAgICAgW3N0YXR1c0luZGljYXRvclN0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLnN0YXR1c0luZGljYXRvclN0eWxlXCJcbiAgICAgIFtsZWF2ZURpYWxvZ1N0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmxlYXZlRGlhbG9nU3R5bGVcIlxuICAgICAgW2RhdGFdPVwic2V0RGV0YWlsc1RlbXBsYXRlKClcIlxuICAgICAgW2N1c3RvbVByb2ZpbGVWaWV3XT1cImRldGFpbHNDb25maWd1cmF0aW9uLmN1c3RvbVByb2ZpbGVWaWV3XCJcbiAgICAgIFtzdWJ0aXRsZVZpZXddPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uc3VidGl0bGVWaWV3XCJcbiAgICAgIFtoaWRlUHJvZmlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5oaWRlUHJvZmlsZVwiXG4gICAgICBbb25FcnJvcl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICAgIFtjbG9zZUJ1dHRvbkljb25VUkxdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uY2xvc2VCdXR0b25JY29uVVJMXCJcbiAgICAgIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIj48L2NvbWV0Y2hhdC1kZXRhaWxzPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNoZWFkZXJNZW51PlxuICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2hlYWRlcm1lbnVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2F1eGlsaWFyeW1lbnVcIlxuICAgICAgKm5nSWY9XCJnZXRBdXhpbGFyeVZpZXcoKTsgZWxzZSBlbHNlQmxvY2tcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRBdXhpbGFyeVZpZXcoKTtjb250ZXh0OnsgIHVzZXI6IHVzZXIsIGdyb3VwOiBncm91cCB9XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgICAgIDxjb21ldGNoYXQtY2FsbC1idXR0b25zICpuZ0lmPVwiZW5hYmxlQ2FsbGluZ1wiIHZvaWNlQ2FsbEljb25UZXh0PVwiXCJcbiAgICAgICAgdmlkZW9DYWxsSWNvblRleHQ9XCJcIiBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCJcbiAgICAgICAgW2NhbGxCdXR0b25zU3R5bGVdPVwiY2FsbEJ1dHRvbnNTdHlsZVwiPlxuICAgICAgPC9jb21ldGNoYXQtY2FsbC1idXR0b25zPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGNvbWV0Y2hhdC1idXR0b24gKm5nSWY9XCIhaGlkZURldGFpbHNcIiBbaWNvblVSTF09XCJpbmZvSWNvblN0eWxlXCJcbiAgICAgIFtidXR0b25TdHlsZV09XCJkZXRhaWxzQnV0dG9uU3R5bGVcIlxuICAgICAgKGNjLWJ1dHRvbi1jbGlja2VkKT1cIm9wZW5EZXRhaWxzUGFnZSgpXCI+PC9jb21ldGNoYXQtYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
449
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TWVzc2FnZXMvY29tZXRjaGF0LW1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdE1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUVMLG9CQUFvQixFQUNwQiw0QkFBNEIsRUFFNUIsMEJBQTBCLEVBQzFCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsYUFBYSxFQUNiLDZCQUE2QixHQUM5QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBS0wsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQix1QkFBdUIsRUFDdkIsbUJBQW1CLEVBRW5CLFVBQVUsR0FDWCxNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7Ozs7QUFNMUU7Ozs7Ozs7O0dBUUc7QUFPSCxNQUFNLE9BQU8sMEJBQTBCO0lBNEpyQyxZQUNVLEdBQXNCLEVBQ3RCLFlBQW1DLEVBQ25DLFVBQXNCO1FBRnRCLFFBQUcsR0FBSCxHQUFH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Q0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEF2YXRhclN0eWxlLFxuICBCYXNlU3R5bGUsXG4gIERhdGVTdHlsZSxcbiAgTGlzdEl0ZW1TdHlsZSxcbiAgTWVudUxpc3RTdHlsZSxcbn0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtZWxlbWVudHNcIjtcbmltcG9ydCB7XG4gIENhbGxCdXR0b25zU3R5bGUsXG4gIERldGFpbHNDb25maWd1cmF0aW9uLFxuICBNZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLFxuICBNZXNzYWdlQ29tcG9zZXJTdHlsZSxcbiAgTWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24sXG4gIE1lc3NhZ2VIZWFkZXJTdHlsZSxcbiAgTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLFxuICBNZXNzYWdlc1N0eWxlLFxuICBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbixcbn0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtc2hhcmVkXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBDb21ldENoYXRHcm91cEV2ZW50cyxcbiAgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cyxcbiAgQ29tZXRDaGF0VUlFdmVudHMsXG4gIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLFxuICBDb21ldENoYXRVc2VyRXZlbnRzLFxuICBJR3JvdXBMZWZ0LFxuICBmb250SGVscGVyLFxufSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1yZXNvdXJjZXNcIjtcblxuaW1wb3J0IHsgQ2hhdENvbmZpZ3VyYXRvciB9IGZyb20gXCIuLi8uLi9TaGFyZWQvRnJhbWV3b3JrL0NoYXRDb25maWd1cmF0b3JcIjtcbmltcG9ydCB7IENvbWV0Q2hhdCB9IGZyb20gXCJAY29tZXRjaGF0L2NoYXQtc2RrLWphdmFzY3JpcHRcIjtcbmltcG9ydCB7IENvbWV0Q2hhdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9TaGFyZWQvVXRpbHMvQ29tZUNoYXRFeGNlcHRpb25cIjtcbmltcG9ydCB7IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9Db21ldENoYXRNZXNzYWdlQ29tcG9zZXIvY29tZXRjaGF0LW1lc3NhZ2UtY29tcG9zZXIvY29tZXRjaGF0LW1lc3NhZ2UtY29tcG9zZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb21ldENoYXRNZXNzYWdlTGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9Db21ldENoYXRNZXNzYWdlTGlzdC9jb21ldGNoYXQtbWVzc2FnZS1saXN0L2NvbWV0Y2hhdC1tZXNzYWdlLWxpc3QuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb21ldENoYXRUaGVtZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0VGhlbWUuc2VydmljZVwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcblxuLyoqXG4gKlxuICogQ29tZXRDaGF0TWVzc2FnZXMgaXMgYSB3cmFwcGVyIGNvbXBvbmVudCBmb3IgbWVzc2FnZUxpc3QsIG1lc3NhZ2VIZWFkZXIsIG1lc3NhZ2VDb21wb3NlciBhbmQgbGl2ZVJlYWN0aW9uIGNvbXBvbmVudC5cbiAqXG4gKiBAdmVyc2lvbiAxLjAuMFxuICogQGF1dGhvciBDb21ldENoYXRUZWFtXG4gKiBAY29weXJpZ2h0IMKpIDIwMjIgQ29tZXRDaGF0IEluYy5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJjb21ldGNoYXQtbWVzc2FnZXNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2NvbWV0Y2hhdC1tZXNzYWdlcy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENvbWV0Q2hhdE1lc3NhZ2VzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBAVmlld0NoaWxkKFwibWVzc2FnZUNvbXBvc2VyUmVmXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBtZXNzYWdlQ29tcG9zZXJSZWYhOiBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoXCJtZXNzYWdlTGlzdFJlZlwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbWVzc2FnZUxpc3RSZWYhOiBDb21ldENoYXRNZXNzYWdlTGlzdENvbXBvbmVudDtcbiAgQElucHV0KCkgdXNlciE6IENvbWV0Q2hhdC5Vc2VyO1xuICBASW5wdXQoKSBncm91cCE6IENvbWV0Q2hhdC5Hcm91cDtcbiAgQElucHV0KCkgY3VycmVudEFza0FJQm90ITogQ29tZXRDaGF0LlVzZXI7XG4gIEBJbnB1dCgpIGhpZGVNZXNzYWdlQ29tcG9zZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZVR5cGluZyE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uOiBNZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbiA9XG4gICAgbmV3IE1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgbWVzc2FnZUxpc3RDb25maWd1cmF0aW9uOiBNZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24gPVxuICAgIG5ldyBNZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uOiBNZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uID1cbiAgICBuZXcgTWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIHRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb246IFRocmVhZGVkTWVzc2FnZXNDb25maWd1cmF0aW9uID1cbiAgICBuZXcgVGhyZWFkZWRNZXNzYWdlc0NvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBkZXRhaWxzQ29uZmlndXJhdGlvbjogRGV0YWlsc0NvbmZpZ3VyYXRpb24gPVxuICAgIG5ldyBEZXRhaWxzQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIGN1c3RvbVNvdW5kRm9ySW5jb21pbmdNZXNzYWdlcyE6IHN0cmluZztcbiAgQElucHV0KCkgY3VzdG9tU291bmRGb3JPdXRnb2luZ01lc3NhZ2VzITogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlU291bmRGb3JNZXNzYWdlcyE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG1lc3NhZ2VzU3R5bGU6IE1lc3NhZ2VzU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYmFja2dyb3VuZDogXCJ3aGl0ZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCJub25lXCIsXG4gIH07XG4gIEBJbnB1dCgpIG1lc3NhZ2VIZWFkZXJWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgbWVzc2FnZUNvbXBvc2VyVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIG1lc3NhZ2VMaXN0VmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGhpZGVNZXNzYWdlSGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVEZXRhaWxzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1eGlsaWFyeU1lbnUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBjb252ZXJzYXRpb25TdW1tYXJ5Q2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGxvZ2dlZEluVXNlciE6IENvbWV0Q2hhdC5Vc2VyIHwgbnVsbDtcbiAgY2FsbEJ1dHRvbnNTdHlsZTogQ2FsbEJ1dHRvbnNTdHlsZSA9IHtcbiAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCIwXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJ1dHRvblBhZGRpbmc6IFwiMFwiLFxuICAgIGJ1dHRvbkJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICBidXR0b25Cb3JkZXI6IFwiMCA0cHhcIixcbiAgICBidXR0b25Cb3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gIH07XG4gIHB1YmxpYyBtZXNzYWdlVG9CZUVkaXRlZDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBsaXZlUmVhY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHJlYWN0aW9uTmFtZTogc3RyaW5nID0gXCJhc3NldHMvaGVhcnQtcmVhY3Rpb24ucG5nXCI7XG4gIHB1YmxpYyBtZXNzYWdlVG9SZWFjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBjb21wb3NlclN0eWxlczogTWVzc2FnZUNvbXBvc2VyU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMTJweFwiLFxuICAgIGJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50OTAwKCksXG4gICAgaW5wdXRCYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFNlY29uZGFyeSgpLCAvLyBkb25lXG4gICAgdGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLCAvLyBkb25lXG4gICAgdGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLCAvLyBkb25lXG4gIH07XG4gIHB1YmxpYyBsaXZlUmVhY3Rpb25UaW1lb3V0OiBhbnkgPSAwO1xuICBwdWJsaWMgb3BlblRocmVhZGVkTWVzc2FnZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNob3dBaUJvdENoYXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLypcbiBtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvblxuICovXG4gIHN1YnRpdGxlVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIGRpc2FibGVVc2Vyc1ByZXNlbmNlOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICogQGRlcHJlY2F0ZWRcbiAqXG4gKiBUaGlzIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQgYXMgb2YgdmVyc2lvbiA0LjMuNyBkdWUgdG8gbmV3ZXIgcHJvcGVydHkgJ3Bhc3N3b3JkR3JvdXBJY29uJy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHN1YnNlcXVlbnQgdmVyc2lvbnMuXG4gKi9cbiAgcHJvdGVjdGVkR3JvdXBJY29uOiBzdHJpbmcgPSBcImFzc2V0cy9Mb2NrZWQuc3ZnXCI7XG4gIHBhc3N3b3JkR3JvdXBJY29uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIHByaXZhdGVHcm91cEljb246IHN0cmluZyA9IFwiYXNzZXRzL1ByaXZhdGUuc3ZnXCI7XG4gIG1lbnUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBoZWFkZXJTdHlsZTogTWVzc2FnZUhlYWRlclN0eWxlID0gbmV3IE1lc3NhZ2VIZWFkZXJTdHlsZSh7fSk7XG4gIGJhY2tCdXR0b25JY29uVVJMOiBzdHJpbmcgPSBcImFzc2V0cy9iYWNrYnV0dG9uLnN2Z1wiO1xuICBoaWRlQmFja0ljb246IGJvb2xlYW4gPSB0cnVlO1xuICBsaXN0SXRlbVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBvbkVycm9yITogKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB2b2lkO1xuICBvbkJhY2shOiAoKSA9PiB2b2lkO1xuICBhdmF0YXJTdHlsZTogQXZhdGFyU3R5bGUgPSB7XG4gICAgYm9yZGVyUmFkaXVzOiBcIjE2cHhcIixcbiAgICB3aWR0aDogXCIyOHB4XCIsXG4gICAgaGVpZ2h0OiBcIjI4cHhcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJhY2tncm91bmRDb2xvcjogXCJ3aGl0ZVwiLFxuICAgIG5hbWVUZXh0Q29sb3I6IFwicmdiKDIwLDIwLDIwKVwiLFxuICAgIGJhY2tncm91bmRTaXplOiBcImNvdmVyXCIsXG4gICAgbmFtZVRleHRGb250OiBcIjUwMCAxNnB4IEludGVyXCIsXG5cbiAgICBvdXRlclZpZXdCb3JkZXJTcGFjaW5nOiBcIlwiLFxuICB9O1xuICBzdGF0dXNJbmRpY2F0b3JTdHlsZTogQmFzZVN0eWxlID0ge1xuICAgIGJvcmRlclJhZGl1czogXCIxNnB4XCIsXG4gICAgd2lkdGg6IFwiMTBweFwiLFxuICAgIGhlaWdodDogXCIxMHB4XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgfTtcbiAgbWVzc2FnZUhlYWRlclN0eWxlOiBNZXNzYWdlSGVhZGVyU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjBcIixcbiAgICBiYWNrQnV0dG9uSWNvblRpbnQ6IFwiIzMzOTlGRlwiLFxuICAgIG9ubGluZVN0YXR1c0NvbG9yOiBcIiMwMGYzMDBcIixcbiAgICBzdWJ0aXRsZVRleHRDb2xvcjogXCJncmV5XCIsXG4gICAgc3VidGl0bGVUZXh0Rm9udDogXCI0MDAgMTRweCBJbnRlclwiLFxuICAgIHR5cGluZ0luZGljYXRvclRleHRDb2xvcjogXCIjMzM5OUZGXCIsXG4gICAgdHlwaW5nSW5kaWNhdG9yVGV4dEZvbnQ6IFwiNDAwIDEzcHggSW50ZXJcIixcbiAgfTtcbiAgbGlzdEl0ZW1TdHlsZTogTGlzdEl0ZW1TdHlsZSA9IHtcbiAgICBiYWNrZ3JvdW5kOiBcIndoaXRlXCIsXG4gICAgdGl0bGVDb2xvcjogXCJibGFja1wiLFxuICAgIHRpdGxlRm9udDogXCI1MDAgMTZweCBJbnRlclwiLFxuICAgIHdpZHRoOiBcIlwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMnB4XCIsXG4gICAgc2VwYXJhdG9yQ29sb3I6IFwiXCIsXG4gICAgYWN0aXZlQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGhvdmVyQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICB9O1xuXG4gIGluZm9JY29uU3R5bGU6IHN0cmluZyA9IFwiYXNzZXRzL0luZm8uc3ZnXCI7XG4gIGRldGFpbHNCdXR0b25TdHlsZTogYW55ID0ge1xuICAgIGhlaWdodDogXCIyNHB4XCIsXG4gICAgd2lkdGg6IFwiMjRweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjBcIixcbiAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgYnV0dG9uSWNvblRpbnQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgIHBhZGRpbmc6IFwiMCA4cHhcIixcbiAgfTtcbiAgZW5hYmxlQ2FsbGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBsaXZlUmVhY3Rpb25TdHlsZTogQmFzZVN0eWxlID0ge1xuICAgIGhlaWdodDogXCIyMHB4XCIsXG4gICAgd2lkdGg6IFwiMjVweFwiLFxuICAgIGJhY2tncm91bmQ6IFwicmVkXCJcbiAgfVxuICAvL1xuICBwdWJsaWMgY2NMaXZlUmVhY3Rpb24hOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBjY0dyb3VwRGVsZXRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNjR3JvdXBMZWZ0ITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2NVc2VyQmxvY2tlZCE6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNjVXNlclVuQmxvY2tlZCE6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNjU2hvd1BhbmVsITogU3Vic2NyaXB0aW9uO1xuICB0aHJlYWRNZXNzYWdlT2JqZWN0ITogQ29tZXRDaGF0LkJhc2VNZXNzYWdlIHwgbnVsbDtcbiAgcGFyZW50QnViYmxlVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIG9wZW5EZXRhaWxzOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRoZW1lU2VydmljZTogQ29tZXRDaGF0VGhlbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICApIHsgfVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKCk7XG4gICAgdGhpcy5zZXRNZXNzYWdlc1N0eWxlKCk7XG4gICAgdGhpcy5saXZlUmVhY3Rpb25TdHlsZSA9IHtcbiAgICAgIGhlaWdodDogXCIyMHB4XCIsXG4gICAgICB3aWR0aDogXCIyNXB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24/Lm1lc3NhZ2VDb21wb3NlclN0eWxlPy5saXZlUmVhY3Rpb25JY29uVGludCB8fCBcInJlZFwiXG4gICAgfVxuICAgIENvbWV0Q2hhdC5nZXRMb2dnZWRpblVzZXIoKVxuICAgICAgLnRoZW4oKHVzZXIpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZWRJblVzZXIgPSB1c2VyO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGlmIChDaGF0Q29uZmlndXJhdG9yLm5hbWVzLmluY2x1ZGVzKFwiY2FsbGluZ1wiKSkge1xuICAgICAgdGhpcy5lbmFibGVDYWxsaW5nID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNjTGl2ZVJlYWN0aW9uID0gQ29tZXRDaGF0TWVzc2FnZUV2ZW50cy5jY0xpdmVSZWFjdGlvbi5zdWJzY3JpYmUoXG4gICAgICAocmVhY3Rpb25OYW1lOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlYWN0aW9uTmFtZSAmJiByZWFjdGlvbk5hbWUgPT0gXCJoZWFydFwiKSB7XG4gICAgICAgICAgbGV0IGljb25VUkw6IHN0cmluZyA9XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uTGl2ZVJlYWN0aW9uSWNvblVSTCA/P1xuICAgICAgICAgICAgXCJhc3NldHMvaGVhcnQtcmVhY3Rpb24ucG5nXCI7XG4gICAgICAgICAgdGhpcy5saXZlUmVhY3Rpb25TdGFydChpY29uVVJMKTtcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuY2NHcm91cERlbGV0ZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwRGVsZXRlZC5zdWJzY3JpYmUoXG4gICAgICAoZ3JvdXA6IENvbWV0Q2hhdC5Hcm91cCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBncm91cC5nZXRHdWlkKCkpIHtcbiAgICAgICAgICB0aGlzLm9wZW5EZXRhaWxzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZ3JvdXAgPSBncm91cDtcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuY2NHcm91cExlZnQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTGVmdC5zdWJzY3JpYmUoXG4gICAgICAoaXRlbTogSUdyb3VwTGVmdCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtLmxlZnRHcm91cC5nZXRHdWlkKCkpIHtcbiAgICAgICAgICBpZiAodGhpcy5sb2dnZWRJblVzZXI/LmdldFVpZCgpID09IGl0ZW0/LnVzZXJMZWZ0LmdldFVpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5EZXRhaWxzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ3JvdXAgPSBpdGVtLmxlZnRHcm91cDtcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuY2NVc2VyQmxvY2tlZCA9IENvbWV0Q2hhdFVzZXJFdmVudHMuY2NVc2VyQmxvY2tlZC5zdWJzY3JpYmUoXG4gICAgICAodXNlcjogQ29tZXRDaGF0LlVzZXIpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudXNlciAmJiB1c2VyLmdldFVpZCgpID09IHRoaXMudXNlci5nZXRVaWQoKSkge1xuICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNjVXNlclVuQmxvY2tlZCA9IENvbWV0Q2hhdFVzZXJFdmVudHMuY2NVc2VyVW5ibG9ja2VkLnN1YnNjcmliZShcbiAgICAgICh1c2VyOiBDb21ldENoYXQuVXNlcikgPT4ge1xuICAgICAgICBpZiAodGhpcy51c2VyICYmIHVzZXIuZ2V0VWlkKCkgPT0gdGhpcy51c2VyLmdldFVpZCgpKSB7XG4gICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5jY1Nob3dQYW5lbCA9IENvbWV0Q2hhdFVJRXZlbnRzLmNjU2hvd1BhbmVsLnN1YnNjcmliZSgoZTogYW55KSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRBc2tBSUJvdCA9IGUuY2hpbGQ/LmJvdDtcbiAgICAgIGlmIChlLmNoaWxkPy5zaG93Qm90Vmlldykge1xuICAgICAgICB0aGlzLnNob3dBaUJvdENoYXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaG93QWlCb3RDaGF0ID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9KTtcbiAgfVxuICBzZXREZXRhaWxzVGVtcGxhdGUoKSB7XG4gICAgaWYgKHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGF0YSh0aGlzLnVzZXIsIHRoaXMuZ3JvdXApXG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICB1bnN1YnNjcmliZVRvRXZlbnRzKCkge1xuICAgIHRoaXMuY2NMaXZlUmVhY3Rpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwRGVsZXRlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBMZWZ0Py51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NVc2VyQmxvY2tlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjVXNlclVuQmxvY2tlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjU2hvd1BhbmVsPy51bnN1YnNjcmliZSgpO1xuICB9XG4gIHNldE1lc3NhZ2VzU3R5bGUoKSB7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTogTWVzc2FnZXNTdHlsZSA9IG5ldyBNZXNzYWdlc1N0eWxlKHtcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGJvcmRlclJhZGl1czogXCJub25lXCIsXG4gICAgICBib3JkZXI6IGAxcHggc29saWQgJHt0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDIwMCgpfWAsXG4gICAgfSk7XG4gICAgdGhpcy5tZXNzYWdlc1N0eWxlID0ge1xuICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICAgICAgLi4udGhpcy5tZXNzYWdlc1N0eWxlLFxuICAgIH07XG4gICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGUuYm9yZGVyID1cbiAgICAgIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNTdHlsZS5ib3JkZXIgPVxuICAgICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzU3R5bGVcbiAgICAgICAgLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5ib3JkZXIgPVxuICAgICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzU3R5bGVcbiAgICAgICAgLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzU3R5bGUuYm9yZGVyID1cbiAgICAgIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNTdHlsZVxuICAgICAgICAuYm9yZGVyID8/IFwibm9uZVwiO1xuICB9XG4gIGdldEF1eGlsYXJ5VmlldygpIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZW51KSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZW51O1xuICAgIH0gZWxzZSBpZiAodGhpcy5hdXhpbGlhcnlNZW51KSB7XG4gICAgICByZXR1cm4gdGhpcy5hdXhpbGlhcnlNZW51O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgb3BlblRocmVhZFZpZXcgPSAoXG4gICAgbWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIGJ1YmJsZTogVGVtcGxhdGVSZWY8YW55PlxuICApID0+IHtcbiAgICB0aGlzLnRocmVhZE1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlO1xuICAgIHRoaXMucGFyZW50QnViYmxlVmlldyA9IGJ1YmJsZTtcbiAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gdHJ1ZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH07XG4gIG9wZW5EZXRhaWxzUGFnZSA9ICgpID0+IHtcbiAgICB0aGlzLm9wZW5EZXRhaWxzID0gdHJ1ZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH07XG4gIGNsb3NlRGV0YWlsc1BhZ2UgPSAoKSA9PiB7XG4gICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfTtcbiAgY2xvc2VUaHJlYWRWaWV3ID0gKCkgPT4ge1xuICAgIGlmKHRoaXMudGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5vbkNsb3NlKXtcbiAgICAgIHRoaXMudGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5vbkNsb3NlKClcbiAgICB9XG4gICAgdGhpcy50aHJlYWRNZXNzYWdlT2JqZWN0ID0gbnVsbDtcbiAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gZmFsc2U7XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9O1xuICAvKipcbiAgICogQHBhcmFtICB7c3RyaW5nfSByZWFjdGlvbk5hbWVcbiAgICovXG4gIGxpdmVSZWFjdGlvblN0YXJ0ID0gKHJlYWN0aW9uTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKHRoaXMubGl2ZVJlYWN0aW9uKSB7XG4gICAgICB0aGlzLnJlYWN0aW9uTmFtZSA9IFwiXCI7XG4gICAgICB0aGlzLmxpdmVSZWFjdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICB0aGlzLnJlYWN0aW9uTmFtZSA9IHJlYWN0aW9uTmFtZTtcbiAgICB0aGlzLmxpdmVSZWFjdGlvbiA9IHRydWU7XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWFjdGlvbk5hbWUgPSBcIlwiO1xuICAgICAgdGhpcy5saXZlUmVhY3Rpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAxNTAwKTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH07XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChcbiAgICAgICAgY2hhbmdlW0NvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUudXNlcl0gfHxcbiAgICAgICAgY2hhbmdlW0NvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUuZ3JvdXBdXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9wZW5EZXRhaWxzID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy51c2VyKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIENvbWV0Q2hhdC5nZXRVc2VyKHRoaXMudXNlcikudGhlbigodXNlcjogQ29tZXRDaGF0LlVzZXIpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZ3JvdXApLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgQ29tZXRDaGF0LmdldEdyb3VwKHRoaXMuZ3JvdXApLnRoZW4oKGdyb3VwOiBDb21ldENoYXQuR3JvdXApID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5ncm91cCA9IGdyb3VwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2NMaXZlUmVhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gZmFsc2U7XG4gICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICB9XG4gIGNoYXRMaXN0U3R5bGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgIHRoaXMubWVzc2FnZXNTdHlsZS5iYWNrZ3JvdW5kIHx8XG4gICAgICAgIHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgaGVpZ2h0OiB0aGlzLm1lc3NhZ2VzU3R5bGUuaGVpZ2h0LFxuICAgICAgd2lkdGg6IHRoaXMubWVzc2FnZXNTdHlsZS53aWR0aCxcbiAgICAgIGJvcmRlcjogdGhpcy5tZXNzYWdlc1N0eWxlLmJvcmRlcixcbiAgICAgIGJvcmRlclJhZGl1czogdGhpcy5tZXNzYWdlc1N0eWxlLmJvcmRlclJhZGl1cyxcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBwdWJsaWMgbWV0aG9kc1xuICAgKiBtZXNzYWdlTGlzdFJlZiBtZXRob2RzXG4gICAqIFRoaXMgbWV0dGhvZCB3aWxsIGFwcGVuZCBtZXNzYWdlIGluIG1lc3NhZ2UgbGlzdFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICovXG4gIGFkZE1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIHVwZGF0ZSB0aGUgbWVzc2FnZSBpbiBtZXNzYWdlTGlzdFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICovXG4gIHVwZGF0ZU1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLCBtdWlkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VMaXN0UmVmLnVwZGF0ZU1lc3NhZ2UobWVzc2FnZSwgbXVpZCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgcmVtb3ZlICB0aGUgbWVzc2FnZSBmcm9tIG1lc3NhZ2VMaXN0XG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKi9cbiAgcmVtb3ZlTWVzc2FnZShtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VMaXN0UmVmLnJlbW92ZU1lc3NhZ2UobWVzc2FnZSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgZGVsZXRlIGFuZCByZW1vdmUgIHRoZSBtZXNzYWdlIGZyb20gbWVzc2FnZUxpc3RcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqL1xuICBkZWxldGVNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZUxpc3RSZWYuZGVsZXRlTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuICAvKipcbiAgICogdGhpcyBtZXRob2Qgd2lsbCBzZW5kIGEgdGV4dCBtZXNzYWdlXG4gICAqIEBwYXJhbSAge3N0cmluZ30gdGV4dFxuICAgKi9cbiAgc2VuZFRleHRNZXNzYWdlKHRleHQ6IHN0cmluZykge1xuICAgIHRoaXMubWVzc2FnZUNvbXBvc2VyUmVmLnNlbmRUZXh0TWVzc2FnZSh0ZXh0KTtcbiAgfVxuICAvKipcbiAgICogdGhpcyBtZXRob2Qgd2lsbCBvcGVuIHByZXZpZXcgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqIEBwYXJhbSAge3N0cmluZ30gbW9kZVxuICAgKi9cbiAgcHJldmlld01lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LlRleHRNZXNzYWdlLCBtb2RlOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgdGhpcy5tZXNzYWdlQ29tcG9zZXJSZWYubWVzc2FnZVRvQmVFZGl0ZWQgPSBtZXNzYWdlO1xuICAgIHRoaXMubWVzc2FnZUNvbXBvc2VyUmVmLm9wZW5FZGl0UHJldmlldygpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX3dyYXBwZXJcIj5cbiAgPGNvbWV0Y2hhdC1iYWNrZHJvcCAqbmdJZj1cInNob3dBaUJvdENoYXRcIj5cbiAgICA8YWlhc3Npc3QtYm90LW1lc3NhZ2UtbGlzdCBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCJcbiAgICAgIFtjdXJyZW50QXNrQUlCb3RdPVwiY3VycmVudEFza0FJQm90XCI+PC9haWFzc2lzdC1ib3QtbWVzc2FnZS1saXN0PlxuICA8L2NvbWV0Y2hhdC1iYWNrZHJvcD5cbiAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzXCIgW25nU3R5bGVdPVwiY2hhdExpc3RTdHlsZSgpXCIgKm5nSWY9XCJ1c2VyIHx8IGdyb3VwXCI+XG4gICAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX19oZWFkZXJcIiAqbmdJZj1cIiFoaWRlTWVzc2FnZUhlYWRlclwiPlxuICAgICAgPGRpdiAqbmdJZj1cIm1lc3NhZ2VIZWFkZXJWaWV3OyBlbHNlIGN1c3RvbUhlYWRlclZpZXdcIlxuICAgICAgICBjbGFzcz1cImNjLW1lc3NhZ2VzX19oZWFkZXItY3VzdG9tdmlld1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXNzYWdlSGVhZGVyVmlldztjb250ZXh0OnsgIHVzZXI6IHVzZXIsIGdyb3VwOiBncm91cCB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbUhlYWRlclZpZXc+XG4gICAgICAgIDxjb21ldGNoYXQtbWVzc2FnZS1oZWFkZXIgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICAgICAgW3N1YnRpdGxlVmlld109XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5zdWJ0aXRsZVZpZXdcIlxuICAgICAgICAgIFtkaXNhYmxlVXNlcnNQcmVzZW5jZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5kaXNhYmxlVXNlcnNQcmVzZW5jZVwiXG4gICAgICAgICAgW3Byb3RlY3RlZEdyb3VwSWNvbl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5wcm90ZWN0ZWRHcm91cEljb25cIlxuICAgICAgICAgIFtwYXNzd29yZEdyb3VwSWNvbl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5wYXNzd29yZEdyb3VwSWNvblwiXG4gICAgICAgICAgW3ByaXZhdGVHcm91cEljb25dPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ucHJpdmF0ZUdyb3VwSWNvblwiXG4gICAgICAgICAgW21lbnVdPVwiaGVhZGVyTWVudVwiXG4gICAgICAgICAgW21lc3NhZ2VIZWFkZXJTdHlsZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyU3R5bGVcIlxuICAgICAgICAgIFtiYWNrQnV0dG9uSWNvblVSTF09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5iYWNrQnV0dG9uSWNvblVSTFwiXG4gICAgICAgICAgW2hpZGVCYWNrQnV0dG9uXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLmhpZGVCYWNrQnV0dG9uXCJcbiAgICAgICAgICBbb25FcnJvcl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICAgICAgICBbb25CYWNrXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm9uQmFja1wiXG4gICAgICAgICAgW2xpc3RJdGVtU3R5bGVdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ubGlzdEl0ZW1TdHlsZVwiXG4gICAgICAgICAgW3N0YXR1c0luZGljYXRvclN0eWxlXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLnN0YXR1c0luZGljYXRvclN0eWxlXCJcbiAgICAgICAgICBbYXZhdGFyU3R5bGVdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIj5cbiAgICAgICAgPC9jb21ldGNoYXQtbWVzc2FnZS1oZWFkZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fbGlzdFwiICpuZ0lmPVwiIW1lc3NhZ2VMaXN0Vmlld1wiPlxuICAgICAgPGNvbWV0Y2hhdC1tZXNzYWdlLWxpc3QgI21lc3NhZ2VMaXN0UmVmXG4gICAgICAgIFtkaXNhYmxlUmVhY3Rpb25zXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbj8uZGlzYWJsZVJlYWN0aW9ucyFcIlxuICAgICAgICBbZW1vamlLZXlib2FyZFN0eWxlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbj8uZW1vamlLZXlib2FyZFN0eWxlIVwiXG4gICAgICAgIFt0aHJlYWRJbmRpY2F0b3JJY29uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbj8udGhyZWFkSW5kaWNhdG9ySWNvbiFcIlxuICAgICAgICBbcmVhY3Rpb25zQ29uZmlndXJhdGlvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24/LnJlYWN0aW9uc0NvbmZpZ3VyYXRpb24hXCJcbiAgICAgICAgW21lc3NhZ2VJbmZvcm1hdGlvbkNvbmZpZ3VyYXRpb25dPVwiXG4gICAgICAgIG1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25Db25maWd1cmF0aW9uXCJcbiAgICAgICAgW2Rpc2FibGVTb3VuZEZvck1lc3NhZ2VzXT1cImRpc2FibGVTb3VuZEZvck1lc3NhZ2VzXCJcbiAgICAgICAgW2N1c3RvbVNvdW5kRm9yTWVzc2FnZXNdPVwiY3VzdG9tU291bmRGb3JJbmNvbWluZ01lc3NhZ2VzXCJcbiAgICAgICAgW2VtcHR5U3RhdGVWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5lbXB0eVN0YXRlVmlld1wiXG4gICAgICAgIFtsb2FkaW5nSWNvblVSTF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24/LmxvYWRpbmdJY29uVVJMIVwiXG4gICAgICAgIFtsb2FkaW5nU3RhdGVWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5sb2FkaW5nU3RhdGVWaWV3XCJcbiAgICAgICAgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICAgIFtuZXdNZXNzYWdlSW5kaWNhdG9yU3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm5ld01lc3NhZ2VJbmRpY2F0b3JTdHlsZVwiXG4gICAgICAgIFtuZXdNZXNzYWdlSW5kaWNhdG9ySWNvblVybF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubmV3TWVzc2FnZUluZGljYXRvckljb25VcmxcIlxuICAgICAgICBbZXJyb3JTdGF0ZVZpZXddPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmVycm9yU3RhdGVWaWV3XCJcbiAgICAgICAgW2Rpc2FibGVSZWNlaXB0XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlUmVjZWlwdFwiXG4gICAgICAgIFtoaWRlUmVjZWlwdF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uaGlkZVJlY2VpcHRcIlxuICAgICAgICBbcmVhZEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnJlYWRJY29uXCJcbiAgICAgICAgW2RlbGl2ZXJlZEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRlbGl2ZXJlZEljb25cIlxuICAgICAgICBbc2VudEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnNlbnRJY29uXCJcbiAgICAgICAgW3dhaXRJY29uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi53YWl0SWNvblwiXG4gICAgICAgIFtlcnJvckljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmVycm9ySWNvblwiXG4gICAgICAgIFthbGlnbm1lbnRdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmFsaWdubWVudFwiXG4gICAgICAgIFtzaG93QXZhdGFyXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5zaG93QXZhdGFyXCJcbiAgICAgICAgW2RhdGVQYXR0ZXJuXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kYXRlUGF0dGVyblwiXG4gICAgICAgIFt0aW1lc3RhbXBBbGlnbm1lbnRdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnRpbWVzdGFtcEFsaWdubWVudFwiXG4gICAgICAgIFtEYXRlU2VwYXJhdG9yUGF0dGVybl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uRGF0ZVNlcGFyYXRvclBhdHRlcm5cIlxuICAgICAgICBbdGVtcGxhdGVzXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi50ZW1wbGF0ZXNcIlxuICAgICAgICBbbWVzc2FnZXNSZXF1ZXN0QnVpbGRlcl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZXNSZXF1ZXN0QnVpbGRlclwiXG4gICAgICAgIFt0aHJlc2hvbGRWYWx1ZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24udGhyZXNob2xkVmFsdWVcIlxuICAgICAgICBbb25UaHJlYWRSZXBsaWVzQ2xpY2tdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm9uVGhyZWFkUmVwbGllc0NsaWNrIHx8IG9wZW5UaHJlYWRWaWV3XCJcbiAgICAgICAgW2hlYWRlclZpZXddPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmhlYWRlclZpZXdcIlxuICAgICAgICBbZm9vdGVyVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZm9vdGVyVmlld1wiXG4gICAgICAgIFthdmF0YXJTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIlxuICAgICAgICBbc2Nyb2xsVG9Cb3R0b21Pbk5ld01lc3NhZ2VzXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5zY3JvbGxUb0JvdHRvbU9uTmV3TWVzc2FnZXNcIlxuICAgICAgICBbYmFja2Ryb3BTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZVwiXG4gICAgICAgIFtkYXRlU2VwYXJhdG9yU3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRhdGVTZXBhcmF0b3JTdHlsZVwiXG4gICAgICAgIFttZXNzYWdlTGlzdFN0eWxlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdFN0eWxlXCJcbiAgICAgICAgW29uRXJyb3JdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm9uRXJyb3JcIlxuICAgICAgICBbaGlkZUVycm9yXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5oaWRlRXJyb3JcIlxuICAgICAgICBbZGlzYWJsZU1lbnRpb25zXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlTWVudGlvbnNcIlxuICAgICAgICBbdGV4dEZvcm1hdHRlcnNdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uPy50ZXh0Rm9ybWF0dGVyc1wiPlxuICAgICAgPC9jb21ldGNoYXQtbWVzc2FnZS1saXN0PlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlTGlzdFZpZXdcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXNzYWdlTGlzdFZpZXc7Y29udGV4dDp7ICB1c2VyOiB1c2VyLCBncm91cDogZ3JvdXAgfVwiPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2NvbXBvc2VyXCJcbiAgICAgICpuZ0lmPVwiIW1lc3NhZ2VDb21wb3NlclZpZXcgJiYgIWhpZGVNZXNzYWdlQ29tcG9zZXJcIj5cbiAgICAgIDxjb21ldGNoYXQtbWVzc2FnZS1jb21wb3NlciAjbWVzc2FnZUNvbXBvc2VyUmVmXG4gICAgICAgIFtoaWRlVm9pY2VSZWNvcmRpbmddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5oaWRlVm9pY2VSZWNvcmRpbmdcIlxuICAgICAgICBbZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNdPVwiZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNcIlxuICAgICAgICBbdm9pY2VSZWNvcmRpbmdTdG9wSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnZvaWNlUmVjb3JkaW5nU3RvcEljb25VUkxcIlxuICAgICAgICBbdm9pY2VSZWNvcmRpbmdTdGFydEljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi52b2ljZVJlY29yZGluZ1N0YXJ0SWNvblVSTFwiXG4gICAgICAgIFt2b2ljZVJlY29yZGluZ0Nsb3NlSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnZvaWNlUmVjb3JkaW5nQ2xvc2VJY29uVVJMXCJcbiAgICAgICAgW3ZvaWNlUmVjb3JkaW5nU3VibWl0SWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnZvaWNlUmVjb3JkaW5nU3VibWl0SWNvblVSTFwiXG4gICAgICAgIFttZWRpYVJlY29yZGVyU3R5bGVdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5tZWRpYVJlY29yZGVyU3R5bGVcIlxuICAgICAgICBbY3VzdG9tU291bmRGb3JNZXNzYWdlc109XCJjdXN0b21Tb3VuZEZvck91dGdvaW5nTWVzc2FnZXNcIiBbdXNlcl09XCJ1c2VyXCJcbiAgICAgICAgW2dyb3VwXT1cImdyb3VwXCIgW3RleHRdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi50ZXh0XCJcbiAgICAgICAgW2hlYWRlclZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5oZWFkZXJWaWV3XCJcbiAgICAgICAgW29uVGV4dENoYW5nZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm9uVGV4dENoYW5nZVwiXG4gICAgICAgIFthdHRhY2htZW50SWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmF0dGFjaG1lbnRJY29uVVJMXCJcbiAgICAgICAgW2F0dGFjaG1lbnRPcHRpb25zXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXR0YWNobWVudE9wdGlvbnNcIlxuICAgICAgICBbc2Vjb25kYXJ5QnV0dG9uVmlld109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnNlY29uZGFyeUJ1dHRvblZpZXdcIlxuICAgICAgICBbYXV4aWxhcnlCdXR0b25WaWV3XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXV4aWxhcnlCdXR0b25WaWV3XCJcbiAgICAgICAgW2F1eGlsaWFyeUJ1dHRvbnNBbGlnbm1lbnRdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdXhpbGlhcnlCdXR0b25zQWxpZ25tZW50XCJcbiAgICAgICAgW3NlbmRCdXR0b25WaWV3XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uc2VuZEJ1dHRvblZpZXdcIlxuICAgICAgICBbaGlkZUxpdmVSZWFjdGlvbl09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmhpZGVMaXZlUmVhY3Rpb25cIlxuICAgICAgICBbTGl2ZVJlYWN0aW9uSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkxpdmVSZWFjdGlvbkljb25VUkxcIlxuICAgICAgICBbbWVzc2FnZUNvbXBvc2VyU3R5bGVdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5tZXNzYWdlQ29tcG9zZXJTdHlsZVwiXG4gICAgICAgIFtvblNlbmRCdXR0b25DbGlja109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm9uU2VuZEJ1dHRvbkNsaWNrXCJcbiAgICAgICAgW29uU2VuZEJ1dHRvbkNsaWNrXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ub25TZW5kQnV0dG9uQ2xpY2tcIlxuICAgICAgICBbb25FcnJvcl09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm9uRXJyb3JcIlxuICAgICAgICBbYWN0aW9uU2hlZXRTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmFjdGlvblNoZWV0U3R5bGVcIlxuICAgICAgICBbYWlPcHRpb25zU3R5bGVdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5BSU9wdGlvbnNTdHlsZVwiXG4gICAgICAgIFthaUljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5BSUljb25VUkxcIlxuICAgICAgICBbdXNlck1lbWJlcldyYXBwZXJDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udXNlck1lbWJlcldyYXBwZXJDb25maWd1cmF0aW9uXCJcbiAgICAgICAgW3RleHRGb3JtYXR0ZXJzXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24/LnRleHRGb3JtYXR0ZXJzXCJcbiAgICAgICAgW2Rpc2FibGVNZW50aW9uc109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmRpc2FibGVNZW50aW9uc1wiXG4gICAgICAgIFttZW50aW9uc1dhcm5pbmdUZXh0XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24/Lm1lbnRpb25zV2FybmluZ1RleHRcIlxuICAgICAgICBbbWVudGlvbnNXYXJuaW5nU3R5bGVdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbj8ubWVudGlvbnNXYXJuaW5nU3R5bGVcIlxuICAgICAgICBbdm9pY2VSZWNvcmRpbmdJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udm9pY2VSZWNvcmRpbmdJY29uVVJMXCJcbiAgICAgICAgW2Vtb2ppSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmVtb2ppSWNvblVSTFwiXG4gICAgICAgIFtzZW5kQnV0dG9uSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnNlbmRCdXR0b25JY29uVVJMXCJcbiAgICAgICAgPlxuICAgICAgPC9jb21ldGNoYXQtbWVzc2FnZS1jb21wb3Nlcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwibWVzc2FnZUNvbXBvc2VyVmlldyAmJiAhaGlkZU1lc3NhZ2VDb21wb3NlclwiXG4gICAgICBjbGFzcz1cImNjLW1lc3NhZ2VzX19jb21wb3Nlci0tY3VzdG9tdmlld1wiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VDb21wb3NlclZpZXc7Y29udGV4dDp7ICB1c2VyOiB1c2VyLCBncm91cDogZ3JvdXAgfVwiPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2xpdmVyZWFjdGlvblwiPlxuICAgIDxjb21ldGNoYXQtbGl2ZS1yZWFjdGlvbiAqbmdJZj1cImxpdmVSZWFjdGlvblwiXG4gICAgICBbcmVhY3Rpb25JY29uVVJMXT1cInJlYWN0aW9uTmFtZVwiXG4gICAgICBbbGl2ZVJlYWN0aW9uU3R5bGVdPVwibGl2ZVJlYWN0aW9uU3R5bGVcIj48L2NvbWV0Y2hhdC1saXZlLXJlYWN0aW9uPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cIm9wZW5UaHJlYWRlZE1lc3NhZ2VzXCIgY2xhc3M9XCJjYy1tZXNzYWdlc19fdGhyZWFkZWRtZXNzYWdlc1wiPlxuICAgIDxjb21ldGNoYXQtdGhyZWFkZWQtbWVzc2FnZXMgW29uQ2xvc2VdPVwiY2xvc2VUaHJlYWRWaWV3XCJcbiAgICAgIFt0aHJlYWRlZE1lc3NhZ2VzU3R5bGVdPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi50aHJlYWRlZE1lc3NhZ2VzU3R5bGVcIlxuICAgICAgW21lc3NhZ2VBY3Rpb25WaWV3XT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24ubWVzc2FnZUFjdGlvblZpZXdcIlxuICAgICAgW2Nsb3NlSWNvblVSTF09XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLmNsb3NlSWNvblVSTFwiXG4gICAgICBbb25FcnJvcl09XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLm9uRXJyb3JcIlxuICAgICAgW2J1YmJsZVZpZXddPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5idWJibGVWaWV3IHx8IHBhcmVudEJ1YmJsZVZpZXdcIlxuICAgICAgW3BhcmVudE1lc3NhZ2VdPVwidGhyZWFkTWVzc2FnZU9iamVjdFwiIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIlxuICAgICAgW21lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbl09XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvblwiXG4gICAgICBbbWVzc2FnZUNvbXBvc2VyVmlld109XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlclZpZXdcIlxuICAgICAgW21lc3NhZ2VMaXN0Vmlld109XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLm1lc3NhZ2VMaXN0Vmlld1wiXG4gICAgICBbaGlkZU1lc3NhZ2VDb21wb3Nlcl09XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLmhpZGVNZXNzYWdlQ29tcG9zZXJcIlxuICAgICAgW21lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb25dPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5tZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uXCJcbiAgICAgIFtkaXNhYmxlU291bmRGb3JNZXNzYWdlc109XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLmRpc2FibGVTb3VuZEZvck1lc3NhZ2VzXCJcbiAgICAgID48L2NvbWV0Y2hhdC10aHJlYWRlZC1tZXNzYWdlcz5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cIm9wZW5EZXRhaWxzXCIgY2xhc3M9XCJjYy1tZXNzYWdlc19fZGV0YWlsc1wiPlxuICAgIDxjb21ldGNoYXQtZGV0YWlsc1xuICAgICAgW3Byb3RlY3RlZEdyb3VwSWNvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5wcm90ZWN0ZWRHcm91cEljb25cIlxuICAgICAgW3Bhc3N3b3JkR3JvdXBJY29uXT1cImRldGFpbHNDb25maWd1cmF0aW9uLnBhc3N3b3JkR3JvdXBJY29uXCJcbiAgICAgIFtwcml2YXRlR3JvdXBJY29uXT1cImRldGFpbHNDb25maWd1cmF0aW9uLnByaXZhdGVHcm91cEljb25cIlxuICAgICAgW2JhY2tkcm9wU3R5bGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZVwiXG4gICAgICBbZGlzYWJsZVVzZXJzUHJlc2VuY2VdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24/LmRpc2FibGVVc2Vyc1ByZXNlbmNlIVwiXG4gICAgICBbdHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uXT1cImRldGFpbHNDb25maWd1cmF0aW9uLnRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvblwiXG4gICAgICBbZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNDb25maWd1cmF0aW9uXCJcbiAgICAgIFtiYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvblwiXG4gICAgICBbYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb25cIlxuICAgICAgW29uQ2xvc2VdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24ub25DbG9zZSB8fCBjbG9zZURldGFpbHNQYWdlXCJcbiAgICAgIFtsaXN0SXRlbVN0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmxpc3RJdGVtU3R5bGVcIlxuICAgICAgW2RldGFpbHNTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGVcIlxuICAgICAgW2F2YXRhclN0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmF2YXRhclN0eWxlXCJcbiAgICAgIFtzdGF0dXNJbmRpY2F0b3JTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5zdGF0dXNJbmRpY2F0b3JTdHlsZVwiXG4gICAgICBbbGVhdmVEaWFsb2dTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5sZWF2ZURpYWxvZ1N0eWxlXCJcbiAgICAgIFtkYXRhXT1cInNldERldGFpbHNUZW1wbGF0ZSgpXCJcbiAgICAgIFtjdXN0b21Qcm9maWxlVmlld109XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5jdXN0b21Qcm9maWxlVmlld1wiXG4gICAgICBbc3VidGl0bGVWaWV3XT1cImRldGFpbHNDb25maWd1cmF0aW9uLnN1YnRpdGxlVmlld1wiXG4gICAgICBbaGlkZVByb2ZpbGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uaGlkZVByb2ZpbGVcIlxuICAgICAgW29uRXJyb3JdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24ub25FcnJvclwiXG4gICAgICBbY2xvc2VCdXR0b25JY29uVVJMXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmNsb3NlQnV0dG9uSWNvblVSTFwiXG4gICAgICBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCI+PC9jb21ldGNoYXQtZGV0YWlscz5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyTWVudT5cbiAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX19oZWFkZXJtZW51XCI+XG4gICAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX19hdXhpbGlhcnltZW51XCJcbiAgICAgICpuZ0lmPVwiZ2V0QXV4aWxhcnlWaWV3KCk7IGVsc2UgZWxzZUJsb2NrXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ2V0QXV4aWxhcnlWaWV3KCk7Y29udGV4dDp7ICB1c2VyOiB1c2VyLCBncm91cDogZ3JvdXAgfVwiPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNlbHNlQmxvY2s+XG4gICAgICA8Y29tZXRjaGF0LWNhbGwtYnV0dG9ucyAqbmdJZj1cImVuYWJsZUNhbGxpbmdcIiB2b2ljZUNhbGxJY29uVGV4dD1cIlwiXG4gICAgICAgIHZpZGVvQ2FsbEljb25UZXh0PVwiXCIgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICAgIFtjYWxsQnV0dG9uc1N0eWxlXT1cImNhbGxCdXR0b25zU3R5bGVcIj5cbiAgICAgIDwvY29tZXRjaGF0LWNhbGwtYnV0dG9ucz5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxjb21ldGNoYXQtYnV0dG9uICpuZ0lmPVwiIWhpZGVEZXRhaWxzXCIgW2ljb25VUkxdPVwiaW5mb0ljb25TdHlsZVwiXG4gICAgICBbYnV0dG9uU3R5bGVdPVwiZGV0YWlsc0J1dHRvblN0eWxlXCJcbiAgICAgIChjYy1idXR0b24tY2xpY2tlZCk9XCJvcGVuRGV0YWlsc1BhZ2UoKVwiPjwvY29tZXRjaGF0LWJ1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -334,7 +334,7 @@ export class CometChatThreadedMessagesComponent {
334
334
  }
335
335
  }
336
336
  CometChatThreadedMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatThreadedMessagesComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }], target: i0.ɵɵFactoryTarget.Component });
337
- CometChatThreadedMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatThreadedMessagesComponent, selector: "cometchat-threaded-messages", inputs: { onClose: "onClose", onError: "onError", parentMessage: "parentMessage", title: "title", closeIconURL: "closeIconURL", bubbleView: "bubbleView", messageActionView: "messageActionView", messageListConfiguration: "messageListConfiguration", userMemberWrapperConfiguration: "userMemberWrapperConfiguration", messageComposerConfiguration: "messageComposerConfiguration", threadedMessagesStyle: "threadedMessagesStyle", hideMessageComposer: "hideMessageComposer", messageComposerView: "messageComposerView", messageListView: "messageListView", disableSoundForMessages: "disableSoundForMessages" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-threaded-messages__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-threaded-messages__header\">\n <div class=\"cc-threaded-messages__title\">\n <cometchat-label [text]=\"title\"\n [labelStyle]=\"titleStyle\"></cometchat-label>\n </div>\n <div class=\"cc-threaded-messages__close\">\n <cometchat-button [iconURL]=\"closeIconURL\" [buttonStyle]=\"buttonStyle\"\n (cc-button-clicked)=\"closeView()\"></cometchat-button>\n </div>\n </div>\n <div class=\"cc-threaded-messages__bubble-view\">\n <ng-container\n *ngTemplateOutlet=\"bubbleView; context:{ $implicit: parentMessage }\">\n </ng-container>\n </div>\n <div class=\"cc-threaded-messages__action-view\">\n <ng-container\n *ngTemplateOutlet=\"messageActionView; context:{ $implicit: parentMessage }\">\n </ng-container>\n <cometchat-button *ngIf=\"!messageActionView\" [text]=\"getThreadCount()\"\n [buttonStyle]=\"actionButtonStyle\"></cometchat-button>\n </div>\n <div class=\"cc-threaded-messages__list\" *ngIf=\"!messageListView\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [parentMessageId]=\"parentMessage?.getId()\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [hideReceipt]=\"messageListConfiguration.hideReceipt\"\n [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\"\n [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\"\n [loadingIconURL]=\"messageListConfiguration.loadingIconURL\"\n [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\"\n [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\"\n [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder || requestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [messageInformationConfiguration]=\"messageListConfiguration.messageInformationConfiguration\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [hideError]=\"messageListConfiguration.hideError\"\n [hideDateSeparator]=\"messageListConfiguration.hideDateSeparator\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <ng-container *ngIf=\"messageListView\">\n <ng-container\n *ngTemplateOutlet=\"messageListView;context:{ user: user, group: group,parentMessage:parentMessage }\">\n </ng-container>\n </ng-container>\n <div class=\"cc-threaded-messages__composer\"\n *ngIf=\"!hideMessageComposer && !messageComposerView\">\n <cometchat-message-composer #messageComposerRef\n [parentMessageId]=\"parentMessage?.getId()\" [user]=\"user\" [group]=\"group\"\n [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [sendButtonIconURL]=\"messageComposerConfiguration.sendButtonIconURL\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\"\n [emojiIconURL]=\"messageComposerConfiguration.emojiIconURL\"\n [AIIconURL]=\"messageComposerConfiguration.AIIconURL\"\n [hideVoiceRecording]=\"messageComposerConfiguration.hideVoiceRecording\"\n [hideLayoutMode]=\"messageComposerConfiguration.hideLayoutMode\"\n [AIOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [backdropStyle]=\"messageComposerConfiguration.backdropStyle\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n >\n </cometchat-message-composer>\n </div>\n <ng-container *ngIf=\"!hideMessageComposer && messageComposerView\">\n <ng-container\n *ngTemplateOutlet=\"messageComposerView;context:{ user: user, group: group,parentMessage:parentMessage }\">\n </ng-container>\n </ng-container>\n\n</div>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-threaded-messages__wrapper{display:flex;flex-direction:column;height:100%;overflow:hidden}.cc-threaded-messages__header{height:8%;width:100%;display:flex;padding:16px;align-items:flex-start}.cc-threaded-messages__close{display:flex;align-items:center}.cc-threaded-messages__title{display:flex;align-items:center;justify-content:center;width:100%}.cc-threaded-messages__bubble-view{width:100%;max-height:15em;overflow:auto;min-height:60px}.cc-threaded-messages__action-view{height:36px}.cc-threaded-messages__header{flex:0 0 auto}.cc-threaded-messages__list{flex-grow:1;overflow:hidden;height:100%}.cc-threaded-messages__composer{flex:0 0 auto;min-height:80px}\n"], components: [{ type: i2.CometChatMessageListComponent, selector: "cometchat-message-list", inputs: ["hideError", "hideDateSeparator", "errorStateView", "loadingStateView", "emptyStateView", "errorStateText", "emptyStateText", "loadingIconURL", "user", "group", "disableReceipt", "hideReceipt", "disableSoundForMessages", "customSoundForMessages", "readIcon", "deliveredIcon", "sentIcon", "waitIcon", "errorIcon", "aiErrorIcon", "aiEmptyIcon", "alignment", "showAvatar", "datePattern", "timestampAlignment", "DateSeparatorPattern", "templates", "messagesRequestBuilder", "newMessageIndicatorText", "scrollToBottomOnNewMessages", "thresholdValue", "unreadMessageThreshold", "reactionsConfiguration", "disableReactions", "emojiKeyboardStyle", "apiConfiguration", "onThreadRepliesClick", "headerView", "footerView", "parentMessageId", "threadIndicatorIcon", "avatarStyle", "backdropStyle", "dateSeparatorStyle", "messageListStyle", "onError", "messageInformationConfiguration", "disableMentions", "textFormatters"] }, { type: i3.CometChatMessageComposerComponent, selector: "cometchat-message-composer", inputs: ["user", "group", "disableSoundForMessages", "customSoundForMessage", "customSoundForMessages", "disableTypingEvents", "text", "placeholderText", "headerView", "onTextChange", "attachmentIconURL", "attachmentOptions", "secondaryButtonView", "auxilaryButtonView", "auxiliaryButtonsAlignment", "sendButtonView", "parentMessageId", "hideLiveReaction", "LiveReactionIconURL", "backButtonIconURL", "mentionsWarningText", "mentionsWarningStyle", "messageComposerStyle", "onSendButtonClick", "onError", "backdropStyle", "actionSheetStyle", "aiActionSheetStyle", "hideVoiceRecording", "mediaRecorderStyle", "aiOptionsStyle", "aiIconURL", "voiceRecordingIconURL", "voiceRecordingCloseIconURL", "voiceRecordingStartIconURL", "voiceRecordingStopIconURL", "voiceRecordingSubmitIconURL", "hideLayoutMode", "emojiIconURL", "userMemberWrapperConfiguration", "disableMentions", "textFormatters", "sendButtonIconURL"], outputs: ["childEvent"] }], directives: [{ type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
337
+ CometChatThreadedMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatThreadedMessagesComponent, selector: "cometchat-threaded-messages", inputs: { onClose: "onClose", onError: "onError", parentMessage: "parentMessage", title: "title", closeIconURL: "closeIconURL", bubbleView: "bubbleView", messageActionView: "messageActionView", messageListConfiguration: "messageListConfiguration", userMemberWrapperConfiguration: "userMemberWrapperConfiguration", messageComposerConfiguration: "messageComposerConfiguration", threadedMessagesStyle: "threadedMessagesStyle", hideMessageComposer: "hideMessageComposer", messageComposerView: "messageComposerView", messageListView: "messageListView", disableSoundForMessages: "disableSoundForMessages" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-threaded-messages__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-threaded-messages__header\">\n <div class=\"cc-threaded-messages__title\">\n <cometchat-label [text]=\"title\"\n [labelStyle]=\"titleStyle\"></cometchat-label>\n </div>\n <div class=\"cc-threaded-messages__close\">\n <cometchat-button [iconURL]=\"closeIconURL\" [buttonStyle]=\"buttonStyle\"\n (cc-button-clicked)=\"closeView()\"></cometchat-button>\n </div>\n </div>\n <div class=\"cc-threaded-messages__bubble-view\">\n <ng-container\n *ngTemplateOutlet=\"bubbleView; context:{ $implicit: parentMessage }\">\n </ng-container>\n </div>\n <div class=\"cc-threaded-messages__action-view\">\n <ng-container\n *ngTemplateOutlet=\"messageActionView; context:{ $implicit: parentMessage }\">\n </ng-container>\n <cometchat-button *ngIf=\"!messageActionView\" [text]=\"getThreadCount()\"\n [buttonStyle]=\"actionButtonStyle\"></cometchat-button>\n </div>\n <div class=\"cc-threaded-messages__list\" *ngIf=\"!messageListView\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [parentMessageId]=\"parentMessage?.getId()\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [hideReceipt]=\"messageListConfiguration.hideReceipt\"\n [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\"\n [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\"\n [loadingIconURL]=\"messageListConfiguration.loadingIconURL\"\n [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\"\n [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\"\n [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder || requestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [messageInformationConfiguration]=\"messageListConfiguration.messageInformationConfiguration\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [hideError]=\"messageListConfiguration.hideError\"\n [hideDateSeparator]=\"messageListConfiguration.hideDateSeparator\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <ng-container *ngIf=\"messageListView\">\n <ng-container\n *ngTemplateOutlet=\"messageListView;context:{ user: user, group: group,parentMessage:parentMessage }\">\n </ng-container>\n </ng-container>\n <div class=\"cc-threaded-messages__composer\"\n *ngIf=\"!hideMessageComposer && !messageComposerView\">\n <cometchat-message-composer #messageComposerRef\n [parentMessageId]=\"parentMessage?.getId()\" [user]=\"user\" [group]=\"group\"\n [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [sendButtonIconURL]=\"messageComposerConfiguration.sendButtonIconURL\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\"\n [emojiIconURL]=\"messageComposerConfiguration.emojiIconURL\"\n [AIIconURL]=\"messageComposerConfiguration.AIIconURL\"\n [hideVoiceRecording]=\"messageComposerConfiguration.hideVoiceRecording\"\n [hideLayoutMode]=\"messageComposerConfiguration.hideLayoutMode\"\n [AIOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [backdropStyle]=\"messageComposerConfiguration.backdropStyle\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n >\n </cometchat-message-composer>\n </div>\n <ng-container *ngIf=\"!hideMessageComposer && messageComposerView\">\n <ng-container\n *ngTemplateOutlet=\"messageComposerView;context:{ user: user, group: group,parentMessage:parentMessage }\">\n </ng-container>\n </ng-container>\n\n</div>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-threaded-messages__wrapper{display:flex;flex-direction:column;height:100%;overflow:hidden}.cc-threaded-messages__header{height:8%;width:100%;display:flex;padding:16px;align-items:flex-start}.cc-threaded-messages__close{display:flex;align-items:center}.cc-threaded-messages__title{display:flex;align-items:center;justify-content:center;width:100%}.cc-threaded-messages__bubble-view{width:100%;max-height:15em;overflow:auto;min-height:60px}.cc-threaded-messages__action-view{height:36px}.cc-threaded-messages__header{flex:0 0 auto}.cc-threaded-messages__list{flex-grow:1;overflow:hidden;height:100%}.cc-threaded-messages__composer{flex:0 0 auto;min-height:80px}\n"], components: [{ type: i2.CometChatMessageListComponent, selector: "cometchat-message-list", inputs: ["hideError", "hideDateSeparator", "errorStateView", "loadingStateView", "emptyStateView", "errorStateText", "emptyStateText", "loadingIconURL", "user", "group", "disableReceipt", "hideReceipt", "disableSoundForMessages", "customSoundForMessages", "readIcon", "deliveredIcon", "sentIcon", "waitIcon", "errorIcon", "aiErrorIcon", "aiEmptyIcon", "alignment", "showAvatar", "datePattern", "timestampAlignment", "DateSeparatorPattern", "templates", "messagesRequestBuilder", "newMessageIndicatorText", "newMessageIndicatorIconUrl", "scrollToBottomOnNewMessages", "thresholdValue", "unreadMessageThreshold", "reactionsConfiguration", "disableReactions", "emojiKeyboardStyle", "apiConfiguration", "onThreadRepliesClick", "headerView", "footerView", "parentMessageId", "threadIndicatorIcon", "avatarStyle", "newMessageIndicatorStyle", "backdropStyle", "dateSeparatorStyle", "messageListStyle", "onError", "messageInformationConfiguration", "disableMentions", "textFormatters"] }, { type: i3.CometChatMessageComposerComponent, selector: "cometchat-message-composer", inputs: ["user", "group", "disableSoundForMessages", "customSoundForMessage", "customSoundForMessages", "disableTypingEvents", "text", "placeholderText", "headerView", "onTextChange", "attachmentIconURL", "attachmentOptions", "secondaryButtonView", "auxilaryButtonView", "auxiliaryButtonsAlignment", "sendButtonView", "parentMessageId", "hideLiveReaction", "LiveReactionIconURL", "backButtonIconURL", "mentionsWarningText", "mentionsWarningStyle", "messageComposerStyle", "onSendButtonClick", "onError", "backdropStyle", "actionSheetStyle", "aiActionSheetStyle", "hideVoiceRecording", "mediaRecorderStyle", "aiOptionsStyle", "aiIconURL", "voiceRecordingIconURL", "voiceRecordingCloseIconURL", "voiceRecordingStartIconURL", "voiceRecordingStopIconURL", "voiceRecordingSubmitIconURL", "hideLayoutMode", "emojiIconURL", "userMemberWrapperConfiguration", "disableMentions", "textFormatters", "sendButtonIconURL"], outputs: ["childEvent"] }], directives: [{ type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
338
338
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatThreadedMessagesComponent, decorators: [{
339
339
  type: Component,
340
340
  args: [{ selector: "cometchat-threaded-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-threaded-messages__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-threaded-messages__header\">\n <div class=\"cc-threaded-messages__title\">\n <cometchat-label [text]=\"title\"\n [labelStyle]=\"titleStyle\"></cometchat-label>\n </div>\n <div class=\"cc-threaded-messages__close\">\n <cometchat-button [iconURL]=\"closeIconURL\" [buttonStyle]=\"buttonStyle\"\n (cc-button-clicked)=\"closeView()\"></cometchat-button>\n </div>\n </div>\n <div class=\"cc-threaded-messages__bubble-view\">\n <ng-container\n *ngTemplateOutlet=\"bubbleView; context:{ $implicit: parentMessage }\">\n </ng-container>\n </div>\n <div class=\"cc-threaded-messages__action-view\">\n <ng-container\n *ngTemplateOutlet=\"messageActionView; context:{ $implicit: parentMessage }\">\n </ng-container>\n <cometchat-button *ngIf=\"!messageActionView\" [text]=\"getThreadCount()\"\n [buttonStyle]=\"actionButtonStyle\"></cometchat-button>\n </div>\n <div class=\"cc-threaded-messages__list\" *ngIf=\"!messageListView\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [parentMessageId]=\"parentMessage?.getId()\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [hideReceipt]=\"messageListConfiguration.hideReceipt\"\n [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\"\n [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\"\n [loadingIconURL]=\"messageListConfiguration.loadingIconURL\"\n [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\"\n [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\"\n [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder || requestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [messageInformationConfiguration]=\"messageListConfiguration.messageInformationConfiguration\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [hideError]=\"messageListConfiguration.hideError\"\n [hideDateSeparator]=\"messageListConfiguration.hideDateSeparator\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <ng-container *ngIf=\"messageListView\">\n <ng-container\n *ngTemplateOutlet=\"messageListView;context:{ user: user, group: group,parentMessage:parentMessage }\">\n </ng-container>\n </ng-container>\n <div class=\"cc-threaded-messages__composer\"\n *ngIf=\"!hideMessageComposer && !messageComposerView\">\n <cometchat-message-composer #messageComposerRef\n [parentMessageId]=\"parentMessage?.getId()\" [user]=\"user\" [group]=\"group\"\n [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [sendButtonIconURL]=\"messageComposerConfiguration.sendButtonIconURL\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\"\n [emojiIconURL]=\"messageComposerConfiguration.emojiIconURL\"\n [AIIconURL]=\"messageComposerConfiguration.AIIconURL\"\n [hideVoiceRecording]=\"messageComposerConfiguration.hideVoiceRecording\"\n [hideLayoutMode]=\"messageComposerConfiguration.hideLayoutMode\"\n [AIOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [backdropStyle]=\"messageComposerConfiguration.backdropStyle\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [disableSoundForMessages]=\"disableSoundForMessages\"\n >\n </cometchat-message-composer>\n </div>\n <ng-container *ngIf=\"!hideMessageComposer && messageComposerView\">\n <ng-container\n *ngTemplateOutlet=\"messageComposerView;context:{ user: user, group: group,parentMessage:parentMessage }\">\n </ng-container>\n </ng-container>\n\n</div>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-threaded-messages__wrapper{display:flex;flex-direction:column;height:100%;overflow:hidden}.cc-threaded-messages__header{height:8%;width:100%;display:flex;padding:16px;align-items:flex-start}.cc-threaded-messages__close{display:flex;align-items:center}.cc-threaded-messages__title{display:flex;align-items:center;justify-content:center;width:100%}.cc-threaded-messages__bubble-view{width:100%;max-height:15em;overflow:auto;min-height:60px}.cc-threaded-messages__action-view{height:36px}.cc-threaded-messages__header{flex:0 0 auto}.cc-threaded-messages__list{flex-grow:1;overflow:hidden;height:100%}.cc-threaded-messages__composer{flex:0 0 auto;min-height:80px}\n"] }]