@cometchat/chat-uikit-angular 4.0.1-beta1 → 4.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AI/AIConversationStarter/AIConversationStarter.d.ts +7 -0
- package/AI/AIConversationStarter/AIConversationStarterDecorator.d.ts +6 -0
- package/AI/AIEnabler.d.ts +8 -0
- package/AI/AIEnablerDecorator.d.ts +7 -0
- package/AI/AISmartReplies/AISmartReplies.d.ts +7 -0
- package/AI/AISmartReplies/AISmartRepliesDecorator.d.ts +6 -0
- package/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +18 -7
- package/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.d.ts +0 -4
- package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +16 -2
- package/CometChatMessageComposer/cometchat-message-composer.module.d.ts +2 -1
- package/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.d.ts +7 -6
- package/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.d.ts +6 -4
- package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +42 -8
- package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +8 -9
- package/Shared/CometChatUIkit/CometChatUIKit.d.ts +11 -3
- package/Shared/Framework/DataSource.d.ts +2 -0
- package/Shared/Framework/DataSourceDecorator.d.ts +3 -1
- package/Shared/Utils/MessageUtils.d.ts +3 -1
- package/Shared/Views/CometChatCardView/cometchat-card-view/cometchat-card-view.component.d.ts +71 -0
- package/Shared/Views/CometChatCardView/cometchat-card-view.module.d.ts +8 -0
- package/assets/Reply@2x.svg +0 -0
- package/assets/ai-bot.svg +24 -0
- package/assets/ai-empty.svg +22 -0
- package/assets/ai-error.svg +21 -0
- package/assets/message-privately.svg +0 -0
- package/assets/mic.svg +0 -0
- package/assets/new-chat.svg +0 -0
- package/assets/pause-icon.svg +0 -0
- package/assets/play-icon.svg +0 -0
- package/assets/record-icon.svg +0 -0
- package/assets/start-conversation.svg +0 -0
- package/assets/stop.svg +0 -0
- package/esm2020/AI/AIConversationStarter/AIConversationStarter.mjs +18 -0
- package/esm2020/AI/AIConversationStarter/AIConversationStarterDecorator.mjs +10 -0
- package/esm2020/AI/AIEnabler.mjs +70 -0
- package/esm2020/AI/AIEnablerDecorator.mjs +10 -0
- package/esm2020/AI/AISmartReplies/AISmartReplies.mjs +18 -0
- package/esm2020/AI/AISmartReplies/AISmartRepliesDecorator.mjs +10 -0
- package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +71 -45
- package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +4 -10
- package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +147 -26
- package/esm2020/CometChatMessageComposer/cometchat-message-composer.module.mjs +6 -2
- package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +15 -17
- package/esm2020/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.mjs +18 -20
- package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +374 -52
- package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +3 -3
- package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +24 -30
- package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +169 -33
- package/esm2020/Shared/Framework/DataSource.mjs +1 -1
- package/esm2020/Shared/Framework/DataSourceDecorator.mjs +7 -1
- package/esm2020/Shared/Utils/MessageUtils.mjs +36 -7
- package/esm2020/Shared/Views/CometChatCardView/cometchat-card-view/cometchat-card-view.component.mjs +117 -0
- package/esm2020/Shared/Views/CometChatCardView/cometchat-card-view.module.mjs +23 -0
- package/esm2020/public-api.mjs +8 -1
- package/fesm2015/cometchat-chat-uikit-angular.mjs +1093 -212
- package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/fesm2020/cometchat-chat-uikit-angular.mjs +1081 -205
- package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/package.json +6 -5
- package/public-api.d.ts +6 -0
|
@@ -355,10 +355,10 @@ export class CometChatMessagesComponent {
|
|
|
355
355
|
}
|
|
356
356
|
}
|
|
357
357
|
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 });
|
|
358
|
-
CometChatMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatMessagesComponent, selector: "cometchat-messages", inputs: { user: "user", group: "group", 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<div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n<div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\" class=\"cc-messages__header-customview\">\n <ng-container *ngTemplateOutlet=\"messageHeaderView\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\" [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\" [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\" [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\" [menu]=\"headerMenu\" [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\" [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\" [onError]=\"messageHeaderConfiguration.onError\" [onBack]=\"messageHeaderConfiguration.onBack\" [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\" [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\"\n >\n </cometchat-message-header>\n </ng-template>\n</div>\n<div class=\"cc-messages__list\">\n <cometchat-message-list #messageListRef [messageInformationConfiguration]=\"messageListConfiguration.messageInformationConfiguration\" [disableSoundForMessages]=\"disableSoundForMessages\" [customSoundForMessages]=\"customSoundForIncomingMessages\" [emptyStateView]=\"messageListConfiguration.emptyStateView\" [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\" [loadingStateView]=\"messageListConfiguration.loadingStateView\" [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\" [disableReceipt]=\"messageListConfiguration.disableReceipt\" [readIcon]=\"messageListConfiguration.readIcon\" [deliveredIcon]=\"messageListConfiguration.deliveredIcon\" [sentIcon]=\"messageListConfiguration.sentIcon\" [waitIcon]=\"messageListConfiguration.waitIcon\"\n [errorIcon]=\"messageListConfiguration.errorIcon\" [alignment]=\"messageListConfiguration.alignment\" [showAvatar]=\"messageListConfiguration.showAvatar\" [datePattern]=\"messageListConfiguration.datePattern\" [timestampAlignment]=\"messageListConfiguration.timestampAlignment\" [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\" [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\" [thresholdValue]=\"messageListConfiguration.thresholdValue\" [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\" [headerView]=\"messageListConfiguration.headerView\" [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\" [backdropStyle]=\"messageListConfiguration.backdropStyle\" [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\" [messageListStyle]=\"messageListConfiguration.messageListStyle\" [onError]=\"messageListConfiguration.onError\"\n >\n </cometchat-message-list>\n</div>\n<div class=\"cc-messages__composer\" *ngIf=\"!hideMessageComposer\">\n <div *ngIf=\"messageComposerView; else customComposerView\" class=\"cc-messages__composer--customview\">\n <ng-container *ngTemplateOutlet=\"messageComposerView\">\n </ng-container>\n </div>\n <ng-template #customComposerView>\n <cometchat-message-composer #messageComposerRef [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\"\n [user]=\"user\" [group]=\"group\" [text]=\"messageComposerConfiguration.text\" [headerView]=\"messageComposerConfiguration.headerView\" [onTextChange]=\"messageComposerConfiguration.onTextChange\" [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\" [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\" [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\" [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\" [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\" [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\" [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\" [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\" [onError]=\"messageComposerConfiguration.onError\"\n >\n </cometchat-message-composer>\n </ng-template>\n</div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\" [reactionIconURL]=\"reactionName\"></cometchat-live-reaction>\n</div>\n<div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n<cometchat-threaded-messages [onClose]=\"closeThreadView\" [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\" [messageActionView]=\"threadedMessageConfiguration.messageActionView\" [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\" [onError]=\"threadedMessageConfiguration.onError\" [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\" [parentMessage]=\"threadMessageObject\" [user]=\"user\" [group]=\"group\"></cometchat-threaded-messages>\n</div>\n<div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details [backdropStyle]=\"detailsConfiguration.backdropStyle\" [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\" [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\" [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\" [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\" [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\" [listItemStyle]=\"detailsConfiguration.listItemStyle\" [detailsStyle]=\"detailsConfiguration.detailsStyle\" [avatarStyle]=\"detailsConfiguration.avatarStyle\" [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\" [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\" [data]=\"detailsConfiguration.data\" [customProfileView]=\"detailsConfiguration.customProfileView\" [subtitleView]=\"detailsConfiguration.subtitleView\" [hideProfile]=\"detailsConfiguration.hideProfile\" [onError]=\"detailsConfiguration.onError\" [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\" [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\" *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container *ngTemplateOutlet=\"getAuxilaryView()\">\n </ng-container>\n</div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\" videoCallIconText=\"\" [user]=\"user\" [group]=\"group\" [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\" [buttonStyle]=\"detailsButtonStyle\" (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.CometChatMessageHeaderComponent, selector: "cometchat-message-header", inputs: ["avatarStyle", "statusIndicatorStyle", "messageHeaderStyle", "listItemStyle", "subtitleView", "disableUsersPresence", "disableTyping", "protectedGroupIcon", "privateGroupIcon", "menu", "user", "group", "backButtonIconURL", "hideBackButton", "listItemView", "onError", "onBack"] }, { type: i3.CometChatMessageListComponent, selector: "cometchat-message-list", inputs: ["hideError", "errorStateView", "loadingStateView", "emptyStateView", "errorStateText", "emptyStateText", "loadingIconURL", "user", "group", "disableReceipt", "disableSoundForMessages", "customSoundForMessages", "readIcon", "deliveredIcon", "sentIcon", "waitIcon", "errorIcon", "alignment", "showAvatar", "datePattern", "timestampAlignment", "DateSeparatorPattern", "templates", "messagesRequestBuilder", "newMessageIndicatorText", "scrollToBottomOnNewMessages", "thresholdValue", "onThreadRepliesClick", "headerView", "footerView", "parentMessageId", "avatarStyle", "backdropStyle", "dateSeparatorStyle", "messageListStyle", "onError", "messageInformationConfiguration"] }, { type: i4.CometChatMessageComposerComponent, selector: "cometchat-message-composer", inputs: ["user", "group", "disableSoundForMessages", "customSoundForMessage", "disableTypingEvents", "text", "placeholderText", "headerView", "onTextChange", "attachmentIconURL", "attachmentOptions", "secondaryButtonView", "auxilaryButtonView", "auxiliaryButtonsAlignment", "sendButtonView", "parentMessageId", "hideLiveReaction", "LiveReactionIconURL", "messageComposerStyle", "onSendButtonClick", "onError", "backdropStyle", "hideVoiceRecording", "mediaRecorderStyle", "voiceRecordingIconURL", "voiceRecordingCloseIconURL", "voiceRecordingStartIconURL", "voiceRecordingStopIconURL", "voiceRecordingSubmitIconURL"] }, { type: i5.CometChatThreadedMessagesComponent, selector: "cometchat-threaded-messages", inputs: ["onClose", "onError", "parentMessage", "title", "closeIconURL", "bubbleView", "messageActionView", "messageListConfiguration", "messageComposerConfiguration", "threadedMessagesStyle"] }, { type: i6.CometChatDetailsComponent, selector: "cometchat-details", inputs: ["group", "user", "title", "closeButtonIconURL", "hideProfile", "subtitleView", "customProfileView", "data", "disableUsersPresence", "privateGroupIcon", "protectedGroupIcon", "onError", "onClose", "leaveGroupConfirmButtonText", "leaveGroupCancelButtonText", "leaveGroupDialogMessage", "leaveGroupDialogStyle", "deleteGroupConfirmButtonText", "deleteGroupDialogMessage", "deleteGroupCancelButtonText", "deleteGroupDialogStyle", "transferOwnershipConfirmButtonText", "transferOwnershipDialogMessage", "transferOwnershipCancelButtonText", "transferOwnershipDialogStyle", "addMembersConfiguration", "bannedMembersConfiguration", "groupMembersConfiguration", "transferOwnershipConfiguration", "statusIndicatorStyle", "backdropStyle", "avatarStyle", "detailsStyle", "listItemStyle"] }, { type: i7.CometChatCallButtonsComponent, selector: "cometchat-call-buttons", inputs: ["user", "group", "voiceCallIconURL", "voiceCallIconText", "voiceCallIconHoverText", "videoCallIconURL", "videoCallIconText", "videoCallIconHoverText", "onVoiceCallClick", "onVideoCallClick", "onError", "callButtonsStyle", "outgoingCallConfiguration", "ongoingCallConfiguration"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
358
|
+
CometChatMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatMessagesComponent, selector: "cometchat-messages", inputs: { user: "user", group: "group", 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 <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 *ngTemplateOutlet=\"messageHeaderView\">\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 [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\">\n <cometchat-message-list #messageListRef\n [messageInformationConfiguration]=\"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 [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 </cometchat-message-list>\n </div>\n <div class=\"cc-messages__composer\" *ngIf=\"!hideMessageComposer\">\n <div *ngIf=\"messageComposerView; else customComposerView\"\n class=\"cc-messages__composer--customview\">\n <ng-container *ngTemplateOutlet=\"messageComposerView\">\n </ng-container>\n </div>\n <ng-template #customComposerView>\n <cometchat-message-composer #messageComposerRef\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\"\n [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 [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\">\n </cometchat-message-composer>\n </ng-template>\n </div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\"\n [reactionIconURL]=\"reactionName\"></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\"\n [group]=\"group\"></cometchat-threaded-messages>\n </div>\n <div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details [backdropStyle]=\"detailsConfiguration.backdropStyle\"\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]=\"detailsConfiguration.data\"\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 *ngTemplateOutlet=\"getAuxilaryView()\">\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.CometChatMessageHeaderComponent, selector: "cometchat-message-header", inputs: ["avatarStyle", "statusIndicatorStyle", "messageHeaderStyle", "listItemStyle", "subtitleView", "disableUsersPresence", "disableTyping", "protectedGroupIcon", "privateGroupIcon", "menu", "user", "group", "backButtonIconURL", "hideBackButton", "listItemView", "onError", "onBack"] }, { type: i3.CometChatMessageListComponent, selector: "cometchat-message-list", inputs: ["hideError", "errorStateView", "loadingStateView", "emptyStateView", "errorStateText", "emptyStateText", "loadingIconURL", "user", "group", "disableReceipt", "disableSoundForMessages", "customSoundForMessages", "readIcon", "deliveredIcon", "sentIcon", "waitIcon", "errorIcon", "alignment", "showAvatar", "datePattern", "timestampAlignment", "DateSeparatorPattern", "templates", "messagesRequestBuilder", "newMessageIndicatorText", "scrollToBottomOnNewMessages", "thresholdValue", "onThreadRepliesClick", "headerView", "footerView", "parentMessageId", "avatarStyle", "backdropStyle", "dateSeparatorStyle", "messageListStyle", "onError", "messageInformationConfiguration"] }, { type: i4.CometChatMessageComposerComponent, selector: "cometchat-message-composer", inputs: ["user", "group", "disableSoundForMessages", "customSoundForMessage", "disableTypingEvents", "text", "placeholderText", "headerView", "onTextChange", "attachmentIconURL", "attachmentOptions", "secondaryButtonView", "auxilaryButtonView", "auxiliaryButtonsAlignment", "sendButtonView", "parentMessageId", "hideLiveReaction", "LiveReactionIconURL", "messageComposerStyle", "onSendButtonClick", "onError", "backdropStyle", "actionSheetStyle", "hideVoiceRecording", "mediaRecorderStyle", "voiceRecordingIconURL", "voiceRecordingCloseIconURL", "voiceRecordingStartIconURL", "voiceRecordingStopIconURL", "voiceRecordingSubmitIconURL"] }, { type: i5.CometChatThreadedMessagesComponent, selector: "cometchat-threaded-messages", inputs: ["onClose", "onError", "parentMessage", "title", "closeIconURL", "bubbleView", "messageActionView", "messageListConfiguration", "messageComposerConfiguration", "threadedMessagesStyle"] }, { type: i6.CometChatDetailsComponent, selector: "cometchat-details", inputs: ["group", "user", "title", "closeButtonIconURL", "hideProfile", "subtitleView", "customProfileView", "data", "disableUsersPresence", "privateGroupIcon", "protectedGroupIcon", "onError", "onClose", "leaveGroupConfirmButtonText", "leaveGroupCancelButtonText", "leaveGroupDialogMessage", "leaveGroupDialogStyle", "deleteGroupConfirmButtonText", "deleteGroupDialogMessage", "deleteGroupCancelButtonText", "deleteGroupDialogStyle", "transferOwnershipConfirmButtonText", "transferOwnershipDialogMessage", "transferOwnershipCancelButtonText", "transferOwnershipDialogStyle", "addMembersConfiguration", "bannedMembersConfiguration", "groupMembersConfiguration", "transferOwnershipConfiguration", "statusIndicatorStyle", "backdropStyle", "avatarStyle", "detailsStyle", "listItemStyle"] }, { type: i7.CometChatCallButtonsComponent, selector: "cometchat-call-buttons", inputs: ["user", "group", "voiceCallIconURL", "voiceCallIconText", "voiceCallIconHoverText", "videoCallIconURL", "videoCallIconText", "videoCallIconHoverText", "onVoiceCallClick", "onVideoCallClick", "onError", "callButtonsStyle", "outgoingCallConfiguration", "ongoingCallConfiguration"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
359
359
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatMessagesComponent, decorators: [{
|
|
360
360
|
type: Component,
|
|
361
|
-
args: [{ selector: "cometchat-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-messages__wrapper\">\n<div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n<div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\" class=\"cc-messages__header-customview\">\n <ng-container *ngTemplateOutlet=\"messageHeaderView\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\" [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\" [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\" [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\" [menu]=\"headerMenu\" [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\" [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\" [onError]=\"messageHeaderConfiguration.onError\" [onBack]=\"messageHeaderConfiguration.onBack\" [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\" [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\"\n >\n </cometchat-message-header>\n </ng-template>\n</div>\n<div class=\"cc-messages__list\">\n <cometchat-message-list #messageListRef [messageInformationConfiguration]=\"messageListConfiguration.messageInformationConfiguration\" [disableSoundForMessages]=\"disableSoundForMessages\" [customSoundForMessages]=\"customSoundForIncomingMessages\" [emptyStateView]=\"messageListConfiguration.emptyStateView\" [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\" [loadingStateView]=\"messageListConfiguration.loadingStateView\" [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\" [disableReceipt]=\"messageListConfiguration.disableReceipt\" [readIcon]=\"messageListConfiguration.readIcon\" [deliveredIcon]=\"messageListConfiguration.deliveredIcon\" [sentIcon]=\"messageListConfiguration.sentIcon\" [waitIcon]=\"messageListConfiguration.waitIcon\"\n [errorIcon]=\"messageListConfiguration.errorIcon\" [alignment]=\"messageListConfiguration.alignment\" [showAvatar]=\"messageListConfiguration.showAvatar\" [datePattern]=\"messageListConfiguration.datePattern\" [timestampAlignment]=\"messageListConfiguration.timestampAlignment\" [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\" [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\" [thresholdValue]=\"messageListConfiguration.thresholdValue\" [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\" [headerView]=\"messageListConfiguration.headerView\" [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\" [backdropStyle]=\"messageListConfiguration.backdropStyle\" [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\" [messageListStyle]=\"messageListConfiguration.messageListStyle\" [onError]=\"messageListConfiguration.onError\"\n >\n </cometchat-message-list>\n</div>\n<div class=\"cc-messages__composer\" *ngIf=\"!hideMessageComposer\">\n <div *ngIf=\"messageComposerView; else customComposerView\" class=\"cc-messages__composer--customview\">\n <ng-container *ngTemplateOutlet=\"messageComposerView\">\n </ng-container>\n </div>\n <ng-template #customComposerView>\n <cometchat-message-composer #messageComposerRef [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\"\n [user]=\"user\" [group]=\"group\" [text]=\"messageComposerConfiguration.text\" [headerView]=\"messageComposerConfiguration.headerView\" [onTextChange]=\"messageComposerConfiguration.onTextChange\" [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\" [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\" [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\" [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\" [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\" [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\" [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\" [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\" [onError]=\"messageComposerConfiguration.onError\"\n >\n </cometchat-message-composer>\n </ng-template>\n</div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\" [reactionIconURL]=\"reactionName\"></cometchat-live-reaction>\n</div>\n<div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n<cometchat-threaded-messages [onClose]=\"closeThreadView\" [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\" [messageActionView]=\"threadedMessageConfiguration.messageActionView\" [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\" [onError]=\"threadedMessageConfiguration.onError\" [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\" [parentMessage]=\"threadMessageObject\" [user]=\"user\" [group]=\"group\"></cometchat-threaded-messages>\n</div>\n<div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details [backdropStyle]=\"detailsConfiguration.backdropStyle\" [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\" [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\" [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\" [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\" [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\" [listItemStyle]=\"detailsConfiguration.listItemStyle\" [detailsStyle]=\"detailsConfiguration.detailsStyle\" [avatarStyle]=\"detailsConfiguration.avatarStyle\" [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\" [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\" [data]=\"detailsConfiguration.data\" [customProfileView]=\"detailsConfiguration.customProfileView\" [subtitleView]=\"detailsConfiguration.subtitleView\" [hideProfile]=\"detailsConfiguration.hideProfile\" [onError]=\"detailsConfiguration.onError\" [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\" [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\" *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container *ngTemplateOutlet=\"getAuxilaryView()\">\n </ng-container>\n</div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\" videoCallIconText=\"\" [user]=\"user\" [group]=\"group\" [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\" [buttonStyle]=\"detailsButtonStyle\" (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"] }]
|
|
361
|
+
args: [{ selector: "cometchat-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-messages__wrapper\">\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 *ngTemplateOutlet=\"messageHeaderView\">\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 [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\">\n <cometchat-message-list #messageListRef\n [messageInformationConfiguration]=\"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 [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 </cometchat-message-list>\n </div>\n <div class=\"cc-messages__composer\" *ngIf=\"!hideMessageComposer\">\n <div *ngIf=\"messageComposerView; else customComposerView\"\n class=\"cc-messages__composer--customview\">\n <ng-container *ngTemplateOutlet=\"messageComposerView\">\n </ng-container>\n </div>\n <ng-template #customComposerView>\n <cometchat-message-composer #messageComposerRef\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\"\n [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 [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\">\n </cometchat-message-composer>\n </ng-template>\n </div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\"\n [reactionIconURL]=\"reactionName\"></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\"\n [group]=\"group\"></cometchat-threaded-messages>\n </div>\n <div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details [backdropStyle]=\"detailsConfiguration.backdropStyle\"\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]=\"detailsConfiguration.data\"\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 *ngTemplateOutlet=\"getAuxilaryView()\">\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"] }]
|
|
362
362
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }, { type: i0.ElementRef }]; }, propDecorators: { messageComposerRef: [{
|
|
363
363
|
type: ViewChild,
|
|
364
364
|
args: ["messageComposerRef", { static: false }]
|
|
@@ -404,4 +404,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
404
404
|
}], auxiliaryMenu: [{
|
|
405
405
|
type: Input
|
|
406
406
|
}] } });
|
|
407
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TWVzc2FnZXMvY29tZXRjaGF0LW1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdE1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUdULHVCQUF1QixFQUl4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFPM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBYyxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hLLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBQyxvQkFBb0IsRUFBRSxhQUFhLEVBQXdCLGtCQUFrQixFQUFvQixNQUFNLHlCQUF5QixDQUFDO0FBQzVQLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7O0FBQzFFOzs7Ozs7OztFQVFFO0FBT0YsTUFBTSxPQUFPLDBCQUEwQjtJQXVJckMsWUFBcUIsR0FBc0IsRUFBUyxZQUFrQyxFQUFTLFVBQXNCO1FBQWhHLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsaUJBQVksR0FBWixZQUFZLENBQXNC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Q0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFDRyw4QkFBOEI7c0JBQXRDLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBT0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBFbGVtZW50UmVmXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21ldENoYXQgfSBmcm9tIFwiQGNvbWV0Y2hhdC9jaGF0LXNkay1qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyL2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyL2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0TWVzc2FnZUxpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0TWVzc2FnZUxpc3QvY29tZXRjaGF0LW1lc3NhZ2UtbGlzdC9jb21ldGNoYXQtbWVzc2FnZS1saXN0LmNvbXBvbmVudFwiO1xuXG4gICBpbXBvcnQgeyBMaXN0SXRlbVN0eWxlLCBNZW51TGlzdFN0eWxlLEF2YXRhclN0eWxlLERhdGVTdHlsZSwgQmFzZVN0eWxlfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzJ1xuaW1wb3J0IHsgIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBDb21ldENoYXRUaGVtZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0VGhlbWUuc2VydmljZVwiO1xuaW1wb3J0IHsgZm9udEhlbHBlciwgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cywgQ29tZXRDaGF0R3JvdXBFdmVudHMsIElHcm91cExlZnQsIENvbWV0Q2hhdFVzZXJFdmVudHMsIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzIH0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBNZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbiwgTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLCBNZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLCBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbixEZXRhaWxzQ29uZmlndXJhdGlvbiwgTWVzc2FnZXNTdHlsZSwgTWVzc2FnZUNvbXBvc2VyU3R5bGUsIE1lc3NhZ2VIZWFkZXJTdHlsZSwgQ2FsbEJ1dHRvbnNTdHlsZSB9IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXNoYXJlZFwiO1xuaW1wb3J0IHsgQ2hhdENvbmZpZ3VyYXRvciB9IGZyb20gXCIuLi8uLi9TaGFyZWQvRnJhbWV3b3JrL0NoYXRDb25maWd1cmF0b3JcIjtcbmltcG9ydCB7IENvbWV0Q2hhdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9TaGFyZWQvVXRpbHMvQ29tZUNoYXRFeGNlcHRpb25cIjtcbi8qKlxuKlxuKiBDb21ldENoYXRNZXNzYWdlcyBpcyBhIHdyYXBwZXIgY29tcG9uZW50IGZvciBtZXNzYWdlTGlzdCwgbWVzc2FnZUhlYWRlciwgbWVzc2FnZUNvbXBvc2VyIGFuZCBsaXZlUmVhY3Rpb24gY29tcG9uZW50LlxuKlxuKiBAdmVyc2lvbiAxLjAuMFxuKiBAYXV0aG9yIENvbWV0Q2hhdFRlYW1cbiogQGNvcHlyaWdodCDCqSAyMDIyIENvbWV0Q2hhdCBJbmMuXG4qXG4qL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvbWV0Y2hhdC1tZXNzYWdlc1wiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2NvbWV0Y2hhdC1tZXNzYWdlcy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5zY3NzXCJdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ29tZXRDaGF0TWVzc2FnZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoXCJtZXNzYWdlQ29tcG9zZXJSZWZcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIG1lc3NhZ2VDb21wb3NlclJlZiE6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChcIm1lc3NhZ2VMaXN0UmVmXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBtZXNzYWdlTGlzdFJlZiE6IENvbWV0Q2hhdE1lc3NhZ2VMaXN0Q29tcG9uZW50O1xuICBASW5wdXQoKSB1c2VyITogQ29tZXRDaGF0LlVzZXI7XG4gIEBJbnB1dCgpIGdyb3VwITogQ29tZXRDaGF0Lkdyb3VwO1xuICBASW5wdXQoKSBoaWRlTWVzc2FnZUNvbXBvc2VyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVUeXBpbmchOiBib29sZWFuO1xuICBASW5wdXQoKSBtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbjogTWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24gPSBuZXcgTWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb246IE1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbiA9IG5ldyBNZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uOiBNZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uID0gbmV3IE1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSB0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uOiBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbiA9IG5ldyBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIGRldGFpbHNDb25maWd1cmF0aW9uOiBEZXRhaWxzQ29uZmlndXJhdGlvbiA9IG5ldyBEZXRhaWxzQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIGN1c3RvbVNvdW5kRm9ySW5jb21pbmdNZXNzYWdlcyE6IHN0cmluZztcbiAgQElucHV0KCkgY3VzdG9tU291bmRGb3JPdXRnb2luZ01lc3NhZ2VzITogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlU291bmRGb3JNZXNzYWdlcyE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG1lc3NhZ2VzU3R5bGU6IE1lc3NhZ2VzU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYmFja2dyb3VuZDogXCJ3aGl0ZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCJub25lXCIsICAgIG1lc3NhZ2VUZXh0Q29sb3I6IFwicmdiYSgyMCwgMjAsIDIwLCAwLjMzKVwiLFxuICAgIG1lc3NhZ2VUZXh0Rm9udDogXCI3MDAgMjJweCBJbnRlclwiLFxuICB9O1xuICBASW5wdXQoKSBtZXNzYWdlSGVhZGVyVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIG1lc3NhZ2VDb21wb3NlclZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBtZXNzYWdlTGlzdFZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBoaWRlTWVzc2FnZUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlRGV0YWlsczpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1eGlsaWFyeU1lbnUhOlRlbXBsYXRlUmVmPGFueT47XG4gIGxvZ2dlZEluVXNlciE6IENvbWV0Q2hhdC5Vc2VyIHwgbnVsbDtcbiAgY2FsbEJ1dHRvbnNTdHlsZTogQ2FsbEJ1dHRvbnNTdHlsZSA9IHtcbiAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCIwXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJ1dHRvblBhZGRpbmc6XCIwXCIsXG4gICAgYnV0dG9uQmFja2dyb3VuZDpcInRyYW5zcGFyZW50XCIsXG4gICAgYnV0dG9uQm9yZGVyOlwiMCA0cHhcIixcbiAgICBidXR0b25Cb3JkZXJSYWRpdXM6XCI4cHhcIlxuICB9O1xuICBwdWJsaWMgbWVzc2FnZVRvQmVFZGl0ZWQ6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbGl2ZVJlYWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZWFjdGlvbk5hbWU6IHN0cmluZyA9IFwiYXNzZXRzL2hlYXJ0LXJlYWN0aW9uLnBuZ1wiO1xuICBwdWJsaWMgbWVzc2FnZVRvUmVhY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tcG9zZXJTdHlsZXM6IE1lc3NhZ2VDb21wb3NlclN0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjEycHhcIixcbiAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMCgpLFxuICAgIGlucHV0QmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRTZWNvbmRhcnkoKSwgLy8gZG9uZVxuICAgIHRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSwgLy8gZG9uZVxuICAgIHRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKSwgLy8gZG9uZVxuICB9XG4gIHB1YmxpYyBsaXZlUmVhY3Rpb25UaW1lb3V0OiBhbnkgPSAwO1xuICBwdWJsaWMgb3BlblRocmVhZGVkTWVzc2FnZXM6Ym9vbGVhbiA9IGZhbHNlO1xuICAvKlxuIG1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uXG4gKi9cbiAgc3VidGl0bGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgZGlzYWJsZVVzZXJzUHJlc2VuY2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkR3JvdXBJY29uOiBzdHJpbmcgPSBcImFzc2V0cy9Mb2NrZWQuc3ZnXCI7XG4gIHByaXZhdGVHcm91cEljb246IHN0cmluZyA9XCJhc3NldHMvUHJpdmF0ZS5zdmdcIjtcbiAgbWVudSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIGhlYWRlclN0eWxlOiBNZXNzYWdlSGVhZGVyU3R5bGUgPSBuZXcgTWVzc2FnZUhlYWRlclN0eWxlKHt9KVxuICBiYWNrQnV0dG9uSWNvblVSTDogc3RyaW5nID0gXCJhc3NldHMvYmFja2J1dHRvbi5zdmdcIjtcbiAgaGlkZUJhY2tJY29uOiBib29sZWFuID0gdHJ1ZTtcbiAgbGlzdEl0ZW1WaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgb25FcnJvciE6IChlcnJvcjpDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKT0+IHZvaWQ7XG4gIG9uQmFjayE6ICgpPT4gdm9pZDtcbiAgYXZhdGFyU3R5bGU6IEF2YXRhclN0eWxlID0ge1xuICAgIGJvcmRlclJhZGl1czogXCIxNnB4XCIsXG4gICAgd2lkdGg6IFwiMjhweFwiLFxuICAgIGhlaWdodDogXCIyOHB4XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFwid2hpdGVcIixcbiAgICBuYW1lVGV4dENvbG9yOiBcInJnYigyMCwyMCwyMClcIixcbiAgICBiYWNrZ3JvdW5kU2l6ZTogXCJjb3ZlclwiLFxuICAgIG5hbWVUZXh0Rm9udDogXCI1MDAgMTZweCBJbnRlclwiLFxuICAgIFxuICAgIG91dGVyVmlld0JvcmRlclNwYWNpbmc6IFwiXCIsXG4gIH1cbiAgc3RhdHVzSW5kaWNhdG9yU3R5bGU6IEJhc2VTdHlsZSA9IHtcbiAgICBib3JkZXJSYWRpdXM6IFwiMTZweFwiLFxuICAgIHdpZHRoOiBcIjEwcHhcIixcbiAgICBoZWlnaHQ6IFwiMTBweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gIH1cbiAgbWVzc2FnZUhlYWRlclN0eWxlOiBNZXNzYWdlSGVhZGVyU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjBcIixcbiAgICBiYWNrQnV0dG9uSWNvblRpbnQ6IFwiIzMzOTlGRlwiLFxuICAgIG9ubGluZVN0YXR1c0NvbG9yOiBcIiMwMGYzMDBcIixcbiAgICBzdWJ0aXRsZVRleHRDb2xvcjogXCJncmV5XCIsXG4gICAgc3VidGl0bGVUZXh0Rm9udDogXCI0MDAgMTRweCBJbnRlclwiLFxuICAgIHR5cGluZ0luZGljYXRvclRleHRDb2xvcjogXCIjMzM5OUZGXCIsXG4gICAgdHlwaW5nSW5kaWNhdG9yVGV4dEZvbnQ6IFwiNDAwIDEzcHggSW50ZXJcIixcbiAgfVxuICBsaXN0SXRlbVN0eWxlOiBMaXN0SXRlbVN0eWxlID0ge1xuICAgIGJhY2tncm91bmQ6IFwid2hpdGVcIixcbiAgICB0aXRsZUNvbG9yOiBcImJsYWNrXCIsXG4gICAgdGl0bGVGb250OiBcIjUwMCAxNnB4IEludGVyXCIsXG4gICAgd2lkdGg6IFwiXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCIycHhcIixcbiAgICBzZXBhcmF0b3JDb2xvcjogXCJcIixcbiAgICBhY3RpdmVCYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgaG92ZXJCYWNrZ3JvdW5kOlwidHJhbnNwYXJlbnRcIlxuICB9XG5cblxuIGluZm9JY29uU3R5bGU6c3RyaW5nID0gXCJhc3NldHMvSW5mby5zdmdcIlxuIGRldGFpbHNCdXR0b25TdHlsZTphbnkgPSB7XG4gICBoZWlnaHQ6XCIyNHB4XCIsXG4gICB3aWR0aDpcIjI0cHhcIixcbiAgIGJvcmRlcjpcIm5vbmVcIixcbiAgIGJvcmRlclJhZGl1czpcIjBcIixcbiAgIGJhY2tncm91bmQ6XCJ0cmFuc3BhcmVudFwiLFxuICAgYnV0dG9uSWNvblRpbnQ6XCIjMzM5OUZGXCIsXG4gICBwYWRkaW5nOlwiMCA4cHhcIlxuIH1cbiBlbmFibGVDYWxsaW5nOmJvb2xlYW4gPSBmYWxzZTtcbi8vXG5wdWJsaWMgY2NMaXZlUmVhY3Rpb24hOiBTdWJzY3JpcHRpb247XG5wdWJsaWMgY2NHcm91cERlbGV0ZWQhOiBTdWJzY3JpcHRpb247XG5wdWJsaWMgY2NHcm91cExlZnQhOlN1YnNjcmlwdGlvbjtcbnB1YmxpYyBjY1VzZXJCbG9ja2VkITogU3Vic2NyaXB0aW9uO1xucHVibGljIGNjVXNlclVuQmxvY2tlZCE6U3Vic2NyaXB0aW9uO1xuICB0aHJlYWRNZXNzYWdlT2JqZWN0ITpDb21ldENoYXQuQmFzZU1lc3NhZ2UgfCBudWxsO1xuICBwYXJlbnRCdWJibGVWaWV3ITpUZW1wbGF0ZVJlZjxhbnk+O1xuICBvcGVuRGV0YWlsczpib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKCBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSB0aGVtZVNlcnZpY2U6Q29tZXRDaGF0VGhlbWVTZXJ2aWNlLHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cygpXG4gICAgdGhpcy5zZXRNZXNzYWdlc1N0eWxlKClcblxuXG4gICAgQ29tZXRDaGF0LmdldExvZ2dlZGluVXNlcigpLnRoZW4oKHVzZXIpID0+IHtcbiAgICAgIHRoaXMubG9nZ2VkSW5Vc2VyID0gdXNlcjtcbiAgICB9KS5jYXRjaCgoZXJyb3I6Q29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbik9PntcbiAgICAgIGlmKHRoaXMub25FcnJvcil7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmIChDaGF0Q29uZmlndXJhdG9yLm5hbWVzLmluY2x1ZGVzKCdjYWxsaW5nJykpIHtcbiAgICAgIHRoaXMuZW5hYmxlQ2FsbGluZyA9IHRydWVcbiAgICB9XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCl7XG5zZXRUaW1lb3V0KCgpID0+IHtcblxuICBjb25zdCBkaXZIZWlnaHQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gIGNvbnN0IGRpdldpZHRoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG59LCAxMDAwKTtcblxuICB9XG4gIHN1YnNjcmliZVRvRXZlbnRzKCl7XG4gICAgdGhpcy5jY0xpdmVSZWFjdGlvbiA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NMaXZlUmVhY3Rpb24uc3Vic2NyaWJlKChyZWFjdGlvbk5hbWU6IGFueSkgPT4ge1xuICAgICBpZihyZWFjdGlvbk5hbWUgJiYgcmVhY3Rpb25OYW1lICE9IFwiXCIpe1xuICAgICAgbGV0IGljb25VUkw6c3RyaW5nID0gdGhpcy5tZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkxpdmVSZWFjdGlvbkljb25VUkwgPz8gXCJhc3NldHMvaGVhcnQtcmVhY3Rpb24ucG5nXCJcbiAgICAgIHRoaXMubGl2ZVJlYWN0aW9uU3RhcnQoaWNvblVSTClcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgfVxuICAgIFxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwRGVsZXRlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBEZWxldGVkLnN1YnNjcmliZSgoZ3JvdXA6Q29tZXRDaGF0Lkdyb3VwKT0+e1xuICAgICAgaWYodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBncm91cC5nZXRHdWlkKCkpe1xuICAgICAgICB0aGlzLm9wZW5EZXRhaWxzID0gZmFsc2U7XG4gICAgICAgIHRoaXMub3BlblRocmVhZGVkTWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ncm91cCA9IGdyb3VwXG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTGVmdCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBMZWZ0LnN1YnNjcmliZSgoaXRlbTpJR3JvdXBMZWZ0KT0+e1xuICAgICAgaWYodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtLmxlZnRHcm91cC5nZXRHdWlkKCkpe1xuICAgICAgICBpZih0aGlzLmxvZ2dlZEluVXNlcj8uZ2V0VWlkKCkgPT0gaXRlbT8udXNlckxlZnQuZ2V0VWlkKCkpe1xuICAgICAgICAgIHRoaXMub3BlbkRldGFpbHMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncm91cCA9IGl0ZW0ubGVmdEdyb3VwO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjVXNlckJsb2NrZWQgPSBDb21ldENoYXRVc2VyRXZlbnRzLmNjVXNlckJsb2NrZWQuc3Vic2NyaWJlKCh1c2VyOkNvbWV0Q2hhdC5Vc2VyKSA9PiB7XG4gICAgICBpZih0aGlzLnVzZXIgJiYgdXNlci5nZXRVaWQoKSA9PSB0aGlzLnVzZXIuZ2V0VWlkKCkpe1xuICAgICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgIH0pXG4gICB0aGlzLmNjVXNlclVuQmxvY2tlZCA9IENvbWV0Q2hhdFVzZXJFdmVudHMuY2NVc2VyVW5ibG9ja2VkLnN1YnNjcmliZSgodXNlcjpDb21ldENoYXQuVXNlcikgPT4ge1xuICAgICBpZih0aGlzLnVzZXIgJiYgdXNlci5nZXRVaWQoKSA9PSB0aGlzLnVzZXIuZ2V0VWlkKCkpe1xuICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgIH1cbiAgIH0pXG4gIH1cbiAgdW5zdWJzY3JpYmVUb0V2ZW50cygpe1xuICAgICB0aGlzLmNjTGl2ZVJlYWN0aW9uPy51bnN1YnNjcmliZSgpXG4gdGhpcy5jY0dyb3VwRGVsZXRlZD8udW5zdWJzY3JpYmUoKVxuIHRoaXMuY2NHcm91cExlZnQ/LnVuc3Vic2NyaWJlKClcbiB0aGlzLmNjVXNlckJsb2NrZWQ/LnVuc3Vic2NyaWJlKClcbiB0aGlzLmNjVXNlclVuQmxvY2tlZD8udW5zdWJzY3JpYmUoKVxuICB9XG4gIHNldE1lc3NhZ2VzU3R5bGUoKXtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOk1lc3NhZ2VzU3R5bGUgPSBuZXcgTWVzc2FnZXNTdHlsZSh7XG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwibm9uZVwiLFxuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQyMDAoKX1gLFxuICAgICAgbWVzc2FnZVRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIG1lc3NhZ2VUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgfSlcbiAgICB0aGlzLm1lc3NhZ2VzU3R5bGUgPSB7XG4gICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gICAgICAuLi50aGlzLm1lc3NhZ2VzU3R5bGVcbiAgICB9XG4gICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGUuYm9yZGVyID0gIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLmJvcmRlciA/PyBcIm5vbmVcIlxuICAgIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc1N0eWxlLmJvcmRlciA9ICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNTdHlsZS5ib3JkZXIgPz8gXCJub25lXCJcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5ib3JkZXIgPSAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzU3R5bGUuYm9yZGVyID8/IFwibm9uZVwiXG4gICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc1N0eWxlLmJvcmRlciA9ICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzU3R5bGUuYm9yZGVyID8/IFwibm9uZVwiXG5cbiAgfVxuICBnZXRBdXhpbGFyeVZpZXcoKXtcbiAgICBpZih0aGlzLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm1lbnUpe1xuICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ubWVudVxuICAgIH1cbiAgICBlbHNlIGlmKHRoaXMuYXV4aWxpYXJ5TWVudSl7XG4gICAgICByZXR1cm4gdGhpcy5hdXhpbGlhcnlNZW51XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgb3BlblRocmVhZFZpZXcgPSAobWVzc2FnZTpDb21ldENoYXQuQmFzZU1lc3NhZ2UsYnViYmxlOlRlbXBsYXRlUmVmPGFueT4pPT57XG50aGlzLnRocmVhZE1lc3NhZ2VPYmplY3Q9bWVzc2FnZVxudGhpcy5wYXJlbnRCdWJibGVWaWV3PWJ1YmJsZVxudGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IHRydWU7XG50aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgb3BlbkRldGFpbHNQYWdlID0oKT0+e1xuICAgIHRoaXMub3BlbkRldGFpbHMgPSB0cnVlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBjbG9zZURldGFpbHNQYWdlID0oKT0+e1xuICAgIHRoaXMub3BlbkRldGFpbHMgPSBmYWxzZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgY2xvc2VUaHJlYWRWaWV3ID0gKCk9PntcbiAgICB0aGlzLnRocmVhZE1lc3NhZ2VPYmplY3QgPSBudWxsO1xudGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xudGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHJlYWN0aW9uTmFtZVxuICAgKi9cbiAgbGl2ZVJlYWN0aW9uU3RhcnQgPSAocmVhY3Rpb25OYW1lOiBzdHJpbmcpID0+IHtcbiAgICBpZiAodGhpcy5saXZlUmVhY3Rpb24pIHtcbiAgICAgIHRoaXMucmVhY3Rpb25OYW1lID0gXCJcIjtcbiAgICAgIHRoaXMubGl2ZVJlYWN0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHRoaXMucmVhY3Rpb25OYW1lID0gcmVhY3Rpb25OYW1lO1xuICAgIHRoaXMubGl2ZVJlYWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlYWN0aW9uTmFtZSA9IFwiXCI7XG4gICAgICB0aGlzLmxpdmVSZWFjdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDE1MDApO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRyeSB7XG4gICAgaWYgKGNoYW5nZVtDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXJdIHx8IGNoYW5nZVtDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLmdyb3VwXSkge1xuICAgICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy51c2VyKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBDb21ldENoYXQuZ2V0VXNlcih0aGlzLnVzZXIpXG4gICAgICAgICAgICAudGhlbigodXNlcjogQ29tZXRDaGF0LlVzZXIpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmdyb3VwKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBDb21ldENoYXQuZ2V0R3JvdXAodGhpcy5ncm91cClcbiAgICAgICAgICAgIC50aGVuKChncm91cDogQ29tZXRDaGF0Lkdyb3VwKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSBncm91cFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG5pZih0aGlzLm9uRXJyb3Ipe1xuICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSlcbn1cbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jY0xpdmVSZWFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub3BlblRocmVhZGVkTWVzc2FnZXMgPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5EZXRhaWxzID0gZmFsc2U7XG5cbiAgfVxuICBjaGF0TGlzdFN0eWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLm1lc3NhZ2VzU3R5bGUuYmFja2dyb3VuZCB8fCB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGhlaWdodDogdGhpcy5tZXNzYWdlc1N0eWxlLmhlaWdodCxcbiAgICAgIHdpZHRoOiB0aGlzLm1lc3NhZ2VzU3R5bGUud2lkdGgsXG4gICAgICBib3JkZXI6IHRoaXMubWVzc2FnZXNTdHlsZS5ib3JkZXIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMubWVzc2FnZXNTdHlsZS5ib3JkZXJSYWRpdXNcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIHB1YmxpYyBtZXRob2RzXG4gKiBtZXNzYWdlTGlzdFJlZiBtZXRob2RzXG4gKiBUaGlzIG1ldHRob2Qgd2lsbCBhcHBlbmQgbWVzc2FnZSBpbiBtZXNzYWdlIGxpc3RcbiAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICovXG4gIGFkZE1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIHVwZGF0ZSB0aGUgbWVzc2FnZSBpbiBtZXNzYWdlTGlzdFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICovXG4gIHVwZGF0ZU1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLCBtdWlkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VMaXN0UmVmLnVwZGF0ZU1lc3NhZ2UobWVzc2FnZSwgbXVpZCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgcmVtb3ZlICB0aGUgbWVzc2FnZSBmcm9tIG1lc3NhZ2VMaXN0XG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKi9cbiAgcmVtb3ZlTWVzc2FnZShtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VMaXN0UmVmLnJlbW92ZU1lc3NhZ2UobWVzc2FnZSlcbiAgfVxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBkZWxldGUgYW5kIHJlbW92ZSAgdGhlIG1lc3NhZ2UgZnJvbSBtZXNzYWdlTGlzdFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICovXG4gIGRlbGV0ZU1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi5kZWxldGVNZXNzYWdlKG1lc3NhZ2UpXG4gIH1cbiAgLyoqXG4gICAqIHRoaXMgbWV0aG9kIHdpbGwgc2VuZCBhIHRleHQgbWVzc2FnZVxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRleHRcbiAgICovXG4gIHNlbmRUZXh0TWVzc2FnZSh0ZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2VDb21wb3NlclJlZi5zZW5kVGV4dE1lc3NhZ2UodGV4dClcbiAgfVxuICAvKipcbiAgICogdGhpcyBtZXRob2Qgd2lsbCBvcGVuIHByZXZpZXcgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqIEBwYXJhbSAge3N0cmluZ30gbW9kZVxuICAgKi9cbiAgcHJldmlld01lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LlRleHRNZXNzYWdlLCBtb2RlOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgdGhpcy5tZXNzYWdlQ29tcG9zZXJSZWYubWVzc2FnZVRvQmVFZGl0ZWQgPSBtZXNzYWdlXG4gICAgdGhpcy5tZXNzYWdlQ29tcG9zZXJSZWYub3BlbkVkaXRQcmV2aWV3KClcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX193cmFwcGVyXCI+XG48ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNcIiBbbmdTdHlsZV09XCJjaGF0TGlzdFN0eWxlKClcIiAqbmdJZj1cInVzZXIgfHwgZ3JvdXBcIj5cbjxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19faGVhZGVyXCIgKm5nSWY9XCIhaGlkZU1lc3NhZ2VIZWFkZXJcIj5cbiAgPGRpdiAqbmdJZj1cIm1lc3NhZ2VIZWFkZXJWaWV3OyBlbHNlIGN1c3RvbUhlYWRlclZpZXdcIiBjbGFzcz1cImNjLW1lc3NhZ2VzX19oZWFkZXItY3VzdG9tdmlld1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXNzYWdlSGVhZGVyVmlld1wiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlICNjdXN0b21IZWFkZXJWaWV3PlxuICAgIDxjb21ldGNoYXQtbWVzc2FnZS1oZWFkZXIgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiIFtzdWJ0aXRsZVZpZXddPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uc3VidGl0bGVWaWV3XCJcbiAgICBbZGlzYWJsZVVzZXJzUHJlc2VuY2VdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uZGlzYWJsZVVzZXJzUHJlc2VuY2VcIiBbcHJvdGVjdGVkR3JvdXBJY29uXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLnByb3RlY3RlZEdyb3VwSWNvblwiIFtwcml2YXRlR3JvdXBJY29uXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLnByaXZhdGVHcm91cEljb25cIiBbbWVudV09XCJoZWFkZXJNZW51XCIgW21lc3NhZ2VIZWFkZXJTdHlsZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyU3R5bGVcIlxuICAgIFtiYWNrQnV0dG9uSWNvblVSTF09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5iYWNrQnV0dG9uSWNvblVSTFwiIFtoaWRlQmFja0J1dHRvbl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5oaWRlQmFja0J1dHRvblwiIFtvbkVycm9yXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm9uRXJyb3JcIiBbb25CYWNrXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm9uQmFja1wiIFtsaXN0SXRlbVN0eWxlXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLmxpc3RJdGVtU3R5bGVcIiBbc3RhdHVzSW5kaWNhdG9yU3R5bGVdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uc3RhdHVzSW5kaWNhdG9yU3R5bGVcIlxuICAgIFthdmF0YXJTdHlsZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5hdmF0YXJTdHlsZVwiXG4gICAgPlxuICAgIDwvY29tZXRjaGF0LW1lc3NhZ2UtaGVhZGVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2xpc3RcIj5cbiAgPGNvbWV0Y2hhdC1tZXNzYWdlLWxpc3QgI21lc3NhZ2VMaXN0UmVmIFttZXNzYWdlSW5mb3JtYXRpb25Db25maWd1cmF0aW9uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25Db25maWd1cmF0aW9uXCIgW2Rpc2FibGVTb3VuZEZvck1lc3NhZ2VzXT1cImRpc2FibGVTb3VuZEZvck1lc3NhZ2VzXCIgW2N1c3RvbVNvdW5kRm9yTWVzc2FnZXNdPVwiY3VzdG9tU291bmRGb3JJbmNvbWluZ01lc3NhZ2VzXCIgW2VtcHR5U3RhdGVWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5lbXB0eVN0YXRlVmlld1wiIFtsb2FkaW5nSWNvblVSTF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24/LmxvYWRpbmdJY29uVVJMIVwiIFtsb2FkaW5nU3RhdGVWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5sb2FkaW5nU3RhdGVWaWV3XCIgIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIlxuICBbZXJyb3JTdGF0ZVZpZXddPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmVycm9yU3RhdGVWaWV3XCIgW2Rpc2FibGVSZWNlaXB0XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlUmVjZWlwdFwiIFtyZWFkSWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ucmVhZEljb25cIiBbZGVsaXZlcmVkSWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZGVsaXZlcmVkSWNvblwiIFtzZW50SWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uc2VudEljb25cIiBbd2FpdEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLndhaXRJY29uXCJcbiAgW2Vycm9ySWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZXJyb3JJY29uXCIgW2FsaWdubWVudF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYWxpZ25tZW50XCIgW3Nob3dBdmF0YXJdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnNob3dBdmF0YXJcIiBbZGF0ZVBhdHRlcm5dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRhdGVQYXR0ZXJuXCIgW3RpbWVzdGFtcEFsaWdubWVudF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24udGltZXN0YW1wQWxpZ25tZW50XCIgW0RhdGVTZXBhcmF0b3JQYXR0ZXJuXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5EYXRlU2VwYXJhdG9yUGF0dGVyblwiXG4gIFt0ZW1wbGF0ZXNdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnRlbXBsYXRlc1wiIFttZXNzYWdlc1JlcXVlc3RCdWlsZGVyXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlc1JlcXVlc3RCdWlsZGVyXCIgW3RocmVzaG9sZFZhbHVlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi50aHJlc2hvbGRWYWx1ZVwiIFtvblRocmVhZFJlcGxpZXNDbGlja109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ub25UaHJlYWRSZXBsaWVzQ2xpY2sgfHwgb3BlblRocmVhZFZpZXdcIiBbaGVhZGVyVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uaGVhZGVyVmlld1wiIFtmb290ZXJWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5mb290ZXJWaWV3XCJcbiAgIFthdmF0YXJTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIiBbYmFja2Ryb3BTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZVwiIFtkYXRlU2VwYXJhdG9yU3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRhdGVTZXBhcmF0b3JTdHlsZVwiIFttZXNzYWdlTGlzdFN0eWxlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdFN0eWxlXCIgIFtvbkVycm9yXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgPlxuICA8L2NvbWV0Y2hhdC1tZXNzYWdlLWxpc3Q+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fY29tcG9zZXJcIiAqbmdJZj1cIiFoaWRlTWVzc2FnZUNvbXBvc2VyXCI+XG4gIDxkaXYgKm5nSWY9XCJtZXNzYWdlQ29tcG9zZXJWaWV3OyBlbHNlIGN1c3RvbUNvbXBvc2VyVmlld1wiIGNsYXNzPVwiY2MtbWVzc2FnZXNfX2NvbXBvc2VyLS1jdXN0b212aWV3XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VDb21wb3NlclZpZXdcIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjY3VzdG9tQ29tcG9zZXJWaWV3PlxuICAgIDxjb21ldGNoYXQtbWVzc2FnZS1jb21wb3NlciAjbWVzc2FnZUNvbXBvc2VyUmVmIFtkaXNhYmxlU291bmRGb3JNZXNzYWdlc109XCJkaXNhYmxlU291bmRGb3JNZXNzYWdlc1wiXG4gICAgW3ZvaWNlUmVjb3JkaW5nU3RvcEljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi52b2ljZVJlY29yZGluZ1N0b3BJY29uVVJMXCJcbiAgICBbdm9pY2VSZWNvcmRpbmdTdGFydEljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi52b2ljZVJlY29yZGluZ1N0YXJ0SWNvblVSTFwiXG4gICAgW3ZvaWNlUmVjb3JkaW5nQ2xvc2VJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udm9pY2VSZWNvcmRpbmdDbG9zZUljb25VUkxcIlxuICAgIFt2b2ljZVJlY29yZGluZ1N1Ym1pdEljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi52b2ljZVJlY29yZGluZ1N1Ym1pdEljb25VUkxcIlxuICAgIFttZWRpYVJlY29yZGVyU3R5bGVdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5tZWRpYVJlY29yZGVyU3R5bGVcIlxuICAgIFtjdXN0b21Tb3VuZEZvck1lc3NhZ2VzXT1cImN1c3RvbVNvdW5kRm9yT3V0Z29pbmdNZXNzYWdlc1wiXG4gICAgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiIFt0ZXh0XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udGV4dFwiIFtoZWFkZXJWaWV3XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uaGVhZGVyVmlld1wiIFtvblRleHRDaGFuZ2VdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vblRleHRDaGFuZ2VcIiBbYXR0YWNobWVudEljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdHRhY2htZW50SWNvblVSTFwiXG4gICAgW2F0dGFjaG1lbnRPcHRpb25zXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXR0YWNobWVudE9wdGlvbnNcIiBbc2Vjb25kYXJ5QnV0dG9uVmlld109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnNlY29uZGFyeUJ1dHRvblZpZXdcIiBbYXV4aWxhcnlCdXR0b25WaWV3XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXV4aWxhcnlCdXR0b25WaWV3XCIgW2F1eGlsaWFyeUJ1dHRvbnNBbGlnbm1lbnRdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdXhpbGlhcnlCdXR0b25zQWxpZ25tZW50XCJcbiAgICBbc2VuZEJ1dHRvblZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5zZW5kQnV0dG9uVmlld1wiIFtoaWRlTGl2ZVJlYWN0aW9uXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uaGlkZUxpdmVSZWFjdGlvblwiIFtMaXZlUmVhY3Rpb25JY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uTGl2ZVJlYWN0aW9uSWNvblVSTFwiIFttZXNzYWdlQ29tcG9zZXJTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlclN0eWxlXCIgW29uU2VuZEJ1dHRvbkNsaWNrXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ub25TZW5kQnV0dG9uQ2xpY2tcIlxuICAgIFtvblNlbmRCdXR0b25DbGlja109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm9uU2VuZEJ1dHRvbkNsaWNrXCIgW29uRXJyb3JdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICA+XG4gICAgPC9jb21ldGNoYXQtbWVzc2FnZS1jb21wb3Nlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIDwvZGl2PlxuIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fbGl2ZXJlYWN0aW9uXCI+XG4gIDxjb21ldGNoYXQtbGl2ZS1yZWFjdGlvbiAqbmdJZj1cImxpdmVSZWFjdGlvblwiIFtyZWFjdGlvbkljb25VUkxdPVwicmVhY3Rpb25OYW1lXCI+PC9jb21ldGNoYXQtbGl2ZS1yZWFjdGlvbj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cIm9wZW5UaHJlYWRlZE1lc3NhZ2VzXCIgY2xhc3M9XCJjYy1tZXNzYWdlc19fdGhyZWFkZWRtZXNzYWdlc1wiPlxuPGNvbWV0Y2hhdC10aHJlYWRlZC1tZXNzYWdlcyBbb25DbG9zZV09XCJjbG9zZVRocmVhZFZpZXdcIiBbdGhyZWFkZWRNZXNzYWdlc1N0eWxlXT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24udGhyZWFkZWRNZXNzYWdlc1N0eWxlXCIgW21lc3NhZ2VBY3Rpb25WaWV3XT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24ubWVzc2FnZUFjdGlvblZpZXdcIiBbY2xvc2VJY29uVVJMXT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24uY2xvc2VJY29uVVJMXCIgW29uRXJyb3JdPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5vbkVycm9yXCIgW2J1YmJsZVZpZXddPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5idWJibGVWaWV3IHx8IHBhcmVudEJ1YmJsZVZpZXdcIiBbcGFyZW50TWVzc2FnZV09XCJ0aHJlYWRNZXNzYWdlT2JqZWN0XCIgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiPjwvY29tZXRjaGF0LXRocmVhZGVkLW1lc3NhZ2VzPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwib3BlbkRldGFpbHNcIiBjbGFzcz1cImNjLW1lc3NhZ2VzX19kZXRhaWxzXCI+XG4gIDxjb21ldGNoYXQtZGV0YWlscyBbYmFja2Ryb3BTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlXCIgIFt0cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24udHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uXCIgW2dyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvblwiIFtiYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvblwiIFthZGRNZW1iZXJzQ29uZmlndXJhdGlvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvblwiICBbb25DbG9zZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5vbkNsb3NlIHx8IGNsb3NlRGV0YWlsc1BhZ2VcIiBbbGlzdEl0ZW1TdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5saXN0SXRlbVN0eWxlXCIgW2RldGFpbHNTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGVcIiBbYXZhdGFyU3R5bGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIiBbc3RhdHVzSW5kaWNhdG9yU3R5bGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uc3RhdHVzSW5kaWNhdG9yU3R5bGVcIiBbbGVhdmVEaWFsb2dTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5sZWF2ZURpYWxvZ1N0eWxlXCIgW2RhdGFdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGF0YVwiIFtjdXN0b21Qcm9maWxlVmlld109XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5jdXN0b21Qcm9maWxlVmlld1wiIFtzdWJ0aXRsZVZpZXddPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uc3VidGl0bGVWaWV3XCIgW2hpZGVQcm9maWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmhpZGVQcm9maWxlXCIgW29uRXJyb3JdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24ub25FcnJvclwiIFtjbG9zZUJ1dHRvbkljb25VUkxdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uY2xvc2VCdXR0b25JY29uVVJMXCIgIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIj48L2NvbWV0Y2hhdC1kZXRhaWxzPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNoZWFkZXJNZW51PlxuICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2hlYWRlcm1lbnVcIj5cbjxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fYXV4aWxpYXJ5bWVudVwiICpuZ0lmPVwiZ2V0QXV4aWxhcnlWaWV3KCk7IGVsc2UgZWxzZUJsb2NrXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRBdXhpbGFyeVZpZXcoKVwiPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjZWxzZUJsb2NrPlxuICAgICAgPGNvbWV0Y2hhdC1jYWxsLWJ1dHRvbnMgKm5nSWY9XCJlbmFibGVDYWxsaW5nXCIgdm9pY2VDYWxsSWNvblRleHQ9XCJcIiB2aWRlb0NhbGxJY29uVGV4dD1cIlwiIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbY2FsbEJ1dHRvbnNTdHlsZV09XCJjYWxsQnV0dG9uc1N0eWxlXCI+XG4gICAgICA8L2NvbWV0Y2hhdC1jYWxsLWJ1dHRvbnM+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8Y29tZXRjaGF0LWJ1dHRvbiAqbmdJZj1cIiFoaWRlRGV0YWlsc1wiIFtpY29uVVJMXT1cImluZm9JY29uU3R5bGVcIiBbYnV0dG9uU3R5bGVdPVwiZGV0YWlsc0J1dHRvblN0eWxlXCIgKGNjLWJ1dHRvbi1jbGlja2VkKT1cIm9wZW5EZXRhaWxzUGFnZSgpXCI+PC9jb21ldGNoYXQtYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
407
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TWVzc2FnZXMvY29tZXRjaGF0LW1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdE1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUdULHVCQUF1QixFQUl4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFPM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBYyxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hLLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBQyxvQkFBb0IsRUFBRSxhQUFhLEVBQXdCLGtCQUFrQixFQUFvQixNQUFNLHlCQUF5QixDQUFDO0FBQzVQLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7O0FBQzFFOzs7Ozs7OztFQVFFO0FBT0YsTUFBTSxPQUFPLDBCQUEwQjtJQXVJckMsWUFBcUIsR0FBc0IsRUFBUyxZQUFrQyxFQUFTLFVBQXNCO1FBQWhHLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsaUJBQVksR0FBWixZQUFZLENBQXNC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Q0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFDRyw4QkFBOEI7c0JBQXRDLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBT0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBFbGVtZW50UmVmXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21ldENoYXQgfSBmcm9tIFwiQGNvbWV0Y2hhdC9jaGF0LXNkay1qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyL2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyL2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0TWVzc2FnZUxpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0TWVzc2FnZUxpc3QvY29tZXRjaGF0LW1lc3NhZ2UtbGlzdC9jb21ldGNoYXQtbWVzc2FnZS1saXN0LmNvbXBvbmVudFwiO1xuXG4gICBpbXBvcnQgeyBMaXN0SXRlbVN0eWxlLCBNZW51TGlzdFN0eWxlLEF2YXRhclN0eWxlLERhdGVTdHlsZSwgQmFzZVN0eWxlfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzJ1xuaW1wb3J0IHsgIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBDb21ldENoYXRUaGVtZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0VGhlbWUuc2VydmljZVwiO1xuaW1wb3J0IHsgZm9udEhlbHBlciwgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cywgQ29tZXRDaGF0R3JvdXBFdmVudHMsIElHcm91cExlZnQsIENvbWV0Q2hhdFVzZXJFdmVudHMsIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzIH0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBNZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbiwgTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLCBNZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLCBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbixEZXRhaWxzQ29uZmlndXJhdGlvbiwgTWVzc2FnZXNTdHlsZSwgTWVzc2FnZUNvbXBvc2VyU3R5bGUsIE1lc3NhZ2VIZWFkZXJTdHlsZSwgQ2FsbEJ1dHRvbnNTdHlsZSB9IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXNoYXJlZFwiO1xuaW1wb3J0IHsgQ2hhdENvbmZpZ3VyYXRvciB9IGZyb20gXCIuLi8uLi9TaGFyZWQvRnJhbWV3b3JrL0NoYXRDb25maWd1cmF0b3JcIjtcbmltcG9ydCB7IENvbWV0Q2hhdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9TaGFyZWQvVXRpbHMvQ29tZUNoYXRFeGNlcHRpb25cIjtcbi8qKlxuKlxuKiBDb21ldENoYXRNZXNzYWdlcyBpcyBhIHdyYXBwZXIgY29tcG9uZW50IGZvciBtZXNzYWdlTGlzdCwgbWVzc2FnZUhlYWRlciwgbWVzc2FnZUNvbXBvc2VyIGFuZCBsaXZlUmVhY3Rpb24gY29tcG9uZW50LlxuKlxuKiBAdmVyc2lvbiAxLjAuMFxuKiBAYXV0aG9yIENvbWV0Q2hhdFRlYW1cbiogQGNvcHlyaWdodCDCqSAyMDIyIENvbWV0Q2hhdCBJbmMuXG4qXG4qL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvbWV0Y2hhdC1tZXNzYWdlc1wiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2NvbWV0Y2hhdC1tZXNzYWdlcy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5zY3NzXCJdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ29tZXRDaGF0TWVzc2FnZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoXCJtZXNzYWdlQ29tcG9zZXJSZWZcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIG1lc3NhZ2VDb21wb3NlclJlZiE6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChcIm1lc3NhZ2VMaXN0UmVmXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBtZXNzYWdlTGlzdFJlZiE6IENvbWV0Q2hhdE1lc3NhZ2VMaXN0Q29tcG9uZW50O1xuICBASW5wdXQoKSB1c2VyITogQ29tZXRDaGF0LlVzZXI7XG4gIEBJbnB1dCgpIGdyb3VwITogQ29tZXRDaGF0Lkdyb3VwO1xuICBASW5wdXQoKSBoaWRlTWVzc2FnZUNvbXBvc2VyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVUeXBpbmchOiBib29sZWFuO1xuICBASW5wdXQoKSBtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbjogTWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24gPSBuZXcgTWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb246IE1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbiA9IG5ldyBNZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uOiBNZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uID0gbmV3IE1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSB0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uOiBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbiA9IG5ldyBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIGRldGFpbHNDb25maWd1cmF0aW9uOiBEZXRhaWxzQ29uZmlndXJhdGlvbiA9IG5ldyBEZXRhaWxzQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIGN1c3RvbVNvdW5kRm9ySW5jb21pbmdNZXNzYWdlcyE6IHN0cmluZztcbiAgQElucHV0KCkgY3VzdG9tU291bmRGb3JPdXRnb2luZ01lc3NhZ2VzITogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlU291bmRGb3JNZXNzYWdlcyE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG1lc3NhZ2VzU3R5bGU6IE1lc3NhZ2VzU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYmFja2dyb3VuZDogXCJ3aGl0ZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCJub25lXCIsICAgIG1lc3NhZ2VUZXh0Q29sb3I6IFwicmdiYSgyMCwgMjAsIDIwLCAwLjMzKVwiLFxuICAgIG1lc3NhZ2VUZXh0Rm9udDogXCI3MDAgMjJweCBJbnRlclwiLFxuICB9O1xuICBASW5wdXQoKSBtZXNzYWdlSGVhZGVyVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIG1lc3NhZ2VDb21wb3NlclZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBtZXNzYWdlTGlzdFZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBoaWRlTWVzc2FnZUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlRGV0YWlsczpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1eGlsaWFyeU1lbnUhOlRlbXBsYXRlUmVmPGFueT47XG4gIGxvZ2dlZEluVXNlciE6IENvbWV0Q2hhdC5Vc2VyIHwgbnVsbDtcbiAgY2FsbEJ1dHRvbnNTdHlsZTogQ2FsbEJ1dHRvbnNTdHlsZSA9IHtcbiAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCIwXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJ1dHRvblBhZGRpbmc6XCIwXCIsXG4gICAgYnV0dG9uQmFja2dyb3VuZDpcInRyYW5zcGFyZW50XCIsXG4gICAgYnV0dG9uQm9yZGVyOlwiMCA0cHhcIixcbiAgICBidXR0b25Cb3JkZXJSYWRpdXM6XCI4cHhcIlxuICB9O1xuICBwdWJsaWMgbWVzc2FnZVRvQmVFZGl0ZWQ6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbGl2ZVJlYWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZWFjdGlvbk5hbWU6IHN0cmluZyA9IFwiYXNzZXRzL2hlYXJ0LXJlYWN0aW9uLnBuZ1wiO1xuICBwdWJsaWMgbWVzc2FnZVRvUmVhY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tcG9zZXJTdHlsZXM6IE1lc3NhZ2VDb21wb3NlclN0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjEycHhcIixcbiAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMCgpLFxuICAgIGlucHV0QmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRTZWNvbmRhcnkoKSwgLy8gZG9uZVxuICAgIHRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSwgLy8gZG9uZVxuICAgIHRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKSwgLy8gZG9uZVxuICB9XG4gIHB1YmxpYyBsaXZlUmVhY3Rpb25UaW1lb3V0OiBhbnkgPSAwO1xuICBwdWJsaWMgb3BlblRocmVhZGVkTWVzc2FnZXM6Ym9vbGVhbiA9IGZhbHNlO1xuICAvKlxuIG1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uXG4gKi9cbiAgc3VidGl0bGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgZGlzYWJsZVVzZXJzUHJlc2VuY2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkR3JvdXBJY29uOiBzdHJpbmcgPSBcImFzc2V0cy9Mb2NrZWQuc3ZnXCI7XG4gIHByaXZhdGVHcm91cEljb246IHN0cmluZyA9XCJhc3NldHMvUHJpdmF0ZS5zdmdcIjtcbiAgbWVudSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIGhlYWRlclN0eWxlOiBNZXNzYWdlSGVhZGVyU3R5bGUgPSBuZXcgTWVzc2FnZUhlYWRlclN0eWxlKHt9KVxuICBiYWNrQnV0dG9uSWNvblVSTDogc3RyaW5nID0gXCJhc3NldHMvYmFja2J1dHRvbi5zdmdcIjtcbiAgaGlkZUJhY2tJY29uOiBib29sZWFuID0gdHJ1ZTtcbiAgbGlzdEl0ZW1WaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgb25FcnJvciE6IChlcnJvcjpDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKT0+IHZvaWQ7XG4gIG9uQmFjayE6ICgpPT4gdm9pZDtcbiAgYXZhdGFyU3R5bGU6IEF2YXRhclN0eWxlID0ge1xuICAgIGJvcmRlclJhZGl1czogXCIxNnB4XCIsXG4gICAgd2lkdGg6IFwiMjhweFwiLFxuICAgIGhlaWdodDogXCIyOHB4XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFwid2hpdGVcIixcbiAgICBuYW1lVGV4dENvbG9yOiBcInJnYigyMCwyMCwyMClcIixcbiAgICBiYWNrZ3JvdW5kU2l6ZTogXCJjb3ZlclwiLFxuICAgIG5hbWVUZXh0Rm9udDogXCI1MDAgMTZweCBJbnRlclwiLFxuICAgIFxuICAgIG91dGVyVmlld0JvcmRlclNwYWNpbmc6IFwiXCIsXG4gIH1cbiAgc3RhdHVzSW5kaWNhdG9yU3R5bGU6IEJhc2VTdHlsZSA9IHtcbiAgICBib3JkZXJSYWRpdXM6IFwiMTZweFwiLFxuICAgIHdpZHRoOiBcIjEwcHhcIixcbiAgICBoZWlnaHQ6IFwiMTBweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gIH1cbiAgbWVzc2FnZUhlYWRlclN0eWxlOiBNZXNzYWdlSGVhZGVyU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjBcIixcbiAgICBiYWNrQnV0dG9uSWNvblRpbnQ6IFwiIzMzOTlGRlwiLFxuICAgIG9ubGluZVN0YXR1c0NvbG9yOiBcIiMwMGYzMDBcIixcbiAgICBzdWJ0aXRsZVRleHRDb2xvcjogXCJncmV5XCIsXG4gICAgc3VidGl0bGVUZXh0Rm9udDogXCI0MDAgMTRweCBJbnRlclwiLFxuICAgIHR5cGluZ0luZGljYXRvclRleHRDb2xvcjogXCIjMzM5OUZGXCIsXG4gICAgdHlwaW5nSW5kaWNhdG9yVGV4dEZvbnQ6IFwiNDAwIDEzcHggSW50ZXJcIixcbiAgfVxuICBsaXN0SXRlbVN0eWxlOiBMaXN0SXRlbVN0eWxlID0ge1xuICAgIGJhY2tncm91bmQ6IFwid2hpdGVcIixcbiAgICB0aXRsZUNvbG9yOiBcImJsYWNrXCIsXG4gICAgdGl0bGVGb250OiBcIjUwMCAxNnB4IEludGVyXCIsXG4gICAgd2lkdGg6IFwiXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCIycHhcIixcbiAgICBzZXBhcmF0b3JDb2xvcjogXCJcIixcbiAgICBhY3RpdmVCYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgaG92ZXJCYWNrZ3JvdW5kOlwidHJhbnNwYXJlbnRcIlxuICB9XG5cblxuIGluZm9JY29uU3R5bGU6c3RyaW5nID0gXCJhc3NldHMvSW5mby5zdmdcIlxuIGRldGFpbHNCdXR0b25TdHlsZTphbnkgPSB7XG4gICBoZWlnaHQ6XCIyNHB4XCIsXG4gICB3aWR0aDpcIjI0cHhcIixcbiAgIGJvcmRlcjpcIm5vbmVcIixcbiAgIGJvcmRlclJhZGl1czpcIjBcIixcbiAgIGJhY2tncm91bmQ6XCJ0cmFuc3BhcmVudFwiLFxuICAgYnV0dG9uSWNvblRpbnQ6XCIjMzM5OUZGXCIsXG4gICBwYWRkaW5nOlwiMCA4cHhcIlxuIH1cbiBlbmFibGVDYWxsaW5nOmJvb2xlYW4gPSBmYWxzZTtcbi8vXG5wdWJsaWMgY2NMaXZlUmVhY3Rpb24hOiBTdWJzY3JpcHRpb247XG5wdWJsaWMgY2NHcm91cERlbGV0ZWQhOiBTdWJzY3JpcHRpb247XG5wdWJsaWMgY2NHcm91cExlZnQhOlN1YnNjcmlwdGlvbjtcbnB1YmxpYyBjY1VzZXJCbG9ja2VkITogU3Vic2NyaXB0aW9uO1xucHVibGljIGNjVXNlclVuQmxvY2tlZCE6U3Vic2NyaXB0aW9uO1xuICB0aHJlYWRNZXNzYWdlT2JqZWN0ITpDb21ldENoYXQuQmFzZU1lc3NhZ2UgfCBudWxsO1xuICBwYXJlbnRCdWJibGVWaWV3ITpUZW1wbGF0ZVJlZjxhbnk+O1xuICBvcGVuRGV0YWlsczpib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKCBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSB0aGVtZVNlcnZpY2U6Q29tZXRDaGF0VGhlbWVTZXJ2aWNlLHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cygpXG4gICAgdGhpcy5zZXRNZXNzYWdlc1N0eWxlKClcblxuXG4gICAgQ29tZXRDaGF0LmdldExvZ2dlZGluVXNlcigpLnRoZW4oKHVzZXIpID0+IHtcbiAgICAgIHRoaXMubG9nZ2VkSW5Vc2VyID0gdXNlcjtcbiAgICB9KS5jYXRjaCgoZXJyb3I6Q29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbik9PntcbiAgICAgIGlmKHRoaXMub25FcnJvcil7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmIChDaGF0Q29uZmlndXJhdG9yLm5hbWVzLmluY2x1ZGVzKCdjYWxsaW5nJykpIHtcbiAgICAgIHRoaXMuZW5hYmxlQ2FsbGluZyA9IHRydWVcbiAgICB9XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCl7XG5zZXRUaW1lb3V0KCgpID0+IHtcblxuICBjb25zdCBkaXZIZWlnaHQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gIGNvbnN0IGRpdldpZHRoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG59LCAxMDAwKTtcblxuICB9XG4gIHN1YnNjcmliZVRvRXZlbnRzKCl7XG4gICAgdGhpcy5jY0xpdmVSZWFjdGlvbiA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NMaXZlUmVhY3Rpb24uc3Vic2NyaWJlKChyZWFjdGlvbk5hbWU6IGFueSkgPT4ge1xuICAgICBpZihyZWFjdGlvbk5hbWUgJiYgcmVhY3Rpb25OYW1lICE9IFwiXCIpe1xuICAgICAgbGV0IGljb25VUkw6c3RyaW5nID0gdGhpcy5tZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkxpdmVSZWFjdGlvbkljb25VUkwgPz8gXCJhc3NldHMvaGVhcnQtcmVhY3Rpb24ucG5nXCJcbiAgICAgIHRoaXMubGl2ZVJlYWN0aW9uU3RhcnQoaWNvblVSTClcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgfVxuICAgIFxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwRGVsZXRlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBEZWxldGVkLnN1YnNjcmliZSgoZ3JvdXA6Q29tZXRDaGF0Lkdyb3VwKT0+e1xuICAgICAgaWYodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBncm91cC5nZXRHdWlkKCkpe1xuICAgICAgICB0aGlzLm9wZW5EZXRhaWxzID0gZmFsc2U7XG4gICAgICAgIHRoaXMub3BlblRocmVhZGVkTWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ncm91cCA9IGdyb3VwXG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTGVmdCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBMZWZ0LnN1YnNjcmliZSgoaXRlbTpJR3JvdXBMZWZ0KT0+e1xuICAgICAgaWYodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtLmxlZnRHcm91cC5nZXRHdWlkKCkpe1xuICAgICAgICBpZih0aGlzLmxvZ2dlZEluVXNlcj8uZ2V0VWlkKCkgPT0gaXRlbT8udXNlckxlZnQuZ2V0VWlkKCkpe1xuICAgICAgICAgIHRoaXMub3BlbkRldGFpbHMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncm91cCA9IGl0ZW0ubGVmdEdyb3VwO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjVXNlckJsb2NrZWQgPSBDb21ldENoYXRVc2VyRXZlbnRzLmNjVXNlckJsb2NrZWQuc3Vic2NyaWJlKCh1c2VyOkNvbWV0Q2hhdC5Vc2VyKSA9PiB7XG4gICAgICBpZih0aGlzLnVzZXIgJiYgdXNlci5nZXRVaWQoKSA9PSB0aGlzLnVzZXIuZ2V0VWlkKCkpe1xuICAgICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgIH0pXG4gICB0aGlzLmNjVXNlclVuQmxvY2tlZCA9IENvbWV0Q2hhdFVzZXJFdmVudHMuY2NVc2VyVW5ibG9ja2VkLnN1YnNjcmliZSgodXNlcjpDb21ldENoYXQuVXNlcikgPT4ge1xuICAgICBpZih0aGlzLnVzZXIgJiYgdXNlci5nZXRVaWQoKSA9PSB0aGlzLnVzZXIuZ2V0VWlkKCkpe1xuICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgIH1cbiAgIH0pXG4gIH1cbiAgdW5zdWJzY3JpYmVUb0V2ZW50cygpe1xuICAgICB0aGlzLmNjTGl2ZVJlYWN0aW9uPy51bnN1YnNjcmliZSgpXG4gdGhpcy5jY0dyb3VwRGVsZXRlZD8udW5zdWJzY3JpYmUoKVxuIHRoaXMuY2NHcm91cExlZnQ/LnVuc3Vic2NyaWJlKClcbiB0aGlzLmNjVXNlckJsb2NrZWQ/LnVuc3Vic2NyaWJlKClcbiB0aGlzLmNjVXNlclVuQmxvY2tlZD8udW5zdWJzY3JpYmUoKVxuICB9XG4gIHNldE1lc3NhZ2VzU3R5bGUoKXtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOk1lc3NhZ2VzU3R5bGUgPSBuZXcgTWVzc2FnZXNTdHlsZSh7XG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwibm9uZVwiLFxuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQyMDAoKX1gLFxuICAgICAgbWVzc2FnZVRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIG1lc3NhZ2VUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgfSlcbiAgICB0aGlzLm1lc3NhZ2VzU3R5bGUgPSB7XG4gICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gICAgICAuLi50aGlzLm1lc3NhZ2VzU3R5bGVcbiAgICB9XG4gICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGUuYm9yZGVyID0gIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLmJvcmRlciA/PyBcIm5vbmVcIlxuICAgIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc1N0eWxlLmJvcmRlciA9ICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNTdHlsZS5ib3JkZXIgPz8gXCJub25lXCJcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5ib3JkZXIgPSAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzU3R5bGUuYm9yZGVyID8/IFwibm9uZVwiXG4gICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc1N0eWxlLmJvcmRlciA9ICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzU3R5bGUuYm9yZGVyID8/IFwibm9uZVwiXG5cbiAgfVxuICBnZXRBdXhpbGFyeVZpZXcoKXtcbiAgICBpZih0aGlzLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm1lbnUpe1xuICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ubWVudVxuICAgIH1cbiAgICBlbHNlIGlmKHRoaXMuYXV4aWxpYXJ5TWVudSl7XG4gICAgICByZXR1cm4gdGhpcy5hdXhpbGlhcnlNZW51XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgb3BlblRocmVhZFZpZXcgPSAobWVzc2FnZTpDb21ldENoYXQuQmFzZU1lc3NhZ2UsYnViYmxlOlRlbXBsYXRlUmVmPGFueT4pPT57XG50aGlzLnRocmVhZE1lc3NhZ2VPYmplY3Q9bWVzc2FnZVxudGhpcy5wYXJlbnRCdWJibGVWaWV3PWJ1YmJsZVxudGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IHRydWU7XG50aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgb3BlbkRldGFpbHNQYWdlID0oKT0+e1xuICAgIHRoaXMub3BlbkRldGFpbHMgPSB0cnVlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBjbG9zZURldGFpbHNQYWdlID0oKT0+e1xuICAgIHRoaXMub3BlbkRldGFpbHMgPSBmYWxzZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgY2xvc2VUaHJlYWRWaWV3ID0gKCk9PntcbiAgICB0aGlzLnRocmVhZE1lc3NhZ2VPYmplY3QgPSBudWxsO1xudGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xudGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHJlYWN0aW9uTmFtZVxuICAgKi9cbiAgbGl2ZVJlYWN0aW9uU3RhcnQgPSAocmVhY3Rpb25OYW1lOiBzdHJpbmcpID0+IHtcbiAgICBpZiAodGhpcy5saXZlUmVhY3Rpb24pIHtcbiAgICAgIHRoaXMucmVhY3Rpb25OYW1lID0gXCJcIjtcbiAgICAgIHRoaXMubGl2ZVJlYWN0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHRoaXMucmVhY3Rpb25OYW1lID0gcmVhY3Rpb25OYW1lO1xuICAgIHRoaXMubGl2ZVJlYWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlYWN0aW9uTmFtZSA9IFwiXCI7XG4gICAgICB0aGlzLmxpdmVSZWFjdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDE1MDApO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRyeSB7XG4gICAgaWYgKGNoYW5nZVtDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXJdIHx8IGNoYW5nZVtDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLmdyb3VwXSkge1xuICAgICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy51c2VyKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBDb21ldENoYXQuZ2V0VXNlcih0aGlzLnVzZXIpXG4gICAgICAgICAgICAudGhlbigodXNlcjogQ29tZXRDaGF0LlVzZXIpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmdyb3VwKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBDb21ldENoYXQuZ2V0R3JvdXAodGhpcy5ncm91cClcbiAgICAgICAgICAgIC50aGVuKChncm91cDogQ29tZXRDaGF0Lkdyb3VwKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSBncm91cFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG5pZih0aGlzLm9uRXJyb3Ipe1xuICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSlcbn1cbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jY0xpdmVSZWFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub3BlblRocmVhZGVkTWVzc2FnZXMgPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5EZXRhaWxzID0gZmFsc2U7XG5cbiAgfVxuICBjaGF0TGlzdFN0eWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLm1lc3NhZ2VzU3R5bGUuYmFja2dyb3VuZCB8fCB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGhlaWdodDogdGhpcy5tZXNzYWdlc1N0eWxlLmhlaWdodCxcbiAgICAgIHdpZHRoOiB0aGlzLm1lc3NhZ2VzU3R5bGUud2lkdGgsXG4gICAgICBib3JkZXI6IHRoaXMubWVzc2FnZXNTdHlsZS5ib3JkZXIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMubWVzc2FnZXNTdHlsZS5ib3JkZXJSYWRpdXNcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIHB1YmxpYyBtZXRob2RzXG4gKiBtZXNzYWdlTGlzdFJlZiBtZXRob2RzXG4gKiBUaGlzIG1ldHRob2Qgd2lsbCBhcHBlbmQgbWVzc2FnZSBpbiBtZXNzYWdlIGxpc3RcbiAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICovXG4gIGFkZE1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIHVwZGF0ZSB0aGUgbWVzc2FnZSBpbiBtZXNzYWdlTGlzdFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICovXG4gIHVwZGF0ZU1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLCBtdWlkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VMaXN0UmVmLnVwZGF0ZU1lc3NhZ2UobWVzc2FnZSwgbXVpZCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgcmVtb3ZlICB0aGUgbWVzc2FnZSBmcm9tIG1lc3NhZ2VMaXN0XG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKi9cbiAgcmVtb3ZlTWVzc2FnZShtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VMaXN0UmVmLnJlbW92ZU1lc3NhZ2UobWVzc2FnZSlcbiAgfVxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBkZWxldGUgYW5kIHJlbW92ZSAgdGhlIG1lc3NhZ2UgZnJvbSBtZXNzYWdlTGlzdFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICovXG4gIGRlbGV0ZU1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi5kZWxldGVNZXNzYWdlKG1lc3NhZ2UpXG4gIH1cbiAgLyoqXG4gICAqIHRoaXMgbWV0aG9kIHdpbGwgc2VuZCBhIHRleHQgbWVzc2FnZVxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRleHRcbiAgICovXG4gIHNlbmRUZXh0TWVzc2FnZSh0ZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2VDb21wb3NlclJlZi5zZW5kVGV4dE1lc3NhZ2UodGV4dClcbiAgfVxuICAvKipcbiAgICogdGhpcyBtZXRob2Qgd2lsbCBvcGVuIHByZXZpZXcgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqIEBwYXJhbSAge3N0cmluZ30gbW9kZVxuICAgKi9cbiAgcHJldmlld01lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LlRleHRNZXNzYWdlLCBtb2RlOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgdGhpcy5tZXNzYWdlQ29tcG9zZXJSZWYubWVzc2FnZVRvQmVFZGl0ZWQgPSBtZXNzYWdlXG4gICAgdGhpcy5tZXNzYWdlQ29tcG9zZXJSZWYub3BlbkVkaXRQcmV2aWV3KClcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX193cmFwcGVyXCI+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc1wiIFtuZ1N0eWxlXT1cImNoYXRMaXN0U3R5bGUoKVwiICpuZ0lmPVwidXNlciB8fCBncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19faGVhZGVyXCIgKm5nSWY9XCIhaGlkZU1lc3NhZ2VIZWFkZXJcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJtZXNzYWdlSGVhZGVyVmlldzsgZWxzZSBjdXN0b21IZWFkZXJWaWV3XCJcbiAgICAgICAgY2xhc3M9XCJjYy1tZXNzYWdlc19faGVhZGVyLWN1c3RvbXZpZXdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VIZWFkZXJWaWV3XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbUhlYWRlclZpZXc+XG4gICAgICAgIDxjb21ldGNoYXQtbWVzc2FnZS1oZWFkZXIgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICAgICAgW3N1YnRpdGxlVmlld109XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5zdWJ0aXRsZVZpZXdcIlxuICAgICAgICAgIFtkaXNhYmxlVXNlcnNQcmVzZW5jZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5kaXNhYmxlVXNlcnNQcmVzZW5jZVwiXG4gICAgICAgICAgW3Byb3RlY3RlZEdyb3VwSWNvbl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5wcm90ZWN0ZWRHcm91cEljb25cIlxuICAgICAgICAgIFtwcml2YXRlR3JvdXBJY29uXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLnByaXZhdGVHcm91cEljb25cIlxuICAgICAgICAgIFttZW51XT1cImhlYWRlck1lbnVcIlxuICAgICAgICAgIFttZXNzYWdlSGVhZGVyU3R5bGVdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlclN0eWxlXCJcbiAgICAgICAgICBbYmFja0J1dHRvbkljb25VUkxdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uYmFja0J1dHRvbkljb25VUkxcIlxuICAgICAgICAgIFtoaWRlQmFja0J1dHRvbl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5oaWRlQmFja0J1dHRvblwiXG4gICAgICAgICAgW29uRXJyb3JdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ub25FcnJvclwiXG4gICAgICAgICAgW29uQmFja109XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5vbkJhY2tcIlxuICAgICAgICAgIFtsaXN0SXRlbVN0eWxlXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLmxpc3RJdGVtU3R5bGVcIlxuICAgICAgICAgIFtzdGF0dXNJbmRpY2F0b3JTdHlsZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5zdGF0dXNJbmRpY2F0b3JTdHlsZVwiXG4gICAgICAgICAgW2F2YXRhclN0eWxlXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLmF2YXRhclN0eWxlXCI+XG4gICAgICAgIDwvY29tZXRjaGF0LW1lc3NhZ2UtaGVhZGVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2xpc3RcIj5cbiAgICAgIDxjb21ldGNoYXQtbWVzc2FnZS1saXN0ICNtZXNzYWdlTGlzdFJlZlxuICAgICAgICBbbWVzc2FnZUluZm9ybWF0aW9uQ29uZmlndXJhdGlvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uQ29uZmlndXJhdGlvblwiXG4gICAgICAgIFtkaXNhYmxlU291bmRGb3JNZXNzYWdlc109XCJkaXNhYmxlU291bmRGb3JNZXNzYWdlc1wiXG4gICAgICAgIFtjdXN0b21Tb3VuZEZvck1lc3NhZ2VzXT1cImN1c3RvbVNvdW5kRm9ySW5jb21pbmdNZXNzYWdlc1wiXG4gICAgICAgIFtlbXB0eVN0YXRlVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZW1wdHlTdGF0ZVZpZXdcIlxuICAgICAgICBbbG9hZGluZ0ljb25VUkxdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uPy5sb2FkaW5nSWNvblVSTCFcIlxuICAgICAgICBbbG9hZGluZ1N0YXRlVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubG9hZGluZ1N0YXRlVmlld1wiXG4gICAgICAgIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIlxuICAgICAgICBbZXJyb3JTdGF0ZVZpZXddPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmVycm9yU3RhdGVWaWV3XCJcbiAgICAgICAgW2Rpc2FibGVSZWNlaXB0XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlUmVjZWlwdFwiXG4gICAgICAgIFtyZWFkSWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ucmVhZEljb25cIlxuICAgICAgICBbZGVsaXZlcmVkSWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZGVsaXZlcmVkSWNvblwiXG4gICAgICAgIFtzZW50SWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uc2VudEljb25cIlxuICAgICAgICBbd2FpdEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLndhaXRJY29uXCJcbiAgICAgICAgW2Vycm9ySWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZXJyb3JJY29uXCJcbiAgICAgICAgW2FsaWdubWVudF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYWxpZ25tZW50XCJcbiAgICAgICAgW3Nob3dBdmF0YXJdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnNob3dBdmF0YXJcIlxuICAgICAgICBbZGF0ZVBhdHRlcm5dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRhdGVQYXR0ZXJuXCJcbiAgICAgICAgW3RpbWVzdGFtcEFsaWdubWVudF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24udGltZXN0YW1wQWxpZ25tZW50XCJcbiAgICAgICAgW0RhdGVTZXBhcmF0b3JQYXR0ZXJuXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5EYXRlU2VwYXJhdG9yUGF0dGVyblwiXG4gICAgICAgIFt0ZW1wbGF0ZXNdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnRlbXBsYXRlc1wiXG4gICAgICAgIFttZXNzYWdlc1JlcXVlc3RCdWlsZGVyXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlc1JlcXVlc3RCdWlsZGVyXCJcbiAgICAgICAgW3RocmVzaG9sZFZhbHVlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi50aHJlc2hvbGRWYWx1ZVwiXG4gICAgICAgIFtvblRocmVhZFJlcGxpZXNDbGlja109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ub25UaHJlYWRSZXBsaWVzQ2xpY2sgfHwgb3BlblRocmVhZFZpZXdcIlxuICAgICAgICBbaGVhZGVyVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uaGVhZGVyVmlld1wiXG4gICAgICAgIFtmb290ZXJWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5mb290ZXJWaWV3XCJcbiAgICAgICAgW2F2YXRhclN0eWxlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5hdmF0YXJTdHlsZVwiXG4gICAgICAgIFtzY3JvbGxUb0JvdHRvbU9uTmV3TWVzc2FnZXNdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnNjcm9sbFRvQm90dG9tT25OZXdNZXNzYWdlc1wiXG4gICAgICAgIFtiYWNrZHJvcFN0eWxlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlXCJcbiAgICAgICAgW2RhdGVTZXBhcmF0b3JTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZGF0ZVNlcGFyYXRvclN0eWxlXCJcbiAgICAgICAgW21lc3NhZ2VMaXN0U3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm1lc3NhZ2VMaXN0U3R5bGVcIlxuICAgICAgICBbb25FcnJvcl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ub25FcnJvclwiPlxuICAgICAgPC9jb21ldGNoYXQtbWVzc2FnZS1saXN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fY29tcG9zZXJcIiAqbmdJZj1cIiFoaWRlTWVzc2FnZUNvbXBvc2VyXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwibWVzc2FnZUNvbXBvc2VyVmlldzsgZWxzZSBjdXN0b21Db21wb3NlclZpZXdcIlxuICAgICAgICBjbGFzcz1cImNjLW1lc3NhZ2VzX19jb21wb3Nlci0tY3VzdG9tdmlld1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVzc2FnZUNvbXBvc2VyVmlld1wiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21Db21wb3NlclZpZXc+XG4gICAgICAgIDxjb21ldGNoYXQtbWVzc2FnZS1jb21wb3NlciAjbWVzc2FnZUNvbXBvc2VyUmVmXG4gICAgICAgICAgW2Rpc2FibGVTb3VuZEZvck1lc3NhZ2VzXT1cImRpc2FibGVTb3VuZEZvck1lc3NhZ2VzXCJcbiAgICAgICAgICBbdm9pY2VSZWNvcmRpbmdTdG9wSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnZvaWNlUmVjb3JkaW5nU3RvcEljb25VUkxcIlxuICAgICAgICAgIFt2b2ljZVJlY29yZGluZ1N0YXJ0SWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnZvaWNlUmVjb3JkaW5nU3RhcnRJY29uVVJMXCJcbiAgICAgICAgICBbdm9pY2VSZWNvcmRpbmdDbG9zZUljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi52b2ljZVJlY29yZGluZ0Nsb3NlSWNvblVSTFwiXG4gICAgICAgICAgW3ZvaWNlUmVjb3JkaW5nU3VibWl0SWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnZvaWNlUmVjb3JkaW5nU3VibWl0SWNvblVSTFwiXG4gICAgICAgICAgW21lZGlhUmVjb3JkZXJTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm1lZGlhUmVjb3JkZXJTdHlsZVwiXG4gICAgICAgICAgW2N1c3RvbVNvdW5kRm9yTWVzc2FnZXNdPVwiY3VzdG9tU291bmRGb3JPdXRnb2luZ01lc3NhZ2VzXCJcbiAgICAgICAgICBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCJcbiAgICAgICAgICBbdGV4dF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnRleHRcIlxuICAgICAgICAgIFtoZWFkZXJWaWV3XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uaGVhZGVyVmlld1wiXG4gICAgICAgICAgW29uVGV4dENoYW5nZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm9uVGV4dENoYW5nZVwiXG4gICAgICAgICAgW2F0dGFjaG1lbnRJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXR0YWNobWVudEljb25VUkxcIlxuICAgICAgICAgIFthdHRhY2htZW50T3B0aW9uc109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmF0dGFjaG1lbnRPcHRpb25zXCJcbiAgICAgICAgICBbc2Vjb25kYXJ5QnV0dG9uVmlld109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnNlY29uZGFyeUJ1dHRvblZpZXdcIlxuICAgICAgICAgIFthdXhpbGFyeUJ1dHRvblZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdXhpbGFyeUJ1dHRvblZpZXdcIlxuICAgICAgICAgIFthdXhpbGlhcnlCdXR0b25zQWxpZ25tZW50XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXV4aWxpYXJ5QnV0dG9uc0FsaWdubWVudFwiXG4gICAgICAgICAgW3NlbmRCdXR0b25WaWV3XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uc2VuZEJ1dHRvblZpZXdcIlxuICAgICAgICAgIFtoaWRlTGl2ZVJlYWN0aW9uXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uaGlkZUxpdmVSZWFjdGlvblwiXG4gICAgICAgICAgW0xpdmVSZWFjdGlvbkljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5MaXZlUmVhY3Rpb25JY29uVVJMXCJcbiAgICAgICAgICBbbWVzc2FnZUNvbXBvc2VyU3R5bGVdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5tZXNzYWdlQ29tcG9zZXJTdHlsZVwiXG4gICAgICAgICAgW29uU2VuZEJ1dHRvbkNsaWNrXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ub25TZW5kQnV0dG9uQ2xpY2tcIlxuICAgICAgICAgIFtvblNlbmRCdXR0b25DbGlja109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm9uU2VuZEJ1dHRvbkNsaWNrXCJcbiAgICAgICAgICBbb25FcnJvcl09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm9uRXJyb3JcIlxuICAgICAgICAgIFthY3Rpb25TaGVldFN0eWxlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYWN0aW9uU2hlZXRTdHlsZVwiPlxuICAgICAgICA8L2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fbGl2ZXJlYWN0aW9uXCI+XG4gICAgPGNvbWV0Y2hhdC1saXZlLXJlYWN0aW9uICpuZ0lmPVwibGl2ZVJlYWN0aW9uXCJcbiAgICAgIFtyZWFjdGlvbkljb25VUkxdPVwicmVhY3Rpb25OYW1lXCI+PC9jb21ldGNoYXQtbGl2ZS1yZWFjdGlvbj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJvcGVuVGhyZWFkZWRNZXNzYWdlc1wiIGNsYXNzPVwiY2MtbWVzc2FnZXNfX3RocmVhZGVkbWVzc2FnZXNcIj5cbiAgICA8Y29tZXRjaGF0LXRocmVhZGVkLW1lc3NhZ2VzIFtvbkNsb3NlXT1cImNsb3NlVGhyZWFkVmlld1wiXG4gICAgICBbdGhyZWFkZWRNZXNzYWdlc1N0eWxlXT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24udGhyZWFkZWRNZXNzYWdlc1N0eWxlXCJcbiAgICAgIFttZXNzYWdlQWN0aW9uVmlld109XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLm1lc3NhZ2VBY3Rpb25WaWV3XCJcbiAgICAgIFtjbG9zZUljb25VUkxdPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5jbG9zZUljb25VUkxcIlxuICAgICAgW29uRXJyb3JdPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICAgIFtidWJibGVWaWV3XT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24uYnViYmxlVmlldyB8fCBwYXJlbnRCdWJibGVWaWV3XCJcbiAgICAgIFtwYXJlbnRNZXNzYWdlXT1cInRocmVhZE1lc3NhZ2VPYmplY3RcIiBbdXNlcl09XCJ1c2VyXCJcbiAgICAgIFtncm91cF09XCJncm91cFwiPjwvY29tZXRjaGF0LXRocmVhZGVkLW1lc3NhZ2VzPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cIm9wZW5EZXRhaWxzXCIgY2xhc3M9XCJjYy1tZXNzYWdlc19fZGV0YWlsc1wiPlxuICAgIDxjb21ldGNoYXQtZGV0YWlscyBbYmFja2Ryb3BTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlXCJcbiAgICAgIFt0cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24udHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uXCJcbiAgICAgIFtncm91cE1lbWJlcnNDb25maWd1cmF0aW9uXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb25cIlxuICAgICAgW2Jhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uXCJcbiAgICAgIFthZGRNZW1iZXJzQ29uZmlndXJhdGlvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvblwiXG4gICAgICBbb25DbG9zZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5vbkNsb3NlIHx8IGNsb3NlRGV0YWlsc1BhZ2VcIlxuICAgICAgW2xpc3RJdGVtU3R5bGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24ubGlzdEl0ZW1TdHlsZVwiXG4gICAgICBbZGV0YWlsc1N0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmRldGFpbHNTdHlsZVwiXG4gICAgICBbYXZhdGFyU3R5bGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIlxuICAgICAgW3N0YXR1c0luZGljYXRvclN0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLnN0YXR1c0luZGljYXRvclN0eWxlXCJcbiAgICAgIFtsZWF2ZURpYWxvZ1N0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmxlYXZlRGlhbG9nU3R5bGVcIlxuICAgICAgW2RhdGFdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGF0YVwiXG4gICAgICBbY3VzdG9tUHJvZmlsZVZpZXddPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uY3VzdG9tUHJvZmlsZVZpZXdcIlxuICAgICAgW3N1YnRpdGxlVmlld109XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5zdWJ0aXRsZVZpZXdcIlxuICAgICAgW2hpZGVQcm9maWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmhpZGVQcm9maWxlXCJcbiAgICAgIFtvbkVycm9yXT1cImRldGFpbHNDb25maWd1cmF0aW9uLm9uRXJyb3JcIlxuICAgICAgW2Nsb3NlQnV0dG9uSWNvblVSTF09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5jbG9zZUJ1dHRvbkljb25VUkxcIlxuICAgICAgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiPjwvY29tZXRjaGF0LWRldGFpbHM+XG4gIDwvZGl2PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI2hlYWRlck1lbnU+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19faGVhZGVybWVudVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fYXV4aWxpYXJ5bWVudVwiXG4gICAgICAqbmdJZj1cImdldEF1eGlsYXJ5VmlldygpOyBlbHNlIGVsc2VCbG9ja1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdldEF1eGlsYXJ5VmlldygpXCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgICAgIDxjb21ldGNoYXQtY2FsbC1idXR0b25zICpuZ0lmPVwiZW5hYmxlQ2FsbGluZ1wiIHZvaWNlQ2FsbEljb25UZXh0PVwiXCJcbiAgICAgICAgdmlkZW9DYWxsSWNvblRleHQ9XCJcIiBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCJcbiAgICAgICAgW2NhbGxCdXR0b25zU3R5bGVdPVwiY2FsbEJ1dHRvbnNTdHlsZVwiPlxuICAgICAgPC9jb21ldGNoYXQtY2FsbC1idXR0b25zPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGNvbWV0Y2hhdC1idXR0b24gKm5nSWY9XCIhaGlkZURldGFpbHNcIiBbaWNvblVSTF09XCJpbmZvSWNvblN0eWxlXCJcbiAgICAgIFtidXR0b25TdHlsZV09XCJkZXRhaWxzQnV0dG9uU3R5bGVcIlxuICAgICAgKGNjLWJ1dHRvbi1jbGlja2VkKT1cIm9wZW5EZXRhaWxzUGFnZSgpXCI+PC9jb21ldGNoYXQtYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|