general-library-union 2.4.70 → 2.4.72
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/src/app/seguridad/constantes/ReporteEntradaConstantes.mjs +19 -0
- package/esm2022/src/app/webcommon/pages/fuente-reporte/fuente-reporte.component.mjs +80 -35
- package/esm2022/src/app/webcommon/pipes/general.pipe.mjs +12 -1
- package/esm2022/src/environments/environment.mjs +3 -2
- package/fesm2022/general-library-union.mjs +98 -26
- package/fesm2022/general-library-union.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/seguridad/constantes/ReporteEntradaConstantes.d.ts +7 -0
- package/src/app/webcommon/pages/fuente/importar-fuente-con/importar-fuente-con.component.d.ts +1 -1
- package/src/app/webcommon/pages/fuente-reporte/fuente-reporte.component.d.ts +11 -2
- package/src/app/webcommon/pipes/general.pipe.d.ts +11 -0
- package/src/assets/layout/styles/theme/extensions/_steps.scss +2 -2
- package/src/styles/primeng/sass/overrides/_theme_styles.scss +6 -0
- package/src/styles/primeng/sass/overrides/_theme_styles_dark.scss +7 -0
- package/src/styles/primeng/sass/theme/extensions/_steps.scss +2 -2
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { GeneralPipe } from './../../pipes/general.pipe';
|
|
1
2
|
import { Component, ViewChild } from '@angular/core';
|
|
2
3
|
import { ColumnaFuenteModel } from '../../../seguridad/modelos/ColumnaFuenteModel';
|
|
3
4
|
import { FuenteDatoModel } from '../../../seguridad/modelos/FuenteDato';
|
|
@@ -19,7 +20,6 @@ import { AccordionModule } from 'primeng/accordion';
|
|
|
19
20
|
import { DropdownModule } from 'primeng/dropdown';
|
|
20
21
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
21
22
|
import { TableModule } from 'primeng/table';
|
|
22
|
-
import { GeneralPipe } from '../../pipes/general.pipe';
|
|
23
23
|
import { TablaGeneralComponent } from '../../../core/componentes/tabla-general/tabla-general.component';
|
|
24
24
|
import { FiltroGeneralComponent } from '../../../core/componentes/filtro-general/filtro-general.component';
|
|
25
25
|
import { SplitButtonModule } from 'primeng/splitbutton';
|
|
@@ -28,6 +28,8 @@ import { StepsModule } from 'primeng/steps';
|
|
|
28
28
|
import { PopupTablasFuenteComponent } from '../../popups/popup-tablas-fuente/popup-tablas-fuente.component';
|
|
29
29
|
import { CheckboxModule } from 'primeng/checkbox';
|
|
30
30
|
import { TooltipModule } from 'primeng/tooltip';
|
|
31
|
+
import { ReporteEntradaConstantes } from '../../../seguridad/constantes/ReporteEntradaConstantes';
|
|
32
|
+
import { ProgressBarModule } from 'primeng/progressbar';
|
|
31
33
|
import * as i0 from "@angular/core";
|
|
32
34
|
import * as i1 from "../../../core/servicios/menu.service";
|
|
33
35
|
import * as i2 from "./../../../core/servicios/toast.service";
|
|
@@ -36,16 +38,20 @@ import * as i4 from "../../../shared/servicios/general.service";
|
|
|
36
38
|
import * as i5 from "../../../core/servicios/utils.service";
|
|
37
39
|
import * as i6 from "primeng/api";
|
|
38
40
|
import * as i7 from "@ngx-translate/core";
|
|
39
|
-
import * as i8 from "
|
|
40
|
-
import * as i9 from "primeng/
|
|
41
|
-
import * as i10 from "primeng/
|
|
42
|
-
import * as i11 from "primeng/
|
|
43
|
-
import * as i12 from "primeng/
|
|
44
|
-
import * as i13 from "
|
|
45
|
-
import * as i14 from "primeng/
|
|
46
|
-
import * as i15 from "
|
|
47
|
-
import * as i16 from "primeng/
|
|
48
|
-
import * as i17 from "primeng/
|
|
41
|
+
import * as i8 from "./../../pipes/general.pipe";
|
|
42
|
+
import * as i9 from "primeng/progressbar";
|
|
43
|
+
import * as i10 from "primeng/tooltip";
|
|
44
|
+
import * as i11 from "primeng/checkbox";
|
|
45
|
+
import * as i12 from "primeng/steps";
|
|
46
|
+
import * as i13 from "@angular/common";
|
|
47
|
+
import * as i14 from "primeng/tabview";
|
|
48
|
+
import * as i15 from "primeng/splitbutton";
|
|
49
|
+
import * as i16 from "primeng/button";
|
|
50
|
+
import * as i17 from "primeng/inputtext";
|
|
51
|
+
import * as i18 from "primeng/dropdown";
|
|
52
|
+
import * as i19 from "@angular/forms";
|
|
53
|
+
import * as i20 from "primeng/table";
|
|
54
|
+
import * as i21 from "primeng/inputtextarea";
|
|
49
55
|
export class FuenteReporteComponent {
|
|
50
56
|
menuService;
|
|
51
57
|
notificationBusService;
|
|
@@ -55,6 +61,7 @@ export class FuenteReporteComponent {
|
|
|
55
61
|
confirmationService;
|
|
56
62
|
translateService;
|
|
57
63
|
messageService;
|
|
64
|
+
generalPipe;
|
|
58
65
|
fuente = new FuenteDatoModel();
|
|
59
66
|
vistaVisualizar;
|
|
60
67
|
tablasFrom = []; // from TablaFrom
|
|
@@ -88,7 +95,12 @@ export class FuenteReporteComponent {
|
|
|
88
95
|
items = [];
|
|
89
96
|
mapaMensajes = new Map();
|
|
90
97
|
popupTablasFuenteUI;
|
|
91
|
-
|
|
98
|
+
tiposDato = ReporteEntradaConstantes.tipoDato;
|
|
99
|
+
clickGuardar;
|
|
100
|
+
verNuevoJoin;
|
|
101
|
+
activeIndex = 0;
|
|
102
|
+
cargarPaso;
|
|
103
|
+
constructor(menuService, notificationBusService, reportesSvc, generalSvc, utilsService, confirmationService, translateService, messageService, generalPipe) {
|
|
92
104
|
this.menuService = menuService;
|
|
93
105
|
this.notificationBusService = notificationBusService;
|
|
94
106
|
this.reportesSvc = reportesSvc;
|
|
@@ -97,6 +109,7 @@ export class FuenteReporteComponent {
|
|
|
97
109
|
this.confirmationService = confirmationService;
|
|
98
110
|
this.translateService = translateService;
|
|
99
111
|
this.messageService = messageService;
|
|
112
|
+
this.generalPipe = generalPipe;
|
|
100
113
|
}
|
|
101
114
|
ngOnInit() {
|
|
102
115
|
this.listaColumnas = [];
|
|
@@ -151,11 +164,13 @@ export class FuenteReporteComponent {
|
|
|
151
164
|
async siguiente() {
|
|
152
165
|
try {
|
|
153
166
|
if (this.validarWizard()) {
|
|
167
|
+
this.cargarPaso = true;
|
|
154
168
|
if (this.actual < 3) {
|
|
155
169
|
if (this.actual == 0) {
|
|
156
170
|
this.foraneas = [];
|
|
157
171
|
if (this.tablasFrom.length == 0) { // No selecciono ninguna tabla
|
|
158
172
|
this.notificationBusService.showInfo("Debe seleccionar al menos un objeto.");
|
|
173
|
+
this.cargarPaso = false;
|
|
159
174
|
return;
|
|
160
175
|
}
|
|
161
176
|
else if (this.tablasFrom.length == 1) { // Solo selecciono una, por eso no hay que generar joins.
|
|
@@ -203,10 +218,12 @@ export class FuenteReporteComponent {
|
|
|
203
218
|
else {
|
|
204
219
|
this.terminarPasos();
|
|
205
220
|
}
|
|
221
|
+
this.cargarPaso = false;
|
|
206
222
|
}
|
|
207
223
|
}
|
|
208
224
|
catch (e) {
|
|
209
225
|
console.error(e);
|
|
226
|
+
this.cargarPaso = false;
|
|
210
227
|
}
|
|
211
228
|
}
|
|
212
229
|
async cargarListasColumnas(nuevas, alias) {
|
|
@@ -247,7 +264,6 @@ export class FuenteReporteComponent {
|
|
|
247
264
|
where += this.fuente.whereAdicional;
|
|
248
265
|
}
|
|
249
266
|
}
|
|
250
|
-
console.log('where', where);
|
|
251
267
|
try {
|
|
252
268
|
let sql = "SELECT \n" + camposSql + " \nFROM \n" + this.fuente.fromSql + where;
|
|
253
269
|
await this.reportesSvc.validarQuery(sql).toPromise();
|
|
@@ -255,6 +271,7 @@ export class FuenteReporteComponent {
|
|
|
255
271
|
this.query = sql;
|
|
256
272
|
this.tabPrincipal = 0;
|
|
257
273
|
this.construirColumnas();
|
|
274
|
+
this.notificationBusService.showInfo('Query creada satisfactoriamente.');
|
|
258
275
|
}
|
|
259
276
|
catch (e) {
|
|
260
277
|
console.error(e);
|
|
@@ -269,7 +286,12 @@ export class FuenteReporteComponent {
|
|
|
269
286
|
let join = new JoinFromModel();
|
|
270
287
|
join.columna1 = (foranea.alias1 + "." + par[0]);
|
|
271
288
|
join.columna2 = (foranea.alias2 + "." + par[1]);
|
|
272
|
-
this.joinsFrom.
|
|
289
|
+
if (this.joinsFrom.some(data => data.columna1 === join.columna1 && data.columna2 === join.columna2)) {
|
|
290
|
+
this.notificationBusService.showWarning('Registro ya se encuentra asociado.');
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
this.joinsFrom.push(join);
|
|
294
|
+
}
|
|
273
295
|
}
|
|
274
296
|
}
|
|
275
297
|
catch (e) {
|
|
@@ -301,8 +323,14 @@ export class FuenteReporteComponent {
|
|
|
301
323
|
}
|
|
302
324
|
}
|
|
303
325
|
anterior() {
|
|
304
|
-
if (this.actual > 0)
|
|
305
|
-
this.actual
|
|
326
|
+
if (this.actual > 0) {
|
|
327
|
+
if (this.actual == 2 && this.tablasFrom.length == 1) {
|
|
328
|
+
this.actual = 0;
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
this.actual--;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
306
334
|
}
|
|
307
335
|
async validarQuery() {
|
|
308
336
|
try {
|
|
@@ -323,6 +351,7 @@ export class FuenteReporteComponent {
|
|
|
323
351
|
nuevo.columna1 = (this.col1);
|
|
324
352
|
nuevo.columna2 = (this.col2);
|
|
325
353
|
this.joinsFrom.push(nuevo);
|
|
354
|
+
this.cancelarNuevoJoin();
|
|
326
355
|
}
|
|
327
356
|
else {
|
|
328
357
|
this.notificationBusService.showWarning("Debe seleccionar dos campos");
|
|
@@ -332,10 +361,20 @@ export class FuenteReporteComponent {
|
|
|
332
361
|
console.error(e);
|
|
333
362
|
}
|
|
334
363
|
}
|
|
364
|
+
nuevoJoin() {
|
|
365
|
+
this.verNuevoJoin = true;
|
|
366
|
+
this.col1 = '';
|
|
367
|
+
this.col2 = '';
|
|
368
|
+
}
|
|
369
|
+
cancelarNuevoJoin() {
|
|
370
|
+
this.verNuevoJoin = false;
|
|
371
|
+
this.col1 = '';
|
|
372
|
+
this.col2 = '';
|
|
373
|
+
}
|
|
335
374
|
eliminarJoin(ae) {
|
|
336
375
|
try {
|
|
337
376
|
//let join = (JoinFrom) ((UIParameter) ae.getComponent().findComponent("join")).getValue();
|
|
338
|
-
this.joinsFrom.filter((data) => data
|
|
377
|
+
this.joinsFrom = this.joinsFrom.filter((data) => data.columna1 !== ae?.columna1);
|
|
339
378
|
}
|
|
340
379
|
catch (e) {
|
|
341
380
|
console.error(e);
|
|
@@ -344,7 +383,7 @@ export class FuenteReporteComponent {
|
|
|
344
383
|
eliminarTabla(ae) {
|
|
345
384
|
try {
|
|
346
385
|
//TablaFrom tabla = (TablaFrom) ((UIParameter) ae.getComponent().findComponent("tabla")).getValue();
|
|
347
|
-
this.tablasFrom.filter((data) => data
|
|
386
|
+
this.tablasFrom = this.tablasFrom.filter((data) => data != ae);
|
|
348
387
|
this.notificationBusService.showWarning("Falta eliminar las columnas de la tabla ???");
|
|
349
388
|
}
|
|
350
389
|
catch (e) {
|
|
@@ -391,7 +430,7 @@ export class FuenteReporteComponent {
|
|
|
391
430
|
//ReporteColumnaDTO
|
|
392
431
|
let act = null;
|
|
393
432
|
for (let col of this.columnas) {
|
|
394
|
-
if (nuevo
|
|
433
|
+
if (nuevo == (col.reporteFuente + "." + col.nombre)) {
|
|
395
434
|
act = col;
|
|
396
435
|
break;
|
|
397
436
|
}
|
|
@@ -399,7 +438,7 @@ export class FuenteReporteComponent {
|
|
|
399
438
|
for (let col of this.columnas) {
|
|
400
439
|
if (!col.reporteFuente.startsWith(act.reporteFuente) && col.tipoDato == (act.tipoDato) && col.orden == (act.orden)) {
|
|
401
440
|
let val = col.reporteFuente + "." + col.nombre;
|
|
402
|
-
this.listaJoin.push({ value: val,
|
|
441
|
+
this.listaJoin.push({ value: val, label: val });
|
|
403
442
|
}
|
|
404
443
|
}
|
|
405
444
|
}
|
|
@@ -517,8 +556,8 @@ export class FuenteReporteComponent {
|
|
|
517
556
|
}
|
|
518
557
|
cargasOpciones() {
|
|
519
558
|
this.menu = [{ label: this.translateService.instant('link_eliminar'), icon: 'glyphicons glyphicons-bin', visible: this.fuente.llave != null, command: (event) => { this.eliminar(); } },
|
|
520
|
-
{ label: this.translateService.instant('link_validar'), icon: 'glyphicons glyphicons-
|
|
521
|
-
{ label: this.translateService.instant('link_generar'), icon: 'glyphicons glyphicons-
|
|
559
|
+
{ label: this.translateService.instant('link_validar'), icon: 'glyphicons glyphicons-check', command: (event) => { this.validarQuery(); } },
|
|
560
|
+
{ label: this.translateService.instant('link_generar'), icon: 'glyphicons glyphicons-refresh', visible: this.fuente.llave != null, command: (event) => { this.construirColumnas(); } },
|
|
522
561
|
];
|
|
523
562
|
}
|
|
524
563
|
regresar() {
|
|
@@ -527,6 +566,7 @@ export class FuenteReporteComponent {
|
|
|
527
566
|
}
|
|
528
567
|
validar() {
|
|
529
568
|
let res = true;
|
|
569
|
+
this.clickGuardar = true;
|
|
530
570
|
res = res && this.utilsService.validarCampoObligatorio(this.fuente.descripcion);
|
|
531
571
|
res = res && (this.utilsService.validarTextoSQL(this.query, true, true, 8000, true) == null);
|
|
532
572
|
return res;
|
|
@@ -537,6 +577,7 @@ export class FuenteReporteComponent {
|
|
|
537
577
|
async guardar() {
|
|
538
578
|
try {
|
|
539
579
|
if (this.validar()) {
|
|
580
|
+
this.clickGuardar = false;
|
|
540
581
|
if (this.query.length > 4000) {
|
|
541
582
|
this.fuente.query = (this.query.substring(0, 3999));
|
|
542
583
|
this.fuente.query2 = (this.query.substring(3999, this.query.length));
|
|
@@ -649,29 +690,33 @@ export class FuenteReporteComponent {
|
|
|
649
690
|
}
|
|
650
691
|
//IMPLEMENTACION STEPER
|
|
651
692
|
initStep() {
|
|
652
|
-
this.mapaMensajes.set(0, 'Seleccione las tablas o vistas de donde desea obtener la
|
|
653
|
-
this.mapaMensajes.set(1, 'Indique de
|
|
654
|
-
this.mapaMensajes.set(2, 'Indique los filtros adicionales que desee realizar sobre la
|
|
655
|
-
this.mapaMensajes.set(3, '
|
|
693
|
+
this.mapaMensajes.set(0, 'Seleccione las tablas o vistas de donde desea obtener la informaci' + this.generalPipe.O_TIDLE_MIN + 'n.');
|
|
694
|
+
this.mapaMensajes.set(1, 'Indique de qu' + this.generalPipe.E_TILDE_MIN + ' manera se relacionan los objetos entre s' + this.generalPipe.I_TILDE_MIN + '.');
|
|
695
|
+
this.mapaMensajes.set(2, 'Indique los filtros adicionales que desee realizar sobre la informaci' + this.generalPipe.O_TIDLE_MIN + 'n.');
|
|
696
|
+
this.mapaMensajes.set(3, 'Seleccione los campos que desee ver en la consulta.');
|
|
656
697
|
this.items = [
|
|
657
698
|
{
|
|
658
699
|
label: this.translateService.instant('from'),
|
|
659
|
-
|
|
700
|
+
command: (event) => { console.log(event); },
|
|
701
|
+
disabled: true,
|
|
660
702
|
title: 'Seleccione las tablas o vistas de donde desea obtener la informacion.'
|
|
661
703
|
},
|
|
662
704
|
{
|
|
663
705
|
label: this.translateService.instant('join'),
|
|
664
|
-
|
|
706
|
+
command: (event) => { console.log(event); },
|
|
707
|
+
disabled: true,
|
|
665
708
|
title: 'Indique de que manera se relaccionan los objetos entre si.'
|
|
666
709
|
},
|
|
667
710
|
{
|
|
668
711
|
label: this.translateService.instant('where'),
|
|
669
|
-
|
|
712
|
+
command: (event) => { console.log(event); },
|
|
713
|
+
disabled: true,
|
|
670
714
|
title: 'Indique los filtros adicionales que desee realizar sobre la informacion.'
|
|
671
715
|
},
|
|
672
716
|
{
|
|
673
717
|
label: this.translateService.instant('campos'),
|
|
674
|
-
|
|
718
|
+
command: (event) => { console.log(event); },
|
|
719
|
+
disabled: true,
|
|
675
720
|
}
|
|
676
721
|
];
|
|
677
722
|
}
|
|
@@ -683,14 +728,14 @@ export class FuenteReporteComponent {
|
|
|
683
728
|
todosSeleccionados() {
|
|
684
729
|
return this.camposSeleccionar.every(elemento => elemento.seleccionado);
|
|
685
730
|
}
|
|
686
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: FuenteReporteComponent, deps: [{ token: i1.MenuService }, { token: i2.ToastService }, { token: i3.ReportesService }, { token: i4.GeneralService }, { token: i5.UtilsService }, { token: i6.ConfirmationService }, { token: i7.TranslateService }, { token: i6.MessageService }], target: i0.ɵɵFactoryTarget.Component });
|
|
687
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: FuenteReporteComponent, isStandalone: true, selector: "app-fuente-reporte", providers: [MessageService, ConfirmationService], viewQueries: [{ propertyName: "popupTablasFuenteUI", first: true, predicate: ["popupTablasFuenteUI"], descendants: true }], ngImport: i0, template: "@if(vistaVisualizar == null){\r\n<h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <app-filtro-general [filtros]=\"filters\" [datatable]=\"tablaGeneral\">\r\n <ng-template let-form>\r\n <ng-container [formGroup]=\"form\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"descripcion\" formControlName=\"descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"descripcion\">{{'filtro' | translate}}</label>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </app-filtro-general>\r\n <button pButton label=\"{{'link_nuevo' | translate}}\" (click)=\"nuevo()\" icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n</div>\r\n<app-tabla-general #tablaGeneral [columns]=\"columns\" [value]=\"paginador\" [rows]=\"paginator.rows\"\r\n [totalRecords]=\"paginator.totalRecords\" (onLoad)=\"load($event)\" (onRowSelect)=\"verDetalle($event)\"\r\n [loading]=\"loading\"></app-tabla-general>\r\n}\r\n@if(vistaVisualizar != null){\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n <button pButton pRipple (click)=\"regresar()\" label=\"Regresar\" icon=\"pi pi-chevron-left\"\r\n class=\"p-button-text font-semibold\"></button>\r\n</div>\r\n<p-tabView>\r\n <p-tabPanel header=\"{{ 'fuente'| translate}}\">\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'datos'| translate}} {{'basicos'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"peso\" [(ngModel)]=\"fuente.descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"peso\">{{'nombre' | translate}}</label>\r\n </span>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea [(ngModel)]=\"query\"\r\n autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button>\r\n <p-splitButton class=\"ml-2\" label=\"Acciones Evaluadores\" icon=\"glyphicons glyphicons-list\"\r\n [model]=\"menu\"></p-splitButton>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardarCampos()\">\r\n </button>\r\n </div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"campos\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"false\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llaveTabla\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'nombre' | translate}}</th>\r\n <th style=\"width:25%\">{{'sintaxis' | translate}}</th>\r\n <th style=\"width:25%\">{{'tipo' | translate}} de {{'dato' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"campo\">\r\n <td style=\"width:25%\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"campo.nombre \" class=\"w-full\">\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-tabPanel>\r\n\r\n\r\n <p-tabPanel header=\"{{ 'wizard'| translate}}\">\r\n <p-steps [model]=\"items\" [readonly]=\"false\" [activeIndex]=\"actual\" ></p-steps>\r\n <!-- <div class=\"flex align-items-center justify-content-end mb-2\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-secondary\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-secondary\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n </div> -->\r\n <div class=\"cardInstrucciones mt-4 mb-3\">\r\n <div class=\"flex align-items-center justify-content-between\" >\r\n <div class=\"flex\">\r\n <div class=\"icono\">\r\n <i class=\"pi pi-bell\"></i>\r\n </div>\r\n <div class=\"contenedor\">\r\n <label>{{mapaMensajes?.get(actual)}}</label>\r\n </div>\r\n </div>\r\n <div class=\"flex align-items-center justify-content-end\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-secondary\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-secondary\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"flex align-items-center justify-content-end mb-2\">\r\n <button pButton label=\"{{'link_anterior' | translate}}\" icon=\"pi pi-plus\" (click)=\"anterior()\" *ngIf=\"actual > 0\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n <button pButton label=\"{{'link_siguiente' | translate}}\" icon=\"pi pi-plus\" (click)=\"siguiente()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div> -->\r\n @if(actual === 0){\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton label=\"{{'fuente' | translate}}\" icon=\"pi pi-plus\" (click)=\"buscarTabla()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n <div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"tablasFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\"\r\n dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'alias' | translate}}</th>\r\n <th style=\"width:25%\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.tabla}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias}}\r\n </td>\r\n <td class=\"flex justify-content-end\">\r\n <div>\r\n <!-- ELIMINAR -->\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarTabla(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n @if(actual == 1){\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"foraneas\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.alias1}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias2}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.llave.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n @if(actual == 2){\r\n\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'where'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea\r\n [(ngModel)]=\"fuente.whereAdicional\" autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-content-end\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\"\r\n icon=\"glyphicons glyphicons-floppy-save\" label=\"{{'link_guardar' | translate}}\"\r\n (click)=\"editarWhere()\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n }\r\n @if(actual == 3){\r\n\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"camposSeleccionar\" [scrollable]=\"true\"\r\n [totalRecords]=\"camposSeleccionar.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"camposSeleccionar.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\" dataKey=\"alias\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\" alignFrozen=\"left\" pFrozenColumn>\r\n <p-checkbox [style]=\"{'margin-left': '1%','margin-right':'1%'}\" [(ngModel)]=\"seleccionGeneral\"\r\n [binary]=\"true\" [ngModel]=\"todosSeleccionados()\"\r\n (ngModelChange)=\"actualizarSeleccion($event)\"></p-checkbox>\r\n <span style=\"margin-left:1%\">{{'tabla' | translate}}</span>\r\n </th>\r\n <th style=\"width:25%\">{{'columna' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla>\r\n <tr>\r\n <td style=\"width:25%\">\r\n <p-checkbox class=\"mr-2 \" [(ngModel)]=\"tabla.seleccionado\" [binary]=\"true\" inputId=\"binary\">\r\n </p-checkbox>\r\n {{tabla.columna.reporteFuente}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.columna.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n\r\n </p-tabPanel>\r\n</p-tabView>\r\n\r\n}\r\n\r\n<app-popup-tablas-fuente #popupTablasFuenteUI\r\n (aplicarDestinoOcultar)=\"setTablaSeleccionada($event)\"></app-popup-tablas-fuente>", styles: [":host ::ng-deep .botonCircular{background:var(--color-85);border:solid 1px var(--color-85);color:var(--color-400)}\n"], dependencies: [{ kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i8.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i9.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: PopupTablasFuenteComponent, selector: "app-popup-tablas-fuente", outputs: ["aplicarDestinoOcultar"] }, { kind: "ngmodule", type: StepsModule }, { kind: "component", type: i10.Steps, selector: "p-steps", inputs: ["activeIndex", "model", "readonly", "style", "styleClass", "exact"], outputs: ["activeIndexChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TabViewModule }, { kind: "component", type: i11.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i11.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i12.SplitButton, selector: "p-splitButton", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "directive", type: i13.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i13.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i14.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: AccordionModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i15.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i15.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i16.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i16.FrozenColumn, selector: "[pFrozenColumn]", inputs: ["frozen", "alignFrozen"] }, { kind: "directive", type: i16.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "component", type: TablaGeneralComponent, selector: "app-tabla-general", inputs: ["dataKey", "value", "columns", "rows", "totalRecords", "loading", "ocultarFraccionador"], outputs: ["onLoad", "onRowSelect"] }, { kind: "component", type: FiltroGeneralComponent, selector: "app-filtro-general", inputs: ["filtros", "datatable"], outputs: ["metodoRegresar", "metodoRegresarAdicional"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i15.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i15.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i17.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "ngmodule", type: ConfirmPopupModule }] });
|
|
731
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: FuenteReporteComponent, deps: [{ token: i1.MenuService }, { token: i2.ToastService }, { token: i3.ReportesService }, { token: i4.GeneralService }, { token: i5.UtilsService }, { token: i6.ConfirmationService }, { token: i7.TranslateService }, { token: i6.MessageService }, { token: i8.GeneralPipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
732
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.4", type: FuenteReporteComponent, isStandalone: true, selector: "app-fuente-reporte", providers: [MessageService, ConfirmationService], viewQueries: [{ propertyName: "popupTablasFuenteUI", first: true, predicate: ["popupTablasFuenteUI"], descendants: true }], ngImport: i0, template: "@if(vistaVisualizar == null){\r\n<h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <app-filtro-general [filtros]=\"filters\" [datatable]=\"tablaGeneral\">\r\n <ng-template let-form>\r\n <ng-container [formGroup]=\"form\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"descripcion\" formControlName=\"descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"descripcion\">{{'filtro' | translate}}</label>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </app-filtro-general>\r\n <button pButton label=\"{{'link_nuevo' | translate}}\" (click)=\"nuevo()\" icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n</div>\r\n<app-tabla-general #tablaGeneral [columns]=\"columns\" [value]=\"paginador\" [rows]=\"paginator.rows\"\r\n [totalRecords]=\"paginator.totalRecords\" (onLoad)=\"load($event)\" (onRowSelect)=\"verDetalle($event)\"\r\n [loading]=\"loading\"></app-tabla-general>\r\n}\r\n@if(vistaVisualizar != null){\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n <button pButton pRipple (click)=\"regresar()\" label=\"Regresar\" icon=\"pi pi-chevron-left\"\r\n class=\"p-button-text font-semibold\"></button>\r\n</div>\r\n<p-tabView [(activeIndex)]=\"tabPrincipal\">\r\n <p-tabPanel header=\"{{ 'fuente'| translate}}\">\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'datos'| translate}} {{'basicos'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"peso\" [(ngModel)]=\"fuente.descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"peso\">{{'nombre' | translate}}</label>\r\n </span>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea [(ngModel)]=\"query\"\r\n autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button>\r\n <p-splitButton class=\"ml-2\" label=\"Acciones Fuente\" icon=\"glyphicons glyphicons-list\"\r\n [model]=\"menu\"></p-splitButton>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-secondary\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardarCampos()\">\r\n </button>\r\n </div>\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"campos\" [scrollable]=\"true\"\r\n [totalRecords]=\"campos.length\" [paginator]=\"camposSeleccionar.length > 10\" [rows]=\"10\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llaveTabla\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'nombre' | translate}}</th>\r\n <th style=\"width:25%\">{{'sintaxis' | translate}}</th>\r\n <th style=\"width:25%\">{{'tipo' | translate}} de {{'dato' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"campo\">\r\n <td style=\"width:25%\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"campo.nombre \" class=\"w-full\">\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-tabPanel>\r\n\r\n\r\n <p-tabPanel header=\"{{ 'wizard'| translate}}\">\r\n <p-steps [model]=\"items\" [readonly]=\"false\" [activeIndex]=\"actual\"></p-steps>\r\n\r\n <div class=\"cardInstrucciones mt-4 mb-3\" style=\"margin-bottom: 0px !important;\">\r\n <div class=\"flex align-items-center justify-content-between\">\r\n <div class=\"flex\">\r\n <div class=\"icono\">\r\n <i class=\"pi pi-bell\"></i>\r\n </div>\r\n <div class=\"contenedor\" style=\"margin-top: 2%;\">\r\n <label>{{mapaMensajes?.get(actual)}}</label>\r\n </div>\r\n </div>\r\n <div class=\"flex align-items-center justify-content-end\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-secondary\"\r\n severity=\"secondary\" pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\"\r\n [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\"\r\n class=\"p-button-secondary\" severity=\"secondary\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n </div>\r\n </div>\r\n </div>\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" *ngIf=\"cargarPaso\" />\r\n\r\n <div class=\"mt-2\" *ngIf=\"!cargarPaso\">\r\n @if(actual === 0){\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton label=\"{{'fuente' | translate}}\" icon=\"pi pi-plus\" (click)=\"buscarTabla()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n <div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"tablasFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\"\r\n [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'alias' | translate}}</th>\r\n <th style=\"width:25%\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.tabla}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias}}\r\n </td>\r\n <td class=\"flex justify-content-end\">\r\n <div>\r\n <!-- ELIMINAR -->\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarTabla(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n @if(actual == 1){\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"foraneas\" [scrollable]=\"true\"\r\n selectionMode=\"single\" scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" (onRowSelect)=\"adicionarForanea($event)\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'campo' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pSelectableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.alias1}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias2}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.llave.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n <div class=\"flex justify-content-end align-items-center mb-3 mt-3\">\r\n <button pButton label=\"{{'agregar' | translate}} {{'join' | translate}}\" (click)=\"nuevoJoin()\"\r\n icon=\"pi pi-plus\" class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"joinsFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\"\r\n dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:45%\">{{'campo' | translate}} 1</th>\r\n <th style=\"width:5%\">{{'=' | translate}}</th>\r\n <th style=\"width:45%\">{{'campo' | translate}} 2</th>\r\n <th>{{'' | translate}}</th>\r\n </tr>\r\n <tr class=\" TablaNuevoRegistro\" *ngIf=\"verNuevoJoin\">\r\n <td style=\"width:45%\">\r\n <p-dropdown [options]=\"listaColumnas\" optionValue=\"value\" [(ngModel)]=\"col1\" appendTo=\"body\"\r\n [autoZIndex]=\"false\" [autoDisplayFirst]=\"false\" optionLabel=\"label\"\r\n (onChange)=\"cambioJoin($event)\"></p-dropdown>\r\n </td>\r\n <td style=\"width:5%\">=</td>\r\n <td style=\"width:45%\">\r\n <p-dropdown [options]=\"listaJoin\" optionValue=\"value\" [(ngModel)]=\"col2\" appendTo=\"body\"\r\n [autoZIndex]=\"false\" [autoDisplayFirst]=\"false\" optionLabel=\"label\"></p-dropdown>\r\n </td>\r\n\r\n <td class=\"flex justify-content-end\">\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-check\" (click)=\"adicionarJoin()\"\r\n class=\"p-element p-ripple p-button-rounded p-button-success mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n <button pButton pRipple type=\"button\" (click)=\"cancelarNuevoJoin()\" icon=\"pi pi-times\"\r\n class=\"p-element p-ripple p-button-rounded p-button-danger mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:45%\">\r\n {{tabla.columna1}}\r\n </td>\r\n <td style=\"width:5%\">\r\n {{'='}}\r\n </td>\r\n <td style=\"width:45%\">\r\n {{tabla.columna2}}\r\n </td>\r\n <td>\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarJoin(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n @if(actual == 2){\r\n\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'where'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea\r\n [(ngModel)]=\"fuente.whereAdicional\" autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-content-end\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\"\r\n icon=\"glyphicons glyphicons-floppy-save\" label=\"{{'link_guardar' | translate}}\"\r\n (click)=\"editarWhere()\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n }\r\n @if(actual == 3){\r\n\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"camposSeleccionar\" [scrollable]=\"true\"\r\n [totalRecords]=\"camposSeleccionar.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"camposSeleccionar.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"alias\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\" alignFrozen=\"left\" pFrozenColumn>\r\n <p-checkbox [style]=\"{'margin-left': '1%','margin-right':'1%'}\"\r\n [(ngModel)]=\"seleccionGeneral\" [binary]=\"true\" [ngModel]=\"todosSeleccionados()\"\r\n (ngModelChange)=\"actualizarSeleccion($event)\"></p-checkbox>\r\n <span style=\"margin-left:1%\">{{'tabla' | translate}}</span>\r\n </th>\r\n <th style=\"width:25%\">{{'columna' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla>\r\n <tr>\r\n <td style=\"width:25%\">\r\n <p-checkbox class=\"mr-2 \" [(ngModel)]=\"tabla.seleccionado\" [binary]=\"true\" inputId=\"binary\">\r\n </p-checkbox>\r\n {{tabla.columna.reporteFuente}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.columna.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n </div>\r\n </p-tabPanel>\r\n</p-tabView>\r\n\r\n}\r\n\r\n<app-popup-tablas-fuente #popupTablasFuenteUI\r\n (aplicarDestinoOcultar)=\"setTablaSeleccionada($event)\"></app-popup-tablas-fuente>", styles: [":host ::ng-deep .botonCircular{background:var(--color-85);border:solid 1px var(--color-85);color:var(--color-400)}\n"], dependencies: [{ kind: "ngmodule", type: ProgressBarModule }, { kind: "component", type: i9.ProgressBar, selector: "p-progressBar", inputs: ["value", "showValue", "styleClass", "style", "unit", "mode", "color"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: CheckboxModule }, { kind: "component", type: i11.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "autofocus", "trueValue", "falseValue", "variant"], outputs: ["onChange", "onFocus", "onBlur"] }, { kind: "directive", type: i6.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: PopupTablasFuenteComponent, selector: "app-popup-tablas-fuente", outputs: ["aplicarDestinoOcultar"] }, { kind: "ngmodule", type: StepsModule }, { kind: "component", type: i12.Steps, selector: "p-steps", inputs: ["activeIndex", "model", "readonly", "style", "styleClass", "exact"], outputs: ["activeIndexChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: TabViewModule }, { kind: "component", type: i14.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i14.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i15.SplitButton, selector: "p-splitButton", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }, { kind: "directive", type: i16.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i16.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: InputTextModule }, { kind: "directive", type: i17.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "ngmodule", type: AccordionModule }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i18.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i19.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i19.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i19.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i19.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TableModule }, { kind: "component", type: i20.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i20.FrozenColumn, selector: "[pFrozenColumn]", inputs: ["frozen", "alignFrozen"] }, { kind: "directive", type: i20.SelectableRow, selector: "[pSelectableRow]", inputs: ["pSelectableRow", "pSelectableRowIndex", "pSelectableRowDisabled"] }, { kind: "directive", type: i20.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "component", type: TablaGeneralComponent, selector: "app-tabla-general", inputs: ["dataKey", "value", "columns", "rows", "totalRecords", "loading", "ocultarFraccionador"], outputs: ["onLoad", "onRowSelect"] }, { kind: "component", type: FiltroGeneralComponent, selector: "app-filtro-general", inputs: ["filtros", "datatable"], outputs: ["metodoRegresar", "metodoRegresarAdicional"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i19.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i19.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: InputTextareaModule }, { kind: "directive", type: i21.InputTextarea, selector: "[pInputTextarea]", inputs: ["autoResize", "variant"], outputs: ["onResize"] }, { kind: "ngmodule", type: ConfirmPopupModule }] });
|
|
688
733
|
}
|
|
689
734
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: FuenteReporteComponent, decorators: [{
|
|
690
735
|
type: Component,
|
|
691
|
-
args: [{ selector: 'app-fuente-reporte', standalone: true, imports: [TooltipModule, CheckboxModule, PopupTablasFuenteComponent, StepsModule, CommonModule, TabViewModule, SplitButtonModule, NgIf, TranslateModule, InputTextModule, CommonModule, AccordionModule, DropdownModule, FormsModule, TableModule, TablaGeneralComponent, FiltroGeneralComponent, ButtonModule, ReactiveFormsModule, GeneralPipe, InputTextareaModule, ConfirmPopupModule, ButtonModule], providers: [MessageService, ConfirmationService], template: "@if(vistaVisualizar == null){\r\n<h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <app-filtro-general [filtros]=\"filters\" [datatable]=\"tablaGeneral\">\r\n <ng-template let-form>\r\n <ng-container [formGroup]=\"form\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"descripcion\" formControlName=\"descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"descripcion\">{{'filtro' | translate}}</label>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </app-filtro-general>\r\n <button pButton label=\"{{'link_nuevo' | translate}}\" (click)=\"nuevo()\" icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n</div>\r\n<app-tabla-general #tablaGeneral [columns]=\"columns\" [value]=\"paginador\" [rows]=\"paginator.rows\"\r\n [totalRecords]=\"paginator.totalRecords\" (onLoad)=\"load($event)\" (onRowSelect)=\"verDetalle($event)\"\r\n [loading]=\"loading\"></app-tabla-general>\r\n}\r\n@if(vistaVisualizar != null){\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n <button pButton pRipple (click)=\"regresar()\" label=\"Regresar\" icon=\"pi pi-chevron-left\"\r\n class=\"p-button-text font-semibold\"></button>\r\n</div>\r\n<p-tabView>\r\n <p-tabPanel header=\"{{ 'fuente'| translate}}\">\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'datos'| translate}} {{'basicos'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"peso\" [(ngModel)]=\"fuente.descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"peso\">{{'nombre' | translate}}</label>\r\n </span>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea [(ngModel)]=\"query\"\r\n autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button>\r\n <p-splitButton class=\"ml-2\" label=\"Acciones Evaluadores\" icon=\"glyphicons glyphicons-list\"\r\n [model]=\"menu\"></p-splitButton>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardarCampos()\">\r\n </button>\r\n </div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"campos\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"false\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llaveTabla\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'nombre' | translate}}</th>\r\n <th style=\"width:25%\">{{'sintaxis' | translate}}</th>\r\n <th style=\"width:25%\">{{'tipo' | translate}} de {{'dato' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"campo\">\r\n <td style=\"width:25%\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"campo.nombre \" class=\"w-full\">\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-tabPanel>\r\n\r\n\r\n <p-tabPanel header=\"{{ 'wizard'| translate}}\">\r\n <p-steps [model]=\"items\" [readonly]=\"false\" [activeIndex]=\"actual\" ></p-steps>\r\n <!-- <div class=\"flex align-items-center justify-content-end mb-2\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-secondary\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-secondary\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n </div> -->\r\n <div class=\"cardInstrucciones mt-4 mb-3\">\r\n <div class=\"flex align-items-center justify-content-between\" >\r\n <div class=\"flex\">\r\n <div class=\"icono\">\r\n <i class=\"pi pi-bell\"></i>\r\n </div>\r\n <div class=\"contenedor\">\r\n <label>{{mapaMensajes?.get(actual)}}</label>\r\n </div>\r\n </div>\r\n <div class=\"flex align-items-center justify-content-end\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-secondary\"\r\n pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\" [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\" class=\"p-button-secondary\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <div class=\"flex align-items-center justify-content-end mb-2\">\r\n <button pButton label=\"{{'link_anterior' | translate}}\" icon=\"pi pi-plus\" (click)=\"anterior()\" *ngIf=\"actual > 0\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n <button pButton label=\"{{'link_siguiente' | translate}}\" icon=\"pi pi-plus\" (click)=\"siguiente()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div> -->\r\n @if(actual === 0){\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton label=\"{{'fuente' | translate}}\" icon=\"pi pi-plus\" (click)=\"buscarTabla()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n <div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"tablasFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\"\r\n dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'alias' | translate}}</th>\r\n <th style=\"width:25%\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.tabla}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias}}\r\n </td>\r\n <td class=\"flex justify-content-end\">\r\n <div>\r\n <!-- ELIMINAR -->\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarTabla(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n @if(actual == 1){\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"foraneas\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n <th style=\"width:25%\">{{'' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.alias1}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias2}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.llave.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n @if(actual == 2){\r\n\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'where'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea\r\n [(ngModel)]=\"fuente.whereAdicional\" autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-content-end\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\"\r\n icon=\"glyphicons glyphicons-floppy-save\" label=\"{{'link_guardar' | translate}}\"\r\n (click)=\"editarWhere()\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n }\r\n @if(actual == 3){\r\n\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"camposSeleccionar\" [scrollable]=\"true\"\r\n [totalRecords]=\"camposSeleccionar.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"camposSeleccionar.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\" dataKey=\"alias\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\" alignFrozen=\"left\" pFrozenColumn>\r\n <p-checkbox [style]=\"{'margin-left': '1%','margin-right':'1%'}\" [(ngModel)]=\"seleccionGeneral\"\r\n [binary]=\"true\" [ngModel]=\"todosSeleccionados()\"\r\n (ngModelChange)=\"actualizarSeleccion($event)\"></p-checkbox>\r\n <span style=\"margin-left:1%\">{{'tabla' | translate}}</span>\r\n </th>\r\n <th style=\"width:25%\">{{'columna' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla>\r\n <tr>\r\n <td style=\"width:25%\">\r\n <p-checkbox class=\"mr-2 \" [(ngModel)]=\"tabla.seleccionado\" [binary]=\"true\" inputId=\"binary\">\r\n </p-checkbox>\r\n {{tabla.columna.reporteFuente}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.columna.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n\r\n </p-tabPanel>\r\n</p-tabView>\r\n\r\n}\r\n\r\n<app-popup-tablas-fuente #popupTablasFuenteUI\r\n (aplicarDestinoOcultar)=\"setTablaSeleccionada($event)\"></app-popup-tablas-fuente>", styles: [":host ::ng-deep .botonCircular{background:var(--color-85);border:solid 1px var(--color-85);color:var(--color-400)}\n"] }]
|
|
692
|
-
}], ctorParameters: () => [{ type: i1.MenuService }, { type: i2.ToastService }, { type: i3.ReportesService }, { type: i4.GeneralService }, { type: i5.UtilsService }, { type: i6.ConfirmationService }, { type: i7.TranslateService }, { type: i6.MessageService }], propDecorators: { popupTablasFuenteUI: [{
|
|
736
|
+
args: [{ selector: 'app-fuente-reporte', standalone: true, imports: [ProgressBarModule, TooltipModule, CheckboxModule, PopupTablasFuenteComponent, StepsModule, CommonModule, TabViewModule, SplitButtonModule, NgIf, TranslateModule, InputTextModule, CommonModule, AccordionModule, DropdownModule, FormsModule, TableModule, TablaGeneralComponent, FiltroGeneralComponent, ButtonModule, ReactiveFormsModule, GeneralPipe, InputTextareaModule, ConfirmPopupModule, ButtonModule], providers: [MessageService, ConfirmationService], template: "@if(vistaVisualizar == null){\r\n<h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <app-filtro-general [filtros]=\"filters\" [datatable]=\"tablaGeneral\">\r\n <ng-template let-form>\r\n <ng-container [formGroup]=\"form\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"descripcion\" formControlName=\"descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"descripcion\">{{'filtro' | translate}}</label>\r\n </span>\r\n </ng-container>\r\n </ng-template>\r\n </app-filtro-general>\r\n <button pButton label=\"{{'link_nuevo' | translate}}\" (click)=\"nuevo()\" icon=\"pi pi-plus\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n</div>\r\n<app-tabla-general #tablaGeneral [columns]=\"columns\" [value]=\"paginador\" [rows]=\"paginator.rows\"\r\n [totalRecords]=\"paginator.totalRecords\" (onLoad)=\"load($event)\" (onRowSelect)=\"verDetalle($event)\"\r\n [loading]=\"loading\"></app-tabla-general>\r\n}\r\n@if(vistaVisualizar != null){\r\n<div class=\"flex justify-content-between align-items-center mb-3\">\r\n <h1>{{'fuente' | translate}} {{'reporte'| translate}}</h1>\r\n <button pButton pRipple (click)=\"regresar()\" label=\"Regresar\" icon=\"pi pi-chevron-left\"\r\n class=\"p-button-text font-semibold\"></button>\r\n</div>\r\n<p-tabView [(activeIndex)]=\"tabPrincipal\">\r\n <p-tabPanel header=\"{{ 'fuente'| translate}}\">\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'datos'| translate}} {{'basicos'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <input pInputText autofocus type=\"text\" id=\"peso\" [(ngModel)]=\"fuente.descripcion\"\r\n autocomplete=\"off\" />\r\n <label for=\"peso\">{{'nombre' | translate}}</label>\r\n </span>\r\n </div>\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea [(ngModel)]=\"query\"\r\n autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardar()\">\r\n </button>\r\n <p-splitButton class=\"ml-2\" label=\"Acciones Fuente\" icon=\"glyphicons glyphicons-list\"\r\n [model]=\"menu\"></p-splitButton>\r\n </div>\r\n </div>\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-secondary\" icon=\"glyphicons glyphicons-floppy-save\"\r\n label=\"{{'link_guardar' | translate}}\" (click)=\"guardarCampos()\">\r\n </button>\r\n </div>\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"campos\" [scrollable]=\"true\"\r\n [totalRecords]=\"campos.length\" [paginator]=\"camposSeleccionar.length > 10\" [rows]=\"10\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\" scrollDirection=\"horizontal\"\r\n styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"llaveTabla\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'nombre' | translate}}</th>\r\n <th style=\"width:25%\">{{'sintaxis' | translate}}</th>\r\n <th style=\"width:25%\">{{'tipo' | translate}} de {{'dato' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-campo let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"campo\">\r\n <td style=\"width:25%\">\r\n <input pInputText type=\"text\" [(ngModel)]=\"campo.nombre \" class=\"w-full\">\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{campo.tipoDato}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </p-tabPanel>\r\n\r\n\r\n <p-tabPanel header=\"{{ 'wizard'| translate}}\">\r\n <p-steps [model]=\"items\" [readonly]=\"false\" [activeIndex]=\"actual\"></p-steps>\r\n\r\n <div class=\"cardInstrucciones mt-4 mb-3\" style=\"margin-bottom: 0px !important;\">\r\n <div class=\"flex align-items-center justify-content-between\">\r\n <div class=\"flex\">\r\n <div class=\"icono\">\r\n <i class=\"pi pi-bell\"></i>\r\n </div>\r\n <div class=\"contenedor\" style=\"margin-top: 2%;\">\r\n <label>{{mapaMensajes?.get(actual)}}</label>\r\n </div>\r\n </div>\r\n <div class=\"flex align-items-center justify-content-end\">\r\n <p-button (onClick)=\"anterior()\" [rounded]=\"true\" icon=\"pi pi-angle-left\" class=\"p-button-secondary\"\r\n severity=\"secondary\" pTooltip=\"Anterior\" tooltipPosition=\"top\" placeholder=\"Top\"\r\n [disabled]=\"actual <= 0\" />\r\n <p-button (onClick)=\"siguiente()\" [rounded]=\"true\" icon=\"pi pi-angle-right\"\r\n class=\"p-button-secondary\" severity=\"secondary\"\r\n [pTooltip]=\"actual === 3 ? 'Terminar': 'Siguiente'\" tooltipPosition=\"top\" placeholder=\"Top\" />\r\n </div>\r\n </div>\r\n </div>\r\n <p-progressBar mode=\"indeterminate\" [style]=\"{ height: '3px' }\" *ngIf=\"cargarPaso\" />\r\n\r\n <div class=\"mt-2\" *ngIf=\"!cargarPaso\">\r\n @if(actual === 0){\r\n <div class=\"flex justify-content-end mb-2\">\r\n <button pButton label=\"{{'fuente' | translate}}\" icon=\"pi pi-plus\" (click)=\"buscarTabla()\"\r\n class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n <div>\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"tablasFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\"\r\n [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'alias' | translate}}</th>\r\n <th style=\"width:25%\"> </th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.tabla}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias}}\r\n </td>\r\n <td class=\"flex justify-content-end\">\r\n <div>\r\n <!-- ELIMINAR -->\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarTabla(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </div>\r\n\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n @if(actual == 1){\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"foraneas\" [scrollable]=\"true\"\r\n selectionMode=\"single\" scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" (onRowSelect)=\"adicionarForanea($event)\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\" dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'tabla' | translate}}</th>\r\n <th style=\"width:25%\">{{'campo' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pSelectableRow]=\"tabla\">\r\n <td style=\"width:25%\">\r\n {{tabla.alias1}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.alias2}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.llave.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n <div class=\"flex justify-content-end align-items-center mb-3 mt-3\">\r\n <button pButton label=\"{{'agregar' | translate}} {{'join' | translate}}\" (click)=\"nuevoJoin()\"\r\n icon=\"pi pi-plus\" class=\"p-ripple p-element p-button p-component p-button-secondary mb-2\"></button>\r\n </div>\r\n\r\n <p-table #tablaGeneralEntrada id=\"tabla_lista_tipo_entidad\" [value]=\"joinsFrom\" [scrollable]=\"true\"\r\n scrollDirection=\"both\" scrollDirection=\"horizontal\" responsiveLayout=\"scroll\"\r\n scrollDirection=\"horizontal\" styleClass=\"p-datatable-striped\" [showCurrentPageReport]=\"true\"\r\n editMode=\"row\" currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"true\"\r\n dataKey=\"llave\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:45%\">{{'campo' | translate}} 1</th>\r\n <th style=\"width:5%\">{{'=' | translate}}</th>\r\n <th style=\"width:45%\">{{'campo' | translate}} 2</th>\r\n <th>{{'' | translate}}</th>\r\n </tr>\r\n <tr class=\" TablaNuevoRegistro\" *ngIf=\"verNuevoJoin\">\r\n <td style=\"width:45%\">\r\n <p-dropdown [options]=\"listaColumnas\" optionValue=\"value\" [(ngModel)]=\"col1\" appendTo=\"body\"\r\n [autoZIndex]=\"false\" [autoDisplayFirst]=\"false\" optionLabel=\"label\"\r\n (onChange)=\"cambioJoin($event)\"></p-dropdown>\r\n </td>\r\n <td style=\"width:5%\">=</td>\r\n <td style=\"width:45%\">\r\n <p-dropdown [options]=\"listaJoin\" optionValue=\"value\" [(ngModel)]=\"col2\" appendTo=\"body\"\r\n [autoZIndex]=\"false\" [autoDisplayFirst]=\"false\" optionLabel=\"label\"></p-dropdown>\r\n </td>\r\n\r\n <td class=\"flex justify-content-end\">\r\n <button pButton pRipple type=\"button\" icon=\"pi pi-check\" (click)=\"adicionarJoin()\"\r\n class=\"p-element p-ripple p-button-rounded p-button-success mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n <button pButton pRipple type=\"button\" (click)=\"cancelarNuevoJoin()\" icon=\"pi pi-times\"\r\n class=\"p-element p-ripple p-button-rounded p-button-danger mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla let-editing=\"editing\" let-ri=\"rowIndex\">\r\n <tr [pEditableRow]=\"tabla\">\r\n <td style=\"width:45%\">\r\n {{tabla.columna1}}\r\n </td>\r\n <td style=\"width:5%\">\r\n {{'='}}\r\n </td>\r\n <td style=\"width:45%\">\r\n {{tabla.columna2}}\r\n </td>\r\n <td>\r\n <button pButton pRipple type=\"button\" pDeleteEditableRow icon=\"pi pi-trash\"\r\n (click)=\"eliminarJoin(tabla)\"\r\n class=\"p-element p-ripple p-button-rounded p-button-outlined mr-2 mb-2 p-button p-component p-button-icon-only\"></button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n @if(actual == 2){\r\n\r\n <div class=\"card\">\r\n <div class=\"mt-4\">\r\n <h5><i class=\"glyphicons glyphicons-book\"></i>{{'where'| translate}}</h5>\r\n </div>\r\n\r\n <div class=\"p-fluid p-formgrid grid\">\r\n\r\n <div class=\"field col-12 md:col-12 lg:col-12\">\r\n <span class=\"p-float-label\">\r\n <textarea class=\"w-full\" id=\"float-input\" rows=\"5\" cols=\"30\" pInputTextarea\r\n [(ngModel)]=\"fuente.whereAdicional\" autofocus [autoResize]=\"true\"> </textarea>\r\n <label for=\"descripcion\">{{'consulta' | translate}}\r\n </label>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex justify-content-end\">\r\n <button pButton pRipple class=\"ml-2 p-button p-button-raised\"\r\n icon=\"glyphicons glyphicons-floppy-save\" label=\"{{'link_guardar' | translate}}\"\r\n (click)=\"editarWhere()\">\r\n </button>\r\n </div>\r\n </div>\r\n\r\n }\r\n @if(actual == 3){\r\n\r\n <p-table id=\"tabla_lista_tipo_entidad\" [value]=\"camposSeleccionar\" [scrollable]=\"true\"\r\n [totalRecords]=\"camposSeleccionar.length\" scrollDirection=\"both\" scrollDirection=\"horizontal\"\r\n responsiveLayout=\"scroll\" scrollDirection=\"horizontal\" [paginator]=\"camposSeleccionar.length > 10\"\r\n [rows]=\"10\" [rowsPerPageOptions]=\"[10, 20, 30]\" styleClass=\"p-datatable-striped\"\r\n [showCurrentPageReport]=\"true\" editMode=\"row\"\r\n currentPageReportTemplate=\"{first} al {last} de {totalRecords} registros\" [lazy]=\"false\"\r\n dataKey=\"alias\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th style=\"width:25%\" alignFrozen=\"left\" pFrozenColumn>\r\n <p-checkbox [style]=\"{'margin-left': '1%','margin-right':'1%'}\"\r\n [(ngModel)]=\"seleccionGeneral\" [binary]=\"true\" [ngModel]=\"todosSeleccionados()\"\r\n (ngModelChange)=\"actualizarSeleccion($event)\"></p-checkbox>\r\n <span style=\"margin-left:1%\">{{'tabla' | translate}}</span>\r\n </th>\r\n <th style=\"width:25%\">{{'columna' | translate}}</th>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-tabla>\r\n <tr>\r\n <td style=\"width:25%\">\r\n <p-checkbox class=\"mr-2 \" [(ngModel)]=\"tabla.seleccionado\" [binary]=\"true\" inputId=\"binary\">\r\n </p-checkbox>\r\n {{tabla.columna.reporteFuente}}\r\n </td>\r\n <td style=\"width:25%\">\r\n {{tabla.columna.nombre}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n <ng-template pTemplate=\"emptymessage\">\r\n <tr class=\"p-3 font-medium emptymessage\">\r\n <td colspan=\"5\">\r\n {{'mensajetablavacia' | translate}}\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n\r\n }\r\n </div>\r\n </p-tabPanel>\r\n</p-tabView>\r\n\r\n}\r\n\r\n<app-popup-tablas-fuente #popupTablasFuenteUI\r\n (aplicarDestinoOcultar)=\"setTablaSeleccionada($event)\"></app-popup-tablas-fuente>", styles: [":host ::ng-deep .botonCircular{background:var(--color-85);border:solid 1px var(--color-85);color:var(--color-400)}\n"] }]
|
|
737
|
+
}], ctorParameters: () => [{ type: i1.MenuService }, { type: i2.ToastService }, { type: i3.ReportesService }, { type: i4.GeneralService }, { type: i5.UtilsService }, { type: i6.ConfirmationService }, { type: i7.TranslateService }, { type: i6.MessageService }, { type: i8.GeneralPipe }], propDecorators: { popupTablasFuenteUI: [{
|
|
693
738
|
type: ViewChild,
|
|
694
739
|
args: ['popupTablasFuenteUI']
|
|
695
740
|
}] } });
|
|
696
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZnVlbnRlLXJlcG9ydGUvZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZnVlbnRlLXJlcG9ydGUvZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFHekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxtQkFBbUIsRUFBWSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1B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QWlCLEVBQUMsSUFBSSxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxhQUNwWCxDQUFDLGNBQWMsRUFBQyxtQkFBbUIsQ0FBQzsrUkFzQ2IsbUJBQW1CO3NCQUFwRCxTQUFTO3VCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vY29yZS9zZXJ2aWNpb3MvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29sdW1uYUZ1ZW50ZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvQ29sdW1uYUZ1ZW50ZU1vZGVsJztcclxuaW1wb3J0IHsgRnVlbnRlRGF0b01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvRnVlbnRlRGF0byc7XHJcbmltcG9ydCB7IFJlcG9ydGVDb2x1bW5hTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9SZXBvcnRlQ29sdW1uYSc7XHJcbmltcG9ydCB7IFRhYmxhRnJvbU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvVGFibGFGcm9tTW9kZWwnO1xyXG5pbXBvcnQgeyBKb2luRnJvbU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvSm9pbkZyb21Nb2RlbCc7XHJcbmltcG9ydCB7IFJlcG9ydGVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMbGF2ZUZvcmFuZWFNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0xsYXZlRm9yYW5lYU1vZGVsJztcclxuaW1wb3J0IHsgRm9yZWluZ1dyYXBlck1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvRm9yZWluZ1dyYXBlck1vZGVsJztcclxuaW1wb3J0IHsgR2VuZXJhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljaW9zL2dlbmVyYWwuc2VydmljZSc7XHJcbmltcG9ydCB7IEdlbmVyYWxNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0dlbmVyYWxNb2RlbCc7XHJcbmltcG9ydCB7IENvbHVtbmFXcmFwZXJNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL0NvbHVtbmFXcmFwZXJNb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljaW9zL3V0aWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlLCBNZW51SXRlbSwgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBDb25zdGFudGVzR2VuZXJhbGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL2NvbnN0YW50ZXMvQ29uc3RhbnRlc0dlbmVyYWxlcyc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgQ29uZmlybVBvcHVwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jb25maXJtcG9wdXAnO1xyXG5pbXBvcnQgeyBJbnB1dFRleHRhcmVhTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHRhcmVhJztcclxuaW1wb3J0IHsgSW5wdXRUZXh0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBY2NvcmRpb25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2FjY29yZGlvbic7XHJcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUYWJsZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xyXG5pbXBvcnQgeyBHZW5lcmFsUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2dlbmVyYWwucGlwZSc7XHJcbmltcG9ydCB7IFRhYmxhR2VuZXJhbENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvY29tcG9uZW50ZXMvdGFibGEtZ2VuZXJhbC90YWJsYS1nZW5lcmFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbHRyb0dlbmVyYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2NvbXBvbmVudGVzL2ZpbHRyby1nZW5lcmFsL2ZpbHRyby1nZW5lcmFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNpb3MvbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3BsaXRCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3NwbGl0YnV0dG9uJztcclxuaW1wb3J0IHsgVGFiVmlld01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFidmlldyc7XHJcbmltcG9ydCB7IFN0ZXBzTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zdGVwcyc7XHJcbmltcG9ydCB7IFBvcHVwVGFibGFzRnVlbnRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcG9wdXBzL3BvcHVwLXRhYmxhcy1mdWVudGUvcG9wdXAtdGFibGFzLWZ1ZW50ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGVja2JveE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdhcHAtZnVlbnRlLXJlcG9ydGUnLFxyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW1Rvb2x0aXBNb2R1bGUsQ2hlY2tib3hNb2R1bGUsUG9wdXBUYWJsYXNGdWVudGVDb21wb25lbnQsU3RlcHNNb2R1bGUsQ29tbW9uTW9kdWxlLFRhYlZpZXdNb2R1bGUsU3BsaXRCdXR0b25Nb2R1bGUsTmdJZixUcmFuc2xhdGVNb2R1bGUsIElucHV0VGV4dE1vZHVsZSxDb21tb25Nb2R1bGUsIEFjY29yZGlvbk1vZHVsZSwgRHJvcGRvd25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBUYWJsZU1vZHVsZSwgVGFibGFHZW5lcmFsQ29tcG9uZW50LCBGaWx0cm9HZW5lcmFsQ29tcG9uZW50LCBCdXR0b25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEdlbmVyYWxQaXBlLCBJbnB1dFRleHRhcmVhTW9kdWxlLCBDb25maXJtUG9wdXBNb2R1bGUsIEJ1dHRvbk1vZHVsZV0sXHJcblx0cHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2UsQ29uZmlybWF0aW9uU2VydmljZV0sXHJcblx0dGVtcGxhdGVVcmw6ICcuL2Z1ZW50ZS1yZXBvcnRlLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybDogJy4vZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGdWVudGVSZXBvcnRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblx0cHVibGljIGZ1ZW50ZTogRnVlbnRlRGF0b01vZGVsID0gbmV3IEZ1ZW50ZURhdG9Nb2RlbCgpO1xyXG5cdHB1YmxpYyB2aXN0YVZpc3VhbGl6YXI6IHN0cmluZ1xyXG5cdHB1YmxpYyB0YWJsYXNGcm9tOiBUYWJsYUZyb21Nb2RlbFtdID0gW107IC8vIGZyb20gVGFibGFGcm9tXHJcblx0cHVibGljIGpvaW5zRnJvbTogSm9pbkZyb21Nb2RlbFtdID0gW107ICAgLy9mcm9tIEpvaW5Gcm9tIFxyXG5cdHB1YmxpYyBjb2x1bW5hczogUmVwb3J0ZUNvbHVtbmFNb2RlbFtdID0gW107XHJcblx0cHVibGljIGxpc3RhQ29sdW1uYXM6IGFueVtdID0gW107XHJcblx0cHVibGljIGxpc3RhSm9pbjogYW55W10gPSBbXTtcclxuXHRwdWJsaWMgY29sMTogc3RyaW5nO1xyXG5cdHB1YmxpYyBjb2wyOiBzdHJpbmc7XHJcblx0cHVibGljIGNhbXBvczogQ29sdW1uYUZ1ZW50ZU1vZGVsW10gPSBbXTtcclxuXHRwdWJsaWMgY2FtcG9zU2VsZWNjaW9uYXI6IENvbHVtbmFXcmFwZXJNb2RlbFtdID0gW107XHJcblx0cHVibGljIG1vc3RyYXJTZWxlY2Npb25hcjogYm9vbGVhbjtcclxuXHRwdWJsaWMgY2FtcG9Gb3JtdWxhOiBDb2x1bW5hRnVlbnRlTW9kZWwgPSBuZXcgQ29sdW1uYUZ1ZW50ZU1vZGVsKCk7XHJcblx0cHVibGljIGFjdHVhbDogbnVtYmVyO1xyXG5cdHB1YmxpYyB0YWJQcmluY2lwYWw6IG51bWJlcjtcclxuXHRwdWJsaWMgYmFzaWNvOiBib29sZWFuO1xyXG5cdHB1YmxpYyBzZWxlY2Npb25HZW5lcmFsOiBib29sZWFuO1xyXG5cdHB1YmxpYyBmb3JhbmVhczogYW55W10gPSBbXTtcclxuXHRwdWJsaWMgZGVzY3JpcGNpb246IHN0cmluZztcclxuXHRwdWJsaWMgcXVlcnk6IHN0cmluZztcclxuXHRwdWJsaWMgcGFnaW5hZG9yOiBGdWVudGVEYXRvTW9kZWxbXSA9IFtdO1xyXG5cdHB1YmxpYyBmaWx0cm86IEZ1ZW50ZURhdG9Nb2RlbCA9IG5ldyBGdWVudGVEYXRvTW9kZWwoKTtcclxuXHRwdWJsaWMgcGFnaW5hdG9yID0ge1xyXG5cdFx0cm93czogMTAsXHJcblx0XHR0b3RhbFJlY29yZHM6IDAsXHJcblx0fTtcclxuXHRwdWJsaWMgY29sdW1ucyA6IGFueVtdID0gW107XHJcbiAgXHRwdWJsaWMgZmlsdGVycyA6IGFueVtdID0gW107XHJcblx0cHVibGljIGxvYWRpbmcgOiBib29sZWFuO1xyXG5cdHB1YmxpYyBtZW51OiBNZW51SXRlbVtdID0gW107XHJcblx0cHVibGljIGl0ZW1zOiBNZW51SXRlbVtdID0gW107XHJcblx0cHVibGljIG1hcGFNZW5zYWplczogTWFwPG51bWJlcixzdHJpbmc+ID0gbmV3IE1hcDxudW1iZXIsc3RyaW5nPigpO1xyXG5cdEBWaWV3Q2hpbGQoJ3BvcHVwVGFibGFzRnVlbnRlVUknKSBwb3B1cFRhYmxhc0Z1ZW50ZVVJOiBQb3B1cFRhYmxhc0Z1ZW50ZUNvbXBvbmVudDtcclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UscHJpdmF0ZSBub3RpZmljYXRpb25CdXNTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsIHByaXZhdGUgcmVwb3J0ZXNTdmM6IFJlcG9ydGVzU2VydmljZSwgcHJpdmF0ZSBnZW5lcmFsU3ZjOiBHZW5lcmFsU2VydmljZSwgcHJpdmF0ZSB1dGlsc1NlcnZpY2U6IFV0aWxzU2VydmljZSwgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlKSB7IH1cclxuXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmxpc3RhQ29sdW1uYXMgPSBbXTtcclxuXHRcdHRoaXMuY2FtcG9zID0gW107XHJcblx0XHR0aGlzLmxpc3RhSm9pbiA9IFtdO1xyXG5cdFx0dGhpcy5jb2x1bW5hcyA9IFtdO1xyXG5cdFx0dGhpcy50YWJsYXNGcm9tID0gW107XHJcblx0XHR0aGlzLmNhbXBvc1NlbGVjY2lvbmFyID0gW107XHJcblx0XHR0aGlzLmpvaW5zRnJvbSA9IFtdO1xyXG5cdFx0dGhpcy5hY3R1YWwgPSAwO1xyXG5cdFx0dGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnRnVlbnRlIFJlcG9ydGUnIH1dKTtcclxuXHRcdHRoaXMuY29sdW1ucyA9IFtcclxuXHRcdCAge1xyXG5cdFx0XHRmaWVsZDogICdkZXNjcmlwY2lvbicsXHJcblx0XHRcdGhlYWRlcjogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Rlc2NyaXBjaW9uJyksXHJcblx0XHRcdHdpZHRoOiAxMDAsXHJcblx0XHQgIH0sXHJcblx0XHRdO1xyXG5cdFx0dGhpcy5maWx0ZXJzID0gW1xyXG5cdFx0ICB7XHJcblx0XHRcdGZpZWxkOiAnZGVzY3JpcGNpb24nLFxyXG5cdFx0XHRoZWFkZXI6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdkZXNjcmlwY2lvbicpLFxyXG5cdFx0XHRtYXRjaE1vZGU6ICdjb250YWlucycsXHJcblx0XHQgIH1cclxuXHRcdF07XHJcblx0XHR0aGlzLmluaXRTdGVwKCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgbG9hZChldmVudCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGhpcy5sb2FkaW5nID10cnVlO1xyXG5cdFx0XHR0aGlzLmNvbG9jYXJGaWx0cm8oKTtcclxuXHRcdFx0dGhpcy5maWx0cm8ucGFnaW5hY2lvblJlZ2lzdHJvSW5pY2lhbCA9IGV2ZW50Py5maXJzdCAhPSBudWxsID8gZXZlbnQ/LmZpcnN0IDogMCxcclxuXHRcdFx0XHR0aGlzLmZpbHRyby5wYWdpbmFjaW9uUmVnaXN0cm9GaW5hbCA9IGV2ZW50Py5yb3dzICE9IG51bGwgPyBldmVudD8ucm93cyA6IDEwLFxyXG5cdFx0XHRcdHRoaXMucGFnaW5hZG9yID0gYXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5jb25zdWx0YXJGdWVudGVEYXRvKHRoaXMuZmlsdHJvKS50b1Byb21pc2UoKTtcclxuXHRcdFx0dGhpcy5wYWdpbmF0b3IudG90YWxSZWNvcmRzID0gYXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5jYW50aWRhZEZ1ZW50ZURhdG8odGhpcy5maWx0cm8pLnRvUHJvbWlzZSgpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5sb2FkaW5nID1mYWxzZTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBjb2xvY2FyRmlsdHJvKCkge1xyXG5cdFx0dGhpcy5maWx0cm8ub3JpZ2VuID0gKFwiRlwiKTtcclxuXHRcdHRoaXMuZmlsdHJvLmRlc2NyaXBjaW9uID0gKG51bGwpO1xyXG5cdFx0aWYgKHRoaXMudXRpbHNTZXJ2aWNlLmlzTm90QmxhbmsodGhpcy5kZXNjcmlwY2lvbikpIHtcclxuXHRcdFx0dGhpcy5maWx0cm8uZGVzY3JpcGNpb24gPSAoQ29uc3RhbnRlc0dlbmVyYWxlcy5QT1JDRU5UQUpFICsgdGhpcy5kZXNjcmlwY2lvbiArIENvbnN0YW50ZXNHZW5lcmFsZXMuUE9SQ0VOVEFKRSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0cHVibGljIGxpbXBpYXJDYW1wb3MoKSB7XHJcblx0XHR0aGlzLmRlc2NyaXBjaW9uID0gbnVsbDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBzaWd1aWVudGUoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAodGhpcy52YWxpZGFyV2l6YXJkKCkpIHtcclxuXHRcdFx0XHRpZiAodGhpcy5hY3R1YWwgPCAzKSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5hY3R1YWwgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmZvcmFuZWFzID0gW107XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLnRhYmxhc0Zyb20ubGVuZ3RoID09IDApIHsgLy8gTm8gc2VsZWNjaW9ubyBuaW5ndW5hIHRhYmxhXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiRGViZSBzZWxlY2Npb25hciBhbCBtZW5vcyB1biBvYmpldG8uXCIpO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLnRhYmxhc0Zyb20ubGVuZ3RoID09IDEpIHsgLy8gU29sbyBzZWxlY2Npb25vIHVuYSwgcG9yIGVzbyBubyBoYXkgcXVlIGdlbmVyYXIgam9pbnMuXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5hY3R1YWwrKztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgbm9tYnJlc1RhYmxhcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IHRhYmxhIG9mIHRoaXMudGFibGFzRnJvbSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFub21icmVzVGFibGFzLmluY2x1ZGVzKHRhYmxhLnRhYmxhKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRub21icmVzVGFibGFzLnB1c2godGFibGEudGFibGEpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZvcmFuZWFzID0gW107XHJcblx0XHRcdFx0XHRcdFx0Ly9MaXN0PExsYXZlRm9yYW5lYT4gXHJcblx0XHRcdFx0XHRcdFx0bGV0IGxsYXZlczogTGxhdmVGb3JhbmVhTW9kZWxbXSA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuZ2V0TGxhdmVzKG5vbWJyZXNUYWJsYXMpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50YWJsYXNGcm9tLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMudGFibGFzRnJvbS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JhbmVhIG9mIGxsYXZlcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChmb3JhbmVhLnRhYmxhMSA9PSAodGhpcy50YWJsYXNGcm9tW2ldLnRhYmxhKSAmJiBmb3JhbmVhLnRhYmxhMiA9PSAodGhpcy50YWJsYXNGcm9tW2pdLnRhYmxhKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IG51ZXZvOiBGb3JlaW5nV3JhcGVyTW9kZWwgPSBuZXcgRm9yZWluZ1dyYXBlck1vZGVsKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRudWV2by5hbGlhczEgPSAodGhpcy50YWJsYXNGcm9tW2ldLmFsaWFzKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG51ZXZvLmFsaWFzMiA9ICh0aGlzLnRhYmxhc0Zyb21bal0uYWxpYXMpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVldm8ubGxhdmUgPSAoZm9yYW5lYSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvcmFuZWFzLnB1c2gobnVldm8pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8vIENhcmdvIGxhcyBjb2x1bW5hcyBwYXJhIGxvcyBzaWd1aWVudGVzIHByb2Nlc29zLlxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5hcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxpc3RhQ29sdW1uYXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0dGhpcy5jYW1wb3NTZWxlY2Npb25hciA9IFtdO1xyXG5cclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgZnJvbSBvZiB0aGlzLnRhYmxhc0Zyb20pIHtcclxuXHRcdFx0XHRcdFx0XHQvL1JlcG9ydGVDb2x1bW5hRFRPIFxyXG5cdFx0XHRcdFx0XHRcdGxldCB0YSA9IG5ldyBSZXBvcnRlQ29sdW1uYU1vZGVsKCk7XHJcblx0XHRcdFx0XHRcdFx0dGEucmVwb3J0ZUZ1ZW50ZSA9IChmcm9tLnRhYmxhKTtcclxuXHRcdFx0XHRcdFx0XHQvL0xpc3Q8UmVwb3J0ZUNvbHVtbmFEVE8+IFxyXG5cdFx0XHRcdFx0XHRcdGxldCBudWV2YXM6IFJlcG9ydGVDb2x1bW5hTW9kZWxbXSA9IGF3YWl0IHRoaXMuZ2VuZXJhbFN2Yy5xdWVyeUZvckxpc3QobmV3IEdlbmVyYWxNb2RlbCgnUmVwb3J0ZUNvbHVtbmFEVE8nLCAnUmVwb3J0ZXMuY29uc3VsdGFyQ29sdW1uYXMnLCBmYWxzZSwgdGEpKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmNhcmdhckxpc3Rhc0NvbHVtbmFzKG51ZXZhcywgZnJvbS5hbGlhcyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmFjdHVhbCsrO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnRlcm1pbmFyUGFzb3MoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgY2FyZ2FyTGlzdGFzQ29sdW1uYXMobnVldmFzOiBSZXBvcnRlQ29sdW1uYU1vZGVsW10sIGFsaWFzOiBzdHJpbmcpIHtcclxuXHRcdGZvciAobGV0IGNvbCBvZiBudWV2YXMpIHtcclxuXHRcdFx0Y29sLnJlcG9ydGVGdWVudGUgPSAoYWxpYXMpO1xyXG5cdFx0XHR0aGlzLmNvbHVtbmFzLnB1c2goY29sKTtcclxuXHRcdFx0dGhpcy5saXN0YUNvbHVtbmFzLnB1c2goeyB2YWx1ZTogY29sLnJlcG9ydGVGdWVudGUgKyAnLicgKyBjb2wubm9tYnJlLCBsYWJlbDogY29sLnJlcG9ydGVGdWVudGUgKyAnLicgKyBjb2wubm9tYnJlIH0pO1xyXG5cdFx0XHRsZXQgY2FtcG8gPSBuZXcgQ29sdW1uYVdyYXBlck1vZGVsKCk7XHJcblx0XHRcdGNhbXBvLmNvbHVtbmEgPSBjb2w7XHJcblx0XHRcdGNhbXBvLmFsaWFzID0gY29sLm5vbWJyZTtcclxuXHRcdFx0dGhpcy5jYW1wb3NTZWxlY2Npb25hci5wdXNoKGNhbXBvKTtcclxuXHRcdH1cclxuXHRcdGNvbnNvbGUubG9nKCdjYW1wb3NTZWxlY2Npb25hcicsdGhpcy5jYW1wb3NTZWxlY2Npb25hcik7XHJcblx0XHRcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyB0ZXJtaW5hclBhc29zKCkge1xyXG5cdFx0bGV0IGNhbXBvc1NxbCA9IFwiXCI7XHJcblx0XHRsZXQgaSA9IDA7XHJcblx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jYW1wb3NTZWxlY2Npb25hcikge1xyXG5cdFx0XHRpZiAoY29sLnNlbGVjY2lvbmFkbykge1xyXG5cdFx0XHRcdGNhbXBvc1NxbCArPSAoaSA9PSAwID8gXCJcIiA6IFwiLFwiKSArIGNvbC5jb2x1bW5hLm5vbWJyZSArIFwiIGFzIFwiICsgY29sLmFsaWFzO1xyXG5cdFx0XHRcdGkrKztcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuZnVlbnRlLndoZXJlSm9pbiA9ICh0aGlzLmdlbmVyYXJTcWxKb2luKCkpO1xyXG5cdFx0dGhpcy5mdWVudGUuZnJvbVNxbCA9ICh0aGlzLmdlbmVyYXJTcWxGcm9tKCkpO1xyXG5cdFx0bGV0IHdoZXJlID0gXCJcIjtcclxuXHRcdGxldCBlc3RhQmxhbmNvV2hlcmVKb2luOiBib29sZWFuID0gdGhpcy5mdWVudGUud2hlcmVKb2luID09IG51bGwgfHwgXCJcIiA9PSAodGhpcy5mdWVudGUud2hlcmVKb2luKTtcclxuXHRcdGxldCBlc3RhQmxhbmNvV2hlcmVBZGljaW9uYWw6IGJvb2xlYW4gPSB0aGlzLmZ1ZW50ZS53aGVyZUFkaWNpb25hbCA9PSBudWxsIHx8IFwiXCIgPT0gKHRoaXMuZnVlbnRlLndoZXJlQWRpY2lvbmFsKTtcclxuXHRcdGlmICghZXN0YUJsYW5jb1doZXJlSm9pbiB8fCAhZXN0YUJsYW5jb1doZXJlQWRpY2lvbmFsKSB7XHJcblx0XHRcdHdoZXJlID0gXCIgXFxuV0hFUkUgXCI7XHJcblx0XHRcdGlmICghZXN0YUJsYW5jb1doZXJlSm9pbiAmJiAhZXN0YUJsYW5jb1doZXJlQWRpY2lvbmFsKSB7XHJcblx0XHRcdFx0d2hlcmUgKz0gdGhpcy5mdWVudGUud2hlcmVKb2luICsgXCIgQU5EIFxcbihcIiArIHRoaXMuZnVlbnRlLndoZXJlQWRpY2lvbmFsICsgXCIpXCI7XHJcblx0XHRcdH0gZWxzZSBpZiAoIWVzdGFCbGFuY29XaGVyZUpvaW4pIHtcclxuXHRcdFx0XHR3aGVyZSArPSB0aGlzLmZ1ZW50ZS53aGVyZUpvaW47XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0d2hlcmUgKz0gdGhpcy5mdWVudGUud2hlcmVBZGljaW9uYWw7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGNvbnNvbGUubG9nKCd3aGVyZScsd2hlcmUpO1xyXG5cdFx0XHJcblx0XHR0cnkge1xyXG5cdFx0XHRsZXQgc3FsID0gXCJTRUxFQ1QgXFxuXCIgKyBjYW1wb3NTcWwgKyBcIiBcXG5GUk9NIFxcblwiICsgdGhpcy5mdWVudGUuZnJvbVNxbCArIHdoZXJlO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLnZhbGlkYXJRdWVyeShzcWwpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZS5xdWVyeSA9IChzcWwpO1xyXG5cdFx0XHR0aGlzLnF1ZXJ5ID0gc3FsO1xyXG5cdFx0XHR0aGlzLnRhYlByaW5jaXBhbCA9IDA7XHJcblx0XHRcdHRoaXMuY29uc3RydWlyQ29sdW1uYXMoKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBhZGljaW9uYXJGb3JhbmVhKGV2ZW50bykge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Ly9Gb3JlaW5nV3JhcGVyIFxyXG5cdFx0XHRsZXQgZm9yYW5lYTogRm9yZWluZ1dyYXBlck1vZGVsID0gZXZlbnRvLmRhdGE7XHJcblx0XHRcdGZvciAobGV0IHJlbCBvZiBmb3JhbmVhLmxsYXZlLnJlbGFjaW9uZXMpIHtcclxuXHRcdFx0XHRsZXQgcGFyID0gcmVsLnNwbGl0KFwiOlwiKTtcclxuXHRcdFx0XHRsZXQgam9pbiA9IG5ldyBKb2luRnJvbU1vZGVsKCk7XHJcblx0XHRcdFx0am9pbi5jb2x1bW5hMSA9IChmb3JhbmVhLmFsaWFzMSArIFwiLlwiICsgcGFyWzBdKTtcclxuXHRcdFx0XHRqb2luLmNvbHVtbmEyID0gKGZvcmFuZWEuYWxpYXMyICsgXCIuXCIgKyBwYXJbMV0pO1xyXG5cdFx0XHRcdHRoaXMuam9pbnNGcm9tLnB1c2goam9pbik7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBlbGltaW5hcigpIHtcclxuXHRcdHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcclxuXHRcdFx0dGFyZ2V0OiBldmVudC50YXJnZXQsXHJcblx0XHRcdG1lc3NhZ2U6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdtZW5zYWplX2FsZXJ0YScpLFxyXG5cdFx0XHRpY29uOiAnY29uZmlybWFyJyxcclxuXHRcdFx0YWNjZXB0OiAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5zZXRSZXNwdWVzdGEodHJ1ZSlcclxuXHRcdFx0fSxcclxuXHRcdFx0cmVqZWN0OiAoKSA9PiB7XHJcblxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyBzZXRSZXNwdWVzdGEocmVzcHVlc3RhOiBib29sZWFuKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAocmVzcHVlc3RhKSB7XHJcblx0XHRcdFx0dGhpcy5yZXBvcnRlc1N2Yy5lbGltaW5hckZ1ZW50ZURhdG9zQ29uSGlqb3ModGhpcy5mdWVudGUpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHRcdHRoaXMuZnVlbnRlID0gbnVsbDtcclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJMYSBmdWVudGUgaGEgc2lkbyBlbGltaW5hZGEuXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYW50ZXJpb3IoKSB7XHJcblx0XHRpZiAodGhpcy5hY3R1YWwgPiAwKVxyXG5cdFx0XHR0aGlzLmFjdHVhbC0tO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIHZhbGlkYXJRdWVyeSgpIHtcclxuXHRcdHRyeSB7XHJcblxyXG5cdFx0XHRpZiAodGhpcy51dGlsc1NlcnZpY2UudmFsaWRhclRleHRvU1FMKHRoaXMucXVlcnksIHRydWUsIHRydWUsIDgwMDAsIHRydWUpKSB7XHJcblx0XHRcdFx0dGhpcy5yZXBvcnRlc1N2Yy52YWxpZGFyUXVlcnkodGhpcy5xdWVyeSk7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiRWwgcXVlcnkgZXN0YSBjb3JyZWN0by5cIik7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Ly9WYWxpZGFkb3IuYWRpY2lvbmFyTWVuc2FqZShcImZ1ZW50ZUZvcm06dGFiOnF1ZXJ5XCIsIGUuZ2V0TWVzc2FnZSgpKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhZGljaW9uYXJKb2luKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKHRoaXMuY29sMSAhPSBudWxsICYmIHRoaXMuY29sMiAhPSBudWxsKSB7XHJcblx0XHRcdFx0Ly8gVE9ETzogRmFsdGEgdmFsaWRhciBlbCB0aXBvXHJcblx0XHRcdFx0bGV0IG51ZXZvID0gbmV3IEpvaW5Gcm9tTW9kZWwoKTtcclxuXHRcdFx0XHRudWV2by5jb2x1bW5hMSA9ICh0aGlzLmNvbDEpO1xyXG5cdFx0XHRcdG51ZXZvLmNvbHVtbmEyID0gKHRoaXMuY29sMik7XHJcblx0XHRcdFx0dGhpcy5qb2luc0Zyb20ucHVzaChudWV2byk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dXYXJuaW5nKFwiRGViZSBzZWxlY2Npb25hciBkb3MgY2FtcG9zXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZWxpbWluYXJKb2luKGFlKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHQvL2xldCAgam9pbiA9IChKb2luRnJvbSkgKChVSVBhcmFtZXRlcikgYWUuZ2V0Q29tcG9uZW50KCkuZmluZENvbXBvbmVudChcImpvaW5cIikpLmdldFZhbHVlKCk7XHJcblx0XHRcdHRoaXMuam9pbnNGcm9tLmZpbHRlcigoZGF0YSkgPT4gZGF0YSA9PT0gYWUuZGF0YSk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZWxpbWluYXJUYWJsYShhZSkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Ly9UYWJsYUZyb20gdGFibGEgPSAoVGFibGFGcm9tKSAoKFVJUGFyYW1ldGVyKSBhZS5nZXRDb21wb25lbnQoKS5maW5kQ29tcG9uZW50KFwidGFibGFcIikpLmdldFZhbHVlKCk7XHJcblx0XHRcdHRoaXMudGFibGFzRnJvbS5maWx0ZXIoKGRhdGEpID0+IGRhdGEgPT09IGFlKTtcclxuXHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dXYXJuaW5nKFwiRmFsdGEgZWxpbWluYXIgbGFzIGNvbHVtbmFzIGRlIGxhIHRhYmxhID8/P1wiKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBidXNjYXJUYWJsYSgpIHtcclxuXHRcdHRoaXMucG9wdXBUYWJsYXNGdWVudGVVSS5idXNjYXJUYWJsYShcImZ1ZW50ZVVJLnRhYmxhU2VsZWNjaW9uYWRhXCIpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldFRhYmxhU2VsZWNjaW9uYWRhKHRhYmxhU2VsZWNjaW9uYWRhOiBzdHJpbmcpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGxldCB0YWJsYXMgPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgdGFibGEgb2YgdGhpcy50YWJsYXNGcm9tKSB7XHJcblx0XHRcdFx0aWYgKCF0YWJsYXMuaW5jbHVkZXModGFibGEudGFibGEpKSB7XHJcblx0XHRcdFx0XHR0YWJsYXMucHVzaCh0YWJsYS50YWJsYSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHRoaXMuY2FyZ2FyVGFibGFFbkxpc3RhKHRhYmxhU2VsZWNjaW9uYWRhKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2FyZ2FyVGFibGFFbkxpc3RhKHRhYmxhOiBzdHJpbmcpIHtcclxuXHRcdGxldCBwYXIgPSB0YWJsYS5zcGxpdChcIl9cIik7XHJcblx0XHRsZXQgYWxpYXMgPSBwYXJbMF07XHJcblx0XHRsZXQgaSA9IDE7XHJcblx0XHRsZXQgdGFibGFUZW1wID0gbmV3IFRhYmxhRnJvbU1vZGVsKClcclxuXHRcdHRhYmxhVGVtcC5hbGlhcyA9IGFsaWFzO1xyXG5cdFx0d2hpbGUgKHRoaXMudGFibGFzRnJvbS5pbmNsdWRlcyh0YWJsYVRlbXApKSB7XHJcblx0XHRcdGFsaWFzID0gdGFibGEgKyAoaSsrKTtcclxuXHRcdH1cclxuXHRcdGxldCB0ZW0gPSBuZXcgVGFibGFGcm9tTW9kZWwoKTtcclxuXHRcdHRlbS50YWJsYSA9IHRhYmxhO1xyXG5cdFx0dGVtLmFsaWFzID0gYWxpYXM7XHJcblx0XHR0aGlzLnRhYmxhc0Zyb20ucHVzaCh0ZW0pO1xyXG5cdFx0cmV0dXJuIGFsaWFzO1xyXG5cdH1cclxuXHJcblxyXG5cclxuXHRwdWJsaWMgY2FtYmlvSm9pbihjZSkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGhpcy5saXN0YUpvaW4gPSBbXTtcclxuXHRcdFx0bGV0IG51ZXZvID0gY2UudmFsdWU7XHJcblx0XHRcdGlmIChudWV2byAhPSBudWxsKSB7XHJcblx0XHRcdFx0Ly9SZXBvcnRlQ29sdW1uYURUTyBcclxuXHRcdFx0XHRsZXQgYWN0OiBSZXBvcnRlQ29sdW1uYU1vZGVsID0gbnVsbDtcclxuXHRcdFx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jb2x1bW5hcykge1xyXG5cdFx0XHRcdFx0aWYgKG51ZXZvLmVxdWFscyhjb2wucmVwb3J0ZUZ1ZW50ZSArIFwiLlwiICsgY29sLm5vbWJyZSkpIHtcclxuXHRcdFx0XHRcdFx0YWN0ID0gY29sO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY29sdW1uYXMpIHtcclxuXHRcdFx0XHRcdGlmICghY29sLnJlcG9ydGVGdWVudGUuc3RhcnRzV2l0aChhY3QucmVwb3J0ZUZ1ZW50ZSkgJiYgY29sLnRpcG9EYXRvID09IChhY3QudGlwb0RhdG8pICYmIGNvbC5vcmRlbiA9PSAoYWN0Lm9yZGVuKSkge1xyXG5cdFx0XHRcdFx0XHRsZXQgdmFsID0gY29sLnJlcG9ydGVGdWVudGUgKyBcIi5cIiArIGNvbC5ub21icmU7XHJcblx0XHRcdFx0XHRcdHRoaXMubGlzdGFKb2luLnB1c2goeyB2YWx1ZTogdmFsLCBrZXk6IHZhbCB9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBlZGl0YXJDYW1wbyhldmVudG8pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGxldCBjb2w6IENvbHVtbmFGdWVudGVNb2RlbCA9IGV2ZW50by5kYXRhO1xyXG5cdFx0XHR0aGlzLmNhbXBvRm9ybXVsYSA9IGNvbDtcclxuXHRcdFx0bGV0IHZhcnMgPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgY2FtcG8gb2YgdGhpcy5jYW1wb3MpIHtcclxuXHRcdFx0XHRsZXQgdmFyMTogYW55O1xyXG5cdFx0XHRcdHZhcjEubm9tYnJlID0gKGNhbXBvLm5vbWJyZSk7XHJcblx0XHRcdFx0dmFyMS50aXBvID0gKGNhbXBvLnRpcG9EYXRvKTtcclxuXHRcdFx0XHR2YXJzLnB1c2godmFyMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9nZXRCZWFuKEVkaXRvckZvcm11bGFVSS5jbGFzcykuZWRpdGFyKGNvbC5nZXRTaW50YXhpcygpLCBcImZ1ZW50ZVVJLmZvcm11bGFcIiwgdmFycyk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZWRpdGFyV2hlcmUoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRsZXQgdmFycyA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jb2x1bW5hcykge1xyXG5cdFx0XHRcdC8vVmFyaWFibGVGb3JtdWxhIFxyXG5cdFx0XHRcdGxldCB2YXIxO1xyXG5cdFx0XHRcdHZhcjEubm9tYnJlID0gKGNvbC5yZXBvcnRlRnVlbnRlICsgXCIuXCIgKyBjb2wubm9tYnJlKTtcclxuXHRcdFx0XHR2YXIxLnRpcG8oY29sLnRpcG9EYXRvKTtcclxuXHRcdFx0XHR2YXJzLnB1c2godmFyMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9nZXRCZWFuKEVkaXRvckZvcm11bGFVSS5jbGFzcykuZWRpdGFyKGZ1ZW50ZS5nZXRXaGVyZUFkaWNpb25hbCgpLCBcImZ1ZW50ZVVJLmZ1ZW50ZS53aGVyZUFkaWNpb25hbFwiLCB2YXJzKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRGb3JtdWxhKGZvcm11bGEpIHtcclxuXHRcdGlmICh0aGlzLmNhbXBvRm9ybXVsYSAhPSBudWxsKSB7XHJcblx0XHRcdHRoaXMuY2FtcG9Gb3JtdWxhLnNpbnRheGlzID0gKGZvcm11bGEpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5jYW1wb0Zvcm11bGEgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFkaWNpb25hckNvbHVtbmFzKCkge1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpIHtcclxuXHRcdFx0Y29sLnNlbGVjY2lvbmFkbyA9IChmYWxzZSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLm1vc3RyYXJTZWxlY2Npb25hciA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYWdyZWdhclNlbGVjY2lvbmFkb3MoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jYW1wb3NTZWxlY2Npb25hcikge1xyXG5cdFx0XHRcdGlmIChjb2wuc2VsZWNjaW9uYWRvKSB7XHJcblx0XHRcdFx0XHQvL0NvbHVtbmFGdWVudGVEVE8gXHJcblx0XHRcdFx0XHRsZXQgY2FtcG8gPSBuZXcgQ29sdW1uYUZ1ZW50ZU1vZGVsKCk7XHJcblx0XHRcdFx0XHRjYW1wby5mdWVudGVEYXRvID0gKHRoaXMuZnVlbnRlLmxsYXZlKTtcclxuXHRcdFx0XHRcdGNhbXBvLm5vbWJyZSA9IChjb2wuY29sdW1uYS5ub21icmUpO1xyXG5cdFx0XHRcdFx0Y2FtcG8uc2ludGF4aXMgPSAoY29sLmNvbHVtbmEubm9tYnJlKTtcclxuXHRcdFx0XHRcdHRoaXMuY2FtcG9zLnB1c2goY2FtcG8pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLm9jdWx0YXJTZWxlY2Npb25hcigpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIG9jdWx0YXJTZWxlY2Npb25hcigpIHtcclxuXHRcdHRoaXMubW9zdHJhclNlbGVjY2lvbmFyID0gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgdmVyRGV0YWxsZShldmVudG8pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ21hbnRlbmltaWVudG8nO1xyXG5cdFx0XHRsZXQgZnVlbnRlRGF0b0RUTyA9IGV2ZW50bztcclxuXHRcdFx0dGhpcy5mdWVudGUgPSBuZXcgRnVlbnRlRGF0b01vZGVsKCk7XHJcblx0XHRcdHRoaXMuZnVlbnRlLmxsYXZlID0gKGZ1ZW50ZURhdG9EVE8ubGxhdmUpO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZSA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuY29uc3VsdGFyVW5pY2FGdWVudGVEYXRvKHRoaXMuZnVlbnRlKS50b1Byb21pc2UoKTtcclxuXHRcdFx0aWYgKHRoaXMuZnVlbnRlLnF1ZXJ5MiAhPSBudWxsKSB7XHJcblx0XHRcdFx0dGhpcy5xdWVyeSA9IHRoaXMuZnVlbnRlLnF1ZXJ5ICsgdGhpcy5mdWVudGUucXVlcnkyO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMucXVlcnkgPSB0aGlzLmZ1ZW50ZS5xdWVyeTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL0NvbHVtbmFGdWVudGVEVE8gXHJcblx0XHRcdGxldCBjb2wgPSBuZXcgQ29sdW1uYUZ1ZW50ZU1vZGVsKCk7XHJcblx0XHRcdGNvbC5mdWVudGVEYXRvID0gKHRoaXMuZnVlbnRlLmxsYXZlKTtcclxuXHRcdFx0dGhpcy5jYW1wb3MgPSBhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmNvbnN1bHRhckNvbHVtbmFzRnVlbnRlKGNvbCkudG9Qcm9taXNlKCk7XHJcblx0XHRcdHRoaXMuYWN0dWFsID0gMDtcclxuXHRcdFx0dGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnRnVlbnRlIFJlcG9ydGUnLCB9LCB7bGFiZWw6ICdNYW50ZW5pbWllbnRvIEZ1ZW50ZSd9XSk7XHJcblx0XHRcdHRoaXMuY2FyZ2FzT3BjaW9uZXMoKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBudWV2bygpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ21hbnRlbmltaWVudG8nO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZSA9IG5ldyBGdWVudGVEYXRvTW9kZWwoKTtcclxuXHRcdFx0dGhpcy5mdWVudGUub3JpZ2VuID0gKFwiRlwiKTtcclxuXHRcdFx0dGhpcy5jYW1wb3MgPSBudWxsO1xyXG5cdFx0XHR0aGlzLnF1ZXJ5ID0gbnVsbDtcclxuXHRcdFx0dGhpcy50YWJQcmluY2lwYWwgPSAwO1xyXG5cdFx0XHR0aGlzLmFjdHVhbCA9IDA7XHJcblx0XHRcdHRoaXMubWVudVNlcnZpY2Uuc2V0QnJlYWRjcnVtYihbeyBsYWJlbDogJ0Z1ZW50ZSBSZXBvcnRlJywgfSwge2xhYmVsOiAnTWFudGVuaW1pZW50byBGdWVudGUnfV0pO1xyXG5cdFx0XHR0aGlzLmNhcmdhc09wY2lvbmVzKCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjYXJnYXNPcGNpb25lcygpe1xyXG5cdFx0dGhpcy5tZW51PSBbe2xhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbGlua19lbGltaW5hcicpLCBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLWJpbicsIHZpc2libGU6IHRoaXMuZnVlbnRlLmxsYXZlICE9IG51bGwsIGNvbW1hbmQ6IChldmVudCkgPT4ge3RoaXMuZWxpbWluYXIoKX19LFxyXG5cdFx0e2xhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbGlua192YWxpZGFyJyksIGljb246ICdnbHlwaGljb25zIGdseXBoaWNvbnMtcHJpbnQnLCBjb21tYW5kOiAoZXZlbnQpID0+IHt0aGlzLnZhbGlkYXJRdWVyeSgpfX0sXHJcblx0XHR7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdsaW5rX2dlbmVyYXInKSwgaWNvbjogJ2dseXBoaWNvbnMgZ2x5cGhpY29ucy1iZWxsJyx2aXNpYmxlOiB0aGlzLmZ1ZW50ZS5sbGF2ZSAhPSBudWxsLCBjb21tYW5kOiAoZXZlbnQpID0+IHt0aGlzLmNvbnN0cnVpckNvbHVtbmFzKCl9fSxcclxuXHRcdF1cclxuXHR9XHJcblxyXG5cdHJlZ3Jlc2FyKCl7XHJcblx0XHR0aGlzLnZpc3RhVmlzdWFsaXphciA9IG51bGw7XHJcblx0XHR0aGlzLm5nT25Jbml0KCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHZhbGlkYXIoKTogYm9vbGVhbiB7XHJcblx0XHRsZXQgcmVzID0gdHJ1ZTtcclxuXHRcdHJlcyA9IHJlcyAmJiB0aGlzLnV0aWxzU2VydmljZS52YWxpZGFyQ2FtcG9PYmxpZ2F0b3Jpbyh0aGlzLmZ1ZW50ZS5kZXNjcmlwY2lvbik7XHJcblx0XHRyZXMgPSByZXMgJiYgKHRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJUZXh0b1NRTCh0aGlzLnF1ZXJ5LCB0cnVlLCB0cnVlLCA4MDAwLCB0cnVlKSA9PSBudWxsKTtcclxuXHRcdHJldHVybiByZXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWdpc3RyYS9hY3R1YWxpemEgbGEgaW5mb3JtYWNpb24gZ2VuZXJhbCBkZSBsYSBmdWVudGUgZGUgZGF0b3NcclxuXHQgKi9cclxuXHRwdWJsaWMgYXN5bmMgZ3VhcmRhcigpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICh0aGlzLnZhbGlkYXIoKSkge1xyXG5cdFx0XHRcdGlmICh0aGlzLnF1ZXJ5Lmxlbmd0aCA+IDQwMDApIHtcclxuXHRcdFx0XHRcdHRoaXMuZnVlbnRlLnF1ZXJ5ID0gKHRoaXMucXVlcnkuc3Vic3RyaW5nKDAsIDM5OTkpKTtcclxuXHRcdFx0XHRcdHRoaXMuZnVlbnRlLnF1ZXJ5MiA9ICh0aGlzLnF1ZXJ5LnN1YnN0cmluZygzOTk5LCB0aGlzLnF1ZXJ5Lmxlbmd0aCkpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmZ1ZW50ZS5xdWVyeSA9ICh0aGlzLnF1ZXJ5KTtcclxuXHRcdFx0XHRcdHRoaXMuZnVlbnRlLnF1ZXJ5MiA9IChudWxsKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLmZ1ZW50ZS5sbGF2ZSA9PSBudWxsKSB7XHJcblx0XHRcdFx0XHR0aGlzLmZ1ZW50ZS5sbGF2ZSA9ICh0aGlzLnV0aWxzU2VydmljZS5nZW5lcmFyTGxhdmUoKSk7XHJcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmluc2VydGFyRnVlbnRlRGF0byh0aGlzLmZ1ZW50ZSkudG9Qcm9taXNlKCk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuYWN0dWFsaXphckZ1ZW50ZURhdG8odGhpcy5mdWVudGUpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJMb3MgY2FtYmlvcyBoYW4gc2lkbyBndWFyZGFkb3NcIik7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9Ly9ndWFyZGFyXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlZ2lzdHJhL2FjdHVhbGl6YSBsYXMgY29sdW1uYXMgZ2VuZXJhZG9zIHBhcmEgbGEgZnVlbnRlIGRlIGRhdG9zIGNvbW8gcmVnaXN0cm9zIGRlIHRpcG8gJ0NvbHVtbmFGdWVudGUnXHJcblx0ICovXHJcblx0cHVibGljIGFzeW5jIGd1YXJkYXJDYW1wb3MoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAodGhpcy5mdWVudGUubGxhdmUgPT0gbnVsbCkge1xyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIlBvciBmYXZvciBkaWxpZ2VuY2llIHByaW1lcm8gbG9zIGRhdG9zIGRlIGxhIGZ1ZW50ZVwiKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMudmFsaWRhckNhbXBvcygpKSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5hY3R1YWxpemFyQ29sdW1uYXNGdWVudGUodGhpcy5mdWVudGUsIHRoaXMuY2FtcG9zKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJTZSBoYW4gZ3VhcmRhZG8gbG9zIGNhbXBvc1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH0vL2d1YXJkYXJDYW1wb3NcclxuXHJcblx0LyoqXHJcblx0ICogVmVyaWZpY2EgcXVlIGxvcyB2YWxvcmVzIGFzb2NpYWRvcyBhIGxvcyBjYW1wb3MgcGFyYSBsYSBjcmVhY2lvbiBkZSBsYXMgY29sdW1uYXMgZGUgbGEgZnVlbnRlIHNlYW4gdsOhbGlkb3NcclxuXHQgKiBAcmV0dXJuIGZhbHNlIGVuIGNhc28gZGUgcXVlIGxvcyB2YWxvcmVzIGFzaWduYWRvcyBhIGxvcyBjYW1wb3Mgc2VhbiBudWxvcyBvIG5vIHNlYW4gcGFsYWJyYXMgdsOhbGlkYXMgZGUgYWN1ZXJkbyBcclxuXHQgKiBjb24gbGFzIGNvbmRpY2lvbmVzIGRhZGFzIHBvciBWYWxpZGFkb3JVdGlsLnZhbGlkYXJQYWxhYnJhKCkpLFxyXG5cdCAqIGVuIGNhc28gY29udHJhcmlvIHJldG9ybmEgdHJ1ZVxyXG5cdCAqL1xyXG5cdHByaXZhdGUgdmFsaWRhckNhbXBvcygpIHtcclxuXHRcdGZvciAobGV0IGNvbCBvZiB0aGlzLmNhbXBvcykge1xyXG5cdFx0XHRpZiAoY29sLm5vbWJyZSA9PSBudWxsIHx8ICF0aGlzLnV0aWxzU2VydmljZS52YWxpZGFyUGFsYWJyYShjb2wubm9tYnJlKSkge1xyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIk5vbWJyZSBubyB2YWxpZG8gKFwiICsgY29sLm5vbWJyZSArIFwiKVwiKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnN0cnV5ZSBsYXMgY29sdW1uYXMgZGUgbGEgZnVlbnRlIGRlIGRhdG9zLCBjb24gYmFzZSBlbiBsb3MgY2FtcG9zIG9idGVuaWRvcyBcclxuXHQgKiBkZSBsYSBjb25zdWx0YSBTUUwgYXNvY2lhZGFcclxuXHQgKi9cclxuXHRwdWJsaWMgYXN5bmMgY29uc3RydWlyQ29sdW1uYXMoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHR0aGlzLmNhbXBvcyA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuZ2V0Q29sdW1uYXNTcWwodGhpcy5xdWVyeSkudG9Qcm9taXNlKCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fS8vY29uc3RydWlyQ29sdW1uYXNcclxuXHJcblxyXG5cclxuXHRwcml2YXRlIHZhbGlkYXJXaXphcmQoKSB7XHJcblx0XHRsZXQgYWxpYXM6IHN0cmluZ1tdID0gW107XHJcblx0XHRmb3IgKGxldCB0YWJsYSBvZiB0aGlzLnRhYmxhc0Zyb20pIHtcclxuXHRcdFx0aWYgKGFsaWFzLmluY2x1ZGVzKHRhYmxhLmFsaWFzKSkge1xyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIk5vIHNlIHB1ZWRlIHJlcGV0aXIgZWwgYWxpYXMgZGUgbGFzIHRhYmxhcy5cIik7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFsaWFzLnB1c2godGFibGEuYWxpYXMpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRhbGlhcyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpIHtcclxuXHRcdFx0aWYgKGNvbC5zZWxlY2Npb25hZG8pIHtcclxuXHRcdFx0XHRpZiAoYWxpYXMuaW5jbHVkZXMoY29sLmFsaWFzKSkge1xyXG5cdFx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiTm8gc2UgcHVlZGUgcmVwZXRpciBlbCBhbGlhcyBkZSBsYXMgY29sdW1uYXMuXCIpO1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRhbGlhcy5wdXNoKGNvbC5hbGlhcyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdlbmVyYXJTcWxGcm9tKCkge1xyXG5cdFx0bGV0IHJlcyA9IFwiXCI7XHJcblx0XHRsZXQgaSA9IDA7XHJcblx0XHRmb3IgKGxldCB0YWJsYSBvZiB0aGlzLnRhYmxhc0Zyb20pIHtcclxuXHRcdFx0cmVzICs9IChpID09IDAgPyBcIlwiIDogXCIsXCIpICsgdGFibGEudGFibGEgKyBcIiBcIiArIHRhYmxhLmFsaWFzO1xyXG5cdFx0XHRpKys7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZW5lcmFyU3FsSm9pbigpIHtcclxuXHRcdGxldCByZXMgPSBcIlwiO1xyXG5cdFx0bGV0IGkgPSAwO1xyXG5cdFx0Zm9yIChsZXQgam9pbiBvZiB0aGlzLmpvaW5zRnJvbSkge1xyXG5cdFx0XHRyZXMgKz0gKGkgPT0gMCA/IFwiXCIgOiBcIiBBTkQgXCIpICsgam9pbi5jb2x1bW5hMSArIFwiID0gXCIgKyBqb2luLmNvbHVtbmEyO1xyXG5cdFx0XHRpKys7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzO1xyXG5cdH1cclxuXHJcblx0Ly9JTVBMRU1FTlRBQ0lPTiBTVEVQRVJcclxuXHRpbml0U3RlcCgpe1xyXG5cdFx0dGhpcy5tYXBhTWVuc2FqZXMuc2V0KDAsJ1NlbGVjY2lvbmUgbGFzIHRhYmxhcyBvIHZpc3RhcyBkZSBkb25kZSBkZXNlYSBvYnRlbmVyIGxhIGluZm9ybWFjaW9uLicpXHJcblx0XHR0aGlzLm1hcGFNZW5zYWplcy5zZXQoMSwnSW5kaXF1ZSBkZSBxdWUgbWFuZXJhIHNlIHJlbGFjY2lvbmFuIGxvcyBvYmpldG9zIGVudHJlIHNpLicpXHJcblx0XHR0aGlzLm1hcGFNZW5zYWplcy5zZXQoMiwnSW5kaXF1ZSBsb3MgZmlsdHJvcyBhZGljaW9uYWxlcyBxdWUgZGVzZWUgcmVhbGl6YXIgc29icmUgbGEgaW5mb3JtYWNpb24uJylcclxuXHRcdHRoaXMubWFwYU1lbnNhamVzLnNldCgzLCdDYW1wb3MnKVxyXG5cdFx0dGhpcy5pdGVtcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdmcm9tJyksXHJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rOiAncGVyc29uYWwnLFxyXG5cdFx0XHRcdHRpdGxlOidTZWxlY2Npb25lIGxhcyB0YWJsYXMgbyB2aXN0YXMgZGUgZG9uZGUgZGVzZWEgb2J0ZW5lciBsYSBpbmZvcm1hY2lvbi4nXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnam9pbicpLFxyXG5cdFx0XHRcdHJvdXRlckxpbms6ICdwZXJzb25hbCcsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0luZGlxdWUgZGUgcXVlIG1hbmVyYSBzZSByZWxhY2Npb25hbiBsb3Mgb2JqZXRvcyBlbnRyZSBzaS4nXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnd2hlcmUnKSxcclxuXHRcdFx0XHRyb3V0ZXJMaW5rOiAncGVyc29uYWwnLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdJbmRpcXVlIGxvcyBmaWx0cm9zIGFkaWNpb25hbGVzIHF1ZSBkZXNlZSByZWFsaXphciBzb2JyZSBsYSBpbmZvcm1hY2lvbi4nXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnY2FtcG9zJyksXHJcbiAgICAgICAgICAgICAgICByb3V0ZXJMaW5rOiAnY29uZmlybWF0aW9uJyxcclxuXHRcdFx0XHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcblx0fVxyXG5cclxuXHRhY3R1YWxpemFyU2VsZWNjaW9uKGJvb2xlYW5vZ2VuZXJhbDogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0dGhpcy5jYW1wb3NTZWxlY2Npb25hci5mb3JFYWNoKChlbGVtZW50bykgPT4ge1xyXG5cdFx0XHRlbGVtZW50by5zZWxlY2Npb25hZG8gPSBib29sZWFub2dlbmVyYWw7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHRvZG9zU2VsZWNjaW9uYWRvcygpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmNhbXBvc1NlbGVjY2lvbmFyLmV2ZXJ5KGVsZW1lbnRvID0+IGVsZW1lbnRvLnNlbGVjY2lvbmFkbyk7XHJcblx0fVxyXG5cclxuXHJcbn1cclxuIiwiQGlmKHZpc3RhVmlzdWFsaXphciA9PSBudWxsKXtcclxuPGgxPnt7J2Z1ZW50ZScgfCB0cmFuc2xhdGV9fSB7eydyZXBvcnRlJ3wgdHJhbnNsYXRlfX08L2gxPlxyXG48ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gICAgPGFwcC1maWx0cm8tZ2VuZXJhbCBbZmlsdHJvc109XCJmaWx0ZXJzXCIgW2RhdGF0YWJsZV09XCJ0YWJsYUdlbmVyYWxcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWZvcm0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBhdXRvZm9jdXMgdHlwZT1cInRleHRcIiBpZD1cImRlc2NyaXBjaW9uXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcGNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZXNjcmlwY2lvblwiPnt7J2ZpbHRybycgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2FwcC1maWx0cm8tZ2VuZXJhbD5cclxuICAgIDxidXR0b24gcEJ1dHRvbiBsYWJlbD1cInt7J2xpbmtfbnVldm8nIHwgdHJhbnNsYXRlfX1cIiAoY2xpY2spPVwibnVldm8oKVwiIGljb249XCJwaSBwaS1wbHVzXCJcclxuICAgICAgICBjbGFzcz1cInAtcmlwcGxlIHAtZWxlbWVudCBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1zZWNvbmRhcnkgbWItMlwiPjwvYnV0dG9uPlxyXG48L2Rpdj5cclxuPGFwcC10YWJsYS1nZW5lcmFsICN0YWJsYUdlbmVyYWwgW2NvbHVtbnNdPVwiY29sdW1uc1wiIFt2YWx1ZV09XCJwYWdpbmFkb3JcIiBbcm93c109XCJwYWdpbmF0b3Iucm93c1wiXHJcbiAgICBbdG90YWxSZWNvcmRzXT1cInBhZ2luYXRvci50b3RhbFJlY29yZHNcIiAob25Mb2FkKT1cImxvYWQoJGV2ZW50KVwiIChvblJvd1NlbGVjdCk9XCJ2ZXJEZXRhbGxlKCRldmVudClcIlxyXG4gICAgW2xvYWRpbmddPVwibG9hZGluZ1wiPjwvYXBwLXRhYmxhLWdlbmVyYWw+XHJcbn1cclxuQGlmKHZpc3RhVmlzdWFsaXphciAhPSBudWxsKXtcclxuPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cclxuICAgIDxoMT57eydmdWVudGUnIHwgdHJhbnNsYXRlfX0ge3sncmVwb3J0ZSd8IHRyYW5zbGF0ZX19PC9oMT5cclxuICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIChjbGljayk9XCJyZWdyZXNhcigpXCIgbGFiZWw9XCJSZWdyZXNhclwiIGljb249XCJwaSBwaS1jaGV2cm9uLWxlZnRcIlxyXG4gICAgICAgIGNsYXNzPVwicC1idXR0b24tdGV4dCBmb250LXNlbWlib2xkXCI+PC9idXR0b24+XHJcbjwvZGl2PlxyXG48cC10YWJWaWV3PlxyXG4gICAgPHAtdGFiUGFuZWwgaGVhZGVyPVwie3sgJ2Z1ZW50ZSd8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cclxuICAgICAgICAgICAgICAgIDxoNT48aSBjbGFzcz1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1ib29rXCI+PC9pPnt7J2RhdG9zJ3wgdHJhbnNsYXRlfX0ge3snYmFzaWNvcyd8IHRyYW5zbGF0ZX19PC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mbHVpZCBwLWZvcm1ncmlkIGdyaWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgYXV0b2ZvY3VzIHR5cGU9XCJ0ZXh0XCIgaWQ9XCJwZXNvXCIgWyhuZ01vZGVsKV09XCJmdWVudGUuZGVzY3JpcGNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInBlc29cIj57eydub21icmUnIHwgdHJhbnNsYXRlfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTEyIGxnOmNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJ3LWZ1bGxcIiBpZD1cImZsb2F0LWlucHV0XCIgcm93cz1cIjVcIiBjb2xzPVwiMzBcIiBwSW5wdXRUZXh0YXJlYSBbKG5nTW9kZWwpXT1cInF1ZXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9mb2N1cyBbYXV0b1Jlc2l6ZV09XCJ0cnVlXCI+IDwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZXNjcmlwY2lvblwiPnt7J2NvbnN1bHRhJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibWwtMiBwLWJ1dHRvbiBwLWJ1dHRvbi1yYWlzZWRcIiBpY29uPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWZsb3BweS1zYXZlXCJcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cInt7J2xpbmtfZ3VhcmRhcicgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJndWFyZGFyKClcIj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPHAtc3BsaXRCdXR0b24gY2xhc3M9XCJtbC0yXCIgbGFiZWw9XCJBY2Npb25lcyBFdmFsdWFkb3Jlc1wiIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVcIj48L3Atc3BsaXRCdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbWItMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBjbGFzcz1cIm1sLTIgcC1idXR0b24gcC1idXR0b24tcmFpc2VkXCIgaWNvbj1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1mbG9wcHktc2F2ZVwiXHJcbiAgICAgICAgICAgICAgICBsYWJlbD1cInt7J2xpbmtfZ3VhcmRhcicgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJndWFyZGFyQ2FtcG9zKClcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPHAtdGFibGUgI3RhYmxhR2VuZXJhbEVudHJhZGEgaWQ9XCJ0YWJsYV9saXN0YV90aXBvX2VudGlkYWRcIiBbdmFsdWVdPVwiY2FtcG9zXCIgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbj1cImJvdGhcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIlxyXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwiZmFsc2VcIiBlZGl0TW9kZT1cInJvd1wiXHJcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfSByZWdpc3Ryb3NcIiBbbGF6eV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIGRhdGFLZXk9XCJsbGF2ZVRhYmxhXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eydub21icmUnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J3NpbnRheGlzJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eyd0aXBvJyB8IHRyYW5zbGF0ZX19IGRlIHt7J2RhdG8nIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtY2FtcG8gbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDx0ciBbcEVkaXRhYmxlUm93XT1cImNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjYW1wby5ub21icmUgXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NhbXBvLnRpcG9EYXRvfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NhbXBvLnRpcG9EYXRvfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuXHJcblxyXG4gICAgPHAtdGFiUGFuZWwgaGVhZGVyPVwie3sgJ3dpemFyZCd8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgPHAtc3RlcHMgW21vZGVsXT1cIml0ZW1zXCIgW3JlYWRvbmx5XT1cImZhbHNlXCIgW2FjdGl2ZUluZGV4XT1cImFjdHVhbFwiICA+PC9wLXN0ZXBzPlxyXG4gICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1lbmQgbWItMlwiPlxyXG4gICAgICAgICAgICA8cC1idXR0b24gKG9uQ2xpY2spPVwiYW50ZXJpb3IoKVwiIFtyb3VuZGVkXT1cInRydWVcIiBpY29uPVwicGkgcGktYW5nbGUtbGVmdFwiIGNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiQW50ZXJpb3JcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBwbGFjZWhvbGRlcj1cIlRvcFwiIFtkaXNhYmxlZF09XCJhY3R1YWwgPD0gMFwiIC8+XHJcbiAgICAgICAgICAgIDxwLWJ1dHRvbiAob25DbGljayk9XCJzaWd1aWVudGUoKVwiIFtyb3VuZGVkXT1cInRydWVcIiBpY29uPVwicGkgcGktYW5nbGUtcmlnaHRcIiBjbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiYWN0dWFsICA9PT0gMyA/ICdUZXJtaW5hcic6ICdTaWd1aWVudGUnXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgcGxhY2Vob2xkZXI9XCJUb3BcIiAvPlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZEluc3RydWNjaW9uZXMgbXQtNCBtYi0zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb25vXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktYmVsbFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVuZWRvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+e3ttYXBhTWVuc2FqZXM/LmdldChhY3R1YWwpfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiAob25DbGljayk9XCJhbnRlcmlvcigpXCIgW3JvdW5kZWRdPVwidHJ1ZVwiIGljb249XCJwaSBwaS1hbmdsZS1sZWZ0XCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBUb29sdGlwPVwiQW50ZXJpb3JcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBwbGFjZWhvbGRlcj1cIlRvcFwiIFtkaXNhYmxlZF09XCJhY3R1YWwgPD0gMFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8cC1idXR0b24gKG9uQ2xpY2spPVwic2lndWllbnRlKClcIiBbcm91bmRlZF09XCJ0cnVlXCIgaWNvbj1cInBpIHBpLWFuZ2xlLXJpZ2h0XCIgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCJhY3R1YWwgID09PSAzID8gJ1Rlcm1pbmFyJzogJ1NpZ3VpZW50ZSdcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIiBwbGFjZWhvbGRlcj1cIlRvcFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBsYWJlbD1cInt7J2xpbmtfYW50ZXJpb3InIHwgdHJhbnNsYXRlfX1cIiAgaWNvbj1cInBpIHBpLXBsdXNcIiAoY2xpY2spPVwiYW50ZXJpb3IoKVwiICpuZ0lmPVwiYWN0dWFsID4gMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1yaXBwbGUgcC1lbGVtZW50IHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLXNlY29uZGFyeSBtYi0yXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBsYWJlbD1cInt7J2xpbmtfc2lndWllbnRlJyB8IHRyYW5zbGF0ZX19XCIgIGljb249XCJwaSBwaS1wbHVzXCIgKGNsaWNrKT1cInNpZ3VpZW50ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLXJpcHBsZSBwLWVsZW1lbnQgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24tc2Vjb25kYXJ5IG1iLTJcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICBAaWYoYWN0dWFsID09PSAwKXtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIG1iLTJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIGxhYmVsPVwie3snZnVlbnRlJyB8IHRyYW5zbGF0ZX19XCIgaWNvbj1cInBpIHBpLXBsdXNcIiAoY2xpY2spPVwiYnVzY2FyVGFibGEoKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInAtcmlwcGxlIHAtZWxlbWVudCBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1zZWNvbmRhcnkgbWItMlwiPjwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxwLXRhYmxlICN0YWJsYUdlbmVyYWxFbnRyYWRhIGlkPVwidGFibGFfbGlzdGFfdGlwb19lbnRpZGFkXCIgW3ZhbHVlXT1cInRhYmxhc0Zyb21cIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbj1cImJvdGhcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXHJcbiAgICAgICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCIgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXN0cmlwZWRcIiBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgZWRpdE1vZGU9XCJyb3dcIiBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSBhbCB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCIgW2xhenldPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBkYXRhS2V5PVwibGxhdmVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J3RhYmxhJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCI+e3snYWxpYXMnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj4gPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXRhYmxhIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIFtwRWRpdGFibGVSb3ddPVwidGFibGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLnRhYmxhfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmFsaWFzfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRUxJTUlOQVIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIHBEZWxldGVFZGl0YWJsZVJvdyBpY29uPVwicGkgcGktdHJhc2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWxpbWluYXJUYWJsYSh0YWJsYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtZWxlbWVudCBwLXJpcHBsZSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLW91dGxpbmVkIG1yLTIgbWItMiBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJwLTMgZm9udC1tZWRpdW0gZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snbWVuc2FqZXRhYmxhdmFjaWEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9wLXRhYmxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgICAgICBAaWYoYWN0dWFsID09IDEpe1xyXG5cclxuICAgICAgICA8cC10YWJsZSAjdGFibGFHZW5lcmFsRW50cmFkYSBpZD1cInRhYmxhX2xpc3RhX3RpcG9fZW50aWRhZFwiIFt2YWx1ZV09XCJmb3JhbmVhc1wiIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb249XCJib3RoXCIgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCJcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXN0cmlwZWRcIiBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIiBlZGl0TW9kZT1cInJvd1wiXHJcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfSByZWdpc3Ryb3NcIiBbbGF6eV09XCJ0cnVlXCIgZGF0YUtleT1cImxsYXZlXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eycnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7JycgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCI+e3snJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXRhYmxhIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8dHIgW3BFZGl0YWJsZVJvd109XCJ0YWJsYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmFsaWFzMX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t0YWJsYS5hbGlhczJ9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEubGxhdmUubm9tYnJlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBpZihhY3R1YWwgPT0gMil7XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aDU+PGkgY2xhc3M9XCJnbHlwaGljb25zIGdseXBoaWNvbnMtYm9va1wiPjwvaT57eyd3aGVyZSd8IHRyYW5zbGF0ZX19PC9oNT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mbHVpZCBwLWZvcm1ncmlkIGdyaWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQgY29sLTEyIG1kOmNvbC0xMiBsZzpjb2wtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtZmxvYXQtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwidy1mdWxsXCIgaWQ9XCJmbG9hdC1pbnB1dFwiIHJvd3M9XCI1XCIgY29scz1cIjMwXCIgcElucHV0VGV4dGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZnVlbnRlLndoZXJlQWRpY2lvbmFsXCIgYXV0b2ZvY3VzIFthdXRvUmVzaXplXT1cInRydWVcIj4gPC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImRlc2NyaXBjaW9uXCI+e3snY29uc3VsdGEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBjbGFzcz1cIm1sLTIgcC1idXR0b24gcC1idXR0b24tcmFpc2VkXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWZsb3BweS1zYXZlXCIgbGFiZWw9XCJ7eydsaW5rX2d1YXJkYXInIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlZGl0YXJXaGVyZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBAaWYoYWN0dWFsID09IDMpe1xyXG5cclxuICAgICAgICA8cC10YWJsZSBpZD1cInRhYmxhX2xpc3RhX3RpcG9fZW50aWRhZFwiIFt2YWx1ZV09XCJjYW1wb3NTZWxlY2Npb25hclwiIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cImNhbXBvc1NlbGVjY2lvbmFyLmxlbmd0aFwiIHNjcm9sbERpcmVjdGlvbj1cImJvdGhcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCJcclxuICAgICAgICAgICAgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIiBbcGFnaW5hdG9yXT1cImNhbXBvc1NlbGVjY2lvbmFyLmxlbmd0aCA+IDEwXCJcclxuICAgICAgICAgICAgW3Jvd3NdPVwiMTBcIiBbcm93c1BlclBhZ2VPcHRpb25zXT1cIlsxMCwgMjAsIDMwXVwiIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkXCJcclxuICAgICAgICAgICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCIgZWRpdE1vZGU9XCJyb3dcIlxyXG4gICAgICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSBhbCB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCIgW2xhenldPVwiZmFsc2VcIiBkYXRhS2V5PVwiYWxpYXNcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiIGFsaWduRnJvemVuPVwibGVmdFwiIHBGcm96ZW5Db2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94IFtzdHlsZV09XCJ7J21hcmdpbi1sZWZ0JzogJzElJywnbWFyZ2luLXJpZ2h0JzonMSUnfVwiIFsobmdNb2RlbCldPVwic2VsZWNjaW9uR2VuZXJhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYmluYXJ5XT1cInRydWVcIiBbbmdNb2RlbF09XCJ0b2Rvc1NlbGVjY2lvbmFkb3MoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJhY3R1YWxpemFyU2VsZWNjaW9uKCRldmVudClcIj48L3AtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwibWFyZ2luLWxlZnQ6MSVcIj57eyd0YWJsYScgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J2NvbHVtbmEnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtdGFibGE+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94IGNsYXNzPVwibXItMiBcIiBbKG5nTW9kZWwpXT1cInRhYmxhLnNlbGVjY2lvbmFkb1wiIFtiaW5hcnldPVwidHJ1ZVwiIGlucHV0SWQ9XCJiaW5hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9wLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmNvbHVtbmEucmVwb3J0ZUZ1ZW50ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3t0YWJsYS5jb2x1bW5hLm5vbWJyZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInAtMyBmb250LW1lZGl1bSBlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3snbWVuc2FqZXRhYmxhdmFjaWEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L3AtdGFibGU+XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICA8L3AtdGFiUGFuZWw+XHJcbjwvcC10YWJWaWV3PlxyXG5cclxufVxyXG5cclxuPGFwcC1wb3B1cC10YWJsYXMtZnVlbnRlICNwb3B1cFRhYmxhc0Z1ZW50ZVVJXHJcbiAgICAoYXBsaWNhckRlc3Rpbm9PY3VsdGFyKT1cInNldFRhYmxhU2VsZWNjaW9uYWRhKCRldmVudClcIj48L2FwcC1wb3B1cC10YWJsYXMtZnVlbnRlPiJdfQ==
|
|
741
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZnVlbnRlLXJlcG9ydGUvZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC93ZWJjb21tb24vcGFnZXMvZnVlbnRlLXJlcG9ydGUvZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXpELE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBR3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUVuRixPQUFPLEVBQUUsbUJBQW1CLEVBQVksY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQW9CLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFN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LFlBQVksRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLENBQUMsYUFDdFksQ0FBQyxjQUFjLEVBQUMsbUJBQW1CLENBQUM7eVRBc0NiLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW5lcmFsUGlwZSB9IGZyb20gJy4vLi4vLi4vcGlwZXMvZ2VuZXJhbC5waXBlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2lvcy90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb2x1bW5hRnVlbnRlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9Db2x1bW5hRnVlbnRlTW9kZWwnO1xyXG5pbXBvcnQgeyBGdWVudGVEYXRvTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9GdWVudGVEYXRvJztcclxuaW1wb3J0IHsgUmVwb3J0ZUNvbHVtbmFNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3NlZ3VyaWRhZC9tb2RlbG9zL1JlcG9ydGVDb2x1bW5hJztcclxuaW1wb3J0IHsgVGFibGFGcm9tTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9UYWJsYUZyb21Nb2RlbCc7XHJcbmltcG9ydCB7IEpvaW5Gcm9tTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9Kb2luRnJvbU1vZGVsJztcclxuaW1wb3J0IHsgUmVwb3J0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0ZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IExsYXZlRm9yYW5lYU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvTGxhdmVGb3JhbmVhTW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JlaW5nV3JhcGVyTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvbW9kZWxvcy9Gb3JlaW5nV3JhcGVyTW9kZWwnO1xyXG5pbXBvcnQgeyBHZW5lcmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNpb3MvZ2VuZXJhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJhbE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvR2VuZXJhbE1vZGVsJztcclxuaW1wb3J0IHsgQ29sdW1uYVdyYXBlck1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL21vZGVsb3MvQ29sdW1uYVdyYXBlck1vZGVsJztcclxuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNpb3MvdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lbnVJdGVtLCBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IENvbnN0YW50ZXNHZW5lcmFsZXMgfSBmcm9tICcuLi8uLi8uLi9zZWd1cmlkYWQvY29uc3RhbnRlcy9Db25zdGFudGVzR2VuZXJhbGVzJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xyXG5pbXBvcnQgeyBDb25maXJtUG9wdXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL2NvbmZpcm1wb3B1cCc7XHJcbmltcG9ydCB7IElucHV0VGV4dGFyZWFNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dGFyZWEnO1xyXG5pbXBvcnQgeyBJbnB1dFRleHRNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0dGV4dCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFjY29yZGlvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYWNjb3JkaW9uJztcclxuaW1wb3J0IHsgRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2Ryb3Bkb3duJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IFRhYmxhR2VuZXJhbENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvY29tcG9uZW50ZXMvdGFibGEtZ2VuZXJhbC90YWJsYS1nZW5lcmFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbHRyb0dlbmVyYWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2NvbXBvbmVudGVzL2ZpbHRyby1nZW5lcmFsL2ZpbHRyby1nZW5lcmFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNpb3MvbWVudS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3BsaXRCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3NwbGl0YnV0dG9uJztcclxuaW1wb3J0IHsgVGFiVmlld01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFidmlldyc7XHJcbmltcG9ydCB7IFN0ZXBzTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zdGVwcyc7XHJcbmltcG9ydCB7IFBvcHVwVGFibGFzRnVlbnRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcG9wdXBzL3BvcHVwLXRhYmxhcy1mdWVudGUvcG9wdXAtdGFibGFzLWZ1ZW50ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDaGVja2JveE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcclxuaW1wb3J0IHsgUmVwb3J0ZUVudHJhZGFDb25zdGFudGVzIH0gZnJvbSAnLi4vLi4vLi4vc2VndXJpZGFkL2NvbnN0YW50ZXMvUmVwb3J0ZUVudHJhZGFDb25zdGFudGVzJztcclxuaW1wb3J0IHsgUHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Byb2dyZXNzYmFyJztcclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdhcHAtZnVlbnRlLXJlcG9ydGUnLFxyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0aW1wb3J0czogW1Byb2dyZXNzQmFyTW9kdWxlLFRvb2x0aXBNb2R1bGUsQ2hlY2tib3hNb2R1bGUsUG9wdXBUYWJsYXNGdWVudGVDb21wb25lbnQsU3RlcHNNb2R1bGUsQ29tbW9uTW9kdWxlLFRhYlZpZXdNb2R1bGUsU3BsaXRCdXR0b25Nb2R1bGUsTmdJZixUcmFuc2xhdGVNb2R1bGUsIElucHV0VGV4dE1vZHVsZSxDb21tb25Nb2R1bGUsIEFjY29yZGlvbk1vZHVsZSwgRHJvcGRvd25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBUYWJsZU1vZHVsZSwgVGFibGFHZW5lcmFsQ29tcG9uZW50LCBGaWx0cm9HZW5lcmFsQ29tcG9uZW50LCBCdXR0b25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEdlbmVyYWxQaXBlLCBJbnB1dFRleHRhcmVhTW9kdWxlLCBDb25maXJtUG9wdXBNb2R1bGUsIEJ1dHRvbk1vZHVsZV0sXHJcblx0cHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2UsQ29uZmlybWF0aW9uU2VydmljZV0sXHJcblx0dGVtcGxhdGVVcmw6ICcuL2Z1ZW50ZS1yZXBvcnRlLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybDogJy4vZnVlbnRlLXJlcG9ydGUuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGdWVudGVSZXBvcnRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcblx0cHVibGljIGZ1ZW50ZTogRnVlbnRlRGF0b01vZGVsID0gbmV3IEZ1ZW50ZURhdG9Nb2RlbCgpO1xyXG5cdHB1YmxpYyB2aXN0YVZpc3VhbGl6YXI6IHN0cmluZ1xyXG5cdHB1YmxpYyB0YWJsYXNGcm9tOiBUYWJsYUZyb21Nb2RlbFtdID0gW107IC8vIGZyb20gVGFibGFGcm9tXHJcblx0cHVibGljIGpvaW5zRnJvbTogSm9pbkZyb21Nb2RlbFtdID0gW107ICAgLy9mcm9tIEpvaW5Gcm9tIFxyXG5cdHB1YmxpYyBjb2x1bW5hczogUmVwb3J0ZUNvbHVtbmFNb2RlbFtdID0gW107XHJcblx0cHVibGljIGxpc3RhQ29sdW1uYXM6IGFueVtdID0gW107XHJcblx0cHVibGljIGxpc3RhSm9pbjogYW55W10gPSBbXTtcclxuXHRwdWJsaWMgY29sMTogc3RyaW5nO1xyXG5cdHB1YmxpYyBjb2wyOiBzdHJpbmc7XHJcblx0cHVibGljIGNhbXBvczogQ29sdW1uYUZ1ZW50ZU1vZGVsW10gPSBbXTtcclxuXHRwdWJsaWMgY2FtcG9zU2VsZWNjaW9uYXI6IENvbHVtbmFXcmFwZXJNb2RlbFtdID0gW107XHJcblx0cHVibGljIG1vc3RyYXJTZWxlY2Npb25hcjogYm9vbGVhbjtcclxuXHRwdWJsaWMgY2FtcG9Gb3JtdWxhOiBDb2x1bW5hRnVlbnRlTW9kZWwgPSBuZXcgQ29sdW1uYUZ1ZW50ZU1vZGVsKCk7XHJcblx0cHVibGljIGFjdHVhbDogbnVtYmVyO1xyXG5cdHB1YmxpYyB0YWJQcmluY2lwYWw6IG51bWJlcjtcclxuXHRwdWJsaWMgYmFzaWNvOiBib29sZWFuO1xyXG5cdHB1YmxpYyBzZWxlY2Npb25HZW5lcmFsOiBib29sZWFuO1xyXG5cdHB1YmxpYyBmb3JhbmVhczogYW55W10gPSBbXTtcclxuXHRwdWJsaWMgZGVzY3JpcGNpb246IHN0cmluZztcclxuXHRwdWJsaWMgcXVlcnk6IHN0cmluZztcclxuXHRwdWJsaWMgcGFnaW5hZG9yOiBGdWVudGVEYXRvTW9kZWxbXSA9IFtdO1xyXG5cdHB1YmxpYyBmaWx0cm86IEZ1ZW50ZURhdG9Nb2RlbCA9IG5ldyBGdWVudGVEYXRvTW9kZWwoKTtcclxuXHRwdWJsaWMgcGFnaW5hdG9yID0ge1xyXG5cdFx0cm93czogMTAsXHJcblx0XHR0b3RhbFJlY29yZHM6IDAsXHJcblx0fTtcclxuXHRwdWJsaWMgY29sdW1ucyA6IGFueVtdID0gW107XHJcbiAgXHRwdWJsaWMgZmlsdGVycyA6IGFueVtdID0gW107XHJcblx0cHVibGljIGxvYWRpbmcgOiBib29sZWFuO1xyXG5cdHB1YmxpYyBtZW51OiBNZW51SXRlbVtdID0gW107XHJcblx0cHVibGljIGl0ZW1zOiBNZW51SXRlbVtdID0gW107XHJcblx0cHVibGljIG1hcGFNZW5zYWplczogTWFwPG51bWJlcixzdHJpbmc+ID0gbmV3IE1hcDxudW1iZXIsc3RyaW5nPigpO1xyXG5cdEBWaWV3Q2hpbGQoJ3BvcHVwVGFibGFzRnVlbnRlVUknKSBwb3B1cFRhYmxhc0Z1ZW50ZVVJOiBQb3B1cFRhYmxhc0Z1ZW50ZUNvbXBvbmVudDtcclxuXHRwdWJsaWMgdGlwb3NEYXRvID0gIFJlcG9ydGVFbnRyYWRhQ29uc3RhbnRlcy50aXBvRGF0b1xyXG5cdHB1YmxpYyBjbGlja0d1YXJkYXI6IGJvb2xlYW47XHJcblx0cHVibGljIHZlck51ZXZvSm9pbjogYm9vbGVhbjtcclxuXHRwdWJsaWMgYWN0aXZlSW5kZXg6IG51bWJlciA9IDA7XHJcblx0cHVibGljIGNhcmdhclBhc286IGJvb2xlYW47XHJcblxyXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLHByaXZhdGUgbm90aWZpY2F0aW9uQnVzU2VydmljZTogVG9hc3RTZXJ2aWNlLCBwcml2YXRlIHJlcG9ydGVzU3ZjOiBSZXBvcnRlc1NlcnZpY2UsIHByaXZhdGUgZ2VuZXJhbFN2YzogR2VuZXJhbFNlcnZpY2UsIHB1YmxpYyB1dGlsc1NlcnZpY2U6IFV0aWxzU2VydmljZSwgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLCBwcml2YXRlIGdlbmVyYWxQaXBlOiBHZW5lcmFsUGlwZSkgeyB9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5saXN0YUNvbHVtbmFzID0gW107XHJcblx0XHR0aGlzLmNhbXBvcyA9IFtdO1xyXG5cdFx0dGhpcy5saXN0YUpvaW4gPSBbXTtcclxuXHRcdHRoaXMuY29sdW1uYXMgPSBbXTtcclxuXHRcdHRoaXMudGFibGFzRnJvbSA9IFtdO1xyXG5cdFx0dGhpcy5jYW1wb3NTZWxlY2Npb25hciA9IFtdO1xyXG5cdFx0dGhpcy5qb2luc0Zyb20gPSBbXTtcclxuXHRcdHRoaXMuYWN0dWFsID0gMDtcclxuXHRcdHRoaXMubWVudVNlcnZpY2Uuc2V0QnJlYWRjcnVtYihbeyBsYWJlbDogJ0Z1ZW50ZSBSZXBvcnRlJyB9XSk7XHJcblx0XHR0aGlzLmNvbHVtbnMgPSBbXHJcblx0XHQgIHtcclxuXHRcdFx0ZmllbGQ6ICAnZGVzY3JpcGNpb24nLFxyXG5cdFx0XHRoZWFkZXI6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdkZXNjcmlwY2lvbicpLFxyXG5cdFx0XHR3aWR0aDogMTAwLFxyXG5cdFx0ICB9LFxyXG5cdFx0XTtcclxuXHRcdHRoaXMuZmlsdGVycyA9IFtcclxuXHRcdCAge1xyXG5cdFx0XHRmaWVsZDogJ2Rlc2NyaXBjaW9uJyxcclxuXHRcdFx0aGVhZGVyOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZGVzY3JpcGNpb24nKSxcclxuXHRcdFx0bWF0Y2hNb2RlOiAnY29udGFpbnMnLFxyXG5cdFx0ICB9XHJcblx0XHRdO1xyXG5cdFx0dGhpcy5pbml0U3RlcCgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIGxvYWQoZXZlbnQpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMubG9hZGluZyA9dHJ1ZTtcclxuXHRcdFx0dGhpcy5jb2xvY2FyRmlsdHJvKCk7XHJcblx0XHRcdHRoaXMuZmlsdHJvLnBhZ2luYWNpb25SZWdpc3Ryb0luaWNpYWwgPSBldmVudD8uZmlyc3QgIT0gbnVsbCA/IGV2ZW50Py5maXJzdCA6IDAsXHJcblx0XHRcdFx0dGhpcy5maWx0cm8ucGFnaW5hY2lvblJlZ2lzdHJvRmluYWwgPSBldmVudD8ucm93cyAhPSBudWxsID8gZXZlbnQ/LnJvd3MgOiAxMCxcclxuXHRcdFx0XHR0aGlzLnBhZ2luYWRvciA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuY29uc3VsdGFyRnVlbnRlRGF0byh0aGlzLmZpbHRybykudG9Qcm9taXNlKCk7XHJcblx0XHRcdHRoaXMucGFnaW5hdG9yLnRvdGFsUmVjb3JkcyA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuY2FudGlkYWRGdWVudGVEYXRvKHRoaXMuZmlsdHJvKS50b1Byb21pc2UoKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHRcdHRoaXMubG9hZGluZyA9ZmFsc2U7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgY29sb2NhckZpbHRybygpIHtcclxuXHRcdHRoaXMuZmlsdHJvLm9yaWdlbiA9IChcIkZcIik7XHJcblx0XHR0aGlzLmZpbHRyby5kZXNjcmlwY2lvbiA9IChudWxsKTtcclxuXHRcdGlmICh0aGlzLnV0aWxzU2VydmljZS5pc05vdEJsYW5rKHRoaXMuZGVzY3JpcGNpb24pKSB7XHJcblx0XHRcdHRoaXMuZmlsdHJvLmRlc2NyaXBjaW9uID0gKENvbnN0YW50ZXNHZW5lcmFsZXMuUE9SQ0VOVEFKRSArIHRoaXMuZGVzY3JpcGNpb24gKyBDb25zdGFudGVzR2VuZXJhbGVzLlBPUkNFTlRBSkUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdHB1YmxpYyBsaW1waWFyQ2FtcG9zKCkge1xyXG5cdFx0dGhpcy5kZXNjcmlwY2lvbiA9IG51bGw7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgc2lndWllbnRlKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKHRoaXMudmFsaWRhcldpemFyZCgpKSB7XHJcblx0XHRcdFx0dGhpcy5jYXJnYXJQYXNvID0gdHJ1ZTtcclxuXHRcdFx0XHRpZiAodGhpcy5hY3R1YWwgPCAzKSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5hY3R1YWwgPT0gMCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmZvcmFuZWFzID0gW107XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLnRhYmxhc0Zyb20ubGVuZ3RoID09IDApIHsgLy8gTm8gc2VsZWNjaW9ubyBuaW5ndW5hIHRhYmxhXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiRGViZSBzZWxlY2Npb25hciBhbCBtZW5vcyB1biBvYmpldG8uXCIpO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuY2FyZ2FyUGFzbyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLnRhYmxhc0Zyb20ubGVuZ3RoID09IDEpIHsgLy8gU29sbyBzZWxlY2Npb25vIHVuYSwgcG9yIGVzbyBubyBoYXkgcXVlIGdlbmVyYXIgam9pbnMuXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5hY3R1YWwrKztcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgbm9tYnJlc1RhYmxhcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IHRhYmxhIG9mIHRoaXMudGFibGFzRnJvbSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCFub21icmVzVGFibGFzLmluY2x1ZGVzKHRhYmxhLnRhYmxhKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRub21icmVzVGFibGFzLnB1c2godGFibGEudGFibGEpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZvcmFuZWFzID0gW107XHJcblx0XHRcdFx0XHRcdFx0Ly9MaXN0PExsYXZlRm9yYW5lYT4gXHJcblx0XHRcdFx0XHRcdFx0bGV0IGxsYXZlczogTGxhdmVGb3JhbmVhTW9kZWxbXSA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuZ2V0TGxhdmVzKG5vbWJyZXNUYWJsYXMpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50YWJsYXNGcm9tLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMudGFibGFzRnJvbS5sZW5ndGg7IGorKykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JhbmVhIG9mIGxsYXZlcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChmb3JhbmVhLnRhYmxhMSA9PSAodGhpcy50YWJsYXNGcm9tW2ldLnRhYmxhKSAmJiBmb3JhbmVhLnRhYmxhMiA9PSAodGhpcy50YWJsYXNGcm9tW2pdLnRhYmxhKSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IG51ZXZvOiBGb3JlaW5nV3JhcGVyTW9kZWwgPSBuZXcgRm9yZWluZ1dyYXBlck1vZGVsKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRudWV2by5hbGlhczEgPSAodGhpcy50YWJsYXNGcm9tW2ldLmFsaWFzKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG51ZXZvLmFsaWFzMiA9ICh0aGlzLnRhYmxhc0Zyb21bal0uYWxpYXMpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bnVldm8ubGxhdmUgPSAoZm9yYW5lYSk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvcmFuZWFzLnB1c2gobnVldm8pO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8vIENhcmdvIGxhcyBjb2x1bW5hcyBwYXJhIGxvcyBzaWd1aWVudGVzIHByb2Nlc29zLlxyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5hcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxpc3RhQ29sdW1uYXMgPSBbXTtcclxuXHRcdFx0XHRcdFx0dGhpcy5jYW1wb3NTZWxlY2Npb25hciA9IFtdO1xyXG5cclxuXHRcdFx0XHRcdFx0Zm9yIChsZXQgZnJvbSBvZiB0aGlzLnRhYmxhc0Zyb20pIHtcclxuXHRcdFx0XHRcdFx0XHQvL1JlcG9ydGVDb2x1bW5hRFRPIFxyXG5cdFx0XHRcdFx0XHRcdGxldCB0YSA9IG5ldyBSZXBvcnRlQ29sdW1uYU1vZGVsKCk7XHJcblx0XHRcdFx0XHRcdFx0dGEucmVwb3J0ZUZ1ZW50ZSA9IChmcm9tLnRhYmxhKTtcclxuXHRcdFx0XHRcdFx0XHQvL0xpc3Q8UmVwb3J0ZUNvbHVtbmFEVE8+IFxyXG5cdFx0XHRcdFx0XHRcdGxldCBudWV2YXM6IFJlcG9ydGVDb2x1bW5hTW9kZWxbXSA9IGF3YWl0IHRoaXMuZ2VuZXJhbFN2Yy5xdWVyeUZvckxpc3QobmV3IEdlbmVyYWxNb2RlbCgnUmVwb3J0ZUNvbHVtbmFEVE8nLCAnUmVwb3J0ZXMuY29uc3VsdGFyQ29sdW1uYXMnLCBmYWxzZSwgdGEpKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmNhcmdhckxpc3Rhc0NvbHVtbmFzKG51ZXZhcywgZnJvbS5hbGlhcyk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmFjdHVhbCsrO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnRlcm1pbmFyUGFzb3MoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5jYXJnYXJQYXNvID0gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdFx0dGhpcy5jYXJnYXJQYXNvID0gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGFzeW5jIGNhcmdhckxpc3Rhc0NvbHVtbmFzKG51ZXZhczogUmVwb3J0ZUNvbHVtbmFNb2RlbFtdLCBhbGlhczogc3RyaW5nKSB7XHJcblx0XHRmb3IgKGxldCBjb2wgb2YgbnVldmFzKSB7XHJcblx0XHRcdGNvbC5yZXBvcnRlRnVlbnRlID0gKGFsaWFzKTtcclxuXHRcdFx0dGhpcy5jb2x1bW5hcy5wdXNoKGNvbCk7XHJcblx0XHRcdHRoaXMubGlzdGFDb2x1bW5hcy5wdXNoKHsgdmFsdWU6IGNvbC5yZXBvcnRlRnVlbnRlICsgJy4nICsgY29sLm5vbWJyZSwgbGFiZWw6IGNvbC5yZXBvcnRlRnVlbnRlICsgJy4nICsgY29sLm5vbWJyZSB9KTtcclxuXHRcdFx0bGV0IGNhbXBvID0gbmV3IENvbHVtbmFXcmFwZXJNb2RlbCgpO1xyXG5cdFx0XHRjYW1wby5jb2x1bW5hID0gY29sO1xyXG5cdFx0XHRjYW1wby5hbGlhcyA9IGNvbC5ub21icmU7XHJcblx0XHRcdHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIucHVzaChjYW1wbyk7XHJcblx0XHR9XHJcblx0XHRjb25zb2xlLmxvZygnY2FtcG9zU2VsZWNjaW9uYXInLHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpO1xyXG5cdFx0XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgdGVybWluYXJQYXNvcygpIHtcclxuXHRcdGxldCBjYW1wb3NTcWwgPSBcIlwiO1xyXG5cdFx0bGV0IGkgPSAwO1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpIHtcclxuXHRcdFx0aWYgKGNvbC5zZWxlY2Npb25hZG8pIHtcclxuXHRcdFx0XHRjYW1wb3NTcWwgKz0gKGkgPT0gMCA/IFwiXCIgOiBcIixcIikgKyBjb2wuY29sdW1uYS5ub21icmUgKyBcIiBhcyBcIiArIGNvbC5hbGlhcztcclxuXHRcdFx0XHRpKys7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmZ1ZW50ZS53aGVyZUpvaW4gPSAodGhpcy5nZW5lcmFyU3FsSm9pbigpKTtcclxuXHRcdHRoaXMuZnVlbnRlLmZyb21TcWwgPSAodGhpcy5nZW5lcmFyU3FsRnJvbSgpKTtcclxuXHRcdGxldCB3aGVyZSA9IFwiXCI7XHJcblx0XHRsZXQgZXN0YUJsYW5jb1doZXJlSm9pbjogYm9vbGVhbiA9IHRoaXMuZnVlbnRlLndoZXJlSm9pbiA9PSBudWxsIHx8IFwiXCIgPT0gKHRoaXMuZnVlbnRlLndoZXJlSm9pbik7XHJcblx0XHRsZXQgZXN0YUJsYW5jb1doZXJlQWRpY2lvbmFsOiBib29sZWFuID0gdGhpcy5mdWVudGUud2hlcmVBZGljaW9uYWwgPT0gbnVsbCB8fCBcIlwiID09ICh0aGlzLmZ1ZW50ZS53aGVyZUFkaWNpb25hbCk7XHJcblx0XHRpZiAoIWVzdGFCbGFuY29XaGVyZUpvaW4gfHwgIWVzdGFCbGFuY29XaGVyZUFkaWNpb25hbCkge1xyXG5cdFx0XHR3aGVyZSA9IFwiIFxcbldIRVJFIFwiO1xyXG5cdFx0XHRpZiAoIWVzdGFCbGFuY29XaGVyZUpvaW4gJiYgIWVzdGFCbGFuY29XaGVyZUFkaWNpb25hbCkge1xyXG5cdFx0XHRcdHdoZXJlICs9IHRoaXMuZnVlbnRlLndoZXJlSm9pbiArIFwiIEFORCBcXG4oXCIgKyB0aGlzLmZ1ZW50ZS53aGVyZUFkaWNpb25hbCArIFwiKVwiO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCFlc3RhQmxhbmNvV2hlcmVKb2luKSB7XHJcblx0XHRcdFx0d2hlcmUgKz0gdGhpcy5mdWVudGUud2hlcmVKb2luO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHdoZXJlICs9IHRoaXMuZnVlbnRlLndoZXJlQWRpY2lvbmFsO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHR0cnkge1xyXG5cdFx0XHRsZXQgc3FsID0gXCJTRUxFQ1QgXFxuXCIgKyBjYW1wb3NTcWwgKyBcIiBcXG5GUk9NIFxcblwiICsgdGhpcy5mdWVudGUuZnJvbVNxbCArIHdoZXJlO1xyXG5cdFx0XHRhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLnZhbGlkYXJRdWVyeShzcWwpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZS5xdWVyeSA9IChzcWwpO1xyXG5cdFx0XHR0aGlzLnF1ZXJ5ID0gc3FsO1xyXG5cdFx0XHR0aGlzLnRhYlByaW5jaXBhbCA9IDA7XHJcblx0XHRcdHRoaXMuY29uc3RydWlyQ29sdW1uYXMoKTtcclxuXHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKCdRdWVyeSBjcmVhZGEgc2F0aXNmYWN0b3JpYW1lbnRlLicpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGFzeW5jIGFkaWNpb25hckZvcmFuZWEoZXZlbnRvKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHQvL0ZvcmVpbmdXcmFwZXIgXHJcblx0XHRcdGxldCBmb3JhbmVhOiBGb3JlaW5nV3JhcGVyTW9kZWwgPSBldmVudG8uZGF0YTtcclxuXHRcdFx0Zm9yIChsZXQgcmVsIG9mIGZvcmFuZWEubGxhdmUucmVsYWNpb25lcykge1xyXG5cdFx0XHRcdGxldCBwYXIgPSByZWwuc3BsaXQoXCI6XCIpO1xyXG5cdFx0XHRcdGxldCBqb2luID0gbmV3IEpvaW5Gcm9tTW9kZWwoKTtcclxuXHRcdFx0XHRqb2luLmNvbHVtbmExID0gKGZvcmFuZWEuYWxpYXMxICsgXCIuXCIgKyBwYXJbMF0pO1xyXG5cdFx0XHRcdGpvaW4uY29sdW1uYTIgPSAoZm9yYW5lYS5hbGlhczIgKyBcIi5cIiArIHBhclsxXSk7XHJcblx0XHRcdFx0aWYodGhpcy5qb2luc0Zyb20uc29tZShkYXRhID0+IGRhdGEuY29sdW1uYTEgPT09IGpvaW4uY29sdW1uYTEgJiYgZGF0YS5jb2x1bW5hMiA9PT0gam9pbi5jb2x1bW5hMikpe1xyXG5cdFx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dXYXJuaW5nKCdSZWdpc3RybyB5YSBzZSBlbmN1ZW50cmEgYXNvY2lhZG8uJylcclxuXHRcdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHRcdHRoaXMuam9pbnNGcm9tLnB1c2goam9pbik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdFxyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgZWxpbWluYXIoKSB7XHJcblx0XHR0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcblx0XHRcdHRhcmdldDogZXZlbnQudGFyZ2V0LFxyXG5cdFx0XHRtZXNzYWdlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbWVuc2FqZV9hbGVydGEnKSxcclxuXHRcdFx0aWNvbjogJ2NvbmZpcm1hcicsXHJcblx0XHRcdGFjY2VwdDogKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuc2V0UmVzcHVlc3RhKHRydWUpXHJcblx0XHRcdH0sXHJcblx0XHRcdHJlamVjdDogKCkgPT4ge1xyXG5cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgc2V0UmVzcHVlc3RhKHJlc3B1ZXN0YTogYm9vbGVhbikge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0aWYgKHJlc3B1ZXN0YSkge1xyXG5cdFx0XHRcdHRoaXMucmVwb3J0ZXNTdmMuZWxpbWluYXJGdWVudGVEYXRvc0Nvbkhpam9zKHRoaXMuZnVlbnRlKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHR0aGlzLmZ1ZW50ZSA9IG51bGw7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiTGEgZnVlbnRlIGhhIHNpZG8gZWxpbWluYWRhLlwiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGFudGVyaW9yKCkge1xyXG5cdFx0aWYgKHRoaXMuYWN0dWFsID4gMCl7XHJcblx0XHRpZih0aGlzLmFjdHVhbCA9PSAyICYmIHRoaXMudGFibGFzRnJvbS5sZW5ndGggPT0gMSl7XHJcblx0XHRcdHRoaXMuYWN0dWFsID0gMDtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHR0aGlzLmFjdHVhbC0tO1xyXG5cdFx0fVxyXG5cdFx0fVxyXG5cdFx0XHRcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhc3luYyB2YWxpZGFyUXVlcnkoKSB7XHJcblx0XHR0cnkge1xyXG5cclxuXHRcdFx0aWYgKHRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJUZXh0b1NRTCh0aGlzLnF1ZXJ5LCB0cnVlLCB0cnVlLCA4MDAwLCB0cnVlKSkge1xyXG5cdFx0XHRcdHRoaXMucmVwb3J0ZXNTdmMudmFsaWRhclF1ZXJ5KHRoaXMucXVlcnkpO1xyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIkVsIHF1ZXJ5IGVzdGEgY29ycmVjdG8uXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdC8vVmFsaWRhZG9yLmFkaWNpb25hck1lbnNhamUoXCJmdWVudGVGb3JtOnRhYjpxdWVyeVwiLCBlLmdldE1lc3NhZ2UoKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYWRpY2lvbmFySm9pbigpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICh0aGlzLmNvbDEgIT0gbnVsbCAmJiB0aGlzLmNvbDIgIT0gbnVsbCkge1xyXG5cdFx0XHRcdC8vIFRPRE86IEZhbHRhIHZhbGlkYXIgZWwgdGlwb1xyXG5cdFx0XHRcdGxldCBudWV2byA9IG5ldyBKb2luRnJvbU1vZGVsKCk7XHJcblx0XHRcdFx0bnVldm8uY29sdW1uYTEgPSAodGhpcy5jb2wxKTtcclxuXHRcdFx0XHRudWV2by5jb2x1bW5hMiA9ICh0aGlzLmNvbDIpO1xyXG5cdFx0XHRcdHRoaXMuam9pbnNGcm9tLnB1c2gobnVldm8pO1xyXG5cdFx0XHRcdHRoaXMuY2FuY2VsYXJOdWV2b0pvaW4oKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd1dhcm5pbmcoXCJEZWJlIHNlbGVjY2lvbmFyIGRvcyBjYW1wb3NcIik7XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG51ZXZvSm9pbigpe1xyXG5cdFx0dGhpcy52ZXJOdWV2b0pvaW4gPSB0cnVlO1xyXG5cdFx0dGhpcy5jb2wxID0gICcnO1xyXG5cdFx0dGhpcy5jb2wyID0gJyc7XHJcblx0fVxyXG5cclxuXHRjYW5jZWxhck51ZXZvSm9pbigpe1xyXG5cdFx0dGhpcy52ZXJOdWV2b0pvaW4gPSBmYWxzZTtcclxuXHRcdHRoaXMuY29sMSA9ICAnJztcclxuXHRcdHRoaXMuY29sMiA9ICcnO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGVsaW1pbmFySm9pbihhZSkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Ly9sZXQgIGpvaW4gPSAoSm9pbkZyb20pICgoVUlQYXJhbWV0ZXIpIGFlLmdldENvbXBvbmVudCgpLmZpbmRDb21wb25lbnQoXCJqb2luXCIpKS5nZXRWYWx1ZSgpO1xyXG5cdFx0XHR0aGlzLmpvaW5zRnJvbSA9ICB0aGlzLmpvaW5zRnJvbS5maWx0ZXIoKGRhdGEpID0+IGRhdGEuY29sdW1uYTEgIT09IGFlPy5jb2x1bW5hMSk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZWxpbWluYXJUYWJsYShhZSkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Ly9UYWJsYUZyb20gdGFibGEgPSAoVGFibGFGcm9tKSAoKFVJUGFyYW1ldGVyKSBhZS5nZXRDb21wb25lbnQoKS5maW5kQ29tcG9uZW50KFwidGFibGFcIikpLmdldFZhbHVlKCk7XHJcblx0XHRcdHRoaXMudGFibGFzRnJvbSA9IHRoaXMudGFibGFzRnJvbS5maWx0ZXIoKGRhdGEpID0+IGRhdGEgIT0gYWUpO1xyXG5cdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd1dhcm5pbmcoXCJGYWx0YSBlbGltaW5hciBsYXMgY29sdW1uYXMgZGUgbGEgdGFibGEgPz8/XCIpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIGJ1c2NhclRhYmxhKCkge1xyXG5cdFx0dGhpcy5wb3B1cFRhYmxhc0Z1ZW50ZVVJLmJ1c2NhclRhYmxhKFwiZnVlbnRlVUkudGFibGFTZWxlY2Npb25hZGFcIik7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc2V0VGFibGFTZWxlY2Npb25hZGEodGFibGFTZWxlY2Npb25hZGE6IHN0cmluZykge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0bGV0IHRhYmxhcyA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCB0YWJsYSBvZiB0aGlzLnRhYmxhc0Zyb20pIHtcclxuXHRcdFx0XHRpZiAoIXRhYmxhcy5pbmNsdWRlcyh0YWJsYS50YWJsYSkpIHtcclxuXHRcdFx0XHRcdHRhYmxhcy5wdXNoKHRhYmxhLnRhYmxhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5jYXJnYXJUYWJsYUVuTGlzdGEodGFibGFTZWxlY2Npb25hZGEpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYXJnYXJUYWJsYUVuTGlzdGEodGFibGE6IHN0cmluZykge1xyXG5cdFx0bGV0IHBhciA9IHRhYmxhLnNwbGl0KFwiX1wiKTtcclxuXHRcdGxldCBhbGlhcyA9IHBhclswXTtcclxuXHRcdGxldCBpID0gMTtcclxuXHRcdGxldCB0YWJsYVRlbXAgPSBuZXcgVGFibGFGcm9tTW9kZWwoKVxyXG5cdFx0dGFibGFUZW1wLmFsaWFzID0gYWxpYXM7XHJcblx0XHR3aGlsZSAodGhpcy50YWJsYXNGcm9tLmluY2x1ZGVzKHRhYmxhVGVtcCkpIHtcclxuXHRcdFx0YWxpYXMgPSB0YWJsYSArIChpKyspO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHRlbSA9IG5ldyBUYWJsYUZyb21Nb2RlbCgpO1xyXG5cdFx0dGVtLnRhYmxhID0gdGFibGE7XHJcblx0XHR0ZW0uYWxpYXMgPSBhbGlhcztcclxuXHRcdHRoaXMudGFibGFzRnJvbS5wdXNoKHRlbSk7XHJcblx0XHRyZXR1cm4gYWxpYXM7XHJcblx0fVxyXG5cclxuXHJcblxyXG5cdHB1YmxpYyBjYW1iaW9Kb2luKGNlKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHR0aGlzLmxpc3RhSm9pbiA9IFtdO1xyXG5cdFx0XHRsZXQgbnVldm8gPSBjZS52YWx1ZTtcclxuXHRcdFx0aWYgKG51ZXZvICE9IG51bGwpIHtcclxuXHRcdFx0XHQvL1JlcG9ydGVDb2x1bW5hRFRPIFxyXG5cdFx0XHRcdGxldCBhY3Q6IFJlcG9ydGVDb2x1bW5hTW9kZWwgPSBudWxsO1xyXG5cdFx0XHRcdGZvciAobGV0IGNvbCBvZiB0aGlzLmNvbHVtbmFzKSB7XHJcblx0XHRcdFx0XHRpZiAobnVldm8gPT0oY29sLnJlcG9ydGVGdWVudGUgKyBcIi5cIiArIGNvbC5ub21icmUpKSB7XHJcblx0XHRcdFx0XHRcdGFjdCA9IGNvbDtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGZvciAobGV0IGNvbCBvZiB0aGlzLmNvbHVtbmFzKSB7XHJcblx0XHRcdFx0XHRpZiAoIWNvbC5yZXBvcnRlRnVlbnRlLnN0YXJ0c1dpdGgoYWN0LnJlcG9ydGVGdWVudGUpICYmIGNvbC50aXBvRGF0byA9PSAoYWN0LnRpcG9EYXRvKSAmJiBjb2wub3JkZW4gPT0gKGFjdC5vcmRlbikpIHtcclxuXHRcdFx0XHRcdFx0bGV0IHZhbCA9IGNvbC5yZXBvcnRlRnVlbnRlICsgXCIuXCIgKyBjb2wubm9tYnJlO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxpc3RhSm9pbi5wdXNoKHsgdmFsdWU6IHZhbCwgbGFiZWw6IHZhbCB9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBlZGl0YXJDYW1wbyhldmVudG8pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGxldCBjb2w6IENvbHVtbmFGdWVudGVNb2RlbCA9IGV2ZW50by5kYXRhO1xyXG5cdFx0XHR0aGlzLmNhbXBvRm9ybXVsYSA9IGNvbDtcclxuXHRcdFx0bGV0IHZhcnMgPSBbXTtcclxuXHRcdFx0Zm9yIChsZXQgY2FtcG8gb2YgdGhpcy5jYW1wb3MpIHtcclxuXHRcdFx0XHRsZXQgdmFyMTogYW55O1xyXG5cdFx0XHRcdHZhcjEubm9tYnJlID0gKGNhbXBvLm5vbWJyZSk7XHJcblx0XHRcdFx0dmFyMS50aXBvID0gKGNhbXBvLnRpcG9EYXRvKTtcclxuXHRcdFx0XHR2YXJzLnB1c2godmFyMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9nZXRCZWFuKEVkaXRvckZvcm11bGFVSS5jbGFzcykuZWRpdGFyKGNvbC5nZXRTaW50YXhpcygpLCBcImZ1ZW50ZVVJLmZvcm11bGFcIiwgdmFycyk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZWRpdGFyV2hlcmUoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRsZXQgdmFycyA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jb2x1bW5hcykge1xyXG5cdFx0XHRcdC8vVmFyaWFibGVGb3JtdWxhIFxyXG5cdFx0XHRcdGxldCB2YXIxO1xyXG5cdFx0XHRcdHZhcjEubm9tYnJlID0gKGNvbC5yZXBvcnRlRnVlbnRlICsgXCIuXCIgKyBjb2wubm9tYnJlKTtcclxuXHRcdFx0XHR2YXIxLnRpcG8oY29sLnRpcG9EYXRvKTtcclxuXHRcdFx0XHR2YXJzLnB1c2godmFyMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly9nZXRCZWFuKEVkaXRvckZvcm11bGFVSS5jbGFzcykuZWRpdGFyKGZ1ZW50ZS5nZXRXaGVyZUFkaWNpb25hbCgpLCBcImZ1ZW50ZVVJLmZ1ZW50ZS53aGVyZUFkaWNpb25hbFwiLCB2YXJzKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRGb3JtdWxhKGZvcm11bGEpIHtcclxuXHRcdGlmICh0aGlzLmNhbXBvRm9ybXVsYSAhPSBudWxsKSB7XHJcblx0XHRcdHRoaXMuY2FtcG9Gb3JtdWxhLnNpbnRheGlzID0gKGZvcm11bGEpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5jYW1wb0Zvcm11bGEgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFkaWNpb25hckNvbHVtbmFzKCkge1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIpIHtcclxuXHRcdFx0Y29sLnNlbGVjY2lvbmFkbyA9IChmYWxzZSk7XHJcblx0XHR9XHJcblx0XHR0aGlzLm1vc3RyYXJTZWxlY2Npb25hciA9IHRydWU7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYWdyZWdhclNlbGVjY2lvbmFkb3MoKSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jYW1wb3NTZWxlY2Npb25hcikge1xyXG5cdFx0XHRcdGlmIChjb2wuc2VsZWNjaW9uYWRvKSB7XHJcblx0XHRcdFx0XHQvL0NvbHVtbmFGdWVudGVEVE8gXHJcblx0XHRcdFx0XHRsZXQgY2FtcG8gPSBuZXcgQ29sdW1uYUZ1ZW50ZU1vZGVsKCk7XHJcblx0XHRcdFx0XHRjYW1wby5mdWVudGVEYXRvID0gKHRoaXMuZnVlbnRlLmxsYXZlKTtcclxuXHRcdFx0XHRcdGNhbXBvLm5vbWJyZSA9IChjb2wuY29sdW1uYS5ub21icmUpO1xyXG5cdFx0XHRcdFx0Y2FtcG8uc2ludGF4aXMgPSAoY29sLmNvbHVtbmEubm9tYnJlKTtcclxuXHRcdFx0XHRcdHRoaXMuY2FtcG9zLnB1c2goY2FtcG8pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLm9jdWx0YXJTZWxlY2Npb25hcigpO1xyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHVibGljIG9jdWx0YXJTZWxlY2Npb25hcigpIHtcclxuXHRcdHRoaXMubW9zdHJhclNlbGVjY2lvbmFyID0gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgdmVyRGV0YWxsZShldmVudG8pIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ21hbnRlbmltaWVudG8nO1xyXG5cdFx0XHRsZXQgZnVlbnRlRGF0b0RUTyA9IGV2ZW50bztcclxuXHRcdFx0dGhpcy5mdWVudGUgPSBuZXcgRnVlbnRlRGF0b01vZGVsKCk7XHJcblx0XHRcdHRoaXMuZnVlbnRlLmxsYXZlID0gKGZ1ZW50ZURhdG9EVE8ubGxhdmUpO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZSA9IGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuY29uc3VsdGFyVW5pY2FGdWVudGVEYXRvKHRoaXMuZnVlbnRlKS50b1Byb21pc2UoKTtcclxuXHRcdFx0aWYgKHRoaXMuZnVlbnRlLnF1ZXJ5MiAhPSBudWxsKSB7XHJcblx0XHRcdFx0dGhpcy5xdWVyeSA9IHRoaXMuZnVlbnRlLnF1ZXJ5ICsgdGhpcy5mdWVudGUucXVlcnkyO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMucXVlcnkgPSB0aGlzLmZ1ZW50ZS5xdWVyeTtcclxuXHRcdFx0fVxyXG5cdFx0XHQvL0NvbHVtbmFGdWVudGVEVE8gXHJcblx0XHRcdGxldCBjb2wgPSBuZXcgQ29sdW1uYUZ1ZW50ZU1vZGVsKCk7XHJcblx0XHRcdGNvbC5mdWVudGVEYXRvID0gKHRoaXMuZnVlbnRlLmxsYXZlKTtcclxuXHRcdFx0dGhpcy5jYW1wb3MgPSBhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmNvbnN1bHRhckNvbHVtbmFzRnVlbnRlKGNvbCkudG9Qcm9taXNlKCk7XHJcblx0XHRcdHRoaXMuYWN0dWFsID0gMDtcclxuXHRcdFx0dGhpcy5tZW51U2VydmljZS5zZXRCcmVhZGNydW1iKFt7IGxhYmVsOiAnRnVlbnRlIFJlcG9ydGUnLCB9LCB7bGFiZWw6ICdNYW50ZW5pbWllbnRvIEZ1ZW50ZSd9XSk7XHJcblx0XHRcdHRoaXMuY2FyZ2FzT3BjaW9uZXMoKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBudWV2bygpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMudmlzdGFWaXN1YWxpemFyID0gJ21hbnRlbmltaWVudG8nO1xyXG5cdFx0XHR0aGlzLmZ1ZW50ZSA9IG5ldyBGdWVudGVEYXRvTW9kZWwoKTtcclxuXHRcdFx0dGhpcy5mdWVudGUub3JpZ2VuID0gKFwiRlwiKTtcclxuXHRcdFx0dGhpcy5jYW1wb3MgPSBudWxsO1xyXG5cdFx0XHR0aGlzLnF1ZXJ5ID0gbnVsbDtcclxuXHRcdFx0dGhpcy50YWJQcmluY2lwYWwgPSAwO1xyXG5cdFx0XHR0aGlzLmFjdHVhbCA9IDA7XHJcblx0XHRcdHRoaXMubWVudVNlcnZpY2Uuc2V0QnJlYWRjcnVtYihbeyBsYWJlbDogJ0Z1ZW50ZSBSZXBvcnRlJywgfSwge2xhYmVsOiAnTWFudGVuaW1pZW50byBGdWVudGUnfV0pO1xyXG5cdFx0XHR0aGlzLmNhcmdhc09wY2lvbmVzKCk7XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRjYXJnYXNPcGNpb25lcygpe1xyXG5cdFx0dGhpcy5tZW51PSBbe2xhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbGlua19lbGltaW5hcicpLCBpY29uOiAnZ2x5cGhpY29ucyBnbHlwaGljb25zLWJpbicsIHZpc2libGU6IHRoaXMuZnVlbnRlLmxsYXZlICE9IG51bGwsIGNvbW1hbmQ6IChldmVudCkgPT4ge3RoaXMuZWxpbWluYXIoKX19LFxyXG5cdFx0e2xhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnbGlua192YWxpZGFyJyksIGljb246ICdnbHlwaGljb25zIGdseXBoaWNvbnMtY2hlY2snLCBjb21tYW5kOiAoZXZlbnQpID0+IHt0aGlzLnZhbGlkYXJRdWVyeSgpfX0sXHJcblx0XHR7bGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdsaW5rX2dlbmVyYXInKSwgaWNvbjogJ2dseXBoaWNvbnMgZ2x5cGhpY29ucy1yZWZyZXNoJyx2aXNpYmxlOiB0aGlzLmZ1ZW50ZS5sbGF2ZSAhPSBudWxsLCBjb21tYW5kOiAoZXZlbnQpID0+IHt0aGlzLmNvbnN0cnVpckNvbHVtbmFzKCl9fSxcclxuXHRcdF1cclxuXHR9XHJcblxyXG5cdHJlZ3Jlc2FyKCl7XHJcblx0XHR0aGlzLnZpc3RhVmlzdWFsaXphciA9IG51bGw7XHJcblx0XHR0aGlzLm5nT25Jbml0KCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHZhbGlkYXIoKTogYm9vbGVhbiB7XHJcblx0XHRsZXQgcmVzID0gdHJ1ZTtcclxuXHRcdHRoaXMuY2xpY2tHdWFyZGFyID0gdHJ1ZTtcclxuXHRcdHJlcyA9IHJlcyAmJiB0aGlzLnV0aWxzU2VydmljZS52YWxpZGFyQ2FtcG9PYmxpZ2F0b3Jpbyh0aGlzLmZ1ZW50ZS5kZXNjcmlwY2lvbik7XHJcblx0XHRyZXMgPSByZXMgJiYgKHRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJUZXh0b1NRTCh0aGlzLnF1ZXJ5LCB0cnVlLCB0cnVlLCA4MDAwLCB0cnVlKSA9PSBudWxsKTtcclxuXHRcdHJldHVybiByZXM7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWdpc3RyYS9hY3R1YWxpemEgbGEgaW5mb3JtYWNpb24gZ2VuZXJhbCBkZSBsYSBmdWVudGUgZGUgZGF0b3NcclxuXHQgKi9cclxuXHRwdWJsaWMgYXN5bmMgZ3VhcmRhcigpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICh0aGlzLnZhbGlkYXIoKSkge1xyXG5cdFx0XHRcdHRoaXMuY2xpY2tHdWFyZGFyID0gZmFsc2U7XHJcblx0XHRcdFx0aWYgKHRoaXMucXVlcnkubGVuZ3RoID4gNDAwMCkge1xyXG5cdFx0XHRcdFx0dGhpcy5mdWVudGUucXVlcnkgPSAodGhpcy5xdWVyeS5zdWJzdHJpbmcoMCwgMzk5OSkpO1xyXG5cdFx0XHRcdFx0dGhpcy5mdWVudGUucXVlcnkyID0gKHRoaXMucXVlcnkuc3Vic3RyaW5nKDM5OTksIHRoaXMucXVlcnkubGVuZ3RoKSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMuZnVlbnRlLnF1ZXJ5ID0gKHRoaXMucXVlcnkpO1xyXG5cdFx0XHRcdFx0dGhpcy5mdWVudGUucXVlcnkyID0gKG51bGwpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKHRoaXMuZnVlbnRlLmxsYXZlID09IG51bGwpIHtcclxuXHRcdFx0XHRcdHRoaXMuZnVlbnRlLmxsYXZlID0gKHRoaXMudXRpbHNTZXJ2aWNlLmdlbmVyYXJMbGF2ZSgpKTtcclxuXHRcdFx0XHRcdGF3YWl0IHRoaXMucmVwb3J0ZXNTdmMuaW5zZXJ0YXJGdWVudGVEYXRvKHRoaXMuZnVlbnRlKS50b1Byb21pc2UoKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5hY3R1YWxpemFyRnVlbnRlRGF0byh0aGlzLmZ1ZW50ZSkudG9Qcm9taXNlKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIkxvcyBjYW1iaW9zIGhhbiBzaWRvIGd1YXJkYWRvc1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGUpO1xyXG5cdFx0fVxyXG5cdH0vL2d1YXJkYXJcclxuXHJcblx0LyoqXHJcblx0ICogUmVnaXN0cmEvYWN0dWFsaXphIGxhcyBjb2x1bW5hcyBnZW5lcmFkb3MgcGFyYSBsYSBmdWVudGUgZGUgZGF0b3MgY29tbyByZWdpc3Ryb3MgZGUgdGlwbyAnQ29sdW1uYUZ1ZW50ZSdcclxuXHQgKi9cclxuXHRwdWJsaWMgYXN5bmMgZ3VhcmRhckNhbXBvcygpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGlmICh0aGlzLmZ1ZW50ZS5sbGF2ZSA9PSBudWxsKSB7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiUG9yIGZhdm9yIGRpbGlnZW5jaWUgcHJpbWVybyBsb3MgZGF0b3MgZGUgbGEgZnVlbnRlXCIpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy52YWxpZGFyQ2FtcG9zKCkpIHtcclxuXHRcdFx0XHRhd2FpdCB0aGlzLnJlcG9ydGVzU3ZjLmFjdHVhbGl6YXJDb2x1bW5hc0Z1ZW50ZSh0aGlzLmZ1ZW50ZSwgdGhpcy5jYW1wb3MpLnRvUHJvbWlzZSgpO1xyXG5cdFx0XHRcdHRoaXMubm90aWZpY2F0aW9uQnVzU2VydmljZS5zaG93SW5mbyhcIlNlIGhhbiBndWFyZGFkbyBsb3MgY2FtcG9zXCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHR9XHJcblx0fS8vZ3VhcmRhckNhbXBvc1xyXG5cclxuXHQvKipcclxuXHQgKiBWZXJpZmljYSBxdWUgbG9zIHZhbG9yZXMgYXNvY2lhZG9zIGEgbG9zIGNhbXBvcyBwYXJhIGxhIGNyZWFjaW9uIGRlIGxhcyBjb2x1bW5hcyBkZSBsYSBmdWVudGUgc2VhbiB2w6FsaWRvc1xyXG5cdCAqIEByZXR1cm4gZmFsc2UgZW4gY2FzbyBkZSBxdWUgbG9zIHZhbG9yZXMgYXNpZ25hZG9zIGEgbG9zIGNhbXBvcyBzZWFuIG51bG9zIG8gbm8gc2VhbiBwYWxhYnJhcyB2w6FsaWRhcyBkZSBhY3VlcmRvIFxyXG5cdCAqIGNvbiBsYXMgY29uZGljaW9uZXMgZGFkYXMgcG9yIFZhbGlkYWRvclV0aWwudmFsaWRhclBhbGFicmEoKSksXHJcblx0ICogZW4gY2FzbyBjb250cmFyaW8gcmV0b3JuYSB0cnVlXHJcblx0ICovXHJcblx0cHJpdmF0ZSB2YWxpZGFyQ2FtcG9zKCkge1xyXG5cdFx0Zm9yIChsZXQgY29sIG9mIHRoaXMuY2FtcG9zKSB7XHJcblx0XHRcdGlmIChjb2wubm9tYnJlID09IG51bGwgfHwgIXRoaXMudXRpbHNTZXJ2aWNlLnZhbGlkYXJQYWxhYnJhKGNvbC5ub21icmUpKSB7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiTm9tYnJlIG5vIHZhbGlkbyAoXCIgKyBjb2wubm9tYnJlICsgXCIpXCIpO1xyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RydXllIGxhcyBjb2x1bW5hcyBkZSBsYSBmdWVudGUgZGUgZGF0b3MsIGNvbiBiYXNlIGVuIGxvcyBjYW1wb3Mgb2J0ZW5pZG9zIFxyXG5cdCAqIGRlIGxhIGNvbnN1bHRhIFNRTCBhc29jaWFkYVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhc3luYyBjb25zdHJ1aXJDb2x1bW5hcygpIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMuY2FtcG9zID0gYXdhaXQgdGhpcy5yZXBvcnRlc1N2Yy5nZXRDb2x1bW5hc1NxbCh0aGlzLnF1ZXJ5KS50b1Byb21pc2UoKTtcclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdH1cclxuXHR9Ly9jb25zdHJ1aXJDb2x1bW5hc1xyXG5cclxuXHJcblxyXG5cdHByaXZhdGUgdmFsaWRhcldpemFyZCgpIHtcclxuXHRcdGxldCBhbGlhczogc3RyaW5nW10gPSBbXTtcclxuXHRcdGZvciAobGV0IHRhYmxhIG9mIHRoaXMudGFibGFzRnJvbSkge1xyXG5cdFx0XHRpZiAoYWxpYXMuaW5jbHVkZXModGFibGEuYWxpYXMpKSB7XHJcblx0XHRcdFx0dGhpcy5ub3RpZmljYXRpb25CdXNTZXJ2aWNlLnNob3dJbmZvKFwiTm8gc2UgcHVlZGUgcmVwZXRpciBlbCBhbGlhcyBkZSBsYXMgdGFibGFzLlwiKTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YWxpYXMucHVzaCh0YWJsYS5hbGlhcyk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGFsaWFzID0gW107XHJcblx0XHRmb3IgKGxldCBjb2wgb2YgdGhpcy5jYW1wb3NTZWxlY2Npb25hcikge1xyXG5cdFx0XHRpZiAoY29sLnNlbGVjY2lvbmFkbykge1xyXG5cdFx0XHRcdGlmIChhbGlhcy5pbmNsdWRlcyhjb2wuYWxpYXMpKSB7XHJcblx0XHRcdFx0XHR0aGlzLm5vdGlmaWNhdGlvbkJ1c1NlcnZpY2Uuc2hvd0luZm8oXCJObyBzZSBwdWVkZSByZXBldGlyIGVsIGFsaWFzIGRlIGxhcyBjb2x1bW5hcy5cIik7XHJcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGFsaWFzLnB1c2goY29sLmFsaWFzKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2VuZXJhclNxbEZyb20oKSB7XHJcblx0XHRsZXQgcmVzID0gXCJcIjtcclxuXHRcdGxldCBpID0gMDtcclxuXHRcdGZvciAobGV0IHRhYmxhIG9mIHRoaXMudGFibGFzRnJvbSkge1xyXG5cdFx0XHRyZXMgKz0gKGkgPT0gMCA/IFwiXCIgOiBcIixcIikgKyB0YWJsYS50YWJsYSArIFwiIFwiICsgdGFibGEuYWxpYXM7XHJcblx0XHRcdGkrKztcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXM7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdlbmVyYXJTcWxKb2luKCkge1xyXG5cdFx0bGV0IHJlcyA9IFwiXCI7XHJcblx0XHRsZXQgaSA9IDA7XHJcblx0XHRmb3IgKGxldCBqb2luIG9mIHRoaXMuam9pbnNGcm9tKSB7XHJcblx0XHRcdHJlcyArPSAoaSA9PSAwID8gXCJcIiA6IFwiIEFORCBcIikgKyBqb2luLmNvbHVtbmExICsgXCIgPSBcIiArIGpvaW4uY29sdW1uYTI7XHJcblx0XHRcdGkrKztcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXM7XHJcblx0fVxyXG5cclxuXHQvL0lNUExFTUVOVEFDSU9OIFNURVBFUlxyXG5cdGluaXRTdGVwKCl7XHJcblx0XHR0aGlzLm1hcGFNZW5zYWplcy5zZXQoMCwnU2VsZWNjaW9uZSBsYXMgdGFibGFzIG8gdmlzdGFzIGRlIGRvbmRlIGRlc2VhIG9idGVuZXIgbGEgaW5mb3JtYWNpJyt0aGlzLmdlbmVyYWxQaXBlLk9fVElETEVfTUlOKyduLicpXHJcblx0XHR0aGlzLm1hcGFNZW5zYWplcy5zZXQoMSwnSW5kaXF1ZSBkZSBxdScrdGhpcy5nZW5lcmFsUGlwZS5FX1RJTERFX01JTisnIG1hbmVyYSBzZSByZWxhY2lvbmFuIGxvcyBvYmpldG9zIGVudHJlIHMnK3RoaXMuZ2VuZXJhbFBpcGUuSV9USUxERV9NSU4rJy4nKVxyXG5cdFx0dGhpcy5tYXBhTWVuc2FqZXMuc2V0KDIsJ0luZGlxdWUgbG9zIGZpbHRyb3MgYWRpY2lvbmFsZXMgcXVlIGRlc2VlIHJlYWxpemFyIHNvYnJlIGxhIGluZm9ybWFjaScrdGhpcy5nZW5lcmFsUGlwZS5PX1RJRExFX01JTisnbi4nKVxyXG5cdFx0dGhpcy5tYXBhTWVuc2FqZXMuc2V0KDMsJ1NlbGVjY2lvbmUgbG9zIGNhbXBvcyBxdWUgZGVzZWUgdmVyIGVuIGxhIGNvbnN1bHRhLicpXHJcblx0XHR0aGlzLml0ZW1zID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2Zyb20nKSxcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IChldmVudCkgPT4ge2NvbnNvbGUubG9nKGV2ZW50KTt9LFxyXG5cdFx0XHRcdGRpc2FibGVkOiB0cnVlLFxyXG5cdFx0XHRcdHRpdGxlOidTZWxlY2Npb25lIGxhcyB0YWJsYXMgbyB2aXN0YXMgZGUgZG9uZGUgZGVzZWEgb2J0ZW5lciBsYSBpbmZvcm1hY2lvbi4nXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnam9pbicpLFxyXG5cdFx0XHRcdGNvbW1hbmQ6IChldmVudCkgPT4ge2NvbnNvbGUubG9nKGV2ZW50KTt9LFxyXG5cdFx0XHRcdGRpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdJbmRpcXVlIGRlIHF1ZSBtYW5lcmEgc2UgcmVsYWNjaW9uYW4gbG9zIG9iamV0b3MgZW50cmUgc2kuJ1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3doZXJlJyksXHJcblx0XHRcdFx0Y29tbWFuZDogKGV2ZW50KSA9PiB7Y29uc29sZS5sb2coZXZlbnQpO30sXHJcblx0XHRcdFx0ZGlzYWJsZWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB0aXRsZTogJ0luZGlxdWUgbG9zIGZpbHRyb3MgYWRpY2lvbmFsZXMgcXVlIGRlc2VlIHJlYWxpemFyIHNvYnJlIGxhIGluZm9ybWFjaW9uLidcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdjYW1wb3MnKSxcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6IChldmVudCkgPT4ge2NvbnNvbGUubG9nKGV2ZW50KTt9LFxyXG5cdFx0XHRcdGRpc2FibGVkOiB0cnVlLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXTtcclxuXHR9XHJcblxyXG5cdGFjdHVhbGl6YXJTZWxlY2Npb24oYm9vbGVhbm9nZW5lcmFsOiBib29sZWFuKTogdm9pZCB7XHJcblx0XHR0aGlzLmNhbXBvc1NlbGVjY2lvbmFyLmZvckVhY2goKGVsZW1lbnRvKSA9PiB7XHJcblx0XHRcdGVsZW1lbnRvLnNlbGVjY2lvbmFkbyA9IGJvb2xlYW5vZ2VuZXJhbDtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0dG9kb3NTZWxlY2Npb25hZG9zKCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY2FtcG9zU2VsZWNjaW9uYXIuZXZlcnkoZWxlbWVudG8gPT4gZWxlbWVudG8uc2VsZWNjaW9uYWRvKTtcclxuXHR9XHJcblxyXG5cclxufVxyXG4iLCJAaWYodmlzdGFWaXN1YWxpemFyID09IG51bGwpe1xyXG48aDE+e3snZnVlbnRlJyB8IHRyYW5zbGF0ZX19IHt7J3JlcG9ydGUnfCB0cmFuc2xhdGV9fTwvaDE+XHJcbjxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XHJcbiAgICA8YXBwLWZpbHRyby1nZW5lcmFsIFtmaWx0cm9zXT1cImZpbHRlcnNcIiBbZGF0YXRhYmxlXT1cInRhYmxhR2VuZXJhbFwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtZm9ybT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IGF1dG9mb2N1cyB0eXBlPVwidGV4dFwiIGlkPVwiZGVzY3JpcGNpb25cIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwY2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImRlc2NyaXBjaW9uXCI+e3snZmlsdHJvJyB8IHRyYW5zbGF0ZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvYXBwLWZpbHRyby1nZW5lcmFsPlxyXG4gICAgPGJ1dHRvbiBwQnV0dG9uIGxhYmVsPVwie3snbGlua19udWV2bycgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJudWV2bygpXCIgaWNvbj1cInBpIHBpLXBsdXNcIlxyXG4gICAgICAgIGNsYXNzPVwicC1yaXBwbGUgcC1lbGVtZW50IHAtYnV0dG9uIHAtY29tcG9uZW50IHAtYnV0dG9uLXNlY29uZGFyeSBtYi0yXCI+PC9idXR0b24+XHJcbjwvZGl2PlxyXG48YXBwLXRhYmxhLWdlbmVyYWwgI3RhYmxhR2VuZXJhbCBbY29sdW1uc109XCJjb2x1bW5zXCIgW3ZhbHVlXT1cInBhZ2luYWRvclwiIFtyb3dzXT1cInBhZ2luYXRvci5yb3dzXCJcclxuICAgIFt0b3RhbFJlY29yZHNdPVwicGFnaW5hdG9yLnRvdGFsUmVjb3Jkc1wiIChvbkxvYWQpPVwibG9hZCgkZXZlbnQpXCIgKG9uUm93U2VsZWN0KT1cInZlckRldGFsbGUoJGV2ZW50KVwiXHJcbiAgICBbbG9hZGluZ109XCJsb2FkaW5nXCI+PC9hcHAtdGFibGEtZ2VuZXJhbD5cclxufVxyXG5AaWYodmlzdGFWaXN1YWxpemFyICE9IG51bGwpe1xyXG48ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxyXG4gICAgPGgxPnt7J2Z1ZW50ZScgfCB0cmFuc2xhdGV9fSB7eydyZXBvcnRlJ3wgdHJhbnNsYXRlfX08L2gxPlxyXG4gICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgKGNsaWNrKT1cInJlZ3Jlc2FyKClcIiBsYWJlbD1cIlJlZ3Jlc2FyXCIgaWNvbj1cInBpIHBpLWNoZXZyb24tbGVmdFwiXHJcbiAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0IGZvbnQtc2VtaWJvbGRcIj48L2J1dHRvbj5cclxuPC9kaXY+XHJcbjxwLXRhYlZpZXcgWyhhY3RpdmVJbmRleCldPVwidGFiUHJpbmNpcGFsXCI+XHJcbiAgICA8cC10YWJQYW5lbCBoZWFkZXI9XCJ7eyAnZnVlbnRlJ3wgdHJhbnNsYXRlfX1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxyXG4gICAgICAgICAgICAgICAgPGg1PjxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWJvb2tcIj48L2k+e3snZGF0b3MnfCB0cmFuc2xhdGV9fSB7eydiYXNpY29zJ3wgdHJhbnNsYXRlfX08L2g1PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZsdWlkIHAtZm9ybWdyaWQgZ3JpZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBjb2wtMTIgbWQ6Y29sLTEyIGxnOmNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgcElucHV0VGV4dCBhdXRvZm9jdXMgdHlwZT1cInRleHRcIiBpZD1cInBlc29cIiBbKG5nTW9kZWwpXT1cImZ1ZW50ZS5kZXNjcmlwY2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGVzb1wiPnt7J25vbWJyZScgfCB0cmFuc2xhdGV9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtMTIgbGc6Y29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwLWZsb2F0LWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cInctZnVsbFwiIGlkPVwiZmxvYXQtaW5wdXRcIiByb3dzPVwiNVwiIGNvbHM9XCIzMFwiIHBJbnB1dFRleHRhcmVhIFsobmdNb2RlbCldPVwicXVlcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2ZvY3VzIFthdXRvUmVzaXplXT1cInRydWVcIj4gPC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImRlc2NyaXBjaW9uXCI+e3snY29uc3VsdGEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgY2xhc3M9XCJtbC0yIHAtYnV0dG9uIHAtYnV0dG9uLXJhaXNlZFwiIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtZmxvcHB5LXNhdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwie3snbGlua19ndWFyZGFyJyB8IHRyYW5zbGF0ZX19XCIgKGNsaWNrKT1cImd1YXJkYXIoKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8cC1zcGxpdEJ1dHRvbiBjbGFzcz1cIm1sLTJcIiBsYWJlbD1cIkFjY2lvbmVzIEZ1ZW50ZVwiIGljb249XCJnbHlwaGljb25zIGdseXBoaWNvbnMtbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21vZGVsXT1cIm1lbnVcIj48L3Atc3BsaXRCdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmQgbWItMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSBjbGFzcz1cIm1sLTIgcC1idXR0b24gcC1idXR0b24tc2Vjb25kYXJ5XCIgaWNvbj1cImdseXBoaWNvbnMgZ2x5cGhpY29ucy1mbG9wcHktc2F2ZVwiXHJcbiAgICAgICAgICAgICAgICBsYWJlbD1cInt7J2xpbmtfZ3VhcmRhcicgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJndWFyZGFyQ2FtcG9zKClcIj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxwLXRhYmxlICN0YWJsYUdlbmVyYWxFbnRyYWRhIGlkPVwidGFibGFfbGlzdGFfdGlwb19lbnRpZGFkXCIgW3ZhbHVlXT1cImNhbXBvc1wiIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbdG90YWxSZWNvcmRzXT1cImNhbXBvcy5sZW5ndGhcIiBbcGFnaW5hdG9yXT1cImNhbXBvc1NlbGVjY2lvbmFyLmxlbmd0aCA+IDEwXCIgW3Jvd3NdPVwiMTBcIlxyXG4gICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb249XCJib3RoXCIgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIiBzY3JvbGxEaXJlY3Rpb249XCJob3Jpem9udGFsXCJcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXN0cmlwZWRcIiBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIiBlZGl0TW9kZT1cInJvd1wiXHJcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfSByZWdpc3Ryb3NcIiBbbGF6eV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIGRhdGFLZXk9XCJsbGF2ZVRhYmxhXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eydub21icmUnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J3NpbnRheGlzJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eyd0aXBvJyB8IHRyYW5zbGF0ZX19IGRlIHt7J2RhdG8nIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtY2FtcG8gbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDx0ciBbcEVkaXRhYmxlUm93XT1cImNhbXBvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjYW1wby5ub21icmUgXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NhbXBvLnRpcG9EYXRvfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NhbXBvLnRpcG9EYXRvfX1cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvcC10YWJsZT5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuXHJcblxyXG4gICAgPHAtdGFiUGFuZWwgaGVhZGVyPVwie3sgJ3dpemFyZCd8IHRyYW5zbGF0ZX19XCI+XHJcbiAgICAgICAgPHAtc3RlcHMgW21vZGVsXT1cIml0ZW1zXCIgW3JlYWRvbmx5XT1cImZhbHNlXCIgW2FjdGl2ZUluZGV4XT1cImFjdHVhbFwiPjwvcC1zdGVwcz5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRJbnN0cnVjY2lvbmVzIG10LTQgbWItM1wiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogMHB4ICFpbXBvcnRhbnQ7XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1iZWxsXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW5lZG9yXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAyJTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7bWFwYU1lbnNhamVzPy5nZXQoYWN0dWFsKX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b24gKG9uQ2xpY2spPVwiYW50ZXJpb3IoKVwiIFtyb3VuZGVkXT1cInRydWVcIiBpY29uPVwicGkgcGktYW5nbGUtbGVmdFwiIGNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBwVG9vbHRpcD1cIkFudGVyaW9yXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCIgcGxhY2Vob2xkZXI9XCJUb3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0dWFsIDw9IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiAob25DbGljayk9XCJzaWd1aWVudGUoKVwiIFtyb3VuZGVkXT1cInRydWVcIiBpY29uPVwicGkgcGktYW5nbGUtcmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeVwiIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImFjdHVhbCAgPT09IDMgPyAnVGVybWluYXInOiAnU2lndWllbnRlJ1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiIHBsYWNlaG9sZGVyPVwiVG9wXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8cC1wcm9ncmVzc0JhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIFtzdHlsZV09XCJ7IGhlaWdodDogJzNweCcgfVwiICpuZ0lmPVwiY2FyZ2FyUGFzb1wiIC8+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yXCIgKm5nSWY9XCIhY2FyZ2FyUGFzb1wiPlxyXG4gICAgICAgICAgICBAaWYoYWN0dWFsID09PSAwKXtcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZCBtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gbGFiZWw9XCJ7eydmdWVudGUnIHwgdHJhbnNsYXRlfX1cIiBpY29uPVwicGkgcGktcGx1c1wiIChjbGljayk9XCJidXNjYXJUYWJsYSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtcmlwcGxlIHAtZWxlbWVudCBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1zZWNvbmRhcnkgbWItMlwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxwLXRhYmxlICN0YWJsYUdlbmVyYWxFbnRyYWRhIGlkPVwidGFibGFfbGlzdGFfdGlwb19lbnRpZGFkXCIgW3ZhbHVlXT1cInRhYmxhc0Zyb21cIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb249XCJib3RoXCIgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIiBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdE1vZGU9XCJyb3dcIiBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSBhbCB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCJcclxuICAgICAgICAgICAgICAgICAgICBbbGF6eV09XCJ0cnVlXCIgZGF0YUtleT1cImxsYXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eyd0YWJsYScgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eydhbGlhcycgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj4gPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXRhYmxhIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBbcEVkaXRhYmxlUm93XT1cInRhYmxhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLnRhYmxhfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmFsaWFzfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVMSU1JTkFSIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgcERlbGV0ZUVkaXRhYmxlUm93IGljb249XCJwaSBwaS10cmFzaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWxpbWluYXJUYWJsYSh0YWJsYSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWVsZW1lbnQgcC1yaXBwbGUgcC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi1vdXRsaW5lZCBtci0yIG1iLTIgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24taWNvbi1vbmx5XCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snbWVuc2FqZXRhYmxhdmFjaWEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvcC10YWJsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgQGlmKGFjdHVhbCA9PSAxKXtcclxuICAgICAgICAgICAgPHAtdGFibGUgI3RhYmxhR2VuZXJhbEVudHJhZGEgaWQ9XCJ0YWJsYV9saXN0YV90aXBvX2VudGlkYWRcIiBbdmFsdWVdPVwiZm9yYW5lYXNcIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbk1vZGU9XCJzaW5nbGVcIiBzY3JvbGxEaXJlY3Rpb249XCJib3RoXCIgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIlxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkXCIgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIGVkaXRNb2RlPVwicm93XCIgKG9uUm93U2VsZWN0KT1cImFkaWNpb25hckZvcmFuZWEoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSBhbCB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCIgW2xhenldPVwidHJ1ZVwiIGRhdGFLZXk9XCJsbGF2ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6MjUlXCI+e3sndGFibGEnIHwgdHJhbnNsYXRlfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eyd0YWJsYScgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjI1JVwiPnt7J2NhbXBvJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXRhYmxhIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIFtwU2VsZWN0YWJsZVJvd109XCJ0YWJsYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDoyNSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGFibGEuYWxpYXMxfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmFsaWFzMn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0YWJsYS5sbGF2ZS5ub21icmV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInAtMyBmb250LW1lZGl1bSBlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydtZW5zYWpldGFibGF2YWNpYScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L3AtdGFibGU+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zIG10LTNcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBsYWJlbD1cInt7J2FncmVnYXInIHwgdHJhbnNsYXRlfX0ge3snam9pbicgfCB0cmFuc2xhdGV9fVwiIChjbGljayk9XCJudWV2b0pvaW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBsdXNcIiBjbGFzcz1cInAtcmlwcGxlIHAtZWxlbWVudCBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1zZWNvbmRhcnkgbWItMlwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxwLXRhYmxlICN0YWJsYUdlbmVyYWxFbnRyYWRhIGlkPVwidGFibGFfbGlzdGFfdGlwb19lbnRpZGFkXCIgW3ZhbHVlXT1cImpvaW5zRnJvbVwiIFtzY3JvbGxhYmxlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uPVwiYm90aFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIiByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCJcclxuICAgICAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIiBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBlZGl0TW9kZT1cInJvd1wiIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU9XCJ7Zmlyc3R9IGFsIHtsYXN0fSBkZSB7dG90YWxSZWNvcmRzfSByZWdpc3Ryb3NcIiBbbGF6eV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIGRhdGFLZXk9XCJsbGF2ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHN0eWxlPVwid2lkdGg6NDUlXCI+e3snY2FtcG8nIHwgdHJhbnNsYXRlfX0gMTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjUlXCI+e3snPScgfCB0cmFuc2xhdGV9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOjQ1JVwiPnt7J2NhbXBvJyB8IHRyYW5zbGF0ZX19IDI8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3snJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cIiBUYWJsYU51ZXZvUmVnaXN0cm9cIiAqbmdJZj1cInZlck51ZXZvSm9pblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDo0NSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cImxpc3RhQ29sdW1uYXNcIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgWyhuZ01vZGVsKV09XCJjb2wxXCIgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b1pJbmRleF09XCJmYWxzZVwiIFthdXRvRGlzcGxheUZpcnN0XT1cImZhbHNlXCIgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cImNhbWJpb0pvaW4oJGV2ZW50KVwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6NSVcIj49PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6NDUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbb3B0aW9uc109XCJsaXN0YUpvaW5cIiBvcHRpb25WYWx1ZT1cInZhbHVlXCIgWyhuZ01vZGVsKV09XCJjb2wyXCIgYXBwZW5kVG89XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b1pJbmRleF09XCJmYWxzZVwiIFthdXRvRGlzcGxheUZpcnN0XT1cImZhbHNlXCIgb3B0aW9uTGFiZWw9XCJsYWJlbFwiPjwvcC1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1jaGVja1wiIChjbGljayk9XCJhZGljaW9uYXJKb2luKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1lbGVtZW50IHAtcmlwcGxlIHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tc3VjY2VzcyBtci0yIG1iLTIgcC1idXR0b24gcC1jb21wb25lbnQgcC1idXR0b24taWNvbi1vbmx5XCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbGFyTnVldm9Kb2luKClcIiBpY29uPVwicGkgcGktdGltZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1lbGVtZW50IHAtcmlwcGxlIHAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tZGFuZ2VyIG1yLTIgbWItMiBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXRhYmxhIGxldC1lZGl0aW5nPVwiZWRpdGluZ1wiIGxldC1yaT1cInJvd0luZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIFtwRWRpdGFibGVSb3ddPVwidGFibGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6NDUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmNvbHVtbmExfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6NSVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Jz0nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6NDUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmNvbHVtbmEyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIHBEZWxldGVFZGl0YWJsZVJvdyBpY29uPVwicGkgcGktdHJhc2hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlbGltaW5hckpvaW4odGFibGEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInAtZWxlbWVudCBwLXJpcHBsZSBwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLW91dGxpbmVkIG1yLTIgbWItMiBwLWJ1dHRvbiBwLWNvbXBvbmVudCBwLWJ1dHRvbi1pY29uLW9ubHlcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJwLTMgZm9udC1tZWRpdW0gZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3snbWVuc2FqZXRhYmxhdmFjaWEnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9wLXRhYmxlPlxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAaWYoYWN0dWFsID09IDIpe1xyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg1PjxpIGNsYXNzPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWJvb2tcIj48L2k+e3snd2hlcmUnfCB0cmFuc2xhdGV9fTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mbHVpZCBwLWZvcm1ncmlkIGdyaWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkIGNvbC0xMiBtZDpjb2wtMTIgbGc6Y29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1mbG9hdC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwidy1mdWxsXCIgaWQ9XCJmbG9hdC1pbnB1dFwiIHJvd3M9XCI1XCIgY29scz1cIjMwXCIgcElucHV0VGV4dGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZ1ZW50ZS53aGVyZUFkaWNpb25hbFwiIGF1dG9mb2N1cyBbYXV0b1Jlc2l6ZV09XCJ0cnVlXCI+IDwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZGVzY3JpcGNpb25cIj57eydjb25zdWx0YScgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIGNsYXNzPVwibWwtMiBwLWJ1dHRvbiBwLWJ1dHRvbi1yYWlzZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiZ2x5cGhpY29ucyBnbHlwaGljb25zLWZsb3BweS1zYXZlXCIgbGFiZWw9XCJ7eydsaW5rX2d1YXJkYXInIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZWRpdGFyV2hlcmUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAaWYoYWN0dWFsID09IDMpe1xyXG5cclxuICAgICAgICAgICAgPHAtdGFibGUgaWQ9XCJ0YWJsYV9saXN0YV90aXBvX2VudGlkYWRcIiBbdmFsdWVdPVwiY2FtcG9zU2VsZWNjaW9uYXJcIiBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIFt0b3RhbFJlY29yZHNdPVwiY2FtcG9zU2VsZWNjaW9uYXIubGVuZ3RoXCIgc2Nyb2xsRGlyZWN0aW9uPVwiYm90aFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIlxyXG4gICAgICAgICAgICAgICAgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiIHNjcm9sbERpcmVjdGlvbj1cImhvcml6b250YWxcIiBbcGFnaW5hdG9yXT1cImNhbXBvc1NlbGVjY2lvbmFyLmxlbmd0aCA+IDEwXCJcclxuICAgICAgICAgICAgICAgIFtyb3dzXT1cIjEwXCIgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJbMTAsIDIwLCAzMF1cIiBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtc3RyaXBlZFwiXHJcbiAgICAgICAgICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIiBlZGl0TW9kZT1cInJvd1wiXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwie2ZpcnN0fSBhbCB7bGFzdH0gZGUge3RvdGFsUmVjb3Jkc30gcmVnaXN0cm9zXCIgW2xhenldPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgZGF0YUtleT1cImFsaWFzXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIiBhbGlnbkZyb3plbj1cImxlZnRcIiBwRnJvemVuQ29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2hlY2tib3ggW3N0eWxlXT1cInsnbWFyZ2luLWxlZnQnOiAnMSUnLCdtYXJnaW4tcmlnaHQnOicxJSd9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjY2lvbkdlbmVyYWxcIiBbYmluYXJ5XT1cInRydWVcIiBbbmdNb2RlbF09XCJ0b2Rvc1NlbGVjY2lvbmFkb3MoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiYWN0dWFsaXphclNlbGVjY2lvbigkZXZlbnQpXCI+PC9wLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJtYXJnaW4tbGVmdDoxJVwiPnt7J3RhYmxhJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJ3aWR0aDoyNSVcIj57eydjb2x1bW5hJyB8IHRyYW5zbGF0ZX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXRhYmxhPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwid2lkdGg6MjUlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1jaGVja2JveCBjbGFzcz1cIm1yLTIgXCIgWyhuZ01vZGVsKV09XCJ0YWJsYS5zZWxlY2Npb25hZG9cIiBbYmluYXJ5XT1cInRydWVcIiBpbnB1dElkPVwiYmluYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RhYmxhLmNvbHVtbmEucmVwb3J0ZUZ1ZW50ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOjI1JVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0YWJsYS5jb2x1bW5hLm5vbWJyZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwicC0zIGZvbnQtbWVkaXVtIGVtcHR5bWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj1cIjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J21lbnNhamV0YWJsYXZhY2lhJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvcC10YWJsZT5cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvcC10YWJQYW5lbD5cclxuPC9wLXRhYlZpZXc+XHJcblxyXG59XHJcblxyXG48YXBwLXBvcHVwLXRhYmxhcy1mdWVudGUgI3BvcHVwVGFibGFzRnVlbnRlVUlcclxuICAgIChhcGxpY2FyRGVzdGlub09jdWx0YXIpPVwic2V0VGFibGFTZWxlY2Npb25hZGEoJGV2ZW50KVwiPjwvYXBwLXBvcHVwLXRhYmxhcy1mdWVudGU+Il19
|