@cometchat/chat-uikit-angular 4.3.1 → 4.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/CometChatContacts/cometchat-contacts/cometchat-contacts.component.d.ts +1 -0
  2. package/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +3 -1
  3. package/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.d.ts +4 -1
  4. package/CometChatDetails/cometchat-details/cometchat-details.component.d.ts +1 -2
  5. package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +2 -2
  6. package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +4 -0
  7. package/Shared/Framework/DataSource.d.ts +3 -3
  8. package/Shared/Framework/DataSourceDecorator.d.ts +3 -3
  9. package/Shared/Utils/MessageUtils.d.ts +3 -3
  10. package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.mjs +12 -8
  11. package/esm2020/Calls/CometChatCallLogs/cometchat-call-logs/cometchat-call-logs.component.mjs +10 -6
  12. package/esm2020/CometChatContacts/cometchat-contacts/cometchat-contacts.component.mjs +5 -4
  13. package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +46 -15
  14. package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +38 -9
  15. package/esm2020/CometChatDetails/cometchat-details/cometchat-details.component.mjs +11 -25
  16. package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +11 -7
  17. package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +205 -46
  18. package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +2 -2
  19. package/esm2020/Extensions/TextModerator/TextModeratorExtensionDecorator.mjs +3 -3
  20. package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +39 -7
  21. package/esm2020/Shared/Framework/DataSource.mjs +1 -1
  22. package/esm2020/Shared/Framework/DataSourceDecorator.mjs +1 -1
  23. package/esm2020/Shared/Utils/MessageUtils.mjs +5 -5
  24. package/examples/sample-app/README.md +46 -0
  25. package/fesm2015/cometchat-chat-uikit-angular.mjs +380 -123
  26. package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -1
  27. package/fesm2020/cometchat-chat-uikit-angular.mjs +371 -121
  28. package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -1
  29. package/package.json +5 -5
@@ -47,21 +47,22 @@ export class CometChatConversationsWithMessagesComponent {
47
47
  this.hideSearch = true;
48
48
  this.startConversationButtonStyle = {};
49
49
  this.sideBarStyle = {};
50
+ this.groupListenerId = "withmessages_group_" + new Date().getTime();
50
51
  this.onBack = () => {
51
52
  this.user = null;
52
53
  this.group = null;
53
54
  this.activeConversation = null;
54
55
  };
55
- this.onContactSelected = (users, groups) => {
56
+ this.onContactClicked = (user, group) => {
56
57
  this.showStartConversation = false;
57
- if (users && users[0]) {
58
+ if (user) {
58
59
  this.group = null;
59
- this.user = users[0];
60
+ this.user = user;
60
61
  this.ref.detectChanges();
61
62
  }
62
- if (groups && groups[0]) {
63
+ if (group) {
63
64
  this.user = null;
64
- this.group = groups[0];
65
+ this.group = group;
65
66
  this.ref.detectChanges();
66
67
  }
67
68
  };
@@ -138,6 +139,32 @@ export class CometChatConversationsWithMessagesComponent {
138
139
  triggerStartConversation() {
139
140
  this.showStartConversation = true;
140
141
  }
142
+ removeChatOnGroupAction(leftUser, message) {
143
+ const isSameUser = this.loggedInUser?.getUid() === leftUser.getUid();
144
+ const actionForGroup = message.getActionFor() instanceof CometChat.Group;
145
+ if (isSameUser && this.activeConversation && this.activeConversation.getConversationWith() instanceof CometChat.Group) {
146
+ let group = this.activeConversation.getConversationWith();
147
+ if (actionForGroup) {
148
+ let actionOnGroup = message.getActionFor();
149
+ if (actionOnGroup.getGuid() === group.getGuid()) {
150
+ this.activeConversation = null;
151
+ this.user = null;
152
+ this.group = null;
153
+ this.ref.detectChanges();
154
+ }
155
+ }
156
+ }
157
+ }
158
+ attachGroupListeners() {
159
+ CometChat.addGroupListener(this.groupListenerId, new CometChat.GroupListener({
160
+ onGroupMemberKicked: (message, kickedUser, kickedBy, kickedFrom) => {
161
+ this.removeChatOnGroupAction(kickedUser, message);
162
+ },
163
+ onGroupMemberBanned: (message, bannedUser, bannedBy, bannedFrom) => {
164
+ this.removeChatOnGroupAction(bannedUser, message);
165
+ },
166
+ }));
167
+ }
141
168
  setWithMessagesStyle() {
142
169
  let defaultStyle = new WithMessagesStyle({
143
170
  width: "100%",
@@ -221,10 +248,11 @@ export class CometChatConversationsWithMessagesComponent {
221
248
  if (!this.messagesConfiguration.messageHeaderConfiguration.onBack) {
222
249
  this.messagesConfiguration.messageHeaderConfiguration.onBack = this.onBack;
223
250
  }
224
- this.subscribeToEvents();
225
251
  CometChat.getLoggedinUser()
226
252
  .then((user) => {
227
253
  this.loggedInUser = user;
254
+ this.attachGroupListeners();
255
+ this.subscribeToEvents();
228
256
  })
229
257
  .catch((error) => {
230
258
  if (this.onError) {
@@ -234,6 +262,7 @@ export class CometChatConversationsWithMessagesComponent {
234
262
  }
235
263
  ngOnDestroy() {
236
264
  this.unsubscribeToEvents();
265
+ CometChat.removeGroupListener(this.groupListenerId);
237
266
  }
238
267
  // subscribe to global events
239
268
  subscribeToEvents() {
@@ -325,10 +354,10 @@ export class CometChatConversationsWithMessagesComponent {
325
354
  }
326
355
  }
327
356
  CometChatConversationsWithMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatConversationsWithMessagesComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }], target: i0.ɵɵFactoryTarget.Component });
328
- CometChatConversationsWithMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatConversationsWithMessagesComponent, selector: "cometchat-conversations-with-messages", inputs: { user: "user", group: "group", isMobileView: "isMobileView", messageText: "messageText", conversationsWithMessagesStyle: "conversationsWithMessagesStyle", messagesConfiguration: "messagesConfiguration", conversationConfiguration: "conversationConfiguration", onError: "onError", startNewConversationIconURL: "startNewConversationIconURL", hideStartNewConversation: "hideStartNewConversation", StartConversationConfiguration: "StartConversationConfiguration" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-with-messages__wrapper\" [ngStyle]=\"chatsWrapperStyles()\">\n <div class=\"cc-with-messages__sidebar\" [ngClass]=\"{mobile : isMobileView}\"\n [ngStyle]=\"sideBarStyle\">\n <cometchat-conversations #conversationRef\n [activeConversation]=\"activeConversation\"\n [onItemClick]=\"conversationConfiguration.onItemClick || onItemClick\"\n [conversationsStyle]=\"conversationConfiguration.conversationsStyle\"\n [statusIndicatorStyle]=\"conversationConfiguration?.statusIndicatorStyle\"\n [avatarStyle]=\"conversationConfiguration?.avatarStyle!\"\n [subtitleView]=\"conversationConfiguration.subtitleView\"\n [options]=\"conversationConfiguration.options\"\n [disableUsersPresence]=\"conversationConfiguration.disableUsersPresence\"\n [disableReceipt]=\"conversationConfiguration.disableReceipt\"\n [disableTyping]=\"conversationConfiguration.disableTyping\"\n [deliveredIcon]=\"conversationConfiguration.deliveredIcon\"\n [readIcon]=\"conversationConfiguration.readIcon\"\n [waitIcon]=\"conversationConfiguration.waitIcon\"\n [errorIcon]=\"conversationConfiguration.errorIcon\"\n [datePattern]=\"conversationConfiguration.datePattern\"\n [receiptStyle]=\"conversationConfiguration.receiptStyle\"\n [sentIcon]=\"conversationConfiguration.sentIcon\"\n [privateGroupIcon]=\"conversationConfiguration.privateGroupIcon\"\n [protectedGroupIcon]=\"conversationConfiguration.protectedGroupIcon\"\n [customSoundForMessages]=\"conversationConfiguration.customSoundForMessages\"\n [conversationsRequestBuilder]=\"conversationConfiguration.conversationsRequestBuilder\"\n [emptyStateView]=\"conversationConfiguration.emptyStateView\"\n [onSelect]=\"conversationConfiguration.onSelect\"\n [loadingIconURL]=\"conversationConfiguration.loadingIconURL\"\n [errorStateView]=\"conversationConfiguration.errorStateView\"\n [loadingStateView]=\"conversationConfiguration.loadingStateView\"\n [titleAlignment]=\"conversationConfiguration.titleAlignment\"\n [listItemView]=\"conversationConfiguration.listItemView\"\n [menu]=\"conversationConfiguration.menu || startConversationButton\"\n [hideSeparator]=\"conversationConfiguration.hideSeparator\"\n [hideError]=\"conversationConfiguration.hideError\"\n [selectionMode]=\"conversationConfiguration.selectionMode\"\n [disableSoundForMessages]=\"conversationConfiguration.disableSoundForMessages\"\n [deleteConversationDialogStyle]=\"conversationConfiguration.deleteConversationDialogStyle\"\n [badgeStyle]=\"conversationConfiguration.badgeStyle\"\n [dateStyle]=\"conversationConfiguration.dateStyle\"\n [listItemStyle]=\"conversationConfiguration.listItemStyle\"\n [backdropStyle]=\"conversationConfiguration.backdropStyle\"\n [textFormatters]=\"conversationConfiguration?.textFormatters\"\n [disableMentions]=\"conversationConfiguration.disableMentions\"></cometchat-conversations>\n </div>\n <div class=\"cc-with-messages__main\" [ngClass]=\"{mobile : isMobileView}\"\n *ngIf=\"!showStartConversation && (user || group)\">\n <!--Message List Screen-->\n <cometchat-messages #messagesRef [user]=\"user!\" [group]=\"group!\"\n [messageHeaderConfiguration]=\"messagesConfiguration.messageHeaderConfiguration\"\n [messageListConfiguration]=\"messagesConfiguration.messageListConfiguration\"\n [messageComposerConfiguration]=\"messagesConfiguration.messageComposerConfiguration\"\n [messagesStyle]=\"messagesConfiguration.messagesStyle\"\n [customSoundForIncomingMessages]=\"messagesConfiguration.customSoundForIncomingMessages\"\n [customSoundForOutgoingMessages]=\"messagesConfiguration.customSoundForOutgoingMessages\"\n [detailsConfiguration]=\"messagesConfiguration.detailsConfiguration\"\n [disableSoundForMessages]=\"messagesConfiguration.disableSoundForMessages\"\n [disableTyping]=\"messagesConfiguration.disableTyping\"\n [hideMessageComposer]=\"messagesConfiguration.hideMessageComposer\"\n [hideMessageHeader]=\"messagesConfiguration.hideMessageHeader\"\n [messageComposerView]=\"messagesConfiguration.messageComposerView\"\n [messageHeaderView]=\"messagesConfiguration.messageHeaderView\"\n [messageListView]=\"messagesConfiguration.messageListView\"\n [hideDetails]=\"messagesConfiguration.hideDetails!\"\n [threadedMessageConfiguration]=\"messagesConfiguration.threadedMessageConfiguration\">\n </cometchat-messages>\n <!--Message List Screen ENDS-->\n </div>\n <div class=\"cc-with-messages__start-conversation\"\n [ngClass]=\"{mobile : isMobileView}\" *ngIf=\"showStartConversation\">\n\n <cometchat-contacts\n [usersConfiguration]=\"StartConversationConfiguration?.usersConfiguration!\"\n [groupsConfiguration]=\"StartConversationConfiguration?.groupsConfiguration!\"\n [closeIconURL]=\"StartConversationConfiguration?.closeIconURL!\"\n [contactsStyle]=\"StartConversationConfiguration?.contactsStyle!\"\n [selectionMode]=\"StartConversationConfiguration?.selectionMode!\"\n [onClose]=\"StartConversationConfiguration?.onClose!\"\n [tabVisibility]=\"StartConversationConfiguration?.tabVisibility!\"\n [selectionLimit]=\"StartConversationConfiguration?.selectionLimit!\"\n [tabs]=\"StartConversationConfiguration?.tabs!\"\n [hideSubmitButton]=\"StartConversationConfiguration?.hideSubmitButton!\"\n [onSubmitButtonClick]=\"onContactSelected\"></cometchat-contacts>\n </div>\n <div class=\"cc-decorator__message--empty\"\n *ngIf=\"!user && !group && !showStartConversation\"\n [ngStyle]=\"emptyMessageStyle()\">\n <cometchat-label [text]=\"messageText\"\n [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n <ng-template #startConversationButton>\n <cometchat-button *ngIf=\"!hideStartNewConversation\"\n [iconURL]=\"startNewConversationIconURL\"\n [buttonStyle]=\"startConversationButtonStyle\"\n (cc-button-clicked)=\"triggerStartConversation()\"></cometchat-button>\n\n </ng-template>\n", styles: [".cc-with-messages__wrapper{display:flex;height:100%;width:100%;box-sizing:border-box;overflow:hidden}.cc-with-messages__sidebar{width:280px;height:100%;position:relative}.cc-with-messages__main,.cc-with-messages__start-conversation{width:calc(100% - 280px);height:100%}.mobile{width:100%!important;height:100%;position:absolute}.cc-decorator__message--empty{display:flex;justify-content:center;align-items:center}\n"], components: [{ type: i2.CometChatConversationsComponent, selector: "cometchat-conversations", inputs: ["subtitleView", "title", "options", "searchPlaceHolder", "disableUsersPresence", "disableReceipt", "disableTyping", "deliveredIcon", "readIcon", "errorIcon", "datePattern", "onError", "sentIcon", "privateGroupIcon", "protectedGroupIcon", "customSoundForMessages", "activeConversation", "searchIconURL", "hideSearch", "conversationsRequestBuilder", "emptyStateView", "onSelect", "loadingIconURL", "errorStateView", "loadingStateView", "emptyStateText", "errorStateText", "titleAlignment", "listItemView", "menu", "hideSeparator", "searchPlaceholder", "hideError", "selectionMode", "disableSoundForMessages", "confirmDialogTitle", "confirmButtonText", "cancelButtonText", "confirmDialogMessage", "onItemClick", "deleteConversationDialogStyle", "backdropStyle", "badgeStyle", "dateStyle", "conversationsStyle", "listItemStyle", "statusIndicatorStyle", "typingIndicatorText", "threadIndicatorText", "avatarStyle", "receiptStyle", "loggedInUser", "disableMentions", "textFormatters"] }, { type: i3.CometChatMessagesComponent, selector: "cometchat-messages", inputs: ["user", "group", "currentAskAIBot", "hideMessageComposer", "disableTyping", "messageHeaderConfiguration", "messageListConfiguration", "messageComposerConfiguration", "threadedMessageConfiguration", "detailsConfiguration", "customSoundForIncomingMessages", "customSoundForOutgoingMessages", "disableSoundForMessages", "messagesStyle", "messageHeaderView", "messageComposerView", "messageListView", "hideMessageHeader", "hideDetails", "auxiliaryMenu"] }, { type: i4.CometChatContactsComponent, selector: "cometchat-contacts", inputs: ["title", "usersTabTitle", "groupsTabTitle", "usersConfiguration", "groupsConfiguration", "onSubmitButtonClick", "closeIconURL", "contactsStyle", "selectionMode", "onClose", "onItemClick", "tabVisibility", "selectionLimit", "tabs", "hideSubmitButton", "submitButtonText"] }], directives: [{ type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
357
+ CometChatConversationsWithMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatConversationsWithMessagesComponent, selector: "cometchat-conversations-with-messages", inputs: { user: "user", group: "group", isMobileView: "isMobileView", messageText: "messageText", conversationsWithMessagesStyle: "conversationsWithMessagesStyle", messagesConfiguration: "messagesConfiguration", conversationConfiguration: "conversationConfiguration", onError: "onError", startNewConversationIconURL: "startNewConversationIconURL", hideStartNewConversation: "hideStartNewConversation", StartConversationConfiguration: "StartConversationConfiguration" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-with-messages__wrapper\" [ngStyle]=\"chatsWrapperStyles()\">\n <div class=\"cc-with-messages__sidebar\" [ngClass]=\"{mobile : isMobileView}\"\n [ngStyle]=\"sideBarStyle\">\n <cometchat-conversations #conversationRef\n [activeConversation]=\"activeConversation\"\n [onItemClick]=\"conversationConfiguration.onItemClick || onItemClick\"\n [conversationsStyle]=\"conversationConfiguration.conversationsStyle\"\n [statusIndicatorStyle]=\"conversationConfiguration?.statusIndicatorStyle\"\n [avatarStyle]=\"conversationConfiguration?.avatarStyle!\"\n [subtitleView]=\"conversationConfiguration.subtitleView\"\n [options]=\"conversationConfiguration.options\"\n [disableUsersPresence]=\"conversationConfiguration.disableUsersPresence\"\n [disableReceipt]=\"conversationConfiguration.disableReceipt\"\n [disableTyping]=\"conversationConfiguration.disableTyping\"\n [deliveredIcon]=\"conversationConfiguration.deliveredIcon\"\n [readIcon]=\"conversationConfiguration.readIcon\"\n [waitIcon]=\"conversationConfiguration.waitIcon\"\n [errorIcon]=\"conversationConfiguration.errorIcon\"\n [datePattern]=\"conversationConfiguration.datePattern\"\n [receiptStyle]=\"conversationConfiguration.receiptStyle\"\n [sentIcon]=\"conversationConfiguration.sentIcon\"\n [privateGroupIcon]=\"conversationConfiguration.privateGroupIcon\"\n [protectedGroupIcon]=\"conversationConfiguration.protectedGroupIcon\"\n [customSoundForMessages]=\"conversationConfiguration.customSoundForMessages\"\n [conversationsRequestBuilder]=\"conversationConfiguration.conversationsRequestBuilder\"\n [emptyStateView]=\"conversationConfiguration.emptyStateView\"\n [onSelect]=\"conversationConfiguration.onSelect\"\n [loadingIconURL]=\"conversationConfiguration.loadingIconURL\"\n [errorStateView]=\"conversationConfiguration.errorStateView\"\n [loadingStateView]=\"conversationConfiguration.loadingStateView\"\n [titleAlignment]=\"conversationConfiguration.titleAlignment\"\n [listItemView]=\"conversationConfiguration.listItemView\"\n [menu]=\"conversationConfiguration.menu || startConversationButton\"\n [hideSeparator]=\"conversationConfiguration.hideSeparator\"\n [hideError]=\"conversationConfiguration.hideError\"\n [selectionMode]=\"conversationConfiguration.selectionMode\"\n [disableSoundForMessages]=\"conversationConfiguration.disableSoundForMessages\"\n [deleteConversationDialogStyle]=\"conversationConfiguration.deleteConversationDialogStyle\"\n [badgeStyle]=\"conversationConfiguration.badgeStyle\"\n [dateStyle]=\"conversationConfiguration.dateStyle\"\n [listItemStyle]=\"conversationConfiguration.listItemStyle\"\n [backdropStyle]=\"conversationConfiguration.backdropStyle\"\n [textFormatters]=\"conversationConfiguration?.textFormatters\"\n [disableMentions]=\"conversationConfiguration.disableMentions\"></cometchat-conversations>\n </div>\n <div class=\"cc-with-messages__main\" [ngClass]=\"{mobile : isMobileView}\"\n *ngIf=\"!showStartConversation && (user || group)\">\n <!--Message List Screen-->\n <cometchat-messages #messagesRef [user]=\"user!\" [group]=\"group!\"\n [messageHeaderConfiguration]=\"messagesConfiguration.messageHeaderConfiguration\"\n [messageListConfiguration]=\"messagesConfiguration.messageListConfiguration\"\n [messageComposerConfiguration]=\"messagesConfiguration.messageComposerConfiguration\"\n [messagesStyle]=\"messagesConfiguration.messagesStyle\"\n [customSoundForIncomingMessages]=\"messagesConfiguration.customSoundForIncomingMessages\"\n [customSoundForOutgoingMessages]=\"messagesConfiguration.customSoundForOutgoingMessages\"\n [detailsConfiguration]=\"messagesConfiguration.detailsConfiguration\"\n [disableSoundForMessages]=\"messagesConfiguration.disableSoundForMessages\"\n [disableTyping]=\"messagesConfiguration.disableTyping\"\n [hideMessageComposer]=\"messagesConfiguration.hideMessageComposer\"\n [hideMessageHeader]=\"messagesConfiguration.hideMessageHeader\"\n [messageComposerView]=\"messagesConfiguration.messageComposerView\"\n [messageHeaderView]=\"messagesConfiguration.messageHeaderView\"\n [messageListView]=\"messagesConfiguration.messageListView\"\n [hideDetails]=\"messagesConfiguration.hideDetails!\"\n [threadedMessageConfiguration]=\"messagesConfiguration.threadedMessageConfiguration\">\n </cometchat-messages>\n <!--Message List Screen ENDS-->\n </div>\n <div class=\"cc-with-messages__start-conversation\"\n [ngClass]=\"{mobile : isMobileView}\" *ngIf=\"showStartConversation\">\n\n <cometchat-contacts [onItemClick]=\"onContactClicked\"\n [usersConfiguration]=\"StartConversationConfiguration?.usersConfiguration!\"\n [groupsConfiguration]=\"StartConversationConfiguration?.groupsConfiguration!\"\n [closeIconURL]=\"StartConversationConfiguration?.closeIconURL!\"\n [contactsStyle]=\"StartConversationConfiguration?.contactsStyle!\"\n [selectionMode]=\"StartConversationConfiguration?.selectionMode!\"\n [onClose]=\"StartConversationConfiguration?.onClose!\"\n [tabVisibility]=\"StartConversationConfiguration?.tabVisibility!\"\n [selectionLimit]=\"StartConversationConfiguration?.selectionLimit!\"\n [tabs]=\"StartConversationConfiguration?.tabs!\"\n [hideSubmitButton]=\"StartConversationConfiguration?.hideSubmitButton!\"></cometchat-contacts>\n </div>\n <div class=\"cc-decorator__message--empty\"\n *ngIf=\"!user && !group && !showStartConversation\"\n [ngStyle]=\"emptyMessageStyle()\">\n <cometchat-label [text]=\"messageText\"\n [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n <ng-template #startConversationButton>\n <cometchat-button *ngIf=\"!hideStartNewConversation\"\n [iconURL]=\"startNewConversationIconURL\"\n [buttonStyle]=\"startConversationButtonStyle\"\n (cc-button-clicked)=\"triggerStartConversation()\"></cometchat-button>\n\n </ng-template>\n", styles: [".cc-with-messages__wrapper{display:flex;height:100%;width:100%;box-sizing:border-box;overflow:hidden}.cc-with-messages__sidebar{width:280px;height:100%;position:relative}.cc-with-messages__main,.cc-with-messages__start-conversation{width:calc(100% - 280px);height:100%}.mobile{width:100%!important;height:100%;position:absolute}.cc-decorator__message--empty{display:flex;justify-content:center;align-items:center}\n"], components: [{ type: i2.CometChatConversationsComponent, selector: "cometchat-conversations", inputs: ["subtitleView", "title", "options", "searchPlaceHolder", "disableUsersPresence", "disableReceipt", "disableTyping", "deliveredIcon", "readIcon", "errorIcon", "datePattern", "onError", "sentIcon", "privateGroupIcon", "protectedGroupIcon", "customSoundForMessages", "activeConversation", "searchIconURL", "hideSearch", "conversationsRequestBuilder", "emptyStateView", "onSelect", "loadingIconURL", "errorStateView", "loadingStateView", "emptyStateText", "errorStateText", "titleAlignment", "listItemView", "menu", "hideSeparator", "searchPlaceholder", "hideError", "selectionMode", "disableSoundForMessages", "confirmDialogTitle", "confirmButtonText", "cancelButtonText", "confirmDialogMessage", "onItemClick", "deleteConversationDialogStyle", "backdropStyle", "badgeStyle", "dateStyle", "conversationsStyle", "listItemStyle", "statusIndicatorStyle", "typingIndicatorText", "threadIndicatorText", "avatarStyle", "receiptStyle", "loggedInUser", "disableMentions", "textFormatters"] }, { type: i3.CometChatMessagesComponent, selector: "cometchat-messages", inputs: ["user", "group", "currentAskAIBot", "hideMessageComposer", "disableTyping", "messageHeaderConfiguration", "messageListConfiguration", "messageComposerConfiguration", "threadedMessageConfiguration", "detailsConfiguration", "customSoundForIncomingMessages", "customSoundForOutgoingMessages", "disableSoundForMessages", "messagesStyle", "messageHeaderView", "messageComposerView", "messageListView", "hideMessageHeader", "hideDetails", "auxiliaryMenu"] }, { type: i4.CometChatContactsComponent, selector: "cometchat-contacts", inputs: ["title", "usersTabTitle", "groupsTabTitle", "usersConfiguration", "groupsConfiguration", "onSubmitButtonClick", "closeIconURL", "contactsStyle", "selectionMode", "onClose", "onItemClick", "tabVisibility", "selectionLimit", "tabs", "hideSubmitButton", "submitButtonText"] }], directives: [{ type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
329
358
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatConversationsWithMessagesComponent, decorators: [{
330
359
  type: Component,
331
- args: [{ selector: "cometchat-conversations-with-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-with-messages__wrapper\" [ngStyle]=\"chatsWrapperStyles()\">\n <div class=\"cc-with-messages__sidebar\" [ngClass]=\"{mobile : isMobileView}\"\n [ngStyle]=\"sideBarStyle\">\n <cometchat-conversations #conversationRef\n [activeConversation]=\"activeConversation\"\n [onItemClick]=\"conversationConfiguration.onItemClick || onItemClick\"\n [conversationsStyle]=\"conversationConfiguration.conversationsStyle\"\n [statusIndicatorStyle]=\"conversationConfiguration?.statusIndicatorStyle\"\n [avatarStyle]=\"conversationConfiguration?.avatarStyle!\"\n [subtitleView]=\"conversationConfiguration.subtitleView\"\n [options]=\"conversationConfiguration.options\"\n [disableUsersPresence]=\"conversationConfiguration.disableUsersPresence\"\n [disableReceipt]=\"conversationConfiguration.disableReceipt\"\n [disableTyping]=\"conversationConfiguration.disableTyping\"\n [deliveredIcon]=\"conversationConfiguration.deliveredIcon\"\n [readIcon]=\"conversationConfiguration.readIcon\"\n [waitIcon]=\"conversationConfiguration.waitIcon\"\n [errorIcon]=\"conversationConfiguration.errorIcon\"\n [datePattern]=\"conversationConfiguration.datePattern\"\n [receiptStyle]=\"conversationConfiguration.receiptStyle\"\n [sentIcon]=\"conversationConfiguration.sentIcon\"\n [privateGroupIcon]=\"conversationConfiguration.privateGroupIcon\"\n [protectedGroupIcon]=\"conversationConfiguration.protectedGroupIcon\"\n [customSoundForMessages]=\"conversationConfiguration.customSoundForMessages\"\n [conversationsRequestBuilder]=\"conversationConfiguration.conversationsRequestBuilder\"\n [emptyStateView]=\"conversationConfiguration.emptyStateView\"\n [onSelect]=\"conversationConfiguration.onSelect\"\n [loadingIconURL]=\"conversationConfiguration.loadingIconURL\"\n [errorStateView]=\"conversationConfiguration.errorStateView\"\n [loadingStateView]=\"conversationConfiguration.loadingStateView\"\n [titleAlignment]=\"conversationConfiguration.titleAlignment\"\n [listItemView]=\"conversationConfiguration.listItemView\"\n [menu]=\"conversationConfiguration.menu || startConversationButton\"\n [hideSeparator]=\"conversationConfiguration.hideSeparator\"\n [hideError]=\"conversationConfiguration.hideError\"\n [selectionMode]=\"conversationConfiguration.selectionMode\"\n [disableSoundForMessages]=\"conversationConfiguration.disableSoundForMessages\"\n [deleteConversationDialogStyle]=\"conversationConfiguration.deleteConversationDialogStyle\"\n [badgeStyle]=\"conversationConfiguration.badgeStyle\"\n [dateStyle]=\"conversationConfiguration.dateStyle\"\n [listItemStyle]=\"conversationConfiguration.listItemStyle\"\n [backdropStyle]=\"conversationConfiguration.backdropStyle\"\n [textFormatters]=\"conversationConfiguration?.textFormatters\"\n [disableMentions]=\"conversationConfiguration.disableMentions\"></cometchat-conversations>\n </div>\n <div class=\"cc-with-messages__main\" [ngClass]=\"{mobile : isMobileView}\"\n *ngIf=\"!showStartConversation && (user || group)\">\n <!--Message List Screen-->\n <cometchat-messages #messagesRef [user]=\"user!\" [group]=\"group!\"\n [messageHeaderConfiguration]=\"messagesConfiguration.messageHeaderConfiguration\"\n [messageListConfiguration]=\"messagesConfiguration.messageListConfiguration\"\n [messageComposerConfiguration]=\"messagesConfiguration.messageComposerConfiguration\"\n [messagesStyle]=\"messagesConfiguration.messagesStyle\"\n [customSoundForIncomingMessages]=\"messagesConfiguration.customSoundForIncomingMessages\"\n [customSoundForOutgoingMessages]=\"messagesConfiguration.customSoundForOutgoingMessages\"\n [detailsConfiguration]=\"messagesConfiguration.detailsConfiguration\"\n [disableSoundForMessages]=\"messagesConfiguration.disableSoundForMessages\"\n [disableTyping]=\"messagesConfiguration.disableTyping\"\n [hideMessageComposer]=\"messagesConfiguration.hideMessageComposer\"\n [hideMessageHeader]=\"messagesConfiguration.hideMessageHeader\"\n [messageComposerView]=\"messagesConfiguration.messageComposerView\"\n [messageHeaderView]=\"messagesConfiguration.messageHeaderView\"\n [messageListView]=\"messagesConfiguration.messageListView\"\n [hideDetails]=\"messagesConfiguration.hideDetails!\"\n [threadedMessageConfiguration]=\"messagesConfiguration.threadedMessageConfiguration\">\n </cometchat-messages>\n <!--Message List Screen ENDS-->\n </div>\n <div class=\"cc-with-messages__start-conversation\"\n [ngClass]=\"{mobile : isMobileView}\" *ngIf=\"showStartConversation\">\n\n <cometchat-contacts\n [usersConfiguration]=\"StartConversationConfiguration?.usersConfiguration!\"\n [groupsConfiguration]=\"StartConversationConfiguration?.groupsConfiguration!\"\n [closeIconURL]=\"StartConversationConfiguration?.closeIconURL!\"\n [contactsStyle]=\"StartConversationConfiguration?.contactsStyle!\"\n [selectionMode]=\"StartConversationConfiguration?.selectionMode!\"\n [onClose]=\"StartConversationConfiguration?.onClose!\"\n [tabVisibility]=\"StartConversationConfiguration?.tabVisibility!\"\n [selectionLimit]=\"StartConversationConfiguration?.selectionLimit!\"\n [tabs]=\"StartConversationConfiguration?.tabs!\"\n [hideSubmitButton]=\"StartConversationConfiguration?.hideSubmitButton!\"\n [onSubmitButtonClick]=\"onContactSelected\"></cometchat-contacts>\n </div>\n <div class=\"cc-decorator__message--empty\"\n *ngIf=\"!user && !group && !showStartConversation\"\n [ngStyle]=\"emptyMessageStyle()\">\n <cometchat-label [text]=\"messageText\"\n [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n <ng-template #startConversationButton>\n <cometchat-button *ngIf=\"!hideStartNewConversation\"\n [iconURL]=\"startNewConversationIconURL\"\n [buttonStyle]=\"startConversationButtonStyle\"\n (cc-button-clicked)=\"triggerStartConversation()\"></cometchat-button>\n\n </ng-template>\n", styles: [".cc-with-messages__wrapper{display:flex;height:100%;width:100%;box-sizing:border-box;overflow:hidden}.cc-with-messages__sidebar{width:280px;height:100%;position:relative}.cc-with-messages__main,.cc-with-messages__start-conversation{width:calc(100% - 280px);height:100%}.mobile{width:100%!important;height:100%;position:absolute}.cc-decorator__message--empty{display:flex;justify-content:center;align-items:center}\n"] }]
360
+ args: [{ selector: "cometchat-conversations-with-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-with-messages__wrapper\" [ngStyle]=\"chatsWrapperStyles()\">\n <div class=\"cc-with-messages__sidebar\" [ngClass]=\"{mobile : isMobileView}\"\n [ngStyle]=\"sideBarStyle\">\n <cometchat-conversations #conversationRef\n [activeConversation]=\"activeConversation\"\n [onItemClick]=\"conversationConfiguration.onItemClick || onItemClick\"\n [conversationsStyle]=\"conversationConfiguration.conversationsStyle\"\n [statusIndicatorStyle]=\"conversationConfiguration?.statusIndicatorStyle\"\n [avatarStyle]=\"conversationConfiguration?.avatarStyle!\"\n [subtitleView]=\"conversationConfiguration.subtitleView\"\n [options]=\"conversationConfiguration.options\"\n [disableUsersPresence]=\"conversationConfiguration.disableUsersPresence\"\n [disableReceipt]=\"conversationConfiguration.disableReceipt\"\n [disableTyping]=\"conversationConfiguration.disableTyping\"\n [deliveredIcon]=\"conversationConfiguration.deliveredIcon\"\n [readIcon]=\"conversationConfiguration.readIcon\"\n [waitIcon]=\"conversationConfiguration.waitIcon\"\n [errorIcon]=\"conversationConfiguration.errorIcon\"\n [datePattern]=\"conversationConfiguration.datePattern\"\n [receiptStyle]=\"conversationConfiguration.receiptStyle\"\n [sentIcon]=\"conversationConfiguration.sentIcon\"\n [privateGroupIcon]=\"conversationConfiguration.privateGroupIcon\"\n [protectedGroupIcon]=\"conversationConfiguration.protectedGroupIcon\"\n [customSoundForMessages]=\"conversationConfiguration.customSoundForMessages\"\n [conversationsRequestBuilder]=\"conversationConfiguration.conversationsRequestBuilder\"\n [emptyStateView]=\"conversationConfiguration.emptyStateView\"\n [onSelect]=\"conversationConfiguration.onSelect\"\n [loadingIconURL]=\"conversationConfiguration.loadingIconURL\"\n [errorStateView]=\"conversationConfiguration.errorStateView\"\n [loadingStateView]=\"conversationConfiguration.loadingStateView\"\n [titleAlignment]=\"conversationConfiguration.titleAlignment\"\n [listItemView]=\"conversationConfiguration.listItemView\"\n [menu]=\"conversationConfiguration.menu || startConversationButton\"\n [hideSeparator]=\"conversationConfiguration.hideSeparator\"\n [hideError]=\"conversationConfiguration.hideError\"\n [selectionMode]=\"conversationConfiguration.selectionMode\"\n [disableSoundForMessages]=\"conversationConfiguration.disableSoundForMessages\"\n [deleteConversationDialogStyle]=\"conversationConfiguration.deleteConversationDialogStyle\"\n [badgeStyle]=\"conversationConfiguration.badgeStyle\"\n [dateStyle]=\"conversationConfiguration.dateStyle\"\n [listItemStyle]=\"conversationConfiguration.listItemStyle\"\n [backdropStyle]=\"conversationConfiguration.backdropStyle\"\n [textFormatters]=\"conversationConfiguration?.textFormatters\"\n [disableMentions]=\"conversationConfiguration.disableMentions\"></cometchat-conversations>\n </div>\n <div class=\"cc-with-messages__main\" [ngClass]=\"{mobile : isMobileView}\"\n *ngIf=\"!showStartConversation && (user || group)\">\n <!--Message List Screen-->\n <cometchat-messages #messagesRef [user]=\"user!\" [group]=\"group!\"\n [messageHeaderConfiguration]=\"messagesConfiguration.messageHeaderConfiguration\"\n [messageListConfiguration]=\"messagesConfiguration.messageListConfiguration\"\n [messageComposerConfiguration]=\"messagesConfiguration.messageComposerConfiguration\"\n [messagesStyle]=\"messagesConfiguration.messagesStyle\"\n [customSoundForIncomingMessages]=\"messagesConfiguration.customSoundForIncomingMessages\"\n [customSoundForOutgoingMessages]=\"messagesConfiguration.customSoundForOutgoingMessages\"\n [detailsConfiguration]=\"messagesConfiguration.detailsConfiguration\"\n [disableSoundForMessages]=\"messagesConfiguration.disableSoundForMessages\"\n [disableTyping]=\"messagesConfiguration.disableTyping\"\n [hideMessageComposer]=\"messagesConfiguration.hideMessageComposer\"\n [hideMessageHeader]=\"messagesConfiguration.hideMessageHeader\"\n [messageComposerView]=\"messagesConfiguration.messageComposerView\"\n [messageHeaderView]=\"messagesConfiguration.messageHeaderView\"\n [messageListView]=\"messagesConfiguration.messageListView\"\n [hideDetails]=\"messagesConfiguration.hideDetails!\"\n [threadedMessageConfiguration]=\"messagesConfiguration.threadedMessageConfiguration\">\n </cometchat-messages>\n <!--Message List Screen ENDS-->\n </div>\n <div class=\"cc-with-messages__start-conversation\"\n [ngClass]=\"{mobile : isMobileView}\" *ngIf=\"showStartConversation\">\n\n <cometchat-contacts [onItemClick]=\"onContactClicked\"\n [usersConfiguration]=\"StartConversationConfiguration?.usersConfiguration!\"\n [groupsConfiguration]=\"StartConversationConfiguration?.groupsConfiguration!\"\n [closeIconURL]=\"StartConversationConfiguration?.closeIconURL!\"\n [contactsStyle]=\"StartConversationConfiguration?.contactsStyle!\"\n [selectionMode]=\"StartConversationConfiguration?.selectionMode!\"\n [onClose]=\"StartConversationConfiguration?.onClose!\"\n [tabVisibility]=\"StartConversationConfiguration?.tabVisibility!\"\n [selectionLimit]=\"StartConversationConfiguration?.selectionLimit!\"\n [tabs]=\"StartConversationConfiguration?.tabs!\"\n [hideSubmitButton]=\"StartConversationConfiguration?.hideSubmitButton!\"></cometchat-contacts>\n </div>\n <div class=\"cc-decorator__message--empty\"\n *ngIf=\"!user && !group && !showStartConversation\"\n [ngStyle]=\"emptyMessageStyle()\">\n <cometchat-label [text]=\"messageText\"\n [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n <ng-template #startConversationButton>\n <cometchat-button *ngIf=\"!hideStartNewConversation\"\n [iconURL]=\"startNewConversationIconURL\"\n [buttonStyle]=\"startConversationButtonStyle\"\n (cc-button-clicked)=\"triggerStartConversation()\"></cometchat-button>\n\n </ng-template>\n", styles: [".cc-with-messages__wrapper{display:flex;height:100%;width:100%;box-sizing:border-box;overflow:hidden}.cc-with-messages__sidebar{width:280px;height:100%;position:relative}.cc-with-messages__main,.cc-with-messages__start-conversation{width:calc(100% - 280px);height:100%}.mobile{width:100%!important;height:100%;position:absolute}.cc-decorator__message--empty{display:flex;justify-content:center;align-items:center}\n"] }]
332
361
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }]; }, propDecorators: { user: [{
333
362
  type: Input
334
363
  }], group: [{
@@ -352,4 +381,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
352
381
  }], StartConversationConfiguration: [{
353
382
  type: Input
354
383
  }] } });
355
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMtd2l0aC1tZXNzYWdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdENvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXMvY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMtd2l0aC1tZXNzYWdlcy9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0Q29udmVyc2F0aW9uc1dpdGhNZXNzYWdlcy9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzL2NvbWV0Y2hhdC1jb252ZXJzYXRpb25zLXdpdGgtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLHVCQUF1QixFQUEyRCxNQUFNLGVBQWUsQ0FBQztBQUN0SixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDckksT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFtQixvQkFBb0IsRUFBRSx1QkFBdUIsRUFBNkksMkJBQTJCLEVBQXlDLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFblgsT0FBTywyQkFBMkIsQ0FBQTs7Ozs7OztBQUdsQzs7Ozs7Ozs7RUFRRTtBQU9GLE1BQU0sT0FBTywyQ0FBMkM7SUFnRHRELFlBQW9CLFVBQXNCLEVBQVUsR0FBc0IsRUFBVSxZQUFtQztRQUFuRyxlQUFVLEdBQVYs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S0FBSztnQkFDRyw4QkFBOEI7c0JBQXRDLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyw4QkFBOEI7c0JBQXRDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0IH0gZnJvbSBcIkBjb21ldGNoYXQvY2hhdC1zZGstamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgV2l0aE1lc3NhZ2VzU3R5bGUsIE1lc3NhZ2VzQ29uZmlndXJhdGlvbiwgQ29udmVyc2F0aW9uc0NvbmZpZ3VyYXRpb24sIENvbnRhY3RzQ29uZmlndXJhdGlvbiB9IGZyb20gJ0Bjb21ldGNoYXQvdWlraXQtc2hhcmVkJ1xuaW1wb3J0IHsgQ29tZXRDaGF0VGhlbWUsIGZvbnRIZWxwZXIsIGxvY2FsaXplLCBDb21ldENoYXRPcHRpb24sIENvbWV0Q2hhdEdyb3VwRXZlbnRzLCBDb21ldENoYXRVSUtpdENvbnN0YW50cywgSUdyb3VwTGVmdCwgSUdyb3VwTWVtYmVyQWRkZWQsIElHcm91cE1lbWJlcktpY2tlZEJhbm5lZCwgSUdyb3VwTWVtYmVyU2NvcGVDaGFuZ2VkLCBJTWVzc2FnZXMsIENvbWV0Q2hhdFVzZXJFdmVudHMsIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMsIENvbWV0Q2hhdENvbnZlcnNhdGlvbkV2ZW50cywgSUdyb3VwTWVtYmVySm9pbmVkLCBJT3duZXJzaGlwQ2hhbmdlZCwgQ29tZXRDaGF0VUlFdmVudHMgfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlcydcblxuaW1wb3J0ICdAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzJ1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IENvbWV0Q2hhdFRoZW1lU2VydmljZSB9IGZyb20gXCIuLi8uLi9Db21ldENoYXRUaGVtZS5zZXJ2aWNlXCI7XG4vKipcbipcbiogQ29tZXRDaGF0Q29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc0NvbXBvbmVudCBpcyBhIHdyYXBwZXIgY29tcG9uZW50IGZvciBDb21ldENoYXRNZXNzYWdlc0NvbXBvbmVudCBhbmQgQ29tZXRDaGF0Q29udmVyc2F0aW9ucyBjb21wb25lbnQgdG8gc2hvdyBjaGF0cyBhbmQgbWVzc2FnZXMgaW4gb25lIHNjcmVlblxuKlxuKiBAdmVyc2lvbiAxLjAuMFxuKiBAYXV0aG9yIENvbWV0Q2hhdFRlYW1cbiogQGNvcHlyaWdodCDCqSAyMDIyIENvbWV0Q2hhdCBJbmMuXG4qXG4qL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvbWV0Y2hhdC1jb252ZXJzYXRpb25zLXdpdGgtbWVzc2FnZXNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzLmNvbXBvbmVudC5zY3NzXCJdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ29tZXRDaGF0Q29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLy8gdGFraW5nIHJlZmVyZW5jZSBvZiBjb252ZXJzYXRpb25Db21wb25lbnQgYW5kIE1lc3NhZ2VzQ29tcG9uZW50XG4gIEBJbnB1dCgpIHVzZXIhOiBDb21ldENoYXQuVXNlciB8IG51bGw7XG4gIEBJbnB1dCgpIGdyb3VwITogQ29tZXRDaGF0Lkdyb3VwIHwgbnVsbDtcbiAgQElucHV0KCkgaXNNb2JpbGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2VUZXh0OiBzdHJpbmcgPSBsb2NhbGl6ZShcIk5PX0NIQVRTX1NFTEVDVEVEXCIpO1xuICBASW5wdXQoKSBjb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGU6IFdpdGhNZXNzYWdlc1N0eWxlID0ge307XG4gIEBJbnB1dCgpIG1lc3NhZ2VzQ29uZmlndXJhdGlvbjogTWVzc2FnZXNDb25maWd1cmF0aW9uID0gbmV3IE1lc3NhZ2VzQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIGNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb246IENvbnZlcnNhdGlvbnNDb25maWd1cmF0aW9uID0gbmV3IENvbnZlcnNhdGlvbnNDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgb25FcnJvcjogKChlcnJvcjogQ29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbikgPT4gdm9pZCkgfCBudWxsID0gKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpXG4gIH1cbiAgQElucHV0KCkgc3RhcnROZXdDb252ZXJzYXRpb25JY29uVVJMOiBzdHJpbmcgPSBcImFzc2V0cy9uZXctY2hhdC5zdmdcIlxuICBASW5wdXQoKSBoaWRlU3RhcnROZXdDb252ZXJzYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uOiBDb250YWN0c0NvbmZpZ3VyYXRpb24gPSBuZXcgQ29udGFjdHNDb25maWd1cmF0aW9uKHt9KVxuICB0aGVtZTogQ29tZXRDaGF0VGhlbWUgPSBuZXcgQ29tZXRDaGF0VGhlbWUoe30pO1xuICAvKipcbiAgICogUHJvcGVydGllcyBmb3IgaW50ZXJuYWwgdXNlXG4gICAqL1xuICBwdWJsaWMgc2hvd1N0YXJ0Q29udmVyc2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBsb2dnZWRJblVzZXIhOiBDb21ldENoYXQuVXNlciB8IG51bGw7XG4gIHB1YmxpYyBhY3RpdmVDb252ZXJzYXRpb24hOiBDb21ldENoYXQuQ29udmVyc2F0aW9uIHwgbnVsbDtcbiAgbGFiZWxTdHlsZTogYW55ID0ge1xuICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICB0ZXh0Rm9udDogXCI3MDAgMjJweCBJbnRlclwiLFxuICAgIHRleHRDb2xvcjogXCJyZ2JhKDIwLCAyMCwgMjAsIDAuMzMpXCJcbiAgfVxuXG4gIHB1YmxpYyBoaWRlU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcbiAgc3RhcnRDb252ZXJzYXRpb25CdXR0b25TdHlsZTogYW55ID0ge1xuXG4gIH1cbiAgLyoqXG4gICogRXZlbnRzXG4gICovXG4gIGNjR3JvdXBNZW1iZXJBZGRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cExlZnQhOiBTdWJzY3JpcHRpb247XG4gIGNjT3BlbkNoYXQhOiBTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJKb2luZWQhOiBTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJLaWNrZWQhOiBTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJCYW5uZWQhOiBTdWJzY3JpcHRpb247XG4gIGNjT3duZXJzaGlwQ2hhbmdlZCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cERlbGV0ZWQhOiBTdWJzY3JpcHRpb247XG4gIHNpZGVCYXJTdHlsZTogYW55ID0ge1xuXG4gIH1cbiAgcHVibGljIGNjQ29udmVyc2F0aW9uRGVsZXRlZCE6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0aGVtZVNlcnZpY2U6IENvbWV0Q2hhdFRoZW1lU2VydmljZSkge1xuICB9XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcblxuICAgIGlmIChjaGFuZ2VzW1wiaXNNb2JpbGVWaWV3XCJdKSB7XG4gICAgICBpZiAodGhpcy5pc01vYmlsZVZpZXcpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uaGlkZUJhY2tCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLnBhZGRpbmcgPSBcIjAgOHB4XCJcbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc1N0eWxlLnBhZGRpbmcgPSBcIjAgOHB4XCJcbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNTdHlsZS5wYWRkaW5nID0gXCIwIDhweFwiXG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5wYWRkaW5nID0gXCIwIDhweFwiXG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uID0geyAuLi50aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbiB9XG4gICAgICAgIHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmNvbnRhY3RzU3R5bGUucGFkZGluZyA9IFwiMCA4cHhcIjtcbiAgICAgICAgdGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24gPSB7IC4uLnRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uIH1cblxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbiA9IHsgLi4udGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24gfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoIXRoaXMuaXNNb2JpbGVWaWV3KSB7XG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25Db25maWd1cmF0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLmhlaWdodCA9IFwiNTAwcHhcIlxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uQ29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS53aWR0aCA9IFwiNTAwcHhcIlxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5oaWRlQmFja0J1dHRvbiA9IHRydWU7XG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmRldGFpbHNTdHlsZS5wYWRkaW5nID0gXCIwIDEwMHB4XCJcbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc1N0eWxlLnBhZGRpbmcgPSBcIjAgMTAwcHhcIlxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc1N0eWxlLnBhZGRpbmcgPSBcIjAgMTAwcHhcIlxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzU3R5bGUucGFkZGluZyA9IFwiMCAxMDBweFwiXG4gICAgICAgIHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmNvbnRhY3RzU3R5bGUucGFkZGluZyA9IFwiMCAxMDBweFwiO1xuICAgICAgICB0aGlzLlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbiA9IHsgLi4udGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24gfVxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbiA9IHsgLi4udGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24gfVxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbiA9IHsgLi4udGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24gfVxuXG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVCYWNrZHJvcEhlaWdodCgpXG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInVzZXJcIl0gfHwgY2hhbmdlc1tcImdyb3VwXCJdKSB7XG4gICAgICB0aGlzLnNldEFjdGl2ZUNoYXQoKTtcbiAgICB9XG4gIH1cbiAgdHJpZ2dlclN0YXJ0Q29udmVyc2F0aW9uKCkge1xuICAgIHRoaXMuc2hvd1N0YXJ0Q29udmVyc2F0aW9uID0gdHJ1ZTtcbiAgfVxuICBvbkJhY2sgPSAoKSA9PiB7XG4gICAgdGhpcy51c2VyID0gbnVsbFxuICAgIHRoaXMuZ3JvdXAgPSBudWxsXG4gICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gPSBudWxsXG4gIH1cbiAgc2V0V2l0aE1lc3NhZ2VzU3R5bGUoKSB7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTogV2l0aE1lc3NhZ2VzU3R5bGUgPSBuZXcgV2l0aE1lc3NhZ2VzU3R5bGUoe1xuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgYm9yZGVyUmFkaXVzOiBcIm5vbmVcIixcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MjAwKCl9YCxcbiAgICAgIG1lc3NhZ2VUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBtZXNzYWdlVGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS50aXRsZTEpLFxuICAgIH0pXG4gICAgdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUgPSB7XG4gICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gICAgICAuLi50aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZVxuICAgIH1cbiAgICB0aGlzLmxhYmVsU3R5bGUudGV4dEZvbnQgPSB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS5tZXNzYWdlVGV4dEZvbnRcbiAgICB0aGlzLmxhYmVsU3R5bGUudGV4dENvbG9yID0gdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUubWVzc2FnZVRleHRDb2xvclxuICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VzU3R5bGUuYm9yZGVyID0gdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZXNTdHlsZS5ib3JkZXIgPz8gXCJub25lXCJcbiAgICB0aGlzLmNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uY29udmVyc2F0aW9uc1N0eWxlLmJvcmRlciA9IHRoaXMuY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5jb252ZXJzYXRpb25zU3R5bGUuYm9yZGVyID8/IFwibm9uZVwiXG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LmNvbnZlcnNhdGlvbnNTdHlsZT8uYm9yZGVyIHx8IHRoaXMuY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uY29udmVyc2F0aW9uc1N0eWxlPy5ib3JkZXIgPT0gXCJub25lXCIpIHtcbiAgICAgIHRoaXMuc2lkZUJhclN0eWxlID0geyBib3JkZXJSaWdodDogdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUuYm9yZGVyIH1cblxuICAgIH1cbiAgfVxuICBwdWJsaWMgb25Db250YWN0U2VsZWN0ZWQgPSAodXNlcnM/OiBDb21ldENoYXQuVXNlcltdLCBncm91cHM/OiBDb21ldENoYXQuR3JvdXBbXSkgPT4ge1xuICAgIHRoaXMuc2hvd1N0YXJ0Q29udmVyc2F0aW9uID0gZmFsc2U7XG4gICAgaWYgKHVzZXJzICYmIHVzZXJzWzBdKSB7XG4gICAgICB0aGlzLmdyb3VwID0gbnVsbFxuICAgICAgdGhpcy51c2VyID0gdXNlcnNbMF07XG5cbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgIH1cbiAgICBpZiAoZ3JvdXBzICYmIGdyb3Vwc1swXSkge1xuICAgICAgdGhpcy51c2VyID0gbnVsbFxuICAgICAgdGhpcy5ncm91cCA9IGdyb3Vwc1swXTtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgIH1cbiAgfVxuICBwdWJsaWMgb25JdGVtQ2xpY2s6ICgoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiB2b2lkKSA9IChjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IHtcbiAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiA9IGNvbnZlcnNhdGlvblxuICAgIHRoaXMuc2hvd1N0YXJ0Q29udmVyc2F0aW9uID0gZmFsc2U7XG4gICAgaWYgKGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25UeXBlKCkgJiYgY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvblR5cGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXIpIHtcbiAgICAgIHRoaXMuZ3JvdXAgPSBudWxsXG4gICAgICB0aGlzLnVzZXIgPSBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Vc2VyO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25UeXBlKCkgJiYgY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvblR5cGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLmdyb3VwKSB7XG4gICAgICB0aGlzLnVzZXIgPSBudWxsXG4gICAgICB0aGlzLmdyb3VwID0gY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuR3JvdXBcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgIH1cbiAgfTtcbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudXBkYXRlQmFja2Ryb3BIZWlnaHQoKVxuICB9XG4gIHVwZGF0ZUJhY2tkcm9wSGVpZ2h0KCkge1xuICAgIGNvbnN0IGRpdkhlaWdodCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBkaXZXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIGxldCBiYWNrZHJvcFN0eWxlID0ge1xuICAgICAgaGVpZ2h0OiBkaXZIZWlnaHQgKyBcInB4XCIsXG4gICAgICB3aWR0aDogZGl2V2lkdGggKyBcInB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiBcInJnYmEoMCwgMCwgMCwgMC41KVwiLFxuICAgICAgcG9zaXRpb246IFwiZml4ZWRcIlxuICAgIH1cbiAgICBpZiAodGhpcy5pc01vYmlsZVZpZXcpIHtcbiAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLnRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcFN0eWxlLmhlaWdodCA9IChkaXZIZWlnaHQgLSAzMCkgKyBcInB4XCI7XG4gICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24udHJhbnNmZXJPd25lcnNoaXBTdHlsZS53aWR0aCA9IGRpdldpZHRoICsgXCJweFwiO1xuICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvbkNvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUuaGVpZ2h0ID0gZGl2SGVpZ2h0ICsgXCJweFwiO1xuICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvbkNvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUud2lkdGggPSBkaXZXaWR0aCArIFwicHhcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24udHJhbnNmZXJPd25lcnNoaXBTdHlsZS5oZWlnaHQgPSBcIjY1MHB4XCI7XG4gICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24udHJhbnNmZXJPd25lcnNoaXBTdHlsZS53aWR0aCA9IFwiMzYwcHhcIjtcbiAgICB9XG4gICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgPSBiYWNrZHJvcFN0eWxlO1xuICAgIHRoaXMuY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlID0gYmFja2Ryb3BTdHlsZTtcbiAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlID0gYmFja2Ryb3BTdHlsZTtcbiAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgPSBiYWNrZHJvcFN0eWxlO1xuICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgPSBiYWNrZHJvcFN0eWxlO1xuICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSA9IGJhY2tkcm9wU3R5bGU7XG5cbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuICBzZXRBY3RpdmVDaGF0KCkge1xuICAgIGxldCB0eXBlOiBzdHJpbmcgPSB0aGlzLnVzZXIgPyBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXIgOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLmdyb3VwXG4gICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gPSBudWxsXG4gICAgbGV0IGNvbnZlcnNhdGlvbldpdGg6IHN0cmluZyA9IHRoaXMudXNlcj8uZ2V0VWlkKCkhIHx8IHRoaXMuZ3JvdXA/LmdldEd1aWQoKSFcbiAgICBDb21ldENoYXQuZ2V0Q29udmVyc2F0aW9uKGNvbnZlcnNhdGlvbldpdGgsIHR5cGUpLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4ge1xuICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gPSBjb252ZXJzYXRpb25cbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cbiAgY2xvc2VTdGFydENvbnZlcnNhdGlvbiA9ICgpID0+IHtcbiAgICB0aGlzLnNob3dTdGFydENvbnZlcnNhdGlvbiA9IGZhbHNlO1xuICB9XG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnVzZXJzQ29uZmlndXJhdGlvbi51c2Vyc1N0eWxlLmJvcmRlciA9IFwibm9uZVwiXG4gICAgdGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uZ3JvdXBzQ29uZmlndXJhdGlvbi5ncm91cHNTdHlsZS5ib3JkZXIgPSBcIm5vbmVcIlxuICAgIHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uLm9uQ2xvc2UgPSB0aGlzLmNsb3NlU3RhcnRDb252ZXJzYXRpb25cbiAgICB0aGlzLnN0YXJ0Q29udmVyc2F0aW9uQnV0dG9uU3R5bGUgPSB7XG4gICAgICBoZWlnaHQ6IFwiMjRweFwiLFxuICAgICAgd2lkdGg6IFwiMjRweFwiLFxuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIGJvcmRlclJhZGl1czogJzAnLFxuICAgICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgYnV0dG9uSWNvblRpbnQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpXG4gICAgfVxuICAgIHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uID0geyAuLi50aGlzLlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbiB9XG4gICAgdGhpcy5zZXRXaXRoTWVzc2FnZXNTdHlsZSgpXG4gICAgaWYgKCF0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5vbkJhY2spIHtcbiAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm9uQmFjayA9IHRoaXMub25CYWNrXG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaWJlVG9FdmVudHMoKTtcbiAgICBDb21ldENoYXQuZ2V0TG9nZ2VkaW5Vc2VyKClcbiAgICAgIC50aGVuKCh1c2VyOiBDb21ldENoYXQuVXNlciB8IG51bGwpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZWRJblVzZXIgPSB1c2VyO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlVG9FdmVudHMoKTtcbiAgfVxuICAvLyBzdWJzY3JpYmUgdG8gZ2xvYmFsIGV2ZW50c1xuICBzdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNjQ29udmVyc2F0aW9uRGVsZXRlZCA9IENvbWV0Q2hhdENvbnZlcnNhdGlvbkV2ZW50cy5jY0NvbnZlcnNhdGlvbkRlbGV0ZWQuc3Vic2NyaWJlKChjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IHtcbiAgICAgIHRoaXMucmVtb3ZlQWN0aXZlQ2hhdExpc3QoY29udmVyc2F0aW9uKSAvL3RvIG1ha2UgbSBtZXNzYWdlcyBzZWN0aW9uIGVtcHR5IGFmdGVyIGRlbGV0aW5nIGNvbnZlcnNhdGlvbiBmcm9tIGNvbnZlcnNhdGlvbmxpc3RcbiAgICB9KVxuICAgIHRoaXMuY2NHcm91cERlbGV0ZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwRGVsZXRlZC5zdWJzY3JpYmUoKGdyb3VwOiBDb21ldENoYXQuR3JvdXApID0+IHtcbiAgICAgIGlmICh0aGlzLmdyb3VwICYmIGdyb3VwLmdldEd1aWQoKSA9PSB0aGlzLmdyb3VwLmdldEd1aWQoKSkge1xuICAgICAgICB0aGlzLmdyb3VwID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NHcm91cE1lbWJlckFkZGVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cE1lbWJlckFkZGVkLnN1YnNjcmliZSgoaXRlbTogSUdyb3VwTWVtYmVyQWRkZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAuZ2V0R3VpZCgpID09IGl0ZW0/LnVzZXJBZGRlZEluIS5nZXRHdWlkKCkpIHtcbiAgICAgICAgdGhpcy5ncm91cCA9IGl0ZW0/LnVzZXJBZGRlZEluO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NHcm91cE1lbWJlckJhbm5lZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBNZW1iZXJCYW5uZWQuc3Vic2NyaWJlKChpdGVtOiBJR3JvdXBNZW1iZXJLaWNrZWRCYW5uZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAuZ2V0R3VpZCgpID09IGl0ZW0/LmtpY2tlZEZyb20hLmdldEd1aWQoKSkge1xuICAgICAgICB0aGlzLmdyb3VwID0gaXRlbT8ua2lja2VkRnJvbTtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJKb2luZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTWVtYmVySm9pbmVkLnN1YnNjcmliZSgoaXRlbTogSUdyb3VwTWVtYmVySm9pbmVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtPy5qb2luZWRHcm91cCEuZ2V0R3VpZCgpKSB7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBpdGVtPy5qb2luZWRHcm91cDtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJLaWNrZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTWVtYmVyS2lja2VkLnN1YnNjcmliZSgoaXRlbTogSUdyb3VwTWVtYmVyS2lja2VkQmFubmVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtPy5raWNrZWRGcm9tIS5nZXRHdWlkKCkpIHtcbiAgICAgICAgdGhpcy5ncm91cCA9IGl0ZW0/LmtpY2tlZEZyb207XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY093bmVyc2hpcENoYW5nZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY093bmVyc2hpcENoYW5nZWQuc3Vic2NyaWJlKChpdGVtOiBJT3duZXJzaGlwQ2hhbmdlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gaXRlbT8uZ3JvdXAhLmdldEd1aWQoKSkge1xuICAgICAgICB0aGlzLmdyb3VwID0gaXRlbT8uZ3JvdXA7XG4gICAgICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uPy5zZXRDb252ZXJzYXRpb25XaXRoKHRoaXMuZ3JvdXApXG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NHcm91cExlZnQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTGVmdC5zdWJzY3JpYmUoKGl0ZW06IElHcm91cExlZnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAuZ2V0R3VpZCgpID09IGl0ZW0/LmxlZnRHcm91cCEuZ2V0R3VpZCgpICYmIHRoaXMubG9nZ2VkSW5Vc2VyPy5nZXRVaWQoKSA9PSBpdGVtPy51c2VyTGVmdD8uZ2V0VWlkKCkpIHtcbiAgICAgICAgdGhpcy5ncm91cCA9IG51bGw7XG4gICAgICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgfSlcbiAgICAvLyBvcGVuIGNoYXQgYW5kIG1hcmsgYXMgYWN0aXZlIGNvbnZlcnNhdGlvblxuICAgIHRoaXMuY2NPcGVuQ2hhdCA9IENvbWV0Q2hhdFVJRXZlbnRzLmNjT3BlbkNoYXQuc3Vic2NyaWJlKChpdGVtKSA9PiB7XG4gICAgICB0aGlzLnVzZXIgPSBpdGVtLnVzZXIgPyBpdGVtLnVzZXIgOiBudWxsO1xuICAgICAgdGhpcy5ncm91cCA9IGl0ZW0uZ3JvdXAgPyBpdGVtLmdyb3VwIDogbnVsbDtcbiAgICAgIHRoaXMuc2V0QWN0aXZlQ2hhdCgpXG4gICAgfSlcbiAgfVxuICAvLyB1bnN1YnNjcmliZSB0byBzdWJzY3JpYmVkIGV2ZW50cy5cbiAgdW5zdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNjQ29udmVyc2F0aW9uRGVsZXRlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBEZWxldGVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cE1lbWJlckFkZGVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cE1lbWJlckJhbm5lZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJKb2luZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyS2lja2VkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NPd25lcnNoaXBDaGFuZ2VkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cExlZnQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY09wZW5DaGF0Py51bnN1YnNjcmliZSgpO1xuICB9XG4gIC8qKlxuICAgKiByZW1vdmUgYWN0aXZlIGNoYXQgc2NyZWVuIGFmdGVyIGRlbGV0aW5nIHRoZSBjb252ZXJzYXRpb24uXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5Db252ZXJzYXRpb259IGNvbnZlcnNhdGlvblxuICAgKi9cbiAgcmVtb3ZlQWN0aXZlQ2hhdExpc3QoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSB7XG4gICAgY29uc3QgY29udmVyc2F0aW9uVHlwZSA9IGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25UeXBlKCk7XG4gICAgY29uc3QgY29udmVyc2F0aW9uV2l0aCA9IGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25XaXRoKCk7XG4gICAgaWYgKGNvbnZlcnNhdGlvblR5cGUgPT09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUudXNlciAmJiB0aGlzLnVzZXIgJiYgdGhpcy51c2VyLmdldFVpZCgpID09PSAoY29udmVyc2F0aW9uV2l0aCBhcyBDb21ldENoYXQuVXNlcikuZ2V0VWlkKCkpIHtcbiAgICAgIHRoaXMudXNlciA9IG51bGw7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIGlmIChjb252ZXJzYXRpb25UeXBlID09PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLmdyb3VwICYmIHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT09IChjb252ZXJzYXRpb25XaXRoIGFzIENvbWV0Q2hhdC5Hcm91cCkuZ2V0R3VpZCgpKSB7XG4gICAgICB0aGlzLmdyb3VwID0gbnVsbDtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBlbXB0eU1lc3NhZ2VTdHlsZSA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYmFja2dyb3VuZDogdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUuYmFja2dyb3VuZCB8fCB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGhlaWdodDogdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUuaGVpZ2h0LFxuICAgICAgd2lkdGg6IGBjYWxjKCR7dGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUud2lkdGh9IC0gMjgwcHgpYCxcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLmJvcmRlclJhZGl1cyxcbiAgICB9XG4gIH1cbiAgY2hhdHNXcmFwcGVyU3R5bGVzID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6IHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLmhlaWdodCxcbiAgICAgIHdpZHRoOiB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS53aWR0aCxcbiAgICAgIGJvcmRlcjogdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUuYm9yZGVyLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS5ib3JkZXJSYWRpdXMsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS5iYWNrZ3JvdW5kIHx8IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNjLXdpdGgtbWVzc2FnZXNfX3dyYXBwZXJcIiBbbmdTdHlsZV09XCJjaGF0c1dyYXBwZXJTdHlsZXMoKVwiPlxuICA8ZGl2IGNsYXNzPVwiY2Mtd2l0aC1tZXNzYWdlc19fc2lkZWJhclwiIFtuZ0NsYXNzXT1cInttb2JpbGUgOiBpc01vYmlsZVZpZXd9XCJcbiAgICBbbmdTdHlsZV09XCJzaWRlQmFyU3R5bGVcIj5cbiAgICA8Y29tZXRjaGF0LWNvbnZlcnNhdGlvbnMgI2NvbnZlcnNhdGlvblJlZlxuICAgICAgW2FjdGl2ZUNvbnZlcnNhdGlvbl09XCJhY3RpdmVDb252ZXJzYXRpb25cIlxuICAgICAgW29uSXRlbUNsaWNrXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ub25JdGVtQ2xpY2sgfHwgb25JdGVtQ2xpY2tcIlxuICAgICAgW2NvbnZlcnNhdGlvbnNTdHlsZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmNvbnZlcnNhdGlvbnNTdHlsZVwiXG4gICAgICBbc3RhdHVzSW5kaWNhdG9yU3R5bGVdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uc3RhdHVzSW5kaWNhdG9yU3R5bGVcIlxuICAgICAgW2F2YXRhclN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LmF2YXRhclN0eWxlIVwiXG4gICAgICBbc3VidGl0bGVWaWV3XT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uc3VidGl0bGVWaWV3XCJcbiAgICAgIFtvcHRpb25zXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ub3B0aW9uc1wiXG4gICAgICBbZGlzYWJsZVVzZXJzUHJlc2VuY2VdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kaXNhYmxlVXNlcnNQcmVzZW5jZVwiXG4gICAgICBbZGlzYWJsZVJlY2VpcHRdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kaXNhYmxlUmVjZWlwdFwiXG4gICAgICBbZGlzYWJsZVR5cGluZ109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmRpc2FibGVUeXBpbmdcIlxuICAgICAgW2RlbGl2ZXJlZEljb25dPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kZWxpdmVyZWRJY29uXCJcbiAgICAgIFtyZWFkSWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnJlYWRJY29uXCJcbiAgICAgIFt3YWl0SWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLndhaXRJY29uXCJcbiAgICAgIFtlcnJvckljb25dPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5lcnJvckljb25cIlxuICAgICAgW2RhdGVQYXR0ZXJuXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uZGF0ZVBhdHRlcm5cIlxuICAgICAgW3JlY2VpcHRTdHlsZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnJlY2VpcHRTdHlsZVwiXG4gICAgICBbc2VudEljb25dPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5zZW50SWNvblwiXG4gICAgICBbcHJpdmF0ZUdyb3VwSWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnByaXZhdGVHcm91cEljb25cIlxuICAgICAgW3Byb3RlY3RlZEdyb3VwSWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnByb3RlY3RlZEdyb3VwSWNvblwiXG4gICAgICBbY3VzdG9tU291bmRGb3JNZXNzYWdlc109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmN1c3RvbVNvdW5kRm9yTWVzc2FnZXNcIlxuICAgICAgW2NvbnZlcnNhdGlvbnNSZXF1ZXN0QnVpbGRlcl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmNvbnZlcnNhdGlvbnNSZXF1ZXN0QnVpbGRlclwiXG4gICAgICBbZW1wdHlTdGF0ZVZpZXddPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5lbXB0eVN0YXRlVmlld1wiXG4gICAgICBbb25TZWxlY3RdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5vblNlbGVjdFwiXG4gICAgICBbbG9hZGluZ0ljb25VUkxdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5sb2FkaW5nSWNvblVSTFwiXG4gICAgICBbZXJyb3JTdGF0ZVZpZXddPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5lcnJvclN0YXRlVmlld1wiXG4gICAgICBbbG9hZGluZ1N0YXRlVmlld109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmxvYWRpbmdTdGF0ZVZpZXdcIlxuICAgICAgW3RpdGxlQWxpZ25tZW50XT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24udGl0bGVBbGlnbm1lbnRcIlxuICAgICAgW2xpc3RJdGVtVmlld109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmxpc3RJdGVtVmlld1wiXG4gICAgICBbbWVudV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLm1lbnUgfHwgc3RhcnRDb252ZXJzYXRpb25CdXR0b25cIlxuICAgICAgW2hpZGVTZXBhcmF0b3JdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5oaWRlU2VwYXJhdG9yXCJcbiAgICAgIFtoaWRlRXJyb3JdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5oaWRlRXJyb3JcIlxuICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5zZWxlY3Rpb25Nb2RlXCJcbiAgICAgIFtkaXNhYmxlU291bmRGb3JNZXNzYWdlc109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmRpc2FibGVTb3VuZEZvck1lc3NhZ2VzXCJcbiAgICAgIFtkZWxldGVDb252ZXJzYXRpb25EaWFsb2dTdHlsZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmRlbGV0ZUNvbnZlcnNhdGlvbkRpYWxvZ1N0eWxlXCJcbiAgICAgIFtiYWRnZVN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uYmFkZ2VTdHlsZVwiXG4gICAgICBbZGF0ZVN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uZGF0ZVN0eWxlXCJcbiAgICAgIFtsaXN0SXRlbVN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ubGlzdEl0ZW1TdHlsZVwiXG4gICAgICBbYmFja2Ryb3BTdHlsZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGVcIlxuICAgICAgW3RleHRGb3JtYXR0ZXJzXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LnRleHRGb3JtYXR0ZXJzXCJcbiAgICAgIFtkaXNhYmxlTWVudGlvbnNdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kaXNhYmxlTWVudGlvbnNcIj48L2NvbWV0Y2hhdC1jb252ZXJzYXRpb25zPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNjLXdpdGgtbWVzc2FnZXNfX21haW5cIiBbbmdDbGFzc109XCJ7bW9iaWxlIDogaXNNb2JpbGVWaWV3fVwiXG4gICAgKm5nSWY9XCIhc2hvd1N0YXJ0Q29udmVyc2F0aW9uICYmICh1c2VyIHx8IGdyb3VwKVwiPlxuICAgIDwhLS1NZXNzYWdlIExpc3QgU2NyZWVuLS0+XG4gICAgPGNvbWV0Y2hhdC1tZXNzYWdlcyAjbWVzc2FnZXNSZWYgW3VzZXJdPVwidXNlciFcIiBbZ3JvdXBdPVwiZ3JvdXAhXCJcbiAgICAgIFttZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbl09XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb25cIlxuICAgICAgW21lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbl09XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RDb25maWd1cmF0aW9uXCJcbiAgICAgIFttZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uXCJcbiAgICAgIFttZXNzYWdlc1N0eWxlXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlc1N0eWxlXCJcbiAgICAgIFtjdXN0b21Tb3VuZEZvckluY29taW5nTWVzc2FnZXNdPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLmN1c3RvbVNvdW5kRm9ySW5jb21pbmdNZXNzYWdlc1wiXG4gICAgICBbY3VzdG9tU291bmRGb3JPdXRnb2luZ01lc3NhZ2VzXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5jdXN0b21Tb3VuZEZvck91dGdvaW5nTWVzc2FnZXNcIlxuICAgICAgW2RldGFpbHNDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvblwiXG4gICAgICBbZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNdPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLmRpc2FibGVTb3VuZEZvck1lc3NhZ2VzXCJcbiAgICAgIFtkaXNhYmxlVHlwaW5nXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kaXNhYmxlVHlwaW5nXCJcbiAgICAgIFtoaWRlTWVzc2FnZUNvbXBvc2VyXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5oaWRlTWVzc2FnZUNvbXBvc2VyXCJcbiAgICAgIFtoaWRlTWVzc2FnZUhlYWRlcl09XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24uaGlkZU1lc3NhZ2VIZWFkZXJcIlxuICAgICAgW21lc3NhZ2VDb21wb3NlclZpZXddPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlclZpZXdcIlxuICAgICAgW21lc3NhZ2VIZWFkZXJWaWV3XT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyVmlld1wiXG4gICAgICBbbWVzc2FnZUxpc3RWaWV3XT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdFZpZXdcIlxuICAgICAgW2hpZGVEZXRhaWxzXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5oaWRlRGV0YWlscyFcIlxuICAgICAgW3RocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb25dPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLnRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb25cIj5cbiAgICA8L2NvbWV0Y2hhdC1tZXNzYWdlcz5cbiAgICA8IS0tTWVzc2FnZSBMaXN0IFNjcmVlbiBFTkRTLS0+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2Mtd2l0aC1tZXNzYWdlc19fc3RhcnQtY29udmVyc2F0aW9uXCJcbiAgICBbbmdDbGFzc109XCJ7bW9iaWxlIDogaXNNb2JpbGVWaWV3fVwiICpuZ0lmPVwic2hvd1N0YXJ0Q29udmVyc2F0aW9uXCI+XG5cbiAgICA8Y29tZXRjaGF0LWNvbnRhY3RzXG4gICAgICBbdXNlcnNDb25maWd1cmF0aW9uXT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8udXNlcnNDb25maWd1cmF0aW9uIVwiXG4gICAgICBbZ3JvdXBzQ29uZmlndXJhdGlvbl09XCJTdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/Lmdyb3Vwc0NvbmZpZ3VyYXRpb24hXCJcbiAgICAgIFtjbG9zZUljb25VUkxdPVwiU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uPy5jbG9zZUljb25VUkwhXCJcbiAgICAgIFtjb250YWN0c1N0eWxlXT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uY29udGFjdHNTdHlsZSFcIlxuICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uPy5zZWxlY3Rpb25Nb2RlIVwiXG4gICAgICBbb25DbG9zZV09XCJTdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/Lm9uQ2xvc2UhXCJcbiAgICAgIFt0YWJWaXNpYmlsaXR5XT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8udGFiVmlzaWJpbGl0eSFcIlxuICAgICAgW3NlbGVjdGlvbkxpbWl0XT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uc2VsZWN0aW9uTGltaXQhXCJcbiAgICAgIFt0YWJzXT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8udGFicyFcIlxuICAgICAgW2hpZGVTdWJtaXRCdXR0b25dPVwiU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uPy5oaWRlU3VibWl0QnV0dG9uIVwiXG4gICAgICBbb25TdWJtaXRCdXR0b25DbGlja109XCJvbkNvbnRhY3RTZWxlY3RlZFwiPjwvY29tZXRjaGF0LWNvbnRhY3RzPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNjLWRlY29yYXRvcl9fbWVzc2FnZS0tZW1wdHlcIlxuICAgICpuZ0lmPVwiIXVzZXIgJiYgIWdyb3VwICYmICFzaG93U3RhcnRDb252ZXJzYXRpb25cIlxuICAgIFtuZ1N0eWxlXT1cImVtcHR5TWVzc2FnZVN0eWxlKClcIj5cbiAgICA8Y29tZXRjaGF0LWxhYmVsIFt0ZXh0XT1cIm1lc3NhZ2VUZXh0XCJcbiAgICAgIFtsYWJlbFN0eWxlXT1cImxhYmVsU3R5bGVcIj48L2NvbWV0Y2hhdC1sYWJlbD5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjc3RhcnRDb252ZXJzYXRpb25CdXR0b24+XG4gICAgPGNvbWV0Y2hhdC1idXR0b24gKm5nSWY9XCIhaGlkZVN0YXJ0TmV3Q29udmVyc2F0aW9uXCJcbiAgICAgIFtpY29uVVJMXT1cInN0YXJ0TmV3Q29udmVyc2F0aW9uSWNvblVSTFwiXG4gICAgICBbYnV0dG9uU3R5bGVdPVwic3RhcnRDb252ZXJzYXRpb25CdXR0b25TdHlsZVwiXG4gICAgICAoY2MtYnV0dG9uLWNsaWNrZWQpPVwidHJpZ2dlclN0YXJ0Q29udmVyc2F0aW9uKClcIj48L2NvbWV0Y2hhdC1idXR0b24+XG5cbiAgPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
384
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMtd2l0aC1tZXNzYWdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdENvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXMvY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMtd2l0aC1tZXNzYWdlcy9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0Q29udmVyc2F0aW9uc1dpdGhNZXNzYWdlcy9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzL2NvbWV0Y2hhdC1jb252ZXJzYXRpb25zLXdpdGgtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLHVCQUF1QixFQUEyRCxNQUFNLGVBQWUsQ0FBQztBQUN0SixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDckksT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFtQixvQkFBb0IsRUFBRSx1QkFBdUIsRUFBNkksMkJBQTJCLEVBQXlDLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFblgsT0FBTywyQkFBMkIsQ0FBQTs7Ozs7OztBQUdsQzs7Ozs7Ozs7RUFRRTtBQU9GLE1BQU0sT0FBTywyQ0FBMkM7SUFrRHRELFlBQW9CLFVBQXNCLEVBQVUsR0FBc0IsRUFBVSxZQUFtQztRQUFuRyxlQUFVLEdBQVYs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UjtJQUNILENBQUM7O3lJQXZXVSwyQ0FBMkM7NkhBQTNDLDJDQUEyQyx3akJDdkJ4RCw0L0xBZ0dBOzRGRHpFYSwyQ0FBMkM7a0JBTnZELFNBQVM7K0JBQ0UsdUNBQXVDLG1CQUdoQyx1QkFBdUIsQ0FBQyxNQUFNO3FLQUl0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyw4QkFBOEI7c0JBQXRDLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyw4QkFBOEI7c0JBQXRDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0IH0gZnJvbSBcIkBjb21ldGNoYXQvY2hhdC1zZGstamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgV2l0aE1lc3NhZ2VzU3R5bGUsIE1lc3NhZ2VzQ29uZmlndXJhdGlvbiwgQ29udmVyc2F0aW9uc0NvbmZpZ3VyYXRpb24sIENvbnRhY3RzQ29uZmlndXJhdGlvbiB9IGZyb20gJ0Bjb21ldGNoYXQvdWlraXQtc2hhcmVkJ1xuaW1wb3J0IHsgQ29tZXRDaGF0VGhlbWUsIGZvbnRIZWxwZXIsIGxvY2FsaXplLCBDb21ldENoYXRPcHRpb24sIENvbWV0Q2hhdEdyb3VwRXZlbnRzLCBDb21ldENoYXRVSUtpdENvbnN0YW50cywgSUdyb3VwTGVmdCwgSUdyb3VwTWVtYmVyQWRkZWQsIElHcm91cE1lbWJlcktpY2tlZEJhbm5lZCwgSUdyb3VwTWVtYmVyU2NvcGVDaGFuZ2VkLCBJTWVzc2FnZXMsIENvbWV0Q2hhdFVzZXJFdmVudHMsIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMsIENvbWV0Q2hhdENvbnZlcnNhdGlvbkV2ZW50cywgSUdyb3VwTWVtYmVySm9pbmVkLCBJT3duZXJzaGlwQ2hhbmdlZCwgQ29tZXRDaGF0VUlFdmVudHMgfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlcydcblxuaW1wb3J0ICdAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzJ1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IENvbWV0Q2hhdFRoZW1lU2VydmljZSB9IGZyb20gXCIuLi8uLi9Db21ldENoYXRUaGVtZS5zZXJ2aWNlXCI7XG4vKipcbipcbiogQ29tZXRDaGF0Q29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc0NvbXBvbmVudCBpcyBhIHdyYXBwZXIgY29tcG9uZW50IGZvciBDb21ldENoYXRNZXNzYWdlc0NvbXBvbmVudCBhbmQgQ29tZXRDaGF0Q29udmVyc2F0aW9ucyBjb21wb25lbnQgdG8gc2hvdyBjaGF0cyBhbmQgbWVzc2FnZXMgaW4gb25lIHNjcmVlblxuKlxuKiBAdmVyc2lvbiAxLjAuMFxuKiBAYXV0aG9yIENvbWV0Q2hhdFRlYW1cbiogQGNvcHlyaWdodCDCqSAyMDIyIENvbWV0Q2hhdCBJbmMuXG4qXG4qL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvbWV0Y2hhdC1jb252ZXJzYXRpb25zLXdpdGgtbWVzc2FnZXNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzLmNvbXBvbmVudC5zY3NzXCJdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ29tZXRDaGF0Q29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLy8gdGFraW5nIHJlZmVyZW5jZSBvZiBjb252ZXJzYXRpb25Db21wb25lbnQgYW5kIE1lc3NhZ2VzQ29tcG9uZW50XG4gIEBJbnB1dCgpIHVzZXIhOiBDb21ldENoYXQuVXNlciB8IG51bGw7XG4gIEBJbnB1dCgpIGdyb3VwITogQ29tZXRDaGF0Lkdyb3VwIHwgbnVsbDtcbiAgQElucHV0KCkgaXNNb2JpbGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2VUZXh0OiBzdHJpbmcgPSBsb2NhbGl6ZShcIk5PX0NIQVRTX1NFTEVDVEVEXCIpO1xuICBASW5wdXQoKSBjb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGU6IFdpdGhNZXNzYWdlc1N0eWxlID0ge307XG4gIEBJbnB1dCgpIG1lc3NhZ2VzQ29uZmlndXJhdGlvbjogTWVzc2FnZXNDb25maWd1cmF0aW9uID0gbmV3IE1lc3NhZ2VzQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIGNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb246IENvbnZlcnNhdGlvbnNDb25maWd1cmF0aW9uID0gbmV3IENvbnZlcnNhdGlvbnNDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgb25FcnJvcjogKChlcnJvcjogQ29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbikgPT4gdm9pZCkgfCBudWxsID0gKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpXG4gIH1cbiAgQElucHV0KCkgc3RhcnROZXdDb252ZXJzYXRpb25JY29uVVJMOiBzdHJpbmcgPSBcImFzc2V0cy9uZXctY2hhdC5zdmdcIlxuICBASW5wdXQoKSBoaWRlU3RhcnROZXdDb252ZXJzYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uOiBDb250YWN0c0NvbmZpZ3VyYXRpb24gPSBuZXcgQ29udGFjdHNDb25maWd1cmF0aW9uKHt9KVxuICB0aGVtZTogQ29tZXRDaGF0VGhlbWUgPSBuZXcgQ29tZXRDaGF0VGhlbWUoe30pO1xuICAvKipcbiAgICogUHJvcGVydGllcyBmb3IgaW50ZXJuYWwgdXNlXG4gICAqL1xuICBwdWJsaWMgc2hvd1N0YXJ0Q29udmVyc2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBsb2dnZWRJblVzZXIhOiBDb21ldENoYXQuVXNlciB8IG51bGw7XG4gIHB1YmxpYyBhY3RpdmVDb252ZXJzYXRpb24hOiBDb21ldENoYXQuQ29udmVyc2F0aW9uIHwgbnVsbDtcbiAgbGFiZWxTdHlsZTogYW55ID0ge1xuICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICB0ZXh0Rm9udDogXCI3MDAgMjJweCBJbnRlclwiLFxuICAgIHRleHRDb2xvcjogXCJyZ2JhKDIwLCAyMCwgMjAsIDAuMzMpXCJcbiAgfVxuXG4gIHB1YmxpYyBoaWRlU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcbiAgc3RhcnRDb252ZXJzYXRpb25CdXR0b25TdHlsZTogYW55ID0ge1xuXG4gIH1cbiAgLyoqXG4gICogRXZlbnRzXG4gICovXG4gIGNjR3JvdXBNZW1iZXJBZGRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cExlZnQhOiBTdWJzY3JpcHRpb247XG4gIGNjT3BlbkNoYXQhOiBTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJKb2luZWQhOiBTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJLaWNrZWQhOiBTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJCYW5uZWQhOiBTdWJzY3JpcHRpb247XG4gIGNjT3duZXJzaGlwQ2hhbmdlZCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cERlbGV0ZWQhOiBTdWJzY3JpcHRpb247XG4gIHNpZGVCYXJTdHlsZTogYW55ID0ge1xuXG4gIH1cbiAgcHVibGljIGdyb3VwTGlzdGVuZXJJZDogc3RyaW5nID0gXCJ3aXRobWVzc2FnZXNfZ3JvdXBfXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICBwdWJsaWMgY2NDb252ZXJzYXRpb25EZWxldGVkITogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHRoZW1lU2VydmljZTogQ29tZXRDaGF0VGhlbWVTZXJ2aWNlKSB7XG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuXG4gICAgaWYgKGNoYW5nZXNbXCJpc01vYmlsZVZpZXdcIl0pIHtcbiAgICAgIGlmICh0aGlzLmlzTW9iaWxlVmlldykge1xuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5oaWRlQmFja0J1dHRvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGUucGFkZGluZyA9IFwiMCA4cHhcIlxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzU3R5bGUucGFkZGluZyA9IFwiMCA4cHhcIlxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc1N0eWxlLnBhZGRpbmcgPSBcIjAgOHB4XCJcbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc1N0eWxlLnBhZGRpbmcgPSBcIjAgOHB4XCJcbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24gPSB7IC4uLnRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uIH1cbiAgICAgICAgdGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uY29udGFjdHNTdHlsZS5wYWRkaW5nID0gXCIwIDhweFwiO1xuICAgICAgICB0aGlzLlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbiA9IHsgLi4udGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24gfVxuXG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uID0geyAuLi50aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbiB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmICghdGhpcy5pc01vYmlsZVZpZXcpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvbkNvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUuaGVpZ2h0ID0gXCI1MDBweFwiXG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25Db25maWd1cmF0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLndpZHRoID0gXCI1MDBweFwiXG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLmhpZGVCYWNrQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLnBhZGRpbmcgPSBcIjAgMTAwcHhcIlxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzU3R5bGUucGFkZGluZyA9IFwiMCAxMDBweFwiXG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzU3R5bGUucGFkZGluZyA9IFwiMCAxMDBweFwiXG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5wYWRkaW5nID0gXCIwIDEwMHB4XCJcbiAgICAgICAgdGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uY29udGFjdHNTdHlsZS5wYWRkaW5nID0gXCIwIDEwMHB4XCI7XG4gICAgICAgIHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uID0geyAuLi50aGlzLlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbiB9XG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uID0geyAuLi50aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbiB9XG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uID0geyAuLi50aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbiB9XG5cbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUJhY2tkcm9wSGVpZ2h0KClcbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1widXNlclwiXSB8fCBjaGFuZ2VzW1wiZ3JvdXBcIl0pIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlQ2hhdCgpO1xuICAgIH1cbiAgfVxuICB0cmlnZ2VyU3RhcnRDb252ZXJzYXRpb24oKSB7XG4gICAgdGhpcy5zaG93U3RhcnRDb252ZXJzYXRpb24gPSB0cnVlO1xuICB9XG4gIHJlbW92ZUNoYXRPbkdyb3VwQWN0aW9uKGxlZnRVc2VyOiBDb21ldENoYXQuVXNlciwgbWVzc2FnZTogQ29tZXRDaGF0LkFjdGlvbikge1xuICAgIGNvbnN0IGlzU2FtZVVzZXIgPSB0aGlzLmxvZ2dlZEluVXNlcj8uZ2V0VWlkKCkgPT09IGxlZnRVc2VyLmdldFVpZCgpO1xuICAgIGNvbnN0IGFjdGlvbkZvckdyb3VwID0gbWVzc2FnZS5nZXRBY3Rpb25Gb3IoKSBpbnN0YW5jZW9mIENvbWV0Q2hhdC5Hcm91cDtcblxuICAgIGlmIChpc1NhbWVVc2VyICYmIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uICYmIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbldpdGgoKSBpbnN0YW5jZW9mIENvbWV0Q2hhdC5Hcm91cCkge1xuICAgICAgbGV0IGdyb3VwID0gdGhpcy5hY3RpdmVDb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Hcm91cDtcblxuICAgICAgaWYgKGFjdGlvbkZvckdyb3VwKSB7XG4gICAgICAgIGxldCBhY3Rpb25Pbkdyb3VwID0gbWVzc2FnZS5nZXRBY3Rpb25Gb3IoKSBhcyBDb21ldENoYXQuR3JvdXA7XG5cbiAgICAgICAgaWYgKGFjdGlvbk9uR3JvdXAuZ2V0R3VpZCgpID09PSBncm91cC5nZXRHdWlkKCkpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiA9IG51bGw7XG4gICAgICAgICAgdGhpcy51c2VyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmdyb3VwID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYXR0YWNoR3JvdXBMaXN0ZW5lcnMoKSB7XG4gICAgQ29tZXRDaGF0LmFkZEdyb3VwTGlzdGVuZXIoXG4gICAgICB0aGlzLmdyb3VwTGlzdGVuZXJJZCxcbiAgICAgIG5ldyBDb21ldENoYXQuR3JvdXBMaXN0ZW5lcih7XG4gICAgICAgIG9uR3JvdXBNZW1iZXJLaWNrZWQ6IChcbiAgICAgICAgICBtZXNzYWdlOiBhbnksXG4gICAgICAgICAga2lja2VkVXNlcjogYW55LFxuICAgICAgICAgIGtpY2tlZEJ5OiBhbnksXG4gICAgICAgICAga2lja2VkRnJvbTogYW55XG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIHRoaXMucmVtb3ZlQ2hhdE9uR3JvdXBBY3Rpb24oa2lja2VkVXNlciwgbWVzc2FnZSlcblxuICAgICAgICB9LFxuICAgICAgICBvbkdyb3VwTWVtYmVyQmFubmVkOiAoXG4gICAgICAgICAgbWVzc2FnZTogYW55LFxuICAgICAgICAgIGJhbm5lZFVzZXI6IGFueSxcbiAgICAgICAgICBiYW5uZWRCeTogYW55LFxuICAgICAgICAgIGJhbm5lZEZyb206IGFueVxuICAgICAgICApID0+IHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUNoYXRPbkdyb3VwQWN0aW9uKGJhbm5lZFVzZXIsIG1lc3NhZ2UpXG5cbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBvbkJhY2sgPSAoKSA9PiB7XG4gICAgdGhpcy51c2VyID0gbnVsbFxuICAgIHRoaXMuZ3JvdXAgPSBudWxsXG4gICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gPSBudWxsXG4gIH1cbiAgc2V0V2l0aE1lc3NhZ2VzU3R5bGUoKSB7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTogV2l0aE1lc3NhZ2VzU3R5bGUgPSBuZXcgV2l0aE1lc3NhZ2VzU3R5bGUoe1xuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgYm9yZGVyUmFkaXVzOiBcIm5vbmVcIixcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MjAwKCl9YCxcbiAgICAgIG1lc3NhZ2VUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBtZXNzYWdlVGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS50aXRsZTEpLFxuICAgIH0pXG4gICAgdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUgPSB7XG4gICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gICAgICAuLi50aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZVxuICAgIH1cbiAgICB0aGlzLmxhYmVsU3R5bGUudGV4dEZvbnQgPSB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS5tZXNzYWdlVGV4dEZvbnRcbiAgICB0aGlzLmxhYmVsU3R5bGUudGV4dENvbG9yID0gdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUubWVzc2FnZVRleHRDb2xvclxuICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VzU3R5bGUuYm9yZGVyID0gdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZXNTdHlsZS5ib3JkZXIgPz8gXCJub25lXCJcbiAgICB0aGlzLmNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uY29udmVyc2F0aW9uc1N0eWxlLmJvcmRlciA9IHRoaXMuY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5jb252ZXJzYXRpb25zU3R5bGUuYm9yZGVyID8/IFwibm9uZVwiXG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LmNvbnZlcnNhdGlvbnNTdHlsZT8uYm9yZGVyIHx8IHRoaXMuY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uY29udmVyc2F0aW9uc1N0eWxlPy5ib3JkZXIgPT0gXCJub25lXCIpIHtcbiAgICAgIHRoaXMuc2lkZUJhclN0eWxlID0geyBib3JkZXJSaWdodDogdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUuYm9yZGVyIH1cblxuICAgIH1cbiAgfVxuICBvbkNvbnRhY3RDbGlja2VkID0gKHVzZXI/OiBDb21ldENoYXQuVXNlciwgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXApID0+IHtcbiAgICB0aGlzLnNob3dTdGFydENvbnZlcnNhdGlvbiA9IGZhbHNlO1xuICAgIGlmICh1c2VyKSB7XG4gICAgICB0aGlzLmdyb3VwID0gbnVsbFxuICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICB0aGlzLnVzZXIgPSBudWxsXG4gICAgICB0aGlzLmdyb3VwID0gZ3JvdXA7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBvbkl0ZW1DbGljazogKChjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IHZvaWQpID0gKGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4ge1xuICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uID0gY29udmVyc2F0aW9uXG4gICAgdGhpcy5zaG93U3RhcnRDb252ZXJzYXRpb24gPSBmYWxzZTtcbiAgICBpZiAoY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvblR5cGUoKSAmJiBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uVHlwZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUudXNlcikge1xuICAgICAgdGhpcy5ncm91cCA9IG51bGxcbiAgICAgIHRoaXMudXNlciA9IGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25XaXRoKCkgYXMgQ29tZXRDaGF0LlVzZXI7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICB9XG4gICAgZWxzZSBpZiAoY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvblR5cGUoKSAmJiBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uVHlwZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUuZ3JvdXApIHtcbiAgICAgIHRoaXMudXNlciA9IG51bGxcbiAgICAgIHRoaXMuZ3JvdXAgPSBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Hcm91cFxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfVxuICB9O1xuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy51cGRhdGVCYWNrZHJvcEhlaWdodCgpXG4gIH1cbiAgdXBkYXRlQmFja2Ryb3BIZWlnaHQoKSB7XG4gICAgY29uc3QgZGl2SGVpZ2h0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIGNvbnN0IGRpdldpZHRoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgbGV0IGJhY2tkcm9wU3R5bGUgPSB7XG4gICAgICBoZWlnaHQ6IGRpdkhlaWdodCArIFwicHhcIixcbiAgICAgIHdpZHRoOiBkaXZXaWR0aCArIFwicHhcIixcbiAgICAgIGJhY2tncm91bmQ6IFwicmdiYSgwLCAwLCAwLCAwLjUpXCIsXG4gICAgICBwb3NpdGlvbjogXCJmaXhlZFwiXG4gICAgfVxuICAgIGlmICh0aGlzLmlzTW9iaWxlVmlldykge1xuICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24udHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uLnRyYW5zZmVyT3duZXJzaGlwU3R5bGUuaGVpZ2h0ID0gKGRpdkhlaWdodCAtIDMwKSArIFwicHhcIjtcbiAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLnRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcFN0eWxlLndpZHRoID0gZGl2V2lkdGggKyBcInB4XCI7XG4gICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uQ29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5oZWlnaHQgPSBkaXZIZWlnaHQgKyBcInB4XCI7XG4gICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uQ29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS53aWR0aCA9IGRpdldpZHRoICsgXCJweFwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLnRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcFN0eWxlLmhlaWdodCA9IFwiNjUwcHhcIjtcbiAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLnRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcFN0eWxlLndpZHRoID0gXCIzNjBweFwiO1xuICAgIH1cbiAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSA9IGJhY2tkcm9wU3R5bGU7XG4gICAgdGhpcy5jb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgPSBiYWNrZHJvcFN0eWxlO1xuICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgPSBiYWNrZHJvcFN0eWxlO1xuICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSA9IGJhY2tkcm9wU3R5bGU7XG4gICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSA9IGJhY2tkcm9wU3R5bGU7XG4gICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlID0gYmFja2Ryb3BTdHlsZTtcblxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICB9XG4gIHNldEFjdGl2ZUNoYXQoKSB7XG4gICAgbGV0IHR5cGU6IHN0cmluZyA9IHRoaXMudXNlciA/IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUudXNlciA6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUuZ3JvdXBcbiAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiA9IG51bGxcbiAgICBsZXQgY29udmVyc2F0aW9uV2l0aDogc3RyaW5nID0gdGhpcy51c2VyPy5nZXRVaWQoKSEgfHwgdGhpcy5ncm91cD8uZ2V0R3VpZCgpIVxuICAgIENvbWV0Q2hhdC5nZXRDb252ZXJzYXRpb24oY29udmVyc2F0aW9uV2l0aCwgdHlwZSkudGhlbigoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiA9IGNvbnZlcnNhdGlvblxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuICBjbG9zZVN0YXJ0Q29udmVyc2F0aW9uID0gKCkgPT4ge1xuICAgIHRoaXMuc2hvd1N0YXJ0Q29udmVyc2F0aW9uID0gZmFsc2U7XG4gIH1cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24udXNlcnNDb25maWd1cmF0aW9uLnVzZXJzU3R5bGUuYm9yZGVyID0gXCJub25lXCJcbiAgICB0aGlzLlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5ncm91cHNDb25maWd1cmF0aW9uLmdyb3Vwc1N0eWxlLmJvcmRlciA9IFwibm9uZVwiXG4gICAgdGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ub25DbG9zZSA9IHRoaXMuY2xvc2VTdGFydENvbnZlcnNhdGlvblxuICAgIHRoaXMuc3RhcnRDb252ZXJzYXRpb25CdXR0b25TdHlsZSA9IHtcbiAgICAgIGhlaWdodDogXCIyNHB4XCIsXG4gICAgICB3aWR0aDogXCIyNHB4XCIsXG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMCcsXG4gICAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICBidXR0b25JY29uVGludDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KClcbiAgICB9XG4gICAgdGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24gPSB7IC4uLnRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uIH1cbiAgICB0aGlzLnNldFdpdGhNZXNzYWdlc1N0eWxlKClcbiAgICBpZiAoIXRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm9uQmFjaykge1xuICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ub25CYWNrID0gdGhpcy5vbkJhY2tcbiAgICB9XG4gICAgQ29tZXRDaGF0LmdldExvZ2dlZGluVXNlcigpXG4gICAgICAudGhlbigodXNlcjogQ29tZXRDaGF0LlVzZXIgfCBudWxsKSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VkSW5Vc2VyID0gdXNlcjtcbiAgICAgICAgdGhpcy5hdHRhY2hHcm91cExpc3RlbmVycygpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKCk7XG5cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVRvRXZlbnRzKCk7XG4gICAgQ29tZXRDaGF0LnJlbW92ZUdyb3VwTGlzdGVuZXIodGhpcy5ncm91cExpc3RlbmVySWQpO1xuICB9XG4gIC8vIHN1YnNjcmliZSB0byBnbG9iYWwgZXZlbnRzXG4gIHN1YnNjcmliZVRvRXZlbnRzKCkge1xuICAgIHRoaXMuY2NDb252ZXJzYXRpb25EZWxldGVkID0gQ29tZXRDaGF0Q29udmVyc2F0aW9uRXZlbnRzLmNjQ29udmVyc2F0aW9uRGVsZXRlZC5zdWJzY3JpYmUoKGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4ge1xuICAgICAgdGhpcy5yZW1vdmVBY3RpdmVDaGF0TGlzdChjb252ZXJzYXRpb24pIC8vdG8gbWFrZSBtIG1lc3NhZ2VzIHNlY3Rpb24gZW1wdHkgYWZ0ZXIgZGVsZXRpbmcgY29udmVyc2F0aW9uIGZyb20gY29udmVyc2F0aW9ubGlzdFxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwRGVsZXRlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBEZWxldGVkLnN1YnNjcmliZSgoZ3JvdXA6IENvbWV0Q2hhdC5Hcm91cCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgZ3JvdXAuZ2V0R3VpZCgpID09IHRoaXMuZ3JvdXAuZ2V0R3VpZCgpKSB7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBudWxsO1xuICAgICAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQWRkZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTWVtYmVyQWRkZWQuc3Vic2NyaWJlKChpdGVtOiBJR3JvdXBNZW1iZXJBZGRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gaXRlbT8udXNlckFkZGVkSW4hLmdldEd1aWQoKSkge1xuICAgICAgICB0aGlzLmdyb3VwID0gaXRlbT8udXNlckFkZGVkSW47XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQmFubmVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cE1lbWJlckJhbm5lZC5zdWJzY3JpYmUoKGl0ZW06IElHcm91cE1lbWJlcktpY2tlZEJhbm5lZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gaXRlbT8ua2lja2VkRnJvbSEuZ2V0R3VpZCgpKSB7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBpdGVtPy5raWNrZWRGcm9tO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NHcm91cE1lbWJlckpvaW5lZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBNZW1iZXJKb2luZWQuc3Vic2NyaWJlKChpdGVtOiBJR3JvdXBNZW1iZXJKb2luZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAuZ2V0R3VpZCgpID09IGl0ZW0/LmpvaW5lZEdyb3VwIS5nZXRHdWlkKCkpIHtcbiAgICAgICAgdGhpcy5ncm91cCA9IGl0ZW0/LmpvaW5lZEdyb3VwO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NHcm91cE1lbWJlcktpY2tlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBNZW1iZXJLaWNrZWQuc3Vic2NyaWJlKChpdGVtOiBJR3JvdXBNZW1iZXJLaWNrZWRCYW5uZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAuZ2V0R3VpZCgpID09IGl0ZW0/LmtpY2tlZEZyb20hLmdldEd1aWQoKSkge1xuICAgICAgICB0aGlzLmdyb3VwID0gaXRlbT8ua2lja2VkRnJvbTtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjT3duZXJzaGlwQ2hhbmdlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjT3duZXJzaGlwQ2hhbmdlZC5zdWJzY3JpYmUoKGl0ZW06IElPd25lcnNoaXBDaGFuZ2VkKSA9PiB7XG4gICAgICBpZiAodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtPy5ncm91cCEuZ2V0R3VpZCgpKSB7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBpdGVtPy5ncm91cDtcbiAgICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24/LnNldENvbnZlcnNhdGlvbldpdGgodGhpcy5ncm91cClcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTGVmdCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBMZWZ0LnN1YnNjcmliZSgoaXRlbTogSUdyb3VwTGVmdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gaXRlbT8ubGVmdEdyb3VwIS5nZXRHdWlkKCkgJiYgdGhpcy5sb2dnZWRJblVzZXI/LmdldFVpZCgpID09IGl0ZW0/LnVzZXJMZWZ0Py5nZXRVaWQoKSkge1xuICAgICAgICB0aGlzLmdyb3VwID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICAgIC8vIG9wZW4gY2hhdCBhbmQgbWFyayBhcyBhY3RpdmUgY29udmVyc2F0aW9uXG4gICAgdGhpcy5jY09wZW5DaGF0ID0gQ29tZXRDaGF0VUlFdmVudHMuY2NPcGVuQ2hhdC5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgIHRoaXMudXNlciA9IGl0ZW0udXNlciA/IGl0ZW0udXNlciA6IG51bGw7XG4gICAgICB0aGlzLmdyb3VwID0gaXRlbS5ncm91cCA/IGl0ZW0uZ3JvdXAgOiBudWxsO1xuICAgICAgdGhpcy5zZXRBY3RpdmVDaGF0KClcbiAgICB9KVxuICB9XG4gIC8vIHVuc3Vic2NyaWJlIHRvIHN1YnNjcmliZWQgZXZlbnRzLlxuICB1bnN1YnNjcmliZVRvRXZlbnRzKCkge1xuICAgIHRoaXMuY2NDb252ZXJzYXRpb25EZWxldGVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cERlbGV0ZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQWRkZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQmFubmVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cE1lbWJlckpvaW5lZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJLaWNrZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY093bmVyc2hpcENoYW5nZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTGVmdD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjT3BlbkNoYXQ/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbiAgLyoqXG4gICAqIHJlbW92ZSBhY3RpdmUgY2hhdCBzY3JlZW4gYWZ0ZXIgZGVsZXRpbmcgdGhlIGNvbnZlcnNhdGlvbi5cbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkNvbnZlcnNhdGlvbn0gY29udmVyc2F0aW9uXG4gICAqL1xuICByZW1vdmVBY3RpdmVDaGF0TGlzdChjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pIHtcbiAgICBjb25zdCBjb252ZXJzYXRpb25UeXBlID0gY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvblR5cGUoKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25XaXRoID0gY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbldpdGgoKTtcbiAgICBpZiAoY29udmVyc2F0aW9uVHlwZSA9PT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS51c2VyICYmIHRoaXMudXNlciAmJiB0aGlzLnVzZXIuZ2V0VWlkKCkgPT09IChjb252ZXJzYXRpb25XaXRoIGFzIENvbWV0Q2hhdC5Vc2VyKS5nZXRVaWQoKSkge1xuICAgICAgdGhpcy51c2VyID0gbnVsbDtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2UgaWYgKGNvbnZlcnNhdGlvblR5cGUgPT09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUuZ3JvdXAgJiYgdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PT0gKGNvbnZlcnNhdGlvbldpdGggYXMgQ29tZXRDaGF0Lkdyb3VwKS5nZXRHdWlkKCkpIHtcbiAgICAgIHRoaXMuZ3JvdXAgPSBudWxsO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGVtcHR5TWVzc2FnZVN0eWxlID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS5iYWNrZ3JvdW5kIHx8IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgaGVpZ2h0OiB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS5oZWlnaHQsXG4gICAgICB3aWR0aDogYGNhbGMoJHt0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS53aWR0aH0gLSAyODBweClgLFxuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIGJvcmRlclJhZGl1czogdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUuYm9yZGVyUmFkaXVzLFxuICAgIH1cbiAgfVxuICBjaGF0c1dyYXBwZXJTdHlsZXMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUuaGVpZ2h0LFxuICAgICAgd2lkdGg6IHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLndpZHRoLFxuICAgICAgYm9yZGVyOiB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS5ib3JkZXIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLmJvcmRlclJhZGl1cyxcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLmJhY2tncm91bmQgfHwgdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2Mtd2l0aC1tZXNzYWdlc19fd3JhcHBlclwiIFtuZ1N0eWxlXT1cImNoYXRzV3JhcHBlclN0eWxlcygpXCI+XG4gIDxkaXYgY2xhc3M9XCJjYy13aXRoLW1lc3NhZ2VzX19zaWRlYmFyXCIgW25nQ2xhc3NdPVwie21vYmlsZSA6IGlzTW9iaWxlVmlld31cIlxuICAgIFtuZ1N0eWxlXT1cInNpZGVCYXJTdHlsZVwiPlxuICAgIDxjb21ldGNoYXQtY29udmVyc2F0aW9ucyAjY29udmVyc2F0aW9uUmVmXG4gICAgICBbYWN0aXZlQ29udmVyc2F0aW9uXT1cImFjdGl2ZUNvbnZlcnNhdGlvblwiXG4gICAgICBbb25JdGVtQ2xpY2tdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5vbkl0ZW1DbGljayB8fCBvbkl0ZW1DbGlja1wiXG4gICAgICBbY29udmVyc2F0aW9uc1N0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uY29udmVyc2F0aW9uc1N0eWxlXCJcbiAgICAgIFtzdGF0dXNJbmRpY2F0b3JTdHlsZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uPy5zdGF0dXNJbmRpY2F0b3JTdHlsZVwiXG4gICAgICBbYXZhdGFyU3R5bGVdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uYXZhdGFyU3R5bGUhXCJcbiAgICAgIFtzdWJ0aXRsZVZpZXddPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5zdWJ0aXRsZVZpZXdcIlxuICAgICAgW29wdGlvbnNdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5vcHRpb25zXCJcbiAgICAgIFtkaXNhYmxlVXNlcnNQcmVzZW5jZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmRpc2FibGVVc2Vyc1ByZXNlbmNlXCJcbiAgICAgIFtkaXNhYmxlUmVjZWlwdF09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmRpc2FibGVSZWNlaXB0XCJcbiAgICAgIFtkaXNhYmxlVHlwaW5nXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uZGlzYWJsZVR5cGluZ1wiXG4gICAgICBbZGVsaXZlcmVkSWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmRlbGl2ZXJlZEljb25cIlxuICAgICAgW3JlYWRJY29uXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ucmVhZEljb25cIlxuICAgICAgW3dhaXRJY29uXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ud2FpdEljb25cIlxuICAgICAgW2Vycm9ySWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmVycm9ySWNvblwiXG4gICAgICBbZGF0ZVBhdHRlcm5dPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kYXRlUGF0dGVyblwiXG4gICAgICBbcmVjZWlwdFN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ucmVjZWlwdFN0eWxlXCJcbiAgICAgIFtzZW50SWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnNlbnRJY29uXCJcbiAgICAgIFtwcml2YXRlR3JvdXBJY29uXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ucHJpdmF0ZUdyb3VwSWNvblwiXG4gICAgICBbcHJvdGVjdGVkR3JvdXBJY29uXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ucHJvdGVjdGVkR3JvdXBJY29uXCJcbiAgICAgIFtjdXN0b21Tb3VuZEZvck1lc3NhZ2VzXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uY3VzdG9tU291bmRGb3JNZXNzYWdlc1wiXG4gICAgICBbY29udmVyc2F0aW9uc1JlcXVlc3RCdWlsZGVyXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uY29udmVyc2F0aW9uc1JlcXVlc3RCdWlsZGVyXCJcbiAgICAgIFtlbXB0eVN0YXRlVmlld109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmVtcHR5U3RhdGVWaWV3XCJcbiAgICAgIFtvblNlbGVjdF09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLm9uU2VsZWN0XCJcbiAgICAgIFtsb2FkaW5nSWNvblVSTF09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmxvYWRpbmdJY29uVVJMXCJcbiAgICAgIFtlcnJvclN0YXRlVmlld109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmVycm9yU3RhdGVWaWV3XCJcbiAgICAgIFtsb2FkaW5nU3RhdGVWaWV3XT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ubG9hZGluZ1N0YXRlVmlld1wiXG4gICAgICBbdGl0bGVBbGlnbm1lbnRdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi50aXRsZUFsaWdubWVudFwiXG4gICAgICBbbGlzdEl0ZW1WaWV3XT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ubGlzdEl0ZW1WaWV3XCJcbiAgICAgIFttZW51XT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ubWVudSB8fCBzdGFydENvbnZlcnNhdGlvbkJ1dHRvblwiXG4gICAgICBbaGlkZVNlcGFyYXRvcl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmhpZGVTZXBhcmF0b3JcIlxuICAgICAgW2hpZGVFcnJvcl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmhpZGVFcnJvclwiXG4gICAgICBbc2VsZWN0aW9uTW9kZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnNlbGVjdGlvbk1vZGVcIlxuICAgICAgW2Rpc2FibGVTb3VuZEZvck1lc3NhZ2VzXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNcIlxuICAgICAgW2RlbGV0ZUNvbnZlcnNhdGlvbkRpYWxvZ1N0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uZGVsZXRlQ29udmVyc2F0aW9uRGlhbG9nU3R5bGVcIlxuICAgICAgW2JhZGdlU3R5bGVdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5iYWRnZVN0eWxlXCJcbiAgICAgIFtkYXRlU3R5bGVdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kYXRlU3R5bGVcIlxuICAgICAgW2xpc3RJdGVtU3R5bGVdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5saXN0SXRlbVN0eWxlXCJcbiAgICAgIFtiYWNrZHJvcFN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZVwiXG4gICAgICBbdGV4dEZvcm1hdHRlcnNdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8udGV4dEZvcm1hdHRlcnNcIlxuICAgICAgW2Rpc2FibGVNZW50aW9uc109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmRpc2FibGVNZW50aW9uc1wiPjwvY29tZXRjaGF0LWNvbnZlcnNhdGlvbnM+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2Mtd2l0aC1tZXNzYWdlc19fbWFpblwiIFtuZ0NsYXNzXT1cInttb2JpbGUgOiBpc01vYmlsZVZpZXd9XCJcbiAgICAqbmdJZj1cIiFzaG93U3RhcnRDb252ZXJzYXRpb24gJiYgKHVzZXIgfHwgZ3JvdXApXCI+XG4gICAgPCEtLU1lc3NhZ2UgTGlzdCBTY3JlZW4tLT5cbiAgICA8Y29tZXRjaGF0LW1lc3NhZ2VzICNtZXNzYWdlc1JlZiBbdXNlcl09XCJ1c2VyIVwiIFtncm91cF09XCJncm91cCFcIlxuICAgICAgW21lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvblwiXG4gICAgICBbbWVzc2FnZUxpc3RDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb25cIlxuICAgICAgW21lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb25dPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb25cIlxuICAgICAgW21lc3NhZ2VzU3R5bGVdPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VzU3R5bGVcIlxuICAgICAgW2N1c3RvbVNvdW5kRm9ySW5jb21pbmdNZXNzYWdlc109XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24uY3VzdG9tU291bmRGb3JJbmNvbWluZ01lc3NhZ2VzXCJcbiAgICAgIFtjdXN0b21Tb3VuZEZvck91dGdvaW5nTWVzc2FnZXNdPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLmN1c3RvbVNvdW5kRm9yT3V0Z29pbmdNZXNzYWdlc1wiXG4gICAgICBbZGV0YWlsc0NvbmZpZ3VyYXRpb25dPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uXCJcbiAgICAgIFtkaXNhYmxlU291bmRGb3JNZXNzYWdlc109XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNcIlxuICAgICAgW2Rpc2FibGVUeXBpbmddPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLmRpc2FibGVUeXBpbmdcIlxuICAgICAgW2hpZGVNZXNzYWdlQ29tcG9zZXJdPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLmhpZGVNZXNzYWdlQ29tcG9zZXJcIlxuICAgICAgW2hpZGVNZXNzYWdlSGVhZGVyXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5oaWRlTWVzc2FnZUhlYWRlclwiXG4gICAgICBbbWVzc2FnZUNvbXBvc2VyVmlld109XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUNvbXBvc2VyVmlld1wiXG4gICAgICBbbWVzc2FnZUhlYWRlclZpZXddPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJWaWV3XCJcbiAgICAgIFttZXNzYWdlTGlzdFZpZXddPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VMaXN0Vmlld1wiXG4gICAgICBbaGlkZURldGFpbHNdPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLmhpZGVEZXRhaWxzIVwiXG4gICAgICBbdGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbl09XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24udGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvblwiPlxuICAgIDwvY29tZXRjaGF0LW1lc3NhZ2VzPlxuICAgIDwhLS1NZXNzYWdlIExpc3QgU2NyZWVuIEVORFMtLT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy13aXRoLW1lc3NhZ2VzX19zdGFydC1jb252ZXJzYXRpb25cIlxuICAgIFtuZ0NsYXNzXT1cInttb2JpbGUgOiBpc01vYmlsZVZpZXd9XCIgKm5nSWY9XCJzaG93U3RhcnRDb252ZXJzYXRpb25cIj5cblxuICAgIDxjb21ldGNoYXQtY29udGFjdHMgW29uSXRlbUNsaWNrXT1cIm9uQ29udGFjdENsaWNrZWRcIlxuICAgICAgW3VzZXJzQ29uZmlndXJhdGlvbl09XCJTdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LnVzZXJzQ29uZmlndXJhdGlvbiFcIlxuICAgICAgW2dyb3Vwc0NvbmZpZ3VyYXRpb25dPVwiU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uPy5ncm91cHNDb25maWd1cmF0aW9uIVwiXG4gICAgICBbY2xvc2VJY29uVVJMXT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uY2xvc2VJY29uVVJMIVwiXG4gICAgICBbY29udGFjdHNTdHlsZV09XCJTdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LmNvbnRhY3RzU3R5bGUhXCJcbiAgICAgIFtzZWxlY3Rpb25Nb2RlXT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uc2VsZWN0aW9uTW9kZSFcIlxuICAgICAgW29uQ2xvc2VdPVwiU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uPy5vbkNsb3NlIVwiXG4gICAgICBbdGFiVmlzaWJpbGl0eV09XCJTdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LnRhYlZpc2liaWxpdHkhXCJcbiAgICAgIFtzZWxlY3Rpb25MaW1pdF09XCJTdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LnNlbGVjdGlvbkxpbWl0IVwiXG4gICAgICBbdGFic109XCJTdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LnRhYnMhXCJcbiAgICAgIFtoaWRlU3VibWl0QnV0dG9uXT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uaGlkZVN1Ym1pdEJ1dHRvbiFcIj48L2NvbWV0Y2hhdC1jb250YWN0cz5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy1kZWNvcmF0b3JfX21lc3NhZ2UtLWVtcHR5XCJcbiAgICAqbmdJZj1cIiF1c2VyICYmICFncm91cCAmJiAhc2hvd1N0YXJ0Q29udmVyc2F0aW9uXCJcbiAgICBbbmdTdHlsZV09XCJlbXB0eU1lc3NhZ2VTdHlsZSgpXCI+XG4gICAgPGNvbWV0Y2hhdC1sYWJlbCBbdGV4dF09XCJtZXNzYWdlVGV4dFwiXG4gICAgICBbbGFiZWxTdHlsZV09XCJsYWJlbFN0eWxlXCI+PC9jb21ldGNoYXQtbGFiZWw+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI3N0YXJ0Q29udmVyc2F0aW9uQnV0dG9uPlxuICAgIDxjb21ldGNoYXQtYnV0dG9uICpuZ0lmPVwiIWhpZGVTdGFydE5ld0NvbnZlcnNhdGlvblwiXG4gICAgICBbaWNvblVSTF09XCJzdGFydE5ld0NvbnZlcnNhdGlvbkljb25VUkxcIlxuICAgICAgW2J1dHRvblN0eWxlXT1cInN0YXJ0Q29udmVyc2F0aW9uQnV0dG9uU3R5bGVcIlxuICAgICAgKGNjLWJ1dHRvbi1jbGlja2VkKT1cInRyaWdnZXJTdGFydENvbnZlcnNhdGlvbigpXCI+PC9jb21ldGNoYXQtYnV0dG9uPlxuXG4gIDwvbmctdGVtcGxhdGU+XG4iXX0=