@cometchat/chat-uikit-angular 4.0.0-beta.1.4 → 4.0.0-beta.1.5

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 (131) hide show
  1. package/Calls/CallingExtension.d.ts +4 -3
  2. package/Calls/CallingExtensionDecorator.d.ts +0 -1
  3. package/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.d.ts +4 -3
  4. package/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.d.ts +4 -3
  5. package/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.d.ts +14 -6
  6. package/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.d.ts +0 -1
  7. package/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.d.ts +5 -5
  8. package/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.d.ts +6 -5
  9. package/CometChatContacts/cometchat-contacts/cometchat-contacts.component.d.ts +65 -0
  10. package/CometChatContacts/cometchat-contacts.module.d.ts +12 -0
  11. package/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +21 -15
  12. package/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.d.ts +13 -4
  13. package/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.d.ts +2 -1
  14. package/CometChatDetails/cometchat-details/cometchat-details.component.d.ts +7 -7
  15. package/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.d.ts +14 -12
  16. package/CometChatGroups/cometchat-groups/cometchat-groups.component.d.ts +12 -6
  17. package/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.d.ts +6 -4
  18. package/CometChatList/cometchat-list.component.d.ts +2 -1
  19. package/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.d.ts +2 -2
  20. package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +23 -6
  21. package/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.d.ts +1 -1
  22. package/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.d.ts +95 -0
  23. package/CometChatMessageInformation/cometchat-message-information.module.d.ts +10 -0
  24. package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +45 -26
  25. package/CometChatMessageList/cometchat-message-list.module.d.ts +3 -1
  26. package/CometChatMessages/cometchat-messages/cometchat-messages.component.d.ts +5 -3
  27. package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +0 -1
  28. package/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.d.ts +3 -3
  29. package/CometChatUsers/cometchat-users/cometchat-users.component.d.ts +11 -5
  30. package/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.d.ts +2 -2
  31. package/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.d.ts +4 -8
  32. package/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.d.ts +1 -4
  33. package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.d.ts +4 -8
  34. package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.d.ts +1 -4
  35. package/Extensions/ImageModeration/ImageModerationExtension.d.ts +4 -4
  36. package/Extensions/LinkPreviewExtension/LinkPreviewExtension.d.ts +4 -4
  37. package/Extensions/MessageTranslation/MessageTranslationExtension.d.ts +4 -8
  38. package/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.d.ts +1 -4
  39. package/Extensions/PollsExtension/PollsExtension.d.ts +4 -4
  40. package/Extensions/PollsExtension/PollsExtensionDecorator.d.ts +0 -1
  41. package/Extensions/Reactions/ReactionExtension.d.ts +4 -4
  42. package/Extensions/Reactions/ReactionExtensionDecorator.d.ts +0 -1
  43. package/Extensions/SmartReplies/SmartRepliesExtension.d.ts +4 -8
  44. package/Extensions/SmartReplies/SmartRepliesExtensionDecorator.d.ts +2 -2
  45. package/Extensions/Stickers/StickersExtension.d.ts +4 -8
  46. package/Extensions/Stickers/StickersExtensionDecorator.d.ts +2 -2
  47. package/Extensions/TextModerator/TextModeratorExtension.d.ts +4 -3
  48. package/Extensions/TextModerator/TextModeratorExtensionDecorator.d.ts +0 -1
  49. package/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.d.ts +4 -4
  50. package/Shared/CometChatUIkit/CometChatUIKit.d.ts +10 -6
  51. package/Shared/Framework/DataSource.d.ts +0 -1
  52. package/Shared/Framework/DataSourceDecorator.d.ts +0 -1
  53. package/Shared/Utils/ComeChatException.d.ts +1 -2
  54. package/Shared/Utils/MessageUtils.d.ts +2 -1
  55. package/Shared/Views/CometChatTabs/cometchat-tabs/cometchat-tabs.component.d.ts +38 -9
  56. package/Shared/Views/CometChatTabs/cometchat-tabs.module.d.ts +1 -5
  57. package/esm2020/Calls/CallingExtension.mjs +7 -4
  58. package/esm2020/Calls/CallingExtensionDecorator.mjs +4 -4
  59. package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.mjs +58 -21
  60. package/esm2020/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.mjs +48 -17
  61. package/esm2020/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.mjs +110 -9
  62. package/esm2020/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.mjs +9 -7
  63. package/esm2020/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.mjs +9 -6
  64. package/esm2020/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.mjs +12 -7
  65. package/esm2020/CometChatContacts/cometchat-contacts/cometchat-contacts.component.mjs +273 -0
  66. package/esm2020/CometChatContacts/cometchat-contacts.module.mjs +23 -0
  67. package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +122 -65
  68. package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +105 -17
  69. package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.mjs +6 -2
  70. package/esm2020/CometChatDetails/cometchat-details/cometchat-details.component.mjs +13 -11
  71. package/esm2020/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.mjs +45 -46
  72. package/esm2020/CometChatGroups/cometchat-groups/cometchat-groups.component.mjs +69 -28
  73. package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.mjs +60 -21
  74. package/esm2020/CometChatList/cometchat-list.component.mjs +8 -9
  75. package/esm2020/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.mjs +4 -5
  76. package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +200 -30
  77. package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +4 -5
  78. package/esm2020/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.mjs +288 -0
  79. package/esm2020/CometChatMessageInformation/cometchat-message-information.module.mjs +28 -0
  80. package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +401 -185
  81. package/esm2020/CometChatMessageList/cometchat-message-list.module.mjs +12 -4
  82. package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +28 -15
  83. package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +3 -4
  84. package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.mjs +14 -15
  85. package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +72 -45
  86. package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.mjs +21 -9
  87. package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.mjs +7 -6
  88. package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.mjs +3 -4
  89. package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.mjs +7 -6
  90. package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.mjs +3 -4
  91. package/esm2020/Extensions/ImageModeration/ImageModerationExtension.mjs +7 -5
  92. package/esm2020/Extensions/LinkPreviewExtension/LinkPreviewExtension.mjs +7 -5
  93. package/esm2020/Extensions/MessageTranslation/MessageTranslationExtension.mjs +7 -6
  94. package/esm2020/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.mjs +2 -4
  95. package/esm2020/Extensions/PollsExtension/PollsExtension.mjs +7 -5
  96. package/esm2020/Extensions/PollsExtension/PollsExtensionDecorator.mjs +1 -1
  97. package/esm2020/Extensions/Reactions/ReactionExtension.mjs +7 -5
  98. package/esm2020/Extensions/Reactions/ReactionExtensionDecorator.mjs +3 -2
  99. package/esm2020/Extensions/SmartReplies/SmartRepliesExtension.mjs +7 -6
  100. package/esm2020/Extensions/SmartReplies/SmartRepliesExtensionDecorator.mjs +5 -7
  101. package/esm2020/Extensions/Stickers/StickersExtension.mjs +7 -10
  102. package/esm2020/Extensions/Stickers/StickersExtensionDecorator.mjs +5 -7
  103. package/esm2020/Extensions/TextModerator/TextModeratorExtension.mjs +16 -4
  104. package/esm2020/Extensions/TextModerator/TextModeratorExtensionDecorator.mjs +1 -1
  105. package/esm2020/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.mjs +7 -5
  106. package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +66 -32
  107. package/esm2020/Shared/Framework/DataSource.mjs +1 -1
  108. package/esm2020/Shared/Framework/DataSourceDecorator.mjs +1 -1
  109. package/esm2020/Shared/Utils/ComeChatException.mjs +2 -2
  110. package/esm2020/Shared/Utils/MessageUtils.mjs +36 -6
  111. package/esm2020/Shared/Views/CometChatTabs/cometchat-tabs/cometchat-tabs.component.mjs +61 -25
  112. package/esm2020/Shared/Views/CometChatTabs/cometchat-tabs.module.mjs +2 -18
  113. package/esm2020/public-api.mjs +8 -5
  114. package/fesm2015/cometchat-chat-uikit-angular.mjs +3658 -3185
  115. package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -1
  116. package/fesm2020/cometchat-chat-uikit-angular.mjs +3639 -3164
  117. package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -1
  118. package/package.json +5 -5
  119. package/public-api.d.ts +7 -4
  120. package/Calls/CometChatCallDetails/cometchat-call-details/cometchat-call-details.component.d.ts +0 -139
  121. package/Calls/CometChatCallDetails/cometchat-call-details.module.d.ts +0 -10
  122. package/Calls/CometChatCallHistory/cometchat-call-history/cometchat-call-history.component.d.ts +0 -125
  123. package/Calls/CometChatCallHistory/cometchat-call-history.module.d.ts +0 -10
  124. package/Calls/CometChatCallHistoryWithDetails/cometchat-call-history-with-details/cometchat-call-history-with-details.component.d.ts +0 -59
  125. package/Calls/CometChatCallHistoryWithDetails/cometchat-call-history-with-details.module.d.ts +0 -12
  126. package/esm2020/Calls/CometChatCallDetails/cometchat-call-details/cometchat-call-details.component.mjs +0 -452
  127. package/esm2020/Calls/CometChatCallDetails/cometchat-call-details.module.mjs +0 -31
  128. package/esm2020/Calls/CometChatCallHistory/cometchat-call-history/cometchat-call-history.component.mjs +0 -397
  129. package/esm2020/Calls/CometChatCallHistory/cometchat-call-history.module.mjs +0 -28
  130. package/esm2020/Calls/CometChatCallHistoryWithDetails/cometchat-call-history-with-details/cometchat-call-history-with-details.component.mjs +0 -143
  131. package/esm2020/Calls/CometChatCallHistoryWithDetails/cometchat-call-history-with-details.module.mjs +0 -39
@@ -1,6 +1,5 @@
1
1
  import { Component, Input, ViewChild } from '@angular/core';
2
- import { States, TitleAlignment } from '@cometchat/uikit-shared';
3
- import { localize } from '@cometchat/uikit-resources';
2
+ import { localize, States, TitleAlignment, } from '@cometchat/uikit-resources';
4
3
  import * as i0 from "@angular/core";
5
4
  import * as i1 from "@angular/common";
6
5
  export class CometchatListComponent {
@@ -32,7 +31,7 @@ export class CometchatListComponent {
32
31
  */
33
32
  this.ioBottom = () => {
34
33
  const options = {
35
- root: this.listScroll.nativeElement,
34
+ root: this.listScroll?.nativeElement,
36
35
  rootMargin: '-100% 0px 100px 0px',
37
36
  threshold: 0
38
37
  };
@@ -42,14 +41,14 @@ export class CometchatListComponent {
42
41
  }
43
42
  };
44
43
  var observer = new IntersectionObserver(callback, options);
45
- observer.observe(this.bottom.nativeElement);
44
+ observer.observe(this.bottom?.nativeElement);
46
45
  };
47
46
  /**
48
47
  * listening to top scroll using intersection observer
49
48
  */
50
49
  this.ioTop = () => {
51
50
  const options = {
52
- root: this.listScroll.nativeElement,
51
+ root: this.listScroll?.nativeElement,
53
52
  rootMargin: '200px 0px 0px 0px',
54
53
  threshold: 1.0
55
54
  };
@@ -62,7 +61,7 @@ export class CometchatListComponent {
62
61
  }
63
62
  };
64
63
  var observer = new IntersectionObserver(callback, options);
65
- observer.observe(this.top.nativeElement);
64
+ // observer.observe(this.top.nativeElement);
66
65
  };
67
66
  this.searchEvent = (event) => {
68
67
  this.searchText = event?.detail?.searchText;
@@ -149,10 +148,10 @@ export class CometchatListComponent {
149
148
  }
150
149
  }
151
150
  CometchatListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometchatListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
152
- CometchatListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometchatListComponent, selector: "cometchat-list", inputs: { listItemView: "listItemView", onScrolledToBottom: "onScrolledToBottom", onScrolledToTop: "onScrolledToTop", list: "list", onSearch: "onSearch", searchText: "searchText", searchIconURL: "searchIconURL", listStyle: "listStyle", searchPlaceholderText: "searchPlaceholderText", hideSearch: "hideSearch", hideError: "hideError", title: "title", titleAlignment: "titleAlignment", errorStateView: "errorStateView", loadingStateView: "loadingStateView", emptyStateView: "emptyStateView", state: "state", errorStateText: "errorStateText", emptyStateText: "emptyStateText", loadingIconURL: "loadingIconURL", showSectionHeader: "showSectionHeader", sectionHeaderField: "sectionHeaderField" }, viewQueries: [{ propertyName: "listScroll", first: true, predicate: ["listScroll"], descendants: true }, { propertyName: "bottom", first: true, predicate: ["bottom"], descendants: true }, { propertyName: "top", first: true, predicate: ["top"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-list__wrapper\">\n <div class=\"list__header\" [ngStyle]=\"headerStyle()\">\n <div *ngIf=\"title\" class=\"list__title\" [ngStyle]=\"headerTitle()\"> {{title}}</div>\n <div class=\"cc-list__search-input\">\n <cometchat-search-input [searchInputStyle]=\"searchStyle\" [placeholderText]=\"searchPlaceholderText\" *ngIf=\"!hideSearch\"\n [searchIconURL]=\"searchIconURL\" (cc-search-changed)=\"searchEvent($event)\"></cometchat-search-input>\n </div>\n </div>\n <div class=\"cc-list\" #listScroll [ngStyle]=\"listStyles()\">\n <div class=\"list__top\" #top>\n </div>\n <div class=\"decorator__message\" *ngIf=\"state == states.loading || state == states.error || state == states.empty \"\n [ngStyle]=\"messageContainerStyle()\">\n <div class=\"loading__view\" *ngIf=\"state == states.loading \">\n <cometchat-loader [iconURL]=\"loadingIconURL\" [loaderStyle]=\"iconStyle\">\n </cometchat-loader>\n <span class=\"custom__view--loading\" *ngIf=\"state == states.loading && loadingStateView\">\n <ng-container *ngTemplateOutlet=\"loadingStateView\">\n </ng-container>\n </span>\n </div>\n <div class=\"error__view\" *ngIf=\"state == states.error && !hideError \">\n <cometchat-label [labelStyle]=\"errorStyle()\" *ngIf=\"state == states.error && !hideError && !errorStateView\" [text]=\"errorStateText\"\n >\n </cometchat-label>\n <span class=\"custom__view--error\" *ngIf=\"state == states.error && !hideError && errorStateView\">\n <ng-container *ngTemplateOutlet=\"errorStateView\">\n </ng-container>\n </span>\n </div>\n <div class=\"empty__view\" *ngIf=\"state == states.empty\">\n <cometchat-label [labelStyle]=\"emptyStyle()\" *ngIf=\"state == states.empty && !emptyStateView\" [text]=\"emptyStateText\"\n >\n </cometchat-label>\n <span class=\"custom__view--empty\" *ngIf=\"state == states.empty && emptyStateView\">\n <ng-container *ngTemplateOutlet=\"emptyStateView\">\n </ng-container>\n </span>\n </div>\n </div>\n <div class=\"listitem__view\" *ngFor=\"let item of list; let i = index\">\n <div class=\"list__section\" *ngIf=\"showSectionHeader\">\n <div *ngIf=\"i > 0; else elseBlock\" class=\"section__separator\">\n <div *ngIf=\"\n list[i - 1][sectionHeaderField][0].toUpperCase() !==\n list[i][sectionHeaderField][0].toUpperCase()\n \" class=\"section__header\" [ngStyle]=\"sectionHeaderStyle()\">\n {{ list[i][sectionHeaderField][0].toUpperCase() }}\n </div>\n </div>\n <ng-template #elseBlock>\n <div class=\"section__header\" [ngStyle]=\"sectionHeaderStyle()\">\n {{\n list[i][sectionHeaderField][0].toUpperCase()\n }}\n </div>\n </ng-template>\n </div>\n <ng-container *ngTemplateOutlet=\"listItemView;context:{ $implicit: item }\">\n </ng-container>\n </div>\n <div class=\"list__bottom\" #bottom>\n </div>\n </div>\n</div>", styles: [".cc-list{width:100%;overflow-y:auto;overflow-x:hidden}.cc-list__wrapper{height:100%;width:100%;display:flex;flex-direction:column}.section__header{padding:4px}.list__title{width:90%;margin:4px 0;padding-left:8px}.user__section{padding:8px}.cc-list__search-input{height:-moz-fit-content;height:fit-content;margin:0 8px}.list__header{width:100%}.list__section{margin-left:8px}.decorator__message--loading{display:block;height:24px;width:24px;margin-right:30px}.decorator__message{margin:0;line-height:30px;word-wrap:break-word;padding:0 8px;width:100%;overflow:hidden;display:flex;align-items:center;justify-content:center;height:100%}.list__title{margin-bottom:8px}.cc-list::-webkit-scrollbar{background:transparent;width:8px}.cc-list::-webkit-scrollbar-thumb{background:#e8e5e5;border-radius:8px}.error__view,.empty__view{text-align:center;width:100%;text-overflow:ellipsis;text-wrap:balance}\n"], directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
151
+ CometchatListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometchatListComponent, selector: "cometchat-list", inputs: { listItemView: "listItemView", onScrolledToBottom: "onScrolledToBottom", onScrolledToTop: "onScrolledToTop", list: "list", onSearch: "onSearch", searchText: "searchText", searchIconURL: "searchIconURL", listStyle: "listStyle", searchPlaceholderText: "searchPlaceholderText", hideSearch: "hideSearch", hideError: "hideError", title: "title", titleAlignment: "titleAlignment", errorStateView: "errorStateView", loadingStateView: "loadingStateView", emptyStateView: "emptyStateView", state: "state", errorStateText: "errorStateText", emptyStateText: "emptyStateText", loadingIconURL: "loadingIconURL", showSectionHeader: "showSectionHeader", sectionHeaderField: "sectionHeaderField" }, viewQueries: [{ propertyName: "listScroll", first: true, predicate: ["listScroll"], descendants: true }, { propertyName: "bottom", first: true, predicate: ["bottom"], descendants: true }, { propertyName: "top", first: true, predicate: ["top"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-list__wrapper\">\n <div class=\"list__header\" [ngStyle]=\"headerStyle()\">\n <div *ngIf=\"title\" class=\"list__title\" [ngStyle]=\"headerTitle()\"> {{title}}</div>\n <div class=\"cc-list__search-input\">\n <cometchat-search-input [searchInputStyle]=\"searchStyle\" [placeholderText]=\"searchPlaceholderText\" *ngIf=\"!hideSearch\"\n [searchIconURL]=\"searchIconURL\" (cc-search-changed)=\"searchEvent($event)\"></cometchat-search-input>\n </div>\n </div>\n <div class=\"cc-list\" #listScroll [ngStyle]=\"listStyles()\">\n <div class=\"list__top\" #top>\n </div>\n <div class=\"decorator__message\" *ngIf=\"state == states.loading || state == states.error || state == states.empty \"\n [ngStyle]=\"messageContainerStyle()\">\n <div class=\"loading__view\" *ngIf=\"state == states.loading \">\n <cometchat-loader [iconURL]=\"loadingIconURL\" [loaderStyle]=\"iconStyle\">\n </cometchat-loader>\n <span class=\"custom__view--loading\" *ngIf=\"state == states.loading && loadingStateView\">\n <ng-container *ngTemplateOutlet=\"loadingStateView\">\n </ng-container>\n </span>\n </div>\n <div class=\"error__view\" *ngIf=\"state == states.error && !hideError \">\n <cometchat-label [labelStyle]=\"errorStyle()\" *ngIf=\"state == states.error && !hideError && !errorStateView\" [text]=\"errorStateText\"\n >\n </cometchat-label>\n <span class=\"custom__view--error\" *ngIf=\"state == states.error && !hideError && errorStateView\">\n <ng-container *ngTemplateOutlet=\"errorStateView\">\n </ng-container>\n </span>\n </div>\n <div class=\"empty__view\" *ngIf=\"state == states.empty\">\n <cometchat-label [labelStyle]=\"emptyStyle()\" *ngIf=\"state == states.empty && !emptyStateView\" [text]=\"emptyStateText\"\n >\n </cometchat-label>\n <span class=\"custom__view--empty\" *ngIf=\"state == states.empty && emptyStateView\">\n <ng-container *ngTemplateOutlet=\"emptyStateView\">\n </ng-container>\n </span>\n </div>\n </div>\n <div class=\"listitem__view\" *ngFor=\"let item of list; let i = index\">\n <div class=\"list__section\" *ngIf=\"showSectionHeader\">\n <div *ngIf=\"i > 0; else elseBlock\" class=\"section__separator\">\n <div *ngIf=\"\n list[i - 1][sectionHeaderField][0].toUpperCase() !==\n list[i][sectionHeaderField][0].toUpperCase()\n \" class=\"section__header\" [ngStyle]=\"sectionHeaderStyle()\">\n {{ list[i][sectionHeaderField][0].toUpperCase() }}\n </div>\n </div>\n <ng-template #elseBlock>\n <div class=\"section__header\" [ngStyle]=\"sectionHeaderStyle()\">\n {{\n list[i][sectionHeaderField][0].toUpperCase()\n }}\n </div>\n </ng-template>\n </div>\n <ng-container *ngTemplateOutlet=\"listItemView;context:{ $implicit: item }\">\n </ng-container>\n </div>\n <div class=\"list__bottom\" #bottom>\n </div>\n </div>\n</div>", styles: [".cc-list{display:flex;flex-direction:column;width:100%;overflow-y:auto;overflow-x:hidden}.cc-list__wrapper{height:100%;width:100%;display:flex;flex-direction:column}.listitem__view{display:flex;flex-direction:column}.section__header{padding:4px}.list__title{width:90%;margin:4px 0;padding-left:8px}.user__section{padding:8px}.cc-list__search-input{height:-moz-fit-content;height:fit-content;margin:0 8px}.list__header{width:100%}.list__section{margin-left:8px}.decorator__message--loading{display:block;height:24px;width:24px;margin-right:30px}.decorator__message{margin:0;line-height:30px;word-wrap:break-word;padding:0 8px;width:100%;overflow:hidden;display:flex;align-items:center;justify-content:center;height:100%}.list__title{margin-bottom:8px}.cc-list::-webkit-scrollbar{background:transparent;width:8px}.cc-list::-webkit-scrollbar-thumb{background:#e8e5e5;border-radius:8px}.error__view,.empty__view{text-align:center;width:100%;text-overflow:ellipsis;text-wrap:balance}\n"], directives: [{ type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
153
152
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometchatListComponent, decorators: [{
154
153
  type: Component,
155
- args: [{ selector: 'cometchat-list', template: "<div class=\"cc-list__wrapper\">\n <div class=\"list__header\" [ngStyle]=\"headerStyle()\">\n <div *ngIf=\"title\" class=\"list__title\" [ngStyle]=\"headerTitle()\"> {{title}}</div>\n <div class=\"cc-list__search-input\">\n <cometchat-search-input [searchInputStyle]=\"searchStyle\" [placeholderText]=\"searchPlaceholderText\" *ngIf=\"!hideSearch\"\n [searchIconURL]=\"searchIconURL\" (cc-search-changed)=\"searchEvent($event)\"></cometchat-search-input>\n </div>\n </div>\n <div class=\"cc-list\" #listScroll [ngStyle]=\"listStyles()\">\n <div class=\"list__top\" #top>\n </div>\n <div class=\"decorator__message\" *ngIf=\"state == states.loading || state == states.error || state == states.empty \"\n [ngStyle]=\"messageContainerStyle()\">\n <div class=\"loading__view\" *ngIf=\"state == states.loading \">\n <cometchat-loader [iconURL]=\"loadingIconURL\" [loaderStyle]=\"iconStyle\">\n </cometchat-loader>\n <span class=\"custom__view--loading\" *ngIf=\"state == states.loading && loadingStateView\">\n <ng-container *ngTemplateOutlet=\"loadingStateView\">\n </ng-container>\n </span>\n </div>\n <div class=\"error__view\" *ngIf=\"state == states.error && !hideError \">\n <cometchat-label [labelStyle]=\"errorStyle()\" *ngIf=\"state == states.error && !hideError && !errorStateView\" [text]=\"errorStateText\"\n >\n </cometchat-label>\n <span class=\"custom__view--error\" *ngIf=\"state == states.error && !hideError && errorStateView\">\n <ng-container *ngTemplateOutlet=\"errorStateView\">\n </ng-container>\n </span>\n </div>\n <div class=\"empty__view\" *ngIf=\"state == states.empty\">\n <cometchat-label [labelStyle]=\"emptyStyle()\" *ngIf=\"state == states.empty && !emptyStateView\" [text]=\"emptyStateText\"\n >\n </cometchat-label>\n <span class=\"custom__view--empty\" *ngIf=\"state == states.empty && emptyStateView\">\n <ng-container *ngTemplateOutlet=\"emptyStateView\">\n </ng-container>\n </span>\n </div>\n </div>\n <div class=\"listitem__view\" *ngFor=\"let item of list; let i = index\">\n <div class=\"list__section\" *ngIf=\"showSectionHeader\">\n <div *ngIf=\"i > 0; else elseBlock\" class=\"section__separator\">\n <div *ngIf=\"\n list[i - 1][sectionHeaderField][0].toUpperCase() !==\n list[i][sectionHeaderField][0].toUpperCase()\n \" class=\"section__header\" [ngStyle]=\"sectionHeaderStyle()\">\n {{ list[i][sectionHeaderField][0].toUpperCase() }}\n </div>\n </div>\n <ng-template #elseBlock>\n <div class=\"section__header\" [ngStyle]=\"sectionHeaderStyle()\">\n {{\n list[i][sectionHeaderField][0].toUpperCase()\n }}\n </div>\n </ng-template>\n </div>\n <ng-container *ngTemplateOutlet=\"listItemView;context:{ $implicit: item }\">\n </ng-container>\n </div>\n <div class=\"list__bottom\" #bottom>\n </div>\n </div>\n</div>", styles: [".cc-list{width:100%;overflow-y:auto;overflow-x:hidden}.cc-list__wrapper{height:100%;width:100%;display:flex;flex-direction:column}.section__header{padding:4px}.list__title{width:90%;margin:4px 0;padding-left:8px}.user__section{padding:8px}.cc-list__search-input{height:-moz-fit-content;height:fit-content;margin:0 8px}.list__header{width:100%}.list__section{margin-left:8px}.decorator__message--loading{display:block;height:24px;width:24px;margin-right:30px}.decorator__message{margin:0;line-height:30px;word-wrap:break-word;padding:0 8px;width:100%;overflow:hidden;display:flex;align-items:center;justify-content:center;height:100%}.list__title{margin-bottom:8px}.cc-list::-webkit-scrollbar{background:transparent;width:8px}.cc-list::-webkit-scrollbar-thumb{background:#e8e5e5;border-radius:8px}.error__view,.empty__view{text-align:center;width:100%;text-overflow:ellipsis;text-wrap:balance}\n"] }]
154
+ args: [{ selector: 'cometchat-list', template: "<div class=\"cc-list__wrapper\">\n <div class=\"list__header\" [ngStyle]=\"headerStyle()\">\n <div *ngIf=\"title\" class=\"list__title\" [ngStyle]=\"headerTitle()\"> {{title}}</div>\n <div class=\"cc-list__search-input\">\n <cometchat-search-input [searchInputStyle]=\"searchStyle\" [placeholderText]=\"searchPlaceholderText\" *ngIf=\"!hideSearch\"\n [searchIconURL]=\"searchIconURL\" (cc-search-changed)=\"searchEvent($event)\"></cometchat-search-input>\n </div>\n </div>\n <div class=\"cc-list\" #listScroll [ngStyle]=\"listStyles()\">\n <div class=\"list__top\" #top>\n </div>\n <div class=\"decorator__message\" *ngIf=\"state == states.loading || state == states.error || state == states.empty \"\n [ngStyle]=\"messageContainerStyle()\">\n <div class=\"loading__view\" *ngIf=\"state == states.loading \">\n <cometchat-loader [iconURL]=\"loadingIconURL\" [loaderStyle]=\"iconStyle\">\n </cometchat-loader>\n <span class=\"custom__view--loading\" *ngIf=\"state == states.loading && loadingStateView\">\n <ng-container *ngTemplateOutlet=\"loadingStateView\">\n </ng-container>\n </span>\n </div>\n <div class=\"error__view\" *ngIf=\"state == states.error && !hideError \">\n <cometchat-label [labelStyle]=\"errorStyle()\" *ngIf=\"state == states.error && !hideError && !errorStateView\" [text]=\"errorStateText\"\n >\n </cometchat-label>\n <span class=\"custom__view--error\" *ngIf=\"state == states.error && !hideError && errorStateView\">\n <ng-container *ngTemplateOutlet=\"errorStateView\">\n </ng-container>\n </span>\n </div>\n <div class=\"empty__view\" *ngIf=\"state == states.empty\">\n <cometchat-label [labelStyle]=\"emptyStyle()\" *ngIf=\"state == states.empty && !emptyStateView\" [text]=\"emptyStateText\"\n >\n </cometchat-label>\n <span class=\"custom__view--empty\" *ngIf=\"state == states.empty && emptyStateView\">\n <ng-container *ngTemplateOutlet=\"emptyStateView\">\n </ng-container>\n </span>\n </div>\n </div>\n <div class=\"listitem__view\" *ngFor=\"let item of list; let i = index\">\n <div class=\"list__section\" *ngIf=\"showSectionHeader\">\n <div *ngIf=\"i > 0; else elseBlock\" class=\"section__separator\">\n <div *ngIf=\"\n list[i - 1][sectionHeaderField][0].toUpperCase() !==\n list[i][sectionHeaderField][0].toUpperCase()\n \" class=\"section__header\" [ngStyle]=\"sectionHeaderStyle()\">\n {{ list[i][sectionHeaderField][0].toUpperCase() }}\n </div>\n </div>\n <ng-template #elseBlock>\n <div class=\"section__header\" [ngStyle]=\"sectionHeaderStyle()\">\n {{\n list[i][sectionHeaderField][0].toUpperCase()\n }}\n </div>\n </ng-template>\n </div>\n <ng-container *ngTemplateOutlet=\"listItemView;context:{ $implicit: item }\">\n </ng-container>\n </div>\n <div class=\"list__bottom\" #bottom>\n </div>\n </div>\n</div>", styles: [".cc-list{display:flex;flex-direction:column;width:100%;overflow-y:auto;overflow-x:hidden}.cc-list__wrapper{height:100%;width:100%;display:flex;flex-direction:column}.listitem__view{display:flex;flex-direction:column}.section__header{padding:4px}.list__title{width:90%;margin:4px 0;padding-left:8px}.user__section{padding:8px}.cc-list__search-input{height:-moz-fit-content;height:fit-content;margin:0 8px}.list__header{width:100%}.list__section{margin-left:8px}.decorator__message--loading{display:block;height:24px;width:24px;margin-right:30px}.decorator__message{margin:0;line-height:30px;word-wrap:break-word;padding:0 8px;width:100%;overflow:hidden;display:flex;align-items:center;justify-content:center;height:100%}.list__title{margin-bottom:8px}.cc-list::-webkit-scrollbar{background:transparent;width:8px}.cc-list::-webkit-scrollbar-thumb{background:#e8e5e5;border-radius:8px}.error__view,.empty__view{text-align:center;width:100%;text-overflow:ellipsis;text-wrap:balance}\n"] }]
156
155
  }], ctorParameters: function () { return []; }, propDecorators: { listScroll: [{
157
156
  type: ViewChild,
158
157
  args: ["listScroll", { static: false }]
@@ -207,4 +206,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
207
206
  }], sectionHeaderField: [{
208
207
  type: Input
209
208
  }] } });
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9Db21ldENoYXRMaXN0L2NvbWV0Y2hhdC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TGlzdC9jb21ldGNoYXQtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBc0MsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTVHLE9BQU8sRUFBOEIsTUFBTSxFQUFFLGNBQWMsRUFBYyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBTXRELE1BQU0sT0FBTyxzQkFBc0I7SUFtQ2pDO1FBNUJTLFNBQUksR0FBUSxFQUFFLENBQUM7UUFFZixlQUFVLEdBQVcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLGtCQUFhLEdBQVcsbUJBQW1CLENBQUM7UUFDNUMsY0FBUyxHQUFjO1lBQzlCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSyxFQUFFLE1BQU07U0FDZixDQUFBO1FBQ1MsMEJBQXFCLEdBQVcsRUFBRSxDQUFDO1FBQ25DLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDNUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixVQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ25CLG1CQUFjLEdBQW1CLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFJckQsVUFBSyxHQUFXLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDOUIsbUJBQWMsR0FBVyxFQUFFLENBQUM7UUFDNUIsbUJBQWMsR0FBVyxFQUFFLENBQUM7UUFDNUIsbUJBQWMsR0FBVyxvQkFBb0IsQ0FBQztRQUM5Qyxz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TyxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsZ0JBQWdCOzBFQUtrQixVQUFVO3NCQUFyRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0YsTUFBTTtzQkFBN0MsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNELEdBQUc7c0JBQXZDLFNBQVM7dUJBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDMUIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFJRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlYXJjaElucHV0U3R5bGUgfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzJztcbmltcG9ydCB7IExpc3RTdHlsZSxNZXNzYWdlTGlzdFN0eWxlLCBTdGF0ZXMsIFRpdGxlQWxpZ25tZW50LCBVc2Vyc1N0eWxlIH0gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1zaGFyZWQnO1xuaW1wb3J0IHsgbG9jYWxpemUgfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlcyc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjb21ldGNoYXQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21ldGNoYXQtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbWV0Y2hhdC1saXN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ29tZXRjaGF0TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoXCJsaXN0U2Nyb2xsXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBsaXN0U2Nyb2xsITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChcImJvdHRvbVwiLCB7IHN0YXRpYzogZmFsc2UgfSkgYm90dG9tITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChcInRvcFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgdG9wITogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgbGlzdEl0ZW1WaWV3ITogVGVtcGxhdGVSZWY8YW55PjsgLy9jdXN0b20gdmlld1xuICBASW5wdXQoKSBvblNjcm9sbGVkVG9Cb3R0b20hOiAoKT0+dm9pZDtcbiAgQElucHV0KCkgb25TY3JvbGxlZFRvVG9wITogKCk9PnZvaWQ7XG4gIEBJbnB1dCgpIGxpc3Q6IGFueSA9IFtdO1xuICBASW5wdXQoKSBvblNlYXJjaCE6ICh0ZXh0OnN0cmluZyk9PnZvaWQ7XG4gIEBJbnB1dCgpIHNlYXJjaFRleHQ6IHN0cmluZyA9IGxvY2FsaXplKFwiU0VBUkNIXCIpO1xuICBASW5wdXQoKSBzZWFyY2hJY29uVVJMOiBTdHJpbmcgPSBcImFzc2V0cy9zZWFyY2guc3ZnXCI7XG4gIEBJbnB1dCgpIGxpc3RTdHlsZTogTGlzdFN0eWxlID0ge1xuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuIH1cbiAgQElucHV0KCkgc2VhcmNoUGxhY2Vob2xkZXJUZXh0OiBTdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBoaWRlU2VhcmNoOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgdGl0bGVBbGlnbm1lbnQ6IFRpdGxlQWxpZ25tZW50ID0gVGl0bGVBbGlnbm1lbnQubGVmdDtcbiAgQElucHV0KCkgZXJyb3JTdGF0ZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBsb2FkaW5nU3RhdGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgZW1wdHlTdGF0ZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBzdGF0ZTogU3RhdGVzID0gU3RhdGVzLmxvYWRlZDtcbiAgQElucHV0KCkgZXJyb3JTdGF0ZVRleHQ6IHN0cmluZyA9IFwiXCI7XG4gIEBJbnB1dCgpIGVtcHR5U3RhdGVUZXh0OiBzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBsb2FkaW5nSWNvblVSTDogc3RyaW5nID0gXCJhc3NldHMvU3Bpbm5lci5zdmdcIjtcbiAgQElucHV0KCkgc2hvd1NlY3Rpb25IZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2VjdGlvbkhlYWRlckZpZWxkOiBzdHJpbmcgPSBcIm5hbWVcIjtcbiAgcHVibGljIHN0YXRlczogdHlwZW9mIFN0YXRlcyA9IFN0YXRlc1xuICBwdWJsaWMgbnVtYmVyT2ZUb3BTY3JvbGw6IG51bWJlciA9IDA7XG4gIHNlYXJjaFN0eWxlOiBTZWFyY2hJbnB1dFN0eWxlID0ge1xuXG4gIH1cbiAgaWNvblN0eWxlOmFueSA9IHt9XG4gIGNvbnN0cnVjdG9yKCkge1xuXG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pY29uU3R5bGUgPSAgdGhpcy5saXN0U3R5bGUubG9hZGluZ0ljb25UaW50XG4gICAgdGhpcy5zZWFyY2hTdHlsZS5zZWFyY2hUZXh0Rm9udCA9IHRoaXMubGlzdFN0eWxlPy5zZWFyY2hUZXh0Rm9udCxcbiAgICB0aGlzLnNlYXJjaFN0eWxlLnNlYXJjaFRleHRDb2xvciA9IHRoaXMubGlzdFN0eWxlPy5zZWFyY2hUZXh0Q29sb3IsXG4gICAgdGhpcy5zZWFyY2hTdHlsZS5wbGFjZWhvbGRlclRleHRGb250ID0gdGhpcy5saXN0U3R5bGU/LnNlYXJjaFBsYWNlaG9sZGVyVGV4dEZvbnQsXG4gICAgdGhpcy5zZWFyY2hTdHlsZS5wbGFjZWhvbGRlclRleHRDb2xvciA9IHRoaXMubGlzdFN0eWxlPy5zZWFyY2hQbGFjZWhvbGRlclRleHRDb2xvcixcbiAgICB0aGlzLnNlYXJjaFN0eWxlLnNlYXJjaEljb25UaW50ID0gdGhpcy5saXN0U3R5bGU/LnNlYXJjaEljb25UaW50XG4gICAgdGhpcy5zZWFyY2hTdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5saXN0U3R5bGU/LnNlYXJjaEJhY2tncm91bmQsXG4gICAgdGhpcy5zZWFyY2hTdHlsZS5ib3JkZXJSYWRpdXMgPSB0aGlzLmxpc3RTdHlsZS5zZWFyY2hCb3JkZXJSYWRpdXNcbiAgICB0aGlzLnNlYXJjaFN0eWxlLmJvcmRlciA9IHRoaXMubGlzdFN0eWxlLnNlYXJjaEJvcmRlclxuXG5cbiAgIH1cbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgIHRoaXMuaW9Cb3R0b20oKTtcbiAgIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICB9XG4gIC8qKlxuICAgKiBsaXN0ZW5pbmcgdG8gYm90dG9tIHNjcm9sbCB1c2luZyBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXJcbiAgICovXG4gIGlvQm90dG9tID0gKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290OiB0aGlzLmxpc3RTY3JvbGwubmF0aXZlRWxlbWVudCxcbiAgICAgIHJvb3RNYXJnaW46ICctMTAwJSAwcHggMTAwcHggMHB4JyxcbiAgICAgIHRocmVzaG9sZDogMFxuICAgIH1cbiAgICBjb25zdCBjYWxsYmFjayA9IChlbnRyaWVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChlbnRyaWVzWzBdLmlzSW50ZXJzZWN0aW5nICYmIHRoaXMub25TY3JvbGxlZFRvQm90dG9tICYmIHRoaXMubGlzdD8ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLm9uU2Nyb2xsZWRUb0JvdHRvbSgpXG4gICAgICB9XG4gICAgfVxuICAgIHZhciBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgIG9ic2VydmVyLm9ic2VydmUodGhpcy5ib3R0b20ubmF0aXZlRWxlbWVudCk7XG4gIH1cbiAgLyoqXG4gKiBsaXN0ZW5pbmcgdG8gdG9wIHNjcm9sbCB1c2luZyBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXJcbiAqL1xuICBpb1RvcCA9ICgpID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdDogdGhpcy5saXN0U2Nyb2xsLm5hdGl2ZUVsZW1lbnQsXG4gICAgICByb290TWFyZ2luOiAnMjAwcHggMHB4IDBweCAwcHgnLFxuICAgICAgdGhyZXNob2xkOiAxLjBcbiAgICB9XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoZW50cmllczogYW55KSA9PiB7XG4gICAgICBpZiAoZW50cmllc1swXS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICB0aGlzLm51bWJlck9mVG9wU2Nyb2xsKytcbiAgICAgICAgaWYgKHRoaXMub25TY3JvbGxlZFRvVG9wICYmIHRoaXMubnVtYmVyT2ZUb3BTY3JvbGwgPiAxKSB7XG4gICAgICAgICAgdGhpcy5vblNjcm9sbGVkVG9Ub3AoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgIG9ic2VydmVyLm9ic2VydmUodGhpcy50b3AubmF0aXZlRWxlbWVudCk7XG4gIH1cbiAgc2VhcmNoRXZlbnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9IGV2ZW50Py5kZXRhaWw/LnNlYXJjaFRleHQ7XG4gICAgaWYgKHRoaXMub25TZWFyY2gpIHtcbiAgICAgIHRoaXMub25TZWFyY2godGhpcy5zZWFyY2hUZXh0KVxuICAgIH1cbiAgfVxuICAgLyoqXG4gKiBzdHlsaW5nIHBhcnRcbiAqL1xuICBjaGF0c0xpc3RTdHlsZSA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiB0aGlzLmxpc3RTdHlsZS5oZWlnaHQsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLmxpc3RTdHlsZS5iYWNrZ3JvdW5kLFxuICAgIH07XG4gIH1cbiAgbWVzc2FnZUNvbnRhaW5lclN0eWxlID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogdGhpcy5saXN0U3R5bGUud2lkdGgsXG4gICAgfTtcbiAgfVxuICBlcnJvclN0eWxlID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0Rm9udDogdGhpcy5saXN0U3R5bGUuZXJyb3JTdGF0ZVRleHRGb250LFxuICAgICAgdGV4dENvbG9yOiB0aGlzLmxpc3RTdHlsZS5lcnJvclN0YXRlVGV4dENvbG9yLFxuICAgIH1cbiAgfVxuICBlbXB0eVN0eWxlID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0Rm9udDogdGhpcy5saXN0U3R5bGUuZW1wdHlTdGF0ZVRleHRGb250LFxuICAgICAgdGV4dENvbG9yOiB0aGlzLmxpc3RTdHlsZS5lbXB0eVN0YXRlVGV4dENvbG9yLFxuICAgIH1cbiAgfVxuICB3cmFwcGVyU3R5bGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogdGhpcy5saXN0U3R5bGUuaGVpZ2h0LFxuICAgICAgd2lkdGg6IHRoaXMubGlzdFN0eWxlLndpZHRoLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy5saXN0U3R5bGUuYmFja2dyb3VuZCxcbiAgICAgIGJvcmRlcjogdGhpcy5saXN0U3R5bGUuYm9yZGVyLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLmxpc3RTdHlsZS5ib3JkZXJSYWRpdXNcbiAgICB9XG4gIH1cbiAgaGVhZGVyVGl0bGUgPSAoKSA9PiB7XG4gICAgbGV0IHBvc3RpdG9uOiBhbnkgPSB0aGlzLnRpdGxlQWxpZ25tZW50ID09IFRpdGxlQWxpZ25tZW50LmxlZnQgPyB7IHRleHRBbGlnbjogXCJsZWZ0XCIgfSA6IHsgdGV4dEFsaWduOiBcImNlbnRlclwiIH1cbiAgICByZXR1cm4ge1xuICAgICAgZm9udDogdGhpcy5saXN0U3R5bGUudGl0bGVUZXh0Rm9udCxcbiAgICAgIGNvbG9yOiB0aGlzLmxpc3RTdHlsZS50aXRsZVRleHRDb2xvcixcbiAgICAgIC4uLnBvc3RpdG9uXG4gICAgfVxuICB9XG4gIHNlY3Rpb25IZWFkZXJTdHlsZSA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9udDogdGhpcy5saXN0U3R5bGU/LnNlY3Rpb25IZWFkZXJUZXh0Rm9udCxcbiAgICAgIGNvbG9yOiB0aGlzLmxpc3RTdHlsZT8uc2VjdGlvbkhlYWRlclRleHRDb2xvcixcbiAgICB9XG4gIH1cbiAgaGVhZGVyU3R5bGUgPSAoKT0+e1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6IFwiZml0LWNvbnRlbnRcIixcbiAgICAgIG1hcmdpbkJvdHRvbTpcIjEycHhcIlxuICAgIH1cbiAgfVxuICBsaXN0U3R5bGVzID0gKCk9PntcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiBcIjEwMCVcIlxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNjLWxpc3RfX3dyYXBwZXJcIj5cbiAgPGRpdiBjbGFzcz1cImxpc3RfX2hlYWRlclwiIFtuZ1N0eWxlXT1cImhlYWRlclN0eWxlKClcIj5cbiAgICA8ZGl2ICpuZ0lmPVwidGl0bGVcIiBjbGFzcz1cImxpc3RfX3RpdGxlXCIgW25nU3R5bGVdPVwiaGVhZGVyVGl0bGUoKVwiPiB7e3RpdGxlfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtbGlzdF9fc2VhcmNoLWlucHV0XCI+XG4gICAgICA8Y29tZXRjaGF0LXNlYXJjaC1pbnB1dCBbc2VhcmNoSW5wdXRTdHlsZV09XCJzZWFyY2hTdHlsZVwiIFtwbGFjZWhvbGRlclRleHRdPVwic2VhcmNoUGxhY2Vob2xkZXJUZXh0XCIgKm5nSWY9XCIhaGlkZVNlYXJjaFwiXG4gICAgICBbc2VhcmNoSWNvblVSTF09XCJzZWFyY2hJY29uVVJMXCIgKGNjLXNlYXJjaC1jaGFuZ2VkKT1cInNlYXJjaEV2ZW50KCRldmVudClcIj48L2NvbWV0Y2hhdC1zZWFyY2gtaW5wdXQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2MtbGlzdFwiICNsaXN0U2Nyb2xsIFtuZ1N0eWxlXT1cImxpc3RTdHlsZXMoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJsaXN0X190b3BcIiAjdG9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkZWNvcmF0b3JfX21lc3NhZ2VcIiAqbmdJZj1cInN0YXRlID09IHN0YXRlcy5sb2FkaW5nIHx8IHN0YXRlID09IHN0YXRlcy5lcnJvciAgfHwgc3RhdGUgPT0gc3RhdGVzLmVtcHR5IFwiXG4gICAgICBbbmdTdHlsZV09XCJtZXNzYWdlQ29udGFpbmVyU3R5bGUoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmdfX3ZpZXdcIiAqbmdJZj1cInN0YXRlID09IHN0YXRlcy5sb2FkaW5nIFwiPlxuICAgICAgICA8Y29tZXRjaGF0LWxvYWRlciBbaWNvblVSTF09XCJsb2FkaW5nSWNvblVSTFwiIFtsb2FkZXJTdHlsZV09XCJpY29uU3R5bGVcIj5cbiAgICAgICAgPC9jb21ldGNoYXQtbG9hZGVyPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbV9fdmlldy0tbG9hZGluZ1wiICpuZ0lmPVwic3RhdGUgPT0gc3RhdGVzLmxvYWRpbmcgICYmIGxvYWRpbmdTdGF0ZVZpZXdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1N0YXRlVmlld1wiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvcl9fdmlld1wiICpuZ0lmPVwic3RhdGUgPT0gc3RhdGVzLmVycm9yICAmJiAhaGlkZUVycm9yIFwiPlxuICAgICAgICA8Y29tZXRjaGF0LWxhYmVsIFtsYWJlbFN0eWxlXT1cImVycm9yU3R5bGUoKVwiICpuZ0lmPVwic3RhdGUgPT0gc3RhdGVzLmVycm9yICAmJiAhaGlkZUVycm9yICYmICFlcnJvclN0YXRlVmlld1wiIFt0ZXh0XT1cImVycm9yU3RhdGVUZXh0XCJcbiAgICAgICAgICA+XG4gICAgICAgIDwvY29tZXRjaGF0LWxhYmVsPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbV9fdmlldy0tZXJyb3JcIiAqbmdJZj1cInN0YXRlID09IHN0YXRlcy5lcnJvciAgJiYgIWhpZGVFcnJvciAmJiBlcnJvclN0YXRlVmlld1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlcnJvclN0YXRlVmlld1wiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eV9fdmlld1wiICpuZ0lmPVwic3RhdGUgPT0gc3RhdGVzLmVtcHR5XCI+XG4gICAgICAgIDxjb21ldGNoYXQtbGFiZWwgW2xhYmVsU3R5bGVdPVwiZW1wdHlTdHlsZSgpXCIgKm5nSWY9XCJzdGF0ZSA9PSBzdGF0ZXMuZW1wdHkgJiYgIWVtcHR5U3RhdGVWaWV3XCIgW3RleHRdPVwiZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgID5cbiAgICAgICAgPC9jb21ldGNoYXQtbGFiZWw+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tX192aWV3LS1lbXB0eVwiICpuZ0lmPVwic3RhdGUgPT0gc3RhdGVzLmVtcHR5ICYmIGVtcHR5U3RhdGVWaWV3XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5U3RhdGVWaWV3XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsaXN0aXRlbV9fdmlld1wiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxpc3Q7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0X19zZWN0aW9uXCIgKm5nSWY9XCJzaG93U2VjdGlvbkhlYWRlclwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA+IDA7IGVsc2UgZWxzZUJsb2NrXCIgY2xhc3M9XCJzZWN0aW9uX19zZXBhcmF0b3JcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGxpc3RbaSAtIDFdW3NlY3Rpb25IZWFkZXJGaWVsZF1bMF0udG9VcHBlckNhc2UoKSAhPT1cbiAgICAgICAgICAgICAgbGlzdFtpXVtzZWN0aW9uSGVhZGVyRmllbGRdWzBdLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIFwiIGNsYXNzPVwic2VjdGlvbl9faGVhZGVyXCIgW25nU3R5bGVdPVwic2VjdGlvbkhlYWRlclN0eWxlKClcIj5cbiAgICAgICAgICAgIHt7IGxpc3RbaV1bc2VjdGlvbkhlYWRlckZpZWxkXVswXS50b1VwcGVyQ2FzZSgpIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbl9faGVhZGVyXCIgW25nU3R5bGVdPVwic2VjdGlvbkhlYWRlclN0eWxlKClcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICBsaXN0W2ldW3NlY3Rpb25IZWFkZXJGaWVsZF1bMF0udG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3RJdGVtVmlldztjb250ZXh0OnsgJGltcGxpY2l0OiBpdGVtIH1cIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsaXN0X19ib3R0b21cIiAjYm90dG9tPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9Db21ldENoYXRMaXN0L2NvbWV0Y2hhdC1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TGlzdC9jb21ldGNoYXQtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBc0MsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzVHLE9BQU8sRUFBRSxRQUFRLEVBQUMsTUFBTSxFQUFFLGNBQWMsR0FBRyxNQUFNLDRCQUE0QixDQUFDOzs7QUFNOUUsTUFBTSxPQUFPLHNCQUFzQjtJQW1DakM7UUE1QlMsU0FBSSxHQUFRLEVBQUUsQ0FBQztRQUVmLGVBQVUsR0FBVyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsa0JBQWEsR0FBVyxtQkFBbUIsQ0FBQztRQUM1QyxjQUFTLEdBQWM7WUFDOUIsTUFBTSxFQUFFLE1BQU07WUFDZCxLQUFLLEVBQUUsTUFBTTtTQUNmLENBQUE7UUFDUywwQkFBcUIsR0FBVyxFQUFFLENBQUM7UUFDbkMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUM1QixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLFVBQUssR0FBVyxFQUFFLENBQUM7UUFDbkIsbUJBQWMsR0FBbUIsY0FBYyxDQUFDLElBQUksQ0FBQztRQUlyRCxVQUFLLEdBQVcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM5QixtQkFBYyxHQUFXLEVBQUUsQ0FBQztRQUM1QixtQkFBYyxHQUFXLEVBQUUsQ0FBQztRQUM1QixtQkFBYyxHQUFXLG9CQUFvQixDQUFDO1FBQzlDLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyx1QkFBa0Is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TSxFQUFFLEtBQUssRUFBRTtnQkFDRixNQUFNO3NCQUE3QyxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ0QsR0FBRztzQkFBdkMsU0FBUzt1QkFBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUMxQixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2VhcmNoSW5wdXRTdHlsZSB9IGZyb20gJ0Bjb21ldGNoYXQvdWlraXQtZWxlbWVudHMnO1xuaW1wb3J0IHsgTGlzdFN0eWxlLE1lc3NhZ2VMaXN0U3R5bGUsICBVc2Vyc1N0eWxlIH0gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1zaGFyZWQnO1xuaW1wb3J0IHsgbG9jYWxpemUsU3RhdGVzLCBUaXRsZUFsaWdubWVudCwgfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlcyc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjb21ldGNoYXQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21ldGNoYXQtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbWV0Y2hhdC1saXN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ29tZXRjaGF0TGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBWaWV3Q2hpbGQoXCJsaXN0U2Nyb2xsXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBsaXN0U2Nyb2xsITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChcImJvdHRvbVwiLCB7IHN0YXRpYzogZmFsc2UgfSkgYm90dG9tITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZChcInRvcFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgdG9wITogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgbGlzdEl0ZW1WaWV3ITogVGVtcGxhdGVSZWY8YW55PjsgLy9jdXN0b20gdmlld1xuICBASW5wdXQoKSBvblNjcm9sbGVkVG9Cb3R0b20hOiAoKT0+dm9pZDtcbiAgQElucHV0KCkgb25TY3JvbGxlZFRvVG9wITogKCk9PnZvaWQ7XG4gIEBJbnB1dCgpIGxpc3Q6IGFueSA9IFtdO1xuICBASW5wdXQoKSBvblNlYXJjaCE6ICh0ZXh0OnN0cmluZyk9PnZvaWQ7XG4gIEBJbnB1dCgpIHNlYXJjaFRleHQ6IHN0cmluZyA9IGxvY2FsaXplKFwiU0VBUkNIXCIpO1xuICBASW5wdXQoKSBzZWFyY2hJY29uVVJMOiBTdHJpbmcgPSBcImFzc2V0cy9zZWFyY2guc3ZnXCI7XG4gIEBJbnB1dCgpIGxpc3RTdHlsZTogTGlzdFN0eWxlID0ge1xuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuIH1cbiAgQElucHV0KCkgc2VhcmNoUGxhY2Vob2xkZXJUZXh0OiBTdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBoaWRlU2VhcmNoOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gXCJcIjtcbiAgQElucHV0KCkgdGl0bGVBbGlnbm1lbnQ6IFRpdGxlQWxpZ25tZW50ID0gVGl0bGVBbGlnbm1lbnQubGVmdDtcbiAgQElucHV0KCkgZXJyb3JTdGF0ZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBsb2FkaW5nU3RhdGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgZW1wdHlTdGF0ZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBzdGF0ZTogU3RhdGVzID0gU3RhdGVzLmxvYWRlZDtcbiAgQElucHV0KCkgZXJyb3JTdGF0ZVRleHQ6IHN0cmluZyA9IFwiXCI7XG4gIEBJbnB1dCgpIGVtcHR5U3RhdGVUZXh0OiBzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBsb2FkaW5nSWNvblVSTDogc3RyaW5nID0gXCJhc3NldHMvU3Bpbm5lci5zdmdcIjtcbiAgQElucHV0KCkgc2hvd1NlY3Rpb25IZWFkZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2VjdGlvbkhlYWRlckZpZWxkOiBzdHJpbmcgPSBcIm5hbWVcIjtcbiAgcHVibGljIHN0YXRlczogdHlwZW9mIFN0YXRlcyA9IFN0YXRlc1xuICBwdWJsaWMgbnVtYmVyT2ZUb3BTY3JvbGw6IG51bWJlciA9IDA7XG4gIHNlYXJjaFN0eWxlOiBTZWFyY2hJbnB1dFN0eWxlID0ge1xuXG4gIH1cbiAgaWNvblN0eWxlOmFueSA9IHt9XG4gIGNvbnN0cnVjdG9yKCkge1xuXG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pY29uU3R5bGUgPSAgdGhpcy5saXN0U3R5bGUubG9hZGluZ0ljb25UaW50XG4gICAgdGhpcy5zZWFyY2hTdHlsZS5zZWFyY2hUZXh0Rm9udCA9IHRoaXMubGlzdFN0eWxlPy5zZWFyY2hUZXh0Rm9udCxcbiAgICB0aGlzLnNlYXJjaFN0eWxlLnNlYXJjaFRleHRDb2xvciA9IHRoaXMubGlzdFN0eWxlPy5zZWFyY2hUZXh0Q29sb3IsXG4gICAgdGhpcy5zZWFyY2hTdHlsZS5wbGFjZWhvbGRlclRleHRGb250ID0gdGhpcy5saXN0U3R5bGU/LnNlYXJjaFBsYWNlaG9sZGVyVGV4dEZvbnQsXG4gICAgdGhpcy5zZWFyY2hTdHlsZS5wbGFjZWhvbGRlclRleHRDb2xvciA9IHRoaXMubGlzdFN0eWxlPy5zZWFyY2hQbGFjZWhvbGRlclRleHRDb2xvcixcbiAgICB0aGlzLnNlYXJjaFN0eWxlLnNlYXJjaEljb25UaW50ID0gdGhpcy5saXN0U3R5bGU/LnNlYXJjaEljb25UaW50XG4gICAgdGhpcy5zZWFyY2hTdHlsZS5iYWNrZ3JvdW5kID0gdGhpcy5saXN0U3R5bGU/LnNlYXJjaEJhY2tncm91bmQsXG4gICAgdGhpcy5zZWFyY2hTdHlsZS5ib3JkZXJSYWRpdXMgPSB0aGlzLmxpc3RTdHlsZS5zZWFyY2hCb3JkZXJSYWRpdXNcbiAgICB0aGlzLnNlYXJjaFN0eWxlLmJvcmRlciA9IHRoaXMubGlzdFN0eWxlLnNlYXJjaEJvcmRlclxuXG5cbiAgIH1cbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgIHRoaXMuaW9Cb3R0b20oKTtcbiAgIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICB9XG4gIC8qKlxuICAgKiBsaXN0ZW5pbmcgdG8gYm90dG9tIHNjcm9sbCB1c2luZyBpbnRlcnNlY3Rpb24gb2JzZXJ2ZXJcbiAgICovXG4gIGlvQm90dG9tID0gKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290OiB0aGlzLmxpc3RTY3JvbGw/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICByb290TWFyZ2luOiAnLTEwMCUgMHB4IDEwMHB4IDBweCcsXG4gICAgICB0aHJlc2hvbGQ6IDBcbiAgICB9XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoZW50cmllczogYW55KSA9PiB7XG4gICAgICBpZiAoZW50cmllc1swXS5pc0ludGVyc2VjdGluZyAmJiB0aGlzLm9uU2Nyb2xsZWRUb0JvdHRvbSAmJiB0aGlzLmxpc3Q/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5vblNjcm9sbGVkVG9Cb3R0b20oKVxuICAgICAgfVxuICAgIH1cbiAgICB2YXIgb2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKHRoaXMuYm90dG9tPy5uYXRpdmVFbGVtZW50KTtcbiAgfVxuICAvKipcbiAqIGxpc3RlbmluZyB0byB0b3Agc2Nyb2xsIHVzaW5nIGludGVyc2VjdGlvbiBvYnNlcnZlclxuICovXG4gIGlvVG9wID0gKCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290OiB0aGlzLmxpc3RTY3JvbGw/Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICByb290TWFyZ2luOiAnMjAwcHggMHB4IDBweCAwcHgnLFxuICAgICAgdGhyZXNob2xkOiAxLjBcbiAgICB9XG4gICAgY29uc3QgY2FsbGJhY2sgPSAoZW50cmllczogYW55KSA9PiB7XG4gICAgICBpZiAoZW50cmllc1swXS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICB0aGlzLm51bWJlck9mVG9wU2Nyb2xsKytcbiAgICAgICAgaWYgKHRoaXMub25TY3JvbGxlZFRvVG9wICYmIHRoaXMubnVtYmVyT2ZUb3BTY3JvbGwgPiAxKSB7XG4gICAgICAgICAgdGhpcy5vblNjcm9sbGVkVG9Ub3AoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoY2FsbGJhY2ssIG9wdGlvbnMpO1xuICAgIC8vIG9ic2VydmVyLm9ic2VydmUodGhpcy50b3AubmF0aXZlRWxlbWVudCk7XG4gIH1cbiAgc2VhcmNoRXZlbnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgIHRoaXMuc2VhcmNoVGV4dCA9IGV2ZW50Py5kZXRhaWw/LnNlYXJjaFRleHQ7XG4gICAgaWYgKHRoaXMub25TZWFyY2gpIHtcbiAgICAgIHRoaXMub25TZWFyY2godGhpcy5zZWFyY2hUZXh0KVxuICAgIH1cbiAgfVxuICAgLyoqXG4gKiBzdHlsaW5nIHBhcnRcbiAqL1xuICBjaGF0c0xpc3RTdHlsZSA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiB0aGlzLmxpc3RTdHlsZS5oZWlnaHQsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLmxpc3RTdHlsZS5iYWNrZ3JvdW5kLFxuICAgIH07XG4gIH1cbiAgbWVzc2FnZUNvbnRhaW5lclN0eWxlID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogdGhpcy5saXN0U3R5bGUud2lkdGgsXG4gICAgfTtcbiAgfVxuICBlcnJvclN0eWxlID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0Rm9udDogdGhpcy5saXN0U3R5bGUuZXJyb3JTdGF0ZVRleHRGb250LFxuICAgICAgdGV4dENvbG9yOiB0aGlzLmxpc3RTdHlsZS5lcnJvclN0YXRlVGV4dENvbG9yLFxuICAgIH1cbiAgfVxuICBlbXB0eVN0eWxlID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0Rm9udDogdGhpcy5saXN0U3R5bGUuZW1wdHlTdGF0ZVRleHRGb250LFxuICAgICAgdGV4dENvbG9yOiB0aGlzLmxpc3RTdHlsZS5lbXB0eVN0YXRlVGV4dENvbG9yLFxuICAgIH1cbiAgfVxuICB3cmFwcGVyU3R5bGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogdGhpcy5saXN0U3R5bGUuaGVpZ2h0LFxuICAgICAgd2lkdGg6IHRoaXMubGlzdFN0eWxlLndpZHRoLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy5saXN0U3R5bGUuYmFja2dyb3VuZCxcbiAgICAgIGJvcmRlcjogdGhpcy5saXN0U3R5bGUuYm9yZGVyLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLmxpc3RTdHlsZS5ib3JkZXJSYWRpdXNcbiAgICB9XG4gIH1cbiAgaGVhZGVyVGl0bGUgPSAoKSA9PiB7XG4gICAgbGV0IHBvc3RpdG9uOiBhbnkgPSB0aGlzLnRpdGxlQWxpZ25tZW50ID09IFRpdGxlQWxpZ25tZW50LmxlZnQgPyB7IHRleHRBbGlnbjogXCJsZWZ0XCIgfSA6IHsgdGV4dEFsaWduOiBcImNlbnRlclwiIH1cbiAgICByZXR1cm4ge1xuICAgICAgZm9udDogdGhpcy5saXN0U3R5bGUudGl0bGVUZXh0Rm9udCxcbiAgICAgIGNvbG9yOiB0aGlzLmxpc3RTdHlsZS50aXRsZVRleHRDb2xvcixcbiAgICAgIC4uLnBvc3RpdG9uXG4gICAgfVxuICB9XG4gIHNlY3Rpb25IZWFkZXJTdHlsZSA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9udDogdGhpcy5saXN0U3R5bGU/LnNlY3Rpb25IZWFkZXJUZXh0Rm9udCxcbiAgICAgIGNvbG9yOiB0aGlzLmxpc3RTdHlsZT8uc2VjdGlvbkhlYWRlclRleHRDb2xvcixcbiAgICB9XG4gIH1cbiAgaGVhZGVyU3R5bGUgPSAoKT0+e1xuICAgIHJldHVybiB7XG4gICAgICBoZWlnaHQ6IFwiZml0LWNvbnRlbnRcIixcbiAgICAgIG1hcmdpbkJvdHRvbTpcIjEycHhcIlxuICAgIH1cbiAgfVxuICBsaXN0U3R5bGVzID0gKCk9PntcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiBcIjEwMCVcIlxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNjLWxpc3RfX3dyYXBwZXJcIj5cbiAgPGRpdiBjbGFzcz1cImxpc3RfX2hlYWRlclwiIFtuZ1N0eWxlXT1cImhlYWRlclN0eWxlKClcIj5cbiAgICA8ZGl2ICpuZ0lmPVwidGl0bGVcIiBjbGFzcz1cImxpc3RfX3RpdGxlXCIgW25nU3R5bGVdPVwiaGVhZGVyVGl0bGUoKVwiPiB7e3RpdGxlfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtbGlzdF9fc2VhcmNoLWlucHV0XCI+XG4gICAgICA8Y29tZXRjaGF0LXNlYXJjaC1pbnB1dCBbc2VhcmNoSW5wdXRTdHlsZV09XCJzZWFyY2hTdHlsZVwiIFtwbGFjZWhvbGRlclRleHRdPVwic2VhcmNoUGxhY2Vob2xkZXJUZXh0XCIgKm5nSWY9XCIhaGlkZVNlYXJjaFwiXG4gICAgICBbc2VhcmNoSWNvblVSTF09XCJzZWFyY2hJY29uVVJMXCIgKGNjLXNlYXJjaC1jaGFuZ2VkKT1cInNlYXJjaEV2ZW50KCRldmVudClcIj48L2NvbWV0Y2hhdC1zZWFyY2gtaW5wdXQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2MtbGlzdFwiICNsaXN0U2Nyb2xsIFtuZ1N0eWxlXT1cImxpc3RTdHlsZXMoKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJsaXN0X190b3BcIiAjdG9wPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkZWNvcmF0b3JfX21lc3NhZ2VcIiAqbmdJZj1cInN0YXRlID09IHN0YXRlcy5sb2FkaW5nIHx8IHN0YXRlID09IHN0YXRlcy5lcnJvciAgfHwgc3RhdGUgPT0gc3RhdGVzLmVtcHR5IFwiXG4gICAgICBbbmdTdHlsZV09XCJtZXNzYWdlQ29udGFpbmVyU3R5bGUoKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxvYWRpbmdfX3ZpZXdcIiAqbmdJZj1cInN0YXRlID09IHN0YXRlcy5sb2FkaW5nIFwiPlxuICAgICAgICA8Y29tZXRjaGF0LWxvYWRlciBbaWNvblVSTF09XCJsb2FkaW5nSWNvblVSTFwiIFtsb2FkZXJTdHlsZV09XCJpY29uU3R5bGVcIj5cbiAgICAgICAgPC9jb21ldGNoYXQtbG9hZGVyPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbV9fdmlldy0tbG9hZGluZ1wiICpuZ0lmPVwic3RhdGUgPT0gc3RhdGVzLmxvYWRpbmcgICYmIGxvYWRpbmdTdGF0ZVZpZXdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1N0YXRlVmlld1wiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlcnJvcl9fdmlld1wiICpuZ0lmPVwic3RhdGUgPT0gc3RhdGVzLmVycm9yICAmJiAhaGlkZUVycm9yIFwiPlxuICAgICAgICA8Y29tZXRjaGF0LWxhYmVsIFtsYWJlbFN0eWxlXT1cImVycm9yU3R5bGUoKVwiICpuZ0lmPVwic3RhdGUgPT0gc3RhdGVzLmVycm9yICAmJiAhaGlkZUVycm9yICYmICFlcnJvclN0YXRlVmlld1wiIFt0ZXh0XT1cImVycm9yU3RhdGVUZXh0XCJcbiAgICAgICAgICA+XG4gICAgICAgIDwvY29tZXRjaGF0LWxhYmVsPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbV9fdmlldy0tZXJyb3JcIiAqbmdJZj1cInN0YXRlID09IHN0YXRlcy5lcnJvciAgJiYgIWhpZGVFcnJvciAmJiBlcnJvclN0YXRlVmlld1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlcnJvclN0YXRlVmlld1wiPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eV9fdmlld1wiICpuZ0lmPVwic3RhdGUgPT0gc3RhdGVzLmVtcHR5XCI+XG4gICAgICAgIDxjb21ldGNoYXQtbGFiZWwgW2xhYmVsU3R5bGVdPVwiZW1wdHlTdHlsZSgpXCIgKm5nSWY9XCJzdGF0ZSA9PSBzdGF0ZXMuZW1wdHkgJiYgIWVtcHR5U3RhdGVWaWV3XCIgW3RleHRdPVwiZW1wdHlTdGF0ZVRleHRcIlxuICAgICAgICAgID5cbiAgICAgICAgPC9jb21ldGNoYXQtbGFiZWw+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tX192aWV3LS1lbXB0eVwiICpuZ0lmPVwic3RhdGUgPT0gc3RhdGVzLmVtcHR5ICYmIGVtcHR5U3RhdGVWaWV3XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5U3RhdGVWaWV3XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsaXN0aXRlbV9fdmlld1wiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxpc3Q7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0X19zZWN0aW9uXCIgKm5nSWY9XCJzaG93U2VjdGlvbkhlYWRlclwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaSA+IDA7IGVsc2UgZWxzZUJsb2NrXCIgY2xhc3M9XCJzZWN0aW9uX19zZXBhcmF0b3JcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGxpc3RbaSAtIDFdW3NlY3Rpb25IZWFkZXJGaWVsZF1bMF0udG9VcHBlckNhc2UoKSAhPT1cbiAgICAgICAgICAgICAgbGlzdFtpXVtzZWN0aW9uSGVhZGVyRmllbGRdWzBdLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgIFwiIGNsYXNzPVwic2VjdGlvbl9faGVhZGVyXCIgW25nU3R5bGVdPVwic2VjdGlvbkhlYWRlclN0eWxlKClcIj5cbiAgICAgICAgICAgIHt7IGxpc3RbaV1bc2VjdGlvbkhlYWRlckZpZWxkXVswXS50b1VwcGVyQ2FzZSgpIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbl9faGVhZGVyXCIgW25nU3R5bGVdPVwic2VjdGlvbkhlYWRlclN0eWxlKClcIj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICBsaXN0W2ldW3NlY3Rpb25IZWFkZXJGaWVsZF1bMF0udG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxpc3RJdGVtVmlldztjb250ZXh0OnsgJGltcGxpY2l0OiBpdGVtIH1cIj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsaXN0X19ib3R0b21cIiAjYm90dG9tPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -1,7 +1,6 @@
1
1
  import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
2
- import { MessageBubbleAlignment } from '@cometchat/uikit-shared';
3
2
  import { MenuListStyle } from '@cometchat/uikit-elements';
4
- import { CometChatTheme } from '@cometchat/uikit-resources';
3
+ import { CometChatTheme, MessageBubbleAlignment } from '@cometchat/uikit-resources';
5
4
  import * as i0 from "@angular/core";
6
5
  import * as i1 from "../../CometChatTheme.service";
7
6
  import * as i2 from "@angular/common";
@@ -123,10 +122,10 @@ export class CometChatMessageBubbleComponent {
123
122
  }
124
123
  }
125
124
  CometChatMessageBubbleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatMessageBubbleComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }], target: i0.ɵɵFactoryTarget.Component });
126
- CometChatMessageBubbleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatMessageBubbleComponent, selector: "cometchat-message-bubble", inputs: { messageBubbleStyle: "messageBubbleStyle", alignment: "alignment", options: "options", id: "id", leadingView: "leadingView", headerView: "headerView", replyView: "replyView", contentView: "contentView", threadView: "threadView", footerView: "footerView", bottomView: "bottomView", moreIconURL: "moreIconURL", topMenuSize: "topMenuSize" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-message-bubble__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-message-bubble__container\" (mouseenter)=\"hideShowMenuOption($event)\"\n(mouseleave)=\"hideShowMenuOption($event)\">\n<div class=\"cc-message-bubble__avatar\" *ngIf=\"leadingView\">\n <ng-container *ngTemplateOutlet=\"leadingView\">\n </ng-container>\n</div>\n<div class=\"cc-message-bubble\" [ngStyle]=\"bubbleAlignmentStyle()\">\n <div class=\"cc-message-bubble__title\" [ngStyle]=\"titleStyle()\" *ngIf=\"headerView\">\n<ng-container [ngTemplateOutlet]=\"headerView\">\n</ng-container>\n </div>\n <div class=\"cc-messageoptions\" *ngIf=\"options && options.length >= 1 && isHovering\" [ngStyle]=\"optionsStyles()\">\n<cometchat-menu-list [moreIconURL]=\"moreIconURL\" [topMenuSize]=\"topMenuSize\" [menuListStyle]=\"optionsStyle\" [data]=\"options\" (cc-menu-clicked)=\"onOptionClick($event)\">\n</cometchat-menu-list>\n </div>\n <div class=\"cc-message-bubble__content\" [ngStyle]=\"bubbleStyle()\">\n<ng-container *ngTemplateOutlet=\"replyView\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"contentView\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"bottomView\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"threadView\">\n</ng-container>\n<div>\n</div>\n </div>\n <ng-container *ngTemplateOutlet=\"footerView\">\n </ng-container>\n</div>\n </div>\n</div>", styles: ["*{box-sizing:border-box}.cc-message-bubble__wrapper{position:relative}.cc-message-bubble__container{padding-right:8px;border-radius:inherit;display:flex;height:-moz-fit-content;height:fit-content;width:-moz-fit-content;width:fit-content;max-width:75%}.cc-message-bubble{flex:1 1 0;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-end;min-width:0;padding:8px 2px;border-radius:inherit}.cc-message-bubble__avatar{position:relative;border-radius:inherit;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-end;padding:8px 4px;margin-top:5px}.cc-message-bubble__title:empty:before{display:none}.cc-message-bubble__title:empty:after{display:block;width:100%;height:20px;padding:0 8px}.cc-message-bubble__content{border-radius:8px}.cc-message-bubble__content .ng-star-inserted{border-radius:inherit}.cc-messageoptions{position:absolute;top:-4px;display:flex;align-items:center;justify-content:flex-end;z-index:1}\n"], directives: [{ type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
125
+ CometChatMessageBubbleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatMessageBubbleComponent, selector: "cometchat-message-bubble", inputs: { messageBubbleStyle: "messageBubbleStyle", alignment: "alignment", options: "options", id: "id", leadingView: "leadingView", headerView: "headerView", replyView: "replyView", contentView: "contentView", threadView: "threadView", footerView: "footerView", bottomView: "bottomView", moreIconURL: "moreIconURL", topMenuSize: "topMenuSize" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-message-bubble__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-message-bubble__container\" (mouseenter)=\"hideShowMenuOption($event)\"\n(mouseleave)=\"hideShowMenuOption($event)\">\n<div class=\"cc-message-bubble__avatar\" *ngIf=\"leadingView\">\n <ng-container *ngTemplateOutlet=\"leadingView\">\n </ng-container>\n</div>\n<div class=\"cc-message-bubble\" [ngStyle]=\"bubbleAlignmentStyle()\">\n <div class=\"cc-message-bubble__title\" [ngStyle]=\"titleStyle()\" *ngIf=\"headerView\">\n<ng-container [ngTemplateOutlet]=\"headerView\">\n</ng-container>\n </div>\n <div class=\"cc-messageoptions\" *ngIf=\"options && options.length >= 1 && isHovering\" [ngStyle]=\"optionsStyles()\">\n<cometchat-menu-list [moreIconURL]=\"moreIconURL\" [topMenuSize]=\"topMenuSize\" [menuListStyle]=\"optionsStyle\" [data]=\"options\" (cc-menu-clicked)=\"onOptionClick($event)\">\n</cometchat-menu-list>\n </div>\n <div class=\"cc-message-bubble__content\" [ngStyle]=\"bubbleStyle()\">\n<ng-container *ngTemplateOutlet=\"replyView\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"contentView\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"bottomView\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"threadView\">\n</ng-container>\n<div>\n</div>\n </div>\n <ng-container *ngTemplateOutlet=\"footerView\">\n </ng-container>\n</div>\n </div>\n</div>\n", styles: ["*{box-sizing:border-box}.cc-message-bubble__wrapper{position:relative}.cc-message-bubble__container{padding-right:8px;border-radius:inherit;display:flex;height:-moz-fit-content;height:fit-content;width:-moz-fit-content;width:fit-content;max-width:65%}.cc-message-bubble{flex:1 1 0;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-end;min-width:0;padding:8px 2px;border-radius:inherit}.cc-message-bubble__avatar{position:relative;border-radius:inherit;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-end;padding:8px 4px;margin-top:5px}.cc-message-bubble__title:empty:before{display:none}.cc-message-bubble__title:empty:after{display:block;width:100%;height:20px;padding:0 8px}.cc-message-bubble__content{border-radius:8px;width:-moz-fit-content;width:fit-content;overflow:hidden}.cc-message-bubble__content .ng-star-inserted{border-radius:inherit}.cc-messageoptions{position:absolute;top:-4px;display:flex;align-items:center;justify-content:flex-end;z-index:1}\n"], directives: [{ type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
127
126
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatMessageBubbleComponent, decorators: [{
128
127
  type: Component,
129
- args: [{ selector: 'cometchat-message-bubble', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-message-bubble__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-message-bubble__container\" (mouseenter)=\"hideShowMenuOption($event)\"\n(mouseleave)=\"hideShowMenuOption($event)\">\n<div class=\"cc-message-bubble__avatar\" *ngIf=\"leadingView\">\n <ng-container *ngTemplateOutlet=\"leadingView\">\n </ng-container>\n</div>\n<div class=\"cc-message-bubble\" [ngStyle]=\"bubbleAlignmentStyle()\">\n <div class=\"cc-message-bubble__title\" [ngStyle]=\"titleStyle()\" *ngIf=\"headerView\">\n<ng-container [ngTemplateOutlet]=\"headerView\">\n</ng-container>\n </div>\n <div class=\"cc-messageoptions\" *ngIf=\"options && options.length >= 1 && isHovering\" [ngStyle]=\"optionsStyles()\">\n<cometchat-menu-list [moreIconURL]=\"moreIconURL\" [topMenuSize]=\"topMenuSize\" [menuListStyle]=\"optionsStyle\" [data]=\"options\" (cc-menu-clicked)=\"onOptionClick($event)\">\n</cometchat-menu-list>\n </div>\n <div class=\"cc-message-bubble__content\" [ngStyle]=\"bubbleStyle()\">\n<ng-container *ngTemplateOutlet=\"replyView\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"contentView\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"bottomView\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"threadView\">\n</ng-container>\n<div>\n</div>\n </div>\n <ng-container *ngTemplateOutlet=\"footerView\">\n </ng-container>\n</div>\n </div>\n</div>", styles: ["*{box-sizing:border-box}.cc-message-bubble__wrapper{position:relative}.cc-message-bubble__container{padding-right:8px;border-radius:inherit;display:flex;height:-moz-fit-content;height:fit-content;width:-moz-fit-content;width:fit-content;max-width:75%}.cc-message-bubble{flex:1 1 0;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-end;min-width:0;padding:8px 2px;border-radius:inherit}.cc-message-bubble__avatar{position:relative;border-radius:inherit;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-end;padding:8px 4px;margin-top:5px}.cc-message-bubble__title:empty:before{display:none}.cc-message-bubble__title:empty:after{display:block;width:100%;height:20px;padding:0 8px}.cc-message-bubble__content{border-radius:8px}.cc-message-bubble__content .ng-star-inserted{border-radius:inherit}.cc-messageoptions{position:absolute;top:-4px;display:flex;align-items:center;justify-content:flex-end;z-index:1}\n"] }]
128
+ args: [{ selector: 'cometchat-message-bubble', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-message-bubble__wrapper\" [ngStyle]=\"wrapperStyle()\">\n <div class=\"cc-message-bubble__container\" (mouseenter)=\"hideShowMenuOption($event)\"\n(mouseleave)=\"hideShowMenuOption($event)\">\n<div class=\"cc-message-bubble__avatar\" *ngIf=\"leadingView\">\n <ng-container *ngTemplateOutlet=\"leadingView\">\n </ng-container>\n</div>\n<div class=\"cc-message-bubble\" [ngStyle]=\"bubbleAlignmentStyle()\">\n <div class=\"cc-message-bubble__title\" [ngStyle]=\"titleStyle()\" *ngIf=\"headerView\">\n<ng-container [ngTemplateOutlet]=\"headerView\">\n</ng-container>\n </div>\n <div class=\"cc-messageoptions\" *ngIf=\"options && options.length >= 1 && isHovering\" [ngStyle]=\"optionsStyles()\">\n<cometchat-menu-list [moreIconURL]=\"moreIconURL\" [topMenuSize]=\"topMenuSize\" [menuListStyle]=\"optionsStyle\" [data]=\"options\" (cc-menu-clicked)=\"onOptionClick($event)\">\n</cometchat-menu-list>\n </div>\n <div class=\"cc-message-bubble__content\" [ngStyle]=\"bubbleStyle()\">\n<ng-container *ngTemplateOutlet=\"replyView\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"contentView\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"bottomView\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"threadView\">\n</ng-container>\n<div>\n</div>\n </div>\n <ng-container *ngTemplateOutlet=\"footerView\">\n </ng-container>\n</div>\n </div>\n</div>\n", styles: ["*{box-sizing:border-box}.cc-message-bubble__wrapper{position:relative}.cc-message-bubble__container{padding-right:8px;border-radius:inherit;display:flex;height:-moz-fit-content;height:fit-content;width:-moz-fit-content;width:fit-content;max-width:65%}.cc-message-bubble{flex:1 1 0;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-end;min-width:0;padding:8px 2px;border-radius:inherit}.cc-message-bubble__avatar{position:relative;border-radius:inherit;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-end;padding:8px 4px;margin-top:5px}.cc-message-bubble__title:empty:before{display:none}.cc-message-bubble__title:empty:after{display:block;width:100%;height:20px;padding:0 8px}.cc-message-bubble__content{border-radius:8px;width:-moz-fit-content;width:fit-content;overflow:hidden}.cc-message-bubble__content .ng-star-inserted{border-radius:inherit}.cc-messageoptions{position:absolute;top:-4px;display:flex;align-items:center;justify-content:flex-end;z-index:1}\n"] }]
130
129
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }]; }, propDecorators: { messageBubbleStyle: [{
131
130
  type: Input
132
131
  }], alignment: [{
@@ -154,4 +153,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
154
153
  }], topMenuSize: [{
155
154
  type: Input
156
155
  }] } });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LW1lc3NhZ2UtYnViYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TWVzc2FnZUJ1YmJsZS9jb21ldGNoYXQtbWVzc2FnZS1idWJibGUvY29tZXRjaGF0LW1lc3NhZ2UtYnViYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TWVzc2FnZUJ1YmJsZS9jb21ldGNoYXQtbWVzc2FnZS1idWJibGUvY29tZXRjaGF0LW1lc3NhZ2UtYnViYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFzQix1QkFBdUIsRUFBeUMsTUFBTSxlQUFlLENBQUM7QUFDN0ksT0FBTyxFQUFjLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0UsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDJCQUEyQixDQUFBO0FBRXZELE9BQU8sRUFBMEIsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFPcEYsTUFBTSxPQUFPLCtCQUErQjtJQWtDMUMsWUFBb0IsR0FBc0IsRUFBUyxZQUFrQztRQUFqRSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFzQjtRQWpDNUUsdUJBQWtCLEdBQWM7WUFDdkMsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLFVBQVUsRUFBRSxFQUFFO1lBQ2QsWUFBWSxFQUFFLE1BQU07WUFDcEIsTUFBTSxFQUFDLE1BQU07U0FDZCxDQUFDO1FBQ08sY0FBUyxHQUEyQixzQkFBc0IsQ0FBQyxLQUFLLENBQUM7UUFDakUsWUFBTyxHQUE0QixFQUFFLENBQUM7UUFDdEMsT0FBRSxHQUEr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QUFLO2dCQU9HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQVlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgIENoYW5nZURldGVjdG9yUmVmLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVGVtcGxhdGVSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZVN0eWxlLCAgTWVzc2FnZUJ1YmJsZUFsaWdubWVudCB9IGZyb20gJ0Bjb21ldGNoYXQvdWlraXQtc2hhcmVkJztcbmltcG9ydCB7TWVudUxpc3RTdHlsZX0gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1lbGVtZW50cydcbmltcG9ydCB7IENvbWV0Q2hhdFRoZW1lU2VydmljZSB9IGZyb20gJy4uLy4uL0NvbWV0Q2hhdFRoZW1lLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiwgQ29tZXRDaGF0VGhlbWUgfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlcyc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjb21ldGNoYXQtbWVzc2FnZS1idWJibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29tZXRjaGF0LW1lc3NhZ2UtYnViYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29tZXRjaGF0LW1lc3NhZ2UtYnViYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIENvbWV0Q2hhdE1lc3NhZ2VCdWJibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgbWVzc2FnZUJ1YmJsZVN0eWxlOiBCYXNlU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCJhdXRvXCIsXG4gICAgYmFja2dyb3VuZDogXCJcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMTJweFwiLFxuICAgIGJvcmRlcjpcIm5vbmVcIlxuICB9O1xuICBASW5wdXQoKSBhbGlnbm1lbnQ6TWVzc2FnZUJ1YmJsZUFsaWdubWVudCAgPSBNZXNzYWdlQnViYmxlQWxpZ25tZW50LnJpZ2h0O1xuICBASW5wdXQoKSBvcHRpb25zOkNvbWV0Q2hhdE1lc3NhZ2VPcHRpb25bXSA9IFtdO1xuICBASW5wdXQoKSBpZDpudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGxlYWRpbmdWaWV3ITogVGVtcGxhdGVSZWY8YW55PiB8IG51bGw7XG4gIEBJbnB1dCgpIGhlYWRlclZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcbiAgQElucHV0KCkgcmVwbHlWaWV3ITogVGVtcGxhdGVSZWY8YW55PiB8IG51bGw7XG4gIEBJbnB1dCgpIGNvbnRlbnRWaWV3ITogVGVtcGxhdGVSZWY8YW55PiB8IG51bGw7XG4gIEBJbnB1dCgpIHRocmVhZFZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcbiAgQElucHV0KCkgZm9vdGVyVmlldyE6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICBASW5wdXQoKSBib3R0b21WaWV3ITogVGVtcGxhdGVSZWY8YW55PiB8IG51bGw7XG4gICBvcHRpb25zU3R5bGU6TWVudUxpc3RTdHlsZSA9IHtcbiAgICB3aWR0aDogXCJcIixcbiAgICBoZWlnaHQ6IFwiXCIsXG4gICAgYm9yZGVyOiBcIjFweCBzb2xpZCAjZThlOGU4XCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiLFxuICAgIHN1Ym1lbnVXaWR0aDogXCIxMDAlXCIsXG4gICAgc3VibWVudUhlaWdodDogXCIxMDAlXCIsXG4gICAgc3VibWVudUJvcmRlcjogXCIxcHggc29saWQgI2U4ZThlOFwiLFxuICAgIHN1Ym1lbnVCb3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgbW9yZUljb25UaW50OlwiZ3JleVwiXG4gIH1cbiAgQElucHV0KCkgbW9yZUljb25VUkw6IHN0cmluZyA9IFwiYXNzZXRzL21vcmVpY29uLnN2Z1wiO1xuICBASW5wdXQoKSB0b3BNZW51U2l6ZTogbnVtYmVyID0gMztcbiAgcHVibGljIHRoZW1lOkNvbWV0Q2hhdFRoZW1lID1uZXcgQ29tZXRDaGF0VGhlbWUoe30pXG4gIHB1YmxpYyB1aWtpdENvbnN0YW50OiB0eXBlb2YgTWVzc2FnZUJ1YmJsZUFsaWdubWVudCA9ICBNZXNzYWdlQnViYmxlQWxpZ25tZW50O1xuICBwdWJsaWMgaXNIb3ZlcmluZzpib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixwcml2YXRlIHRoZW1lU2VydmljZTpDb21ldENoYXRUaGVtZVNlcnZpY2UpIHsgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zU3R5bGUgPSBuZXcgTWVudUxpc3RTdHlsZSh7XG4gICAgICBib3JkZXI6YDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MjAwKCl9YCxcbiAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIixcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgc3VibWVudVdpZHRoOiBcIjEwMCVcIixcbiAgICAgIHN1Ym1lbnVIZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgc3VibWVudUJvcmRlcjogYDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MjAwKCl9YCxcbiAgICAgIHN1Ym1lbnVCb3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBzdWJtZW51QmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBtb3JlSWNvblRpbnQ6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKVxuICAgIH0pXG4gIH1cbiAgLyoqXG4gICAqIGhpZGUgc2hvdyBtZW51IG9wdGlvbnMgb24gaG92ZXJcbiAgICogQHBhcmFtICB7TW91c2VFdmVudH0gZXZlbnQ/XG4gICAqL1xuICAgaGlkZVNob3dNZW51T3B0aW9uKGV2ZW50PzogTW91c2VFdmVudCkge1xuICAgIHRoaXMuaXNIb3ZlcmluZyA9IGV2ZW50Py50eXBlID09PSBcIm1vdXNlZW50ZXJcIjtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuICAvKipcbiAgICogQHBhcmFtICB7YW55fSBldmVudFxuICAgKi9cbiAgIG9uT3B0aW9uQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IG9uQ2xpY2sgPSBldmVudD8uZGV0YWlsPy5kYXRhPy5vbkNsaWNrO1xuICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICBvbkNsaWNrKHRoaXMuaWQsZXZlbnQ/LmRldGFpbD8uZXZlbnQpO1xuICAgIH1cbiAgfVxuICB3cmFwcGVyU3R5bGUgPSAoKSA9PiB7XG4gICAgc3dpdGNoICh0aGlzLmFsaWdubWVudCkge1xuICAgICAgY2FzZSBNZXNzYWdlQnViYmxlQWxpZ25tZW50LnJpZ2h0OlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImZsZXgtZW5kXCJcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgTWVzc2FnZUJ1YmJsZUFsaWdubWVudC5sZWZ0OlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcImZsZXgtc3RhcnRcIlxuICAgICAgICB9O1xuICAgICAgY2FzZSBNZXNzYWdlQnViYmxlQWxpZ25tZW50LmNlbnRlcjpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIlxuICAgICAgICB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIlxuICAgICAgICB9O1xuICAgIH1cbiAgfTtcbiAgYnViYmxlU3R5bGUgPSAoKT0+e1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLm1lc3NhZ2VCdWJibGVTdHlsZSxcbiAgICAgIGRpc3BsYXk6XCJmbGV4XCIsXG4gICAgICBmbGV4RGlyZWN0aW9uOlwiY29sdW1uXCIsXG4gICAgICBhbGlnbkl0ZW1zOiBcImZsZXgtc3RhcnRcIlxuICAgIH1cbiAgfVxuICBidWJibGVBbGlnbm1lbnRTdHlsZSgpOmFueXtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheTpcImZsZXhcIixcbiAgICAgIGp1c3RpZnlDb250ZW50OlwiZmxleC1zdGFydFwiLFxuICAgICAgYWxpZ25JdGVtczp0aGlzLmFsaWdubWVudCA9PSBNZXNzYWdlQnViYmxlQWxpZ25tZW50LmxlZnQ/IFwiZmxleC1zdGFydFwiIDogXCJmbGV4LWVuZFwiLFxuICAgIH1cbiAgfVxuICBvcHRpb25zU3R5bGVzOmFueSA9ICgpICA9PntcbiAgICByZXR1cm4ge1xuICAgICAganVzdGlmeUNvbnRlbnQ6IHRoaXMuYWxpZ25tZW50ID09IE1lc3NhZ2VCdWJibGVBbGlnbm1lbnQubGVmdCA/IFwiZmxleC1zdGFydFwiIDogXCJmbGV4LWVuZFwiLFxuICAgICAgdG9wOiB0aGlzLmhlYWRlclZpZXcgJiYgdGhpcy5hbGlnbm1lbnQgPT0gTWVzc2FnZUJ1YmJsZUFsaWdubWVudC5sZWZ0ID8gXCItNHB4XCIgOiBcIi0yNHB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpXG4gICAgfVxuICB9XG4gIHRpdGxlU3R5bGUoKXtcbiAgICByZXR1cm57XG4gICAgICBkaXNwbGF5OlwiZmxleFwiLFxuICAgICAganVzdGlmeUNvbnRlbnQ6IHRoaXMuYWxpZ25tZW50ID09IE1lc3NhZ2VCdWJibGVBbGlnbm1lbnQubGVmdCA/IFwiZmxleC1zdGFydFwiIDogXCJmbGV4LWVuZFwiLFxuICAgICAgYWxpZ25JdGVtczpcImZsZXgtc3RhcnRcIlxuICAgIH1cbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlLWJ1YmJsZV9fd3JhcHBlclwiIFtuZ1N0eWxlXT1cIndyYXBwZXJTdHlsZSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlLWJ1YmJsZV9fY29udGFpbmVyXCIgKG1vdXNlZW50ZXIpPVwiaGlkZVNob3dNZW51T3B0aW9uKCRldmVudClcIlxuKG1vdXNlbGVhdmUpPVwiaGlkZVNob3dNZW51T3B0aW9uKCRldmVudClcIj5cbjxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlLWJ1YmJsZV9fYXZhdGFyXCIgKm5nSWY9XCJsZWFkaW5nVmlld1wiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibGVhZGluZ1ZpZXdcIj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlLWJ1YmJsZVwiIFtuZ1N0eWxlXT1cImJ1YmJsZUFsaWdubWVudFN0eWxlKClcIj5cbiAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2UtYnViYmxlX190aXRsZVwiIFtuZ1N0eWxlXT1cInRpdGxlU3R5bGUoKVwiICpuZ0lmPVwiaGVhZGVyVmlld1wiPlxuPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkZXJWaWV3XCI+XG48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlb3B0aW9uc1wiICpuZ0lmPVwib3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA+PSAxICYmIGlzSG92ZXJpbmdcIiBbbmdTdHlsZV09XCJvcHRpb25zU3R5bGVzKClcIj5cbjxjb21ldGNoYXQtbWVudS1saXN0IFttb3JlSWNvblVSTF09XCJtb3JlSWNvblVSTFwiIFt0b3BNZW51U2l6ZV09XCJ0b3BNZW51U2l6ZVwiIFttZW51TGlzdFN0eWxlXT1cIm9wdGlvbnNTdHlsZVwiIFtkYXRhXT1cIm9wdGlvbnNcIiAoY2MtbWVudS1jbGlja2VkKT1cIm9uT3B0aW9uQ2xpY2soJGV2ZW50KVwiPlxuPC9jb21ldGNoYXQtbWVudS1saXN0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2UtYnViYmxlX19jb250ZW50XCIgW25nU3R5bGVdPVwiYnViYmxlU3R5bGUoKVwiPlxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJlcGx5Vmlld1wiPlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFZpZXdcIj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvdHRvbVZpZXdcIj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRocmVhZFZpZXdcIj5cbjwvbmctY29udGFpbmVyPlxuPGRpdj5cbjwvZGl2PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclZpZXdcIj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LW1lc3NhZ2UtYnViYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TWVzc2FnZUJ1YmJsZS9jb21ldGNoYXQtbWVzc2FnZS1idWJibGUvY29tZXRjaGF0LW1lc3NhZ2UtYnViYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TWVzc2FnZUJ1YmJsZS9jb21ldGNoYXQtbWVzc2FnZS1idWJibGUvY29tZXRjaGF0LW1lc3NhZ2UtYnViYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFzQix1QkFBdUIsRUFBeUMsTUFBTSxlQUFlLENBQUM7QUFFN0ksT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDJCQUEyQixDQUFBO0FBRXZELE9BQU8sRUFBMEIsY0FBYyxFQUFFLHNCQUFzQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7Ozs7QUFPM0csTUFBTSxPQUFPLCtCQUErQjtJQWtDMUMsWUFBb0IsR0FBc0IsRUFBUyxZQUFrQztRQUFqRSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFzQjtRQWpDNUUsdUJBQWtCLEdBQWM7WUFDdkMsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLFVBQVUsRUFBRSxFQUFFO1lBQ2QsWUFBWSxFQUFFLE1BQU07WUFDcEIsTUFBTSxFQUFDLE1BQU07U0FDZCxDQUFDO1FBQ08sY0FBUyxHQUEyQixzQkFBc0IsQ0FBQyxLQUFLLENBQUM7UUFDakUsWUFBTyxHQUE0QixFQUFFLENBQUM7UUFDdEMsT0FBRSxHQUErQixTQUFTLENBQUM7UUFRbkQsaUJBQVksR0FBaUI7WUFDNUIsS0FBSyxFQUFFLEVBQUU7WUFDVCxNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxtQkFBbUI7WUFDM0IsWUFBWSxFQUFFLEtBQUs7WUFDbkIsWUFBWSxFQUFFLE1BQU07WUFDcEIsYUFBYSxFQUFFLE1BQU07WUFDckIsYUFBYSxFQUFFLG1CQUFtQjtZQUNsQyxtQkFBbUIsRUFBRSxLQUFLO1lBQzFCLFlBQVksRUFBQyxNQUFNO1NBQ3BCLENBQUE7UUFDUSxnQkFBVyxHQUFXLHFCQUFxQixDQUFDO1FBQzVDLGdCQUFXLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLFVBQUssR0FBaUIsSUFBSSxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDNUMsa0JBQWEsR0FBbUMsc0JBQXNCLENBQUM7UUFDdkUsZUFBVSxHQUFXLEtBQUssQ0FBQztRQWtDbEMsaUJBQVksR0FBRyxHQUFHLEVBQUU7WUFDbEIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUN0QixLQUFLLHNCQUFzQixDQUFDLEtBQUs7b0JBQy9CLE9BQU87d0JBQ0wsT0FBTyxFQUFFLE1BQU07d0JBQ2YsY0FBYyxFQUFFLFVBQVU7cUJBQzNCLENBQUM7Z0JBQ0osS0FBSyxzQkFBc0IsQ0FBQyxJQUFJO29CQUM5QixPQUFPO3dCQUNMLE9BQU8sRUFBRSxNQUFNO3dCQUNmLGNBQWMsRUFBRSxZQUFZO3FCQUM3QixDQUFDO2dCQUNKLEtBQUssc0JBQXNCLENBQUMsTUFBTTtvQkFDaEMsT0FBTzt3QkFDTCxPQUFPLEVBQUUsTUFBTTt3QkFDZixjQUFjLEVBQUUsUUFBUTtxQkFDekIsQ0FBQztnQkFDSjtvQkFDRSxPQUFPO3dCQUNMLE9BQU8sRUFBRSxNQUFNO3dCQUNmLGNBQWMsRUFBRSxRQUFRO3FCQUN6QixDQUFDO2FBQ0w7UUFDSCxDQUFDLENBQUM7UUFDRixnQkFBVyxHQUFHLEdBQUUsRUFBRTtZQUNoQixPQUFPO2dCQUNMLEdBQUcsSUFBSSxDQUFDLGtCQUFrQjtnQkFDMUIsT0FBTyxFQUFDLE1BQU07Z0JBQ2QsYUFBYSxFQUFDLFFBQVE7Z0JBQ3RCLFVBQVUsRUFBRSxZQUFZO2FBQ3pCLENBQUE7UUFDSCxDQUFDLENBQUE7UUFRRCxrQkFBYSxHQUFPLEdBQUksRUFBRTtZQUN4QixPQUFPO2dCQUNMLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxVQUFVO2dCQUN6RixHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPO2dCQUN4RixVQUFVLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTthQUMzRCxDQUFBO1FBQ0gsQ0FBQyxDQUFBO0lBOUV3RixDQUFDO0lBQzFGLFdBQVcsQ0FBQyxPQUFzQjtJQUNsQyxDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxhQUFhLENBQUM7WUFDcEMsTUFBTSxFQUFDLGFBQWEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3BFLFlBQVksRUFBRSxLQUFLO1lBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQzNELFlBQVksRUFBRSxNQUFNO1lBQ3BCLGFBQWEsRUFBRSxNQUFNO1lBQ3JCLGFBQWEsRUFBRSxhQUFhLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUM1RSxtQkFBbUIsRUFBRSxLQUFLO1lBQzFCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDbEUsWUFBWSxFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7U0FDekQsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNEOzs7T0FHRztJQUNGLGtCQUFrQixDQUFDLEtBQWtCO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxFQUFFLElBQUksS0FBSyxZQUFZLENBQUM7UUFDL0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBQ0Q7O09BRUc7SUFDRixhQUFhLENBQUMsS0FBVTtRQUN2QixNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUM7UUFDN0MsSUFBSSxPQUFPLEVBQUU7WUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQWlDRCxvQkFBb0I7UUFDbEIsT0FBTztZQUNMLE9BQU8sRUFBQyxNQUFNO1lBQ2QsY0FBYyxFQUFDLFlBQVk7WUFDM0IsVUFBVSxFQUFDLElBQUksQ0FBQyxTQUFTLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVU7U0FDcEYsQ0FBQTtJQUNILENBQUM7SUFRRCxVQUFVO1FBQ1IsT0FBTTtZQUNKLE9BQU8sRUFBQyxNQUFNO1lBQ2QsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFVBQVU7WUFDekYsVUFBVSxFQUFDLFlBQVk7U0FDeEIsQ0FBQTtJQUNILENBQUM7OzZIQXZIVSwrQkFBK0I7aUhBQS9CLCtCQUErQixpYkNYNUMsKzJDQWlDQTs0RkR0QmEsK0JBQStCO2tCQU4zQyxTQUFTOytCQUNFLDBCQUEwQixtQkFHbkIsdUJBQXVCLENBQUMsTUFBTTs0SUFHdEMsa0JBQWtCO3NCQUExQixLQUFLO2dCQU9HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQVlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgIENoYW5nZURldGVjdG9yUmVmLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgVGVtcGxhdGVSZWYsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmFzZVN0eWxlIH0gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1zaGFyZWQnO1xuaW1wb3J0IHtNZW51TGlzdFN0eWxlfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzJ1xuaW1wb3J0IHsgQ29tZXRDaGF0VGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vQ29tZXRDaGF0VGhlbWUuc2VydmljZSc7XG5pbXBvcnQgeyBDb21ldENoYXRNZXNzYWdlT3B0aW9uLCBDb21ldENoYXRUaGVtZSAsTWVzc2FnZUJ1YmJsZUFsaWdubWVudH0gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1yZXNvdXJjZXMnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY29tZXRjaGF0LW1lc3NhZ2UtYnViYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbWV0Y2hhdC1tZXNzYWdlLWJ1YmJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbWV0Y2hhdC1tZXNzYWdlLWJ1YmJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBDb21ldENoYXRNZXNzYWdlQnViYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIG1lc3NhZ2VCdWJibGVTdHlsZTogQmFzZVN0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiYXV0b1wiLFxuICAgIGJhY2tncm91bmQ6IFwiXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjEycHhcIixcbiAgICBib3JkZXI6XCJub25lXCJcbiAgfTtcbiAgQElucHV0KCkgYWxpZ25tZW50Ok1lc3NhZ2VCdWJibGVBbGlnbm1lbnQgID0gTWVzc2FnZUJ1YmJsZUFsaWdubWVudC5yaWdodDtcbiAgQElucHV0KCkgb3B0aW9uczpDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgQElucHV0KCkgaWQ6bnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBASW5wdXQoKSBsZWFkaW5nVmlldyE6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICBASW5wdXQoKSBoZWFkZXJWaWV3ITogVGVtcGxhdGVSZWY8YW55PiB8IG51bGw7XG4gIEBJbnB1dCgpIHJlcGx5VmlldyE6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICBASW5wdXQoKSBjb250ZW50VmlldyE6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICBASW5wdXQoKSB0aHJlYWRWaWV3ITogVGVtcGxhdGVSZWY8YW55PiB8IG51bGw7XG4gIEBJbnB1dCgpIGZvb3RlclZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcbiAgQElucHV0KCkgYm90dG9tVmlldyE6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICAgb3B0aW9uc1N0eWxlOk1lbnVMaXN0U3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiXCIsXG4gICAgaGVpZ2h0OiBcIlwiLFxuICAgIGJvcmRlcjogXCIxcHggc29saWQgI2U4ZThlOFwiLFxuICAgIGJvcmRlclJhZGl1czogXCI4cHhcIixcbiAgICBzdWJtZW51V2lkdGg6IFwiMTAwJVwiLFxuICAgIHN1Ym1lbnVIZWlnaHQ6IFwiMTAwJVwiLFxuICAgIHN1Ym1lbnVCb3JkZXI6IFwiMXB4IHNvbGlkICNlOGU4ZThcIixcbiAgICBzdWJtZW51Qm9yZGVyUmFkaXVzOiBcIjhweFwiLFxuICAgIG1vcmVJY29uVGludDpcImdyZXlcIlxuICB9XG4gIEBJbnB1dCgpIG1vcmVJY29uVVJMOiBzdHJpbmcgPSBcImFzc2V0cy9tb3JlaWNvbi5zdmdcIjtcbiAgQElucHV0KCkgdG9wTWVudVNpemU6IG51bWJlciA9IDM7XG4gIHB1YmxpYyB0aGVtZTpDb21ldENoYXRUaGVtZSA9bmV3IENvbWV0Q2hhdFRoZW1lKHt9KVxuICBwdWJsaWMgdWlraXRDb25zdGFudDogdHlwZW9mIE1lc3NhZ2VCdWJibGVBbGlnbm1lbnQgPSAgTWVzc2FnZUJ1YmJsZUFsaWdubWVudDtcbiAgcHVibGljIGlzSG92ZXJpbmc6Ym9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSB0aGVtZVNlcnZpY2U6Q29tZXRDaGF0VGhlbWVTZXJ2aWNlKSB7IH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9uc1N0eWxlID0gbmV3IE1lbnVMaXN0U3R5bGUoe1xuICAgICAgYm9yZGVyOmAxcHggc29saWQgJHt0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDIwMCgpfWAsXG4gICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIHN1Ym1lbnVXaWR0aDogXCIxMDAlXCIsXG4gICAgICBzdWJtZW51SGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgIHN1Ym1lbnVCb3JkZXI6IGAxcHggc29saWQgJHt0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDIwMCgpfWAsXG4gICAgICBzdWJtZW51Qm9yZGVyUmFkaXVzOiBcIjhweFwiLFxuICAgICAgc3VibWVudUJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgbW9yZUljb25UaW50OnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KClcbiAgICB9KVxuICB9XG4gIC8qKlxuICAgKiBoaWRlIHNob3cgbWVudSBvcHRpb25zIG9uIGhvdmVyXG4gICAqIEBwYXJhbSAge01vdXNlRXZlbnR9IGV2ZW50P1xuICAgKi9cbiAgIGhpZGVTaG93TWVudU9wdGlvbihldmVudD86IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmlzSG92ZXJpbmcgPSBldmVudD8udHlwZSA9PT0gXCJtb3VzZWVudGVyXCI7XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSAge2FueX0gZXZlbnRcbiAgICovXG4gICBvbk9wdGlvbkNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBvbkNsaWNrID0gZXZlbnQ/LmRldGFpbD8uZGF0YT8ub25DbGljaztcbiAgICBpZiAob25DbGljaykge1xuICAgICAgb25DbGljayh0aGlzLmlkLGV2ZW50Py5kZXRhaWw/LmV2ZW50KTtcbiAgICB9XG4gIH1cbiAgd3JhcHBlclN0eWxlID0gKCkgPT4ge1xuICAgIHN3aXRjaCAodGhpcy5hbGlnbm1lbnQpIHtcbiAgICAgIGNhc2UgTWVzc2FnZUJ1YmJsZUFsaWdubWVudC5yaWdodDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJmbGV4LWVuZFwiXG4gICAgICAgIH07XG4gICAgICBjYXNlIE1lc3NhZ2VCdWJibGVBbGlnbm1lbnQubGVmdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJmbGV4LXN0YXJ0XCJcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgTWVzc2FnZUJ1YmJsZUFsaWdubWVudC5jZW50ZXI6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCJcbiAgICAgICAgfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCJcbiAgICAgICAgfTtcbiAgICB9XG4gIH07XG4gIGJ1YmJsZVN0eWxlID0gKCk9PntcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5tZXNzYWdlQnViYmxlU3R5bGUsXG4gICAgICBkaXNwbGF5OlwiZmxleFwiLFxuICAgICAgZmxleERpcmVjdGlvbjpcImNvbHVtblwiLFxuICAgICAgYWxpZ25JdGVtczogXCJmbGV4LXN0YXJ0XCJcbiAgICB9XG4gIH1cbiAgYnViYmxlQWxpZ25tZW50U3R5bGUoKTphbnl7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc3BsYXk6XCJmbGV4XCIsXG4gICAgICBqdXN0aWZ5Q29udGVudDpcImZsZXgtc3RhcnRcIixcbiAgICAgIGFsaWduSXRlbXM6dGhpcy5hbGlnbm1lbnQgPT0gTWVzc2FnZUJ1YmJsZUFsaWdubWVudC5sZWZ0PyBcImZsZXgtc3RhcnRcIiA6IFwiZmxleC1lbmRcIixcbiAgICB9XG4gIH1cbiAgb3B0aW9uc1N0eWxlczphbnkgPSAoKSAgPT57XG4gICAgcmV0dXJuIHtcbiAgICAgIGp1c3RpZnlDb250ZW50OiB0aGlzLmFsaWdubWVudCA9PSBNZXNzYWdlQnViYmxlQWxpZ25tZW50LmxlZnQgPyBcImZsZXgtc3RhcnRcIiA6IFwiZmxleC1lbmRcIixcbiAgICAgIHRvcDogdGhpcy5oZWFkZXJWaWV3ICYmIHRoaXMuYWxpZ25tZW50ID09IE1lc3NhZ2VCdWJibGVBbGlnbm1lbnQubGVmdCA/IFwiLTRweFwiIDogXCItMjRweFwiLFxuICAgICAgYmFja2dyb3VuZDp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKVxuICAgIH1cbiAgfVxuICB0aXRsZVN0eWxlKCl7XG4gICAgcmV0dXJue1xuICAgICAgZGlzcGxheTpcImZsZXhcIixcbiAgICAgIGp1c3RpZnlDb250ZW50OiB0aGlzLmFsaWdubWVudCA9PSBNZXNzYWdlQnViYmxlQWxpZ25tZW50LmxlZnQgPyBcImZsZXgtc3RhcnRcIiA6IFwiZmxleC1lbmRcIixcbiAgICAgIGFsaWduSXRlbXM6XCJmbGV4LXN0YXJ0XCJcbiAgICB9XG4gIH1cbn0iLCI8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZS1idWJibGVfX3dyYXBwZXJcIiBbbmdTdHlsZV09XCJ3cmFwcGVyU3R5bGUoKVwiPlxuICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZS1idWJibGVfX2NvbnRhaW5lclwiIChtb3VzZWVudGVyKT1cImhpZGVTaG93TWVudU9wdGlvbigkZXZlbnQpXCJcbihtb3VzZWxlYXZlKT1cImhpZGVTaG93TWVudU9wdGlvbigkZXZlbnQpXCI+XG48ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZS1idWJibGVfX2F2YXRhclwiICpuZ0lmPVwibGVhZGluZ1ZpZXdcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxlYWRpbmdWaWV3XCI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZS1idWJibGVcIiBbbmdTdHlsZV09XCJidWJibGVBbGlnbm1lbnRTdHlsZSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlLWJ1YmJsZV9fdGl0bGVcIiBbbmdTdHlsZV09XCJ0aXRsZVN0eWxlKClcIiAqbmdJZj1cImhlYWRlclZpZXdcIj5cbjxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyVmlld1wiPlxuPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZW9wdGlvbnNcIiAqbmdJZj1cIm9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGggPj0gMSAmJiBpc0hvdmVyaW5nXCIgW25nU3R5bGVdPVwib3B0aW9uc1N0eWxlcygpXCI+XG48Y29tZXRjaGF0LW1lbnUtbGlzdCBbbW9yZUljb25VUkxdPVwibW9yZUljb25VUkxcIiBbdG9wTWVudVNpemVdPVwidG9wTWVudVNpemVcIiBbbWVudUxpc3RTdHlsZV09XCJvcHRpb25zU3R5bGVcIiBbZGF0YV09XCJvcHRpb25zXCIgKGNjLW1lbnUtY2xpY2tlZCk9XCJvbk9wdGlvbkNsaWNrKCRldmVudClcIj5cbjwvY29tZXRjaGF0LW1lbnUtbGlzdD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlLWJ1YmJsZV9fY29udGVudFwiIFtuZ1N0eWxlXT1cImJ1YmJsZVN0eWxlKClcIj5cbjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZXBseVZpZXdcIj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRWaWV3XCI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib3R0b21WaWV3XCI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aHJlYWRWaWV3XCI+XG48L25nLWNvbnRhaW5lcj5cbjxkaXY+XG48L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJWaWV3XCI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=