-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.js
535 lines (533 loc) · 95.4 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// main.ts
var main_exports = {};
__export(main_exports, {
default: () => PrayerPlugin
});
module.exports = __toCommonJS(main_exports);
var import_obsidian = require("obsidian");
var DEFAULT_SETTINGS = {
StartMsg: "Prayer ToolKits plugin loaded",
CloseMsg: "Prayer ToolKits plugin unloaded"
};
var PrayerPlugin = class extends import_obsidian.Plugin {
constructor() {
super(...arguments);
this.isCheckingBacklinks = false;
// 工具栏(fontStyleBar) 隐藏时的定时器
this.isHoverFontStyleBar = false;
// 鼠标是否在工具栏(fontStyleBar) 上
this.isHoverButtonFontStyle = false;
// 鼠标是否在按钮上
this.HeightToolBar = 30;
// 工具栏的高度
this.WidthToolBar = 220;
// 工具栏的宽度
this.HeightFontStyleBar = 181;
// 工具栏(fontStyleBar) 的高度
this.WidthFontStyleBar = 139;
}
// 加载设置
async loadSettings() {
this.settings = Object.assign(
{},
DEFAULT_SETTINGS,
await this.loadData()
);
}
async onload() {
await this.loadSettings();
console.log(this.settings.StartMsg);
this.addCommand({
id: "scan-eye",
name: "\u6253\u4E2A\u62DB\u547C",
callback: () => {
new import_obsidian.Notice("haha,\u4F60\u597D!");
const element = document.getElementById("obs-float-toolbar");
if (element) {
console.log(element.offsetHeight);
console.log(element.offsetWidth);
}
const element2 = document.getElementById("font-style-bar");
if (element2) {
console.log(element2.offsetHeight);
console.log(element2.offsetWidth);
}
}
});
this.createFloatToolbar();
this.creatFontStyleBar();
}
async onunload() {
var _a, _b;
(_a = document.querySelector("#obs-float-toolbar")) == null ? void 0 : _a.remove();
(_b = document.querySelector("#font-style-bar")) == null ? void 0 : _b.remove();
console.log(this.settings.CloseMsg);
}
async checkFileBacklinks(activeFile) {
if (this.isCheckingBacklinks) {
return;
}
this.isCheckingBacklinks = true;
try {
const backlinks = this.app.metadataCache.getBacklinksForFile(activeFile);
if (backlinks.data.size === 0)
return;
const fileContent = await this.app.vault.read(activeFile);
let inActiveLinkNum = 0;
for (const [linkFilePath, linkData] of backlinks.data) {
const linkParts = linkData[0].link.split("#");
const linkedFile = this.app.vault.getAbstractFileByPath(linkFilePath);
if (linkedFile instanceof import_obsidian.TFile) {
if (linkParts.length === 1) {
if (linkParts[0] != activeFile.name) {
inActiveLinkNum = inActiveLinkNum + 1;
console.log(linkParts[0]);
}
} else {
const containsString = fileContent.includes(linkParts[1] + "\n");
if (!containsString) {
inActiveLinkNum = inActiveLinkNum + 1;
console.log(linkParts[1]);
}
}
}
}
if (inActiveLinkNum != 0) {
new import_obsidian.Notice(`${activeFile.name} \u5B58\u5728 ${inActiveLinkNum} \u4E2A\u5931\u6548\u7684\u53CD\u94FE!`);
console.log(`${activeFile.name} \u5B58\u5728 ${inActiveLinkNum} \u4E2A\u5931\u6548\u7684\u53CD\u94FE!`);
}
} finally {
this.isCheckingBacklinks = false;
}
}
createFloatToolbar() {
const toolbar = document.createElement("div");
toolbar.id = "obs-float-toolbar";
toolbar.style.display = "none";
document.body.appendChild(toolbar);
const buttons = [
{
label: "Bold",
icon: '<svg t="1738292375350" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3110" width="200" height="200"><path d="M362.976 804.704h141.12c79.616 0 135.776-10.24 168.384-30.784 32.64-20.48 48.96-54.496 48.96-101.984 0-47.904-15.584-82.016-46.72-102.304-31.168-20.288-85.92-30.432-164.288-30.432h-147.456v265.504z m0-345.152h132.832c60.16 0 104.768-9.728 133.76-29.12 29.056-19.456 43.552-49.44 43.552-90.048 0-38.4-13.12-67.872-39.392-88.384-26.272-20.48-64-30.752-113.12-30.752h-157.632v238.304zM545.376 896H236.48c-14.816 0-25.92-3.872-33.344-11.648-7.424-7.776-11.136-19.424-11.136-34.976 0-17.28 15.04-44.672 50.24-44.672h20.96V221.248H242.24c-32.64 0-46.4-28.928-46.4-46.624 0-15.104 3.776-26.656 11.424-34.656 7.616-8 18.624-11.968 33.024-11.968h266.336c89.824 0 158.24 17.792 205.248 53.44 47.04 35.584 70.56 87.296 70.56 155.072 0 34.112-7.2 63.904-21.6 89.376-14.4 25.472-35.84 46.4-64.192 62.816 45.76 16.832 79.744 40.32 101.984 70.56 22.24 30.24 33.376 68.64 33.376 115.264 0 39.296-9.536 75.136-28.608 107.52-19.072 32.352-45.952 58.88-80.704 79.616a232.64 232.64 0 0 1-69.28 26.24c-25.408 5.408-61.44 8.096-108.032 8.096z" p-id="3111"></path></svg>',
className: "ftb-bold",
onClick: () => this.applyFormatting("**")
},
{
label: "Italic",
icon: '<svg t="1738296872420" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15709" width="200" height="200"><path d="M768 176a48 48 0 0 1-48 48h-96l-128 576h96a48 48 0 1 1 0 96h-288a48 48 0 1 1 0-96h96l128-576h-96a48 48 0 0 1 0-96h288a48 48 0 0 1 48 48z" p-id="15710"></path></svg>',
className: "ftb-italic",
onClick: () => this.applyFormatting("*")
},
{
label: "StrikeThrough",
icon: '<svg t="1738584898664" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="45245" width="200" height="200"><path d="M506.779 89c41.074 0 79.161 4.85 114.261 14.549 35.1 9.7 65.906 24.994 92.417 45.885 26.512 20.89 47.423 47.19 62.732 78.9 12.106 25.074 19.893 53.998 23.36 86.77l0.187 0.002C799.736 335 780.92 354 747.881 353c-32.53-0.985-45.602-15.744-51.185-37h-0.034l-0.134-0.653-0.088-0.347h0.017l-0.066-0.324c-9.063-43.547-28.392-76.059-57.988-97.534-35.473-25.74-80.841-38.61-136.105-38.61-22.404 0-44.435 2.238-66.092 6.714-21.658 4.477-40.888 11.938-57.691 22.383-16.803 10.446-30.246 24.435-40.328 41.968-10.082 17.533-15.123 39.357-15.123 65.47 0 24.621 7.282 44.58 21.845 59.874 14.562 15.295 33.98 27.792 58.25 37.491 24.272 9.7 51.717 17.72 82.336 24.062 30.619 6.342 61.798 13.243 93.537 20.704A1119.821 1119.821 0 0 1 661.746 480L928 480c17.673 0 32 14.327 32 32 0 17.673-14.327 32-32 32H778.596c13.572 13.193 25.092 28.28 34.56 45.257C827.719 615.37 835 648.199 835 687.742c0 42.527-9.522 78.9-28.565 109.116-19.044 30.217-43.502 54.838-73.374 73.864-29.872 19.025-63.292 32.828-100.259 41.408-36.967 8.58-73.747 12.87-110.34 12.87-44.809 0-87.19-5.596-127.144-16.787-39.954-11.192-75.054-28.165-105.3-50.921-30.245-22.756-54.143-51.854-71.693-87.293-12.867-25.983-21.017-55.474-24.45-88.474l-0.06-0.58-0.089 0.001C192 657.961 216.996 644.051 244.513 643c27.243-1.04 47.997 13.269 50.988 36.267l0.086 0.7c3.065 18.77 8.677 35.725 16.835 50.862 13.07 24.248 30.246 44.206 51.53 59.874 21.284 15.668 46.115 27.232 74.494 34.693 28.379 7.461 57.504 11.192 87.376 11.192 23.898 0 47.983-2.239 72.254-6.715 24.271-4.477 46.115-12.124 65.532-22.943 19.417-10.818 35.1-25.553 47.049-44.206 11.949-18.652 17.923-42.527 17.923-71.625 0-27.605-7.281-49.988-21.844-67.149-14.563-17.16-33.98-31.149-58.25-41.967-24.272-10.819-51.717-19.585-82.336-26.3-17.48-3.834-35.141-7.728-52.986-11.682L97 544c-17.673 0-32-14.327-32-32 0-17.673 14.327-32 32-32h210.69a297.961 297.961 0 0 1-10.95-6.574c-24.272-15.295-43.689-35.067-58.251-59.315-14.563-24.248-21.844-54.651-21.844-91.21 0-40.29 8.214-75.17 24.644-104.64s38.274-53.719 65.532-72.744c27.259-19.026 58.251-33.202 92.978-42.528C434.525 93.663 470.185 89 506.779 89z" p-id="45246"></path></svg>',
className: "ftb-strikethrough",
onClick: () => this.applyFormatting("~~")
},
{
label: "Highlight",
icon: '<svg t="1738584898664" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="45245" width="200" height="200"><path stroke="null" id="svg_1" p-id="336032" fill="#FFF920" d="m191.34128,761.45301l641.31747,0l0,194.34236l-641.31747,0l0,-194.34236z"/><path stroke-width="28" stroke="null" id="svg_2" class="selected" data-spm-anchor-id="a313x.search_index.0.i76.13fe3a817UVolb" p-id="336033" d="m140.00001,709.91236l0,263.99873l-62,0l0,-340.16236c0,-67.18768 38.44,-127.57738 96.968,-152.45926a188.542,200.70503 0 0 0 98.58,-96.62353l24.738,-52.53575a31,32.99984 0 0 1 27.714,-18.2159l0,-113.91546a93,98.99953 0 0 1 69.812,-95.83153l186,-51.01776a93,98.99953 0 0 1 116.188,95.83154l0,164.9992a31,32.99984 0 0 1 27.714,18.21591l24.676,52.53574a188.542,200.70503 0 0 0 98.58,96.55753a154.318,164.27321 0 0 1 97.03,152.39327l0,340.29436l-62,0l0,-263.99873l-744,0l0,-0.066zm462.768,-593.79914l-5.518,0.924l-186,51.01776a31,32.99984 0 0 0 -23.25,31.94384l0,113.84945l247.99999,0l0,-164.8672a31,32.99984 0 0 0 -0.248,-4.15798l-0.744,-4.02599a31,32.99984 0 0 0 -26.784,-24.61788l-5.456,-0.06601zm-462.768,527.79946l744,0l0,-10.16395c0,-40.19381 -22.93999,-76.29563 -58.032,-91.21156a250.542,266.70472 0 0 1 -131.006,-128.36937l-16.182,-34.31984l-333.622,0l-16.12,34.31984a250.542,266.70472 0 0 1 -118.048,122.3634l-13.02,5.93997a92.318,98.27352 0 0 0 -57.97,91.34356l0,10.16395l0,-0.066z"/></svg>',
className: "ftb-highlight",
onClick: () => this.applyFormatting("==")
},
{
label: "Code",
icon: '<svg t="1738296427779" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="38075" width="200" height="200"><path d="M280.448 376.32a53.76 53.76 0 0 0 0-75.52l-0.64-0.768a52.48 52.48 0 0 0-74.88 0L15.552 491.264a53.76 53.76 0 0 0 0 75.52l189.44 191.296a52.48 52.48 0 0 0 74.88 0l0.64-0.704a53.76 53.76 0 0 0 0-75.52l-113.92-115.008a53.76 53.76 0 0 1 0-75.52l113.92-115.072z m728.064 114.944l-189.44-191.232a52.48 52.48 0 0 0-74.88 0l-0.64 0.704a53.76 53.76 0 0 0 0 75.52l113.92 115.008a53.76 53.76 0 0 1 0 75.52l-113.92 115.072a53.76 53.76 0 0 0 0 75.52l0.64 0.64a52.48 52.48 0 0 0 74.88 0l189.44-191.168a53.76 53.76 0 0 0 0-75.52z m-318.144-223.36l-272.832 583.68c-8.832 18.368-24.32 41.024-44.352 41.024h-1.088c-38.912 0-64.256-52.8-47.04-88.448l271.232-578.176c8.832-18.304 41.6-32.64 41.6-32.64V192c52.928 0 69.632 40.32 52.48 75.904z" p-id="38076"></path></svg>',
className: "ftb-code",
onClick: () => this.applyFormatting("`")
},
{
label: "Latex",
icon: '<svg t="1738297536928" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="30016" width="200" height="200"><path d="M608.4608 858.7776a38.4 38.4 0 0 1 0-54.272l144.7936-144.8448a38.4 38.4 0 1 1 54.272 54.272l-144.7936 144.896a38.4 38.4 0 0 1-54.272 0z" p-id="30017"></path><path d="M807.5776 858.7776a38.4 38.4 0 0 1-54.272 0l-144.896-144.7936a38.4 38.4 0 1 1 54.3744-54.272l144.7936 144.7936a38.4 38.4 0 0 1 0 54.272zM474.7776 177.152C508.8256 131.9936 556.6976 102.4 614.4 102.4c104.2432 0 151.9104 71.5264 170.0864 98.816l0.512 0.768a51.2 51.2 0 0 1-85.1968 56.832C683.4176 234.24 662.7328 204.8 614.4 204.8c-19.0976 0-38.912 8.8576-57.856 33.9968-19.6608 26.112-36.7104 68.2496-45.056 126.8224-4.096 28.3648-7.3728 59.9552-11.008 94.5152-1.9456 18.9952-4.096 38.912-6.4 59.648-6.4512 56.832-14.7456 117.8624-28.3136 173.8752-13.4144 55.296-33.024 110.4896-64.8704 152.7296C367.5136 890.7264 319.7952 921.6 256 921.6c-72.448 0-111.104-38.7072-137.216-64.8704l-1.3824-1.3312a51.2 51.2 0 1 1 72.3968-72.3968c25.088 25.088 37.5296 36.1984 66.2016 36.1984 25.8048 0 45.2608-10.752 63.0784-34.4064 19.4048-25.7024 34.9696-64.9728 47.1552-115.2512 12.032-49.5616 19.7632-105.3696 26.112-161.28 2.048-18.5856 4.096-37.376 5.9904-55.9616 3.7888-35.9936 7.4752-71.0144 11.776-101.12 9.9328-69.4272 31.3344-129.7408 64.6656-173.9776z" p-id="30018"></path><path d="M294.4 409.6a38.4 38.4 0 0 1 38.4-38.4h307.2a38.4 38.4 0 0 1 0 76.8h-307.2A38.4 38.4 0 0 1 294.4 409.6z" p-id="30019"></path></svg>',
className: "ftb-latex",
onClick: () => this.applyFormatting("$")
},
{
label: "Clear",
icon: '<svg t="1738299984679" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="52408" width="200" height="200"><path d="M867.925333 515.072c24.277333-24.32 44.330667-44.330667 59.306667-61.994667 15.573333-18.346667 28.16-36.906667 35.413333-59.008a170.624 170.624 0 0 0 0-105.472c-7.253333-22.101333-19.84-40.661333-35.413333-59.008-14.976-17.664-35.029333-37.717333-59.306667-61.994666l-11.52-11.52c-24.32-24.32-44.373333-44.373333-61.994666-59.306667-18.346667-15.616-36.906667-28.202667-59.008-35.413333a170.666667 170.666667 0 0 0-105.514667 0c-22.101333 7.210667-40.661333 19.797333-59.008 35.413333-17.664 14.933333-37.674667 34.986667-61.952 59.306667l-69.76 69.76-283.136 283.093333c-24.277333 24.32-44.330667 44.330667-59.306667 61.994667-15.573333 18.346667-28.16 36.906667-35.370666 59.008a170.666667 170.666667 0 0 0 0 105.472c7.168 22.101333 19.797333 40.661333 35.370666 59.008 14.976 17.664 35.029333 37.717333 59.306667 61.994666l29.781333 29.781334 2.56 2.517333c12.245333 12.288 23.04 23.125333 36.053334 31.104a128 128 0 0 0 37.034666 15.36c14.848 3.541333 30.165333 3.498667 47.530667 3.498667H896a42.666667 42.666667 0 1 0 0-85.333334h-366.336l338.261333-338.261333z m-158.890666-372.522667c7.125333 2.304 15.829333 7.082667 30.122666 19.242667 14.72 12.458667 32.298667 30.037333 58.154667 55.893333l9.002667 9.002667c25.856 25.856 43.392 43.434667 55.893333 58.112 12.117333 14.336 16.938667 23.04 19.242667 30.165333a85.333333 85.333333 0 0 1 0 52.736c-2.304 7.125333-7.125333 15.829333-19.242667 30.165334-12.501333 14.677333-30.037333 32.256-55.893333 58.112l-38.314667 38.357333L529.664 256l38.357333-38.357333c25.813333-25.813333 43.434667-43.392 58.112-55.850667 14.293333-12.16 23.04-16.938667 30.165334-19.242667a85.333333 85.333333 0 0 1 52.736 0zM707.626667 554.666667l-271.146667 271.189333c-16.213333 16.213333-19.584 19.2-22.869333 21.205333a42.666667 42.666667 0 0 1-12.373334 5.12c-3.754667 0.853333-8.234667 1.152-31.146666 1.152H312.533333c-22.912 0-27.392-0.256-31.146666-1.194666a42.666667 42.666667 0 0 1-12.373334-5.12c-3.285333-2.005333-6.656-4.992-22.869333-21.162667l-28.501333-28.544c-25.856-25.856-43.392-43.434667-55.893334-58.112-12.117333-14.293333-16.938667-23.04-19.2-30.165333a85.333333 85.333333 0 0 1 0-52.736c2.261333-7.125333 7.082667-15.829333 19.2-30.165334 12.501333-14.677333 30.037333-32.256 55.893334-58.112l251.648-251.690666L707.626667 554.666667z" p-id="52409"></path></svg>',
className: "ftb-clear",
onClick: () => this.clearFormatting()
},
{
label: "FontStyle",
icon: '<svg t="1738315709805" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="59911" width="200" height="200"><path d="M839 768H735.3l-74.1-192.7H358.6L288.7 768H185L461.8 64h100.4L839 768zM632.1 495.8L522.3 203.1c-3.4-9.4-7.2-25.7-11.3-49.1h-2.3c-3.4 21.2-7.4 37.6-11.7 49.1L388.1 495.8h244z" p-id="59912"></path><path d="M64 832h896v128H64z" fill="#FF0000" p-id="59913" data-spm-anchor-id="a313x.search_index.0.i54.69493a81kRjeMd" class="selected"></path></svg>',
icon2: '<svg t="1738317360062" class="icon-page font-bt-trig" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="60947" width="200" height="200"><path d="M529.92 640.512L716.8 456.704a51.2 51.2 0 0 0-35.84-88.064H314.88a51.2 51.2 0 0 0-36.864 87.04l179.2 183.808a51.2 51.2 0 0 0 72.192 0z" fill="#B9B8B6" p-id="60948"></path></svg>',
className: "ftb-font-style",
// 这个类保证是唯一的
classNorm: "obs-btn-page",
// 这个类可以是通用的
onClick: () => {
}
// click不设置,因为这个按钮是用来显示下拉菜单的,写个空函数
}
];
buttons.forEach(({ onClick, icon, icon2, className, classNorm }) => {
const button = document.createElement("button");
button.className = className;
if (classNorm && icon2) {
button.innerHTML = icon + icon2;
button.className += ` ${classNorm}`;
} else {
button.innerHTML = icon;
}
button.onclick = onClick;
toolbar.appendChild(button);
if (className === "ftb-font-style") {
button.addEventListener("mouseenter", () => {
this.isHoverButtonFontStyle = true;
if (this.THideFontStyleBar) {
clearTimeout(this.THideFontStyleBar);
}
this.showFontStyleBar();
});
button.addEventListener("mouseleave", () => {
this.isHoverButtonFontStyle = false;
this.hideFontStyleBarLater();
});
}
});
document.addEventListener("selectionchange", () => this.controlToolbar());
}
controlToolbar() {
clearTimeout(this.TSelectionText);
this.TSelectionText = setTimeout(() => {
var _a;
const selection = (_a = window.getSelection()) == null ? void 0 : _a.toString();
if (selection) {
this.showToolbar();
} else {
this.hideToolbar();
}
}, 300);
}
showToolbar() {
setTimeout(() => {
var _a, _b, _c;
const activeLeaf = this.app.workspace.getActiveViewOfType(import_obsidian.MarkdownView);
if (!activeLeaf || activeLeaf.currentMode.type == "preview")
return;
const toolbar = document.getElementById("obs-float-toolbar");
if (!toolbar)
return;
const rangeFirst = (_a = window.getSelection()) == null ? void 0 : _a.getRangeAt(0).getClientRects()[0];
if (!rangeFirst)
return;
const selection = (_b = window.getSelection()) == null ? void 0 : _b.toString();
if (!selection)
return;
const pagePosition = (_c = document.getElementsByClassName("mod-active")[0]) == null ? void 0 : _c.getBoundingClientRect();
let left = rangeFirst.left + window.scrollX;
const top = rangeFirst.top + window.scrollY - this.HeightToolBar - 6;
if (pagePosition.right - this.WidthToolBar - this.WidthFontStyleBar / 2 - 15 - left < 0) {
left = pagePosition.right - this.WidthToolBar - this.WidthFontStyleBar / 2 - 15;
if (left < 0)
left = 0;
}
toolbar.style.left = `${left}px`;
toolbar.style.top = `${top}px`;
toolbar.style.display = "flex";
}, 100);
}
hideToolbar() {
this.hideFontStyleBar();
const toolbar = document.getElementById("obs-float-toolbar");
if (!toolbar)
return;
toolbar.style.display = "none";
}
applyFormatting(format) {
var _a;
const editor = (_a = this.app.workspace.activeEditor) == null ? void 0 : _a.editor;
if (!editor)
return;
const selection = editor.getSelection();
if (!selection)
return;
if (selection.includes("\n")) {
this.hideToolbar();
new import_obsidian.Notice("\u4E0D\u80FD\u8BBE\u7F6E\u591A\u6BB5\u6587\u672C\u7684\u683C\u5F0F");
const cursor = editor.getCursor();
editor.setSelection(cursor, cursor);
editor.focus();
return;
}
const formattedText = `${format}${selection}${format}`;
editor.replaceSelection(formattedText);
editor.focus();
this.hideToolbar();
}
clearFormatting() {
var _a;
const editor = (_a = this.app.workspace.activeEditor) == null ? void 0 : _a.editor;
if (!editor)
return;
const selection = editor.getSelection();
if (!selection)
return;
const plainText = selection.replace(/(\*\*|__)(.*?)\1/g, "$2").replace(/(_|\*)(.*?)\1/g, "$2").replace(/~~(.*?)~~/g, "$1").replace(/(\$)(.*?)\1/g, "$2").replace(/`([^`]+)`/g, "$1").replace(/\[(.*?)\]\(.*?\)/g, "$1").replace(/<font.*?>(.*?)<\/font>/g, "$1").replace(/==(.*?)==/g, "$1");
editor.replaceSelection(plainText);
editor.focus();
this.hideToolbar();
}
creatFontStyleBar() {
const fontStyleBar = document.createElement("div");
fontStyleBar.id = "font-style-bar";
fontStyleBar.style.display = "none";
document.body.appendChild(fontStyleBar);
const bgColorDiv = document.createElement("div");
bgColorDiv.textContent = "\u6587\u5B57\u989C\u8272";
bgColorDiv.className = "ftb-text-div";
fontStyleBar.appendChild(bgColorDiv);
const ftbBtnDiv = document.createElement("div");
ftbBtnDiv.className = "ftb-btn-div";
fontStyleBar.appendChild(ftbBtnDiv);
const fontColorBtns = [
{
className: "fsb-red",
fontColor: "235, 87, 87"
},
{
className: "fsb-orange",
fontColor: "217, 115, 13"
},
{
className: "fsb-green",
fontColor: "68, 131, 97"
},
{
className: "fsb-cyan",
fontColor: "53, 115, 125"
},
{
className: "fsb-blue",
fontColor: "51, 126, 169"
},
{
className: "fsb-purple",
fontColor: "100, 37, 208"
},
{
className: "fsb-grey",
fontColor: "143, 149, 158"
},
{
className: "fsb-black",
fontColor: "0, 0, 0"
}
];
for (const { className, fontColor } of fontColorBtns) {
const button = document.createElement("button");
button.className = className;
button.className += " fsb-fc-btn";
button.onclick = () => this.applyFontStyle(button, fontColor);
ftbBtnDiv.appendChild(button);
button.innerHTML = `<svg t="1738485580901" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="103436" width="200" height="200"><path d="M512 128a42.439111 42.439111 0 0 1 16.156444 3.185778 42.837333 42.837333 0 0 1 6.940445 3.640889 42.382222 42.382222 0 0 1 6.200889 4.892444 42.382222 42.382222 0 0 1 6.883555 8.647111 42.894222 42.894222 0 0 1 2.446223 4.721778l284.444444 625.777778a42.666667 42.666667 0 0 1-77.710222 35.328l-92.444445-203.946667a42.780444 42.780444 0 0 1-10.695111 1.308445h-284.444444a42.723556 42.723556 0 0 1-10.695111-1.365334l-92.672 203.946667a42.666667 42.666667 0 0 1-56.490667 21.162667 42.666667 42.666667 0 0 1-25.031111-38.855112 42.496 42.496 0 0 1 3.811555-17.692444l284.444445-625.777778a42.837333 42.837333 0 0 1 2.673778-5.063111 42.439111 42.439111 0 0 1 5.006222-6.542222 42.382222 42.382222 0 0 1 9.898667-7.793778 42.894222 42.894222 0 0 1 4.209777-2.048 42.609778 42.609778 0 0 1 17.066667-3.527111z m114.688 398.222222L512 273.806222 397.255111 526.222222z" fill="rgb(${fontColor})" p-id="103437"></path></svg>`;
button.style.setProperty("--ftb-btn-font-color", fontColor);
}
const bgColor2Div = document.createElement("div");
bgColor2Div.textContent = "\u80CC\u666F\u989C\u8272";
bgColor2Div.className = "ftb-text-div";
fontStyleBar.appendChild(bgColor2Div);
const ftbBtnDiv2 = document.createElement("div");
ftbBtnDiv2.className = "ftb-btn-div";
fontStyleBar.appendChild(ftbBtnDiv2);
const fontBackColorBtns = [
{
className: "fsb-red-back",
backColor: "248, 215, 218",
borderColor: "265, 107, 107"
},
{
className: "fsb-orange-back",
backColor: "255, 243, 205",
borderColor: "255, 216, 80"
},
{
className: "fsb-green-back",
backColor: "212, 237, 218",
borderColor: "68, 131, 97"
},
{
className: "fsb-cyan-back",
backColor: "209, 236, 241",
borderColor: "53, 115, 125"
},
{
className: "fsb-blue-back",
backColor: "207, 221, 254",
borderColor: "51, 126, 169"
},
{
className: "fsb-purple-back",
backColor: "236, 226, 254",
borderColor: "100, 37, 208"
},
{
className: "fsb-grey-back",
backColor: "229, 230, 233",
borderColor: "143, 149, 158"
},
{
className: "fsb-white-back",
backColor: "255, 255, 255",
borderColor: "204, 204, 204"
}
];
for (const { className, backColor, borderColor } of fontBackColorBtns) {
const button = document.createElement("button");
button.className = className;
button.className += " fsb-bc-btn";
button.onclick = () => this.applyFontStyle(button, backColor);
ftbBtnDiv2.appendChild(button);
button.style.setProperty("--ftb-btn-back-color", backColor);
button.style.setProperty("--ftb-btn-border-color", borderColor);
}
fontStyleBar.addEventListener("mouseenter", () => {
this.isHoverFontStyleBar = true;
if (this.THideFontStyleBar) {
clearTimeout(this.THideFontStyleBar);
}
});
fontStyleBar.addEventListener("mouseleave", () => {
this.isHoverFontStyleBar = false;
this.hideFontStyleBarLater();
});
}
showFontStyleBar() {
var _a;
const fontStyleBar = document.getElementById("font-style-bar");
if (!fontStyleBar)
return;
const fontStyleBtn = document.getElementsByClassName("ftb-font-style")[0];
if (!fontStyleBtn)
return;
const pagePosition = (_a = document.getElementsByClassName("mod-active")[0]) == null ? void 0 : _a.getBoundingClientRect();
const btnRect = fontStyleBtn.getBoundingClientRect();
const left = btnRect.right + window.scrollX - this.WidthFontStyleBar / 2;
let top = btnRect.bottom + window.scrollY + 3.5;
if (pagePosition.bottom - this.HeightFontStyleBar - top - 5 < 0) {
top = top - this.HeightToolBar - this.HeightFontStyleBar;
fontStyleBar.style.zIndex = "999";
} else {
fontStyleBar.style.zIndex = "1000";
}
fontStyleBar.style.left = `${left}px`;
fontStyleBar.style.top = `${top}px`;
fontStyleBar.style.display = "block";
this.rotTriangle("font-bt-trig", -90);
}
hideFontStyleBar() {
const fontStyleBar = document.getElementById("font-style-bar");
if (fontStyleBar) {
fontStyleBar.style.display = "none";
}
this.inActiveAllFontStyleBtn();
this.rotTriangle("font-bt-trig", 0);
}
hideFontStyleBarLater() {
if (this.THideFontStyleBar) {
clearTimeout(this.THideFontStyleBar);
}
this.THideFontStyleBar = setTimeout(() => {
if (!this.isHoverFontStyleBar && !this.isHoverButtonFontStyle) {
this.hideFontStyleBar();
}
}, 150);
}
inAcitveSameTypeBtn(button) {
if (button.classList.contains("fsb-fc-btn")) {
const buttons = document.querySelectorAll(".fsb-fc-btn");
buttons.forEach((btn) => btn.classList.remove("selected"));
} else if (button.classList.contains("fsb-bc-btn")) {
const buttons = document.querySelectorAll(".fsb-bc-btn");
buttons.forEach((btn) => btn.classList.remove("selected"));
}
}
inActiveAllFontStyleBtn() {
const buttons = document.querySelectorAll("#font-style-bar button.selected");
buttons.forEach((btn) => btn.classList.remove("selected"));
}
rotTriangle(uniqueClass, num) {
const svgTriangle = document.getElementsByClassName(uniqueClass)[0];
if (!svgTriangle)
return;
svgTriangle.style.transform = `rotate(${num}deg)`;
}
applyFontStyle(button, fontStr) {
var _a;
this.inAcitveSameTypeBtn(button);
button.classList.toggle("selected");
const editor = (_a = this.app.workspace.activeEditor) == null ? void 0 : _a.editor;
if (!editor)
return;
const selectedText = editor.getSelection();
if (!selectedText)
return;
if (selectedText.includes("\n")) {
this.hideToolbar();
new import_obsidian.Notice("\u4E0D\u80FD\u8BBE\u7F6E\u591A\u6BB5\u6587\u672C\u7684\u683C\u5F0F");
const cursor2 = editor.getCursor();
editor.setSelection(cursor2, cursor2);
editor.focus();
return;
}
let fcHtml = "";
let fbHtml = "";
let midText = "";
const fontTagPattern = /^<font[^>]*>(.*?)<\/font>$/i.exec(selectedText);
if (button.classList.contains("fsb-fc-btn")) {
fcHtml = `color:rgb(${fontStr}); `;
if (fontTagPattern) {
const fbHtmls = selectedText.match(/background:\s*rgb\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*\);\s*/);
if (fbHtmls) {
fbHtml = fbHtmls[0];
}
midText = fontTagPattern[1];
} else {
midText = selectedText;
}
} else if (button.classList.contains("fsb-bc-btn")) {
fbHtml = `background:rgb(${fontStr}); `;
if (fontTagPattern) {
const fcHtmls = selectedText.match(/color:\s*rgb\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*\);\s*/);
if (fcHtmls) {
fcHtml = fcHtmls[0];
}
midText = fontTagPattern[1];
} else {
midText = selectedText;
}
}
const leftText = `<font style="${fcHtml}${fbHtml}padding: 1px 2px">`;
const rightText = `</font>`;
const finalText = `${leftText}${midText}${rightText}`;
const selectionStart = editor.getCursor("from");
editor.replaceSelection(finalText);
const cursor = editor.getCursor();
const newSelectionStart = { line: cursor.line, ch: selectionStart.ch };
const newSelectionEnd = { line: cursor.line, ch: selectionStart.ch + finalText.length };
editor.setSelection(newSelectionStart, newSelectionEnd);
}
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgTWFya2Rvd25WaWV3LCBOb3RpY2UsIFBsdWdpbiwgVEZpbGUgfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCB7IFByYXllclNldHRpbmdUYWIgfSBmcm9tICdzZXR0aW5ncyc7XHJcblxyXG5pbnRlcmZhY2UgUHJheWVyUGx1Z2luU2V0dGluZ3Mge1xyXG5cdFN0YXJ0TXNnOiBzdHJpbmc7XHJcblx0Q2xvc2VNc2c6IHN0cmluZztcclxufVxyXG5cclxuY29uc3QgREVGQVVMVF9TRVRUSU5HUzogUGFydGlhbDxQcmF5ZXJQbHVnaW5TZXR0aW5ncz4gPSB7XHJcblx0U3RhcnRNc2c6IFwiUHJheWVyIFRvb2xLaXRzIHBsdWdpbiBsb2FkZWRcIixcclxuXHRDbG9zZU1zZzogXCJQcmF5ZXIgVG9vbEtpdHMgcGx1Z2luIHVubG9hZGVkXCJcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByYXllclBsdWdpbiBleHRlbmRzIFBsdWdpbiB7XHJcblx0cHJpdmF0ZSBpc0NoZWNraW5nQmFja2xpbmtzID0gZmFsc2U7IC8vIFx1NjhDMFx1NjdFNVx1NTNDRFx1OTRGRVx1NzY4NFx1NTFGRFx1NjU3MFx1NjI2N1x1ODg0Q1x1NUI4Q1x1NEU4NlxyXG5cdHByaXZhdGUgVFN0YXJ0Q2hlY2tCYWNrbGlua3M6IG51bWJlciB8IE5vZGVKUy5UaW1lb3V0OyAvLyBcdTVGMDBcdTU5Q0JcdTY4QzBcdTY3RTVcdTUzQ0RcdTk0RkVcdTc2ODRcdTVCOUFcdTY1RjZcdTU2NjhcclxuXHRwcml2YXRlIFRTZWxlY3Rpb25UZXh0OiBudW1iZXIgfCBOb2RlSlMuVGltZW91dDsgLy8gXHU2NTg3XHU2NzJDXHU5MDA5XHU2MkU5XHU3Njg0XHU1QjlBXHU2NUY2XHU1NjY4XHJcblxyXG5cdHByaXZhdGUgVEhpZGVGb250U3R5bGVCYXI6IG51bWJlciB8IE5vZGVKUy5UaW1lb3V0OyAvLyBcdTVERTVcdTUxNzdcdTY4MEZcdUZGMDhmb250U3R5bGVCYXIpIFx1OTY5MFx1ODVDRlx1NjVGNlx1NzY4NFx1NUI5QVx1NjVGNlx1NTY2OFxyXG5cdHByaXZhdGUgaXNIb3ZlckZvbnRTdHlsZUJhciA9IGZhbHNlOyAvLyBcdTlGMjBcdTY4MDdcdTY2MkZcdTU0MjZcdTU3MjhcdTVERTVcdTUxNzdcdTY4MEZcdUZGMDhmb250U3R5bGVCYXIpIFx1NEUwQVxyXG5cdHByaXZhdGUgaXNIb3ZlckJ1dHRvbkZvbnRTdHlsZSA9IGZhbHNlOyAvLyBcdTlGMjBcdTY4MDdcdTY2MkZcdTU0MjZcdTU3MjhcdTYzMDlcdTk0QUVcdTRFMEFcclxuXHJcblx0cHJpdmF0ZSBIZWlnaHRUb29sQmFyID0gMzA7IC8vIFx1NURFNVx1NTE3N1x1NjgwRlx1NzY4NFx1OUFEOFx1NUVBNlxyXG5cdHByaXZhdGUgV2lkdGhUb29sQmFyID0gMjIwOyAvLyBcdTVERTVcdTUxNzdcdTY4MEZcdTc2ODRcdTVCQkRcdTVFQTZcclxuXHRwcml2YXRlIEhlaWdodEZvbnRTdHlsZUJhciA9IDE4MTsgLy8gXHU1REU1XHU1MTc3XHU2ODBGXHVGRjA4Zm9udFN0eWxlQmFyKSBcdTc2ODRcdTlBRDhcdTVFQTZcclxuXHRwcml2YXRlIFdpZHRoRm9udFN0eWxlQmFyID0gMTM5OyAvLyBcdTVERTVcdTUxNzdcdTY4MEZcdUZGMDhmb250U3R5bGVCYXIpIFx1NzY4NFx1NUJCRFx1NUVBNlxyXG5cclxuXHQvLyBcdTRFMEJcdTk3NjJcdThGRDlcdTRFMkFcdTUzRDhcdTkxQ0ZcdTY2MkZcdTc1MjhcdTY3NjVcdTVCNThcdTUwQThcdThCQkVcdTdGNkVcdTc2ODRcdUZGMENcdThGRDlcdTRFMkFcdTUzRDhcdTkxQ0ZcdTY2MkZcdTRFMDBcdTRFMkFcdTVCRjlcdThDNjFcdUZGMENcdThGRDlcdTRFMkFcdTVCRjlcdThDNjFcdTc2ODRcdTdDN0JcdTU3OEJcdTY2MkZQcmF5ZXJQbHVnaW5TZXR0aW5nc1xyXG5cdHNldHRpbmdzOiBQcmF5ZXJQbHVnaW5TZXR0aW5ncztcclxuXHJcblx0Ly8gXHU1MkEwXHU4RjdEXHU4QkJFXHU3RjZFXHJcblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oXHJcblx0XHRcdHt9LFxyXG5cdFx0XHRERUZBVUxUX1NFVFRJTkdTLFxyXG5cdFx0XHRhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0Ly8gXHU0RTBCXHU5NzYyXHU4RkQ5XHU0RTJBXHU1MUZEXHU2NTcwXHU2NjJGXHU1MkEwXHU4RjdEXHU4QkJFXHU3RjZFXHVGRjBDXHU1OTgyXHU2NzlDXHU2Q0ExXHU2NzA5XHU4QkJFXHU3RjZFXHVGRjBDXHU5MEEzXHU0RTQ4XHU1QzMxXHU0RjdGXHU3NTI4XHU5RUQ4XHU4QkE0XHU4QkJFXHU3RjZFXHJcblx0XHRhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cclxuXHRcdC8vIFx1NEUwQlx1OTc2Mlx1OEZEOVx1NEUyQVx1NTFGRFx1NjU3MFx1NjYyRlx1NkRGQlx1NTJBMFx1NEUwMFx1NEUyQVx1OEJCRVx1N0Y2RVx1OTc2Mlx1Njc3RlxyXG5cdFx0Ly8gdGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBQcmF5ZXJTZXR0aW5nVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcblxyXG5cdFx0Y29uc29sZS5sb2codGhpcy5zZXR0aW5ncy5TdGFydE1zZyk7XHJcblxyXG5cdFx0Ly8gXHU0RTBCXHU5NzYyXHU4RkQ5XHU0RTJBXHU1MUZEXHU2NTcwXHU2NjJGXHU2REZCXHU1MkEwXHU0RTAwXHU0RTJBXHU1NkZFXHU2ODA3XHU1MjMwXHU1REU2XHU0RkE3XHU4M0RDXHU1MzU1XHU2ODBGXHVGRjBDXHU3QjJDXHU0RTAwXHU0RTJBXHU1M0MyXHU2NTcwXHU2NjJGXHU1NkZFXHU2ODA3XHU3Njg0XHU1NDBEXHU1QjU3XHVGRjBDXHU3QjJDXHU0RThDXHU0RTJBXHU1M0MyXHU2NTcwXHU2NjJGXHU1NkZFXHU2ODA3XHU3Njg0XHU2M0QwXHU3OTNBXHVGRjBDXHU3QjJDXHU0RTA5XHU0RTJBXHU1M0MyXHU2NTcwXHU2NjJGXHU3MEI5XHU1MUZCXHU1NkZFXHU2ODA3XHU3Njg0XHU1NkRFXHU4QzAzXHU1MUZEXHU2NTcwXHJcblx0XHQvLyB0aGlzLmFkZFJpYmJvbkljb24oXCJzY2FuLWV5ZVwiLCBcIlx1NzczQ1x1Nzc1QlwiLCAoKSA9PiB7XHJcblx0XHQvLyBcdG5ldyBOb3RpY2UoXCJoYWhhLFx1NEY2MFx1NTk3RCFcIik7XHJcblx0XHQvLyB9KTtcclxuXHJcblx0XHQvLyBcdTRFMEJcdTk3NjJcdThGRDlcdTRFMkFcdTUxRkRcdTY1NzBcdTY2MkZcdTZERkJcdTUyQTBcdTRFMDBcdTRFMkFcdTU0N0RcdTRFRTRcdTUyMzBvYlx1NTQ3RFx1NEVFNFx1OTc2Mlx1Njc3Rlx1RkYwQ1x1N0IyQ1x1NEUwMFx1NEUyQVx1NTNDMlx1NjU3MFx1NjYyRlx1NTQ3RFx1NEVFNFx1NzY4NGlkXHVGRjBDXHU3QjJDXHU0RThDXHU0RTJBXHU1M0MyXHU2NTcwXHU2NjJGXHU1NDdEXHU0RUU0XHU3Njg0XHU1NDBEXHU1QjU3XHVGRjBDXHU3QjJDXHU0RTA5XHU0RTJBXHU1M0MyXHU2NTcwXHU2NjJGXHU1NDdEXHU0RUU0XHU3Njg0XHU1NkRFXHU4QzAzXHU1MUZEXHU2NTcwXHJcblx0XHR0aGlzLmFkZENvbW1hbmQoe1xyXG5cdFx0XHRpZDogXCJzY2FuLWV5ZVwiLFxyXG5cdFx0XHRuYW1lOiBcIlx1NjI1M1x1NEUyQVx1NjJEQlx1NTQ3Q1wiLFxyXG5cdFx0XHRjYWxsYmFjazogKCkgPT4ge1xyXG5cdFx0XHRcdG5ldyBOb3RpY2UoXCJoYWhhLFx1NEY2MFx1NTk3RCFcIik7XHJcblx0XHRcdFx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwib2JzLWZsb2F0LXRvb2xiYXJcIik7XHJcblx0XHRcdFx0aWYgKGVsZW1lbnQpIHtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGVsZW1lbnQub2Zmc2V0V2lkdGgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBlbGVtZW50MiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZm9udC1zdHlsZS1iYXJcIik7XHJcblx0XHRcdFx0aWYgKGVsZW1lbnQyKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhlbGVtZW50Mi5vZmZzZXRIZWlnaHQpO1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZWxlbWVudDIub2Zmc2V0V2lkdGgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblxyXG5cdFx0Ly8gXHU0RTBCXHU5NzYyXHU4RkQ5XHU0RTJBXHU1MUZEXHU2NTcwXHU2NjJGXHU2REZCXHU1MkEwXHU0RTAwXHU0RTJBXHU1NDdEXHU0RUU0XHU1MjMwb2JcdTU0N0RcdTRFRTRcdTk3NjJcdTY3N0ZcdUZGMENcdTdCMkNcdTRFMDBcdTRFMkFcdTUzQzJcdTY1NzBcdTY2MkZcdTU0N0RcdTRFRTRcdTc2ODRpZFx1RkYwQ1x1N0IyQ1x1NEU4Q1x1NEUyQVx1NTNDMlx1NjU3MFx1NjYyRlx1NTQ3RFx1NEVFNFx1NzY4NFx1NTQwRFx1NUI1N1x1RkYwQ1x1N0IyQ1x1NEUwOVx1NEUyQVx1NTNDMlx1NjU3MFx1NjYyRlx1NTQ3RFx1NEVFNFx1NzY4NFx1NTZERVx1OEMwM1x1NTFGRFx1NjU3MFxyXG5cdFx0Ly8gXHU4RkQ5XHU0RTJBXHU1MUZEXHU2NTcwXHU1NDhDXHU0RTBBXHU5NzYyXHU3Njg0XHU1MUZEXHU2NTcwXHU3Njg0XHU1MzNBXHU1MjJCXHU2NjJGXHVGRjBDXHU4RkQ5XHU0RTJBXHU1MUZEXHU2NTcwXHU0RjFBXHU1NzI4XHU2QkNGXHU2QjIxXHU2MjUzXHU1RjAwXHU1NDdEXHU0RUU0XHU5NzYyXHU2NzdGXHU3Njg0XHU2NUY2XHU1MDE5XHU5MEZEXHU0RjFBXHU2OEMwXHU2N0U1XHU0RTAwXHU2QjIxXHVGRjBDXHU1OTgyXHU2NzlDXHU4RkQ0XHU1NkRFdHJ1ZVx1RkYwQ1x1OTBBM1x1NEU0OFx1OEZEOVx1NEUyQVx1NTQ3RFx1NEVFNFx1NUMzMVx1NEYxQVx1NjYzRVx1NzkzQVx1NTcyOFx1NTQ3RFx1NEVFNFx1OTc2Mlx1Njc3Rlx1NEUwQVxyXG5cdFx0Ly8gXHU0RUMwXHU0RTQ4XHU2NUY2XHU1MDE5XHU0RTNBdHJ1ZVx1RkYwQ1x1NEVDMFx1NEU0OFx1NjVGNlx1NTAxOVx1NEUzQWZhbHNlXHVGRjBDXHU1M0Q2XHU1MUIzXHU0RThFY2hlY2tDYWxsYmFja1x1NTFGRFx1NjU3MFx1NzY4NFx1OEZENFx1NTZERVx1NTAzQ1xyXG5cdFx0Ly8gdGhpcy5hZGRDb21tYW5kKHtcclxuXHRcdC8vIFx0aWQ6IFwic2Nhbi1leWUtY2hlY2tcIixcclxuXHRcdC8vIFx0bmFtZTogXCJcdTU5MUNcdTkxQ0NcdTVCRjlcdTcxOUZcdTRFQkFcdTYyNTNcdTRFMkFcdTYyREJcdTU0N0NcIixcclxuXHRcdC8vIFx0Y2hlY2tDYWxsYmFjazogKGNoZWNraW5nKSA9PiB7XHJcblx0XHQvLyBcdFx0Y29uc3QgaXNEYXJrID0gbmV3IERhdGUoKS5nZXRIb3VycygpID4gMjA7XHJcblxyXG5cdFx0Ly8gXHRcdGlmIChpc0RhcmspIHtcclxuXHRcdC8vIFx0XHRcdGlmICghY2hlY2tpbmcpIHtcclxuXHRcdC8vIFx0XHRcdFx0bmV3IE5vdGljZShcIlx1NjY1QVx1NEUwQVx1NTk3RCFcIik7XHJcblx0XHQvLyBcdFx0XHR9XHJcblx0XHQvLyBcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdC8vIFx0XHR9XHJcblxyXG5cdFx0Ly8gXHRcdHJldHVybiBmYWxzZTtcclxuXHRcdC8vIFx0fVxyXG5cdFx0Ly8gfSk7XHJcblxyXG5cdFx0Ly8gXHU0RTBCXHU5NzYyXHU4RkQ5XHU0RTJBXHU1MUZEXHU2NTcwXHU1M0VBXHU4MEZEXHU1NzI4XHU3RjE2XHU4RjkxXHU1NjY4XHU4OUM2XHU1NkZFXHU0RTJEXHU0RjdGXHU3NTI4XHVGRjBDXHU3QjJDXHU0RTAwXHU0RTJBXHU1M0MyXHU2NTcwXHU2NjJGXHU1NDdEXHU0RUU0XHU3Njg0aWRcdUZGMENcdTdCMkNcdTRFOENcdTRFMkFcdTUzQzJcdTY1NzBcdTY2MkZcdTU0N0RcdTRFRTRcdTc2ODRcdTU0MERcdTVCNTdcdUZGMENcdTdCMkNcdTRFMDlcdTRFMkFcdTUzQzJcdTY1NzBcdTY2MkZcdTU0N0RcdTRFRTRcdTc2ODRcdTU2REVcdThDMDNcdTUxRkRcdTY1NzBcclxuXHRcdC8vIFx1OEZEOVx1NEUyQVx1NTQ3RFx1NEVFNFx1NzY4NFx1NEY1Q1x1NzUyOFx1NjYyRlx1NjQxQ1x1N0QyMlx1NjI0MFx1NjcwOVx1NEVFNSNcdTVGMDBcdTU5MzRcdTc2ODRcdTg4NENcdUZGMENcdTVFNzZcdTU3MjhcdTg4NENcdTVDM0VcdTZERkJcdTUyQTBcdTRFMDBcdTRFMkFcdUQ4M0NcdURGMUVcclxuXHRcdC8vIHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHQvLyBcdGlkOiBcIndyaXRlLXNvbWV0aGluZ1wiLFxyXG5cdFx0Ly8gXHRuYW1lOiBcIlx1NTE5OVx1NzBCOVx1NEUxQ1x1ODk3RlwiLFxyXG5cdFx0Ly8gXHRlZGl0b3JDYWxsYmFjazogKGVkaXRvciwgdmlldykgPT4ge1xyXG5cdFx0Ly8gXHRcdG5ldyBOb3RpY2UoXCJcdTRGNjBcdTU5N0RcdUZGMENcdTYyMTFcdTZCNjNcdTU3MjhcdTdGMTZcdThGOTFcdTU2NjhcdTg5QzZcdTU2RkVcdTRFMkRcIik7XHJcblx0XHQvLyBcdFx0Y29uc3QgdmFsdWUgPSBlZGl0b3JcclxuXHRcdC8vIFx0XHRcdC5nZXRWYWx1ZSgpXHJcblx0XHQvLyBcdFx0XHQucmVwbGFjZSgvKF4jKC4qKSQpL2dtLCBteW1hdGNoID0+IG15bWF0Y2ggKyBcIlx1RDgzQ1x1REYxRVwiKTsgLy8gZzogXHU1MTY4XHU1QzQwXHU1MzM5XHU5MTRELCBtOiBcdTU5MUFcdTg4NENcdTUzMzlcdTkxNERcclxuXHJcblx0XHQvLyBcdFx0Y29uc3QgbXlzdHJpbmcgPSBcImhlbGxvIHdvcmxkXCI7XHJcblx0XHQvLyBcdFx0ZWRpdG9yLnNldFZhbHVlKHZhbHVlICsgbXlzdHJpbmcpO1xyXG5cdFx0Ly8gXHR9XHJcblx0XHQvLyB9KTtcclxuXHJcblx0XHQvLyBcdTc2RDFcdTU0MkNcdTY1ODdcdTY4NjNcdTUxODVcdTVCQjlcdTc2ODRcdTUzRDhcdTUzMTZcclxuXHRcdC8vIHRoaXMucmVnaXN0ZXJFdmVudCh0aGlzLmFwcC52YXVsdC5vbignbW9kaWZ5JywgKGZpbGUpID0+IHtcclxuXHRcdC8vIFx0aWYgKHRoaXMuVFN0YXJ0Q2hlY2tCYWNrbGlua3MpIHtcclxuXHRcdC8vIFx0XHRjbGVhclRpbWVvdXQodGhpcy5UU3RhcnRDaGVja0JhY2tsaW5rcyk7XHJcblx0XHQvLyBcdH1cclxuXHRcdC8vIFx0aWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkgLy8gXHU2OEMwXHU2N0U1XHU2NTg3XHU0RUY2XHU2NjJGXHU1NDI2XHU2NjJGIFRGaWxlIFx1N0M3Qlx1NTc4QlxyXG5cdFx0Ly8gXHR7XHJcblx0XHQvLyBcdFx0dGhpcy5UU3RhcnRDaGVja0JhY2tsaW5rcyA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0Ly8gXHRcdFx0dGhpcy5jaGVja0ZpbGVCYWNrbGlua3MoZmlsZSk7XHJcblx0XHQvLyBcdFx0fSwgMjAwMCk7IC8vIFx1NUVGNlx1OEZERjJcdTc5RDJcdTYyNjdcdTg4NENcclxuXHRcdC8vIFx0fVxyXG5cdFx0Ly8gfSkpO1xyXG5cclxuXHRcdC8vIFx1NTIxQlx1NUVGQVx1NURFNVx1NTE3N1x1NjgwRlxyXG5cdFx0dGhpcy5jcmVhdGVGbG9hdFRvb2xiYXIoKTtcclxuXHRcdHRoaXMuY3JlYXRGb250U3R5bGVCYXIoKTtcclxuXHJcblx0XHQvLyBcdTlGMjBcdTY4MDdcdTYzMDlcdTk1MkVcdTg4QUJcdTYzMDlcdTRFMEJcdTY1RjZcdTg5RTZcdTUzRDFcclxuXHRcdC8vIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgKGV2ZW50KSA9PiB7XHJcblx0XHQvLyBcdGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJvYnMtZmxvYXQtdG9vbGJhclwiKT8uY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XHJcblx0XHQvLyBcdFx0aWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImZvbnQtc3R5bGUtYmFyXCIpPy5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcdFxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5oaWRlVG9vbGJhcigpO1xyXG5cdFx0Ly8gXHRcdH1cclxuXHRcdC8vIFx0fVxyXG5cdFx0Ly8gfSk7XHJcblx0XHRcclxuXHR9XHJcblxyXG5cclxuXHJcblx0YXN5bmMgb251bmxvYWQoKSB7XHJcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI29icy1mbG9hdC10b29sYmFyXCIpPy5yZW1vdmUoKTtcclxuXHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjZm9udC1zdHlsZS1iYXJcIik/LnJlbW92ZSgpO1xyXG5cdFx0Y29uc29sZS5sb2codGhpcy5zZXR0aW5ncy5DbG9zZU1zZyk7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgY2hlY2tGaWxlQmFja2xpbmtzKGFjdGl2ZUZpbGU6IFRGaWxlKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRpZiAodGhpcy5pc0NoZWNraW5nQmFja2xpbmtzKSB7XHJcblx0XHRcdHJldHVybjsgLy9jaGVja0ZpbGVCYWNrbGlua3MgXHU2QjYzXHU1NzI4XHU2MjY3XHU4ODRDXHVGRjBDXHU1RkZEXHU3NTY1XHU2NUIwXHU3Njg0XHU4QzAzXHU3NTI4XHU4QkY3XHU2QzQyXHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5pc0NoZWNraW5nQmFja2xpbmtzID0gdHJ1ZTtcclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHQvLyAvLyBcdTgzQjdcdTUzRDZcdTVGNTNcdTUyNERcdTdGMTZcdThGOTFcdTc2ODRcdTY1ODdcdTRFRjZcclxuXHRcdFx0Ly8gY29uc3QgYWN0aXZlRmlsZSA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVGaWxlKCk7XHJcblx0XHRcdC8vIGlmICghYWN0aXZlRmlsZSkgcmV0dXJuO1xyXG5cclxuXHRcdFx0Ly8gXHU4M0I3XHU1M0Q2XHU1RjUzXHU1MjREXHU2NTg3XHU2ODYzXHU3Njg0XHU1M0NEXHU5NEZFXHU0RkUxXHU2MDZGXHJcblx0XHRcdGNvbnN0IGJhY2tsaW5rcyA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0QmFja2xpbmtzRm9yRmlsZShhY3RpdmVGaWxlKTtcclxuXHRcdFx0aWYgKGJhY2tsaW5rcy5kYXRhLnNpemUgPT09IDApIHJldHVybjsgLy8gXHU2Q0ExXHU2NzA5XHU1M0NEXHU5NEZFXHJcblxyXG5cdFx0XHQvLyBcdTgzQjdcdTUzRDZcdTVGNTNcdTUyNERcdTY1ODdcdTY4NjNcdTc2ODRcdTUxODVcdTVCQjlcclxuXHRcdFx0Y29uc3QgZmlsZUNvbnRlbnQgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5yZWFkKGFjdGl2ZUZpbGUpO1xyXG5cclxuXHRcdFx0bGV0IGluQWN0aXZlTGlua051bSA9IDA7XHJcblx0XHRcdC8vIFx1OTA0RFx1NTM4Nlx1NTNDRFx1OTRGRVx1NUU3Nlx1NjZGNFx1NjVCMFx1NUJGOVx1NUU5NFx1NjU4N1x1Njg2M1x1NEUyRFx1NzY4NFx1NTE4NVx1NUJCOVxyXG5cdFx0XHRmb3IgKGNvbnN0IFtsaW5rRmlsZVBhdGgsIGxpbmtEYXRhXSBvZiBiYWNrbGlua3MuZGF0YSkge1xyXG5cdFx0XHRcdGNvbnN0IGxpbmtQYXJ0cyA9IGxpbmtEYXRhWzBdLmxpbmsuc3BsaXQoJyMnKTtcclxuXHRcdFx0XHRjb25zdCBsaW5rZWRGaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGxpbmtGaWxlUGF0aCk7IC8vIFx1NjgzOVx1NjM2RVx1NjU4N1x1NEVGNlx1OERFRlx1NUY4NFx1ODNCN1x1NTNENkFic3RyYWN0RmlsZVx1NjU4N1x1NEVGNlx1NUJGOVx1OEM2MVxyXG5cclxuXHRcdFx0XHRpZiAobGlua2VkRmlsZSBpbnN0YW5jZW9mIFRGaWxlKSAvLyBcdTg4NjhcdTc5M0FcdTY2MkZcdTRFMDBcdTRFMkFcdTY1ODdcdTRFRjZcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRpZiAobGlua1BhcnRzLmxlbmd0aCA9PT0gMSkgLy8gXHU2Q0ExXHU2NzA5I1x1RkYwQ1x1ODg2OFx1NzkzQVx1OTRGRVx1NjNBNVx1NzY4NFx1NjU4N1x1Njg2M1x1NTQwRFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRpZiAobGlua1BhcnRzWzBdICE9IGFjdGl2ZUZpbGUubmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdGluQWN0aXZlTGlua051bSA9IGluQWN0aXZlTGlua051bSArIDE7XHJcblx0XHRcdFx0XHRcdFx0Y29uc29sZS5sb2cobGlua1BhcnRzWzBdKTsgLy90ZXN0XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGVsc2UgLy8gXHU5NEZFXHU2M0E1XHU3Njg0XHU2NjJGXHU2ODA3XHU5ODk4XHU2MjE2XHU4MDA1XHU1MTg1XHU1QkI5XHU1NzU3XHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGNvbnRhaW5zU3RyaW5nID0gZmlsZUNvbnRlbnQuaW5jbHVkZXMobGlua1BhcnRzWzFdICsgXCJcXG5cIik7XHJcblx0XHRcdFx0XHRcdGlmICghY29udGFpbnNTdHJpbmcpIHtcclxuXHRcdFx0XHRcdFx0XHRpbkFjdGl2ZUxpbmtOdW0gPSBpbkFjdGl2ZUxpbmtOdW0gKyAxO1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGxpbmtQYXJ0c1sxXSk7IC8vdGVzdFxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoaW5BY3RpdmVMaW5rTnVtICE9IDApIHtcclxuXHRcdFx0XHRuZXcgTm90aWNlKGAke2FjdGl2ZUZpbGUubmFtZX0gXHU1QjU4XHU1NzI4ICR7aW5BY3RpdmVMaW5rTnVtfSBcdTRFMkFcdTU5MzFcdTY1NDhcdTc2ODRcdTUzQ0RcdTk0RkUhYCk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coYCR7YWN0aXZlRmlsZS5uYW1lfSBcdTVCNThcdTU3MjggJHtpbkFjdGl2ZUxpbmtOdW19IFx1NEUyQVx1NTkzMVx1NjU0OFx1NzY4NFx1NTNDRFx1OTRGRSFgKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBmaW5hbGx5IHtcclxuXHRcdFx0dGhpcy5pc0NoZWNraW5nQmFja2xpbmtzID0gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0Y3JlYXRlRmxvYXRUb29sYmFyKCkge1xyXG5cdFx0Y29uc3QgdG9vbGJhciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcblx0XHR0b29sYmFyLmlkID0gXCJvYnMtZmxvYXQtdG9vbGJhclwiO1xyXG5cdFx0dG9vbGJhci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcblx0XHRkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRvb2xiYXIpO1xyXG5cclxuXHRcdGNvbnN0IGJ1dHRvbnMgPSBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHRsYWJlbDogXCJCb2xkXCIsXHJcblx0XHRcdFx0aWNvbjogJzxzdmcgdD1cIjE3MzgyOTIzNzUzNTBcIiBjbGFzcz1cImljb25cIiB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgcC1pZD1cIjMxMTBcIiB3aWR0aD1cIjIwMFwiIGhlaWdodD1cIjIwMFwiPjxwYXRoIGQ9XCJNMzYyLjk3NiA4MDQuNzA0aDE0MS4xMmM3OS42MTYgMCAxMzUuNzc2LTEwLjI0IDE2OC4zODQtMzAuNzg0IDMyLjY0LTIwLjQ4IDQ4Ljk2LTU0LjQ5NiA0OC45Ni0xMDEuOTg0IDAtNDcuOTA0LTE1LjU4NC04Mi4wMTYtNDYuNzItMTAyLjMwNC0zMS4xNjgtMjAuMjg4LTg1LjkyLTMwLjQzMi0xNjQuMjg4LTMwLjQzMmgtMTQ3LjQ1NnYyNjUuNTA0eiBtMC0zNDUuMTUyaDEzMi44MzJjNjAuMTYgMCAxMDQuNzY4LTkuNzI4IDEzMy43Ni0yOS4xMiAyOS4wNTYtMTkuNDU2IDQzLjU1Mi00OS40NCA0My41NTItOTAuMDQ4IDAtMzguNC0xMy4xMi02Ny44NzItMzkuMzkyLTg4LjM4NC0yNi4yNzItMjAuNDgtNjQtMzAuNzUyLTExMy4xMi0zMC43NTJoLTE1Ny42MzJ2MjM4LjMwNHpNNTQ1LjM3NiA4OTZIMjM2LjQ4Yy0xNC44MTYgMC0yNS45Mi0zLjg3Mi0zMy4zNDQtMTEuNjQ4LTcuNDI0LTcuNzc2LTExLjEzNi0xOS40MjQtMTEuMTM2LTM0Ljk3NiAwLTE3LjI4IDE1LjA0LTQ0LjY3MiA1MC4yNC00NC42NzJoMjAuOTZWMjIxLjI0OEgyNDIuMjRjLTMyLjY0IDAtNDYuNC0yOC45MjgtNDYuNC00Ni42MjQgMC0xNS4xMDQgMy43NzYtMjYuNjU2IDExLjQyNC0zNC42NTYgNy42MTYtOCAxOC42MjQtMTEuOTY4IDMzLjAyNC0xMS45NjhoMjY2LjMzNmM4OS44MjQgMCAxNTguMjQgMTcuNzkyIDIwNS4yNDggNTMuNDQgNDcuMDQgMzUuNTg0IDcwLjU2IDg3LjI5NiA3MC41NiAxNTUuMDcyIDAgMzQuMTEyLTcuMiA2My45MDQtMjEuNiA4OS4zNzYtMTQuNCAyNS40NzItMzUuODQgNDYuNC02NC4xOTIgNjIuODE2IDQ1Ljc2IDE2LjgzMiA3OS43NDQgNDAuMzIgMTAxLjk4NCA3MC41NiAyMi4yNCAzMC4yNCAzMy4zNzYgNjguNjQgMzMuMzc2IDExNS4yNjQgMCAzOS4yOTYtOS41MzYgNzUuMTM2LTI4LjYwOCAxMDcuNTItMTkuMDcyIDMyLjM1Mi00NS45NTIgNTguODgtODAuNzA0IDc5LjYxNmEyMzIuNjQgMjMyLjY0IDAgMCAxLTY5LjI4IDI2LjI0Yy0yNS40MDggNS40MDgtNjEuNDQgOC4wOTYtMTA4LjAzMiA4LjA5NnpcIiBwLWlkPVwiMzExMVwiPjwvcGF0aD48L3N2Zz4nLFxyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmdGItYm9sZFwiLFxyXG5cdFx0XHRcdG9uQ2xpY2s6ICgpID0+IHRoaXMuYXBwbHlGb3JtYXR0aW5nKFwiKipcIilcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGxhYmVsOiBcIkl0YWxpY1wiLFxyXG5cdFx0XHRcdGljb246ICc8c3ZnIHQ9XCIxNzM4Mjk2ODcyNDIwXCIgY2xhc3M9XCJpY29uXCIgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHAtaWQ9XCIxNTcwOVwiIHdpZHRoPVwiMjAwXCIgaGVpZ2h0PVwiMjAwXCI+PHBhdGggZD1cIk03NjggMTc2YTQ4IDQ4IDAgMCAxLTQ4IDQ4aC05NmwtMTI4IDU3Nmg5NmE0OCA0OCAwIDEgMSAwIDk2aC0yODhhNDggNDggMCAxIDEgMC05Nmg5NmwxMjgtNTc2aC05NmE0OCA0OCAwIDAgMSAwLTk2aDI4OGE0OCA0OCAwIDAgMSA0OCA0OHpcIiBwLWlkPVwiMTU3MTBcIj48L3BhdGg+PC9zdmc+JyxcclxuXHRcdFx0XHRjbGFzc05hbWU6IFwiZnRiLWl0YWxpY1wiLFxyXG5cdFx0XHRcdG9uQ2xpY2s6ICgpID0+IHRoaXMuYXBwbHlGb3JtYXR0aW5nKFwiKlwiKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bGFiZWw6IFwiU3RyaWtlVGhyb3VnaFwiLFxyXG5cdFx0XHRcdGljb246ICc8c3ZnIHQ9XCIxNzM4NTg0ODk4NjY0XCIgY2xhc3M9XCJpY29uXCIgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHAtaWQ9XCI0NTI0NVwiIHdpZHRoPVwiMjAwXCIgaGVpZ2h0PVwiMjAwXCI+PHBhdGggZD1cIk01MDYuNzc5IDg5YzQxLjA3NCAwIDc5LjE2MSA0Ljg1IDExNC4yNjEgMTQuNTQ5IDM1LjEgOS43IDY1LjkwNiAyNC45OTQgOTIuNDE3IDQ1Ljg4NSAyNi41MTIgMjAuODkgNDcuNDIzIDQ3LjE5IDYyLjczMiA3OC45IDEyLjEwNiAyNS4wNzQgMTkuODkzIDUzLjk5OCAyMy4zNiA4Ni43N2wwLjE4NyAwLjAwMkM3OTkuNzM2IDMzNSA3ODAuOTIgMzU0IDc0Ny44ODEgMzUzYy0zMi41My0wLjk4NS00NS42MDItMTUuNzQ0LTUxLjE4NS0zN2gtMC4wMzRsLTAuMTM0LTAuNjUzLTAuMDg4LTAuMzQ3aDAuMDE3bC0wLjA2Ni0wLjMyNGMtOS4wNjMtNDMuNTQ3LTI4LjM5Mi03Ni4wNTktNTcuOTg4LTk3LjUzNC0zNS40NzMtMjUuNzQtODAuODQxLTM4LjYxLTEzNi4xMDUtMzguNjEtMjIuNDA0IDAtNDQuNDM1IDIuMjM4LTY2LjA5MiA2LjcxNC0yMS42NTggNC40NzctNDAuODg4IDExLjkzOC01Ny42OTEgMjIuMzgzLTE2LjgwMyAxMC40NDYtMzAuMjQ2IDI0LjQzNS00MC4zMjggNDEuOTY4LTEwLjA4MiAxNy41MzMtMTUuMTIzIDM5LjM1Ny0xNS4xMjMgNjUuNDcgMCAyNC42MjEgNy4yODIgNDQuNTggMjEuODQ1IDU5Ljg3NCAxNC41NjIgMTUuMjk1IDMzLjk4IDI3Ljc5MiA1OC4yNSAzNy40OTEgMjQuMjcyIDkuNyA1MS43MTcgMTcuNzIgODIuMzM2IDI0LjA2MiAzMC42MTkgNi4zNDIgNjEuNzk4IDEzLjI0MyA5My41MzcgMjAuNzA0QTExMTkuODIxIDExMTkuODIxIDAgMCAxIDY2MS43NDYgNDgwTDkyOCA0ODBjMTcuNjczIDAgMzIgMTQuMzI3IDMyIDMyIDAgMTcuNjczLTE0LjMyNyAzMi0zMiAzMkg3NzguNTk2YzEzLjU3MiAxMy4xOTMgMjUuMDkyIDI4LjI4IDM0LjU2IDQ1LjI1N0M4MjcuNzE5IDYxNS4zNyA4MzUgNjQ4LjE5OSA4MzUgNjg3Ljc0MmMwIDQyLjUyNy05LjUyMiA3OC45LTI4LjU2NSAxMDkuMTE2LTE5LjA0NCAzMC4yMTctNDMuNTAyIDU0LjgzOC03My4zNzQgNzMuODY0LTI5Ljg3MiAxOS4wMjUtNjMuMjkyIDMyLjgyOC0xMDAuMjU5IDQxLjQwOC0zNi45NjcgOC41OC03My43NDcgMTIuODctMTEwLjM0IDEyLjg3LTQ0LjgwOSAwLTg3LjE5LTUuNTk2LTEyNy4xNDQtMTYuNzg3LTM5Ljk1NC0xMS4xOTItNzUuMDU0LTI4LjE2NS0xMDUuMy01MC45MjEtMzAuMjQ1LTIyLjc1Ni01NC4xNDMtNTEuODU0LTcxLjY5My04Ny4yOTMtMTIuODY3LTI1Ljk4My0yMS4wMTctNTUuNDc0LTI0LjQ1LTg4LjQ3NGwtMC4wNi0wLjU4LTAuMDg5IDAuMDAxQzE5MiA2NTcuOTYxIDIxNi45OTYgNjQ0LjA1MSAyNDQuNTEzIDY0M2MyNy4yNDMtMS4wNCA0Ny45OTcgMTMuMjY5IDUwLjk4OCAzNi4yNjdsMC4wODYgMC43YzMuMDY1IDE4Ljc3IDguNjc3IDM1LjcyNSAxNi44MzUgNTAuODYyIDEzLjA3IDI0LjI0OCAzMC4yNDYgNDQuMjA2IDUxLjUzIDU5Ljg3NCAyMS4yODQgMTUuNjY4IDQ2LjExNSAyNy4yMzIgNzQuNDk0IDM0LjY5MyAyOC4zNzkgNy40NjEgNTcuNTA0IDExLjE5MiA4Ny4zNzYgMTEuMTkyIDIzLjg5OCAwIDQ3Ljk4My0yLjIzOSA3Mi4yNTQtNi43MTUgMjQuMjcxLTQuNDc3IDQ2LjExNS0xMi4xMjQgNjUuNTMyLTIyLjk0MyAxOS40MTctMTAuODE4IDM1LjEtMjUuNTUzIDQ3LjA0OS00NC4yMDYgMTEuOTQ5LTE4LjY1MiAxNy45MjMtNDIuNTI3IDE3LjkyMy03MS42MjUgMC0yNy42MDUtNy4yODEtNDkuOTg4LTIxLjg0NC02Ny4xNDktMTQuNTYzLTE3LjE2LTMzLjk4LTMxLjE0OS01OC4yNS00MS45NjctMjQuMjcyLTEwLjgxOS01MS43MTctMTkuNTg1LTgyLjMzNi0yNi4zLTE3LjQ4LTMuODM0LTM1LjE0MS03LjcyOC01Mi45ODYtMTEuNjgyTDk3IDU0NGMtMTcuNjczIDAtMzItMTQuMzI3LTMyLTMyIDAtMTcuNjczIDE0LjMyNy0zMiAzMi0zMmgyMTAuNjlhMjk3Ljk2MSAyOTcuOTYxIDAgMCAxLTEwLjk1LTYuNTc0Yy0yNC4yNzItMTUuMjk1LTQzLjY4OS0zNS4wNjctNTguMjUxLTU5LjMxNS0xNC41NjMtMjQuMjQ4LTIxLjg0NC01NC42NTEtMjEuODQ0LTkxLjIxIDAtNDAuMjkgOC4yMTQtNzUuMTcgMjQuNjQ0LTEwNC42NHMzOC4yNzQtNTMuNzE5IDY1LjUzMi03Mi43NDRjMjcuMjU5LTE5LjAyNiA1OC4yNTEtMzMuMjAyIDkyLjk3OC00Mi41MjhDNDM0LjUyNSA5My42NjMgNDcwLjE4NSA4OSA1MDYuNzc5IDg5elwiIHAtaWQ9XCI0NTI0NlwiPjwvcGF0aD48L3N2Zz4nLFxyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmdGItc3RyaWtldGhyb3VnaFwiLFxyXG5cdFx0XHRcdG9uQ2xpY2s6ICgpID0+IHRoaXMuYXBwbHlGb3JtYXR0aW5nKFwifn5cIilcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGxhYmVsOiBcIkhpZ2hsaWdodFwiLFxyXG5cdFx0XHRcdGljb246ICc8c3ZnIHQ9XCIxNzM4NTg0ODk4NjY0XCIgY2xhc3M9XCJpY29uXCIgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHAtaWQ9XCI0NTI0NVwiIHdpZHRoPVwiMjAwXCIgaGVpZ2h0PVwiMjAwXCI+PHBhdGggc3Ryb2tlPVwibnVsbFwiIGlkPVwic3ZnXzFcIiBwLWlkPVwiMzM2MDMyXCIgZmlsbD1cIiNGRkY5MjBcIiBkPVwibTE5MS4zNDEyOCw3NjEuNDUzMDFsNjQxLjMxNzQ3LDBsMCwxOTQuMzQyMzZsLTY0MS4zMTc0NywwbDAsLTE5NC4zNDIzNnpcIi8+PHBhdGggc3Ryb2tlLXdpZHRoPVwiMjhcIiBzdHJva2U9XCJudWxsXCIgaWQ9XCJzdmdfMlwiIGNsYXNzPVwic2VsZWN0ZWRcIiBkYXRhLXNwbS1hbmNob3ItaWQ9XCJhMzEzeC5zZWFyY2hfaW5kZXguMC5pNzYuMTNmZTNhODE3VVZvbGJcIiBwLWlkPVwiMzM2MDMzXCIgZD1cIm0xNDAuMDAwMDEsNzA5LjkxMjM2bDAsMjYzLjk5ODczbC02MiwwbDAsLTM0MC4xNjIzNmMwLC02Ny4xODc2OCAzOC40NCwtMTI3LjU3NzM4IDk2Ljk2OCwtMTUyLjQ1OTI2YTE4OC41NDIsMjAwLjcwNTAzIDAgMCAwIDk4LjU4LC05Ni42MjM1M2wyNC43MzgsLTUyLjUzNTc1YTMxLDMyLjk5OTg0IDAgMCAxIDI3LjcxNCwtMTguMjE1OWwwLC0xMTMuOTE1NDZhOTMsOTguOTk5NTMgMCAwIDEgNjkuODEyLC05NS44MzE1M2wxODYsLTUxLjAxNzc2YTkzLDk4Ljk5OTUzIDAgMCAxIDExNi4xODgsOTUuODMxNTRsMCwxNjQuOTk5MmEzMSwzMi45OTk4NCAwIDAgMSAyNy43MTQsMTguMjE1OTFsMjQuNjc2LDUyLjUzNTc0YTE4OC41NDIsMjAwLjcwNTAzIDAgMCAwIDk4LjU4LDk2LjU1NzUzYTE1NC4zMTgsMTY0LjI3MzIxIDAgMCAxIDk3LjAzLDE1Mi4zOTMyN2wwLDM0MC4yOTQzNmwtNjIsMGwwLC0yNjMuOTk4NzNsLTc0NCwwbDAsLTAuMDY2em00NjIuNzY4LC01OTMuNzk5MTRsLTUuNTE4LDAuOTI0bC0xODYsNTEuMDE3NzZhMzEsMzIuOTk5ODQgMCAwIDAgLTIzLjI1LDMxLjk0Mzg0bDAsMTEzLjg0OTQ1bDI0Ny45OTk5OSwwbDAsLTE2NC44NjcyYTMxLDMyLjk5OTg0IDAgMCAwIC0wLjI0OCwtNC4xNTc5OGwtMC43NDQsLTQuMDI1OTlhMzEsMzIuOTk5ODQgMCAwIDAgLTI2Ljc4NCwtMjQuNjE3ODhsLTUuNDU2LC0wLjA2NjAxem0tNDYyLjc2OCw1MjcuNzk5NDZsNzQ0LDBsMCwtMTAuMTYzOTVjMCwtNDAuMTkzODEgLTIyLjkzOTk5LC03Ni4yOTU2MyAtNTguMDMyLC05MS4yMTE1NmEyNTAuNTQyLDI2Ni43MDQ3MiAwIDAgMSAtMTMxLjAwNiwtMTI4LjM2OTM3bC0xNi4xODIsLTM0LjMxOTg0bC0zMzMuNjIyLDBsLTE2LjEyLDM0LjMxOTg0YTI1MC41NDIsMjY2LjcwNDcyIDAgMCAxIC0xMTguMDQ4LDEyMi4zNjM0bC0xMy4wMiw1LjkzOTk3YTkyLjMxOCw5OC4yNzM1MiAwIDAgMCAtNTcuOTcsOTEuMzQzNTZsMCwxMC4xNjM5NWwwLC0wLjA2NnpcIi8+PC9zdmc+JyxcclxuXHRcdFx0XHRjbGFzc05hbWU6IFwiZnRiLWhpZ2hsaWdodFwiLFxyXG5cdFx0XHRcdG9uQ2xpY2s6ICgpID0+IHRoaXMuYXBwbHlGb3JtYXR0aW5nKFwiPT1cIilcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGxhYmVsOiBcIkNvZGVcIixcclxuXHRcdFx0XHRpY29uOiAnPHN2ZyB0PVwiMTczODI5NjQyNzc3OVwiIGNsYXNzPVwiaWNvblwiIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBwLWlkPVwiMzgwNzVcIiB3aWR0aD1cIjIwMFwiIGhlaWdodD1cIjIwMFwiPjxwYXRoIGQ9XCJNMjgwLjQ0OCAzNzYuMzJhNTMuNzYgNTMuNzYgMCAwIDAgMC03NS41MmwtMC42NC0wLjc2OGE1Mi40OCA1Mi40OCAwIDAgMC03NC44OCAwTDE1LjU1MiA0OTEuMjY0YTUzLjc2IDUzLjc2IDAgMCAwIDAgNzUuNTJsMTg5LjQ0IDE5MS4yOTZhNTIuNDggNTIuNDggMCAwIDAgNzQuODggMGwwLjY0LTAuNzA0YTUzLjc2IDUzLjc2IDAgMCAwIDAtNzUuNTJsLTExMy45Mi0xMTUuMDA4YTUzLjc2IDUzLjc2IDAgMCAxIDAtNzUuNTJsMTEzLjkyLTExNS4wNzJ6IG03MjguMDY0IDExNC45NDRsLTE4OS40NC0xOTEuMjMyYTUyLjQ4IDUyLjQ4IDAgMCAwLTc0Ljg4IDBsLTAuNjQgMC43MDRhNTMuNzYgNTMuNzYgMCAwIDAgMCA3NS41MmwxMTMuOTIgMTE1LjAwOGE1My43NiA1My43NiAwIDAgMSAwIDc1LjUybC0xMTMuOTIgMTE1LjA3MmE1My43NiA1My43NiAwIDAgMCAwIDc1LjUybDAuNjQgMC42NGE1Mi40OCA1Mi40OCAwIDAgMCA3NC44OCAwbDE4OS40NC0xOTEuMTY4YTUzLjc2IDUzLjc2IDAgMCAwIDAtNzUuNTJ6IG0tMzE4LjE0NC0yMjMuMzZsLTI3Mi44MzIgNTgzLjY4Yy04LjgzMiAxOC4zNjgtMjQuMzIgNDEuMDI0LTQ0LjM1MiA0MS4wMjRoLTEuMDg4Yy0zOC45MTIgMC02NC4yNTYtNTIuOC00Ny4wNC04OC40NDhsMjcxLjIzMi01NzguMTc2YzguODMyLTE4LjMwNCA0MS42LTMyLjY0IDQxLjYtMzIuNjRWMTkyYzUyLjkyOCAwIDY5LjYzMiA0MC4zMiA1Mi40OCA3NS45MDR6XCIgcC1pZD1cIjM4MDc2XCI+PC9wYXRoPjwvc3ZnPicsXHJcblx0XHRcdFx0Y2xhc3NOYW1lOiBcImZ0Yi1jb2RlXCIsXHJcblx0XHRcdFx0b25DbGljazogKCkgPT4gdGhpcy5hcHBseUZvcm1hdHRpbmcoXCJgXCIpXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRsYWJlbDogXCJMYXRleFwiLFxyXG5cdFx0XHRcdGljb246ICc8c3ZnIHQ9XCIxNzM4Mjk3NTM2OTI4XCIgY2xhc3M9XCJpY29uXCIgdmlld0JveD1cIjAgMCAxMDI0IDEwMjRcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHAtaWQ9XCIzMDAxNlwiIHdpZHRoPVwiMjAwXCIgaGVpZ2h0PVwiMjAwXCI+PHBhdGggZD1cIk02MDguNDYwOCA4NTguNzc3NmEzOC40IDM4LjQgMCAwIDEgMC01NC4yNzJsMTQ0Ljc5MzYtMTQ0Ljg0NDhhMzguNCAzOC40IDAgMSAxIDU0LjI3MiA1NC4yNzJsLTE0NC43OTM2IDE0NC44OTZhMzguNCAzOC40IDAgMCAxLTU0LjI3MiAwelwiIHAtaWQ9XCIzMDAxN1wiPjwvcGF0aD48cGF0aCBkPVwiTTgwNy41Nzc2IDg1OC43Nzc2YTM4LjQgMzguNCAwIDAgMS01NC4yNzIgMGwtMTQ0Ljg5Ni0xNDQuNzkzNmEzOC40IDM4LjQgMCAxIDEgNTQuMzc0NC01NC4yNzJsMTQ0Ljc5MzYgMTQ0Ljc5MzZhMzguNCAzOC40IDAgMCAxIDAgNTQuMjcyek00NzQuNzc3NiAxNzcuMTUyQzUwOC44MjU2IDEzMS45OTM2IDU1Ni42OTc2IDEwMi40IDYxNC40IDEwMi40YzEwNC4yNDMyIDAgMTUxLjkxMDQgNzEuNTI2NCAxNzAuMDg2NCA5OC44MTZsMC41MTIgMC43NjhhNTEuMiA1MS4yIDAgMCAxLTg1LjE5NjggNTYuODMyQzY4My40MTc2IDIzNC4yNCA2NjIuNzMyOCAyMDQuOCA2MTQuNCAyMDQuOGMtMTkuMDk3NiAwLTM4LjkxMiA4Ljg1NzYtNTcuODU2IDMzLjk5NjgtMTkuNjYwOCAyNi4xMTItMzYuNzEwNCA2OC4yNDk2LTQ1LjA1NiAxMjYuODIyNC00LjA5NiAyOC4zNjQ4LTcuMzcyOCA1OS45NTUyLTExLjAwOCA5NC41MTUyLTEuOTQ1NiAxOC45OTUyLTQuMDk2IDM4LjkxMi02LjQgNTkuNjQ4LTYuNDUxMiA1Ni44MzItMTQuNzQ1NiAxMTcuODYyNC0yOC4zMTM2IDE3My44NzUyLTEzLjQxNDQgNTUuMjk2LTMzLjAyNCAxMTAuNDg5Ni02NC44NzA0IDE1Mi43Mjk2QzM2Ny41MTM2IDg5MC43MjY0IDMxOS43OTUyIDkyMS42IDI1NiA5MjEuNmMtNzIuNDQ4IDAtMTExLjEwNC0zOC43MDcyLTEzNy4yMTYtNjQuODcwNGwtMS4zODI0LTEuMzMxMmE1MS4yIDUxLjIgMCAxIDEgNzIuMzk2OC03Mi4zOTY4YzI1LjA4OCAyNS4wODggMzcuNTI5NiAzNi4xOTg0IDY2LjIwMTYgMzYuMTk4NCAyNS44MDQ4IDAgNDUuMjYwOC0xMC43NTIgNjMuMDc4NC0zNC40MDY0IDE5LjQwNDgtMjUuNzAyNCAzNC45Njk2LTY0Ljk3MjggNDcuMTU1Mi0xMTUuMjUxMiAxMi4wMzItNDkuNTYxNiAxOS43NjMyLTEwNS4zNjk2IDI2LjExMi0xNjEuMjggMi4wNDgtMTguNTg1NiA0LjA5Ni0zNy4zNzYgNS45OTA0LTU1Ljk2MTYgMy43ODg4LTM1Ljk5MzYgNy40NzUyLTcxLjAxNDQgMTEuNzc2LTEwMS4xMiA5LjkzMjgtNjkuNDI3MiAzMS4zMzQ0LTEyOS43NDA4IDY0LjY2NTYtMTczLjk3NzZ6XCIgcC1pZD1cIjMwMDE4XCI+PC9wYXRoPjxwYXRoIGQ9XCJNMjk0LjQgNDA5LjZhMzguNCAzOC40IDAgMCAxIDM4LjQtMzguNGgzMDcuMmEzOC40IDM4LjQgMCAwIDEgMCA3Ni44aC0zMDcuMkEzOC40IDM4LjQgMCAwIDEgMjk0LjQgNDA5LjZ6XCIgcC1pZD1cIjMwMDE5XCI+PC9wYXRoPjwvc3ZnPicsXHJcblx0XHRcdFx0Y2xhc3NOYW1lOiBcImZ0Yi1sYXRleFwiLFxyXG5cdFx0XHRcdG9uQ2xpY2s6ICgpID0+IHRoaXMuYXBwbHlGb3JtYXR0aW5nKFwiJFwiKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bGFiZWw6IFwiQ2xlYXJcIixcclxuXHRcdFx0XHRpY29uOiAnPHN2ZyB0PVwiMTczODI5OTk4NDY3OVwiIGNsYXNzPVwiaWNvblwiIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBwLWlkPVwiNTI0MDhcIiB3aWR0aD1cIjIwMFwiIGhlaWdodD1cIjIwMFwiPjxwYXRoIGQ9XCJNODY3LjkyNTMzMyA1MTUuMDcyYzI0LjI3NzMzMy0yNC4zMiA0NC4zMzA2NjctNDQuMzMwNjY3IDU5LjMwNjY2Ny02MS45OTQ2NjcgMTUuNTczMzMzLTE4LjM0NjY2NyAyOC4xNi0zNi45MDY2NjcgMzUuNDEzMzMzLTU5LjAwOGExNzAuNjI0IDE3MC42MjQgMCAwIDAgMC0xMDUuNDcyYy03LjI1MzMzMy0yMi4xMDEzMzMtMTkuODQtNDAuNjYxMzMzLTM1LjQxMzMzMy01OS4wMDgtMTQuOTc2LTE3LjY2NC0zNS4wMjkzMzMtMzcuNzE3MzMzLTU5LjMwNjY2Ny02MS45OTQ2NjZsLTExLjUyLTExLjUyYy0yNC4zMi0yNC4zMi00NC4zNzMzMzMtNDQuMzczMzMzLTYxLjk5NDY2Ni01OS4zMDY2NjctMTguMzQ2NjY3LTE1LjYxNi0zNi45MDY2NjctMjguMjAyNjY3LTU5LjAwOC0zNS40MTMzMzNhMTcwLjY2NjY2NyAxNzAuNjY2NjY3IDAgMCAwLTEwNS41MTQ2NjcgMGMtMjIuMTAxMzMzIDcuMjEwNjY3LTQwLjY2MTMzMyAxOS43OTczMzMtNTkuMDA4IDM1LjQxMzMzMy0xNy42NjQgMTQuOTMzMzMzLTM3LjY3NDY2NyAzNC45ODY2NjctNjEuOTUyIDU5LjMwNjY2N2wtNjkuNzYgNjkuNzYtMjgzLjEzNiAyODMuMDkzMzMzYy0yNC4yNzczMzMgMjQuMzItNDQuMzMwNjY3IDQ0LjMzMDY2Ny01OS4zMDY2NjcgNjEuOTk0NjY3LTE1LjU3MzMzMyAxOC4zNDY2NjctMjguMTYgMzYuOTA2NjY3LTM1LjM3MDY2NiA1OS4wMDhhMTcwLjY2NjY2NyAxNzAuNjY2NjY3IDAgMCAwIDAgMTA1LjQ3MmM3LjE2OCAyMi4xMDEzMzMgMTkuNzk3MzMzIDQwLjY2MTMzMyAzNS4zNzA2NjYgNTkuMDA4IDE0Ljk3NiAxNy42NjQgMzUuMDI5MzMzIDM3LjcxNzMzMyA1OS4zMDY2NjcgNjEuOTk0NjY2bDI5Ljc4MTMzMyAyOS43ODEzMzQgMi41NiAyLjUxNzMzM2MxMi4yNDUzMzMgMTIuMjg4IDIzLjA0IDIzLjEyNTMzMyAzNi4wNTMzMzQgMzEuMTA0YTEyOCAxMjggMCAwIDAgMzcuMDM0NjY2IDE1LjM2YzE0Ljg0OCAzLjU0MTMzMyAzMC4xNjUzMzMgMy40OTg2NjcgNDcuNTMwNjY3IDMuNDk4NjY3SDg5NmE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMSAwIDAtODUuMzMzMzM0aC0zNjYuMzM2bDMzOC4yNjEzMzMtMzM4LjI2MTMzM3ogbS0xNTguODkwNjY2LTM3Mi41MjI2NjdjNy4xMjUzMzMgMi4zMDQgMTUuODI5MzMzIDcuMDgyNjY3IDMwLjEyMjY2NiAxOS4yNDI2NjcgMTQuNzIgMTIuNDU4NjY3IDMyLjI5ODY2NyAzMC4wMzczMzMgNTguMTU0NjY3IDU1Ljg5MzMzM2w5LjAwMjY2NyA5LjAwMjY2N2MyNS44NTYgMjUuODU2IDQzLjM5MiA0My40MzQ2NjcgNTUuODkzMzMzIDU4LjExMiAxMi4xMTczMzMgMTQuMzM2IDE2LjkzODY2NyAyMy4wNCAxOS4yNDI2NjcgMzAuMTY1MzMzYTg1LjMzMzMzMyA4NS4zMzMzMzMgMCAwIDEgMCA1Mi43MzZjLTIuMzA0IDcuMTI1MzMzLTcuMTI1MzMzIDE1LjgyOTMzMy0xOS4yNDI2NjcgMzAuMTY1MzM0LTEyLjUwMTMzMyAxNC42NzczMzMtMzAuMDM3MzMzIDMyLjI1Ni01NS44OTMzMzMgNTguMTEybC0zOC4zMTQ2NjcgMzguMzU3MzMzTDUyOS42NjQgMjU2bDM4LjM1NzMzMy0zOC4zNTczMzNjMjUuODEzMzMzLTI1LjgxMzMzMyA0My40MzQ2NjctNDMuMzkyIDU4LjExMi01NS44NTA2NjcgMTQuMjkzMzMzLTEyLjE2IDIzLjA0LTE2LjkzODY2NyAzMC4xNjUzMzQtMTkuMjQyNjY3YTg1LjMzMzMzMyA4NS4zMzMzMzMgMCAwIDEgNTIuNzM2IDB6TTcwNy42MjY2NjcgNTU0LjY2NjY2N2wtMjcxLjE0NjY2NyAyNzEuMTg5MzMzYy0xNi4yMTMzMzMgMTYuMjEzMzMzLTE5LjU4NCAxOS4yLTIyLjg2OTMzMyAyMS4yMDUzMzNhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS0xMi4zNzMzMzQgNS4xMmMtMy43NTQ2NjcgMC44NTMzMzMtOC4yMzQ2NjcgMS4xNTItMzEuMTQ2NjY2IDEuMTUySDMxMi41MzMzMzNjLTIyLjkxMiAwLTI3LjM5Mi0wLjI1Ni0zMS4xNDY2NjYtMS4xOTQ2NjZhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS0xMi4zNzMzMzQtNS4xMmMtMy4yODUzMzMtMi4wMDUzMzMtNi42NTYtNC45OTItMjIuODY5MzMzLTIxLjE2MjY2N2wtMjguNTAxMzMzLTI4LjU0NGMtMjUuODU2LTI1Ljg1Ni00My4zOTItNDMuNDM0NjY3LTU1Ljg5MzMzNC01OC4xMTItMTIuMTE3MzMzLTE0LjI5MzMzMy0xNi45Mzg2NjctMjMuMDQtMTkuMi0zMC4xNjUzMzNhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMSAwLTUyLjczNmMyLjI2MTMzMy03LjEyNTMzMyA3LjA4MjY2Ny0xNS44MjkzMzMgMTkuMi0zMC4xNjUzMzQgMTIuNTAxMzMzLTE0LjY3NzMzMyAzMC4wMzczMzMtMzIuMjU2IDU1Ljg5MzMzNC01OC4xMTJsMjUxLjY0OC0yNTEuNjkwNjY2TDcwNy42MjY2NjcgNTU0LjY2NjY2N3pcIiBwLWlkPVwiNTI0MDlcIj48L3BhdGg+PC9zdmc+JyxcclxuXHRcdFx0XHRjbGFzc05hbWU6IFwiZnRiLWNsZWFyXCIsXHJcblx0XHRcdFx0b25DbGljazogKCkgPT4gdGhpcy5jbGVhckZvcm1hdHRpbmcoKVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bGFiZWw6IFwiRm9udFN0eWxlXCIsXHJcblx0XHRcdFx0aWNvbjogJzxzdmcgdD1cIjE3MzgzMTU3MDk4MDVcIiBjbGFzcz1cImljb25cIiB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgcC1pZD1cIjU5OTExXCIgd2lkdGg9XCIyMDBcIiBoZWlnaHQ9XCIyMDBcIj48cGF0aCBkPVwiTTgzOSA3NjhINzM1LjNsLTc0LjEtMTkyLjdIMzU4LjZMMjg4LjcgNzY4SDE4NUw0NjEuOCA2NGgxMDAuNEw4MzkgNzY4ek02MzIuMSA0OTUuOEw1MjIuMyAyMDMuMWMtMy40LTkuNC03LjItMjUuNy0xMS4zLTQ5LjFoLTIuM2MtMy40IDIxLjItNy40IDM3LjYtMTEuNyA0OS4xTDM4OC4xIDQ5NS44aDI0NHpcIiBwLWlkPVwiNTk5MTJcIj48L3BhdGg+PHBhdGggZD1cIk02NCA4MzJoODk2djEyOEg2NHpcIiBmaWxsPVwiI0ZGMDAwMFwiIHAtaWQ9XCI1OTkxM1wiIGRhdGEtc3BtLWFuY2hvci1pZD1cImEzMTN4LnNlYXJjaF9pbmRleC4wLmk1NC42OTQ5M2E4MWtSamVNZFwiIGNsYXNzPVwic2VsZWN0ZWRcIj48L3BhdGg+PC9zdmc+JyxcclxuXHRcdFx0XHRpY29uMjogJzxzdmcgdD1cIjE3MzgzMTczNjAwNjJcIiBjbGFzcz1cImljb24tcGFnZSBmb250LWJ0LXRyaWdcIiB2aWV3Qm94PVwiMCAwIDEwMjQgMTAyNFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgcC1pZD1cIjYwOTQ3XCIgd2lkdGg9XCIyMDBcIiBoZWlnaHQ9XCIyMDBcIj48cGF0aCBkPVwiTTUyOS45MiA2NDAuNTEyTDcxNi44IDQ1Ni43MDRhNTEuMiA1MS4yIDAgMCAwLTM1Ljg0LTg4LjA2NEgzMTQuODhhNTEuMiA1MS4yIDAgMCAwLTM2Ljg2NCA4Ny4wNGwxNzkuMiAxODMuODA4YTUxLjIgNTEuMiAwIDAgMCA3Mi4xOTIgMHpcIiBmaWxsPVwiI0I5QjhCNlwiIHAtaWQ9XCI2MDk0OFwiPjwvcGF0aD48L3N2Zz4nLFxyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmdGItZm9udC1zdHlsZVwiLCAvLyBcdThGRDlcdTRFMkFcdTdDN0JcdTRGRERcdThCQzFcdTY2MkZcdTU1MkZcdTRFMDBcdTc2ODRcclxuXHRcdFx0XHRjbGFzc05vcm06IFwib2JzLWJ0bi1wYWdlXCIsIC8vIFx1OEZEOVx1NEUyQVx1N0M3Qlx1NTNFRlx1NEVFNVx1NjYyRlx1OTAxQVx1NzUyOFx1NzY4NFxyXG5cdFx0XHRcdG9uQ2xpY2s6ICgpID0+IHsgfSwgLy8gY2xpY2tcdTRFMERcdThCQkVcdTdGNkVcdUZGMENcdTU2RTBcdTRFM0FcdThGRDlcdTRFMkFcdTYzMDlcdTk0QUVcdTY2MkZcdTc1MjhcdTY3NjVcdTY2M0VcdTc5M0FcdTRFMEJcdTYyQzlcdTgzRENcdTUzNTVcdTc2ODRcdUZGMENcdTUxOTlcdTRFMkFcdTdBN0FcdTUxRkRcdTY1NzBcclxuXHRcdFx0fSxcclxuXHRcdF07XHJcblxyXG5cdFx0YnV0dG9ucy5mb3JFYWNoKCh7IG9uQ2xpY2ssIGljb24sIGljb24yLCBjbGFzc05hbWUsIGNsYXNzTm9ybSB9KSA9PiB7XHJcblx0XHRcdGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7XHJcblx0XHRcdGJ1dHRvbi5jbGFzc05hbWUgPSBjbGFzc05hbWU7XHJcblx0XHRcdC8vIHNldEljb24oYnV0dG9uLCBpY29uKTsgLy8gXHU0RjdGXHU3NTI4b2JzaWRpYW5cdTc2ODRcdTU2RkVcdTY4MDdcclxuXHRcdFx0aWYgKGNsYXNzTm9ybSAmJiBpY29uMikge1xyXG5cdFx0XHRcdGJ1dHRvbi5pbm5lckhUTUwgPSBpY29uICsgaWNvbjI7XHJcblx0XHRcdFx0YnV0dG9uLmNsYXNzTmFtZSArPSBgICR7Y2xhc3NOb3JtfWA7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZVxyXG5cdFx0XHR7XHJcblx0XHRcdFx0YnV0dG9uLmlubmVySFRNTCA9IGljb247IC8vIFx1NEY3Rlx1NzUyOHN2Z1x1NTZGRVx1NjgwN1xyXG5cdFx0XHR9XHJcblx0XHRcdGJ1dHRvbi5vbmNsaWNrID0gb25DbGljazsgLy8gXHU3NTI4XHU3Njg0XHU2NjJGXHU3QkFEXHU1OTM0XHU1MUZEXHU2NTcwXHVGRjBDXHU2MjQwXHU0RUU1XHU4RkQ5XHU5MUNDXHU3Njg0dGhpc1x1NjYyRlx1NjMwN1x1NTQxMVx1NUY1M1x1NTI0RFx1N0M3Qlx1NzY4NFxyXG5cdFx0XHR0b29sYmFyLmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcblxyXG5cdFx0XHQvLyBcdTU5ODJcdTY3OUNcdTY2MkZcdTVCNTdcdTRGNTNcdTY4MzdcdTVGMEZcdTYzMDlcdTk0QUVcdUZGMENcdTkwQTNcdTRFNDhcdTk3MDBcdTg5ODFcdTZERkJcdTUyQTBcdTlGMjBcdTY4MDdcdTc5RkJcdTUxNjVcdTc5RkJcdTUxRkFcdTRFOEJcdTRFRjZcclxuXHRcdFx0aWYgKGNsYXNzTmFtZSA9PT0gXCJmdGItZm9udC1zdHlsZVwiKSB7XHJcblx0XHRcdFx0YnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsICgpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMuaXNIb3ZlckJ1dHRvbkZvbnRTdHlsZSA9IHRydWU7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5USGlkZUZvbnRTdHlsZUJhcikge1xyXG5cdFx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGhpcy5USGlkZUZvbnRTdHlsZUJhcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLnNob3dGb250U3R5bGVCYXIoKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5pc0hvdmVyQnV0dG9uRm9udFN0eWxlID0gZmFsc2U7XHJcblx0XHRcdFx0XHR0aGlzLmhpZGVGb250U3R5bGVCYXJMYXRlcigpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHQvLyBcdTU3MjhcdTY1ODdcdTY4NjNcdTRFMkRcdTc2ODRcdTY1ODdcdTY3MkNcdTg4QUJcdTkwMDlcdTYyRTlcdTY1RjZcdTg5RTZcdTUzRDFcclxuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgKCkgPT4gdGhpcy5jb250cm9sVG9vbGJhcigpKTsgXHJcblx0XHRcclxuXHRcdC8vIHJldHVybiB0b29sYmFyO1xyXG5cdH1cclxuXHJcblx0Y29udHJvbFRvb2xiYXIoKSB7XHJcblx0XHQvLyBpZiAodGhpcy5UU2VsZWN0aW9uVGV4dCkge1xyXG5cdFx0Ly8gfVxyXG5cdFx0Y2xlYXJUaW1lb3V0KHRoaXMuVFNlbGVjdGlvblRleHQpO1xyXG5cdFx0dGhpcy5UU2VsZWN0aW9uVGV4dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcclxuXHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpPy50b1N0cmluZygpO1xyXG5cdFx0XHRpZiAoc2VsZWN0aW9uKSB7XHJcblx0XHRcdFx0dGhpcy5zaG93VG9vbGJhcigpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuaGlkZVRvb2xiYXIoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSwgMzAwKTtcclxuXHR9XHJcblxyXG5cclxuXHRzaG93VG9vbGJhcigpIHtcclxuXHRcdC8vIFx1NjI1M1x1NUYwMFx1NURFNVx1NTE3N1x1NjgwRlx1NzY4NFx1NjVGNlx1OTVGNFx1RkYxQTMwMCsxMDA9NDAwbXNcclxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRjb25zdCBhY3RpdmVMZWFmID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KTtcclxuXHRcdFx0aWYgKCFhY3RpdmVMZWFmIHx8IGFjdGl2ZUxlYWYuY3VycmVudE1vZGUudHlwZSA9PSBcInByZXZpZXdcIikgcmV0dXJuO1xyXG5cdFx0XHRcclxuXHRcdFx0Y29uc3QgdG9vbGJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwib2JzLWZsb2F0LXRvb2xiYXJcIik7XHJcblx0XHRcdGlmICghdG9vbGJhcikgcmV0dXJuO1xyXG5cdFx0XHRcclxuXHRcdFx0Y29uc3QgcmFuZ2VGaXJzdCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8uZ2V0UmFuZ2VBdCgwKS5nZXRDbGllbnRSZWN0cygpWzBdO1xyXG5cdFx0XHRpZiAoIXJhbmdlRmlyc3QpIHJldHVybjtcclxuXHRcdFx0XHJcblx0XHRcdGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKT8udG9TdHJpbmcoKTtcclxuXHRcdFx0aWYgKCFzZWxlY3Rpb24pIHJldHVybjtcclxuXHJcblx0XHRcdGNvbnN0IHBhZ2VQb3NpdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJtb2QtYWN0aXZlXCIpWzBdPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgLy8gYXBwLWNvbnRhaW5lclxyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhyYW5nZUZpcnN0KTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2cocGFnZVBvc2l0aW9uKTtcclxuXHJcblx0XHRcdGxldCBsZWZ0ID0gcmFuZ2VGaXJzdC5sZWZ0ICsgd2luZG93LnNjcm9sbFg7XHJcblx0XHRcdGNvbnN0IHRvcCA9IHJhbmdlRmlyc3QudG9wICsgd2luZG93LnNjcm9sbFkgLSB0aGlzLkhlaWdodFRvb2xCYXIgLSA2O1xyXG5cclxuXHRcdFx0aWYgKHBhZ2VQb3NpdGlvbi5yaWdodCAtIHRoaXMuV2lkdGhUb29sQmFyIC0gdGhpcy5XaWR0aEZvbnRTdHlsZUJhciAvIDIgLSAxNSAtIGxlZnQgPCAwKVxyXG5cdFx0XHR7XHJcblx0XHRcdFx0bGVmdCA9IHBhZ2VQb3NpdGlvbi5yaWdodCAtIHRoaXMuV2lkdGhUb29sQmFyIC0gdGhpcy5XaWR0aEZvbnRTdHlsZUJhciAvIDIgLSAxNTtcclxuXHRcdFx0XHRpZiAobGVmdCA8IDApIGxlZnQgPSAwO1xyXG5cdFx0XHR9XHJcblx0XHRcdFxyXG5cdFx0XHR0b29sYmFyLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YDtcclxuXHRcdFx0dG9vbGJhci5zdHlsZS50b3AgPSBgJHt0b3B9cHhgO1xyXG5cdFx0XHR0b29sYmFyLnN0eWxlLmRpc3BsYXkgPSBcImZsZXhcIjtcclxuXHRcdFx0Ly8gXHU2REZCXHU1MkEwXHU1MkE4XHU3NTNCXHU3QzdCXHJcblx0XHRcdC8vIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcblx0XHRcdC8vIFx0dG9vbGJhci5jbGFzc0xpc3QuYWRkKFwic2hvd1wiKTtcclxuXHRcdFx0Ly8gfSk7XHJcblx0XHR9LCAxMDApO1xyXG5cdH1cclxuXHRcclxuXHJcblx0aGlkZVRvb2xiYXIoKSB7XHJcblx0XHR0aGlzLmhpZGVGb250U3R5bGVCYXIoKTtcclxuXHRcdGNvbnN0IHRvb2xiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm9icy1mbG9hdC10b29sYmFyXCIpO1xyXG5cdFx0aWYgKCF0b29sYmFyKSByZXR1cm47ICAgICBcclxuXHRcdHRvb2xiYXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIC8vIHRvb2xiYXIuY2xhc3NMaXN0LnJlbW92ZShcInNob3dcIik7IC8vIFx1NzlGQlx1OTY2NFx1NTJBOFx1NzUzQlx1N0M3QlxyXG5cdH1cclxuXHJcblxyXG5cdGFwcGx5Rm9ybWF0dGluZyhmb3JtYXQ6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgZWRpdG9yID0gdGhpcy5hcHAud29ya3NwYWNlLmFjdGl2ZUVkaXRvcj8uZWRpdG9yO1xyXG5cdFx0aWYgKCFlZGl0b3IpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XHJcblx0XHRpZiAoIXNlbGVjdGlvbikgcmV0dXJuO1xyXG5cclxuXHRcdGlmIChzZWxlY3Rpb24uaW5jbHVkZXMoJ1xcbicpKVxyXG5cdFx0e1xyXG5cdFx0XHR0aGlzLmhpZGVUb29sYmFyKCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoXCJcdTRFMERcdTgwRkRcdThCQkVcdTdGNkVcdTU5MUFcdTZCQjVcdTY1ODdcdTY3MkNcdTc2ODRcdTY4M0NcdTVGMEZcIik7XHJcblx0XHRcdGNvbnN0IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoKTtcclxuXHRcdFx0ZWRpdG9yLnNldFNlbGVjdGlvbihjdXJzb3IsIGN1cnNvcik7XHJcblx0XHRcdGVkaXRvci5mb2N1cygpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgZm9ybWF0dGVkVGV4dCA9IGAke2Zvcm1hdH0ke3NlbGVjdGlvbn0ke2Zvcm1hdH1gO1xyXG5cdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oZm9ybWF0dGVkVGV4dCk7XHQvL1x1NjZGRlx1NjM2Mlx1OTAwOVx1NEUyRFx1NzY4NFx1NjU4N1x1NjcyQ1xyXG5cdFx0ZWRpdG9yLmZvY3VzKCk7IC8vXHU5MUNEXHU2NUIwXHU4M0I3XHU1M0Q2XHU3MTI2XHU3MEI5XHJcblxyXG5cdFx0dGhpcy5oaWRlVG9vbGJhcigpO1xyXG5cdH1cclxuXHJcblxyXG5cdGNsZWFyRm9ybWF0dGluZygpIHtcclxuXHRcdGNvbnN0IGVkaXRvciA9IHRoaXMuYXBwLndvcmtzcGFjZS5hY3RpdmVFZGl0b3I/LmVkaXRvcjtcclxuXHRcdGlmICghZWRpdG9yKSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0aWYgKCFzZWxlY3Rpb24pIHJldHVybjtcclxuXHJcblx0XHQvLyBcdTRGN0ZcdTc1MjhcdTZCNjNcdTUyMTlcdTg4NjhcdThGQkVcdTVGMEZcdTUzQkJcdTk2NjQgTWFya2Rvd24gXHU2ODNDXHU1RjBGXHJcblx0XHRjb25zdCBwbGFpblRleHQgPSBzZWxlY3Rpb25cclxuXHRcdFx0LnJlcGxhY2UoLyhcXCpcXCp8X18pKC4qPylcXDEvZywgXCIkMlwiKSAvLyBcdTUzQkJcdTYzODlcdTUyQTBcdTdDOTdcclxuXHRcdFx0LnJlcGxhY2UoLyhffFxcKikoLio/KVxcMS9nLCBcIiQyXCIpICAgLy8gXHU1M0JCXHU2Mzg5XHU2NTlDXHU0RjUzXHJcblx0XHRcdC5yZXBsYWNlKC9+figuKj8pfn4vZywgXCIkMVwiKSAgICAgIC8vIFx1NTNCQlx1NjM4OVx1NTIyMFx1OTY2NFx1N0VCRlxyXG5cdFx0XHQucmVwbGFjZSgvKFxcJCkoLio/KVxcMS9nLCBcIiQyXCIpICAvLyBcdTUzQkJcdTYzODlcdTg4NENcdTUxODVcdTUxNkNcdTVGMEZcclxuXHRcdFx0LnJlcGxhY2UoL2AoW15gXSspYC9nLCBcIiQxXCIpICAgICAgLy8gXHU1M0JCXHU2Mzg5XHU4ODRDXHU1MTg1XHU0RUUzXHU3ODAxXHJcblx0XHRcdC5yZXBsYWNlKC9cXFsoLio/KVxcXVxcKC4qP1xcKS9nLCBcIiQxXCIpIC8vIFx1NTNCQlx1NjM4OVx1OTRGRVx1NjNBNVxyXG5cdFx0XHQucmVwbGFjZSgvPGZvbnQuKj8+KC4qPyk8XFwvZm9udD4vZywgXCIkMVwiKSAvLyBcdTUzQkJcdTk2NjRodG1sXHU2ODA3XHU3QjdFXHJcblx0XHRcdC5yZXBsYWNlKC89PSguKj8pPT0vZywgXCIkMVwiKTsgLy8gXHU1M0JCXHU2Mzg5XHU5QUQ4XHU0RUFFXHJcblxyXG5cdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocGxhaW5UZXh0KTtcdC8vXHU2NkZGXHU2MzYyXHU5MDA5XHU0RTJEXHU3Njg0XHU2NTg3XHU2NzJDXHJcblx0XHRlZGl0b3IuZm9jdXMoKTsgLy9cdTkxQ0RcdTY1QjBcdTgzQjdcdTUzRDZcdTcxMjZcdTcwQjlcclxuXHJcblx0XHR0aGlzLmhpZGVUb29sYmFyKCk7XHJcblx0fVxyXG5cclxuXHJcblx0Y3JlYXRGb250U3R5bGVCYXIoKSB7XHJcblx0XHRjb25zdCBmb250U3R5bGVCYXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5cdFx0Zm9udFN0eWxlQmFyLmlkID0gXCJmb250LXN0eWxlLWJhclwiO1xyXG5cdFx0Zm9udFN0eWxlQmFyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuXHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZm9udFN0eWxlQmFyKTtcclxuXHRcdFxyXG5cdFx0Y29uc3QgYmdDb2xvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cdFx0YmdDb2xvckRpdi50ZXh0Q29udGVudCA9ICdcdTY1ODdcdTVCNTdcdTk4OUNcdTgyNzInO1xyXG5cdFx0YmdDb2xvckRpdi5jbGFzc05hbWUgPSAnZnRiLXRleHQtZGl2JztcclxuXHRcdGZvbnRTdHlsZUJhci5hcHBlbmRDaGlsZChiZ0NvbG9yRGl2KTtcclxuXHJcblx0XHRjb25zdCBmdGJCdG5EaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHRcdGZ0YkJ0bkRpdi5jbGFzc05hbWUgPSAnZnRiLWJ0bi1kaXYnO1xyXG5cdFx0Zm9udFN0eWxlQmFyLmFwcGVuZENoaWxkKGZ0YkJ0bkRpdik7XHJcblxyXG5cdFx0Y29uc3QgZm9udENvbG9yQnRucyA9IFtcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmc2ItcmVkXCIsXHJcblx0XHRcdFx0Zm9udENvbG9yOiBcIjIzNSwgODcsIDg3XCIsXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjbGFzc05hbWU6IFwiZnNiLW9yYW5nZVwiLFxyXG5cdFx0XHRcdGZvbnRDb2xvcjogXCIyMTcsIDExNSwgMTNcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmc2ItZ3JlZW5cIixcclxuXHRcdFx0XHRmb250Q29sb3I6IFwiNjgsIDEzMSwgOTdcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmc2ItY3lhblwiLFxyXG5cdFx0XHRcdGZvbnRDb2xvcjogXCI1MywgMTE1LCAxMjVcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmc2ItYmx1ZVwiLFxyXG5cdFx0XHRcdGZvbnRDb2xvcjogXCI1MSwgMTI2LCAxNjlcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmc2ItcHVycGxlXCIsXHJcblx0XHRcdFx0Zm9udENvbG9yOiBcIjEwMCwgMzcsIDIwOFwiLFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0Y2xhc3NOYW1lOiBcImZzYi1ncmV5XCIsXHJcblx0XHRcdFx0Zm9udENvbG9yOiBcIjE0MywgMTQ5LCAxNThcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmc2ItYmxhY2tcIixcclxuXHRcdFx0XHRmb250Q29sb3I6IFwiMCwgMCwgMFwiLFxyXG5cdFx0XHR9LFxyXG5cdFx0XTtcclxuXHRcdFxyXG5cdFx0Zm9yIChjb25zdCB7IGNsYXNzTmFtZSwgZm9udENvbG9yIH0gb2YgZm9udENvbG9yQnRucykge1xyXG5cdFx0XHRjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO1xyXG5cdFx0XHRidXR0b24uY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xyXG5cdFx0XHRidXR0b24uY2xhc3NOYW1lICs9IFwiIGZzYi1mYy1idG5cIjtcclxuXHRcdFx0YnV0dG9uLm9uY2xpY2sgPSAoKSA9PiB0aGlzLmFwcGx5Rm9udFN0eWxlKGJ1dHRvbiwgZm9udENvbG9yKTtcclxuXHRcdFx0ZnRiQnRuRGl2LmFwcGVuZENoaWxkKGJ1dHRvbik7XHJcblx0XHRcdGJ1dHRvbi5pbm5lckhUTUwgPSBgPHN2ZyB0PVwiMTczODQ4NTU4MDkwMVwiIGNsYXNzPVwiaWNvblwiIHZpZXdCb3g9XCIwIDAgMTAyNCAxMDI0XCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBwLWlkPVwiMTAzNDM2XCIgd2lkdGg9XCIyMDBcIiBoZWlnaHQ9XCIyMDBcIj48cGF0aCBkPVwiTTUxMiAxMjhhNDIuNDM5MTExIDQyLjQzOTExMSAwIDAgMSAxNi4xNTY0NDQgMy4xODU3NzggNDIuODM3MzMzIDQyLjgzNzMzMyAwIDAgMSA2Ljk0MDQ0NSAzLjY0MDg4OSA0Mi4zODIyMjIgNDIuMzgyMjIyIDAgMCAxIDYuMjAwODg5IDQuODkyNDQ0IDQyLjM4MjIyMiA0Mi4zODIyMjIgMCAwIDEgNi44ODM1NTUgOC42NDcxMTEgNDIuODk0MjIyIDQyLjg5NDIyMiAwIDAgMSAyLjQ0NjIyMyA0LjcyMTc3OGwyODQuNDQ0NDQ0IDYyNS43Nzc3NzhhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS03Ny43MTAyMjIgMzUuMzI4bC05Mi40NDQ0NDUtMjAzLjk0NjY2N2E0Mi43ODA0NDQgNDIuNzgwNDQ0IDAgMCAxLTEwLjY5NTExMSAxLjMwODQ0NWgtMjg0LjQ0NDQ0NGE0Mi43MjM1NTYgNDIuNzIzNTU2IDAgMCAxLTEwLjY5NTExMS0xLjM2NTMzNGwtOTIuNjcyIDIwMy45NDY2NjdhNDIuNjY2NjY3IDQyLjY2NjY2NyAwIDAgMS01Ni40OTA2NjcgMjEuMTYyNjY3IDQyLjY2NjY2NyA0Mi42NjY2NjcgMCAwIDEtMjUuMDMxMTExLTM4Ljg1NTExMiA0Mi40OTYgNDIuNDk2IDAgMCAxIDMuODExNTU1LTE3LjY5MjQ0NGwyODQuNDQ0NDQ1LTYyNS43Nzc3NzhhNDIuODM3MzMzIDQyLjgzNzMzMyAwIDAgMSAyLjY3Mzc3OC01LjA2MzExMSA0Mi40MzkxMTEgNDIuNDM5MTExIDAgMCAxIDUuMDA2MjIyLTYuNTQyMjIyIDQyLjM4MjIyMiA0Mi4zODIyMjIgMCAwIDEgOS44OTg2NjctNy43OTM3NzggNDIuODk0MjIyIDQyLjg5NDIyMiAwIDAgMSA0LjIwOTc3Ny0yLjA0OCA0Mi42MDk3NzggNDIuNjA5Nzc4IDAgMCAxIDE3LjA2NjY2Ny0zLjUyNzExMXogbTExNC42ODggMzk4LjIyMjIyMkw1MTIgMjczLjgwNjIyMiAzOTcuMjU1MTExIDUyNi4yMjIyMjJ6XCIgZmlsbD1cInJnYigke2ZvbnRDb2xvcn0pXCIgcC1pZD1cIjEwMzQzN1wiPjwvcGF0aD48L3N2Zz5gO1xyXG5cdFx0XHRidXR0b24uc3R5bGUuc2V0UHJvcGVydHkoJy0tZnRiLWJ0bi1mb250LWNvbG9yJywgZm9udENvbG9yKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBiZ0NvbG9yMkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cdFx0YmdDb2xvcjJEaXYudGV4dENvbnRlbnQgPSAnXHU4MENDXHU2NjZGXHU5ODlDXHU4MjcyJztcclxuXHRcdGJnQ29sb3IyRGl2LmNsYXNzTmFtZSA9ICdmdGItdGV4dC1kaXYnO1xyXG5cdFx0Zm9udFN0eWxlQmFyLmFwcGVuZENoaWxkKGJnQ29sb3IyRGl2KTtcclxuXHJcblx0XHRjb25zdCBmdGJCdG5EaXYyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcblx0XHRmdGJCdG5EaXYyLmNsYXNzTmFtZSA9ICdmdGItYnRuLWRpdic7XHJcblx0XHRmb250U3R5bGVCYXIuYXBwZW5kQ2hpbGQoZnRiQnRuRGl2Mik7XHJcblxyXG5cdFx0Y29uc3QgZm9udEJhY2tDb2xvckJ0bnMgPSBbXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjbGFzc05hbWU6IFwiZnNiLXJlZC1iYWNrXCIsXHJcblx0XHRcdFx0YmFja0NvbG9yOiBcIjI0OCwgMjE1LCAyMThcIixcclxuXHRcdFx0XHRib3JkZXJDb2xvcjogXCIyNjUsIDEwNywgMTA3XCIsXHJcblx0XHRcdH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjbGFzc05hbWU6IFwiZnNiLW9yYW5nZS1iYWNrXCIsXHJcblx0XHRcdFx0YmFja0NvbG9yOiBcIjI1NSwgMjQzLCAyMDVcIixcclxuXHRcdFx0XHRib3JkZXJDb2xvcjogXCIyNTUsIDIxNiwgODBcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmc2ItZ3JlZW4tYmFja1wiLFxyXG5cdFx0XHRcdGJhY2tDb2xvcjogXCIyMTIsIDIzNywgMjE4XCIsXHJcblx0XHRcdFx0Ym9yZGVyQ29sb3I6IFwiNjgsIDEzMSwgOTdcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmc2ItY3lhbi1iYWNrXCIsXHJcblx0XHRcdFx0YmFja0NvbG9yOiBcIjIwOSwgMjM2LCAyNDFcIixcclxuXHRcdFx0XHRib3JkZXJDb2xvcjogXCI1MywgMTE1LCAxMjVcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmc2ItYmx1ZS1iYWNrXCIsXHJcblx0XHRcdFx0YmFja0NvbG9yOiBcIjIwNywgMjIxLCAyNTRcIixcclxuXHRcdFx0XHRib3JkZXJDb2xvcjogXCI1MSwgMTI2LCAxNjlcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmc2ItcHVycGxlLWJhY2tcIixcclxuXHRcdFx0XHRiYWNrQ29sb3I6IFwiMjM2LCAyMjYsIDI1NFwiLFxyXG5cdFx0XHRcdGJvcmRlckNvbG9yOiBcIjEwMCwgMzcsIDIwOFwiLFxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7XHJcblx0XHRcdFx0Y2xhc3NOYW1lOiBcImZzYi1ncmV5LWJhY2tcIixcclxuXHRcdFx0XHRiYWNrQ29sb3I6IFwiMjI5LCAyMzAsIDIzM1wiLFxyXG5cdFx0XHRcdGJvcmRlckNvbG9yOiBcIjE0MywgMTQ5LCAxNThcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNsYXNzTmFtZTogXCJmc2Itd2hpdGUtYmFja1wiLFxyXG5cdFx0XHRcdGJhY2tDb2xvcjogXCIyNTUsIDI1NSwgMjU1XCIsXHJcblx0XHRcdFx0Ym9yZGVyQ29sb3I6IFwiMjA0LCAyMDQsIDIwNFwiLFxyXG5cdFx0XHR9LFxyXG5cdFx0XTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IHsgY2xhc3NOYW1lLCBiYWNrQ29sb3IsIGJvcmRlckNvbG9yIH0gb2YgZm9udEJhY2tDb2xvckJ0bnMpIHtcclxuXHRcdFx0Y29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcclxuXHRcdFx0YnV0dG9uLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcclxuXHRcdFx0YnV0dG9uLmNsYXNzTmFtZSArPSBcIiBmc2ItYmMtYnRuXCI7XHJcblx0XHRcdGJ1dHRvbi5vbmNsaWNrID0gKCkgPT4gdGhpcy5hcHBseUZvbnRTdHlsZShidXR0b24sIGJhY2tDb2xvcik7XHJcblx0XHRcdGZ0YkJ0bkRpdjIuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcclxuXHRcdFx0YnV0dG9uLnN0eWxlLnNldFByb3BlcnR5KCctLWZ0Yi1idG4tYmFjay1jb2xvcicsIGJhY2tDb2xvcik7XHJcblx0XHRcdGJ1dHRvbi5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1mdGItYnRuLWJvcmRlci1jb2xvcicsIGJvcmRlckNvbG9yKTtcclxuXHRcdH1cclxuXHJcblx0XHRcclxuXHRcdC8vIFx1OUYyMFx1NjgwN1x1NzlGQlx1NTE2NVx1NzlGQlx1NTFGQVx1NEU4Qlx1NEVGNlxyXG5cdFx0Zm9udFN0eWxlQmFyLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsICgpID0+IHtcclxuXHRcdFx0dGhpcy5pc0hvdmVyRm9udFN0eWxlQmFyID0gdHJ1ZTtcclxuXHRcdFx0aWYgKHRoaXMuVEhpZGVGb250U3R5bGVCYXIpIHtcclxuXHRcdFx0XHRjbGVhclRpbWVvdXQodGhpcy5USGlkZUZvbnRTdHlsZUJhcik7XHJcblx0XHRcdH1cclxuXHRcdH0pO1x0XHJcblx0XHRmb250U3R5bGVCYXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmlzSG92ZXJGb250U3R5bGVCYXIgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5oaWRlRm9udFN0eWxlQmFyTGF0ZXIoKVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdFxyXG5cclxuXHRzaG93Rm9udFN0eWxlQmFyKCkge1xyXG5cdFx0Y29uc3QgZm9udFN0eWxlQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJmb250LXN0eWxlLWJhclwiKTtcclxuXHRcdGlmKCFmb250U3R5bGVCYXIpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBmb250U3R5bGVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZnRiLWZvbnQtc3R5bGVcIilbMF07XHJcblx0XHRpZiAoIWZvbnRTdHlsZUJ0bikgcmV0dXJuO1xyXG5cclxuXHRcdGNvbnN0IHBhZ2VQb3NpdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJtb2QtYWN0aXZlXCIpWzBdPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcblx0XHRjb25zdCBidG5SZWN0ID0gZm9udFN0eWxlQnRuLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cdFx0Y29uc3QgbGVmdCA9IGJ0blJlY3QucmlnaHQgKyB3aW5kb3cuc2Nyb2xsWCAtIHRoaXMuV2lkdGhGb250U3R5bGVCYXIgLyAyO1xyXG5cdFx0bGV0IHRvcCA9IGJ0blJlY3QuYm90dG9tICsgd2luZG93LnNjcm9sbFkgKyAzLjU7XHJcblxyXG5cdFx0aWYgKHBhZ2VQb3NpdGlvbi5ib3R0b20gLSB0aGlzLkhlaWdodEZvbnRTdHlsZUJhciAtIHRvcCAtIDUgPCAwKVxyXG5cdFx0e1xyXG5cdFx0XHR0b3AgPSB0b3AgLSB0aGlzLkhlaWdodFRvb2xCYXIgLSB0aGlzLkhlaWdodEZvbnRTdHlsZUJhcjtcclxuXHRcdFx0Zm9udFN0eWxlQmFyLnN0eWxlLnpJbmRleCA9IFwiOTk5XCI7XHJcblx0XHR9XHJcblx0XHRlbHNlXHJcblx0XHR7XHJcblx0XHRcdGZvbnRTdHlsZUJhci5zdHlsZS56SW5kZXggPSBcIjEwMDBcIjtcclxuXHRcdH1cclxuXHJcblx0XHRmb250U3R5bGVCYXIuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgO1xyXG5cdFx0Zm9udFN0eWxlQmFyLnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XHJcblx0XHRmb250U3R5bGVCYXIuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxuXHJcblx0XHR0aGlzLnJvdFRyaWFuZ2xlKFwiZm9udC1idC10cmlnXCIsIC05MCk7XHJcblx0fVxyXG5cclxuXHRoaWRlRm9udFN0eWxlQmFyKCkge1xyXG5cdFx0Y29uc3QgZm9udFN0eWxlQmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJmb250LXN0eWxlLWJhclwiKTtcclxuXHRcdGlmIChmb250U3R5bGVCYXIpIHtcclxuXHRcdFx0Zm9udFN0eWxlQmFyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmluQWN0aXZlQWxsRm9udFN0eWxlQnRuKCk7XHJcblx0XHR0aGlzLnJvdFRyaWFuZ2xlKFwiZm9udC1idC10cmlnXCIsIDApO1xyXG5cdH1cclxuXHJcblxyXG5cdGhpZGVGb250U3R5bGVCYXJMYXRlcigpIHtcclxuXHRcdGlmICh0aGlzLlRIaWRlRm9udFN0eWxlQmFyKSB7XHJcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLlRIaWRlRm9udFN0eWxlQmFyKTtcclxuXHRcdH1cclxuXHRcdHRoaXMuVEhpZGVGb250U3R5bGVCYXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0aWYgKCF0aGlzLmlzSG92ZXJGb250U3R5bGVCYXIgJiYgIXRoaXMuaXNIb3ZlckJ1dHRvbkZvbnRTdHlsZSkge1xyXG5cdFx0XHRcdHRoaXMuaGlkZUZvbnRTdHlsZUJhcigpO1xyXG5cdFx0XHR9XHJcblx0XHR9LCAxNTApO1xyXG5cdH1cclxuXHJcblxyXG5cdGluQWNpdHZlU2FtZVR5cGVCdG4oYnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudCkge1xyXG5cdFx0aWYgKGJ1dHRvbi5jbGFzc0xpc3QuY29udGFpbnMoJ2ZzYi1mYy1idG4nKSkge1xyXG5cdFx0XHRjb25zdCBidXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmZzYi1mYy1idG4nKTtcclxuXHRcdFx0YnV0dG9ucy5mb3JFYWNoKChidG4pID0+IGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpKTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKGJ1dHRvbi5jbGFzc0xpc3QuY29udGFpbnMoJ2ZzYi1iYy1idG4nKSkge1xyXG5cdFx0XHRjb25zdCBidXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmZzYi1iYy1idG4nKTtcclxuXHRcdFx0YnV0dG9ucy5mb3JFYWNoKChidG4pID0+IGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHRpbkFjdGl2ZUFsbEZvbnRTdHlsZUJ0bigpIHtcclxuXHRcdC8vIFx1ODNCN1x1NTNENlx1NjI0MFx1NjcwOVx1NjMwOVx1OTRBRVxyXG5cdFx0Y29uc3QgYnV0dG9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNmb250LXN0eWxlLWJhciBidXR0b24uc2VsZWN0ZWQnKTtcclxuXHRcdC8vIFx1NkUwNVx1OTY2NFx1NjI0MFx1NjcwOVx1NjMwOVx1OTRBRVx1NzY4NFx1OTAwOVx1NEUyRFx1NzJCNlx1NjAwMVxyXG5cdFx0YnV0dG9ucy5mb3JFYWNoKChidG4pID0+IGJ0bi5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpKTtcclxuXHR9XHJcblxyXG5cclxuXHRyb3RUcmlhbmdsZSh1bmlxdWVDbGFzczogc3RyaW5nLCBudW06IG51bWJlcikge1xyXG5cdFx0Y29uc3Qgc3ZnVHJpYW5nbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHVuaXF1ZUNsYXNzKVswXSBhcyBIVE1MRWxlbWVudDtcclxuXHRcdGlmICghc3ZnVHJpYW5nbGUpIHJldHVybjtcclxuXHRcdFxyXG5cdFx0c3ZnVHJpYW5nbGUuc3R5bGUudHJhbnNmb3JtID0gYHJvdGF0ZSgke251bX1kZWcpYDtcclxuXHR9XHJcblxyXG5cclxuXHRhcHBseUZvbnRTdHlsZShidXR0b246IEhUTUxCdXR0b25FbGVtZW50LCBmb250U3RyOiBzdHJpbmcpIHtcclxuXHRcdC8vIFx1NjZGNFx1NjVCMFx1NjMwOVx1OTRBRVx1OTAwOVx1NEUyRFx1NzJCNlx1NjAwMVxyXG5cdFx0dGhpcy5pbkFjaXR2ZVNhbWVUeXBlQnRuKGJ1dHRvbik7XHJcblx0XHRidXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgnc2VsZWN0ZWQnKTtcclxuXHRcdFxyXG5cdFx0Y29uc3QgZWRpdG9yID0gdGhpcy5hcHAud29ya3NwYWNlLmFjdGl2ZUVkaXRvcj8uZWRpdG9yO1xyXG5cdFx0aWYgKCFlZGl0b3IpIHJldHVybjtcclxuXHRcdFxyXG5cdFx0Y29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLmdldFNlbGVjdGlvbigpO1xyXG5cdFx0aWYgKCFzZWxlY3RlZFRleHQpIHJldHVybjtcclxuXHJcblx0XHRpZiAoc2VsZWN0ZWRUZXh0LmluY2x1ZGVzKCdcXG4nKSkge1xyXG5cdFx0XHR0aGlzLmhpZGVUb29sYmFyKCk7XHJcblx0XHRcdG5ldyBOb3RpY2UoXCJcdTRFMERcdTgwRkRcdThCQkVcdTdGNkVcdTU5MUFcdTZCQjVcdTY1ODdcdTY3MkNcdTc2ODRcdTY4M0NcdTVGMEZcIik7XHJcblx0XHRcdGNvbnN0IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoKTtcclxuXHRcdFx0ZWRpdG9yLnNldFNlbGVjdGlvbihjdXJzb3IsIGN1cnNvcik7XHJcblx0XHRcdGVkaXRvci5mb2N1cygpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IGZjSHRtbCA9IFwiXCI7XHJcblx0XHRsZXQgZmJIdG1sID0gXCJcIjtcclxuXHRcdGxldCBtaWRUZXh0ID0gXCJcIjtcclxuXHRcdFxyXG5cdFx0Y29uc3QgZm9udFRhZ1BhdHRlcm4gPSAvXjxmb250W14+XSo+KC4qPyk8XFwvZm9udD4kL2kuZXhlYyhzZWxlY3RlZFRleHQpOyAvLyBcdTZCNjNcdTUyMTlcdTg4NjhcdThGQkVcdTVGMEZcdTUzMzlcdTkxNEQgPGZvbnQgLi4uPi4uLjwvZm9udD4gXHU2ODNDXHU1RjBGXHJcblx0XHRpZiAoYnV0dG9uLmNsYXNzTGlzdC5jb250YWlucygnZnNiLWZjLWJ0bicpKS8vIFx1OEJCRVx1N0Y2RVx1NzY4NFx1NjYyRlx1NUI1N1x1NEY1M1x1OTg5Q1x1ODI3MlxyXG5cdFx0e1xyXG5cdFx0XHRmY0h0bWwgPSBgY29sb3I6cmdiKCR7Zm9udFN0cn0pOyBgO1xyXG5cdFx0XHRpZiAoZm9udFRhZ1BhdHRlcm4pIC8vIFx1OTAwOVx1NEUyRFx1NzY4NFx1NjU4N1x1NjcyQ1x1NjYyRmZvbnRcdTY4MDdcdTdCN0VcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGNvbnN0IGZiSHRtbHMgPSBzZWxlY3RlZFRleHQubWF0Y2goL2JhY2tncm91bmQ6XFxzKnJnYlxcKFxccypcXGQrXFxzKixcXHMqXFxkK1xccyosXFxzKlxcZCtcXHMqXFwpO1xccyovKTtcclxuXHRcdFx0XHRpZiAoZmJIdG1scykgLy8gXHU4MEZEXHU1MzM5XHU5MTREXHU0RTBBXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0ZmJIdG1sID0gZmJIdG1sc1swXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bWlkVGV4dCA9IGZvbnRUYWdQYXR0ZXJuWzFdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdG1pZFRleHQgPSBzZWxlY3RlZFRleHQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKGJ1dHRvbi5jbGFzc0xpc3QuY29udGFpbnMoJ2ZzYi1iYy1idG4nKSkgLy8gXHU4QkJFXHU3RjZFXHU3Njg0XHU2NjJGXHU4MENDXHU2NjZGXHU5ODlDXHU4MjcyXHJcblx0XHR7XHJcblx0XHRcdGZiSHRtbCA9IGBiYWNrZ3JvdW5kOnJnYigke2ZvbnRTdHJ9KTsgYDtcclxuXHRcdFx0aWYgKGZvbnRUYWdQYXR0ZXJuKSAvLyBcdTkwMDlcdTRFMkRcdTc2ODRcdTY1ODdcdTY3MkNcdTY2MkZmb250XHU2ODA3XHU3QjdFXHJcblx0XHRcdHtcclxuXHRcdFx0XHRjb25zdCBmY0h0bWxzID0gc2VsZWN0ZWRUZXh0Lm1hdGNoKC9jb2xvcjpcXHMqcmdiXFwoXFxzKlxcZCtcXHMqLFxccypcXGQrXFxzKixcXHMqXFxkK1xccypcXCk7XFxzKi8pO1xyXG5cdFx0XHRcdGlmIChmY0h0bWxzKSAgLy8gXHU4MEZEXHU1MzM5XHU5MTREXHU0RTBBXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0ZmNIdG1sID0gZmNIdG1sc1swXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bWlkVGV4dCA9IGZvbnRUYWdQYXR0ZXJuWzFdO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdG1pZFRleHQgPSBzZWxlY3RlZFRleHQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcclxuXHRcdC8vIFx1NTcyOFx1OTAwOVx1NEUyRFx1NjU4N1x1NjcyQ1x1NEUyNFx1NEZBN1x1NkRGQlx1NTJBMFx1NjgwN1x1OEJCMFxyXG5cdFx0Y29uc3QgbGVmdFRleHQgPSBgPGZvbnQgc3R5bGU9XCIke2ZjSHRtbH0ke2ZiSHRtbH1wYWRkaW5nOiAxcHggMnB4XCI+YDtcclxuXHRcdGNvbnN0IHJpZ2h0VGV4dCA9IGA8L2ZvbnQ+YFxyXG5cdFx0Y29uc3QgZmluYWxUZXh0ID0gYCR7bGVmdFRleHR9JHttaWRUZXh0fSR7cmlnaHRUZXh0fWA7XHJcblx0XHJcblx0XHQvLyBcdTgzQjdcdTUzRDZcdTkwMDlcdTRFMkRcdTY1ODdcdTY3MkNcdTc2ODRcdThENzdcdTU5Q0JcdTU0OENcdTdFRDNcdTY3NUZcdTRGNERcdTdGNkVcclxuXHRcdGNvbnN0IHNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLmdldEN1cnNvcignZnJvbScpO1xyXG5cdFx0Ly8gY29uc3Qgc2VsZWN0aW9uRW5kID0gZWRpdG9yLmdldEN1cnNvcigndG8nKTtcclxuXHRcclxuXHRcdC8vIFx1NjZGRlx1NjM2Mlx1OTAwOVx1NEUyRFx1NzY4NFx1NjU4N1x1NjcyQ1x1NEUzQVx1NTJBMFx1N0M5N1x1NjgzQ1x1NUYwRlxyXG5cdFx0ZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oZmluYWxUZXh0KTtcclxuXHRcclxuXHRcdC8vIFx1OTFDRFx1NjVCMFx1OEJCRVx1N0Y2RVx1OTAwOVx1NTMzQVx1RkYwQ1x1NUJGOVx1NjZGRlx1NjM2Mlx1NTQwRVx1NjU4N1x1NjcyQ1x1OEZEQlx1ODg0Q1x1OTAwOVx1NEUyRFxyXG5cdFx0Y29uc3QgY3Vyc29yID0gZWRpdG9yLmdldEN1cnNvcigpO1xyXG5cdFx0Y29uc3QgbmV3U2VsZWN0aW9uU3RhcnQgPSB7IGxpbmU6IGN1cnNvci5saW5lLCBjaDogc2VsZWN0aW9uU3RhcnQuY2h9O1xyXG5cdFx0Y29uc3QgbmV3U2VsZWN0aW9uRW5kID0geyBsaW5lOiBjdXJzb3IubGluZSwgY2g6IHNlbGVjdGlvblN0YXJ0LmNoICsgZmluYWxUZXh0Lmxlbmd0aCB9O1xyXG5cclxuXHRcdGVkaXRvci5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uU3RhcnQsIG5l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QVUsaUJBQW5CLG1CQUFpQztBQUNoRCxRQUFJLENBQUM7QUFBUTtBQUViLFVBQU0sZUFBZSxPQUFPLGFBQWE7QUFDekMsUUFBSSxDQUFDO0FBQWM7QUFFbkIsUUFBSSxhQUFhLFNBQVMsSUFBSSxHQUFHO0FBQ2hDLFdBQUssWUFBWTtBQUNqQixVQUFJLHVCQUFPLG9FQUFhO0FBQ3hCLFlBQU1BLFVBQVMsT0FBTyxVQUFVO0FBQ2hDLGFBQU8sYUFBYUEsU0FBUUEsT0FBTTtBQUNsQyxhQUFPLE1BQU07QUFDYjtBQUFBLElBQ0Q7QUFFQSxRQUFJLFNBQVM7QUFDYixRQUFJLFNBQVM7QUFDYixRQUFJLFVBQVU7QUFFZCxVQUFNLGlCQUFpQiw4QkFBOEIsS0FBSyxZQUFZO0FBQ3RFLFFBQUksT0FBTyxVQUFVLFNBQVMsWUFBWSxHQUMxQztBQUNDLGVBQVMsYUFBYTtBQUN0QixVQUFJLGdCQUNKO0FBQ0MsY0FBTSxVQUFVLGFBQWEsTUFBTSx3REFBd0Q7QUFDM0YsWUFBSSxTQUNKO0FBQ0MsbUJBQVMsUUFBUSxDQUFDO0FBQUEsUUFDbkI7QUFDQSxrQkFBVSxlQUFlLENBQUM7QUFBQSxNQUMzQixPQUNLO0FBQ0osa0JBQVU7QUFBQSxNQUNYO0FBQUEsSUFDRCxXQUNTLE9BQU8sVUFBVSxTQUFTLFlBQVksR0FDL0M7QUFDQyxlQUFTLGtCQUFrQjtBQUMzQixVQUFJLGdCQUNKO0FBQ0MsY0FBTSxVQUFVLGFBQWEsTUFBTSxtREFBbUQ7QUFDdEYsWUFBSSxTQUNKO0FBQ0MsbUJBQVMsUUFBUSxDQUFDO0FBQUEsUUFDbkI7QUFDQSxrQkFBVSxlQUFlLENBQUM7QUFBQSxNQUMzQixPQUNLO0FBQ0osa0JBQVU7QUFBQSxNQUNYO0FBQUEsSUFDRDtBQUdBLFVBQU0sV0FBVyxnQkFBZ0IsU0FBUztBQUMxQyxVQUFNLFlBQVk7QUFDbEIsVUFBTSxZQUFZLEdBQUcsV0FBVyxVQUFVO0FBRzFDLFVBQU0saUJBQWlCLE9BQU8sVUFBVSxNQUFNO0FBSTlDLFdBQU8saUJBQWlCLFNBQVM7QUFHakMsVUFBTSxTQUFTLE9BQU8sVUFBVTtBQUNoQyxVQUFNLG9CQUFvQixFQUFFLE1BQU0sT0FBTyxNQUFNLElBQUksZUFBZSxHQUFFO0FBQ3BFLFVBQU0sa0JBQWtCLEVBQUUsTUFBTSxPQUFPLE1BQU0sSUFBSSxlQUFlLEtBQUssVUFBVSxPQUFPO0FBRXRGLFdBQU8sYUFBYSxtQkFBbUIsZUFBZTtBQUFBLEVBQ3ZEO0FBR0Q7IiwKICAibmFtZXMiOiBbImN1cnNvciJdCn0K