iptdevs-design-system 2.7.28 → 2.7.30
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/cod/cod-documents-section/cod-documents-section.component.mjs +15 -0
- package/esm2020/lib/cod/cod-form/cod-form.component.mjs +226 -0
- package/esm2020/lib/cod/cod.module.mjs +82 -0
- package/esm2020/lib/cod/logic/calculate-quotes.service.mjs +72 -0
- package/esm2020/lib/cod/logic/cod-form-controls.mjs +91 -0
- package/esm2020/lib/cod/logic/cod-form-steps.mjs +29 -0
- package/esm2020/lib/cod/logic/communicator.service.mjs +28 -0
- package/esm2020/lib/cod/logic/local-storage-cod.service.mjs +39 -0
- package/esm2020/lib/cod/steps/cod-form-step-five/cod-form-step-five.component.mjs +144 -0
- package/esm2020/lib/cod/steps/cod-form-step-four/cod-form-step-four.component.mjs +250 -0
- package/esm2020/lib/cod/steps/cod-form-step-one/cod-form-step-one.component.mjs +199 -0
- package/esm2020/lib/cod/steps/cod-form-step-three/cod-form-step-three.component.mjs +174 -0
- package/esm2020/lib/cod/steps/cod-form-step-two/cod-form-step-two.component.mjs +254 -0
- package/esm2020/lib/core/core.module.mjs +6 -3
- package/esm2020/lib/core/models/cod/cod-rq.model.mjs +1 -1
- package/esm2020/lib/core/services/copies.service.mjs +17 -0
- package/esm2020/lib/core/utils/copies.mjs +214 -0
- package/esm2020/lib/design-system.module.mjs +8 -4
- package/esm2020/public-api.mjs +19 -1
- package/fesm2015/iptdevs-design-system.mjs +1787 -51
- package/fesm2015/iptdevs-design-system.mjs.map +1 -1
- package/fesm2020/iptdevs-design-system.mjs +1787 -51
- package/fesm2020/iptdevs-design-system.mjs.map +1 -1
- package/lib/cod/cod-documents-section/cod-documents-section.component.d.ts +8 -0
- package/lib/cod/cod-form/cod-form.component.d.ts +37 -0
- package/lib/cod/cod.module.d.ts +19 -0
- package/lib/cod/logic/calculate-quotes.service.d.ts +14 -0
- package/lib/cod/logic/cod-form-controls.d.ts +16 -0
- package/lib/cod/logic/cod-form-steps.d.ts +15 -0
- package/lib/cod/logic/communicator.service.d.ts +13 -0
- package/lib/cod/logic/local-storage-cod.service.d.ts +8 -0
- package/lib/cod/steps/cod-form-step-five/cod-form-step-five.component.d.ts +31 -0
- package/lib/cod/steps/cod-form-step-four/cod-form-step-four.component.d.ts +47 -0
- package/lib/cod/steps/cod-form-step-one/cod-form-step-one.component.d.ts +46 -0
- package/lib/cod/steps/cod-form-step-three/cod-form-step-three.component.d.ts +35 -0
- package/lib/cod/steps/cod-form-step-two/cod-form-step-two.component.d.ts +44 -0
- package/lib/core/models/cod/cod-rq.model.d.ts +1 -0
- package/lib/core/services/copies.service.d.ts +7 -0
- package/lib/core/utils/copies.d.ts +1 -0
- package/lib/design-system.module.d.ts +2 -1
- package/package.json +1 -1
- package/public-api.d.ts +14 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { Component, EventEmitter, Output } from '@angular/core';
|
|
2
|
+
import { Validators } from '@angular/forms';
|
|
3
|
+
import { CodFormControls } from '../../logic/cod-form-controls';
|
|
4
|
+
import { CodFormSteps } from '../../logic/cod-form-steps';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/forms";
|
|
7
|
+
import * as i2 from "../../../core/services/parameters-service/parameters.service";
|
|
8
|
+
import * as i3 from "../../logic/cod-form-controls";
|
|
9
|
+
import * as i4 from "../../../components/atoms/select/select.component";
|
|
10
|
+
import * as i5 from "../../../components/atoms/input/input.component";
|
|
11
|
+
import * as i6 from "primeng/button";
|
|
12
|
+
export class CodFormStepThreeComponent extends CodFormSteps {
|
|
13
|
+
constructor(fb, parameterService, codFormControls) {
|
|
14
|
+
super();
|
|
15
|
+
this.fb = fb;
|
|
16
|
+
this.parameterService = parameterService;
|
|
17
|
+
this.codFormControls = codFormControls;
|
|
18
|
+
this.changeStepEvent = new EventEmitter();
|
|
19
|
+
this.globalControls = new CodFormControls();
|
|
20
|
+
this.errorMessage = 'Faltan campos por llenar.';
|
|
21
|
+
this.needAtendants = [
|
|
22
|
+
{ code: '1', name: 'Si requiere acudiente' },
|
|
23
|
+
{ code: '2', name: 'No requiere acudiente' },
|
|
24
|
+
];
|
|
25
|
+
// Controls del formulario
|
|
26
|
+
this.controls = new CodFormControls().controls[2];
|
|
27
|
+
}
|
|
28
|
+
ngOnInit() {
|
|
29
|
+
this.getParameters();
|
|
30
|
+
this.initForm();
|
|
31
|
+
this.startLocalStorageWork();
|
|
32
|
+
this.validateErrors();
|
|
33
|
+
}
|
|
34
|
+
validateErrors() {
|
|
35
|
+
this.codFormStepThree.valueChanges.subscribe(changes => {
|
|
36
|
+
if (this.codFormStepThree.controls['parent_name'].hasError('minlength')) {
|
|
37
|
+
this.errorMessage = 'Los nombres deben tener mínimo 3 caracteres';
|
|
38
|
+
}
|
|
39
|
+
else if (this.codFormStepThree.controls['parent_last_name'].hasError('minlength')) {
|
|
40
|
+
this.errorMessage = 'Los apellidos deben tener mínimo 5 caracteres';
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
this.errorMessage = 'Faltan campos por llenar';
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
startLocalStorageWork() {
|
|
48
|
+
this.controls.forEach(control => {
|
|
49
|
+
let localStorageValue = this.readAndWriteLS(3, control.name);
|
|
50
|
+
this.codFormStepThree.controls[control.name].setValue(localStorageValue.value);
|
|
51
|
+
this.listenFormChanges(3, control.name, this.codFormStepThree.controls[control.name].valueChanges);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
getParameters() {
|
|
55
|
+
this.parameterService.getCardTypes('col').subscribe((response) => {
|
|
56
|
+
this.idTypes = response.data;
|
|
57
|
+
});
|
|
58
|
+
this.parameterService.getIndicatives().subscribe((response) => {
|
|
59
|
+
this.indicatives = response.data;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
initForm() {
|
|
63
|
+
this.codFormStepThree = this.fb.group({
|
|
64
|
+
parent_id_card_type: ['', [Validators.required]],
|
|
65
|
+
parent_id_card: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(20),],],
|
|
66
|
+
parent_last_name: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(32),],],
|
|
67
|
+
parent_name: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(32)],],
|
|
68
|
+
needAtendant: ['', [Validators.required], []],
|
|
69
|
+
parent_phone_indicative: ['', [Validators.required], []],
|
|
70
|
+
parent_occupation: ['', [Validators.required], []],
|
|
71
|
+
parent_address: ['', [Validators.required], []],
|
|
72
|
+
parent_phone_number: ['', [Validators.required, Validators.minLength(10), Validators.maxLength(15),],],
|
|
73
|
+
});
|
|
74
|
+
this.listenNeedAtendantField();
|
|
75
|
+
}
|
|
76
|
+
listenNeedAtendantField() {
|
|
77
|
+
const control = this.codFormStepThree.get('needAtendant');
|
|
78
|
+
control?.valueChanges.subscribe((change) => {
|
|
79
|
+
if (change === '1') {
|
|
80
|
+
// Poner validaciones
|
|
81
|
+
this.codFormStepThree.controls['parent_id_card_type'].setValidators([Validators.required]);
|
|
82
|
+
this.codFormStepThree.controls['parent_id_card'].setValidators([Validators.required, Validators.minLength(5), Validators.maxLength(20)]);
|
|
83
|
+
this.codFormStepThree.controls['parent_last_name'].setValidators([Validators.required, Validators.minLength(5), Validators.maxLength(32)]);
|
|
84
|
+
this.codFormStepThree.controls['parent_name'].setValidators([Validators.required, Validators.minLength(3), Validators.maxLength(32)]);
|
|
85
|
+
this.codFormStepThree.controls['parent_phone_indicative'].setValidators([Validators.required]);
|
|
86
|
+
this.codFormStepThree.controls['parent_occupation'].setValidators([Validators.required]);
|
|
87
|
+
this.codFormStepThree.controls['parent_address'].setValidators([Validators.required]);
|
|
88
|
+
this.codFormStepThree.controls['parent_phone_number'].setValidators([Validators.required, Validators.minLength(10), Validators.maxLength(15)]);
|
|
89
|
+
// Actualizar para que se tomen los cambios
|
|
90
|
+
this.updateValueAndValidity();
|
|
91
|
+
// Actualizar los controls globales
|
|
92
|
+
this.updateGlobalControls(change);
|
|
93
|
+
}
|
|
94
|
+
if (change === '2') {
|
|
95
|
+
// Quitar las validaciones
|
|
96
|
+
this.codFormStepThree.controls['parent_id_card_type'].clearValidators();
|
|
97
|
+
this.codFormStepThree.controls['parent_id_card'].clearValidators();
|
|
98
|
+
this.codFormStepThree.controls['parent_last_name'].clearValidators();
|
|
99
|
+
this.codFormStepThree.controls['parent_name'].clearValidators();
|
|
100
|
+
this.codFormStepThree.controls['parent_phone_indicative'].clearValidators();
|
|
101
|
+
this.codFormStepThree.controls['parent_occupation'].clearValidators();
|
|
102
|
+
this.codFormStepThree.controls['parent_address'].clearValidators();
|
|
103
|
+
this.codFormStepThree.controls['parent_phone_number'].clearValidators();
|
|
104
|
+
// Actualizar para que se tomen los cambios
|
|
105
|
+
this.updateValueAndValidity();
|
|
106
|
+
// Actualizar los controls globales
|
|
107
|
+
this.updateGlobalControls(change);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
updateGlobalControls(change) {
|
|
112
|
+
let controls = this.controls.filter(control => control.name !== 'needAtendant');
|
|
113
|
+
controls.forEach(control => {
|
|
114
|
+
if (change === '1')
|
|
115
|
+
this.codFormControls.changeValue(3, control.name, true);
|
|
116
|
+
if (change === '2')
|
|
117
|
+
this.codFormControls.changeValue(3, control.name, false);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
updateValueAndValidity() {
|
|
121
|
+
this.codFormStepThree.controls['parent_id_card_type'].updateValueAndValidity();
|
|
122
|
+
this.codFormStepThree.controls['parent_id_card'].updateValueAndValidity();
|
|
123
|
+
this.codFormStepThree.controls['parent_last_name'].updateValueAndValidity();
|
|
124
|
+
this.codFormStepThree.controls['parent_name'].updateValueAndValidity();
|
|
125
|
+
this.codFormStepThree.controls['parent_phone_indicative'].updateValueAndValidity();
|
|
126
|
+
this.codFormStepThree.controls['parent_occupation'].updateValueAndValidity();
|
|
127
|
+
this.codFormStepThree.controls['parent_address'].updateValueAndValidity();
|
|
128
|
+
this.codFormStepThree.controls['parent_phone_number'].updateValueAndValidity();
|
|
129
|
+
}
|
|
130
|
+
needAtendant() {
|
|
131
|
+
return this.codFormStepThree.controls['needAtendant'].value == 1;
|
|
132
|
+
}
|
|
133
|
+
sendForm() {
|
|
134
|
+
this.codFormStepThree.markAllAsTouched();
|
|
135
|
+
if (this.codFormStepThree.controls['needAtendant'].value === '1' && this.codFormStepThree.invalid)
|
|
136
|
+
return;
|
|
137
|
+
// Movernos al paso 4
|
|
138
|
+
this.changeStepEvent.emit(3);
|
|
139
|
+
}
|
|
140
|
+
// Eventos de los select
|
|
141
|
+
selectNeedAtendant(needAtendant) {
|
|
142
|
+
if (needAtendant !== 'Requiere acudiente') {
|
|
143
|
+
this.codFormStepThree.controls['needAtendant'].setValue(needAtendant);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
this.codFormStepThree.controls['needAtendant'].setValue(null);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
selectIdTypeParents(value) {
|
|
150
|
+
if (value !== 'Tipo de documento') {
|
|
151
|
+
this.codFormStepThree.controls['parent_id_card_type'].setValue(value);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
this.codFormStepThree.controls['parent_id_card_type'].setValue(null);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
selectIndicativesParents(value) {
|
|
158
|
+
if (value !== 'Indicativo') {
|
|
159
|
+
this.codFormStepThree.controls['parent_phone_indicative'].setValue(value);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
this.codFormStepThree.controls['parent_phone_indicative'].setValue(null);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
CodFormStepThreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CodFormStepThreeComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ParameterService }, { token: i3.CodFormControls }], target: i0.ɵɵFactoryTarget.Component });
|
|
167
|
+
CodFormStepThreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: CodFormStepThreeComponent, selector: "app-cod-form-step-three", outputs: { changeStepEvent: "changeStepEvent" }, usesInheritance: true, ngImport: i0, template: "<form autocomplete=\"off\" [formGroup]=\"codFormStepThree\"class=\"grid\">\r\n <div class=\"col-12\">\r\n <ipt-select\r\n [initialValue]=\"codFormStepThree.controls['needAtendant'].value\"\r\n [control]=\"codFormStepThree.controls['needAtendant']\"\r\n (eventSelect)=\"selectNeedAtendant($event)\"\r\n [data]=\"needAtendants\"\r\n [defaultText]=\"'Requiere acudiente'\"\r\n ></ipt-select>\r\n </div>\r\n\r\n <div *ngIf=\"needAtendant()\" class=\"grid col-12\">\r\n <div class=\"col-12 md:col-6\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Nombres'\"\r\n [control]=\"codFormStepThree.controls['parent_name']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepThree.controls['parent_id_card_type'].value\"\r\n [data]=\"idTypes\"\r\n (eventSelect)=\"selectIdTypeParents($event)\"\r\n [defaultText]=\"'Tipo de documento'\"\r\n [control]=\"codFormStepThree.controls['parent_id_card_type']\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepThree.controls['parent_phone_indicative'].value\"\r\n [data]=\"indicatives\"\r\n (eventSelect)=\"selectIndicativesParents($event)\"\r\n [defaultText]=\"'Indicativo'\"\r\n [control]=\"codFormStepThree.controls['parent_phone_indicative']\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Ocupaci\u00F3n'\"\r\n [control]=\"codFormStepThree.controls['parent_occupation']\"\r\n ></ipt-input>\r\n </div>\r\n <div class=\"col-12 md:col-6\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Apellidos'\"\r\n [control]=\"codFormStepThree.controls['parent_last_name']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de documento'\"\r\n [control]=\"codFormStepThree.controls['parent_id_card']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de tel\u00E9fono'\"\r\n [control]=\"codFormStepThree.controls['parent_phone_number']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Direcci\u00F3n - Oficina'\"\r\n [control]=\"codFormStepThree.controls['parent_address']\"\r\n ></ipt-input>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<div class=\"flex mt-3 align-items-center gap-3\">\r\n <span *ngIf=\"(codFormStepThree.invalid && codFormStepThree.touched) && needAtendant()\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">{{ errorMessage }}</span>\r\n <button type=\"submit\" class=\"ml-auto p-button-sm\" (click)=\"sendForm()\" pButton label=\"Siguiente\" icon=\"pi pi-arrow-right\"></button>\r\n</div>\r\n", styles: [""], components: [{ type: i4.SelectComponent, selector: "ipt-select", inputs: ["isRequired", "data", "defaultText", "selectCode", "disabledSel", "initialValue", "control"], outputs: ["eventSelect"] }, { type: i5.InputComponent, selector: "ipt-input", inputs: ["inputType", "placeHolder", "validateText", "withPipe", "list", "iconUrl", "control", "prefix", "thousands", "decimal"], outputs: ["dateSelected"] }], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }] });
|
|
168
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CodFormStepThreeComponent, decorators: [{
|
|
169
|
+
type: Component,
|
|
170
|
+
args: [{ selector: 'app-cod-form-step-three', template: "<form autocomplete=\"off\" [formGroup]=\"codFormStepThree\"class=\"grid\">\r\n <div class=\"col-12\">\r\n <ipt-select\r\n [initialValue]=\"codFormStepThree.controls['needAtendant'].value\"\r\n [control]=\"codFormStepThree.controls['needAtendant']\"\r\n (eventSelect)=\"selectNeedAtendant($event)\"\r\n [data]=\"needAtendants\"\r\n [defaultText]=\"'Requiere acudiente'\"\r\n ></ipt-select>\r\n </div>\r\n\r\n <div *ngIf=\"needAtendant()\" class=\"grid col-12\">\r\n <div class=\"col-12 md:col-6\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Nombres'\"\r\n [control]=\"codFormStepThree.controls['parent_name']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepThree.controls['parent_id_card_type'].value\"\r\n [data]=\"idTypes\"\r\n (eventSelect)=\"selectIdTypeParents($event)\"\r\n [defaultText]=\"'Tipo de documento'\"\r\n [control]=\"codFormStepThree.controls['parent_id_card_type']\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepThree.controls['parent_phone_indicative'].value\"\r\n [data]=\"indicatives\"\r\n (eventSelect)=\"selectIndicativesParents($event)\"\r\n [defaultText]=\"'Indicativo'\"\r\n [control]=\"codFormStepThree.controls['parent_phone_indicative']\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Ocupaci\u00F3n'\"\r\n [control]=\"codFormStepThree.controls['parent_occupation']\"\r\n ></ipt-input>\r\n </div>\r\n <div class=\"col-12 md:col-6\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Apellidos'\"\r\n [control]=\"codFormStepThree.controls['parent_last_name']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de documento'\"\r\n [control]=\"codFormStepThree.controls['parent_id_card']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de tel\u00E9fono'\"\r\n [control]=\"codFormStepThree.controls['parent_phone_number']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Direcci\u00F3n - Oficina'\"\r\n [control]=\"codFormStepThree.controls['parent_address']\"\r\n ></ipt-input>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<div class=\"flex mt-3 align-items-center gap-3\">\r\n <span *ngIf=\"(codFormStepThree.invalid && codFormStepThree.touched) && needAtendant()\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">{{ errorMessage }}</span>\r\n <button type=\"submit\" class=\"ml-auto p-button-sm\" (click)=\"sendForm()\" pButton label=\"Siguiente\" icon=\"pi pi-arrow-right\"></button>\r\n</div>\r\n", styles: [""] }]
|
|
171
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.ParameterService }, { type: i3.CodFormControls }]; }, propDecorators: { changeStepEvent: [{
|
|
172
|
+
type: Output
|
|
173
|
+
}] } });
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLWZvcm0tc3RlcC10aHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtdGhyZWUvY29kLWZvcm0tc3RlcC10aHJlZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtdGhyZWUvY29kLWZvcm0tc3RlcC10aHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQXNCLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7O0FBTzlFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxZQUFZO0lBZ0J6RCxZQUNVLEVBQWUsRUFDZixnQkFBa0MsRUFDbEMsZUFBZ0M7UUFFeEMsS0FBSyxFQUFFLENBQUM7UUFKQSxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFsQmhDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN2RCxtQkFBYyxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7UUFLdkMsaUJBQVksR0FBVywyQkFBMkIsQ0FBQztRQUNuRCxrQkFBYSxHQUFVO1lBQ3JCLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUU7WUFDNUMsRUFBRSxJQUFJLEVBQUUsR0FB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QUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0RTtJQUNILENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUFhO1FBQ3BDLElBQUksS0FBSyxLQUFLLFlBQVksRUFBRTtZQUMxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNFO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzFFO0lBQ0gsQ0FBQzs7c0hBM0tVLHlCQUF5QjswR0FBekIseUJBQXlCLHVJQ1h0QyxnM0ZBbUVBOzJGRHhEYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UseUJBQXlCOytKQUt6QixlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUGFyYW1ldGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMvcGFyYW1ldGVycy1zZXJ2aWNlL3BhcmFtZXRlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvZEZvcm1Db250cm9scyB9IGZyb20gJy4uLy4uL2xvZ2ljL2NvZC1mb3JtLWNvbnRyb2xzJztcclxuaW1wb3J0IHsgQ29kRm9ybVN0ZXBzLCBsb2NhbFN0b3JhZ2VWYWx1ZXMgfSBmcm9tICcuLi8uLi9sb2dpYy9jb2QtZm9ybS1zdGVwcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1jb2QtZm9ybS1zdGVwLXRocmVlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29kLWZvcm0tc3RlcC10aHJlZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29kLWZvcm0tc3RlcC10aHJlZS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvZEZvcm1TdGVwVGhyZWVDb21wb25lbnQgZXh0ZW5kcyBDb2RGb3JtU3RlcHMgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2VTdGVwRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICBnbG9iYWxDb250cm9scyA9IG5ldyBDb2RGb3JtQ29udHJvbHMoKTtcclxuXHJcbiAgaWRUeXBlczogYW55O1xyXG4gIGluZGljYXRpdmVzOiBhbnk7XHJcbiAgY29kRm9ybVN0ZXBUaHJlZSE6IEZvcm1Hcm91cDtcclxuICBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICdGYWx0YW4gY2FtcG9zIHBvciBsbGVuYXIuJztcclxuICBuZWVkQXRlbmRhbnRzOiBhbnlbXSA9IFtcclxuICAgIHsgY29kZTogJzEnLCBuYW1lOiAnU2kgcmVxdWllcmUgYWN1ZGllbnRlJyB9LFxyXG4gICAgeyBjb2RlOiAnMicsIG5hbWU6ICdObyByZXF1aWVyZSBhY3VkaWVudGUnIH0sXHJcbiAgXTtcclxuXHJcbiAgIC8vIENvbnRyb2xzIGRlbCBmb3JtdWxhcmlvXHJcbiAgIGNvbnRyb2xzID0gbmV3IENvZEZvcm1Db250cm9scygpLmNvbnRyb2xzWzJdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBwYXJhbWV0ZXJTZXJ2aWNlOiBQYXJhbWV0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb2RGb3JtQ29udHJvbHM6IENvZEZvcm1Db250cm9sc1xyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRQYXJhbWV0ZXJzKCk7XHJcbiAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgICB0aGlzLnN0YXJ0TG9jYWxTdG9yYWdlV29yaygpO1xyXG4gICAgdGhpcy52YWxpZGF0ZUVycm9ycygpO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVFcnJvcnMoKSB7XHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShjaGFuZ2VzID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X25hbWUnXS5oYXNFcnJvcignbWlubGVuZ3RoJykpIHtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdMb3Mgbm9tYnJlcyBkZWJlbiB0ZW5lciBtw61uaW1vIDMgY2FyYWN0ZXJlcyc7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfbGFzdF9uYW1lJ10uaGFzRXJyb3IoJ21pbmxlbmd0aCcpKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnTG9zIGFwZWxsaWRvcyBkZWJlbiB0ZW5lciBtw61uaW1vIDUgY2FyYWN0ZXJlcyc7XHJcbiAgICAgIH1cclxuICAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhbHRhbiBjYW1wb3MgcG9yIGxsZW5hcic7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBzdGFydExvY2FsU3RvcmFnZVdvcmsoKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgIGxldCBsb2NhbFN0b3JhZ2VWYWx1ZTogbG9jYWxTdG9yYWdlVmFsdWVzID0gdGhpcy5yZWFkQW5kV3JpdGVMUygzLCBjb250cm9sLm5hbWUpO1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbY29udHJvbC5uYW1lXS5zZXRWYWx1ZShsb2NhbFN0b3JhZ2VWYWx1ZS52YWx1ZSk7XHJcbiAgICAgIHRoaXMubGlzdGVuRm9ybUNoYW5nZXMoMywgY29udHJvbC5uYW1lLCB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbY29udHJvbC5uYW1lXS52YWx1ZUNoYW5nZXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQYXJhbWV0ZXJzKCkge1xyXG4gICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLmdldENhcmRUeXBlcygnY29sJykuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLmlkVHlwZXMgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBhcmFtZXRlclNlcnZpY2UuZ2V0SW5kaWNhdGl2ZXMoKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHRoaXMuaW5kaWNhdGl2ZXMgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0Rm9ybSgpIHtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBwYXJlbnRfaWRfY2FyZF90eXBlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHBhcmVudF9pZF9jYXJkOiBbJycsW1ZhbGlkYXRvcnMucmVxdWlyZWQsVmFsaWRhdG9ycy5taW5MZW5ndGgoNSksVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjApLF0sXSxcclxuICAgICAgcGFyZW50X2xhc3RfbmFtZTogWycnLFtWYWxpZGF0b3JzLnJlcXVpcmVkLFZhbGlkYXRvcnMubWluTGVuZ3RoKDUpLFZhbGlkYXRvcnMubWF4TGVuZ3RoKDMyKSxdLF0sXHJcbiAgICAgIHBhcmVudF9uYW1lOiBbJycsW1ZhbGlkYXRvcnMucmVxdWlyZWQsVmFsaWRhdG9ycy5taW5MZW5ndGgoMyksVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzIpXSxdLFxyXG4gICAgICBuZWVkQXRlbmRhbnQ6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBbXV0sXHJcbiAgICAgIHBhcmVudF9waG9uZV9pbmRpY2F0aXZlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSwgW11dLFxyXG4gICAgICBwYXJlbnRfb2NjdXBhdGlvbjogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sIFtdXSxcclxuICAgICAgcGFyZW50X2FkZHJlc3M6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBbXV0sXHJcbiAgICAgIHBhcmVudF9waG9uZV9udW1iZXI6IFsnJyxbVmFsaWRhdG9ycy5yZXF1aXJlZCxWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMCksVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTUpLF0sXSxcclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy5saXN0ZW5OZWVkQXRlbmRhbnRGaWVsZCgpXHJcbiAgfVxyXG5cclxuICBsaXN0ZW5OZWVkQXRlbmRhbnRGaWVsZCgpIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuZ2V0KCduZWVkQXRlbmRhbnQnKTtcclxuICAgIGNvbnRyb2w/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGNoYW5nZSkgPT4ge1xyXG4gICAgICBpZiAoY2hhbmdlID09PSAnMScpIHtcclxuICAgICAgICAvLyBQb25lciB2YWxpZGFjaW9uZXNcclxuICAgICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9pZF9jYXJkX3R5cGUnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcclxuICAgICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9pZF9jYXJkJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCxWYWxpZGF0b3JzLm1pbkxlbmd0aCg1KSxWYWxpZGF0b3JzLm1heExlbmd0aCgyMCldKVxyXG4gICAgICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X2xhc3RfbmFtZSddLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsVmFsaWRhdG9ycy5taW5MZW5ndGgoNSksVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzIpXSlcclxuICAgICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9uYW1lJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCxWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSxWYWxpZGF0b3JzLm1heExlbmd0aCgzMildKVxyXG4gICAgICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X3Bob25lX2luZGljYXRpdmUnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcclxuICAgICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9vY2N1cGF0aW9uJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXHJcbiAgICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfYWRkcmVzcyddLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxyXG4gICAgICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X3Bob25lX251bWJlciddLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsVmFsaWRhdG9ycy5taW5MZW5ndGgoMTApLFZhbGlkYXRvcnMubWF4TGVuZ3RoKDE1KV0pXHJcblxyXG4gICAgICAgIC8vIEFjdHVhbGl6YXIgcGFyYSBxdWUgc2UgdG9tZW4gbG9zIGNhbWJpb3NcclxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICAgICAgLy8gQWN0dWFsaXphciBsb3MgY29udHJvbHMgZ2xvYmFsZXNcclxuICAgICAgICB0aGlzLnVwZGF0ZUdsb2JhbENvbnRyb2xzKGNoYW5nZSlcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hhbmdlID09PSAnMicpIHtcclxuICAgICAgICAvLyBRdWl0YXIgbGFzIHZhbGlkYWNpb25lc1xyXG4gICAgICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X2lkX2NhcmRfdHlwZSddLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X2lkX2NhcmQnXS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9sYXN0X25hbWUnXS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9uYW1lJ10uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZSddLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X29jY3VwYXRpb24nXS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9hZGRyZXNzJ10uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfcGhvbmVfbnVtYmVyJ10uY2xlYXJWYWxpZGF0b3JzKCk7XHJcblxyXG4gICAgICAgIC8vIEFjdHVhbGl6YXIgcGFyYSBxdWUgc2UgdG9tZW4gbG9zIGNhbWJpb3NcclxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICAgICAgLy8gQWN0dWFsaXphciBsb3MgY29udHJvbHMgZ2xvYmFsZXNcclxuICAgICAgICB0aGlzLnVwZGF0ZUdsb2JhbENvbnRyb2xzKGNoYW5nZSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVHbG9iYWxDb250cm9scyhjaGFuZ2U6IHN0cmluZykge1xyXG4gICAgbGV0IGNvbnRyb2xzID0gdGhpcy5jb250cm9scy5maWx0ZXIoY29udHJvbCA9PiBjb250cm9sLm5hbWUgIT09ICduZWVkQXRlbmRhbnQnKTtcclxuICAgIGNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiB7XHJcbiAgICAgIGlmIChjaGFuZ2UgPT09ICcxJykgdGhpcy5jb2RGb3JtQ29udHJvbHMuY2hhbmdlVmFsdWUoMywgY29udHJvbC5uYW1lLCB0cnVlKVxyXG4gICAgICBpZiAoY2hhbmdlID09PSAnMicpIHRoaXMuY29kRm9ybUNvbnRyb2xzLmNoYW5nZVZhbHVlKDMsIGNvbnRyb2wubmFtZSwgZmFsc2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKSB7XHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9pZF9jYXJkX3R5cGUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9pZF9jYXJkJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfbGFzdF9uYW1lJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfbmFtZSddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X3Bob25lX2luZGljYXRpdmUnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9vY2N1cGF0aW9uJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfYWRkcmVzcyddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X3Bob25lX251bWJlciddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcblxyXG4gIG5lZWRBdGVuZGFudCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ25lZWRBdGVuZGFudCddLnZhbHVlID09IDE7XHJcbiAgfVxyXG5cclxuICBzZW5kRm9ybSgpIHtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICBpZiAodGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWyduZWVkQXRlbmRhbnQnXS52YWx1ZSA9PT0gJzEnICYmIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5pbnZhbGlkKSByZXR1cm47XHJcblxyXG4gICAgLy8gTW92ZXJub3MgYWwgcGFzbyA0XHJcbiAgICB0aGlzLmNoYW5nZVN0ZXBFdmVudC5lbWl0KDMpO1xyXG4gIH1cclxuXHJcbiAgLy8gRXZlbnRvcyBkZSBsb3Mgc2VsZWN0XHJcbiAgc2VsZWN0TmVlZEF0ZW5kYW50KG5lZWRBdGVuZGFudDogYW55KSB7XHJcbiAgICBpZiAobmVlZEF0ZW5kYW50ICE9PSAnUmVxdWllcmUgYWN1ZGllbnRlJykge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ25lZWRBdGVuZGFudCddLnNldFZhbHVlKG5lZWRBdGVuZGFudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ25lZWRBdGVuZGFudCddLnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0SWRUeXBlUGFyZW50cyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsdWUgIT09ICdUaXBvIGRlIGRvY3VtZW50bycpIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZF90eXBlJ10uc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfaWRfY2FyZF90eXBlJ10uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RJbmRpY2F0aXZlc1BhcmVudHModmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKHZhbHVlICE9PSAnSW5kaWNhdGl2bycpIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZSddLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X3Bob25lX2luZGljYXRpdmUnXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIjxmb3JtIGF1dG9jb21wbGV0ZT1cIm9mZlwiIFtmb3JtR3JvdXBdPVwiY29kRm9ybVN0ZXBUaHJlZVwiY2xhc3M9XCJncmlkXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgPGlwdC1zZWxlY3RcclxuICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWyduZWVkQXRlbmRhbnQnXS52YWx1ZVwiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ25lZWRBdGVuZGFudCddXCJcclxuICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdE5lZWRBdGVuZGFudCgkZXZlbnQpXCJcclxuICAgICAgW2RhdGFdPVwibmVlZEF0ZW5kYW50c1wiXHJcbiAgICAgIFtkZWZhdWx0VGV4dF09XCInUmVxdWllcmUgYWN1ZGllbnRlJ1wiXHJcbiAgICA+PC9pcHQtc2VsZWN0PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwibmVlZEF0ZW5kYW50KClcIiBjbGFzcz1cImdyaWQgY29sLTEyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC02XCI+XHJcbiAgICAgIDxpcHQtaW5wdXRcclxuICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXHJcbiAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidOb21icmVzJ1wiXHJcbiAgICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X25hbWUnXVwiXHJcbiAgICAgID48L2lwdC1pbnB1dD5cclxuICAgICAgPGlwdC1zZWxlY3RcclxuICAgICAgICBbaW5pdGlhbFZhbHVlXT1cImNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9pZF9jYXJkX3R5cGUnXS52YWx1ZVwiXHJcbiAgICAgICAgW2RhdGFdPVwiaWRUeXBlc1wiXHJcbiAgICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdElkVHlwZVBhcmVudHMoJGV2ZW50KVwiXHJcbiAgICAgICAgW2RlZmF1bHRUZXh0XT1cIidUaXBvIGRlIGRvY3VtZW50bydcIlxyXG4gICAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9pZF9jYXJkX3R5cGUnXVwiXHJcbiAgICAgID48L2lwdC1zZWxlY3Q+XHJcbiAgICAgIDxpcHQtc2VsZWN0XHJcbiAgICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZSddLnZhbHVlXCJcclxuICAgICAgICBbZGF0YV09XCJpbmRpY2F0aXZlc1wiXHJcbiAgICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdEluZGljYXRpdmVzUGFyZW50cygkZXZlbnQpXCJcclxuICAgICAgICBbZGVmYXVsdFRleHRdPVwiJ0luZGljYXRpdm8nXCJcclxuICAgICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfcGhvbmVfaW5kaWNhdGl2ZSddXCJcclxuICAgICAgPjwvaXB0LXNlbGVjdD5cclxuICAgICAgPGlwdC1pbnB1dFxyXG4gICAgICAgIFtpbnB1dFR5cGVdPVwiJ3RleHQnXCJcclxuICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ09jdXBhY2nDs24nXCJcclxuICAgICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfb2NjdXBhdGlvbiddXCJcclxuICAgICAgPjwvaXB0LWlucHV0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC02XCI+XHJcbiAgICAgIDxpcHQtaW5wdXRcclxuICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXHJcbiAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidBcGVsbGlkb3MnXCJcclxuICAgICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfbGFzdF9uYW1lJ11cIlxyXG4gICAgICA+PC9pcHQtaW5wdXQ+XHJcbiAgICAgIDxpcHQtaW5wdXRcclxuICAgICAgICBbaW5wdXRUeXBlXT1cIidudW1iZXInXCJcclxuICAgICAgICBbcGxhY2VIb2xkZXJdPVwiJ07Dum1lcm8gZGUgZG9jdW1lbnRvJ1wiXHJcbiAgICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFyZW50X2lkX2NhcmQnXVwiXHJcbiAgICAgID48L2lwdC1pbnB1dD5cclxuICAgICAgPGlwdC1pbnB1dFxyXG4gICAgICAgIFtpbnB1dFR5cGVdPVwiJ251bWJlcidcIlxyXG4gICAgICAgIFtwbGFjZUhvbGRlcl09XCInTsO6bWVybyBkZSB0ZWzDqWZvbm8nXCJcclxuICAgICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYXJlbnRfcGhvbmVfbnVtYmVyJ11cIlxyXG4gICAgICA+PC9pcHQtaW5wdXQ+XHJcbiAgICAgIDxpcHQtaW5wdXRcclxuICAgICAgICBbaW5wdXRUeXBlXT1cIid0ZXh0J1wiXHJcbiAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidEaXJlY2Npw7NuIC0gT2ZpY2luYSdcIlxyXG4gICAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BhcmVudF9hZGRyZXNzJ11cIlxyXG4gICAgICA+PC9pcHQtaW5wdXQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPlxyXG5cclxuPGRpdiBjbGFzcz1cImZsZXggbXQtMyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cclxuICA8c3BhbiAqbmdJZj1cIihjb2RGb3JtU3RlcFRocmVlLmludmFsaWQgJiYgY29kRm9ybVN0ZXBUaHJlZS50b3VjaGVkKSAmJiBuZWVkQXRlbmRhbnQoKVwiIGNsYXNzPVwidGV4dC1yZWQtNTAwIGZvbnQtYm9sZCB0ZXh0LWNlbnRlciBtdC0xIHB5LTIgYmctcmVkLTEwMCB3LWZ1bGwgYm9yZGVyLXJvdW5kLXhsXCI+e3sgZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxyXG4gIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwibWwtYXV0byBwLWJ1dHRvbi1zbVwiIChjbGljayk9XCJzZW5kRm9ybSgpXCIgcEJ1dHRvbiBsYWJlbD1cIlNpZ3VpZW50ZVwiIGljb249XCJwaSBwaS1hcnJvdy1yaWdodFwiPjwvYnV0dG9uPlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { Validators } from '@angular/forms';
|
|
3
|
+
import { map } from 'rxjs';
|
|
4
|
+
import { CodFormControls } from '../../logic/cod-form-controls';
|
|
5
|
+
import { CodFormSteps } from '../../logic/cod-form-steps';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/forms";
|
|
8
|
+
import * as i2 from "../../../core/services/parameters-service/parameters.service";
|
|
9
|
+
import * as i3 from "../../../components/atoms/input/input.component";
|
|
10
|
+
import * as i4 from "../../../components/atoms/select/select.component";
|
|
11
|
+
import * as i5 from "primeng/button";
|
|
12
|
+
export class CodFormStepTwoComponent extends CodFormSteps {
|
|
13
|
+
constructor(fb, parameterService) {
|
|
14
|
+
super();
|
|
15
|
+
this.fb = fb;
|
|
16
|
+
this.parameterService = parameterService;
|
|
17
|
+
this.changeStepEvent = new EventEmitter();
|
|
18
|
+
this.errorMessage = 'Faltan campos por llenar.';
|
|
19
|
+
this.hasErrors = false;
|
|
20
|
+
this.genders = [];
|
|
21
|
+
// Controls del formulario
|
|
22
|
+
this.controls = new CodFormControls().controls[1];
|
|
23
|
+
}
|
|
24
|
+
ngOnInit() {
|
|
25
|
+
this.getParameters();
|
|
26
|
+
this.initForm();
|
|
27
|
+
this.startLocalStorageWork();
|
|
28
|
+
this.validateErrors();
|
|
29
|
+
if (this.initialData)
|
|
30
|
+
this.setDataFromPreviusCod();
|
|
31
|
+
this.selectCountry(this.localStorageCOD.getCodFormData(2, 'country'));
|
|
32
|
+
}
|
|
33
|
+
setDataFromPreviusCod() {
|
|
34
|
+
this.codFormStepTwo.controls['student_name'].setValue(this.initialData.name);
|
|
35
|
+
this.codFormStepTwo.controls['student_last_name'].setValue(this.initialData.last_name);
|
|
36
|
+
this.codFormStepTwo.controls['student_id_card_type'].setValue(this.initialData.id_card_type);
|
|
37
|
+
this.codFormStepTwo.controls['student_id_card'].setValue(this.initialData.id_card);
|
|
38
|
+
this.codFormStepTwo.controls['student_phone_indicative'].setValue(this.initialData.phone_indicative);
|
|
39
|
+
this.codFormStepTwo.controls['student_phone_number'].setValue(this.initialData.phone_number);
|
|
40
|
+
this.codFormStepTwo.controls['birthdate'].setValue(this.initialData.birthdate);
|
|
41
|
+
}
|
|
42
|
+
validateErrors() {
|
|
43
|
+
this.codFormStepTwo.valueChanges.subscribe(changes => {
|
|
44
|
+
if (this.codFormStepTwo.controls['student_name'].hasError('minlength')) {
|
|
45
|
+
this.errorMessage = 'Los nombres deben tener mínimo 3 caracteres';
|
|
46
|
+
}
|
|
47
|
+
else if (this.codFormStepTwo.controls['student_last_name'].hasError('minlength')) {
|
|
48
|
+
this.errorMessage = 'Los apellidos deben tener mínimo 5 caracteres';
|
|
49
|
+
}
|
|
50
|
+
else if (this.codFormStepTwo.controls['password'].hasError('minlength')) {
|
|
51
|
+
this.errorMessage = 'La contraseña debe tener mínimo 6 caracteres';
|
|
52
|
+
}
|
|
53
|
+
else if (this.codFormStepTwo.controls['password'].value !== this.codFormStepTwo.controls['re_password'].value) {
|
|
54
|
+
this.errorMessage = 'Las contraseñas no coinciden';
|
|
55
|
+
}
|
|
56
|
+
else if (this.codFormStepTwo.controls['age'].errors) {
|
|
57
|
+
this.errorMessage = 'Fecha de nacimiento no válida';
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
this.errorMessage = 'Faltan campos por llenar';
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
startLocalStorageWork() {
|
|
65
|
+
this.controls.forEach(control => {
|
|
66
|
+
let localStorageValue = this.readAndWriteLS(2, control.name);
|
|
67
|
+
this.codFormStepTwo.controls[control.name].setValue(localStorageValue.value);
|
|
68
|
+
this.listenFormChanges(2, control.name, this.codFormStepTwo.controls[control.name].valueChanges);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
initForm() {
|
|
72
|
+
this.codFormStepTwo = this.fb.group({
|
|
73
|
+
student_address: ['', [Validators.required], []],
|
|
74
|
+
birthdate: ['', [Validators.required], []],
|
|
75
|
+
country: ['', [Validators.required], []],
|
|
76
|
+
state: ['', [Validators.required], []],
|
|
77
|
+
city: ['', [Validators.required], []],
|
|
78
|
+
student_id_card_type: ['', [Validators.required], []],
|
|
79
|
+
student_id_card: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(20)]],
|
|
80
|
+
student_last_name: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(32)]],
|
|
81
|
+
student_name: ['', [Validators.required, Validators.minLength(3), Validators.maxLength(32)]],
|
|
82
|
+
student_email: ['', [Validators.required, Validators.email]],
|
|
83
|
+
nickname: ['', [Validators.required]],
|
|
84
|
+
gender: ['', [Validators.required]],
|
|
85
|
+
age: ['', [Validators.required], []],
|
|
86
|
+
student_occupation: ['', [Validators.required]],
|
|
87
|
+
stratum: ['', [Validators.required]],
|
|
88
|
+
grade: ['', [Validators.required]],
|
|
89
|
+
civil_status: ['', [Validators.required]],
|
|
90
|
+
student_phone_indicative: ['', [Validators.required], []],
|
|
91
|
+
student_phone_number: ['', [Validators.required, Validators.minLength(10), Validators.maxLength(15)]],
|
|
92
|
+
password: ['', [Validators.required, Validators.minLength(6)]],
|
|
93
|
+
re_password: ['', [Validators.required, Validators.minLength(6)]],
|
|
94
|
+
});
|
|
95
|
+
// Calcular edad y setear valor
|
|
96
|
+
this.codFormStepTwo.controls['birthdate'].valueChanges.subscribe({
|
|
97
|
+
next: (change) => {
|
|
98
|
+
let today = new Date();
|
|
99
|
+
let birthday = new Date(change);
|
|
100
|
+
let age = today.getFullYear() - birthday.getFullYear();
|
|
101
|
+
let month = today.getMonth() - birthday.getMonth();
|
|
102
|
+
if (month < 0 || (month === 0 && today.getDate() < birthday.getDate())) {
|
|
103
|
+
age--;
|
|
104
|
+
}
|
|
105
|
+
if (age < 3) {
|
|
106
|
+
this.errorMessage = 'Fecha de nacimiento no válida';
|
|
107
|
+
this.codFormStepTwo.controls['birthdate'].setErrors({
|
|
108
|
+
invalidAge: true
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
this.codFormStepTwo.controls['birthdate'].setErrors(null);
|
|
113
|
+
}
|
|
114
|
+
this.codFormStepTwo.controls['age'].setValue(age);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
getParameters() {
|
|
119
|
+
this.parameterService.getCardTypes('col').subscribe((response) => {
|
|
120
|
+
this.idTypes = response.data;
|
|
121
|
+
});
|
|
122
|
+
this.parameterService.getIndicatives().subscribe((response) => {
|
|
123
|
+
this.indicatives = response.data;
|
|
124
|
+
});
|
|
125
|
+
this.parameterService.getCountries().subscribe((response) => {
|
|
126
|
+
this.countries = response.data;
|
|
127
|
+
});
|
|
128
|
+
this.parameterService.getStratums().subscribe((response) => {
|
|
129
|
+
this.stratums = response.data;
|
|
130
|
+
});
|
|
131
|
+
this.parameterService.getCivilStatus().subscribe((response) => {
|
|
132
|
+
this.civilStatus = response.data;
|
|
133
|
+
});
|
|
134
|
+
this.parameterService.getGenders().pipe(map((response) => response.data))
|
|
135
|
+
.subscribe((genders) => {
|
|
136
|
+
genders.forEach(gender => {
|
|
137
|
+
let genderItem = {
|
|
138
|
+
code: gender.code,
|
|
139
|
+
name: gender.name_spanish
|
|
140
|
+
};
|
|
141
|
+
this.genders.push(genderItem);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
sendForm() {
|
|
146
|
+
this.codFormStepTwo.markAllAsTouched();
|
|
147
|
+
if (this.codFormStepTwo.invalid)
|
|
148
|
+
return;
|
|
149
|
+
// Movernos al paso 3
|
|
150
|
+
this.changeStepEvent.emit(2);
|
|
151
|
+
}
|
|
152
|
+
getState(state) {
|
|
153
|
+
this.getCity(state);
|
|
154
|
+
}
|
|
155
|
+
getCity(state) {
|
|
156
|
+
this.parameterService.getCitiesByState(state).subscribe((response) => {
|
|
157
|
+
this.cities = response.data;
|
|
158
|
+
this.selectCity(this.localStorageCOD.getCodFormData(2, 'city'));
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
// Eventos de los select
|
|
162
|
+
selectCountry(country) {
|
|
163
|
+
if (country !== 'País de residencia') {
|
|
164
|
+
this.codFormStepTwo.controls['country'].setValue(country);
|
|
165
|
+
let iso = '';
|
|
166
|
+
if (country === '1')
|
|
167
|
+
iso = 'null';
|
|
168
|
+
if (country === '2')
|
|
169
|
+
iso = 'col';
|
|
170
|
+
if (country === '3')
|
|
171
|
+
iso = 'ven';
|
|
172
|
+
if (country === '4')
|
|
173
|
+
iso = 'usa';
|
|
174
|
+
this.parameterService.getStatesByCountry(iso).subscribe((response) => {
|
|
175
|
+
this.states = response.data;
|
|
176
|
+
this.selectState(this.localStorageCOD.getCodFormData(2, 'state'));
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
this.codFormStepTwo.controls['country'].setValue(null);
|
|
181
|
+
}
|
|
182
|
+
this.countrySelected = country;
|
|
183
|
+
}
|
|
184
|
+
selectState(state) {
|
|
185
|
+
if (state !== 'Departamento o estado') {
|
|
186
|
+
this.codFormStepTwo.controls['state'].setValue(state);
|
|
187
|
+
this.getState(state);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
this.codFormStepTwo.controls['state'].setValue(null);
|
|
191
|
+
this.codFormStepTwo.controls['city'].setValue(null);
|
|
192
|
+
this.cities = [];
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
selectCity(city) {
|
|
196
|
+
if (city !== 'Ciudad de residencia') {
|
|
197
|
+
this.codFormStepTwo.controls['city'].setValue(city);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
this.codFormStepTwo.controls['city'].setValue(null);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
selectIdType(idType) {
|
|
204
|
+
if (idType !== 'Tipo de documento') {
|
|
205
|
+
this.codFormStepTwo.controls['student_id_card_type'].setValue(idType);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
this.codFormStepTwo.controls['student_id_card_type'].setValue(null);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
selectIndicatives(indicative) {
|
|
212
|
+
if (indicative !== 'Indicativo') {
|
|
213
|
+
this.codFormStepTwo.controls['student_phone_indicative'].setValue(indicative);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
this.codFormStepTwo.controls['student_phone_indicative'].setValue(null);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
selectGender(gender) {
|
|
220
|
+
if (gender !== 'Género') {
|
|
221
|
+
this.codFormStepTwo.controls['gender'].setValue(gender);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
this.codFormStepTwo.controls['gender'].setValue(null);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
selectStratum(stratum) {
|
|
228
|
+
if (stratum !== 'Estrato') {
|
|
229
|
+
this.codFormStepTwo.controls['stratum'].setValue(stratum);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
this.codFormStepTwo.controls['stratum'].setValue(null);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
selectCivilStatus(civil_status) {
|
|
236
|
+
if (civil_status !== 'Estado civil') {
|
|
237
|
+
this.codFormStepTwo.controls['civil_status'].setValue(civil_status);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
this.codFormStepTwo.controls['civil_status'].setValue(null);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
CodFormStepTwoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CodFormStepTwoComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ParameterService }], target: i0.ɵɵFactoryTarget.Component });
|
|
245
|
+
CodFormStepTwoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: CodFormStepTwoComponent, selector: "app-cod-form-step-two", inputs: { initialData: "initialData" }, outputs: { changeStepEvent: "changeStepEvent" }, usesInheritance: true, ngImport: i0, template: "<form autocomplete=\"off\" [formGroup]=\"codFormStepTwo\" class=\"grid\">\r\n\r\n <div class=\"col\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Nombres'\"\r\n [control]=\"codFormStepTwo.controls['student_name']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['student_id_card_type'].value\"\r\n [control]=\"codFormStepTwo.controls['student_id_card_type']\"\r\n [selectCode]=\"codFormStepTwo.controls['student_id_card_type'].value === null ? 'Tipo de documento' : codFormStepTwo.controls['student_id_card_type'].value\"\r\n [isRequired]=\"true\"\r\n [data]=\"idTypes\"\r\n (eventSelect)=\"selectIdType($event)\"\r\n [defaultText]=\"'Tipo de documento'\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['country'].value\"\r\n [control]=\"codFormStepTwo.controls['country']\"\r\n [selectCode]=\"codFormStepTwo.controls['country'].value === null ? 'Pa\u00EDs de residencia' : codFormStepTwo.controls['country'].value\"\r\n (eventSelect)=\"selectCountry($event)\"\r\n [data]=\"countries\"\r\n [defaultText]=\"'Pa\u00EDs de residencia'\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['city'].value\"\r\n [control]=\"codFormStepTwo.controls['city']\"\r\n [selectCode]=\"codFormStepTwo.controls['city'].value === null ? 'Ciudad de residencia' : codFormStepTwo.controls['city'].value\"\r\n (eventSelect)=\"selectCity($event)\"\r\n [data]=\"cities\"\r\n [defaultText]=\"'Ciudad de residencia'\"\r\n ></ipt-select>\r\n <ipt-input\r\n onfocus=\"(this.type='date')\"\r\n [inputType]=\"'date'\"\r\n [control]=\"codFormStepTwo.controls['birthdate']\"\r\n [placeHolder]=\"'Fecha de nacimiento'\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['gender'].value\"\r\n [control]=\"codFormStepTwo.controls['gender']\"\r\n [data]=\"genders\"\r\n (eventSelect)=\"selectGender($event)\"\r\n [defaultText]=\"'G\u00E9nero'\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['stratum'].value\"\r\n [control]=\"codFormStepTwo.controls['stratum']\"\r\n [data]=\"stratums\"\r\n (eventSelect)=\"selectStratum($event)\"\r\n [defaultText]=\"'Estrato'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Grado'\"\r\n [control]=\"codFormStepTwo.controls['grade']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['student_phone_indicative'].value\"\r\n [control]=\"codFormStepTwo.controls['student_phone_indicative']\"\r\n [data]=\"indicatives\"\r\n (eventSelect)=\"selectIndicatives($event)\"\r\n [defaultText]=\"'Indicativo'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'email'\"\r\n [placeHolder]=\"'Correo electr\u00F3nico'\"\r\n [control]=\"codFormStepTwo.controls['student_email']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'password'\"\r\n [placeHolder]=\"'Repetir contrase\u00F1a'\"\r\n [control]=\"codFormStepTwo.controls['re_password']\"\r\n ></ipt-input>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Apellidos'\"\r\n [control]=\"codFormStepTwo.controls['student_last_name']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de documento'\"\r\n [control]=\"codFormStepTwo.controls['student_id_card']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['state'].value\"\r\n [control]=\"codFormStepTwo.controls['state']\"\r\n [selectCode]=\"codFormStepTwo.controls['state'].value === null ? 'Departamento o estado' : codFormStepTwo.controls['state'].value\"\r\n [isRequired]=\"true\"\r\n (eventSelect)=\"selectState($event)\"\r\n [data]=\"states\"\r\n [defaultText]=\"'Departamento o estado'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Direcci\u00F3n'\"\r\n [control]=\"codFormStepTwo.controls['student_address']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'Edad'\"\r\n [control]=\"codFormStepTwo.controls['age']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Nickname'\"\r\n [control]=\"codFormStepTwo.controls['nickname']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Ocupaci\u00F3n'\"\r\n [control]=\"codFormStepTwo.controls['student_occupation']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['civil_status'].value\"\r\n [control]=\"codFormStepTwo.controls['civil_status']\"\r\n [data]=\"civilStatus\"\r\n (eventSelect)=\"selectCivilStatus($event)\"\r\n [defaultText]=\"'Estado civil'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de tel\u00E9fono'\"\r\n [control]=\"codFormStepTwo.controls['student_phone_number']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'password'\"\r\n [placeHolder]=\"'Contrase\u00F1a'\"\r\n [control]=\"codFormStepTwo.controls['password']\"\r\n ></ipt-input>\r\n </div>\r\n\r\n <div class=\"col-12\"></div>\r\n\r\n</form>\r\n\r\n<div class=\"flex mt-3 align-items-center gap-3\">\r\n <span *ngIf=\"codFormStepTwo.invalid && codFormStepTwo.touched\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">{{ errorMessage }}</span>\r\n <button type=\"submit\" class=\"ml-auto p-button-sm\" (click)=\"sendForm()\" pButton label=\"Siguiente\" icon=\"pi pi-arrow-right\"></button>\r\n</div>\r\n", styles: [""], components: [{ type: i3.InputComponent, selector: "ipt-input", inputs: ["inputType", "placeHolder", "validateText", "withPipe", "list", "iconUrl", "control", "prefix", "thousands", "decimal"], outputs: ["dateSelected"] }, { type: i4.SelectComponent, selector: "ipt-select", inputs: ["isRequired", "data", "defaultText", "selectCode", "disabledSel", "initialValue", "control"], outputs: ["eventSelect"] }], directives: [{ type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }] });
|
|
246
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CodFormStepTwoComponent, decorators: [{
|
|
247
|
+
type: Component,
|
|
248
|
+
args: [{ selector: 'app-cod-form-step-two', template: "<form autocomplete=\"off\" [formGroup]=\"codFormStepTwo\" class=\"grid\">\r\n\r\n <div class=\"col\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Nombres'\"\r\n [control]=\"codFormStepTwo.controls['student_name']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['student_id_card_type'].value\"\r\n [control]=\"codFormStepTwo.controls['student_id_card_type']\"\r\n [selectCode]=\"codFormStepTwo.controls['student_id_card_type'].value === null ? 'Tipo de documento' : codFormStepTwo.controls['student_id_card_type'].value\"\r\n [isRequired]=\"true\"\r\n [data]=\"idTypes\"\r\n (eventSelect)=\"selectIdType($event)\"\r\n [defaultText]=\"'Tipo de documento'\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['country'].value\"\r\n [control]=\"codFormStepTwo.controls['country']\"\r\n [selectCode]=\"codFormStepTwo.controls['country'].value === null ? 'Pa\u00EDs de residencia' : codFormStepTwo.controls['country'].value\"\r\n (eventSelect)=\"selectCountry($event)\"\r\n [data]=\"countries\"\r\n [defaultText]=\"'Pa\u00EDs de residencia'\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['city'].value\"\r\n [control]=\"codFormStepTwo.controls['city']\"\r\n [selectCode]=\"codFormStepTwo.controls['city'].value === null ? 'Ciudad de residencia' : codFormStepTwo.controls['city'].value\"\r\n (eventSelect)=\"selectCity($event)\"\r\n [data]=\"cities\"\r\n [defaultText]=\"'Ciudad de residencia'\"\r\n ></ipt-select>\r\n <ipt-input\r\n onfocus=\"(this.type='date')\"\r\n [inputType]=\"'date'\"\r\n [control]=\"codFormStepTwo.controls['birthdate']\"\r\n [placeHolder]=\"'Fecha de nacimiento'\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['gender'].value\"\r\n [control]=\"codFormStepTwo.controls['gender']\"\r\n [data]=\"genders\"\r\n (eventSelect)=\"selectGender($event)\"\r\n [defaultText]=\"'G\u00E9nero'\"\r\n ></ipt-select>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['stratum'].value\"\r\n [control]=\"codFormStepTwo.controls['stratum']\"\r\n [data]=\"stratums\"\r\n (eventSelect)=\"selectStratum($event)\"\r\n [defaultText]=\"'Estrato'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Grado'\"\r\n [control]=\"codFormStepTwo.controls['grade']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['student_phone_indicative'].value\"\r\n [control]=\"codFormStepTwo.controls['student_phone_indicative']\"\r\n [data]=\"indicatives\"\r\n (eventSelect)=\"selectIndicatives($event)\"\r\n [defaultText]=\"'Indicativo'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'email'\"\r\n [placeHolder]=\"'Correo electr\u00F3nico'\"\r\n [control]=\"codFormStepTwo.controls['student_email']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'password'\"\r\n [placeHolder]=\"'Repetir contrase\u00F1a'\"\r\n [control]=\"codFormStepTwo.controls['re_password']\"\r\n ></ipt-input>\r\n </div>\r\n\r\n <div class=\"col\">\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Apellidos'\"\r\n [control]=\"codFormStepTwo.controls['student_last_name']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de documento'\"\r\n [control]=\"codFormStepTwo.controls['student_id_card']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['state'].value\"\r\n [control]=\"codFormStepTwo.controls['state']\"\r\n [selectCode]=\"codFormStepTwo.controls['state'].value === null ? 'Departamento o estado' : codFormStepTwo.controls['state'].value\"\r\n [isRequired]=\"true\"\r\n (eventSelect)=\"selectState($event)\"\r\n [data]=\"states\"\r\n [defaultText]=\"'Departamento o estado'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Direcci\u00F3n'\"\r\n [control]=\"codFormStepTwo.controls['student_address']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'Edad'\"\r\n [control]=\"codFormStepTwo.controls['age']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Nickname'\"\r\n [control]=\"codFormStepTwo.controls['nickname']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'text'\"\r\n [placeHolder]=\"'Ocupaci\u00F3n'\"\r\n [control]=\"codFormStepTwo.controls['student_occupation']\"\r\n ></ipt-input>\r\n <ipt-select\r\n [initialValue]=\"codFormStepTwo.controls['civil_status'].value\"\r\n [control]=\"codFormStepTwo.controls['civil_status']\"\r\n [data]=\"civilStatus\"\r\n (eventSelect)=\"selectCivilStatus($event)\"\r\n [defaultText]=\"'Estado civil'\"\r\n ></ipt-select>\r\n <ipt-input\r\n [inputType]=\"'number'\"\r\n [placeHolder]=\"'N\u00FAmero de tel\u00E9fono'\"\r\n [control]=\"codFormStepTwo.controls['student_phone_number']\"\r\n ></ipt-input>\r\n <ipt-input\r\n [inputType]=\"'password'\"\r\n [placeHolder]=\"'Contrase\u00F1a'\"\r\n [control]=\"codFormStepTwo.controls['password']\"\r\n ></ipt-input>\r\n </div>\r\n\r\n <div class=\"col-12\"></div>\r\n\r\n</form>\r\n\r\n<div class=\"flex mt-3 align-items-center gap-3\">\r\n <span *ngIf=\"codFormStepTwo.invalid && codFormStepTwo.touched\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">{{ errorMessage }}</span>\r\n <button type=\"submit\" class=\"ml-auto p-button-sm\" (click)=\"sendForm()\" pButton label=\"Siguiente\" icon=\"pi pi-arrow-right\"></button>\r\n</div>\r\n", styles: [""] }]
|
|
249
|
+
}], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.ParameterService }]; }, propDecorators: { initialData: [{
|
|
250
|
+
type: Input
|
|
251
|
+
}], changeStepEvent: [{
|
|
252
|
+
type: Output
|
|
253
|
+
}] } });
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLWZvcm0tc3RlcC10d28uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvZC9zdGVwcy9jb2QtZm9ybS1zdGVwLXR3by9jb2QtZm9ybS1zdGVwLXR3by5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29kL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtdHdvL2NvZC1mb3JtLXN0ZXAtdHdvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBMEIsVUFBVSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxFQUFFLEdBQUcsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQXNCLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7QUFPOUUsTUFBTSxPQUFPLHVCQUF3QixTQUFRLFlBQVk7SUFvQnZELFlBQ1UsRUFBZSxFQUNmLGdCQUFrQztRQUUxQyxLQUFLLEVBQUUsQ0FBQztRQUhBLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBcEJsQyxvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFPdkQsaUJBQVksR0FBVywyQkFBMkIsQ0FBQztRQUNuRCxjQUFTLEdBQVksS0FBSyxDQUFDO1FBSTNCLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFHcEIsMEJBQTBCO1FBQzFCLGFBQVEsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQU83QyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3JCLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUVuRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7Z0JBQ3RFLElBQUksQ0FBQyxZQUFZLEdBQUcsNkNBQTZDLENBQUM7YUFDbkU7aUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDbEYsSUFBSSxDQUFDLFlBQVksR0FBRywrQ0FBK0MsQ0FBQzthQUNyRTtpQkFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDekUsSUFBSSxDQUFDLFlBQVksR0FBRyw4Q0FBOEMsQ0FBQzthQUNwRTtpQkFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLEVBQUU7Z0JBQy9HLElBQUksQ0FBQyxZQUFZLEdBQUcsOEJBQThCLENBQUM7YUFDcEQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxZQUFZLEdBQUcsK0JBQStCLENBQUM7YUFDckQ7aUJBQ0s7Z0JBQ0osSUFBSSxDQUFDLFlBQVksR0FBRywwQkFBMEIsQ0FBQzthQUNoRDtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELHFCQUFxQjtRQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM5QixJQUFJLGlCQUFpQixHQUF1QixJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25HLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ2xDLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEQsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNyQyxvQkFBb0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckQsZUFBZSxFQUFFLENBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRyxpQkFBaUIsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDakcsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RixhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsa0JBQWtCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0MsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENB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QWMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3RDtJQUNILENBQUM7O29IQTFQVSx1QkFBdUI7d0dBQXZCLHVCQUF1Qiw2S0NacEMscTVMQWdKQTsyRkRwSWEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHVCQUF1QjtpSUFLeEIsV0FBVztzQkFBbkIsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBQYXJhbWV0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9wYXJhbWV0ZXJzLXNlcnZpY2UvcGFyYW1ldGVycy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgbWFwLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29kRm9ybUNvbnRyb2xzIH0gZnJvbSAnLi4vLi4vbG9naWMvY29kLWZvcm0tY29udHJvbHMnO1xyXG5pbXBvcnQgeyBDb2RGb3JtU3RlcHMsIGxvY2FsU3RvcmFnZVZhbHVlcyB9IGZyb20gJy4uLy4uL2xvZ2ljL2NvZC1mb3JtLXN0ZXBzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNvZC1mb3JtLXN0ZXAtdHdvJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29kLWZvcm0tc3RlcC10d28uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvZC1mb3JtLXN0ZXAtdHdvLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29kRm9ybVN0ZXBUd29Db21wb25lbnQgZXh0ZW5kcyBDb2RGb3JtU3RlcHMgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGluaXRpYWxEYXRhPzogYW55O1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2VTdGVwRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgY29kRm9ybVN0ZXBUd28hOiBGb3JtR3JvdXA7XHJcbiAgY291bnRyeVNlbGVjdGVkOiBhbnk7XHJcbiAgY291bnRyaWVzOiBhbnk7XHJcbiAgc3RhdGVzOiBhbnk7XHJcbiAgY2l0aWVzOiBhbnk7XHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnRmFsdGFuIGNhbXBvcyBwb3IgbGxlbmFyLic7XHJcbiAgaGFzRXJyb3JzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaWRUeXBlczogYW55O1xyXG4gIGluZGljYXRpdmVzOiBhbnk7XHJcbiAgY2l2aWxTdGF0dXM6IGFueTtcclxuICBnZW5kZXJzOiBhbnlbXSA9IFtdO1xyXG4gIHN0cmF0dW1zOiBhbnk7XHJcblxyXG4gIC8vIENvbnRyb2xzIGRlbCBmb3JtdWxhcmlvXHJcbiAgY29udHJvbHMgPSBuZXcgQ29kRm9ybUNvbnRyb2xzKCkuY29udHJvbHNbMV07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHBhcmFtZXRlclNlcnZpY2U6IFBhcmFtZXRlclNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0UGFyYW1ldGVycygpO1xyXG4gICAgdGhpcy5pbml0Rm9ybSgpO1xyXG4gICAgdGhpcy5zdGFydExvY2FsU3RvcmFnZVdvcmsoKTtcclxuICAgIHRoaXMudmFsaWRhdGVFcnJvcnMoKVxyXG4gICAgaWYgKHRoaXMuaW5pdGlhbERhdGEpIHRoaXMuc2V0RGF0YUZyb21QcmV2aXVzQ29kKCk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RDb3VudHJ5KHRoaXMubG9jYWxTdG9yYWdlQ09ELmdldENvZEZvcm1EYXRhKDIsICdjb3VudHJ5JykpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF0YUZyb21QcmV2aXVzQ29kKCkge1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9uYW1lJ10uc2V0VmFsdWUodGhpcy5pbml0aWFsRGF0YS5uYW1lKTtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfbGFzdF9uYW1lJ10uc2V0VmFsdWUodGhpcy5pbml0aWFsRGF0YS5sYXN0X25hbWUpO1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9pZF9jYXJkX3R5cGUnXS5zZXRWYWx1ZSh0aGlzLmluaXRpYWxEYXRhLmlkX2NhcmRfdHlwZSk7XHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X2lkX2NhcmQnXS5zZXRWYWx1ZSh0aGlzLmluaXRpYWxEYXRhLmlkX2NhcmQpO1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9waG9uZV9pbmRpY2F0aXZlJ10uc2V0VmFsdWUodGhpcy5pbml0aWFsRGF0YS5waG9uZV9pbmRpY2F0aXZlKTtcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfcGhvbmVfbnVtYmVyJ10uc2V0VmFsdWUodGhpcy5pbml0aWFsRGF0YS5waG9uZV9udW1iZXIpO1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snYmlydGhkYXRlJ10uc2V0VmFsdWUodGhpcy5pbml0aWFsRGF0YS5iaXJ0aGRhdGUpO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVFcnJvcnMoKSB7XHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoY2hhbmdlcyA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X25hbWUnXS5oYXNFcnJvcignbWlubGVuZ3RoJykpIHtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdMb3Mgbm9tYnJlcyBkZWJlbiB0ZW5lciBtw61uaW1vIDMgY2FyYWN0ZXJlcyc7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9sYXN0X25hbWUnXS5oYXNFcnJvcignbWlubGVuZ3RoJykpIHtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdMb3MgYXBlbGxpZG9zIGRlYmVuIHRlbmVyIG3DrW5pbW8gNSBjYXJhY3RlcmVzJztcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydwYXNzd29yZCddLmhhc0Vycm9yKCdtaW5sZW5ndGgnKSkge1xyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0xhIGNvbnRyYXNlw7FhIGRlYmUgdGVuZXIgbcOtbmltbyA2IGNhcmFjdGVyZXMnO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3Bhc3N3b3JkJ10udmFsdWUgIT09IHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3JlX3Bhc3N3b3JkJ10udmFsdWUpIHtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdMYXMgY29udHJhc2XDsWFzIG5vIGNvaW5jaWRlbic7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snYWdlJ10uZXJyb3JzKSB7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmVjaGEgZGUgbmFjaW1pZW50byBubyB2w6FsaWRhJztcclxuICAgICAgfVxyXG4gICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmFsdGFuIGNhbXBvcyBwb3IgbGxlbmFyJztcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHN0YXJ0TG9jYWxTdG9yYWdlV29yaygpIHtcclxuICAgIHRoaXMuY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcclxuICAgICAgbGV0IGxvY2FsU3RvcmFnZVZhbHVlOiBsb2NhbFN0b3JhZ2VWYWx1ZXMgPSB0aGlzLnJlYWRBbmRXcml0ZUxTKDIsIGNvbnRyb2wubmFtZSk7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbY29udHJvbC5uYW1lXS5zZXRWYWx1ZShsb2NhbFN0b3JhZ2VWYWx1ZS52YWx1ZSk7XHJcbiAgICAgIHRoaXMubGlzdGVuRm9ybUNoYW5nZXMoMiwgY29udHJvbC5uYW1lLCB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzW2NvbnRyb2wubmFtZV0udmFsdWVDaGFuZ2VzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW5pdEZvcm0oKSB7XHJcbiAgICB0aGlzLmNvZEZvcm1TdGVwVHdvID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHN0dWRlbnRfYWRkcmVzczogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sIFtdXSxcclxuICAgICAgYmlydGhkYXRlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSwgW11dLFxyXG4gICAgICBjb3VudHJ5OiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSwgW11dLFxyXG4gICAgICBzdGF0ZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sIFtdXSxcclxuICAgICAgY2l0eTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sIFtdXSxcclxuICAgICAgc3R1ZGVudF9pZF9jYXJkX3R5cGU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBbXV0sXHJcbiAgICAgIHN0dWRlbnRfaWRfY2FyZDogWyAnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDUpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyMCldXSxcclxuICAgICAgc3R1ZGVudF9sYXN0X25hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDUpLCBWYWxpZGF0b3JzLm1heExlbmd0aCgzMildXSxcclxuICAgICAgc3R1ZGVudF9uYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCgzKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzIpXV0sXHJcbiAgICAgIHN0dWRlbnRfZW1haWw6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMuZW1haWxdXSxcclxuICAgICAgbmlja25hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgZ2VuZGVyOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGFnZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sIFtdXSxcclxuICAgICAgc3R1ZGVudF9vY2N1cGF0aW9uOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHN0cmF0dW06IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgZ3JhZGU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgY2l2aWxfc3RhdHVzOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIHN0dWRlbnRfcGhvbmVfaW5kaWNhdGl2ZTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sIFtdXSxcclxuICAgICAgc3R1ZGVudF9waG9uZV9udW1iZXI6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTUpXV0sXHJcbiAgICAgIHBhc3N3b3JkOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1pbkxlbmd0aCg2KV1dLFxyXG4gICAgICByZV9wYXNzd29yZDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNildXSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENhbGN1bGFyIGVkYWQgeSBzZXRlYXIgdmFsb3JcclxuICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2JpcnRoZGF0ZSddLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoY2hhbmdlKSA9PiB7XHJcbiAgICAgICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBsZXQgYmlydGhkYXkgPSBuZXcgRGF0ZShjaGFuZ2UpO1xyXG4gICAgICAgIGxldCBhZ2UgPSB0b2RheS5nZXRGdWxsWWVhcigpIC0gYmlydGhkYXkuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICBsZXQgbW9udGggPSB0b2RheS5nZXRNb250aCgpIC0gYmlydGhkYXkuZ2V0TW9udGgoKTtcclxuXHJcbiAgICAgICAgaWYgKG1vbnRoIDwgMCB8fCAobW9udGggPT09IDAgJiYgdG9kYXkuZ2V0RGF0ZSgpIDwgYmlydGhkYXkuZ2V0RGF0ZSgpKSkge1xyXG4gICAgICAgICAgYWdlLS07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYWdlIDwgMykge1xyXG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmVjaGEgZGUgbmFjaW1pZW50byBubyB2w6FsaWRhJ1xyXG4gICAgICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snYmlydGhkYXRlJ10uc2V0RXJyb3JzKHtcclxuICAgICAgICAgICAgaW52YWxpZEFnZTogdHJ1ZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snYmlydGhkYXRlJ10uc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snYWdlJ10uc2V0VmFsdWUoYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldFBhcmFtZXRlcnMoKSB7XHJcbiAgICB0aGlzLnBhcmFtZXRlclNlcnZpY2UuZ2V0Q2FyZFR5cGVzKCdjb2wnKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHRoaXMuaWRUeXBlcyA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5nZXRJbmRpY2F0aXZlcygpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcclxuICAgICAgdGhpcy5pbmRpY2F0aXZlcyA9IHJlc3BvbnNlLmRhdGE7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5nZXRDb3VudHJpZXMoKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgIHRoaXMuY291bnRyaWVzID0gcmVzcG9uc2UuZGF0YTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLmdldFN0cmF0dW1zKCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLnN0cmF0dW1zID0gcmVzcG9uc2UuZGF0YTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLmdldENpdmlsU3RhdHVzKCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICB0aGlzLmNpdmlsU3RhdHVzID0gcmVzcG9uc2UuZGF0YTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLmdldEdlbmRlcnMoKS5waXBlKFxyXG4gICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHJlc3BvbnNlLmRhdGEpXHJcbiAgICApXHJcbiAgICAuc3Vic2NyaWJlKChnZW5kZXJzOiBhbnlbXSkgPT4ge1xyXG4gICAgICBnZW5kZXJzLmZvckVhY2goZ2VuZGVyID0+IHtcclxuICAgICAgICBsZXQgZ2VuZGVySXRlbSA9IHtcclxuICAgICAgICAgIGNvZGU6IGdlbmRlci5jb2RlLFxyXG4gICAgICAgICAgbmFtZTogZ2VuZGVyLm5hbWVfc3BhbmlzaFxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdlbmRlcnMucHVzaChnZW5kZXJJdGVtKVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNlbmRGb3JtKCkge1xyXG4gICAgdGhpcy5jb2RGb3JtU3RlcFR3by5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICBpZiAodGhpcy5jb2RGb3JtU3RlcFR3by5pbnZhbGlkKSByZXR1cm47XHJcblxyXG4gICAgLy8gTW92ZXJub3MgYWwgcGFzbyAzXHJcbiAgICB0aGlzLmNoYW5nZVN0ZXBFdmVudC5lbWl0KDIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdGUoc3RhdGU6IGFueSkge1xyXG4gICAgdGhpcy5nZXRDaXR5KHN0YXRlKTtcclxuICB9XHJcblxyXG4gIGdldENpdHkoc3RhdGU6IGFueSkge1xyXG4gICAgdGhpcy5wYXJhbWV0ZXJTZXJ2aWNlLmdldENpdGllc0J5U3RhdGUoc3RhdGUpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcclxuICAgICAgdGhpcy5jaXRpZXMgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICB0aGlzLnNlbGVjdENpdHkodGhpcy5sb2NhbFN0b3JhZ2VDT0QuZ2V0Q29kRm9ybURhdGEoMiwgJ2NpdHknKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIEV2ZW50b3MgZGUgbG9zIHNlbGVjdFxyXG4gIHNlbGVjdENvdW50cnkoY291bnRyeTogYW55KSB7XHJcbiAgICBpZiAoY291bnRyeSAhPT0gJ1Bhw61zIGRlIHJlc2lkZW5jaWEnKSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NvdW50cnknXS5zZXRWYWx1ZShjb3VudHJ5KTtcclxuICAgICAgbGV0IGlzbyA9ICcnO1xyXG4gICAgICBpZiAoY291bnRyeSA9PT0gJzEnKSBpc28gPSAnbnVsbCc7XHJcbiAgICAgIGlmIChjb3VudHJ5ID09PSAnMicpIGlzbyA9ICdjb2wnO1xyXG4gICAgICBpZiAoY291bnRyeSA9PT0gJzMnKSBpc28gPSAndmVuJztcclxuICAgICAgaWYgKGNvdW50cnkgPT09ICc0JykgaXNvID0gJ3VzYSc7XHJcbiAgICAgIHRoaXMucGFyYW1ldGVyU2VydmljZS5nZXRTdGF0ZXNCeUNvdW50cnkoaXNvKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZXMgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0U3RhdGUodGhpcy5sb2NhbFN0b3JhZ2VDT0QuZ2V0Q29kRm9ybURhdGEoMiwgJ3N0YXRlJykpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NvdW50cnknXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIH1cclxuICAgIHRoaXMuY291bnRyeVNlbGVjdGVkID0gY291bnRyeTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFN0YXRlKHN0YXRlOiBhbnkpIHtcclxuICAgIGlmIChzdGF0ZSAhPT0gJ0RlcGFydGFtZW50byBvIGVzdGFkbycpIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3RhdGUnXS5zZXRWYWx1ZShzdGF0ZSk7XHJcbiAgICAgIHRoaXMuZ2V0U3RhdGUoc3RhdGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3RhdGUnXS5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snY2l0eSddLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICB0aGlzLmNpdGllcyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0Q2l0eShjaXR5OiBhbnkpIHtcclxuICAgIGlmIChjaXR5ICE9PSAnQ2l1ZGFkIGRlIHJlc2lkZW5jaWEnKSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NpdHknXS5zZXRWYWx1ZShjaXR5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NpdHknXS5zZXRWYWx1ZShudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdElkVHlwZShpZFR5cGU6IGFueSkge1xyXG4gICAgaWYgKGlkVHlwZSAhPT0gJ1RpcG8gZGUgZG9jdW1lbnRvJykge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X2lkX2NhcmRfdHlwZSddLnNldFZhbHVlKGlkVHlwZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X2lkX2NhcmRfdHlwZSddLnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0SW5kaWNhdGl2ZXMoaW5kaWNhdGl2ZTogYW55KSB7XHJcbiAgICBpZiAoaW5kaWNhdGl2ZSAhPT0gJ0luZGljYXRpdm8nKSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfcGhvbmVfaW5kaWNhdGl2ZSddLnNldFZhbHVlKGluZGljYXRpdmUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9waG9uZV9pbmRpY2F0aXZlJ10uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RHZW5kZXIoZ2VuZGVyOiBhbnkpIHtcclxuICAgIGlmIChnZW5kZXIgIT09ICdHw6luZXJvJykge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydnZW5kZXInXS5zZXRWYWx1ZShnZW5kZXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snZ2VuZGVyJ10uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RTdHJhdHVtKHN0cmF0dW06IGFueSkge1xyXG4gICAgaWYgKHN0cmF0dW0gIT09ICdFc3RyYXRvJykge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHJhdHVtJ10uc2V0VmFsdWUoc3RyYXR1bSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHJhdHVtJ10uc2V0VmFsdWUobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDaXZpbFN0YXR1cyhjaXZpbF9zdGF0dXM6IGFueSkge1xyXG4gICAgaWYgKGNpdmlsX3N0YXR1cyAhPT0gJ0VzdGFkbyBjaXZpbCcpIHtcclxuICAgICAgdGhpcy5jb2RGb3JtU3RlcFR3by5jb250cm9sc1snY2l2aWxfc3RhdHVzJ10uc2V0VmFsdWUoY2l2aWxfc3RhdHVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NpdmlsX3N0YXR1cyddLnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImNvZEZvcm1TdGVwVHdvXCIgY2xhc3M9XCJncmlkXCI+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgIDxpcHQtaW5wdXRcclxuICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxyXG4gICAgICBbcGxhY2VIb2xkZXJdPVwiJ05vbWJyZXMnXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfbmFtZSddXCJcclxuICAgID48L2lwdC1pbnB1dD5cclxuICAgIDxpcHQtc2VsZWN0XHJcbiAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfaWRfY2FyZF90eXBlJ10udmFsdWVcIlxyXG4gICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9pZF9jYXJkX3R5cGUnXVwiXHJcbiAgICAgIFtzZWxlY3RDb2RlXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X2lkX2NhcmRfdHlwZSddLnZhbHVlID09PSBudWxsID8gJ1RpcG8gZGUgZG9jdW1lbnRvJyA6IGNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X2lkX2NhcmRfdHlwZSddLnZhbHVlXCJcclxuICAgICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICAgIFtkYXRhXT1cImlkVHlwZXNcIlxyXG4gICAgICAoZXZlbnRTZWxlY3QpPVwic2VsZWN0SWRUeXBlKCRldmVudClcIlxyXG4gICAgICBbZGVmYXVsdFRleHRdPVwiJ1RpcG8gZGUgZG9jdW1lbnRvJ1wiXHJcbiAgICA+PC9pcHQtc2VsZWN0PlxyXG4gICAgPGlwdC1zZWxlY3RcclxuICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snY291bnRyeSddLnZhbHVlXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NvdW50cnknXVwiXHJcbiAgICAgIFtzZWxlY3RDb2RlXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydjb3VudHJ5J10udmFsdWUgPT09IG51bGwgPyAnUGHDrXMgZGUgcmVzaWRlbmNpYScgOiBjb2RGb3JtU3RlcFR3by5jb250cm9sc1snY291bnRyeSddLnZhbHVlXCJcclxuICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdENvdW50cnkoJGV2ZW50KVwiXHJcbiAgICAgIFtkYXRhXT1cImNvdW50cmllc1wiXHJcbiAgICAgIFtkZWZhdWx0VGV4dF09XCInUGHDrXMgZGUgcmVzaWRlbmNpYSdcIlxyXG4gICAgPjwvaXB0LXNlbGVjdD5cclxuICAgIDxpcHQtc2VsZWN0XHJcbiAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NpdHknXS52YWx1ZVwiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydjaXR5J11cIlxyXG4gICAgICBbc2VsZWN0Q29kZV09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snY2l0eSddLnZhbHVlID09PSBudWxsID8gJ0NpdWRhZCBkZSByZXNpZGVuY2lhJyA6IGNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydjaXR5J10udmFsdWVcIlxyXG4gICAgICAoZXZlbnRTZWxlY3QpPVwic2VsZWN0Q2l0eSgkZXZlbnQpXCJcclxuICAgICAgW2RhdGFdPVwiY2l0aWVzXCJcclxuICAgICAgW2RlZmF1bHRUZXh0XT1cIidDaXVkYWQgZGUgcmVzaWRlbmNpYSdcIlxyXG4gICAgPjwvaXB0LXNlbGVjdD5cclxuICAgIDxpcHQtaW5wdXRcclxuICAgICAgb25mb2N1cz1cIih0aGlzLnR5cGU9J2RhdGUnKVwiXHJcbiAgICAgIFtpbnB1dFR5cGVdPVwiJ2RhdGUnXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2JpcnRoZGF0ZSddXCJcclxuICAgICAgW3BsYWNlSG9sZGVyXT1cIidGZWNoYSBkZSBuYWNpbWllbnRvJ1wiXHJcbiAgICA+PC9pcHQtaW5wdXQ+XHJcbiAgICAgPGlwdC1zZWxlY3RcclxuICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snZ2VuZGVyJ10udmFsdWVcIlxyXG4gICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snZ2VuZGVyJ11cIlxyXG4gICAgICBbZGF0YV09XCJnZW5kZXJzXCJcclxuICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdEdlbmRlcigkZXZlbnQpXCJcclxuICAgICAgW2RlZmF1bHRUZXh0XT1cIidHw6luZXJvJ1wiXHJcbiAgICA+PC9pcHQtc2VsZWN0PlxyXG4gICAgPGlwdC1zZWxlY3RcclxuICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3RyYXR1bSddLnZhbHVlXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0cmF0dW0nXVwiXHJcbiAgICAgIFtkYXRhXT1cInN0cmF0dW1zXCJcclxuICAgICAgKGV2ZW50U2VsZWN0KT1cInNlbGVjdFN0cmF0dW0oJGV2ZW50KVwiXHJcbiAgICAgIFtkZWZhdWx0VGV4dF09XCInRXN0cmF0bydcIlxyXG4gICAgPjwvaXB0LXNlbGVjdD5cclxuICAgIDxpcHQtaW5wdXRcclxuICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxyXG4gICAgICBbcGxhY2VIb2xkZXJdPVwiJ0dyYWRvJ1wiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydncmFkZSddXCJcclxuICAgID48L2lwdC1pbnB1dD5cclxuICAgIDxpcHQtc2VsZWN0XHJcbiAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfcGhvbmVfaW5kaWNhdGl2ZSddLnZhbHVlXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfcGhvbmVfaW5kaWNhdGl2ZSddXCJcclxuICAgICAgW2RhdGFdPVwiaW5kaWNhdGl2ZXNcIlxyXG4gICAgICAoZXZlbnRTZWxlY3QpPVwic2VsZWN0SW5kaWNhdGl2ZXMoJGV2ZW50KVwiXHJcbiAgICAgIFtkZWZhdWx0VGV4dF09XCInSW5kaWNhdGl2bydcIlxyXG4gICAgPjwvaXB0LXNlbGVjdD5cclxuICAgIDxpcHQtaW5wdXRcclxuICAgICAgW2lucHV0VHlwZV09XCInZW1haWwnXCJcclxuICAgICAgW3BsYWNlSG9sZGVyXT1cIidDb3JyZW8gZWxlY3Ryw7NuaWNvJ1wiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X2VtYWlsJ11cIlxyXG4gICAgPjwvaXB0LWlucHV0PlxyXG4gICAgPGlwdC1pbnB1dFxyXG4gICAgICBbaW5wdXRUeXBlXT1cIidwYXNzd29yZCdcIlxyXG4gICAgICBbcGxhY2VIb2xkZXJdPVwiJ1JlcGV0aXIgY29udHJhc2XDsWEnXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3JlX3Bhc3N3b3JkJ11cIlxyXG4gICAgPjwvaXB0LWlucHV0PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICA8aXB0LWlucHV0XHJcbiAgICAgIFtpbnB1dFR5cGVdPVwiJ3RleHQnXCJcclxuICAgICAgW3BsYWNlSG9sZGVyXT1cIidBcGVsbGlkb3MnXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfbGFzdF9uYW1lJ11cIlxyXG4gICAgPjwvaXB0LWlucHV0PlxyXG4gICAgPGlwdC1pbnB1dFxyXG4gICAgICBbaW5wdXRUeXBlXT1cIidudW1iZXInXCJcclxuICAgICAgW3BsYWNlSG9sZGVyXT1cIidOw7ptZXJvIGRlIGRvY3VtZW50bydcIlxyXG4gICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9pZF9jYXJkJ11cIlxyXG4gICAgPjwvaXB0LWlucHV0PlxyXG4gICAgPGlwdC1zZWxlY3RcclxuICAgICAgW2luaXRpYWxWYWx1ZV09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3RhdGUnXS52YWx1ZVwiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdGF0ZSddXCJcclxuICAgICAgW3NlbGVjdENvZGVdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0YXRlJ10udmFsdWUgPT09IG51bGwgPyAnRGVwYXJ0YW1lbnRvIG8gZXN0YWRvJyA6IGNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdGF0ZSddLnZhbHVlXCJcclxuICAgICAgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RTdGF0ZSgkZXZlbnQpXCJcclxuICAgICAgW2RhdGFdPVwic3RhdGVzXCJcclxuICAgICAgW2RlZmF1bHRUZXh0XT1cIidEZXBhcnRhbWVudG8gbyBlc3RhZG8nXCJcclxuICAgID48L2lwdC1zZWxlY3Q+XHJcbiAgICA8aXB0LWlucHV0XHJcbiAgICAgIFtpbnB1dFR5cGVdPVwiJ3RleHQnXCJcclxuICAgICAgW3BsYWNlSG9sZGVyXT1cIidEaXJlY2Npw7NuJ1wiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWydzdHVkZW50X2FkZHJlc3MnXVwiXHJcbiAgICA+PC9pcHQtaW5wdXQ+XHJcbiAgICA8aXB0LWlucHV0XHJcbiAgICAgIFtpbnB1dFR5cGVdPVwiJ251bWJlcidcIlxyXG4gICAgICBbcGxhY2VIb2xkZXJdPVwiJ0VkYWQnXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2FnZSddXCJcclxuICAgID48L2lwdC1pbnB1dD5cclxuICAgIDxpcHQtaW5wdXRcclxuICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxyXG4gICAgICBbcGxhY2VIb2xkZXJdPVwiJ05pY2tuYW1lJ1wiXHJcbiAgICAgIFtjb250cm9sXT1cImNvZEZvcm1TdGVwVHdvLmNvbnRyb2xzWyduaWNrbmFtZSddXCJcclxuICAgID48L2lwdC1pbnB1dD5cclxuICAgIDxpcHQtaW5wdXRcclxuICAgICAgW2lucHV0VHlwZV09XCIndGV4dCdcIlxyXG4gICAgICBbcGxhY2VIb2xkZXJdPVwiJ09jdXBhY2nDs24nXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3N0dWRlbnRfb2NjdXBhdGlvbiddXCJcclxuICAgID48L2lwdC1pbnB1dD5cclxuICAgIDxpcHQtc2VsZWN0XHJcbiAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NpdmlsX3N0YXR1cyddLnZhbHVlXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ2NpdmlsX3N0YXR1cyddXCJcclxuICAgICAgW2RhdGFdPVwiY2l2aWxTdGF0dXNcIlxyXG4gICAgICAoZXZlbnRTZWxlY3QpPVwic2VsZWN0Q2l2aWxTdGF0dXMoJGV2ZW50KVwiXHJcbiAgICAgIFtkZWZhdWx0VGV4dF09XCInRXN0YWRvIGNpdmlsJ1wiXHJcbiAgICA+PC9pcHQtc2VsZWN0PlxyXG4gICAgPGlwdC1pbnB1dFxyXG4gICAgICBbaW5wdXRUeXBlXT1cIidudW1iZXInXCJcclxuICAgICAgW3BsYWNlSG9sZGVyXT1cIidOw7ptZXJvIGRlIHRlbMOpZm9ubydcIlxyXG4gICAgICBbY29udHJvbF09XCJjb2RGb3JtU3RlcFR3by5jb250cm9sc1snc3R1ZGVudF9waG9uZV9udW1iZXInXVwiXHJcbiAgICA+PC9pcHQtaW5wdXQ+XHJcbiAgICA8aXB0LWlucHV0XHJcbiAgICAgIFtpbnB1dFR5cGVdPVwiJ3Bhc3N3b3JkJ1wiXHJcbiAgICAgIFtwbGFjZUhvbGRlcl09XCInQ29udHJhc2XDsWEnXCJcclxuICAgICAgW2NvbnRyb2xdPVwiY29kRm9ybVN0ZXBUd28uY29udHJvbHNbJ3Bhc3N3b3JkJ11cIlxyXG4gICAgPjwvaXB0LWlucHV0PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+PC9kaXY+XHJcblxyXG48L2Zvcm0+XHJcblxyXG48ZGl2IGNsYXNzPVwiZmxleCBtdC0zIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG4gIDxzcGFuICpuZ0lmPVwiY29kRm9ybVN0ZXBUd28uaW52YWxpZCAmJiBjb2RGb3JtU3RlcFR3by50b3VjaGVkXCIgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZm9udC1ib2xkIHRleHQtY2VudGVyIG10LTEgcHktMiBiZy1yZWQtMTAwIHctZnVsbCBib3JkZXItcm91bmQteGxcIj57eyBlcnJvck1lc3NhZ2UgfX08L3NwYW4+XHJcbiAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJtbC1hdXRvIHAtYnV0dG9uLXNtXCIgKGNsaWNrKT1cInNlbmRGb3JtKClcIiBwQnV0dG9uIGxhYmVsPVwiU2lndWllbnRlXCIgaWNvbj1cInBpIHBpLWFycm93LXJpZ2h0XCI+PC9idXR0b24+XHJcbjwvZGl2PlxyXG4iXX0=
|