@banta/sdk 6.0.2 → 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/banta-sdk.mjs +327 -6762
- package/fesm2022/banta-sdk.mjs.map +1 -1
- package/index.d.ts +1472 -3
- package/package.json +11 -13
- package/esm2022/banta-sdk.mjs +0 -5
- package/esm2022/lib/attachment-scraper.mjs +0 -2
- package/esm2022/lib/banta/banta.component.mjs +0 -207
- package/esm2022/lib/banta-logo.component.mjs +0 -11
- package/esm2022/lib/banta-sdk.module.mjs +0 -135
- package/esm2022/lib/chat/banta-chat/banta-chat.component.mjs +0 -209
- package/esm2022/lib/chat/chat-message/chat-message.component.mjs +0 -62
- package/esm2022/lib/chat/chat-view/chat-view.component.mjs +0 -166
- package/esm2022/lib/chat/chat.module.mjs +0 -51
- package/esm2022/lib/chat/index.mjs +0 -6
- package/esm2022/lib/chat/live-chat-message.component.mjs +0 -80
- package/esm2022/lib/chat-backend-base.mjs +0 -31
- package/esm2022/lib/chat-backend.mjs +0 -199
- package/esm2022/lib/chat-source-base.mjs +0 -2
- package/esm2022/lib/chat-source.mjs +0 -282
- package/esm2022/lib/comments/attachment-button/attachment-button.component.mjs +0 -75
- package/esm2022/lib/comments/attachment-scraper.directive.mjs +0 -101
- package/esm2022/lib/comments/banta-comments/banta-comments.component.mjs +0 -817
- package/esm2022/lib/comments/comment/comment.component.mjs +0 -224
- package/esm2022/lib/comments/comment-field/comment-field.component.mjs +0 -411
- package/esm2022/lib/comments/comment-sort/comment-sort.component.mjs +0 -37
- package/esm2022/lib/comments/comment-view/comment-view.component.mjs +0 -780
- package/esm2022/lib/comments/comments.module.mjs +0 -127
- package/esm2022/lib/comments/index.mjs +0 -12
- package/esm2022/lib/comments/inline-replies.directive.mjs +0 -13
- package/esm2022/lib/comments/live-comment.component.mjs +0 -80
- package/esm2022/lib/comments/reply-send-options.directive.mjs +0 -13
- package/esm2022/lib/common/attachment/attachment.component.mjs +0 -128
- package/esm2022/lib/common/attachments/attachments.component.mjs +0 -75
- package/esm2022/lib/common/common.module.mjs +0 -68
- package/esm2022/lib/common/index.mjs +0 -11
- package/esm2022/lib/common/lazy-connection.mjs +0 -15
- package/esm2022/lib/common/lightbox/lightbox.component.mjs +0 -31
- package/esm2022/lib/common/markdown-to-html.pipe.mjs +0 -83
- package/esm2022/lib/common/mention-linker.pipe.mjs +0 -35
- package/esm2022/lib/common/timer-pool.service.mjs +0 -85
- package/esm2022/lib/common/timestamp.component.mjs +0 -124
- package/esm2022/lib/common/trust-resource-url.pipe.mjs +0 -22
- package/esm2022/lib/emoji/emoji-selector-button.component.mjs +0 -115
- package/esm2022/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +0 -93
- package/esm2022/lib/emoji/emoji.module.mjs +0 -55
- package/esm2022/lib/emoji/emojis.mjs +0 -6508
- package/esm2022/lib/emoji/index.mjs +0 -5
- package/esm2022/lib/giphy-attachments.mjs +0 -16
- package/esm2022/lib/index.mjs +0 -20
- package/esm2022/lib/live-message.component.mjs +0 -96
- package/esm2022/lib/message-menu-item.mjs +0 -2
- package/esm2022/lib/sdk-options.mjs +0 -3
- package/esm2022/lib/static-chat-source.mjs +0 -101
- package/esm2022/lib/tweet-attachments.mjs +0 -13
- package/esm2022/lib/url-attachments.mjs +0 -42
- package/esm2022/lib/youtube-attachments.mjs +0 -29
- package/esm2022/public-api.mjs +0 -5
- package/lib/attachment-scraper.d.ts +0 -15
- package/lib/banta/banta.component.d.ts +0 -59
- package/lib/banta-logo.component.d.ts +0 -5
- package/lib/banta-sdk.module.d.ts +0 -32
- package/lib/chat/banta-chat/banta-chat.component.d.ts +0 -79
- package/lib/chat/chat-message/chat-message.component.d.ts +0 -21
- package/lib/chat/chat-view/chat-view.component.d.ts +0 -52
- package/lib/chat/chat.module.d.ts +0 -15
- package/lib/chat/index.d.ts +0 -5
- package/lib/chat/live-chat-message.component.d.ts +0 -23
- package/lib/chat-backend-base.d.ts +0 -72
- package/lib/chat-backend.d.ts +0 -66
- package/lib/chat-source-base.d.ts +0 -51
- package/lib/chat-source.d.ts +0 -85
- package/lib/comments/attachment-button/attachment-button.component.d.ts +0 -17
- package/lib/comments/attachment-scraper.directive.d.ts +0 -21
- package/lib/comments/banta-comments/banta-comments.component.d.ts +0 -216
- package/lib/comments/comment/comment.component.d.ts +0 -90
- package/lib/comments/comment-field/comment-field.component.d.ts +0 -92
- package/lib/comments/comment-sort/comment-sort.component.d.ts +0 -16
- package/lib/comments/comment-view/comment-view.component.d.ts +0 -205
- package/lib/comments/comments.module.d.ts +0 -34
- package/lib/comments/index.d.ts +0 -11
- package/lib/comments/inline-replies.directive.d.ts +0 -5
- package/lib/comments/live-comment.component.d.ts +0 -23
- package/lib/comments/reply-send-options.directive.d.ts +0 -5
- package/lib/common/attachment/attachment.component.d.ts +0 -34
- package/lib/common/attachments/attachments.component.d.ts +0 -26
- package/lib/common/common.module.d.ts +0 -19
- package/lib/common/index.d.ts +0 -10
- package/lib/common/lazy-connection.d.ts +0 -6
- package/lib/common/lightbox/lightbox.component.d.ts +0 -14
- package/lib/common/markdown-to-html.pipe.d.ts +0 -13
- package/lib/common/mention-linker.pipe.d.ts +0 -13
- package/lib/common/timer-pool.service.d.ts +0 -15
- package/lib/common/timestamp.component.d.ts +0 -19
- package/lib/common/trust-resource-url.pipe.d.ts +0 -10
- package/lib/emoji/emoji-selector-button.component.d.ts +0 -30
- package/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.d.ts +0 -23
- package/lib/emoji/emoji.module.d.ts +0 -16
- package/lib/emoji/emojis.d.ts +0 -6507
- package/lib/emoji/index.d.ts +0 -4
- package/lib/giphy-attachments.d.ts +0 -5
- package/lib/index.d.ts +0 -19
- package/lib/live-message.component.d.ts +0 -22
- package/lib/message-menu-item.d.ts +0 -6
- package/lib/sdk-options.d.ts +0 -8
- package/lib/static-chat-source.d.ts +0 -49
- package/lib/tweet-attachments.d.ts +0 -5
- package/lib/url-attachments.d.ts +0 -14
- package/lib/youtube-attachments.d.ts +0 -5
- package/public-api.d.ts +0 -1
package/package.json
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@banta/sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
8
|
"peerDependencies": {
|
|
9
|
-
"@angular/common": "^16 || ^17 || ^18 || ^19",
|
|
10
|
-
"@angular/core": "^16 || ^17 || ^18 || ^19",
|
|
11
|
-
"@angular/animations": "^16 || ^17 || ^18 || ^19",
|
|
12
|
-
"@angular/cdk": "^15 || ^16 || ^17 || ^18 || ^19",
|
|
13
|
-
"@angular/forms": "^16 || ^17 || ^18 || ^19",
|
|
14
|
-
"@angular/material": "^15 || ^16 || ^17 || ^18 || ^19",
|
|
15
|
-
"@angular/platform-browser": "^16 || ^17 || ^18 || ^19",
|
|
16
|
-
"@angular/platform-browser-dynamic": "^16 || ^17 || ^18 || ^19",
|
|
17
|
-
"@angular/router": "^16 || ^17 || ^18 || ^19",
|
|
9
|
+
"@angular/common": "^16 || ^17 || ^18 || ^19 || ^20 || ^21",
|
|
10
|
+
"@angular/core": "^16 || ^17 || ^18 || ^19 || ^20 || ^21",
|
|
11
|
+
"@angular/animations": "^16 || ^17 || ^18 || ^19 || ^20 || ^21",
|
|
12
|
+
"@angular/cdk": "^15 || ^16 || ^17 || ^18 || ^19 || ^20 || ^21",
|
|
13
|
+
"@angular/forms": "^16 || ^17 || ^18 || ^19 || ^20 || ^21",
|
|
14
|
+
"@angular/material": "^15 || ^16 || ^17 || ^18 || ^19 || ^20 || ^21",
|
|
15
|
+
"@angular/platform-browser": "^16 || ^17 || ^18 || ^19 || ^20 || ^21",
|
|
16
|
+
"@angular/platform-browser-dynamic": "^16 || ^17 || ^18 || ^19 || ^20 || ^21",
|
|
17
|
+
"@angular/router": "^16 || ^17 || ^18 || ^19 || ^20 || ^21",
|
|
18
|
+
"@astronautlabs/emoji": "^17.1.0",
|
|
18
19
|
"@banta/common": "^3.1.0",
|
|
19
20
|
"@types/dompurify": "^3.0.5",
|
|
20
21
|
"dompurify": "^3.1.5",
|
|
21
22
|
"marked": "^13.0.1",
|
|
22
23
|
"rxjs": "^7.8.1",
|
|
23
24
|
"uuid": "^3.4.0",
|
|
24
|
-
"twemoji": "^14.0.2",
|
|
25
25
|
"yaml": "^1.10.0"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
@@ -35,8 +35,6 @@
|
|
|
35
35
|
},
|
|
36
36
|
".": {
|
|
37
37
|
"types": "./index.d.ts",
|
|
38
|
-
"esm2022": "./esm2022/banta-sdk.mjs",
|
|
39
|
-
"esm": "./esm2022/banta-sdk.mjs",
|
|
40
38
|
"default": "./fesm2022/banta-sdk.mjs"
|
|
41
39
|
}
|
|
42
40
|
},
|
package/esm2022/banta-sdk.mjs
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtc2RrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9iYW50YS1zZGsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC1zY3JhcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvYXR0YWNobWVudC1zY3JhcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VBdHRhY2htZW50IH0gZnJvbSAnQGJhbnRhL2NvbW1vbic7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnRGcmFnbWVudCB7XHJcbiAgICB0ZXh0OiBzdHJpbmc7XHJcbiAgICBvZmZzZXQ6IG51bWJlcjtcclxuICAgIHR5cGU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50U2NyYXBlciB7XHJcbiAgICBmaW5kRnJhZ21lbnRzKG1lc3NhZ2U6IENoYXRNZXNzYWdlKTogQXR0YWNobWVudEZyYWdtZW50W107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudFJlc29sdmVyIHtcclxuICAgIHJlc29sdmVGcmFnbWVudChtZXNzYWdlOiBDaGF0TWVzc2FnZSwgZnJhZ21lbnQ6IEF0dGFjaG1lbnRGcmFnbWVudCk6IFByb21pc2U8Q2hhdE1lc3NhZ2VBdHRhY2htZW50PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50UmVuZGVyZXIge1xyXG4gICAgYXR0YWNobWVudDogQ2hhdE1lc3NhZ2VBdHRhY2htZW50O1xyXG59Il19
|
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { Component, Input, ViewChild, HostBinding } from "@angular/core";
|
|
2
|
-
import { Subject, Subscription } from 'rxjs';
|
|
3
|
-
import { Output } from "@angular/core";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "../chat-backend-base";
|
|
6
|
-
import * as i2 from "@angular/material/dialog";
|
|
7
|
-
import * as i3 from "@angular/common";
|
|
8
|
-
import * as i4 from "@angular/forms";
|
|
9
|
-
import * as i5 from "../common/timestamp.component";
|
|
10
|
-
import * as i6 from "../comments/comment/comment.component";
|
|
11
|
-
import * as i7 from "../comments/comment-view/comment-view.component";
|
|
12
|
-
import * as i8 from "../comments/banta-comments/banta-comments.component";
|
|
13
|
-
import * as i9 from "../chat/banta-chat/banta-chat.component";
|
|
14
|
-
import * as i10 from "@angular/material/icon";
|
|
15
|
-
import * as i11 from "@angular/material/button";
|
|
16
|
-
import * as i12 from "@angular/material/menu";
|
|
17
|
-
import * as i13 from "../live-message.component";
|
|
18
|
-
/**
|
|
19
|
-
* Unified chat and comments component
|
|
20
|
-
*/
|
|
21
|
-
export class BantaComponent {
|
|
22
|
-
constructor(backend, matDialog) {
|
|
23
|
-
this.backend = backend;
|
|
24
|
-
this.matDialog = matDialog;
|
|
25
|
-
this._subs = new Subscription();
|
|
26
|
-
this.auxOpen = false;
|
|
27
|
-
this.auxTitle = 'Notifications';
|
|
28
|
-
this.auxMode = 'notifications';
|
|
29
|
-
this.mobileFocus = null;
|
|
30
|
-
this.newNotifications = false;
|
|
31
|
-
this.chatLabel = 'Chat';
|
|
32
|
-
this.commentsLabel = 'Comments';
|
|
33
|
-
this.allowServerInfoRequest = false;
|
|
34
|
-
this._signInSelected = new Subject();
|
|
35
|
-
this.pointOpen = null;
|
|
36
|
-
this.pointSubChat = null;
|
|
37
|
-
this.newPointSubMessage = {};
|
|
38
|
-
this.genericAvatarUrl = 'https://gravatar.com/avatar/915c804e0be607a4ad766ddadea5c48a?s=512&d=https://codepen.io/assets/avatars/user-avatar-512x512-6e240cf350d2f1cc07c2bed234c3a3bb5f1b237023c204c782622e80d6b212ba.png';
|
|
39
|
-
}
|
|
40
|
-
ngOnInit() {
|
|
41
|
-
this._subs.add(this.backend.userChanged.subscribe(user => this.currentUser = user));
|
|
42
|
-
this._subs.add(this.backend.notificationsChanged.subscribe(notifs => this.notifications = notifs));
|
|
43
|
-
this._subs.add(this.backend.newNotification.subscribe(notif => {
|
|
44
|
-
this.newNotifications = true;
|
|
45
|
-
}));
|
|
46
|
-
}
|
|
47
|
-
async sendPointSubMessage() {
|
|
48
|
-
let text = (this.newPointSubMessage.message || '').trim();
|
|
49
|
-
this.newPointSubMessage.message = '';
|
|
50
|
-
if (text === '')
|
|
51
|
-
return;
|
|
52
|
-
let message = {
|
|
53
|
-
user: null,
|
|
54
|
-
sentAt: Date.now(),
|
|
55
|
-
likes: 0,
|
|
56
|
-
message: text
|
|
57
|
-
};
|
|
58
|
-
try {
|
|
59
|
-
await this.pointSubChat.send(message);
|
|
60
|
-
}
|
|
61
|
-
catch (e) {
|
|
62
|
-
console.error(`Failed to send point sub-message:`);
|
|
63
|
-
console.error(e);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
async goToMessage(message) {
|
|
67
|
-
let targetMessage = message;
|
|
68
|
-
if (message.parentMessageId) {
|
|
69
|
-
// jump to the parent message thread...
|
|
70
|
-
let parentMessage;
|
|
71
|
-
try {
|
|
72
|
-
parentMessage = await this.backend.getMessage(message.topicId, message.parentMessageId);
|
|
73
|
-
}
|
|
74
|
-
catch (e) {
|
|
75
|
-
console.error(`Received exception while fetching parent message:`);
|
|
76
|
-
console.error(e);
|
|
77
|
-
}
|
|
78
|
-
if (!parentMessage) {
|
|
79
|
-
console.error(`Failed to look up parent message ${message.topicId}/${message.parentMessageId}`);
|
|
80
|
-
console.error(`Original message was:`);
|
|
81
|
-
console.dir(targetMessage);
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
message = parentMessage;
|
|
85
|
-
}
|
|
86
|
-
let viewType = this.getViewType(message);
|
|
87
|
-
if (viewType === 'comment') {
|
|
88
|
-
if (this.pointSubChat) {
|
|
89
|
-
if (this.pointSubChat.close)
|
|
90
|
-
this.pointSubChat.close();
|
|
91
|
-
this.pointSubChat = null;
|
|
92
|
-
}
|
|
93
|
-
this.mobileFocus = 'points';
|
|
94
|
-
this.pointOpen = message;
|
|
95
|
-
this.pointSubChat = await this.backend.getSourceForThread(message.topicId, message.id);
|
|
96
|
-
this.pointOpen = await this.backend.refreshMessage(message);
|
|
97
|
-
this.newPointSubMessage = {};
|
|
98
|
-
}
|
|
99
|
-
else if (viewType === 'chat') {
|
|
100
|
-
this.mobileFocus = 'firehose';
|
|
101
|
-
this.firehose.jumpToMessage(message);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
pointUnfocus() {
|
|
105
|
-
this.pointOpen = null;
|
|
106
|
-
if (this.pointSubChat) {
|
|
107
|
-
if (this.pointSubChat.close)
|
|
108
|
-
this.pointSubChat.close();
|
|
109
|
-
this.pointSubChat = null;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
ngOnDestroy() {
|
|
113
|
-
this._subs.unsubscribe();
|
|
114
|
-
}
|
|
115
|
-
showAux(title, mode) {
|
|
116
|
-
this.auxOpen = true;
|
|
117
|
-
this.auxTitle = title;
|
|
118
|
-
this.auxMode = mode;
|
|
119
|
-
this.mobileFocus = 'aux';
|
|
120
|
-
}
|
|
121
|
-
showNotifications() {
|
|
122
|
-
this.showAux('Notifications', 'notifications');
|
|
123
|
-
}
|
|
124
|
-
get topicID() {
|
|
125
|
-
return this._topicID;
|
|
126
|
-
}
|
|
127
|
-
set topicID(value) {
|
|
128
|
-
this._topicID = value;
|
|
129
|
-
this.close();
|
|
130
|
-
this.connectToTopic(this._topicID);
|
|
131
|
-
}
|
|
132
|
-
async connectToTopic(id) {
|
|
133
|
-
this.firehoseSource = await this.backend.getSourceForTopic(`${id}_firehose`);
|
|
134
|
-
this.pointSource = await this.backend.getSourceForTopic(`${id}_thepoint`);
|
|
135
|
-
}
|
|
136
|
-
get signInSelected() {
|
|
137
|
-
return this._signInSelected;
|
|
138
|
-
}
|
|
139
|
-
showSignIn() {
|
|
140
|
-
this._signInSelected.next();
|
|
141
|
-
}
|
|
142
|
-
close() {
|
|
143
|
-
if (this.firehoseSource) {
|
|
144
|
-
if (this.firehoseSource.close)
|
|
145
|
-
this.firehoseSource.close();
|
|
146
|
-
this.firehoseSource = null;
|
|
147
|
-
}
|
|
148
|
-
if (this.pointSource) {
|
|
149
|
-
if (this.pointSource.close)
|
|
150
|
-
this.pointSource.close();
|
|
151
|
-
this.pointSource = null;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
get hasPoint() {
|
|
155
|
-
return this.pointOpen != null;
|
|
156
|
-
}
|
|
157
|
-
closeAux() {
|
|
158
|
-
this.auxOpen = false;
|
|
159
|
-
this.mobileFocus = 'firehose';
|
|
160
|
-
}
|
|
161
|
-
getViewType(message) {
|
|
162
|
-
if (message.topicId.endsWith('_firehose'))
|
|
163
|
-
return 'chat';
|
|
164
|
-
else if (message.topicId.endsWith('_thepoint'))
|
|
165
|
-
return 'comment';
|
|
166
|
-
return 'comment';
|
|
167
|
-
}
|
|
168
|
-
async upvoteMessage(message) {
|
|
169
|
-
// TODO
|
|
170
|
-
//await this.backend.likeMessage(message.id);
|
|
171
|
-
}
|
|
172
|
-
showProfile(user) {
|
|
173
|
-
this.profileUser = user;
|
|
174
|
-
this.showAux(`@${user.username}'s Profile`, 'profile');
|
|
175
|
-
}
|
|
176
|
-
sendReport(message) {
|
|
177
|
-
this.auxOpen = false;
|
|
178
|
-
alert('would send report');
|
|
179
|
-
}
|
|
180
|
-
reportMessage(message) {
|
|
181
|
-
this.reportedMessage = message;
|
|
182
|
-
this.showAux(`Report message from @${message.user.username}`, 'report');
|
|
183
|
-
}
|
|
184
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaComponent, deps: [{ token: i1.ChatBackendBase }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
185
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: BantaComponent, selector: "banta", inputs: { topicID: "topicID", chatLabel: "chatLabel", commentsLabel: "commentsLabel", allowServerInfoRequest: "allowServerInfoRequest" }, outputs: { signInSelected: "signInSelected" }, host: { properties: { "class.point-focus": "this.hasPoint" } }, viewQueries: [{ propertyName: "firehose", first: true, predicate: ["firehose"], descendants: true, static: true }], ngImport: i0, template: "\r\n<mat-menu #userMenu=\"matMenu\">\r\n <ng-container *ngIf=\"currentUser\">\r\n <button [disabled]=\"true\" mat-menu-item>{{currentUser.displayName}} (@{{currentUser.username}})</button>\r\n <button mat-menu-item (click)=\"signOut()\">Sign Out</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"!currentUser\">\r\n <button mat-menu-item>Sign In</button>\r\n </ng-container>\r\n <button mat-menu-item>Help</button>\r\n</mat-menu>\r\n\r\n<div class=\"tabs\">\r\n <div>\r\n <a mat-button (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</a>\r\n <a mat-button (click)=\"mobileFocus = 'comments'\">{{commentsLabel}}</a>\r\n </div>\r\n <div class=\"spacer\"></div>\r\n <div>\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"firehose\" [class.focus]=\"mobileFocus === 'chat'\">\r\n <header>\r\n <div>\r\n <label (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</label>\r\n <div class=\"spacer\"></div>\r\n\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n </header>\r\n <banta-chat \r\n #firehose\r\n [source]=\"firehoseSource\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n (reported)=\"reportMessage($event)\"\r\n ></banta-chat>\r\n</div>\r\n\r\n<div class=\"aux\" [class.focus]=\"mobileFocus === 'aux'\" [class.open]=\"auxOpen\">\r\n <header>\r\n <div>\r\n <label>{{auxTitle}}</label>\r\n <div class=\"spacer\"></div>\r\n <button mat-icon-button (click)=\"auxOpen = false\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </header>\r\n <div class=\"aux-contents\">\r\n <ng-container *ngIf=\"auxMode === 'profile'\">\r\n <ng-container *ngIf=\"profileUser\">\r\n\r\n <div>\r\n <strong style=\"font-size: 125%;\">\r\n {{profileUser.displayName}}\r\n </strong>\r\n @{{profileUser.username}}\r\n </div>\r\n\r\n <br/>\r\n <strong>Top Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n\r\n <br/>\r\n <strong>Recent Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'report'\">\r\n <p>Are you sure you want to report this message?</p>\r\n\r\n <banta-live-message [message]=\"reportedMessage\"></banta-live-message>\r\n\r\n <div style=\"text-align: center;\">\r\n <button mat-raised-button color=\"primary\" (click)=\"sendReport(reportedMessage)\">Yes, Report</button>\r\n \r\n <button mat-raised-button color=\"secondary\" (click)=\"auxOpen = false\">No, Cancel</button>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'notifications'\">\r\n\r\n <div *ngIf=\"!notifications || notifications.length === 0\">\r\n <em>You do not have any notifications yet</em>\r\n </div>\r\n \r\n <div class=\"notifications\">\r\n <div class=\"notification\" *ngFor=\"let notif of notifications\">\r\n <div>\r\n <ng-container *ngIf=\"notif.type === 'upvote'\">\r\n @{{notif.message?.user?.username}} upvoted your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'notice'\">\r\n <div>\r\n {{notif.message}}\r\n </div>\r\n <a mat-button target=\"_blank\" href=\"{{notif.actionUrl}}\">\r\n {{notif.actionLabel}}\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'mention'\">\r\n You were mentioned by @{{notif.message?.user?.username}}\r\n\r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'reply'\">\r\n @{{notif.replyMessage?.user?.username}} replied to your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.replyMessage\"\r\n (upvoted)=\"upvoteMessage(notif.replyMessage)\"\r\n (reported)=\"reportMessage(notif.replyMessage)\"\r\n (selected)=\"goToMessage(notif.replyMessage)\">\r\n </banta-live-message>\r\n </ng-container>\r\n </div>\r\n\r\n <banta-timestamp [value]=\"notif.sentAt\"></banta-timestamp>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n<div class=\"points\" [class.focus]=\"mobileFocus === 'points'\">\r\n <header>\r\n <div>\r\n <label>{{commentsLabel}}</label>\r\n </div>\r\n </header>\r\n <div class=\"point-focus\">\r\n <div class=\"actions\">\r\n <button mat-button (click)=\"pointUnfocus()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n Back\r\n </button>\r\n\r\n <div class=\"spacer\"></div>\r\n \r\n <ng-container *ngIf=\"pointOpen\">\r\n <div class=\"counted-action\">\r\n <div class=\"count-indicator\"> \r\n {{pointOpen.likes}}\r\n </div>\r\n <button mat-icon-button>\r\n <mat-icon>thumb_up</mat-icon>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"!pointSubChat\">\r\n Error: No subchat\r\n </div>\r\n \r\n <banta-comment-view\r\n class=\"subcomments\"\r\n *ngIf=\"pointSubChat\"\r\n [newestLast]=\"true\"\r\n [allowReplies]=\"false\"\r\n [source]=\"pointSubChat\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n >\r\n \r\n <banta-comment\r\n class=\"focused-comment\"\r\n data-before\r\n *ngIf=\"pointOpen\"\r\n [showReplyAction]=\"false\"\r\n [message]=\"pointOpen\"\r\n [readonly]=\"pointSubChat?.readonly\"\r\n (upvoted)=\"upvoteMessage(pointOpen)\"\r\n (userSelected)=\"showProfile(pointOpen.user)\"\r\n (reported)=\"reportMessage(pointOpen)\"\r\n ></banta-comment>\r\n \r\n <div class=\"message reply\">\r\n Reply:\r\n <form class=\"new-message\" (submit)=\"sendPointSubMessage()\">\r\n <textarea \r\n name=\"message\" \r\n (keydown)=\"newPointSubMessageKeyDown($event)\"\r\n [(ngModel)]=\"newPointSubMessage.message\"></textarea>\r\n \r\n <div class=\"actions\">\r\n <button [disabled]=\"!newPointSubMessage.message\" \r\n mat-raised-button color=\"primary\">Send</button>\r\n </div>\r\n </form>\r\n </div>\r\n </banta-comment-view>\r\n </div>\r\n <div class=\"points-section\">\r\n <banta-comments\r\n [source]=\"pointSource\"\r\n [allowServerInfoRequest]=\"allowServerInfoRequest\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (selected)=\"goToMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n ></banta-comments>\r\n </div>\r\n</div>", styles: [":host{display:flex;flex-direction:row;padding:.5em;height:40em;position:relative}.counted-action{display:flex;align-items:center}.count-indicator{font-size:9pt;padding:0 3px;border-radius:3px;border:1px solid #333}header{position:relative;margin-bottom:1em}header div{display:flex;align-items:center;height:30px}header button{color:#666}header label{text-transform:uppercase;z-index:1;font-size:12pt;letter-spacing:2px;font-weight:100;color:#333;margin:0 auto 0 0;display:block;width:fit-content;position:relative;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}header:after{content:\"\";border:1px solid;border-color:#ccc;height:0px;width:100%;display:block;position:relative;z-index:0}.points{width:33%;max-width:50em;display:flex;flex-direction:column}:host.point-focus .points{width:66%;max-width:50em}:host.point-focus .points .points-section{opacity:0;pointer-events:none}:host.point-focus .points .point-focus{opacity:1;pointer-events:initial}:host.point-focus .points .point-focus .actions{display:flex}banta-comments{flex-grow:1}.points{width:33%;margin-left:.5em;font-size:12pt;flex-shrink:0;max-width:30em;transition:.2s width ease-in,.2s max-width ease-in;position:relative}.points .points-section{flex-grow:1;display:flex;flex-direction:column;opacity:1;transition:.2s opacity ease-in;z-index:2}.points .point-focus{position:absolute;width:100%;inset:1.75em 0 0;padding:.5em;opacity:0;transition:.2s opacity ease-in;flex-grow:1;display:flex;flex-direction:column}.firehose{flex-grow:1;font-size:10pt;display:flex;flex-direction:column}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:#000;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:#000;color:#fff;border:1px solid #333;width:100%;height:1em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}.subcomments ::ng-deep banta-comment{font-size:10pt}.subcomments ::ng-deep banta-comment.focused-comment{background:#001321;color:#fff;font-size:12pt}.aux{width:0px;min-width:0px;overflow-x:hidden;transition:.4s width ease-out,.4s min-width ease-out;display:flex;flex-direction:column}.aux.open{width:30em;min-width:18em}.aux .aux-contents{width:30em;min-width:10em;max-width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;flex-grow:1}.notifications .notification{border-bottom:1px solid #333;padding:1em}.notifications .notification banta-timestamp{display:block;text-align:right;font-size:9pt;color:#999}.message.reply{padding:1em}.tabs{display:none}@media (max-width: 1015px){:host{flex-direction:column}.tabs{display:flex;position:absolute;top:0;left:0;right:0;width:100%;z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#00000080}.points{width:100%;max-width:100%;margin-left:0}header{display:none}:host.point-focus .points{width:100%;max-width:100%}.aux{width:100%;min-width:initial;max-width:100%}.points,.firehose,.aux{position:absolute;inset:2em 0 0;z-index:0;background:#000}.points.focus,.firehose.focus,.aux.focus{z-index:2}}:host-context(.mat-dark-theme) :host{background:#090909;color:#fff}:host-context(.mat-dark-theme) form textarea{background:#ccc;color:#333}:host-context(.mat-dark-theme) header:after{border-color:#222}:host-context(.mat-dark-theme) header label{color:#aaa}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.TimestampComponent, selector: "banta-timestamp", inputs: ["value"] }, { kind: "component", type: i6.CommentComponent, selector: "banta-comment", inputs: ["message", "customMenuItems", "showReplyAction", "maxLength", "permissions", "mine", "editing", "genericAvatarUrl", "readonly"], outputs: ["liked", "unliked", "selected", "edited", "deleted", "editStarted", "editEnded", "shared", "userSelected", "usernameSelected", "avatarSelected", "reported", "loaded", "pinned", "unpinned"] }, { kind: "component", type: i7.CommentViewComponent, selector: "banta-comment-view", inputs: ["source", "maxMessages", "maxVisibleMessages", "collapsePins", "newestLast", "holdNewMessages", "showEmptyState", "emptyStateMessage", "allowReplies", "enableHoldOnClick", "enableHoldOnScroll", "customMenuItems", "fixedHeight", "selectedMessage", "genericAvatarUrl"], outputs: ["userSelected", "reported", "liked", "unliked", "pinned", "unpinned", "usernameSelected", "avatarSelected", "shared", "deleted", "selected", "messageEdited", "sortOrderChanged", "filterModeChanged"] }, { kind: "component", type: i8.BantaCommentsComponent, selector: "banta-comments", inputs: ["customMenuItems", "url", "maxCommentLength", "loadingMessages", "useInlineReplies", "signInLabel", "sendLabel", "signingInLabel", "replyLabel", "sendingLabel", "permissionDeniedLabel", "postCommentLabel", "postReplyLabel", "allowAttachments", "allowServerInfoRequest", "fixedHeight", "maxMessages", "maxVisibleMessages", "genericAvatarUrl", "shouldInterceptMessageSend", "participants", "source", "hashtags", "topicID", "sortOrder", "filterMode", "initialMessageCount", "metadata"], outputs: ["signInSelected", "editAvatarSelected", "permissionDeniedError", "upvoted", "reported", "selected", "userSelected", "usernameSelected", "avatarSelected", "shared", "reconnectRequested"] }, { kind: "component", type: i9.BantaChatComponent, selector: "banta-chat", inputs: ["shouldInterceptMessageSend", "url", "source", "topicID", "metadata", "signInLabel", "sendLabel", "permissionDeniedLabel", "messageFieldPlaceholder", "emptyLabel"], outputs: ["selected", "reported", "upvoted", "userSelected", "permissionDeniedError", "signInSelected", "received"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i11.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i11.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i13.LiveMessageComponent, selector: "banta-live-message", inputs: ["message"], outputs: ["upvoted", "reported", "selected"] }] }); }
|
|
186
|
-
}
|
|
187
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaComponent, decorators: [{
|
|
188
|
-
type: Component,
|
|
189
|
-
args: [{ selector: `banta`, template: "\r\n<mat-menu #userMenu=\"matMenu\">\r\n <ng-container *ngIf=\"currentUser\">\r\n <button [disabled]=\"true\" mat-menu-item>{{currentUser.displayName}} (@{{currentUser.username}})</button>\r\n <button mat-menu-item (click)=\"signOut()\">Sign Out</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"!currentUser\">\r\n <button mat-menu-item>Sign In</button>\r\n </ng-container>\r\n <button mat-menu-item>Help</button>\r\n</mat-menu>\r\n\r\n<div class=\"tabs\">\r\n <div>\r\n <a mat-button (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</a>\r\n <a mat-button (click)=\"mobileFocus = 'comments'\">{{commentsLabel}}</a>\r\n </div>\r\n <div class=\"spacer\"></div>\r\n <div>\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"firehose\" [class.focus]=\"mobileFocus === 'chat'\">\r\n <header>\r\n <div>\r\n <label (click)=\"mobileFocus = 'chat'\">{{chatLabel}}</label>\r\n <div class=\"spacer\"></div>\r\n\r\n <ng-container *ngIf=\"currentUser\">\r\n <button mat-button [matMenuTriggerFor]=\"userMenu\">\r\n @{{currentUser.username}}\r\n </button>\r\n <button mat-icon-button (click)=\"showNotifications()\">\r\n <mat-icon>notification_important</mat-icon>\r\n </button>\r\n </ng-container>\r\n \r\n <button mat-button *ngIf=\"!currentUser\" (click)=\"showSignIn()\">\r\n Sign In\r\n </button>\r\n </div>\r\n </header>\r\n <banta-chat \r\n #firehose\r\n [source]=\"firehoseSource\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n (reported)=\"reportMessage($event)\"\r\n ></banta-chat>\r\n</div>\r\n\r\n<div class=\"aux\" [class.focus]=\"mobileFocus === 'aux'\" [class.open]=\"auxOpen\">\r\n <header>\r\n <div>\r\n <label>{{auxTitle}}</label>\r\n <div class=\"spacer\"></div>\r\n <button mat-icon-button (click)=\"auxOpen = false\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </header>\r\n <div class=\"aux-contents\">\r\n <ng-container *ngIf=\"auxMode === 'profile'\">\r\n <ng-container *ngIf=\"profileUser\">\r\n\r\n <div>\r\n <strong style=\"font-size: 125%;\">\r\n {{profileUser.displayName}}\r\n </strong>\r\n @{{profileUser.username}}\r\n </div>\r\n\r\n <br/>\r\n <strong>Top Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n\r\n <br/>\r\n <strong>Recent Messages</strong>\r\n\r\n <div>\r\n <em>Not yet available</em>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'report'\">\r\n <p>Are you sure you want to report this message?</p>\r\n\r\n <banta-live-message [message]=\"reportedMessage\"></banta-live-message>\r\n\r\n <div style=\"text-align: center;\">\r\n <button mat-raised-button color=\"primary\" (click)=\"sendReport(reportedMessage)\">Yes, Report</button>\r\n \r\n <button mat-raised-button color=\"secondary\" (click)=\"auxOpen = false\">No, Cancel</button>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"auxMode === 'notifications'\">\r\n\r\n <div *ngIf=\"!notifications || notifications.length === 0\">\r\n <em>You do not have any notifications yet</em>\r\n </div>\r\n \r\n <div class=\"notifications\">\r\n <div class=\"notification\" *ngFor=\"let notif of notifications\">\r\n <div>\r\n <ng-container *ngIf=\"notif.type === 'upvote'\">\r\n @{{notif.message?.user?.username}} upvoted your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'notice'\">\r\n <div>\r\n {{notif.message}}\r\n </div>\r\n <a mat-button target=\"_blank\" href=\"{{notif.actionUrl}}\">\r\n {{notif.actionLabel}}\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'mention'\">\r\n You were mentioned by @{{notif.message?.user?.username}}\r\n\r\n <banta-live-message\r\n [message]=\"notif.message\"\r\n (upvoted)=\"upvoteMessage(notif.message)\"\r\n (reported)=\"reportMessage(notif.message)\"\r\n (selected)=\"goToMessage(notif.message)\">\r\n </banta-live-message>\r\n\r\n </ng-container>\r\n <ng-container *ngIf=\"notif.type === 'reply'\">\r\n @{{notif.replyMessage?.user?.username}} replied to your post\r\n \r\n <banta-live-message\r\n [message]=\"notif.replyMessage\"\r\n (upvoted)=\"upvoteMessage(notif.replyMessage)\"\r\n (reported)=\"reportMessage(notif.replyMessage)\"\r\n (selected)=\"goToMessage(notif.replyMessage)\">\r\n </banta-live-message>\r\n </ng-container>\r\n </div>\r\n\r\n <banta-timestamp [value]=\"notif.sentAt\"></banta-timestamp>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n<div class=\"points\" [class.focus]=\"mobileFocus === 'points'\">\r\n <header>\r\n <div>\r\n <label>{{commentsLabel}}</label>\r\n </div>\r\n </header>\r\n <div class=\"point-focus\">\r\n <div class=\"actions\">\r\n <button mat-button (click)=\"pointUnfocus()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n Back\r\n </button>\r\n\r\n <div class=\"spacer\"></div>\r\n \r\n <ng-container *ngIf=\"pointOpen\">\r\n <div class=\"counted-action\">\r\n <div class=\"count-indicator\"> \r\n {{pointOpen.likes}}\r\n </div>\r\n <button mat-icon-button>\r\n <mat-icon>thumb_up</mat-icon>\r\n </button>\r\n </div>\r\n\r\n </ng-container>\r\n </div>\r\n\r\n <div *ngIf=\"!pointSubChat\">\r\n Error: No subchat\r\n </div>\r\n \r\n <banta-comment-view\r\n class=\"subcomments\"\r\n *ngIf=\"pointSubChat\"\r\n [newestLast]=\"true\"\r\n [allowReplies]=\"false\"\r\n [source]=\"pointSubChat\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n >\r\n \r\n <banta-comment\r\n class=\"focused-comment\"\r\n data-before\r\n *ngIf=\"pointOpen\"\r\n [showReplyAction]=\"false\"\r\n [message]=\"pointOpen\"\r\n [readonly]=\"pointSubChat?.readonly\"\r\n (upvoted)=\"upvoteMessage(pointOpen)\"\r\n (userSelected)=\"showProfile(pointOpen.user)\"\r\n (reported)=\"reportMessage(pointOpen)\"\r\n ></banta-comment>\r\n \r\n <div class=\"message reply\">\r\n Reply:\r\n <form class=\"new-message\" (submit)=\"sendPointSubMessage()\">\r\n <textarea \r\n name=\"message\" \r\n (keydown)=\"newPointSubMessageKeyDown($event)\"\r\n [(ngModel)]=\"newPointSubMessage.message\"></textarea>\r\n \r\n <div class=\"actions\">\r\n <button [disabled]=\"!newPointSubMessage.message\" \r\n mat-raised-button color=\"primary\">Send</button>\r\n </div>\r\n </form>\r\n </div>\r\n </banta-comment-view>\r\n </div>\r\n <div class=\"points-section\">\r\n <banta-comments\r\n [source]=\"pointSource\"\r\n [allowServerInfoRequest]=\"allowServerInfoRequest\"\r\n (signInSelected)=\"showSignIn()\"\r\n (upvoted)=\"upvoteMessage($event)\"\r\n (reported)=\"reportMessage($event)\"\r\n (selected)=\"goToMessage($event)\"\r\n (userSelected)=\"showProfile($event.user)\"\r\n ></banta-comments>\r\n </div>\r\n</div>", styles: [":host{display:flex;flex-direction:row;padding:.5em;height:40em;position:relative}.counted-action{display:flex;align-items:center}.count-indicator{font-size:9pt;padding:0 3px;border-radius:3px;border:1px solid #333}header{position:relative;margin-bottom:1em}header div{display:flex;align-items:center;height:30px}header button{color:#666}header label{text-transform:uppercase;z-index:1;font-size:12pt;letter-spacing:2px;font-weight:100;color:#333;margin:0 auto 0 0;display:block;width:fit-content;position:relative;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}header:after{content:\"\";border:1px solid;border-color:#ccc;height:0px;width:100%;display:block;position:relative;z-index:0}.points{width:33%;max-width:50em;display:flex;flex-direction:column}:host.point-focus .points{width:66%;max-width:50em}:host.point-focus .points .points-section{opacity:0;pointer-events:none}:host.point-focus .points .point-focus{opacity:1;pointer-events:initial}:host.point-focus .points .point-focus .actions{display:flex}banta-comments{flex-grow:1}.points{width:33%;margin-left:.5em;font-size:12pt;flex-shrink:0;max-width:30em;transition:.2s width ease-in,.2s max-width ease-in;position:relative}.points .points-section{flex-grow:1;display:flex;flex-direction:column;opacity:1;transition:.2s opacity ease-in;z-index:2}.points .point-focus{position:absolute;width:100%;inset:1.75em 0 0;padding:.5em;opacity:0;transition:.2s opacity ease-in;flex-grow:1;display:flex;flex-direction:column}.firehose{flex-grow:1;font-size:10pt;display:flex;flex-direction:column}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:#000;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:#000;color:#fff;border:1px solid #333;width:100%;height:1em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}.subcomments ::ng-deep banta-comment{font-size:10pt}.subcomments ::ng-deep banta-comment.focused-comment{background:#001321;color:#fff;font-size:12pt}.aux{width:0px;min-width:0px;overflow-x:hidden;transition:.4s width ease-out,.4s min-width ease-out;display:flex;flex-direction:column}.aux.open{width:30em;min-width:18em}.aux .aux-contents{width:30em;min-width:10em;max-width:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;flex-grow:1}.notifications .notification{border-bottom:1px solid #333;padding:1em}.notifications .notification banta-timestamp{display:block;text-align:right;font-size:9pt;color:#999}.message.reply{padding:1em}.tabs{display:none}@media (max-width: 1015px){:host{flex-direction:column}.tabs{display:flex;position:absolute;top:0;left:0;right:0;width:100%;z-index:10;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);background:#00000080}.points{width:100%;max-width:100%;margin-left:0}header{display:none}:host.point-focus .points{width:100%;max-width:100%}.aux{width:100%;min-width:initial;max-width:100%}.points,.firehose,.aux{position:absolute;inset:2em 0 0;z-index:0;background:#000}.points.focus,.firehose.focus,.aux.focus{z-index:2}}:host-context(.mat-dark-theme) :host{background:#090909;color:#fff}:host-context(.mat-dark-theme) form textarea{background:#ccc;color:#333}:host-context(.mat-dark-theme) header:after{border-color:#222}:host-context(.mat-dark-theme) header label{color:#aaa}\n"] }]
|
|
190
|
-
}], ctorParameters: () => [{ type: i1.ChatBackendBase }, { type: i2.MatDialog }], propDecorators: { firehose: [{
|
|
191
|
-
type: ViewChild,
|
|
192
|
-
args: ['firehose', { static: true }]
|
|
193
|
-
}], topicID: [{
|
|
194
|
-
type: Input
|
|
195
|
-
}], chatLabel: [{
|
|
196
|
-
type: Input
|
|
197
|
-
}], commentsLabel: [{
|
|
198
|
-
type: Input
|
|
199
|
-
}], allowServerInfoRequest: [{
|
|
200
|
-
type: Input
|
|
201
|
-
}], signInSelected: [{
|
|
202
|
-
type: Output
|
|
203
|
-
}], hasPoint: [{
|
|
204
|
-
type: HostBinding,
|
|
205
|
-
args: ['class.point-focus']
|
|
206
|
-
}] } });
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvYmFudGEvYmFudGEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvYmFudGEvYmFudGEuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RSxPQUFPLEVBQUUsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUd6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFJdkM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sY0FBYztJQUN2QixZQUNZLE9BQXlCLEVBQ3pCLFNBQXFCO1FBRHJCLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLGNBQVMsR0FBVCxTQUFTLENBQVk7UUFRekIsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbkMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixhQUFRLEdBQUcsZUFBZSxDQUFDO1FBQzNCLFlBQU8sR0FBRyxlQUFlLENBQUM7UUFVMUIsZ0JBQVcsR0FBWSxJQUFJLENBQUM7UUF5RTVCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQStCaEIsY0FBUyxHQUFHLE1BQU0sQ0FBQztRQUNuQixrQkFBYSxHQUFHLFVBQVUsQ0FBQztRQUMzQiwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFjaEMsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBOEI5QyxjQUFTLEdBQWlCLElBQUksQ0FBQztRQUMvQixpQkFBWSxHQUFvQixJQUFJLENBQUM7UUEwQ3JDLHVCQUFrQixHQUFvQixFQUFFLENBQUM7UUFFekMscUJBQWdCLEdBQUcsaU1BQWlNLENBQUM7SUF2TnJOLENBQUM7SUFZRCxRQUFRO1FBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ25HLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBSUQsS0FBSyxDQUFDLG1CQUFtQjtRQUNyQixJQUFJLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFckMsSUFBSSxJQUFJLEtBQUssRUFBRTtZQUNYLE9BQU87UUFFWCxJQUFJLE9BQU8sR0FBaUI7WUFDeEIsSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNsQixLQUFLLEVBQUUsQ0FBQztZQUNSLE9BQU8sRUFBRSxJQUFJO1NBQ2hCLENBQUM7UUFFRixJQUFJLENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsQ0FBQztJQUNMLENBQUM7SUFLRCxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQXFCO1FBRW5DLElBQUksYUFBYSxHQUFHLE9BQU8sQ0FBQztRQUU1QixJQUFJLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQix1Q0FBdUM7WUFFdkMsSUFBSSxhQUEwQixDQUFDO1lBRS9CLElBQUksQ0FBQztnQkFDRCxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM1RixDQUFDO1lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7Z0JBQ25FLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsQ0FBQztZQUVELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQ0FBb0MsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztnQkFDaEcsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMzQixPQUFPO1lBQ1gsQ0FBQztZQUVELE9BQU8sR0FBRyxhQUFhLENBQUM7UUFDNUIsQ0FBQztRQUVELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFekMsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO29CQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7WUFDekIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkYsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDakMsQ0FBQzthQUFNLElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDTCxDQUFDO0lBS0QsWUFBWTtRQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzdCLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFjLEVBQUUsSUFBYTtRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBTUQsSUFBSSxPQUFPLENBQUMsS0FBSztRQUNiLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXRCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYyxDQUFDLEVBQVc7UUFDcEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBSUQsSUFDSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLO2dCQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQy9CLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSztnQkFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztJQUVELElBQ0ksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQUtELFFBQVE7UUFDSixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXFCO1FBQzdCLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1lBQ3JDLE9BQU8sTUFBTSxDQUFDO2FBQ2IsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFDMUMsT0FBTyxTQUFTLENBQUM7UUFFckIsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBcUI7UUFDckMsT0FBTztRQUNQLDZDQUE2QztJQUNqRCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVc7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBTUQsVUFBVSxDQUFDLE9BQXFCO1FBQzVCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBcUI7UUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1RSxDQUFDOzhHQXROUSxjQUFjO2tHQUFkLGNBQWMsMFpDakIzQixnc1VBNlBNOzsyRkQ1T08sY0FBYztrQkFMMUIsU0FBUzsrQkFDSSxPQUFPOzRHQXNEakIsUUFBUTtzQkFEUCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBNEVuQyxPQUFPO3NCQURWLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFpQkYsY0FBYztzQkFEakIsTUFBTTtnQkF3QkgsUUFBUTtzQkFEWCxXQUFXO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCwgSG9zdEJpbmRpbmcgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBOZXdNZXNzYWdlRm9ybSwgQ2hhdE1lc3NhZ2UsIFVzZXIsIE5vdGlmaWNhdGlvbiB9IGZyb20gJ0BiYW50YS9jb21tb24nO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQmFudGFDaGF0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2hhdCc7XHJcbmltcG9ydCB7IE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENoYXRCYWNrZW5kQmFzZSB9IGZyb20gXCIuLi9jaGF0LWJhY2tlbmQtYmFzZVwiO1xyXG5pbXBvcnQgeyBDaGF0U291cmNlQmFzZSB9IGZyb20gXCIuLi9jaGF0LXNvdXJjZS1iYXNlXCI7XHJcblxyXG4vKipcclxuICogVW5pZmllZCBjaGF0IGFuZCBjb21tZW50cyBjb21wb25lbnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IGBiYW50YWAsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFudGEuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbICcuL2JhbnRhLmNvbXBvbmVudC5zY3NzJyBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW50YUNvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGJhY2tlbmQgOiBDaGF0QmFja2VuZEJhc2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtYXREaWFsb2cgOiBNYXREaWFsb2dcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIGZpcmVob3NlU291cmNlIDogQ2hhdFNvdXJjZUJhc2U7XHJcbiAgICBwb2ludFNvdXJjZSA6IENoYXRTb3VyY2VCYXNlO1xyXG5cclxuICAgIHByaXZhdGUgX3RvcGljSUQgOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIF9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICAgIGF1eE9wZW4gPSBmYWxzZTtcclxuICAgIGF1eFRpdGxlID0gJ05vdGlmaWNhdGlvbnMnO1xyXG4gICAgYXV4TW9kZSA9ICdub3RpZmljYXRpb25zJztcclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmJhY2tlbmQudXNlckNoYW5nZWQuc3Vic2NyaWJlKHVzZXIgPT4gdGhpcy5jdXJyZW50VXNlciA9IHVzZXIpKTtcclxuICAgICAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmJhY2tlbmQubm90aWZpY2F0aW9uc0NoYW5nZWQuc3Vic2NyaWJlKG5vdGlmcyA9PiB0aGlzLm5vdGlmaWNhdGlvbnMgPSBub3RpZnMpKTtcclxuICAgICAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmJhY2tlbmQubmV3Tm90aWZpY2F0aW9uLnN1YnNjcmliZShub3RpZiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld05vdGlmaWNhdGlvbnMgPSB0cnVlO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgbW9iaWxlRm9jdXMgOiBzdHJpbmcgPSBudWxsO1xyXG5cclxuICAgIGFzeW5jIHNlbmRQb2ludFN1Yk1lc3NhZ2UoKSB7XHJcbiAgICAgICAgbGV0IHRleHQgPSAodGhpcy5uZXdQb2ludFN1Yk1lc3NhZ2UubWVzc2FnZSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgIHRoaXMubmV3UG9pbnRTdWJNZXNzYWdlLm1lc3NhZ2UgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKHRleHQgPT09ICcnKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgbGV0IG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSA9IHtcclxuICAgICAgICAgICAgdXNlcjogbnVsbCxcclxuICAgICAgICAgICAgc2VudEF0OiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICBsaWtlczogMCxcclxuICAgICAgICAgICAgbWVzc2FnZTogdGV4dFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucG9pbnRTdWJDaGF0LnNlbmQobWVzc2FnZSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gc2VuZCBwb2ludCBzdWItbWVzc2FnZTpgKTtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnZmlyZWhvc2UnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gICAgZmlyZWhvc2UgOiBCYW50YUNoYXRDb21wb25lbnQ7XHJcblxyXG4gICAgYXN5bmMgZ29Ub01lc3NhZ2UobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcblxyXG4gICAgICAgIGxldCB0YXJnZXRNZXNzYWdlID0gbWVzc2FnZTtcclxuXHJcbiAgICAgICAgaWYgKG1lc3NhZ2UucGFyZW50TWVzc2FnZUlkKSB7XHJcbiAgICAgICAgICAgIC8vIGp1bXAgdG8gdGhlIHBhcmVudCBtZXNzYWdlIHRocmVhZC4uLlxyXG5cclxuICAgICAgICAgICAgbGV0IHBhcmVudE1lc3NhZ2U6IENoYXRNZXNzYWdlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHBhcmVudE1lc3NhZ2UgPSBhd2FpdCB0aGlzLmJhY2tlbmQuZ2V0TWVzc2FnZShtZXNzYWdlLnRvcGljSWQsIG1lc3NhZ2UucGFyZW50TWVzc2FnZUlkKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgUmVjZWl2ZWQgZXhjZXB0aW9uIHdoaWxlIGZldGNoaW5nIHBhcmVudCBtZXNzYWdlOmApO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXJlbnRNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9vayB1cCBwYXJlbnQgbWVzc2FnZSAke21lc3NhZ2UudG9waWNJZH0vJHttZXNzYWdlLnBhcmVudE1lc3NhZ2VJZH1gKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYE9yaWdpbmFsIG1lc3NhZ2Ugd2FzOmApO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5kaXIodGFyZ2V0TWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBwYXJlbnRNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHZpZXdUeXBlID0gdGhpcy5nZXRWaWV3VHlwZShtZXNzYWdlKTtcclxuXHJcbiAgICAgICAgaWYgKHZpZXdUeXBlID09PSAnY29tbWVudCcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucG9pbnRTdWJDaGF0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wb2ludFN1YkNoYXQuY2xvc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb2ludFN1YkNoYXQuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRTdWJDaGF0ID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1vYmlsZUZvY3VzID0gJ3BvaW50cyc7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRPcGVuID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgdGhpcy5wb2ludFN1YkNoYXQgPSBhd2FpdCB0aGlzLmJhY2tlbmQuZ2V0U291cmNlRm9yVGhyZWFkKG1lc3NhZ2UudG9waWNJZCwgbWVzc2FnZS5pZCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRPcGVuID0gYXdhaXQgdGhpcy5iYWNrZW5kLnJlZnJlc2hNZXNzYWdlKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLm5ld1BvaW50U3ViTWVzc2FnZSA9IHt9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAodmlld1R5cGUgPT09ICdjaGF0Jykge1xyXG4gICAgICAgICAgICB0aGlzLm1vYmlsZUZvY3VzID0gJ2ZpcmVob3NlJztcclxuICAgICAgICAgICAgdGhpcy5maXJlaG9zZS5qdW1wVG9NZXNzYWdlKG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBub3RpZmljYXRpb25zIDogTm90aWZpY2F0aW9uW107XHJcbiAgICBuZXdOb3RpZmljYXRpb25zID0gZmFsc2U7XHJcbiAgICBcclxuICAgIHBvaW50VW5mb2N1cygpIHtcclxuICAgICAgICB0aGlzLnBvaW50T3BlbiA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMucG9pbnRTdWJDaGF0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvaW50U3ViQ2hhdC5jbG9zZSlcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRTdWJDaGF0LmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRTdWJDaGF0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5fc3Vicy51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dBdXgodGl0bGUgOiBzdHJpbmcsIG1vZGUgOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmF1eE9wZW4gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYXV4VGl0bGUgPSB0aXRsZTtcclxuICAgICAgICB0aGlzLmF1eE1vZGUgPSBtb2RlO1xyXG4gICAgICAgIHRoaXMubW9iaWxlRm9jdXMgPSAnYXV4JztcclxuICAgIH1cclxuXHJcbiAgICBzaG93Tm90aWZpY2F0aW9ucygpIHtcclxuICAgICAgICB0aGlzLnNob3dBdXgoJ05vdGlmaWNhdGlvbnMnLCAnbm90aWZpY2F0aW9ucycpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBnZXQgdG9waWNJRCgpIDogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdG9waWNJRDtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBjaGF0TGFiZWwgPSAnQ2hhdCc7XHJcbiAgICBASW5wdXQoKSBjb21tZW50c0xhYmVsID0gJ0NvbW1lbnRzJztcclxuICAgIEBJbnB1dCgpIGFsbG93U2VydmVySW5mb1JlcXVlc3QgPSBmYWxzZTtcclxuXHJcbiAgICBzZXQgdG9waWNJRCh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuX3RvcGljSUQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdFRvVG9waWModGhpcy5fdG9waWNJRCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBjb25uZWN0VG9Ub3BpYyhpZCA6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZmlyZWhvc2VTb3VyY2UgPSBhd2FpdCB0aGlzLmJhY2tlbmQuZ2V0U291cmNlRm9yVG9waWMoYCR7aWR9X2ZpcmVob3NlYCk7XHJcbiAgICAgICAgdGhpcy5wb2ludFNvdXJjZSA9IGF3YWl0IHRoaXMuYmFja2VuZC5nZXRTb3VyY2VGb3JUb3BpYyhgJHtpZH1fdGhlcG9pbnRgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zaWduSW5TZWxlY3RlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgc2lnbkluU2VsZWN0ZWQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25JblNlbGVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dTaWduSW4oKSB7XHJcbiAgICAgICAgdGhpcy5fc2lnbkluU2VsZWN0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpcmVob3NlU291cmNlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpcmVob3NlU291cmNlLmNsb3NlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlaG9zZVNvdXJjZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVob3NlU291cmNlID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBvaW50U291cmNlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvaW50U291cmNlLmNsb3NlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludFNvdXJjZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50U291cmNlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wb2ludC1mb2N1cycpXHJcbiAgICBnZXQgaGFzUG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucG9pbnRPcGVuICE9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcG9pbnRPcGVuIDogQ2hhdE1lc3NhZ2UgPSBudWxsO1xyXG4gICAgcG9pbnRTdWJDaGF0IDogQ2hhdFNvdXJjZUJhc2UgPSBudWxsO1xyXG5cclxuICAgIGNsb3NlQXV4KCkge1xyXG4gICAgICAgIHRoaXMuYXV4T3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubW9iaWxlRm9jdXMgPSAnZmlyZWhvc2UnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFZpZXdUeXBlKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIGlmIChtZXNzYWdlLnRvcGljSWQuZW5kc1dpdGgoJ19maXJlaG9zZScpKVxyXG4gICAgICAgICAgICByZXR1cm4gJ2NoYXQnO1xyXG4gICAgICAgIGVsc2UgaWYgKG1lc3NhZ2UudG9waWNJZC5lbmRzV2l0aCgnX3RoZXBvaW50JykpXHJcbiAgICAgICAgICAgIHJldHVybiAnY29tbWVudCc7XHJcblxyXG4gICAgICAgIHJldHVybiAnY29tbWVudCc7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXB2b3RlTWVzc2FnZShtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgLy9hd2FpdCB0aGlzLmJhY2tlbmQubGlrZU1lc3NhZ2UobWVzc2FnZS5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1Byb2ZpbGUodXNlciA6IFVzZXIpIHtcclxuICAgICAgICB0aGlzLnByb2ZpbGVVc2VyID0gdXNlcjtcclxuICAgICAgICB0aGlzLnNob3dBdXgoYEAke3VzZXIudXNlcm5hbWV9J3MgUHJvZmlsZWAsICdwcm9maWxlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvZmlsZVVzZXIgOiBVc2VyO1xyXG4gICAgXHJcbiAgICByZXBvcnRlZE1lc3NhZ2UgOiBDaGF0TWVzc2FnZTtcclxuXHJcbiAgICBzZW5kUmVwb3J0KG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuYXV4T3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIGFsZXJ0KCd3b3VsZCBzZW5kIHJlcG9ydCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlcG9ydE1lc3NhZ2UobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRlZE1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgICAgIHRoaXMuc2hvd0F1eChgUmVwb3J0IG1lc3NhZ2UgZnJvbSBAJHttZXNzYWdlLnVzZXIudXNlcm5hbWV9YCwgJ3JlcG9ydCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGN1cnJlbnRVc2VyIDogVXNlcjtcclxuXHJcbiAgICBuZXdQb2ludFN1Yk1lc3NhZ2UgOiBOZXdNZXNzYWdlRm9ybSA9IHt9O1xyXG5cclxuICAgIGdlbmVyaWNBdmF0YXJVcmwgPSAnaHR0cHM6Ly9ncmF2YXRhci5jb20vYXZhdGFyLzkxNWM4MDRlMGJlNjA3YTRhZDc2NmRkYWRlYTVjNDhhP3M9NTEyJmQ9aHR0cHM6Ly9jb2RlcGVuLmlvL2Fzc2V0cy9hdmF0YXJzL3VzZXItYXZhdGFyLTUxMng1MTItNmUyNDBjZjM1MGQyZjFjYzA3YzJiZWQyMzRjM2EzYmI1ZjFiMjM3MDIzYzIwNGM3ODI2MjJlODBkNmIyMTJiYS5wbmcnO1xyXG59IiwiXHJcbjxtYXQtbWVudSAjdXNlck1lbnU9XCJtYXRNZW51XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFVzZXJcIj5cclxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJ0cnVlXCIgbWF0LW1lbnUtaXRlbT57e2N1cnJlbnRVc2VyLmRpc3BsYXlOYW1lfX0gKCYjNjQ7e3tjdXJyZW50VXNlci51c2VybmFtZX19KTwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic2lnbk91dCgpXCI+U2lnbiBPdXQ8L2J1dHRvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjdXJyZW50VXNlclwiPlxyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbT5TaWduIEluPC9idXR0b24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbT5IZWxwPC9idXR0b24+XHJcbjwvbWF0LW1lbnU+XHJcblxyXG48ZGl2IGNsYXNzPVwidGFic1wiPlxyXG4gICAgPGRpdj5cclxuICAgICAgICA8YSBtYXQtYnV0dG9uIChjbGljayk9XCJtb2JpbGVGb2N1cyA9ICdjaGF0J1wiPnt7Y2hhdExhYmVsfX08L2E+XHJcbiAgICAgICAgPGEgbWF0LWJ1dHRvbiAoY2xpY2spPVwibW9iaWxlRm9jdXMgPSAnY29tbWVudHMnXCI+e3tjb21tZW50c0xhYmVsfX08L2E+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cclxuICAgIDxkaXY+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRVc2VyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidXNlck1lbnVcIj5cclxuICAgICAgICAgICAgICAgICYjNjQ7e3tjdXJyZW50VXNlci51c2VybmFtZX19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2hvd05vdGlmaWNhdGlvbnMoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPm5vdGlmaWNhdGlvbl9pbXBvcnRhbnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICBcclxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCIhY3VycmVudFVzZXJcIiAoY2xpY2spPVwic2hvd1NpZ25JbigpXCI+XHJcbiAgICAgICAgICAgIFNpZ24gSW5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJmaXJlaG9zZVwiIFtjbGFzcy5mb2N1c109XCJtb2JpbGVGb2N1cyA9PT0gJ2NoYXQnXCI+XHJcbiAgICA8aGVhZGVyPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxsYWJlbCAoY2xpY2spPVwibW9iaWxlRm9jdXMgPSAnY2hhdCdcIj57e2NoYXRMYWJlbH19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRVc2VyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInVzZXJNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgJiM2NDt7e2N1cnJlbnRVc2VyLnVzZXJuYW1lfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNob3dOb3RpZmljYXRpb25zKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bm90aWZpY2F0aW9uX2ltcG9ydGFudDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKm5nSWY9XCIhY3VycmVudFVzZXJcIiAoY2xpY2spPVwic2hvd1NpZ25JbigpXCI+XHJcbiAgICAgICAgICAgICAgICBTaWduIEluXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9oZWFkZXI+XHJcbiAgICA8YmFudGEtY2hhdCBcclxuICAgICAgICAjZmlyZWhvc2VcclxuICAgICAgICBbc291cmNlXT1cImZpcmVob3NlU291cmNlXCJcclxuICAgICAgICAoc2lnbkluU2VsZWN0ZWQpPVwic2hvd1NpZ25JbigpXCJcclxuICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgICh1c2VyU2VsZWN0ZWQpPVwic2hvd1Byb2ZpbGUoJGV2ZW50LnVzZXIpXCJcclxuICAgICAgICAocmVwb3J0ZWQpPVwicmVwb3J0TWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICA+PC9iYW50YS1jaGF0PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJhdXhcIiBbY2xhc3MuZm9jdXNdPVwibW9iaWxlRm9jdXMgPT09ICdhdXgnXCIgW2NsYXNzLm9wZW5dPVwiYXV4T3BlblwiPlxyXG4gICAgPGhlYWRlcj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bGFiZWw+e3thdXhUaXRsZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYXV4T3BlbiA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvaGVhZGVyPlxyXG4gICAgPGRpdiBjbGFzcz1cImF1eC1jb250ZW50c1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhdXhNb2RlID09PSAncHJvZmlsZSdcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByb2ZpbGVVc2VyXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIHN0eWxlPVwiZm9udC1zaXplOiAxMjUlO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3Byb2ZpbGVVc2VyLmRpc3BsYXlOYW1lfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3N0cm9uZz5cclxuICAgICAgICAgICAgICAgICAgICAmIzY0O3t7cHJvZmlsZVVzZXIudXNlcm5hbWV9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJyLz5cclxuICAgICAgICAgICAgICAgIDxzdHJvbmc+VG9wIE1lc3NhZ2VzPC9zdHJvbmc+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZW0+Tm90IHlldCBhdmFpbGFibGU8L2VtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJyLz5cclxuICAgICAgICAgICAgICAgIDxzdHJvbmc+UmVjZW50IE1lc3NhZ2VzPC9zdHJvbmc+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZW0+Tm90IHlldCBhdmFpbGFibGU8L2VtPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV4TW9kZSA9PT0gJ3JlcG9ydCdcIj5cclxuICAgICAgICAgICAgPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlcG9ydCB0aGlzIG1lc3NhZ2U/PC9wPlxyXG5cclxuICAgICAgICAgICAgPGJhbnRhLWxpdmUtbWVzc2FnZSBbbWVzc2FnZV09XCJyZXBvcnRlZE1lc3NhZ2VcIj48L2JhbnRhLWxpdmUtbWVzc2FnZT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzZW5kUmVwb3J0KHJlcG9ydGVkTWVzc2FnZSlcIj5ZZXMsIFJlcG9ydDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgJm5ic3A7XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cImF1eE9wZW4gPSBmYWxzZVwiPk5vLCBDYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV4TW9kZSA9PT0gJ25vdGlmaWNhdGlvbnMnXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIW5vdGlmaWNhdGlvbnMgfHwgbm90aWZpY2F0aW9ucy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgIDxlbT5Zb3UgZG8gbm90IGhhdmUgYW55IG5vdGlmaWNhdGlvbnMgeWV0PC9lbT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vdGlmaWNhdGlvblwiICpuZ0Zvcj1cImxldCBub3RpZiBvZiBub3RpZmljYXRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vdGlmLnR5cGUgPT09ICd1cHZvdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIzY0O3t7bm90aWYubWVzc2FnZT8udXNlcj8udXNlcm5hbWV9fSB1cHZvdGVkIHlvdXIgcG9zdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmFudGEtbGl2ZS1tZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwibm90aWYubWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVwdm90ZWQpPVwidXB2b3RlTWVzc2FnZShub3RpZi5tZXNzYWdlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2Uobm90aWYubWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJnb1RvTWVzc2FnZShub3RpZi5tZXNzYWdlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9iYW50YS1saXZlLW1lc3NhZ2U+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vdGlmLnR5cGUgPT09ICdub3RpY2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bm90aWYubWVzc2FnZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG1hdC1idXR0b24gdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cInt7bm90aWYuYWN0aW9uVXJsfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e25vdGlmLmFjdGlvbkxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub3RpZi50eXBlID09PSAnbWVudGlvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSB3ZXJlIG1lbnRpb25lZCBieSAmIzY0O3t7bm90aWYubWVzc2FnZT8udXNlcj8udXNlcm5hbWV9fVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiYW50YS1saXZlLW1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWVzc2FnZV09XCJub3RpZi5tZXNzYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKG5vdGlmLm1lc3NhZ2UpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVwb3J0ZWQpPVwicmVwb3J0TWVzc2FnZShub3RpZi5tZXNzYWdlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkKT1cImdvVG9NZXNzYWdlKG5vdGlmLm1lc3NhZ2UpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2JhbnRhLWxpdmUtbWVzc2FnZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm90aWYudHlwZSA9PT0gJ3JlcGx5J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiM2NDt7e25vdGlmLnJlcGx5TWVzc2FnZT8udXNlcj8udXNlcm5hbWV9fSByZXBsaWVkIHRvIHlvdXIgcG9zdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmFudGEtbGl2ZS1tZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21lc3NhZ2VdPVwibm90aWYucmVwbHlNZXNzYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKG5vdGlmLnJlcGx5TWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnRNZXNzYWdlKG5vdGlmLnJlcGx5TWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJnb1RvTWVzc2FnZShub3RpZi5yZXBseU1lc3NhZ2UpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2JhbnRhLWxpdmUtbWVzc2FnZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxiYW50YS10aW1lc3RhbXAgW3ZhbHVlXT1cIm5vdGlmLnNlbnRBdFwiPjwvYmFudGEtdGltZXN0YW1wPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicG9pbnRzXCIgW2NsYXNzLmZvY3VzXT1cIm1vYmlsZUZvY3VzID09PSAncG9pbnRzJ1wiPlxyXG4gICAgPGhlYWRlcj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8bGFiZWw+e3tjb21tZW50c0xhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9oZWFkZXI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicG9pbnQtZm9jdXNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInBvaW50VW5mb2N1cygpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfYmFjazwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICBCYWNrXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBvaW50T3BlblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50ZWQtYWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50LWluZGljYXRvclwiPiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7cG9pbnRPcGVuLmxpa2VzfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnRodW1iX3VwPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhcG9pbnRTdWJDaGF0XCI+XHJcbiAgICAgICAgICAgIEVycm9yOiBObyBzdWJjaGF0XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPGJhbnRhLWNvbW1lbnQtdmlld1xyXG4gICAgICAgICAgICBjbGFzcz1cInN1YmNvbW1lbnRzXCJcclxuICAgICAgICAgICAgKm5nSWY9XCJwb2ludFN1YkNoYXRcIlxyXG4gICAgICAgICAgICBbbmV3ZXN0TGFzdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2FsbG93UmVwbGllc109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtzb3VyY2VdPVwicG9pbnRTdWJDaGF0XCJcclxuICAgICAgICAgICAgKHVwdm90ZWQpPVwidXB2b3RlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICh1c2VyU2VsZWN0ZWQpPVwic2hvd1Byb2ZpbGUoJGV2ZW50LnVzZXIpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgPGJhbnRhLWNvbW1lbnRcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9jdXNlZC1jb21tZW50XCJcclxuICAgICAgICAgICAgICAgIGRhdGEtYmVmb3JlXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInBvaW50T3BlblwiXHJcbiAgICAgICAgICAgICAgICBbc2hvd1JlcGx5QWN0aW9uXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIFttZXNzYWdlXT1cInBvaW50T3BlblwiXHJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicG9pbnRTdWJDaGF0Py5yZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAodXB2b3RlZCk9XCJ1cHZvdGVNZXNzYWdlKHBvaW50T3BlbilcIlxyXG4gICAgICAgICAgICAgICAgKHVzZXJTZWxlY3RlZCk9XCJzaG93UHJvZmlsZShwb2ludE9wZW4udXNlcilcIlxyXG4gICAgICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2UocG9pbnRPcGVuKVwiXHJcbiAgICAgICAgICAgICAgICA+PC9iYW50YS1jb21tZW50PlxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZSByZXBseVwiPlxyXG4gICAgICAgICAgICAgICAgUmVwbHk6XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cIm5ldy1tZXNzYWdlXCIgKHN1Ym1pdCk9XCJzZW5kUG9pbnRTdWJNZXNzYWdlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJtZXNzYWdlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm5ld1BvaW50U3ViTWVzc2FnZUtleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3UG9pbnRTdWJNZXNzYWdlLm1lc3NhZ2VcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIW5ld1BvaW50U3ViTWVzc2FnZS5tZXNzYWdlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj5TZW5kPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvYmFudGEtY29tbWVudC12aWV3PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicG9pbnRzLXNlY3Rpb25cIj5cclxuICAgICAgICA8YmFudGEtY29tbWVudHNcclxuICAgICAgICAgICAgW3NvdXJjZV09XCJwb2ludFNvdXJjZVwiXHJcbiAgICAgICAgICAgIFthbGxvd1NlcnZlckluZm9SZXF1ZXN0XT1cImFsbG93U2VydmVySW5mb1JlcXVlc3RcIlxyXG4gICAgICAgICAgICAoc2lnbkluU2VsZWN0ZWQpPVwic2hvd1NpZ25JbigpXCJcclxuICAgICAgICAgICAgKHVwdm90ZWQpPVwidXB2b3RlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJnb1RvTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHVzZXJTZWxlY3RlZCk9XCJzaG93UHJvZmlsZSgkZXZlbnQudXNlcilcIlxyXG4gICAgICAgICAgICA+PC9iYW50YS1jb21tZW50cz5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Component } from "@angular/core";
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class BantaLogoComponent {
|
|
4
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaLogoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: BantaLogoComponent, selector: "banta-logo", ngImport: i0, template: `banta`, isInline: true, styles: [":host{font-family:Odibee Sans,sans-serif;font-size:40pt}:host.small{font-size:30pt}\n"] }); }
|
|
6
|
-
}
|
|
7
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaLogoComponent, decorators: [{
|
|
8
|
-
type: Component,
|
|
9
|
-
args: [{ selector: 'banta-logo', template: `banta`, styles: [":host{font-family:Odibee Sans,sans-serif;font-size:40pt}:host.small{font-size:30pt}\n"] }]
|
|
10
|
-
}] });
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtbG9nby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9iYW50YS1sb2dvLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWtCMUMsTUFBTSxPQUFPLGtCQUFrQjs4R0FBbEIsa0JBQWtCO2tHQUFsQixrQkFBa0Isa0RBZGpCLE9BQU87OzJGQWNSLGtCQUFrQjtrQkFoQjlCLFNBQVM7K0JBQ0ksWUFBWSxZQUNaLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JhbnRhLWxvZ28nLFxyXG4gICAgdGVtcGxhdGU6IGBiYW50YWAsXHJcbiAgICBzdHlsZXM6IFtcclxuICAgICAgICBgXHJcbiAgICAgICAgOmhvc3Qge1xyXG4gICAgICAgICAgICBmb250LWZhbWlseTogJ09kaWJlZSBTYW5zJywgc2Fucy1zZXJpZjtcclxuICAgICAgICAgICAgZm9udC1zaXplOiA0MHB0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgOmhvc3Quc21hbGwge1xyXG4gICAgICAgICAgICBmb250LXNpemU6IDMwcHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGBcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEJhbnRhTG9nb0NvbXBvbmVudCB7XHJcblxyXG59Il19
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import { inject, NgModule } from '@angular/core';
|
|
2
|
-
import { CommentsModule } from './comments';
|
|
3
|
-
import { ChatModule } from './chat';
|
|
4
|
-
import { EmojiModule } from './emoji';
|
|
5
|
-
import { BantaComponent } from './banta/banta.component';
|
|
6
|
-
import { BantaLogoComponent } from './banta-logo.component';
|
|
7
|
-
import { CommonModule } from '@angular/common';
|
|
8
|
-
import { FormsModule } from '@angular/forms';
|
|
9
|
-
import { BantaCommonModule } from './common/common.module';
|
|
10
|
-
import { LiveMessageComponent } from './live-message.component';
|
|
11
|
-
import { MatButtonModule } from "@angular/material/button";
|
|
12
|
-
import { MatIconModule } from "@angular/material/icon";
|
|
13
|
-
import { MatTooltipModule } from "@angular/material/tooltip";
|
|
14
|
-
import { MatMenuModule } from "@angular/material/menu";
|
|
15
|
-
import { MatDialogModule } from "@angular/material/dialog";
|
|
16
|
-
import { MatSnackBarModule } from "@angular/material/snack-bar";
|
|
17
|
-
import { MatFormFieldModule } from "@angular/material/form-field";
|
|
18
|
-
import { MatInputModule } from "@angular/material/input";
|
|
19
|
-
import { MatProgressSpinnerModule } from "@angular/material/progress-spinner";
|
|
20
|
-
import { ChatBackend } from './chat-backend';
|
|
21
|
-
import { BANTA_SDK_OPTIONS } from './sdk-options';
|
|
22
|
-
import { ChatBackendBase } from './chat-backend-base';
|
|
23
|
-
import { OverlayModule } from '@angular/cdk/overlay';
|
|
24
|
-
import { PortalModule } from '@angular/cdk/portal';
|
|
25
|
-
import { UrlAttachmentResolver, UrlAttachmentScraper } from './url-attachments';
|
|
26
|
-
import { YouTubeAttachmentResolver } from './youtube-attachments';
|
|
27
|
-
import { GiphyAttachmentResolver } from './giphy-attachments';
|
|
28
|
-
import { TweetAttachmentResolver } from './tweet-attachments';
|
|
29
|
-
import * as i0 from "@angular/core";
|
|
30
|
-
import * as i1 from "./common/common.module";
|
|
31
|
-
export class BantaSdkModule {
|
|
32
|
-
constructor() {
|
|
33
|
-
this.chatBackend = inject(ChatBackendBase);
|
|
34
|
-
this.chatBackend.registerAttachmentScraper(new UrlAttachmentScraper());
|
|
35
|
-
this.chatBackend.registerAttachmentResolver(new GiphyAttachmentResolver());
|
|
36
|
-
this.chatBackend.registerAttachmentResolver(new YouTubeAttachmentResolver());
|
|
37
|
-
this.chatBackend.registerAttachmentResolver(new TweetAttachmentResolver());
|
|
38
|
-
this.chatBackend.registerAttachmentResolver(new UrlAttachmentResolver(this.chatBackend));
|
|
39
|
-
}
|
|
40
|
-
static configure(options) {
|
|
41
|
-
return {
|
|
42
|
-
ngModule: BantaSdkModule,
|
|
43
|
-
providers: [
|
|
44
|
-
{
|
|
45
|
-
provide: BANTA_SDK_OPTIONS,
|
|
46
|
-
useValue: options || {}
|
|
47
|
-
},
|
|
48
|
-
{ provide: ChatBackendBase, useClass: options?.backendClass ?? ChatBackend }
|
|
49
|
-
]
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaSdkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
53
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: BantaSdkModule, declarations: [BantaComponent,
|
|
54
|
-
BantaLogoComponent,
|
|
55
|
-
LiveMessageComponent], imports: [CommonModule,
|
|
56
|
-
FormsModule, i1.BantaCommonModule, CommentsModule,
|
|
57
|
-
ChatModule,
|
|
58
|
-
EmojiModule,
|
|
59
|
-
MatIconModule,
|
|
60
|
-
MatButtonModule,
|
|
61
|
-
MatTooltipModule,
|
|
62
|
-
MatMenuModule,
|
|
63
|
-
MatDialogModule,
|
|
64
|
-
MatFormFieldModule,
|
|
65
|
-
MatInputModule,
|
|
66
|
-
MatProgressSpinnerModule,
|
|
67
|
-
MatSnackBarModule,
|
|
68
|
-
OverlayModule,
|
|
69
|
-
PortalModule], exports: [BantaComponent,
|
|
70
|
-
BantaLogoComponent,
|
|
71
|
-
LiveMessageComponent,
|
|
72
|
-
BantaCommonModule,
|
|
73
|
-
ChatModule,
|
|
74
|
-
CommentsModule,
|
|
75
|
-
EmojiModule] }); }
|
|
76
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaSdkModule, imports: [CommonModule,
|
|
77
|
-
FormsModule,
|
|
78
|
-
BantaCommonModule.forRoot(),
|
|
79
|
-
CommentsModule,
|
|
80
|
-
ChatModule,
|
|
81
|
-
EmojiModule,
|
|
82
|
-
MatIconModule,
|
|
83
|
-
MatButtonModule,
|
|
84
|
-
MatTooltipModule,
|
|
85
|
-
MatMenuModule,
|
|
86
|
-
MatDialogModule,
|
|
87
|
-
MatFormFieldModule,
|
|
88
|
-
MatInputModule,
|
|
89
|
-
MatProgressSpinnerModule,
|
|
90
|
-
MatSnackBarModule,
|
|
91
|
-
OverlayModule,
|
|
92
|
-
PortalModule, BantaCommonModule,
|
|
93
|
-
ChatModule,
|
|
94
|
-
CommentsModule,
|
|
95
|
-
EmojiModule] }); }
|
|
96
|
-
}
|
|
97
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaSdkModule, decorators: [{
|
|
98
|
-
type: NgModule,
|
|
99
|
-
args: [{
|
|
100
|
-
imports: [
|
|
101
|
-
CommonModule,
|
|
102
|
-
FormsModule,
|
|
103
|
-
BantaCommonModule.forRoot(),
|
|
104
|
-
CommentsModule,
|
|
105
|
-
ChatModule,
|
|
106
|
-
EmojiModule,
|
|
107
|
-
MatIconModule,
|
|
108
|
-
MatButtonModule,
|
|
109
|
-
MatTooltipModule,
|
|
110
|
-
MatMenuModule,
|
|
111
|
-
MatDialogModule,
|
|
112
|
-
MatFormFieldModule,
|
|
113
|
-
MatInputModule,
|
|
114
|
-
MatProgressSpinnerModule,
|
|
115
|
-
MatSnackBarModule,
|
|
116
|
-
OverlayModule,
|
|
117
|
-
PortalModule
|
|
118
|
-
],
|
|
119
|
-
declarations: [
|
|
120
|
-
BantaComponent,
|
|
121
|
-
BantaLogoComponent,
|
|
122
|
-
LiveMessageComponent
|
|
123
|
-
],
|
|
124
|
-
exports: [
|
|
125
|
-
BantaComponent,
|
|
126
|
-
BantaLogoComponent,
|
|
127
|
-
LiveMessageComponent,
|
|
128
|
-
BantaCommonModule,
|
|
129
|
-
ChatModule,
|
|
130
|
-
CommentsModule,
|
|
131
|
-
EmojiModule
|
|
132
|
-
]
|
|
133
|
-
}]
|
|
134
|
-
}], ctorParameters: () => [] });
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtc2RrLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2JhbnRhLXNkay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBdUIsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxP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Q1gsaUJBQWlCLENBQUMsT0FBTyxFQUFFO3dCQUMzQixjQUFjO3dCQUNkLFVBQVU7d0JBQ1YsV0FBVzt3QkFFWCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLHdCQUF3Qjt3QkFDeEIsaUJBQWlCO3dCQUNqQixhQUFhO3dCQUNiLFlBQVk7cUJBQ2Y7b0JBQ0QsWUFBWSxFQUFFO3dCQUNWLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixvQkFBb0I7cUJBQ3ZCO29CQUNELE9BQU8sRUFBRTt3QkFDTCxjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3dCQUNwQixpQkFBaUI7d0JBQ2pCLFVBQVU7d0JBQ1YsY0FBYzt3QkFDZCxXQUFXO3FCQUNkO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tZW50c01vZHVsZSB9IGZyb20gJy4vY29tbWVudHMnO1xyXG5pbXBvcnQgeyBDaGF0TW9kdWxlIH0gZnJvbSAnLi9jaGF0JztcclxuaW1wb3J0IHsgRW1vamlNb2R1bGUgfSBmcm9tICcuL2Vtb2ppJztcclxuaW1wb3J0IHsgQmFudGFDb21wb25lbnQgfSBmcm9tICcuL2JhbnRhL2JhbnRhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJhbnRhTG9nb0NvbXBvbmVudCB9IGZyb20gJy4vYmFudGEtbG9nby5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQmFudGFDb21tb25Nb2R1bGUgfSBmcm9tICcuL2NvbW1vbi9jb21tb24ubW9kdWxlJztcclxuaW1wb3J0IHsgTGl2ZU1lc3NhZ2VDb21wb25lbnQgfSBmcm9tICcuL2xpdmUtbWVzc2FnZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uXCI7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvblwiO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXBcIjtcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9tZW51XCI7XHJcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHsgTWF0U25hY2tCYXJNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyXCI7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkXCI7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2lucHV0XCI7XHJcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyXCI7XHJcbmltcG9ydCB7IENoYXRCYWNrZW5kIH0gZnJvbSAnLi9jaGF0LWJhY2tlbmQnO1xyXG5pbXBvcnQgeyBTZGtPcHRpb25zIH0gZnJvbSAnLi9zZGstb3B0aW9ucyc7XHJcbmltcG9ydCB7IEJBTlRBX1NES19PUFRJT05TIH0gZnJvbSAnLi9zZGstb3B0aW9ucyc7XHJcbmltcG9ydCB7IENoYXRCYWNrZW5kQmFzZSB9IGZyb20gJy4vY2hhdC1iYWNrZW5kLWJhc2UnO1xyXG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBQb3J0YWxNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgVXJsQXR0YWNobWVudFJlc29sdmVyLCBVcmxBdHRhY2htZW50U2NyYXBlciB9IGZyb20gJy4vdXJsLWF0dGFjaG1lbnRzJztcclxuaW1wb3J0IHsgWW91VHViZUF0dGFjaG1lbnRSZXNvbHZlciB9IGZyb20gJy4veW91dHViZS1hdHRhY2htZW50cyc7XHJcbmltcG9ydCB7IEdpcGh5QXR0YWNobWVudFJlc29sdmVyIH0gZnJvbSAnLi9naXBoeS1hdHRhY2htZW50cyc7XHJcbmltcG9ydCB7IFR3ZWV0QXR0YWNobWVudFJlc29sdmVyIH0gZnJvbSAnLi90d2VldC1hdHRhY2htZW50cyc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgICBCYW50YUNvbW1vbk1vZHVsZS5mb3JSb290KCksXHJcbiAgICAgICAgQ29tbWVudHNNb2R1bGUsXHJcbiAgICAgICAgQ2hhdE1vZHVsZSxcclxuICAgICAgICBFbW9qaU1vZHVsZSxcclxuICAgICAgICBcclxuICAgICAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgICAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICAgICAgTWF0RGlhbG9nTW9kdWxlLFxyXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXHJcbiAgICAgICAgTWF0U25hY2tCYXJNb2R1bGUsXHJcbiAgICAgICAgT3ZlcmxheU1vZHVsZSxcclxuICAgICAgICBQb3J0YWxNb2R1bGVcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgICBCYW50YUNvbXBvbmVudCxcclxuICAgICAgICBCYW50YUxvZ29Db21wb25lbnQsXHJcbiAgICAgICAgTGl2ZU1lc3NhZ2VDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgICAgQmFudGFDb21wb25lbnQsXHJcbiAgICAgICAgQmFudGFMb2dvQ29tcG9uZW50LFxyXG4gICAgICAgIExpdmVNZXNzYWdlQ29tcG9uZW50LFxyXG4gICAgICAgIEJhbnRhQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIENoYXRNb2R1bGUsXHJcbiAgICAgICAgQ29tbWVudHNNb2R1bGUsXHJcbiAgICAgICAgRW1vamlNb2R1bGVcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEJhbnRhU2RrTW9kdWxlIHtcclxuICAgIGNoYXRCYWNrZW5kID0gaW5qZWN0KENoYXRCYWNrZW5kQmFzZSk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5jaGF0QmFja2VuZC5yZWdpc3RlckF0dGFjaG1lbnRTY3JhcGVyKG5ldyBVcmxBdHRhY2htZW50U2NyYXBlcigpKTtcclxuICAgICAgICB0aGlzLmNoYXRCYWNrZW5kLnJlZ2lzdGVyQXR0YWNobWVudFJlc29sdmVyKG5ldyBHaXBoeUF0dGFjaG1lbnRSZXNvbHZlcigpKTtcclxuICAgICAgICB0aGlzLmNoYXRCYWNrZW5kLnJlZ2lzdGVyQXR0YWNobWVudFJlc29sdmVyKG5ldyBZb3VUdWJlQXR0YWNobWVudFJlc29sdmVyKCkpO1xyXG4gICAgICAgIHRoaXMuY2hhdEJhY2tlbmQucmVnaXN0ZXJBdHRhY2htZW50UmVzb2x2ZXIobmV3IFR3ZWV0QXR0YWNobWVudFJlc29sdmVyKCkpO1xyXG4gICAgICAgIHRoaXMuY2hhdEJhY2tlbmQucmVnaXN0ZXJBdHRhY2htZW50UmVzb2x2ZXIobmV3IFVybEF0dGFjaG1lbnRSZXNvbHZlcih0aGlzLmNoYXRCYWNrZW5kKSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBjb25maWd1cmUob3B0aW9ucz86IFNka09wdGlvbnMpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEJhbnRhU2RrTW9kdWxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IEJhbnRhU2RrTW9kdWxlLFxyXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgICAgICAgIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQkFOVEFfU0RLX09QVElPTlMsIFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBvcHRpb25zIHx8IHt9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBDaGF0QmFja2VuZEJhc2UsIHVzZUNsYXNzOiBvcHRpb25zPy5iYWNrZW5kQ2xhc3MgPz8gQ2hhdEJhY2tlbmQgfVxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
|