@libs-ui/components-preview-text-data 0.2.350-1 → 0.2.351-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/esm2022/preview-text-data.component.mjs +210 -131
- package/esm2022/preview-text-data.define.mjs +103 -3
- package/fesm2022/libs-ui-components-preview-text-data.mjs +312 -133
- package/fesm2022/libs-ui-components-preview-text-data.mjs.map +1 -1
- package/package.json +5 -5
- package/preview-text-data.component.d.ts +54 -16
- package/preview-text-data.define.d.ts +62 -4
|
@@ -1,168 +1,222 @@
|
|
|
1
|
-
|
|
2
|
-
import { ChangeDetectionStrategy, Component, computed, inject, input, model, output, signal, viewChild } from '@angular/core';
|
|
3
|
-
import { cpp } from '@codemirror/lang-cpp';
|
|
4
|
-
import { css } from '@codemirror/lang-css';
|
|
5
|
-
import { go } from '@codemirror/lang-go';
|
|
6
|
-
import { html } from '@codemirror/lang-html';
|
|
7
|
-
import { java } from '@codemirror/lang-java';
|
|
8
|
-
import { javascript } from '@codemirror/lang-javascript';
|
|
9
|
-
import { json } from '@codemirror/lang-json';
|
|
10
|
-
import { markdown } from '@codemirror/lang-markdown';
|
|
11
|
-
import { php } from '@codemirror/lang-php';
|
|
12
|
-
import { python } from '@codemirror/lang-python';
|
|
13
|
-
import { sql } from '@codemirror/lang-sql';
|
|
14
|
-
import { xml } from '@codemirror/lang-xml';
|
|
15
|
-
import { yaml } from '@codemirror/lang-yaml';
|
|
16
|
-
import { StreamLanguage } from '@codemirror/language';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, inject, input, model, output, signal, viewChild } from '@angular/core';
|
|
17
2
|
import { linter, lintGutter } from '@codemirror/lint';
|
|
18
|
-
import { Compartment
|
|
19
|
-
import { lineNumbers } from '@codemirror/view';
|
|
3
|
+
import { Compartment } from '@codemirror/state';
|
|
4
|
+
import { EditorView, lineNumbers } from '@codemirror/view';
|
|
20
5
|
import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
|
|
21
6
|
import { LibsUiComponentsDropdownComponent } from '@libs-ui/components-dropdown';
|
|
22
7
|
import { LibsUiNotificationService } from '@libs-ui/services-notification';
|
|
23
8
|
import { get } from '@libs-ui/utils';
|
|
24
|
-
import { basicSetup
|
|
25
|
-
import {
|
|
26
|
-
import { httpRequestConfigGetOptionsLang, optionsLang } from './preview-text-data.define';
|
|
9
|
+
import { basicSetup } from 'codemirror6';
|
|
10
|
+
import { createDefaultLanguage, httpRequestConfigGetOptionsLang, languageRegistry, optionsLangData } from './preview-text-data.define';
|
|
27
11
|
import * as i0 from "@angular/core";
|
|
28
|
-
const sqlParser = new Parser();
|
|
29
12
|
export class LibsUiComponentsPreviewTextDataComponent {
|
|
13
|
+
// ==========================================================================
|
|
14
|
+
// PRIVATE PROPERTIES
|
|
15
|
+
// ==========================================================================
|
|
30
16
|
editorViewInstance;
|
|
31
17
|
wrapCompartment = new Compartment();
|
|
32
18
|
languageCompartment = new Compartment();
|
|
33
19
|
lineNumberCompartment = new Compartment();
|
|
20
|
+
linterCompartment = new Compartment();
|
|
21
|
+
/** Cache để tránh load lại language đã load */
|
|
22
|
+
languageCache = new Map();
|
|
23
|
+
/** Flag để tránh update editor khi đang khởi tạo */
|
|
24
|
+
isInitialized = false;
|
|
25
|
+
// ==========================================================================
|
|
26
|
+
// INJECTED SERVICES
|
|
27
|
+
// ==========================================================================
|
|
28
|
+
notificationService = inject(LibsUiNotificationService);
|
|
29
|
+
destroyRef = inject(DestroyRef);
|
|
30
|
+
// ==========================================================================
|
|
31
|
+
// PROTECTED SIGNALS
|
|
32
|
+
// ==========================================================================
|
|
34
33
|
isWrap = signal(true);
|
|
35
34
|
configLoadDataIsHttpConfig = httpRequestConfigGetOptionsLang();
|
|
36
|
-
labelLang = computed(() =>
|
|
37
|
-
|
|
35
|
+
labelLang = computed(() => optionsLangData.find((item) => item.id === this.langSelected())?.label);
|
|
36
|
+
// ==========================================================================
|
|
37
|
+
// INPUTS
|
|
38
|
+
// ==========================================================================
|
|
39
|
+
content = input('', {
|
|
40
|
+
transform: (value) => value ?? '',
|
|
41
|
+
});
|
|
38
42
|
langSelected = model.required();
|
|
39
|
-
editable = input(false, {
|
|
40
|
-
|
|
43
|
+
editable = input(false, {
|
|
44
|
+
transform: (value) => value ?? false,
|
|
45
|
+
});
|
|
46
|
+
hiddenAction = input(false, {
|
|
47
|
+
transform: (value) => value ?? false,
|
|
48
|
+
});
|
|
41
49
|
lintIgnorePatterns = input(['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'], {
|
|
42
50
|
transform: (value) => value ?? ['Cannot use import statement outside a module', 'Unexpected token export', 'import ', '@angular/core'],
|
|
43
51
|
});
|
|
44
|
-
background = input('#f8f9fa', {
|
|
52
|
+
background = input('#f8f9fa', {
|
|
53
|
+
transform: (value) => value ?? '#f8f9fa',
|
|
54
|
+
});
|
|
55
|
+
// ==========================================================================
|
|
56
|
+
// OUTPUTS
|
|
57
|
+
// ==========================================================================
|
|
45
58
|
outChange = output();
|
|
46
59
|
syntaxErrors = output();
|
|
60
|
+
// ==========================================================================
|
|
61
|
+
// VIEW CHILDREN
|
|
62
|
+
// ==========================================================================
|
|
47
63
|
containerPreview = viewChild.required('containerPreview');
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
64
|
+
// ==========================================================================
|
|
65
|
+
// CONSTRUCTOR - Setup effects
|
|
66
|
+
// ==========================================================================
|
|
67
|
+
constructor() {
|
|
68
|
+
// Effect để sync content từ input vào editor
|
|
69
|
+
effect(() => {
|
|
70
|
+
const newContent = this.content();
|
|
71
|
+
if (this.isInitialized && this.editorViewInstance) {
|
|
72
|
+
const currentContent = this.editorViewInstance.state.doc.toString();
|
|
73
|
+
if (newContent !== currentContent) {
|
|
74
|
+
this.editorViewInstance.dispatch({
|
|
75
|
+
changes: {
|
|
76
|
+
from: 0,
|
|
77
|
+
to: currentContent.length,
|
|
78
|
+
insert: newContent,
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
// Cleanup khi component bị destroy
|
|
85
|
+
this.destroyRef.onDestroy(() => {
|
|
86
|
+
this.editorViewInstance?.destroy();
|
|
87
|
+
this.languageCache.clear();
|
|
88
|
+
});
|
|
51
89
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
90
|
+
// ==========================================================================
|
|
91
|
+
// LIFECYCLE HOOKS
|
|
92
|
+
// ==========================================================================
|
|
93
|
+
async ngAfterViewInit() {
|
|
94
|
+
await this.initializeEditor();
|
|
95
|
+
this.isInitialized = true;
|
|
96
|
+
}
|
|
97
|
+
// ==========================================================================
|
|
98
|
+
// PRIVATE METHODS - Editor initialization
|
|
99
|
+
// ==========================================================================
|
|
100
|
+
/**
|
|
101
|
+
* Khởi tạo editor với các extensions cơ bản
|
|
102
|
+
* Language được load async để tối ưu bundle size
|
|
103
|
+
*/
|
|
104
|
+
async initializeEditor() {
|
|
105
|
+
const languageExtension = await this.loadLanguageExtension(this.langSelected());
|
|
106
|
+
const linterExtension = await this.loadLinterExtension(this.langSelected());
|
|
107
|
+
this.editorViewInstance = new EditorView({
|
|
108
|
+
doc: this.content(),
|
|
109
|
+
parent: this.containerPreview().nativeElement,
|
|
110
|
+
extensions: this.createExtensions(languageExtension, linterExtension),
|
|
58
111
|
});
|
|
59
|
-
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Tạo danh sách extensions cho editor
|
|
115
|
+
*/
|
|
116
|
+
createExtensions(languageExtension, linterExtension) {
|
|
117
|
+
return [
|
|
118
|
+
basicSetup,
|
|
119
|
+
this.languageCompartment.of(languageExtension),
|
|
120
|
+
this.linterCompartment.of(linterExtension),
|
|
121
|
+
this.createLightTheme(),
|
|
122
|
+
EditorView.editable.of(this.editable()),
|
|
123
|
+
this.wrapCompartment.of(EditorView.lineWrapping),
|
|
124
|
+
this.lineNumberCompartment.of(lineNumbers()),
|
|
125
|
+
lintGutter(),
|
|
126
|
+
this.createBracketTheme(),
|
|
127
|
+
this.createUpdateListener(),
|
|
128
|
+
];
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Load language extension với caching
|
|
132
|
+
* Mỗi language chỉ được load 1 lần
|
|
133
|
+
*/
|
|
134
|
+
async loadLanguageExtension(lang) {
|
|
60
135
|
const lowerLang = lang.toLowerCase();
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
lintFunction = this.jsLinterFn();
|
|
65
|
-
break;
|
|
66
|
-
case 'html':
|
|
67
|
-
formatByLangFunction = html();
|
|
68
|
-
break;
|
|
69
|
-
case 'css':
|
|
70
|
-
formatByLangFunction = css();
|
|
71
|
-
break;
|
|
72
|
-
case 'markdown':
|
|
73
|
-
formatByLangFunction = markdown();
|
|
74
|
-
break;
|
|
75
|
-
case 'json':
|
|
76
|
-
formatByLangFunction = json();
|
|
77
|
-
lintFunction = this.jsonLinterFn();
|
|
78
|
-
break;
|
|
79
|
-
case 'sql':
|
|
80
|
-
formatByLangFunction = sql();
|
|
81
|
-
lintFunction = this.sqlLinterFn();
|
|
82
|
-
break;
|
|
83
|
-
case 'xml':
|
|
84
|
-
formatByLangFunction = xml();
|
|
85
|
-
break;
|
|
86
|
-
case 'yaml':
|
|
87
|
-
formatByLangFunction = yaml();
|
|
88
|
-
break;
|
|
89
|
-
case 'python':
|
|
90
|
-
formatByLangFunction = python();
|
|
91
|
-
break;
|
|
92
|
-
case 'java':
|
|
93
|
-
formatByLangFunction = java();
|
|
94
|
-
break;
|
|
95
|
-
case 'cpp':
|
|
96
|
-
formatByLangFunction = cpp();
|
|
97
|
-
break;
|
|
98
|
-
case 'php':
|
|
99
|
-
formatByLangFunction = php();
|
|
100
|
-
break;
|
|
101
|
-
case 'go':
|
|
102
|
-
formatByLangFunction = go();
|
|
103
|
-
break;
|
|
136
|
+
const cached = this.languageCache.get(lowerLang);
|
|
137
|
+
if (cached) {
|
|
138
|
+
return cached;
|
|
104
139
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
this.lightTheme(),
|
|
110
|
-
EditorView.editable.of(this.editable()),
|
|
111
|
-
this.wrapCompartment.of(EditorView.lineWrapping),
|
|
112
|
-
this.lineNumberCompartment.of(lineNumbers()),
|
|
113
|
-
lintGutter(),
|
|
114
|
-
this.customBracketTheme(),
|
|
115
|
-
lintFunction,
|
|
116
|
-
EditorView.updateListener.of((update) => {
|
|
117
|
-
if (update.docChanged && this.editable()) {
|
|
118
|
-
const newValue = update.state.doc.toString();
|
|
119
|
-
this.outChange.emit({
|
|
120
|
-
content: newValue,
|
|
121
|
-
isWrap: this.isWrap(),
|
|
122
|
-
language: this.langSelected(),
|
|
123
|
-
contextChange: 'content',
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
}),
|
|
127
|
-
],
|
|
128
|
-
};
|
|
140
|
+
const registryItem = languageRegistry[lowerLang];
|
|
141
|
+
const extension = registryItem ? await registryItem.loader() : await createDefaultLanguage();
|
|
142
|
+
this.languageCache.set(lowerLang, extension);
|
|
143
|
+
return extension;
|
|
129
144
|
}
|
|
130
|
-
|
|
145
|
+
/**
|
|
146
|
+
* Load linter extension nếu có
|
|
147
|
+
*/
|
|
148
|
+
async loadLinterExtension(lang) {
|
|
149
|
+
const lowerLang = lang.toLowerCase();
|
|
150
|
+
const registryItem = languageRegistry[lowerLang];
|
|
151
|
+
if (registryItem?.linter) {
|
|
152
|
+
return registryItem.linter(this);
|
|
153
|
+
}
|
|
154
|
+
return linter(() => []);
|
|
155
|
+
}
|
|
156
|
+
// ==========================================================================
|
|
157
|
+
// PRIVATE METHODS - Theme configuration
|
|
158
|
+
// ==========================================================================
|
|
159
|
+
createLightTheme() {
|
|
131
160
|
return EditorView.theme({
|
|
132
161
|
'&': { backgroundColor: this.background(), color: '#333' },
|
|
133
162
|
'.cm-content': { caretColor: '#111' },
|
|
134
163
|
'.cm-activeLine': { backgroundColor: '#f0f0f0' },
|
|
135
164
|
});
|
|
136
165
|
}
|
|
137
|
-
|
|
166
|
+
createBracketTheme() {
|
|
138
167
|
return EditorView.theme({
|
|
139
168
|
'.cm-matchingBracket': {
|
|
140
|
-
backgroundColor: 'rgba(100, 200, 255, 0.15)',
|
|
169
|
+
backgroundColor: 'rgba(100, 200, 255, 0.15)',
|
|
141
170
|
border: '1px solid rgba(100, 200, 255, 0.4)',
|
|
142
171
|
borderRadius: '3px',
|
|
143
172
|
transition: 'all 0.2s ease',
|
|
144
173
|
},
|
|
145
174
|
'.cm-nonmatchingBracket': {
|
|
146
|
-
backgroundColor: 'rgba(255, 100, 100, 0.15)',
|
|
175
|
+
backgroundColor: 'rgba(255, 100, 100, 0.15)',
|
|
147
176
|
border: '1px solid rgba(255, 100, 100, 0.3)',
|
|
148
177
|
borderRadius: '3px',
|
|
149
178
|
},
|
|
150
179
|
});
|
|
151
180
|
}
|
|
152
|
-
|
|
181
|
+
// ==========================================================================
|
|
182
|
+
// PRIVATE METHODS - Update listener
|
|
183
|
+
// ==========================================================================
|
|
184
|
+
createUpdateListener() {
|
|
185
|
+
return EditorView.updateListener.of((update) => {
|
|
186
|
+
if (update.docChanged && this.editable()) {
|
|
187
|
+
const newValue = update.state.doc.toString();
|
|
188
|
+
this.outChange.emit({
|
|
189
|
+
content: newValue,
|
|
190
|
+
isWrap: this.isWrap(),
|
|
191
|
+
language: this.langSelected(),
|
|
192
|
+
contextChange: 'content',
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
// ==========================================================================
|
|
198
|
+
// PUBLIC METHODS - Linter factories (được gọi từ registry)
|
|
199
|
+
// ==========================================================================
|
|
200
|
+
/**
|
|
201
|
+
* Tạo JavaScript linter
|
|
202
|
+
* Sử dụng Function constructor để validate syntax
|
|
203
|
+
*/
|
|
204
|
+
createJsLinter() {
|
|
153
205
|
return linter((view) => {
|
|
154
206
|
const text = view.state.doc.toString();
|
|
155
207
|
const diagnostics = [];
|
|
156
208
|
try {
|
|
157
|
-
new Function(text);
|
|
209
|
+
new Function(text);
|
|
158
210
|
}
|
|
159
211
|
catch (err) {
|
|
160
|
-
|
|
212
|
+
const message = get(err, 'message', '');
|
|
213
|
+
const shouldIgnore = this.lintIgnorePatterns().some((pattern) => message.includes(pattern));
|
|
214
|
+
if (!shouldIgnore) {
|
|
161
215
|
diagnostics.push({
|
|
162
216
|
from: 0,
|
|
163
217
|
to: text.length,
|
|
164
218
|
severity: 'error',
|
|
165
|
-
message
|
|
219
|
+
message,
|
|
166
220
|
});
|
|
167
221
|
this.syntaxErrors.emit(diagnostics);
|
|
168
222
|
}
|
|
@@ -170,7 +224,11 @@ export class LibsUiComponentsPreviewTextDataComponent {
|
|
|
170
224
|
return diagnostics;
|
|
171
225
|
});
|
|
172
226
|
}
|
|
173
|
-
|
|
227
|
+
/**
|
|
228
|
+
* Tạo JSON linter
|
|
229
|
+
* Sử dụng JSON.parse để validate
|
|
230
|
+
*/
|
|
231
|
+
createJsonLinter() {
|
|
174
232
|
return linter((view) => {
|
|
175
233
|
const text = view.state.doc.toString();
|
|
176
234
|
const diagnostics = [];
|
|
@@ -189,11 +247,18 @@ export class LibsUiComponentsPreviewTextDataComponent {
|
|
|
189
247
|
return diagnostics;
|
|
190
248
|
});
|
|
191
249
|
}
|
|
192
|
-
|
|
193
|
-
|
|
250
|
+
/**
|
|
251
|
+
* Tạo SQL linter
|
|
252
|
+
* Lazy load node-sql-parser chỉ khi cần
|
|
253
|
+
*/
|
|
254
|
+
createSqlLinter() {
|
|
255
|
+
return linter(async (view) => {
|
|
194
256
|
const text = view.state.doc.toString();
|
|
195
257
|
const diagnostics = [];
|
|
196
258
|
try {
|
|
259
|
+
// Lazy load SQL parser chỉ khi thực sự cần
|
|
260
|
+
const { Parser } = await import('node-sql-parser');
|
|
261
|
+
const sqlParser = new Parser();
|
|
197
262
|
sqlParser.astify(text);
|
|
198
263
|
}
|
|
199
264
|
catch (err) {
|
|
@@ -208,36 +273,50 @@ export class LibsUiComponentsPreviewTextDataComponent {
|
|
|
208
273
|
return diagnostics;
|
|
209
274
|
});
|
|
210
275
|
}
|
|
276
|
+
// ==========================================================================
|
|
277
|
+
// PROTECTED METHODS - Event handlers
|
|
278
|
+
// ==========================================================================
|
|
211
279
|
handlerCopy() {
|
|
212
280
|
navigator.clipboard.writeText(this.content() || '');
|
|
213
281
|
this.notificationService.showCompTypeTextInfo('Sao chép thành công');
|
|
214
282
|
}
|
|
215
283
|
handlerLineWrap() {
|
|
284
|
+
console.log('handlerLineWrap', this.isWrap());
|
|
285
|
+
// Lấy nội dung mới nhất từ editor sau khi đã xóa newlines
|
|
286
|
+
const currentContent = this.editorViewInstance?.state.doc.toString() || '';
|
|
287
|
+
const updatedContent = this.isWrap() && currentContent ? currentContent.replace(/\n/g, ' ') : this.content();
|
|
216
288
|
this.isWrap.update((val) => !val);
|
|
289
|
+
console.log('updatedContent', this.isWrap());
|
|
290
|
+
console.log('currentContent', currentContent);
|
|
291
|
+
console.log('updatedContent', updatedContent);
|
|
292
|
+
if (currentContent !== updatedContent) {
|
|
293
|
+
this.editorViewInstance?.dispatch({
|
|
294
|
+
changes: { from: 0, to: currentContent.length, insert: updatedContent },
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
// Batch cả 2 dispatch thành 1 để tối ưu performance
|
|
217
298
|
this.editorViewInstance?.dispatch({
|
|
218
|
-
effects: this.wrapCompartment.reconfigure(this.isWrap() ? EditorView.lineWrapping : []),
|
|
219
|
-
});
|
|
220
|
-
this.editorViewInstance?.dispatch({
|
|
221
|
-
effects: this.lineNumberCompartment.reconfigure(this.isWrap() ? lineNumbers() : [] // 👈 nếu tắt thì remove extension
|
|
222
|
-
),
|
|
299
|
+
effects: [this.wrapCompartment.reconfigure(this.isWrap() ? EditorView.lineWrapping : []), this.lineNumberCompartment.reconfigure(this.isWrap() ? lineNumbers() : [])],
|
|
223
300
|
});
|
|
224
301
|
this.outChange.emit({
|
|
225
|
-
content:
|
|
302
|
+
content: updatedContent,
|
|
226
303
|
isWrap: this.isWrap(),
|
|
227
304
|
language: this.langSelected(),
|
|
228
305
|
contextChange: 'isWrap',
|
|
229
306
|
});
|
|
230
307
|
}
|
|
231
|
-
handlerSelectKey(data) {
|
|
232
|
-
if (!data
|
|
308
|
+
async handlerSelectKey(data) {
|
|
309
|
+
if (!data?.key) {
|
|
233
310
|
return;
|
|
234
311
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
312
|
+
const newLang = data.key;
|
|
313
|
+
this.langSelected.set(newLang);
|
|
314
|
+
// Load language và linter mới
|
|
315
|
+
const [languageExtension, linterExtension] = await Promise.all([this.loadLanguageExtension(newLang), this.loadLinterExtension(newLang)]);
|
|
316
|
+
// Reconfigure thay vì tạo mới state để giữ lại document content
|
|
317
|
+
this.editorViewInstance?.dispatch({
|
|
318
|
+
effects: [this.languageCompartment.reconfigure(languageExtension), this.linterCompartment.reconfigure(linterExtension)],
|
|
319
|
+
});
|
|
241
320
|
this.outChange.emit({
|
|
242
321
|
content: this.content(),
|
|
243
322
|
isWrap: this.isWrap(),
|
|
@@ -251,5 +330,5 @@ export class LibsUiComponentsPreviewTextDataComponent {
|
|
|
251
330
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsPreviewTextDataComponent, decorators: [{
|
|
252
331
|
type: Component,
|
|
253
332
|
args: [{ selector: 'libs_ui-components-preview_text_data', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [LibsUiComponentsDropdownComponent, LibsUiComponentsButtonsButtonComponent], template: "<div\n class=\"libs-ui-preview-data-container flex flex-col w-full h-auto rounded-[8px] libs-ui-border-general px-[8px]\"\n [style.--background-color]=\"background()\"\n [class.pt-[8px]]=\"!hiddenAction()\">\n @if (!hiddenAction()) {\n <div class=\"flex items-center content-between color-[#6a7383]\">\n <libs_ui-components-dropdown\n classInclude=\"w-[200px]\"\n [listConfig]=\"configLoadDataIsHttpConfig\"\n [listMaxItemShow]=\"5\"\n [isNgContent]=\"true\"\n [readonly]=\"!editable()\"\n [listHasButtonUnSelectOption]=\"false\"\n (outSelectKey)=\"handlerSelectKey($event)\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"labelLang() || ''\"\n [sizeButton]=\"'small'\"\n [classIconRight]=\"editable() ? 'libs-ui-icon-move-right rotate-90' : ''\"\n [classInclude]=\"'!p-[0px]' + (editable() ? '' : '!pointer-events-none !cursor-default hover:!text-[#6A7383]')\" />\n </libs_ui-components-dropdown>\n <div class=\"flex items-center\">\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"isWrap() ? 'i18n_remove_line_wrap' : 'i18n_line_wrap'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"isWrap() ? 'libs-ui-icon-unwrap' : 'libs-ui-icon-wrap'\"\n [classInclude]=\"'mo-lib-p-0px mo-lib-mr-16px'\"\n (outClick)=\"handlerLineWrap()\" />\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [label]=\"'i18n_copy'\"\n [sizeButton]=\"'small'\"\n [classIconLeft]=\"'libs-ui-icon-copy'\"\n [classInclude]=\"'mo-lib-p-0px'\"\n (outClick)=\"handlerCopy()\" />\n </div>\n </div>\n }\n <div #containerPreview></div>\n</div>\n", styles: [":host ::ng-deep .libs-ui-preview-data-container{background-color:var(--background-color)!important}:host ::ng-deep .libs-ui-preview-data-container .cm-line{white-space:pre-wrap}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-error{background-color:#ff323233;border-bottom:2px solid red}:host ::ng-deep .libs-ui-preview-data-container .cm-lintRange-warning{background-color:#ffc80026}:host ::ng-deep .libs-ui-preview-data-container .cm-tooltip-lint{background:#fff8f8;color:#d32f2f;border:1px solid #f44336;padding:8px 10px;font-size:13px;font-family:Inter,sans-serif;border-radius:6px;box-shadow:0 2px 8px #ff000026}:host ::ng-deep .libs-ui-preview-data-container .cm-focused{outline:none!important}:host ::ng-deep .libs-ui-preview-data-container .cm-gutters{background-color:var(--background-color)!important}\n"] }]
|
|
254
|
-
}] });
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy10ZXh0LWRhdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3ByZXZpZXctdGV4dC1kYXRhL3NyYy9wcmV2aWV3LXRleHQtZGF0YS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcHJldmlldy10ZXh0LWRhdGEvc3JjL3ByZXZpZXctdGV4dC1kYXRhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekosT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzQyxP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Q0FBQztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUF5QyxDQUFDLENBQUM7UUFDdEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQy9CLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDakIsR0FBRyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUNsRCxHQUFHLFVBQVU7U0FDZCxDQUFDLENBQ0gsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzdCLGFBQWEsRUFBRSxVQUFVO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBMVBVLHdDQUF3Qzs0RkFBeEMsd0NBQXdDLHVwQ0N2Q3JELGcwREF5Q0EsbzNCREpZLGlDQUFpQyxpMURBQUUsc0NBQXNDOzs0RkFFeEUsd0NBQXdDO2tCQVRwRCxTQUFTOytCQUVFLHNDQUFzQyxjQUdwQyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxpQ0FBaUMsRUFBRSxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBtb2RlbCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY3BwIH0gZnJvbSAnQGNvZGVtaXJyb3IvbGFuZy1jcHAnO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSAnQGNvZGVtaXJyb3IvbGFuZy1jc3MnO1xuaW1wb3J0IHsgZ28gfSBmcm9tICdAY29kZW1pcnJvci9sYW5nLWdvJztcbmltcG9ydCB7IGh0bWwgfSBmcm9tICdAY29kZW1pcnJvci9sYW5nLWh0bWwnO1xuaW1wb3J0IHsgamF2YSB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmctamF2YSc7XG5pbXBvcnQgeyBqYXZhc2NyaXB0IH0gZnJvbSAnQGNvZGVtaXJyb3IvbGFuZy1qYXZhc2NyaXB0JztcbmltcG9ydCB7IGpzb24gfSBmcm9tICdAY29kZW1pcnJvci9sYW5nLWpzb24nO1xuaW1wb3J0IHsgbWFya2Rvd24gfSBmcm9tICdAY29kZW1pcnJvci9sYW5nLW1hcmtkb3duJztcbmltcG9ydCB7IHBocCB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmctcGhwJztcbmltcG9ydCB7IHB5dGhvbiB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmctcHl0aG9uJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmctc3FsJztcbmltcG9ydCB7IHhtbCB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmcteG1sJztcbmltcG9ydCB7IHlhbWwgfSBmcm9tICdAY29kZW1pcnJvci9sYW5nLXlhbWwnO1xuaW1wb3J0IHsgU3RyZWFtTGFuZ3VhZ2UgfSBmcm9tICdAY29kZW1pcnJvci9sYW5ndWFnZSc7XG5pbXBvcnQgeyBEaWFnbm9zdGljLCBsaW50ZXIsIGxpbnRHdXR0ZXIgfSBmcm9tICdAY29kZW1pcnJvci9saW50JztcbmltcG9ydCB7IENvbXBhcnRtZW50LCBFZGl0b3JTdGF0ZSB9IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB7IGxpbmVOdW1iZXJzIH0gZnJvbSAnQGNvZGVtaXJyb3Ivdmlldyc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSUVtaXRTZWxlY3RLZXksIExpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZHJvcGRvd24nO1xuaW1wb3J0IHsgTGlic1VpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLW5vdGlmaWNhdGlvbic7XG5pbXBvcnQgeyBnZXQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBiYXNpY1NldHVwLCBFZGl0b3JWaWV3IH0gZnJvbSAnY29kZW1pcnJvcic7XG5pbXBvcnQgeyBQYXJzZXIgfSBmcm9tICdub2RlLXNxbC1wYXJzZXInO1xuaW1wb3J0IHsgaHR0cFJlcXVlc3RDb25maWdHZXRPcHRpb25zTGFuZywgb3B0aW9uc0xhbmcgfSBmcm9tICcuL3ByZXZpZXctdGV4dC1kYXRhLmRlZmluZSc7XG5pbXBvcnQgeyBJUHJldmlld1RleHREYXRhQ2hhbmdlLCBQUkVWSUVXX1RFWFRfREFUQV9MQU5HVUFHRV9TVVBQT1JUIH0gZnJvbSAnLi9wcmV2aWV3LXRleHQtZGF0YS5pbnRlcmZhY2VzJztcblxuY29uc3Qgc3FsUGFyc2VyID0gbmV3IFBhcnNlcigpO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtcHJldmlld190ZXh0X2RhdGEnLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJldmlldy10ZXh0LWRhdGEuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wcmV2aWV3LXRleHQtZGF0YS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0xpYnNVaUNvbXBvbmVudHNEcm9wZG93bkNvbXBvbmVudCwgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzUHJldmlld1RleHREYXRhQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIHByaXZhdGUgZWRpdG9yVmlld0luc3RhbmNlPzogRWRpdG9yVmlldztcbiAgcHJpdmF0ZSB3cmFwQ29tcGFydG1lbnQgPSBuZXcgQ29tcGFydG1lbnQoKTtcbiAgcHJpdmF0ZSBsYW5ndWFnZUNvbXBhcnRtZW50ID0gbmV3IENvbXBhcnRtZW50KCk7XG4gIHByaXZhdGUgbGluZU51bWJlckNvbXBhcnRtZW50ID0gbmV3IENvbXBhcnRtZW50KCk7XG5cbiAgcHJvdGVjdGVkIGlzV3JhcCA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgcHJvdGVjdGVkIGNvbmZpZ0xvYWREYXRhSXNIdHRwQ29uZmlnID0gaHR0cFJlcXVlc3RDb25maWdHZXRPcHRpb25zTGFuZygpO1xuICBwcm90ZWN0ZWQgbGFiZWxMYW5nID0gY29tcHV0ZWQoKCkgPT4gb3B0aW9uc0xhbmcoKS5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSB0aGlzLmxhbmdTZWxlY3RlZCgpKT8ubGFiZWwpO1xuXG4gIHJlYWRvbmx5IGNvbnRlbnQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWU/OiBzdHJpbmcpID0+IHZhbHVlID8/ICcnIH0pO1xuICByZWFkb25seSBsYW5nU2VsZWN0ZWQgPSBtb2RlbC5yZXF1aXJlZDxQUkVWSUVXX1RFWFRfREFUQV9MQU5HVUFHRV9TVVBQT1JUPigpO1xuICByZWFkb25seSBlZGl0YWJsZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbHVlPzogYm9vbGVhbikgPT4gdmFsdWUgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGhpZGRlbkFjdGlvbiA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbHVlPzogYm9vbGVhbikgPT4gdmFsdWUgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGxpbnRJZ25vcmVQYXR0ZXJucyA9IGlucHV0PEFycmF5PHN0cmluZz4sIEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQ+KFsnQ2Fubm90IHVzZSBpbXBvcnQgc3RhdGVtZW50IG91dHNpZGUgYSBtb2R1bGUnLCAnVW5leHBlY3RlZCB0b2tlbiBleHBvcnQnLCAnaW1wb3J0ICcsICdAYW5ndWxhci9jb3JlJ10sIHtcbiAgICB0cmFuc2Zvcm06ICh2YWx1ZT86IEFycmF5PHN0cmluZz4pID0+IHZhbHVlID8/IFsnQ2Fubm90IHVzZSBpbXBvcnQgc3RhdGVtZW50IG91dHNpZGUgYSBtb2R1bGUnLCAnVW5leHBlY3RlZCB0b2tlbiBleHBvcnQnLCAnaW1wb3J0ICcsICdAYW5ndWxhci9jb3JlJ10sXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGJhY2tncm91bmQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJyNmOGY5ZmEnLCB7IHRyYW5zZm9ybTogKHZhbHVlPzogc3RyaW5nKSA9PiB2YWx1ZSA/PyAnI2Y4ZjlmYScgfSk7XG5cbiAgcmVhZG9ubHkgb3V0Q2hhbmdlID0gb3V0cHV0PElQcmV2aWV3VGV4dERhdGFDaGFuZ2U+KCk7XG4gIHJlYWRvbmx5IHN5bnRheEVycm9ycyA9IG91dHB1dDxEaWFnbm9zdGljW10+KCk7XG5cbiAgcHJpdmF0ZSBjb250YWluZXJQcmV2aWV3ID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignY29udGFpbmVyUHJldmlldycpO1xuXG4gIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZSA9IGluamVjdChMaWJzVWlOb3RpZmljYXRpb25TZXJ2aWNlKTtcbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlID0gbmV3IEVkaXRvclZpZXcoeyAuLi50aGlzLmdldEV4dGVuc2lvbnNCeUxhbmd1YWdlKHRoaXMubGFuZ1NlbGVjdGVkKCkpLCBkb2M6IHRoaXMuY29udGVudCgpLCBwYXJlbnQ6IHRoaXMuY29udGFpbmVyUHJldmlldygpLm5hdGl2ZUVsZW1lbnQgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEV4dGVuc2lvbnNCeUxhbmd1YWdlKGxhbmc6IFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQpOiBhbnkge1xuICAgIGxldCBmb3JtYXRCeUxhbmdGdW5jdGlvbjogYW55ID0gU3RyZWFtTGFuZ3VhZ2UuZGVmaW5lKHtcbiAgICAgIHRva2VuKHN0cmVhbTogYW55KSB7XG4gICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGxldCBsaW50RnVuY3Rpb24gPSBsaW50ZXIoKCkgPT4gW10pO1xuXG4gICAgY29uc3QgbG93ZXJMYW5nID0gbGFuZy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoIChsb3dlckxhbmcpIHtcbiAgICAgIGNhc2UgJ2phdmFzY3JpcHQnOlxuICAgICAgICBmb3JtYXRCeUxhbmdGdW5jdGlvbiA9IGphdmFzY3JpcHQoeyBqc3g6IHRydWUsIHR5cGVzY3JpcHQ6IHRydWUgfSk7XG4gICAgICAgIGxpbnRGdW5jdGlvbiA9IHRoaXMuanNMaW50ZXJGbigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICAgIGZvcm1hdEJ5TGFuZ0Z1bmN0aW9uID0gaHRtbCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnY3NzJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSBjc3MoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ21hcmtkb3duJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSBtYXJrZG93bigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnanNvbic6XG4gICAgICAgIGZvcm1hdEJ5TGFuZ0Z1bmN0aW9uID0ganNvbigpO1xuICAgICAgICBsaW50RnVuY3Rpb24gPSB0aGlzLmpzb25MaW50ZXJGbigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc3FsJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSBzcWwoKTtcbiAgICAgICAgbGludEZ1bmN0aW9uID0gdGhpcy5zcWxMaW50ZXJGbigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAneG1sJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSB4bWwoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3lhbWwnOlxuICAgICAgICBmb3JtYXRCeUxhbmdGdW5jdGlvbiA9IHlhbWwoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3B5dGhvbic6XG4gICAgICAgIGZvcm1hdEJ5TGFuZ0Z1bmN0aW9uID0gcHl0aG9uKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdqYXZhJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSBqYXZhKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdjcHAnOlxuICAgICAgICBmb3JtYXRCeUxhbmdGdW5jdGlvbiA9IGNwcCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncGhwJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSBwaHAoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2dvJzpcbiAgICAgICAgZm9ybWF0QnlMYW5nRnVuY3Rpb24gPSBnbygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXh0ZW5zaW9uczogW1xuICAgICAgICBiYXNpY1NldHVwLFxuICAgICAgICB0aGlzLmxhbmd1YWdlQ29tcGFydG1lbnQub2YoZm9ybWF0QnlMYW5nRnVuY3Rpb24pLFxuICAgICAgICB0aGlzLmxpZ2h0VGhlbWUoKSxcbiAgICAgICAgRWRpdG9yVmlldy5lZGl0YWJsZS5vZih0aGlzLmVkaXRhYmxlKCkpLFxuICAgICAgICB0aGlzLndyYXBDb21wYXJ0bWVudC5vZihFZGl0b3JWaWV3LmxpbmVXcmFwcGluZyksXG4gICAgICAgIHRoaXMubGluZU51bWJlckNvbXBhcnRtZW50Lm9mKGxpbmVOdW1iZXJzKCkpLFxuICAgICAgICBsaW50R3V0dGVyKCksXG4gICAgICAgIHRoaXMuY3VzdG9tQnJhY2tldFRoZW1lKCksXG4gICAgICAgIGxpbnRGdW5jdGlvbixcbiAgICAgICAgRWRpdG9yVmlldy51cGRhdGVMaXN0ZW5lci5vZigodXBkYXRlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAodXBkYXRlLmRvY0NoYW5nZWQgJiYgdGhpcy5lZGl0YWJsZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHVwZGF0ZS5zdGF0ZS5kb2MudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgdGhpcy5vdXRDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgICBpc1dyYXA6IHRoaXMuaXNXcmFwKCksXG4gICAgICAgICAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmdTZWxlY3RlZCgpLFxuICAgICAgICAgICAgICBjb250ZXh0Q2hhbmdlOiAnY29udGVudCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBsaWdodFRoZW1lKCkge1xuICAgIHJldHVybiBFZGl0b3JWaWV3LnRoZW1lKHtcbiAgICAgICcmJzogeyBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFja2dyb3VuZCgpLCBjb2xvcjogJyMzMzMnIH0sXG4gICAgICAnLmNtLWNvbnRlbnQnOiB7IGNhcmV0Q29sb3I6ICcjMTExJyB9LFxuICAgICAgJy5jbS1hY3RpdmVMaW5lJzogeyBiYWNrZ3JvdW5kQ29sb3I6ICcjZjBmMGYwJyB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXN0b21CcmFja2V0VGhlbWUoKSB7XG4gICAgcmV0dXJuIEVkaXRvclZpZXcudGhlbWUoe1xuICAgICAgJy5jbS1tYXRjaGluZ0JyYWNrZXQnOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMTAwLCAyMDAsIDI1NSwgMC4xNSknLCAvLyB4YW5oIG5o4bq5IHRyb25nIHN14buRdFxuICAgICAgICBib3JkZXI6ICcxcHggc29saWQgcmdiYSgxMDAsIDIwMCwgMjU1LCAwLjQpJyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAnM3B4JyxcbiAgICAgICAgdHJhbnNpdGlvbjogJ2FsbCAwLjJzIGVhc2UnLFxuICAgICAgfSxcbiAgICAgICcuY20tbm9ubWF0Y2hpbmdCcmFja2V0Jzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDI1NSwgMTAwLCAxMDAsIDAuMTUpJywgLy8gxJHhu48gbmjhurlcbiAgICAgICAgYm9yZGVyOiAnMXB4IHNvbGlkIHJnYmEoMjU1LCAxMDAsIDEwMCwgMC4zKScsXG4gICAgICAgIGJvcmRlclJhZGl1czogJzNweCcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBqc0xpbnRlckZuKCkge1xuICAgIHJldHVybiBsaW50ZXIoKHZpZXc6IGFueSkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IHZpZXcuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdID0gW107XG4gICAgICB0cnkge1xuICAgICAgICBuZXcgRnVuY3Rpb24odGV4dCk7IC8vIHRlc3QgcGFyc2UgY29kZVxuICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxpbnRJZ25vcmVQYXR0ZXJucygpLnNvbWUoKHBhdHRlcm46IGFueSkgPT4gZXJyLm1lc3NhZ2UuaW5jbHVkZXMocGF0dGVybikpKSB7XG4gICAgICAgICAgZGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICAgICAgICBmcm9tOiAwLFxuICAgICAgICAgICAgdG86IHRleHQubGVuZ3RoLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnN5bnRheEVycm9ycy5lbWl0KGRpYWdub3N0aWNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBqc29uTGludGVyRm4oKSB7XG4gICAgcmV0dXJuIGxpbnRlcigodmlldzogYW55KSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gdmlldy5zdGF0ZS5kb2MudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGRpYWdub3N0aWNzOiBEaWFnbm9zdGljW10gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIEpTT04ucGFyc2UodGV4dCk7XG4gICAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgICAgZGlhZ25vc3RpY3MucHVzaCh7XG4gICAgICAgICAgZnJvbTogMCxcbiAgICAgICAgICB0bzogdGV4dC5sZW5ndGgsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgbWVzc2FnZTogZ2V0KGVyciwgJ21lc3NhZ2UnLCAnJyksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5zeW50YXhFcnJvcnMuZW1pdChkaWFnbm9zdGljcyk7XG4gICAgICByZXR1cm4gZGlhZ25vc3RpY3M7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNxbExpbnRlckZuKCkge1xuICAgIHJldHVybiBsaW50ZXIoKHZpZXc6IGFueSkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IHZpZXcuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdID0gW107XG4gICAgICB0cnkge1xuICAgICAgICBzcWxQYXJzZXIuYXN0aWZ5KHRleHQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICAgIGRpYWdub3N0aWNzLnB1c2goe1xuICAgICAgICAgIGZyb206IDAsXG4gICAgICAgICAgdG86IHRleHQubGVuZ3RoLFxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGdldChlcnIsICdtZXNzYWdlJywgJycpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3ludGF4RXJyb3JzLmVtaXQoZGlhZ25vc3RpY3MpO1xuICAgICAgcmV0dXJuIGRpYWdub3N0aWNzO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDb3B5KCkge1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuY29udGVudCgpIHx8ICcnKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0NvbXBUeXBlVGV4dEluZm8oJ1NhbyBjaMOpcCB0aMOgbmggY8O0bmcnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyTGluZVdyYXAoKSB7XG4gICAgdGhpcy5pc1dyYXAudXBkYXRlKCh2YWw6IGFueSkgPT4gIXZhbCk7XG4gICAgdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2U/LmRpc3BhdGNoKHtcbiAgICAgIGVmZmVjdHM6IHRoaXMud3JhcENvbXBhcnRtZW50LnJlY29uZmlndXJlKHRoaXMuaXNXcmFwKCkgPyBFZGl0b3JWaWV3LmxpbmVXcmFwcGluZyA6IFtdKSxcbiAgICB9KTtcblxuICAgIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlPy5kaXNwYXRjaCh7XG4gICAgICBlZmZlY3RzOiB0aGlzLmxpbmVOdW1iZXJDb21wYXJ0bWVudC5yZWNvbmZpZ3VyZShcbiAgICAgICAgdGhpcy5pc1dyYXAoKSA/IGxpbmVOdW1iZXJzKCkgOiBbXSAvLyDwn5GIIG7hur91IHThuq90IHRow6wgcmVtb3ZlIGV4dGVuc2lvblxuICAgICAgKSxcbiAgICB9KTtcbiAgICB0aGlzLm91dENoYW5nZS5lbWl0KHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCgpLFxuICAgICAgaXNXcmFwOiB0aGlzLmlzV3JhcCgpLFxuICAgICAgbGFuZ3VhZ2U6IHRoaXMubGFuZ1NlbGVjdGVkKCksXG4gICAgICBjb250ZXh0Q2hhbmdlOiAnaXNXcmFwJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0S2V5KGRhdGE/OiBJRW1pdFNlbGVjdEtleSkge1xuICAgIGlmICghZGF0YSB8fCAhZGF0YS5rZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5sYW5nU2VsZWN0ZWQuc2V0KGRhdGEua2V5IGFzIFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQpO1xuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSB0aGlzLmdldEV4dGVuc2lvbnNCeUxhbmd1YWdlKHRoaXMubGFuZ1NlbGVjdGVkKCkpO1xuICAgIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlPy5zZXRTdGF0ZShcbiAgICAgIEVkaXRvclN0YXRlLmNyZWF0ZSh7XG4gICAgICAgIGRvYzogdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2U/LnN0YXRlLmRvYy50b1N0cmluZygpLFxuICAgICAgICAuLi5leHRlbnNpb25zLFxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMub3V0Q2hhbmdlLmVtaXQoe1xuICAgICAgY29udGVudDogdGhpcy5jb250ZW50KCksXG4gICAgICBpc1dyYXA6IHRoaXMuaXNXcmFwKCksXG4gICAgICBsYW5ndWFnZTogdGhpcy5sYW5nU2VsZWN0ZWQoKSxcbiAgICAgIGNvbnRleHRDaGFuZ2U6ICdsYW5ndWFnZScsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJsaWJzLXVpLXByZXZpZXctZGF0YS1jb250YWluZXIgZmxleCBmbGV4LWNvbCB3LWZ1bGwgaC1hdXRvIHJvdW5kZWQtWzhweF0gbGlicy11aS1ib3JkZXItZ2VuZXJhbCBweC1bOHB4XVwiXG4gIFtzdHlsZS4tLWJhY2tncm91bmQtY29sb3JdPVwiYmFja2dyb3VuZCgpXCJcbiAgW2NsYXNzLnB0LVs4cHhdXT1cIiFoaWRkZW5BY3Rpb24oKVwiPlxuICBAaWYgKCFoaWRkZW5BY3Rpb24oKSkge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBjb250ZW50LWJldHdlZW4gY29sb3ItWyM2YTczODNdXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWRyb3Bkb3duXG4gICAgICAgIGNsYXNzSW5jbHVkZT1cInctWzIwMHB4XVwiXG4gICAgICAgIFtsaXN0Q29uZmlnXT1cImNvbmZpZ0xvYWREYXRhSXNIdHRwQ29uZmlnXCJcbiAgICAgICAgW2xpc3RNYXhJdGVtU2hvd109XCI1XCJcbiAgICAgICAgW2lzTmdDb250ZW50XT1cInRydWVcIlxuICAgICAgICBbcmVhZG9ubHldPVwiIWVkaXRhYmxlKClcIlxuICAgICAgICBbbGlzdEhhc0J1dHRvblVuU2VsZWN0T3B0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0S2V5KCRldmVudClcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgIFtsYWJlbF09XCJsYWJlbExhbmcoKSB8fCAnJ1wiXG4gICAgICAgICAgW3NpemVCdXR0b25dPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvblJpZ2h0XT1cImVkaXRhYmxlKCkgPyAnbGlicy11aS1pY29uLW1vdmUtcmlnaHQgcm90YXRlLTkwJyA6ICcnXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichcC1bMHB4XScgKyAoZWRpdGFibGUoKSA/ICcnIDogJyFwb2ludGVyLWV2ZW50cy1ub25lICFjdXJzb3ItZGVmYXVsdCBob3ZlcjohdGV4dC1bIzZBNzM4M10nKVwiIC8+XG4gICAgICA8L2xpYnNfdWktY29tcG9uZW50cy1kcm9wZG93bj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgICAgW2xhYmVsXT1cImlzV3JhcCgpID8gJ2kxOG5fcmVtb3ZlX2xpbmVfd3JhcCcgOiAnaTE4bl9saW5lX3dyYXAnXCJcbiAgICAgICAgICBbc2l6ZUJ1dHRvbl09XCInc21hbGwnXCJcbiAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCJpc1dyYXAoKSA/ICdsaWJzLXVpLWljb24tdW53cmFwJyA6ICdsaWJzLXVpLWljb24td3JhcCdcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ21vLWxpYi1wLTBweCBtby1saWItbXItMTZweCdcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyTGluZVdyYXAoKVwiIC8+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICBbbGFiZWxdPVwiJ2kxOG5fY29weSdcIlxuICAgICAgICAgIFtzaXplQnV0dG9uXT1cIidzbWFsbCdcIlxuICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tY29weSdcIlxuICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ21vLWxpYi1wLTBweCdcIlxuICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyQ29weSgpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG4gIDxkaXYgI2NvbnRhaW5lclByZXZpZXc+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
333
|
+
}], ctorParameters: () => [] });
|
|
334
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy10ZXh0LWRhdGEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL3ByZXZpZXctdGV4dC1kYXRhL3NyYy9wcmV2aWV3LXRleHQtZGF0YS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvcHJldmlldy10ZXh0LWRhdGEvc3JjL3ByZXZpZXctdGV4dC1kYXRhLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFjLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBYyxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDdkUsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUYsT0FBTyxFQUFrQixpQ0FBaUMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSwrQkFBK0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFXdkksTUFBTSxPQUFPLHdDQUF3QztJ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QUVILElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzdCLGFBQWEsRUFBRSxVQUFVO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBblhVLHdDQUF3Qzs0RkFBeEMsd0NBQXdDLHVwQ0NwQnJELGcwREF5Q0EsbzNCRHZCWSxpQ0FBaUMsaTFEQUFFLHNDQUFzQzs7NEZBRXhFLHdDQUF3QztrQkFUcEQsU0FBUzsrQkFFRSxzQ0FBc0MsY0FHcEMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsaUNBQWlDLEVBQUUsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgRGVzdHJveVJlZiwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBtb2RlbCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlhZ25vc3RpYywgbGludGVyLCBsaW50R3V0dGVyIH0gZnJvbSAnQGNvZGVtaXJyb3IvbGludCc7XG5pbXBvcnQgeyBDb21wYXJ0bWVudCwgRXh0ZW5zaW9uIH0gZnJvbSAnQGNvZGVtaXJyb3Ivc3RhdGUnO1xuaW1wb3J0IHsgRWRpdG9yVmlldywgbGluZU51bWJlcnMsIFZpZXdVcGRhdGUgfSBmcm9tICdAY29kZW1pcnJvci92aWV3JztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBJRW1pdFNlbGVjdEtleSwgTGlic1VpQ29tcG9uZW50c0Ryb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1kcm9wZG93bic7XG5pbXBvcnQgeyBMaWJzVWlOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtbm90aWZpY2F0aW9uJztcbmltcG9ydCB7IGdldCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IGJhc2ljU2V0dXAgfSBmcm9tICdjb2RlbWlycm9yNic7XG5pbXBvcnQgeyBjcmVhdGVEZWZhdWx0TGFuZ3VhZ2UsIGh0dHBSZXF1ZXN0Q29uZmlnR2V0T3B0aW9uc0xhbmcsIGxhbmd1YWdlUmVnaXN0cnksIG9wdGlvbnNMYW5nRGF0YSB9IGZyb20gJy4vcHJldmlldy10ZXh0LWRhdGEuZGVmaW5lJztcbmltcG9ydCB7IElQcmV2aWV3VGV4dERhdGFDaGFuZ2UsIFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQgfSBmcm9tICcuL3ByZXZpZXctdGV4dC1kYXRhLmludGVyZmFjZXMnO1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLXByZXZpZXdfdGV4dF9kYXRhJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ByZXZpZXctdGV4dC1kYXRhLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcHJldmlldy10ZXh0LWRhdGEuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtMaWJzVWlDb21wb25lbnRzRHJvcGRvd25Db21wb25lbnQsIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1ByZXZpZXdUZXh0RGF0YUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIFBST1BFUlRJRVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIGVkaXRvclZpZXdJbnN0YW5jZT86IEVkaXRvclZpZXc7XG4gIHByaXZhdGUgcmVhZG9ubHkgd3JhcENvbXBhcnRtZW50ID0gbmV3IENvbXBhcnRtZW50KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGFuZ3VhZ2VDb21wYXJ0bWVudCA9IG5ldyBDb21wYXJ0bWVudCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpbmVOdW1iZXJDb21wYXJ0bWVudCA9IG5ldyBDb21wYXJ0bWVudCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpbnRlckNvbXBhcnRtZW50ID0gbmV3IENvbXBhcnRtZW50KCk7XG5cbiAgLyoqIENhY2hlIMSR4buDIHRyw6FuaCBsb2FkIGzhuqFpIGxhbmd1YWdlIMSRw6MgbG9hZCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxhbmd1YWdlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgRXh0ZW5zaW9uPigpO1xuXG4gIC8qKiBGbGFnIMSR4buDIHRyw6FuaCB1cGRhdGUgZWRpdG9yIGtoaSDEkWFuZyBraOG7n2kgdOG6oW8gKi9cbiAgcHJpdmF0ZSBpc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSU5KRUNURUQgU0VSVklDRVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTGlic1VpTm90aWZpY2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUk9URUNURUQgU0lHTkFMU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBpc1dyYXAgPSBzaWduYWw8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWdMb2FkRGF0YUlzSHR0cENvbmZpZyA9IGh0dHBSZXF1ZXN0Q29uZmlnR2V0T3B0aW9uc0xhbmcoKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxhYmVsTGFuZyA9IGNvbXB1dGVkKCgpID0+IG9wdGlvbnNMYW5nRGF0YS5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSB0aGlzLmxhbmdTZWxlY3RlZCgpKT8ubGFiZWwpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIElOUFVUU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHJlYWRvbmx5IGNvbnRlbnQgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHtcbiAgICB0cmFuc2Zvcm06ICh2YWx1ZT86IHN0cmluZykgPT4gdmFsdWUgPz8gJycsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGxhbmdTZWxlY3RlZCA9IG1vZGVsLnJlcXVpcmVkPFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQ+KCk7XG5cbiAgcmVhZG9ubHkgZWRpdGFibGUgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwge1xuICAgIHRyYW5zZm9ybTogKHZhbHVlPzogYm9vbGVhbikgPT4gdmFsdWUgPz8gZmFsc2UsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhpZGRlbkFjdGlvbiA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7XG4gICAgdHJhbnNmb3JtOiAodmFsdWU/OiBib29sZWFuKSA9PiB2YWx1ZSA/PyBmYWxzZSxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbGludElnbm9yZVBhdHRlcm5zID0gaW5wdXQ8QXJyYXk8c3RyaW5nPiwgQXJyYXk8c3RyaW5nPiB8IHVuZGVmaW5lZD4oWydDYW5ub3QgdXNlIGltcG9ydCBzdGF0ZW1lbnQgb3V0c2lkZSBhIG1vZHVsZScsICdVbmV4cGVjdGVkIHRva2VuIGV4cG9ydCcsICdpbXBvcnQgJywgJ0Bhbmd1bGFyL2NvcmUnXSwge1xuICAgIHRyYW5zZm9ybTogKHZhbHVlPzogQXJyYXk8c3RyaW5nPikgPT4gdmFsdWUgPz8gWydDYW5ub3QgdXNlIGltcG9ydCBzdGF0ZW1lbnQgb3V0c2lkZSBhIG1vZHVsZScsICdVbmV4cGVjdGVkIHRva2VuIGV4cG9ydCcsICdpbXBvcnQgJywgJ0Bhbmd1bGFyL2NvcmUnXSxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYmFja2dyb3VuZCA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignI2Y4ZjlmYScsIHtcbiAgICB0cmFuc2Zvcm06ICh2YWx1ZT86IHN0cmluZykgPT4gdmFsdWUgPz8gJyNmOGY5ZmEnLFxuICB9KTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBPVVRQVVRTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcmVhZG9ubHkgb3V0Q2hhbmdlID0gb3V0cHV0PElQcmV2aWV3VGV4dERhdGFDaGFuZ2U+KCk7XG4gIHJlYWRvbmx5IHN5bnRheEVycm9ycyA9IG91dHB1dDxEaWFnbm9zdGljW10+KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVklFVyBDSElMRFJFTlxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGFpbmVyUHJldmlldyA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NvbnRhaW5lclByZXZpZXcnKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBDT05TVFJVQ1RPUiAtIFNldHVwIGVmZmVjdHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBFZmZlY3QgxJHhu4Mgc3luYyBjb250ZW50IHThu6sgaW5wdXQgdsOgbyBlZGl0b3JcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgbmV3Q29udGVudCA9IHRoaXMuY29udGVudCgpO1xuICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCAmJiB0aGlzLmVkaXRvclZpZXdJbnN0YW5jZSkge1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGVudCA9IHRoaXMuZWRpdG9yVmlld0luc3RhbmNlLnN0YXRlLmRvYy50b1N0cmluZygpO1xuICAgICAgICBpZiAobmV3Q29udGVudCAhPT0gY3VycmVudENvbnRlbnQpIHtcbiAgICAgICAgICB0aGlzLmVkaXRvclZpZXdJbnN0YW5jZS5kaXNwYXRjaCh7XG4gICAgICAgICAgICBjaGFuZ2VzOiB7XG4gICAgICAgICAgICAgIGZyb206IDAsXG4gICAgICAgICAgICAgIHRvOiBjdXJyZW50Q29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICAgIGluc2VydDogbmV3Q29udGVudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENsZWFudXAga2hpIGNvbXBvbmVudCBi4buLIGRlc3Ryb3lcbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlPy5kZXN0cm95KCk7XG4gICAgICB0aGlzLmxhbmd1YWdlQ2FjaGUuY2xlYXIoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExJRkVDWUNMRSBIT09LU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVFZGl0b3IoKTtcbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFURSBNRVRIT0RTIC0gRWRpdG9yIGluaXRpYWxpemF0aW9uXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEto4bufaSB04bqhbyBlZGl0b3IgduG7m2kgY8OhYyBleHRlbnNpb25zIGPGoSBi4bqjblxuICAgKiBMYW5ndWFnZSDEkcaw4bujYyBsb2FkIGFzeW5jIMSR4buDIHThu5FpIMawdSBidW5kbGUgc2l6ZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplRWRpdG9yKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxhbmd1YWdlRXh0ZW5zaW9uID0gYXdhaXQgdGhpcy5sb2FkTGFuZ3VhZ2VFeHRlbnNpb24odGhpcy5sYW5nU2VsZWN0ZWQoKSk7XG4gICAgY29uc3QgbGludGVyRXh0ZW5zaW9uID0gYXdhaXQgdGhpcy5sb2FkTGludGVyRXh0ZW5zaW9uKHRoaXMubGFuZ1NlbGVjdGVkKCkpO1xuXG4gICAgdGhpcy5lZGl0b3JWaWV3SW5zdGFuY2UgPSBuZXcgRWRpdG9yVmlldyh7XG4gICAgICBkb2M6IHRoaXMuY29udGVudCgpLFxuICAgICAgcGFyZW50OiB0aGlzLmNvbnRhaW5lclByZXZpZXcoKS5uYXRpdmVFbGVtZW50LFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5jcmVhdGVFeHRlbnNpb25zKGxhbmd1YWdlRXh0ZW5zaW9uLCBsaW50ZXJFeHRlbnNpb24pLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFThuqFvIGRhbmggc8OhY2ggZXh0ZW5zaW9ucyBjaG8gZWRpdG9yXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUV4dGVuc2lvbnMobGFuZ3VhZ2VFeHRlbnNpb246IEV4dGVuc2lvbiwgbGludGVyRXh0ZW5zaW9uOiBFeHRlbnNpb24pOiBFeHRlbnNpb25bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGJhc2ljU2V0dXAsXG4gICAgICB0aGlzLmxhbmd1YWdlQ29tcGFydG1lbnQub2YobGFuZ3VhZ2VFeHRlbnNpb24pLFxuICAgICAgdGhpcy5saW50ZXJDb21wYXJ0bWVudC5vZihsaW50ZXJFeHRlbnNpb24pLFxuICAgICAgdGhpcy5jcmVhdGVMaWdodFRoZW1lKCksXG4gICAgICBFZGl0b3JWaWV3LmVkaXRhYmxlLm9mKHRoaXMuZWRpdGFibGUoKSksXG4gICAgICB0aGlzLndyYXBDb21wYXJ0bWVudC5vZihFZGl0b3JWaWV3LmxpbmVXcmFwcGluZyksXG4gICAgICB0aGlzLmxpbmVOdW1iZXJDb21wYXJ0bWVudC5vZihsaW5lTnVtYmVycygpKSxcbiAgICAgIGxpbnRHdXR0ZXIoKSxcbiAgICAgIHRoaXMuY3JlYXRlQnJhY2tldFRoZW1lKCksXG4gICAgICB0aGlzLmNyZWF0ZVVwZGF0ZUxpc3RlbmVyKCksXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIGxhbmd1YWdlIGV4dGVuc2lvbiB24bubaSBjYWNoaW5nXG4gICAqIE3hu5dpIGxhbmd1YWdlIGNo4buJIMSRxrDhu6NjIGxvYWQgMSBs4bqnblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkTGFuZ3VhZ2VFeHRlbnNpb24obGFuZzogUFJFVklFV19URVhUX0RBVEFfTEFOR1VBR0VfU1VQUE9SVCk6IFByb21pc2U8RXh0ZW5zaW9uPiB7XG4gICAgY29uc3QgbG93ZXJMYW5nID0gbGFuZy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5sYW5ndWFnZUNhY2hlLmdldChsb3dlckxhbmcpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlZ2lzdHJ5SXRlbSA9IGxhbmd1YWdlUmVnaXN0cnlbbG93ZXJMYW5nXTtcbiAgICBjb25zdCBleHRlbnNpb24gPSByZWdpc3RyeUl0ZW0gPyBhd2FpdCByZWdpc3RyeUl0ZW0ubG9hZGVyKCkgOiBhd2FpdCBjcmVhdGVEZWZhdWx0TGFuZ3VhZ2UoKTtcblxuICAgIHRoaXMubGFuZ3VhZ2VDYWNoZS5zZXQobG93ZXJMYW5nLCBleHRlbnNpb24pO1xuICAgIHJldHVybiBleHRlbnNpb247XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBsaW50ZXIgZXh0ZW5zaW9uIG7hur91IGPDs1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkTGludGVyRXh0ZW5zaW9uKGxhbmc6IFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQpOiBQcm9taXNlPEV4dGVuc2lvbj4ge1xuICAgIGNvbnN0IGxvd2VyTGFuZyA9IGxhbmcudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCByZWdpc3RyeUl0ZW0gPSBsYW5ndWFnZVJlZ2lzdHJ5W2xvd2VyTGFuZ107XG5cbiAgICBpZiAocmVnaXN0cnlJdGVtPy5saW50ZXIpIHtcbiAgICAgIHJldHVybiByZWdpc3RyeUl0ZW0ubGludGVyKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiBsaW50ZXIoKCkgPT4gW10pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFURSBNRVRIT0RTIC0gVGhlbWUgY29uZmlndXJhdGlvblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHByaXZhdGUgY3JlYXRlTGlnaHRUaGVtZSgpOiBFeHRlbnNpb24ge1xuICAgIHJldHVybiBFZGl0b3JWaWV3LnRoZW1lKHtcbiAgICAgICcmJzogeyBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFja2dyb3VuZCgpLCBjb2xvcjogJyMzMzMnIH0sXG4gICAgICAnLmNtLWNvbnRlbnQnOiB7IGNhcmV0Q29sb3I6ICcjMTExJyB9LFxuICAgICAgJy5jbS1hY3RpdmVMaW5lJzogeyBiYWNrZ3JvdW5kQ29sb3I6ICcjZjBmMGYwJyB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVCcmFja2V0VGhlbWUoKTogRXh0ZW5zaW9uIHtcbiAgICByZXR1cm4gRWRpdG9yVmlldy50aGVtZSh7XG4gICAgICAnLmNtLW1hdGNoaW5nQnJhY2tldCc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgxMDAsIDIwMCwgMjU1LCAwLjE1KScsXG4gICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCByZ2JhKDEwMCwgMjAwLCAyNTUsIDAuNCknLFxuICAgICAgICBib3JkZXJSYWRpdXM6ICczcHgnLFxuICAgICAgICB0cmFuc2l0aW9uOiAnYWxsIDAuMnMgZWFzZScsXG4gICAgICB9LFxuICAgICAgJy5jbS1ub25tYXRjaGluZ0JyYWNrZXQnOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjU1LCAxMDAsIDEwMCwgMC4xNSknLFxuICAgICAgICBib3JkZXI6ICcxcHggc29saWQgcmdiYSgyNTUsIDEwMCwgMTAwLCAwLjMpJyxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiAnM3B4JyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUklWQVRFIE1FVEhPRFMgLSBVcGRhdGUgbGlzdGVuZXJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBwcml2YXRlIGNyZWF0ZVVwZGF0ZUxpc3RlbmVyKCk6IEV4dGVuc2lvbiB7XG4gICAgcmV0dXJuIEVkaXRvclZpZXcudXBkYXRlTGlzdGVuZXIub2YoKHVwZGF0ZTogVmlld1VwZGF0ZSkgPT4ge1xuICAgICAgaWYgKHVwZGF0ZS5kb2NDaGFuZ2VkICYmIHRoaXMuZWRpdGFibGUoKSkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHVwZGF0ZS5zdGF0ZS5kb2MudG9TdHJpbmcoKTtcbiAgICAgICAgdGhpcy5vdXRDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgY29udGVudDogbmV3VmFsdWUsXG4gICAgICAgICAgaXNXcmFwOiB0aGlzLmlzV3JhcCgpLFxuICAgICAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmdTZWxlY3RlZCgpLFxuICAgICAgICAgIGNvbnRleHRDaGFuZ2U6ICdjb250ZW50JyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQVUJMSUMgTUVUSE9EUyAtIExpbnRlciBmYWN0b3JpZXMgKMSRxrDhu6NjIGfhu41pIHThu6sgcmVnaXN0cnkpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFThuqFvIEphdmFTY3JpcHQgbGludGVyXG4gICAqIFPhu60gZOG7pW5nIEZ1bmN0aW9uIGNvbnN0cnVjdG9yIMSR4buDIHZhbGlkYXRlIHN5bnRheFxuICAgKi9cbiAgY3JlYXRlSnNMaW50ZXIoKTogRXh0ZW5zaW9uIHtcbiAgICByZXR1cm4gbGludGVyKCh2aWV3KSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gdmlldy5zdGF0ZS5kb2MudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IGRpYWdub3N0aWNzOiBEaWFnbm9zdGljW10gPSBbXTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IEZ1bmN0aW9uKHRleHQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBnZXQoZXJyLCAnbWVzc2FnZScsICcnKTtcbiAgICAgICAgY29uc3Qgc2hvdWxkSWdub3JlID0gdGhpcy5saW50SWdub3JlUGF0dGVybnMoKS5zb21lKChwYXR0ZXJuKSA9PiBtZXNzYWdlLmluY2x1ZGVzKHBhdHRlcm4pKTtcblxuICAgICAgICBpZiAoIXNob3VsZElnbm9yZSkge1xuICAgICAgICAgIGRpYWdub3N0aWNzLnB1c2goe1xuICAgICAgICAgICAgZnJvbTogMCxcbiAgICAgICAgICAgIHRvOiB0ZXh0Lmxlbmd0aCxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnN5bnRheEVycm9ycy5lbWl0KGRpYWdub3N0aWNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlhZ25vc3RpY3M7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVOG6oW8gSlNPTiBsaW50ZXJcbiAgICogU+G7rSBk4bulbmcgSlNPTi5wYXJzZSDEkeG7gyB2YWxpZGF0ZVxuICAgKi9cbiAgY3JlYXRlSnNvbkxpbnRlcigpOiBFeHRlbnNpb24ge1xuICAgIHJldHVybiBsaW50ZXIoKHZpZXcpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSB2aWV3LnN0YXRlLmRvYy50b1N0cmluZygpO1xuICAgICAgY29uc3QgZGlhZ25vc3RpY3M6IERpYWdub3N0aWNbXSA9IFtdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBKU09OLnBhcnNlKHRleHQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICAgIGRpYWdub3N0aWNzLnB1c2goe1xuICAgICAgICAgIGZyb206IDAsXG4gICAgICAgICAgdG86IHRleHQubGVuZ3RoLFxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGdldChlcnIsICdtZXNzYWdlJywgJycpLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zeW50YXhFcnJvcnMuZW1pdChkaWFnbm9zdGljcyk7XG4gICAgICByZXR1cm4gZGlhZ25vc3RpY3M7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVOG6oW8gU1FMIGxpbnRlclxuICAgKiBMYXp5IGxvYWQgbm9kZS1zcWwtcGFyc2VyIGNo4buJIGtoaSBj4bqnblxuICAgKi9cbiAgY3JlYXRlU3FsTGludGVyKCk6IEV4dGVuc2lvbiB7XG4gICAgcmV0dXJuIGxpbnRlcihhc3luYyAodmlldykgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IHZpZXcuc3RhdGUuZG9jLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdID0gW107XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIExhenkgbG9hZCBTUUwgcGFyc2VyIGNo4buJIGtoaSB0aOG7sWMgc+G7sSBj4bqnblxuICAgICAgICBjb25zdCB7IFBhcnNlciB9ID0gYXdhaXQgaW1wb3J0KCdub2RlLXNxbC1wYXJzZXInKTtcbiAgICAgICAgY29uc3Qgc3FsUGFyc2VyID0gbmV3IFBhcnNlcigpO1xuICAgICAgICBzcWxQYXJzZXIuYXN0aWZ5KHRleHQpO1xuICAgICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICAgIGRpYWdub3N0aWNzLnB1c2goe1xuICAgICAgICAgIGZyb206IDAsXG4gICAgICAgICAgdG86IHRleHQubGVuZ3RoLFxuICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGdldChlcnIsICdtZXNzYWdlJywgJycpLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zeW50YXhFcnJvcnMuZW1pdChkaWFnbm9zdGljcyk7XG4gICAgICByZXR1cm4gZGlhZ25vc3RpY3M7XG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBQUk9URUNURUQgTUVUSE9EUyAtIEV2ZW50IGhhbmRsZXJzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDb3B5KCk6IHZvaWQge1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuY29udGVudCgpIHx8ICcnKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc2hvd0NvbXBUeXBlVGV4dEluZm8oJ1NhbyBjaMOpcCB0aMOgbmggY8O0bmcnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyTGluZVdyYXAoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ2hhbmRsZXJMaW5lV3JhcCcsIHRoaXMuaXNXcmFwKCkpO1xuICAgIC8vIEzhuqV5IG7hu5lpIGR1bmcgbeG7m2kgbmjhuqV0IHThu6sgZWRpdG9yIHNhdSBraGkgxJHDoyB4w7NhIG5ld2xpbmVzXG4gICAgY29uc3QgY3VycmVudENvbnRlbnQgPSB0aGlzLmVkaXRvclZpZXdJbnN0YW5jZT8uc3RhdGUuZG9jLnRvU3RyaW5nKCkgfHwgJyc7XG4gICAgY29uc3QgdXBkYXRlZENvbnRlbnQgPSB0aGlzLmlzV3JhcCgpICYmIGN1cnJlbnRDb250ZW50ID8gY3VycmVudENvbnRlbnQucmVwbGFjZSgvXFxuL2csICcgJykgOiB0aGlzLmNvbnRlbnQoKTtcbiAgICB0aGlzLmlzV3JhcC51cGRhdGUoKHZhbCkgPT4gIXZhbCk7XG4gICAgY29uc29sZS5sb2coJ3VwZGF0ZWRDb250ZW50JywgdGhpcy5pc1dyYXAoKSk7XG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnRDb250ZW50JywgY3VycmVudENvbnRlbnQpO1xuICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkQ29udGVudCcsIHVwZGF0ZWRDb250ZW50KTtcblxuICAgIGlmIChjdXJyZW50Q29udGVudCAhPT0gdXBkYXRlZENvbnRlbnQpIHtcbiAgICAgIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlPy5kaXNwYXRjaCh7XG4gICAgICAgIGNoYW5nZXM6IHsgZnJvbTogMCwgdG86IGN1cnJlbnRDb250ZW50Lmxlbmd0aCwgaW5zZXJ0OiB1cGRhdGVkQ29udGVudCB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQmF0Y2ggY+G6oyAyIGRpc3BhdGNoIHRow6BuaCAxIMSR4buDIHThu5FpIMawdSBwZXJmb3JtYW5jZVxuICAgIHRoaXMuZWRpdG9yVmlld0luc3RhbmNlPy5kaXNwYXRjaCh7XG4gICAgICBlZmZlY3RzOiBbdGhpcy53cmFwQ29tcGFydG1lbnQucmVjb25maWd1cmUodGhpcy5pc1dyYXAoKSA/IEVkaXRvclZpZXcubGluZVdyYXBwaW5nIDogW10pLCB0aGlzLmxpbmVOdW1iZXJDb21wYXJ0bWVudC5yZWNvbmZpZ3VyZSh0aGlzLmlzV3JhcCgpID8gbGluZU51bWJlcnMoKSA6IFtdKV0sXG4gICAgfSk7XG5cbiAgICB0aGlzLm91dENoYW5nZS5lbWl0KHtcbiAgICAgIGNvbnRlbnQ6IHVwZGF0ZWRDb250ZW50LFxuICAgICAgaXNXcmFwOiB0aGlzLmlzV3JhcCgpLFxuICAgICAgbGFuZ3VhZ2U6IHRoaXMubGFuZ1NlbGVjdGVkKCksXG4gICAgICBjb250ZXh0Q2hhbmdlOiAnaXNXcmFwJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0S2V5KGRhdGE/OiBJRW1pdFNlbGVjdEtleSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghZGF0YT8ua2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3TGFuZyA9IGRhdGEua2V5IGFzIFBSRVZJRVdfVEVYVF9EQVRBX0xBTkdVQUdFX1NVUFBPUlQ7XG4gICAgdGhpcy5sYW5nU2VsZWN0ZWQuc2V0KG5ld0xhbmcpO1xuXG4gICAgLy8gTG9hZCBsYW5ndWFnZSB2w6AgbGludGVyIG3hu5tpXG4gICAgY29uc3QgW2xhbmd1YWdlRXh0ZW5zaW9uLCBsaW50ZXJFeHRlbnNpb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMubG9hZExhbmd1YWdlRXh0ZW5zaW9uKG5ld0xhbmcpLCB0aGlzLmxvYWRMaW50ZXJFeHRlbnNpb24obmV3TGFuZyldKTtcblxuICAgIC8vIFJlY29uZmlndXJlIHRoYXkgdsOsIHThuqFvIG3hu5tpIHN0YXRlIMSR4buDIGdp4buvIGzhuqFpIGRvY3VtZW50IGNvbnRlbnRcbiAgICB0aGlzLmVkaXRvclZpZXdJbnN0YW5jZT8uZGlzcGF0Y2goe1xuICAgICAgZWZmZWN0czogW3RoaXMubGFuZ3VhZ2VDb21wYXJ0bWVudC5yZWNvbmZpZ3VyZShsYW5ndWFnZUV4dGVuc2lvbiksIHRoaXMubGludGVyQ29tcGFydG1lbnQucmVjb25maWd1cmUobGludGVyRXh0ZW5zaW9uKV0sXG4gICAgfSk7XG5cbiAgICB0aGlzLm91dENoYW5nZS5lbWl0KHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudCgpLFxuICAgICAgaXNXcmFwOiB0aGlzLmlzV3JhcCgpLFxuICAgICAgbGFuZ3VhZ2U6IHRoaXMubGFuZ1NlbGVjdGVkKCksXG4gICAgICBjb250ZXh0Q2hhbmdlOiAnbGFuZ3VhZ2UnLFxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwibGlicy11aS1wcmV2aWV3LWRhdGEtY29udGFpbmVyIGZsZXggZmxleC1jb2wgdy1mdWxsIGgtYXV0byByb3VuZGVkLVs4cHhdIGxpYnMtdWktYm9yZGVyLWdlbmVyYWwgcHgtWzhweF1cIlxuICBbc3R5bGUuLS1iYWNrZ3JvdW5kLWNvbG9yXT1cImJhY2tncm91bmQoKVwiXG4gIFtjbGFzcy5wdC1bOHB4XV09XCIhaGlkZGVuQWN0aW9uKClcIj5cbiAgQGlmICghaGlkZGVuQWN0aW9uKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgY29udGVudC1iZXR3ZWVuIGNvbG9yLVsjNmE3MzgzXVwiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kcm9wZG93blxuICAgICAgICBjbGFzc0luY2x1ZGU9XCJ3LVsyMDBweF1cIlxuICAgICAgICBbbGlzdENvbmZpZ109XCJjb25maWdMb2FkRGF0YUlzSHR0cENvbmZpZ1wiXG4gICAgICAgIFtsaXN0TWF4SXRlbVNob3ddPVwiNVwiXG4gICAgICAgIFtpc05nQ29udGVudF09XCJ0cnVlXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cIiFlZGl0YWJsZSgpXCJcbiAgICAgICAgW2xpc3RIYXNCdXR0b25VblNlbGVjdE9wdGlvbl09XCJmYWxzZVwiXG4gICAgICAgIChvdXRTZWxlY3RLZXkpPVwiaGFuZGxlclNlbGVjdEtleSgkZXZlbnQpXCI+XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICBbbGFiZWxdPVwibGFiZWxMYW5nKCkgfHwgJydcIlxuICAgICAgICAgIFtzaXplQnV0dG9uXT1cIidzbWFsbCdcIlxuICAgICAgICAgIFtjbGFzc0ljb25SaWdodF09XCJlZGl0YWJsZSgpID8gJ2xpYnMtdWktaWNvbi1tb3ZlLXJpZ2h0IHJvdGF0ZS05MCcgOiAnJ1wiXG4gICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIXAtWzBweF0nICsgKGVkaXRhYmxlKCkgPyAnJyA6ICchcG9pbnRlci1ldmVudHMtbm9uZSAhY3Vyc29yLWRlZmF1bHQgaG92ZXI6IXRleHQtWyM2QTczODNdJylcIiAvPlxuICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtZHJvcGRvd24+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgIFtsYWJlbF09XCJpc1dyYXAoKSA/ICdpMThuX3JlbW92ZV9saW5lX3dyYXAnIDogJ2kxOG5fbGluZV93cmFwJ1wiXG4gICAgICAgICAgW3NpemVCdXR0b25dPVwiJ3NtYWxsJ1wiXG4gICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiaXNXcmFwKCkgPyAnbGlicy11aS1pY29uLXVud3JhcCcgOiAnbGlicy11aS1pY29uLXdyYXAnXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidtby1saWItcC0wcHggbW8tbGliLW1yLTE2cHgnXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckxpbmVXcmFwKClcIiAvPlxuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgICAgW2xhYmVsXT1cIidpMThuX2NvcHknXCJcbiAgICAgICAgICBbc2l6ZUJ1dHRvbl09XCInc21hbGwnXCJcbiAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWNvcHknXCJcbiAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidtby1saWItcC0wcHgnXCJcbiAgICAgICAgICAob3V0Q2xpY2spPVwiaGFuZGxlckNvcHkoKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgfVxuICA8ZGl2ICNjb250YWluZXJQcmV2aWV3PjwvZGl2PlxuPC9kaXY+XG4iXX0=
|