@cometchat/chat-uikit-angular 4.3.12 → 4.3.14
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/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +2 -1
- package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +3 -1
- package/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.d.ts +3 -1
- package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +3 -2
- package/CometChatMessages/cometchat-messages/cometchat-messages.component.d.ts +1 -0
- package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +3 -2
- package/Shared/Utils/MessageUtils.d.ts +6 -0
- package/esm2020/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.mjs +16 -21
- package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +54 -41
- package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +25 -9
- package/esm2020/CometChatDetails/cometchat-details/cometchat-details.component.mjs +25 -4
- package/esm2020/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.mjs +6 -11
- package/esm2020/CometChatGroups/cometchat-groups/cometchat-groups.component.mjs +3 -3
- package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.mjs +25 -3
- package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +47 -13
- package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +63 -39
- package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +13 -9
- package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +16 -3
- package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +12 -9
- package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +9 -12
- package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +2 -2
- package/esm2020/Shared/Utils/MessageUtils.mjs +15 -1
- package/fesm2015/cometchat-chat-uikit-angular.mjs +327 -173
- package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/fesm2020/cometchat-chat-uikit-angular.mjs +308 -162
- package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, Input, } from "@angular/core";
|
|
2
2
|
import { CometChatMessageEvents, MessageStatus, fontHelper, localize } from "@cometchat/uikit-resources";
|
|
3
|
-
import { MessageComposerConfiguration, MessageListConfiguration, ThreadedMessagesStyle } from "@cometchat/uikit-shared";
|
|
3
|
+
import { MessageComposerConfiguration, MessageListConfiguration, ThreadedMessagesStyle, UserMemberWrapperConfiguration } from "@cometchat/uikit-shared";
|
|
4
4
|
import { ChatConfigurator } from "../../Shared/Framework/ChatConfigurator";
|
|
5
5
|
import { CometChat } from "@cometchat/chat-sdk-javascript";
|
|
6
6
|
import { CometChatException } from "../../Shared/Utils/ComeChatException";
|
|
@@ -25,16 +25,17 @@ export class CometChatThreadedMessagesComponent {
|
|
|
25
25
|
this.title = localize("THREAD");
|
|
26
26
|
this.closeIconURL = "assets/close2x.svg";
|
|
27
27
|
this.messageListConfiguration = new MessageListConfiguration({});
|
|
28
|
+
this.userMemberWrapperConfiguration = new UserMemberWrapperConfiguration({});
|
|
28
29
|
this.messageComposerConfiguration = new MessageComposerConfiguration({});
|
|
29
30
|
this.threadedMessagesStyle = {
|
|
30
31
|
width: "100%",
|
|
31
32
|
height: "100%",
|
|
32
|
-
background:
|
|
33
|
+
background: this.themeService.theme.palette.getBackground(),
|
|
33
34
|
borderRadius: "none",
|
|
34
|
-
border: "
|
|
35
|
-
titleColor:
|
|
36
|
-
titleFont:
|
|
37
|
-
closeIconTint:
|
|
35
|
+
border: "none",
|
|
36
|
+
titleColor: this.themeService.theme.palette.getAccent(),
|
|
37
|
+
titleFont: fontHelper(this.themeService.theme.typography.title1),
|
|
38
|
+
closeIconTint: this.themeService.theme.palette.getPrimary()
|
|
38
39
|
};
|
|
39
40
|
this.hideMessageComposer = false;
|
|
40
41
|
this.limit = 30;
|
|
@@ -320,10 +321,10 @@ export class CometChatThreadedMessagesComponent {
|
|
|
320
321
|
}
|
|
321
322
|
}
|
|
322
323
|
CometChatThreadedMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatThreadedMessagesComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
323
|
-
CometChatThreadedMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatThreadedMessagesComponent, selector: "cometchat-threaded-messages", inputs: { onClose: "onClose", onError: "onError", parentMessage: "parentMessage", title: "title", closeIconURL: "closeIconURL", bubbleView: "bubbleView", messageActionView: "messageActionView", messageListConfiguration: "messageListConfiguration", messageComposerConfiguration: "messageComposerConfiguration", threadedMessagesStyle: "threadedMessagesStyle", hideMessageComposer: "hideMessageComposer", messageComposerView: "messageComposerView", messageListView: "messageListView" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-threaded-messages__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-threaded-messages__header\">\n <div class=\"cc-threaded-messages__title\">\n <cometchat-label [text]=\"title\"\n [labelStyle]=\"titleStyle\"></cometchat-label>\n </div>\n <div class=\"cc-threaded-messages__close\">\n <cometchat-button [iconURL]=\"closeIconURL\" [buttonStyle]=\"buttonStyle\"\n (cc-button-clicked)=\"closeView()\"></cometchat-button>\n </div>\n </div>\n <div class=\"cc-threaded-messages__bubble-view\">\n <ng-container\n *ngTemplateOutlet=\"bubbleView; context:{ $implicit: parentMessage }\">\n </ng-container>\n </div>\n <div class=\"cc-threaded-messages__action-view\">\n <ng-container\n *ngTemplateOutlet=\"messageActionView; context:{ $implicit: parentMessage }\">\n </ng-container>\n <cometchat-button *ngIf=\"!messageActionView\" [text]=\"getThreadCount()\"\n [buttonStyle]=\"actionButtonStyle\"></cometchat-button>\n </div>\n <div class=\"cc-threaded-messages__list\" *ngIf=\"!messageListView\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [parentMessageId]=\"parentMessage?.getId()\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [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 [messageTypes]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder || requestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <ng-container *ngIf=\"messageListView\">\n <ng-container\n *ngTemplateOutlet=\"messageListView;context:{ user: user, group: group,parentMessage:parentMessage }\">\n </ng-container>\n </ng-container>\n <div class=\"cc-threaded-messages__composer\"\n *ngIf=\"!hideMessageComposer && !messageComposerView\">\n <cometchat-message-composer #messageComposerRef\n [parentMessageId]=\"parentMessage?.getId()\" [user]=\"user\" [group]=\"group\"\n [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\">\n </cometchat-message-composer>\n </div>\n <ng-container *ngIf=\"!hideMessageComposer && messageComposerView\">\n <ng-container\n *ngTemplateOutlet=\"messageComposerView;context:{ user: user, group: group,parentMessage:parentMessage }\">\n </ng-container>\n </ng-container>\n\n</div>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-threaded-messages__wrapper{display:flex;flex-direction:column;height:100%;overflow-y:auto}.cc-threaded-messages__header{height:8%;width:100%;display:flex;padding:16px;align-items:flex-start}.cc-threaded-messages__close{display:flex;align-items:center}.cc-threaded-messages__title{display:flex;align-items:center;justify-content:center;width:100%}.cc-threaded-messages__bubble-view{width:100%}.cc-threaded-messages__header{flex:0 0 auto}.cc-threaded-messages__list{flex:1 1 auto;min-height:65%}.cc-threaded-messages__composer{flex:0 0 auto;min-height:80px}\n"], components: [{ type: i2.CometChatMessageListComponent, selector: "cometchat-message-list", inputs: ["hideError", "errorStateView", "loadingStateView", "emptyStateView", "errorStateText", "emptyStateText", "loadingIconURL", "user", "group", "disableReceipt", "disableSoundForMessages", "customSoundForMessages", "readIcon", "deliveredIcon", "sentIcon", "waitIcon", "errorIcon", "aiErrorIcon", "aiEmptyIcon", "alignment", "showAvatar", "datePattern", "timestampAlignment", "DateSeparatorPattern", "templates", "messagesRequestBuilder", "newMessageIndicatorText", "scrollToBottomOnNewMessages", "thresholdValue", "unreadMessageThreshold", "reactionsConfiguration", "disableReactions", "emojiKeyboardStyle", "apiConfiguration", "onThreadRepliesClick", "headerView", "footerView", "parentMessageId", "threadIndicatorIcon", "avatarStyle", "backdropStyle", "dateSeparatorStyle", "messageListStyle", "onError", "messageInformationConfiguration", "disableMentions", "textFormatters"] }, { type: i3.CometChatMessageComposerComponent, selector: "cometchat-message-composer", inputs: ["user", "group", "disableSoundForMessages", "customSoundForMessage", "disableTypingEvents", "text", "placeholderText", "headerView", "onTextChange", "attachmentIconURL", "attachmentOptions", "secondaryButtonView", "auxilaryButtonView", "auxiliaryButtonsAlignment", "sendButtonView", "parentMessageId", "hideLiveReaction", "LiveReactionIconURL", "backButtonIconURL", "mentionsWarningText", "mentionsWarningStyle", "messageComposerStyle", "onSendButtonClick", "onError", "backdropStyle", "actionSheetStyle", "aiActionSheetStyle", "hideVoiceRecording", "mediaRecorderStyle", "aiOptionsStyle", "aiIconURL", "voiceRecordingIconURL", "voiceRecordingCloseIconURL", "voiceRecordingStartIconURL", "voiceRecordingStopIconURL", "voiceRecordingSubmitIconURL", "userMemberWrapperConfiguration", "disableMentions", "textFormatters"], outputs: ["childEvent"] }], directives: [{ type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
324
|
+
CometChatThreadedMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatThreadedMessagesComponent, selector: "cometchat-threaded-messages", inputs: { onClose: "onClose", onError: "onError", parentMessage: "parentMessage", title: "title", closeIconURL: "closeIconURL", bubbleView: "bubbleView", messageActionView: "messageActionView", messageListConfiguration: "messageListConfiguration", userMemberWrapperConfiguration: "userMemberWrapperConfiguration", messageComposerConfiguration: "messageComposerConfiguration", threadedMessagesStyle: "threadedMessagesStyle", hideMessageComposer: "hideMessageComposer", messageComposerView: "messageComposerView", messageListView: "messageListView" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-threaded-messages__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-threaded-messages__header\">\n <div class=\"cc-threaded-messages__title\">\n <cometchat-label [text]=\"title\"\n [labelStyle]=\"titleStyle\"></cometchat-label>\n </div>\n <div class=\"cc-threaded-messages__close\">\n <cometchat-button [iconURL]=\"closeIconURL\" [buttonStyle]=\"buttonStyle\"\n (cc-button-clicked)=\"closeView()\"></cometchat-button>\n </div>\n </div>\n <div class=\"cc-threaded-messages__bubble-view\">\n <ng-container\n *ngTemplateOutlet=\"bubbleView; context:{ $implicit: parentMessage }\">\n </ng-container>\n </div>\n <div class=\"cc-threaded-messages__action-view\">\n <ng-container\n *ngTemplateOutlet=\"messageActionView; context:{ $implicit: parentMessage }\">\n </ng-container>\n <cometchat-button *ngIf=\"!messageActionView\" [text]=\"getThreadCount()\"\n [buttonStyle]=\"actionButtonStyle\"></cometchat-button>\n </div>\n <div class=\"cc-threaded-messages__list\" *ngIf=\"!messageListView\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [parentMessageId]=\"parentMessage?.getId()\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\"\n [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\"\n [loadingIconURL]=\"messageListConfiguration.loadingIconURL\"\n [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\"\n [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [messageTypes]=\"messageListConfiguration.templates\"\n [templates]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder || requestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [hideError]=\"messageListConfiguration.hideError\"\n [hideDateSeparator]=\"messageListConfiguration.hideDateSeparator\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <ng-container *ngIf=\"messageListView\">\n <ng-container\n *ngTemplateOutlet=\"messageListView;context:{ user: user, group: group,parentMessage:parentMessage }\">\n </ng-container>\n </ng-container>\n <div class=\"cc-threaded-messages__composer\"\n *ngIf=\"!hideMessageComposer && !messageComposerView\">\n <cometchat-message-composer #messageComposerRef\n [parentMessageId]=\"parentMessage?.getId()\" [user]=\"user\" [group]=\"group\"\n [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [sendButtonIconURL]=\"messageComposerConfiguration.sendButtonIconURL\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\"\n [emojiIconURL]=\"messageComposerConfiguration.emojiIconURL\"\n [AIIconURL]=\"messageComposerConfiguration.AIIconURL\"\n [hideVoiceRecording]=\"messageComposerConfiguration.hideVoiceRecording\"\n [hideLayoutMode]=\"messageComposerConfiguration.hideLayoutMode\"\n [AIOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [backdropStyle]=\"messageComposerConfiguration.backdropStyle\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n >\n </cometchat-message-composer>\n </div>\n <ng-container *ngIf=\"!hideMessageComposer && messageComposerView\">\n <ng-container\n *ngTemplateOutlet=\"messageComposerView;context:{ user: user, group: group,parentMessage:parentMessage }\">\n </ng-container>\n </ng-container>\n\n</div>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-threaded-messages__wrapper{display:flex;flex-direction:column;height:100%;overflow-y:auto}.cc-threaded-messages__header{height:8%;width:100%;display:flex;padding:16px;align-items:flex-start}.cc-threaded-messages__close{display:flex;align-items:center}.cc-threaded-messages__title{display:flex;align-items:center;justify-content:center;width:100%}.cc-threaded-messages__bubble-view{width:100%}.cc-threaded-messages__header{flex:0 0 auto}.cc-threaded-messages__list{flex:1 1 auto;min-height:65%}.cc-threaded-messages__composer{flex:0 0 auto;min-height:80px}\n"], components: [{ type: i2.CometChatMessageListComponent, selector: "cometchat-message-list", inputs: ["hideError", "hideDateSeparator", "errorStateView", "loadingStateView", "emptyStateView", "errorStateText", "emptyStateText", "loadingIconURL", "user", "group", "disableReceipt", "disableSoundForMessages", "customSoundForMessages", "readIcon", "deliveredIcon", "sentIcon", "waitIcon", "errorIcon", "aiErrorIcon", "aiEmptyIcon", "alignment", "showAvatar", "datePattern", "timestampAlignment", "DateSeparatorPattern", "templates", "messagesRequestBuilder", "newMessageIndicatorText", "scrollToBottomOnNewMessages", "thresholdValue", "unreadMessageThreshold", "reactionsConfiguration", "disableReactions", "emojiKeyboardStyle", "apiConfiguration", "onThreadRepliesClick", "headerView", "footerView", "parentMessageId", "threadIndicatorIcon", "avatarStyle", "backdropStyle", "dateSeparatorStyle", "messageListStyle", "onError", "messageInformationConfiguration", "disableMentions", "textFormatters"] }, { type: i3.CometChatMessageComposerComponent, selector: "cometchat-message-composer", inputs: ["user", "group", "disableSoundForMessages", "customSoundForMessage", "disableTypingEvents", "text", "placeholderText", "headerView", "onTextChange", "attachmentIconURL", "attachmentOptions", "secondaryButtonView", "auxilaryButtonView", "auxiliaryButtonsAlignment", "sendButtonView", "parentMessageId", "hideLiveReaction", "LiveReactionIconURL", "backButtonIconURL", "mentionsWarningText", "mentionsWarningStyle", "messageComposerStyle", "onSendButtonClick", "onError", "backdropStyle", "actionSheetStyle", "aiActionSheetStyle", "hideVoiceRecording", "mediaRecorderStyle", "aiOptionsStyle", "aiIconURL", "voiceRecordingIconURL", "voiceRecordingCloseIconURL", "voiceRecordingStartIconURL", "voiceRecordingStopIconURL", "voiceRecordingSubmitIconURL", "hideLayoutMode", "emojiIconURL", "userMemberWrapperConfiguration", "disableMentions", "textFormatters"], outputs: ["childEvent"] }], directives: [{ type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
324
325
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatThreadedMessagesComponent, decorators: [{
|
|
325
326
|
type: Component,
|
|
326
|
-
args: [{ selector: "cometchat-threaded-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-threaded-messages__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-threaded-messages__header\">\n <div class=\"cc-threaded-messages__title\">\n <cometchat-label [text]=\"title\"\n [labelStyle]=\"titleStyle\"></cometchat-label>\n </div>\n <div class=\"cc-threaded-messages__close\">\n <cometchat-button [iconURL]=\"closeIconURL\" [buttonStyle]=\"buttonStyle\"\n (cc-button-clicked)=\"closeView()\"></cometchat-button>\n </div>\n </div>\n <div class=\"cc-threaded-messages__bubble-view\">\n <ng-container\n *ngTemplateOutlet=\"bubbleView; context:{ $implicit: parentMessage }\">\n </ng-container>\n </div>\n <div class=\"cc-threaded-messages__action-view\">\n <ng-container\n *ngTemplateOutlet=\"messageActionView; context:{ $implicit: parentMessage }\">\n </ng-container>\n <cometchat-button *ngIf=\"!messageActionView\" [text]=\"getThreadCount()\"\n [buttonStyle]=\"actionButtonStyle\"></cometchat-button>\n </div>\n <div class=\"cc-threaded-messages__list\" *ngIf=\"!messageListView\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [parentMessageId]=\"parentMessage?.getId()\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [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 [messageTypes]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder || requestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <ng-container *ngIf=\"messageListView\">\n <ng-container\n *ngTemplateOutlet=\"messageListView;context:{ user: user, group: group,parentMessage:parentMessage }\">\n </ng-container>\n </ng-container>\n <div class=\"cc-threaded-messages__composer\"\n *ngIf=\"!hideMessageComposer && !messageComposerView\">\n <cometchat-message-composer #messageComposerRef\n [parentMessageId]=\"parentMessage?.getId()\" [user]=\"user\" [group]=\"group\"\n [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [
|
|
327
|
+
args: [{ selector: "cometchat-threaded-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-threaded-messages__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-threaded-messages__header\">\n <div class=\"cc-threaded-messages__title\">\n <cometchat-label [text]=\"title\"\n [labelStyle]=\"titleStyle\"></cometchat-label>\n </div>\n <div class=\"cc-threaded-messages__close\">\n <cometchat-button [iconURL]=\"closeIconURL\" [buttonStyle]=\"buttonStyle\"\n (cc-button-clicked)=\"closeView()\"></cometchat-button>\n </div>\n </div>\n <div class=\"cc-threaded-messages__bubble-view\">\n <ng-container\n *ngTemplateOutlet=\"bubbleView; context:{ $implicit: parentMessage }\">\n </ng-container>\n </div>\n <div class=\"cc-threaded-messages__action-view\">\n <ng-container\n *ngTemplateOutlet=\"messageActionView; context:{ $implicit: parentMessage }\">\n </ng-container>\n <cometchat-button *ngIf=\"!messageActionView\" [text]=\"getThreadCount()\"\n [buttonStyle]=\"actionButtonStyle\"></cometchat-button>\n </div>\n <div class=\"cc-threaded-messages__list\" *ngIf=\"!messageListView\">\n <cometchat-message-list #messageListRef\n [disableReactions]=\"messageListConfiguration?.disableReactions!\"\n [emojiKeyboardStyle]=\"messageListConfiguration?.emojiKeyboardStyle!\"\n [reactionsConfiguration]=\"messageListConfiguration?.reactionsConfiguration!\"\n [threadIndicatorIcon]=\"messageListConfiguration?.threadIndicatorIcon!\"\n [parentMessageId]=\"parentMessage?.getId()\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\"\n [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\"\n [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\"\n [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\"\n [loadingIconURL]=\"messageListConfiguration.loadingIconURL\"\n [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\"\n [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [messageTypes]=\"messageListConfiguration.templates\"\n [templates]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder || requestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick\"\n [headerView]=\"messageListConfiguration.headerView\"\n [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\"\n [onError]=\"messageListConfiguration.onError\"\n [hideError]=\"messageListConfiguration.hideError\"\n [hideDateSeparator]=\"messageListConfiguration.hideDateSeparator\"\n [disableMentions]=\"messageListConfiguration.disableMentions\"\n [textFormatters]=\"messageListConfiguration?.textFormatters\">\n </cometchat-message-list>\n </div>\n <ng-container *ngIf=\"messageListView\">\n <ng-container\n *ngTemplateOutlet=\"messageListView;context:{ user: user, group: group,parentMessage:parentMessage }\">\n </ng-container>\n </ng-container>\n <div class=\"cc-threaded-messages__composer\"\n *ngIf=\"!hideMessageComposer && !messageComposerView\">\n <cometchat-message-composer #messageComposerRef\n [parentMessageId]=\"parentMessage?.getId()\" [user]=\"user\" [group]=\"group\"\n [text]=\"messageComposerConfiguration.text\"\n [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [sendButtonIconURL]=\"messageComposerConfiguration.sendButtonIconURL\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [userMemberWrapperConfiguration]=\"messageComposerConfiguration.userMemberWrapperConfiguration\"\n [textFormatters]=\"messageComposerConfiguration?.textFormatters\"\n [disableMentions]=\"messageComposerConfiguration.disableMentions\"\n [mentionsWarningText]=\"messageComposerConfiguration?.mentionsWarningText\"\n [mentionsWarningStyle]=\"messageComposerConfiguration?.mentionsWarningStyle\"\n [emojiIconURL]=\"messageComposerConfiguration.emojiIconURL\"\n [AIIconURL]=\"messageComposerConfiguration.AIIconURL\"\n [hideVoiceRecording]=\"messageComposerConfiguration.hideVoiceRecording\"\n [hideLayoutMode]=\"messageComposerConfiguration.hideLayoutMode\"\n [AIOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [backdropStyle]=\"messageComposerConfiguration.backdropStyle\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n >\n </cometchat-message-composer>\n </div>\n <ng-container *ngIf=\"!hideMessageComposer && messageComposerView\">\n <ng-container\n *ngTemplateOutlet=\"messageComposerView;context:{ user: user, group: group,parentMessage:parentMessage }\">\n </ng-container>\n </ng-container>\n\n</div>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-threaded-messages__wrapper{display:flex;flex-direction:column;height:100%;overflow-y:auto}.cc-threaded-messages__header{height:8%;width:100%;display:flex;padding:16px;align-items:flex-start}.cc-threaded-messages__close{display:flex;align-items:center}.cc-threaded-messages__title{display:flex;align-items:center;justify-content:center;width:100%}.cc-threaded-messages__bubble-view{width:100%}.cc-threaded-messages__header{flex:0 0 auto}.cc-threaded-messages__list{flex:1 1 auto;min-height:65%}.cc-threaded-messages__composer{flex:0 0 auto;min-height:80px}\n"] }]
|
|
327
328
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }]; }, propDecorators: { onClose: [{
|
|
328
329
|
type: Input
|
|
329
330
|
}], onError: [{
|
|
@@ -340,6 +341,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
340
341
|
type: Input
|
|
341
342
|
}], messageListConfiguration: [{
|
|
342
343
|
type: Input
|
|
344
|
+
}], userMemberWrapperConfiguration: [{
|
|
345
|
+
type: Input
|
|
343
346
|
}], messageComposerConfiguration: [{
|
|
344
347
|
type: Input
|
|
345
348
|
}], threadedMessagesStyle: [{
|
|
@@ -351,4 +354,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
351
354
|
}], messageListView: [{
|
|
352
355
|
type: Input
|
|
353
356
|
}] } });
|
|
354
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LXRocmVhZGVkLW1lc3NhZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0VGhyZWFkZWRNZXNzYWdlcy9jb21ldGNoYXQtdGhyZWFkZWQtbWVzc2FnZXMvY29tZXRjaGF0LXRocmVhZGVkLW1lc3NhZ2VzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0VGhyZWFkZWRNZXNzYWdlcy9jb21ldGNoYXQtdGhyZWFkZWQtbWVzc2FnZXMvY29tZXRjaGF0LXRocmVhZGVkLW1lc3NhZ2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULEtBQUssR0FNTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsc0JBQXNCLEVBQThFLGFBQWEsRUFBb0IsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BOLE9BQU8sRUFBRSw0QkFBNEIsRUFBd0Isd0JBQXdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7OztBQUkxRTs7Ozs7Ozs7RUFRRTtBQU9GLE1BQU0sT0FBTyxrQ0FBa0M7SUFnSDdDLFlBQW9CLEdBQXNCLEVBQVUsWUFBbUM7UUFBbkUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBdUI7UUExRzlFLFVBQUssR0FBVyxRQUFRLENB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QUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQ3BHLE1BQU0sRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTTtZQUN6QyxLQUFLLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUs7WUFDdkMsTUFBTSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNO1lBQ3pDLFlBQVksRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWTtTQUN0RCxDQUFBO0lBQ0gsQ0FBQzs7Z0lBN1ZVLGtDQUFrQztvSEFBbEMsa0NBQWtDLDRqQkNwQy9DLCtrTEFrR0E7NEZEOURhLGtDQUFrQztrQkFOOUMsU0FBUzsrQkFDRSw2QkFBNkIsbUJBR3RCLHVCQUF1QixDQUFDLE1BQU07NElBSXRDLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFVRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdmF0YXJTdHlsZSwgQmFzZVN0eWxlLCBEYXRlU3R5bGUsIExpc3RJdGVtU3R5bGUgfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzJ1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENhcmRNZXNzYWdlLCBDb21ldENoYXRNZXNzYWdlRXZlbnRzLCBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUsIEN1c3RvbUludGVyYWN0aXZlTWVzc2FnZSwgRm9ybU1lc3NhZ2UsIElNZXNzYWdlcywgTWVzc2FnZVN0YXR1cywgU2NoZWR1bGVyTWVzc2FnZSwgZm9udEhlbHBlciwgbG9jYWxpemUgfSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IE1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24sIE1lc3NhZ2VDb21wb3NlclN0eWxlLCBNZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24sIFRocmVhZGVkTWVzc2FnZXNTdHlsZSB9IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXNoYXJlZFwiO1xuXG5pbXBvcnQgeyBDaGF0Q29uZmlndXJhdG9yIH0gZnJvbSBcIi4uLy4uL1NoYXJlZC9GcmFtZXdvcmsvQ2hhdENvbmZpZ3VyYXRvclwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0IH0gZnJvbSBcIkBjb21ldGNoYXQvY2hhdC1zZGstamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0RXhjZXB0aW9uIH0gZnJvbSBcIi4uLy4uL1NoYXJlZC9VdGlscy9Db21lQ2hhdEV4Y2VwdGlvblwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0VGhlbWVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL0NvbWV0Q2hhdFRoZW1lLnNlcnZpY2VcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5cbi8qKlxuKlxuKiBDb21ldENoYXRUaHJlYWRlZE1lc3NhZ2VzQ29tcG9uZW50IGlzIGEgd3JhcHBlciBjb21wb25lbnQgZm9yIG1lc3NhZ2VMaXN0LCBtZXNzYWdlQnViYmxlLCBtZXNzYWdlQ29tcG9zZXIgIGNvbXBvbmVudC5cbipcbiogQHZlcnNpb24gMS4wLjBcbiogQGF1dGhvciBDb21ldENoYXRUZWFtXG4qIEBjb3B5cmlnaHQgwqkgMjAyMiBDb21ldENoYXQgSW5jLlxuKlxuKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJjb21ldGNoYXQtdGhyZWFkZWQtbWVzc2FnZXNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9jb21ldGNoYXQtdGhyZWFkZWQtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2NvbWV0Y2hhdC10aHJlYWRlZC1tZXNzYWdlcy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENvbWV0Q2hhdFRocmVhZGVkTWVzc2FnZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgb25DbG9zZSE6ICgoKSA9PiB2b2lkKSB8IG51bGw7XG4gIEBJbnB1dCgpIG9uRXJyb3IhOiAoKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB2b2lkKSB8IG51bGw7XG5cbiAgQElucHV0KCkgcGFyZW50TWVzc2FnZSE6IGFueTtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9IGxvY2FsaXplKFwiVEhSRUFEXCIpO1xuICBASW5wdXQoKSBjbG9zZUljb25VUkw6IHN0cmluZyA9IFwiYXNzZXRzL2Nsb3NlMnguc3ZnXCI7XG4gIEBJbnB1dCgpIGJ1YmJsZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBtZXNzYWdlQWN0aW9uVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIG1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbjogTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uID0gbmV3IE1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIG1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb246IE1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24gPSBuZXcgTWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIHRocmVhZGVkTWVzc2FnZXNTdHlsZTogVGhyZWFkZWRNZXNzYWdlc1N0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJhY2tncm91bmQ6IFwid2hpdGVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwibm9uZVwiLFxuICAgIGJvcmRlcjogXCIxcHggc29saWQgcmdiYSgyMCwgMjAsIDIwLCAwLjEpXCIsXG4gICAgdGl0bGVDb2xvcjogXCJyZ2JhKDIwLCAyMCwgMjApXCIsXG4gICAgdGl0bGVGb250OiBcIjcwMCAyMnB4IEludGVyXCIsXG4gICAgY2xvc2VJY29uVGludDogXCIjMzM5OUZGXCJcbiAgfTtcbiAgQElucHV0KCkgaGlkZU1lc3NhZ2VDb21wb3NlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBtZXNzYWdlQ29tcG9zZXJWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgbWVzc2FnZUxpc3RWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgdXNlciE6IENvbWV0Q2hhdC5Vc2VyO1xuICBncm91cCE6IENvbWV0Q2hhdC5Hcm91cDtcbiAgbG9nZ2VkSW5Vc2VyITogQ29tZXRDaGF0LlVzZXIgfCBudWxsO1xuICBwdWJsaWMgbGltaXQ6IG51bWJlciA9IDMwO1xuICByZXF1ZXN0QnVpbGRlciE6IENvbWV0Q2hhdC5NZXNzYWdlc1JlcXVlc3RCdWlsZGVyO1xuICBwdWJsaWMgY29tcG9zZXJTdHlsZXM6IE1lc3NhZ2VDb21wb3NlclN0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjEycHhcIixcbiAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMCgpLFxuICAgIGlucHV0QmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRTZWNvbmRhcnkoKSwgLy8gZG9uZVxuICAgIHRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSwgLy8gZG9uZVxuICAgIHRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKSwgLy8gZG9uZVxuICB9XG4gIGF2YXRhclN0eWxlOiBBdmF0YXJTdHlsZSA9IHtcbiAgICBib3JkZXJSYWRpdXM6IFwiMTZweFwiLFxuICAgIHdpZHRoOiBcIjI4cHhcIixcbiAgICBoZWlnaHQ6IFwiMjhweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBcIndoaXRlXCIsXG4gICAgbmFtZVRleHRDb2xvcjogXCJyZ2IoMjAsMjAsMjApXCIsXG4gICAgYmFja2dyb3VuZFNpemU6IFwiY292ZXJcIixcbiAgICBuYW1lVGV4dEZvbnQ6IFwiNTAwIDE2cHggSW50ZXJcIixcblxuICAgIG91dGVyVmlld0JvcmRlclNwYWNpbmc6IFwiXCIsXG4gIH1cbiAgc3RhdHVzSW5kaWNhdG9yU3R5bGU6IEJhc2VTdHlsZSA9IHtcbiAgICBib3JkZXJSYWRpdXM6IFwiMTZweFwiLFxuICAgIHdpZHRoOiBcIjEwcHhcIixcbiAgICBoZWlnaHQ6IFwiMTBweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gIH1cbiAgbGlzdEl0ZW1TdHlsZTogTGlzdEl0ZW1TdHlsZSA9IHtcbiAgICBiYWNrZ3JvdW5kOiBcIndoaXRlXCIsXG4gICAgdGl0bGVDb2xvcjogXCJibGFja1wiLFxuICAgIHRpdGxlRm9udDogXCI1MDAgMTZweCBJbnRlclwiLFxuICAgIHdpZHRoOiBcIlwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMnB4XCIsXG4gICAgc2VwYXJhdG9yQ29sb3I6IFwiXCIsXG4gICAgYWN0aXZlQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGhvdmVyQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiXG4gIH1cbiAgYWN0aW9uQnV0dG9uU3R5bGU6IGFueSA9IHtcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJvcmRlclRvcDogXCIxcHggc29saWQgI2UxZTFlMVwiLFxuICAgIGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgI2UxZTFlMVwiLFxuICAgIGJvcmRlclJhZGl1czogXCIwXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJ1dHRvblRleHRGb250OiBcIjUwMCAxNXB4IEludGVyXCIsXG4gICAgYnV0dG9uVGV4dENvbG9yOiBcImJsYWNrXCIsXG4gICAgcGFkZGluZzogXCI4cHhcIlxuICB9XG5cblxuICBidXR0b25TdHlsZTogYW55ID0ge1xuICAgIGhlaWdodDogXCIyNHB4XCIsXG4gICAgd2lkdGg6IFwiMjRweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjBcIixcbiAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgYnV0dG9uSWNvblRpbnQ6IFwiIzdkYmZmZlwiXG4gIH1cbiAgdGl0bGVTdHlsZTogYW55ID0ge1xuICAgIHRleHRGb250OiBcIjcwMCAyMnB4IEludGVyXCIsXG4gICAgdGV4dENvbG9yOiBcImJsYWNrXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICB9XG4gIGNjTWVzc2FnZVNlbnQhOiBTdWJzY3JpcHRpb247XG4gIGNjTWVzc2FnZUVkaXRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NNZXNzYWdlRGVsZXRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NNZXNzYWdlUmVhZCE6IFN1YnNjcmlwdGlvbjtcbiAgb25NZXNzYWdlc0RlbGl2ZXJlZCE6IFN1YnNjcmlwdGlvbjtcbiAgb25NZXNzYWdlc1JlYWQhOiBTdWJzY3JpcHRpb247XG4gIG9uTWVzc2FnZURlbGV0ZWQhOiBTdWJzY3JpcHRpb247XG4gIG9uTWVzc2FnZUVkaXRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgb25UZXh0TWVzc2FnZVJlY2VpdmVkITogU3Vic2NyaXB0aW9uO1xuICBvbkN1c3RvbU1lc3NhZ2VSZWNlaXZlZCE6IFN1YnNjcmlwdGlvbjtcbiAgb25Gb3JtTWVzc2FnZVJlY2VpdmVkITogU3Vic2NyaXB0aW9uO1xuICBvblNjaGVkdWxlck1lc3NhZ2VSZWNlaXZlZCE6IFN1YnNjcmlwdGlvbjtcbiAgb25DYXJkTWVzc2FnZVJlY2VpdmVkITogU3Vic2NyaXB0aW9uO1xuICBvbkN1c3RvbUludGVyYWN0aXZlTWVzc2FnZVJlY2VpdmVkITogU3Vic2NyaXB0aW9uO1xuICBvbk1lZGlhTWVzc2FnZVJlY2VpdmVkITogU3Vic2NyaXB0aW9uO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgdGhlbWVTZXJ2aWNlOiBDb21ldENoYXRUaGVtZVNlcnZpY2UpIHsgfVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlcXVlc3RCdWlsZGVyID0gbmV3IENvbWV0Q2hhdC5NZXNzYWdlc1JlcXVlc3RCdWlsZGVyKClcbiAgICAgIC5zZXRDYXRlZ29yaWVzKENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEFsbE1lc3NhZ2VDYXRlZ29yaWVzKCkpXG4gICAgICAuc2V0VHlwZXMoQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0QWxsTWVzc2FnZVR5cGVzKCkpXG4gICAgICAuaGlkZVJlcGxpZXModHJ1ZSlcbiAgICAgIC5zZXRMaW1pdCh0aGlzLmxpbWl0KVxuICAgICAgLnNldFBhcmVudE1lc3NhZ2VJZCh0aGlzLnBhcmVudE1lc3NhZ2UhLmdldElkKCkpXG4gICAgdGhpcy5hZGRNZXNzYWdlRXZlbnRMaXN0ZW5lcnMoKVxuICAgIENvbWV0Q2hhdC5nZXRMb2dnZWRpblVzZXIoKS50aGVuKCh1c2VyKSA9PiB7XG4gICAgICB0aGlzLmxvZ2dlZEluVXNlciA9IHVzZXI7XG4gICAgICBpZiAodGhpcy5wYXJlbnRNZXNzYWdlPy5nZXRTZW5kZXIoKS5nZXRVaWQoKSA9PT0gdGhpcy5sb2dnZWRJblVzZXI/LmdldFVpZCgpKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudE1lc3NhZ2U/LmdldFJlY2VpdmVyVHlwZSgpID09PSBDb21ldENoYXQuUkVDRUlWRVJfVFlQRS5VU0VSKSB7XG4gICAgICAgICAgdGhpcy51c2VyID0gdGhpcy5wYXJlbnRNZXNzYWdlIS5nZXRSZWNlaXZlcigpIGFzIENvbWV0Q2hhdC5Vc2VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZ3JvdXAgPSB0aGlzLnBhcmVudE1lc3NhZ2UhLmdldFJlY2VpdmVyKCkgYXMgQ29tZXRDaGF0Lkdyb3VwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXJlbnRNZXNzYWdlPy5nZXRSZWNlaXZlclR5cGUoKSA9PT0gQ29tZXRDaGF0LlJFQ0VJVkVSX1RZUEUuVVNFUikge1xuICAgICAgICB0aGlzLnVzZXIgPSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldFNlbmRlcigpO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0aGlzLnBhcmVudE1lc3NhZ2U/LmdldFJlY2VpdmVyVHlwZSgpID09PSBDb21ldENoYXQuUkVDRUlWRVJfVFlQRS5HUk9VUCkge1xuICAgICAgICB0aGlzLmdyb3VwID0gdGhpcy5wYXJlbnRNZXNzYWdlPy5nZXRSZWNlaXZlcigpO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cblxuICAgIH0pLmNhdGNoKChlcnJvcjogQ29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLnNldFRoZW1lKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cygpXG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlOiBTaW1wbGVDaGFuZ2VzKSB7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZVRvRXZlbnRzKClcbiAgICB0cnkge1xuICAgICAgLy9SZW1vdmluZyBNZXNzYWdlIExpc3RlbmVyc1xuICAgICAgdGhpcy5vbk1lc3NhZ2VzRGVsaXZlcmVkPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5vbk1lc3NhZ2VzUmVhZD8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMub25NZXNzYWdlRGVsZXRlZD8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMub25NZXNzYWdlRWRpdGVkPy51bnN1YnNjcmliZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB1cGRhdGVNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkge1xuICAgIGlmICh0aGlzLnBhcmVudE1lc3NhZ2U/LmdldElkKCkgPT0gbWVzc2FnZS5nZXRJZCgpKSB7XG4gICAgICB0aGlzLnBhcmVudE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfVxuICB9XG4gIHVwZGF0ZVJlY2VpcHQobWVzc2FnZVJlY2VpcHQ6IENvbWV0Q2hhdC5NZXNzYWdlUmVjZWlwdCkge1xuICAgIGlmIChOdW1iZXIobWVzc2FnZVJlY2VpcHQ/LmdldE1lc3NhZ2VJZCgpKSA9PSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldElkKCkpIHtcbiAgICAgIGlmIChtZXNzYWdlUmVjZWlwdC5nZXRSZWFkQXQoKSkge1xuICAgICAgICB0aGlzLnBhcmVudE1lc3NhZ2Uuc2V0UmVhZEF0KG1lc3NhZ2VSZWNlaXB0LmdldFJlYWRBdCgpKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG1lc3NhZ2VSZWNlaXB0LmdldERlbGl2ZXJlZEF0KCkpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRNZXNzYWdlLnNldERlbGl2ZXJlZEF0KG1lc3NhZ2VSZWNlaXB0LmdldERlbGl2ZXJlZEF0KCkpO1xuXG4gICAgICB9XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICB9XG5cbiAgfVxuICBhZGRNZXNzYWdlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub25NZXNzYWdlc0RlbGl2ZXJlZCA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMub25NZXNzYWdlc0RlbGl2ZXJlZC5zdWJzY3JpYmUoKG1lc3NhZ2VSZWNlaXB0OiBDb21ldENoYXQuTWVzc2FnZVJlY2VpcHQpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVSZWNlaXB0KG1lc3NhZ2VSZWNlaXB0KTtcbiAgICAgIH0pXG4gICAgICB0aGlzLm9uTWVzc2FnZXNSZWFkID0gQ29tZXRDaGF0TWVzc2FnZUV2ZW50cy5vbk1lc3NhZ2VzUmVhZC5zdWJzY3JpYmUoKG1lc3NhZ2VSZWNlaXB0OiBDb21ldENoYXQuTWVzc2FnZVJlY2VpcHQpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVSZWNlaXB0KG1lc3NhZ2VSZWNlaXB0KTtcbiAgICAgIH0pXG4gICAgICB0aGlzLm9uTWVzc2FnZURlbGV0ZWQgPSBDb21ldENoYXRNZXNzYWdlRXZlbnRzLm9uTWVzc2FnZURlbGV0ZWQuc3Vic2NyaWJlKChkZWxldGVkTWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlTWVzc2FnZShkZWxldGVkTWVzc2FnZSk7XG4gICAgICB9KVxuICAgICAgdGhpcy5vbk1lc3NhZ2VFZGl0ZWQgPSBDb21ldENoYXRNZXNzYWdlRXZlbnRzLm9uTWVzc2FnZUVkaXRlZC5zdWJzY3JpYmUoKGVkaXRlZE1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZU1lc3NhZ2UoZWRpdGVkTWVzc2FnZSk7XG4gICAgICB9KVxuICAgICAgdGhpcy5vblRleHRNZXNzYWdlUmVjZWl2ZWQgPVxuICAgICAgICBDb21ldENoYXRNZXNzYWdlRXZlbnRzLm9uVGV4dE1lc3NhZ2VSZWNlaXZlZC5zdWJzY3JpYmUoXG4gICAgICAgICAgKG1lc3NhZ2U6IENvbWV0Q2hhdC5UZXh0TWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZ2V0UGFyZW50TWVzc2FnZUlkKCkgJiYgbWVzc2FnZS5nZXRQYXJlbnRNZXNzYWdlSWQoKSA9PSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldElkKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIHRoaXMub25NZWRpYU1lc3NhZ2VSZWNlaXZlZCA9XG4gICAgICAgIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMub25NZWRpYU1lc3NhZ2VSZWNlaXZlZC5zdWJzY3JpYmUoXG4gICAgICAgICAgKG1lc3NhZ2U6IENvbWV0Q2hhdC5NZWRpYU1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmdldFBhcmVudE1lc3NhZ2VJZCgpICYmIG1lc3NhZ2UuZ2V0UGFyZW50TWVzc2FnZUlkKCkgPT0gdGhpcy5wYXJlbnRNZXNzYWdlPy5nZXRJZCgpKSB7XG5cbiAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIHRoaXMub25DdXN0b21NZXNzYWdlUmVjZWl2ZWQgPVxuICAgICAgICBDb21ldENoYXRNZXNzYWdlRXZlbnRzLm9uQ3VzdG9tTWVzc2FnZVJlY2VpdmVkLnN1YnNjcmliZShcbiAgICAgICAgICAobWVzc2FnZTogQ29tZXRDaGF0LkN1c3RvbU1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmdldFBhcmVudE1lc3NhZ2VJZCgpICYmIG1lc3NhZ2UuZ2V0UGFyZW50TWVzc2FnZUlkKCkgPT0gdGhpcy5wYXJlbnRNZXNzYWdlPy5nZXRJZCgpKSB7XG5cbiAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIHRoaXMub25Gb3JtTWVzc2FnZVJlY2VpdmVkID1cbiAgICAgICAgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cy5vbkZvcm1NZXNzYWdlUmVjZWl2ZWQuc3Vic2NyaWJlKFxuICAgICAgICAgIChtZXNzYWdlOiBGb3JtTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZ2V0UGFyZW50TWVzc2FnZUlkKCkgJiYgbWVzc2FnZS5nZXRQYXJlbnRNZXNzYWdlSWQoKSA9PSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldElkKCkpIHtcblxuICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgdGhpcy5vblNjaGVkdWxlck1lc3NhZ2VSZWNlaXZlZCA9XG4gICAgICAgIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMub25TY2hlZHVsZXJNZXNzYWdlUmVjZWl2ZWQuc3Vic2NyaWJlKFxuICAgICAgICAgIChtZXNzYWdlOiBTY2hlZHVsZXJNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICBpZiAobWVzc2FnZS5nZXRQYXJlbnRNZXNzYWdlSWQoKSAmJiBtZXNzYWdlLmdldFBhcmVudE1lc3NhZ2VJZCgpID09IHRoaXMucGFyZW50TWVzc2FnZT8uZ2V0SWQoKSkge1xuXG4gICAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB0aGlzLm9uQ2FyZE1lc3NhZ2VSZWNlaXZlZCA9XG4gICAgICAgIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMub25DYXJkTWVzc2FnZVJlY2VpdmVkLnN1YnNjcmliZShcbiAgICAgICAgICAobWVzc2FnZTogQ2FyZE1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmdldFBhcmVudE1lc3NhZ2VJZCgpICYmIG1lc3NhZ2UuZ2V0UGFyZW50TWVzc2FnZUlkKCkgPT0gdGhpcy5wYXJlbnRNZXNzYWdlPy5nZXRJZCgpKSB7XG5cbiAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIHRoaXMub25DdXN0b21JbnRlcmFjdGl2ZU1lc3NhZ2VSZWNlaXZlZCA9XG4gICAgICAgIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMub25DdXN0b21JbnRlcmFjdGl2ZU1lc3NhZ2VSZWNlaXZlZC5zdWJzY3JpYmUoXG4gICAgICAgICAgKG1lc3NhZ2U6IEN1c3RvbUludGVyYWN0aXZlTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZ2V0UGFyZW50TWVzc2FnZUlkKCkgJiYgbWVzc2FnZS5nZXRQYXJlbnRNZXNzYWdlSWQoKSA9PSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldElkKCkpIHtcblxuICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldFRocmVhZENvdW50KCkge1xuICAgIGNvbnN0IHJlcGx5Q291bnQgPSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldFJlcGx5Q291bnQoKSB8fCAwO1xuICAgIGNvbnN0IHN1ZmZpeCA9IHJlcGx5Q291bnQgPT09IDEgPyBsb2NhbGl6ZShcIlJFUExZXCIpIDogbG9jYWxpemUoXCJSRVBMSUVTXCIpO1xuICAgIHJldHVybiBgJHtyZXBseUNvdW50fSAke3N1ZmZpeH1gO1xuICB9XG4gIHN1YnNjcmliZVRvRXZlbnRzKCkge1xuICAgIHRoaXMuY2NNZXNzYWdlU2VudCA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NNZXNzYWdlU2VudC5zdWJzY3JpYmUoKHsgc3RhdHVzLCBtZXNzYWdlIH06IElNZXNzYWdlcykgPT4ge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gTWVzc2FnZVN0YXR1cy5zdWNjZXNzICYmIG1lc3NhZ2U/LmdldFBhcmVudE1lc3NhZ2VJZCgpID09PSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldElkKCkpIHtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY01lc3NhZ2VFZGl0ZWQgPSBDb21ldENoYXRNZXNzYWdlRXZlbnRzLmNjTWVzc2FnZUVkaXRlZC5zdWJzY3JpYmUoKHsgc3RhdHVzLCBtZXNzYWdlIH06IElNZXNzYWdlcykgPT4ge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gTWVzc2FnZVN0YXR1cy5zdWNjZXNzICYmIG1lc3NhZ2U/LmdldElkKCkgPT09IHRoaXMucGFyZW50TWVzc2FnZT8uZ2V0SWQoKSkge1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NNZXNzYWdlRGVsZXRlZCA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NNZXNzYWdlRGVsZXRlZC5zdWJzY3JpYmUoKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2U/LmdldElkKCkgPT09IHRoaXMucGFyZW50TWVzc2FnZT8uZ2V0SWQoKSkge1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NNZXNzYWdlUmVhZCA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NNZXNzYWdlUmVhZC5zdWJzY3JpYmUoKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2U/LmdldElkKCkgPT09IHRoaXMucGFyZW50TWVzc2FnZT8uZ2V0SWQoKSkge1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgdW5zdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNjTWVzc2FnZURlbGV0ZWQ/LnVuc3Vic2NyaWJlKClcbiAgICB0aGlzLmNjTWVzc2FnZUVkaXRlZD8udW5zdWJzY3JpYmUoKVxuICAgIHRoaXMuY2NNZXNzYWdlUmVhZD8udW5zdWJzY3JpYmUoKVxuICAgIHRoaXMuY2NNZXNzYWdlU2VudD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQ2FyZE1lc3NhZ2VSZWNlaXZlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uRm9ybU1lc3NhZ2VSZWNlaXZlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU2NoZWR1bGVyTWVzc2FnZVJlY2VpdmVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25UZXh0TWVzc2FnZVJlY2VpdmVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25DdXN0b21JbnRlcmFjdGl2ZU1lc3NhZ2VSZWNlaXZlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQ3VzdG9tTWVzc2FnZVJlY2VpdmVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25NZWRpYU1lc3NhZ2VSZWNlaXZlZD8udW5zdWJzY3JpYmUoKTtcbiAgfVxuICBjbG9zZVZpZXcoKSB7XG4gICAgaWYgKHRoaXMub25DbG9zZSkge1xuICAgICAgdGhpcy5vbkNsb3NlKClcbiAgICB9XG4gIH1cblxuICBzZXRUaHJlYWRlZE1lc3NhZ2VzU3R5bGUoKSB7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTogVGhyZWFkZWRNZXNzYWdlc1N0eWxlID0gbmV3IFRocmVhZGVkTWVzc2FnZXNTdHlsZSh7XG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwibm9uZVwiLFxuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHRpdGxlQ29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KCksXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS50aXRsZTEpLFxuICAgICAgY2xvc2VJY29uVGludDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KClcbiAgICB9KVxuICAgIHRoaXMudGhyZWFkZWRNZXNzYWdlc1N0eWxlID0ge1xuICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICAgICAgLi4udGhpcy50aHJlYWRlZE1lc3NhZ2VzU3R5bGVcbiAgICB9XG4gIH1cbiAgc2V0VGhlbWUoKSB7XG4gICAgdGhpcy5zZXRUaHJlYWRlZE1lc3NhZ2VzU3R5bGUoKVxuICAgIHRoaXMuYnV0dG9uU3R5bGUuYnV0dG9uSWNvblRpbnQgPSB0aGlzLnRocmVhZGVkTWVzc2FnZXNTdHlsZS5jbG9zZUljb25UaW50IHx8IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpO1xuICAgIHRoaXMuYWN0aW9uQnV0dG9uU3R5bGUuYmFja2dyb3VuZCA9IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpO1xuICAgIHRoaXMuYWN0aW9uQnV0dG9uU3R5bGUuYnV0dG9uVGV4dEZvbnQgPSBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKTtcbiAgICB0aGlzLmFjdGlvbkJ1dHRvblN0eWxlLmJ1dHRvblRleHRDb2xvciA9IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCk7XG4gICAgdGhpcy50aXRsZVN0eWxlID0ge1xuICAgICAgdGV4dEZvbnQ6IHRoaXMudGhyZWFkZWRNZXNzYWdlc1N0eWxlLnRpdGxlRm9udCB8fCBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUxKSxcbiAgICAgIHRleHRDb2xvcjogdGhpcy50aHJlYWRlZE1lc3NhZ2VzU3R5bGUudGl0bGVDb2xvciB8fCB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiXG4gICAgfTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuICB3cmFwcGVyU3R5bGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMudGhyZWFkZWRNZXNzYWdlc1N0eWxlLmJhY2tncm91bmQgfHwgdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBoZWlnaHQ6IHRoaXMudGhyZWFkZWRNZXNzYWdlc1N0eWxlLmhlaWdodCxcbiAgICAgIHdpZHRoOiB0aGlzLnRocmVhZGVkTWVzc2FnZXNTdHlsZS53aWR0aCxcbiAgICAgIGJvcmRlcjogdGhpcy50aHJlYWRlZE1lc3NhZ2VzU3R5bGUuYm9yZGVyLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLnRocmVhZGVkTWVzc2FnZXNTdHlsZS5ib3JkZXJSYWRpdXNcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYy10aHJlYWRlZC1tZXNzYWdlc19fd3JhcHBlclwiIFtuZ1N0eWxlXT1cIndyYXBwZXJTdHlsZSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJjYy10aHJlYWRlZC1tZXNzYWdlc19faGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNjLXRocmVhZGVkLW1lc3NhZ2VzX190aXRsZVwiPlxuICAgICAgPGNvbWV0Y2hhdC1sYWJlbCBbdGV4dF09XCJ0aXRsZVwiXG4gICAgICAgIFtsYWJlbFN0eWxlXT1cInRpdGxlU3R5bGVcIj48L2NvbWV0Y2hhdC1sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtdGhyZWFkZWQtbWVzc2FnZXNfX2Nsb3NlXCI+XG4gICAgICA8Y29tZXRjaGF0LWJ1dHRvbiBbaWNvblVSTF09XCJjbG9zZUljb25VUkxcIiBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uU3R5bGVcIlxuICAgICAgICAoY2MtYnV0dG9uLWNsaWNrZWQpPVwiY2xvc2VWaWV3KClcIj48L2NvbWV0Y2hhdC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2MtdGhyZWFkZWQtbWVzc2FnZXNfX2J1YmJsZS12aWV3XCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidWJibGVWaWV3OyBjb250ZXh0OnsgJGltcGxpY2l0OiBwYXJlbnRNZXNzYWdlIH1cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy10aHJlYWRlZC1tZXNzYWdlc19fYWN0aW9uLXZpZXdcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VBY3Rpb25WaWV3OyBjb250ZXh0OnsgJGltcGxpY2l0OiBwYXJlbnRNZXNzYWdlIH1cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8Y29tZXRjaGF0LWJ1dHRvbiAqbmdJZj1cIiFtZXNzYWdlQWN0aW9uVmlld1wiIFt0ZXh0XT1cImdldFRocmVhZENvdW50KClcIlxuICAgICAgW2J1dHRvblN0eWxlXT1cImFjdGlvbkJ1dHRvblN0eWxlXCI+PC9jb21ldGNoYXQtYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNjLXRocmVhZGVkLW1lc3NhZ2VzX19saXN0XCIgKm5nSWY9XCIhbWVzc2FnZUxpc3RWaWV3XCI+XG4gICAgPGNvbWV0Y2hhdC1tZXNzYWdlLWxpc3QgI21lc3NhZ2VMaXN0UmVmXG4gICAgICBbZGlzYWJsZVJlYWN0aW9uc109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24/LmRpc2FibGVSZWFjdGlvbnMhXCJcbiAgICAgIFtlbW9qaUtleWJvYXJkU3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uPy5lbW9qaUtleWJvYXJkU3R5bGUhXCJcbiAgICAgIFtyZWFjdGlvbnNDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbj8ucmVhY3Rpb25zQ29uZmlndXJhdGlvbiFcIlxuICAgICAgW3RocmVhZEluZGljYXRvckljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uPy50aHJlYWRJbmRpY2F0b3JJY29uIVwiXG4gICAgICBbcGFyZW50TWVzc2FnZUlkXT1cInBhcmVudE1lc3NhZ2U/LmdldElkKClcIlxuICAgICAgW2VtcHR5U3RhdGVWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5lbXB0eVN0YXRlVmlld1wiXG4gICAgICBbbG9hZGluZ1N0YXRlVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubG9hZGluZ1N0YXRlVmlld1wiXG4gICAgICBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCJcbiAgICAgIFtlcnJvclN0YXRlVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZXJyb3JTdGF0ZVZpZXdcIlxuICAgICAgW2Rpc2FibGVSZWNlaXB0XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlUmVjZWlwdFwiXG4gICAgICBbcmVhZEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnJlYWRJY29uXCJcbiAgICAgIFtkZWxpdmVyZWRJY29uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kZWxpdmVyZWRJY29uXCJcbiAgICAgIFtzZW50SWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uc2VudEljb25cIlxuICAgICAgW3dhaXRJY29uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi53YWl0SWNvblwiXG4gICAgICBbZXJyb3JJY29uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5lcnJvckljb25cIlxuICAgICAgW2FsaWdubWVudF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYWxpZ25tZW50XCJcbiAgICAgIFtzaG93QXZhdGFyXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5zaG93QXZhdGFyXCJcbiAgICAgIFtkYXRlUGF0dGVybl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZGF0ZVBhdHRlcm5cIlxuICAgICAgW3RpbWVzdGFtcEFsaWdubWVudF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24udGltZXN0YW1wQWxpZ25tZW50XCJcbiAgICAgIFtEYXRlU2VwYXJhdG9yUGF0dGVybl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uRGF0ZVNlcGFyYXRvclBhdHRlcm5cIlxuICAgICAgW21lc3NhZ2VUeXBlc109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24udGVtcGxhdGVzXCJcbiAgICAgIFttZXNzYWdlc1JlcXVlc3RCdWlsZGVyXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlc1JlcXVlc3RCdWlsZGVyIHx8IHJlcXVlc3RCdWlsZGVyXCJcbiAgICAgIFt0aHJlc2hvbGRWYWx1ZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24udGhyZXNob2xkVmFsdWVcIlxuICAgICAgW29uVGhyZWFkUmVwbGllc0NsaWNrXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5vblRocmVhZFJlcGxpZXNDbGlja1wiXG4gICAgICBbaGVhZGVyVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uaGVhZGVyVmlld1wiXG4gICAgICBbZm9vdGVyVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZm9vdGVyVmlld1wiXG4gICAgICBbYXZhdGFyU3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmF2YXRhclN0eWxlXCJcbiAgICAgIFtkYXRlU2VwYXJhdG9yU3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRhdGVTZXBhcmF0b3JTdHlsZVwiXG4gICAgICBbbWVzc2FnZUxpc3RTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RTdHlsZVwiXG4gICAgICBbb25FcnJvcl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ub25FcnJvclwiXG4gICAgICBbZGlzYWJsZU1lbnRpb25zXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlTWVudGlvbnNcIlxuICAgICAgW3RleHRGb3JtYXR0ZXJzXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbj8udGV4dEZvcm1hdHRlcnNcIj5cbiAgICA8L2NvbWV0Y2hhdC1tZXNzYWdlLWxpc3Q+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZUxpc3RWaWV3XCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXNzYWdlTGlzdFZpZXc7Y29udGV4dDp7ICB1c2VyOiB1c2VyLCBncm91cDogZ3JvdXAscGFyZW50TWVzc2FnZTpwYXJlbnRNZXNzYWdlIH1cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXYgY2xhc3M9XCJjYy10aHJlYWRlZC1tZXNzYWdlc19fY29tcG9zZXJcIlxuICAgICpuZ0lmPVwiIWhpZGVNZXNzYWdlQ29tcG9zZXIgJiYgIW1lc3NhZ2VDb21wb3NlclZpZXdcIj5cbiAgICA8Y29tZXRjaGF0LW1lc3NhZ2UtY29tcG9zZXIgI21lc3NhZ2VDb21wb3NlclJlZlxuICAgICAgW3BhcmVudE1lc3NhZ2VJZF09XCJwYXJlbnRNZXNzYWdlPy5nZXRJZCgpXCIgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICBbdGV4dF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnRleHRcIlxuICAgICAgW2hlYWRlclZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5oZWFkZXJWaWV3XCJcbiAgICAgIFtvblRleHRDaGFuZ2VdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vblRleHRDaGFuZ2VcIlxuICAgICAgW2F0dGFjaG1lbnRJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXR0YWNobWVudEljb25VUkxcIlxuICAgICAgW2F0dGFjaG1lbnRPcHRpb25zXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXR0YWNobWVudE9wdGlvbnNcIlxuICAgICAgW3NlY29uZGFyeUJ1dHRvblZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5zZWNvbmRhcnlCdXR0b25WaWV3XCJcbiAgICAgIFthdXhpbGFyeUJ1dHRvblZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdXhpbGFyeUJ1dHRvblZpZXdcIlxuICAgICAgW2F1eGlsaWFyeUJ1dHRvbnNBbGlnbm1lbnRdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdXhpbGlhcnlCdXR0b25zQWxpZ25tZW50XCJcbiAgICAgIFtzZW5kQnV0dG9uVmlld109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnNlbmRCdXR0b25WaWV3XCJcbiAgICAgIFtoaWRlTGl2ZVJlYWN0aW9uXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uaGlkZUxpdmVSZWFjdGlvblwiXG4gICAgICBbTGl2ZVJlYWN0aW9uSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkxpdmVSZWFjdGlvbkljb25VUkxcIlxuICAgICAgW21lc3NhZ2VDb21wb3NlclN0eWxlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ubWVzc2FnZUNvbXBvc2VyU3R5bGVcIlxuICAgICAgW29uU2VuZEJ1dHRvbkNsaWNrXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ub25TZW5kQnV0dG9uQ2xpY2tcIlxuICAgICAgW29uU2VuZEJ1dHRvbkNsaWNrXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ub25TZW5kQnV0dG9uQ2xpY2tcIlxuICAgICAgW29uRXJyb3JdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICAgIFthY3Rpb25TaGVldFN0eWxlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYWN0aW9uU2hlZXRTdHlsZVwiXG4gICAgICBbdXNlck1lbWJlcldyYXBwZXJDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udXNlck1lbWJlcldyYXBwZXJDb25maWd1cmF0aW9uXCJcbiAgICAgIFt0ZXh0Rm9ybWF0dGVyc109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uPy50ZXh0Rm9ybWF0dGVyc1wiXG4gICAgICBbZGlzYWJsZU1lbnRpb25zXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uZGlzYWJsZU1lbnRpb25zXCJcbiAgICAgIFttZW50aW9uc1dhcm5pbmdUZXh0XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24/Lm1lbnRpb25zV2FybmluZ1RleHRcIlxuICAgICAgW21lbnRpb25zV2FybmluZ1N0eWxlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24/Lm1lbnRpb25zV2FybmluZ1N0eWxlXCI+XG4gICAgPC9jb21ldGNoYXQtbWVzc2FnZS1jb21wb3Nlcj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZU1lc3NhZ2VDb21wb3NlciAmJiBtZXNzYWdlQ29tcG9zZXJWaWV3XCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXNzYWdlQ29tcG9zZXJWaWV3O2NvbnRleHQ6eyAgdXNlcjogdXNlciwgZ3JvdXA6IGdyb3VwLHBhcmVudE1lc3NhZ2U6cGFyZW50TWVzc2FnZSB9XCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuXG48L2Rpdj5cbiJdfQ==
|
|
357
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LXRocmVhZGVkLW1lc3NhZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0VGhyZWFkZWRNZXNzYWdlcy9jb21ldGNoYXQtdGhyZWFkZWQtbWVzc2FnZXMvY29tZXRjaGF0LXRocmVhZGVkLW1lc3NhZ2VzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0VGhyZWFkZWRNZXNzYWdlcy9jb21ldGNoYXQtdGhyZWFkZWQtbWVzc2FnZXMvY29tZXRjaGF0LXRocmVhZGVkLW1lc3NhZ2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULEtBQUssR0FNTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsc0JBQXNCLEVBQThFLGFBQWEsRUFBb0IsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BOLE9BQU8sRUFBRSw0QkFBNEIsRUFBd0Isd0JBQXdCLEVBQUUscUJBQXFCLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU5SyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7OztBQUkxRTs7Ozs7Ozs7RUFRRTtBQU9GLE1BQU0sT0FBTyxrQ0FBa0M7SUFpSDdDLFlBQW9CLEdBQXNCLEVBQVUsWUFBbUM7UUFBbkUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBdUI7UUEzRzlFLFVBQUssR0FBVyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsaUJBQVksR0FBVyxvQkFBb0IsQ0FBQztRQUc1Qyw2QkFBd0IsR0FBNkIsSUFBSSx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RixtQ0FBOEIsR0FBbUMsSUFBSSw4QkFBOEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RyxpQ0FBNEIsR0FBaUMsSUFBSSw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRywwQkFBcUIsR0FBMEI7WUFDdEQsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQzNELFlBQVksRUFBRSxNQUFNO1lBQ3BCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdkQsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ2hFLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1NBQzVELENBQUM7UUFDTyx3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFNdkMsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVuQixtQkFBYyxHQUF5QjtZQUM1QyxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxNQUFNO1lBQ2QsTUFBTSxFQUFFLE1BQU07WUFDZCxZQUFZLEVBQUUsTUFBTTtZQUNwQixVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUMxRCxlQUFlLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUMvRCxRQUFRLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDbEUsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPO1NBQ2hFLENBQUE7UUFDRCxnQkFBVyxHQUFnQjtZQUN6QixZQUFZLEVBQUUsTUFBTTtZQUNwQixLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxNQUFNO1lBQ2QsTUFBTSxFQUFFLE1BQU07WUFDZCxlQUFlLEVBQUUsT0FBTztZQUN4QixhQUFhLEVBQUUsZUFBZTtZQUM5QixjQUFjLEVBQUUsT0FBTztZQUN2QixZQUFZLEVBQUUsZ0JBQWdCO1lBRTlCLHNCQUFzQixFQUFFLEVBQUU7U0FDM0IsQ0FBQTtRQUNELHlCQUFvQixHQUFjO1lBQ2hDLFlBQVksRUFBRSxNQUFNO1lBQ3BCLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUE7UUFDRCxrQkFBYSxHQUFrQjtZQUM3QixVQUFVLEVBQUUsT0FBTztZQUNuQixVQUFVLEVBQUUsT0FBTztZQUNuQixTQUFTLEVBQUUsZ0JBQWdCO1lBQzNCLEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsTUFBTTtZQUNkLFlBQVksRUFBRSxLQUFLO1lBQ25CLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLGdCQUFnQixFQUFFLGFBQWE7WUFDL0IsZUFBZSxFQUFFLGFBQWE7U0FDL0IsQ0FBQTtRQUNELHNCQUFpQixHQUFRO1lBQ3ZCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLFNBQVMsRUFBRSxtQkFBbUI7WUFDOUIsWUFBWSxFQUFFLG1CQUFtQjtZQUNqQyxZQUFZLEVBQUUsR0FBRztZQUNqQixVQUFVLEVBQUUsYUFBYTtZQUN6QixjQUFjLEVBQUUsZ0JBQWdCO1lBQ2hDLGVBQWUsRUFBRSxPQUFPO1lBQ3hCLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQTtRQUdELGdCQUFXLEdBQVE7WUFDakIsTUFBTSxFQUFFLE1BQU07WUFDZCxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxNQUFNO1lBQ2QsWUFBWSxFQUFFLEdBQUc7WUFDakIsVUFBVSxFQUFFLGFBQWE7WUFDekIsY0FBYyxFQUFFLFNBQVM7U0FDMUIsQ0FBQTtRQUNELGVBQVUsR0FBUTtZQUNoQixRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFVBQVUsRUFBRSxhQUFhO1NBQzFCLENBQUE7SUFnQjBGLENBQUM7SUFDNUYsUUFBUTtRQUNOLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxTQUFTLENBQUMsc0JBQXNCLEVBQUU7YUFDekQsYUFBYSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDLHVCQUF1QixFQUFFLENBQUM7YUFDekUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDL0QsV0FBVyxDQUFDLElBQUksQ0FBQzthQUNqQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUNwQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDbEQsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUE7UUFDL0IsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUM1RSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLEtBQUssU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7b0JBQzFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWMsQ0FBQyxXQUFXLEVBQW9CLENBQUM7aUJBQ2pFO3FCQUFNO29CQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWMsQ0FBQyxXQUFXLEVBQXFCLENBQUM7aUJBQ25FO2dCQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDMUI7aUJBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxLQUFLLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFO2dCQUNqRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDMUI7aUJBQ0ksSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxLQUFLLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFO2dCQUNoRixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7YUFDekI7UUFFSCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFtQyxFQUFFLEVBQUU7WUFDL0MsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2FBQ3BCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUNELFdBQVcsQ0FBQyxNQUFxQjtJQUNqQyxDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1FBQzFCLElBQUk7WUFDRiw0QkFBNEI7WUFDNUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLENBQUM7U0FDckM7UUFBQyxPQUFPLEtBQVUsRUFBRTtZQUNuQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUN6QztTQUNGO0lBQ0gsQ0FBQztJQUNELGFBQWEsQ0FBQyxPQUE4QjtRQUMxQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO1lBQzdCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7U0FDekI7SUFDSCxDQUFDO0lBQ0QsYUFBYSxDQUFDLGNBQXdDO1FBQ3BELElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDekUsSUFBSSxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2FBQzFEO2lCQUNJLElBQUksY0FBYyxDQUFDLGNBQWMsRUFBRSxFQUFFO2dCQUN4QyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQzthQUVwRTtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7U0FDekI7SUFFSCxDQUFDO0lBQ0Qsd0JBQXdCO1FBQ3RCLElBQUk7WUFDRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsY0FBd0MsRUFBRSxFQUFFO2dCQUMzSCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsY0FBd0MsRUFBRSxFQUFFO2dCQUNqSCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLGNBQXFDLEVBQUUsRUFBRTtnQkFDbEgsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQTtZQUNGLElBQUksQ0FBQyxlQUFlLEdBQUcsc0JBQXNCLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQW9DLEVBQUUsRUFBRTtnQkFDL0csSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQTtZQUNGLElBQUksQ0FBQyxxQkFBcUI7Z0JBQ3hCLHNCQUFzQixDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FDcEQsQ0FBQyxPQUE4QixFQUFFLEVBQUU7b0JBQ2pDLElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFFLElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsRUFBRTt3QkFDL0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDMUI7Z0JBQ0gsQ0FBQyxDQUNGLENBQUM7WUFDSixJQUFJLENBQUMsc0JBQXNCO2dCQUN6QixzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQ3JELENBQUMsT0FBK0IsRUFBRSxFQUFFO29CQUNsQyxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLEVBQUU7d0JBRS9GLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7cUJBQzFCO2dCQUNILENBQUMsQ0FDRixDQUFDO1lBQ0osSUFBSSxDQUFDLHVCQUF1QjtnQkFDMUIsc0JBQXNCLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUN0RCxDQUFDLE9BQWdDLEVBQUUsRUFBRTtvQkFDbkMsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxFQUFFO3dCQUUvRixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO3FCQUMxQjtnQkFDSCxDQUFDLENBQ0YsQ0FBQztZQUNKLElBQUksQ0FBQyxxQkFBcUI7Z0JBQ3hCLHNCQUFzQixDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FDcEQsQ0FBQyxPQUFvQixFQUFFLEVBQUU7b0JBQ3ZCLElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFFLElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsRUFBRTt3QkFFL0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDMUI7Z0JBQ0gsQ0FBQyxDQUNGLENBQUM7WUFDSixJQUFJLENBQUMsMEJBQTBCO2dCQUM3QixzQkFBc0IsQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLENBQ3pELENBQUMsT0FBeUIsRUFBRSxFQUFFO29CQUM1QixJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLEVBQUU7d0JBRS9GLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7cUJBQzFCO2dCQUNILENBQUMsQ0FDRixDQUFDO1lBQ0osSUFBSSxDQUFDLHFCQUFxQjtnQkFDeEIsc0JBQXNCLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUNwRCxDQUFDLE9BQW9CLEVBQUUsRUFBRTtvQkFDdkIsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxFQUFFO3dCQUUvRixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO3FCQUMxQjtnQkFDSCxDQUFDLENBQ0YsQ0FBQztZQUNKLElBQUksQ0FBQyxrQ0FBa0M7Z0JBQ3JDLHNCQUFzQixDQUFDLGtDQUFrQyxDQUFDLFNBQVMsQ0FDakUsQ0FBQyxPQUFpQyxFQUFFLEVBQUU7b0JBQ3BDLElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFFLElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsRUFBRTt3QkFFL0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDMUI7Z0JBQ0gsQ0FBQyxDQUNGLENBQUM7U0FFTDtRQUFDLE9BQU8sS0FBVSxFQUFFO1lBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7SUFDSCxDQUFDO0lBQ0QsY0FBYztRQUNaLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVELE1BQU0sTUFBTSxHQUFHLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sR0FBRyxVQUFVLElBQUksTUFBTSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUNELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsc0JBQXNCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBYSxFQUFFLEVBQUU7WUFDckcsSUFBSSxNQUFNLEtBQUssYUFBYSxDQUFDLE9BQU8sSUFBSSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxJQUFJLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNyRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQzFCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsZUFBZSxHQUFHLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQWEsRUFBRSxFQUFFO1lBQ3pHLElBQUksTUFBTSxLQUFLLGFBQWEsQ0FBQyxPQUFPLElBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3hGLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7YUFDekI7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUE4QixFQUFFLEVBQUU7WUFDM0csSUFBSSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBOEIsRUFBRSxFQUFFO1lBQ3JHLElBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7YUFDekI7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQ3BDLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLENBQUE7UUFDbkMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQTtRQUNqQyxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7U0FDZjtJQUNILENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsSUFBSSxZQUFZLEdBQTBCLElBQUkscUJBQXFCLENBQUM7WUFDbEUsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQzNELFlBQVksRUFBRSxNQUFNO1lBQ3BCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdkQsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ2hFLGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1NBQzVELENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxxQkFBcUIsR0FBRztZQUMzQixHQUFHLFlBQVk7WUFDZixHQUFHLElBQUksQ0FBQyxxQkFBcUI7U0FDOUIsQ0FBQTtJQUNILENBQUM7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUE7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDM0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hGLElBQUksQ0FBQyxVQUFVLEdBQUc7WUFDaEIsUUFBUSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDdkcsU0FBUyxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUMvRixVQUFVLEVBQUUsYUFBYTtTQUMxQixDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBQ0QsWUFBWTtRQUNWLE9BQU87WUFDTCxVQUFVLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQ3BHLE1BQU0sRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTTtZQUN6QyxLQUFLLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUs7WUFDdkMsTUFBTSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNO1lBQ3pDLFlBQVksRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWTtTQUN0RCxDQUFBO0lBQ0gsQ0FBQzs7Z0lBOVZVLGtDQUFrQztvSEFBbEMsa0NBQWtDLDhuQkNwQy9DLGl0TkFrSEE7NEZEOUVhLGtDQUFrQztrQkFOOUMsU0FBUzsrQkFDRSw2QkFBNkIsbUJBR3RCLHVCQUF1QixDQUFDLE1BQU07NElBSXRDLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csOEJBQThCO3NCQUF0QyxLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBVUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXZhdGFyU3R5bGUsIEJhc2VTdHlsZSwgRGF0ZVN0eWxlLCBMaXN0SXRlbVN0eWxlIH0gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1lbGVtZW50cydcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDYXJkTWVzc2FnZSwgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cywgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlLCBDdXN0b21JbnRlcmFjdGl2ZU1lc3NhZ2UsIEZvcm1NZXNzYWdlLCBJTWVzc2FnZXMsIE1lc3NhZ2VTdGF0dXMsIFNjaGVkdWxlck1lc3NhZ2UsIGZvbnRIZWxwZXIsIGxvY2FsaXplIH0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBNZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLCBNZXNzYWdlQ29tcG9zZXJTdHlsZSwgTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLCBUaHJlYWRlZE1lc3NhZ2VzU3R5bGUsIFVzZXJNZW1iZXJXcmFwcGVyQ29uZmlndXJhdGlvbiB9IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXNoYXJlZFwiO1xuXG5pbXBvcnQgeyBDaGF0Q29uZmlndXJhdG9yIH0gZnJvbSBcIi4uLy4uL1NoYXJlZC9GcmFtZXdvcmsvQ2hhdENvbmZpZ3VyYXRvclwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0IH0gZnJvbSBcIkBjb21ldGNoYXQvY2hhdC1zZGstamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0RXhjZXB0aW9uIH0gZnJvbSBcIi4uLy4uL1NoYXJlZC9VdGlscy9Db21lQ2hhdEV4Y2VwdGlvblwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0VGhlbWVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL0NvbWV0Q2hhdFRoZW1lLnNlcnZpY2VcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5cbi8qKlxuKlxuKiBDb21ldENoYXRUaHJlYWRlZE1lc3NhZ2VzQ29tcG9uZW50IGlzIGEgd3JhcHBlciBjb21wb25lbnQgZm9yIG1lc3NhZ2VMaXN0LCBtZXNzYWdlQnViYmxlLCBtZXNzYWdlQ29tcG9zZXIgIGNvbXBvbmVudC5cbipcbiogQHZlcnNpb24gMS4wLjBcbiogQGF1dGhvciBDb21ldENoYXRUZWFtXG4qIEBjb3B5cmlnaHQgwqkgMjAyMiBDb21ldENoYXQgSW5jLlxuKlxuKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJjb21ldGNoYXQtdGhyZWFkZWQtbWVzc2FnZXNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9jb21ldGNoYXQtdGhyZWFkZWQtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2NvbWV0Y2hhdC10aHJlYWRlZC1tZXNzYWdlcy5jb21wb25lbnQuc2Nzc1wiXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENvbWV0Q2hhdFRocmVhZGVkTWVzc2FnZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgb25DbG9zZSE6ICgoKSA9PiB2b2lkKSB8IG51bGw7XG4gIEBJbnB1dCgpIG9uRXJyb3IhOiAoKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB2b2lkKSB8IG51bGw7XG5cbiAgQElucHV0KCkgcGFyZW50TWVzc2FnZSE6IGFueTtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9IGxvY2FsaXplKFwiVEhSRUFEXCIpO1xuICBASW5wdXQoKSBjbG9zZUljb25VUkw6IHN0cmluZyA9IFwiYXNzZXRzL2Nsb3NlMnguc3ZnXCI7XG4gIEBJbnB1dCgpIGJ1YmJsZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBtZXNzYWdlQWN0aW9uVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIG1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbjogTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uID0gbmV3IE1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIHVzZXJNZW1iZXJXcmFwcGVyQ29uZmlndXJhdGlvbjogVXNlck1lbWJlcldyYXBwZXJDb25maWd1cmF0aW9uID0gbmV3IFVzZXJNZW1iZXJXcmFwcGVyQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIG1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb246IE1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24gPSBuZXcgTWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIHRocmVhZGVkTWVzc2FnZXNTdHlsZTogVGhyZWFkZWRNZXNzYWdlc1N0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgIGJvcmRlclJhZGl1czogXCJub25lXCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICB0aXRsZUNvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgY2xvc2VJY29uVGludDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KClcbiAgfTtcbiAgQElucHV0KCkgaGlkZU1lc3NhZ2VDb21wb3NlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBtZXNzYWdlQ29tcG9zZXJWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgbWVzc2FnZUxpc3RWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgdXNlciE6IENvbWV0Q2hhdC5Vc2VyO1xuICBncm91cCE6IENvbWV0Q2hhdC5Hcm91cDtcbiAgbG9nZ2VkSW5Vc2VyITogQ29tZXRDaGF0LlVzZXIgfCBudWxsO1xuICBwdWJsaWMgbGltaXQ6IG51bWJlciA9IDMwO1xuICByZXF1ZXN0QnVpbGRlciE6IENvbWV0Q2hhdC5NZXNzYWdlc1JlcXVlc3RCdWlsZGVyO1xuICBwdWJsaWMgY29tcG9zZXJTdHlsZXM6IE1lc3NhZ2VDb21wb3NlclN0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjEycHhcIixcbiAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMCgpLFxuICAgIGlucHV0QmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRTZWNvbmRhcnkoKSwgLy8gZG9uZVxuICAgIHRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSwgLy8gZG9uZVxuICAgIHRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKSwgLy8gZG9uZVxuICB9XG4gIGF2YXRhclN0eWxlOiBBdmF0YXJTdHlsZSA9IHtcbiAgICBib3JkZXJSYWRpdXM6IFwiMTZweFwiLFxuICAgIHdpZHRoOiBcIjI4cHhcIixcbiAgICBoZWlnaHQ6IFwiMjhweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBcIndoaXRlXCIsXG4gICAgbmFtZVRleHRDb2xvcjogXCJyZ2IoMjAsMjAsMjApXCIsXG4gICAgYmFja2dyb3VuZFNpemU6IFwiY292ZXJcIixcbiAgICBuYW1lVGV4dEZvbnQ6IFwiNTAwIDE2cHggSW50ZXJcIixcblxuICAgIG91dGVyVmlld0JvcmRlclNwYWNpbmc6IFwiXCIsXG4gIH1cbiAgc3RhdHVzSW5kaWNhdG9yU3R5bGU6IEJhc2VTdHlsZSA9IHtcbiAgICBib3JkZXJSYWRpdXM6IFwiMTZweFwiLFxuICAgIHdpZHRoOiBcIjEwcHhcIixcbiAgICBoZWlnaHQ6IFwiMTBweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gIH1cbiAgbGlzdEl0ZW1TdHlsZTogTGlzdEl0ZW1TdHlsZSA9IHtcbiAgICBiYWNrZ3JvdW5kOiBcIndoaXRlXCIsXG4gICAgdGl0bGVDb2xvcjogXCJibGFja1wiLFxuICAgIHRpdGxlRm9udDogXCI1MDAgMTZweCBJbnRlclwiLFxuICAgIHdpZHRoOiBcIlwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMnB4XCIsXG4gICAgc2VwYXJhdG9yQ29sb3I6IFwiXCIsXG4gICAgYWN0aXZlQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGhvdmVyQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiXG4gIH1cbiAgYWN0aW9uQnV0dG9uU3R5bGU6IGFueSA9IHtcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJvcmRlclRvcDogXCIxcHggc29saWQgI2UxZTFlMVwiLFxuICAgIGJvcmRlckJvdHRvbTogXCIxcHggc29saWQgI2UxZTFlMVwiLFxuICAgIGJvcmRlclJhZGl1czogXCIwXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJ1dHRvblRleHRGb250OiBcIjUwMCAxNXB4IEludGVyXCIsXG4gICAgYnV0dG9uVGV4dENvbG9yOiBcImJsYWNrXCIsXG4gICAgcGFkZGluZzogXCI4cHhcIlxuICB9XG5cblxuICBidXR0b25TdHlsZTogYW55ID0ge1xuICAgIGhlaWdodDogXCIyNHB4XCIsXG4gICAgd2lkdGg6IFwiMjRweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjBcIixcbiAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgYnV0dG9uSWNvblRpbnQ6IFwiIzdkYmZmZlwiXG4gIH1cbiAgdGl0bGVTdHlsZTogYW55ID0ge1xuICAgIHRleHRGb250OiBcIjcwMCAyMnB4IEludGVyXCIsXG4gICAgdGV4dENvbG9yOiBcImJsYWNrXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICB9XG4gIGNjTWVzc2FnZVNlbnQhOiBTdWJzY3JpcHRpb247XG4gIGNjTWVzc2FnZUVkaXRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NNZXNzYWdlRGVsZXRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NNZXNzYWdlUmVhZCE6IFN1YnNjcmlwdGlvbjtcbiAgb25NZXNzYWdlc0RlbGl2ZXJlZCE6IFN1YnNjcmlwdGlvbjtcbiAgb25NZXNzYWdlc1JlYWQhOiBTdWJzY3JpcHRpb247XG4gIG9uTWVzc2FnZURlbGV0ZWQhOiBTdWJzY3JpcHRpb247XG4gIG9uTWVzc2FnZUVkaXRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgb25UZXh0TWVzc2FnZVJlY2VpdmVkITogU3Vic2NyaXB0aW9uO1xuICBvbkN1c3RvbU1lc3NhZ2VSZWNlaXZlZCE6IFN1YnNjcmlwdGlvbjtcbiAgb25Gb3JtTWVzc2FnZVJlY2VpdmVkITogU3Vic2NyaXB0aW9uO1xuICBvblNjaGVkdWxlck1lc3NhZ2VSZWNlaXZlZCE6IFN1YnNjcmlwdGlvbjtcbiAgb25DYXJkTWVzc2FnZVJlY2VpdmVkITogU3Vic2NyaXB0aW9uO1xuICBvbkN1c3RvbUludGVyYWN0aXZlTWVzc2FnZVJlY2VpdmVkITogU3Vic2NyaXB0aW9uO1xuICBvbk1lZGlhTWVzc2FnZVJlY2VpdmVkITogU3Vic2NyaXB0aW9uO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgdGhlbWVTZXJ2aWNlOiBDb21ldENoYXRUaGVtZVNlcnZpY2UpIHsgfVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlcXVlc3RCdWlsZGVyID0gbmV3IENvbWV0Q2hhdC5NZXNzYWdlc1JlcXVlc3RCdWlsZGVyKClcbiAgICAgIC5zZXRDYXRlZ29yaWVzKENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEFsbE1lc3NhZ2VDYXRlZ29yaWVzKCkpXG4gICAgICAuc2V0VHlwZXMoQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0QWxsTWVzc2FnZVR5cGVzKCkpXG4gICAgICAuaGlkZVJlcGxpZXModHJ1ZSlcbiAgICAgIC5zZXRMaW1pdCh0aGlzLmxpbWl0KVxuICAgICAgLnNldFBhcmVudE1lc3NhZ2VJZCh0aGlzLnBhcmVudE1lc3NhZ2UhLmdldElkKCkpXG4gICAgdGhpcy5hZGRNZXNzYWdlRXZlbnRMaXN0ZW5lcnMoKVxuICAgIENvbWV0Q2hhdC5nZXRMb2dnZWRpblVzZXIoKS50aGVuKCh1c2VyKSA9PiB7XG4gICAgICB0aGlzLmxvZ2dlZEluVXNlciA9IHVzZXI7XG4gICAgICBpZiAodGhpcy5wYXJlbnRNZXNzYWdlPy5nZXRTZW5kZXIoKS5nZXRVaWQoKSA9PT0gdGhpcy5sb2dnZWRJblVzZXI/LmdldFVpZCgpKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudE1lc3NhZ2U/LmdldFJlY2VpdmVyVHlwZSgpID09PSBDb21ldENoYXQuUkVDRUlWRVJfVFlQRS5VU0VSKSB7XG4gICAgICAgICAgdGhpcy51c2VyID0gdGhpcy5wYXJlbnRNZXNzYWdlIS5nZXRSZWNlaXZlcigpIGFzIENvbWV0Q2hhdC5Vc2VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZ3JvdXAgPSB0aGlzLnBhcmVudE1lc3NhZ2UhLmdldFJlY2VpdmVyKCkgYXMgQ29tZXRDaGF0Lkdyb3VwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXJlbnRNZXNzYWdlPy5nZXRSZWNlaXZlclR5cGUoKSA9PT0gQ29tZXRDaGF0LlJFQ0VJVkVSX1RZUEUuVVNFUikge1xuICAgICAgICB0aGlzLnVzZXIgPSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldFNlbmRlcigpO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICh0aGlzLnBhcmVudE1lc3NhZ2U/LmdldFJlY2VpdmVyVHlwZSgpID09PSBDb21ldENoYXQuUkVDRUlWRVJfVFlQRS5HUk9VUCkge1xuICAgICAgICB0aGlzLmdyb3VwID0gdGhpcy5wYXJlbnRNZXNzYWdlPy5nZXRSZWNlaXZlcigpO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cblxuICAgIH0pLmNhdGNoKChlcnJvcjogQ29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbikgPT4ge1xuICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLnNldFRoZW1lKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cygpXG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlOiBTaW1wbGVDaGFuZ2VzKSB7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZVRvRXZlbnRzKClcbiAgICB0cnkge1xuICAgICAgLy9SZW1vdmluZyBNZXNzYWdlIExpc3RlbmVyc1xuICAgICAgdGhpcy5vbk1lc3NhZ2VzRGVsaXZlcmVkPy51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5vbk1lc3NhZ2VzUmVhZD8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMub25NZXNzYWdlRGVsZXRlZD8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMub25NZXNzYWdlRWRpdGVkPy51bnN1YnNjcmliZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB1cGRhdGVNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkge1xuICAgIGlmICh0aGlzLnBhcmVudE1lc3NhZ2U/LmdldElkKCkgPT0gbWVzc2FnZS5nZXRJZCgpKSB7XG4gICAgICB0aGlzLnBhcmVudE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfVxuICB9XG4gIHVwZGF0ZVJlY2VpcHQobWVzc2FnZVJlY2VpcHQ6IENvbWV0Q2hhdC5NZXNzYWdlUmVjZWlwdCkge1xuICAgIGlmIChOdW1iZXIobWVzc2FnZVJlY2VpcHQ/LmdldE1lc3NhZ2VJZCgpKSA9PSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldElkKCkpIHtcbiAgICAgIGlmIChtZXNzYWdlUmVjZWlwdC5nZXRSZWFkQXQoKSkge1xuICAgICAgICB0aGlzLnBhcmVudE1lc3NhZ2Uuc2V0UmVhZEF0KG1lc3NhZ2VSZWNlaXB0LmdldFJlYWRBdCgpKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKG1lc3NhZ2VSZWNlaXB0LmdldERlbGl2ZXJlZEF0KCkpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRNZXNzYWdlLnNldERlbGl2ZXJlZEF0KG1lc3NhZ2VSZWNlaXB0LmdldERlbGl2ZXJlZEF0KCkpO1xuXG4gICAgICB9XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICB9XG5cbiAgfVxuICBhZGRNZXNzYWdlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub25NZXNzYWdlc0RlbGl2ZXJlZCA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMub25NZXNzYWdlc0RlbGl2ZXJlZC5zdWJzY3JpYmUoKG1lc3NhZ2VSZWNlaXB0OiBDb21ldENoYXQuTWVzc2FnZVJlY2VpcHQpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVSZWNlaXB0KG1lc3NhZ2VSZWNlaXB0KTtcbiAgICAgIH0pXG4gICAgICB0aGlzLm9uTWVzc2FnZXNSZWFkID0gQ29tZXRDaGF0TWVzc2FnZUV2ZW50cy5vbk1lc3NhZ2VzUmVhZC5zdWJzY3JpYmUoKG1lc3NhZ2VSZWNlaXB0OiBDb21ldENoYXQuTWVzc2FnZVJlY2VpcHQpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVSZWNlaXB0KG1lc3NhZ2VSZWNlaXB0KTtcbiAgICAgIH0pXG4gICAgICB0aGlzLm9uTWVzc2FnZURlbGV0ZWQgPSBDb21ldENoYXRNZXNzYWdlRXZlbnRzLm9uTWVzc2FnZURlbGV0ZWQuc3Vic2NyaWJlKChkZWxldGVkTWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlTWVzc2FnZShkZWxldGVkTWVzc2FnZSk7XG4gICAgICB9KVxuICAgICAgdGhpcy5vbk1lc3NhZ2VFZGl0ZWQgPSBDb21ldENoYXRNZXNzYWdlRXZlbnRzLm9uTWVzc2FnZUVkaXRlZC5zdWJzY3JpYmUoKGVkaXRlZE1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZU1lc3NhZ2UoZWRpdGVkTWVzc2FnZSk7XG4gICAgICB9KVxuICAgICAgdGhpcy5vblRleHRNZXNzYWdlUmVjZWl2ZWQgPVxuICAgICAgICBDb21ldENoYXRNZXNzYWdlRXZlbnRzLm9uVGV4dE1lc3NhZ2VSZWNlaXZlZC5zdWJzY3JpYmUoXG4gICAgICAgICAgKG1lc3NhZ2U6IENvbWV0Q2hhdC5UZXh0TWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZ2V0UGFyZW50TWVzc2FnZUlkKCkgJiYgbWVzc2FnZS5nZXRQYXJlbnRNZXNzYWdlSWQoKSA9PSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldElkKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIHRoaXMub25NZWRpYU1lc3NhZ2VSZWNlaXZlZCA9XG4gICAgICAgIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMub25NZWRpYU1lc3NhZ2VSZWNlaXZlZC5zdWJzY3JpYmUoXG4gICAgICAgICAgKG1lc3NhZ2U6IENvbWV0Q2hhdC5NZWRpYU1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmdldFBhcmVudE1lc3NhZ2VJZCgpICYmIG1lc3NhZ2UuZ2V0UGFyZW50TWVzc2FnZUlkKCkgPT0gdGhpcy5wYXJlbnRNZXNzYWdlPy5nZXRJZCgpKSB7XG5cbiAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIHRoaXMub25DdXN0b21NZXNzYWdlUmVjZWl2ZWQgPVxuICAgICAgICBDb21ldENoYXRNZXNzYWdlRXZlbnRzLm9uQ3VzdG9tTWVzc2FnZVJlY2VpdmVkLnN1YnNjcmliZShcbiAgICAgICAgICAobWVzc2FnZTogQ29tZXRDaGF0LkN1c3RvbU1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmdldFBhcmVudE1lc3NhZ2VJZCgpICYmIG1lc3NhZ2UuZ2V0UGFyZW50TWVzc2FnZUlkKCkgPT0gdGhpcy5wYXJlbnRNZXNzYWdlPy5nZXRJZCgpKSB7XG5cbiAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIHRoaXMub25Gb3JtTWVzc2FnZVJlY2VpdmVkID1cbiAgICAgICAgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cy5vbkZvcm1NZXNzYWdlUmVjZWl2ZWQuc3Vic2NyaWJlKFxuICAgICAgICAgIChtZXNzYWdlOiBGb3JtTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZ2V0UGFyZW50TWVzc2FnZUlkKCkgJiYgbWVzc2FnZS5nZXRQYXJlbnRNZXNzYWdlSWQoKSA9PSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldElkKCkpIHtcblxuICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgdGhpcy5vblNjaGVkdWxlck1lc3NhZ2VSZWNlaXZlZCA9XG4gICAgICAgIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMub25TY2hlZHVsZXJNZXNzYWdlUmVjZWl2ZWQuc3Vic2NyaWJlKFxuICAgICAgICAgIChtZXNzYWdlOiBTY2hlZHVsZXJNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICBpZiAobWVzc2FnZS5nZXRQYXJlbnRNZXNzYWdlSWQoKSAmJiBtZXNzYWdlLmdldFBhcmVudE1lc3NhZ2VJZCgpID09IHRoaXMucGFyZW50TWVzc2FnZT8uZ2V0SWQoKSkge1xuXG4gICAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB0aGlzLm9uQ2FyZE1lc3NhZ2VSZWNlaXZlZCA9XG4gICAgICAgIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMub25DYXJkTWVzc2FnZVJlY2VpdmVkLnN1YnNjcmliZShcbiAgICAgICAgICAobWVzc2FnZTogQ2FyZE1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmdldFBhcmVudE1lc3NhZ2VJZCgpICYmIG1lc3NhZ2UuZ2V0UGFyZW50TWVzc2FnZUlkKCkgPT0gdGhpcy5wYXJlbnRNZXNzYWdlPy5nZXRJZCgpKSB7XG5cbiAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIHRoaXMub25DdXN0b21JbnRlcmFjdGl2ZU1lc3NhZ2VSZWNlaXZlZCA9XG4gICAgICAgIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMub25DdXN0b21JbnRlcmFjdGl2ZU1lc3NhZ2VSZWNlaXZlZC5zdWJzY3JpYmUoXG4gICAgICAgICAgKG1lc3NhZ2U6IEN1c3RvbUludGVyYWN0aXZlTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuZ2V0UGFyZW50TWVzc2FnZUlkKCkgJiYgbWVzc2FnZS5nZXRQYXJlbnRNZXNzYWdlSWQoKSA9PSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldElkKCkpIHtcblxuICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldFRocmVhZENvdW50KCkge1xuICAgIGNvbnN0IHJlcGx5Q291bnQgPSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldFJlcGx5Q291bnQoKSB8fCAwO1xuICAgIGNvbnN0IHN1ZmZpeCA9IHJlcGx5Q291bnQgPT09IDEgPyBsb2NhbGl6ZShcIlJFUExZXCIpIDogbG9jYWxpemUoXCJSRVBMSUVTXCIpO1xuICAgIHJldHVybiBgJHtyZXBseUNvdW50fSAke3N1ZmZpeH1gO1xuICB9XG4gIHN1YnNjcmliZVRvRXZlbnRzKCkge1xuICAgIHRoaXMuY2NNZXNzYWdlU2VudCA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NNZXNzYWdlU2VudC5zdWJzY3JpYmUoKHsgc3RhdHVzLCBtZXNzYWdlIH06IElNZXNzYWdlcykgPT4ge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gTWVzc2FnZVN0YXR1cy5zdWNjZXNzICYmIG1lc3NhZ2U/LmdldFBhcmVudE1lc3NhZ2VJZCgpID09PSB0aGlzLnBhcmVudE1lc3NhZ2U/LmdldElkKCkpIHtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY01lc3NhZ2VFZGl0ZWQgPSBDb21ldENoYXRNZXNzYWdlRXZlbnRzLmNjTWVzc2FnZUVkaXRlZC5zdWJzY3JpYmUoKHsgc3RhdHVzLCBtZXNzYWdlIH06IElNZXNzYWdlcykgPT4ge1xuICAgICAgaWYgKHN0YXR1cyA9PT0gTWVzc2FnZVN0YXR1cy5zdWNjZXNzICYmIG1lc3NhZ2U/LmdldElkKCkgPT09IHRoaXMucGFyZW50TWVzc2FnZT8uZ2V0SWQoKSkge1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NNZXNzYWdlRGVsZXRlZCA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NNZXNzYWdlRGVsZXRlZC5zdWJzY3JpYmUoKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2U/LmdldElkKCkgPT09IHRoaXMucGFyZW50TWVzc2FnZT8uZ2V0SWQoKSkge1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NNZXNzYWdlUmVhZCA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NNZXNzYWdlUmVhZC5zdWJzY3JpYmUoKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2U/LmdldElkKCkgPT09IHRoaXMucGFyZW50TWVzc2FnZT8uZ2V0SWQoKSkge1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgdW5zdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNjTWVzc2FnZURlbGV0ZWQ/LnVuc3Vic2NyaWJlKClcbiAgICB0aGlzLmNjTWVzc2FnZUVkaXRlZD8udW5zdWJzY3JpYmUoKVxuICAgIHRoaXMuY2NNZXNzYWdlUmVhZD8udW5zdWJzY3JpYmUoKVxuICAgIHRoaXMuY2NNZXNzYWdlU2VudD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQ2FyZE1lc3NhZ2VSZWNlaXZlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uRm9ybU1lc3NhZ2VSZWNlaXZlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU2NoZWR1bGVyTWVzc2FnZVJlY2VpdmVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25UZXh0TWVzc2FnZVJlY2VpdmVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25DdXN0b21JbnRlcmFjdGl2ZU1lc3NhZ2VSZWNlaXZlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQ3VzdG9tTWVzc2FnZVJlY2VpdmVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25NZWRpYU1lc3NhZ2VSZWNlaXZlZD8udW5zdWJzY3JpYmUoKTtcbiAgfVxuICBjbG9zZVZpZXcoKSB7XG4gICAgaWYgKHRoaXMub25DbG9zZSkge1xuICAgICAgdGhpcy5vbkNsb3NlKClcbiAgICB9XG4gIH1cblxuICBzZXRUaHJlYWRlZE1lc3NhZ2VzU3R5bGUoKSB7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTogVGhyZWFkZWRNZXNzYWdlc1N0eWxlID0gbmV3IFRocmVhZGVkTWVzc2FnZXNTdHlsZSh7XG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwibm9uZVwiLFxuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHRpdGxlQ29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KCksXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS50aXRsZTEpLFxuICAgICAgY2xvc2VJY29uVGludDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KClcbiAgICB9KVxuICAgIHRoaXMudGhyZWFkZWRNZXNzYWdlc1N0eWxlID0ge1xuICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICAgICAgLi4udGhpcy50aHJlYWRlZE1lc3NhZ2VzU3R5bGVcbiAgICB9XG4gIH1cbiAgc2V0VGhlbWUoKSB7XG4gICAgdGhpcy5zZXRUaHJlYWRlZE1lc3NhZ2VzU3R5bGUoKVxuICAgIHRoaXMuYnV0dG9uU3R5bGUuYnV0dG9uSWNvblRpbnQgPSB0aGlzLnRocmVhZGVkTWVzc2FnZXNTdHlsZS5jbG9zZUljb25UaW50IHx8IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpO1xuICAgIHRoaXMuYWN0aW9uQnV0dG9uU3R5bGUuYmFja2dyb3VuZCA9IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpO1xuICAgIHRoaXMuYWN0aW9uQnV0dG9uU3R5bGUuYnV0dG9uVGV4dEZvbnQgPSBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKTtcbiAgICB0aGlzLmFjdGlvbkJ1dHRvblN0eWxlLmJ1dHRvblRleHRDb2xvciA9IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCk7XG4gICAgdGhpcy50aXRsZVN0eWxlID0ge1xuICAgICAgdGV4dEZvbnQ6IHRoaXMudGhyZWFkZWRNZXNzYWdlc1N0eWxlLnRpdGxlRm9udCB8fCBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUxKSxcbiAgICAgIHRleHRDb2xvcjogdGhpcy50aHJlYWRlZE1lc3NhZ2VzU3R5bGUudGl0bGVDb2xvciB8fCB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiXG4gICAgfTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuICB3cmFwcGVyU3R5bGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMudGhyZWFkZWRNZXNzYWdlc1N0eWxlLmJhY2tncm91bmQgfHwgdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBoZWlnaHQ6IHRoaXMudGhyZWFkZWRNZXNzYWdlc1N0eWxlLmhlaWdodCxcbiAgICAgIHdpZHRoOiB0aGlzLnRocmVhZGVkTWVzc2FnZXNTdHlsZS53aWR0aCxcbiAgICAgIGJvcmRlcjogdGhpcy50aHJlYWRlZE1lc3NhZ2VzU3R5bGUuYm9yZGVyLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLnRocmVhZGVkTWVzc2FnZXNTdHlsZS5ib3JkZXJSYWRpdXNcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYy10aHJlYWRlZC1tZXNzYWdlc19fd3JhcHBlclwiIFtuZ1N0eWxlXT1cIndyYXBwZXJTdHlsZSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJjYy10aHJlYWRlZC1tZXNzYWdlc19faGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNjLXRocmVhZGVkLW1lc3NhZ2VzX190aXRsZVwiPlxuICAgICAgPGNvbWV0Y2hhdC1sYWJlbCBbdGV4dF09XCJ0aXRsZVwiXG4gICAgICAgIFtsYWJlbFN0eWxlXT1cInRpdGxlU3R5bGVcIj48L2NvbWV0Y2hhdC1sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtdGhyZWFkZWQtbWVzc2FnZXNfX2Nsb3NlXCI+XG4gICAgICA8Y29tZXRjaGF0LWJ1dHRvbiBbaWNvblVSTF09XCJjbG9zZUljb25VUkxcIiBbYnV0dG9uU3R5bGVdPVwiYnV0dG9uU3R5bGVcIlxuICAgICAgICAoY2MtYnV0dG9uLWNsaWNrZWQpPVwiY2xvc2VWaWV3KClcIj48L2NvbWV0Y2hhdC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2MtdGhyZWFkZWQtbWVzc2FnZXNfX2J1YmJsZS12aWV3XCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidWJibGVWaWV3OyBjb250ZXh0OnsgJGltcGxpY2l0OiBwYXJlbnRNZXNzYWdlIH1cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy10aHJlYWRlZC1tZXNzYWdlc19fYWN0aW9uLXZpZXdcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VBY3Rpb25WaWV3OyBjb250ZXh0OnsgJGltcGxpY2l0OiBwYXJlbnRNZXNzYWdlIH1cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8Y29tZXRjaGF0LWJ1dHRvbiAqbmdJZj1cIiFtZXNzYWdlQWN0aW9uVmlld1wiIFt0ZXh0XT1cImdldFRocmVhZENvdW50KClcIlxuICAgICAgW2J1dHRvblN0eWxlXT1cImFjdGlvbkJ1dHRvblN0eWxlXCI+PC9jb21ldGNoYXQtYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNjLXRocmVhZGVkLW1lc3NhZ2VzX19saXN0XCIgKm5nSWY9XCIhbWVzc2FnZUxpc3RWaWV3XCI+XG4gICAgPGNvbWV0Y2hhdC1tZXNzYWdlLWxpc3QgI21lc3NhZ2VMaXN0UmVmXG4gICAgICBbZGlzYWJsZVJlYWN0aW9uc109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24/LmRpc2FibGVSZWFjdGlvbnMhXCJcbiAgICAgIFtlbW9qaUtleWJvYXJkU3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uPy5lbW9qaUtleWJvYXJkU3R5bGUhXCJcbiAgICAgIFtyZWFjdGlvbnNDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbj8ucmVhY3Rpb25zQ29uZmlndXJhdGlvbiFcIlxuICAgICAgW3RocmVhZEluZGljYXRvckljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uPy50aHJlYWRJbmRpY2F0b3JJY29uIVwiXG4gICAgICBbcGFyZW50TWVzc2FnZUlkXT1cInBhcmVudE1lc3NhZ2U/LmdldElkKClcIlxuICAgICAgW2VtcHR5U3RhdGVWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5lbXB0eVN0YXRlVmlld1wiXG4gICAgICBbbG9hZGluZ1N0YXRlVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubG9hZGluZ1N0YXRlVmlld1wiXG4gICAgICBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCJcbiAgICAgIFtlcnJvclN0YXRlVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZXJyb3JTdGF0ZVZpZXdcIlxuICAgICAgW2Rpc2FibGVSZWNlaXB0XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlUmVjZWlwdFwiXG4gICAgICBbcmVhZEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnJlYWRJY29uXCJcbiAgICAgIFtkZWxpdmVyZWRJY29uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kZWxpdmVyZWRJY29uXCJcbiAgICAgIFtzZW50SWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uc2VudEljb25cIlxuICAgICAgW3dhaXRJY29uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi53YWl0SWNvblwiXG4gICAgICBbbG9hZGluZ0ljb25VUkxdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmxvYWRpbmdJY29uVVJMXCJcbiAgICAgIFtlcnJvckljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmVycm9ySWNvblwiXG4gICAgICBbYWxpZ25tZW50XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5hbGlnbm1lbnRcIlxuICAgICAgW3Nob3dBdmF0YXJdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnNob3dBdmF0YXJcIlxuICAgICAgW2RhdGVQYXR0ZXJuXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kYXRlUGF0dGVyblwiXG4gICAgICBbdGltZXN0YW1wQWxpZ25tZW50XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi50aW1lc3RhbXBBbGlnbm1lbnRcIlxuICAgICAgW0RhdGVTZXBhcmF0b3JQYXR0ZXJuXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5EYXRlU2VwYXJhdG9yUGF0dGVyblwiXG4gICAgICBbbWVzc2FnZVR5cGVzXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi50ZW1wbGF0ZXNcIlxuICAgICAgW3RlbXBsYXRlc109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24udGVtcGxhdGVzXCJcbiAgICAgIFttZXNzYWdlc1JlcXVlc3RCdWlsZGVyXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlc1JlcXVlc3RCdWlsZGVyIHx8IHJlcXVlc3RCdWlsZGVyXCJcbiAgICAgIFt0aHJlc2hvbGRWYWx1ZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24udGhyZXNob2xkVmFsdWVcIlxuICAgICAgW29uVGhyZWFkUmVwbGllc0NsaWNrXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5vblRocmVhZFJlcGxpZXNDbGlja1wiXG4gICAgICBbaGVhZGVyVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uaGVhZGVyVmlld1wiXG4gICAgICBbZm9vdGVyVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZm9vdGVyVmlld1wiXG4gICAgICBbYXZhdGFyU3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmF2YXRhclN0eWxlXCJcbiAgICAgIFtkYXRlU2VwYXJhdG9yU3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRhdGVTZXBhcmF0b3JTdHlsZVwiXG4gICAgICBbbWVzc2FnZUxpc3RTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RTdHlsZVwiXG4gICAgICBbb25FcnJvcl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ub25FcnJvclwiXG4gICAgICBbaGlkZUVycm9yXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5oaWRlRXJyb3JcIlxuICAgICAgW2hpZGVEYXRlU2VwYXJhdG9yXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5oaWRlRGF0ZVNlcGFyYXRvclwiXG4gICAgICBbZGlzYWJsZU1lbnRpb25zXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlTWVudGlvbnNcIlxuICAgICAgW3RleHRGb3JtYXR0ZXJzXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbj8udGV4dEZvcm1hdHRlcnNcIj5cbiAgICA8L2NvbWV0Y2hhdC1tZXNzYWdlLWxpc3Q+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVzc2FnZUxpc3RWaWV3XCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXNzYWdlTGlzdFZpZXc7Y29udGV4dDp7ICB1c2VyOiB1c2VyLCBncm91cDogZ3JvdXAscGFyZW50TWVzc2FnZTpwYXJlbnRNZXNzYWdlIH1cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxkaXYgY2xhc3M9XCJjYy10aHJlYWRlZC1tZXNzYWdlc19fY29tcG9zZXJcIlxuICAgICpuZ0lmPVwiIWhpZGVNZXNzYWdlQ29tcG9zZXIgJiYgIW1lc3NhZ2VDb21wb3NlclZpZXdcIj5cbiAgICA8Y29tZXRjaGF0LW1lc3NhZ2UtY29tcG9zZXIgI21lc3NhZ2VDb21wb3NlclJlZlxuICAgICAgW3BhcmVudE1lc3NhZ2VJZF09XCJwYXJlbnRNZXNzYWdlPy5nZXRJZCgpXCIgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICBbdGV4dF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnRleHRcIlxuICAgICAgW2hlYWRlclZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5oZWFkZXJWaWV3XCJcbiAgICAgIFtvblRleHRDaGFuZ2VdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vblRleHRDaGFuZ2VcIlxuICAgICAgW2F0dGFjaG1lbnRJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXR0YWNobWVudEljb25VUkxcIlxuICAgICAgW2F0dGFjaG1lbnRPcHRpb25zXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXR0YWNobWVudE9wdGlvbnNcIlxuICAgICAgW3NlY29uZGFyeUJ1dHRvblZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5zZWNvbmRhcnlCdXR0b25WaWV3XCJcbiAgICAgIFthdXhpbGFyeUJ1dHRvblZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdXhpbGFyeUJ1dHRvblZpZXdcIlxuICAgICAgW2F1eGlsaWFyeUJ1dHRvbnNBbGlnbm1lbnRdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdXhpbGlhcnlCdXR0b25zQWxpZ25tZW50XCJcbiAgICAgIFtzZW5kQnV0dG9uVmlld109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnNlbmRCdXR0b25WaWV3XCJcbiAgICAgIFtoaWRlTGl2ZVJlYWN0aW9uXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uaGlkZUxpdmVSZWFjdGlvblwiXG4gICAgICBbTGl2ZVJlYWN0aW9uSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkxpdmVSZWFjdGlvbkljb25VUkxcIlxuICAgICAgW21lc3NhZ2VDb21wb3NlclN0eWxlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ubWVzc2FnZUNvbXBvc2VyU3R5bGVcIlxuICAgICAgW29uU2VuZEJ1dHRvbkNsaWNrXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ub25TZW5kQnV0dG9uQ2xpY2tcIlxuICAgICAgW3NlbmRCdXR0b25JY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uc2VuZEJ1dHRvbkljb25VUkxcIlxuICAgICAgW29uRXJyb3JdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICAgIFthY3Rpb25TaGVldFN0eWxlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYWN0aW9uU2hlZXRTdHlsZVwiXG4gICAgICBbdXNlck1lbWJlcldyYXBwZXJDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udXNlck1lbWJlcldyYXBwZXJDb25maWd1cmF0aW9uXCJcbiAgICAgIFt0ZXh0Rm9ybWF0dGVyc109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uPy50ZXh0Rm9ybWF0dGVyc1wiXG4gICAgICBbZGlzYWJsZU1lbnRpb25zXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uZGlzYWJsZU1lbnRpb25zXCJcbiAgICAgIFttZW50aW9uc1dhcm5pbmdUZXh0XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24/Lm1lbnRpb25zV2FybmluZ1RleHRcIlxuICAgICAgW21lbnRpb25zV2FybmluZ1N0eWxlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24/Lm1lbnRpb25zV2FybmluZ1N0eWxlXCJcbiAgICAgIFtlbW9qaUljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5lbW9qaUljb25VUkxcIlxuICAgICAgW0FJSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkFJSWNvblVSTFwiXG4gICAgICBbaGlkZVZvaWNlUmVjb3JkaW5nXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uaGlkZVZvaWNlUmVjb3JkaW5nXCJcbiAgICAgIFtoaWRlTGF5b3V0TW9kZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmhpZGVMYXlvdXRNb2RlXCJcbiAgICAgIFtBSU9wdGlvbnNTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkFJT3B0aW9uc1N0eWxlXCJcbiAgICAgIFtiYWNrZHJvcFN0eWxlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZVwiXG4gICAgICBbbWVkaWFSZWNvcmRlclN0eWxlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ubWVkaWFSZWNvcmRlclN0eWxlXCJcbiAgICAgIFt2b2ljZVJlY29yZGluZ0Nsb3NlSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnZvaWNlUmVjb3JkaW5nQ2xvc2VJY29uVVJMXCJcbiAgICAgIFt2b2ljZVJlY29yZGluZ1N0YXJ0SWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnZvaWNlUmVjb3JkaW5nU3RhcnRJY29uVVJMXCJcbiAgICAgIFt2b2ljZVJlY29yZGluZ1N0b3BJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udm9pY2VSZWNvcmRpbmdTdG9wSWNvblVSTFwiXG4gICAgICBbdm9pY2VSZWNvcmRpbmdTdWJtaXRJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udm9pY2VSZWNvcmRpbmdTdWJtaXRJY29uVVJMXCJcbiAgICAgID5cbiAgICA8L2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoaWRlTWVzc2FnZUNvbXBvc2VyICYmIG1lc3NhZ2VDb21wb3NlclZpZXdcIj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VDb21wb3NlclZpZXc7Y29udGV4dDp7ICB1c2VyOiB1c2VyLCBncm91cDogZ3JvdXAscGFyZW50TWVzc2FnZTpwYXJlbnRNZXNzYWdlIH1cIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG5cbjwvZGl2PlxuIl19
|