fmode-ng 0.0.243 → 0.0.244

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.
@@ -7,20 +7,6 @@ import * as i0 from "@angular/core";
7
7
  import * as i1 from "../../service-fmai/service-chat";
8
8
  import * as i2 from "@angular/common";
9
9
  export class FmChatMesssageArea {
10
- get messageList() {
11
- // 优先使用直接传入的chat对象
12
- if (this.chat && this.chat.messageList) {
13
- return this.chat.messageList;
14
- }
15
- return [];
16
- // 降级到通过chatId获取
17
- // else if(this.chatId && this.chatServ.chatMap[this.chatId]){
18
- // messages = this.chatServ.chatMap[this.chatId].messageList;
19
- // }
20
- // else {
21
- // return this.cachedMessageList;
22
- // }
23
- }
24
10
  /**
25
11
  * 获取预览消息的FmodeObject
26
12
  */
@@ -42,23 +28,44 @@ export class FmChatMesssageArea {
42
28
  }
43
29
  constructor(chatServ) {
44
30
  this.chatServ = chatServ;
45
- // 缓存的消息列表,避免重复获取
46
- this.cachedMessageList = [];
31
+ // 缓存的消息列表,用于模板绑定
32
+ this.messageList = [];
33
+ // 用于变更检测
47
34
  this.lastMessageCount = 0;
35
+ this.lastMessageHash = '';
36
+ this.refreshTimer = null;
48
37
  }
49
38
  ngOnChanges(changes) {
50
- // 当chat或chatId发生变化时,重置缓存
39
+ // 当chat或chatId发生变化时,重置并刷新
51
40
  if (changes.chat || changes.chatId) {
41
+ this.lastMessageCount = 0;
42
+ this.lastMessageHash = '';
52
43
  this.refreshMessageList();
53
44
  }
54
45
  }
55
46
  ngDoCheck() {
56
- // 检查消息列表是否发生变化 - 使用同步方法避免性能问题
57
- const currentMessages = this.messageList;
58
- if (currentMessages.length !== this.lastMessageCount) {
59
- this.lastMessageCount = currentMessages.length;
60
- // 异步刷新,不等待结果
61
- this.refreshMessageList();
47
+ // 检查chat.messageList是否有变化
48
+ if (!this.chat)
49
+ return;
50
+ const currentMessages = this.chat.messageList;
51
+ const currentCount = currentMessages?.length || 0;
52
+ // 简单hash检测内容变化(使用id和createdAt)
53
+ let currentHash = '';
54
+ if (currentMessages && currentMessages.length > 0) {
55
+ const lastMsg = currentMessages[currentMessages.length - 1];
56
+ currentHash = `${lastMsg.id}_${lastMsg.get?.('content')?.length || 0}_${currentCount}`;
57
+ }
58
+ // 如果消息数量变化或hash变化,触发刷新
59
+ if (currentCount !== this.lastMessageCount || currentHash !== this.lastMessageHash) {
60
+ this.lastMessageCount = currentCount;
61
+ this.lastMessageHash = currentHash;
62
+ // 防抖:避免频繁刷新
63
+ if (this.refreshTimer) {
64
+ clearTimeout(this.refreshTimer);
65
+ }
66
+ this.refreshTimer = setTimeout(() => {
67
+ this.syncMessageList();
68
+ }, 50);
62
69
  }
63
70
  }
64
71
  ngAfterViewInit() {
@@ -69,21 +76,40 @@ export class FmChatMesssageArea {
69
76
  this.chat.scrollComp = { nativeElement: document.querySelector('.message-list') };
70
77
  }
71
78
  }
79
+ ngOnDestroy() {
80
+ if (this.refreshTimer) {
81
+ clearTimeout(this.refreshTimer);
82
+ }
83
+ }
84
+ /**
85
+ * 同步消息列表(同步版本,用于DoCheck)
86
+ */
87
+ syncMessageList() {
88
+ if (!this.chat)
89
+ return;
90
+ // 直接获取messageManager中的缓存列表
91
+ const messages = this.chat.messageList;
92
+ if (messages && messages.length !== this.messageList.length) {
93
+ // 创建新数组触发变更检测
94
+ this.messageList = [...messages];
95
+ this.scrollToBottom();
96
+ }
97
+ }
72
98
  /**
73
- * 刷新消息列表
99
+ * 刷新消息列表(异步版本,用于初始加载)
74
100
  */
75
101
  async refreshMessageList() {
76
102
  try {
77
103
  let messages = [];
78
104
  if (this.chat) {
79
- // 直接获取FmodeObject数组,无需转换
105
+ // 触发消息加载(如果是第一次)
80
106
  messages = await this.chat.getMessageList();
81
107
  }
82
108
  else if (this.chatId && this.chatServ.chatMap[this.chatId]) {
83
109
  messages = await this.chatServ.chatMap[this.chatId].getMessageList();
84
110
  }
85
- // 更新缓存
86
- this.cachedMessageList = messages;
111
+ // 创建新数组触发变更检测
112
+ this.messageList = [...messages];
87
113
  this.lastMessageCount = messages.length;
88
114
  // 延迟滚动到底部
89
115
  setTimeout(() => {
@@ -110,7 +136,7 @@ export class FmChatMesssageArea {
110
136
  }
111
137
  }
112
138
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmChatMesssageArea, deps: [{ token: i1.ChatService }], target: i0.ɵɵFactoryTarget.Component }); }
113
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FmChatMesssageArea, isStandalone: true, selector: "fm-chat-message-area", inputs: { chatId: "chatId", chat: "chat" }, usesOnChanges: true, ngImport: i0, template: "\r\n<div class=\"message-list\">\r\n <app-comp-role-prompt [chat]=\"chat\" [role]=\"chat?.role?.id\"></app-comp-role-prompt>\r\n\r\n <!-- \u4E3B\u6D88\u606F\u5217\u8868 -->\r\n <ng-container *ngIf=\"messageList && messageList.length > 0\">\r\n <ng-container *ngFor=\"let message of messageList;let index=index;trackBy: trackByMessageId\">\r\n <!-- \u5185\u5BB9\u683C\u5F0F\u5316\u533A\u57DF -->\r\n <fm-chat-message-card [chat]=\"chat\" *ngIf=\"!message?.hidden\" [index]=\"index\" [message]=\"message\" [role]=\"chat?.role\"></fm-chat-message-card>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- \u7A7A\u72B6\u6001\u63D0\u793A -->\r\n <div *ngIf=\"!messageList || messageList.length === 0\" class=\"empty-state\">\r\n <p>\u6682\u65E0\u6D88\u606F\u8BB0\u5F55</p>\r\n <p *ngIf=\"chat?.role\">\u5F00\u59CB\u4E0E {{chat?.role?.get('name')}} \u5BF9\u8BDD\u5427\uFF01</p>\r\n </div>\r\n\r\n <!-- \u9884\u89C8\u6D88\u606F -->\r\n @if(!chat?.hideInputPreview && previewMessage){\r\n <fm-chat-message-card [chat]=\"chat\" [message]=\"previewMessage\" [role]=\"chat?.role\"></fm-chat-message-card>\r\n }\r\n</div>", styles: [".message-list{padding:5px 20px;display:flex;flex-direction:column;height:100%;overflow-y:auto}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;text-align:center;color:#666}.empty-state p{margin:8px 0;font-size:14px}.empty-state p:first-child{font-weight:500;color:#999}:host-context(body.dark) .message-list{background-color:#000!important}:host-context(body.dark) .empty-state{color:#ccc}:host-context(body.dark) .empty-state p:first-child{color:#888}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FmChatMessageCard, selector: "fm-chat-message-card", inputs: ["index", "message", "role", "chat"] }, { kind: "component", type: CompRolePromptComponent, selector: "app-comp-role-prompt", inputs: ["chat", "role"] }] }); }
139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FmChatMesssageArea, isStandalone: true, selector: "fm-chat-message-area", inputs: { chatId: "chatId", chat: "chat" }, usesOnChanges: true, ngImport: i0, template: "\r\n<div class=\"message-list\">\r\n <app-comp-role-prompt [chat]=\"chat\" [role]=\"chat?.role?.id\"></app-comp-role-prompt>\r\n\r\n <!-- \u4E3B\u6D88\u606F\u5217\u8868 -->\r\n <ng-container *ngIf=\"messageList && messageList.length > 0\">\r\n <ng-container *ngFor=\"let message of messageList;let index=index;trackBy: trackByMessageId\">\r\n <!-- \u5185\u5BB9\u683C\u5F0F\u5316\u533A\u57DF -->\r\n @if(!message?.get(\"content\")?.hidden || !message?.get(\"content\")?.content ){\r\n <fm-chat-message-card [chat]=\"chat\" [index]=\"index\" [message]=\"message\" [role]=\"chat?.role\"></fm-chat-message-card>\r\n }\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- \u7A7A\u72B6\u6001\u63D0\u793A -->\r\n <div *ngIf=\"!messageList || messageList.length === 0\" class=\"empty-state\">\r\n <p>\u6682\u65E0\u6D88\u606F\u8BB0\u5F55</p>\r\n <p *ngIf=\"chat?.role\">\u5F00\u59CB\u4E0E {{chat?.role?.get('name')}} \u5BF9\u8BDD\u5427\uFF01</p>\r\n </div>\r\n\r\n <!-- \u9884\u89C8\u6D88\u606F -->\r\n @if(!chat?.hideInputPreview && previewMessage){\r\n <fm-chat-message-card [chat]=\"chat\" [message]=\"previewMessage\" [role]=\"chat?.role\"></fm-chat-message-card>\r\n }\r\n</div>", styles: [".message-list{padding:5px 20px;display:flex;flex-direction:column;height:100%;overflow-y:auto}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;text-align:center;color:#666}.empty-state p{margin:8px 0;font-size:14px}.empty-state p:first-child{font-weight:500;color:#999}:host-context(body.dark) .message-list{background-color:#000!important}:host-context(body.dark) .empty-state{color:#ccc}:host-context(body.dark) .empty-state p:first-child{color:#888}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FmChatMessageCard, selector: "fm-chat-message-card", inputs: ["index", "message", "role", "chat"] }, { kind: "component", type: CompRolePromptComponent, selector: "app-comp-role-prompt", inputs: ["chat", "role"] }] }); }
114
140
  }
115
141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmChatMesssageArea, decorators: [{
116
142
  type: Component,
@@ -118,10 +144,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
118
144
  CommonModule,
119
145
  FmChatMessageCard,
120
146
  CompRolePromptComponent,
121
- ], template: "\r\n<div class=\"message-list\">\r\n <app-comp-role-prompt [chat]=\"chat\" [role]=\"chat?.role?.id\"></app-comp-role-prompt>\r\n\r\n <!-- \u4E3B\u6D88\u606F\u5217\u8868 -->\r\n <ng-container *ngIf=\"messageList && messageList.length > 0\">\r\n <ng-container *ngFor=\"let message of messageList;let index=index;trackBy: trackByMessageId\">\r\n <!-- \u5185\u5BB9\u683C\u5F0F\u5316\u533A\u57DF -->\r\n <fm-chat-message-card [chat]=\"chat\" *ngIf=\"!message?.hidden\" [index]=\"index\" [message]=\"message\" [role]=\"chat?.role\"></fm-chat-message-card>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- \u7A7A\u72B6\u6001\u63D0\u793A -->\r\n <div *ngIf=\"!messageList || messageList.length === 0\" class=\"empty-state\">\r\n <p>\u6682\u65E0\u6D88\u606F\u8BB0\u5F55</p>\r\n <p *ngIf=\"chat?.role\">\u5F00\u59CB\u4E0E {{chat?.role?.get('name')}} \u5BF9\u8BDD\u5427\uFF01</p>\r\n </div>\r\n\r\n <!-- \u9884\u89C8\u6D88\u606F -->\r\n @if(!chat?.hideInputPreview && previewMessage){\r\n <fm-chat-message-card [chat]=\"chat\" [message]=\"previewMessage\" [role]=\"chat?.role\"></fm-chat-message-card>\r\n }\r\n</div>", styles: [".message-list{padding:5px 20px;display:flex;flex-direction:column;height:100%;overflow-y:auto}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;text-align:center;color:#666}.empty-state p{margin:8px 0;font-size:14px}.empty-state p:first-child{font-weight:500;color:#999}:host-context(body.dark) .message-list{background-color:#000!important}:host-context(body.dark) .empty-state{color:#ccc}:host-context(body.dark) .empty-state p:first-child{color:#888}\n"] }]
147
+ ], template: "\r\n<div class=\"message-list\">\r\n <app-comp-role-prompt [chat]=\"chat\" [role]=\"chat?.role?.id\"></app-comp-role-prompt>\r\n\r\n <!-- \u4E3B\u6D88\u606F\u5217\u8868 -->\r\n <ng-container *ngIf=\"messageList && messageList.length > 0\">\r\n <ng-container *ngFor=\"let message of messageList;let index=index;trackBy: trackByMessageId\">\r\n <!-- \u5185\u5BB9\u683C\u5F0F\u5316\u533A\u57DF -->\r\n @if(!message?.get(\"content\")?.hidden || !message?.get(\"content\")?.content ){\r\n <fm-chat-message-card [chat]=\"chat\" [index]=\"index\" [message]=\"message\" [role]=\"chat?.role\"></fm-chat-message-card>\r\n }\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- \u7A7A\u72B6\u6001\u63D0\u793A -->\r\n <div *ngIf=\"!messageList || messageList.length === 0\" class=\"empty-state\">\r\n <p>\u6682\u65E0\u6D88\u606F\u8BB0\u5F55</p>\r\n <p *ngIf=\"chat?.role\">\u5F00\u59CB\u4E0E {{chat?.role?.get('name')}} \u5BF9\u8BDD\u5427\uFF01</p>\r\n </div>\r\n\r\n <!-- \u9884\u89C8\u6D88\u606F -->\r\n @if(!chat?.hideInputPreview && previewMessage){\r\n <fm-chat-message-card [chat]=\"chat\" [message]=\"previewMessage\" [role]=\"chat?.role\"></fm-chat-message-card>\r\n }\r\n</div>", styles: [".message-list{padding:5px 20px;display:flex;flex-direction:column;height:100%;overflow-y:auto}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;text-align:center;color:#666}.empty-state p{margin:8px 0;font-size:14px}.empty-state p:first-child{font-weight:500;color:#999}:host-context(body.dark) .message-list{background-color:#000!important}:host-context(body.dark) .empty-state{color:#ccc}:host-context(body.dark) .empty-state p:first-child{color:#888}\n"] }]
122
148
  }], ctorParameters: () => [{ type: i1.ChatService }], propDecorators: { chatId: [{
123
149
  type: Input
124
150
  }], chat: [{
125
151
  type: Input
126
152
  }] } });
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1tZXNzYWdlLWFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWFyZWEvY29tcC1tZXNzYWdlLWFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWFyZWEvY29tcC1tZXNzYWdlLWFyZWEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBaUIsU0FBUyxFQUFXLEtBQUssRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7OztBQWN6RixNQUFNLE9BQU8sa0JBQWtCO0lBUzdCLElBQUksV0FBVztRQUViLGtCQUFrQjtRQUNsQixJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQy9CLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQTtRQUNULGdCQUFnQjtRQUNoQiw4REFBOEQ7UUFDOUQsK0RBQStEO1FBQy9ELElBQUk7UUFDSixTQUFTO1FBQ1QsbUNBQW1DO1FBQ25DLElBQUk7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGNBQWM7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJ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LEdBQUcsQ0FBQyxDQUFDO1FBRVYsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUdEOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsS0FBYSxFQUFFLE9BQW9CO1FBQ2xELE9BQU8sT0FBTyxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxjQUFjO1FBQ3BCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFnQixDQUFDO1FBQzdFLElBQUcsYUFBYSxFQUFDLENBQUM7WUFDaEIsYUFBYSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDOytHQXRIVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixpSkNsQi9CLCtxQ0FzQk0sMGpCRFRGLFlBQVksZ1FBQ1osaUJBQWlCLCtHQUNqQix1QkFBdUI7OzRGQUdkLGtCQUFrQjtrQkFYOUIsU0FBUzsrQkFDRSxzQkFBc0IsY0FHckIsSUFBSSxXQUNQO3dCQUNOLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQix1QkFBdUI7cUJBQ3hCO2dGQUlRLE1BQU07c0JBQWQsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIERvQ2hlY2ssIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhdFNlcnZpY2UsIEZtb2RlQ2hhdCB9IGZyb20gJy4uLy4uL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWNoYXQnO1xyXG5pbXBvcnQgeyBGbUNoYXRNZXNzYWdlQ2FyZCB9IGZyb20gJy4uL2NoYXQtbWVzc2FnZS1jYXJkL2NvbXAtbWVzc2FnZS1jYXJkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbXBSb2xlUHJvbXB0Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcC1yb2xlLXByb21wdC9jb21wLXJvbGUtcHJvbXB0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZtb2RlT2JqZWN0IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9wYXJzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2ZtLWNoYXQtbWVzc2FnZS1hcmVhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29tcC1tZXNzYWdlLWFyZWEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbXAtbWVzc2FnZS1hcmVhLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTp0cnVlLFxyXG4gIGltcG9ydHM6W1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm1DaGF0TWVzc2FnZUNhcmQsXHJcbiAgICBDb21wUm9sZVByb21wdENvbXBvbmVudCxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGbUNoYXRNZXNzc2FnZUFyZWEgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LERvQ2hlY2ssT25DaGFuZ2VzIHtcclxuXHJcbiAgQElucHV0KCkgY2hhdElkOnN0cmluZ1xyXG4gIEBJbnB1dCgpIGNoYXQ6Rm1vZGVDaGF0XHJcblxyXG4gIC8vIOe8k+WtmOeahOa2iOaBr+WIl+ihqO+8jOmBv+WFjemHjeWkjeiOt+WPllxyXG4gIHByaXZhdGUgY2FjaGVkTWVzc2FnZUxpc3Q6IEZtb2RlT2JqZWN0W10gPSBbXVxyXG4gIHByaXZhdGUgbGFzdE1lc3NhZ2VDb3VudCA9IDBcclxuXHJcbiAgZ2V0IG1lc3NhZ2VMaXN0KCk6Rm1vZGVPYmplY3RbXXtcclxuXHJcbiAgICAvLyDkvJjlhYjkvb/nlKjnm7TmjqXkvKDlhaXnmoRjaGF05a+56LGhXHJcbiAgICBpZih0aGlzLmNoYXQgJiYgdGhpcy5jaGF0Lm1lc3NhZ2VMaXN0KXtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hhdC5tZXNzYWdlTGlzdDtcclxuICAgIH1cclxuICAgIHJldHVybiBbXVxyXG4gICAgLy8g6ZmN57qn5Yiw6YCa6L+HY2hhdElk6I635Y+WXHJcbiAgICAvLyBlbHNlIGlmKHRoaXMuY2hhdElkICYmIHRoaXMuY2hhdFNlcnYuY2hhdE1hcFt0aGlzLmNoYXRJZF0pe1xyXG4gICAgLy8gICBtZXNzYWdlcyA9IHRoaXMuY2hhdFNlcnYuY2hhdE1hcFt0aGlzLmNoYXRJZF0ubWVzc2FnZUxpc3Q7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBlbHNlIHtcclxuICAgIC8vICAgcmV0dXJuIHRoaXMuY2FjaGVkTWVzc2FnZUxpc3Q7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDojrflj5bpooTop4jmtojmga/nmoRGbW9kZU9iamVjdFxyXG4gICAqL1xyXG4gIGdldCBwcmV2aWV3TWVzc2FnZSgpOiBGbW9kZU9iamVjdCB8IG51bGwge1xyXG4gICAgaWYgKCF0aGlzLmNoYXQ/LnVzZXJJbnB1dCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhdD8udXNlckltYWdlKSB7XHJcbiAgICAgIC8vIOW4puWbvueJh+eahOa2iOaBr+mihOiniFxyXG4gICAgICBjb25zdCBjb250ZW50ID0gW1xyXG4gICAgICAgIHsgdHlwZTogJ3RleHQnLCB0ZXh0OiB0aGlzLmNoYXQudXNlcklucHV0IH0sXHJcbiAgICAgICAgeyB0eXBlOiAnaW1hZ2VfdXJsJywgaW1hZ2VfdXJsOiB7IHVybDogdGhpcy5jaGF0LnVzZXJJbWFnZSB9IH1cclxuICAgICAgXTtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hhdC5jcmVhdGVQcmV2aWV3TWVzc2FnZSgndXNlcicsIGNvbnRlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g57qv5paH5pys5raI5oGv6aKE6KeIXHJcbiAgICAgIHJldHVybiB0aGlzLmNoYXQuY3JlYXRlUHJldmlld01lc3NhZ2UoJ3VzZXInLCB0aGlzLmNoYXQudXNlcklucHV0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhdFNlcnY6Q2hhdFNlcnZpY2Upe1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy8g5b2TY2hhdOaIlmNoYXRJZOWPkeeUn+WPmOWMluaXtu+8jOmHjee9rue8k+WtmFxyXG4gICAgaWYgKGNoYW5nZXMuY2hhdCB8fCBjaGFuZ2VzLmNoYXRJZCkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hNZXNzYWdlTGlzdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xyXG4gICAgLy8g5qOA5p+l5raI5oGv5YiX6KGo5piv5ZCm5Y+R55Sf5Y+Y5YyWIC0g5L2/55So5ZCM5q2l5pa55rOV6YG/5YWN5oCn6IO96Zeu6aKYXHJcbiAgICBjb25zdCBjdXJyZW50TWVzc2FnZXMgPSB0aGlzLm1lc3NhZ2VMaXN0O1xyXG4gICAgaWYgKGN1cnJlbnRNZXNzYWdlcy5sZW5ndGggIT09IHRoaXMubGFzdE1lc3NhZ2VDb3VudCkge1xyXG4gICAgICB0aGlzLmxhc3RNZXNzYWdlQ291bnQgPSBjdXJyZW50TWVzc2FnZXMubGVuZ3RoO1xyXG4gICAgICAvLyDlvILmraXliLfmlrDvvIzkuI3nrYnlvoXnu5PmnpxcclxuICAgICAgdGhpcy5yZWZyZXNoTWVzc2FnZUxpc3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiTWVzc2FnZUFyZWHnu4Tku7bliJ3lp4vljJblrozmiJBcIik7XHJcbiAgICB0aGlzLnJlZnJlc2hNZXNzYWdlTGlzdCgpO1xyXG5cclxuICAgIC8vIOiuvue9rua7muWKqOe7hOS7tuW8leeUqFxyXG4gICAgaWYodGhpcy5jaGF0KXtcclxuICAgICAgdGhpcy5jaGF0LnNjcm9sbENvbXAgPSB7IG5hdGl2ZUVsZW1lbnQ6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tZXNzYWdlLWxpc3QnKSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yi35paw5raI5oGv5YiX6KGoXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoTWVzc2FnZUxpc3QoKXtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBtZXNzYWdlczpGbW9kZU9iamVjdFtdID0gW107XHJcblxyXG4gICAgICBpZih0aGlzLmNoYXQpe1xyXG4gICAgICAgIC8vIOebtOaOpeiOt+WPlkZtb2RlT2JqZWN05pWw57uE77yM5peg6ZyA6L2s5o2iXHJcbiAgICAgICAgbWVzc2FnZXMgPSBhd2FpdCB0aGlzLmNoYXQuZ2V0TWVzc2FnZUxpc3QoKTtcclxuICAgICAgfSBlbHNlIGlmKHRoaXMuY2hhdElkICYmIHRoaXMuY2hhdFNlcnYuY2hhdE1hcFt0aGlzLmNoYXRJZF0pe1xyXG4gICAgICAgIG1lc3NhZ2VzID0gYXdhaXQgdGhpcy5jaGF0U2Vydi5jaGF0TWFwW3RoaXMuY2hhdElkXS5nZXRNZXNzYWdlTGlzdCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDmm7TmlrDnvJPlrZhcclxuICAgICAgdGhpcy5jYWNoZWRNZXNzYWdlTGlzdCA9IG1lc3NhZ2VzO1xyXG4gICAgICB0aGlzLmxhc3RNZXNzYWdlQ291bnQgPSBtZXNzYWdlcy5sZW5ndGg7XHJcblxyXG4gICAgICAvLyDlu7bov5/mu5rliqjliLDlupXpg6hcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xyXG4gICAgICB9LCAxMDApO1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCLliLfmlrDmtojmga/liJfooajlpLHotKU6XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIOa2iOaBr+i/vei4quWHveaVsO+8jOaPkOmrmG5nRm9y5oCn6IO9XHJcbiAgICovXHJcbiAgdHJhY2tCeU1lc3NhZ2VJZChpbmRleDogbnVtYmVyLCBtZXNzYWdlOiBGbW9kZU9iamVjdCk6IGFueSB7XHJcbiAgICByZXR1cm4gbWVzc2FnZS5pZCB8fCBtZXNzYWdlLmdldCgnY2lkJykgfHwgaW5kZXg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmu5rliqjliLDlupXpg6hcclxuICAgKi9cclxuICBwcml2YXRlIHNjcm9sbFRvQm90dG9tKCl7XHJcbiAgICBjb25zdCBtZXNzYWdlTGlzdEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1lc3NhZ2UtbGlzdCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYobWVzc2FnZUxpc3RFbCl7XHJcbiAgICAgIG1lc3NhZ2VMaXN0RWwuc2Nyb2xsVG9wID0gbWVzc2FnZUxpc3RFbC5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIlxyXG48ZGl2IGNsYXNzPVwibWVzc2FnZS1saXN0XCI+XHJcbiAgICA8YXBwLWNvbXAtcm9sZS1wcm9tcHQgW2NoYXRdPVwiY2hhdFwiIFtyb2xlXT1cImNoYXQ/LnJvbGU/LmlkXCI+PC9hcHAtY29tcC1yb2xlLXByb21wdD5cclxuXHJcbiAgICA8IS0tIOS4u+a2iOaBr+WIl+ihqCAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlTGlzdCAmJiBtZXNzYWdlTGlzdC5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBtZXNzYWdlTGlzdDtsZXQgaW5kZXg9aW5kZXg7dHJhY2tCeTogdHJhY2tCeU1lc3NhZ2VJZFwiPlxyXG4gICAgICAgICAgICA8IS0tIOWGheWuueagvOW8j+WMluWMuuWfnyAtLT5cclxuICAgICAgICAgICAgPGZtLWNoYXQtbWVzc2FnZS1jYXJkIFtjaGF0XT1cImNoYXRcIiAqbmdJZj1cIiFtZXNzYWdlPy5oaWRkZW5cIiBbaW5kZXhdPVwiaW5kZXhcIiBbbWVzc2FnZV09XCJtZXNzYWdlXCIgW3JvbGVdPVwiY2hhdD8ucm9sZVwiPjwvZm0tY2hhdC1tZXNzYWdlLWNhcmQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8IS0tIOepuueKtuaAgeaPkOekuiAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCIhbWVzc2FnZUxpc3QgfHwgbWVzc2FnZUxpc3QubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiPlxyXG4gICAgICAgIDxwPuaaguaXoOa2iOaBr+iusOW9lTwvcD5cclxuICAgICAgICA8cCAqbmdJZj1cImNoYXQ/LnJvbGVcIj7lvIDlp4vkuI4ge3tjaGF0Py5yb2xlPy5nZXQoJ25hbWUnKX19IOWvueivneWQp++8gTwvcD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0g6aKE6KeI5raI5oGvIC0tPlxyXG4gICAgQGlmKCFjaGF0Py5oaWRlSW5wdXRQcmV2aWV3ICYmIHByZXZpZXdNZXNzYWdlKXtcclxuICAgICAgICA8Zm0tY2hhdC1tZXNzYWdlLWNhcmQgW2NoYXRdPVwiY2hhdFwiIFttZXNzYWdlXT1cInByZXZpZXdNZXNzYWdlXCIgW3JvbGVdPVwiY2hhdD8ucm9sZVwiPjwvZm0tY2hhdC1tZXNzYWdlLWNhcmQ+XHJcbiAgICB9XHJcbjwvZGl2PiJdfQ==
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1tZXNzYWdlLWFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWFyZWEvY29tcC1tZXNzYWdlLWFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWFyZWEvY29tcC1tZXNzYWdlLWFyZWEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBaUIsU0FBUyxFQUFXLEtBQUssRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDOUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7OztBQWN6RixNQUFNLE9BQU8sa0JBQWtCO0lBYTdCOztPQUVHO0lBQ0gsSUFBSSxjQUFjO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUV2QyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDekIsV0FBVztZQUNYLE1BQU0sT0FBTyxHQUFHO2dCQUNkLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQzNDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxT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LGNBQWMsRUFBRSxDQUFDO1lBQ3hCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVWLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFHRDs7T0FFRztJQUNILGdCQUFnQixDQUFDLEtBQWEsRUFBRSxPQUFvQjtRQUNsRCxPQUFPLE9BQU8sQ0FBQyxFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7SUFDbkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYztRQUNwQixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBZ0IsQ0FBQztRQUM3RSxJQUFHLGFBQWEsRUFBQyxDQUFDO1lBQ2hCLGFBQWEsQ0FBQyxTQUFTLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQzsrR0FwSlUsa0JBQWtCO21HQUFsQixrQkFBa0IsaUpDbEIvQiwwd0NBd0JNLDBqQkRYRixZQUFZLGdRQUNaLGlCQUFpQiwrR0FDakIsdUJBQXVCOzs0RkFHZCxrQkFBa0I7a0JBWDlCLFNBQVM7K0JBQ0Usc0JBQXNCLGNBR3BCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLGlCQUFpQjt3QkFDakIsdUJBQXVCO3FCQUN4QjtnRkFJUSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBEb0NoZWNrLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhdFNlcnZpY2UsIEZtb2RlQ2hhdCB9IGZyb20gJy4uLy4uL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWNoYXQnO1xyXG5pbXBvcnQgeyBGbUNoYXRNZXNzYWdlQ2FyZCB9IGZyb20gJy4uL2NoYXQtbWVzc2FnZS1jYXJkL2NvbXAtbWVzc2FnZS1jYXJkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbXBSb2xlUHJvbXB0Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tcC1yb2xlLXByb21wdC9jb21wLXJvbGUtcHJvbXB0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZtb2RlT2JqZWN0IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9wYXJzZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2ZtLWNoYXQtbWVzc2FnZS1hcmVhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29tcC1tZXNzYWdlLWFyZWEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbXAtbWVzc2FnZS1hcmVhLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGbUNoYXRNZXNzYWdlQ2FyZCxcclxuICAgIENvbXBSb2xlUHJvbXB0Q29tcG9uZW50LFxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZtQ2hhdE1lc3NzYWdlQXJlYSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIERvQ2hlY2ssIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIGNoYXRJZDogc3RyaW5nXHJcbiAgQElucHV0KCkgY2hhdDogRm1vZGVDaGF0XHJcblxyXG4gIC8vIOe8k+WtmOeahOa2iOaBr+WIl+ihqO+8jOeUqOS6juaooeadv+e7keWumlxyXG4gIHB1YmxpYyBtZXNzYWdlTGlzdDogRm1vZGVPYmplY3RbXSA9IFtdXHJcblxyXG4gIC8vIOeUqOS6juWPmOabtOajgOa1i1xyXG4gIHByaXZhdGUgbGFzdE1lc3NhZ2VDb3VudCA9IDBcclxuICBwcml2YXRlIGxhc3RNZXNzYWdlSGFzaCA9ICcnXHJcbiAgcHJpdmF0ZSByZWZyZXNoVGltZXI6IGFueSA9IG51bGxcclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W6aKE6KeI5raI5oGv55qERm1vZGVPYmplY3RcclxuICAgKi9cclxuICBnZXQgcHJldmlld01lc3NhZ2UoKTogRm1vZGVPYmplY3QgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5jaGF0Py51c2VySW5wdXQpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXQ/LnVzZXJJbWFnZSkge1xyXG4gICAgICAvLyDluKblm77niYfnmoTmtojmga/pooTop4hcclxuICAgICAgY29uc3QgY29udGVudCA9IFtcclxuICAgICAgICB7IHR5cGU6ICd0ZXh0JywgdGV4dDogdGhpcy5jaGF0LnVzZXJJbnB1dCB9LFxyXG4gICAgICAgIHsgdHlwZTogJ2ltYWdlX3VybCcsIGltYWdlX3VybDogeyB1cmw6IHRoaXMuY2hhdC51c2VySW1hZ2UgfSB9XHJcbiAgICAgIF07XHJcbiAgICAgIHJldHVybiB0aGlzLmNoYXQuY3JlYXRlUHJldmlld01lc3NhZ2UoJ3VzZXInLCBjb250ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIOe6r+aWh+acrOa2iOaBr+mihOiniFxyXG4gICAgICByZXR1cm4gdGhpcy5jaGF0LmNyZWF0ZVByZXZpZXdNZXNzYWdlKCd1c2VyJywgdGhpcy5jaGF0LnVzZXJJbnB1dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYXRTZXJ2OiBDaGF0U2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy8g5b2TY2hhdOaIlmNoYXRJZOWPkeeUn+WPmOWMluaXtu+8jOmHjee9ruW5tuWIt+aWsFxyXG4gICAgaWYgKGNoYW5nZXMuY2hhdCB8fCBjaGFuZ2VzLmNoYXRJZCkge1xyXG4gICAgICB0aGlzLmxhc3RNZXNzYWdlQ291bnQgPSAwO1xyXG4gICAgICB0aGlzLmxhc3RNZXNzYWdlSGFzaCA9ICcnO1xyXG4gICAgICB0aGlzLnJlZnJlc2hNZXNzYWdlTGlzdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xyXG4gICAgLy8g5qOA5p+lY2hhdC5tZXNzYWdlTGlzdOaYr+WQpuacieWPmOWMllxyXG4gICAgaWYgKCF0aGlzLmNoYXQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjdXJyZW50TWVzc2FnZXMgPSB0aGlzLmNoYXQubWVzc2FnZUxpc3Q7XHJcbiAgICBjb25zdCBjdXJyZW50Q291bnQgPSBjdXJyZW50TWVzc2FnZXM/Lmxlbmd0aCB8fCAwO1xyXG5cclxuICAgIC8vIOeugOWNlWhhc2jmo4DmtYvlhoXlrrnlj5jljJbvvIjkvb/nlKhpZOWSjGNyZWF0ZWRBdO+8iVxyXG4gICAgbGV0IGN1cnJlbnRIYXNoID0gJyc7XHJcbiAgICBpZiAoY3VycmVudE1lc3NhZ2VzICYmIGN1cnJlbnRNZXNzYWdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGxhc3RNc2cgPSBjdXJyZW50TWVzc2FnZXNbY3VycmVudE1lc3NhZ2VzLmxlbmd0aCAtIDFdO1xyXG4gICAgICBjdXJyZW50SGFzaCA9IGAke2xhc3RNc2cuaWR9XyR7bGFzdE1zZy5nZXQ/LignY29udGVudCcpPy5sZW5ndGggfHwgMH1fJHtjdXJyZW50Q291bnR9YDtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlpoLmnpzmtojmga/mlbDph4/lj5jljJbmiJZoYXNo5Y+Y5YyW77yM6Kem5Y+R5Yi35pawXHJcbiAgICBpZiAoY3VycmVudENvdW50ICE9PSB0aGlzLmxhc3RNZXNzYWdlQ291bnQgfHwgY3VycmVudEhhc2ggIT09IHRoaXMubGFzdE1lc3NhZ2VIYXNoKSB7XHJcbiAgICAgIHRoaXMubGFzdE1lc3NhZ2VDb3VudCA9IGN1cnJlbnRDb3VudDtcclxuICAgICAgdGhpcy5sYXN0TWVzc2FnZUhhc2ggPSBjdXJyZW50SGFzaDtcclxuXHJcbiAgICAgIC8vIOmYsuaKlu+8mumBv+WFjemikee5geWIt+aWsFxyXG4gICAgICBpZiAodGhpcy5yZWZyZXNoVGltZXIpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWZyZXNoVGltZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucmVmcmVzaFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zeW5jTWVzc2FnZUxpc3QoKTtcclxuICAgICAgfSwgNTApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJNZXNzYWdlQXJlYee7hOS7tuWIneWni+WMluWujOaIkFwiKTtcclxuICAgIHRoaXMucmVmcmVzaE1lc3NhZ2VMaXN0KCk7XHJcblxyXG4gICAgLy8g6K6+572u5rua5Yqo57uE5Lu25byV55SoXHJcbiAgICBpZiAodGhpcy5jaGF0KSB7XHJcbiAgICAgIHRoaXMuY2hhdC5zY3JvbGxDb21wID0geyBuYXRpdmVFbGVtZW50OiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWVzc2FnZS1saXN0JykgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVmcmVzaFRpbWVyKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hUaW1lcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDlkIzmraXmtojmga/liJfooajvvIjlkIzmraXniYjmnKzvvIznlKjkuo5Eb0NoZWNr77yJXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzeW5jTWVzc2FnZUxpc3QoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY2hhdCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIOebtOaOpeiOt+WPlm1lc3NhZ2VNYW5hZ2Vy5Lit55qE57yT5a2Y5YiX6KGoXHJcbiAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMuY2hhdC5tZXNzYWdlTGlzdDtcclxuICAgIGlmIChtZXNzYWdlcyAmJiBtZXNzYWdlcy5sZW5ndGggIT09IHRoaXMubWVzc2FnZUxpc3QubGVuZ3RoKSB7XHJcbiAgICAgIC8vIOWIm+W7uuaWsOaVsOe7hOinpuWPkeWPmOabtOajgOa1i1xyXG4gICAgICB0aGlzLm1lc3NhZ2VMaXN0ID0gWy4uLm1lc3NhZ2VzXTtcclxuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yi35paw5raI5oGv5YiX6KGo77yI5byC5q2l54mI5pys77yM55So5LqO5Yid5aeL5Yqg6L2977yJXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoTWVzc2FnZUxpc3QoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgbWVzc2FnZXM6IEZtb2RlT2JqZWN0W10gPSBbXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmNoYXQpIHtcclxuICAgICAgICAvLyDop6blj5Hmtojmga/liqDovb3vvIjlpoLmnpzmmK/nrKzkuIDmrKHvvIlcclxuICAgICAgICBtZXNzYWdlcyA9IGF3YWl0IHRoaXMuY2hhdC5nZXRNZXNzYWdlTGlzdCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2hhdElkICYmIHRoaXMuY2hhdFNlcnYuY2hhdE1hcFt0aGlzLmNoYXRJZF0pIHtcclxuICAgICAgICBtZXNzYWdlcyA9IGF3YWl0IHRoaXMuY2hhdFNlcnYuY2hhdE1hcFt0aGlzLmNoYXRJZF0uZ2V0TWVzc2FnZUxpc3QoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5Yib5bu65paw5pWw57uE6Kem5Y+R5Y+Y5pu05qOA5rWLXHJcbiAgICAgIHRoaXMubWVzc2FnZUxpc3QgPSBbLi4ubWVzc2FnZXNdO1xyXG4gICAgICB0aGlzLmxhc3RNZXNzYWdlQ291bnQgPSBtZXNzYWdlcy5sZW5ndGg7XHJcblxyXG4gICAgICAvLyDlu7bov5/mu5rliqjliLDlupXpg6hcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xyXG4gICAgICB9LCAxMDApO1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCLliLfmlrDmtojmga/liJfooajlpLHotKU6XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIFxyXG4gIC8qKlxyXG4gICAqIOa2iOaBr+i/vei4quWHveaVsO+8jOaPkOmrmG5nRm9y5oCn6IO9XHJcbiAgICovXHJcbiAgdHJhY2tCeU1lc3NhZ2VJZChpbmRleDogbnVtYmVyLCBtZXNzYWdlOiBGbW9kZU9iamVjdCk6IGFueSB7XHJcbiAgICByZXR1cm4gbWVzc2FnZS5pZCB8fCBtZXNzYWdlLmdldCgnY2lkJykgfHwgaW5kZXg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmu5rliqjliLDlupXpg6hcclxuICAgKi9cclxuICBwcml2YXRlIHNjcm9sbFRvQm90dG9tKCl7XHJcbiAgICBjb25zdCBtZXNzYWdlTGlzdEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1lc3NhZ2UtbGlzdCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYobWVzc2FnZUxpc3RFbCl7XHJcbiAgICAgIG1lc3NhZ2VMaXN0RWwuc2Nyb2xsVG9wID0gbWVzc2FnZUxpc3RFbC5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIlxyXG48ZGl2IGNsYXNzPVwibWVzc2FnZS1saXN0XCI+XHJcbiAgICA8YXBwLWNvbXAtcm9sZS1wcm9tcHQgW2NoYXRdPVwiY2hhdFwiIFtyb2xlXT1cImNoYXQ/LnJvbGU/LmlkXCI+PC9hcHAtY29tcC1yb2xlLXByb21wdD5cclxuXHJcbiAgICA8IS0tIOS4u+a2iOaBr+WIl+ihqCAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZXNzYWdlTGlzdCAmJiBtZXNzYWdlTGlzdC5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBtZXNzYWdlTGlzdDtsZXQgaW5kZXg9aW5kZXg7dHJhY2tCeTogdHJhY2tCeU1lc3NhZ2VJZFwiPlxyXG4gICAgICAgICAgICA8IS0tIOWGheWuueagvOW8j+WMluWMuuWfnyAtLT5cclxuICAgICAgICAgICAgQGlmKCFtZXNzYWdlPy5nZXQoXCJjb250ZW50XCIpPy5oaWRkZW4gfHwgIW1lc3NhZ2U/LmdldChcImNvbnRlbnRcIik/LmNvbnRlbnQgKXtcclxuICAgICAgICAgICAgICAgICA8Zm0tY2hhdC1tZXNzYWdlLWNhcmQgW2NoYXRdPVwiY2hhdFwiIFtpbmRleF09XCJpbmRleFwiIFttZXNzYWdlXT1cIm1lc3NhZ2VcIiBbcm9sZV09XCJjaGF0Py5yb2xlXCI+PC9mbS1jaGF0LW1lc3NhZ2UtY2FyZD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLSDnqbrnirbmgIHmj5DnpLogLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIW1lc3NhZ2VMaXN0IHx8IG1lc3NhZ2VMaXN0Lmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiZW1wdHktc3RhdGVcIj5cclxuICAgICAgICA8cD7mmoLml6Dmtojmga/orrDlvZU8L3A+XHJcbiAgICAgICAgPHAgKm5nSWY9XCJjaGF0Py5yb2xlXCI+5byA5aeL5LiOIHt7Y2hhdD8ucm9sZT8uZ2V0KCduYW1lJyl9fSDlr7nor53lkKfvvIE8L3A+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIOmihOiniOa2iOaBryAtLT5cclxuICAgIEBpZighY2hhdD8uaGlkZUlucHV0UHJldmlldyAmJiBwcmV2aWV3TWVzc2FnZSl7XHJcbiAgICAgICAgPGZtLWNoYXQtbWVzc2FnZS1jYXJkIFtjaGF0XT1cImNoYXRcIiBbbWVzc2FnZV09XCJwcmV2aWV3TWVzc2FnZVwiIFtyb2xlXT1cImNoYXQ/LnJvbGVcIj48L2ZtLWNoYXQtbWVzc2FnZS1jYXJkPlxyXG4gICAgfVxyXG48L2Rpdj4iXX0=
@@ -131,7 +131,7 @@ export class FmChatMessageCard {
131
131
  this.copyServ.copyToClipboard(getMessageContentText(this.message?.get('content')));
132
132
  }
133
133
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmChatMessageCard, deps: [{ token: i1.ClipboardService }], target: i0.ɵɵFactoryTarget.Component }); }
134
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FmChatMessageCard, isStandalone: true, selector: "fm-chat-message-card", inputs: { index: "index", message: "message", role: "role", chat: "chat" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"message-card\" [class.right]=\"message?.get('role')=='user'\" [class.center]=\"message?.get('role')=='system'\">\r\n <!-- \u7528\u6237\u53CA\u64CD\u4F5C\u533A -->\r\n <div class=\"item-row user\" *ngIf=\"message?.get('role')!='system'\"> <!-- \u7CFB\u7EDF\u6D88\u606F\u4E0D\u663E\u793A\u5934\u50CF -->\r\n <div class=\"avatar-row\">\r\n <div class=\"actions\">\r\n <!-- \u5237\u65B0 -->\r\n <!-- <ion-button fill=\"outline\" slot=\"start\">\r\n <ion-icon name=\"refresh-outline\"></ion-icon>\r\n </ion-button> -->\r\n <!-- \u590D\u5236 -->\r\n <ion-button size=\"small\" fill=\"outline\" slot=\"start\" (click)=\"copy()\">\r\n <ion-icon name=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n <!-- \u7F16\u8F91 -->\r\n <!-- <ion-button fill=\"outline\" slot=\"start\">\r\n <ion-icon name=\"create-outline\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n <!-- \u66F4\u65B0\u97F3\u9891\u6D88\u606F\u533A\u57DF -->\r\n <div *ngIf=\"((message?.get('role')=='assistant' && chat?.role?.get('voiceConfig')?.voice) || (message?.get('role')=='user'&&message?.get('voice')))\"\r\n class=\"play-voice\"\r\n (click)=\"!isLoadingText && toggleVoicePlay()\"\r\n [class.loading-voice]=\"chat?.isTalkMode && isLoadingText\">\r\n\r\n <div class=\"voice-button\">\r\n <!-- \u52A0\u8F7D\u65F6\u663E\u793Aspinner\uFF0C\u5426\u5219\u663E\u793Awifi\u56FE\u6807 -->\r\n <ion-spinner *ngIf=\"chat?.isTalkMode && isLoadingText\" name=\"lines\" class=\"loading-spinner\"></ion-spinner>\r\n <ion-icon *ngIf=\"!(chat?.isTalkMode && isLoadingText)\" name=\"wifi-outline\"\r\n [style.transform]=\"message?.get('role')=='user'?'rotate(-90deg)':'rotate(90deg)'\"\r\n class=\"audio-icon\"\r\n [class.play-voice-playing]=\"tts?.isPlaying\"></ion-icon>\r\n </div>\r\n <div class=\"voice-info\">\r\n <span *ngIf=\"message?.get('voice')?.duration && !isLoadingText\">\r\n {{((message?.get('voice')?.duration||0)/1000) | durationStr}}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u5934\u50CF\u533A\u57DF -->\r\n <img class=\"avatar\" *ngIf=\"message?.get('role')!='user'\" [src]=\"(chat?.role?.get('avatar') || chat?.role?.get('thumb') || 'https://file-cloud.fmode.cn/E4KpGvTEto/20230930/l413e6090731854.png')+'?'+'x-image-process=image/resize,m_fixed,w_100'+'&imageView2/1/w/100/h/100'\" >\r\n <app-comp-user-avatar [user]=\"user\" *ngIf=\"message?.get('role')=='user'\"></app-comp-user-avatar>\r\n </div>\r\n </div>\r\n <!-- \u9644\u4EF6\uFF1A\u56FE\u7247 -->\r\n <div class=\"item-row images\" *ngIf=\"message?.get('content') | chatContent:'image_url'\">\r\n <img [src]=\"message?.get('content') | chatContent:'image_url'\" alt=\"\">\r\n </div>\r\n <!-- \u804A\u5929\u6C14\u6CE1 -->\r\n <!-- Replace the bubble section with this: -->\r\n <div class=\"item-row bubble\" [style.fontSize]=\"role?.get('uiConfig')?.msg?.bubble?.fontSize || '0.8rem'\">\r\n <!-- \u8BF4\u8BDD\u6A21\u5F0F\uFF1A\u5C55\u793A\u52A0\u8F7D\u72B6\u6001 Show loading state for talk mode when message is not complete -->\r\n\r\n <!-- Show normal content for non-talk mode or when loading is complete -->\r\n <ng-container *ngIf=\"!chat?.isTalkMode || message?.get('role') !== 'assistant' || !isLoadingText\">\r\n <fm-markdown-preview *ngIf=\"!message?.get('complete')\" class=\"content-style\"\r\n [content]=\"message?.get('content') | chatContent\" [render]=\"false\"></fm-markdown-preview>\r\n <fm-markdown-preview *ngIf=\"message?.get('complete')\"\r\n [content]=\"message?.get('content') | chatContent\"></fm-markdown-preview>\r\n </ng-container>\r\n </div>\r\n <!-- \u65F6\u95F4\u663E\u793A -->\r\n <div class=\"item-row loading\" *ngIf=\"message?.get('role')!='system' && !message?.get('complete')\">\r\n \u6B63\u5728\u8F93\u5165<ion-spinner name=\"dots\"></ion-spinner>\r\n </div>\r\n\r\n <div class=\"item-row created\" *ngIf=\"message?.get('createdAt')\">\r\n <span>{{message?.get('createdAt') | date:\"dd/MM/yy HH:mm\"}}</span>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";:host-context(body.dark) .message-card .actions .item-native{background:none!important}:host-context(body.dark) .message-card .bubble{color:#0e101d}:host-context(body.dark) .message-card .bubble .content-style{filter:invert(1)!important}:host-context(body.dark) .message-card .bubble fm-markdown-preview{filter:invert(1)!important}:host-context(body.dark) .message-card .play-voice{background-color:#0e101d}:host-context(body.dark) .message-card .play-voice .voice-info{color:#fff}:host-context(body.dark) .message-card .right .bubble{color:#921f8a!important;background:#921f8a!important}:host-context(body.dark) .message-card .right .play-voice{background:#921f8a!important}:host-context(body.dark) .message-card .created span{color:#fff}@media screen and (max-width: 800px){.message-card:focus .actions{opacity:1!important}}.message-card:hover .actions{opacity:1;transition:opacity .3s ease-in-out}.message-card{display:flex;flex-wrap:wrap;justify-content:start;align-items:flex-start}.message-card .avatar-row{width:300px;height:32px;display:flex;flex-direction:row-reverse;justify-content:start;align-items:center}.message-card .actions{display:flex;opacity:0;padding-left:10px;padding-right:10px}.message-card .item-row{display:flex;flex:100%;justify-content:start;margin-bottom:5px}.message-card .images img{max-width:300px}.message-card .bubble.loading{color:var(--gray-secondary)}.message-card .bubble.loading .content-style{filter:none}.message-card .bubble{display:flex;justify-content:center;max-width:100%;padding:.5rem .5rem 0rem;color:#333;flex:none;border-radius:0 1.5em 1.5em/0em 1.5em 1.5em;color:#fff;background-color:currentColor}.message-card .bubble .content-style{filter:grayscale(1) contrast(999) invert(1)}.message-card .loading{text-align:right;color:#101010}.message-card .created{display:flex}.message-card .created span{font-size:12px;opacity:.4;white-space:nowrap;transition:all .6s ease;color:var(--black);text-align:center;width:100%;box-sizing:border-box;padding-right:10px;pointer-events:none;z-index:1}.right{justify-content:end;align-items:flex-end}.right .avatar-row{flex-direction:row;justify-content:end;width:auto}.right .actions{position:relative;margin-left:0}.right .item-row{justify-content:end}.right .bubble{color:#bbdefb;border-top-left-radius:1.5em;border-top-right-radius:0}.right .play-voice{flex-direction:row-reverse;background-color:#bbdefb}.center{justify-content:center;align-items:center}.center .item-row{justify-content:center}.center .bubble{color:var(--gray-secondary);border-top-left-radius:1.5em;border-top-right-radius:1.5em;font-size:12px;font-weight:100;padding:5px 20px}.play-voice{min-width:100px;height:32px;display:flex;justify-content:space-around;align-items:center;background-color:#fff;border-radius:7px}.play-voice .voice-button{width:32px;height:32px;display:flex;justify-content:center;align-items:center}.play-voice .voice-button span{overflow:hidden;font-size:18px;color:#ff69b4}.play-voice .voice-info{height:32px;display:flex;padding:0 10px;justify-content:end;align-items:center;color:#333}.avatar{border-radius:50%;width:32px;height:32px;object-fit:cover}.audio-icon{color:#ff69b4;font-size:18px}.play-voice-playing{animation:play-voice-animation 1s infinite}@keyframes play-voice-animation{0%{width:0}to{width:32px}}.content-style.loading-text{color:#666;font-style:italic}.play-voice{transition:opacity .3s ease}.play-voice.loading-voice{opacity:.8;cursor:not-allowed}.play-voice.loading-voice .loading-spinner{width:18px;height:18px;color:var(--gray-secondary)}.play-voice.loading-voice .loading-text{font-size:.8em;color:var(--gray-secondary);margin-left:5px}.play-voice .voice-button{display:flex;align-items:center;justify-content:center;width:24px;height:24px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "component", type: CompUserAvatarComponent, selector: "app-comp-user-avatar", inputs: ["user"] }, { kind: "ngmodule", type: MarkdownPreviewModule }, { kind: "component", type: i3.MarkdownPreviewComponent, selector: "fm-markdown-preview", inputs: ["content", "render"] }, { kind: "pipe", type: ChatContentPipe, name: "chatContent" }, { kind: "pipe", type: DurationStrPipe, name: "durationStr" }] }); }
134
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: FmChatMessageCard, isStandalone: true, selector: "fm-chat-message-card", inputs: { index: "index", message: "message", role: "role", chat: "chat" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"message-card\" [class.right]=\"message?.get('content')?.role=='user'\" [class.center]=\"message?.get('content')?.role=='system'\">\r\n <!-- \u7528\u6237\u53CA\u64CD\u4F5C\u533A -->\r\n <div class=\"item-row user\" *ngIf=\"message?.get('content')?.role!='system'\"> <!-- \u7CFB\u7EDF\u6D88\u606F\u4E0D\u663E\u793A\u5934\u50CF -->\r\n <div class=\"avatar-row\">\r\n <div class=\"actions\">\r\n <!-- \u5237\u65B0 -->\r\n <!-- <ion-button fill=\"outline\" slot=\"start\">\r\n <ion-icon name=\"refresh-outline\"></ion-icon>\r\n </ion-button> -->\r\n <!-- \u590D\u5236 -->\r\n <ion-button size=\"small\" fill=\"outline\" slot=\"start\" (click)=\"copy()\">\r\n <ion-icon name=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n <!-- \u7F16\u8F91 -->\r\n <!-- <ion-button fill=\"outline\" slot=\"start\">\r\n <ion-icon name=\"create-outline\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n <!-- \u66F4\u65B0\u97F3\u9891\u6D88\u606F\u533A\u57DF -->\r\n <div *ngIf=\"((message?.get('content')?.role=='assistant' && chat?.role?.get('voiceConfig')?.voice) || (message?.get('content')?.role=='user'&&message?.get('voice')))\"\r\n class=\"play-voice\"\r\n (click)=\"!isLoadingText && toggleVoicePlay()\"\r\n [class.loading-voice]=\"chat?.isTalkMode && isLoadingText\">\r\n\r\n <div class=\"voice-button\">\r\n <!-- \u52A0\u8F7D\u65F6\u663E\u793Aspinner\uFF0C\u5426\u5219\u663E\u793Awifi\u56FE\u6807 -->\r\n <ion-spinner *ngIf=\"chat?.isTalkMode && isLoadingText\" name=\"lines\" class=\"loading-spinner\"></ion-spinner>\r\n <ion-icon *ngIf=\"!(chat?.isTalkMode && isLoadingText)\" name=\"wifi-outline\"\r\n [style.transform]=\"message?.get('content')?.role=='user'?'rotate(-90deg)':'rotate(90deg)'\"\r\n class=\"audio-icon\"\r\n [class.play-voice-playing]=\"tts?.isPlaying\"></ion-icon>\r\n </div>\r\n <div class=\"voice-info\">\r\n <span *ngIf=\"message?.get('voice')?.duration && !isLoadingText\">\r\n {{((message?.get('voice')?.duration||0)/1000) | durationStr}}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u5934\u50CF\u533A\u57DF -->\r\n <img class=\"avatar\" *ngIf=\"message?.get('content')?.role!='user'\" [src]=\"(chat?.role?.get('avatar') || chat?.role?.get('thumb') || 'https://file-cloud.fmode.cn/E4KpGvTEto/20230930/l413e6090731854.png')+'?'+'x-image-process=image/resize,m_fixed,w_100'+'&imageView2/1/w/100/h/100'\" >\r\n <app-comp-user-avatar [user]=\"user\" *ngIf=\"message?.get('content')?.role=='user'\"></app-comp-user-avatar>\r\n </div>\r\n </div>\r\n <!-- \u9644\u4EF6\uFF1A\u56FE\u7247 -->\r\n <div class=\"item-row images\" *ngIf=\"message?.get('content') | chatContent:'image_url'\">\r\n <img [src]=\"message?.get('content') | chatContent:'image_url'\" alt=\"\">\r\n </div>\r\n <!-- \u804A\u5929\u6C14\u6CE1 -->\r\n <!-- Replace the bubble section with this: -->\r\n <div class=\"item-row bubble\" [style.fontSize]=\"role?.get('uiConfig')?.msg?.bubble?.fontSize || '0.8rem'\">\r\n <!-- \u8BF4\u8BDD\u6A21\u5F0F\uFF1A\u5C55\u793A\u52A0\u8F7D\u72B6\u6001 Show loading state for talk mode when message is not complete -->\r\n\r\n <!-- Show normal content for non-talk mode or when loading is complete -->\r\n <ng-container *ngIf=\"!chat?.isTalkMode || message?.get('content')?.role !== 'assistant' || !isLoadingText\">\r\n <fm-markdown-preview *ngIf=\"!message?.get('complete')\" class=\"content-style\"\r\n [content]=\"message?.get('content') | chatContent\" [render]=\"false\"></fm-markdown-preview>\r\n <fm-markdown-preview *ngIf=\"message?.get('complete')\"\r\n [content]=\"message?.get('content') | chatContent\"></fm-markdown-preview>\r\n </ng-container>\r\n </div>\r\n <!-- \u65F6\u95F4\u663E\u793A -->\r\n <div class=\"item-row loading\" *ngIf=\"message?.get('content')?.role!='system' && !message?.get('complete')\">\r\n \u6B63\u5728\u8F93\u5165<ion-spinner name=\"dots\"></ion-spinner>\r\n </div>\r\n\r\n <div class=\"item-row created\" *ngIf=\"message?.get('createdAt')\">\r\n <span>{{message?.get('createdAt') | date:\"dd/MM/yy HH:mm\"}}</span>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";:host-context(body.dark) .message-card .actions .item-native{background:none!important}:host-context(body.dark) .message-card .bubble{color:#0e101d}:host-context(body.dark) .message-card .bubble .content-style{filter:invert(1)!important}:host-context(body.dark) .message-card .bubble fm-markdown-preview{filter:invert(1)!important}:host-context(body.dark) .message-card .play-voice{background-color:#0e101d}:host-context(body.dark) .message-card .play-voice .voice-info{color:#fff}:host-context(body.dark) .message-card .right .bubble{color:#921f8a!important;background:#921f8a!important}:host-context(body.dark) .message-card .right .play-voice{background:#921f8a!important}:host-context(body.dark) .message-card .created span{color:#fff}@media screen and (max-width: 800px){.message-card:focus .actions{opacity:1!important}}.message-card:hover .actions{opacity:1;transition:opacity .3s ease-in-out}.message-card{display:flex;flex-wrap:wrap;justify-content:start;align-items:flex-start}.message-card .avatar-row{width:300px;height:32px;display:flex;flex-direction:row-reverse;justify-content:start;align-items:center}.message-card .actions{display:flex;opacity:0;padding-left:10px;padding-right:10px}.message-card .item-row{display:flex;flex:100%;justify-content:start;margin-bottom:5px}.message-card .images img{max-width:300px}.message-card .bubble.loading{color:var(--gray-secondary)}.message-card .bubble.loading .content-style{filter:none}.message-card .bubble{display:flex;justify-content:center;max-width:100%;padding:.5rem .5rem 0rem;color:#333;flex:none;border-radius:0 1.5em 1.5em/0em 1.5em 1.5em;color:#fff;background-color:currentColor}.message-card .bubble .content-style{filter:grayscale(1) contrast(999) invert(1)}.message-card .loading{text-align:right;color:#101010}.message-card .created{display:flex}.message-card .created span{font-size:12px;opacity:.4;white-space:nowrap;transition:all .6s ease;color:var(--black);text-align:center;width:100%;box-sizing:border-box;padding-right:10px;pointer-events:none;z-index:1}.right{justify-content:end;align-items:flex-end}.right .avatar-row{flex-direction:row;justify-content:end;width:auto}.right .actions{position:relative;margin-left:0}.right .item-row{justify-content:end}.right .bubble{color:#bbdefb;border-top-left-radius:1.5em;border-top-right-radius:0}.right .play-voice{flex-direction:row-reverse;background-color:#bbdefb}.center{justify-content:center;align-items:center}.center .item-row{justify-content:center}.center .bubble{color:var(--gray-secondary);border-top-left-radius:1.5em;border-top-right-radius:1.5em;font-size:12px;font-weight:100;padding:5px 20px}.play-voice{min-width:100px;height:32px;display:flex;justify-content:space-around;align-items:center;background-color:#fff;border-radius:7px}.play-voice .voice-button{width:32px;height:32px;display:flex;justify-content:center;align-items:center}.play-voice .voice-button span{overflow:hidden;font-size:18px;color:#ff69b4}.play-voice .voice-info{height:32px;display:flex;padding:0 10px;justify-content:end;align-items:center;color:#333}.avatar{border-radius:50%;width:32px;height:32px;object-fit:cover}.audio-icon{color:#ff69b4;font-size:18px}.play-voice-playing{animation:play-voice-animation 1s infinite}@keyframes play-voice-animation{0%{width:0}to{width:32px}}.content-style.loading-text{color:#666;font-style:italic}.play-voice{transition:opacity .3s ease}.play-voice.loading-voice{opacity:.8;cursor:not-allowed}.play-voice.loading-voice .loading-spinner{width:18px;height:18px;color:var(--gray-secondary)}.play-voice.loading-voice .loading-text{font-size:.8em;color:var(--gray-secondary);margin-left:5px}.play-voice .voice-button{display:flex;align-items:center;justify-content:center;width:24px;height:24px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "component", type: CompUserAvatarComponent, selector: "app-comp-user-avatar", inputs: ["user"] }, { kind: "ngmodule", type: MarkdownPreviewModule }, { kind: "component", type: i3.MarkdownPreviewComponent, selector: "fm-markdown-preview", inputs: ["content", "render"] }, { kind: "pipe", type: ChatContentPipe, name: "chatContent" }, { kind: "pipe", type: DurationStrPipe, name: "durationStr" }] }); }
135
135
  }
136
136
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FmChatMessageCard, decorators: [{
137
137
  type: Component,
@@ -142,7 +142,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
142
142
  ChatContentPipe,
143
143
  NzSanitizerPipe,
144
144
  DurationStrPipe
145
- ], template: "<div class=\"message-card\" [class.right]=\"message?.get('role')=='user'\" [class.center]=\"message?.get('role')=='system'\">\r\n <!-- \u7528\u6237\u53CA\u64CD\u4F5C\u533A -->\r\n <div class=\"item-row user\" *ngIf=\"message?.get('role')!='system'\"> <!-- \u7CFB\u7EDF\u6D88\u606F\u4E0D\u663E\u793A\u5934\u50CF -->\r\n <div class=\"avatar-row\">\r\n <div class=\"actions\">\r\n <!-- \u5237\u65B0 -->\r\n <!-- <ion-button fill=\"outline\" slot=\"start\">\r\n <ion-icon name=\"refresh-outline\"></ion-icon>\r\n </ion-button> -->\r\n <!-- \u590D\u5236 -->\r\n <ion-button size=\"small\" fill=\"outline\" slot=\"start\" (click)=\"copy()\">\r\n <ion-icon name=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n <!-- \u7F16\u8F91 -->\r\n <!-- <ion-button fill=\"outline\" slot=\"start\">\r\n <ion-icon name=\"create-outline\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n <!-- \u66F4\u65B0\u97F3\u9891\u6D88\u606F\u533A\u57DF -->\r\n <div *ngIf=\"((message?.get('role')=='assistant' && chat?.role?.get('voiceConfig')?.voice) || (message?.get('role')=='user'&&message?.get('voice')))\"\r\n class=\"play-voice\"\r\n (click)=\"!isLoadingText && toggleVoicePlay()\"\r\n [class.loading-voice]=\"chat?.isTalkMode && isLoadingText\">\r\n\r\n <div class=\"voice-button\">\r\n <!-- \u52A0\u8F7D\u65F6\u663E\u793Aspinner\uFF0C\u5426\u5219\u663E\u793Awifi\u56FE\u6807 -->\r\n <ion-spinner *ngIf=\"chat?.isTalkMode && isLoadingText\" name=\"lines\" class=\"loading-spinner\"></ion-spinner>\r\n <ion-icon *ngIf=\"!(chat?.isTalkMode && isLoadingText)\" name=\"wifi-outline\"\r\n [style.transform]=\"message?.get('role')=='user'?'rotate(-90deg)':'rotate(90deg)'\"\r\n class=\"audio-icon\"\r\n [class.play-voice-playing]=\"tts?.isPlaying\"></ion-icon>\r\n </div>\r\n <div class=\"voice-info\">\r\n <span *ngIf=\"message?.get('voice')?.duration && !isLoadingText\">\r\n {{((message?.get('voice')?.duration||0)/1000) | durationStr}}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u5934\u50CF\u533A\u57DF -->\r\n <img class=\"avatar\" *ngIf=\"message?.get('role')!='user'\" [src]=\"(chat?.role?.get('avatar') || chat?.role?.get('thumb') || 'https://file-cloud.fmode.cn/E4KpGvTEto/20230930/l413e6090731854.png')+'?'+'x-image-process=image/resize,m_fixed,w_100'+'&imageView2/1/w/100/h/100'\" >\r\n <app-comp-user-avatar [user]=\"user\" *ngIf=\"message?.get('role')=='user'\"></app-comp-user-avatar>\r\n </div>\r\n </div>\r\n <!-- \u9644\u4EF6\uFF1A\u56FE\u7247 -->\r\n <div class=\"item-row images\" *ngIf=\"message?.get('content') | chatContent:'image_url'\">\r\n <img [src]=\"message?.get('content') | chatContent:'image_url'\" alt=\"\">\r\n </div>\r\n <!-- \u804A\u5929\u6C14\u6CE1 -->\r\n <!-- Replace the bubble section with this: -->\r\n <div class=\"item-row bubble\" [style.fontSize]=\"role?.get('uiConfig')?.msg?.bubble?.fontSize || '0.8rem'\">\r\n <!-- \u8BF4\u8BDD\u6A21\u5F0F\uFF1A\u5C55\u793A\u52A0\u8F7D\u72B6\u6001 Show loading state for talk mode when message is not complete -->\r\n\r\n <!-- Show normal content for non-talk mode or when loading is complete -->\r\n <ng-container *ngIf=\"!chat?.isTalkMode || message?.get('role') !== 'assistant' || !isLoadingText\">\r\n <fm-markdown-preview *ngIf=\"!message?.get('complete')\" class=\"content-style\"\r\n [content]=\"message?.get('content') | chatContent\" [render]=\"false\"></fm-markdown-preview>\r\n <fm-markdown-preview *ngIf=\"message?.get('complete')\"\r\n [content]=\"message?.get('content') | chatContent\"></fm-markdown-preview>\r\n </ng-container>\r\n </div>\r\n <!-- \u65F6\u95F4\u663E\u793A -->\r\n <div class=\"item-row loading\" *ngIf=\"message?.get('role')!='system' && !message?.get('complete')\">\r\n \u6B63\u5728\u8F93\u5165<ion-spinner name=\"dots\"></ion-spinner>\r\n </div>\r\n\r\n <div class=\"item-row created\" *ngIf=\"message?.get('createdAt')\">\r\n <span>{{message?.get('createdAt') | date:\"dd/MM/yy HH:mm\"}}</span>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";:host-context(body.dark) .message-card .actions .item-native{background:none!important}:host-context(body.dark) .message-card .bubble{color:#0e101d}:host-context(body.dark) .message-card .bubble .content-style{filter:invert(1)!important}:host-context(body.dark) .message-card .bubble fm-markdown-preview{filter:invert(1)!important}:host-context(body.dark) .message-card .play-voice{background-color:#0e101d}:host-context(body.dark) .message-card .play-voice .voice-info{color:#fff}:host-context(body.dark) .message-card .right .bubble{color:#921f8a!important;background:#921f8a!important}:host-context(body.dark) .message-card .right .play-voice{background:#921f8a!important}:host-context(body.dark) .message-card .created span{color:#fff}@media screen and (max-width: 800px){.message-card:focus .actions{opacity:1!important}}.message-card:hover .actions{opacity:1;transition:opacity .3s ease-in-out}.message-card{display:flex;flex-wrap:wrap;justify-content:start;align-items:flex-start}.message-card .avatar-row{width:300px;height:32px;display:flex;flex-direction:row-reverse;justify-content:start;align-items:center}.message-card .actions{display:flex;opacity:0;padding-left:10px;padding-right:10px}.message-card .item-row{display:flex;flex:100%;justify-content:start;margin-bottom:5px}.message-card .images img{max-width:300px}.message-card .bubble.loading{color:var(--gray-secondary)}.message-card .bubble.loading .content-style{filter:none}.message-card .bubble{display:flex;justify-content:center;max-width:100%;padding:.5rem .5rem 0rem;color:#333;flex:none;border-radius:0 1.5em 1.5em/0em 1.5em 1.5em;color:#fff;background-color:currentColor}.message-card .bubble .content-style{filter:grayscale(1) contrast(999) invert(1)}.message-card .loading{text-align:right;color:#101010}.message-card .created{display:flex}.message-card .created span{font-size:12px;opacity:.4;white-space:nowrap;transition:all .6s ease;color:var(--black);text-align:center;width:100%;box-sizing:border-box;padding-right:10px;pointer-events:none;z-index:1}.right{justify-content:end;align-items:flex-end}.right .avatar-row{flex-direction:row;justify-content:end;width:auto}.right .actions{position:relative;margin-left:0}.right .item-row{justify-content:end}.right .bubble{color:#bbdefb;border-top-left-radius:1.5em;border-top-right-radius:0}.right .play-voice{flex-direction:row-reverse;background-color:#bbdefb}.center{justify-content:center;align-items:center}.center .item-row{justify-content:center}.center .bubble{color:var(--gray-secondary);border-top-left-radius:1.5em;border-top-right-radius:1.5em;font-size:12px;font-weight:100;padding:5px 20px}.play-voice{min-width:100px;height:32px;display:flex;justify-content:space-around;align-items:center;background-color:#fff;border-radius:7px}.play-voice .voice-button{width:32px;height:32px;display:flex;justify-content:center;align-items:center}.play-voice .voice-button span{overflow:hidden;font-size:18px;color:#ff69b4}.play-voice .voice-info{height:32px;display:flex;padding:0 10px;justify-content:end;align-items:center;color:#333}.avatar{border-radius:50%;width:32px;height:32px;object-fit:cover}.audio-icon{color:#ff69b4;font-size:18px}.play-voice-playing{animation:play-voice-animation 1s infinite}@keyframes play-voice-animation{0%{width:0}to{width:32px}}.content-style.loading-text{color:#666;font-style:italic}.play-voice{transition:opacity .3s ease}.play-voice.loading-voice{opacity:.8;cursor:not-allowed}.play-voice.loading-voice .loading-spinner{width:18px;height:18px;color:var(--gray-secondary)}.play-voice.loading-voice .loading-text{font-size:.8em;color:var(--gray-secondary);margin-left:5px}.play-voice .voice-button{display:flex;align-items:center;justify-content:center;width:24px;height:24px}\n"] }]
145
+ ], template: "<div class=\"message-card\" [class.right]=\"message?.get('content')?.role=='user'\" [class.center]=\"message?.get('content')?.role=='system'\">\r\n <!-- \u7528\u6237\u53CA\u64CD\u4F5C\u533A -->\r\n <div class=\"item-row user\" *ngIf=\"message?.get('content')?.role!='system'\"> <!-- \u7CFB\u7EDF\u6D88\u606F\u4E0D\u663E\u793A\u5934\u50CF -->\r\n <div class=\"avatar-row\">\r\n <div class=\"actions\">\r\n <!-- \u5237\u65B0 -->\r\n <!-- <ion-button fill=\"outline\" slot=\"start\">\r\n <ion-icon name=\"refresh-outline\"></ion-icon>\r\n </ion-button> -->\r\n <!-- \u590D\u5236 -->\r\n <ion-button size=\"small\" fill=\"outline\" slot=\"start\" (click)=\"copy()\">\r\n <ion-icon name=\"copy-outline\"></ion-icon>\r\n </ion-button>\r\n <!-- \u7F16\u8F91 -->\r\n <!-- <ion-button fill=\"outline\" slot=\"start\">\r\n <ion-icon name=\"create-outline\"></ion-icon>\r\n </ion-button> -->\r\n </div>\r\n <!-- \u66F4\u65B0\u97F3\u9891\u6D88\u606F\u533A\u57DF -->\r\n <div *ngIf=\"((message?.get('content')?.role=='assistant' && chat?.role?.get('voiceConfig')?.voice) || (message?.get('content')?.role=='user'&&message?.get('voice')))\"\r\n class=\"play-voice\"\r\n (click)=\"!isLoadingText && toggleVoicePlay()\"\r\n [class.loading-voice]=\"chat?.isTalkMode && isLoadingText\">\r\n\r\n <div class=\"voice-button\">\r\n <!-- \u52A0\u8F7D\u65F6\u663E\u793Aspinner\uFF0C\u5426\u5219\u663E\u793Awifi\u56FE\u6807 -->\r\n <ion-spinner *ngIf=\"chat?.isTalkMode && isLoadingText\" name=\"lines\" class=\"loading-spinner\"></ion-spinner>\r\n <ion-icon *ngIf=\"!(chat?.isTalkMode && isLoadingText)\" name=\"wifi-outline\"\r\n [style.transform]=\"message?.get('content')?.role=='user'?'rotate(-90deg)':'rotate(90deg)'\"\r\n class=\"audio-icon\"\r\n [class.play-voice-playing]=\"tts?.isPlaying\"></ion-icon>\r\n </div>\r\n <div class=\"voice-info\">\r\n <span *ngIf=\"message?.get('voice')?.duration && !isLoadingText\">\r\n {{((message?.get('voice')?.duration||0)/1000) | durationStr}}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u5934\u50CF\u533A\u57DF -->\r\n <img class=\"avatar\" *ngIf=\"message?.get('content')?.role!='user'\" [src]=\"(chat?.role?.get('avatar') || chat?.role?.get('thumb') || 'https://file-cloud.fmode.cn/E4KpGvTEto/20230930/l413e6090731854.png')+'?'+'x-image-process=image/resize,m_fixed,w_100'+'&imageView2/1/w/100/h/100'\" >\r\n <app-comp-user-avatar [user]=\"user\" *ngIf=\"message?.get('content')?.role=='user'\"></app-comp-user-avatar>\r\n </div>\r\n </div>\r\n <!-- \u9644\u4EF6\uFF1A\u56FE\u7247 -->\r\n <div class=\"item-row images\" *ngIf=\"message?.get('content') | chatContent:'image_url'\">\r\n <img [src]=\"message?.get('content') | chatContent:'image_url'\" alt=\"\">\r\n </div>\r\n <!-- \u804A\u5929\u6C14\u6CE1 -->\r\n <!-- Replace the bubble section with this: -->\r\n <div class=\"item-row bubble\" [style.fontSize]=\"role?.get('uiConfig')?.msg?.bubble?.fontSize || '0.8rem'\">\r\n <!-- \u8BF4\u8BDD\u6A21\u5F0F\uFF1A\u5C55\u793A\u52A0\u8F7D\u72B6\u6001 Show loading state for talk mode when message is not complete -->\r\n\r\n <!-- Show normal content for non-talk mode or when loading is complete -->\r\n <ng-container *ngIf=\"!chat?.isTalkMode || message?.get('content')?.role !== 'assistant' || !isLoadingText\">\r\n <fm-markdown-preview *ngIf=\"!message?.get('complete')\" class=\"content-style\"\r\n [content]=\"message?.get('content') | chatContent\" [render]=\"false\"></fm-markdown-preview>\r\n <fm-markdown-preview *ngIf=\"message?.get('complete')\"\r\n [content]=\"message?.get('content') | chatContent\"></fm-markdown-preview>\r\n </ng-container>\r\n </div>\r\n <!-- \u65F6\u95F4\u663E\u793A -->\r\n <div class=\"item-row loading\" *ngIf=\"message?.get('content')?.role!='system' && !message?.get('complete')\">\r\n \u6B63\u5728\u8F93\u5165<ion-spinner name=\"dots\"></ion-spinner>\r\n </div>\r\n\r\n <div class=\"item-row created\" *ngIf=\"message?.get('createdAt')\">\r\n <span>{{message?.get('createdAt') | date:\"dd/MM/yy HH:mm\"}}</span>\r\n </div>\r\n</div>", styles: ["@charset \"UTF-8\";:host-context(body.dark) .message-card .actions .item-native{background:none!important}:host-context(body.dark) .message-card .bubble{color:#0e101d}:host-context(body.dark) .message-card .bubble .content-style{filter:invert(1)!important}:host-context(body.dark) .message-card .bubble fm-markdown-preview{filter:invert(1)!important}:host-context(body.dark) .message-card .play-voice{background-color:#0e101d}:host-context(body.dark) .message-card .play-voice .voice-info{color:#fff}:host-context(body.dark) .message-card .right .bubble{color:#921f8a!important;background:#921f8a!important}:host-context(body.dark) .message-card .right .play-voice{background:#921f8a!important}:host-context(body.dark) .message-card .created span{color:#fff}@media screen and (max-width: 800px){.message-card:focus .actions{opacity:1!important}}.message-card:hover .actions{opacity:1;transition:opacity .3s ease-in-out}.message-card{display:flex;flex-wrap:wrap;justify-content:start;align-items:flex-start}.message-card .avatar-row{width:300px;height:32px;display:flex;flex-direction:row-reverse;justify-content:start;align-items:center}.message-card .actions{display:flex;opacity:0;padding-left:10px;padding-right:10px}.message-card .item-row{display:flex;flex:100%;justify-content:start;margin-bottom:5px}.message-card .images img{max-width:300px}.message-card .bubble.loading{color:var(--gray-secondary)}.message-card .bubble.loading .content-style{filter:none}.message-card .bubble{display:flex;justify-content:center;max-width:100%;padding:.5rem .5rem 0rem;color:#333;flex:none;border-radius:0 1.5em 1.5em/0em 1.5em 1.5em;color:#fff;background-color:currentColor}.message-card .bubble .content-style{filter:grayscale(1) contrast(999) invert(1)}.message-card .loading{text-align:right;color:#101010}.message-card .created{display:flex}.message-card .created span{font-size:12px;opacity:.4;white-space:nowrap;transition:all .6s ease;color:var(--black);text-align:center;width:100%;box-sizing:border-box;padding-right:10px;pointer-events:none;z-index:1}.right{justify-content:end;align-items:flex-end}.right .avatar-row{flex-direction:row;justify-content:end;width:auto}.right .actions{position:relative;margin-left:0}.right .item-row{justify-content:end}.right .bubble{color:#bbdefb;border-top-left-radius:1.5em;border-top-right-radius:0}.right .play-voice{flex-direction:row-reverse;background-color:#bbdefb}.center{justify-content:center;align-items:center}.center .item-row{justify-content:center}.center .bubble{color:var(--gray-secondary);border-top-left-radius:1.5em;border-top-right-radius:1.5em;font-size:12px;font-weight:100;padding:5px 20px}.play-voice{min-width:100px;height:32px;display:flex;justify-content:space-around;align-items:center;background-color:#fff;border-radius:7px}.play-voice .voice-button{width:32px;height:32px;display:flex;justify-content:center;align-items:center}.play-voice .voice-button span{overflow:hidden;font-size:18px;color:#ff69b4}.play-voice .voice-info{height:32px;display:flex;padding:0 10px;justify-content:end;align-items:center;color:#333}.avatar{border-radius:50%;width:32px;height:32px;object-fit:cover}.audio-icon{color:#ff69b4;font-size:18px}.play-voice-playing{animation:play-voice-animation 1s infinite}@keyframes play-voice-animation{0%{width:0}to{width:32px}}.content-style.loading-text{color:#666;font-style:italic}.play-voice{transition:opacity .3s ease}.play-voice.loading-voice{opacity:.8;cursor:not-allowed}.play-voice.loading-voice .loading-spinner{width:18px;height:18px;color:var(--gray-secondary)}.play-voice.loading-voice .loading-text{font-size:.8em;color:var(--gray-secondary);margin-left:5px}.play-voice .voice-button{display:flex;align-items:center;justify-content:center;width:24px;height:24px}\n"] }]
146
146
  }], ctorParameters: () => [{ type: i1.ClipboardService }], propDecorators: { index: [{
147
147
  type: Input
148
148
  }], message: [{
@@ -152,4 +152,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
152
152
  }], chat: [{
153
153
  type: Input
154
154
  }] } });
155
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1tZXNzYWdlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWNhcmQvY29tcC1tZXNzYWdlLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWNhcmQvY29tcC1tZXNzYWdlLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUscUJBQXFCLEdBQUssTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFP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QUMsQ0FBQyxDQUFBO0lBQ3BGLENBQUM7K0dBdklVLGlCQUFpQjttR0FBakIsaUJBQWlCLGlMQ2hDOUIsODdJQW9FTSxrdkhENUNGLFlBQVksc0xBQ1osdUJBQXVCLGtGQUFDLHFCQUFxQixvSkFFN0MsZUFBZSwrQ0FFZixlQUFlOzs0RkFHTixpQkFBaUI7a0JBZDdCLFNBQVM7K0JBQ0Usc0JBQXNCLGNBR3JCLElBQUksV0FDUDt3QkFDTixZQUFZLEVBQUMsT0FBTzt3QkFDcEIsdUJBQXVCLEVBQUMscUJBQXFCO3dCQUM3QyxTQUFTO3dCQUNULGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixlQUFlO3FCQUNoQjtxRkFHUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhdENvbnRlbnRQaXBlLCBGbW9kZUNoYXQsIGdldE1lc3NhZ2VDb250ZW50VGV4dCwgICB9IGZyb20gJy4uLy4uL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWNoYXQnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7Rm1vZGVQYXJzZSxGbW9kZU9iamVjdCxGbW9kZVF1ZXJ5LEZtb2RlVXNlcn0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvcGFyc2VcIjtjb25zdCBQYXJzZSA9IEZtb2RlUGFyc2Uud2l0aChcIm5vdmFcIik7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJb25BdmF0YXIsIElvbkl0ZW0gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcclxuaW1wb3J0IHsgQ29tcFVzZXJBdmF0YXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi91c2VyL2NvbXAtdXNlci1hdmF0YXIvY29tcC11c2VyLWF2YXRhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcC1tYXJrZG93bi1wcmV2aWV3L2NsaXBib2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFya2Rvd25QcmV2aWV3TW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcC1tYXJrZG93bi1wcmV2aWV3L21hcmtkb3duLXByZXZpZXcubW9kdWxlJztcclxuaW1wb3J0IHsgTnpTYW5pdGl6ZXJQaXBlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9waXBlcyc7XHJcbmltcG9ydCB7IEZtb2RlVFRTIH0gZnJvbSAnLi4vLi4vdm9pY2UvdHRzJztcclxuaW1wb3J0IHsgRHVyYXRpb25TdHJQaXBlIH0gZnJvbSAnLi9kdXJhdGlvbi1zdHIucGlwZSc7XHJcblxyXG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcclxuaW1wb3J0IHt3aWZpT3V0bGluZSxjb3B5T3V0bGluZX0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xyXG5hZGRJY29ucyh7d2lmaU91dGxpbmUsY29weU91dGxpbmV9KVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmbS1jaGF0LW1lc3NhZ2UtY2FyZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXAtbWVzc2FnZS1jYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb21wLW1lc3NhZ2UtY2FyZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6dHJ1ZSxcclxuICBpbXBvcnRzOltcclxuICAgIENvbW1vbk1vZHVsZSxJb25JdGVtLFxyXG4gICAgQ29tcFVzZXJBdmF0YXJDb21wb25lbnQsTWFya2Rvd25QcmV2aWV3TW9kdWxlLFxyXG4gICAgSW9uQXZhdGFyLFxyXG4gICAgQ2hhdENvbnRlbnRQaXBlLFxyXG4gICAgTnpTYW5pdGl6ZXJQaXBlLFxyXG4gICAgRHVyYXRpb25TdHJQaXBlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm1DaGF0TWVzc2FnZUNhcmQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGluZGV4Om51bWJlcnx1bmRlZmluZWQgLy8g5b6q546v5YiX6KGo5Lit55qE5bqP5Y+3XHJcbiAgQElucHV0KCkgbWVzc2FnZTpGbW9kZU9iamVjdCAgLy8g5Y+q5pSv5oyBRm1vZGVPYmplY3TnsbvlnotcclxuICBASW5wdXQoKSByb2xlOkZtb2RlT2JqZWN0XHJcbiAgQElucHV0KCkgY2hhdDpGbW9kZUNoYXRcclxuICB1c2VyOkZtb2RlVXNlclxyXG5cclxuICBtZXNzYWdlVGV4dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gIGlzTG9hZGluZ1RleHQgPSB0cnVlO1xyXG5cclxuXHJcbiAgbmdPbkNoYW5nZXMoKXtcclxuICAgIGlmICh0aGlzLmNoYXQ/LmlzVGFsa01vZGUgJiYgdGhpcy5tZXNzYWdlPy5nZXQoJ3JvbGUnKSA9PT0gJ2Fzc2lzdGFudCcgJiYgIXRoaXMubWVzc2FnZT8uZ2V0KCdjb21wbGV0ZScpKSB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nVGV4dCA9IHRydWU7XHJcbiAgICAgIHRoaXMubWVzc2FnZVRleHQkLm5leHQoJ+ato+WcqOWKoOi9veS4rS4uLicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmdUZXh0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubWVzc2FnZVRleHQkLm5leHQoZ2V0TWVzc2FnZUNvbnRlbnRUZXh0KHRoaXMubWVzc2FnZT8uZ2V0KCdjb250ZW50JykpKTtcclxuICAgIH1cclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvcHlTZXJ2OkNsaXBib2FyZFNlcnZpY2VcclxuICAgICl7XHJcbiAgICAgIHRoaXMudXNlciA9IFBhcnNlLlVzZXIuY3VycmVudCgpO1xyXG4gICAgfVxyXG4gIC8vIGlzVm9pY2VQbGF5aW5nOmJvb2xlYW4gPSBmYWxzZTtcclxuICB0dHM6Rm1vZGVUVFN8bnVsbDtcclxuICAvLyDliIfmjaLmkq3mlL7nirbmgIFcclxuICAvLyBNb2RpZnkgdGhlIHRvZ2dsZVZvaWNlUGxheSBtZXRob2Q6XHJcbmFzeW5jIHRvZ2dsZVZvaWNlUGxheSgpIHtcclxuICBjb25zdCBtZXNzYWdlVm9pY2UgPSB0aGlzLm1lc3NhZ2U/LmdldCgndm9pY2UnKTtcclxuICBjb25zdCBtZXNzYWdlUm9sZSA9IHRoaXMubWVzc2FnZT8uZ2V0KCdyb2xlJyk7XHJcbiAgY29uc3QgbWVzc2FnZUNvbnRlbnQgPSB0aGlzLm1lc3NhZ2U/LmdldCgnY29udGVudCcpO1xyXG5cclxuICBpZiAobWVzc2FnZVZvaWNlPy5pZCkge1xyXG4gICAgaWYgKHRoaXMuY2hhdC5Wb2ljZVRUU01hcFttZXNzYWdlVm9pY2U/LmlkXSkge1xyXG4gICAgICB0aGlzLnR0cyA9IHRoaXMuY2hhdC5Wb2ljZVRUU01hcFttZXNzYWdlVm9pY2U/LmlkXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh0aGlzLnR0cz8uaXNQbGF5aW5nKSB7XHJcbiAgICB0aGlzLnR0cz8uc3RvcCgpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVzZXQgbG9hZGluZyBzdGF0ZSB3aGVuIHN0YXJ0aW5nIG5ldyBwbGF5YmFja1xyXG4gIGlmICh0aGlzLmNoYXQ/LmlzVGFsa01vZGUgJiYgbWVzc2FnZVJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZ1RleHQgPSB0cnVlO1xyXG4gICAgdGhpcy5tZXNzYWdlVGV4dCQubmV4dCgn5q2j5Zyo5Yqg6L295LitLi4uJyk7XHJcbiAgfVxyXG5cclxuICBsZXQgbmVlZFVwZGF0ZSA9IGZhbHNlO1xyXG4gIGxldCB2b2ljZTpGbW9kZU9iamVjdDtcclxuXHJcbiAgaWYgKG1lc3NhZ2VWb2ljZT8uaWQpIHtcclxuICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIkNoYXRWb2ljZVwiKTtcclxuICAgIHF1ZXJ5LmluY2x1ZGUoXCJ2b2ljZUZpbGVcIik7XHJcbiAgICB2b2ljZSA9IGF3YWl0IHF1ZXJ5LmdldChtZXNzYWdlVm9pY2U/LmlkKTtcclxuICB9XHJcblxyXG4gIGlmICghdm9pY2U/LmlkKSB7XHJcbiAgICBsZXQgaXRlbSA9IGF3YWl0IHRoaXMuY2hhdC5nZXRWb2ljZUJ5Q29udGVudFRleHQobWVzc2FnZUNvbnRlbnQpO1xyXG4gICAgdm9pY2UgPSB0aGlzLmNoYXQudm9pY2VNYXBbaXRlbT8uaWRdO1xyXG4gICAgdGhpcy5tZXNzYWdlPy5zZXQoJ3ZvaWNlJywgeyBpZDogdm9pY2U/LmlkLCBkdXJhdGlvbjogdm9pY2U/LmdldChcImR1cmF0aW9uXCIpIH0pO1xyXG4gICAgbmVlZFVwZGF0ZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBpZiAoIW1lc3NhZ2VWb2ljZT8uZHVyYXRpb24pIHtcclxuICAgIGNvbnN0IGN1cnJlbnRWb2ljZSA9IG1lc3NhZ2VWb2ljZSB8fCB7fTtcclxuICAgIHRoaXMubWVzc2FnZT8uc2V0KCd2b2ljZScsIHsgLi4uY3VycmVudFZvaWNlLCBkdXJhdGlvbjogdm9pY2U/LmdldChcImR1cmF0aW9uXCIpIH0pO1xyXG4gICAgbmVlZFVwZGF0ZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBpZiAobmVlZFVwZGF0ZSkge1xyXG4gICAgdGhpcy5zYXZlU2Vzc2lvbigpO1xyXG4gIH1cclxuXHJcbiAgYXdhaXQgdGhpcy5jaGF0LnBsYXlDaGF0Vm9pY2Uodm9pY2UsIHtcclxuICAgIG9uU3RhcnQ6IChwbGF5ZWRWb2ljZTpGbW9kZU9iamVjdCkgPT4ge1xyXG4gICAgICAvLyBXaGVuIHZvaWNlIHN0YXJ0cyBwbGF5aW5nLCBzaG93IHRoZSBmdWxsIG1lc3NhZ2VcclxuICAgICAgaWYgKHRoaXMuY2hhdD8uaXNUYWxrTW9kZSAmJiB0aGlzLm1lc3NhZ2U/LmdldCgncm9sZScpID09PSAnYXNzaXN0YW50Jykge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nVGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlVGV4dCQubmV4dChnZXRNZXNzYWdlQ29udGVudFRleHQodGhpcy5tZXNzYWdlPy5nZXQoJ2NvbnRlbnQnKSkpO1xyXG4gICAgICAgIH0sNjAwKSAvLyDlu7bov5/liLDlvIDlp4vmkq3mlL7lo7Dpn7PlkI7mmL7npLrmloflrZdcclxuICAgICAgfVxyXG4gICAgICBpZiAodm9pY2U/LmlkICE9IHBsYXllZFZvaWNlPy5pZCkge1xyXG4gICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZXJlIHdyb25nIHZvaWNlIGlzIHBsYXlpbmdcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIG9uTG9hZGVkOiAoYXVkaW86IEhUTUxBdWRpb0VsZW1lbnQpID0+IHtcclxuICAgICAgbGV0IHZvaWNlID0gdGhpcy5tZXNzYWdlPy5nZXQoXCJ2b2ljZVwiKTtcclxuICAgICAgaWYgKHZvaWNlKSB7XHJcbiAgICAgICAgdm9pY2UuZHVyYXRpb24gPSBhdWRpbz8uZHVyYXRpb24gKiAxMDAwO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZT8uc2V0KFwidm9pY2VcIiwgdm9pY2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlVm9pY2VEdXJhdGlvbihhdWRpby5kdXJhdGlvbiAqIDEwMDApO1xyXG4gICAgfSxcclxuICAgIG9uUmVzdWx0OihyZXN1bHQ6e2R1cmF0aW9uOm51bWJlcn0pPT57XHJcbiAgICAgIGNvbnNvbGUubG9nKFwib25SZXN1bHRcIixyZXN1bHQpXHJcbiAgICAgIGlmKHJlc3VsdD8uZHVyYXRpb24pe1xyXG4gICAgICAgIGxldCB2b2ljZSA9IHRoaXMubWVzc2FnZT8uZ2V0KFwidm9pY2VcIik7XHJcbiAgICAgICAgaWYgKHZvaWNlKSB7XHJcbiAgICAgICAgICB2b2ljZS5kdXJhdGlvbiA9IHJlc3VsdD8uZHVyYXRpb247XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2U/LnNldChcInZvaWNlXCIsIHZvaWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBvblN0b3A6IChwbGF5ZWRWb2ljZTpGbW9kZU9iamVjdCkgPT4ge1xyXG4gICAgICBpZiAodm9pY2U/LmlkICE9IHBsYXllZFZvaWNlPy5pZCkge1xyXG4gICAgICAgIC8vIEhhbmRsZSBzdG9wIGV2ZW50XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgdGhpcy50dHMgPSB0aGlzLmNoYXQuVm9pY2VUVFNNYXBbdm9pY2U/LmlkXTtcclxufVxyXG5cclxuICB1cGRhdGVWb2ljZUR1cmF0aW9uKGR1cmF0aW9uOm51bWJlcil7XHJcbiAgICBjb25zdCBtZXNzYWdlVm9pY2UgPSB0aGlzLm1lc3NhZ2U/LmdldCgndm9pY2UnKTtcclxuICAgIGlmKCFtZXNzYWdlVm9pY2U/LmR1cmF0aW9uKXtcclxuICAgICAgY29uc3QgY3VycmVudFZvaWNlID0gbWVzc2FnZVZvaWNlIHx8IHt9O1xyXG4gICAgICB0aGlzLm1lc3NhZ2U/LnNldCgndm9pY2UnLCB7IC4uLmN1cnJlbnRWb2ljZSwgZHVyYXRpb246IGR1cmF0aW9uIH0pO1xyXG4gICAgICB0aGlzLnNhdmVTZXNzaW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlU2Vzc2lvbigpe1xyXG4gICAgaWYodGhpcy5pbmRleD49MiB8fCB0aGlzLmluZGV4PT09dW5kZWZpbmVkKXsgLy8g5pyq5a6a5LmJ5oiW5bqP5Y+356ys5LiJ6aG55byA5aeL77yM6Ieq5Yqo5L+d5a2YU2Vzc2lvbu+8iDAu57O757ufIDEu6Zeu5YCZIDIu55So5oi377yJXHJcbiAgICAgIHRoaXMuY2hhdD8uc2F2ZUNoYXRTZXNzaW9uKCk7IC8vIOS/neWtmOa2iOaBr+ivremfs1xyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgYXN5bmMgY29weSgpe1xyXG4gICAgdGhpcy5jb3B5U2Vydi5jb3B5VG9DbGlwYm9hcmQoZ2V0TWVzc2FnZUNvbnRlbnRUZXh0KHRoaXMubWVzc2FnZT8uZ2V0KCdjb250ZW50JykpKVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibWVzc2FnZS1jYXJkXCIgW2NsYXNzLnJpZ2h0XT1cIm1lc3NhZ2U/LmdldCgncm9sZScpPT0ndXNlcidcIiBbY2xhc3MuY2VudGVyXT1cIm1lc3NhZ2U/LmdldCgncm9sZScpPT0nc3lzdGVtJ1wiPlxyXG4gICAgPCEtLSDnlKjmiLflj4rmk43kvZzljLogLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaXRlbS1yb3cgdXNlclwiICpuZ0lmPVwibWVzc2FnZT8uZ2V0KCdyb2xlJykhPSdzeXN0ZW0nXCI+IDwhLS0g57O757uf5raI5oGv5LiN5pi+56S65aS05YOPIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIOWIt+aWsCAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBzbG90PVwic3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInJlZnJlc2gtb3V0bGluZVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDlpI3liLYgLS0+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaXplPVwic21hbGxcIiBmaWxsPVwib3V0bGluZVwiIHNsb3Q9XCJzdGFydFwiIChjbGljayk9XCJjb3B5KClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNvcHktb3V0bGluZVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8IS0tIOe8lui+kSAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBzbG90PVwic3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNyZWF0ZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIOabtOaWsOmfs+mikea2iOaBr+WMuuWfnyAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIigobWVzc2FnZT8uZ2V0KCdyb2xlJyk9PSdhc3Npc3RhbnQnICYmIGNoYXQ/LnJvbGU/LmdldCgndm9pY2VDb25maWcnKT8udm9pY2UpIHx8IChtZXNzYWdlPy5nZXQoJ3JvbGUnKT09J3VzZXInJiZtZXNzYWdlPy5nZXQoJ3ZvaWNlJykpKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicGxheS12b2ljZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCIhaXNMb2FkaW5nVGV4dCAmJiB0b2dnbGVWb2ljZVBsYXkoKVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5sb2FkaW5nLXZvaWNlXT1cImNoYXQ/LmlzVGFsa01vZGUgJiYgaXNMb2FkaW5nVGV4dFwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZvaWNlLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8IS0tIOWKoOi9veaXtuaYvuekunNwaW5uZXLvvIzlkKbliJnmmL7npLp3aWZp5Zu+5qCHIC0tPlxyXG4gICAgICAgICAgICA8aW9uLXNwaW5uZXIgKm5nSWY9XCJjaGF0Py5pc1RhbGtNb2RlICYmIGlzTG9hZGluZ1RleHRcIiBuYW1lPVwibGluZXNcIiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPjwvaW9uLXNwaW5uZXI+XHJcbiAgICAgICAgICAgIDxpb24taWNvbiAqbmdJZj1cIiEoY2hhdD8uaXNUYWxrTW9kZSAmJiBpc0xvYWRpbmdUZXh0KVwiIG5hbWU9XCJ3aWZpLW91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCJtZXNzYWdlPy5nZXQoJ3JvbGUnKT09J3VzZXInPydyb3RhdGUoLTkwZGVnKSc6J3JvdGF0ZSg5MGRlZyknXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXVkaW8taWNvblwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MucGxheS12b2ljZS1wbGF5aW5nXT1cInR0cz8uaXNQbGF5aW5nXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2b2ljZS1pbmZvXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWVzc2FnZT8uZ2V0KCd2b2ljZScpPy5kdXJhdGlvbiAmJiAhaXNMb2FkaW5nVGV4dFwiPlxyXG4gICAgICAgICAgICAgICAge3soKG1lc3NhZ2U/LmdldCgndm9pY2UnKT8uZHVyYXRpb258fDApLzEwMDApIHwgZHVyYXRpb25TdHJ9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSDlpLTlg4/ljLrln58gLS0+XHJcbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdmF0YXJcIiAqbmdJZj1cIm1lc3NhZ2U/LmdldCgncm9sZScpIT0ndXNlcidcIiBbc3JjXT1cIihjaGF0Py5yb2xlPy5nZXQoJ2F2YXRhcicpIHx8IGNoYXQ/LnJvbGU/LmdldCgndGh1bWInKSB8fCAnaHR0cHM6Ly9maWxlLWNsb3VkLmZtb2RlLmNuL0U0S3BHdlRFdG8vMjAyMzA5MzAvbDQxM2U2MDkwNzMxODU0LnBuZycpKyc/JysneC1pbWFnZS1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTAwJysnJmltYWdlVmlldzIvMS93LzEwMC9oLzEwMCdcIiA+XHJcbiAgICAgICAgICAgIDxhcHAtY29tcC11c2VyLWF2YXRhciBbdXNlcl09XCJ1c2VyXCIgKm5nSWY9XCJtZXNzYWdlPy5nZXQoJ3JvbGUnKT09J3VzZXInXCI+PC9hcHAtY29tcC11c2VyLWF2YXRhcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgIDwhLS0g6ZmE5Lu277ya5Zu+54mHIC0tPlxyXG4gICAgIDxkaXYgY2xhc3M9XCJpdGVtLXJvdyBpbWFnZXNcIiAqbmdJZj1cIm1lc3NhZ2U/LmdldCgnY29udGVudCcpIHwgY2hhdENvbnRlbnQ6J2ltYWdlX3VybCdcIj5cclxuICAgICAgICA8aW1nIFtzcmNdPVwibWVzc2FnZT8uZ2V0KCdjb250ZW50JykgfCBjaGF0Q29udGVudDonaW1hZ2VfdXJsJ1wiIGFsdD1cIlwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIOiBiuWkqeawlOazoSAtLT5cclxuICAgIDwhLS0gUmVwbGFjZSB0aGUgYnViYmxlIHNlY3Rpb24gd2l0aCB0aGlzOiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJpdGVtLXJvdyBidWJibGVcIiBbc3R5bGUuZm9udFNpemVdPVwicm9sZT8uZ2V0KCd1aUNvbmZpZycpPy5tc2c/LmJ1YmJsZT8uZm9udFNpemUgfHwgJzAuOHJlbSdcIj5cclxuICAgICAgICA8IS0tIOivtOivneaooeW8j++8muWxleekuuWKoOi9veeKtuaAgSBTaG93IGxvYWRpbmcgc3RhdGUgZm9yIHRhbGsgbW9kZSB3aGVuIG1lc3NhZ2UgaXMgbm90IGNvbXBsZXRlIC0tPlxyXG5cclxuICAgICAgICA8IS0tIFNob3cgbm9ybWFsIGNvbnRlbnQgZm9yIG5vbi10YWxrIG1vZGUgb3Igd2hlbiBsb2FkaW5nIGlzIGNvbXBsZXRlIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2hhdD8uaXNUYWxrTW9kZSB8fCBtZXNzYWdlPy5nZXQoJ3JvbGUnKSAhPT0gJ2Fzc2lzdGFudCcgfHwgIWlzTG9hZGluZ1RleHRcIj5cclxuICAgICAgICAgICAgPGZtLW1hcmtkb3duLXByZXZpZXcgKm5nSWY9XCIhbWVzc2FnZT8uZ2V0KCdjb21wbGV0ZScpXCIgY2xhc3M9XCJjb250ZW50LXN0eWxlXCJcclxuICAgICAgICAgICAgICAgIFtjb250ZW50XT1cIm1lc3NhZ2U/LmdldCgnY29udGVudCcpIHwgY2hhdENvbnRlbnRcIiBbcmVuZGVyXT1cImZhbHNlXCI+PC9mbS1tYXJrZG93bi1wcmV2aWV3PlxyXG4gICAgICAgICAgICA8Zm0tbWFya2Rvd24tcHJldmlldyAqbmdJZj1cIm1lc3NhZ2U/LmdldCgnY29tcGxldGUnKVwiXHJcbiAgICAgICAgICAgICAgICBbY29udGVudF09XCJtZXNzYWdlPy5nZXQoJ2NvbnRlbnQnKSB8IGNoYXRDb250ZW50XCI+PC9mbS1tYXJrZG93bi1wcmV2aWV3PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIOaXtumXtOaYvuekuiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJpdGVtLXJvdyBsb2FkaW5nXCIgKm5nSWY9XCJtZXNzYWdlPy5nZXQoJ3JvbGUnKSE9J3N5c3RlbScgJiYgIW1lc3NhZ2U/LmdldCgnY29tcGxldGUnKVwiPlxyXG4gICAgICAgIOato+WcqOi+k+WFpTxpb24tc3Bpbm5lciBuYW1lPVwiZG90c1wiPjwvaW9uLXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiaXRlbS1yb3cgY3JlYXRlZFwiICpuZ0lmPVwibWVzc2FnZT8uZ2V0KCdjcmVhdGVkQXQnKVwiPlxyXG4gICAgICAgIDxzcGFuPnt7bWVzc2FnZT8uZ2V0KCdjcmVhdGVkQXQnKSB8IGRhdGU6XCJkZC9NTS95eSBISDptbVwifX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcC1tZXNzYWdlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWNhcmQvY29tcC1tZXNzYWdlLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL2NoYXQvY2hhdC1tZXNzYWdlLWNhcmQvY29tcC1tZXNzYWdlLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUscUJBQXFCLEdBQUssTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBQyxVQUFVLEVBQUMsV0FBVyxFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQy9ELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFP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QUMsQ0FBQyxDQUFBO0lBQ3BGLENBQUM7K0dBdklVLGlCQUFpQjttR0FBakIsaUJBQWlCLGlMQ2hDOUIsd2hKQW9FTSxrdkhENUNGLFlBQVksc0xBQ1osdUJBQXVCLGtGQUFDLHFCQUFxQixvSkFFN0MsZUFBZSwrQ0FFZixlQUFlOzs0RkFHTixpQkFBaUI7a0JBZDdCLFNBQVM7K0JBQ0Usc0JBQXNCLGNBR3JCLElBQUksV0FDUDt3QkFDTixZQUFZLEVBQUMsT0FBTzt3QkFDcEIsdUJBQXVCLEVBQUMscUJBQXFCO3dCQUM3QyxTQUFTO3dCQUNULGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixlQUFlO3FCQUNoQjtxRkFHUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hhdENvbnRlbnRQaXBlLCBGbW9kZUNoYXQsIGdldE1lc3NhZ2VDb250ZW50VGV4dCwgICB9IGZyb20gJy4uLy4uL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWNoYXQnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7Rm1vZGVQYXJzZSxGbW9kZU9iamVjdCxGbW9kZVF1ZXJ5LEZtb2RlVXNlcn0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvcGFyc2VcIjtjb25zdCBQYXJzZSA9IEZtb2RlUGFyc2Uud2l0aChcIm5vdmFcIik7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBJb25BdmF0YXIsIElvbkl0ZW0gfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcclxuaW1wb3J0IHsgQ29tcFVzZXJBdmF0YXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi91c2VyL2NvbXAtdXNlci1hdmF0YXIvY29tcC11c2VyLWF2YXRhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwYm9hcmRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcC1tYXJrZG93bi1wcmV2aWV3L2NsaXBib2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWFya2Rvd25QcmV2aWV3TW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcC1tYXJrZG93bi1wcmV2aWV3L21hcmtkb3duLXByZXZpZXcubW9kdWxlJztcclxuaW1wb3J0IHsgTnpTYW5pdGl6ZXJQaXBlIH0gZnJvbSAnbmctem9ycm8tYW50ZC9waXBlcyc7XHJcbmltcG9ydCB7IEZtb2RlVFRTIH0gZnJvbSAnLi4vLi4vdm9pY2UvdHRzJztcclxuaW1wb3J0IHsgRHVyYXRpb25TdHJQaXBlIH0gZnJvbSAnLi9kdXJhdGlvbi1zdHIucGlwZSc7XHJcblxyXG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcclxuaW1wb3J0IHt3aWZpT3V0bGluZSxjb3B5T3V0bGluZX0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xyXG5hZGRJY29ucyh7d2lmaU91dGxpbmUsY29weU91dGxpbmV9KVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmbS1jaGF0LW1lc3NhZ2UtY2FyZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXAtbWVzc2FnZS1jYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb21wLW1lc3NhZ2UtY2FyZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6dHJ1ZSxcclxuICBpbXBvcnRzOltcclxuICAgIENvbW1vbk1vZHVsZSxJb25JdGVtLFxyXG4gICAgQ29tcFVzZXJBdmF0YXJDb21wb25lbnQsTWFya2Rvd25QcmV2aWV3TW9kdWxlLFxyXG4gICAgSW9uQXZhdGFyLFxyXG4gICAgQ2hhdENvbnRlbnRQaXBlLFxyXG4gICAgTnpTYW5pdGl6ZXJQaXBlLFxyXG4gICAgRHVyYXRpb25TdHJQaXBlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm1DaGF0TWVzc2FnZUNhcmQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpIGluZGV4Om51bWJlcnx1bmRlZmluZWQgLy8g5b6q546v5YiX6KGo5Lit55qE5bqP5Y+3XHJcbiAgQElucHV0KCkgbWVzc2FnZTpGbW9kZU9iamVjdCAgLy8g5Y+q5pSv5oyBRm1vZGVPYmplY3TnsbvlnotcclxuICBASW5wdXQoKSByb2xlOkZtb2RlT2JqZWN0XHJcbiAgQElucHV0KCkgY2hhdDpGbW9kZUNoYXRcclxuICB1c2VyOkZtb2RlVXNlclxyXG5cclxuICBtZXNzYWdlVGV4dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gIGlzTG9hZGluZ1RleHQgPSB0cnVlO1xyXG5cclxuXHJcbiAgbmdPbkNoYW5nZXMoKXtcclxuICAgIGlmICh0aGlzLmNoYXQ/LmlzVGFsa01vZGUgJiYgdGhpcy5tZXNzYWdlPy5nZXQoJ3JvbGUnKSA9PT0gJ2Fzc2lzdGFudCcgJiYgIXRoaXMubWVzc2FnZT8uZ2V0KCdjb21wbGV0ZScpKSB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nVGV4dCA9IHRydWU7XHJcbiAgICAgIHRoaXMubWVzc2FnZVRleHQkLm5leHQoJ+ato+WcqOWKoOi9veS4rS4uLicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmdUZXh0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubWVzc2FnZVRleHQkLm5leHQoZ2V0TWVzc2FnZUNvbnRlbnRUZXh0KHRoaXMubWVzc2FnZT8uZ2V0KCdjb250ZW50JykpKTtcclxuICAgIH1cclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvcHlTZXJ2OkNsaXBib2FyZFNlcnZpY2VcclxuICAgICl7XHJcbiAgICAgIHRoaXMudXNlciA9IFBhcnNlLlVzZXIuY3VycmVudCgpO1xyXG4gICAgfVxyXG4gIC8vIGlzVm9pY2VQbGF5aW5nOmJvb2xlYW4gPSBmYWxzZTtcclxuICB0dHM6Rm1vZGVUVFN8bnVsbDtcclxuICAvLyDliIfmjaLmkq3mlL7nirbmgIFcclxuICAvLyBNb2RpZnkgdGhlIHRvZ2dsZVZvaWNlUGxheSBtZXRob2Q6XHJcbmFzeW5jIHRvZ2dsZVZvaWNlUGxheSgpIHtcclxuICBjb25zdCBtZXNzYWdlVm9pY2UgPSB0aGlzLm1lc3NhZ2U/LmdldCgndm9pY2UnKTtcclxuICBjb25zdCBtZXNzYWdlUm9sZSA9IHRoaXMubWVzc2FnZT8uZ2V0KCdyb2xlJyk7XHJcbiAgY29uc3QgbWVzc2FnZUNvbnRlbnQgPSB0aGlzLm1lc3NhZ2U/LmdldCgnY29udGVudCcpO1xyXG5cclxuICBpZiAobWVzc2FnZVZvaWNlPy5pZCkge1xyXG4gICAgaWYgKHRoaXMuY2hhdC5Wb2ljZVRUU01hcFttZXNzYWdlVm9pY2U/LmlkXSkge1xyXG4gICAgICB0aGlzLnR0cyA9IHRoaXMuY2hhdC5Wb2ljZVRUU01hcFttZXNzYWdlVm9pY2U/LmlkXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlmICh0aGlzLnR0cz8uaXNQbGF5aW5nKSB7XHJcbiAgICB0aGlzLnR0cz8uc3RvcCgpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgLy8gUmVzZXQgbG9hZGluZyBzdGF0ZSB3aGVuIHN0YXJ0aW5nIG5ldyBwbGF5YmFja1xyXG4gIGlmICh0aGlzLmNoYXQ/LmlzVGFsa01vZGUgJiYgbWVzc2FnZVJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZ1RleHQgPSB0cnVlO1xyXG4gICAgdGhpcy5tZXNzYWdlVGV4dCQubmV4dCgn5q2j5Zyo5Yqg6L295LitLi4uJyk7XHJcbiAgfVxyXG5cclxuICBsZXQgbmVlZFVwZGF0ZSA9IGZhbHNlO1xyXG4gIGxldCB2b2ljZTpGbW9kZU9iamVjdDtcclxuXHJcbiAgaWYgKG1lc3NhZ2VWb2ljZT8uaWQpIHtcclxuICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIkNoYXRWb2ljZVwiKTtcclxuICAgIHF1ZXJ5LmluY2x1ZGUoXCJ2b2ljZUZpbGVcIik7XHJcbiAgICB2b2ljZSA9IGF3YWl0IHF1ZXJ5LmdldChtZXNzYWdlVm9pY2U/LmlkKTtcclxuICB9XHJcblxyXG4gIGlmICghdm9pY2U/LmlkKSB7XHJcbiAgICBsZXQgaXRlbSA9IGF3YWl0IHRoaXMuY2hhdC5nZXRWb2ljZUJ5Q29udGVudFRleHQobWVzc2FnZUNvbnRlbnQpO1xyXG4gICAgdm9pY2UgPSB0aGlzLmNoYXQudm9pY2VNYXBbaXRlbT8uaWRdO1xyXG4gICAgdGhpcy5tZXNzYWdlPy5zZXQoJ3ZvaWNlJywgeyBpZDogdm9pY2U/LmlkLCBkdXJhdGlvbjogdm9pY2U/LmdldChcImR1cmF0aW9uXCIpIH0pO1xyXG4gICAgbmVlZFVwZGF0ZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBpZiAoIW1lc3NhZ2VWb2ljZT8uZHVyYXRpb24pIHtcclxuICAgIGNvbnN0IGN1cnJlbnRWb2ljZSA9IG1lc3NhZ2VWb2ljZSB8fCB7fTtcclxuICAgIHRoaXMubWVzc2FnZT8uc2V0KCd2b2ljZScsIHsgLi4uY3VycmVudFZvaWNlLCBkdXJhdGlvbjogdm9pY2U/LmdldChcImR1cmF0aW9uXCIpIH0pO1xyXG4gICAgbmVlZFVwZGF0ZSA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBpZiAobmVlZFVwZGF0ZSkge1xyXG4gICAgdGhpcy5zYXZlU2Vzc2lvbigpO1xyXG4gIH1cclxuXHJcbiAgYXdhaXQgdGhpcy5jaGF0LnBsYXlDaGF0Vm9pY2Uodm9pY2UsIHtcclxuICAgIG9uU3RhcnQ6IChwbGF5ZWRWb2ljZTpGbW9kZU9iamVjdCkgPT4ge1xyXG4gICAgICAvLyBXaGVuIHZvaWNlIHN0YXJ0cyBwbGF5aW5nLCBzaG93IHRoZSBmdWxsIG1lc3NhZ2VcclxuICAgICAgaWYgKHRoaXMuY2hhdD8uaXNUYWxrTW9kZSAmJiB0aGlzLm1lc3NhZ2U/LmdldCgncm9sZScpID09PSAnYXNzaXN0YW50Jykge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nVGV4dCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlVGV4dCQubmV4dChnZXRNZXNzYWdlQ29udGVudFRleHQodGhpcy5tZXNzYWdlPy5nZXQoJ2NvbnRlbnQnKSkpO1xyXG4gICAgICAgIH0sNjAwKSAvLyDlu7bov5/liLDlvIDlp4vmkq3mlL7lo7Dpn7PlkI7mmL7npLrmloflrZdcclxuICAgICAgfVxyXG4gICAgICBpZiAodm9pY2U/LmlkICE9IHBsYXllZFZvaWNlPy5pZCkge1xyXG4gICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZXJlIHdyb25nIHZvaWNlIGlzIHBsYXlpbmdcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIG9uTG9hZGVkOiAoYXVkaW86IEhUTUxBdWRpb0VsZW1lbnQpID0+IHtcclxuICAgICAgbGV0IHZvaWNlID0gdGhpcy5tZXNzYWdlPy5nZXQoXCJ2b2ljZVwiKTtcclxuICAgICAgaWYgKHZvaWNlKSB7XHJcbiAgICAgICAgdm9pY2UuZHVyYXRpb24gPSBhdWRpbz8uZHVyYXRpb24gKiAxMDAwO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZT8uc2V0KFwidm9pY2VcIiwgdm9pY2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBkYXRlVm9pY2VEdXJhdGlvbihhdWRpby5kdXJhdGlvbiAqIDEwMDApO1xyXG4gICAgfSxcclxuICAgIG9uUmVzdWx0OihyZXN1bHQ6e2R1cmF0aW9uOm51bWJlcn0pPT57XHJcbiAgICAgIGNvbnNvbGUubG9nKFwib25SZXN1bHRcIixyZXN1bHQpXHJcbiAgICAgIGlmKHJlc3VsdD8uZHVyYXRpb24pe1xyXG4gICAgICAgIGxldCB2b2ljZSA9IHRoaXMubWVzc2FnZT8uZ2V0KFwidm9pY2VcIik7XHJcbiAgICAgICAgaWYgKHZvaWNlKSB7XHJcbiAgICAgICAgICB2b2ljZS5kdXJhdGlvbiA9IHJlc3VsdD8uZHVyYXRpb247XHJcbiAgICAgICAgICB0aGlzLm1lc3NhZ2U/LnNldChcInZvaWNlXCIsIHZvaWNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBvblN0b3A6IChwbGF5ZWRWb2ljZTpGbW9kZU9iamVjdCkgPT4ge1xyXG4gICAgICBpZiAodm9pY2U/LmlkICE9IHBsYXllZFZvaWNlPy5pZCkge1xyXG4gICAgICAgIC8vIEhhbmRsZSBzdG9wIGV2ZW50XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgdGhpcy50dHMgPSB0aGlzLmNoYXQuVm9pY2VUVFNNYXBbdm9pY2U/LmlkXTtcclxufVxyXG5cclxuICB1cGRhdGVWb2ljZUR1cmF0aW9uKGR1cmF0aW9uOm51bWJlcil7XHJcbiAgICBjb25zdCBtZXNzYWdlVm9pY2UgPSB0aGlzLm1lc3NhZ2U/LmdldCgndm9pY2UnKTtcclxuICAgIGlmKCFtZXNzYWdlVm9pY2U/LmR1cmF0aW9uKXtcclxuICAgICAgY29uc3QgY3VycmVudFZvaWNlID0gbWVzc2FnZVZvaWNlIHx8IHt9O1xyXG4gICAgICB0aGlzLm1lc3NhZ2U/LnNldCgndm9pY2UnLCB7IC4uLmN1cnJlbnRWb2ljZSwgZHVyYXRpb246IGR1cmF0aW9uIH0pO1xyXG4gICAgICB0aGlzLnNhdmVTZXNzaW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlU2Vzc2lvbigpe1xyXG4gICAgaWYodGhpcy5pbmRleD49MiB8fCB0aGlzLmluZGV4PT09dW5kZWZpbmVkKXsgLy8g5pyq5a6a5LmJ5oiW5bqP5Y+356ys5LiJ6aG55byA5aeL77yM6Ieq5Yqo5L+d5a2YU2Vzc2lvbu+8iDAu57O757ufIDEu6Zeu5YCZIDIu55So5oi377yJXHJcbiAgICAgIHRoaXMuY2hhdD8uc2F2ZUNoYXRTZXNzaW9uKCk7IC8vIOS/neWtmOa2iOaBr+ivremfs1xyXG4gICAgfVxyXG5cclxuICB9XHJcbiAgYXN5bmMgY29weSgpe1xyXG4gICAgdGhpcy5jb3B5U2Vydi5jb3B5VG9DbGlwYm9hcmQoZ2V0TWVzc2FnZUNvbnRlbnRUZXh0KHRoaXMubWVzc2FnZT8uZ2V0KCdjb250ZW50JykpKVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibWVzc2FnZS1jYXJkXCIgW2NsYXNzLnJpZ2h0XT1cIm1lc3NhZ2U/LmdldCgnY29udGVudCcpPy5yb2xlPT0ndXNlcidcIiBbY2xhc3MuY2VudGVyXT1cIm1lc3NhZ2U/LmdldCgnY29udGVudCcpPy5yb2xlPT0nc3lzdGVtJ1wiPlxyXG4gICAgPCEtLSDnlKjmiLflj4rmk43kvZzljLogLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaXRlbS1yb3cgdXNlclwiICpuZ0lmPVwibWVzc2FnZT8uZ2V0KCdjb250ZW50Jyk/LnJvbGUhPSdzeXN0ZW0nXCI+IDwhLS0g57O757uf5raI5oGv5LiN5pi+56S65aS05YOPIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIOWIt+aWsCAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBzbG90PVwic3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInJlZnJlc2gtb3V0bGluZVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDlpI3liLYgLS0+XHJcbiAgICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaXplPVwic21hbGxcIiBmaWxsPVwib3V0bGluZVwiIHNsb3Q9XCJzdGFydFwiIChjbGljayk9XCJjb3B5KClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNvcHktb3V0bGluZVwiPjwvaW9uLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8IS0tIOe8lui+kSAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBzbG90PVwic3RhcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNyZWF0ZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIOabtOaWsOmfs+mikea2iOaBr+WMuuWfnyAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIigobWVzc2FnZT8uZ2V0KCdjb250ZW50Jyk/LnJvbGU9PSdhc3Npc3RhbnQnICYmIGNoYXQ/LnJvbGU/LmdldCgndm9pY2VDb25maWcnKT8udm9pY2UpIHx8IChtZXNzYWdlPy5nZXQoJ2NvbnRlbnQnKT8ucm9sZT09J3VzZXInJiZtZXNzYWdlPy5nZXQoJ3ZvaWNlJykpKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicGxheS12b2ljZVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCIhaXNMb2FkaW5nVGV4dCAmJiB0b2dnbGVWb2ljZVBsYXkoKVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5sb2FkaW5nLXZvaWNlXT1cImNoYXQ/LmlzVGFsa01vZGUgJiYgaXNMb2FkaW5nVGV4dFwiPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZvaWNlLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8IS0tIOWKoOi9veaXtuaYvuekunNwaW5uZXLvvIzlkKbliJnmmL7npLp3aWZp5Zu+5qCHIC0tPlxyXG4gICAgICAgICAgICA8aW9uLXNwaW5uZXIgKm5nSWY9XCJjaGF0Py5pc1RhbGtNb2RlICYmIGlzTG9hZGluZ1RleHRcIiBuYW1lPVwibGluZXNcIiBjbGFzcz1cImxvYWRpbmctc3Bpbm5lclwiPjwvaW9uLXNwaW5uZXI+XHJcbiAgICAgICAgICAgIDxpb24taWNvbiAqbmdJZj1cIiEoY2hhdD8uaXNUYWxrTW9kZSAmJiBpc0xvYWRpbmdUZXh0KVwiIG5hbWU9XCJ3aWZpLW91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCJtZXNzYWdlPy5nZXQoJ2NvbnRlbnQnKT8ucm9sZT09J3VzZXInPydyb3RhdGUoLTkwZGVnKSc6J3JvdGF0ZSg5MGRlZyknXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXVkaW8taWNvblwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MucGxheS12b2ljZS1wbGF5aW5nXT1cInR0cz8uaXNQbGF5aW5nXCI+PC9pb24taWNvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2b2ljZS1pbmZvXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibWVzc2FnZT8uZ2V0KCd2b2ljZScpPy5kdXJhdGlvbiAmJiAhaXNMb2FkaW5nVGV4dFwiPlxyXG4gICAgICAgICAgICAgICAge3soKG1lc3NhZ2U/LmdldCgndm9pY2UnKT8uZHVyYXRpb258fDApLzEwMDApIHwgZHVyYXRpb25TdHJ9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSDlpLTlg4/ljLrln58gLS0+XHJcbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdmF0YXJcIiAqbmdJZj1cIm1lc3NhZ2U/LmdldCgnY29udGVudCcpPy5yb2xlIT0ndXNlcidcIiBbc3JjXT1cIihjaGF0Py5yb2xlPy5nZXQoJ2F2YXRhcicpIHx8IGNoYXQ/LnJvbGU/LmdldCgndGh1bWInKSB8fCAnaHR0cHM6Ly9maWxlLWNsb3VkLmZtb2RlLmNuL0U0S3BHdlRFdG8vMjAyMzA5MzAvbDQxM2U2MDkwNzMxODU0LnBuZycpKyc/JysneC1pbWFnZS1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxtX2ZpeGVkLHdfMTAwJysnJmltYWdlVmlldzIvMS93LzEwMC9oLzEwMCdcIiA+XHJcbiAgICAgICAgICAgIDxhcHAtY29tcC11c2VyLWF2YXRhciBbdXNlcl09XCJ1c2VyXCIgKm5nSWY9XCJtZXNzYWdlPy5nZXQoJ2NvbnRlbnQnKT8ucm9sZT09J3VzZXInXCI+PC9hcHAtY29tcC11c2VyLWF2YXRhcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgIDwhLS0g6ZmE5Lu277ya5Zu+54mHIC0tPlxyXG4gICAgIDxkaXYgY2xhc3M9XCJpdGVtLXJvdyBpbWFnZXNcIiAqbmdJZj1cIm1lc3NhZ2U/LmdldCgnY29udGVudCcpIHwgY2hhdENvbnRlbnQ6J2ltYWdlX3VybCdcIj5cclxuICAgICAgICA8aW1nIFtzcmNdPVwibWVzc2FnZT8uZ2V0KCdjb250ZW50JykgfCBjaGF0Q29udGVudDonaW1hZ2VfdXJsJ1wiIGFsdD1cIlwiPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIOiBiuWkqeawlOazoSAtLT5cclxuICAgIDwhLS0gUmVwbGFjZSB0aGUgYnViYmxlIHNlY3Rpb24gd2l0aCB0aGlzOiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJpdGVtLXJvdyBidWJibGVcIiBbc3R5bGUuZm9udFNpemVdPVwicm9sZT8uZ2V0KCd1aUNvbmZpZycpPy5tc2c/LmJ1YmJsZT8uZm9udFNpemUgfHwgJzAuOHJlbSdcIj5cclxuICAgICAgICA8IS0tIOivtOivneaooeW8j++8muWxleekuuWKoOi9veeKtuaAgSBTaG93IGxvYWRpbmcgc3RhdGUgZm9yIHRhbGsgbW9kZSB3aGVuIG1lc3NhZ2UgaXMgbm90IGNvbXBsZXRlIC0tPlxyXG5cclxuICAgICAgICA8IS0tIFNob3cgbm9ybWFsIGNvbnRlbnQgZm9yIG5vbi10YWxrIG1vZGUgb3Igd2hlbiBsb2FkaW5nIGlzIGNvbXBsZXRlIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2hhdD8uaXNUYWxrTW9kZSB8fCBtZXNzYWdlPy5nZXQoJ2NvbnRlbnQnKT8ucm9sZSAhPT0gJ2Fzc2lzdGFudCcgfHwgIWlzTG9hZGluZ1RleHRcIj5cclxuICAgICAgICAgICAgPGZtLW1hcmtkb3duLXByZXZpZXcgKm5nSWY9XCIhbWVzc2FnZT8uZ2V0KCdjb21wbGV0ZScpXCIgY2xhc3M9XCJjb250ZW50LXN0eWxlXCJcclxuICAgICAgICAgICAgICAgIFtjb250ZW50XT1cIm1lc3NhZ2U/LmdldCgnY29udGVudCcpIHwgY2hhdENvbnRlbnRcIiBbcmVuZGVyXT1cImZhbHNlXCI+PC9mbS1tYXJrZG93bi1wcmV2aWV3PlxyXG4gICAgICAgICAgICA8Zm0tbWFya2Rvd24tcHJldmlldyAqbmdJZj1cIm1lc3NhZ2U/LmdldCgnY29tcGxldGUnKVwiXHJcbiAgICAgICAgICAgICAgICBbY29udGVudF09XCJtZXNzYWdlPy5nZXQoJ2NvbnRlbnQnKSB8IGNoYXRDb250ZW50XCI+PC9mbS1tYXJrZG93bi1wcmV2aWV3PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIOaXtumXtOaYvuekuiAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJpdGVtLXJvdyBsb2FkaW5nXCIgKm5nSWY9XCJtZXNzYWdlPy5nZXQoJ2NvbnRlbnQnKT8ucm9sZSE9J3N5c3RlbScgJiYgIW1lc3NhZ2U/LmdldCgnY29tcGxldGUnKVwiPlxyXG4gICAgICAgIOato+WcqOi+k+WFpTxpb24tc3Bpbm5lciBuYW1lPVwiZG90c1wiPjwvaW9uLXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiaXRlbS1yb3cgY3JlYXRlZFwiICpuZ0lmPVwibWVzc2FnZT8uZ2V0KCdjcmVhdGVkQXQnKVwiPlxyXG4gICAgICAgIDxzcGFuPnt7bWVzc2FnZT8uZ2V0KCdjcmVhdGVkQXQnKSB8IGRhdGU6XCJkZC9NTS95eSBISDptbVwifX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
@@ -12,17 +12,15 @@ import * as i1 from "@angular/router";
12
12
  import * as i2 from "../../../nova-cloud";
13
13
  import * as i3 from "@ionic/angular";
14
14
  import * as i4 from "../../../platform";
15
- import * as i5 from "../../../core/storage";
16
15
  const Parse = FmodeParse.with("nova");
17
16
  export class ChatService {
18
- constructor(router, ncloud, platform, alertCtrl, navCtrl, cross, storage) {
17
+ constructor(router, ncloud, platform, alertCtrl, navCtrl, cross) {
19
18
  this.router = router;
20
19
  this.ncloud = ncloud;
21
20
  this.platform = platform;
22
21
  this.alertCtrl = alertCtrl;
23
22
  this.navCtrl = navCtrl;
24
23
  this.cross = cross;
25
- this.storage = storage;
26
24
  // 已加载聊天信息临时存储
27
25
  this.chatMap = {};
28
26
  this.isCapacitor = false;
@@ -31,6 +29,10 @@ export class ChatService {
31
29
  "mobile": "移动端",
32
30
  };
33
31
  this.isCapacitor = this.platform.is("capacitor");
32
+ this.initStorage();
33
+ }
34
+ async initStorage() {
35
+ this.storage = await NovaStorage.withCid(localStorage.getItem("company"));
34
36
  }
35
37
  async doButtonAction(button) {
36
38
  let type = this.cross.navMenuType;
@@ -167,7 +169,7 @@ export class ChatService {
167
169
  type: "phone"
168
170
  }]);
169
171
  }
170
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatService, deps: [{ token: i1.Router }, { token: i2.NovaCloudService }, { token: i3.Platform }, { token: i3.AlertController }, { token: i3.NavController }, { token: i4.CrossService }, { token: i5.NovaStorage }], target: i0.ɵɵFactoryTarget.Injectable }); }
172
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatService, deps: [{ token: i1.Router }, { token: i2.NovaCloudService }, { token: i3.Platform }, { token: i3.AlertController }, { token: i3.NavController }, { token: i4.CrossService }], target: i0.ɵɵFactoryTarget.Injectable }); }
171
173
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatService, providedIn: 'root' }); }
172
174
  }
173
175
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ChatService, decorators: [{
@@ -175,5 +177,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
175
177
  args: [{
176
178
  providedIn: 'root'
177
179
  }]
178
- }], ctorParameters: () => [{ type: i1.Router }, { type: i2.NovaCloudService }, { type: i3.Platform }, { type: i3.AlertController }, { type: i3.NavController }, { type: i4.CrossService }, { type: i5.NovaStorage }] });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWNoYXQvY2hhdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxVQUFVLEVBQWtDLE1BQU0scUJBQXFCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFKNEIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQVN0SCxNQUFNLE9BQU8sV0FBVztJQVF0QixZQUNVLE1BQWEsRUFDYixNQUF1QixFQUN2QixRQUFpQixFQUNqQixTQUF5QixFQUN6QixPQUFxQixFQUNyQixLQUFrQixFQUNsQixPQUFtQjtRQU5uQixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2IsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFDdkIsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUN6QixZQUFPLEdBQVAsT0FBTyxDQUFjO1FBQ3JCLFVBQUssR0FBTCxLQUFLLENBQWE7UUFDbEIsWUFBTyxH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LFdBQVcsRUFBQyxDQUFDO1lBQzdCLElBQUksS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7Z0JBQ3RDLE1BQU0sRUFBQyxJQUFJO2dCQUNYLFNBQVMsRUFBQyxnQkFBZ0I7Z0JBQzFCLE9BQU8sRUFBQyxlQUFlO2dCQUN2QixPQUFPLEVBQUM7b0JBQ047d0JBQ0UsSUFBSSxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsS0FBSztxQkFDckI7aUJBQ0Y7YUFDRixDQUFDLENBQUE7WUFDRixLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEIsT0FBTTtRQUVSLENBQUM7UUFDRCxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFDO2dCQUM5QyxJQUFJLEVBQUMsT0FBTzthQUNiLENBQUMsQ0FBQyxDQUFBO0lBQ0wsQ0FBQzsrR0F0S1UsV0FBVzttSEFBWCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbi8vIGltcG9ydCB7IE1BU0tfTElTVCB9IGZyb20gJy4vbWFzay1saXN0JztcclxuaW1wb3J0IHsgRm1vZGVDaGF0IH0gZnJvbSAnLi9jaGF0LWNsYXNzJztcclxuaW1wb3J0IHtGbW9kZVBhcnNlLEZtb2RlT2JqZWN0LEZtb2RlUXVlcnksRm1vZGVVc2VyfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9wYXJzZVwiO2NvbnN0IFBhcnNlID0gRm1vZGVQYXJzZS53aXRoKFwibm92YVwiKTtcclxuaW1wb3J0IHsgTm92YUNsb3VkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL25vdmEtY2xvdWQnO1xyXG5pbXBvcnQgeyBBbGVydENvbnRyb2xsZXIsIE5hdkNvbnRyb2xsZXIsIFBsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcbmltcG9ydCB7IENyb3NzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3BsYXRmb3JtJztcclxuaW1wb3J0IHsgTm92YVN0b3JhZ2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3N0b3JhZ2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hhdFNlcnZpY2Uge1xyXG5cclxuICAvLyDlt7LliqDovb3ogYrlpKnkv6Hmga/kuLTml7blrZjlgqhcclxuICBjaGF0TWFwOntcclxuICAgIFtrZXk6c3RyaW5nXTpGbW9kZUNoYXRcclxuICB9ID0ge31cclxuICBpc0NhcGFjaXRvcjpib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6Um91dGVyLFxyXG4gICAgcHJpdmF0ZSBuY2xvdWQ6Tm92YUNsb3VkU2VydmljZSxcclxuICAgIHByaXZhdGUgcGxhdGZvcm06UGxhdGZvcm0sXHJcbiAgICBwcml2YXRlIGFsZXJ0Q3RybDpBbGVydENvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIG5hdkN0cmw6TmF2Q29udHJvbGxlcixcclxuICAgIHByaXZhdGUgY3Jvc3M6Q3Jvc3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlOk5vdmFTdG9yYWdlXHJcbiAgKSB7IFxyXG4gICAgdGhpcy5pc0NhcGFjaXRvciA9IHRoaXMucGxhdGZvcm0uaXMoXCJjYXBhY2l0b3JcIilcclxuXHJcbiAgfVxyXG5cclxuICBcclxuICBwbGF0Zm9ybU1hcCA9IHtcclxuICAgIFwicGNcIjpcIueUteiEkeerr1wiLFxyXG4gICAgXCJtb2JpbGVcIjpcIuenu+WKqOerr1wiLFxyXG4gIH1cclxuICBhc3luYyBkb0J1dHRvbkFjdGlvbihidXR0b24pe1xyXG4gICAgbGV0IHR5cGUgPSB0aGlzLmNyb3NzLm5hdk1lbnVUeXBlXHJcbiAgICBsZXQgcGxhdGZvcm1zID0gYnV0dG9uPy5wbGF0Zm9ybT8ubWFwKGl0ZW09PnRoaXMucGxhdGZvcm1NYXBbaXRlbV0pLmpvaW4oXCLjgIFcIilcclxuICAgIGlmKGJ1dHRvbj8ucGxhdGZvcm0/Lmxlbmd0aD4wICYmIGJ1dHRvbj8ucGxhdGZvcm0/LmluZGV4T2YodHlwZSk9PS0xKXtcclxuICAgICAgbGV0IGFsZXJ0ID0gYXdhaXQgdGhpcy5hbGVydEN0cmwuY3JlYXRlKHtcclxuICAgICAgICBoZWFkZXI6XCLms6jmhI9cIixcclxuICAgICAgICBzdWJIZWFkZXI6XCLnu4jnq6/kuI3nrKZcIixcclxuICAgICAgICBtZXNzYWdlOmDor7fmgqjkvb/nlKgke3BsYXRmb3Jtc33lvIDlkK/mnKzlip/og73jgIJgLFxyXG4gICAgICAgIGJ1dHRvbnM6W1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICByb2xlOlwib2tcIix0ZXh0Olwi55+l6YGT5LqGXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF1cclxuICAgICAgfSlcclxuICAgICAgYWxlcnQucHJlc2VudCgpO1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmKGJ1dHRvbj8ucGF0aCl7XHJcbiAgICAgIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoYnV0dG9uPy5wYXRoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8g5Yid5aeL5YyW5pyq5Yqg6L295Lya6K+dXHJcbiAgYXN5bmMgaW5pdENoYXRNYXAoc2Vzc2lvbklkKXtcclxuICAgIGlmKHRoaXMuY2hhdE1hcFtzZXNzaW9uSWRdKSByZXR1cm4gdGhpcy5jaGF0TWFwW3Nlc3Npb25JZF1cclxuICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIkNoYXRTZXNzaW9uXCIpXHJcbiAgICBxdWVyeS5pbmNsdWRlKFwidXNlclwiLFwicm9sZVwiLFwicm9sZS5tb2RlbFwiLFwic3RvcnlcIixcInN0b3J5LnBlcnNvblwiLCdwZXJzb24nLCdwZXJzb24udXNlclZlcmlmeScpXHJcbiAgICBsZXQgc2Vzc2lvbiA9IGF3YWl0IHF1ZXJ5LmdldChzZXNzaW9uSWQpXHJcbiAgICBsZXQgY2hhdCA9IG5ldyBGbW9kZUNoYXQoc2Vzc2lvbj8uaWQsc2Vzc2lvbj8uZ2V0KFwicm9sZVwiKSxzZXNzaW9uLHRoaXMsdGhpcy5uYXZDdHJsLHRoaXMubmNsb3VkLHRoaXMuc3RvcmFnZSk7XHJcbiAgICB0aGlzLmNoYXRNYXBbc2Vzc2lvbklkXSA9IGNoYXQ7XHJcbiAgICByZXR1cm4gdGhpcy5jaGF0TWFwW3Nlc3Npb25JZF1cclxuICB9XHJcbiAgLy8g6I635b6X5Y6G5Y+y5Lya6K+d56qX5Y+jXHJcbiAgY2hhdExpc3Q6QXJyYXk8YW55PlxyXG4gIGFzeW5jIGdldENoYXRTZXNzaW9uKHF1ZXJ5UGFyYW1zPzphbnkpe1xyXG4gICAgaWYoIVBhcnNlPy5Vc2VyPy5jdXJyZW50KCk/LmlkKSByZXR1cm4gLy8g55So5oi35b+F6aG755m75b2VXHJcbiAgICBsZXQgbGltaXQgPSAzMCAvLyDmma7pgJrnlKjmiLfpmZDmn6XnnIsxMOadoeWOhuWPsuiusOW9lVxyXG4gICAgbGV0IHF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFwiQ2hhdFNlc3Npb25cIik7XHJcbiAgICBpZihxdWVyeVBhcmFtcyl7XHJcbiAgICAgIHF1ZXJ5ID0gUGFyc2UuUXVlcnkuZnJvbUpTT04oXCJDaGF0U2Vzc2lvblwiLHF1ZXJ5UGFyYW1zKTtcclxuICAgIH1cclxuICAgIHF1ZXJ5LmluY2x1ZGUoXCJ1c2VyXCIsXCJyb2xlXCIsXCJyb2xlLm1vZGVsXCIsXCJzdG9yeVwiLFwic3RvcnkucGVyc29uXCIsXCJzdG9yeS5wZXJzb24udXNlclZlcmlmeVwiLFwicGVyc29uXCIsXCJwZXJzb24udXNlclZlcmlmeVwiKTtcclxuICAgIHF1ZXJ5LmFkZERlc2NlbmRpbmcoXCJ1cGRhdGVkQXRcIilcclxuICAgIHF1ZXJ5LmVxdWFsVG8oXCJ1c2VyXCIsUGFyc2UuVXNlci5jdXJyZW50KCkudG9Qb2ludGVyKCkpXHJcbiAgICBxdWVyeS5ub3RFcXVhbFRvKCdpc0RlbGV0ZWQnLCB0cnVlKTtcclxuICAgIHF1ZXJ5LmxpbWl0KGxpbWl0KVxyXG4gICAgbGV0IGxpc3QgPSBhd2FpdCBxdWVyeS5maW5kKCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhsaXN0KVxyXG4gICAgdGhpcy5jaGF0TGlzdCA9IGxpc3QubWFwKGl0ZW09PntcclxuICAgICAgLy8g5re75Yqg57yT5a2YXHJcbiAgICAgIHRoaXMuY2hhdE1hcFtpdGVtPy5pZF0gPSBuZXcgRm1vZGVDaGF0KGl0ZW0/LmlkLGl0ZW0/LmdldChcInJvbGVcIiksaXRlbSx0aGlzLHRoaXMubmF2Q3RybCx0aGlzLm5jbG91ZCx0aGlzLnN0b3JhZ2UpOyBcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzZXNzaW9uOml0ZW0sXHJcbiAgICAgICAgc2lkOml0ZW0/LmlkLFxyXG4gICAgICAgIGlzSGlkZGVuOmZhbHNlLFxyXG4gICAgICAgIHJpZDppdGVtPy5nZXQoXCJyb2xlXCIpPy5pZCxcclxuICAgICAgICBuYW1lOml0ZW0/LmdldChcInJvbGVcIik/LmdldChcIm5hbWVcIiksXHJcbiAgICAgICAgdGh1bWI6aXRlbT8uZ2V0KFwicm9sZVwiKT8uZ2V0KFwidGh1bWJcIiksXHJcbiAgICAgICAgdGl0bGU6aXRlbT8uZ2V0KFwidGl0bGVcIikgfHwgaXRlbT8uZ2V0KFwicm9sZVwiKT8uZ2V0KFwibmFtZVwiKSxcclxuICAgICAgICBtZXNzYWdlOml0ZW0/LmdldChcIm1lc3NhZ2VMaXN0XCIpPy5baXRlbT8uZ2V0KFwibWVzc2FnZUxpc3RcIik/Lmxlbmd0aC0xXT8uY29udGVudD8uc2xpY2UoMCwyMCksXHJcbiAgICAgICAgbGF0ZXN0Oml0ZW0/LmNyZWF0ZWRBdFxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBhc3luYyBnZXRDaGF0U2Vzc2lvbkRpc3RpbmN0KCl7XHJcbiAgICBsZXQgbGltaXQgPSAxMCAvLyDmma7pgJrnlKjmiLfpmZDmn6XnnIsxMOadoeWOhuWPsuiusOW9lVxyXG4gICAgbGV0IHNxbCA9IGBTRUxFQ1QgdDEuXCJvYmplY3RJZFwiIGFzIHNpZCAsIFwiQXZhdGFyUm9sZVwiLlwib2JqZWN0SWRcIiBhcyByaWQsICogRlJPTSAoXHJcbiAgICAgIFNFTEVDVCAqLFJPV19OVU1CRVIoKSBPVkVSIChQQVJUSVRJT04gQlkgXCJ1c2VyXCIsIFwicm9sZVwiIE9SREVSIEJZIFwiY3JlYXRlZEF0XCIgREVTQykgQVMgcm5cclxuICAgICAgIEZST00gXCJDaGF0U2Vzc2lvblwiIFdIRVJFIFwidXNlclwiPSQxXHJcbiAgICAgICkgYXMgdDFcclxuICAgICAgTEVGVCBKT0lOIFwiQXZhdGFyUm9sZVwiIE9OIFwiQXZhdGFyUm9sZVwiLlwib2JqZWN0SWRcIiA9IHQxLlwicm9sZVwiXHJcbiAgICBXSEVSRSB0MS5ybj0xXHJcbiAgICBMSU1JVCAkMlxyXG4gICAgO2BcclxuICAgIGxldCByZXN1bHQ6YW55ID0gYXdhaXQgdGhpcy5uY2xvdWQubm92YXFsKHNxbCxbUGFyc2UuVXNlci5jdXJyZW50KCk/LmlkLGxpbWl0XSlcclxuICAgIGxldCBjaGF0TGlzdCA9IHJlc3VsdD8ubWFwKGl0ZW09PntcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBzaWQ6aXRlbT8uc2lkLFxyXG4gICAgICAgIHJpZDppdGVtPy5yaWQsXHJcbiAgICAgICAgbmFtZTppdGVtPy5uYW1lLFxyXG4gICAgICAgIG1lc3NhZ2U6aXRlbT8ubWVzc2FnZUxpc3Q/LltpdGVtPy5tZXNzYWdlTGlzdD8ubGVuZ3RoLTFdPy5jb250ZW50Py5zbGljZSgwLDIwKSxcclxuICAgICAgICBsYXRlc3Q6aXRlbT8uY3JlYXRlZEF0XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGlzLmNoYXRMaXN0ID0gY2hhdExpc3RcclxuICAgIHJldHVybiB0aGlzLmNoYXRMaXN0XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDph43lu7rmlrDlr7nor53nqpflj6NcclxuICAgKi9cclxuICBjcmVhdGVDaGF0UGFuZWwocm9sZT86YW55LGNoYXQ/OmFueSl7XHJcbiAgICBsZXQgc2Vzc2lvbklkID0gY2hhdD8uaWR8fFwibmV3XCJcclxuICAgIGNoYXQgPSBuZXcgRm1vZGVDaGF0KHNlc3Npb25JZCxyb2xlLGNoYXQsdGhpcyx0aGlzLm5hdkN0cmwsdGhpcy5uY2xvdWQsdGhpcy5zdG9yYWdlKTtcclxuICAgIHRoaXMuY2hhdE1hcFtzZXNzaW9uSWRdID0gY2hhdDsgLy8gbmV3IOeql+WPo+WmguaenOayoeaciea2iOaBr+i9rOaNouaIkOW4pklE55qE77yM5q+P5qyh5bCx5Lya5riF56m6XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvY2hhdC9wcm8vY2hhdC9cIitzZXNzaW9uSWRdKVxyXG4gIH1cclxuICBhc3luYyBjcmVhdGVOZXdSb2xlQ2hhdChyb2xlSWQpOlByb21pc2U8Rm1vZGVDaGF0PntcclxuICAgIGNvbnNvbGUubG9nKFwiY3JlYXRlTmV3Um9sZUNoYXRcIixyb2xlSWQpXHJcbiAgICBsZXQgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJBdmF0YXJSb2xlXCIpXHJcbiAgICBxdWVyeS5pbmNsdWRlKFwibW9kZWxcIilcclxuICAgIGxldCByb2xlID0gYXdhaXQgcXVlcnkuZ2V0KHJvbGVJZCk7XHJcbiAgICBjb25zb2xlLmxvZyhcInJvbGVcIixyb2xlKVxyXG4gICAgbGV0IGNoYXQgPSBuZXcgRm1vZGVDaGF0KFwibmV3XCIscm9sZSxudWxsLHRoaXMsdGhpcy5uYXZDdHJsLHRoaXMubmNsb3VkLHRoaXMuc3RvcmFnZSk7XHJcbiAgICByZXR1cm4gY2hhdFxyXG4gIH1cclxuICBhc3luYyByZXN0b3JlQ2hhdFBhbmVsKG9wdGlvbnM/OntcclxuICAgIHJpZDpzdHJpbmcsXHJcbiAgICBzaWQ6c3RyaW5nLFxyXG4gIH0pe1xyXG4gICAgbGV0IHF1ZXJ5ciA9IG5ldyBQYXJzZS5RdWVyeShcIkF2YXRhclJvbGVcIilcclxuICAgIGxldCBxdWVyeXMgPSBuZXcgUGFyc2UuUXVlcnkoXCJDaGF0U2Vzc2lvblwiKVxyXG4gICAgbGV0IHJvbGUgPSBhd2FpdCBxdWVyeXIuZ2V0KG9wdGlvbnM/LnJpZCk7XHJcbiAgICBsZXQgc2Vzc2lvbiA9IGF3YWl0IHF1ZXJ5cy5nZXQob3B0aW9ucz8uc2lkKTtcclxuICAgIC8vIGxldCBzZXNzaW9uSWQgPSBcIm5ld1wiXHJcbiAgICBsZXQgY2hhdCA9IG5ldyBGbW9kZUNoYXQob3B0aW9ucz8uc2lkLHJvbGUsc2Vzc2lvbix0aGlzLHRoaXMubmF2Q3RybCx0aGlzLm5jbG91ZCx0aGlzLnN0b3JhZ2UpO1xyXG4gICAgdGhpcy5jaGF0TWFwW29wdGlvbnM/LnNpZF0gPSBjaGF0O1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL2NoYXQvcHJvL2NoYXQvXCIrb3B0aW9ucz8uc2lkXSlcclxuXHJcbiAgfVxyXG4gIGFzeW5jIGNhbGxSb2xlKHJvbGUpe1xyXG4gICAgLy8g5pqC5pe25byA5ZCv5YWo56uv6L+b5YWl6K+t6Z+z5a+56K+dXHJcbiAgICBpZihmYWxzZSAmJiAhdGhpcy5pc0NhcGFjaXRvcil7XHJcbiAgICAgIGxldCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDdHJsLmNyZWF0ZSh7XHJcbiAgICAgICAgaGVhZGVyOlwi5rOo5oSPXCIsXHJcbiAgICAgICAgc3ViSGVhZGVyOlwi6K+t6Z+z5a+56K+d77yM6ZmQ5omL5py6QVBQ56uv5Y+v55SoXCIsXHJcbiAgICAgICAgbWVzc2FnZTpcIuivt+iBlOezu+WuouacjeiOt+WPluWGhea1i+i1hOagvOWTpu+8gVwiLFxyXG4gICAgICAgIGJ1dHRvbnM6W1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICByb2xlOlwib2tcIix0ZXh0Olwi55+l6YGT5LqGXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIF1cclxuICAgICAgfSlcclxuICAgICAgYWxlcnQucHJlc2VudCgpO1xyXG4gICAgICByZXR1cm5cclxuXHJcbiAgICB9XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2RhcmsnKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgL2F2YXRhci9yb2xlLyR7cm9sZS5pZH1gLHtcclxuICAgICAgdHlwZTpcInBob25lXCJcclxuICAgIH1dKVxyXG4gIH1cclxufVxyXG4iXX0=
180
+ }], ctorParameters: () => [{ type: i1.Router }, { type: i2.NovaCloudService }, { type: i3.Platform }, { type: i3.AlertController }, { type: i3.NavController }, { type: i4.CrossService }] });
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9haWdjL3NlcnZpY2UtZm1haS9zZXJ2aWNlLWNoYXQvY2hhdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxVQUFVLEVBQWtDLE1BQU0scUJBQXFCLENBQUM7QUFDaEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7OztBQUo0QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBU3RILE1BQU0sT0FBTyxXQUFXO0lBU3RCLFlBQ1UsTUFBYSxFQUNiLE1BQXVCLEVBQ3ZCLFFBQWlCLEVBQ2pCLFNBQXlCLEVBQ3pCLE9BQXFCLEVBQ3JCLEtBQWtCO1FBTGxCLFdBQU0sR0FBTixNQUFNLENBQU87UUFDYixXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLGNBQVMsR0FBVCxTQUFTLENBQWdCO1FBQ3pCLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFDckIsVUFBSyxHQUFMLEtBQUssQ0FBYTtRQWI1QixjQUFjO1FBQ2QsWUFBTyxHQUVI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TyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFFeEQsQ0FBQztJQUNELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSTtRQUNqQixlQUFlO1FBQ2YsSUFBRyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFDLENBQUM7WUFDN0IsSUFBSSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztnQkFDdEMsTUFBTSxFQUFDLElBQUk7Z0JBQ1gsU0FBUyxFQUFDLGdCQUFnQjtnQkFDMUIsT0FBTyxFQUFDLGVBQWU7Z0JBQ3ZCLE9BQU8sRUFBQztvQkFDTjt3QkFDRSxJQUFJLEVBQUMsSUFBSSxFQUFDLElBQUksRUFBQyxLQUFLO3FCQUNyQjtpQkFDRjthQUNGLENBQUMsQ0FBQTtZQUNGLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQixPQUFNO1FBRVIsQ0FBQztRQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUM7Z0JBQzlDLElBQUksRUFBQyxPQUFPO2FBQ2IsQ0FBQyxDQUFDLENBQUE7SUFDTCxDQUFDOytHQXhLVSxXQUFXO21IQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuLy8gaW1wb3J0IHsgTUFTS19MSVNUIH0gZnJvbSAnLi9tYXNrLWxpc3QnO1xyXG5pbXBvcnQgeyBGbW9kZUNoYXQgfSBmcm9tICcuL2NoYXQtY2xhc3MnO1xyXG5pbXBvcnQge0Ztb2RlUGFyc2UsRm1vZGVPYmplY3QsRm1vZGVRdWVyeSxGbW9kZVVzZXJ9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3BhcnNlXCI7Y29uc3QgUGFyc2UgPSBGbW9kZVBhcnNlLndpdGgoXCJub3ZhXCIpO1xyXG5pbXBvcnQgeyBOb3ZhQ2xvdWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vbm92YS1jbG91ZCc7XHJcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgTmF2Q29udHJvbGxlciwgUGxhdGZvcm0sIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcclxuaW1wb3J0IHsgQ3Jvc3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcGxhdGZvcm0nO1xyXG5pbXBvcnQgeyBOb3ZhU3RvcmFnZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc3RvcmFnZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGF0U2VydmljZSB7XHJcblxyXG4gIC8vIOW3suWKoOi9veiBiuWkqeS/oeaBr+S4tOaXtuWtmOWCqFxyXG4gIGNoYXRNYXA6e1xyXG4gICAgW2tleTpzdHJpbmddOkZtb2RlQ2hhdFxyXG4gIH0gPSB7fVxyXG4gIGlzQ2FwYWNpdG9yOmJvb2xlYW4gPSBmYWxzZTtcclxuICBzdG9yYWdlOk5vdmFTdG9yYWdlXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6Um91dGVyLFxyXG4gICAgcHJpdmF0ZSBuY2xvdWQ6Tm92YUNsb3VkU2VydmljZSxcclxuICAgIHByaXZhdGUgcGxhdGZvcm06UGxhdGZvcm0sXHJcbiAgICBwcml2YXRlIGFsZXJ0Q3RybDpBbGVydENvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIG5hdkN0cmw6TmF2Q29udHJvbGxlcixcclxuICAgIHByaXZhdGUgY3Jvc3M6Q3Jvc3NTZXJ2aWNlLFxyXG4gICkgeyBcclxuICAgIHRoaXMuaXNDYXBhY2l0b3IgPSB0aGlzLnBsYXRmb3JtLmlzKFwiY2FwYWNpdG9yXCIpXHJcbiAgICB0aGlzLmluaXRTdG9yYWdlKClcclxuICB9XHJcbiAgYXN5bmMgaW5pdFN0b3JhZ2UoKXtcclxuICAgIHRoaXMuc3RvcmFnZSA9IGF3YWl0IE5vdmFTdG9yYWdlLndpdGhDaWQobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjb21wYW55XCIpKTtcclxuICB9XHJcblxyXG4gIHBsYXRmb3JtTWFwID0ge1xyXG4gICAgXCJwY1wiOlwi55S16ISR56uvXCIsXHJcbiAgICBcIm1vYmlsZVwiOlwi56e75Yqo56uvXCIsXHJcbiAgfVxyXG4gIGFzeW5jIGRvQnV0dG9uQWN0aW9uKGJ1dHRvbil7XHJcbiAgICBsZXQgdHlwZSA9IHRoaXMuY3Jvc3MubmF2TWVudVR5cGVcclxuICAgIGxldCBwbGF0Zm9ybXMgPSBidXR0b24/LnBsYXRmb3JtPy5tYXAoaXRlbT0+dGhpcy5wbGF0Zm9ybU1hcFtpdGVtXSkuam9pbihcIuOAgVwiKVxyXG4gICAgaWYoYnV0dG9uPy5wbGF0Zm9ybT8ubGVuZ3RoPjAgJiYgYnV0dG9uPy5wbGF0Zm9ybT8uaW5kZXhPZih0eXBlKT09LTEpe1xyXG4gICAgICBsZXQgYWxlcnQgPSBhd2FpdCB0aGlzLmFsZXJ0Q3RybC5jcmVhdGUoe1xyXG4gICAgICAgIGhlYWRlcjpcIuazqOaEj1wiLFxyXG4gICAgICAgIHN1YkhlYWRlcjpcIue7iOerr+S4jeesplwiLFxyXG4gICAgICAgIG1lc3NhZ2U6YOivt+aCqOS9v+eUqCR7cGxhdGZvcm1zfeW8gOWQr+acrOWKn+iDveOAgmAsXHJcbiAgICAgICAgYnV0dG9uczpbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHJvbGU6XCJva1wiLHRleHQ6XCLnn6XpgZPkuoZcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXVxyXG4gICAgICB9KVxyXG4gICAgICBhbGVydC5wcmVzZW50KCk7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgaWYoYnV0dG9uPy5wYXRoKXtcclxuICAgICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdChidXR0b24/LnBhdGgpO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyDliJ3lp4vljJbmnKrliqDovb3kvJror51cclxuICBhc3luYyBpbml0Q2hhdE1hcChzZXNzaW9uSWQpe1xyXG4gICAgaWYodGhpcy5jaGF0TWFwW3Nlc3Npb25JZF0pIHJldHVybiB0aGlzLmNoYXRNYXBbc2Vzc2lvbklkXVxyXG4gICAgbGV0IHF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFwiQ2hhdFNlc3Npb25cIilcclxuICAgIHF1ZXJ5LmluY2x1ZGUoXCJ1c2VyXCIsXCJyb2xlXCIsXCJyb2xlLm1vZGVsXCIsXCJzdG9yeVwiLFwic3RvcnkucGVyc29uXCIsJ3BlcnNvbicsJ3BlcnNvbi51c2VyVmVyaWZ5JylcclxuICAgIGxldCBzZXNzaW9uID0gYXdhaXQgcXVlcnkuZ2V0KHNlc3Npb25JZClcclxuICAgIGxldCBjaGF0ID0gbmV3IEZtb2RlQ2hhdChzZXNzaW9uPy5pZCxzZXNzaW9uPy5nZXQoXCJyb2xlXCIpLHNlc3Npb24sdGhpcyx0aGlzLm5hdkN0cmwsdGhpcy5uY2xvdWQsdGhpcy5zdG9yYWdlKTtcclxuICAgIHRoaXMuY2hhdE1hcFtzZXNzaW9uSWRdID0gY2hhdDtcclxuICAgIHJldHVybiB0aGlzLmNoYXRNYXBbc2Vzc2lvbklkXVxyXG4gIH1cclxuICAvLyDojrflvpfljoblj7LkvJror53nqpflj6NcclxuICBjaGF0TGlzdDpBcnJheTxhbnk+XHJcbiAgYXN5bmMgZ2V0Q2hhdFNlc3Npb24ocXVlcnlQYXJhbXM/OmFueSl7XHJcbiAgICBpZighUGFyc2U/LlVzZXI/LmN1cnJlbnQoKT8uaWQpIHJldHVybiAvLyDnlKjmiLflv4XpobvnmbvlvZVcclxuICAgIGxldCBsaW1pdCA9IDMwIC8vIOaZrumAmueUqOaIt+mZkOafpeecizEw5p2h5Y6G5Y+y6K6w5b2VXHJcbiAgICBsZXQgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJDaGF0U2Vzc2lvblwiKTtcclxuICAgIGlmKHF1ZXJ5UGFyYW1zKXtcclxuICAgICAgcXVlcnkgPSBQYXJzZS5RdWVyeS5mcm9tSlNPTihcIkNoYXRTZXNzaW9uXCIscXVlcnlQYXJhbXMpO1xyXG4gICAgfVxyXG4gICAgcXVlcnkuaW5jbHVkZShcInVzZXJcIixcInJvbGVcIixcInJvbGUubW9kZWxcIixcInN0b3J5XCIsXCJzdG9yeS5wZXJzb25cIixcInN0b3J5LnBlcnNvbi51c2VyVmVyaWZ5XCIsXCJwZXJzb25cIixcInBlcnNvbi51c2VyVmVyaWZ5XCIpO1xyXG4gICAgcXVlcnkuYWRkRGVzY2VuZGluZyhcInVwZGF0ZWRBdFwiKVxyXG4gICAgcXVlcnkuZXF1YWxUbyhcInVzZXJcIixQYXJzZS5Vc2VyLmN1cnJlbnQoKS50b1BvaW50ZXIoKSlcclxuICAgIHF1ZXJ5Lm5vdEVxdWFsVG8oJ2lzRGVsZXRlZCcsIHRydWUpO1xyXG4gICAgcXVlcnkubGltaXQobGltaXQpXHJcbiAgICBsZXQgbGlzdCA9IGF3YWl0IHF1ZXJ5LmZpbmQoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGxpc3QpXHJcbiAgICB0aGlzLmNoYXRMaXN0ID0gbGlzdC5tYXAoaXRlbT0+e1xyXG4gICAgICAvLyDmt7vliqDnvJPlrZhcclxuICAgICAgdGhpcy5jaGF0TWFwW2l0ZW0/LmlkXSA9IG5ldyBGbW9kZUNoYXQoaXRlbT8uaWQsaXRlbT8uZ2V0KFwicm9sZVwiKSxpdGVtLHRoaXMsdGhpcy5uYXZDdHJsLHRoaXMubmNsb3VkLHRoaXMuc3RvcmFnZSk7IFxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHNlc3Npb246aXRlbSxcclxuICAgICAgICBzaWQ6aXRlbT8uaWQsXHJcbiAgICAgICAgaXNIaWRkZW46ZmFsc2UsXHJcbiAgICAgICAgcmlkOml0ZW0/LmdldChcInJvbGVcIik/LmlkLFxyXG4gICAgICAgIG5hbWU6aXRlbT8uZ2V0KFwicm9sZVwiKT8uZ2V0KFwibmFtZVwiKSxcclxuICAgICAgICB0aHVtYjppdGVtPy5nZXQoXCJyb2xlXCIpPy5nZXQoXCJ0aHVtYlwiKSxcclxuICAgICAgICB0aXRsZTppdGVtPy5nZXQoXCJ0aXRsZVwiKSB8fCBpdGVtPy5nZXQoXCJyb2xlXCIpPy5nZXQoXCJuYW1lXCIpLFxyXG4gICAgICAgIG1lc3NhZ2U6aXRlbT8uZ2V0KFwibWVzc2FnZUxpc3RcIik/LltpdGVtPy5nZXQoXCJtZXNzYWdlTGlzdFwiKT8ubGVuZ3RoLTFdPy5jb250ZW50Py5zbGljZSgwLDIwKSxcclxuICAgICAgICBsYXRlc3Q6aXRlbT8uY3JlYXRlZEF0XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIGFzeW5jIGdldENoYXRTZXNzaW9uRGlzdGluY3QoKXtcclxuICAgIGxldCBsaW1pdCA9IDEwIC8vIOaZrumAmueUqOaIt+mZkOafpeecizEw5p2h5Y6G5Y+y6K6w5b2VXHJcbiAgICBsZXQgc3FsID0gYFNFTEVDVCB0MS5cIm9iamVjdElkXCIgYXMgc2lkICwgXCJBdmF0YXJSb2xlXCIuXCJvYmplY3RJZFwiIGFzIHJpZCwgKiBGUk9NIChcclxuICAgICAgU0VMRUNUICosUk9XX05VTUJFUigpIE9WRVIgKFBBUlRJVElPTiBCWSBcInVzZXJcIiwgXCJyb2xlXCIgT1JERVIgQlkgXCJjcmVhdGVkQXRcIiBERVNDKSBBUyByblxyXG4gICAgICAgRlJPTSBcIkNoYXRTZXNzaW9uXCIgV0hFUkUgXCJ1c2VyXCI9JDFcclxuICAgICAgKSBhcyB0MVxyXG4gICAgICBMRUZUIEpPSU4gXCJBdmF0YXJSb2xlXCIgT04gXCJBdmF0YXJSb2xlXCIuXCJvYmplY3RJZFwiID0gdDEuXCJyb2xlXCJcclxuICAgIFdIRVJFIHQxLnJuPTFcclxuICAgIExJTUlUICQyXHJcbiAgICA7YFxyXG4gICAgbGV0IHJlc3VsdDphbnkgPSBhd2FpdCB0aGlzLm5jbG91ZC5ub3ZhcWwoc3FsLFtQYXJzZS5Vc2VyLmN1cnJlbnQoKT8uaWQsbGltaXRdKVxyXG4gICAgbGV0IGNoYXRMaXN0ID0gcmVzdWx0Py5tYXAoaXRlbT0+e1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHNpZDppdGVtPy5zaWQsXHJcbiAgICAgICAgcmlkOml0ZW0/LnJpZCxcclxuICAgICAgICBuYW1lOml0ZW0/Lm5hbWUsXHJcbiAgICAgICAgbWVzc2FnZTppdGVtPy5tZXNzYWdlTGlzdD8uW2l0ZW0/Lm1lc3NhZ2VMaXN0Py5sZW5ndGgtMV0/LmNvbnRlbnQ/LnNsaWNlKDAsMjApLFxyXG4gICAgICAgIGxhdGVzdDppdGVtPy5jcmVhdGVkQXRcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHRoaXMuY2hhdExpc3QgPSBjaGF0TGlzdFxyXG4gICAgcmV0dXJuIHRoaXMuY2hhdExpc3RcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOmHjeW7uuaWsOWvueivneeql+WPo1xyXG4gICAqL1xyXG4gIGNyZWF0ZUNoYXRQYW5lbChyb2xlPzphbnksY2hhdD86YW55KXtcclxuICAgIGxldCBzZXNzaW9uSWQgPSBjaGF0Py5pZHx8XCJuZXdcIlxyXG4gICAgY2hhdCA9IG5ldyBGbW9kZUNoYXQoc2Vzc2lvbklkLHJvbGUsY2hhdCx0aGlzLHRoaXMubmF2Q3RybCx0aGlzLm5jbG91ZCx0aGlzLnN0b3JhZ2UpO1xyXG4gICAgdGhpcy5jaGF0TWFwW3Nlc3Npb25JZF0gPSBjaGF0OyAvLyBuZXcg56qX5Y+j5aaC5p6c5rKh5pyJ5raI5oGv6L2s5o2i5oiQ5bimSUTnmoTvvIzmr4/mrKHlsLHkvJrmuIXnqbpcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9jaGF0L3Byby9jaGF0L1wiK3Nlc3Npb25JZF0pXHJcbiAgfVxyXG4gIGFzeW5jIGNyZWF0ZU5ld1JvbGVDaGF0KHJvbGVJZCk6UHJvbWlzZTxGbW9kZUNoYXQ+e1xyXG4gICAgY29uc29sZS5sb2coXCJjcmVhdGVOZXdSb2xlQ2hhdFwiLHJvbGVJZClcclxuICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIkF2YXRhclJvbGVcIilcclxuICAgIHF1ZXJ5LmluY2x1ZGUoXCJtb2RlbFwiKVxyXG4gICAgbGV0IHJvbGUgPSBhd2FpdCBxdWVyeS5nZXQocm9sZUlkKTtcclxuICAgIGNvbnNvbGUubG9nKFwicm9sZVwiLHJvbGUpXHJcbiAgICBsZXQgY2hhdCA9IG5ldyBGbW9kZUNoYXQoXCJuZXdcIixyb2xlLG51bGwsdGhpcyx0aGlzLm5hdkN0cmwsdGhpcy5uY2xvdWQsdGhpcy5zdG9yYWdlKTtcclxuICAgIHJldHVybiBjaGF0XHJcbiAgfVxyXG4gIGFzeW5jIHJlc3RvcmVDaGF0UGFuZWwob3B0aW9ucz86e1xyXG4gICAgcmlkOnN0cmluZyxcclxuICAgIHNpZDpzdHJpbmcsXHJcbiAgfSl7XHJcbiAgICBsZXQgcXVlcnlyID0gbmV3IFBhcnNlLlF1ZXJ5KFwiQXZhdGFyUm9sZVwiKVxyXG4gICAgbGV0IHF1ZXJ5cyA9IG5ldyBQYXJzZS5RdWVyeShcIkNoYXRTZXNzaW9uXCIpXHJcbiAgICBsZXQgcm9sZSA9IGF3YWl0IHF1ZXJ5ci5nZXQob3B0aW9ucz8ucmlkKTtcclxuICAgIGxldCBzZXNzaW9uID0gYXdhaXQgcXVlcnlzLmdldChvcHRpb25zPy5zaWQpO1xyXG4gICAgLy8gbGV0IHNlc3Npb25JZCA9IFwibmV3XCJcclxuICAgIGxldCBjaGF0ID0gbmV3IEZtb2RlQ2hhdChvcHRpb25zPy5zaWQscm9sZSxzZXNzaW9uLHRoaXMsdGhpcy5uYXZDdHJsLHRoaXMubmNsb3VkLHRoaXMuc3RvcmFnZSk7XHJcbiAgICB0aGlzLmNoYXRNYXBbb3B0aW9ucz8uc2lkXSA9IGNoYXQ7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvY2hhdC9wcm8vY2hhdC9cIitvcHRpb25zPy5zaWRdKVxyXG5cclxuICB9XHJcbiAgYXN5bmMgY2FsbFJvbGUocm9sZSl7XHJcbiAgICAvLyDmmoLml7blvIDlkK/lhajnq6/ov5vlhaXor63pn7Plr7nor51cclxuICAgIGlmKGZhbHNlICYmICF0aGlzLmlzQ2FwYWNpdG9yKXtcclxuICAgICAgbGV0IGFsZXJ0ID0gYXdhaXQgdGhpcy5hbGVydEN0cmwuY3JlYXRlKHtcclxuICAgICAgICBoZWFkZXI6XCLms6jmhI9cIixcclxuICAgICAgICBzdWJIZWFkZXI6XCLor63pn7Plr7nor53vvIzpmZDmiYvmnLpBUFDnq6/lj6/nlKhcIixcclxuICAgICAgICBtZXNzYWdlOlwi6K+36IGU57O75a6i5pyN6I635Y+W5YaF5rWL6LWE5qC85ZOm77yBXCIsXHJcbiAgICAgICAgYnV0dG9uczpbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHJvbGU6XCJva1wiLHRleHQ6XCLnn6XpgZPkuoZcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXVxyXG4gICAgICB9KVxyXG4gICAgICBhbGVydC5wcmVzZW50KCk7XHJcbiAgICAgIHJldHVyblxyXG5cclxuICAgIH1cclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnZGFyaycpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvYXZhdGFyL3JvbGUvJHtyb2xlLmlkfWAse1xyXG4gICAgICB0eXBlOlwicGhvbmVcIlxyXG4gICAgfV0pXHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
4
4
  export class ChatContentPipe {
5
5
  transform(content, ...args) {
6
6
  // console.log(args);
7
- let arg = args?.[0] || "text";
7
+ let arg = args?.[0] || content?.type || "text";
8
8
  if (arg == "text") {
9
9
  return getMessageContentText(content);
10
10
  }
@@ -24,4 +24,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
24
24
  standalone: true
25
25
  }]
26
26
  }] });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1jb250ZW50LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2Mvc2VydmljZS1mbWFpL3NlcnZpY2UtY2hhdC9waXBlcy9jaGF0LWNvbnRlbnQucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTzFFLE1BQU0sT0FBTyxlQUFlO0lBRTFCLFNBQVMsQ0FBQyxPQUFnQixFQUFFLEdBQUcsSUFBZTtRQUM1QyxxQkFBcUI7UUFDckIsSUFBSSxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFBO1FBQzdCLElBQUcsR0FBRyxJQUFFLE1BQU0sRUFBQyxDQUFDO1lBQ2QsT0FBTyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUN2QyxDQUFDO1FBQ0QsSUFBRyxHQUFHLElBQUUsV0FBVyxFQUFDLENBQUM7WUFDbkIsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNwQyxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzsrR0FaVSxlQUFlOzZHQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBTDNCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGFBQWE7b0JBQ25CLElBQUksRUFBQyxJQUFJLEVBQUUsY0FBYztvQkFDekIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBnZXRNZXNzYWdlQ29udGVudFRleHQsIGdldE1lc3NhZ2VJbWFnZVVybCB9IGZyb20gJy4uL2NoYXQtY2xhc3MnO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdjaGF0Q29udGVudCcsXHJcbiAgcHVyZTp0cnVlLCAvLyDovpPlhaXlj5jljJbml7bvvIzku4XmuLLmn5PkuIDmrKFcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaGF0Q29udGVudFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcclxuXHJcbiAgdHJhbnNmb3JtKGNvbnRlbnQ6IHVua25vd24sIC4uLmFyZ3M6IHVua25vd25bXSk6IHVua25vd24ge1xyXG4gICAgLy8gY29uc29sZS5sb2coYXJncyk7XHJcbiAgICBsZXQgYXJnID0gYXJncz8uWzBdIHx8IFwidGV4dFwiXHJcbiAgICBpZihhcmc9PVwidGV4dFwiKXtcclxuICAgICAgcmV0dXJuIGdldE1lc3NhZ2VDb250ZW50VGV4dChjb250ZW50KVxyXG4gICAgfVxyXG4gICAgaWYoYXJnPT1cImltYWdlX3VybFwiKXtcclxuICAgICAgcmV0dXJuIGdldE1lc3NhZ2VJbWFnZVVybChjb250ZW50KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRlbnQ7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1jb250ZW50LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2FpZ2Mvc2VydmljZS1mbWFpL3NlcnZpY2UtY2hhdC9waXBlcy9jaGF0LWNvbnRlbnQucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTzFFLE1BQU0sT0FBTyxlQUFlO0lBRTFCLFNBQVMsQ0FBQyxPQUFZLEVBQUUsR0FBRyxJQUFlO1FBQ3hDLHFCQUFxQjtRQUNyQixJQUFJLEdBQUcsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQTtRQUM5QyxJQUFHLEdBQUcsSUFBRSxNQUFNLEVBQUMsQ0FBQztZQUNkLE9BQU8scUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDdkMsQ0FBQztRQUNELElBQUcsR0FBRyxJQUFFLFdBQVcsRUFBQyxDQUFDO1lBQ25CLE9BQU8sa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDcEMsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7K0dBWlUsZUFBZTs2R0FBZixlQUFlOzs0RkFBZixlQUFlO2tCQUwzQixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxhQUFhO29CQUNuQixJQUFJLEVBQUMsSUFBSSxFQUFFLGNBQWM7b0JBQ3pCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZ2V0TWVzc2FnZUNvbnRlbnRUZXh0LCBnZXRNZXNzYWdlSW1hZ2VVcmwgfSBmcm9tICcuLi9jaGF0LWNsYXNzJztcclxuXHJcbkBQaXBlKHtcclxuICBuYW1lOiAnY2hhdENvbnRlbnQnLFxyXG4gIHB1cmU6dHJ1ZSwgLy8g6L6T5YWl5Y+Y5YyW5pe277yM5LuF5riy5p+T5LiA5qyhXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hhdENvbnRlbnRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcblxyXG4gIHRyYW5zZm9ybShjb250ZW50OiBhbnksIC4uLmFyZ3M6IHVua25vd25bXSk6IHVua25vd24ge1xyXG4gICAgLy8gY29uc29sZS5sb2coYXJncyk7XHJcbiAgICBsZXQgYXJnID0gYXJncz8uWzBdIHx8IGNvbnRlbnQ/LnR5cGUgfHwgXCJ0ZXh0XCJcclxuICAgIGlmKGFyZz09XCJ0ZXh0XCIpe1xyXG4gICAgICByZXR1cm4gZ2V0TWVzc2FnZUNvbnRlbnRUZXh0KGNvbnRlbnQpXHJcbiAgICB9XHJcbiAgICBpZihhcmc9PVwiaW1hZ2VfdXJsXCIpe1xyXG4gICAgICByZXR1cm4gZ2V0TWVzc2FnZUltYWdlVXJsKGNvbnRlbnQpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGVudDtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==