iptdevs-design-system 3.1.995 → 3.1.998
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/esm2020/lib/components/forms/update-user-form/update-user-form.component.mjs +29 -36
- package/fesm2015/iptdevs-design-system.mjs +27 -33
- package/fesm2015/iptdevs-design-system.mjs.map +1 -1
- package/fesm2020/iptdevs-design-system.mjs +27 -33
- package/fesm2020/iptdevs-design-system.mjs.map +1 -1
- package/lib/components/forms/update-user-form/update-user-form.component.d.ts +3 -4
- package/package.json +1 -1
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
2
|
import { Validators } from '@angular/forms';
|
|
3
|
-
import { ConfirmationService } from 'primeng/api';
|
|
4
3
|
import Swal from 'sweetalert2';
|
|
5
4
|
import * as i0 from "@angular/core";
|
|
6
5
|
import * as i1 from "@angular/forms";
|
|
7
6
|
import * as i2 from "../../../core/services/parameters-service/parameters.service";
|
|
8
7
|
import * as i3 from "../../../core/utils/base-service/base.service";
|
|
9
8
|
import * as i4 from "../../../core/services/user-service/user-service";
|
|
10
|
-
import * as i5 from "
|
|
11
|
-
import * as i6 from "
|
|
9
|
+
import * as i5 from "@angular/common";
|
|
10
|
+
import * as i6 from "primeng/api";
|
|
12
11
|
import * as i7 from "primeng/selectbutton";
|
|
13
12
|
import * as i8 from "primeng/checkbox";
|
|
14
13
|
import * as i9 from "primeng/dialog";
|
|
@@ -17,13 +16,12 @@ import * as i11 from "../../atoms/input/input.component";
|
|
|
17
16
|
import * as i12 from "../../atoms/select/select.component";
|
|
18
17
|
import * as i13 from "../../../core/pipes/parameter-pipes/gender-display.pipe";
|
|
19
18
|
export class updateUserFormComponent {
|
|
20
|
-
constructor(fb, cdr, parameterService, baseService, userService
|
|
19
|
+
constructor(fb, cdr, parameterService, baseService, userService) {
|
|
21
20
|
this.fb = fb;
|
|
22
21
|
this.cdr = cdr;
|
|
23
22
|
this.parameterService = parameterService;
|
|
24
23
|
this.baseService = baseService;
|
|
25
24
|
this.userService = userService;
|
|
26
|
-
this.confirmationService = confirmationService;
|
|
27
25
|
this.visibleModal = false;
|
|
28
26
|
this.closeModalIS = new EventEmitter();
|
|
29
27
|
this.userUpdatedEvent = new EventEmitter();
|
|
@@ -43,15 +41,12 @@ export class updateUserFormComponent {
|
|
|
43
41
|
this.genders = [];
|
|
44
42
|
this.stratums = [];
|
|
45
43
|
this.showConfirmDialog = false;
|
|
44
|
+
this.userRoleCommercial = false;
|
|
46
45
|
// userUpdated = false;
|
|
47
46
|
this.initialFormValue = [];
|
|
48
47
|
this.pendingInit = false;
|
|
49
48
|
this.isStudent = false;
|
|
50
49
|
this.justifyOptions = [];
|
|
51
|
-
// justifyOptions: any[] = [
|
|
52
|
-
// { name: 'Activo', code: 1 },
|
|
53
|
-
// { name: 'Removido', code: 4 }
|
|
54
|
-
// ];
|
|
55
50
|
this.reasons = [
|
|
56
51
|
{ name: 'Corrección de errores en datos personales', code: 1 },
|
|
57
52
|
{ name: 'Correccion de documentacion', code: 2 },
|
|
@@ -59,10 +54,12 @@ export class updateUserFormComponent {
|
|
|
59
54
|
{ name: 'correccion datos de Acudiente', code: 4 },
|
|
60
55
|
{ name: 'Cambio de contraseña', code: 5 },
|
|
61
56
|
{ name: 'Cambio de residencia', code: 6 },
|
|
62
|
-
{ name: '
|
|
57
|
+
{ name: 'Suspensión o reactivación de cuenta', code: 7 },
|
|
58
|
+
{ name: 'Otro', code: 8 }
|
|
63
59
|
];
|
|
64
60
|
this.initForm();
|
|
65
61
|
this.initConfirmForm();
|
|
62
|
+
this.validationUserRole();
|
|
66
63
|
}
|
|
67
64
|
ngOnInit() {
|
|
68
65
|
this.getParameters();
|
|
@@ -75,6 +72,7 @@ export class updateUserFormComponent {
|
|
|
75
72
|
this.initializeForm();
|
|
76
73
|
this.setJustifyOptions();
|
|
77
74
|
this.trackIdTypeChanges();
|
|
75
|
+
this.validationUserRole();
|
|
78
76
|
this.cdr.detectChanges();
|
|
79
77
|
}
|
|
80
78
|
else {
|
|
@@ -247,21 +245,21 @@ export class updateUserFormComponent {
|
|
|
247
245
|
transformRole(role) {
|
|
248
246
|
const roleMap = {
|
|
249
247
|
1: 'Super Admin',
|
|
250
|
-
10: '
|
|
248
|
+
10: 'Lider Academico',
|
|
251
249
|
11: 'Coordinador Academico',
|
|
252
250
|
12: 'Teacher Academico',
|
|
253
251
|
13: 'Estudiante',
|
|
254
252
|
15: 'Posible Estudiante',
|
|
255
|
-
20: '
|
|
253
|
+
20: 'Lider Marketing',
|
|
256
254
|
21: 'Coordinador Marketing',
|
|
257
255
|
22: 'Auxiliar Marketing',
|
|
258
|
-
30: '
|
|
256
|
+
30: 'Lider Administrativo',
|
|
259
257
|
31: 'Coordinador Administrativo',
|
|
260
258
|
32: 'Auxiliar Administrativo',
|
|
261
|
-
40: '
|
|
259
|
+
40: 'Lider Comercial',
|
|
262
260
|
41: 'Coordinador Comercial',
|
|
263
261
|
42: 'Asesor Comercial',
|
|
264
|
-
50: '
|
|
262
|
+
50: 'Lider Cartera',
|
|
265
263
|
51: 'Coordinador Cartera',
|
|
266
264
|
52: 'Asesor Cartera',
|
|
267
265
|
60: 'Proveedor'
|
|
@@ -346,6 +344,15 @@ export class updateUserFormComponent {
|
|
|
346
344
|
}
|
|
347
345
|
}
|
|
348
346
|
}
|
|
347
|
+
validationUserRole() {
|
|
348
|
+
const userRole = this.baseService.getUserRole();
|
|
349
|
+
if (userRole == 40 || userRole == 41 || userRole == 42) {
|
|
350
|
+
this.userRoleCommercial = true;
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
this.userRoleCommercial = false;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
349
356
|
closeTable() {
|
|
350
357
|
this.visibleModal = false;
|
|
351
358
|
this.showConfirmDialog = false;
|
|
@@ -359,7 +366,7 @@ export class updateUserFormComponent {
|
|
|
359
366
|
}
|
|
360
367
|
trackIdTypeChanges() {
|
|
361
368
|
if (this.idTypeSubscription) {
|
|
362
|
-
this.idTypeSubscription.unsubscribe();
|
|
369
|
+
this.idTypeSubscription.unsubscribe();
|
|
363
370
|
}
|
|
364
371
|
this.idTypeSubscription = this.updateUserForm.get('id_card_type')?.valueChanges.subscribe(value => {
|
|
365
372
|
this.updateIdCardValidators(value);
|
|
@@ -486,20 +493,6 @@ export class updateUserFormComponent {
|
|
|
486
493
|
selectReason(reason) {
|
|
487
494
|
this.confirmForm.controls['reason'].setValue(reason ? reason : null);
|
|
488
495
|
}
|
|
489
|
-
setPhoto(type) {
|
|
490
|
-
if (type === 'student')
|
|
491
|
-
this.photo = '/platform/academic/assets/student.jpg';
|
|
492
|
-
if (type === 'academic')
|
|
493
|
-
this.photo = '/platform/academic/assets/academico.png';
|
|
494
|
-
if (type === 'administrative')
|
|
495
|
-
this.photo = '/platform/administrative/assets/administrativo.jpg';
|
|
496
|
-
if (type === 'marketing')
|
|
497
|
-
this.photo = '/platform/marketing/assets/marketing.jpg';
|
|
498
|
-
if (type === 'commercial')
|
|
499
|
-
this.photo = '/platform/commercial/assets/user-form-assets/comercial.jpg';
|
|
500
|
-
if (type === 'treasure')
|
|
501
|
-
this.photo = '/platform/treasure/assets/administrativo.jpg';
|
|
502
|
-
}
|
|
503
496
|
// updateUser(): void {
|
|
504
497
|
// if (
|
|
505
498
|
// this.updateUserForm.invalid ||
|
|
@@ -829,16 +822,16 @@ export class updateUserFormComponent {
|
|
|
829
822
|
closeConfirmDialog() {
|
|
830
823
|
this.showConfirmDialog = false;
|
|
831
824
|
this.confirmForm.reset();
|
|
832
|
-
this.confirmForm.get('reason')?.setValue(
|
|
825
|
+
this.confirmForm.get('reason')?.setValue('');
|
|
833
826
|
this.confirmForm.get('observation')?.setValue('');
|
|
834
827
|
}
|
|
835
828
|
}
|
|
836
|
-
updateUserFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: updateUserFormComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ChangeDetectorRef }, { token: i2.ParameterService }, { token: i3.BaseService }, { token: i4.UserService }
|
|
837
|
-
updateUserFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: updateUserFormComponent, selector: "ipt-update-user-form", inputs: { DataStudent: "DataStudent", visibleModal: "visibleModal" }, outputs: { closeModalIS: "closeModalIS", userUpdatedEvent: "userUpdatedEvent" }, providers: [ConfirmationService], usesOnChanges: true, ngImport: i0, template: "<main *ngIf=\"visibleModal\">\n <div class=\"modal_container\">\n <div class=\"header_modal yellow-300\">\n <h1>Actualizar usuario</h1>\n <button (click)=\"closeTable()\">x</button>\n </div>\n <div class=\"grid_container\">\n <div>\n <form *ngIf=\"updateUserForm\" autocomplete=\"off\" [formGroup]=\"updateUserForm\">\n <!-- User Information Section -->\n <div class=\"section-header\">\n <h2>Informaci\u00F3n del usuario</h2>\n </div>\n <div class=\"form-grid\">\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Nombres'\"\n [control]=\"updateUserForm.controls['name']\"\n [validateText]=\"updateUserForm.controls['name'].hasError('required') ? 'Debe ingresar el nombre' :\n updateUserForm.controls['name'].hasError('minlength') ? 'M\u00EDnimo 3 caracteres' :\n updateUserForm.controls['name'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n updateUserForm.controls['name'].hasError('pattern') ? 'Solo letras, espacios y guiones' :\n updateUserForm.controls['name'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['name'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar el nombre'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Apellidos'\"\n [control]=\"updateUserForm.controls['last_name']\"\n [validateText]=\"updateUserForm.controls['last_name'].hasError('required') ? 'Debe ingresar los apellidos' :\n updateUserForm.controls['last_name'].hasError('minlength') ? 'M\u00EDnimo 3 caracteres' :\n updateUserForm.controls['last_name'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n updateUserForm.controls['last_name'].hasError('pattern') ? 'Solo letras, espacios y guiones' :\n updateUserForm.controls['last_name'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['last_name'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar los apellidos'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'email'\"\n [placeHolder]=\"'Email'\"\n [control]=\"updateUserForm.controls['email']\"\n [validateText]=\"updateUserForm.controls['email'].hasError('required') ? 'Debe ingresar un correo v\u00E1lido' :\n updateUserForm.controls['email'].hasError('maxlength') ? 'M\u00E1ximo 300 caracteres' :\n updateUserForm.controls['email'].hasError('pattern') ? 'Tiene que ser un email correcto' :\n updateUserForm.controls['email'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['email'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar un correo v\u00E1lido'\"\n ></ipt-input>\n <ipt-input\n *ngIf=\"showEmailIpt\"\n [inputType]=\"'text'\"\n [placeHolder]=\"'Email IPT'\"\n [control]=\"updateUserForm.controls['email_ipt']\"\n [validateText]=\"updateUserForm.controls['email_ipt'].hasError('required') ? 'Debe ingresar un correo IPT v\u00E1lido' :\n updateUserForm.controls['email_ipt'].hasError('maxlength') ? 'M\u00E1ximo 255 caracteres' :\n updateUserForm.controls['email_ipt'].hasError('pattern') ? 'Tiene que ser un email correcto' :\n updateUserForm.controls['email_ipt'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['email_ipt'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar un correo IPT v\u00E1lido'\"\n ></ipt-input>\n <ipt-input\n *ngIf=\"showEmailIpt\"\n [inputType]=\"'number'\"\n [placeHolder]=\"'Horas de servicio'\"\n [control]=\"updateUserForm.controls['service_hour']\"\n [validateText]=\"'Debe ingresar las horas de servicio'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Rol'\"\n [control]=\"updateUserForm.controls['role']\"\n [validateText]=\"'Rol requerido'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['gender'].value\"\n [control]=\"updateUserForm.controls['gender']\"\n [selectCode]=\"updateUserForm.controls['gender'].value === null ? 'Seleccione g\u00E9nero' : (updateUserForm.controls['gender'].value | genderDisplay)\"\n [data]=\"genders\"\n (eventSelect)=\"selectGender($event)\"\n [defaultText]=\"'Seleccione g\u00E9nero'\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['phone_indicative'].value\"\n [control]=\"updateUserForm.controls['phone_indicative']\"\n [data]=\"indicatives\"\n (eventSelect)=\"selectIndicative('phone_indicative', $event)\"\n [defaultText]=\"'Indicativo'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'number'\"\n [placeHolder]=\"'Tel\u00E9fono'\"\n [control]=\"updateUserForm.controls['phone_number']\"\n [validateText]=\"'Debe ingresar un n\u00FAmero de tel\u00E9fono v\u00E1lido'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['id_card_type'].value\"\n [control]=\"updateUserForm.controls['id_card_type']\"\n [selectCode]=\"updateUserForm.controls['id_card_type'].value === null ? 'Tipo de documento' : updateUserForm.controls['id_card_type'].value\"\n [isRequired]=\"true\"\n [data]=\"idTypes\"\n (eventSelect)=\"selectIdType('id_card_type', $event)\"\n [defaultText]=\"'Tipo de documento'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Documento'\"\n [control]=\"updateUserForm.controls['id_card']\"\n [validateText]=\"updateUserForm.controls['id_card'].hasError('required') ? 'Debe ingresar el n\u00FAmero de documento' :\n updateUserForm.controls['id_card'].hasError('minlength') ? 'M\u00EDnimo 5 caracteres' :\n updateUserForm.controls['id_card'].hasError('maxlength') ? 'M\u00E1ximo 20 caracteres' :\n updateUserForm.controls['id_card'].hasError('pattern') ? (updateUserForm.controls['id_card_type'].value === 7 || updateUserForm.controls['id_card_type'].value === 5 ? 'Solo letras y n\u00FAmeros permitidos' : 'Solo n\u00FAmeros permitidos') :\n 'Debe ingresar el n\u00FAmero de documento'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['country'].value\"\n [control]=\"updateUserForm.controls['country']\"\n [selectCode]=\"updateUserForm.controls['country'].value === null ? 'Pa\u00EDs de residencia' : updateUserForm.controls['country'].value\"\n (eventSelect)=\"selectCountry($event)\"\n [data]=\"countries\"\n [defaultText]=\"'Pa\u00EDs de residencia'\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['state'].value\"\n [control]=\"updateUserForm.controls['state']\"\n [selectCode]=\"updateUserForm.controls['state'].value === null ? 'Departamento o estado' : updateUserForm.controls['state'].value\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectState($event)\"\n [data]=\"states\"\n [defaultText]=\"'Departamento o estado'\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['city'].value\"\n [control]=\"updateUserForm.controls['city']\"\n [selectCode]=\"updateUserForm.controls['city'].value === null ? 'Ciudad de residencia' : updateUserForm.controls['city'].value\"\n (eventSelect)=\"selectCity($event)\"\n [data]=\"cities\"\n [defaultText]=\"'Ciudad de residencia'\"\n ></ipt-select>\n <div class=\"card-status\">\n <span class=\"span-status\">Estado</span>\n <p-selectButton \n [options]=\"justifyOptions\" \n formControlName=\"status\" \n optionLabel=\"name\" \n optionValue=\"code\">\n </p-selectButton>\n </div>\n <div class=\"field\">\n <p-checkbox\n formControlName=\"changePassword\"\n label=\"Cambio de contrase\u00F1a\"\n [binary]=\"true\"\n ></p-checkbox>\n </div>\n </div>\n <div class=\"form-grid\" *ngIf=\"updateUserForm.controls['changePassword'].value\">\n <ipt-input\n [inputType]=\"'password'\"\n [placeHolder]=\"'Contrase\u00F1a'\"\n [control]=\"updateUserForm.controls['password']\"\n [validateText]=\"updateUserForm.controls['password'].hasError('required') ? 'La contrase\u00F1a es requerida' :\n updateUserForm.controls['password'].hasError('minlength') ? 'M\u00EDnimo 5 caracteres' :\n updateUserForm.controls['password'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n 'Ingrese una contrase\u00F1a v\u00E1lida'\"\n ></ipt-input>\n\n <ipt-input\n [inputType]=\"'password'\"\n [placeHolder]=\"'Repetir contrase\u00F1a'\"\n [control]=\"updateUserForm.controls['re_password']\"\n [validateText]=\"updateUserForm.controls['re_password'].hasError('required') ? 'Debe repetir la contrase\u00F1a' :\n updateUserForm.controls['re_password'].hasError('minlength') ? 'M\u00EDnimo 5 caracteres' :\n updateUserForm.controls['re_password'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n updateUserForm.hasError('mismatch') ? 'Las contrase\u00F1as no coinciden' :\n 'Repita la contrase\u00F1a'\"\n ></ipt-input>\n </div>\n\n <!-- Mensaje adicional para el error de mismatch (opcional, si quieres mostrarlo por separado) -->\n\n <div *ngIf=\"updateUserForm.hasError('mismatch') && updateUserForm.controls['changePassword'].value\" class=\"error-message\">\n <small >Las contrase\u00F1as no coinciden</small>\n </div>\n <!-- Parent Information Section -->\n <div class=\"section-header\" *ngIf=\"DataStudent?.cods\">\n <h2>Informaci\u00F3n del acudiente</h2>\n </div>\n <div *ngIf=\"DataStudent?.cods\">\n <div *ngIf=\"showParentSection; else noParentMessage\">\n <div class=\"form-grid\">\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Nombres'\"\n [control]=\"updateUserForm.controls['parent_name']\"\n [validateText]=\"'Debe ingresar el nombre'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Apellidos'\"\n [control]=\"updateUserForm.controls['parent_last_name']\"\n [validateText]=\"'Debe ingresar los apellidos'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Ocupaci\u00F3n'\"\n [control]=\"updateUserForm.controls['parent_occupation']\"\n [validateText]=\"'Debe ingresar la ocupaci\u00F3n'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'email'\"\n [placeHolder]=\"'Email'\"\n [control]=\"updateUserForm.controls['parent_email']\"\n [validateText]=\"'Debe ingresar un correo v\u00E1lido'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['parent_id_card_type'].value\"\n [control]=\"updateUserForm.controls['parent_id_card_type']\"\n [selectCode]=\"updateUserForm.controls['parent_id_card_type'].value === null ? 'Tipo de documento' : updateUserForm.controls['parent_id_card_type'].value\"\n [isRequired]=\"true\"\n [data]=\"idTypes\"\n (eventSelect)=\"selectIdType('parent_id_card_type', $event)\"\n [defaultText]=\"'Tipo de documento'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'number'\"\n [placeHolder]=\"'Documento'\"\n [control]=\"updateUserForm.controls['parent_id_card']\"\n [validateText]=\"'Debe ingresar el n\u00FAmero de documento'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['parent_phone_indicative'].value\"\n [control]=\"updateUserForm.controls['parent_phone_indicative']\"\n [data]=\"indicatives\"\n (eventSelect)=\"selectIndicative('parent_phone_indicative', $event)\"\n [defaultText]=\"'Indicativo'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'number'\"\n [placeHolder]=\"'Tel\u00E9fono'\"\n [control]=\"updateUserForm.controls['parent_phone_number']\"\n [validateText]=\"'Debe ingresar un n\u00FAmero de tel\u00E9fono v\u00E1lido'\"\n ></ipt-input>\n\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Direcci\u00F3n de oficina'\"\n [control]=\"updateUserForm.controls['parent_office_adrress']\"\n [validateText]=\"'Debe ingresar la direcci\u00F3n'\"\n ></ipt-input>\n </div>\n </div>\n <ng-template #noParentMessage>\n <div class=\"no-parent-message\">\n <p>Sin acudiente</p>\n </div>\n </ng-template>\n </div>\n <div class=\"buttons-container\">\n <div class=\"buttons-container-inner\">\n <ipt-button\n [buttonType]=\"'button'\"\n [label]=\"'Cerrar'\"\n [primary]=\"false\"\n [isEnabled]=\"true\"\n (onClick)=\"closeTable()\"\n ></ipt-button>\n\n <ipt-button\n [label]=\"'Actualizar'\"\n [isEnabled]=\"!loader && updateUserForm.valid && !updateUserForm.hasError('mismatch') && hasFormChanged()\"\n (onClick)=\"showConfirmDialogs()\"\n [primary]=\"true\"\n ></ipt-button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n\n <!-- Confirm Dialog para raz\u00F3n y observaci\u00F3n -->\n<p-dialog\n header=\"Confirmar Ajuste de Usuario\"\n [(visible)]=\"showConfirmDialog\"\n [modal]=\"true\"\n (onHide)=\"closeConfirmDialog()\"\n >\n <form [formGroup]=\"confirmForm\" class=\"confirm-form\">\n <div class=\"p-field\">\n <ipt-select\n [initialValue]=\"confirmForm.controls['reason'].value\"\n [control]=\"confirmForm.controls['reason']\"\n [data]=\"reasons\"\n optionLabel=\"name\"\n (eventSelect)=\"selectReason($event)\"\n [defaultText]=\"'Seleccione la raz\u00F3n'\"\n ></ipt-select>\n <small *ngIf=\"confirmForm.controls['reason'].invalid && confirmForm.controls['reason'].touched\" class=\"p-error\">\n La raz\u00F3n es requerida\n </small>\n </div>\n <div class=\"p-field\">\n <label class=\"container-observation\">Observaci\u00F3n</label>\n <textarea\n id=\"observation\"\n pInputTextarea\n formControlName=\"observation\"\n rows=\"3\"\n placeholder=\"Describe detalles adicionales del ajuste\"\n ></textarea>\n <small *ngIf=\"confirmForm.controls['observation'].invalid && confirmForm.controls['observation'].touched\" class=\"p-error\">\n La observaci\u00F3n es requerida\n </small>\n </div>\n </form>\n <p-footer>\n <ipt-button\n class=\"p-button-secondary\"\n [buttonType]=\"'button'\"\n [label]=\"'Cancelar'\"\n [primary]=\"false\"\n [isEnabled]=\"true\"\n (onClick)=\"closeConfirmDialog()\"\n ></ipt-button>\n <ipt-button\n class=\"p-button-secondary\"\n [buttonType]=\"'button'\"\n [label]=\"'Confirmar'\"\n [primary]=\"true\"\n [isEnabled]=\"confirmForm.valid\"\n (onClick)=\"acceptConfirmDialog()\"\n ></ipt-button>\n </p-footer>\n</p-dialog>\n\n</main>", styles: ["@media screen and (min-width: 320px){main{background:rgba(0,0,0,.472);color:#fff;position:fixed;top:0;left:0;height:100vh;width:100vw;transition:all .5s}main .modal_container{width:90%;height:-moz-fit-content;height:fit-content;max-height:90vh;overflow-y:auto;position:fixed;inset:0;margin:auto;background-color:#fff;border-radius:5px}.header_modal{display:flex;padding:15px 15px 0;gap:1rem;align-items:center}.header_modal h1{padding:.5rem;background-color:#1c77f7;color:#fff;width:100%;border-radius:10px;font-size:1.25rem;font-weight:700}.header_modal button{margin-left:auto;font-size:26px;padding:1.2rem;font-weight:200;color:#6c7f7d;display:flex;width:25px;height:25px;align-items:center;justify-content:center;transition:50ms;background-color:transparent;border:none}.header_modal button:hover{cursor:pointer;border-radius:50%;background-color:#d4d4d4}.grid_container{display:grid;grid-template-columns:1fr;padding:0 15px}form{display:grid;grid-template-columns:1fr;gap:.25rem;justify-content:center;padding:0 1rem}.section-header{margin:1.5rem 0 .5rem;border-bottom:2px solid #1c77f7}.section-header h2{font-size:1.2rem;color:#1c77f7;font-weight:600;margin-bottom:.5rem}.form-grid{display:grid;grid-template-columns:1fr;gap:0px .25rem}.buttons-container{margin-top:2rem;margin-bottom:2rem;display:flex;justify-content:flex-end;align-items:center;flex-direction:row}.buttons-container-inner{gap:1rem;width:auto;display:flex}.user-type-image{display:none}.no-parent-message{padding:1rem;text-align:center;color:#666;font-size:1rem;font-weight:500;background-color:#f8f9fa;border-radius:.5rem;margin-top:.5rem}}@media screen and (min-width: 768px){.form-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:0px 1rem}}@media screen and (min-width: 1366px){form{padding:0}}.field{margin-top:15px;height:1px;max-width:70%;font-family:Poppins,sans-serif;color:#000;font-size:.875rem}.error-message{color:red;font-size:12px;margin-top:5px}:host ::ng-deep .p-selectbutton{display:flex;flex-wrap:wrap;justify-content:center;width:100%;min-width:10rem}:host ::ng-deep .p-selectbutton .p-button{padding:.5rem;font-size:.875rem;height:30px}:host ::ng-deep .p-buttonset .p-button:first-of-type{height:30px}.span-status{font-family:Poppins,sans-serif;color:#999;font-size:15px;font-weight:400;pointer-events:none;transition:.2s ease all;margin-left:9px}.card-status{margin-top:15px}:host ::ng-deep .p-field{margin-bottom:1.5rem}.p-error{color:red;font-size:.8rem}.confirm-form{display:flex;flex-direction:column;gap:1rem;font-family:Poppins,sans-serif}:host ::ng-deep .p-confirm-dialog .p-dialog-content{padding:1.5rem}:host ::ng-deep .p-confirm-dialog .p-dialog-footer{display:flex;justify-content:flex-end;gap:1rem}:host ::ng-deep .p-dialog{width:45%!important}.container-observation{width:100%;font-family:Poppins,sans-serif;color:#1c77f7;font-size:15px;font-weight:400;pointer-events:none}textarea{box-shadow:#64646f33 0 7px 29px;border-radius:3px;outline:none;display:block;transition:.2s;font-weight:300;font-family:Poppins,sans-serif;width:-webkit-fill-available;width:-moz-available;padding-left:10px;background-color:#fff;-webkit-appearance:none;max-height:80px;font-size:14px;max-width:100%}textarea::placeholder{color:#999;font-weight:400;font-family:Poppins,sans-serif;pointer-events:none}textarea::focus textarea:focus-visible{color:#999;font-size:15px;font-weight:400;font-family:Poppins,sans-serif;pointer-events:none;border:#1c77f7 1px solid;outline:none}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.Footer, selector: "p-footer" }, { kind: "component", type: i7.SelectButton, selector: "p-selectButton", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "tabindex", "multiple", "style", "styleClass", "ariaLabelledBy", "disabled", "dataKey"], outputs: ["onOptionClick", "onChange"] }, { kind: "component", type: i8.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "trueValue", "falseValue"], outputs: ["onChange"] }, { kind: "component", type: i9.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: i10.ButtonComponent, selector: "ipt-button", inputs: ["primary", "size", "label", "buttonType", "isEnabled"], outputs: ["onClick"] }, { kind: "component", type: i11.InputComponent, selector: "ipt-input", inputs: ["inputType", "placeHolder", "validateText", "withPipe", "list", "iconUrl", "control", "prefix", "thousands", "decimal", "disabledSel"], outputs: ["dateSelected"] }, { kind: "component", type: i12.SelectComponent, selector: "ipt-select", inputs: ["isRequired", "data", "defaultText", "selectCode", "disabledSel", "initialValue", "label", "control"], outputs: ["eventSelect"] }, { kind: "pipe", type: i13.GenderDisplayPipe, name: "genderDisplay" }] });
|
|
829
|
+
updateUserFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: updateUserFormComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ChangeDetectorRef }, { token: i2.ParameterService }, { token: i3.BaseService }, { token: i4.UserService }], target: i0.ɵɵFactoryTarget.Component });
|
|
830
|
+
updateUserFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: updateUserFormComponent, selector: "ipt-update-user-form", inputs: { DataStudent: "DataStudent", visibleModal: "visibleModal" }, outputs: { closeModalIS: "closeModalIS", userUpdatedEvent: "userUpdatedEvent" }, providers: [], usesOnChanges: true, ngImport: i0, template: "<main *ngIf=\"visibleModal\">\n <div class=\"modal_container\">\n <div class=\"header_modal yellow-300\">\n <h1>Actualizar usuario</h1>\n <button (click)=\"closeTable()\">x</button>\n </div>\n <div class=\"grid_container\">\n <div>\n <form *ngIf=\"updateUserForm\" autocomplete=\"off\" [formGroup]=\"updateUserForm\">\n <!-- User Information Section -->\n <div class=\"section-header\">\n <h2>Informaci\u00F3n del usuario</h2>\n </div>\n <div class=\"form-grid\">\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Nombres'\"\n [control]=\"updateUserForm.controls['name']\"\n [validateText]=\"updateUserForm.controls['name'].hasError('required') ? 'Debe ingresar el nombre' :\n updateUserForm.controls['name'].hasError('minlength') ? 'M\u00EDnimo 3 caracteres' :\n updateUserForm.controls['name'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n updateUserForm.controls['name'].hasError('pattern') ? 'Solo letras, espacios y guiones' :\n updateUserForm.controls['name'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['name'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar el nombre'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Apellidos'\"\n [control]=\"updateUserForm.controls['last_name']\"\n [validateText]=\"updateUserForm.controls['last_name'].hasError('required') ? 'Debe ingresar los apellidos' :\n updateUserForm.controls['last_name'].hasError('minlength') ? 'M\u00EDnimo 3 caracteres' :\n updateUserForm.controls['last_name'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n updateUserForm.controls['last_name'].hasError('pattern') ? 'Solo letras, espacios y guiones' :\n updateUserForm.controls['last_name'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['last_name'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar los apellidos'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'email'\"\n [placeHolder]=\"'Email'\"\n [control]=\"updateUserForm.controls['email']\"\n [validateText]=\"updateUserForm.controls['email'].hasError('required') ? 'Debe ingresar un correo v\u00E1lido' :\n updateUserForm.controls['email'].hasError('maxlength') ? 'M\u00E1ximo 300 caracteres' :\n updateUserForm.controls['email'].hasError('pattern') ? 'Tiene que ser un email correcto' :\n updateUserForm.controls['email'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['email'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar un correo v\u00E1lido'\"\n ></ipt-input>\n <ipt-input\n *ngIf=\"showEmailIpt\"\n [inputType]=\"'text'\"\n [placeHolder]=\"'Email IPT'\"\n [control]=\"updateUserForm.controls['email_ipt']\"\n [validateText]=\"updateUserForm.controls['email_ipt'].hasError('required') ? 'Debe ingresar un correo IPT v\u00E1lido' :\n updateUserForm.controls['email_ipt'].hasError('maxlength') ? 'M\u00E1ximo 255 caracteres' :\n updateUserForm.controls['email_ipt'].hasError('pattern') ? 'Tiene que ser un email correcto' :\n updateUserForm.controls['email_ipt'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['email_ipt'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar un correo IPT v\u00E1lido'\"\n ></ipt-input>\n <ipt-input\n *ngIf=\"showEmailIpt\"\n [inputType]=\"'number'\"\n [placeHolder]=\"'Horas de servicio'\"\n [control]=\"updateUserForm.controls['service_hour']\"\n [validateText]=\"'Debe ingresar las horas de servicio'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Rol'\"\n [control]=\"updateUserForm.controls['role']\"\n [validateText]=\"'Rol requerido'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['gender'].value\"\n [control]=\"updateUserForm.controls['gender']\"\n [selectCode]=\"updateUserForm.controls['gender'].value === null ? 'Seleccione g\u00E9nero' : (updateUserForm.controls['gender'].value | genderDisplay)\"\n [data]=\"genders\"\n (eventSelect)=\"selectGender($event)\"\n [defaultText]=\"'Seleccione g\u00E9nero'\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['phone_indicative'].value\"\n [control]=\"updateUserForm.controls['phone_indicative']\"\n [data]=\"indicatives\"\n (eventSelect)=\"selectIndicative('phone_indicative', $event)\"\n [defaultText]=\"'Indicativo'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'number'\"\n [placeHolder]=\"'Tel\u00E9fono'\"\n [control]=\"updateUserForm.controls['phone_number']\"\n [validateText]=\"'Debe ingresar un n\u00FAmero de tel\u00E9fono v\u00E1lido'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['id_card_type'].value\"\n [control]=\"updateUserForm.controls['id_card_type']\"\n [selectCode]=\"updateUserForm.controls['id_card_type'].value === null ? 'Tipo de documento' : updateUserForm.controls['id_card_type'].value\"\n [isRequired]=\"true\"\n [data]=\"idTypes\"\n (eventSelect)=\"selectIdType('id_card_type', $event)\"\n [defaultText]=\"'Tipo de documento'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Documento'\"\n [control]=\"updateUserForm.controls['id_card']\"\n [validateText]=\"updateUserForm.controls['id_card'].hasError('required') ? 'Debe ingresar el n\u00FAmero de documento' :\n updateUserForm.controls['id_card'].hasError('minlength') ? 'M\u00EDnimo 5 caracteres' :\n updateUserForm.controls['id_card'].hasError('maxlength') ? 'M\u00E1ximo 20 caracteres' :\n updateUserForm.controls['id_card'].hasError('pattern') ? (updateUserForm.controls['id_card_type'].value === 7 || updateUserForm.controls['id_card_type'].value === 5 ? 'Solo letras y n\u00FAmeros permitidos' : 'Solo n\u00FAmeros permitidos') :\n 'Debe ingresar el n\u00FAmero de documento'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['country'].value\"\n [control]=\"updateUserForm.controls['country']\"\n [selectCode]=\"updateUserForm.controls['country'].value === null ? 'Pa\u00EDs de residencia' : updateUserForm.controls['country'].value\"\n (eventSelect)=\"selectCountry($event)\"\n [data]=\"countries\"\n [defaultText]=\"'Pa\u00EDs de residencia'\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['state'].value\"\n [control]=\"updateUserForm.controls['state']\"\n [selectCode]=\"updateUserForm.controls['state'].value === null ? 'Departamento o estado' : updateUserForm.controls['state'].value\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectState($event)\"\n [data]=\"states\"\n [defaultText]=\"'Departamento o estado'\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['city'].value\"\n [control]=\"updateUserForm.controls['city']\"\n [selectCode]=\"updateUserForm.controls['city'].value === null ? 'Ciudad de residencia' : updateUserForm.controls['city'].value\"\n (eventSelect)=\"selectCity($event)\"\n [data]=\"cities\"\n [defaultText]=\"'Ciudad de residencia'\"\n ></ipt-select>\n <div class=\"card-status\">\n <span class=\"span-status\">Estado</span>\n <p-selectButton \n [options]=\"justifyOptions\" \n formControlName=\"status\" \n optionLabel=\"name\" \n optionValue=\"code\">\n </p-selectButton>\n </div>\n <div *ngIf=\"!userRoleCommercial\" class=\"field\">\n <p-checkbox\n formControlName=\"changePassword\"\n label=\"Cambio de contrase\u00F1a\"\n [binary]=\"true\"\n ></p-checkbox>\n </div>\n </div>\n <div class=\"form-grid\" *ngIf=\"updateUserForm.controls['changePassword'].value\">\n <ipt-input\n [inputType]=\"'password'\"\n [placeHolder]=\"'Contrase\u00F1a'\"\n [control]=\"updateUserForm.controls['password']\"\n [validateText]=\"updateUserForm.controls['password'].hasError('required') ? 'La contrase\u00F1a es requerida' :\n updateUserForm.controls['password'].hasError('minlength') ? 'M\u00EDnimo 5 caracteres' :\n updateUserForm.controls['password'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n 'Ingrese una contrase\u00F1a v\u00E1lida'\"\n ></ipt-input>\n\n <ipt-input\n [inputType]=\"'password'\"\n [placeHolder]=\"'Repetir contrase\u00F1a'\"\n [control]=\"updateUserForm.controls['re_password']\"\n [validateText]=\"updateUserForm.controls['re_password'].hasError('required') ? 'Debe repetir la contrase\u00F1a' :\n updateUserForm.controls['re_password'].hasError('minlength') ? 'M\u00EDnimo 5 caracteres' :\n updateUserForm.controls['re_password'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n updateUserForm.hasError('mismatch') ? 'Las contrase\u00F1as no coinciden' :\n 'Repita la contrase\u00F1a'\"\n ></ipt-input>\n </div>\n\n <!-- Mensaje adicional para el error de mismatch (opcional, si quieres mostrarlo por separado) -->\n\n <div *ngIf=\"updateUserForm.hasError('mismatch') && updateUserForm.controls['changePassword'].value\" class=\"error-message\">\n <small >Las contrase\u00F1as no coinciden</small>\n </div>\n <!-- Parent Information Section -->\n <div class=\"section-header\" *ngIf=\"DataStudent?.cods\">\n <h2>Informaci\u00F3n del acudiente</h2>\n </div>\n <div *ngIf=\"DataStudent?.cods\">\n <div *ngIf=\"showParentSection; else noParentMessage\">\n <div class=\"form-grid\">\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Nombres'\"\n [control]=\"updateUserForm.controls['parent_name']\"\n [validateText]=\"'Debe ingresar el nombre'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Apellidos'\"\n [control]=\"updateUserForm.controls['parent_last_name']\"\n [validateText]=\"'Debe ingresar los apellidos'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Ocupaci\u00F3n'\"\n [control]=\"updateUserForm.controls['parent_occupation']\"\n [validateText]=\"'Debe ingresar la ocupaci\u00F3n'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'email'\"\n [placeHolder]=\"'Email'\"\n [control]=\"updateUserForm.controls['parent_email']\"\n [validateText]=\"'Debe ingresar un correo v\u00E1lido'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['parent_id_card_type'].value\"\n [control]=\"updateUserForm.controls['parent_id_card_type']\"\n [selectCode]=\"updateUserForm.controls['parent_id_card_type'].value === null ? 'Tipo de documento' : updateUserForm.controls['parent_id_card_type'].value\"\n [isRequired]=\"true\"\n [data]=\"idTypes\"\n (eventSelect)=\"selectIdType('parent_id_card_type', $event)\"\n [defaultText]=\"'Tipo de documento'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'number'\"\n [placeHolder]=\"'Documento'\"\n [control]=\"updateUserForm.controls['parent_id_card']\"\n [validateText]=\"'Debe ingresar el n\u00FAmero de documento'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['parent_phone_indicative'].value\"\n [control]=\"updateUserForm.controls['parent_phone_indicative']\"\n [data]=\"indicatives\"\n (eventSelect)=\"selectIndicative('parent_phone_indicative', $event)\"\n [defaultText]=\"'Indicativo'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'number'\"\n [placeHolder]=\"'Tel\u00E9fono'\"\n [control]=\"updateUserForm.controls['parent_phone_number']\"\n [validateText]=\"'Debe ingresar un n\u00FAmero de tel\u00E9fono v\u00E1lido'\"\n ></ipt-input>\n\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Direcci\u00F3n de oficina'\"\n [control]=\"updateUserForm.controls['parent_office_adrress']\"\n [validateText]=\"'Debe ingresar la direcci\u00F3n'\"\n ></ipt-input>\n </div>\n </div>\n <ng-template #noParentMessage>\n <div class=\"no-parent-message\">\n <p>Sin acudiente</p>\n </div>\n </ng-template>\n </div>\n <div class=\"buttons-container\">\n <div class=\"buttons-container-inner\">\n <ipt-button\n [buttonType]=\"'button'\"\n [label]=\"'Cerrar'\"\n [primary]=\"false\"\n [isEnabled]=\"true\"\n (onClick)=\"closeTable()\"\n ></ipt-button>\n\n <ipt-button\n [label]=\"'Actualizar'\"\n [isEnabled]=\"!loader && updateUserForm.valid && !updateUserForm.hasError('mismatch') && hasFormChanged()\"\n (onClick)=\"showConfirmDialogs()\"\n [primary]=\"true\"\n ></ipt-button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n\n <!-- Confirm Dialog para raz\u00F3n y observaci\u00F3n -->\n<p-dialog\n header=\"Confirmar Ajuste de Usuario\"\n [(visible)]=\"showConfirmDialog\"\n [modal]=\"true\"\n (onHide)=\"closeConfirmDialog()\"\n >\n <form [formGroup]=\"confirmForm\" class=\"confirm-form\">\n <div class=\"p-field\">\n <ipt-select\n [control]=\"confirmForm.controls['reason']\"\n [data]=\"reasons\"\n optionLabel=\"name\"\n (eventSelect)=\"selectReason($event)\"\n [defaultText]=\"'Seleccione la raz\u00F3n'\"\n ></ipt-select>\n <small *ngIf=\"confirmForm.controls['reason'].invalid && confirmForm.controls['reason'].touched\" class=\"p-error\">\n La raz\u00F3n es requerida\n </small>\n </div>\n <div class=\"p-field\">\n <label class=\"container-observation\">Observaci\u00F3n</label>\n <textarea\n id=\"observation\"\n pInputTextarea\n formControlName=\"observation\"\n rows=\"3\"\n placeholder=\"Describe detalles adicionales del ajuste\"\n ></textarea>\n <small *ngIf=\"confirmForm.controls['observation'].invalid && confirmForm.controls['observation'].touched\" class=\"p-error\">\n La observaci\u00F3n es requerida\n </small>\n </div>\n </form>\n <p-footer>\n <ipt-button\n class=\"p-button-secondary\"\n [buttonType]=\"'button'\"\n [label]=\"'Cancelar'\"\n [primary]=\"false\"\n [isEnabled]=\"true\"\n (onClick)=\"closeConfirmDialog()\"\n ></ipt-button>\n <ipt-button\n class=\"p-button-secondary\"\n [buttonType]=\"'button'\"\n [label]=\"'Confirmar'\"\n [primary]=\"true\"\n [isEnabled]=\"confirmForm.valid\"\n (onClick)=\"acceptConfirmDialog()\"\n ></ipt-button>\n </p-footer>\n</p-dialog>\n\n</main>", styles: ["@media screen and (min-width: 320px){main{background:rgba(0,0,0,.472);color:#fff;position:fixed;top:0;left:0;height:100vh;width:100vw;transition:all .5s}main .modal_container{width:90%;height:-moz-fit-content;height:fit-content;max-height:90vh;overflow-y:auto;position:fixed;inset:0;margin:auto;background-color:#fff;border-radius:5px}.header_modal{display:flex;padding:15px 15px 0;gap:1rem;align-items:center}.header_modal h1{padding:.5rem;background-color:#1c77f7;color:#fff;width:100%;border-radius:10px;font-size:1.25rem;font-weight:700}.header_modal button{margin-left:auto;font-size:26px;padding:1.2rem;font-weight:200;color:#6c7f7d;display:flex;width:25px;height:25px;align-items:center;justify-content:center;transition:50ms;background-color:transparent;border:none}.header_modal button:hover{cursor:pointer;border-radius:50%;background-color:#d4d4d4}.grid_container{display:grid;grid-template-columns:1fr;padding:0 15px}form{display:grid;grid-template-columns:1fr;gap:.25rem;justify-content:center;padding:0 1rem}.section-header{margin:1.5rem 0 .5rem;border-bottom:2px solid #1c77f7}.section-header h2{font-size:1.2rem;color:#1c77f7;font-weight:600;margin-bottom:.5rem}.form-grid{display:grid;grid-template-columns:1fr;gap:0px .25rem}.buttons-container{margin-top:2rem;margin-bottom:2rem;display:flex;justify-content:flex-end;align-items:center;flex-direction:row}.buttons-container-inner{gap:1rem;width:auto;display:flex}.user-type-image{display:none}.no-parent-message{padding:1rem;text-align:center;color:#666;font-size:1rem;font-weight:500;background-color:#f8f9fa;border-radius:.5rem;margin-top:.5rem}}@media screen and (min-width: 768px){.form-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:0px 1rem}}@media screen and (min-width: 1366px){form{padding:0}}.field{margin-top:15px;height:1px;max-width:70%;font-family:Poppins,sans-serif;color:#000;font-size:.875rem}.error-message{color:red;font-size:12px;margin-top:5px}:host ::ng-deep .p-selectbutton{display:flex;flex-wrap:wrap;justify-content:center;width:100%;min-width:10rem}:host ::ng-deep .p-selectbutton .p-button{padding:.5rem;font-size:.875rem;height:30px}:host ::ng-deep .p-buttonset .p-button:first-of-type{height:30px}.span-status{font-family:Poppins,sans-serif;color:#999;font-size:15px;font-weight:400;pointer-events:none;transition:.2s ease all;margin-left:9px}.card-status{margin-top:15px}:host ::ng-deep .p-field{margin-bottom:1rem}.p-error{color:red;font-size:.8rem}.confirm-form{display:flex;flex-direction:column;gap:1rem;font-family:Poppins,sans-serif}:host ::ng-deep .p-confirm-dialog .p-dialog-content{padding:1.5rem}:host ::ng-deep .p-confirm-dialog .p-dialog-footer{display:flex;justify-content:flex-end;gap:1rem}:host ::ng-deep .p-dialog{width:45%!important}.container-observation{width:100%;font-family:Poppins,sans-serif;color:#1c77f7;font-size:15px;font-weight:400;pointer-events:none}textarea{box-shadow:#64646f33 0 7px 29px;border-radius:3px;outline:none;display:block;transition:.2s;font-weight:300;font-family:Poppins,sans-serif;width:-webkit-fill-available;width:-moz-available;padding-left:10px;background-color:#fff;-webkit-appearance:none;max-height:80px;font-size:14px;max-width:100%}textarea::placeholder{color:#999;font-weight:400;font-family:Poppins,sans-serif;pointer-events:none}textarea::focus textarea:focus-visible{color:#999;font-size:15px;font-weight:400;font-family:Poppins,sans-serif;pointer-events:none;border:#1c77f7 1px solid;outline:none}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.Footer, selector: "p-footer" }, { kind: "component", type: i7.SelectButton, selector: "p-selectButton", inputs: ["options", "optionLabel", "optionValue", "optionDisabled", "tabindex", "multiple", "style", "styleClass", "ariaLabelledBy", "disabled", "dataKey"], outputs: ["onOptionClick", "onChange"] }, { kind: "component", type: i8.Checkbox, selector: "p-checkbox", inputs: ["value", "name", "disabled", "binary", "label", "ariaLabelledBy", "ariaLabel", "tabindex", "inputId", "style", "styleClass", "labelStyleClass", "formControl", "checkboxIcon", "readonly", "required", "trueValue", "falseValue"], outputs: ["onChange"] }, { kind: "component", type: i9.Dialog, selector: "p-dialog", inputs: ["header", "draggable", "resizable", "positionLeft", "positionTop", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "responsive", "appendTo", "breakpoints", "styleClass", "maskStyleClass", "showHeader", "breakpoint", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "visible", "style", "position"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "component", type: i10.ButtonComponent, selector: "ipt-button", inputs: ["primary", "size", "label", "buttonType", "isEnabled"], outputs: ["onClick"] }, { kind: "component", type: i11.InputComponent, selector: "ipt-input", inputs: ["inputType", "placeHolder", "validateText", "withPipe", "list", "iconUrl", "control", "prefix", "thousands", "decimal", "disabledSel"], outputs: ["dateSelected"] }, { kind: "component", type: i12.SelectComponent, selector: "ipt-select", inputs: ["isRequired", "data", "defaultText", "selectCode", "disabledSel", "initialValue", "label", "control"], outputs: ["eventSelect"] }, { kind: "pipe", type: i13.GenderDisplayPipe, name: "genderDisplay" }] });
|
|
838
831
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: updateUserFormComponent, decorators: [{
|
|
839
832
|
type: Component,
|
|
840
|
-
args: [{ selector: 'ipt-update-user-form', providers: [ConfirmationService], template: "<main *ngIf=\"visibleModal\">\n <div class=\"modal_container\">\n <div class=\"header_modal yellow-300\">\n <h1>Actualizar usuario</h1>\n <button (click)=\"closeTable()\">x</button>\n </div>\n <div class=\"grid_container\">\n <div>\n <form *ngIf=\"updateUserForm\" autocomplete=\"off\" [formGroup]=\"updateUserForm\">\n <!-- User Information Section -->\n <div class=\"section-header\">\n <h2>Informaci\u00F3n del usuario</h2>\n </div>\n <div class=\"form-grid\">\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Nombres'\"\n [control]=\"updateUserForm.controls['name']\"\n [validateText]=\"updateUserForm.controls['name'].hasError('required') ? 'Debe ingresar el nombre' :\n updateUserForm.controls['name'].hasError('minlength') ? 'M\u00EDnimo 3 caracteres' :\n updateUserForm.controls['name'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n updateUserForm.controls['name'].hasError('pattern') ? 'Solo letras, espacios y guiones' :\n updateUserForm.controls['name'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['name'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar el nombre'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Apellidos'\"\n [control]=\"updateUserForm.controls['last_name']\"\n [validateText]=\"updateUserForm.controls['last_name'].hasError('required') ? 'Debe ingresar los apellidos' :\n updateUserForm.controls['last_name'].hasError('minlength') ? 'M\u00EDnimo 3 caracteres' :\n updateUserForm.controls['last_name'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n updateUserForm.controls['last_name'].hasError('pattern') ? 'Solo letras, espacios y guiones' :\n updateUserForm.controls['last_name'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['last_name'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar los apellidos'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'email'\"\n [placeHolder]=\"'Email'\"\n [control]=\"updateUserForm.controls['email']\"\n [validateText]=\"updateUserForm.controls['email'].hasError('required') ? 'Debe ingresar un correo v\u00E1lido' :\n updateUserForm.controls['email'].hasError('maxlength') ? 'M\u00E1ximo 300 caracteres' :\n updateUserForm.controls['email'].hasError('pattern') ? 'Tiene que ser un email correcto' :\n updateUserForm.controls['email'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['email'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar un correo v\u00E1lido'\"\n ></ipt-input>\n <ipt-input\n *ngIf=\"showEmailIpt\"\n [inputType]=\"'text'\"\n [placeHolder]=\"'Email IPT'\"\n [control]=\"updateUserForm.controls['email_ipt']\"\n [validateText]=\"updateUserForm.controls['email_ipt'].hasError('required') ? 'Debe ingresar un correo IPT v\u00E1lido' :\n updateUserForm.controls['email_ipt'].hasError('maxlength') ? 'M\u00E1ximo 255 caracteres' :\n updateUserForm.controls['email_ipt'].hasError('pattern') ? 'Tiene que ser un email correcto' :\n updateUserForm.controls['email_ipt'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['email_ipt'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar un correo IPT v\u00E1lido'\"\n ></ipt-input>\n <ipt-input\n *ngIf=\"showEmailIpt\"\n [inputType]=\"'number'\"\n [placeHolder]=\"'Horas de servicio'\"\n [control]=\"updateUserForm.controls['service_hour']\"\n [validateText]=\"'Debe ingresar las horas de servicio'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Rol'\"\n [control]=\"updateUserForm.controls['role']\"\n [validateText]=\"'Rol requerido'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['gender'].value\"\n [control]=\"updateUserForm.controls['gender']\"\n [selectCode]=\"updateUserForm.controls['gender'].value === null ? 'Seleccione g\u00E9nero' : (updateUserForm.controls['gender'].value | genderDisplay)\"\n [data]=\"genders\"\n (eventSelect)=\"selectGender($event)\"\n [defaultText]=\"'Seleccione g\u00E9nero'\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['phone_indicative'].value\"\n [control]=\"updateUserForm.controls['phone_indicative']\"\n [data]=\"indicatives\"\n (eventSelect)=\"selectIndicative('phone_indicative', $event)\"\n [defaultText]=\"'Indicativo'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'number'\"\n [placeHolder]=\"'Tel\u00E9fono'\"\n [control]=\"updateUserForm.controls['phone_number']\"\n [validateText]=\"'Debe ingresar un n\u00FAmero de tel\u00E9fono v\u00E1lido'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['id_card_type'].value\"\n [control]=\"updateUserForm.controls['id_card_type']\"\n [selectCode]=\"updateUserForm.controls['id_card_type'].value === null ? 'Tipo de documento' : updateUserForm.controls['id_card_type'].value\"\n [isRequired]=\"true\"\n [data]=\"idTypes\"\n (eventSelect)=\"selectIdType('id_card_type', $event)\"\n [defaultText]=\"'Tipo de documento'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Documento'\"\n [control]=\"updateUserForm.controls['id_card']\"\n [validateText]=\"updateUserForm.controls['id_card'].hasError('required') ? 'Debe ingresar el n\u00FAmero de documento' :\n updateUserForm.controls['id_card'].hasError('minlength') ? 'M\u00EDnimo 5 caracteres' :\n updateUserForm.controls['id_card'].hasError('maxlength') ? 'M\u00E1ximo 20 caracteres' :\n updateUserForm.controls['id_card'].hasError('pattern') ? (updateUserForm.controls['id_card_type'].value === 7 || updateUserForm.controls['id_card_type'].value === 5 ? 'Solo letras y n\u00FAmeros permitidos' : 'Solo n\u00FAmeros permitidos') :\n 'Debe ingresar el n\u00FAmero de documento'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['country'].value\"\n [control]=\"updateUserForm.controls['country']\"\n [selectCode]=\"updateUserForm.controls['country'].value === null ? 'Pa\u00EDs de residencia' : updateUserForm.controls['country'].value\"\n (eventSelect)=\"selectCountry($event)\"\n [data]=\"countries\"\n [defaultText]=\"'Pa\u00EDs de residencia'\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['state'].value\"\n [control]=\"updateUserForm.controls['state']\"\n [selectCode]=\"updateUserForm.controls['state'].value === null ? 'Departamento o estado' : updateUserForm.controls['state'].value\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectState($event)\"\n [data]=\"states\"\n [defaultText]=\"'Departamento o estado'\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['city'].value\"\n [control]=\"updateUserForm.controls['city']\"\n [selectCode]=\"updateUserForm.controls['city'].value === null ? 'Ciudad de residencia' : updateUserForm.controls['city'].value\"\n (eventSelect)=\"selectCity($event)\"\n [data]=\"cities\"\n [defaultText]=\"'Ciudad de residencia'\"\n ></ipt-select>\n <div class=\"card-status\">\n <span class=\"span-status\">Estado</span>\n <p-selectButton \n [options]=\"justifyOptions\" \n formControlName=\"status\" \n optionLabel=\"name\" \n optionValue=\"code\">\n </p-selectButton>\n </div>\n <div class=\"field\">\n <p-checkbox\n formControlName=\"changePassword\"\n label=\"Cambio de contrase\u00F1a\"\n [binary]=\"true\"\n ></p-checkbox>\n </div>\n </div>\n <div class=\"form-grid\" *ngIf=\"updateUserForm.controls['changePassword'].value\">\n <ipt-input\n [inputType]=\"'password'\"\n [placeHolder]=\"'Contrase\u00F1a'\"\n [control]=\"updateUserForm.controls['password']\"\n [validateText]=\"updateUserForm.controls['password'].hasError('required') ? 'La contrase\u00F1a es requerida' :\n updateUserForm.controls['password'].hasError('minlength') ? 'M\u00EDnimo 5 caracteres' :\n updateUserForm.controls['password'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n 'Ingrese una contrase\u00F1a v\u00E1lida'\"\n ></ipt-input>\n\n <ipt-input\n [inputType]=\"'password'\"\n [placeHolder]=\"'Repetir contrase\u00F1a'\"\n [control]=\"updateUserForm.controls['re_password']\"\n [validateText]=\"updateUserForm.controls['re_password'].hasError('required') ? 'Debe repetir la contrase\u00F1a' :\n updateUserForm.controls['re_password'].hasError('minlength') ? 'M\u00EDnimo 5 caracteres' :\n updateUserForm.controls['re_password'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n updateUserForm.hasError('mismatch') ? 'Las contrase\u00F1as no coinciden' :\n 'Repita la contrase\u00F1a'\"\n ></ipt-input>\n </div>\n\n <!-- Mensaje adicional para el error de mismatch (opcional, si quieres mostrarlo por separado) -->\n\n <div *ngIf=\"updateUserForm.hasError('mismatch') && updateUserForm.controls['changePassword'].value\" class=\"error-message\">\n <small >Las contrase\u00F1as no coinciden</small>\n </div>\n <!-- Parent Information Section -->\n <div class=\"section-header\" *ngIf=\"DataStudent?.cods\">\n <h2>Informaci\u00F3n del acudiente</h2>\n </div>\n <div *ngIf=\"DataStudent?.cods\">\n <div *ngIf=\"showParentSection; else noParentMessage\">\n <div class=\"form-grid\">\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Nombres'\"\n [control]=\"updateUserForm.controls['parent_name']\"\n [validateText]=\"'Debe ingresar el nombre'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Apellidos'\"\n [control]=\"updateUserForm.controls['parent_last_name']\"\n [validateText]=\"'Debe ingresar los apellidos'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Ocupaci\u00F3n'\"\n [control]=\"updateUserForm.controls['parent_occupation']\"\n [validateText]=\"'Debe ingresar la ocupaci\u00F3n'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'email'\"\n [placeHolder]=\"'Email'\"\n [control]=\"updateUserForm.controls['parent_email']\"\n [validateText]=\"'Debe ingresar un correo v\u00E1lido'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['parent_id_card_type'].value\"\n [control]=\"updateUserForm.controls['parent_id_card_type']\"\n [selectCode]=\"updateUserForm.controls['parent_id_card_type'].value === null ? 'Tipo de documento' : updateUserForm.controls['parent_id_card_type'].value\"\n [isRequired]=\"true\"\n [data]=\"idTypes\"\n (eventSelect)=\"selectIdType('parent_id_card_type', $event)\"\n [defaultText]=\"'Tipo de documento'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'number'\"\n [placeHolder]=\"'Documento'\"\n [control]=\"updateUserForm.controls['parent_id_card']\"\n [validateText]=\"'Debe ingresar el n\u00FAmero de documento'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['parent_phone_indicative'].value\"\n [control]=\"updateUserForm.controls['parent_phone_indicative']\"\n [data]=\"indicatives\"\n (eventSelect)=\"selectIndicative('parent_phone_indicative', $event)\"\n [defaultText]=\"'Indicativo'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'number'\"\n [placeHolder]=\"'Tel\u00E9fono'\"\n [control]=\"updateUserForm.controls['parent_phone_number']\"\n [validateText]=\"'Debe ingresar un n\u00FAmero de tel\u00E9fono v\u00E1lido'\"\n ></ipt-input>\n\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Direcci\u00F3n de oficina'\"\n [control]=\"updateUserForm.controls['parent_office_adrress']\"\n [validateText]=\"'Debe ingresar la direcci\u00F3n'\"\n ></ipt-input>\n </div>\n </div>\n <ng-template #noParentMessage>\n <div class=\"no-parent-message\">\n <p>Sin acudiente</p>\n </div>\n </ng-template>\n </div>\n <div class=\"buttons-container\">\n <div class=\"buttons-container-inner\">\n <ipt-button\n [buttonType]=\"'button'\"\n [label]=\"'Cerrar'\"\n [primary]=\"false\"\n [isEnabled]=\"true\"\n (onClick)=\"closeTable()\"\n ></ipt-button>\n\n <ipt-button\n [label]=\"'Actualizar'\"\n [isEnabled]=\"!loader && updateUserForm.valid && !updateUserForm.hasError('mismatch') && hasFormChanged()\"\n (onClick)=\"showConfirmDialogs()\"\n [primary]=\"true\"\n ></ipt-button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n\n <!-- Confirm Dialog para raz\u00F3n y observaci\u00F3n -->\n<p-dialog\n header=\"Confirmar Ajuste de Usuario\"\n [(visible)]=\"showConfirmDialog\"\n [modal]=\"true\"\n (onHide)=\"closeConfirmDialog()\"\n >\n <form [formGroup]=\"confirmForm\" class=\"confirm-form\">\n <div class=\"p-field\">\n <ipt-select\n [initialValue]=\"confirmForm.controls['reason'].value\"\n [control]=\"confirmForm.controls['reason']\"\n [data]=\"reasons\"\n optionLabel=\"name\"\n (eventSelect)=\"selectReason($event)\"\n [defaultText]=\"'Seleccione la raz\u00F3n'\"\n ></ipt-select>\n <small *ngIf=\"confirmForm.controls['reason'].invalid && confirmForm.controls['reason'].touched\" class=\"p-error\">\n La raz\u00F3n es requerida\n </small>\n </div>\n <div class=\"p-field\">\n <label class=\"container-observation\">Observaci\u00F3n</label>\n <textarea\n id=\"observation\"\n pInputTextarea\n formControlName=\"observation\"\n rows=\"3\"\n placeholder=\"Describe detalles adicionales del ajuste\"\n ></textarea>\n <small *ngIf=\"confirmForm.controls['observation'].invalid && confirmForm.controls['observation'].touched\" class=\"p-error\">\n La observaci\u00F3n es requerida\n </small>\n </div>\n </form>\n <p-footer>\n <ipt-button\n class=\"p-button-secondary\"\n [buttonType]=\"'button'\"\n [label]=\"'Cancelar'\"\n [primary]=\"false\"\n [isEnabled]=\"true\"\n (onClick)=\"closeConfirmDialog()\"\n ></ipt-button>\n <ipt-button\n class=\"p-button-secondary\"\n [buttonType]=\"'button'\"\n [label]=\"'Confirmar'\"\n [primary]=\"true\"\n [isEnabled]=\"confirmForm.valid\"\n (onClick)=\"acceptConfirmDialog()\"\n ></ipt-button>\n </p-footer>\n</p-dialog>\n\n</main>", styles: ["@media screen and (min-width: 320px){main{background:rgba(0,0,0,.472);color:#fff;position:fixed;top:0;left:0;height:100vh;width:100vw;transition:all .5s}main .modal_container{width:90%;height:-moz-fit-content;height:fit-content;max-height:90vh;overflow-y:auto;position:fixed;inset:0;margin:auto;background-color:#fff;border-radius:5px}.header_modal{display:flex;padding:15px 15px 0;gap:1rem;align-items:center}.header_modal h1{padding:.5rem;background-color:#1c77f7;color:#fff;width:100%;border-radius:10px;font-size:1.25rem;font-weight:700}.header_modal button{margin-left:auto;font-size:26px;padding:1.2rem;font-weight:200;color:#6c7f7d;display:flex;width:25px;height:25px;align-items:center;justify-content:center;transition:50ms;background-color:transparent;border:none}.header_modal button:hover{cursor:pointer;border-radius:50%;background-color:#d4d4d4}.grid_container{display:grid;grid-template-columns:1fr;padding:0 15px}form{display:grid;grid-template-columns:1fr;gap:.25rem;justify-content:center;padding:0 1rem}.section-header{margin:1.5rem 0 .5rem;border-bottom:2px solid #1c77f7}.section-header h2{font-size:1.2rem;color:#1c77f7;font-weight:600;margin-bottom:.5rem}.form-grid{display:grid;grid-template-columns:1fr;gap:0px .25rem}.buttons-container{margin-top:2rem;margin-bottom:2rem;display:flex;justify-content:flex-end;align-items:center;flex-direction:row}.buttons-container-inner{gap:1rem;width:auto;display:flex}.user-type-image{display:none}.no-parent-message{padding:1rem;text-align:center;color:#666;font-size:1rem;font-weight:500;background-color:#f8f9fa;border-radius:.5rem;margin-top:.5rem}}@media screen and (min-width: 768px){.form-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:0px 1rem}}@media screen and (min-width: 1366px){form{padding:0}}.field{margin-top:15px;height:1px;max-width:70%;font-family:Poppins,sans-serif;color:#000;font-size:.875rem}.error-message{color:red;font-size:12px;margin-top:5px}:host ::ng-deep .p-selectbutton{display:flex;flex-wrap:wrap;justify-content:center;width:100%;min-width:10rem}:host ::ng-deep .p-selectbutton .p-button{padding:.5rem;font-size:.875rem;height:30px}:host ::ng-deep .p-buttonset .p-button:first-of-type{height:30px}.span-status{font-family:Poppins,sans-serif;color:#999;font-size:15px;font-weight:400;pointer-events:none;transition:.2s ease all;margin-left:9px}.card-status{margin-top:15px}:host ::ng-deep .p-field{margin-bottom:1.5rem}.p-error{color:red;font-size:.8rem}.confirm-form{display:flex;flex-direction:column;gap:1rem;font-family:Poppins,sans-serif}:host ::ng-deep .p-confirm-dialog .p-dialog-content{padding:1.5rem}:host ::ng-deep .p-confirm-dialog .p-dialog-footer{display:flex;justify-content:flex-end;gap:1rem}:host ::ng-deep .p-dialog{width:45%!important}.container-observation{width:100%;font-family:Poppins,sans-serif;color:#1c77f7;font-size:15px;font-weight:400;pointer-events:none}textarea{box-shadow:#64646f33 0 7px 29px;border-radius:3px;outline:none;display:block;transition:.2s;font-weight:300;font-family:Poppins,sans-serif;width:-webkit-fill-available;width:-moz-available;padding-left:10px;background-color:#fff;-webkit-appearance:none;max-height:80px;font-size:14px;max-width:100%}textarea::placeholder{color:#999;font-weight:400;font-family:Poppins,sans-serif;pointer-events:none}textarea::focus textarea:focus-visible{color:#999;font-size:15px;font-weight:400;font-family:Poppins,sans-serif;pointer-events:none;border:#1c77f7 1px solid;outline:none}\n"] }]
|
|
841
|
-
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }, { type: i2.ParameterService }, { type: i3.BaseService }, { type: i4.UserService }
|
|
833
|
+
args: [{ selector: 'ipt-update-user-form', providers: [], template: "<main *ngIf=\"visibleModal\">\n <div class=\"modal_container\">\n <div class=\"header_modal yellow-300\">\n <h1>Actualizar usuario</h1>\n <button (click)=\"closeTable()\">x</button>\n </div>\n <div class=\"grid_container\">\n <div>\n <form *ngIf=\"updateUserForm\" autocomplete=\"off\" [formGroup]=\"updateUserForm\">\n <!-- User Information Section -->\n <div class=\"section-header\">\n <h2>Informaci\u00F3n del usuario</h2>\n </div>\n <div class=\"form-grid\">\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Nombres'\"\n [control]=\"updateUserForm.controls['name']\"\n [validateText]=\"updateUserForm.controls['name'].hasError('required') ? 'Debe ingresar el nombre' :\n updateUserForm.controls['name'].hasError('minlength') ? 'M\u00EDnimo 3 caracteres' :\n updateUserForm.controls['name'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n updateUserForm.controls['name'].hasError('pattern') ? 'Solo letras, espacios y guiones' :\n updateUserForm.controls['name'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['name'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar el nombre'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Apellidos'\"\n [control]=\"updateUserForm.controls['last_name']\"\n [validateText]=\"updateUserForm.controls['last_name'].hasError('required') ? 'Debe ingresar los apellidos' :\n updateUserForm.controls['last_name'].hasError('minlength') ? 'M\u00EDnimo 3 caracteres' :\n updateUserForm.controls['last_name'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n updateUserForm.controls['last_name'].hasError('pattern') ? 'Solo letras, espacios y guiones' :\n updateUserForm.controls['last_name'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['last_name'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar los apellidos'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'email'\"\n [placeHolder]=\"'Email'\"\n [control]=\"updateUserForm.controls['email']\"\n [validateText]=\"updateUserForm.controls['email'].hasError('required') ? 'Debe ingresar un correo v\u00E1lido' :\n updateUserForm.controls['email'].hasError('maxlength') ? 'M\u00E1ximo 300 caracteres' :\n updateUserForm.controls['email'].hasError('pattern') ? 'Tiene que ser un email correcto' :\n updateUserForm.controls['email'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['email'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar un correo v\u00E1lido'\"\n ></ipt-input>\n <ipt-input\n *ngIf=\"showEmailIpt\"\n [inputType]=\"'text'\"\n [placeHolder]=\"'Email IPT'\"\n [control]=\"updateUserForm.controls['email_ipt']\"\n [validateText]=\"updateUserForm.controls['email_ipt'].hasError('required') ? 'Debe ingresar un correo IPT v\u00E1lido' :\n updateUserForm.controls['email_ipt'].hasError('maxlength') ? 'M\u00E1ximo 255 caracteres' :\n updateUserForm.controls['email_ipt'].hasError('pattern') ? 'Tiene que ser un email correcto' :\n updateUserForm.controls['email_ipt'].hasError('hasWhitespace') ? 'No se permiten espacios al inicio o final' :\n updateUserForm.controls['email_ipt'].hasError('onlyWhitespace') ? 'No se permiten solo espacios' :\n 'Debe ingresar un correo IPT v\u00E1lido'\"\n ></ipt-input>\n <ipt-input\n *ngIf=\"showEmailIpt\"\n [inputType]=\"'number'\"\n [placeHolder]=\"'Horas de servicio'\"\n [control]=\"updateUserForm.controls['service_hour']\"\n [validateText]=\"'Debe ingresar las horas de servicio'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Rol'\"\n [control]=\"updateUserForm.controls['role']\"\n [validateText]=\"'Rol requerido'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['gender'].value\"\n [control]=\"updateUserForm.controls['gender']\"\n [selectCode]=\"updateUserForm.controls['gender'].value === null ? 'Seleccione g\u00E9nero' : (updateUserForm.controls['gender'].value | genderDisplay)\"\n [data]=\"genders\"\n (eventSelect)=\"selectGender($event)\"\n [defaultText]=\"'Seleccione g\u00E9nero'\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['phone_indicative'].value\"\n [control]=\"updateUserForm.controls['phone_indicative']\"\n [data]=\"indicatives\"\n (eventSelect)=\"selectIndicative('phone_indicative', $event)\"\n [defaultText]=\"'Indicativo'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'number'\"\n [placeHolder]=\"'Tel\u00E9fono'\"\n [control]=\"updateUserForm.controls['phone_number']\"\n [validateText]=\"'Debe ingresar un n\u00FAmero de tel\u00E9fono v\u00E1lido'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['id_card_type'].value\"\n [control]=\"updateUserForm.controls['id_card_type']\"\n [selectCode]=\"updateUserForm.controls['id_card_type'].value === null ? 'Tipo de documento' : updateUserForm.controls['id_card_type'].value\"\n [isRequired]=\"true\"\n [data]=\"idTypes\"\n (eventSelect)=\"selectIdType('id_card_type', $event)\"\n [defaultText]=\"'Tipo de documento'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Documento'\"\n [control]=\"updateUserForm.controls['id_card']\"\n [validateText]=\"updateUserForm.controls['id_card'].hasError('required') ? 'Debe ingresar el n\u00FAmero de documento' :\n updateUserForm.controls['id_card'].hasError('minlength') ? 'M\u00EDnimo 5 caracteres' :\n updateUserForm.controls['id_card'].hasError('maxlength') ? 'M\u00E1ximo 20 caracteres' :\n updateUserForm.controls['id_card'].hasError('pattern') ? (updateUserForm.controls['id_card_type'].value === 7 || updateUserForm.controls['id_card_type'].value === 5 ? 'Solo letras y n\u00FAmeros permitidos' : 'Solo n\u00FAmeros permitidos') :\n 'Debe ingresar el n\u00FAmero de documento'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['country'].value\"\n [control]=\"updateUserForm.controls['country']\"\n [selectCode]=\"updateUserForm.controls['country'].value === null ? 'Pa\u00EDs de residencia' : updateUserForm.controls['country'].value\"\n (eventSelect)=\"selectCountry($event)\"\n [data]=\"countries\"\n [defaultText]=\"'Pa\u00EDs de residencia'\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['state'].value\"\n [control]=\"updateUserForm.controls['state']\"\n [selectCode]=\"updateUserForm.controls['state'].value === null ? 'Departamento o estado' : updateUserForm.controls['state'].value\"\n [isRequired]=\"true\"\n (eventSelect)=\"selectState($event)\"\n [data]=\"states\"\n [defaultText]=\"'Departamento o estado'\"\n ></ipt-select>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['city'].value\"\n [control]=\"updateUserForm.controls['city']\"\n [selectCode]=\"updateUserForm.controls['city'].value === null ? 'Ciudad de residencia' : updateUserForm.controls['city'].value\"\n (eventSelect)=\"selectCity($event)\"\n [data]=\"cities\"\n [defaultText]=\"'Ciudad de residencia'\"\n ></ipt-select>\n <div class=\"card-status\">\n <span class=\"span-status\">Estado</span>\n <p-selectButton \n [options]=\"justifyOptions\" \n formControlName=\"status\" \n optionLabel=\"name\" \n optionValue=\"code\">\n </p-selectButton>\n </div>\n <div *ngIf=\"!userRoleCommercial\" class=\"field\">\n <p-checkbox\n formControlName=\"changePassword\"\n label=\"Cambio de contrase\u00F1a\"\n [binary]=\"true\"\n ></p-checkbox>\n </div>\n </div>\n <div class=\"form-grid\" *ngIf=\"updateUserForm.controls['changePassword'].value\">\n <ipt-input\n [inputType]=\"'password'\"\n [placeHolder]=\"'Contrase\u00F1a'\"\n [control]=\"updateUserForm.controls['password']\"\n [validateText]=\"updateUserForm.controls['password'].hasError('required') ? 'La contrase\u00F1a es requerida' :\n updateUserForm.controls['password'].hasError('minlength') ? 'M\u00EDnimo 5 caracteres' :\n updateUserForm.controls['password'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n 'Ingrese una contrase\u00F1a v\u00E1lida'\"\n ></ipt-input>\n\n <ipt-input\n [inputType]=\"'password'\"\n [placeHolder]=\"'Repetir contrase\u00F1a'\"\n [control]=\"updateUserForm.controls['re_password']\"\n [validateText]=\"updateUserForm.controls['re_password'].hasError('required') ? 'Debe repetir la contrase\u00F1a' :\n updateUserForm.controls['re_password'].hasError('minlength') ? 'M\u00EDnimo 5 caracteres' :\n updateUserForm.controls['re_password'].hasError('maxlength') ? 'M\u00E1ximo 32 caracteres' :\n updateUserForm.hasError('mismatch') ? 'Las contrase\u00F1as no coinciden' :\n 'Repita la contrase\u00F1a'\"\n ></ipt-input>\n </div>\n\n <!-- Mensaje adicional para el error de mismatch (opcional, si quieres mostrarlo por separado) -->\n\n <div *ngIf=\"updateUserForm.hasError('mismatch') && updateUserForm.controls['changePassword'].value\" class=\"error-message\">\n <small >Las contrase\u00F1as no coinciden</small>\n </div>\n <!-- Parent Information Section -->\n <div class=\"section-header\" *ngIf=\"DataStudent?.cods\">\n <h2>Informaci\u00F3n del acudiente</h2>\n </div>\n <div *ngIf=\"DataStudent?.cods\">\n <div *ngIf=\"showParentSection; else noParentMessage\">\n <div class=\"form-grid\">\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Nombres'\"\n [control]=\"updateUserForm.controls['parent_name']\"\n [validateText]=\"'Debe ingresar el nombre'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Apellidos'\"\n [control]=\"updateUserForm.controls['parent_last_name']\"\n [validateText]=\"'Debe ingresar los apellidos'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Ocupaci\u00F3n'\"\n [control]=\"updateUserForm.controls['parent_occupation']\"\n [validateText]=\"'Debe ingresar la ocupaci\u00F3n'\"\n ></ipt-input>\n <ipt-input\n [inputType]=\"'email'\"\n [placeHolder]=\"'Email'\"\n [control]=\"updateUserForm.controls['parent_email']\"\n [validateText]=\"'Debe ingresar un correo v\u00E1lido'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['parent_id_card_type'].value\"\n [control]=\"updateUserForm.controls['parent_id_card_type']\"\n [selectCode]=\"updateUserForm.controls['parent_id_card_type'].value === null ? 'Tipo de documento' : updateUserForm.controls['parent_id_card_type'].value\"\n [isRequired]=\"true\"\n [data]=\"idTypes\"\n (eventSelect)=\"selectIdType('parent_id_card_type', $event)\"\n [defaultText]=\"'Tipo de documento'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'number'\"\n [placeHolder]=\"'Documento'\"\n [control]=\"updateUserForm.controls['parent_id_card']\"\n [validateText]=\"'Debe ingresar el n\u00FAmero de documento'\"\n ></ipt-input>\n <ipt-select\n [initialValue]=\"updateUserForm.controls['parent_phone_indicative'].value\"\n [control]=\"updateUserForm.controls['parent_phone_indicative']\"\n [data]=\"indicatives\"\n (eventSelect)=\"selectIndicative('parent_phone_indicative', $event)\"\n [defaultText]=\"'Indicativo'\"\n ></ipt-select>\n <ipt-input\n [inputType]=\"'number'\"\n [placeHolder]=\"'Tel\u00E9fono'\"\n [control]=\"updateUserForm.controls['parent_phone_number']\"\n [validateText]=\"'Debe ingresar un n\u00FAmero de tel\u00E9fono v\u00E1lido'\"\n ></ipt-input>\n\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Direcci\u00F3n de oficina'\"\n [control]=\"updateUserForm.controls['parent_office_adrress']\"\n [validateText]=\"'Debe ingresar la direcci\u00F3n'\"\n ></ipt-input>\n </div>\n </div>\n <ng-template #noParentMessage>\n <div class=\"no-parent-message\">\n <p>Sin acudiente</p>\n </div>\n </ng-template>\n </div>\n <div class=\"buttons-container\">\n <div class=\"buttons-container-inner\">\n <ipt-button\n [buttonType]=\"'button'\"\n [label]=\"'Cerrar'\"\n [primary]=\"false\"\n [isEnabled]=\"true\"\n (onClick)=\"closeTable()\"\n ></ipt-button>\n\n <ipt-button\n [label]=\"'Actualizar'\"\n [isEnabled]=\"!loader && updateUserForm.valid && !updateUserForm.hasError('mismatch') && hasFormChanged()\"\n (onClick)=\"showConfirmDialogs()\"\n [primary]=\"true\"\n ></ipt-button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n\n <!-- Confirm Dialog para raz\u00F3n y observaci\u00F3n -->\n<p-dialog\n header=\"Confirmar Ajuste de Usuario\"\n [(visible)]=\"showConfirmDialog\"\n [modal]=\"true\"\n (onHide)=\"closeConfirmDialog()\"\n >\n <form [formGroup]=\"confirmForm\" class=\"confirm-form\">\n <div class=\"p-field\">\n <ipt-select\n [control]=\"confirmForm.controls['reason']\"\n [data]=\"reasons\"\n optionLabel=\"name\"\n (eventSelect)=\"selectReason($event)\"\n [defaultText]=\"'Seleccione la raz\u00F3n'\"\n ></ipt-select>\n <small *ngIf=\"confirmForm.controls['reason'].invalid && confirmForm.controls['reason'].touched\" class=\"p-error\">\n La raz\u00F3n es requerida\n </small>\n </div>\n <div class=\"p-field\">\n <label class=\"container-observation\">Observaci\u00F3n</label>\n <textarea\n id=\"observation\"\n pInputTextarea\n formControlName=\"observation\"\n rows=\"3\"\n placeholder=\"Describe detalles adicionales del ajuste\"\n ></textarea>\n <small *ngIf=\"confirmForm.controls['observation'].invalid && confirmForm.controls['observation'].touched\" class=\"p-error\">\n La observaci\u00F3n es requerida\n </small>\n </div>\n </form>\n <p-footer>\n <ipt-button\n class=\"p-button-secondary\"\n [buttonType]=\"'button'\"\n [label]=\"'Cancelar'\"\n [primary]=\"false\"\n [isEnabled]=\"true\"\n (onClick)=\"closeConfirmDialog()\"\n ></ipt-button>\n <ipt-button\n class=\"p-button-secondary\"\n [buttonType]=\"'button'\"\n [label]=\"'Confirmar'\"\n [primary]=\"true\"\n [isEnabled]=\"confirmForm.valid\"\n (onClick)=\"acceptConfirmDialog()\"\n ></ipt-button>\n </p-footer>\n</p-dialog>\n\n</main>", styles: ["@media screen and (min-width: 320px){main{background:rgba(0,0,0,.472);color:#fff;position:fixed;top:0;left:0;height:100vh;width:100vw;transition:all .5s}main .modal_container{width:90%;height:-moz-fit-content;height:fit-content;max-height:90vh;overflow-y:auto;position:fixed;inset:0;margin:auto;background-color:#fff;border-radius:5px}.header_modal{display:flex;padding:15px 15px 0;gap:1rem;align-items:center}.header_modal h1{padding:.5rem;background-color:#1c77f7;color:#fff;width:100%;border-radius:10px;font-size:1.25rem;font-weight:700}.header_modal button{margin-left:auto;font-size:26px;padding:1.2rem;font-weight:200;color:#6c7f7d;display:flex;width:25px;height:25px;align-items:center;justify-content:center;transition:50ms;background-color:transparent;border:none}.header_modal button:hover{cursor:pointer;border-radius:50%;background-color:#d4d4d4}.grid_container{display:grid;grid-template-columns:1fr;padding:0 15px}form{display:grid;grid-template-columns:1fr;gap:.25rem;justify-content:center;padding:0 1rem}.section-header{margin:1.5rem 0 .5rem;border-bottom:2px solid #1c77f7}.section-header h2{font-size:1.2rem;color:#1c77f7;font-weight:600;margin-bottom:.5rem}.form-grid{display:grid;grid-template-columns:1fr;gap:0px .25rem}.buttons-container{margin-top:2rem;margin-bottom:2rem;display:flex;justify-content:flex-end;align-items:center;flex-direction:row}.buttons-container-inner{gap:1rem;width:auto;display:flex}.user-type-image{display:none}.no-parent-message{padding:1rem;text-align:center;color:#666;font-size:1rem;font-weight:500;background-color:#f8f9fa;border-radius:.5rem;margin-top:.5rem}}@media screen and (min-width: 768px){.form-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:0px 1rem}}@media screen and (min-width: 1366px){form{padding:0}}.field{margin-top:15px;height:1px;max-width:70%;font-family:Poppins,sans-serif;color:#000;font-size:.875rem}.error-message{color:red;font-size:12px;margin-top:5px}:host ::ng-deep .p-selectbutton{display:flex;flex-wrap:wrap;justify-content:center;width:100%;min-width:10rem}:host ::ng-deep .p-selectbutton .p-button{padding:.5rem;font-size:.875rem;height:30px}:host ::ng-deep .p-buttonset .p-button:first-of-type{height:30px}.span-status{font-family:Poppins,sans-serif;color:#999;font-size:15px;font-weight:400;pointer-events:none;transition:.2s ease all;margin-left:9px}.card-status{margin-top:15px}:host ::ng-deep .p-field{margin-bottom:1rem}.p-error{color:red;font-size:.8rem}.confirm-form{display:flex;flex-direction:column;gap:1rem;font-family:Poppins,sans-serif}:host ::ng-deep .p-confirm-dialog .p-dialog-content{padding:1.5rem}:host ::ng-deep .p-confirm-dialog .p-dialog-footer{display:flex;justify-content:flex-end;gap:1rem}:host ::ng-deep .p-dialog{width:45%!important}.container-observation{width:100%;font-family:Poppins,sans-serif;color:#1c77f7;font-size:15px;font-weight:400;pointer-events:none}textarea{box-shadow:#64646f33 0 7px 29px;border-radius:3px;outline:none;display:block;transition:.2s;font-weight:300;font-family:Poppins,sans-serif;width:-webkit-fill-available;width:-moz-available;padding-left:10px;background-color:#fff;-webkit-appearance:none;max-height:80px;font-size:14px;max-width:100%}textarea::placeholder{color:#999;font-weight:400;font-family:Poppins,sans-serif;pointer-events:none}textarea::focus textarea:focus-visible{color:#999;font-size:15px;font-weight:400;font-family:Poppins,sans-serif;pointer-events:none;border:#1c77f7 1px solid;outline:none}\n"] }]
|
|
834
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ChangeDetectorRef }, { type: i2.ParameterService }, { type: i3.BaseService }, { type: i4.UserService }]; }, propDecorators: { DataStudent: [{
|
|
842
835
|
type: Input
|
|
843
836
|
}], visibleModal: [{
|
|
844
837
|
type: Input
|
|
@@ -847,4 +840,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImpor
|
|
|
847
840
|
}], userUpdatedEvent: [{
|
|
848
841
|
type: Output
|
|
849
842
|
}] } });
|
|
850
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXVzZXItZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy91cGRhdGUtdXNlci1mb3JtL3VwZGF0ZS11c2VyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvdXBkYXRlLXVzZXItZm9ybS91cGRhdGUtdXNlci1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBb0MsTUFBTSxFQUFnQyxNQUFNLGVBQWUsQ0FBQztBQUN2SSxPQUFPLEVBQTJDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVMvQixNQUFNLE9BQU8sdUJBQXVCO0lBOENsQyxZQUNVLEVBQWUsRUFDZixHQUFzQixFQUN0QixnQkFBa0MsRUFDbEMsV0FBd0IsRUFDeEIsV0FBd0IsRUFDeEIsbUJBQXdDO1FBTHhDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFsRHpDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzdCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUMzQyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFD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QyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3BDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7O29IQWwzQlUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsc01BRnZCLENBQUMsbUJBQW1CLENBQUMsK0NDZGxDLDJyaUJBZ1ZPOzJGRGhVTSx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0Usc0JBQXNCLGFBR3JCLENBQUMsbUJBQW1CLENBQUM7dVBBR3ZCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIE91dHB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgIFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy91c2VyLXNlcnZpY2UvdXNlci1zZXJ2aWNlJztcbmltcG9ydCB7ICBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvYmFzZS1zZXJ2aWNlL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyAgUGFyYW1ldGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvcGFyYW1ldGVycy1zZXJ2aWNlL3BhcmFtZXRlcnMuc2VydmljZSc7XG5pbXBvcnQgeyAgSUZvcm1EYXRhUnEgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy91c2VyL3VzZXItcnEubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpcHQtdXBkYXRlLXVzZXItZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi91cGRhdGUtdXNlci1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXBkYXRlLXVzZXItZm9ybS5jb21wb25lbnQuY3NzJ10sXG4gIHByb3ZpZGVyczogW0NvbmZpcm1hdGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIHVwZGF0ZVVzZXJGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIERhdGFTdHVkZW50OiBhbnk7XG4gIEBJbnB1dCgpIHZpc2libGVNb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgY2xvc2VNb2RhbElTID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgdXNlclVwZGF0ZWRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgdXBkYXRlVXNlckZvcm0hOiBGb3JtR3JvdXA7XG4gIGNvbmZpcm1Gb3JtITogRm9ybUdyb3VwO1xuICBwaG90bzogc3RyaW5nID0gJyc7XG4gIHBob25lTnVtYmVySW5kaWNhdGl2ZXM6IGFueVtdID0gW107XG4gIGlkVHlwZXM6IGFueVtdID0gW107XG4gIGxvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBzdGF0ZXM6IGFueSA9IFtdO1xuICBjaXRpZXM6IGFueSA9IFtdO1xuICBjb3VudHJpZXM6IGFueSA9IFtdO1xuICBzaG93UGFyZW50U2VjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93RW1haWxJcHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2hvd0NvbmZpcm1TZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHBhcmFtZXRlcnNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFyYW1ldGVyc0FsbD86IGFueTtcbiAgaW5kaWNhdGl2ZXM6IGFueVtdID0gW107XG4gIGNpdmlsU3RhdHVzOiBhbnlbXSA9IFtdO1xuICBnZW5kZXJzOiBhbnlbXSA9IFtdO1xuICBzdHJhdHVtczogYW55W10gPSBbXTtcbiAgc2hvd0NvbmZpcm1EaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gdXNlclVwZGF0ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbml0aWFsRm9ybVZhbHVlOiBhbnkgPSBbXTtcbiAgcHJpdmF0ZSBpZFR5cGVTdWJzY3JpcHRpb24/OiAgU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHBlbmRpbmdJbml0OiBib29sZWFuID0gZmFsc2U7XG4gIFxuICBpc1N0dWRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAganVzdGlmeU9wdGlvbnM6IGFueVtdID0gW107XG4gIC8vICAganVzdGlmeU9wdGlvbnM6IGFueVtdID0gW1xuICAvLyAgIHsgbmFtZTogJ0FjdGl2bycsIGNvZGU6IDEgfSxcbiAgLy8gICB7IG5hbWU6ICdSZW1vdmlkbycsIGNvZGU6IDQgfVxuICAvLyBdO1xuICBcbiAgcmVhc29ucyA9IFtcbiAgICB7IG5hbWU6ICdDb3JyZWNjacOzbiBkZSBlcnJvcmVzIGVuIGRhdG9zIHBlcnNvbmFsZXMnLCBjb2RlOiAxIH0sXG4gICAgeyBuYW1lOiAnQ29ycmVjY2lvbiBkZSBkb2N1bWVudGFjaW9uJywgY29kZTogMiB9LFxuICAgIHsgbmFtZTogJ0FjdHVhbGl6YWNpw7NuIGRlIGNvbnRhY3RvJywgY29kZTogMyB9LFxuICAgIHsgbmFtZTogJ2NvcnJlY2Npb24gZGF0b3MgZGUgQWN1ZGllbnRlJywgY29kZTogNCB9LFxuICAgIHsgbmFtZTogJ0NhbWJpbyBkZSBjb250cmFzZcOxYScsIGNvZGU6IDUgfSxcbiAgICB7IG5hbWU6ICdDYW1iaW8gZGUgcmVzaWRlbmNpYScsIGNvZGU6IDYgfSxcbiAgICB7IG5hbWU6ICdPdHJvJywgY29kZTogNyB9XG4gIF07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcGFyYW1ldGVyU2VydmljZTogUGFyYW1ldGVyU2VydmljZSxcbiAgICBwcml2YXRlIGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgIHRoaXMuaW5pdENvbmZpcm1Gb3JtKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdldFBhcmFtZXRlcnMoKTtcbiAgICB0aGlzLnRyYWNrSWRUeXBlQ2hhbmdlcygpO1xuICAgIHRoaXMuc2V0SnVzdGlmeU9wdGlvbnMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sndmlzaWJsZU1vZGFsJ10gJiYgY2hhbmdlc1sndmlzaWJsZU1vZGFsJ10uY3VycmVudFZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5wYXJhbWV0ZXJzTG9hZGVkKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG4gICAgICB0aGlzLnNldEp1c3RpZnlPcHRpb25zKCk7XG4gICAgICB0aGlzLnRyYWNrSWRUeXBlQ2hhbmdlcygpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfWVsc2UgIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nSW5pdCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaWRUeXBlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmlkVHlwZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGluaXRDb25maXJtRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpcm1Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICByZWFzb246IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG9ic2VydmF0aW9uOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTApXV1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SnVzdGlmeU9wdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5pc1N0dWRlbnQgPSB0aGlzLkRhdGFTdHVkZW50Py5yb2xlID09PSAxMztcblxuICAgIGlmICh0aGlzLmlzU3R1ZGVudCkge1xuICAgICAgLy8gTGlzdGEgY29tcGxldGEgcGFyYSBlc3R1ZGlhbnRlXG4gICAgICB0aGlzLmp1c3RpZnlPcHRpb25zID0gW1xuICAgICAgICB7IG5hbWU6ICdBY3Rpdm8nLCBjb2RlOiAxIH0sXG4gICAgICAgIHsgbmFtZTogJ1N1c3BlbmRpZG8gcC9wYWdvJywgY29kZTogMiB9LFxuICAgICAgICB7IG5hbWU6ICdQYXVzYWRvIHByb2Nlc28nLCBjb2RlOiAzIH0sXG4gICAgICAgIHsgbmFtZTogJ1JlbW92aWRvJywgY29kZTogNCB9XG4gICAgICBdO1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5nZXQoJ3N0YXR1cycpPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGEgcmVkdWNpZGEgcGFyYSBvdHJvcyByb2xlc1xuICAgICAgdGhpcy5qdXN0aWZ5T3B0aW9ucyA9IFtcbiAgICAgICAgeyBuYW1lOiAnQWN0aXZvJywgY29kZTogMSB9LFxuICAgICAgICB7IG5hbWU6ICdSZW1vdmlkbycsIGNvZGU6IDQgfVxuICAgICAgXTtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KCdzdGF0dXMnKT8uZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH1cblxuICBnZXRQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBhcmFtZXRlcnNMb2FkZWQpIHtcbiAgICAgIHRoaXMuc2V0UGFyYW1ldGVycygpO1xuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBhcmFtZXRlclNlcnZpY2UuZ2V0QWxsUGFyYW1ldGVyc0NvZEZvcm0oKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMucGFyYW1ldGVyc0FsbCA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgIHRoaXMucGFyYW1ldGVyc0xvYWRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0UGFyYW1ldGVycygpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG4gICAgICAgIHRoaXMudHJhY2tJZFR5cGVDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nSW5pdCA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHBhcmFtZXRlcnM6JywgZXJyKTtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzTG9hZGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZXRQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuaWRUeXBlcyA9IHRoaXMucGFyYW1ldGVyc0FsbD8uVHlwZUlkQ2FyZEJ5Q291bnRyeUNvbDtcbiAgICB0aGlzLmluZGljYXRpdmVzID0gdGhpcy5wYXJhbWV0ZXJzQWxsPy5pbmRpY2F0aXZlcztcbiAgICB0aGlzLmNvdW50cmllcyA9IHRoaXMucGFyYW1ldGVyc0FsbD8uY291bnRyeTtcbiAgICB0aGlzLmNpdmlsU3RhdHVzID0gdGhpcy5wYXJhbWV0ZXJzQWxsPy5jaXZpbFN0YXR1cztcbiAgICB0aGlzLnN0YXRlcyA9IHRoaXMucGFyYW1ldGVyc0FsbD8uU3RhdGU7XG4gICAgdGhpcy5jaXRpZXMgPSB0aGlzLnBhcmFtZXRlcnNBbGw/LmNpdHk7XG4gICAgaWYgKHRoaXMucGFyYW1ldGVyc0FsbCAmJiB0aGlzLnBhcmFtZXRlcnNBbGwuZ2VuZGVyKSB7XG4gICAgICAvLyBUcmFuc2Zvcm1hciBnZW5kZXIgZW4gdW4gYXJyZWdsbyBkZSB7IGNvZGUsIG5hbWUgfVxuICAgICAgdGhpcy5nZW5kZXJzID0gdGhpcy5wYXJhbWV0ZXJzQWxsLmdlbmRlci5tYXAoKGdlbmRlcjogYW55KSA9PiAoe1xuICAgICAgICBjb2RlOiBnZW5kZXIuY29kZSxcbiAgICAgICAgbmFtZTogZ2VuZGVyLm5hbWVfc3BhbmlzaFxuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdlbmRlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVGb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1BhcmVudFNlY3Rpb24gPSAhIXRoaXMuRGF0YVN0dWRlbnQ/LmNvZHM/LnBhcmVudD8uY29kZTtcbiAgICB0aGlzLnNob3dFbWFpbElwdCA9ICEhdGhpcy5EYXRhU3R1ZGVudD8uZW1haWxfaXB0ICYmIHRoaXMuRGF0YVN0dWRlbnQuZW1haWxfaXB0ICE9PSBmYWxzZTtcbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgdGhpcy5wb3B1bGF0ZUZvcm0oKTtcbiAgfVxuXG4gIGluaXRGb3JtKCk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2VGb3JtID0ge1xuICAgICAgbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDMyKV1dLFxuICAgICAgbGFzdF9uYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzIpXV0sXG4gICAgICBlbWFpbDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzAwKV1dLFxuICAgICAgZ2VuZGVyOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBpZF9jYXJkX3R5cGU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGlkX2NhcmQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDUpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyMCldXSxcbiAgICAgIHBob25lX2luZGljYXRpdmU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHBob25lX251bWJlcjogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMTApLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxNSldXSxcbiAgICAgIGNvdW50cnk6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHN0YXRlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBjaXR5OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICByb2xlOiBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0cnVlIH1dLFxuICAgICAgc2VydmljZV9ob3VyOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgcGFzc3dvcmQ6IFsnJywgW11dLFxuICAgICAgcmVfcGFzc3dvcmQ6IFsnJywgW11dLFxuICAgICAgY2hhbmdlUGFzc3dvcmQ6IFtmYWxzZV0sXG4gICAgICBzdGF0dXM6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuc2hvd0VtYWlsSXB0KSB7XG4gICAgICBPYmplY3QuYXNzaWduKGJhc2VGb3JtLCB7XG4gICAgICAgIGVtYWlsX2lwdDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5lbWFpbCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KV1dXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG93UGFyZW50U2VjdGlvbikge1xuICAgICAgT2JqZWN0LmFzc2lnbihiYXNlRm9ybSwge1xuICAgICAgICBwYXJlbnRfbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDE1MCldXSxcbiAgICAgICAgcGFyZW50X2xhc3RfbmFtZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNSksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDE1MCldXSxcbiAgICAgICAgcGFyZW50X2lkX2NhcmRfdHlwZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBwYXJlbnRfaWRfY2FyZDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNSksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDMwKV1dLFxuICAgICAgICBwYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgICBwYXJlbnRfcGhvbmVfbnVtYmVyOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMCksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwKV1dLFxuICAgICAgICBwYXJlbnRfb2NjdXBhdGlvbjogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTApXV0sXG4gICAgICAgIHBhcmVudF9vZmZpY2VfYWRycmVzczogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTUwKV1dLFxuICAgICAgICBwYXJlbnRfZW1haWw6IFsnJywgW1ZhbGlkYXRvcnMuZW1haWwsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NSldXVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVVc2VyRm9ybSA9IHRoaXMuZmIuZ3JvdXAoYmFzZUZvcm0sIHsgdmFsaWRhdG9yczogdGhpcy5wYXNzd29yZE1hdGNoVmFsaWRhdG9yIH0pO1xuXG4gICAgdGhpcy51cGRhdGVVc2VyRm9ybS5nZXQoJ2NoYW5nZVBhc3N3b3JkJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IHBhc3N3b3JkQ29udHJvbCA9IHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KCdwYXNzd29yZCcpO1xuICAgICAgY29uc3QgcmVQYXNzd29yZENvbnRyb2wgPSB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldCgncmVfcGFzc3dvcmQnKTtcblxuICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgcGFzc3dvcmRDb250cm9sPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzIpXSk7XG4gICAgICAgIHJlUGFzc3dvcmRDb250cm9sPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzIpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXNzd29yZENvbnRyb2w/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICByZVBhc3N3b3JkQ29udHJvbD8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHBhc3N3b3JkQ29udHJvbD8uc2V0VmFsdWUoJycpO1xuICAgICAgICByZVBhc3N3b3JkQ29udHJvbD8uc2V0VmFsdWUoJycpO1xuICAgICAgfVxuXG4gICAgICBwYXNzd29yZENvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIHJlUGFzc3dvcmRDb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldCgncGFzc3dvcmQnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldCgncmVfcGFzc3dvcmQnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBhc3N3b3JkTWF0Y2hWYWxpZGF0b3IoZm9ybTogRm9ybUdyb3VwKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfCBudWxsIHtcbiAgICBjb25zdCBjaGFuZ2VQYXNzd29yZCA9IGZvcm0uZ2V0KCdjaGFuZ2VQYXNzd29yZCcpPy52YWx1ZTtcbiAgICBjb25zdCBwYXNzd29yZCA9IGZvcm0uZ2V0KCdwYXNzd29yZCcpPy52YWx1ZTtcbiAgICBjb25zdCByZVBhc3N3b3JkID0gZm9ybS5nZXQoJ3JlX3Bhc3N3b3JkJyk/LnZhbHVlO1xuICAgIGlmICghY2hhbmdlUGFzc3dvcmQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBtaXNtYXRjaCA9IHBhc3N3b3JkICYmIHJlUGFzc3dvcmQgJiYgcGFzc3dvcmQgIT09IHJlUGFzc3dvcmQ7XG4gICAgcmV0dXJuIG1pc21hdGNoID8geyBtaXNtYXRjaDogdHJ1ZSB9IDogbnVsbDtcbiAgfVxuXG4gIG5vV2hpdGVzcGFjZVZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwge1xuICAgIGlmIChjb250cm9sLnZhbHVlICYmIHR5cGVvZiBjb250cm9sLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdHJpbW1lZFZhbHVlID0gY29udHJvbC52YWx1ZS50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4geyBvbmx5V2hpdGVzcGFjZTogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRyb2wudmFsdWUgIT09IHRyaW1tZWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4geyBoYXNXaGl0ZXNwYWNlOiB0cnVlIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJhbnNmb3JtUm9sZShyb2xlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJvbGVNYXA6IHsgW2tleTogbnVtYmVyXTogc3RyaW5nIH0gPSB7XG4gICAgICAxOiAnU3VwZXIgQWRtaW4nLFxuICAgICAgMTA6ICdKZWZlIEFjYWRlbWljbycsXG4gICAgICAxMTogJ0Nvb3JkaW5hZG9yIEFjYWRlbWljbycsXG4gICAgICAxMjogJ1RlYWNoZXIgQWNhZGVtaWNvJyxcbiAgICAgIDEzOiAnRXN0dWRpYW50ZScsXG4gICAgICAxNTogJ1Bvc2libGUgRXN0dWRpYW50ZScsXG4gICAgICAyMDogJ0plZmUgTWFya2V0aW5nJyxcbiAgICAgIDIxOiAnQ29vcmRpbmFkb3IgTWFya2V0aW5nJyxcbiAgICAgIDIyOiAnQXV4aWxpYXIgTWFya2V0aW5nJyxcbiAgICAgIDMwOiAnSmVmZSBBZG1pbmlzdHJhdGl2bycsXG4gICAgICAzMTogJ0Nvb3JkaW5hZG9yIEFkbWluaXN0cmF0aXZvJyxcbiAgICAgIDMyOiAnQXV4aWxpYXIgQWRtaW5pc3RyYXRpdm8nLFxuICAgICAgNDA6ICdKZWZlIENvbWVyY2lhbCcsXG4gICAgICA0MTogJ0Nvb3JkaW5hZG9yIENvbWVyY2lhbCcsXG4gICAgICA0MjogJ0FzZXNvciBDb21lcmNpYWwnLFxuICAgICAgNTA6ICdKZWZlIENhcnRlcmEnLFxuICAgICAgNTE6ICdDb29yZGluYWRvciBDYXJ0ZXJhJyxcbiAgICAgIDUyOiAnQXNlc29yIENhcnRlcmEnLFxuICAgICAgNjA6ICdQcm92ZWVkb3InXG4gICAgfTtcbiAgICByZXR1cm4gcm9sZU1hcFtOdW1iZXIocm9sZSldIHx8ICcnO1xuICB9XG5cbiAgcG9wdWxhdGVGb3JtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLkRhdGFTdHVkZW50KSB7XG4gICAgICBjb25zdCBmb3JtVmFsdWU6IGFueSA9IHtcbiAgICAgICAgbmFtZTogdGhpcy5EYXRhU3R1ZGVudC5uYW1lIHx8ICcnLFxuICAgICAgICBsYXN0X25hbWU6IHRoaXMuRGF0YVN0dWRlbnQubGFzdF9uYW1lIHx8ICcnLFxuICAgICAgICBlbWFpbDogdGhpcy5EYXRhU3R1ZGVudC5lbWFpbCB8fCAnJyxcbiAgICAgICAgZ2VuZGVyOiB0aGlzLkRhdGFTdHVkZW50LmdlbmRlciB8fCBudWxsLFxuICAgICAgICBpZF9jYXJkX3R5cGU6IHRoaXMuRGF0YVN0dWRlbnQuaWRfY2FyZF90eXBlIHx8ICcnLFxuICAgICAgICBpZF9jYXJkOiB0aGlzLkRhdGFTdHVkZW50LmlkX2NhcmQgfHwgJycsXG4gICAgICAgIHBob25lX2luZGljYXRpdmU6IHRoaXMuRGF0YVN0dWRlbnQucGhvbmVfaW5kaWNhdGl2ZSB8fCAnJyxcbiAgICAgICAgcGhvbmVfbnVtYmVyOiB0aGlzLkRhdGFTdHVkZW50LnBob25lX251bWJlciB8fCAnJyxcbiAgICAgICAgY291bnRyeTogdGhpcy5EYXRhU3R1ZGVudC5jaXR5Py5jb3VudHJ5LFxuICAgICAgICBzdGF0ZTogdGhpcy5EYXRhU3R1ZGVudC5jaXR5Py5zdGF0ZSxcbiAgICAgICAgY2l0eTogdGhpcy5EYXRhU3R1ZGVudC5jaXR5Py5jb2RlLFxuICAgICAgICByb2xlOiB0aGlzLnRyYW5zZm9ybVJvbGUodGhpcy5EYXRhU3R1ZGVudC5yb2xlKSB8fCAnJyxcbiAgICAgICAgc2VydmljZV9ob3VyOiB0aGlzLkRhdGFTdHVkZW50LnNlcnZpY2VfaG91ciB8fCAwLFxuICAgICAgICBjaGFuZ2VQYXNzd29yZDogZmFsc2UsXG4gICAgICAgIHBhc3N3b3JkOiAnJyxcbiAgICAgICAgcmVfcGFzc3dvcmQ6ICcnLFxuICAgICAgICBzdGF0dXM6IHRoaXMuRGF0YVN0dWRlbnQudXNlcl9zdGF0dXMgfHwgJydcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnNob3dFbWFpbElwdCkge1xuICAgICAgICBmb3JtVmFsdWUuZW1haWxfaXB0ID0gdGhpcy5EYXRhU3R1ZGVudC5lbWFpbF9pcHQgfHwgJyc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnNob3dQYXJlbnRTZWN0aW9uKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZm9ybVZhbHVlLCB7XG4gICAgICAgICAgcGFyZW50X25hbWU6IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIHBhcmVudF9sYXN0X25hbWU6IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5sYXN0X25hbWUgfHwgJycsXG4gICAgICAgICAgcGFyZW50X2lkX2NhcmRfdHlwZTogdGhpcy5EYXRhU3R1ZGVudC5jb2RzPy5wYXJlbnQ/LmlkX2NhcmRfdHlwZSB8fCAnJyxcbiAgICAgICAgICBwYXJlbnRfaWRfY2FyZDogdGhpcy5EYXRhU3R1ZGVudC5jb2RzPy5wYXJlbnQ/LmlkX2NhcmQgfHwgJycsXG4gICAgICAgICAgcGFyZW50X3Bob25lX2luZGljYXRpdmU6IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5waG9uZV9pbmRpY2F0aXZlIHx8ICcnLFxuICAgICAgICAgIHBhcmVudF9waG9uZV9udW1iZXI6IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5waG9uZV9udW1iZXIgfHwgJycsXG4gICAgICAgICAgcGFyZW50X29jY3VwYXRpb246IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5vY2N1cGF0aW9uIHx8ICcnLFxuICAgICAgICAgIHBhcmVudF9vZmZpY2VfYWRycmVzczogdGhpcy5EYXRhU3R1ZGVudC5jb2RzPy5wYXJlbnQ/Lm9mZmljZV9hZHJyZXNzIHx8ICcnLFxuICAgICAgICAgIHBhcmVudF9lbWFpbDogdGhpcy5EYXRhU3R1ZGVudC5jb2RzPy5wYXJlbnQ/LmVtYWlsIHx8ICcnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZUlkQ2FyZFZhbGlkYXRvcnModGhpcy5EYXRhU3R1ZGVudC5pZF9jYXJkX3R5cGUpO1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5yZXNldCgpO1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5wYXRjaFZhbHVlKGZvcm1WYWx1ZSk7XG4gICAgICB0aGlzLmluaXRpYWxGb3JtVmFsdWUgPSB7IC4uLnRoaXMudXBkYXRlVXNlckZvcm0udmFsdWUgfTtcbiAgICAgIGlmIChmb3JtVmFsdWUuY291bnRyeSkge1xuICAgICAgICB0aGlzLmNvdW50cmllcyA9IHRoaXMucGFyYW1ldGVyc0FsbD8uY291bnRyeTtcbiAgICAgICAgdGhpcy5zZWxlY3RDb3VudHJ5KHRoaXMuRGF0YVN0dWRlbnQuY2l0eT8uY291bnRyeSk7XG4gICAgICB9XG4gICAgICBpZiAoZm9ybVZhbHVlLnN0YXRlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0U3RhdGUodGhpcy5EYXRhU3R1ZGVudC5jaXR5Py5zdGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoZm9ybVZhbHVlLmNpdHkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RDaXR5KHRoaXMuRGF0YVN0dWRlbnQuY2l0eT8uY29kZSk7XG4gICAgICB9XG4gICAgICBpZiAoZm9ybVZhbHVlLmlkX2NhcmRfdHlwZSkge1xuICAgICAgICB0aGlzLmlkVHlwZXMgPSB0aGlzLnBhcmFtZXRlcnNBbGw/LlR5cGVJZENhcmRCeUNvdW50cnlDb2w7XG4gICAgICAgIHRoaXMuc2VsZWN0SWRUeXBlKCdpZF9jYXJkX3R5cGUnLHRoaXMuRGF0YVN0dWRlbnQuaWRfY2FyZF90eXBlKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb3JtVmFsdWUucGhvbmVfaW5kaWNhdGl2ZSkge1xuICAgICAgICB0aGlzLmluZGljYXRpdmVzID0gdGhpcy5wYXJhbWV0ZXJzQWxsPy5pbmRpY2F0aXZlcztcbiAgICAgICAgdGhpcy5zZWxlY3RJbmRpY2F0aXZlKCdwaG9uZV9pbmRpY2F0aXZlJywgdGhpcy5EYXRhU3R1ZGVudC5waG9uZV9pbmRpY2F0aXZlKTtcbiAgICAgIH1cbiAgICAgIGlmIChmb3JtVmFsdWUucGFyZW50X3Bob25lX2luZGljYXRpdmUpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0aXZlcyA9IHRoaXMucGFyYW1ldGVyc0FsbD8uaW5kaWNhdGl2ZXM7XG4gICAgICAgIHRoaXMuc2VsZWN0SW5kaWNhdGl2ZSgncGFyZW50X3Bob25lX2luZGljYXRpdmUnLCB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8ucGhvbmVfaW5kaWNhdGl2ZSk7XG4gICAgICB9XG4gICAgICBpZiAoZm9ybVZhbHVlLmdlbmRlcikge1xuICAgICAgICBpZiAodGhpcy5wYXJhbWV0ZXJzQWxsICYmIHRoaXMucGFyYW1ldGVyc0FsbC5nZW5kZXIpIHtcbiAgICAgICAgICAvLyBUcmFuc2Zvcm1hciBnZW5kZXIgZW4gdW4gYXJyZWdsbyBkZSB7IGNvZGUsIG5hbWUgfVxuICAgICAgICAgIHRoaXMuZ2VuZGVycyA9IHRoaXMucGFyYW1ldGVyc0FsbC5nZW5kZXIubWFwKChnZW5kZXI6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIGNvZGU6IGdlbmRlci5jb2RlLFxuICAgICAgICAgICAgbmFtZTogZ2VuZGVyLm5hbWVfc3BhbmlzaFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmdlbmRlcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdEdlbmRlcih0aGlzLkRhdGFTdHVkZW50LmdlbmRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xvc2VUYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpc2libGVNb2RhbCA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0NvbmZpcm1EaWFsb2cgPSBmYWxzZTtcbiAgICB0aGlzLmNvbmZpcm1Gb3JtLnJlc2V0KCk7XG4gICAgdGhpcy51cGRhdGVVc2VyRm9ybS5yZXNldCgpO1xuICAgIHRoaXMuaWRUeXBlcyA9IFtdO1xuICAgIHRoaXMuY291bnRyaWVzID0gW107XG4gICAgdGhpcy5nZW5kZXJzID0gW107XG4gICAgdGhpcy51cGRhdGVJZENhcmRWYWxpZGF0b3JzKG51bGwpO1xuICAgIHRoaXMuY2xvc2VNb2RhbElTLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFja0lkVHlwZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaWRUeXBlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmlkVHlwZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAvLyBVbnN1YiBvbGQgc3ViIGJlZm9yZSBuZXcgb25lIChzYWZlIGZvciByZWNyZWF0aW9uKVxuICAgIH1cbiAgICB0aGlzLmlkVHlwZVN1YnNjcmlwdGlvbiA9IHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KCdpZF9jYXJkX3R5cGUnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUlkQ2FyZFZhbGlkYXRvcnModmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJZENhcmRWYWxpZGF0b3JzKGlkQ2FyZFR5cGU6IGFueSk6IHZvaWQge1xuXG4gICAgY29uc3QgaWRDYXJkQ29udHJvbCA9IHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KCdpZF9jYXJkJyk7XG4gICAgaWYgKCFpZENhcmRDb250cm9sKSByZXR1cm47XG5cbiAgICBpZiAoaWRDYXJkVHlwZSA9PSA3IHx8IGlkQ2FyZFR5cGUgPT0gNSkge1xuICAgICAgaWRDYXJkQ29udHJvbC5zZXRWYWxpZGF0b3JzKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoNSksXG4gICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwKSxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKC9eW2EtekEtWjAtOV0qJC8pIC8vIExldHJhcyB5IG7Dum1lcm9zXG4gICAgICBdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWRDYXJkQ29udHJvbC5zZXRWYWxpZGF0b3JzKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoNSksXG4gICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwKSxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKC9eWzAtOV0qJC8pIC8vIFNvbG8gbsO6bWVyb3NcbiAgICAgIF0pO1xuICAgIH1cbiAgICBpZENhcmRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHNlbGVjdFJvbChyb2xlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAocm9sZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5nZXQoJ3JvbGUnKT8uc2V0VmFsdWUodGhpcy50cmFuc2Zvcm1Sb2xlKHJvbGUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5nZXQoJ3JvbGUnKT8uc2V0VmFsdWUoJycpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEluZGljYXRpdmUoZmllbGQ6IHN0cmluZywgaW5kaWNhdGl2ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKGluZGljYXRpdmUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KGZpZWxkKT8uc2V0VmFsdWUoaW5kaWNhdGl2ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KGZpZWxkKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0SWRUeXBlKGZpZWxkOiBzdHJpbmcsIGlkVHlwZTogYW55KTogdm9pZCB7XG4gICAgaWYgKGlkVHlwZSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5nZXQoZmllbGQpPy5zZXRWYWx1ZShpZFR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldChmaWVsZCk/LnNldFZhbHVlKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEdlbmRlcihnZW5kZXI6IGFueSk6IHZvaWQge1xuICAgIGlmIChnZW5kZXIgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KCdnZW5kZXInKT8uc2V0VmFsdWUoZ2VuZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5nZXQoJ2dlbmRlcicpPy5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RDb3VudHJ5KGNvdW50cnk6IGFueSkge1xuICAgIGNvbnN0IGNvdW50cnlOdW1iZXIgPSB0eXBlb2YgY291bnRyeSA9PT0gJ3N0cmluZycgPyBwYXJzZUludChjb3VudHJ5LCAxMCkgOiBjb3VudHJ5O1xuICAgIGlmIChjb3VudHJ5ICE9IG51bGwpIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2NvdW50cnknXS5zZXRWYWx1ZShjb3VudHJ5TnVtYmVyKTtcbiAgICAgIGlmICh0aGlzLnBhcmFtZXRlcnNBbGwgJiYgdGhpcy5wYXJhbWV0ZXJzQWxsPy5TdGF0ZSkge1xuICAgICAgICB0aGlzLnN0YXRlcyA9IHRoaXMucGFyYW1ldGVyc0FsbC5TdGF0ZS5maWx0ZXIoKGNvdXJzZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0eXBlb2YgY291cnNlLmNvdW50cnkgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHBhcnNlSW50KGNvdXJzZS5jb3VudHJ5LCAxMClcbiAgICAgICAgICAgIDogY291cnNlLmNvdW50cnk7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlID09PSBjb3VudHJ5TnVtYmVyO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGVzID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydzdGF0ZSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5jb250cm9sc1snY2l0eSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jaXRpZXMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5jb250cm9sc1snY291bnRyeSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5zdGF0ZXMgPSBbXTtcbiAgICAgIHRoaXMuY2l0aWVzID0gW107XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0U3RhdGUoc3RhdGU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlTnVtYmVyID0gdHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KHN0YXRlLCAxMCkgOiBzdGF0ZTtcbiAgICBpZiAoc3RhdGUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3N0YXRlJ10uc2V0VmFsdWUoc3RhdGVOdW1iZXIpO1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5jb250cm9sc1snY2l0eSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jaXRpZXMgPSBbXTtcbiAgICAgIHRoaXMuZ2V0U3RhdGUoc3RhdGVOdW1iZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydzdGF0ZSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5jb250cm9sc1snY2l0eSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jaXRpZXMgPSBbXTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0ZShzdGF0ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5nZXRDaXR5KHN0YXRlKTtcbiAgfVxuXG4gIGdldENpdHkoc3RhdGU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlTnVtYmVyID0gdHlwZW9mIHN0YXRlID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KHN0YXRlLCAxMCkgOiBzdGF0ZTtcbiAgICBpZiAodGhpcy5wYXJhbWV0ZXJzQWxsPy5jaXR5KSB7XG4gICAgICB0aGlzLmNpdGllcyA9IHRoaXMucGFyYW1ldGVyc0FsbC5jaXR5LmZpbHRlcigoY291cnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgY2l0eVN0YXRlID0gdHlwZW9mIGNvdXJzZS5zdGF0ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludChjb3Vyc2Uuc3RhdGUsIDEwKSA6IGNvdXJzZS5zdGF0ZTtcbiAgICAgICAgcmV0dXJuIGNpdHlTdGF0ZSA9PT0gc3RhdGVOdW1iZXI7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaXRpZXMgPSBbXTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RDaXR5KGNpdHk6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGNpdHlOdW1iZXIgPSB0eXBlb2YgY2l0eSA9PT0gJ3N0cmluZycgPyBwYXJzZUludChjaXR5LCAxMCkgOiBjaXR5O1xuICAgIGlmIChjaXR5ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydjaXR5J10uc2V0VmFsdWUoY2l0eU51bWJlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2NpdHknXS5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RSZWFzb24ocmVhc29uOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpcm1Gb3JtLmNvbnRyb2xzWydyZWFzb24nXS5zZXRWYWx1ZShyZWFzb24gPyByZWFzb24gOiBudWxsKTtcbiAgfVxuICBcbiAgc2V0UGhvdG8odHlwZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHR5cGUgPT09ICdzdHVkZW50JykgdGhpcy5waG90byA9ICcvcGxhdGZvcm0vYWNhZGVtaWMvYXNzZXRzL3N0dWRlbnQuanBnJztcbiAgICBpZiAodHlwZSA9PT0gJ2FjYWRlbWljJykgdGhpcy5waG90byA9ICcvcGxhdGZvcm0vYWNhZGVtaWMvYXNzZXRzL2FjYWRlbWljby5wbmcnO1xuICAgIGlmICh0eXBlID09PSAnYWRtaW5pc3RyYXRpdmUnKSB0aGlzLnBob3RvID0gJy9wbGF0Zm9ybS9hZG1pbmlzdHJhdGl2ZS9hc3NldHMvYWRtaW5pc3RyYXRpdm8uanBnJztcbiAgICBpZiAodHlwZSA9PT0gJ21hcmtldGluZycpIHRoaXMucGhvdG8gPSAnL3BsYXRmb3JtL21hcmtldGluZy9hc3NldHMvbWFya2V0aW5nLmpwZyc7XG4gICAgaWYgKHR5cGUgPT09ICdjb21tZXJjaWFsJykgdGhpcy5waG90byA9ICcvcGxhdGZvcm0vY29tbWVyY2lhbC9hc3NldHMvdXNlci1mb3JtLWFzc2V0cy9jb21lcmNpYWwuanBnJztcbiAgICBpZiAodHlwZSA9PT0gJ3RyZWFzdXJlJykgdGhpcy5waG90byA9ICcvcGxhdGZvcm0vdHJlYXN1cmUvYXNzZXRzL2FkbWluaXN0cmF0aXZvLmpwZyc7XG4gIH1cblxuICAvLyB1cGRhdGVVc2VyKCk6IHZvaWQge1xuICAvLyAgIGlmIChcbiAgLy8gICAgIHRoaXMudXBkYXRlVXNlckZvcm0uaW52YWxpZCB8fFxuICAvLyAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5oYXNFcnJvcignbWlzbWF0Y2gnKSB8fFxuICAvLyAgICAgIXRoaXMuaGFzRm9ybUNoYW5nZWQoKVxuICAvLyAgICkge1xuICAvLyAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gIC8vICAgICBjb25zb2xlLmxvZygnY3JlYXRlVXNlciAtIFZhbGlkYXRpb24gZmFpbGVkOicsIHtcbiAgLy8gICAgICAgaW52YWxpZDogdGhpcy51cGRhdGVVc2VyRm9ybS5pbnZhbGlkLFxuICAvLyAgICAgICBtaXNtYXRjaDogdGhpcy51cGRhdGVVc2VyRm9ybS5oYXNFcnJvcignbWlzbWF0Y2gnKSxcbiAgLy8gICAgICAgaGFzQ2hhbmdlczogdGhpcy5oYXNGb3JtQ2hhbmdlZCgpXG4gIC8vICAgICB9KTtcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICB9XG5cbiAgLy8gICB0aGlzLmxvYWRlciA9IHRydWU7XG4gIC8vICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy51cGRhdGVVc2VyRm9ybS5nZXRSYXdWYWx1ZSgpO1xuXG4gIC8vICAgY29uc3QgcmVxdWVzdDphbnkgPSB7XG4gIC8vICAgICB0b2tlbjogdGhpcy5iYXNlU2VydmljZS5nZXRVc2VyVG9rZW4oKSxcbiAgLy8gICAgIHVzZXI6IHtcbiAgLy8gICAgICAgY29kZTogdGhpcy5EYXRhU3R1ZGVudC5jb2RlLFxuICAvLyAgICAgICBuYW1lOiBmb3JtVmFsdWUubmFtZSxcbiAgLy8gICAgICAgbGFzdF9uYW1lOiBmb3JtVmFsdWUubGFzdF9uYW1lLFxuICAvLyAgICAgICBpZF9jYXJkX3R5cGU6IGZvcm1WYWx1ZS5pZF9jYXJkX3R5cGUsXG4gIC8vICAgICAgIGlkX2NhcmQ6IGZvcm1WYWx1ZS5pZF9jYXJkLFxuICAvLyAgICAgICBwaG9uZV9pbmRpY2F0aXZlOiBmb3JtVmFsdWUucGhvbmVfaW5kaWNhdGl2ZSxcbiAgLy8gICAgICAgcGhvbmVfbnVtYmVyOiBmb3JtVmFsdWUucGhvbmVfbnVtYmVyLFxuICAvLyAgICAgICBlbWFpbDogZm9ybVZhbHVlLmVtYWlsLFxuICAvLyAgICAgICBnZW5kZXI6IGZvcm1WYWx1ZS5nZW5kZXIsXG4gIC8vICAgICAgIGNpdHk6IGZvcm1WYWx1ZS5jaXR5LFxuICAvLyAgICAgICBzZXJ2aWNlX2hvdXI6IGZvcm1WYWx1ZS5zZXJ2aWNlX2hvdXIsXG4gIC8vICAgICAgIHJvbGU6IHRoaXMuRGF0YVN0dWRlbnQucm9sZSxcbiAgLy8gICAgICAgc3RhdHVzOiBmb3JtVmFsdWUuc3RhdHVzLFxuICAvLyAgICAgICAuLi4odGhpcy5zaG93RW1haWxJcHQgPyB7IGVtYWlsX2lwdDogZm9ybVZhbHVlLmVtYWlsX2lwdCB9IDoge30pLFxuICAvLyAgICAgICAuLi4oZm9ybVZhbHVlLmNoYW5nZVBhc3N3b3JkICYmIGZvcm1WYWx1ZS5wYXNzd29yZCA/IHsgcGFzc3dvcmQ6IGZvcm1WYWx1ZS5wYXNzd29yZCB9IDoge30pXG4gIC8vICAgICB9LFxuICAvLyAgICAgcGFyZW50OiB0aGlzLnNob3dQYXJlbnRTZWN0aW9uXG4gIC8vICAgICAgID8ge1xuICAvLyAgICAgICAgICAgY29kZTogdGhpcy5EYXRhU3R1ZGVudC5jb2RzPy5wYXJlbnQ/LmNvZGUgfHwgbnVsbCxcbiAgLy8gICAgICAgICAgIG5hbWU6IGZvcm1WYWx1ZS5wYXJlbnRfbmFtZSB8fCBudWxsLFxuICAvLyAgICAgICAgICAgbGFzdF9uYW1lOiBmb3JtVmFsdWUucGFyZW50X2xhc3RfbmFtZSB8fCBudWxsLFxuICAvLyAgICAgICAgICAgaWRfY2FyZF90eXBlOiBmb3JtVmFsdWUucGFyZW50X2lkX2NhcmRfdHlwZSB8fCBudWxsLFxuICAvLyAgICAgICAgICAgaWRfY2FyZDogZm9ybVZhbHVlLnBhcmVudF9pZF9jYXJkIHx8IG51bGwsXG4gIC8vICAgICAgICAgICBwaG9uZV9pbmRpY2F0aXZlOiBmb3JtVmFsdWUucGFyZW50X3Bob25lX2luZGljYXRpdmUgfHwgbnVsbCxcbiAgLy8gICAgICAgICAgIHBob25lX251bWJlcjogZm9ybVZhbHVlLnBhcmVudF9waG9uZV9udW1iZXIgfHwgbnVsbCxcbiAgLy8gICAgICAgICAgIG9jY3VwYXRpb246IGZvcm1WYWx1ZS5wYXJlbnRfb2NjdXBhdGlvbiB8fCBudWxsLFxuICAvLyAgICAgICAgICAgb2ZmaWNlX2FkcnJlc3M6IGZvcm1WYWx1ZS5wYXJlbnRfb2ZmaWNlX2FkcnJlc3MgfHwgbnVsbCxcbiAgLy8gICAgICAgICAgIGVtYWlsOiBmb3JtVmFsdWUucGFyZW50X2VtYWlsIHx8IG51bGxcbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgIDogbnVsbFxuICAvLyAgIH07XG4gIC8vICAgY29uc29sZS5sb2cocmVxdWVzdCk7XG4gIC8vICAgdGhpcy51c2VyU2VydmljZS51cGRhdGVVc2VyQW5kUGFyZW50QnlDb2RlKHJlcXVlc3QpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgLy8gICAgIC8vIHRoaXMuY291cnNlVHlwZSA9IHJlc3BvbnNlLmRhdGE7XG4gIC8vICAgICBpZiAocmVzcG9uc2UubWVzc2FnZS5jb2RlID09PSAxKSB7XG4gIC8vICAgICAgIFN3YWwuZmlyZSh7XG4gIC8vICAgICAgICAgcG9zaXRpb246ICdjZW50ZXInLFxuICAvLyAgICAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgLy8gICAgICAgICB0aXRsZTogJ3VzdWFyaW8gYWN0dWFsaXphZG8gc2F0aXNmYWN0b3JpYW1lbnRlJyxcbiAgLy8gICAgICAgICBzaG93Q29uZmlybUJ1dHRvbjogZmFsc2UsXG4gIC8vICAgICAgICAgdGltZXI6IDI1MDAsXG4gIC8vICAgICAgIH0pO1xuICAvLyAgICAgICAvLyB0aGlzLnVzZXJVcGRhdGVkID0gdHJ1ZVxuICAvLyAgICAgICB0aGlzLnVzZXJVcGRhdGVkRXZlbnQuZW1pdCgpO1xuICAvLyAgICAgICB0aGlzLmNsb3NlVGFibGUoKTtcbiAgLy8gICAgIH1lbHNle1xuICAvLyAgICAgICBTd2FsLmZpcmUoe1xuICAvLyAgICAgICAgIHBvc2l0aW9uOiAnY2VudGVyJyxcbiAgLy8gICAgICAgICBpY29uOiAnZXJyb3InLFxuICAvLyAgICAgICAgIHRpdGxlOiAnSGEgb2N1cnJpZG8gdW4gZXJyb3IgaW5lc3BlcmFkbycsXG4gIC8vICAgICAgICAgdGV4dDogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLFxuICAvLyAgICAgICAgIHNob3dDb25maXJtQnV0dG9uOiBmYWxzZSxcbiAgLy8gICAgICAgICB0aW1lcjogMjUwMCxcbiAgLy8gICAgICAgfSk7XG4gIC8vICAgICAgIC8vIHRoaXMudXNlclVwZGF0ZWQgPSBmYWxzZVxuICAvLyAgICAgfVxuICAvLyAgIH0pO1xuXG4gIC8vICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgLy8gfVxuXG4gIGhhc0Zvcm1DaGFuZ2VkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pbml0aWFsRm9ybVZhbHVlIHx8ICF0aGlzLkRhdGFTdHVkZW50KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy51cGRhdGVVc2VyRm9ybS5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgaWYgKGN1cnJlbnRWYWx1ZS5jaGFuZ2VQYXNzd29yZCkge1xuICAgICAgY29uc3QgcGFzc3dvcmQgPSBjdXJyZW50VmFsdWUucGFzc3dvcmQ7XG4gICAgICBjb25zdCByZVBhc3N3b3JkID0gY3VycmVudFZhbHVlLnJlX3Bhc3N3b3JkO1xuICAgICAgY29uc3QgcGFzc3dvcmRDb250cm9sID0gdGhpcy51cGRhdGVVc2VyRm9ybS5nZXQoJ3Bhc3N3b3JkJyk7XG4gICAgICBjb25zdCByZVBhc3N3b3JkQ29udHJvbCA9IHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KCdyZV9wYXNzd29yZCcpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHBhc3N3b3JkQ29udHJvbD8udmFsaWQgJiZcbiAgICAgICAgcmVQYXNzd29yZENvbnRyb2w/LnZhbGlkICYmXG4gICAgICAgIHBhc3N3b3JkID09PSByZVBhc3N3b3JkICYmXG4gICAgICAgIHBhc3N3b3JkPy50cmltKCkgIT09ICcnXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRzVG9Db21wYXJlOiAoa2V5b2YgSUZvcm1EYXRhUnEpW10gPSBbXG4gICAgICAnbmFtZScsXG4gICAgICAnbGFzdF9uYW1lJyxcbiAgICAgICdlbWFpbCcsXG4gICAgICAnZ2VuZGVyJyxcbiAgICAgICdpZF9jYXJkX3R5cGUnLFxuICAgICAgJ2lkX2NhcmQnLFxuICAgICAgJ3Bob25lX2luZGljYXRpdmUnLFxuICAgICAgJ3Bob25lX251bWJlcicsXG4gICAgICAnY291bnRyeScsXG4gICAgICAnc3RhdGUnLFxuICAgICAgJ2NpdHknLFxuICAgICAgJ3JvbGUnLFxuICAgICAgJ3NlcnZpY2VfaG91cicsXG4gICAgICAnc3RhdHVzJ1xuICAgIF07XG5cbiAgICBpZiAodGhpcy5zaG93RW1haWxJcHQpIHtcbiAgICAgIGZpZWxkc1RvQ29tcGFyZS5wdXNoKCdlbWFpbF9pcHQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG93UGFyZW50U2VjdGlvbikge1xuICAgICAgZmllbGRzVG9Db21wYXJlLnB1c2goXG4gICAgICAgICdwYXJlbnRfbmFtZScsXG4gICAgICAgICdwYXJlbnRfbGFzdF9uYW1lJyxcbiAgICAgICAgJ3BhcmVudF9pZF9jYXJkX3R5cGUnLFxuICAgICAgICAncGFyZW50X2lkX2NhcmQnLFxuICAgICAgICAncGFyZW50X3Bob25lX2luZGljYXRpdmUnLFxuICAgICAgICAncGFyZW50X3Bob25lX251bWJlcicsXG4gICAgICAgICdwYXJlbnRfb2NjdXBhdGlvbicsXG4gICAgICAgICdwYXJlbnRfb2ZmaWNlX2FkcnJlc3MnLFxuICAgICAgICAncGFyZW50X2VtYWlsJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkc1RvQ29tcGFyZSkge1xuICAgICAgbGV0IG9yaWdpbmFsVmFsdWU6IGFueTtcbiAgICAgIGxldCBjdXJyZW50RmllbGRWYWx1ZTogYW55ID0gY3VycmVudFZhbHVlW2ZpZWxkXTtcblxuICAgICAgc3dpdGNoIChmaWVsZCkge1xuICAgICAgICBjYXNlICduYW1lJzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC5uYW1lIHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdsYXN0X25hbWUnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50Lmxhc3RfbmFtZSB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmVtYWlsIHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWFpbF9pcHQnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmVtYWlsX2lwdCB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZ2VuZGVyJzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC5nZW5kZXIgfHwgbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaWRfY2FyZF90eXBlJzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC5pZF9jYXJkX3R5cGUgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2lkX2NhcmQnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmlkX2NhcmQgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bob25lX2luZGljYXRpdmUnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LnBob25lX2luZGljYXRpdmUgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3Bob25lX251bWJlcic6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQucGhvbmVfbnVtYmVyIHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjb3VudHJ5JzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC5jaXR5Py5jb3VudHJ5IHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzdGF0ZSc6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQuY2l0eT8uc3RhdGUgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NpdHknOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmNpdHk/LmNvZGUgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JvbGUnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLnRyYW5zZm9ybVJvbGUodGhpcy5EYXRhU3R1ZGVudC5yb2xlKSB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc2VydmljZV9ob3VyJzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC5zZXJ2aWNlX2hvdXI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N0YXR1cyc6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQudXNlcl9zdGF0dXMgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BhcmVudF9uYW1lJzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC5jb2RzPy5wYXJlbnQ/Lm5hbWUgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BhcmVudF9sYXN0X25hbWUnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8ubGFzdF9uYW1lIHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwYXJlbnRfaWRfY2FyZF90eXBlJzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC5jb2RzPy5wYXJlbnQ/LmlkX2NhcmRfdHlwZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGFyZW50X2lkX2NhcmQnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8uaWRfY2FyZCB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGFyZW50X3Bob25lX2luZGljYXRpdmUnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8ucGhvbmVfaW5kaWNhdGl2ZSB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGFyZW50X3Bob25lX251bWJlcic6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5waG9uZV9udW1iZXIgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BhcmVudF9vY2N1cGF0aW9uJzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC5jb2RzPy5wYXJlbnQ/Lm9jY3VwYXRpb24gfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BhcmVudF9vZmZpY2VfYWRycmVzcyc6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5vZmZpY2VfYWRycmVzcyB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGFyZW50X2VtYWlsJzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC5jb2RzPy5wYXJlbnQ/LmVtYWlsIHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSAnJztcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZEN1cnJlbnQgPSBjdXJyZW50RmllbGRWYWx1ZSAhPSBudWxsID8gU3RyaW5nKGN1cnJlbnRGaWVsZFZhbHVlKS50cmltKCkgOiAnJztcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRPcmlnaW5hbCA9IG9yaWdpbmFsVmFsdWUgIT0gbnVsbCA/IFN0cmluZyhvcmlnaW5hbFZhbHVlKS50cmltKCkgOiAnJztcblxuICAgICAgaWYgKG5vcm1hbGl6ZWRDdXJyZW50ICE9PSBub3JtYWxpemVkT3JpZ2luYWwpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgICBzaG93Q29uZmlybVNlY3Rpb25IYW5kbGVyKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uaW52YWxpZCB8fFxuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5oYXNFcnJvcignbWlzbWF0Y2gnKSB8fFxuICAgICAgIXRoaXMuaGFzRm9ybUNoYW5nZWQoKVxuICAgICkge1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICBjb25zb2xlLmxvZygnVmFsaWRhdGlvbiBmYWlsZWQ6Jywge1xuICAgICAgICBpbnZhbGlkOiB0aGlzLnVwZGF0ZVVzZXJGb3JtLmludmFsaWQsXG4gICAgICAgIG1pc21hdGNoOiB0aGlzLnVwZGF0ZVVzZXJGb3JtLmhhc0Vycm9yKCdtaXNtYXRjaCcpLFxuICAgICAgICBoYXNDaGFuZ2VzOiB0aGlzLmhhc0Zvcm1DaGFuZ2VkKClcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNob3dDb25maXJtU2VjdGlvbiA9IHRydWU7XG4gIH1cblxuICAgIHNlbmRVcGRhdGVSZXF1ZXN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpcm1Gb3JtLmludmFsaWQpIHtcbiAgICAgIHRoaXMuY29uZmlybUZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgY29uc3QgY29uZmlybVZhbHVlID0gdGhpcy5jb25maXJtRm9ybS52YWx1ZTtcblxuICAgIGNvbnN0IHJlcXVlc3Q6IGFueSA9IHtcbiAgICAgIHRva2VuOiB0aGlzLmJhc2VTZXJ2aWNlLmdldFVzZXJUb2tlbigpLFxuICAgICAgdXNlcjoge1xuICAgICAgICBjb2RlOiB0aGlzLkRhdGFTdHVkZW50LmNvZGUsXG4gICAgICAgIG5hbWU6IGZvcm1WYWx1ZS5uYW1lLFxuICAgICAgICBsYXN0X25hbWU6IGZvcm1WYWx1ZS5sYXN0X25hbWUsXG4gICAgICAgIGlkX2NhcmRfdHlwZTogZm9ybVZhbHVlLmlkX2NhcmRfdHlwZSxcbiAgICAgICAgaWRfY2FyZDogZm9ybVZhbHVlLmlkX2NhcmQsXG4gICAgICAgIHBob25lX2luZGljYXRpdmU6IGZvcm1WYWx1ZS5waG9uZV9pbmRpY2F0aXZlLFxuICAgICAgICBwaG9uZV9udW1iZXI6IGZvcm1WYWx1ZS5waG9uZV9udW1iZXIsXG4gICAgICAgIGVtYWlsOiBmb3JtVmFsdWUuZW1haWwsXG4gICAgICAgIGdlbmRlcjogZm9ybVZhbHVlLmdlbmRlcixcbiAgICAgICAgY2l0eTogZm9ybVZhbHVlLmNpdHksXG4gICAgICAgIHNlcnZpY2VfaG91cjogZm9ybVZhbHVlLnNlcnZpY2VfaG91cixcbiAgICAgICAgcm9sZTogdGhpcy5EYXRhU3R1ZGVudC5yb2xlLFxuICAgICAgICBzdGF0dXM6IGZvcm1WYWx1ZS5zdGF0dXMsXG4gICAgICAgIC4uLih0aGlzLnNob3dFbWFpbElwdCA/IHsgZW1haWxfaXB0OiBmb3JtVmFsdWUuZW1haWxfaXB0IH0gOiB7fSksXG4gICAgICAgIC4uLihmb3JtVmFsdWUuY2hhbmdlUGFzc3dvcmQgJiYgZm9ybVZhbHVlLnBhc3N3b3JkID8geyBwYXNzd29yZDogZm9ybVZhbHVlLnBhc3N3b3JkIH0gOiB7fSlcbiAgICAgIH0sXG4gICAgICBwYXJlbnQ6IHRoaXMuc2hvd1BhcmVudFNlY3Rpb25cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBjb2RlOiB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8uY29kZSB8fCBudWxsLFxuICAgICAgICAgICAgbmFtZTogZm9ybVZhbHVlLnBhcmVudF9uYW1lIHx8IG51bGwsXG4gICAgICAgICAgICBsYXN0X25hbWU6IGZvcm1WYWx1ZS5wYXJlbnRfbGFzdF9uYW1lIHx8IG51bGwsXG4gICAgICAgICAgICBpZF9jYXJkX3R5cGU6IGZvcm1WYWx1ZS5wYXJlbnRfaWRfY2FyZF90eXBlIHx8IG51bGwsXG4gICAgICAgICAgICBpZF9jYXJkOiBmb3JtVmFsdWUucGFyZW50X2lkX2NhcmQgfHwgbnVsbCxcbiAgICAgICAgICAgIHBob25lX2luZGljYXRpdmU6IGZvcm1WYWx1ZS5wYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZSB8fCBudWxsLFxuICAgICAgICAgICAgcGhvbmVfbnVtYmVyOiBmb3JtVmFsdWUucGFyZW50X3Bob25lX251bWJlciB8fCBudWxsLFxuICAgICAgICAgICAgb2NjdXBhdGlvbjogZm9ybVZhbHVlLnBhcmVudF9vY2N1cGF0aW9uIHx8IG51bGwsXG4gICAgICAgICAgICBvZmZpY2VfYWRycmVzczogZm9ybVZhbHVlLnBhcmVudF9vZmZpY2VfYWRycmVzcyB8fCBudWxsLFxuICAgICAgICAgICAgZW1haWw6IGZvcm1WYWx1ZS5wYXJlbnRfZW1haWwgfHwgbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgICAgcmVhc29uOiBjb25maXJtVmFsdWUucmVhc29uLFxuICAgICAgb2JzZXJ2YXRpb246IGNvbmZpcm1WYWx1ZS5vYnNlcnZhdGlvbixcbiAgICB9O1xuXG4gICAgY29uc29sZS5sb2cocmVxdWVzdCk7XG4gICAgdGhpcy51c2VyU2VydmljZS51cGRhdGVVc2VyQW5kUGFyZW50QnlDb2RlKHJlcXVlc3QpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLm1lc3NhZ2UuY29kZSA9PT0gMSkge1xuICAgICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgICBpY29uOiAnc3VjY2VzcycsXG4gICAgICAgICAgICB0aXRsZTogJ1VzdWFyaW8gYWN0dWFsaXphZG8gc2F0aXNmYWN0b3JpYW1lbnRlJyxcbiAgICAgICAgICAgIHNob3dDb25maXJtQnV0dG9uOiBmYWxzZSxcbiAgICAgICAgICAgIHRpbWVyOiAyNTAwLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMudXNlclVwZGF0ZWRFdmVudC5lbWl0KCk7XG4gICAgICAgICAgdGhpcy5jbG9zZVRhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGljb246ICdlcnJvcicsXG4gICAgICAgICAgICB0aXRsZTogJ0hhIG9jdXJyaWRvIHVuIGVycm9yIGluZXNwZXJhZG8nLFxuICAgICAgICAgICAgdGV4dDogcmVzcG9uc2UuZGF0YS5tZXNzYWdlLFxuICAgICAgICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAgICAgICAgICAgdGltZXI6IDI1MDAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB1cGRhdGluZyB1c2VyOicsIGVycik7XG4gICAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgICAgcG9zaXRpb246ICdjZW50ZXInLFxuICAgICAgICAgIGljb246ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdFcnJvciBhbCBhY3R1YWxpemFyIGVsIHVzdWFyaW8nLFxuICAgICAgICAgIHNob3dDb25maXJtQnV0dG9uOiBmYWxzZSxcbiAgICAgICAgICB0aW1lcjogMjUwMCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzaG93Q29uZmlybURpYWxvZ3MoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5pbnZhbGlkIHx8XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmhhc0Vycm9yKCdtaXNtYXRjaCcpIHx8XG4gICAgICAhdGhpcy5oYXNGb3JtQ2hhbmdlZCgpXG4gICAgKSB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdWYWxpZGF0aW9uIGZhaWxlZDonLCB7XG4gICAgICAgIGludmFsaWQ6IHRoaXMudXBkYXRlVXNlckZvcm0uaW52YWxpZCxcbiAgICAgICAgbWlzbWF0Y2g6IHRoaXMudXBkYXRlVXNlckZvcm0uaGFzRXJyb3IoJ21pc21hdGNoJyksXG4gICAgICAgIGhhc0NoYW5nZXM6IHRoaXMuaGFzRm9ybUNoYW5nZWQoKVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb25maXJtRm9ybS5yZXNldCgpOyBcbiAgICB0aGlzLnNob3dDb25maXJtRGlhbG9nID0gdHJ1ZTsgXG4gIH1cblxuICBhY2NlcHRDb25maXJtRGlhbG9nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpcm1Gb3JtLmludmFsaWQpIHtcbiAgICAgIHRoaXMuY29uZmlybUZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNlbmRVcGRhdGVSZXF1ZXN0KCk7XG4gIH1cblxuICByZWplY3RDb25maXJtRGlhbG9nKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybUZvcm0ucmVzZXQoKTtcbiAgfVxuXG4gIGNsb3NlQ29uZmlybURpYWxvZygpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dDb25maXJtRGlhbG9nID0gZmFsc2U7XG4gICAgdGhpcy5jb25maXJtRm9ybS5yZXNldCgpO1xuICAgIHRoaXMuY29uZmlybUZvcm0uZ2V0KCdyZWFzb24nKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgdGhpcy5jb25maXJtRm9ybS5nZXQoJ29ic2VydmF0aW9uJyk/LnNldFZhbHVlKCcnKTtcbiAgfVxuXG5cbn0iLCI8bWFpbiAqbmdJZj1cInZpc2libGVNb2RhbFwiPlxuICA8ZGl2IGNsYXNzPVwibW9kYWxfY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRlcl9tb2RhbCB5ZWxsb3ctMzAwXCI+XG4gICAgICA8aDE+QWN0dWFsaXphciB1c3VhcmlvPC9oMT5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsb3NlVGFibGUoKVwiPng8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZF9jb250YWluZXJcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxmb3JtICpuZ0lmPVwidXBkYXRlVXNlckZvcm1cIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cInVwZGF0ZVVzZXJGb3JtXCI+XG4gICAgICAgICAgPCEtLSBVc2VyIEluZm9ybWF0aW9uIFNlY3Rpb24gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgICA8aDI+SW5mb3JtYWNpw7NuIGRlbCB1c3VhcmlvPC9oMj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XG4gICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidOb21icmVzJ1wiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWyduYW1lJ11cIlxuICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWyduYW1lJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJykgPyAnRGViZSBpbmdyZXNhciBlbCBub21icmUnIDpcbiAgICAgICAgICAgICAgICB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snbmFtZSddLmhhc0Vycm9yKCdtaW5sZW5ndGgnKSA/ICdNw61uaW1vIDMgY2FyYWN0ZXJlcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWyduYW1lJ10uaGFzRXJyb3IoJ21heGxlbmd0aCcpID8gJ03DoXhpbW8gMzIgY2FyYWN0ZXJlcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWyduYW1lJ10uaGFzRXJyb3IoJ3BhdHRlcm4nKSA/ICdTb2xvIGxldHJhcywgZXNwYWNpb3MgeSBndWlvbmVzJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ25hbWUnXS5oYXNFcnJvcignaGFzV2hpdGVzcGFjZScpID8gJ05vIHNlIHBlcm1pdGVuIGVzcGFjaW9zIGFsIGluaWNpbyBvIGZpbmFsJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ25hbWUnXS5oYXNFcnJvcignb25seVdoaXRlc3BhY2UnKSA/ICdObyBzZSBwZXJtaXRlbiBzb2xvIGVzcGFjaW9zJyA6XG4gICAgICAgICAgICAgICAgJ0RlYmUgaW5ncmVzYXIgZWwgbm9tYnJlJ1wiXG4gICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidBcGVsbGlkb3MnXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2xhc3RfbmFtZSddXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRlVGV4dF09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snbGFzdF9uYW1lJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJykgPyAnRGViZSBpbmdyZXNhciBsb3MgYXBlbGxpZG9zJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2xhc3RfbmFtZSddLmhhc0Vycm9yKCdtaW5sZW5ndGgnKSA/ICdNw61uaW1vIDMgY2FyYWN0ZXJlcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydsYXN0X25hbWUnXS5oYXNFcnJvcignbWF4bGVuZ3RoJykgPyAnTcOheGltbyAzMiBjYXJhY3RlcmVzJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2xhc3RfbmFtZSddLmhhc0Vycm9yKCdwYXR0ZXJuJykgPyAnU29sbyBsZXRyYXMsIGVzcGFjaW9zIHkgZ3Vpb25lcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydsYXN0X25hbWUnXS5oYXNFcnJvcignaGFzV2hpdGVzcGFjZScpID8gJ05vIHNlIHBlcm1pdGVuIGVzcGFjaW9zIGFsIGluaWNpbyBvIGZpbmFsJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2xhc3RfbmFtZSddLmhhc0Vycm9yKCdvbmx5V2hpdGVzcGFjZScpID8gJ05vIHNlIHBlcm1pdGVuIHNvbG8gZXNwYWNpb3MnIDpcbiAgICAgICAgICAgICAgICAnRGViZSBpbmdyZXNhciBsb3MgYXBlbGxpZG9zJ1wiXG4gICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ2VtYWlsJ1wiXG4gICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW1haWwnXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2VtYWlsJ11cIlxuICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydlbWFpbCddLmhhc0Vycm9yKCdyZXF1aXJlZCcpID8gJ0RlYmUgaW5ncmVzYXIgdW4gY29ycmVvIHbDoWxpZG8nIDpcbiAgICAgICAgICAgICAgICB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snZW1haWwnXS5oYXNFcnJvcignbWF4bGVuZ3RoJykgPyAnTcOheGltbyAzMDAgY2FyYWN0ZXJlcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydlbWFpbCddLmhhc0Vycm9yKCdwYXR0ZXJuJykgPyAnVGllbmUgcXVlIHNlciB1biBlbWFpbCBjb3JyZWN0bycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydlbWFpbCddLmhhc0Vycm9yKCdoYXNXaGl0ZXNwYWNlJykgPyAnTm8gc2UgcGVybWl0ZW4gZXNwYWNpb3MgYWwgaW5pY2lvIG8gZmluYWwnIDpcbiAgICAgICAgICAgICAgICB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snZW1haWwnXS5oYXNFcnJvcignb25seVdoaXRlc3BhY2UnKSA/ICdObyBzZSBwZXJtaXRlbiBzb2xvIGVzcGFjaW9zJyA6XG4gICAgICAgICAgICAgICAgJ0RlYmUgaW5ncmVzYXIgdW4gY29ycmVvIHbDoWxpZG8nXCJcbiAgICAgICAgICAgID48L2lwdC1pbnB1dD5cbiAgICAgICAgICAgIDxpcHQtaW5wdXRcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RW1haWxJcHRcIlxuICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW1haWwgSVBUJ1wiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydlbWFpbF9pcHQnXVwiXG4gICAgICAgICAgICAgIFt2YWxpZGF0ZVRleHRdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2VtYWlsX2lwdCddLmhhc0Vycm9yKCdyZXF1aXJlZCcpID8gJ0RlYmUgaW5ncmVzYXIgdW4gY29ycmVvIElQVCB2w6FsaWRvJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2VtYWlsX2lwdCddLmhhc0Vycm9yKCdtYXhsZW5ndGgnKSA/ICdNw6F4aW1vIDI1NSBjYXJhY3RlcmVzJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2VtYWlsX2lwdCddLmhhc0Vycm9yKCdwYXR0ZXJuJykgPyAnVGllbmUgcXVlIHNlciB1biBlbWFpbCBjb3JyZWN0bycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydlbWFpbF9pcHQnXS5oYXNFcnJvcignaGFzV2hpdGVzcGFjZScpID8gJ05vIHNlIHBlcm1pdGVuIGVzcGFjaW9zIGFsIGluaWNpbyBvIGZpbmFsJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2VtYWlsX2lwdCddLmhhc0Vycm9yKCdvbmx5V2hpdGVzcGFjZScpID8gJ05vIHNlIHBlcm1pdGVuIHNvbG8gZXNwYWNpb3MnIDpcbiAgICAgICAgICAgICAgICAnRGViZSBpbmdyZXNhciB1biBjb3JyZW8gSVBUIHbDoWxpZG8nXCJcbiAgICAgICAgICAgID48L2lwdC1pbnB1dD5cbiAgICAgICAgICAgIDxpcHQtaW5wdXRcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RW1haWxJcHRcIlxuICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidIb3JhcyBkZSBzZXJ2aWNpbydcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snc2VydmljZV9ob3VyJ11cIlxuICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidEZWJlIGluZ3Jlc2FyIGxhcyBob3JhcyBkZSBzZXJ2aWNpbydcIlxuICAgICAgICAgICAgPjwvaXB0LWlucHV0PlxuICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInUm9sJ1wiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydyb2xlJ11cIlxuICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidSb2wgcmVxdWVyaWRvJ1wiXG4gICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICA8aXB0LXNlbGVjdFxuICAgICAgICAgICAgICBbaW5pdGlhbFZhbHVlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZVwiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydnZW5kZXInXVwiXG4gICAgICAgICAgICAgIFtzZWxlY3RDb2RlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZSA9PT0gbnVsbCA/ICdTZWxlY2Npb25lIGfDqW5lcm8nIDogKHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZSB8IGdlbmRlckRpc3BsYXkpXCJcbiAgICAgICAgICAgICAgW2RhdGFdPVwiZ2VuZGVyc1wiXG4gICAgICAgICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RHZW5kZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtkZWZhdWx0VGV4dF09XCInU2VsZWNjaW9uZSBnw6luZXJvJ1wiXG4gICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgICAgICAgPGlwdC1zZWxlY3RcbiAgICAgICAgICAgICAgW2luaXRpYWxWYWx1ZV09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1sncGhvbmVfaW5kaWNhdGl2ZSddLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3Bob25lX2luZGljYXRpdmUnXVwiXG4gICAgICAgICAgICAgIFtkYXRhXT1cImluZGljYXRpdmVzXCJcbiAgICAgICAgICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdEluZGljYXRpdmUoJ3Bob25lX2luZGljYXRpdmUnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2RlZmF1bHRUZXh0XT1cIidJbmRpY2F0aXZvJ1wiXG4gICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidUZWzDqWZvbm8nXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3Bob25lX251bWJlciddXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRlVGV4dF09XCInRGViZSBpbmdyZXNhciB1biBuw7ptZXJvIGRlIHRlbMOpZm9ubyB2w6FsaWRvJ1wiXG4gICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICA8aXB0LXNlbGVjdFxuICAgICAgICAgICAgICBbaW5pdGlhbFZhbHVlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkX3R5cGUnXS52YWx1ZVwiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkX3R5cGUnXVwiXG4gICAgICAgICAgICAgIFtzZWxlY3RDb2RlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkX3R5cGUnXS52YWx1ZSA9PT0gbnVsbCA/ICdUaXBvIGRlIGRvY3VtZW50bycgOiB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snaWRfY2FyZF90eXBlJ10udmFsdWVcIlxuICAgICAgICAgICAgICBbaXNSZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2RhdGFdPVwiaWRUeXBlc1wiXG4gICAgICAgICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RJZFR5cGUoJ2lkX2NhcmRfdHlwZScsICRldmVudClcIlxuICAgICAgICAgICAgICBbZGVmYXVsdFRleHRdPVwiJ1RpcG8gZGUgZG9jdW1lbnRvJ1wiXG4gICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInRG9jdW1lbnRvJ1wiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkJ11cIlxuICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJykgPyAnRGViZSBpbmdyZXNhciBlbCBuw7ptZXJvIGRlIGRvY3VtZW50bycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkJ10uaGFzRXJyb3IoJ21pbmxlbmd0aCcpID8gJ03DrW5pbW8gNSBjYXJhY3RlcmVzJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2lkX2NhcmQnXS5oYXNFcnJvcignbWF4bGVuZ3RoJykgPyAnTcOheGltbyAyMCBjYXJhY3RlcmVzJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2lkX2NhcmQnXS5oYXNFcnJvcigncGF0dGVybicpID8gKHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkX3R5cGUnXS52YWx1ZSA9PT0gNyB8fCB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snaWRfY2FyZF90eXBlJ10udmFsdWUgPT09IDUgPyAnU29sbyBsZXRyYXMgeSBuw7ptZXJvcyBwZXJtaXRpZG9zJyA6ICdTb2xvIG7Dum1lcm9zIHBlcm1pdGlkb3MnKSA6XG4gICAgICAgICAgICAgICAgJ0RlYmUgaW5ncmVzYXIgZWwgbsO6bWVybyBkZSBkb2N1bWVudG8nXCJcbiAgICAgICAgICAgID48L2lwdC1pbnB1dD5cbiAgICAgICAgICAgICAgPGlwdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBbaW5pdGlhbFZhbHVlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydjb3VudHJ5J10udmFsdWVcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydjb3VudHJ5J11cIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RDb2RlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydjb3VudHJ5J10udmFsdWUgPT09IG51bGwgPyAnUGHDrXMgZGUgcmVzaWRlbmNpYScgOiB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snY291bnRyeSddLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAoZXZlbnRTZWxlY3QpPVwic2VsZWN0Q291bnRyeSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJjb3VudHJpZXNcIlxuICAgICAgICAgICAgICAgIFtkZWZhdWx0VGV4dF09XCInUGHDrXMgZGUgcmVzaWRlbmNpYSdcIlxuICAgICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgICAgICAgPGlwdC1zZWxlY3RcbiAgICAgICAgICAgICAgW2luaXRpYWxWYWx1ZV09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snc3RhdGUnXS52YWx1ZVwiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydzdGF0ZSddXCJcbiAgICAgICAgICAgICAgW3NlbGVjdENvZGVdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3N0YXRlJ10udmFsdWUgPT09IG51bGwgPyAnRGVwYXJ0YW1lbnRvIG8gZXN0YWRvJyA6IHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydzdGF0ZSddLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RTdGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2RhdGFdPVwic3RhdGVzXCJcbiAgICAgICAgICAgICAgW2RlZmF1bHRUZXh0XT1cIidEZXBhcnRhbWVudG8gbyBlc3RhZG8nXCJcbiAgICAgICAgICAgID48L2lwdC1zZWxlY3Q+XG4gICAgICAgICAgICA8aXB0LXNlbGVjdFxuICAgICAgICAgICAgICBbaW5pdGlhbFZhbHVlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydjaXR5J10udmFsdWVcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snY2l0eSddXCJcbiAgICAgICAgICAgICAgW3NlbGVjdENvZGVdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2NpdHknXS52YWx1ZSA9PT0gbnVsbCA/ICdDaXVkYWQgZGUgcmVzaWRlbmNpYScgOiB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snY2l0eSddLnZhbHVlXCJcbiAgICAgICAgICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdENpdHkoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtkYXRhXT1cImNpdGllc1wiXG4gICAgICAgICAgICAgIFtkZWZhdWx0VGV4dF09XCInQ2l1ZGFkIGRlIHJlc2lkZW5jaWEnXCJcbiAgICAgICAgICAgID48L2lwdC1zZWxlY3Q+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1zdGF0dXNcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGFuLXN0YXR1c1wiPkVzdGFkbzwvc3Bhbj5cbiAgICAgICAgICAgICAgPHAtc2VsZWN0QnV0dG9uIFxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImp1c3RpZnlPcHRpb25zXCIgXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RhdHVzXCIgXG4gICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCIgXG4gICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJjb2RlXCI+XG4gICAgICAgICAgICAgIDwvcC1zZWxlY3RCdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZFwiPlxuICAgICAgICAgICAgICA8cC1jaGVja2JveFxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNoYW5nZVBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICBsYWJlbD1cIkNhbWJpbyBkZSBjb250cmFzZcOxYVwiXG4gICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPjwvcC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWRcIiAqbmdJZj1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydjaGFuZ2VQYXNzd29yZCddLnZhbHVlXCI+XG4gICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ3Bhc3N3b3JkJ1wiXG4gICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInQ29udHJhc2XDsWEnXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3Bhc3N3b3JkJ11cIlxuICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXNzd29yZCddLmhhc0Vycm9yKCdyZXF1aXJlZCcpID8gJ0xhIGNvbnRyYXNlw7FhIGVzIHJlcXVlcmlkYScgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXNzd29yZCddLmhhc0Vycm9yKCdtaW5sZW5ndGgnKSA/ICdNw61uaW1vIDUgY2FyYWN0ZXJlcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXNzd29yZCddLmhhc0Vycm9yKCdtYXhsZW5ndGgnKSA/ICdNw6F4aW1vIDMyIGNhcmFjdGVyZXMnIDpcbiAgICAgICAgICAgICAgICAnSW5ncmVzZSB1bmEgY29udHJhc2XDsWEgdsOhbGlkYSdcIlxuICAgICAgICAgICAgPjwvaXB0LWlucHV0PlxuXG4gICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ3Bhc3N3b3JkJ1wiXG4gICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInUmVwZXRpciBjb250cmFzZcOxYSdcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1sncmVfcGFzc3dvcmQnXVwiXG4gICAgICAgICAgICAgIFt2YWxpZGF0ZVRleHRdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3JlX3Bhc3N3b3JkJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJykgPyAnRGViZSByZXBldGlyIGxhIGNvbnRyYXNlw7FhJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3JlX3Bhc3N3b3JkJ10uaGFzRXJyb3IoJ21pbmxlbmd0aCcpID8gJ03DrW5pbW8gNSBjYXJhY3RlcmVzJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3JlX3Bhc3N3b3JkJ10uaGFzRXJyb3IoJ21heGxlbmd0aCcpID8gJ03DoXhpbW8gMzIgY2FyYWN0ZXJlcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmhhc0Vycm9yKCdtaXNtYXRjaCcpID8gJ0xhcyBjb250cmFzZcOxYXMgbm8gY29pbmNpZGVuJyA6XG4gICAgICAgICAgICAgICAgJ1JlcGl0YSBsYSBjb250cmFzZcOxYSdcIlxuICAgICAgICAgICAgPjwvaXB0LWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBNZW5zYWplIGFkaWNpb25hbCBwYXJhIGVsIGVycm9yIGRlIG1pc21hdGNoIChvcGNpb25hbCwgc2kgcXVpZXJlcyBtb3N0cmFybG8gcG9yIHNlcGFyYWRvKSAtLT5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1cGRhdGVVc2VyRm9ybS5oYXNFcnJvcignbWlzbWF0Y2gnKSAmJiB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snY2hhbmdlUGFzc3dvcmQnXS52YWx1ZVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxuICAgICAgICAgICAgPHNtYWxsID5MYXMgY29udHJhc2XDsWFzIG5vIGNvaW5jaWRlbjwvc21hbGw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBQYXJlbnQgSW5mb3JtYXRpb24gU2VjdGlvbiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIiAqbmdJZj1cIkRhdGFTdHVkZW50Py5jb2RzXCI+XG4gICAgICAgICAgICA8aDI+SW5mb3JtYWNpw7NuIGRlbCBhY3VkaWVudGU8L2gyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJEYXRhU3R1ZGVudD8uY29kc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dQYXJlbnRTZWN0aW9uOyBlbHNlIG5vUGFyZW50TWVzc2FnZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XG4gICAgICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidOb21icmVzJ1wiXG4gICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1sncGFyZW50X25hbWUnXVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidEZWJlIGluZ3Jlc2FyIGVsIG5vbWJyZSdcIlxuICAgICAgICAgICAgICAgID48L2lwdC1pbnB1dD5cbiAgICAgICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ0FwZWxsaWRvcydcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3BhcmVudF9sYXN0X25hbWUnXVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidEZWJlIGluZ3Jlc2FyIGxvcyBhcGVsbGlkb3MnXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidPY3VwYWNpw7NuJ1wiXG4gICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1sncGFyZW50X29jY3VwYXRpb24nXVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidEZWJlIGluZ3Jlc2FyIGxhIG9jdXBhY2nDs24nXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICAgICAgW2lucHV0VHlwZV09XCInZW1haWwnXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW1haWwnXCJcbiAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXJlbnRfZW1haWwnXVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidEZWJlIGluZ3Jlc2FyIHVuIGNvcnJlbyB2w6FsaWRvJ1wiXG4gICAgICAgICAgICAgICAgPjwvaXB0LWlucHV0PlxuICAgICAgICAgICAgICAgIDxpcHQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICBbaW5pdGlhbFZhbHVlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZF90eXBlJ10udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3BhcmVudF9pZF9jYXJkX3R5cGUnXVwiXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0Q29kZV09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1sncGFyZW50X2lkX2NhcmRfdHlwZSddLnZhbHVlID09PSBudWxsID8gJ1RpcG8gZGUgZG9jdW1lbnRvJyA6IHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZF90eXBlJ10udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbZGF0YV09XCJpZFR5cGVzXCJcbiAgICAgICAgICAgICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RJZFR5cGUoJ3BhcmVudF9pZF9jYXJkX3R5cGUnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtkZWZhdWx0VGV4dF09XCInVGlwbyBkZSBkb2N1bWVudG8nXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxpcHQtaW5wdXRcbiAgICAgICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidEb2N1bWVudG8nXCJcbiAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZCddXCJcbiAgICAgICAgICAgICAgICAgIFt2YWxpZGF0ZVRleHRdPVwiJ0RlYmUgaW5ncmVzYXIgZWwgbsO6bWVybyBkZSBkb2N1bWVudG8nXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPGlwdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIFtpbml0aWFsVmFsdWVdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3BhcmVudF9waG9uZV9pbmRpY2F0aXZlJ10udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3BhcmVudF9waG9uZV9pbmRpY2F0aXZlJ11cIlxuICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiaW5kaWNhdGl2ZXNcIlxuICAgICAgICAgICAgICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdEluZGljYXRpdmUoJ3BhcmVudF9waG9uZV9pbmRpY2F0aXZlJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbZGVmYXVsdFRleHRdPVwiJ0luZGljYXRpdm8nXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxpcHQtaW5wdXRcbiAgICAgICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidUZWzDqWZvbm8nXCJcbiAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXJlbnRfcGhvbmVfbnVtYmVyJ11cIlxuICAgICAgICAgICAgICAgICAgW3ZhbGlkYXRlVGV4dF09XCInRGViZSBpbmdyZXNhciB1biBuw7ptZXJvIGRlIHRlbMOpZm9ubyB2w6FsaWRvJ1wiXG4gICAgICAgICAgICAgICAgPjwvaXB0LWlucHV0PlxuXG4gICAgICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidEaXJlY2Npw7NuIGRlIG9maWNpbmEnXCJcbiAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXJlbnRfb2ZmaWNlX2FkcnJlc3MnXVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidEZWJlIGluZ3Jlc2FyIGxhIGRpcmVjY2nDs24nXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vUGFyZW50TWVzc2FnZT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLXBhcmVudC1tZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgPHA+U2luIGFjdWRpZW50ZTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyLWlubmVyXCI+XG4gICAgICAgICAgICAgIDxpcHQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbYnV0dG9uVHlwZV09XCInYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NlcnJhcidcIlxuICAgICAgICAgICAgICAgICAgW3ByaW1hcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW2lzRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImNsb3NlVGFibGUoKVwiXG4gICAgICAgICAgICAgID48L2lwdC1idXR0b24+XG5cbiAgICAgICAgICAgICAgPGlwdC1idXR0b25cbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FjdHVhbGl6YXInXCJcbiAgICAgICAgICAgICAgICBbaXNFbmFibGVkXT1cIiFsb2FkZXIgJiYgdXBkYXRlVXNlckZvcm0udmFsaWQgJiYgIXVwZGF0ZVVzZXJGb3JtLmhhc0Vycm9yKCdtaXNtYXRjaCcpICYmIGhhc0Zvcm1DaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInNob3dDb25maXJtRGlhbG9ncygpXCJcbiAgICAgICAgICAgICAgICBbcHJpbWFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIENvbmZpcm0gRGlhbG9nIHBhcmEgcmF6w7NuIHkgb2JzZXJ2YWNpw7NuIC0tPlxuPHAtZGlhbG9nXG4gICAgaGVhZGVyPVwiQ29uZmlybWFyIEFqdXN0ZSBkZSBVc3VhcmlvXCJcbiAgICBbKHZpc2libGUpXT1cInNob3dDb25maXJtRGlhbG9nXCJcbiAgICBbbW9kYWxdPVwidHJ1ZVwiXG4gICAgKG9uSGlkZSk9XCJjbG9zZUNvbmZpcm1EaWFsb2coKVwiXG4gID5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjb25maXJtRm9ybVwiIGNsYXNzPVwiY29uZmlybS1mb3JtXCI+XG4gICAgPGRpdiBjbGFzcz1cInAtZmllbGRcIj5cbiAgICAgIDxpcHQtc2VsZWN0XG4gICAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29uZmlybUZvcm0uY29udHJvbHNbJ3JlYXNvbiddLnZhbHVlXCJcbiAgICAgICAgW2NvbnRyb2xdPVwiY29uZmlybUZvcm0uY29udHJvbHNbJ3JlYXNvbiddXCJcbiAgICAgICAgW2RhdGFdPVwicmVhc29uc1wiXG4gICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiXG4gICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RSZWFzb24oJGV2ZW50KVwiXG4gICAgICAgIFtkZWZhdWx0VGV4dF09XCInU2VsZWNjaW9uZSBsYSByYXrDs24nXCJcbiAgICAgID48L2lwdC1zZWxlY3Q+XG4gICAgICA8c21hbGwgKm5nSWY9XCJjb25maXJtRm9ybS5jb250cm9sc1sncmVhc29uJ10uaW52YWxpZCAmJiBjb25maXJtRm9ybS5jb250cm9sc1sncmVhc29uJ10udG91Y2hlZFwiIGNsYXNzPVwicC1lcnJvclwiPlxuICAgICAgICBMYSByYXrDs24gZXMgcmVxdWVyaWRhXG4gICAgICA8L3NtYWxsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwLWZpZWxkXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjb250YWluZXItb2JzZXJ2YXRpb25cIj5PYnNlcnZhY2nDs248L2xhYmVsPlxuICAgICAgPHRleHRhcmVhXG4gICAgICAgIGlkPVwib2JzZXJ2YXRpb25cIlxuICAgICAgICBwSW5wdXRUZXh0YXJlYVxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvYnNlcnZhdGlvblwiXG4gICAgICAgIHJvd3M9XCIzXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJEZXNjcmliZSBkZXRhbGxlcyBhZGljaW9uYWxlcyBkZWwgYWp1c3RlXCJcbiAgICAgID48L3RleHRhcmVhPlxuICAgICAgPHNtYWxsICpuZ0lmPVwiY29uZmlybUZvcm0uY29udHJvbHNbJ29ic2VydmF0aW9uJ10uaW52YWxpZCAmJiBjb25maXJtRm9ybS5jb250cm9sc1snb2JzZXJ2YXRpb24nXS50b3VjaGVkXCIgY2xhc3M9XCJwLWVycm9yXCI+XG4gICAgICAgIExhIG9ic2VydmFjacOzbiBlcyByZXF1ZXJpZGFcbiAgICAgIDwvc21hbGw+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbiAgPHAtZm9vdGVyPlxuICAgIDxpcHQtYnV0dG9uXG4gICAgICBjbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeVwiXG4gICAgICBbYnV0dG9uVHlwZV09XCInYnV0dG9uJ1wiXG4gICAgICBbbGFiZWxdPVwiJ0NhbmNlbGFyJ1wiXG4gICAgICBbcHJpbWFyeV09XCJmYWxzZVwiXG4gICAgICBbaXNFbmFibGVkXT1cInRydWVcIlxuICAgICAgKG9uQ2xpY2spPVwiY2xvc2VDb25maXJtRGlhbG9nKClcIlxuICAgID48L2lwdC1idXR0b24+XG4gICAgPGlwdC1idXR0b25cbiAgICAgIGNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5XCJcbiAgICAgIFtidXR0b25UeXBlXT1cIididXR0b24nXCJcbiAgICAgIFtsYWJlbF09XCInQ29uZmlybWFyJ1wiXG4gICAgICBbcHJpbWFyeV09XCJ0cnVlXCJcbiAgICAgIFtpc0VuYWJsZWRdPVwiY29uZmlybUZvcm0udmFsaWRcIlxuICAgICAgKG9uQ2xpY2spPVwiYWNjZXB0Q29uZmlybURpYWxvZygpXCJcbiAgICA+PC9pcHQtYnV0dG9uPlxuICA8L3AtZm9vdGVyPlxuPC9wLWRpYWxvZz5cblxuPC9tYWluPiJdfQ==
|
|
843
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXVzZXItZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy91cGRhdGUtdXNlci1mb3JtL3VwZGF0ZS11c2VyLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvdXBkYXRlLXVzZXItZm9ybS91cGRhdGUtdXNlci1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBb0MsTUFBTSxFQUFnQyxNQUFNLGVBQWUsQ0FBQztBQUN2SSxPQUFPLEVBQTJDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBS3JGLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBUy9CLE1BQU0sT0FBTyx1QkFBdUI7SUE0Q2xDLFlBQ1UsRUFBZSxFQUNmLEdBQXNCLEVBQ3RCLGdCQUFrQyxFQUNsQyxXQUF3QixFQUN4QixXQUF3QjtRQUp4QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQS9DekIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDN0IsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQzNDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFHdEQsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUNuQiwyQkFBc0IsR0FBVSxFQUFFLENBQUM7UUFDbkMsWUFBTyxHQUFVLEVBQUUsQ0FBQztRQUNwQixX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O1lBQ3BDLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7O29IQWgzQlUsdUJBQXVCO3dHQUF2Qix1QkFBdUIsc01BRnZCLEVBQUUsK0NDYmYsd3BpQkErVU87MkZEaFVNLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDRSxzQkFBc0IsYUFHckIsRUFBRTtxTkFHSixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBPdXRwdXQsIENoYW5nZURldGVjdG9yUmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7ICBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvdXNlci1zZXJ2aWNlL3VzZXItc2VydmljZSc7XG5pbXBvcnQgeyAgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL2Jhc2Utc2VydmljZS9iYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgIFBhcmFtZXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3BhcmFtZXRlcnMtc2VydmljZS9wYXJhbWV0ZXJzLnNlcnZpY2UnO1xuaW1wb3J0IHsgIElGb3JtRGF0YVJxIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvdXNlci91c2VyLXJxLm1vZGVsJztcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpcHQtdXBkYXRlLXVzZXItZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi91cGRhdGUtdXNlci1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdXBkYXRlLXVzZXItZm9ybS5jb21wb25lbnQuY3NzJ10sXG4gIHByb3ZpZGVyczogW11cbn0pXG5leHBvcnQgY2xhc3MgdXBkYXRlVXNlckZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgRGF0YVN0dWRlbnQ6IGFueTtcbiAgQElucHV0KCkgdmlzaWJsZU1vZGFsOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBjbG9zZU1vZGFsSVMgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSB1c2VyVXBkYXRlZEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICB1cGRhdGVVc2VyRm9ybSE6IEZvcm1Hcm91cDtcbiAgY29uZmlybUZvcm0hOiBGb3JtR3JvdXA7XG4gIHBob3RvOiBzdHJpbmcgPSAnJztcbiAgcGhvbmVOdW1iZXJJbmRpY2F0aXZlczogYW55W10gPSBbXTtcbiAgaWRUeXBlczogYW55W10gPSBbXTtcbiAgbG9hZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIHN0YXRlczogYW55ID0gW107XG4gIGNpdGllczogYW55ID0gW107XG4gIGNvdW50cmllczogYW55ID0gW107XG4gIHNob3dQYXJlbnRTZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHNob3dFbWFpbElwdDogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93Q29uZmlybVNlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcGFyYW1ldGVyc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwYXJhbWV0ZXJzQWxsPzogYW55O1xuICBpbmRpY2F0aXZlczogYW55W10gPSBbXTtcbiAgY2l2aWxTdGF0dXM6IGFueVtdID0gW107XG4gIGdlbmRlcnM6IGFueVtdID0gW107XG4gIHN0cmF0dW1zOiBhbnlbXSA9IFtdO1xuICBzaG93Q29uZmlybURpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuICB1c2VyUm9sZUNvbW1lcmNpYWw6Ym9vbGVhbiA9ZmFsc2U7XG4gIC8vIHVzZXJVcGRhdGVkID0gZmFsc2U7XG4gIHByaXZhdGUgaW5pdGlhbEZvcm1WYWx1ZTogYW55ID0gW107XG4gIHByaXZhdGUgaWRUeXBlU3Vic2NyaXB0aW9uPzogIFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBwZW5kaW5nSW5pdDogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgaXNTdHVkZW50OiBib29sZWFuID0gZmFsc2U7XG4gIGp1c3RpZnlPcHRpb25zOiBhbnlbXSA9IFtdO1xuICBcbiAgcmVhc29ucyA9IFtcbiAgICB7IG5hbWU6ICdDb3JyZWNjacOzbiBkZSBlcnJvcmVzIGVuIGRhdG9zIHBlcnNvbmFsZXMnLCBjb2RlOiAxIH0sXG4gICAgeyBuYW1lOiAnQ29ycmVjY2lvbiBkZSBkb2N1bWVudGFjaW9uJywgY29kZTogMiB9LFxuICAgIHsgbmFtZTogJ0FjdHVhbGl6YWNpw7NuIGRlIGNvbnRhY3RvJywgY29kZTogMyB9LFxuICAgIHsgbmFtZTogJ2NvcnJlY2Npb24gZGF0b3MgZGUgQWN1ZGllbnRlJywgY29kZTogNCB9LFxuICAgIHsgbmFtZTogJ0NhbWJpbyBkZSBjb250cmFzZcOxYScsIGNvZGU6IDUgfSxcbiAgICB7IG5hbWU6ICdDYW1iaW8gZGUgcmVzaWRlbmNpYScsIGNvZGU6IDYgfSxcbiAgICB7IG5hbWU6ICdTdXNwZW5zacOzbiBvIHJlYWN0aXZhY2nDs24gZGUgY3VlbnRhJywgY29kZTogNyB9LFxuICAgIHsgbmFtZTogJ090cm8nLCBjb2RlOiA4IH1cbiAgXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBwYXJhbWV0ZXJTZXJ2aWNlOiBQYXJhbWV0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLmluaXRGb3JtKCk7XG4gICAgdGhpcy5pbml0Q29uZmlybUZvcm0oKTtcbiAgICB0aGlzLnZhbGlkYXRpb25Vc2VyUm9sZSgpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5nZXRQYXJhbWV0ZXJzKCk7XG4gICAgdGhpcy50cmFja0lkVHlwZUNoYW5nZXMoKTtcbiAgICB0aGlzLnNldEp1c3RpZnlPcHRpb25zKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3Zpc2libGVNb2RhbCddICYmIGNoYW5nZXNbJ3Zpc2libGVNb2RhbCddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgaWYgKHRoaXMucGFyYW1ldGVyc0xvYWRlZCkge1xuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuICAgICAgdGhpcy5zZXRKdXN0aWZ5T3B0aW9ucygpO1xuICAgICAgdGhpcy50cmFja0lkVHlwZUNoYW5nZXMoKTtcbiAgICAgIHRoaXMudmFsaWRhdGlvblVzZXJSb2xlKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9ZWxzZSAge1xuICAgICAgICB0aGlzLnBlbmRpbmdJbml0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pZFR5cGVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuaWRUeXBlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgaW5pdENvbmZpcm1Gb3JtKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlybUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIHJlYXNvbjogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgb2JzZXJ2YXRpb246IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1MCldXVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRKdXN0aWZ5T3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLmlzU3R1ZGVudCA9IHRoaXMuRGF0YVN0dWRlbnQ/LnJvbGUgPT09IDEzO1xuXG4gICAgaWYgKHRoaXMuaXNTdHVkZW50KSB7XG4gICAgICAvLyBMaXN0YSBjb21wbGV0YSBwYXJhIGVzdHVkaWFudGVcbiAgICAgIHRoaXMuanVzdGlmeU9wdGlvbnMgPSBbXG4gICAgICAgIHsgbmFtZTogJ0FjdGl2bycsIGNvZGU6IDEgfSxcbiAgICAgICAgeyBuYW1lOiAnU3VzcGVuZGlkbyBwL3BhZ28nLCBjb2RlOiAyIH0sXG4gICAgICAgIHsgbmFtZTogJ1BhdXNhZG8gcHJvY2VzbycsIGNvZGU6IDMgfSxcbiAgICAgICAgeyBuYW1lOiAnUmVtb3ZpZG8nLCBjb2RlOiA0IH1cbiAgICAgIF07XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldCgnc3RhdHVzJyk/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0YSByZWR1Y2lkYSBwYXJhIG90cm9zIHJvbGVzXG4gICAgICB0aGlzLmp1c3RpZnlPcHRpb25zID0gW1xuICAgICAgICB7IG5hbWU6ICdBY3Rpdm8nLCBjb2RlOiAxIH0sXG4gICAgICAgIHsgbmFtZTogJ1JlbW92aWRvJywgY29kZTogNCB9XG4gICAgICBdO1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5nZXQoJ3N0YXR1cycpPy5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFBhcmFtZXRlcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFyYW1ldGVyc0xvYWRlZCkge1xuICAgICAgdGhpcy5zZXRQYXJhbWV0ZXJzKCk7XG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5nZXRBbGxQYXJhbWV0ZXJzQ29kRm9ybSgpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzQWxsID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRQYXJhbWV0ZXJzKCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcbiAgICAgICAgdGhpcy50cmFja0lkVHlwZUNoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLnBlbmRpbmdJbml0ID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcGFyYW1ldGVyczonLCBlcnIpO1xuICAgICAgICB0aGlzLnBhcmFtZXRlcnNMb2FkZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldFBhcmFtZXRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5pZFR5cGVzID0gdGhpcy5wYXJhbWV0ZXJzQWxsPy5UeXBlSWRDYXJkQnlDb3VudHJ5Q29sO1xuICAgIHRoaXMuaW5kaWNhdGl2ZXMgPSB0aGlzLnBhcmFtZXRlcnNBbGw/LmluZGljYXRpdmVzO1xuICAgIHRoaXMuY291bnRyaWVzID0gdGhpcy5wYXJhbWV0ZXJzQWxsPy5jb3VudHJ5O1xuICAgIHRoaXMuY2l2aWxTdGF0dXMgPSB0aGlzLnBhcmFtZXRlcnNBbGw/LmNpdmlsU3RhdHVzO1xuICAgIHRoaXMuc3RhdGVzID0gdGhpcy5wYXJhbWV0ZXJzQWxsPy5TdGF0ZTtcbiAgICB0aGlzLmNpdGllcyA9IHRoaXMucGFyYW1ldGVyc0FsbD8uY2l0eTtcbiAgICBpZiAodGhpcy5wYXJhbWV0ZXJzQWxsICYmIHRoaXMucGFyYW1ldGVyc0FsbC5nZW5kZXIpIHtcbiAgICAgIC8vIFRyYW5zZm9ybWFyIGdlbmRlciBlbiB1biBhcnJlZ2xvIGRlIHsgY29kZSwgbmFtZSB9XG4gICAgICB0aGlzLmdlbmRlcnMgPSB0aGlzLnBhcmFtZXRlcnNBbGwuZ2VuZGVyLm1hcCgoZ2VuZGVyOiBhbnkpID0+ICh7XG4gICAgICAgIGNvZGU6IGdlbmRlci5jb2RlLFxuICAgICAgICBuYW1lOiBnZW5kZXIubmFtZV9zcGFuaXNoXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZ2VuZGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5zaG93UGFyZW50U2VjdGlvbiA9ICEhdGhpcy5EYXRhU3R1ZGVudD8uY29kcz8ucGFyZW50Py5jb2RlO1xuICAgIHRoaXMuc2hvd0VtYWlsSXB0ID0gISF0aGlzLkRhdGFTdHVkZW50Py5lbWFpbF9pcHQgJiYgdGhpcy5EYXRhU3R1ZGVudC5lbWFpbF9pcHQgIT09IGZhbHNlO1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICB0aGlzLnBvcHVsYXRlRm9ybSgpO1xuICB9XG5cbiAgaW5pdEZvcm0oKTogdm9pZCB7XG4gICAgY29uc3QgYmFzZUZvcm0gPSB7XG4gICAgICBuYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzIpXV0sXG4gICAgICBsYXN0X25hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDUpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgzMildXSxcbiAgICAgIGVtYWlsOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgzMDApXV0sXG4gICAgICBnZW5kZXI6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGlkX2NhcmRfdHlwZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgaWRfY2FyZDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNSksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDIwKV1dLFxuICAgICAgcGhvbmVfaW5kaWNhdGl2ZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgcGhvbmVfbnVtYmVyOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMCksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDE1KV1dLFxuICAgICAgY291bnRyeTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgc3RhdGU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGNpdHk6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHJvbGU6IFt7IHZhbHVlOiAnJywgZGlzYWJsZWQ6IHRydWUgfV0sXG4gICAgICBzZXJ2aWNlX2hvdXI6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBwYXNzd29yZDogWycnLCBbXV0sXG4gICAgICByZV9wYXNzd29yZDogWycnLCBbXV0sXG4gICAgICBjaGFuZ2VQYXNzd29yZDogW2ZhbHNlXSxcbiAgICAgIHN0YXR1czogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zaG93RW1haWxJcHQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oYmFzZUZvcm0sIHtcbiAgICAgICAgZW1haWxfaXB0OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLmVtYWlsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTUpXV1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dQYXJlbnRTZWN0aW9uKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGJhc2VGb3JtLCB7XG4gICAgICAgIHBhcmVudF9uYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTUwKV1dLFxuICAgICAgICBwYXJlbnRfbGFzdF9uYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTUwKV1dLFxuICAgICAgICBwYXJlbnRfaWRfY2FyZF90eXBlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIHBhcmVudF9pZF9jYXJkOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzApXV0sXG4gICAgICAgIHBhcmVudF9waG9uZV9pbmRpY2F0aXZlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICAgIHBhcmVudF9waG9uZV9udW1iZXI6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjApXV0sXG4gICAgICAgIHBhcmVudF9vY2N1cGF0aW9uOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MCldXSxcbiAgICAgICAgcGFyZW50X29mZmljZV9hZHJyZXNzOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxNTApXV0sXG4gICAgICAgIHBhcmVudF9lbWFpbDogWycnLCBbVmFsaWRhdG9ycy5lbWFpbCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU1KV1dXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtID0gdGhpcy5mYi5ncm91cChiYXNlRm9ybSwgeyB2YWxpZGF0b3JzOiB0aGlzLnBhc3N3b3JkTWF0Y2hWYWxpZGF0b3IgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldCgnY2hhbmdlUGFzc3dvcmQnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoY2hlY2tlZDogYm9vbGVhbikgPT4ge1xuICAgICAgY29uc3QgcGFzc3dvcmRDb250cm9sID0gdGhpcy51cGRhdGVVc2VyRm9ybS5nZXQoJ3Bhc3N3b3JkJyk7XG4gICAgICBjb25zdCByZVBhc3N3b3JkQ29udHJvbCA9IHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KCdyZV9wYXNzd29yZCcpO1xuXG4gICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICBwYXNzd29yZENvbnRyb2w/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDUpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgzMildKTtcbiAgICAgICAgcmVQYXNzd29yZENvbnRyb2w/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDUpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgzMildKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhc3N3b3JkQ29udHJvbD8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHJlUGFzc3dvcmRDb250cm9sPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgcGFzc3dvcmRDb250cm9sPy5zZXRWYWx1ZSgnJyk7XG4gICAgICAgIHJlUGFzc3dvcmRDb250cm9sPy5zZXRWYWx1ZSgnJyk7XG4gICAgICB9XG5cbiAgICAgIHBhc3N3b3JkQ29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgcmVQYXNzd29yZENvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KCdwYXNzd29yZCcpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KCdyZV9wYXNzd29yZCcpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcGFzc3dvcmRNYXRjaFZhbGlkYXRvcihmb3JtOiBGb3JtR3JvdXApOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSB8IG51bGwge1xuICAgIGNvbnN0IGNoYW5nZVBhc3N3b3JkID0gZm9ybS5nZXQoJ2NoYW5nZVBhc3N3b3JkJyk/LnZhbHVlO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gZm9ybS5nZXQoJ3Bhc3N3b3JkJyk/LnZhbHVlO1xuICAgIGNvbnN0IHJlUGFzc3dvcmQgPSBmb3JtLmdldCgncmVfcGFzc3dvcmQnKT8udmFsdWU7XG4gICAgaWYgKCFjaGFuZ2VQYXNzd29yZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IG1pc21hdGNoID0gcGFzc3dvcmQgJiYgcmVQYXNzd29yZCAmJiBwYXNzd29yZCAhPT0gcmVQYXNzd29yZDtcbiAgICByZXR1cm4gbWlzbWF0Y2ggPyB7IG1pc21hdGNoOiB0cnVlIH0gOiBudWxsO1xuICB9XG5cbiAgbm9XaGl0ZXNwYWNlVmFsaWRhdG9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9IHwgbnVsbCB7XG4gICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgdHlwZW9mIGNvbnRyb2wudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB0cmltbWVkVmFsdWUgPSBjb250cm9sLnZhbHVlLnRyaW0oKTtcbiAgICAgIGlmICh0cmltbWVkVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiB7IG9ubHlXaGl0ZXNwYWNlOiB0cnVlIH07XG4gICAgICB9XG4gICAgICBpZiAoY29udHJvbC52YWx1ZSAhPT0gdHJpbW1lZFZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7IGhhc1doaXRlc3BhY2U6IHRydWUgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cmFuc2Zvcm1Sb2xlKHJvbGU6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3Qgcm9sZU1hcDogeyBba2V5OiBudW1iZXJdOiBzdHJpbmcgfSA9IHtcbiAgICAgIDE6ICdTdXBlciBBZG1pbicsXG4gICAgICAxMDogJ0xpZGVyIEFjYWRlbWljbycsXG4gICAgICAxMTogJ0Nvb3JkaW5hZG9yIEFjYWRlbWljbycsXG4gICAgICAxMjogJ1RlYWNoZXIgQWNhZGVtaWNvJyxcbiAgICAgIDEzOiAnRXN0dWRpYW50ZScsXG4gICAgICAxNTogJ1Bvc2libGUgRXN0dWRpYW50ZScsXG4gICAgICAyMDogJ0xpZGVyIE1hcmtldGluZycsXG4gICAgICAyMTogJ0Nvb3JkaW5hZG9yIE1hcmtldGluZycsXG4gICAgICAyMjogJ0F1eGlsaWFyIE1hcmtldGluZycsXG4gICAgICAzMDogJ0xpZGVyIEFkbWluaXN0cmF0aXZvJyxcbiAgICAgIDMxOiAnQ29vcmRpbmFkb3IgQWRtaW5pc3RyYXRpdm8nLFxuICAgICAgMzI6ICdBdXhpbGlhciBBZG1pbmlzdHJhdGl2bycsXG4gICAgICA0MDogJ0xpZGVyIENvbWVyY2lhbCcsXG4gICAgICA0MTogJ0Nvb3JkaW5hZG9yIENvbWVyY2lhbCcsXG4gICAgICA0MjogJ0FzZXNvciBDb21lcmNpYWwnLFxuICAgICAgNTA6ICdMaWRlciBDYXJ0ZXJhJyxcbiAgICAgIDUxOiAnQ29vcmRpbmFkb3IgQ2FydGVyYScsXG4gICAgICA1MjogJ0FzZXNvciBDYXJ0ZXJhJyxcbiAgICAgIDYwOiAnUHJvdmVlZG9yJ1xuICAgIH07XG4gICAgcmV0dXJuIHJvbGVNYXBbTnVtYmVyKHJvbGUpXSB8fCAnJztcbiAgfVxuXG4gIHBvcHVsYXRlRm9ybSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5EYXRhU3R1ZGVudCkge1xuICAgICAgY29uc3QgZm9ybVZhbHVlOiBhbnkgPSB7XG4gICAgICAgIG5hbWU6IHRoaXMuRGF0YVN0dWRlbnQubmFtZSB8fCAnJyxcbiAgICAgICAgbGFzdF9uYW1lOiB0aGlzLkRhdGFTdHVkZW50Lmxhc3RfbmFtZSB8fCAnJyxcbiAgICAgICAgZW1haWw6IHRoaXMuRGF0YVN0dWRlbnQuZW1haWwgfHwgJycsXG4gICAgICAgIGdlbmRlcjogdGhpcy5EYXRhU3R1ZGVudC5nZW5kZXIgfHwgbnVsbCxcbiAgICAgICAgaWRfY2FyZF90eXBlOiB0aGlzLkRhdGFTdHVkZW50LmlkX2NhcmRfdHlwZSB8fCAnJyxcbiAgICAgICAgaWRfY2FyZDogdGhpcy5EYXRhU3R1ZGVudC5pZF9jYXJkIHx8ICcnLFxuICAgICAgICBwaG9uZV9pbmRpY2F0aXZlOiB0aGlzLkRhdGFTdHVkZW50LnBob25lX2luZGljYXRpdmUgfHwgJycsXG4gICAgICAgIHBob25lX251bWJlcjogdGhpcy5EYXRhU3R1ZGVudC5waG9uZV9udW1iZXIgfHwgJycsXG4gICAgICAgIGNvdW50cnk6IHRoaXMuRGF0YVN0dWRlbnQuY2l0eT8uY291bnRyeSxcbiAgICAgICAgc3RhdGU6IHRoaXMuRGF0YVN0dWRlbnQuY2l0eT8uc3RhdGUsXG4gICAgICAgIGNpdHk6IHRoaXMuRGF0YVN0dWRlbnQuY2l0eT8uY29kZSxcbiAgICAgICAgcm9sZTogdGhpcy50cmFuc2Zvcm1Sb2xlKHRoaXMuRGF0YVN0dWRlbnQucm9sZSkgfHwgJycsXG4gICAgICAgIHNlcnZpY2VfaG91cjogdGhpcy5EYXRhU3R1ZGVudC5zZXJ2aWNlX2hvdXIgfHwgMCxcbiAgICAgICAgY2hhbmdlUGFzc3dvcmQ6IGZhbHNlLFxuICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgIHJlX3Bhc3N3b3JkOiAnJyxcbiAgICAgICAgc3RhdHVzOiB0aGlzLkRhdGFTdHVkZW50LnVzZXJfc3RhdHVzIHx8ICcnXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5zaG93RW1haWxJcHQpIHtcbiAgICAgICAgZm9ybVZhbHVlLmVtYWlsX2lwdCA9IHRoaXMuRGF0YVN0dWRlbnQuZW1haWxfaXB0IHx8ICcnO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zaG93UGFyZW50U2VjdGlvbikge1xuICAgICAgICBPYmplY3QuYXNzaWduKGZvcm1WYWx1ZSwge1xuICAgICAgICAgIHBhcmVudF9uYW1lOiB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBwYXJlbnRfbGFzdF9uYW1lOiB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8ubGFzdF9uYW1lIHx8ICcnLFxuICAgICAgICAgIHBhcmVudF9pZF9jYXJkX3R5cGU6IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5pZF9jYXJkX3R5cGUgfHwgJycsXG4gICAgICAgICAgcGFyZW50X2lkX2NhcmQ6IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5pZF9jYXJkIHx8ICcnLFxuICAgICAgICAgIHBhcmVudF9waG9uZV9pbmRpY2F0aXZlOiB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8ucGhvbmVfaW5kaWNhdGl2ZSB8fCAnJyxcbiAgICAgICAgICBwYXJlbnRfcGhvbmVfbnVtYmVyOiB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8ucGhvbmVfbnVtYmVyIHx8ICcnLFxuICAgICAgICAgIHBhcmVudF9vY2N1cGF0aW9uOiB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8ub2NjdXBhdGlvbiB8fCAnJyxcbiAgICAgICAgICBwYXJlbnRfb2ZmaWNlX2FkcnJlc3M6IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5vZmZpY2VfYWRycmVzcyB8fCAnJyxcbiAgICAgICAgICBwYXJlbnRfZW1haWw6IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5lbWFpbCB8fCAnJ1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy51cGRhdGVJZENhcmRWYWxpZGF0b3JzKHRoaXMuRGF0YVN0dWRlbnQuaWRfY2FyZF90eXBlKTtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0ucmVzZXQoKTtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0ucGF0Y2hWYWx1ZShmb3JtVmFsdWUpO1xuICAgICAgdGhpcy5pbml0aWFsRm9ybVZhbHVlID0geyAuLi50aGlzLnVwZGF0ZVVzZXJGb3JtLnZhbHVlIH07XG4gICAgICBpZiAoZm9ybVZhbHVlLmNvdW50cnkpIHtcbiAgICAgICAgdGhpcy5jb3VudHJpZXMgPSB0aGlzLnBhcmFtZXRlcnNBbGw/LmNvdW50cnk7XG4gICAgICAgIHRoaXMuc2VsZWN0Q291bnRyeSh0aGlzLkRhdGFTdHVkZW50LmNpdHk/LmNvdW50cnkpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1WYWx1ZS5zdGF0ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdFN0YXRlKHRoaXMuRGF0YVN0dWRlbnQuY2l0eT8uc3RhdGUpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1WYWx1ZS5jaXR5KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0Q2l0eSh0aGlzLkRhdGFTdHVkZW50LmNpdHk/LmNvZGUpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1WYWx1ZS5pZF9jYXJkX3R5cGUpIHtcbiAgICAgICAgdGhpcy5pZFR5cGVzID0gdGhpcy5wYXJhbWV0ZXJzQWxsPy5UeXBlSWRDYXJkQnlDb3VudHJ5Q29sO1xuICAgICAgICB0aGlzLnNlbGVjdElkVHlwZSgnaWRfY2FyZF90eXBlJyx0aGlzLkRhdGFTdHVkZW50LmlkX2NhcmRfdHlwZSk7XG4gICAgICB9XG4gICAgICBpZiAoZm9ybVZhbHVlLnBob25lX2luZGljYXRpdmUpIHtcbiAgICAgICAgdGhpcy5pbmRpY2F0aXZlcyA9IHRoaXMucGFyYW1ldGVyc0FsbD8uaW5kaWNhdGl2ZXM7XG4gICAgICAgIHRoaXMuc2VsZWN0SW5kaWNhdGl2ZSgncGhvbmVfaW5kaWNhdGl2ZScsIHRoaXMuRGF0YVN0dWRlbnQucGhvbmVfaW5kaWNhdGl2ZSk7XG4gICAgICB9XG4gICAgICBpZiAoZm9ybVZhbHVlLnBhcmVudF9waG9uZV9pbmRpY2F0aXZlKSB7XG4gICAgICAgIHRoaXMuaW5kaWNhdGl2ZXMgPSB0aGlzLnBhcmFtZXRlcnNBbGw/LmluZGljYXRpdmVzO1xuICAgICAgICB0aGlzLnNlbGVjdEluZGljYXRpdmUoJ3BhcmVudF9waG9uZV9pbmRpY2F0aXZlJywgdGhpcy5EYXRhU3R1ZGVudC5jb2RzPy5wYXJlbnQ/LnBob25lX2luZGljYXRpdmUpO1xuICAgICAgfVxuICAgICAgaWYgKGZvcm1WYWx1ZS5nZW5kZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyYW1ldGVyc0FsbCAmJiB0aGlzLnBhcmFtZXRlcnNBbGwuZ2VuZGVyKSB7XG4gICAgICAgICAgLy8gVHJhbnNmb3JtYXIgZ2VuZGVyIGVuIHVuIGFycmVnbG8gZGUgeyBjb2RlLCBuYW1lIH1cbiAgICAgICAgICB0aGlzLmdlbmRlcnMgPSB0aGlzLnBhcmFtZXRlcnNBbGwuZ2VuZGVyLm1hcCgoZ2VuZGVyOiBhbnkpID0+ICh7XG4gICAgICAgICAgICBjb2RlOiBnZW5kZXIuY29kZSxcbiAgICAgICAgICAgIG5hbWU6IGdlbmRlci5uYW1lX3NwYW5pc2hcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5nZW5kZXJzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RHZW5kZXIodGhpcy5EYXRhU3R1ZGVudC5nZW5kZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRpb25Vc2VyUm9sZSgpe1xuICAgIGNvbnN0IHVzZXJSb2xlID0gdGhpcy5iYXNlU2VydmljZS5nZXRVc2VyUm9sZSgpO1xuICAgIGlmICh1c2VyUm9sZSA9PSA0MCB8fCB1c2VyUm9sZSA9PSA0MSB8fCB1c2VyUm9sZSA9PSA0Mikge1xuICAgICAgdGhpcy51c2VyUm9sZUNvbW1lcmNpYWwgPSB0cnVlO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy51c2VyUm9sZUNvbW1lcmNpYWwgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgY2xvc2VUYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnZpc2libGVNb2RhbCA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0NvbmZpcm1EaWFsb2cgPSBmYWxzZTtcbiAgICB0aGlzLmNvbmZpcm1Gb3JtLnJlc2V0KCk7XG4gICAgdGhpcy51cGRhdGVVc2VyRm9ybS5yZXNldCgpO1xuICAgIHRoaXMuaWRUeXBlcyA9IFtdO1xuICAgIHRoaXMuY291bnRyaWVzID0gW107XG4gICAgdGhpcy5nZW5kZXJzID0gW107XG4gICAgdGhpcy51cGRhdGVJZENhcmRWYWxpZGF0b3JzKG51bGwpO1xuICAgIHRoaXMuY2xvc2VNb2RhbElTLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFja0lkVHlwZUNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaWRUeXBlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmlkVHlwZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyBcbiAgICB9XG4gICAgdGhpcy5pZFR5cGVTdWJzY3JpcHRpb24gPSB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldCgnaWRfY2FyZF90eXBlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy51cGRhdGVJZENhcmRWYWxpZGF0b3JzKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSWRDYXJkVmFsaWRhdG9ycyhpZENhcmRUeXBlOiBhbnkpOiB2b2lkIHtcblxuICAgIGNvbnN0IGlkQ2FyZENvbnRyb2wgPSB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldCgnaWRfY2FyZCcpO1xuICAgIGlmICghaWRDYXJkQ29udHJvbCkgcmV0dXJuO1xuXG4gICAgaWYgKGlkQ2FyZFR5cGUgPT0gNyB8fCBpZENhcmRUeXBlID09IDUpIHtcbiAgICAgIGlkQ2FyZENvbnRyb2wuc2V0VmFsaWRhdG9ycyhbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDUpLFxuICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgyMCksXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybigvXlthLXpBLVowLTldKiQvKSAvLyBMZXRyYXMgeSBuw7ptZXJvc1xuICAgICAgXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkQ2FyZENvbnRyb2wuc2V0VmFsaWRhdG9ycyhbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDUpLFxuICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgyMCksXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybigvXlswLTldKiQvKSAvLyBTb2xvIG7Dum1lcm9zXG4gICAgICBdKTtcbiAgICB9XG4gICAgaWRDYXJkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gIH1cblxuICBzZWxlY3RSb2wocm9sZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHJvbGUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KCdyb2xlJyk/LnNldFZhbHVlKHRoaXMudHJhbnNmb3JtUm9sZShyb2xlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KCdyb2xlJyk/LnNldFZhbHVlKCcnKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RJbmRpY2F0aXZlKGZpZWxkOiBzdHJpbmcsIGluZGljYXRpdmU6IGFueSk6IHZvaWQge1xuICAgIGlmIChpbmRpY2F0aXZlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldChmaWVsZCk/LnNldFZhbHVlKGluZGljYXRpdmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldChmaWVsZCk/LnNldFZhbHVlKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdElkVHlwZShmaWVsZDogc3RyaW5nLCBpZFR5cGU6IGFueSk6IHZvaWQge1xuICAgIGlmIChpZFR5cGUgIT09IG51bGwpIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KGZpZWxkKT8uc2V0VmFsdWUoaWRUeXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5nZXQoZmllbGQpPy5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RHZW5kZXIoZ2VuZGVyOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoZ2VuZGVyICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldCgnZ2VuZGVyJyk/LnNldFZhbHVlKGdlbmRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0KCdnZW5kZXInKT8uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Q291bnRyeShjb3VudHJ5OiBhbnkpIHtcbiAgICBjb25zdCBjb3VudHJ5TnVtYmVyID0gdHlwZW9mIGNvdW50cnkgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQoY291bnRyeSwgMTApIDogY291bnRyeTtcbiAgICBpZiAoY291bnRyeSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydjb3VudHJ5J10uc2V0VmFsdWUoY291bnRyeU51bWJlcik7XG4gICAgICBpZiAodGhpcy5wYXJhbWV0ZXJzQWxsICYmIHRoaXMucGFyYW1ldGVyc0FsbD8uU3RhdGUpIHtcbiAgICAgICAgdGhpcy5zdGF0ZXMgPSB0aGlzLnBhcmFtZXRlcnNBbGwuU3RhdGUuZmlsdGVyKChjb3Vyc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlID0gdHlwZW9mIGNvdXJzZS5jb3VudHJ5ID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBwYXJzZUludChjb3Vyc2UuY291bnRyeSwgMTApXG4gICAgICAgICAgICA6IGNvdXJzZS5jb3VudHJ5O1xuICAgICAgICAgIHJldHVybiBzdGF0ZSA9PT0gY291bnRyeU51bWJlcjtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXRlcyA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5jb250cm9sc1snc3RhdGUnXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2NpdHknXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMuY2l0aWVzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2NvdW50cnknXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMuc3RhdGVzID0gW107XG4gICAgICB0aGlzLmNpdGllcyA9IFtdO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFN0YXRlKHN0YXRlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZU51bWJlciA9IHR5cGVvZiBzdGF0ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludChzdGF0ZSwgMTApIDogc3RhdGU7XG4gICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydzdGF0ZSddLnNldFZhbHVlKHN0YXRlTnVtYmVyKTtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2NpdHknXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMuY2l0aWVzID0gW107XG4gICAgICB0aGlzLmdldFN0YXRlKHN0YXRlTnVtYmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5jb250cm9sc1snc3RhdGUnXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2NpdHknXS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIHRoaXMuY2l0aWVzID0gW107XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdGUoc3RhdGU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZ2V0Q2l0eShzdGF0ZSk7XG4gIH1cblxuICBnZXRDaXR5KHN0YXRlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZU51bWJlciA9IHR5cGVvZiBzdGF0ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludChzdGF0ZSwgMTApIDogc3RhdGU7XG4gICAgaWYgKHRoaXMucGFyYW1ldGVyc0FsbD8uY2l0eSkge1xuICAgICAgdGhpcy5jaXRpZXMgPSB0aGlzLnBhcmFtZXRlcnNBbGwuY2l0eS5maWx0ZXIoKGNvdXJzZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGNpdHlTdGF0ZSA9IHR5cGVvZiBjb3Vyc2Uuc3RhdGUgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQoY291cnNlLnN0YXRlLCAxMCkgOiBjb3Vyc2Uuc3RhdGU7XG4gICAgICAgIHJldHVybiBjaXR5U3RhdGUgPT09IHN0YXRlTnVtYmVyO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2l0aWVzID0gW107XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Q2l0eShjaXR5OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBjaXR5TnVtYmVyID0gdHlwZW9mIGNpdHkgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQoY2l0eSwgMTApIDogY2l0eTtcbiAgICBpZiAoY2l0eSAhPT0gbnVsbCkge1xuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5jb250cm9sc1snY2l0eSddLnNldFZhbHVlKGNpdHlOdW1iZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydjaXR5J10uc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0UmVhc29uKHJlYXNvbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jb25maXJtRm9ybS5jb250cm9sc1sncmVhc29uJ10uc2V0VmFsdWUocmVhc29uID8gcmVhc29uIDogbnVsbCk7XG4gIH1cbiAgXG4gIC8vIHVwZGF0ZVVzZXIoKTogdm9pZCB7XG4gIC8vICAgaWYgKFxuICAvLyAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5pbnZhbGlkIHx8XG4gIC8vICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmhhc0Vycm9yKCdtaXNtYXRjaCcpIHx8XG4gIC8vICAgICAhdGhpcy5oYXNGb3JtQ2hhbmdlZCgpXG4gIC8vICAgKSB7XG4gIC8vICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgLy8gICAgIGNvbnNvbGUubG9nKCdjcmVhdGVVc2VyIC0gVmFsaWRhdGlvbiBmYWlsZWQ6Jywge1xuICAvLyAgICAgICBpbnZhbGlkOiB0aGlzLnVwZGF0ZVVzZXJGb3JtLmludmFsaWQsXG4gIC8vICAgICAgIG1pc21hdGNoOiB0aGlzLnVwZGF0ZVVzZXJGb3JtLmhhc0Vycm9yKCdtaXNtYXRjaCcpLFxuICAvLyAgICAgICBoYXNDaGFuZ2VzOiB0aGlzLmhhc0Zvcm1DaGFuZ2VkKClcbiAgLy8gICAgIH0pO1xuICAvLyAgICAgcmV0dXJuO1xuICAvLyAgIH1cblxuICAvLyAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcbiAgLy8gICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldFJhd1ZhbHVlKCk7XG5cbiAgLy8gICBjb25zdCByZXF1ZXN0OmFueSA9IHtcbiAgLy8gICAgIHRva2VuOiB0aGlzLmJhc2VTZXJ2aWNlLmdldFVzZXJUb2tlbigpLFxuICAvLyAgICAgdXNlcjoge1xuICAvLyAgICAgICBjb2RlOiB0aGlzLkRhdGFTdHVkZW50LmNvZGUsXG4gIC8vICAgICAgIG5hbWU6IGZvcm1WYWx1ZS5uYW1lLFxuICAvLyAgICAgICBsYXN0X25hbWU6IGZvcm1WYWx1ZS5sYXN0X25hbWUsXG4gIC8vICAgICAgIGlkX2NhcmRfdHlwZTogZm9ybVZhbHVlLmlkX2NhcmRfdHlwZSxcbiAgLy8gICAgICAgaWRfY2FyZDogZm9ybVZhbHVlLmlkX2NhcmQsXG4gIC8vICAgICAgIHBob25lX2luZGljYXRpdmU6IGZvcm1WYWx1ZS5waG9uZV9pbmRpY2F0aXZlLFxuICAvLyAgICAgICBwaG9uZV9udW1iZXI6IGZvcm1WYWx1ZS5waG9uZV9udW1iZXIsXG4gIC8vICAgICAgIGVtYWlsOiBmb3JtVmFsdWUuZW1haWwsXG4gIC8vICAgICAgIGdlbmRlcjogZm9ybVZhbHVlLmdlbmRlcixcbiAgLy8gICAgICAgY2l0eTogZm9ybVZhbHVlLmNpdHksXG4gIC8vICAgICAgIHNlcnZpY2VfaG91cjogZm9ybVZhbHVlLnNlcnZpY2VfaG91cixcbiAgLy8gICAgICAgcm9sZTogdGhpcy5EYXRhU3R1ZGVudC5yb2xlLFxuICAvLyAgICAgICBzdGF0dXM6IGZvcm1WYWx1ZS5zdGF0dXMsXG4gIC8vICAgICAgIC4uLih0aGlzLnNob3dFbWFpbElwdCA/IHsgZW1haWxfaXB0OiBmb3JtVmFsdWUuZW1haWxfaXB0IH0gOiB7fSksXG4gIC8vICAgICAgIC4uLihmb3JtVmFsdWUuY2hhbmdlUGFzc3dvcmQgJiYgZm9ybVZhbHVlLnBhc3N3b3JkID8geyBwYXNzd29yZDogZm9ybVZhbHVlLnBhc3N3b3JkIH0gOiB7fSlcbiAgLy8gICAgIH0sXG4gIC8vICAgICBwYXJlbnQ6IHRoaXMuc2hvd1BhcmVudFNlY3Rpb25cbiAgLy8gICAgICAgPyB7XG4gIC8vICAgICAgICAgICBjb2RlOiB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8uY29kZSB8fCBudWxsLFxuICAvLyAgICAgICAgICAgbmFtZTogZm9ybVZhbHVlLnBhcmVudF9uYW1lIHx8IG51bGwsXG4gIC8vICAgICAgICAgICBsYXN0X25hbWU6IGZvcm1WYWx1ZS5wYXJlbnRfbGFzdF9uYW1lIHx8IG51bGwsXG4gIC8vICAgICAgICAgICBpZF9jYXJkX3R5cGU6IGZvcm1WYWx1ZS5wYXJlbnRfaWRfY2FyZF90eXBlIHx8IG51bGwsXG4gIC8vICAgICAgICAgICBpZF9jYXJkOiBmb3JtVmFsdWUucGFyZW50X2lkX2NhcmQgfHwgbnVsbCxcbiAgLy8gICAgICAgICAgIHBob25lX2luZGljYXRpdmU6IGZvcm1WYWx1ZS5wYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZSB8fCBudWxsLFxuICAvLyAgICAgICAgICAgcGhvbmVfbnVtYmVyOiBmb3JtVmFsdWUucGFyZW50X3Bob25lX251bWJlciB8fCBudWxsLFxuICAvLyAgICAgICAgICAgb2NjdXBhdGlvbjogZm9ybVZhbHVlLnBhcmVudF9vY2N1cGF0aW9uIHx8IG51bGwsXG4gIC8vICAgICAgICAgICBvZmZpY2VfYWRycmVzczogZm9ybVZhbHVlLnBhcmVudF9vZmZpY2VfYWRycmVzcyB8fCBudWxsLFxuICAvLyAgICAgICAgICAgZW1haWw6IGZvcm1WYWx1ZS5wYXJlbnRfZW1haWwgfHwgbnVsbFxuICAvLyAgICAgICAgIH1cbiAgLy8gICAgICAgOiBudWxsXG4gIC8vICAgfTtcbiAgLy8gICBjb25zb2xlLmxvZyhyZXF1ZXN0KTtcbiAgLy8gICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZVVzZXJBbmRQYXJlbnRCeUNvZGUocmVxdWVzdCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAvLyAgICAgLy8gdGhpcy5jb3Vyc2VUeXBlID0gcmVzcG9uc2UuZGF0YTtcbiAgLy8gICAgIGlmIChyZXNwb25zZS5tZXNzYWdlLmNvZGUgPT09IDEpIHtcbiAgLy8gICAgICAgU3dhbC5maXJlKHtcbiAgLy8gICAgICAgICBwb3NpdGlvbjogJ2NlbnRlcicsXG4gIC8vICAgICAgICAgaWNvbjogJ3N1Y2Nlc3MnLFxuICAvLyAgICAgICAgIHRpdGxlOiAndXN1YXJpbyBhY3R1YWxpemFkbyBzYXRpc2ZhY3RvcmlhbWVudGUnLFxuICAvLyAgICAgICAgIHNob3dDb25maXJtQnV0dG9uOiBmYWxzZSxcbiAgLy8gICAgICAgICB0aW1lcjogMjUwMCxcbiAgLy8gICAgICAgfSk7XG4gIC8vICAgICAgIC8vIHRoaXMudXNlclVwZGF0ZWQgPSB0cnVlXG4gIC8vICAgICAgIHRoaXMudXNlclVwZGF0ZWRFdmVudC5lbWl0KCk7XG4gIC8vICAgICAgIHRoaXMuY2xvc2VUYWJsZSgpO1xuICAvLyAgICAgfWVsc2V7XG4gIC8vICAgICAgIFN3YWwuZmlyZSh7XG4gIC8vICAgICAgICAgcG9zaXRpb246ICdjZW50ZXInLFxuICAvLyAgICAgICAgIGljb246ICdlcnJvcicsXG4gIC8vICAgICAgICAgdGl0bGU6ICdIYSBvY3VycmlkbyB1biBlcnJvciBpbmVzcGVyYWRvJyxcbiAgLy8gICAgICAgICB0ZXh0OiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsXG4gIC8vICAgICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAvLyAgICAgICAgIHRpbWVyOiAyNTAwLFxuICAvLyAgICAgICB9KTtcbiAgLy8gICAgICAgLy8gdGhpcy51c2VyVXBkYXRlZCA9IGZhbHNlXG4gIC8vICAgICB9XG4gIC8vICAgfSk7XG5cbiAgLy8gICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAvLyB9XG5cbiAgaGFzRm9ybUNoYW5nZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxGb3JtVmFsdWUgfHwgIXRoaXMuRGF0YVN0dWRlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldFJhd1ZhbHVlKCk7XG5cbiAgICBpZiAoY3VycmVudFZhbHVlLmNoYW5nZVBhc3N3b3JkKSB7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IGN1cnJlbnRWYWx1ZS5wYXNzd29yZDtcbiAgICAgIGNvbnN0IHJlUGFzc3dvcmQgPSBjdXJyZW50VmFsdWUucmVfcGFzc3dvcmQ7XG4gICAgICBjb25zdCBwYXNzd29yZENvbnRyb2wgPSB0aGlzLnVwZGF0ZVVzZXJGb3JtLmdldCgncGFzc3dvcmQnKTtcbiAgICAgIGNvbnN0IHJlUGFzc3dvcmRDb250cm9sID0gdGhpcy51cGRhdGVVc2VyRm9ybS5nZXQoJ3JlX3Bhc3N3b3JkJyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgcGFzc3dvcmRDb250cm9sPy52YWxpZCAmJlxuICAgICAgICByZVBhc3N3b3JkQ29udHJvbD8udmFsaWQgJiZcbiAgICAgICAgcGFzc3dvcmQgPT09IHJlUGFzc3dvcmQgJiZcbiAgICAgICAgcGFzc3dvcmQ/LnRyaW0oKSAhPT0gJydcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZHNUb0NvbXBhcmU6IChrZXlvZiBJRm9ybURhdGFScSlbXSA9IFtcbiAgICAgICduYW1lJyxcbiAgICAgICdsYXN0X25hbWUnLFxuICAgICAgJ2VtYWlsJyxcbiAgICAgICdnZW5kZXInLFxuICAgICAgJ2lkX2NhcmRfdHlwZScsXG4gICAgICAnaWRfY2FyZCcsXG4gICAgICAncGhvbmVfaW5kaWNhdGl2ZScsXG4gICAgICAncGhvbmVfbnVtYmVyJyxcbiAgICAgICdjb3VudHJ5JyxcbiAgICAgICdzdGF0ZScsXG4gICAgICAnY2l0eScsXG4gICAgICAncm9sZScsXG4gICAgICAnc2VydmljZV9ob3VyJyxcbiAgICAgICdzdGF0dXMnXG4gICAgXTtcblxuICAgIGlmICh0aGlzLnNob3dFbWFpbElwdCkge1xuICAgICAgZmllbGRzVG9Db21wYXJlLnB1c2goJ2VtYWlsX2lwdCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dQYXJlbnRTZWN0aW9uKSB7XG4gICAgICBmaWVsZHNUb0NvbXBhcmUucHVzaChcbiAgICAgICAgJ3BhcmVudF9uYW1lJyxcbiAgICAgICAgJ3BhcmVudF9sYXN0X25hbWUnLFxuICAgICAgICAncGFyZW50X2lkX2NhcmRfdHlwZScsXG4gICAgICAgICdwYXJlbnRfaWRfY2FyZCcsXG4gICAgICAgICdwYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZScsXG4gICAgICAgICdwYXJlbnRfcGhvbmVfbnVtYmVyJyxcbiAgICAgICAgJ3BhcmVudF9vY2N1cGF0aW9uJyxcbiAgICAgICAgJ3BhcmVudF9vZmZpY2VfYWRycmVzcycsXG4gICAgICAgICdwYXJlbnRfZW1haWwnXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzVG9Db21wYXJlKSB7XG4gICAgICBsZXQgb3JpZ2luYWxWYWx1ZTogYW55O1xuICAgICAgbGV0IGN1cnJlbnRGaWVsZFZhbHVlOiBhbnkgPSBjdXJyZW50VmFsdWVbZmllbGRdO1xuXG4gICAgICBzd2l0Y2ggKGZpZWxkKSB7XG4gICAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50Lm5hbWUgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xhc3RfbmFtZSc6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQubGFzdF9uYW1lIHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbWFpbCc6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQuZW1haWwgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2VtYWlsX2lwdCc6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQuZW1haWxfaXB0IHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdnZW5kZXInOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmdlbmRlciB8fCBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdpZF9jYXJkX3R5cGUnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmlkX2NhcmRfdHlwZSB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaWRfY2FyZCc6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQuaWRfY2FyZCB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGhvbmVfaW5kaWNhdGl2ZSc6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQucGhvbmVfaW5kaWNhdGl2ZSB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGhvbmVfbnVtYmVyJzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC5waG9uZV9udW1iZXIgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2NvdW50cnknOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmNpdHk/LmNvdW50cnkgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N0YXRlJzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC5jaXR5Py5zdGF0ZSB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY2l0eSc6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQuY2l0eT8uY29kZSB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncm9sZSc6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMudHJhbnNmb3JtUm9sZSh0aGlzLkRhdGFTdHVkZW50LnJvbGUpIHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzZXJ2aWNlX2hvdXInOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LnNlcnZpY2VfaG91cjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc3RhdHVzJzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC51c2VyX3N0YXR1cyB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGFyZW50X25hbWUnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8ubmFtZSB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGFyZW50X2xhc3RfbmFtZSc6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5sYXN0X25hbWUgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3BhcmVudF9pZF9jYXJkX3R5cGUnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8uaWRfY2FyZF90eXBlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwYXJlbnRfaWRfY2FyZCc6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5pZF9jYXJkIHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZSc6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5waG9uZV9pbmRpY2F0aXZlIHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwYXJlbnRfcGhvbmVfbnVtYmVyJzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC5jb2RzPy5wYXJlbnQ/LnBob25lX251bWJlciB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGFyZW50X29jY3VwYXRpb24nOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8ub2NjdXBhdGlvbiB8fCAnJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncGFyZW50X29mZmljZV9hZHJyZXNzJzpcbiAgICAgICAgICBvcmlnaW5hbFZhbHVlID0gdGhpcy5EYXRhU3R1ZGVudC5jb2RzPy5wYXJlbnQ/Lm9mZmljZV9hZHJyZXNzIHx8ICcnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdwYXJlbnRfZW1haWwnOlxuICAgICAgICAgIG9yaWdpbmFsVmFsdWUgPSB0aGlzLkRhdGFTdHVkZW50LmNvZHM/LnBhcmVudD8uZW1haWwgfHwgJyc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgb3JpZ2luYWxWYWx1ZSA9ICcnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkQ3VycmVudCA9IGN1cnJlbnRGaWVsZFZhbHVlICE9IG51bGwgPyBTdHJpbmcoY3VycmVudEZpZWxkVmFsdWUpLnRyaW0oKSA6ICcnO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZE9yaWdpbmFsID0gb3JpZ2luYWxWYWx1ZSAhPSBudWxsID8gU3RyaW5nKG9yaWdpbmFsVmFsdWUpLnRyaW0oKSA6ICcnO1xuXG4gICAgICBpZiAobm9ybWFsaXplZEN1cnJlbnQgIT09IG5vcm1hbGl6ZWRPcmlnaW5hbCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAgIHNob3dDb25maXJtU2VjdGlvbkhhbmRsZXIoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy51cGRhdGVVc2VyRm9ybS5pbnZhbGlkIHx8XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmhhc0Vycm9yKCdtaXNtYXRjaCcpIHx8XG4gICAgICAhdGhpcy5oYXNGb3JtQ2hhbmdlZCgpXG4gICAgKSB7XG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIGNvbnNvbGUubG9nKCdWYWxpZGF0aW9uIGZhaWxlZDonLCB7XG4gICAgICAgIGludmFsaWQ6IHRoaXMudXBkYXRlVXNlckZvcm0uaW52YWxpZCxcbiAgICAgICAgbWlzbWF0Y2g6IHRoaXMudXBkYXRlVXNlckZvcm0uaGFzRXJyb3IoJ21pc21hdGNoJyksXG4gICAgICAgIGhhc0NoYW5nZXM6IHRoaXMuaGFzRm9ybUNoYW5nZWQoKVxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2hvd0NvbmZpcm1TZWN0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gICAgc2VuZFVwZGF0ZVJlcXVlc3QoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlybUZvcm0uaW52YWxpZCkge1xuICAgICAgdGhpcy5jb25maXJtRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMudXBkYXRlVXNlckZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBjb25maXJtVmFsdWUgPSB0aGlzLmNvbmZpcm1Gb3JtLnZhbHVlO1xuXG4gICAgY29uc3QgcmVxdWVzdDogYW55ID0ge1xuICAgICAgdG9rZW46IHRoaXMuYmFzZVNlcnZpY2UuZ2V0VXNlclRva2VuKCksXG4gICAgICB1c2VyOiB7XG4gICAgICAgIGNvZGU6IHRoaXMuRGF0YVN0dWRlbnQuY29kZSxcbiAgICAgICAgbmFtZTogZm9ybVZhbHVlLm5hbWUsXG4gICAgICAgIGxhc3RfbmFtZTogZm9ybVZhbHVlLmxhc3RfbmFtZSxcbiAgICAgICAgaWRfY2FyZF90eXBlOiBmb3JtVmFsdWUuaWRfY2FyZF90eXBlLFxuICAgICAgICBpZF9jYXJkOiBmb3JtVmFsdWUuaWRfY2FyZCxcbiAgICAgICAgcGhvbmVfaW5kaWNhdGl2ZTogZm9ybVZhbHVlLnBob25lX2luZGljYXRpdmUsXG4gICAgICAgIHBob25lX251bWJlcjogZm9ybVZhbHVlLnBob25lX251bWJlcixcbiAgICAgICAgZW1haWw6IGZvcm1WYWx1ZS5lbWFpbCxcbiAgICAgICAgZ2VuZGVyOiBmb3JtVmFsdWUuZ2VuZGVyLFxuICAgICAgICBjaXR5OiBmb3JtVmFsdWUuY2l0eSxcbiAgICAgICAgc2VydmljZV9ob3VyOiBmb3JtVmFsdWUuc2VydmljZV9ob3VyLFxuICAgICAgICByb2xlOiB0aGlzLkRhdGFTdHVkZW50LnJvbGUsXG4gICAgICAgIHN0YXR1czogZm9ybVZhbHVlLnN0YXR1cyxcbiAgICAgICAgLi4uKHRoaXMuc2hvd0VtYWlsSXB0ID8geyBlbWFpbF9pcHQ6IGZvcm1WYWx1ZS5lbWFpbF9pcHQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGZvcm1WYWx1ZS5jaGFuZ2VQYXNzd29yZCAmJiBmb3JtVmFsdWUucGFzc3dvcmQgPyB7IHBhc3N3b3JkOiBmb3JtVmFsdWUucGFzc3dvcmQgfSA6IHt9KVxuICAgICAgfSxcbiAgICAgIHBhcmVudDogdGhpcy5zaG93UGFyZW50U2VjdGlvblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGNvZGU6IHRoaXMuRGF0YVN0dWRlbnQuY29kcz8ucGFyZW50Py5jb2RlIHx8IG51bGwsXG4gICAgICAgICAgICBuYW1lOiBmb3JtVmFsdWUucGFyZW50X25hbWUgfHwgbnVsbCxcbiAgICAgICAgICAgIGxhc3RfbmFtZTogZm9ybVZhbHVlLnBhcmVudF9sYXN0X25hbWUgfHwgbnVsbCxcbiAgICAgICAgICAgIGlkX2NhcmRfdHlwZTogZm9ybVZhbHVlLnBhcmVudF9pZF9jYXJkX3R5cGUgfHwgbnVsbCxcbiAgICAgICAgICAgIGlkX2NhcmQ6IGZvcm1WYWx1ZS5wYXJlbnRfaWRfY2FyZCB8fCBudWxsLFxuICAgICAgICAgICAgcGhvbmVfaW5kaWNhdGl2ZTogZm9ybVZhbHVlLnBhcmVudF9waG9uZV9pbmRpY2F0aXZlIHx8IG51bGwsXG4gICAgICAgICAgICBwaG9uZV9udW1iZXI6IGZvcm1WYWx1ZS5wYXJlbnRfcGhvbmVfbnVtYmVyIHx8IG51bGwsXG4gICAgICAgICAgICBvY2N1cGF0aW9uOiBmb3JtVmFsdWUucGFyZW50X29jY3VwYXRpb24gfHwgbnVsbCxcbiAgICAgICAgICAgIG9mZmljZV9hZHJyZXNzOiBmb3JtVmFsdWUucGFyZW50X29mZmljZV9hZHJyZXNzIHx8IG51bGwsXG4gICAgICAgICAgICBlbWFpbDogZm9ybVZhbHVlLnBhcmVudF9lbWFpbCB8fCBudWxsXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICByZWFzb246IGNvbmZpcm1WYWx1ZS5yZWFzb24sXG4gICAgICBvYnNlcnZhdGlvbjogY29uZmlybVZhbHVlLm9ic2VydmF0aW9uLFxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZyhyZXF1ZXN0KTtcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLnVwZGF0ZVVzZXJBbmRQYXJlbnRCeUNvZGUocmVxdWVzdCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UubWVzc2FnZS5jb2RlID09PSAxKSB7XG4gICAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGljb246ICdzdWNjZXNzJyxcbiAgICAgICAgICAgIHRpdGxlOiAnVXN1YXJpbyBhY3R1YWxpemFkbyBzYXRpc2ZhY3RvcmlhbWVudGUnLFxuICAgICAgICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAgICAgICAgICAgdGltZXI6IDI1MDAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy51c2VyVXBkYXRlZEV2ZW50LmVtaXQoKTtcbiAgICAgICAgICB0aGlzLmNsb3NlVGFibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgcG9zaXRpb246ICdjZW50ZXInLFxuICAgICAgICAgICAgaWNvbjogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnSGEgb2N1cnJpZG8gdW4gZXJyb3IgaW5lc3BlcmFkbycsXG4gICAgICAgICAgICB0ZXh0OiByZXNwb25zZS5kYXRhLm1lc3NhZ2UsXG4gICAgICAgICAgICBzaG93Q29uZmlybUJ1dHRvbjogZmFsc2UsXG4gICAgICAgICAgICB0aW1lcjogMjUwMCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHVwZGF0aW5nIHVzZXI6JywgZXJyKTtcbiAgICAgICAgU3dhbC5maXJlKHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2NlbnRlcicsXG4gICAgICAgICAgaWNvbjogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0Vycm9yIGFsIGFjdHVhbGl6YXIgZWwgdXN1YXJpbycsXG4gICAgICAgICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxuICAgICAgICAgIHRpbWVyOiAyNTAwLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNob3dDb25maXJtRGlhbG9ncygpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnVwZGF0ZVVzZXJGb3JtLmludmFsaWQgfHxcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0uaGFzRXJyb3IoJ21pc21hdGNoJykgfHxcbiAgICAgICF0aGlzLmhhc0Zvcm1DaGFuZ2VkKClcbiAgICApIHtcbiAgICAgIHRoaXMudXBkYXRlVXNlckZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgY29uc29sZS5sb2coJ1ZhbGlkYXRpb24gZmFpbGVkOicsIHtcbiAgICAgICAgaW52YWxpZDogdGhpcy51cGRhdGVVc2VyRm9ybS5pbnZhbGlkLFxuICAgICAgICBtaXNtYXRjaDogdGhpcy51cGRhdGVVc2VyRm9ybS5oYXNFcnJvcignbWlzbWF0Y2gnKSxcbiAgICAgICAgaGFzQ2hhbmdlczogdGhpcy5oYXNGb3JtQ2hhbmdlZCgpXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmZpcm1Gb3JtLnJlc2V0KCk7IFxuICAgIHRoaXMuc2hvd0NvbmZpcm1EaWFsb2cgPSB0cnVlOyBcbiAgfVxuXG4gIGFjY2VwdENvbmZpcm1EaWFsb2coKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlybUZvcm0uaW52YWxpZCkge1xuICAgICAgdGhpcy5jb25maXJtRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2VuZFVwZGF0ZVJlcXVlc3QoKTtcbiAgfVxuXG4gIHJlamVjdENvbmZpcm1EaWFsb2coKTogdm9pZCB7XG4gICAgdGhpcy5jb25maXJtRm9ybS5yZXNldCgpO1xuICB9XG5cbiAgY2xvc2VDb25maXJtRGlhbG9nKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0NvbmZpcm1EaWFsb2cgPSBmYWxzZTtcbiAgICB0aGlzLmNvbmZpcm1Gb3JtLnJlc2V0KCk7XG4gICAgdGhpcy5jb25maXJtRm9ybS5nZXQoJ3JlYXNvbicpPy5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5jb25maXJtRm9ybS5nZXQoJ29ic2VydmF0aW9uJyk/LnNldFZhbHVlKCcnKTtcbiAgfVxuXG5cbn0iLCI8bWFpbiAqbmdJZj1cInZpc2libGVNb2RhbFwiPlxuICA8ZGl2IGNsYXNzPVwibW9kYWxfY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRlcl9tb2RhbCB5ZWxsb3ctMzAwXCI+XG4gICAgICA8aDE+QWN0dWFsaXphciB1c3VhcmlvPC9oMT5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImNsb3NlVGFibGUoKVwiPng8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZF9jb250YWluZXJcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxmb3JtICpuZ0lmPVwidXBkYXRlVXNlckZvcm1cIiBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cInVwZGF0ZVVzZXJGb3JtXCI+XG4gICAgICAgICAgPCEtLSBVc2VyIEluZm9ybWF0aW9uIFNlY3Rpb24gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgICA8aDI+SW5mb3JtYWNpw7NuIGRlbCB1c3VhcmlvPC9oMj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XG4gICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidOb21icmVzJ1wiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWyduYW1lJ11cIlxuICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWyduYW1lJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJykgPyAnRGViZSBpbmdyZXNhciBlbCBub21icmUnIDpcbiAgICAgICAgICAgICAgICB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snbmFtZSddLmhhc0Vycm9yKCdtaW5sZW5ndGgnKSA/ICdNw61uaW1vIDMgY2FyYWN0ZXJlcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWyduYW1lJ10uaGFzRXJyb3IoJ21heGxlbmd0aCcpID8gJ03DoXhpbW8gMzIgY2FyYWN0ZXJlcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWyduYW1lJ10uaGFzRXJyb3IoJ3BhdHRlcm4nKSA/ICdTb2xvIGxldHJhcywgZXNwYWNpb3MgeSBndWlvbmVzJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ25hbWUnXS5oYXNFcnJvcignaGFzV2hpdGVzcGFjZScpID8gJ05vIHNlIHBlcm1pdGVuIGVzcGFjaW9zIGFsIGluaWNpbyBvIGZpbmFsJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ25hbWUnXS5oYXNFcnJvcignb25seVdoaXRlc3BhY2UnKSA/ICdObyBzZSBwZXJtaXRlbiBzb2xvIGVzcGFjaW9zJyA6XG4gICAgICAgICAgICAgICAgJ0RlYmUgaW5ncmVzYXIgZWwgbm9tYnJlJ1wiXG4gICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidBcGVsbGlkb3MnXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2xhc3RfbmFtZSddXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRlVGV4dF09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snbGFzdF9uYW1lJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJykgPyAnRGViZSBpbmdyZXNhciBsb3MgYXBlbGxpZG9zJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2xhc3RfbmFtZSddLmhhc0Vycm9yKCdtaW5sZW5ndGgnKSA/ICdNw61uaW1vIDMgY2FyYWN0ZXJlcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydsYXN0X25hbWUnXS5oYXNFcnJvcignbWF4bGVuZ3RoJykgPyAnTcOheGltbyAzMiBjYXJhY3RlcmVzJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2xhc3RfbmFtZSddLmhhc0Vycm9yKCdwYXR0ZXJuJykgPyAnU29sbyBsZXRyYXMsIGVzcGFjaW9zIHkgZ3Vpb25lcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydsYXN0X25hbWUnXS5oYXNFcnJvcignaGFzV2hpdGVzcGFjZScpID8gJ05vIHNlIHBlcm1pdGVuIGVzcGFjaW9zIGFsIGluaWNpbyBvIGZpbmFsJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2xhc3RfbmFtZSddLmhhc0Vycm9yKCdvbmx5V2hpdGVzcGFjZScpID8gJ05vIHNlIHBlcm1pdGVuIHNvbG8gZXNwYWNpb3MnIDpcbiAgICAgICAgICAgICAgICAnRGViZSBpbmdyZXNhciBsb3MgYXBlbGxpZG9zJ1wiXG4gICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ2VtYWlsJ1wiXG4gICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW1haWwnXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2VtYWlsJ11cIlxuICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydlbWFpbCddLmhhc0Vycm9yKCdyZXF1aXJlZCcpID8gJ0RlYmUgaW5ncmVzYXIgdW4gY29ycmVvIHbDoWxpZG8nIDpcbiAgICAgICAgICAgICAgICB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snZW1haWwnXS5oYXNFcnJvcignbWF4bGVuZ3RoJykgPyAnTcOheGltbyAzMDAgY2FyYWN0ZXJlcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydlbWFpbCddLmhhc0Vycm9yKCdwYXR0ZXJuJykgPyAnVGllbmUgcXVlIHNlciB1biBlbWFpbCBjb3JyZWN0bycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydlbWFpbCddLmhhc0Vycm9yKCdoYXNXaGl0ZXNwYWNlJykgPyAnTm8gc2UgcGVybWl0ZW4gZXNwYWNpb3MgYWwgaW5pY2lvIG8gZmluYWwnIDpcbiAgICAgICAgICAgICAgICB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snZW1haWwnXS5oYXNFcnJvcignb25seVdoaXRlc3BhY2UnKSA/ICdObyBzZSBwZXJtaXRlbiBzb2xvIGVzcGFjaW9zJyA6XG4gICAgICAgICAgICAgICAgJ0RlYmUgaW5ncmVzYXIgdW4gY29ycmVvIHbDoWxpZG8nXCJcbiAgICAgICAgICAgID48L2lwdC1pbnB1dD5cbiAgICAgICAgICAgIDxpcHQtaW5wdXRcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RW1haWxJcHRcIlxuICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW1haWwgSVBUJ1wiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydlbWFpbF9pcHQnXVwiXG4gICAgICAgICAgICAgIFt2YWxpZGF0ZVRleHRdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2VtYWlsX2lwdCddLmhhc0Vycm9yKCdyZXF1aXJlZCcpID8gJ0RlYmUgaW5ncmVzYXIgdW4gY29ycmVvIElQVCB2w6FsaWRvJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2VtYWlsX2lwdCddLmhhc0Vycm9yKCdtYXhsZW5ndGgnKSA/ICdNw6F4aW1vIDI1NSBjYXJhY3RlcmVzJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2VtYWlsX2lwdCddLmhhc0Vycm9yKCdwYXR0ZXJuJykgPyAnVGllbmUgcXVlIHNlciB1biBlbWFpbCBjb3JyZWN0bycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydlbWFpbF9pcHQnXS5oYXNFcnJvcignaGFzV2hpdGVzcGFjZScpID8gJ05vIHNlIHBlcm1pdGVuIGVzcGFjaW9zIGFsIGluaWNpbyBvIGZpbmFsJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2VtYWlsX2lwdCddLmhhc0Vycm9yKCdvbmx5V2hpdGVzcGFjZScpID8gJ05vIHNlIHBlcm1pdGVuIHNvbG8gZXNwYWNpb3MnIDpcbiAgICAgICAgICAgICAgICAnRGViZSBpbmdyZXNhciB1biBjb3JyZW8gSVBUIHbDoWxpZG8nXCJcbiAgICAgICAgICAgID48L2lwdC1pbnB1dD5cbiAgICAgICAgICAgIDxpcHQtaW5wdXRcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RW1haWxJcHRcIlxuICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidIb3JhcyBkZSBzZXJ2aWNpbydcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snc2VydmljZV9ob3VyJ11cIlxuICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidEZWJlIGluZ3Jlc2FyIGxhcyBob3JhcyBkZSBzZXJ2aWNpbydcIlxuICAgICAgICAgICAgPjwvaXB0LWlucHV0PlxuICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInUm9sJ1wiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydyb2xlJ11cIlxuICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidSb2wgcmVxdWVyaWRvJ1wiXG4gICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICA8aXB0LXNlbGVjdFxuICAgICAgICAgICAgICBbaW5pdGlhbFZhbHVlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZVwiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydnZW5kZXInXVwiXG4gICAgICAgICAgICAgIFtzZWxlY3RDb2RlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZSA9PT0gbnVsbCA/ICdTZWxlY2Npb25lIGfDqW5lcm8nIDogKHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZSB8IGdlbmRlckRpc3BsYXkpXCJcbiAgICAgICAgICAgICAgW2RhdGFdPVwiZ2VuZGVyc1wiXG4gICAgICAgICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RHZW5kZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtkZWZhdWx0VGV4dF09XCInU2VsZWNjaW9uZSBnw6luZXJvJ1wiXG4gICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgICAgICAgPGlwdC1zZWxlY3RcbiAgICAgICAgICAgICAgW2luaXRpYWxWYWx1ZV09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1sncGhvbmVfaW5kaWNhdGl2ZSddLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3Bob25lX2luZGljYXRpdmUnXVwiXG4gICAgICAgICAgICAgIFtkYXRhXT1cImluZGljYXRpdmVzXCJcbiAgICAgICAgICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdEluZGljYXRpdmUoJ3Bob25lX2luZGljYXRpdmUnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2RlZmF1bHRUZXh0XT1cIidJbmRpY2F0aXZvJ1wiXG4gICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidUZWzDqWZvbm8nXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3Bob25lX251bWJlciddXCJcbiAgICAgICAgICAgICAgW3ZhbGlkYXRlVGV4dF09XCInRGViZSBpbmdyZXNhciB1biBuw7ptZXJvIGRlIHRlbMOpZm9ubyB2w6FsaWRvJ1wiXG4gICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICA8aXB0LXNlbGVjdFxuICAgICAgICAgICAgICBbaW5pdGlhbFZhbHVlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkX3R5cGUnXS52YWx1ZVwiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkX3R5cGUnXVwiXG4gICAgICAgICAgICAgIFtzZWxlY3RDb2RlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkX3R5cGUnXS52YWx1ZSA9PT0gbnVsbCA/ICdUaXBvIGRlIGRvY3VtZW50bycgOiB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snaWRfY2FyZF90eXBlJ10udmFsdWVcIlxuICAgICAgICAgICAgICBbaXNSZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2RhdGFdPVwiaWRUeXBlc1wiXG4gICAgICAgICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RJZFR5cGUoJ2lkX2NhcmRfdHlwZScsICRldmVudClcIlxuICAgICAgICAgICAgICBbZGVmYXVsdFRleHRdPVwiJ1RpcG8gZGUgZG9jdW1lbnRvJ1wiXG4gICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInRG9jdW1lbnRvJ1wiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkJ11cIlxuICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJykgPyAnRGViZSBpbmdyZXNhciBlbCBuw7ptZXJvIGRlIGRvY3VtZW50bycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkJ10uaGFzRXJyb3IoJ21pbmxlbmd0aCcpID8gJ03DrW5pbW8gNSBjYXJhY3RlcmVzJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2lkX2NhcmQnXS5oYXNFcnJvcignbWF4bGVuZ3RoJykgPyAnTcOheGltbyAyMCBjYXJhY3RlcmVzJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2lkX2NhcmQnXS5oYXNFcnJvcigncGF0dGVybicpID8gKHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydpZF9jYXJkX3R5cGUnXS52YWx1ZSA9PT0gNyB8fCB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snaWRfY2FyZF90eXBlJ10udmFsdWUgPT09IDUgPyAnU29sbyBsZXRyYXMgeSBuw7ptZXJvcyBwZXJtaXRpZG9zJyA6ICdTb2xvIG7Dum1lcm9zIHBlcm1pdGlkb3MnKSA6XG4gICAgICAgICAgICAgICAgJ0RlYmUgaW5ncmVzYXIgZWwgbsO6bWVybyBkZSBkb2N1bWVudG8nXCJcbiAgICAgICAgICAgID48L2lwdC1pbnB1dD5cbiAgICAgICAgICAgICAgPGlwdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBbaW5pdGlhbFZhbHVlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydjb3VudHJ5J10udmFsdWVcIlxuICAgICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydjb3VudHJ5J11cIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RDb2RlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydjb3VudHJ5J10udmFsdWUgPT09IG51bGwgPyAnUGHDrXMgZGUgcmVzaWRlbmNpYScgOiB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snY291bnRyeSddLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAoZXZlbnRTZWxlY3QpPVwic2VsZWN0Q291bnRyeSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJjb3VudHJpZXNcIlxuICAgICAgICAgICAgICAgIFtkZWZhdWx0VGV4dF09XCInUGHDrXMgZGUgcmVzaWRlbmNpYSdcIlxuICAgICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgICAgICAgPGlwdC1zZWxlY3RcbiAgICAgICAgICAgICAgW2luaXRpYWxWYWx1ZV09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snc3RhdGUnXS52YWx1ZVwiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydzdGF0ZSddXCJcbiAgICAgICAgICAgICAgW3NlbGVjdENvZGVdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3N0YXRlJ10udmFsdWUgPT09IG51bGwgPyAnRGVwYXJ0YW1lbnRvIG8gZXN0YWRvJyA6IHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydzdGF0ZSddLnZhbHVlXCJcbiAgICAgICAgICAgICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RTdGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2RhdGFdPVwic3RhdGVzXCJcbiAgICAgICAgICAgICAgW2RlZmF1bHRUZXh0XT1cIidEZXBhcnRhbWVudG8gbyBlc3RhZG8nXCJcbiAgICAgICAgICAgID48L2lwdC1zZWxlY3Q+XG4gICAgICAgICAgICA8aXB0LXNlbGVjdFxuICAgICAgICAgICAgICBbaW5pdGlhbFZhbHVlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydjaXR5J10udmFsdWVcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snY2l0eSddXCJcbiAgICAgICAgICAgICAgW3NlbGVjdENvZGVdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ2NpdHknXS52YWx1ZSA9PT0gbnVsbCA/ICdDaXVkYWQgZGUgcmVzaWRlbmNpYScgOiB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snY2l0eSddLnZhbHVlXCJcbiAgICAgICAgICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdENpdHkoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtkYXRhXT1cImNpdGllc1wiXG4gICAgICAgICAgICAgIFtkZWZhdWx0VGV4dF09XCInQ2l1ZGFkIGRlIHJlc2lkZW5jaWEnXCJcbiAgICAgICAgICAgID48L2lwdC1zZWxlY3Q+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1zdGF0dXNcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGFuLXN0YXR1c1wiPkVzdGFkbzwvc3Bhbj5cbiAgICAgICAgICAgICAgPHAtc2VsZWN0QnV0dG9uIFxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImp1c3RpZnlPcHRpb25zXCIgXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RhdHVzXCIgXG4gICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCIgXG4gICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJjb2RlXCI+XG4gICAgICAgICAgICAgIDwvcC1zZWxlY3RCdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhdXNlclJvbGVDb21tZXJjaWFsXCIgY2xhc3M9XCJmaWVsZFwiPlxuICAgICAgICAgICAgICA8cC1jaGVja2JveFxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNoYW5nZVBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICBsYWJlbD1cIkNhbWJpbyBkZSBjb250cmFzZcOxYVwiXG4gICAgICAgICAgICAgICAgW2JpbmFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPjwvcC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWRcIiAqbmdJZj1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydjaGFuZ2VQYXNzd29yZCddLnZhbHVlXCI+XG4gICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ3Bhc3N3b3JkJ1wiXG4gICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInQ29udHJhc2XDsWEnXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3Bhc3N3b3JkJ11cIlxuICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXNzd29yZCddLmhhc0Vycm9yKCdyZXF1aXJlZCcpID8gJ0xhIGNvbnRyYXNlw7FhIGVzIHJlcXVlcmlkYScgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXNzd29yZCddLmhhc0Vycm9yKCdtaW5sZW5ndGgnKSA/ICdNw61uaW1vIDUgY2FyYWN0ZXJlcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXNzd29yZCddLmhhc0Vycm9yKCdtYXhsZW5ndGgnKSA/ICdNw6F4aW1vIDMyIGNhcmFjdGVyZXMnIDpcbiAgICAgICAgICAgICAgICAnSW5ncmVzZSB1bmEgY29udHJhc2XDsWEgdsOhbGlkYSdcIlxuICAgICAgICAgICAgPjwvaXB0LWlucHV0PlxuXG4gICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ3Bhc3N3b3JkJ1wiXG4gICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInUmVwZXRpciBjb250cmFzZcOxYSdcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1sncmVfcGFzc3dvcmQnXVwiXG4gICAgICAgICAgICAgIFt2YWxpZGF0ZVRleHRdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3JlX3Bhc3N3b3JkJ10uaGFzRXJyb3IoJ3JlcXVpcmVkJykgPyAnRGViZSByZXBldGlyIGxhIGNvbnRyYXNlw7FhJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3JlX3Bhc3N3b3JkJ10uaGFzRXJyb3IoJ21pbmxlbmd0aCcpID8gJ03DrW5pbW8gNSBjYXJhY3RlcmVzJyA6XG4gICAgICAgICAgICAgICAgdXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3JlX3Bhc3N3b3JkJ10uaGFzRXJyb3IoJ21heGxlbmd0aCcpID8gJ03DoXhpbW8gMzIgY2FyYWN0ZXJlcycgOlxuICAgICAgICAgICAgICAgIHVwZGF0ZVVzZXJGb3JtLmhhc0Vycm9yKCdtaXNtYXRjaCcpID8gJ0xhcyBjb250cmFzZcOxYXMgbm8gY29pbmNpZGVuJyA6XG4gICAgICAgICAgICAgICAgJ1JlcGl0YSBsYSBjb250cmFzZcOxYSdcIlxuICAgICAgICAgICAgPjwvaXB0LWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBNZW5zYWplIGFkaWNpb25hbCBwYXJhIGVsIGVycm9yIGRlIG1pc21hdGNoIChvcGNpb25hbCwgc2kgcXVpZXJlcyBtb3N0cmFybG8gcG9yIHNlcGFyYWRvKSAtLT5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ1cGRhdGVVc2VyRm9ybS5oYXNFcnJvcignbWlzbWF0Y2gnKSAmJiB1cGRhdGVVc2VyRm9ybS5jb250cm9sc1snY2hhbmdlUGFzc3dvcmQnXS52YWx1ZVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxuICAgICAgICAgICAgPHNtYWxsID5MYXMgY29udHJhc2XDsWFzIG5vIGNvaW5jaWRlbjwvc21hbGw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBQYXJlbnQgSW5mb3JtYXRpb24gU2VjdGlvbiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXJcIiAqbmdJZj1cIkRhdGFTdHVkZW50Py5jb2RzXCI+XG4gICAgICAgICAgICA8aDI+SW5mb3JtYWNpw7NuIGRlbCBhY3VkaWVudGU8L2gyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJEYXRhU3R1ZGVudD8uY29kc1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dQYXJlbnRTZWN0aW9uOyBlbHNlIG5vUGFyZW50TWVzc2FnZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XG4gICAgICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidOb21icmVzJ1wiXG4gICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1sncGFyZW50X25hbWUnXVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidEZWJlIGluZ3Jlc2FyIGVsIG5vbWJyZSdcIlxuICAgICAgICAgICAgICAgID48L2lwdC1pbnB1dD5cbiAgICAgICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ0FwZWxsaWRvcydcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3BhcmVudF9sYXN0X25hbWUnXVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidEZWJlIGluZ3Jlc2FyIGxvcyBhcGVsbGlkb3MnXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidPY3VwYWNpw7NuJ1wiXG4gICAgICAgICAgICAgICAgICBbY29udHJvbF09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1sncGFyZW50X29jY3VwYXRpb24nXVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidEZWJlIGluZ3Jlc2FyIGxhIG9jdXBhY2nDs24nXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICAgICAgW2lucHV0VHlwZV09XCInZW1haWwnXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInRW1haWwnXCJcbiAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXJlbnRfZW1haWwnXVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidEZWJlIGluZ3Jlc2FyIHVuIGNvcnJlbyB2w6FsaWRvJ1wiXG4gICAgICAgICAgICAgICAgPjwvaXB0LWlucHV0PlxuICAgICAgICAgICAgICAgIDxpcHQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICBbaW5pdGlhbFZhbHVlXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZF90eXBlJ10udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3BhcmVudF9pZF9jYXJkX3R5cGUnXVwiXG4gICAgICAgICAgICAgICAgICBbc2VsZWN0Q29kZV09XCJ1cGRhdGVVc2VyRm9ybS5jb250cm9sc1sncGFyZW50X2lkX2NhcmRfdHlwZSddLnZhbHVlID09PSBudWxsID8gJ1RpcG8gZGUgZG9jdW1lbnRvJyA6IHVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZF90eXBlJ10udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbZGF0YV09XCJpZFR5cGVzXCJcbiAgICAgICAgICAgICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RJZFR5cGUoJ3BhcmVudF9pZF9jYXJkX3R5cGUnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtkZWZhdWx0VGV4dF09XCInVGlwbyBkZSBkb2N1bWVudG8nXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxpcHQtaW5wdXRcbiAgICAgICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidEb2N1bWVudG8nXCJcbiAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZCddXCJcbiAgICAgICAgICAgICAgICAgIFt2YWxpZGF0ZVRleHRdPVwiJ0RlYmUgaW5ncmVzYXIgZWwgbsO6bWVybyBkZSBkb2N1bWVudG8nXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgPGlwdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIFtpbml0aWFsVmFsdWVdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3BhcmVudF9waG9uZV9pbmRpY2F0aXZlJ10udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2NvbnRyb2xdPVwidXBkYXRlVXNlckZvcm0uY29udHJvbHNbJ3BhcmVudF9waG9uZV9pbmRpY2F0aXZlJ11cIlxuICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiaW5kaWNhdGl2ZXNcIlxuICAgICAgICAgICAgICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdEluZGljYXRpdmUoJ3BhcmVudF9waG9uZV9pbmRpY2F0aXZlJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbZGVmYXVsdFRleHRdPVwiJ0luZGljYXRpdm8nXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxpcHQtaW5wdXRcbiAgICAgICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidUZWzDqWZvbm8nXCJcbiAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXJlbnRfcGhvbmVfbnVtYmVyJ11cIlxuICAgICAgICAgICAgICAgICAgW3ZhbGlkYXRlVGV4dF09XCInRGViZSBpbmdyZXNhciB1biBuw7ptZXJvIGRlIHRlbMOpZm9ubyB2w6FsaWRvJ1wiXG4gICAgICAgICAgICAgICAgPjwvaXB0LWlucHV0PlxuXG4gICAgICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidEaXJlY2Npw7NuIGRlIG9maWNpbmEnXCJcbiAgICAgICAgICAgICAgICAgIFtjb250cm9sXT1cInVwZGF0ZVVzZXJGb3JtLmNvbnRyb2xzWydwYXJlbnRfb2ZmaWNlX2FkcnJlc3MnXVwiXG4gICAgICAgICAgICAgICAgICBbdmFsaWRhdGVUZXh0XT1cIidEZWJlIGluZ3Jlc2FyIGxhIGRpcmVjY2nDs24nXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vUGFyZW50TWVzc2FnZT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLXBhcmVudC1tZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgPHA+U2luIGFjdWRpZW50ZTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyLWlubmVyXCI+XG4gICAgICAgICAgICAgIDxpcHQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBbYnV0dG9uVHlwZV09XCInYnV0dG9uJ1wiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0NlcnJhcidcIlxuICAgICAgICAgICAgICAgICAgW3ByaW1hcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW2lzRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImNsb3NlVGFibGUoKVwiXG4gICAgICAgICAgICAgID48L2lwdC1idXR0b24+XG5cbiAgICAgICAgICAgICAgPGlwdC1idXR0b25cbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FjdHVhbGl6YXInXCJcbiAgICAgICAgICAgICAgICBbaXNFbmFibGVkXT1cIiFsb2FkZXIgJiYgdXBkYXRlVXNlckZvcm0udmFsaWQgJiYgIXVwZGF0ZVVzZXJGb3JtLmhhc0Vycm9yKCdtaXNtYXRjaCcpICYmIGhhc0Zvcm1DaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInNob3dDb25maXJtRGlhbG9ncygpXCJcbiAgICAgICAgICAgICAgICBbcHJpbWFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+PC9pcHQtYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIENvbmZpcm0gRGlhbG9nIHBhcmEgcmF6w7NuIHkgb2JzZXJ2YWNpw7NuIC0tPlxuPHAtZGlhbG9nXG4gICAgaGVhZGVyPVwiQ29uZmlybWFyIEFqdXN0ZSBkZSBVc3VhcmlvXCJcbiAgICBbKHZpc2libGUpXT1cInNob3dDb25maXJtRGlhbG9nXCJcbiAgICBbbW9kYWxdPVwidHJ1ZVwiXG4gICAgKG9uSGlkZSk9XCJjbG9zZUNvbmZpcm1EaWFsb2coKVwiXG4gID5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjb25maXJtRm9ybVwiIGNsYXNzPVwiY29uZmlybS1mb3JtXCI+XG4gICAgPGRpdiBjbGFzcz1cInAtZmllbGRcIj5cbiAgICAgIDxpcHQtc2VsZWN0XG4gICAgICAgIFtjb250cm9sXT1cImNvbmZpcm1Gb3JtLmNvbnRyb2xzWydyZWFzb24nXVwiXG4gICAgICAgIFtkYXRhXT1cInJlYXNvbnNcIlxuICAgICAgICBvcHRpb25MYWJlbD1cIm5hbWVcIlxuICAgICAgICAoZXZlbnRTZWxlY3QpPVwic2VsZWN0UmVhc29uKCRldmVudClcIlxuICAgICAgICBbZGVmYXVsdFRleHRdPVwiJ1NlbGVjY2lvbmUgbGEgcmF6w7NuJ1wiXG4gICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgPHNtYWxsICpuZ0lmPVwiY29uZmlybUZvcm0uY29udHJvbHNbJ3JlYXNvbiddLmludmFsaWQgJiYgY29uZmlybUZvcm0uY29udHJvbHNbJ3JlYXNvbiddLnRvdWNoZWRcIiBjbGFzcz1cInAtZXJyb3JcIj5cbiAgICAgICAgTGEgcmF6w7NuIGVzIHJlcXVlcmlkYVxuICAgICAgPC9zbWFsbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicC1maWVsZFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29udGFpbmVyLW9ic2VydmF0aW9uXCI+T2JzZXJ2YWNpw7NuPC9sYWJlbD5cbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICBpZD1cIm9ic2VydmF0aW9uXCJcbiAgICAgICAgcElucHV0VGV4dGFyZWFcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwib2JzZXJ2YXRpb25cIlxuICAgICAgICByb3dzPVwiM1wiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwiRGVzY3JpYmUgZGV0YWxsZXMgYWRpY2lvbmFsZXMgZGVsIGFqdXN0ZVwiXG4gICAgICA+PC90ZXh0YXJlYT5cbiAgICAgIDxzbWFsbCAqbmdJZj1cImNvbmZpcm1Gb3JtLmNvbnRyb2xzWydvYnNlcnZhdGlvbiddLmludmFsaWQgJiYgY29uZmlybUZvcm0uY29udHJvbHNbJ29ic2VydmF0aW9uJ10udG91Y2hlZFwiIGNsYXNzPVwicC1lcnJvclwiPlxuICAgICAgICBMYSBvYnNlcnZhY2nDs24gZXMgcmVxdWVyaWRhXG4gICAgICA8L3NtYWxsPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG4gIDxwLWZvb3Rlcj5cbiAgICA8aXB0LWJ1dHRvblxuICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnlcIlxuICAgICAgW2J1dHRvblR5cGVdPVwiJ2J1dHRvbidcIlxuICAgICAgW2xhYmVsXT1cIidDYW5jZWxhcidcIlxuICAgICAgW3ByaW1hcnldPVwiZmFsc2VcIlxuICAgICAgW2lzRW5hYmxlZF09XCJ0cnVlXCJcbiAgICAgIChvbkNsaWNrKT1cImNsb3NlQ29uZmlybURpYWxvZygpXCJcbiAgICA+PC9pcHQtYnV0dG9uPlxuICAgIDxpcHQtYnV0dG9uXG4gICAgICBjbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeVwiXG4gICAgICBbYnV0dG9uVHlwZV09XCInYnV0dG9uJ1wiXG4gICAgICBbbGFiZWxdPVwiJ0NvbmZpcm1hcidcIlxuICAgICAgW3ByaW1hcnldPVwidHJ1ZVwiXG4gICAgICBbaXNFbmFibGVkXT1cImNvbmZpcm1Gb3JtLnZhbGlkXCJcbiAgICAgIChvbkNsaWNrKT1cImFjY2VwdENvbmZpcm1EaWFsb2coKVwiXG4gICAgPjwvaXB0LWJ1dHRvbj5cbiAgPC9wLWZvb3Rlcj5cbjwvcC1kaWFsb2c+XG5cbjwvbWFpbj4iXX0=
|