dmencu 0.3.34 → 0.3.36
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/dist/client/client/client.d.ts +1 -1
- package/dist/client/client/client.js +540 -539
- package/dist/client/client/menu.js +2 -2
- package/dist/client/unlogged/abrir-formulario.d.ts +12 -12
- package/dist/client/unlogged/abrir-formulario.js +102 -102
- package/dist/client/unlogged/bypass-formulario.d.ts +200 -200
- package/dist/client/unlogged/bypass-formulario.js +1041 -1041
- package/dist/client/unlogged/redux-formulario.d.ts +349 -349
- package/dist/client/unlogged/redux-formulario.js +317 -317
- package/dist/client/unlogged/tipos.d.ts +469 -469
- package/dist/client/unlogged/tipos.js +21 -21
- package/dist/server/server/app-dmencu.d.ts +1511 -1511
- package/dist/server/server/app-dmencu.js +649 -649
- package/dist/server/server/def-config.d.ts +1 -1
- package/dist/server/server/def-config.js +14 -14
- package/dist/server/server/procedures-dmencu.d.ts +6 -6
- package/dist/server/server/procedures-dmencu.js +854 -854
- package/dist/server/server/server-dmencu.d.ts +1 -1
- package/dist/server/server/server-dmencu.js +20 -20
- package/dist/server/server/table-acciones.d.ts +3 -3
- package/dist/server/server/table-acciones.js +53 -53
- package/dist/server/server/table-areas.d.ts +3 -3
- package/dist/server/server/table-areas.js +88 -88
- package/dist/server/server/table-comunas.d.ts +3 -3
- package/dist/server/server/table-comunas.js +28 -28
- package/dist/server/server/table-control_campo.d.ts +11 -11
- package/dist/server/server/table-control_campo.js +71 -71
- package/dist/server/server/table-control_resumen.d.ts +3 -3
- package/dist/server/server/table-control_resumen.js +18 -18
- package/dist/server/server/table-encuestadores.d.ts +3 -3
- package/dist/server/server/table-encuestadores.js +18 -18
- package/dist/server/server/table-estados.d.ts +3 -3
- package/dist/server/server/table-estados.js +60 -60
- package/dist/server/server/table-estados_acciones.d.ts +3 -3
- package/dist/server/server/table-estados_acciones.js +38 -38
- package/dist/server/server/table-hogares.d.ts +3 -3
- package/dist/server/server/table-hogares.js +156 -156
- package/dist/server/server/table-hogares_sup.d.ts +3 -3
- package/dist/server/server/table-hogares_sup.js +191 -191
- package/dist/server/server/table-lotes.d.ts +3 -3
- package/dist/server/server/table-lotes.js +35 -35
- package/dist/server/server/table-mis_encuestadores.d.ts +3 -3
- package/dist/server/server/table-mis_encuestadores.js +56 -56
- package/dist/server/server/table-mis_tareas.d.ts +3 -3
- package/dist/server/server/table-mis_tareas.js +18 -18
- package/dist/server/server/table-mis_tareas_areas.d.ts +3 -3
- package/dist/server/server/table-mis_tareas_areas.js +20 -20
- package/dist/server/server/table-no_rea.d.ts +3 -3
- package/dist/server/server/table-no_rea.js +32 -32
- package/dist/server/server/table-no_rea_sup.d.ts +3 -3
- package/dist/server/server/table-no_rea_sup.js +32 -32
- package/dist/server/server/table-operaciones.d.ts +3 -3
- package/dist/server/server/table-operaciones.js +30 -30
- package/dist/server/server/table-parametros.d.ts +3 -3
- package/dist/server/server/table-parametros.js +39 -39
- package/dist/server/server/table-permisos.d.ts +3 -3
- package/dist/server/server/table-permisos.js +31 -31
- package/dist/server/server/table-personal.d.ts +6 -6
- package/dist/server/server/table-personal.js +56 -56
- package/dist/server/server/table-personal_rol.d.ts +3 -3
- package/dist/server/server/table-personal_rol.js +36 -36
- package/dist/server/server/table-personas.d.ts +3 -3
- package/dist/server/server/table-personas.js +448 -448
- package/dist/server/server/table-personas_sup.d.ts +3 -3
- package/dist/server/server/table-personas_sup.js +93 -93
- package/dist/server/server/table-recepcionistas.d.ts +3 -3
- package/dist/server/server/table-recepcionistas.js +18 -18
- package/dist/server/server/table-recuperadores.d.ts +3 -3
- package/dist/server/server/table-recuperadores.js +18 -18
- package/dist/server/server/table-resultados_tarea.d.ts +3 -3
- package/dist/server/server/table-resultados_tarea.js +28 -28
- package/dist/server/server/table-roles.d.ts +3 -3
- package/dist/server/server/table-roles.js +32 -32
- package/dist/server/server/table-roles_permisos.d.ts +3 -3
- package/dist/server/server/table-roles_permisos.js +35 -35
- package/dist/server/server/table-roles_subordinados.d.ts +3 -3
- package/dist/server/server/table-roles_subordinados.js +32 -32
- package/dist/server/server/table-semanas.d.ts +3 -3
- package/dist/server/server/table-semanas.js +34 -34
- package/dist/server/server/table-sincronizaciones.d.ts +3 -3
- package/dist/server/server/table-sincronizaciones.js +30 -30
- package/dist/server/server/table-supervisores.d.ts +3 -3
- package/dist/server/server/table-supervisores.js +18 -18
- package/dist/server/server/table-tareas.d.ts +3 -3
- package/dist/server/server/table-tareas.js +46 -46
- package/dist/server/server/table-tareas_areas.d.ts +3 -3
- package/dist/server/server/table-tareas_areas.js +55 -55
- package/dist/server/server/table-tareas_tem.d.ts +3 -3
- package/dist/server/server/table-tareas_tem.js +104 -105
- package/dist/server/server/table-tareas_tem_asignables.d.ts +1 -1
- package/dist/server/server/table-tareas_tem_asignables.js +5 -5
- package/dist/server/server/table-tareas_tem_recepcion.d.ts +3 -5
- package/dist/server/server/table-tareas_tem_recepcion.js +33 -43
- package/dist/server/server/table-tem.d.ts +3 -3
- package/dist/server/server/table-tem.js +192 -192
- package/dist/server/server/table-tem_asignacion.d.ts +3 -0
- package/dist/server/server/table-tem_asignacion.js +51 -0
- package/dist/server/server/table-tem_recepcion.d.ts +3 -3
- package/dist/server/server/table-tem_recepcion.js +18 -18
- package/dist/server/server/table-usuarios.d.ts +3 -3
- package/dist/server/server/table-usuarios.js +58 -58
- package/dist/server/server/table-visitas.d.ts +3 -3
- package/dist/server/server/table-visitas.js +91 -91
- package/dist/server/server/table-visitas_sup.d.ts +3 -3
- package/dist/server/server/table-visitas_sup.js +91 -91
- package/dist/server/server/table-viviendas.d.ts +3 -3
- package/dist/server/server/table-viviendas.js +299 -299
- package/dist/server/server/types-dmencu.d.ts +24 -24
- package/dist/server/server/types-dmencu.js +32 -32
- package/dist/server/unlogged/tipos.d.ts +469 -469
- package/dist/server/unlogged/tipos.js +21 -21
- package/dist/unlogged/unlogged/abrir-formulario.d.ts +12 -12
- package/dist/unlogged/unlogged/abrir-formulario.js +102 -102
- package/dist/unlogged/unlogged/adapt.js +7 -7
- package/dist/unlogged/unlogged/bypass-formulario.d.ts +200 -200
- package/dist/unlogged/unlogged/bypass-formulario.js +1041 -1041
- package/dist/unlogged/unlogged/redux-formulario.d.ts +349 -349
- package/dist/unlogged/unlogged/redux-formulario.js +317 -317
- package/dist/unlogged/unlogged/render-formulario.d.ts +54 -54
- package/dist/unlogged/unlogged/render-formulario.js +1485 -1485
- package/dist/unlogged/unlogged/render-general.d.ts +126 -126
- package/dist/unlogged/unlogged/render-general.js +184 -184
- package/dist/unlogged/unlogged/tipos.d.ts +469 -469
- package/dist/unlogged/unlogged/tipos.js +21 -21
- package/dist/unlogged/unlogged/unlogged.d.ts +1 -1
- package/dist/unlogged/unlogged/unlogged.js +162 -162
- package/package.json +1 -1
|
@@ -1,539 +1,540 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
(function (factory) {
|
|
11
|
-
if (typeof module === "object" && typeof module.exports === "object") {
|
|
12
|
-
var v = factory(require, exports);
|
|
13
|
-
if (v !== undefined) module.exports = v;
|
|
14
|
-
}
|
|
15
|
-
else if (typeof define === "function" && define.amd) {
|
|
16
|
-
define(["require", "exports", "js-to-html", "../unlogged/redux-formulario", "like-ar", "../unlogged/bypass-formulario", "../unlogged/abrir-formulario"], factory);
|
|
17
|
-
}
|
|
18
|
-
})(function (require, exports) {
|
|
19
|
-
"use strict";
|
|
20
|
-
var _a, _b;
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
const js_to_html_1 = require("js-to-html");
|
|
23
|
-
const redux_formulario_1 = require("../unlogged/redux-formulario");
|
|
24
|
-
const likeAr = require("like-ar");
|
|
25
|
-
const bypass_formulario_1 = require("../unlogged/bypass-formulario");
|
|
26
|
-
const abrir_formulario_1 = require("../unlogged/abrir-formulario");
|
|
27
|
-
//TODO GENERALIZAR
|
|
28
|
-
const TAREA_DEFAULT = 'encu';
|
|
29
|
-
var OPERATIVO_DEFAULT = null;
|
|
30
|
-
myOwn.autoSetupFunctions.push(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
31
|
-
var my = myOwn;
|
|
32
|
-
try {
|
|
33
|
-
OPERATIVO_DEFAULT = yield my.ajax.operativo_get({});
|
|
34
|
-
}
|
|
35
|
-
catch (err) {
|
|
36
|
-
OPERATIVO_DEFAULT = null;
|
|
37
|
-
}
|
|
38
|
-
myOwn.wScreens.abrir_encuesta = {
|
|
39
|
-
parameters: [
|
|
40
|
-
{ name: 'operativo', typeName: 'text', defaultValue: OPERATIVO_DEFAULT, references: 'operativos' },
|
|
41
|
-
{ name: 'tarea', typeName: 'text', defaultValue: TAREA_DEFAULT, references: 'tareas' },
|
|
42
|
-
{ name: 'encuesta', typeName: 'integer', defaultValue: 130031 }
|
|
43
|
-
],
|
|
44
|
-
autoproced: true,
|
|
45
|
-
mainAction: (params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
46
|
-
var _c;
|
|
47
|
-
// antes: abrirDirecto
|
|
48
|
-
var { operativo, encuesta, tarea } = params;
|
|
49
|
-
var estructura = (0, bypass_formulario_1.getEstructura)();
|
|
50
|
-
var carga = yield my.ajax.dm_forpkraiz_cargar({ operativo, vivienda: encuesta, tarea });
|
|
51
|
-
if (!estructura || ((_c = estructura.timestamp) !== null && _c !== void 0 ? _c : 0) < carga.timestampEstructura || estructura.operativo != operativo || my.config.config.devel) {
|
|
52
|
-
estructura = yield (0, redux_formulario_1.traerEstructura)({ operativo });
|
|
53
|
-
(0, abrir_formulario_1.cargarEstructura)(estructura);
|
|
54
|
-
}
|
|
55
|
-
//@ts-ignore
|
|
56
|
-
var state = {};
|
|
57
|
-
inicializarState(state);
|
|
58
|
-
var forPkRaiz = { formulario: carga.informacionHdr[encuesta].tarea.main_form, vivienda: encuesta };
|
|
59
|
-
(0, bypass_formulario_1.setPersistirDatosByPass)(function persistirDatosByPassEnBaseDeDatos(persistentes) {
|
|
60
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
-
if (persistentes.soloLectura) {
|
|
62
|
-
throw new Error("Está intentando modificar una encuesta abierta como solo lectura, no se guardaron los cambios");
|
|
63
|
-
}
|
|
64
|
-
yield my.ajax.dm_forpkraiz_descargar({ operativo, persistentes });
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
if (!carga.respuestas.viviendas[forPkRaiz.vivienda]) {
|
|
68
|
-
throw new Error(`No se encuentra la vivienda ${forPkRaiz.vivienda}`);
|
|
69
|
-
}
|
|
70
|
-
(0, abrir_formulario_1.cargarHojaDeRuta)(Object.assign(Object.assign({}, carga), { modoAlmacenamiento: 'session' }));
|
|
71
|
-
// @ts-ignore
|
|
72
|
-
desplegarFormularioActual({ operativo, modoDemo: false, forPkRaiz });
|
|
73
|
-
})
|
|
74
|
-
};
|
|
75
|
-
myOwn.wScreens.obtener_telefono = {
|
|
76
|
-
parameters: [],
|
|
77
|
-
autoproced: true,
|
|
78
|
-
mainAction: (_params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
|
-
// antes: abrirDirecto
|
|
80
|
-
var { operativo, tarea } = { operativo: OPERATIVO_DEFAULT, tarea: TAREA_DEFAULT };
|
|
81
|
-
let encuesta = parseInt(yield my.ajax.get_random_free_case({ operativo }));
|
|
82
|
-
yield myOwn.wScreens.abrir_encuesta.mainAction({ operativo, encuesta, tarea });
|
|
83
|
-
})
|
|
84
|
-
};
|
|
85
|
-
myOwn.wScreens.consistir_encuesta = {
|
|
86
|
-
parameters: [
|
|
87
|
-
{ name: 'operativo', typeName: 'text', defaultValue: OPERATIVO_DEFAULT, references: 'operativos' },
|
|
88
|
-
{ name: 'tarea', typeName: 'text' },
|
|
89
|
-
{ name: 'encuesta', typeName: 'integer' }
|
|
90
|
-
],
|
|
91
|
-
autoproced: true,
|
|
92
|
-
mainAction: (params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
93
|
-
var { operativo, tarea, encuesta } = params;
|
|
94
|
-
var result = yield myOwn.ajax.consistir_encuesta({
|
|
95
|
-
operativo: operativo,
|
|
96
|
-
id_caso: encuesta
|
|
97
|
-
});
|
|
98
|
-
if (result.ok) {
|
|
99
|
-
var fixedFields = [];
|
|
100
|
-
fixedFields.push({ fieldName: 'operativo', value: operativo });
|
|
101
|
-
fixedFields.push({ fieldName: 'vivienda', value: encuesta });
|
|
102
|
-
var mainLayout = document.getElementById('main_layout');
|
|
103
|
-
var divGrilla = js_to_html_1.html.div({ id: 'inconsistencias' }).create();
|
|
104
|
-
mainLayout.insertBefore(divGrilla, mainLayout.firstChild);
|
|
105
|
-
mainLayout.insertBefore(crearBotonVerAbrirEncuesta(operativo, tarea, encuesta, `ir a encuesta ${encuesta}`), mainLayout.firstChild);
|
|
106
|
-
my.tableGrid("inconsistencias", divGrilla, { tableDef: {}, fixedFields: fixedFields });
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
throw new Error(result.message);
|
|
110
|
-
}
|
|
111
|
-
})
|
|
112
|
-
};
|
|
113
|
-
}));
|
|
114
|
-
//quita bootstrap del head para que no rompa los estilos de BEPlus (solo se usa bootstrap en el form)
|
|
115
|
-
var linkNode = document.querySelectorAll('[href="css/bootstrap.min.css"]');
|
|
116
|
-
(_b = (_a = linkNode[0]) === null || _a === void 0 ? void 0 : _a.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(linkNode[0]);
|
|
117
|
-
function consistir_filtro(tarea, rea_tem, rea) {
|
|
118
|
-
return tarea ? rea_tem : rea;
|
|
119
|
-
}
|
|
120
|
-
;
|
|
121
|
-
var tareas = null;
|
|
122
|
-
function htmlNumero(num) {
|
|
123
|
-
return js_to_html_1.html.span({ class: 'numero' }, '' + (num !== null && num !== void 0 ? num : ''));
|
|
124
|
-
}
|
|
125
|
-
var persistirEnMemoria = (persistentes) => __awaiter(void 0, void 0, void 0, function* () {
|
|
126
|
-
var { modoAlmacenamiento } = persistentes;
|
|
127
|
-
if (modoAlmacenamiento == 'local') {
|
|
128
|
-
my.setLocalVar(abrir_formulario_1.GLOVAR_DATOSBYPASS, persistentes);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
my.setSessionVar(abrir_formulario_1.GLOVAR_DATOSBYPASS, persistentes);
|
|
132
|
-
}
|
|
133
|
-
my.setSessionVar(abrir_formulario_1.GLOVAR_MODOBYPASS, modoAlmacenamiento);
|
|
134
|
-
});
|
|
135
|
-
function sincronizarDatos(persistentes) {
|
|
136
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
-
var datos = yield my.ajax.dm_sincronizar({ persistentes });
|
|
138
|
-
var operativo = datos.operativo;
|
|
139
|
-
persistirEnMemoria(Object.assign(Object.assign({}, datos), { modoAlmacenamiento: 'local' }));
|
|
140
|
-
var estructura = yield (0, redux_formulario_1.traerEstructura)({ operativo });
|
|
141
|
-
my.setLocalVar(abrir_formulario_1.GLOVAR_ESTRUCTURA, estructura);
|
|
142
|
-
my.removeLocalVar(abrir_formulario_1.BACKUPS);
|
|
143
|
-
return datos;
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
var mostrarInfoLocal = (divAvisoSincro, titulo, nroSincro, mostrarLinkHdr) => {
|
|
147
|
-
let datosByPass = my.getLocalVar(abrir_formulario_1.GLOVAR_DATOSBYPASS);
|
|
148
|
-
if (datosByPass) {
|
|
149
|
-
divAvisoSincro.append(js_to_html_1.html.div({ id: 'aviso-sincro' }, [
|
|
150
|
-
nroSincro ? js_to_html_1.html.p(["Número de sincronización: ", js_to_html_1.html.b("" + nroSincro.toString())]) : null,
|
|
151
|
-
js_to_html_1.html.h4(titulo),
|
|
152
|
-
js_to_html_1.html.p([htmlNumero(likeAr(datosByPass.cargas).array().length), ' areas: ', likeAr(datosByPass.cargas).keys().join(', ')]),
|
|
153
|
-
js_to_html_1.html.p([htmlNumero(likeAr(datosByPass.respuestas.viviendas).array().length), ' viviendas']),
|
|
154
|
-
mostrarLinkHdr ? js_to_html_1.html.a({ href: './campo' }, [js_to_html_1.html.b('IR A LA HOJA DE RUTA')]) : null
|
|
155
|
-
]).create());
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
divAvisoSincro.appendChild(js_to_html_1.html.div({ class: 'aviso' }, [
|
|
159
|
-
js_to_html_1.html.h4('Sistema vacío'),
|
|
160
|
-
js_to_html_1.html.p('No hay información de formularios'),
|
|
161
|
-
js_to_html_1.html.p('No hay información de viviendas')
|
|
162
|
-
]).create());
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
var procederSincroFun = (button, divAvisoSincro) => __awaiter(void 0, void 0, void 0, function* () {
|
|
166
|
-
button.disabled = true;
|
|
167
|
-
button.className = 'download-dm-button';
|
|
168
|
-
divAvisoSincro.innerHTML = '';
|
|
169
|
-
try {
|
|
170
|
-
var datosByPass = my.getLocalVar(abrir_formulario_1.GLOVAR_DATOSBYPASS);
|
|
171
|
-
var datos = yield sincronizarDatos(datosByPass);
|
|
172
|
-
mostrarInfoLocal(divAvisoSincro, 'datos recibidos', datos.num_sincro, true);
|
|
173
|
-
}
|
|
174
|
-
catch (err) {
|
|
175
|
-
alertPromise(err.message);
|
|
176
|
-
throw err;
|
|
177
|
-
}
|
|
178
|
-
finally {
|
|
179
|
-
button.disabled = false;
|
|
180
|
-
button.className = 'download-dm-button-cont';
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
myOwn.wScreens.sincronizar_dm = function () {
|
|
184
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
185
|
-
var mainLayout = document.getElementById('main_layout');
|
|
186
|
-
var procederButton = js_to_html_1.html.button({ class: 'download-dm-button-cont' }, 'proceder ⇒').create();
|
|
187
|
-
var divAvisoSincro = js_to_html_1.html.div().create();
|
|
188
|
-
mostrarInfoLocal(mainLayout, 'información a transmitir', null, false);
|
|
189
|
-
mainLayout.appendChild(procederButton);
|
|
190
|
-
mainLayout.appendChild(divAvisoSincro);
|
|
191
|
-
procederButton.onclick = () => procederSincroFun(procederButton, divAvisoSincro);
|
|
192
|
-
});
|
|
193
|
-
};
|
|
194
|
-
function inicializarState(state) {
|
|
195
|
-
state.modo = {
|
|
196
|
-
demo: false
|
|
197
|
-
};
|
|
198
|
-
// OJO state.opciones se modifica acá y en otro lado con este mismo cartel
|
|
199
|
-
state.opciones = {
|
|
200
|
-
bienvenido: true,
|
|
201
|
-
forPk: null,
|
|
202
|
-
pilaForPk: [],
|
|
203
|
-
modoDespliegue: "relevamiento",
|
|
204
|
-
modoDirecto: false,
|
|
205
|
-
modoBorrarRespuesta: null,
|
|
206
|
-
conCampoOpciones: false,
|
|
207
|
-
saltoAutomatico: true,
|
|
208
|
-
};
|
|
209
|
-
//@ts-ignore
|
|
210
|
-
state.feedbackRowValidator = {};
|
|
211
|
-
}
|
|
212
|
-
/*
|
|
213
|
-
function mostrarDatosPersona(hayDatos:boolean, datos:any, divResult:HTMLDivElement){
|
|
214
|
-
//TODO: EVALUAR SI CONVIENE TRAERLO DE LA BASE
|
|
215
|
-
var tiposDocumento = ['DNI argentino', 'Documento extranjero', 'No tiene documento', 'Otro'];
|
|
216
|
-
var paisDocumento = ['Uruguay', 'Paraguay', 'Brasil', 'Bolivia', 'Chile', 'Perú', 'Venezuela', 'Otro'];
|
|
217
|
-
divResult.appendChild(
|
|
218
|
-
hayDatos?
|
|
219
|
-
html.div({class:'datos-persona-cargada'},[
|
|
220
|
-
html.h2("Datos persona"),
|
|
221
|
-
html.div({class:'ficha-persona'},[
|
|
222
|
-
html.div([html.label('Apellido: '), datos.apellido]),
|
|
223
|
-
html.div([html.label('Nombres: '), datos.nombres]),
|
|
224
|
-
datos.tipoDocumento?
|
|
225
|
-
html.div([
|
|
226
|
-
html.label('Tipo documento: '),
|
|
227
|
-
tiposDocumento[datos.tipoDocumento-1],
|
|
228
|
-
datos.tipoDocumento==4 && datos.tipoDocumentoEspecificado?' ('+ datos.tipoDocumentoEspecificado+')':'',
|
|
229
|
-
])
|
|
230
|
-
:
|
|
231
|
-
'',
|
|
232
|
-
datos.tipoDocumento==2 && datos.paisDocumento?
|
|
233
|
-
html.div([
|
|
234
|
-
html.label('Pais: '),
|
|
235
|
-
paisDocumento[datos.paisDocumento-1],
|
|
236
|
-
datos.paisDocumento==8 && datos.paisDocumentoEspecificado?' ('+datos.paisDocumentoEspecificado+')':'',
|
|
237
|
-
])
|
|
238
|
-
:
|
|
239
|
-
'',
|
|
240
|
-
datos.tipoDocumento!=3 && datos.tipoDocumento?html.div([html.label('Nº Documento: '), datos.documento]):'',
|
|
241
|
-
datos.celular?html.div([html.label('Cel.: '), datos.celular]):'',
|
|
242
|
-
datos.email?html.div([html.label('Email: '), datos.email]):'',
|
|
243
|
-
datos.telefonoAlternativo?html.div([html.label('Tel. alternativo: '), datos.telefonoAlternativo]):'',
|
|
244
|
-
datos.observaciones?html.div([html.label('Observaciones: '), datos.observaciones]):'',
|
|
245
|
-
])
|
|
246
|
-
]).create()
|
|
247
|
-
:
|
|
248
|
-
html.p("No se encontró una encuesta para la etiqueta cargada").create()
|
|
249
|
-
)
|
|
250
|
-
}
|
|
251
|
-
*/
|
|
252
|
-
/*myOwn.clientSides.tareasTemRow={
|
|
253
|
-
update:(depot)=>{
|
|
254
|
-
var tarea:'nada'|'preasignar'|'cargar'|'realizar'|'verificar'='nada';
|
|
255
|
-
var row=depot.row;
|
|
256
|
-
// @ts-ignore
|
|
257
|
-
var idper=my.config.idper;
|
|
258
|
-
var esperar:boolean=false;
|
|
259
|
-
if(row.habilitada){
|
|
260
|
-
if(!row.asignante && !row.asignado){
|
|
261
|
-
tarea='preasignar';
|
|
262
|
-
esperar=true;
|
|
263
|
-
}else if(!row.asignado || !row.fecha_asignacion || !row.operacion){
|
|
264
|
-
tarea='cargar';
|
|
265
|
-
esperar=row.asignante!=idper;
|
|
266
|
-
}else if(!row.rea){
|
|
267
|
-
tarea='realizar';
|
|
268
|
-
esperar=row.asignado!=idper;
|
|
269
|
-
}else if(!row.verificado){
|
|
270
|
-
tarea='verificar';
|
|
271
|
-
esperar=row.asignante!=idper;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
var poner={
|
|
275
|
-
asignante :tarea=='preasignar' && (esperar?'esperar':'normal'),
|
|
276
|
-
asignado :tarea=='cargar' && (esperar?'esperar':'normal'),
|
|
277
|
-
fecha_asignacion :tarea=='cargar' && (esperar?'esperar':'normal'),
|
|
278
|
-
operacion :tarea=='cargar' && (esperar?'esperar':'normal'),
|
|
279
|
-
carga_observaciones:(tarea=='cargar' || tarea=='realizar' && !row.cargado && !row.rea ) && row.asignante==idper && 'optativo',
|
|
280
|
-
verificado :tarea=='verificar' && (esperar?'esperar':'normal'),
|
|
281
|
-
obs_verificado :tarea=='verificar' && (esperar?'esperar':'optativo'),
|
|
282
|
-
}
|
|
283
|
-
likeAr(poner).forEach((valor, campo)=>{
|
|
284
|
-
if(!valor){
|
|
285
|
-
depot.rowControls[campo].removeAttribute('my-mandatory')
|
|
286
|
-
}else{
|
|
287
|
-
depot.rowControls[campo].setAttribute('my-mandatory',valor);
|
|
288
|
-
}
|
|
289
|
-
})
|
|
290
|
-
},
|
|
291
|
-
prepare: function(){}
|
|
292
|
-
}
|
|
293
|
-
*/
|
|
294
|
-
var crearBotonVerAbrirEncuesta = (operativo, tarea, encuesta, label) => {
|
|
295
|
-
var up = {
|
|
296
|
-
operativo: operativo,
|
|
297
|
-
tarea: tarea,
|
|
298
|
-
encuesta: encuesta
|
|
299
|
-
};
|
|
300
|
-
let ver = my.createForkeableButton({ w: 'abrir_encuesta', up, autoproced: true, label }, {});
|
|
301
|
-
return ver;
|
|
302
|
-
};
|
|
303
|
-
var crearBotonesVerAbrirTareas = (depot, fieldName, label) => __awaiter(void 0, void 0, void 0, function* () {
|
|
304
|
-
tareas = tareas ? tareas : (yield myOwn.ajax.table_data({ table: `tareas`, fixedFields: [] }));
|
|
305
|
-
var misTareas = tareas.filter((tarea) => !!tarea.main_form && tarea.operativo == depot.row.operativo && depot.manager.def.tableName == 'tem' ? true : depot.row.tarea == tarea.tarea);
|
|
306
|
-
depot.rowControls[fieldName].innerHTML = '';
|
|
307
|
-
misTareas.forEach((tarea) => {
|
|
308
|
-
let buttonLabel = `${label} ${tarea.tarea}`;
|
|
309
|
-
let ver = crearBotonVerAbrirEncuesta(depot.row.operativo, tarea.tarea, Number(depot.row.enc), buttonLabel);
|
|
310
|
-
ver.style = 'margin:0px 2px;';
|
|
311
|
-
depot.rowControls[fieldName].appendChild(ver);
|
|
312
|
-
});
|
|
313
|
-
});
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
td
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
grid.
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
//
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
{ label: '
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
let
|
|
410
|
-
td
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
.
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
checkbox
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
td
|
|
440
|
-
td.
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
var
|
|
477
|
-
|
|
478
|
-
td.
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
boton.
|
|
482
|
-
boton.
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
boton.
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
boton.
|
|
498
|
-
boton.
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
boton.
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
//
|
|
514
|
-
//
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
var
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
}
|
|
539
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsMkNBQWdDO0lBQ2hDLG1FQUE2RDtJQUk3RCxrQ0FBa0M7SUFDbEMscUVBQW9GO0lBQ3BGLG1FQUFrSjtJQUlsSixrQkFBa0I7SUFFbEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBQzdCLElBQUksaUJBQWlCLEdBQWMsSUFBSSxDQUFDO0lBRXhDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBUSxFQUFFO1FBQ3BDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNmLElBQUc7WUFDQyxpQkFBaUIsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZEO1FBQUEsT0FBTSxHQUFHLEVBQUM7WUFDUCxpQkFBaUIsR0FBQyxJQUFJLENBQUM7U0FDMUI7UUFDRCxLQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsR0FBQztZQUMxQixVQUFVLEVBQUM7Z0JBQ1AsRUFBQyxJQUFJLEVBQUMsV0FBVyxFQUFHLFFBQVEsRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBQyxZQUFZLEVBQUM7Z0JBQzdGLEVBQUMsSUFBSSxFQUFDLE9BQU8sRUFBTyxRQUFRLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQztnQkFDdEYsRUFBQyxJQUFJLEVBQUMsVUFBVSxFQUFJLFFBQVEsRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFDLE1BQU0sRUFBQzthQUMvRDtZQUNELFVBQVUsRUFBQyxJQUFJO1lBQ2YsVUFBVSxFQUFDLENBQU8sTUFBTSxFQUFDLEVBQUU7O2dCQUN2QixzQkFBc0I7Z0JBQ3RCLElBQUksRUFBQyxTQUFTLEVB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V0FBVztRQUN4QixPQUFPLEVBQUUsVUFBVSxLQUFrQjtZQUNqQyxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUUsS0FBSyxDQUFBLENBQUMsQ0FBQSxLQUFLLENBQUEsQ0FBQyxDQUFBLFNBQVMsQ0FBQztZQUN4RSxJQUFJLFNBQVMsR0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDekYsT0FBTyxTQUFTLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQzVDLFNBQVMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVM7Z0JBQzlCLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUc7YUFDekIsQ0FBQyxDQUFBLENBQUMsQ0FBQyxZQUFZLENBQUMsNERBQTRELENBQUMsQ0FBQztRQUNuRixDQUFDO0tBQ0osQ0FBQyxDQUFDO0lBRUgsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUMsVUFBZSxXQUFXOztZQUMxQyw4Q0FBOEM7WUFDOUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLEVBQUMsUUFBUSxFQUFDLElBQUksRUFBQyxDQUFDLENBQUM7UUFDdEQsQ0FBQztLQUFBLENBQUE7SUFFRCxTQUFTLFNBQVMsQ0FBSSxNQUFZO1FBQzlCLE9BQVEsRUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2h0bWx9IGZyb20gXCJqcy10by1odG1sXCI7XHJcbmltcG9ydCB7dHJhZXJFc3RydWN0dXJhfSBmcm9tIFwiLi4vdW5sb2dnZWQvcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5pbXBvcnQgeyBDYXNvU3RhdGUsICBcclxuICAgIElkRm9ybXVsYXJpbywgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsIElkRW5jLCBJZE9wZXJhdGl2bywgSWRUYXJlYSwgRXN0YWRvQWNjaW9uLCBEaXJlY2Npb25BY2Npb24sXHJcbn0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5pbXBvcnQge2dldEVzdHJ1Y3R1cmEsIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzfSBmcm9tIFwiLi4vdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW9cIlxyXG5pbXBvcnQge0JBQ0tVUFMsIGNhcmdhckVzdHJ1Y3R1cmEsIGNhcmdhckhvamFEZVJ1dGEsIEdMT1ZBUl9EQVRPU0JZUEFTUywgR0xPVkFSX0VTVFJVQ1RVUkEsIEdMT1ZBUl9NT0RPQllQQVNTfSBmcm9tIFwiLi4vdW5sb2dnZWQvYWJyaXItZm9ybXVsYXJpb1wiXHJcbmltcG9ydCB7IE9wZXJhdGl2byB9IGZyb20gXCJtZXRhLWVuY1wiO1xyXG5pbXBvcnQge3NsZWVwLCBjb2FsZXNjZX0gZnJvbSBcImJlc3QtZ2xvYmFsc1wiO1xyXG5cclxuLy9UT0RPIEdFTkVSQUxJWkFSXHJcblxyXG5jb25zdCBUQVJFQV9ERUZBVUxUID0gJ2VuY3UnO1xyXG52YXIgT1BFUkFUSVZPX0RFRkFVTFQ6c3RyaW5nfG51bGw9IG51bGw7XHJcblxyXG5teU93bi5hdXRvU2V0dXBGdW5jdGlvbnMucHVzaChhc3luYyAoKT0+e1xyXG4gICAgdmFyIG15ID0gbXlPd247ICAgIFxyXG4gICAgdHJ5e1xyXG4gICAgICAgIE9QRVJBVElWT19ERUZBVUxUID0gYXdhaXQgbXkuYWpheC5vcGVyYXRpdm9fZ2V0KHt9KTtcclxuICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIE9QRVJBVElWT19ERUZBVUxUPW51bGw7XHJcbiAgICB9XHJcbiAgICBteU93bi53U2NyZWVucy5hYnJpcl9lbmN1ZXN0YT17XHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICwgdHlwZU5hbWU6J3RleHQnLCBkZWZhdWx0VmFsdWU6T1BFUkFUSVZPX0RFRkFVTFQsIHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgLCB0eXBlTmFtZTondGV4dCcsIGRlZmF1bHRWYWx1ZTpUQVJFQV9ERUZBVUxULCByZWZlcmVuY2VzOiAndGFyZWFzJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmN1ZXN0YScgICwgdHlwZU5hbWU6J2ludGVnZXInLCBkZWZhdWx0VmFsdWU6MTMwMDMxfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgYXV0b3Byb2NlZDp0cnVlLFxyXG4gICAgICAgIG1haW5BY3Rpb246YXN5bmMgKHBhcmFtcyk9PntcclxuICAgICAgICAgICAgLy8gYW50ZXM6IGFicmlyRGlyZWN0b1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2bywgZW5jdWVzdGEsIHRhcmVhfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgdmFyIGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICAgICAgICAgIHZhciBjYXJnYSA9IGF3YWl0IG15LmFqYXguZG1fZm9ycGtyYWl6X2Nhcmdhcih7b3BlcmF0aXZvLCB2aXZpZW5kYTplbmN1ZXN0YSwgdGFyZWF9KSBhcyBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcztcclxuICAgICAgICAgICAgaWYoIWVzdHJ1Y3R1cmEgfHwgKGVzdHJ1Y3R1cmEudGltZXN0YW1wPz8wKSA8IGNhcmdhLnRpbWVzdGFtcEVzdHJ1Y3R1cmEhIHx8IGVzdHJ1Y3R1cmEub3BlcmF0aXZvICE9IG9wZXJhdGl2byB8fCBteS5jb25maWcuY29uZmlnLmRldmVsKXtcclxuICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEgPSBhd2FpdCB0cmFlckVzdHJ1Y3R1cmEoe29wZXJhdGl2b30pXHJcbiAgICAgICAgICAgICAgICBjYXJnYXJFc3RydWN0dXJhKGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICB2YXIgc3RhdGU6Q2Fzb1N0YXRlID0ge31cclxuICAgICAgICAgICAgaW5pY2lhbGl6YXJTdGF0ZShzdGF0ZSk7XHJcbiAgICAgICAgICAgIHZhciBmb3JQa1JhaXogPSB7Zm9ybXVsYXJpbzpjYXJnYS5pbmZvcm1hY2lvbkhkcltlbmN1ZXN0YSBhcyBJZEVuY10udGFyZWEubWFpbl9mb3JtLCB2aXZpZW5kYTplbmN1ZXN0YX07XHJcbiAgICAgICAgICAgIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzKFxyXG4gICAgICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NCeVBhc3NFbkJhc2VEZURhdG9zKHBlcnNpc3RlbnRlczpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocGVyc2lzdGVudGVzLnNvbG9MZWN0dXJhKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXN0w6EgaW50ZW50YW5kbyBtb2RpZmljYXIgdW5hIGVuY3Vlc3RhIGFiaWVydGEgY29tbyBzb2xvIGxlY3R1cmEsIG5vIHNlIGd1YXJkYXJvbiBsb3MgY2FtYmlvc1wiKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmRtX2ZvcnBrcmFpel9kZXNjYXJnYXIoe29wZXJhdGl2bywgcGVyc2lzdGVudGVzfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgaWYoIWNhcmdhLnJlc3B1ZXN0YXMudml2aWVuZGFzW2ZvclBrUmFpei52aXZpZW5kYSFdKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gc2UgZW5jdWVudHJhIGxhIHZpdmllbmRhICR7Zm9yUGtSYWl6LnZpdmllbmRhIX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXJnYXJIb2phRGVSdXRhKHsuLi5jYXJnYSwgbW9kb0FsbWFjZW5hbWllbnRvOidzZXNzaW9uJ30pO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwoe29wZXJhdGl2bywgbW9kb0RlbW86ZmFsc2UsIGZvclBrUmFpen0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBteU93bi53U2NyZWVucy5vYnRlbmVyX3RlbGVmb25vPXtcclxuICAgICAgICBwYXJhbWV0ZXJzOltdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6dHJ1ZSxcclxuICAgICAgICBtYWluQWN0aW9uOmFzeW5jIChfcGFyYW1zKT0+e1xyXG4gICAgICAgICAgICAvLyBhbnRlczogYWJyaXJEaXJlY3RvXHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCB0YXJlYX0gPSB7b3BlcmF0aXZvOiBPUEVSQVRJVk9fREVGQVVMVCwgdGFyZWE6IFRBUkVBX0RFRkFVTFR9O1xyXG4gICAgICAgICAgICBsZXQgZW5jdWVzdGEgPSBwYXJzZUludChhd2FpdCBteS5hamF4LmdldF9yYW5kb21fZnJlZV9jYXNlKHtvcGVyYXRpdm99KSk7IFxyXG4gICAgICAgICAgICBhd2FpdCBteU93bi53U2NyZWVucy5hYnJpcl9lbmN1ZXN0YS5tYWluQWN0aW9uKHtvcGVyYXRpdm8sIGVuY3Vlc3RhLCB0YXJlYX0pO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBteU93bi53U2NyZWVucy5jb25zaXN0aXJfZW5jdWVzdGE9e1xyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAsIHR5cGVOYW1lOid0ZXh0JywgZGVmYXVsdFZhbHVlOk9QRVJBVElWT19ERUZBVUxULCByZWZlcmVuY2VzOidvcGVyYXRpdm9zJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuY3Vlc3RhJyAgLCB0eXBlTmFtZTonaW50ZWdlcid9XHJcbiAgICAgICAgXSxcclxuICAgICAgICBhdXRvcHJvY2VkOnRydWUsXHJcbiAgICAgICAgbWFpbkFjdGlvbjphc3luYyAocGFyYW1zKT0+e1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2bywgdGFyZWEsIGVuY3Vlc3RhIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBteU93bi5hamF4LmNvbnNpc3Rpcl9lbmN1ZXN0YSh7XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IG9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IGVuY3Vlc3RhXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZihyZXN1bHQub2spe1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpeGVkRmllbGRzID0gW107XHJcbiAgICAgICAgICAgICAgICBmaXhlZEZpZWxkcy5wdXNoKHtmaWVsZE5hbWU6ICdvcGVyYXRpdm8nLCB2YWx1ZTogb3BlcmF0aXZvfSk7XHJcbiAgICAgICAgICAgICAgICBmaXhlZEZpZWxkcy5wdXNoKHtmaWVsZE5hbWU6ICd2aXZpZW5kYScsIHZhbHVlOiBlbmN1ZXN0YX0pO1xyXG4gICAgICAgICAgICAgICAgdmFyIG1haW5MYXlvdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbl9sYXlvdXQnKSE7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGl2R3JpbGxhID0gaHRtbC5kaXYoe2lkOidpbmNvbnNpc3RlbmNpYXMnfSkuY3JlYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBtYWluTGF5b3V0Lmluc2VydEJlZm9yZShkaXZHcmlsbGEsIG1haW5MYXlvdXQuZmlyc3RDaGlsZCk7XHJcbiAgICAgICAgICAgICAgICBtYWluTGF5b3V0Lmluc2VydEJlZm9yZShcclxuICAgICAgICAgICAgICAgICAgICBjcmVhckJvdG9uVmVyQWJyaXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5jdWVzdGEsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgaXIgYSBlbmN1ZXN0YSAke2VuY3Vlc3RhfWBcclxuICAgICAgICAgICAgICAgICAgICApLCBcclxuICAgICAgICAgICAgICAgICAgICBtYWluTGF5b3V0LmZpcnN0Q2hpbGRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBteS50YWJsZUdyaWQoXCJpbmNvbnNpc3RlbmNpYXNcIiwgZGl2R3JpbGxhLHt0YWJsZURlZjp7fSxmaXhlZEZpZWxkczogZml4ZWRGaWVsZHN9KTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzdWx0Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuXHJcblxyXG4vL3F1aXRhIGJvb3RzdHJhcCBkZWwgaGVhZCBwYXJhIHF1ZSBubyByb21wYSBsb3MgZXN0aWxvcyBkZSBCRVBsdXMgKHNvbG8gc2UgdXNhIGJvb3RzdHJhcCBlbiBlbCBmb3JtKVxyXG52YXIgbGlua05vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaHJlZj1cImNzcy9ib290c3RyYXAubWluLmNzc1wiXScpO1xyXG5saW5rTm9kZVswXT8ucGFyZW50Tm9kZT8ucmVtb3ZlQ2hpbGQobGlua05vZGVbMF0pO1xyXG5cclxuZnVuY3Rpb24gY29uc2lzdGlyX2ZpbHRybyh0YXJlYSwgcmVhX3RlbSwgcmVhKXtcclxuICAgIHJldHVybiB0YXJlYT9yZWFfdGVtOnJlYTtcclxufTtcclxuXHJcbnZhciB0YXJlYXM6YW55ID0gbnVsbDtcclxuXHJcbmZ1bmN0aW9uIGh0bWxOdW1lcm8obnVtOm51bWJlcil7XHJcbiAgICByZXR1cm4gaHRtbC5zcGFuKHtjbGFzczonbnVtZXJvJ30sJycrKG51bT8/JycpKVxyXG59XHJcblxyXG52YXIgcGVyc2lzdGlyRW5NZW1vcmlhID0gYXN5bmMgKHBlcnNpc3RlbnRlczpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcykgPT4ge1xyXG4gICAgdmFyIHttb2RvQWxtYWNlbmFtaWVudG99ID0gcGVyc2lzdGVudGVzXHJcbiAgICAgICAgaWYobW9kb0FsbWFjZW5hbWllbnRvPT0nbG9jYWwnKXtcclxuICAgICAgICAgICAgbXkuc2V0TG9jYWxWYXIoR0xPVkFSX0RBVE9TQllQQVNTLCBwZXJzaXN0ZW50ZXMpXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIG15LnNldFNlc3Npb25WYXIoR0xPVkFSX0RBVE9TQllQQVNTLCBwZXJzaXN0ZW50ZXMpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIG15LnNldFNlc3Npb25WYXIoR0xPVkFSX01PRE9CWVBBU1MsIG1vZG9BbG1hY2VuYW1pZW50bylcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gc2luY3Jvbml6YXJEYXRvcyhwZXJzaXN0ZW50ZXM6RGF0b3NCeVBhc3NQZXJzaXN0aWJsZXN8bnVsbCl7XHJcbiAgICB2YXIgZGF0b3MgPSBhd2FpdCBteS5hamF4LmRtX3NpbmNyb25pemFyKHtwZXJzaXN0ZW50ZXN9KTtcclxuICAgIHZhciBvcGVyYXRpdm8gPSBkYXRvcy5vcGVyYXRpdm87XHJcbiAgICBwZXJzaXN0aXJFbk1lbW9yaWEoey4uLmRhdG9zLCBtb2RvQWxtYWNlbmFtaWVudG86J2xvY2FsJ30pO1xyXG4gICAgdmFyIGVzdHJ1Y3R1cmEgPSBhd2FpdCB0cmFlckVzdHJ1Y3R1cmEoe29wZXJhdGl2b30pXHJcbiAgICBteS5zZXRMb2NhbFZhcihHTE9WQVJfRVNUUlVDVFVSQSwgZXN0cnVjdHVyYSk7XHJcbiAgICBteS5yZW1vdmVMb2NhbFZhcihCQUNLVVBTKTtcclxuICAgIHJldHVybiBkYXRvcztcclxufVxyXG5cclxuXHJcblxyXG52YXIgbW9zdHJhckluZm9Mb2NhbCA9IChkaXZBdmlzb1NpbmNybzpIVE1MRGl2RWxlbWVudCwgdGl0dWxvOnN0cmluZywgbnJvU2luY3JvOm51bWJlcnxudWxsLCBtb3N0cmFyTGlua0hkcjogYm9vbGVhbik9PntcclxuICAgIGxldCBkYXRvc0J5UGFzcyA9IG15LmdldExvY2FsVmFyKEdMT1ZBUl9EQVRPU0JZUEFTUyk7XHJcbiAgICBpZihkYXRvc0J5UGFzcyl7XHJcbiAgICAgICAgZGl2QXZpc29TaW5jcm8uYXBwZW5kKGh0bWwuZGl2KHtpZDonYXZpc28tc2luY3JvJ30sIFtcclxuICAgICAgICAgICAgbnJvU2luY3JvP2h0bWwucChbXCJOw7ptZXJvIGRlIHNpbmNyb25pemFjacOzbjogXCIsIGh0bWwuYihcIlwiK25yb1NpbmNyby50b1N0cmluZygpKV0pOm51bGwsXHJcbiAgICAgICAgICAgIGh0bWwuaDQodGl0dWxvKSxcclxuICAgICAgICAgICAgaHRtbC5wKFtodG1sTnVtZXJvKGxpa2VBcihkYXRvc0J5UGFzcy5jYXJnYXMpLmFycmF5KCkubGVuZ3RoKSwnIGFyZWFzOiAnLGxpa2VBcihkYXRvc0J5UGFzcy5jYXJnYXMpLmtleXMoKS5qb2luKCcsICcpXSksXHJcbiAgICAgICAgICAgIGh0bWwucChbaHRtbE51bWVybyhsaWtlQXIoZGF0b3NCeVBhc3MucmVzcHVlc3Rhcy52aXZpZW5kYXMpLmFycmF5KCkubGVuZ3RoKSwnIHZpdmllbmRhcyddKSxcclxuICAgICAgICAgICAgbW9zdHJhckxpbmtIZHI/aHRtbC5hKHtocmVmOicuL2NhbXBvJ30sW2h0bWwuYignSVIgQSBMQSBIT0pBIERFIFJVVEEnKV0pOm51bGxcclxuICAgICAgICBdKS5jcmVhdGUoKSk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgICBkaXZBdmlzb1NpbmNyby5hcHBlbmRDaGlsZChodG1sLmRpdih7Y2xhc3M6J2F2aXNvJ30sW1xyXG4gICAgICAgICAgICBodG1sLmg0KCdTaXN0ZW1hIHZhY8OtbycpLFxyXG4gICAgICAgICAgICBodG1sLnAoJ05vIGhheSBpbmZvcm1hY2nDs24gZGUgZm9ybXVsYXJpb3MnKSxcclxuICAgICAgICAgICAgaHRtbC5wKCdObyBoYXkgaW5mb3JtYWNpw7NuIGRlIHZpdmllbmRhcycpXHJcbiAgICAgICAgXSkuY3JlYXRlKCkpO1xyXG4gICAgfVxyXG59XHJcbnZhciBwcm9jZWRlclNpbmNyb0Z1biA9IGFzeW5jIChidXR0b246SFRNTEJ1dHRvbkVsZW1lbnQsIGRpdkF2aXNvU2luY3JvOkhUTUxEaXZFbGVtZW50KT0+e1xyXG4gICAgYnV0dG9uLmRpc2FibGVkPXRydWU7XHJcbiAgICBidXR0b24uY2xhc3NOYW1lPSdkb3dubG9hZC1kbS1idXR0b24nO1xyXG4gICAgZGl2QXZpc29TaW5jcm8uaW5uZXJIVE1MPScnO1xyXG4gICAgdHJ5e1xyXG4gICAgICAgIHZhciBkYXRvc0J5UGFzczpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyA9IG15LmdldExvY2FsVmFyKEdMT1ZBUl9EQVRPU0JZUEFTUyk7XHJcbiAgICAgICAgdmFyIGRhdG9zID0gYXdhaXQgc2luY3Jvbml6YXJEYXRvcyhkYXRvc0J5UGFzcyk7XHJcbiAgICAgICAgbW9zdHJhckluZm9Mb2NhbChkaXZBdmlzb1NpbmNybywgJ2RhdG9zIHJlY2liaWRvcycsIGRhdG9zLm51bV9zaW5jcm8sIHRydWUpXHJcbiAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICBhbGVydFByb21pc2UoZXJyLm1lc3NhZ2UpXHJcbiAgICAgICAgdGhyb3cgZXJyXHJcbiAgICB9ZmluYWxseXtcclxuICAgICAgICBidXR0b24uZGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICAgICAgYnV0dG9uLmNsYXNzTmFtZT0nZG93bmxvYWQtZG0tYnV0dG9uLWNvbnQnO1xyXG4gICAgfVxyXG59XHJcbm15T3duLndTY3JlZW5zLnNpbmNyb25pemFyX2RtPWFzeW5jIGZ1bmN0aW9uKCl7XHJcbiAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgIHZhciBwcm9jZWRlckJ1dHRvbiA9IGh0bWwuYnV0dG9uKHtjbGFzczonZG93bmxvYWQtZG0tYnV0dG9uLWNvbnQnfSwncHJvY2VkZXIg4oeSJykuY3JlYXRlKCk7XHJcbiAgICB2YXIgZGl2QXZpc29TaW5jcm86SFRNTERpdkVsZW1lbnQ9aHRtbC5kaXYoKS5jcmVhdGUoKTtcclxuICAgIG1vc3RyYXJJbmZvTG9jYWwobWFpbkxheW91dCBhcyBIVE1MRGl2RWxlbWVudCwgJ2luZm9ybWFjacOzbiBhIHRyYW5zbWl0aXInLCBudWxsLCBmYWxzZSlcclxuICAgIG1haW5MYXlvdXQuYXBwZW5kQ2hpbGQocHJvY2VkZXJCdXR0b24pO1xyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChkaXZBdmlzb1NpbmNybyk7XHJcbiAgICBwcm9jZWRlckJ1dHRvbi5vbmNsaWNrID0gKCk9PnByb2NlZGVyU2luY3JvRnVuKHByb2NlZGVyQnV0dG9uLCBkaXZBdmlzb1NpbmNybylcclxufTtcclxuXHJcbmZ1bmN0aW9uIGluaWNpYWxpemFyU3RhdGUoc3RhdGU6IENhc29TdGF0ZSkge1xyXG4gICAgc3RhdGUubW9kbyA9IHtcclxuICAgICAgICBkZW1vOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIC8vIE9KTyBzdGF0ZS5vcGNpb25lcyBzZSBtb2RpZmljYSBhY8OhIHkgZW4gb3RybyBsYWRvIGNvbiBlc3RlIG1pc21vIGNhcnRlbFxyXG4gICAgc3RhdGUub3BjaW9uZXMgPSB7XHJcbiAgICAgICAgYmllbnZlbmlkbzogdHJ1ZSxcclxuICAgICAgICBmb3JQazogbnVsbCxcclxuICAgICAgICBwaWxhRm9yUGs6IFtdLFxyXG4gICAgICAgIG1vZG9EZXNwbGllZ3VlOiBcInJlbGV2YW1pZW50b1wiLFxyXG4gICAgICAgIG1vZG9EaXJlY3RvOiBmYWxzZSxcclxuICAgICAgICBtb2RvQm9ycmFyUmVzcHVlc3RhOiBudWxsLFxyXG4gICAgICAgIGNvbkNhbXBvT3BjaW9uZXM6IGZhbHNlLFxyXG4gICAgICAgIHNhbHRvQXV0b21hdGljbzogdHJ1ZSxcclxuICAgIH07XHJcbiAgICAvL0B0cy1pZ25vcmVcclxuICAgIHN0YXRlLmZlZWRiYWNrUm93VmFsaWRhdG9yID0ge307XHJcbn1cclxuLypcclxuZnVuY3Rpb24gbW9zdHJhckRhdG9zUGVyc29uYShoYXlEYXRvczpib29sZWFuLCBkYXRvczphbnksIGRpdlJlc3VsdDpIVE1MRGl2RWxlbWVudCl7XHJcbiAgICAvL1RPRE86IEVWQUxVQVIgU0kgQ09OVklFTkUgVFJBRVJMTyBERSBMQSBCQVNFXHJcbiAgICB2YXIgdGlwb3NEb2N1bWVudG8gPSBbJ0ROSSBhcmdlbnRpbm8nLCAnRG9jdW1lbnRvIGV4dHJhbmplcm8nLCAnTm8gdGllbmUgZG9jdW1lbnRvJywgJ090cm8nXTtcclxuICAgIHZhciBwYWlzRG9jdW1lbnRvID0gWydVcnVndWF5JywgJ1BhcmFndWF5JywgJ0JyYXNpbCcsICdCb2xpdmlhJywgJ0NoaWxlJywgJ1BlcsO6JywgJ1ZlbmV6dWVsYScsICdPdHJvJ107XHJcbiAgICBkaXZSZXN1bHQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgaGF5RGF0b3M/XHJcbiAgICAgICAgICAgIGh0bWwuZGl2KHtjbGFzczonZGF0b3MtcGVyc29uYS1jYXJnYWRhJ30sW1xyXG4gICAgICAgICAgICAgICAgaHRtbC5oMihcIkRhdG9zIHBlcnNvbmFcIiksXHJcbiAgICAgICAgICAgICAgICBodG1sLmRpdih7Y2xhc3M6J2ZpY2hhLXBlcnNvbmEnfSxbXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW2h0bWwubGFiZWwoJ0FwZWxsaWRvOiAnKSwgZGF0b3MuYXBlbGxpZG9dKSxcclxuICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihbaHRtbC5sYWJlbCgnTm9tYnJlczogJyksIGRhdG9zLm5vbWJyZXNdKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmxhYmVsKCdUaXBvIGRvY3VtZW50bzogJyksIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlwb3NEb2N1bWVudG9bZGF0b3MudGlwb0RvY3VtZW50by0xXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9zLnRpcG9Eb2N1bWVudG89PTQgJiYgZGF0b3MudGlwb0RvY3VtZW50b0VzcGVjaWZpY2Fkbz8nICgnKyBkYXRvcy50aXBvRG9jdW1lbnRvRXNwZWNpZmljYWRvKycpJzonJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLnRpcG9Eb2N1bWVudG89PTIgJiYgZGF0b3MucGFpc0RvY3VtZW50bz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5kaXYoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbC5sYWJlbCgnUGFpczogJyksIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpc0RvY3VtZW50b1tkYXRvcy5wYWlzRG9jdW1lbnRvLTFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0b3MucGFpc0RvY3VtZW50bz09OCAmJiBkYXRvcy5wYWlzRG9jdW1lbnRvRXNwZWNpZmljYWRvPycgKCcrZGF0b3MucGFpc0RvY3VtZW50b0VzcGVjaWZpY2FkbysnKSc6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXHJcbiAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy50aXBvRG9jdW1lbnRvIT0zICYmIGRhdG9zLnRpcG9Eb2N1bWVudG8/aHRtbC5kaXYoW2h0bWwubGFiZWwoJ07CuiBEb2N1bWVudG86ICcpLCBkYXRvcy5kb2N1bWVudG9dKTonJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy5jZWx1bGFyP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdDZWwuOiAnKSwgZGF0b3MuY2VsdWxhcl0pOicnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLmVtYWlsP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdFbWFpbDogJyksIGRhdG9zLmVtYWlsXSk6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MudGVsZWZvbm9BbHRlcm5hdGl2bz9odG1sLmRpdihbaHRtbC5sYWJlbCgnVGVsLiBhbHRlcm5hdGl2bzogJyksIGRhdG9zLnRlbGVmb25vQWx0ZXJuYXRpdm9dKTonJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy5vYnNlcnZhY2lvbmVzP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdPYnNlcnZhY2lvbmVzOiAnKSwgZGF0b3Mub2JzZXJ2YWNpb25lc10pOicnLFxyXG4gICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgXSkuY3JlYXRlKClcclxuICAgICAgICA6XHJcbiAgICAgICAgICAgIGh0bWwucChcIk5vIHNlIGVuY29udHLDsyB1bmEgZW5jdWVzdGEgcGFyYSBsYSBldGlxdWV0YSBjYXJnYWRhXCIpLmNyZWF0ZSgpXHJcbiAgICApXHJcbn1cclxuKi9cclxuLypteU93bi5jbGllbnRTaWRlcy50YXJlYXNUZW1Sb3c9e1xyXG4gICAgdXBkYXRlOihkZXBvdCk9PntcclxuICAgICAgICB2YXIgdGFyZWE6J25hZGEnfCdwcmVhc2lnbmFyJ3wnY2FyZ2FyJ3wncmVhbGl6YXInfCd2ZXJpZmljYXInPSduYWRhJztcclxuICAgICAgICB2YXIgcm93PWRlcG90LnJvdztcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgdmFyIGlkcGVyPW15LmNvbmZpZy5pZHBlcjtcclxuICAgICAgICB2YXIgZXNwZXJhcjpib29sZWFuPWZhbHNlO1xyXG4gICAgICAgIGlmKHJvdy5oYWJpbGl0YWRhKXtcclxuICAgICAgICAgICAgaWYoIXJvdy5hc2lnbmFudGUgJiYgIXJvdy5hc2lnbmFkbyl7XHJcbiAgICAgICAgICAgICAgICB0YXJlYT0ncHJlYXNpZ25hcic7XHJcbiAgICAgICAgICAgICAgICBlc3BlcmFyPXRydWU7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKCFyb3cuYXNpZ25hZG8gfHwgIXJvdy5mZWNoYV9hc2lnbmFjaW9uIHx8ICFyb3cub3BlcmFjaW9uKXtcclxuICAgICAgICAgICAgICAgIHRhcmVhPSdjYXJnYXInO1xyXG4gICAgICAgICAgICAgICAgZXNwZXJhcj1yb3cuYXNpZ25hbnRlIT1pZHBlcjtcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXJvdy5yZWEpe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J3JlYWxpemFyJztcclxuICAgICAgICAgICAgICAgIGVzcGVyYXI9cm93LmFzaWduYWRvIT1pZHBlcjtcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXJvdy52ZXJpZmljYWRvKXtcclxuICAgICAgICAgICAgICAgIHRhcmVhPSd2ZXJpZmljYXInO1xyXG4gICAgICAgICAgICAgICAgZXNwZXJhcj1yb3cuYXNpZ25hbnRlIT1pZHBlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcG9uZXI9e1xyXG4gICAgICAgICAgICBhc2lnbmFudGUgICAgICAgICAgOnRhcmVhPT0ncHJlYXNpZ25hcicgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidub3JtYWwnKSxcclxuICAgICAgICAgICAgYXNpZ25hZG8gICAgICAgICAgIDp0YXJlYT09J2NhcmdhcicgICAgICYmIChlc3BlcmFyPydlc3BlcmFyJzonbm9ybWFsJyksXHJcbiAgICAgICAgICAgIGZlY2hhX2FzaWduYWNpb24gICA6dGFyZWE9PSdjYXJnYXInICAgICAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBvcGVyYWNpb24gICAgICAgICAgOnRhcmVhPT0nY2FyZ2FyJyAgICAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidub3JtYWwnKSxcclxuICAgICAgICAgICAgY2FyZ2Ffb2JzZXJ2YWNpb25lczoodGFyZWE9PSdjYXJnYXInICAgICB8fCB0YXJlYT09J3JlYWxpemFyJyAmJiAhcm93LmNhcmdhZG8gJiYgIXJvdy5yZWEgKSAmJiByb3cuYXNpZ25hbnRlPT1pZHBlciAmJiAnb3B0YXRpdm8nLFxyXG4gICAgICAgICAgICB2ZXJpZmljYWRvICAgICAgICAgOnRhcmVhPT0ndmVyaWZpY2FyJyAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidub3JtYWwnKSxcclxuICAgICAgICAgICAgb2JzX3ZlcmlmaWNhZG8gICAgIDp0YXJlYT09J3ZlcmlmaWNhcicgICYmIChlc3BlcmFyPydlc3BlcmFyJzonb3B0YXRpdm8nKSxcclxuICAgICAgICB9XHJcbiAgICAgICAgbGlrZUFyKHBvbmVyKS5mb3JFYWNoKCh2YWxvciwgY2FtcG8pPT57XHJcbiAgICAgICAgICAgIGlmKCF2YWxvcil7XHJcbiAgICAgICAgICAgICAgICBkZXBvdC5yb3dDb250cm9sc1tjYW1wb10ucmVtb3ZlQXR0cmlidXRlKCdteS1tYW5kYXRvcnknKVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGRlcG90LnJvd0NvbnRyb2xzW2NhbXBvXS5zZXRBdHRyaWJ1dGUoJ215LW1hbmRhdG9yeScsdmFsb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH0sXHJcbiAgICBwcmVwYXJlOiBmdW5jdGlvbigpe31cclxufVxyXG4qL1xyXG5cclxudmFyIGNyZWFyQm90b25WZXJBYnJpckVuY3Vlc3RhID0gKG9wZXJhdGl2bzpJZE9wZXJhdGl2byx0YXJlYTpJZFRhcmVhLGVuY3Vlc3RhOm51bWJlciwgbGFiZWw6c3RyaW5nKT0+e1xyXG4gICAgdmFyIHVwID0ge1xyXG4gICAgICAgIG9wZXJhdGl2bzpvcGVyYXRpdm8sXHJcbiAgICAgICAgdGFyZWE6dGFyZWEsXHJcbiAgICAgICAgZW5jdWVzdGE6ZW5jdWVzdGFcclxuICAgIH1cclxuICAgIGxldCB2ZXIgPSBteS5jcmVhdGVGb3JrZWFibGVCdXR0b24oe3c6J2FicmlyX2VuY3Vlc3RhJyx1cCwgYXV0b3Byb2NlZDp0cnVlLCBsYWJlbH0se30pO1xyXG4gICAgcmV0dXJuIHZlclxyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvbmVzVmVyQWJyaXJUYXJlYXMgPSBhc3luYyAoZGVwb3Q6bXlPd24uRGVwb3QsIGZpZWxkTmFtZTpzdHJpbmcsIGxhYmVsOidhYnJpcid8J3ZlcicpPT57XHJcbiAgICB0YXJlYXMgPSB0YXJlYXM/dGFyZWFzOihhd2FpdCBteU93bi5hamF4LnRhYmxlX2RhdGEoe3RhYmxlOiBgdGFyZWFzYCwgZml4ZWRGaWVsZHM6W119KSk7XHJcbiAgICB2YXIgbWlzVGFyZWFzID0gdGFyZWFzLmZpbHRlcigodGFyZWEpPT4hIXRhcmVhLm1haW5fZm9ybSAmJiB0YXJlYS5vcGVyYXRpdm89PWRlcG90LnJvdy5vcGVyYXRpdm8gJiYgZGVwb3QubWFuYWdlci5kZWYudGFibGVOYW1lPT0ndGVtJz90cnVlOmRlcG90LnJvdy50YXJlYSA9PSB0YXJlYS50YXJlYSk7XHJcbiAgICBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdLmlubmVySFRNTD0nJztcclxuICAgIG1pc1RhcmVhcy5mb3JFYWNoKCh0YXJlYTp7dGFyZWE6c3RyaW5nLCBub21icmU6c3RyaW5nLCBtYWluX2Zvcm06SWRGb3JtdWxhcmlvfSk9PntcclxuICAgICAgICBsZXQgYnV0dG9uTGFiZWwgPSBgJHtsYWJlbH0gJHt0YXJlYS50YXJlYX1gO1xyXG4gICAgICAgIGxldCB2ZXIgPSBjcmVhckJvdG9uVmVyQWJyaXJFbmN1ZXN0YShcclxuICAgICAgICAgICAgZGVwb3Qucm93Lm9wZXJhdGl2byBhcyBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgdGFyZWEudGFyZWEgYXMgSWRUYXJlYSwgXHJcbiAgICAgICAgICAgIE51bWJlcihkZXBvdC5yb3cuZW5jKSxcclxuICAgICAgICAgICAgYnV0dG9uTGFiZWxcclxuICAgICAgICApO1xyXG4gICAgICAgIHZlci5zdHlsZT0nbWFyZ2luOjBweCAycHg7JztcclxuICAgICAgICBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdLmFwcGVuZENoaWxkKHZlcik7XHJcbiAgICB9KVxyXG59XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5hYnJpcj17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIHZhciBsYWJlbDondmVyJ3wnYWJyaXInID0gZGVwb3Qucm93LmNhcmdhZG9fZG0/J3Zlcic6J2FicmlyJztcclxuICAgICAgICBjcmVhckJvdG9uZXNWZXJBYnJpclRhcmVhcyhkZXBvdCxmaWVsZE5hbWUsbGFiZWwpOyAvL25vIGVzcGVybyBwcm9tZXNhIHBvcnF1ZSBubyBlcyBuZWNlc2FyaW9cclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFicmlyUmVjZXBjaW9uPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgdmFyIGxhYmVsOid2ZXInfCdhYnJpcicgPSBkZXBvdC5yb3cuY2FyZ2Fkbz8ndmVyJzonYWJyaXInO1xyXG4gICAgICAgIGNyZWFyQm90b25lc1ZlckFicmlyVGFyZWFzKGRlcG90LGZpZWxkTmFtZSxsYWJlbCk7IC8vbm8gZXNwZXJvIHByb21lc2EgcG9ycXVlIG5vIGVzIG5lY2VzYXJpb1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMudmVySWNvbm9Tdmc9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICBsZXQgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTD0nJztcclxuICAgICAgICBpZihkZXBvdC5yb3cucGF0aF9pY29ub19zdmcpe1xyXG4gICAgICAgICAgICB2YXIgc3ZnID0gaHRtbC5zdmcoe1xyXG4gICAgICAgICAgICAgICAgY2xhc3M6XCJzdmctYWNjaW9uZXNcIlxyXG4gICAgICAgICAgICB9LFtcclxuICAgICAgICAgICAgICAgIGh0bWwucGF0aCh7XHJcbiAgICAgICAgICAgICAgICAgICAgZDpkZXBvdC5yb3cucGF0aF9pY29ub19zdmdcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKFwidmlld0JveFwiLFwiMCAwIDUwIDUwXCIpO1xyXG4gICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChzdmcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufTtcclxuXHJcbnZhciBjcmVhclNWRyA9IChwYXRoOnN0cmluZyxwcm9wczphbnkpID0+IHtcclxuICAgIHZhciBzdmcgPSBodG1sLnN2Zyhwcm9wcyB8fCB7fSxbXHJcbiAgICAgICAgaHRtbC5wYXRoKHtcclxuICAgICAgICAgICAgZDpwYXRoXHJcbiAgICAgICAgfSlcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIixcIjAgMCA1MCA1MFwiKTtcclxuICAgIHJldHVybiBzdmdcclxufVxyXG52YXIgY3JlYXJCb3RvbkFjY2lvbiA9IChkZXBvdDpteU93bi5EZXBvdCwgYWN0aW9uOkVzdGFkb0FjY2lvbik9PntcclxuICAgIHZhciBzdmcgPSBjcmVhclNWRyhhY3Rpb24ucGF0aF9pY29ub19zdmcse2NsYXNzOlwic3ZnLWFjY2lvbmVzXCJ9KVxyXG4gICAgaWYoYWN0aW9uLmRlc2FjdGl2YV9ib3Rvbil7XHJcbiAgICAgICAgcmV0dXJuIHN2Z1xyXG4gICAgfVxyXG4gICAgbGV0IGJ1dHRvbiA9IGh0bWwuYnV0dG9uKHtcclxuICAgICAgICBjbGFzczpgYm90b24tYWNjaW9uIGJvdG9uLWFjY2lvbi0ke2FjdGlvbi5lYWNjaW9uX2RpcmVjY2lvbn1gXHJcbiAgICB9LFtcclxuICAgICAgICBgJHthY3Rpb24uZWFjY2lvbn1gLFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZSBzdmcgZXMgaHRtbGVsZW1lbnRcclxuICAgICAgICBhY3Rpb24ucGF0aF9pY29ub19zdmc/c3ZnOm51bGwsXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIGJ1dHRvbi5vbmNsaWNrID0gKCk9PiB7XHJcbiAgICAgICAgdmFyIGFjdGlvbkZ1biA9IGFzeW5jICgpPT57XHJcbiAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgbXkuYWpheC5hY2Npb25fdGFyZWFzX3RlbV9lamVjdXRhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmVhOiBkZXBvdC5yb3cudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5jOiBkZXBvdC5yb3cuZW5jLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmRpY2lvbjogYWN0aW9uLmNvbmRpY2lvbixcclxuICAgICAgICAgICAgICAgICAgICBhY2Npb246IGFjdGlvblxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpXHJcbiAgICAgICAgICAgICAgICB2YXIgZ3JpZD1kZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QpXHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgIH1maW5hbGx5e1xyXG4gICAgICAgICAgICAgICAgLy9yZXRyYXNvIGxhIGhhYmlsaXRhY2nDs24gcG9ycXVlIGEgdmVjZXMgdGFyZGEgZW4gcmVkaWJ1amFyc2UgbGEgYm90b25lcmEgeSBwdWVkZSB0cmFlciBwcm9ibGVtYXMgc2kgZGFuIGRvYmxlIGNsaWNrIFxyXG4gICAgICAgICAgICAgICAgLy95YSBxdWUgZWplY3V0YSBudWV2YW1lbnRlIHVuYSBhY2Npw7NuIHF1ZSB5YSBzZSBlamVjdXTDsyAoeSB0ZXJtaW7DsykgYW50ZXNcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PmJ1dHRvbi5kaXNhYmxlZD1mYWxzZSwzMDAwKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHZhciBjb25maXJtUHJvbWlzZU9wdHM6IERpYWxvZ09wdGlvbnMgPSB7fVxyXG4gICAgICAgIGlmKGFjdGlvbi5jb25maXJtYSl7XHJcbiAgICAgICAgICAgIGNvbmZpcm1Qcm9taXNlT3B0cy5hc2tGb3JOb1JlcGVhdCA9ICdubyB2b2x2ZXIgYSBtb3N0cmFyJzsgLy9tdWVzdHJhIG1lbnNhamUgcG9yIGRlZmF1bHQgcGVybyBhbmRhIGlndWFsXHJcbiAgICAgICAgICAgIHZhciBidXR0b25zRGVmID0gW1xyXG4gICAgICAgICAgICAgICAge2xhYmVsOidzw60nLCB2YWx1ZTp0cnVlfSxcclxuICAgICAgICAgICAgICAgIHtsYWJlbDonbm8nLCB2YWx1ZTpmYWxzZX1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICBjb25maXJtUHJvbWlzZShgY29uZmlybWEgYWNjacOzbiBcIiR7YWN0aW9uLmVhY2Npb259XCI/YCwgey4uLmNvbmZpcm1Qcm9taXNlT3B0cywgYnV0dG9uc0RlZn0pLnRoZW4oYWN0aW9uRnVuKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgYWN0aW9uRnVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1dHRvblxyXG59XHJcblxyXG52YXIgY3JlYXJCb3RvbmVzQWNjaW9uZXMgPSBhc3luYyAob3B0czp7ZGVwb3Q6bXlPd24uRGVwb3QsIGZpZWxkTmFtZTpzdHJpbmcsIGRpcmVjY2lvbjogRGlyZWNjaW9uQWNjaW9ufSk9PntcclxuICAgIGxldCB7ZGVwb3QsZmllbGROYW1lLGRpcmVjY2lvbn0gPSBvcHRzO1xyXG4gICAgbGV0IHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgIHRkLmlubmVySFRNTD0nJztcclxuICAgIChkZXBvdC5yb3dDb250cm9scy5hY2Npb25lcy5nZXRUeXBlZFZhbHVlKCl8fFtdKVxyXG4gICAgICAgIC5maWx0ZXIoKGFjdGlvbjpFc3RhZG9BY2Npb24pPT5hY3Rpb24uZWFjY2lvbl9kaXJlY2Npb249PWRpcmVjY2lvbilcclxuICAgICAgICAuZm9yRWFjaCgoYWN0aW9uOkVzdGFkb0FjY2lvbik9PnRkLmFwcGVuZENoaWxkKGNyZWFyQm90b25BY2Npb24oZGVwb3QsIGFjdGlvbikpKTtcclxufVxyXG5cclxudmFyIGNyZWFyU3dpdGNoID0gKG9wdHM6e3JvdW5kPzpib29sZWFuLCBkaXNhYmxlZD86Ym9vbGVhbiwgY2hlY2tlZD86Ym9vbGVhbiwgb25DbGlja0Z1bjpGdW5jdGlvbiwgb25FcnJGdW4/OkZ1bmN0aW9ufSk9PntcclxuICAgIHZhciBjaGVja2JveCA9IGh0bWwuaW5wdXQoe3R5cGU6J2NoZWNrYm94JywgY2hlY2tlZDpvcHRzLmNoZWNrZWR9KS5jcmVhdGUoKTtcclxuICAgIGNoZWNrYm94Lm9uY2xpY2sgPSBhc3luYygpPT57XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBjaGVja2JveC5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICBhd2FpdCBvcHRzLm9uQ2xpY2tGdW4oKVxyXG4gICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICBhbGVydFByb21pc2UoZXJyLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgIH1maW5hbGx5e1xyXG4gICAgICAgICAgICBjaGVja2JveC5kaXNhYmxlZD1mYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaHRtbC5sYWJlbCh7Y2xhc3M6J3N3aXRjaCd9LFtcclxuICAgICAgICBjaGVja2JveCxcclxuICAgICAgICBodG1sLnNwYW4oe2NsYXNzOmBzbGlkZXIgJHtvcHRzLnJvdW5kPydyb3VuZCc6Jyd9YH0pLFxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbn1cclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmhhYmlsaXRhcj17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIHZhciB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgdGQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICB0ZC5hcHBlbmRDaGlsZChcclxuICAgICAgICAgICAgY3JlYXJTd2l0Y2goe1xyXG4gICAgICAgICAgICAgICAgcm91bmQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNoZWNrZWQ6ZGVwb3Qucm93LmhhYmlsaXRhZGEsXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrRnVuOiBhc3luYyAoKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15LmFqYXguZW5jdWVzdGFfaGFiaWxpdGFyX2Rlc2hhYmlsaXRhcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5jOiBkZXBvdC5yb3cuZW5jXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdyaWQ9ZGVwb3QubWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT5ncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCksMzAwKTsvL3BhcmEgcXVlIHNlIHZlYSBlbCBlZmVjdG9cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWNjaW9uZXNBdmFuY2U9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICBjcmVhckJvdG9uZXNBY2Npb25lcyh7ZGVwb3QsZmllbGROYW1lLGRpcmVjY2lvbjonYXZhbmNlJ30pO1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWNjaW9uZXNSZXRyb2Nlc289e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICBjcmVhckJvdG9uZXNBY2Npb25lcyh7ZGVwb3QsZmllbGROYW1lLGRpcmVjY2lvbjoncmV0cm9jZXNvJ30pO1xyXG4gICAgfVxyXG59O1xyXG5cclxubXlPd24uY2xpZW50U2lkZXMuYWNjaW9uZXNCbGFucXVlbz17XHJcbiAgICBwcmVwYXJlOiAoX2RlcG90LCBfZmllbGROYW1lKT0+e30sXHJcbiAgICB1cGRhdGU6IChkZXBvdCwgZmllbGROYW1lKT0+e1xyXG4gICAgICAgIGNyZWFyQm90b25lc0FjY2lvbmVzKHtkZXBvdCxmaWVsZE5hbWUsZGlyZWNjaW9uOidibGFucXVlbyd9KTtcclxuICAgIH1cclxufTtcclxuXHJcbmZ1bmN0aW9uIFxyXG5ib3RvbkNsaWVudFNpZGVFbkdyaWxsYShvcHRzOiB7IG5vbWJyZUJvdG9uOiBzdHJpbmcsIGxsYW1hZGE6IChkZXBvdDogbXlPd24uRGVwb3QpID0+IFByb21pc2U8YW55PiB9KSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHByZXBhcmU6IGZ1bmN0aW9uIChkZXBvdDogbXlPd24uRGVwb3QsIGZpZWxkTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICAgICAgICAgIHZhciBib3RvbiA9IGh0bWwuYnV0dG9uKG9wdHMubm9tYnJlQm90b24pLmNyZWF0ZSgpO1xyXG4gICAgICAgICAgICB0ZC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZChib3Rvbik7XHJcbiAgICAgICAgICAgIHZhciByZXN0YXVyYXJCb3RvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGJvdG9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9IG9wdHMubm9tYnJlQm90b247XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYm90b24ub25jbGljayA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGJvdG9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gJ3Byb2Nlc2FuZG8uLi4nO1xyXG4gICAgICAgICAgICAgICAgb3B0cy5sbGFtYWRhKGRlcG90KS50aGVuKGFzeW5jIGZ1bmN0aW9uKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzdWx0ICYmIHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmICdvaycgaW4gcmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzdWx0Lm9rKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncmlkPWRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBncmlkLnJldHJpZXZlUm93QW5kUmVmcmVzaChkZXBvdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVwb3QuZGV0YWlsQ29udHJvbHMuaW5jb25zaXN0ZW5jaWFzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBvdC5kZXRhaWxDb250cm9scy5pbmNvbnNpc3RlbmNpYXMuZm9yY2VEaXNwbGF5RGV0YWlsR3JpZCh7fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLnRleHRDb250ZW50ID0gIHJlc3VsdC5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24udGl0bGUgPSByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3Rvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnIzhGOCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHJlc3RhdXJhckJvdG9uLCAyNTAwKTtcclxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNGRjgnO1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vaWYgKChkZXBvdC5yb3cuY29uc2lzdGlkbz09bnVsbCAgJiYgZGVwb3Qucm93LnJlYSE9bnVsbCkgfHwgZGVwb3Qucm93Lm1vZGlmaWNhZG8hPW51bGwgJiYgZGVwb3Qucm93LmNvbnNpc3RpZG8hPW51bGwgJiYgZGVwb3Qucm93Lm1vZGlmaWNhZG8gPmRlcG90LnJvdy5jb25zaXN0aWRvKXtcclxuICAgICAgICAgICAgLy8gICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yPScjOENGJ1xyXG4gICAgICAgICAgICAvL31cclxuICAgICAgICB9ICAgICAgICBcclxuICAgIH07XHJcbn1cclxuXHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5jb25zaXN0aXIgPSBib3RvbkNsaWVudFNpZGVFbkdyaWxsYSh7XHJcbiAgICBub21icmVCb3RvbjogJ2NvbnNpc3RpcicsXHJcbiAgICBsbGFtYWRhOiBmdW5jdGlvbiAoZGVwb3Q6IG15T3duLkRlcG90KSB7XHJcbiAgICAgICAgdmFyIG15UmVhRmllbGROYW1lID0gZGVwb3QubWFuYWdlci5kZWYudGFibGVOYW1lPT1cInRlbVwiPydyZWEnOid1bHRfcmVhJztcclxuICAgICAgICB2YXIgZmlsdHJvUmVhPWNvbnNpc3Rpcl9maWx0cm8oZGVwb3Qucm93LnRhcmVhLCBkZXBvdC5yb3dbbXlSZWFGaWVsZE5hbWVdLCBkZXBvdC5yb3cucmVhKVxyXG4gICAgICAgIHJldHVybiBmaWx0cm9SZWE/IG15T3duLmFqYXguY29uc2lzdGlyX2VuY3Vlc3RhKHtcclxuICAgICAgICAgICAgb3BlcmF0aXZvOiBkZXBvdC5yb3cub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBpZF9jYXNvOiBkZXBvdC5yb3cuZW5jXHJcbiAgICAgICAgfSk6IGFsZXJ0UHJvbWlzZSgnTGEgZW5jdWVzdGEgZGViZSB0ZW5lciBkYXRvIGVuIHJlYSBwYXJhIHBvZGVyIGNvbnNpc3RpcmxhLicpO1xyXG4gICAgfVxyXG59KTtcclxuXHJcbm15T3duLndTY3JlZW5zLmRlbW89YXN5bmMgZnVuY3Rpb24oX2FkZHJQYXJhbXMpe1xyXG4gICAgLy8gQHRzLWlnbm9yZSBkZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsIGdsb2JhbFxyXG4gICAgd2luZG93LmRlc3BsZWdhckZvcm11bGFyaW9BY3R1YWwoe21vZG9EZW1vOnRydWV9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gYXJyYXlGbGF0PFQ+KGFycmF5czpUW11bXSk6VFtde1xyXG4gICAgcmV0dXJuIChbXSBhcyBUW10pLmNvbmNhdC5hcHBseShbXSwgYXJyYXlzKTtcclxufVxyXG4iXX0=
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
(function (factory) {
|
|
11
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
12
|
+
var v = factory(require, exports);
|
|
13
|
+
if (v !== undefined) module.exports = v;
|
|
14
|
+
}
|
|
15
|
+
else if (typeof define === "function" && define.amd) {
|
|
16
|
+
define(["require", "exports", "js-to-html", "../unlogged/redux-formulario", "like-ar", "../unlogged/bypass-formulario", "../unlogged/abrir-formulario"], factory);
|
|
17
|
+
}
|
|
18
|
+
})(function (require, exports) {
|
|
19
|
+
"use strict";
|
|
20
|
+
var _a, _b;
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
const js_to_html_1 = require("js-to-html");
|
|
23
|
+
const redux_formulario_1 = require("../unlogged/redux-formulario");
|
|
24
|
+
const likeAr = require("like-ar");
|
|
25
|
+
const bypass_formulario_1 = require("../unlogged/bypass-formulario");
|
|
26
|
+
const abrir_formulario_1 = require("../unlogged/abrir-formulario");
|
|
27
|
+
//TODO GENERALIZAR
|
|
28
|
+
const TAREA_DEFAULT = 'encu';
|
|
29
|
+
var OPERATIVO_DEFAULT = null;
|
|
30
|
+
myOwn.autoSetupFunctions.push(() => __awaiter(void 0, void 0, void 0, function* () {
|
|
31
|
+
var my = myOwn;
|
|
32
|
+
try {
|
|
33
|
+
OPERATIVO_DEFAULT = yield my.ajax.operativo_get({});
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
OPERATIVO_DEFAULT = null;
|
|
37
|
+
}
|
|
38
|
+
myOwn.wScreens.abrir_encuesta = {
|
|
39
|
+
parameters: [
|
|
40
|
+
{ name: 'operativo', typeName: 'text', defaultValue: OPERATIVO_DEFAULT, references: 'operativos' },
|
|
41
|
+
{ name: 'tarea', typeName: 'text', defaultValue: TAREA_DEFAULT, references: 'tareas' },
|
|
42
|
+
{ name: 'encuesta', typeName: 'integer', defaultValue: 130031 }
|
|
43
|
+
],
|
|
44
|
+
autoproced: true,
|
|
45
|
+
mainAction: (params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
46
|
+
var _c;
|
|
47
|
+
// antes: abrirDirecto
|
|
48
|
+
var { operativo, encuesta, tarea } = params;
|
|
49
|
+
var estructura = (0, bypass_formulario_1.getEstructura)();
|
|
50
|
+
var carga = yield my.ajax.dm_forpkraiz_cargar({ operativo, vivienda: encuesta, tarea });
|
|
51
|
+
if (!estructura || ((_c = estructura.timestamp) !== null && _c !== void 0 ? _c : 0) < carga.timestampEstructura || estructura.operativo != operativo || my.config.config.devel) {
|
|
52
|
+
estructura = yield (0, redux_formulario_1.traerEstructura)({ operativo });
|
|
53
|
+
(0, abrir_formulario_1.cargarEstructura)(estructura);
|
|
54
|
+
}
|
|
55
|
+
//@ts-ignore
|
|
56
|
+
var state = {};
|
|
57
|
+
inicializarState(state);
|
|
58
|
+
var forPkRaiz = { formulario: carga.informacionHdr[encuesta].tarea.main_form, vivienda: encuesta };
|
|
59
|
+
(0, bypass_formulario_1.setPersistirDatosByPass)(function persistirDatosByPassEnBaseDeDatos(persistentes) {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
if (persistentes.soloLectura) {
|
|
62
|
+
throw new Error("Está intentando modificar una encuesta abierta como solo lectura, no se guardaron los cambios");
|
|
63
|
+
}
|
|
64
|
+
yield my.ajax.dm_forpkraiz_descargar({ operativo, persistentes });
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
if (!carga.respuestas.viviendas[forPkRaiz.vivienda]) {
|
|
68
|
+
throw new Error(`No se encuentra la vivienda ${forPkRaiz.vivienda}`);
|
|
69
|
+
}
|
|
70
|
+
(0, abrir_formulario_1.cargarHojaDeRuta)(Object.assign(Object.assign({}, carga), { modoAlmacenamiento: 'session' }));
|
|
71
|
+
// @ts-ignore
|
|
72
|
+
desplegarFormularioActual({ operativo, modoDemo: false, forPkRaiz });
|
|
73
|
+
})
|
|
74
|
+
};
|
|
75
|
+
myOwn.wScreens.obtener_telefono = {
|
|
76
|
+
parameters: [],
|
|
77
|
+
autoproced: true,
|
|
78
|
+
mainAction: (_params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
|
+
// antes: abrirDirecto
|
|
80
|
+
var { operativo, tarea } = { operativo: OPERATIVO_DEFAULT, tarea: TAREA_DEFAULT };
|
|
81
|
+
let encuesta = parseInt(yield my.ajax.get_random_free_case({ operativo }));
|
|
82
|
+
yield myOwn.wScreens.abrir_encuesta.mainAction({ operativo, encuesta, tarea });
|
|
83
|
+
})
|
|
84
|
+
};
|
|
85
|
+
myOwn.wScreens.consistir_encuesta = {
|
|
86
|
+
parameters: [
|
|
87
|
+
{ name: 'operativo', typeName: 'text', defaultValue: OPERATIVO_DEFAULT, references: 'operativos' },
|
|
88
|
+
{ name: 'tarea', typeName: 'text' },
|
|
89
|
+
{ name: 'encuesta', typeName: 'integer' }
|
|
90
|
+
],
|
|
91
|
+
autoproced: true,
|
|
92
|
+
mainAction: (params) => __awaiter(void 0, void 0, void 0, function* () {
|
|
93
|
+
var { operativo, tarea, encuesta } = params;
|
|
94
|
+
var result = yield myOwn.ajax.consistir_encuesta({
|
|
95
|
+
operativo: operativo,
|
|
96
|
+
id_caso: encuesta
|
|
97
|
+
});
|
|
98
|
+
if (result.ok) {
|
|
99
|
+
var fixedFields = [];
|
|
100
|
+
fixedFields.push({ fieldName: 'operativo', value: operativo });
|
|
101
|
+
fixedFields.push({ fieldName: 'vivienda', value: encuesta });
|
|
102
|
+
var mainLayout = document.getElementById('main_layout');
|
|
103
|
+
var divGrilla = js_to_html_1.html.div({ id: 'inconsistencias' }).create();
|
|
104
|
+
mainLayout.insertBefore(divGrilla, mainLayout.firstChild);
|
|
105
|
+
mainLayout.insertBefore(crearBotonVerAbrirEncuesta(operativo, tarea, encuesta, `ir a encuesta ${encuesta}`), mainLayout.firstChild);
|
|
106
|
+
my.tableGrid("inconsistencias", divGrilla, { tableDef: {}, fixedFields: fixedFields });
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
throw new Error(result.message);
|
|
110
|
+
}
|
|
111
|
+
})
|
|
112
|
+
};
|
|
113
|
+
}));
|
|
114
|
+
//quita bootstrap del head para que no rompa los estilos de BEPlus (solo se usa bootstrap en el form)
|
|
115
|
+
var linkNode = document.querySelectorAll('[href="css/bootstrap.min.css"]');
|
|
116
|
+
(_b = (_a = linkNode[0]) === null || _a === void 0 ? void 0 : _a.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(linkNode[0]);
|
|
117
|
+
function consistir_filtro(tarea, rea_tem, rea) {
|
|
118
|
+
return tarea ? rea_tem : rea;
|
|
119
|
+
}
|
|
120
|
+
;
|
|
121
|
+
var tareas = null;
|
|
122
|
+
function htmlNumero(num) {
|
|
123
|
+
return js_to_html_1.html.span({ class: 'numero' }, '' + (num !== null && num !== void 0 ? num : ''));
|
|
124
|
+
}
|
|
125
|
+
var persistirEnMemoria = (persistentes) => __awaiter(void 0, void 0, void 0, function* () {
|
|
126
|
+
var { modoAlmacenamiento } = persistentes;
|
|
127
|
+
if (modoAlmacenamiento == 'local') {
|
|
128
|
+
my.setLocalVar(abrir_formulario_1.GLOVAR_DATOSBYPASS, persistentes);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
my.setSessionVar(abrir_formulario_1.GLOVAR_DATOSBYPASS, persistentes);
|
|
132
|
+
}
|
|
133
|
+
my.setSessionVar(abrir_formulario_1.GLOVAR_MODOBYPASS, modoAlmacenamiento);
|
|
134
|
+
});
|
|
135
|
+
function sincronizarDatos(persistentes) {
|
|
136
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
var datos = yield my.ajax.dm_sincronizar({ persistentes });
|
|
138
|
+
var operativo = datos.operativo;
|
|
139
|
+
persistirEnMemoria(Object.assign(Object.assign({}, datos), { modoAlmacenamiento: 'local' }));
|
|
140
|
+
var estructura = yield (0, redux_formulario_1.traerEstructura)({ operativo });
|
|
141
|
+
my.setLocalVar(abrir_formulario_1.GLOVAR_ESTRUCTURA, estructura);
|
|
142
|
+
my.removeLocalVar(abrir_formulario_1.BACKUPS);
|
|
143
|
+
return datos;
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
var mostrarInfoLocal = (divAvisoSincro, titulo, nroSincro, mostrarLinkHdr) => {
|
|
147
|
+
let datosByPass = my.getLocalVar(abrir_formulario_1.GLOVAR_DATOSBYPASS);
|
|
148
|
+
if (datosByPass) {
|
|
149
|
+
divAvisoSincro.append(js_to_html_1.html.div({ id: 'aviso-sincro' }, [
|
|
150
|
+
nroSincro ? js_to_html_1.html.p(["Número de sincronización: ", js_to_html_1.html.b("" + nroSincro.toString())]) : null,
|
|
151
|
+
js_to_html_1.html.h4(titulo),
|
|
152
|
+
js_to_html_1.html.p([htmlNumero(likeAr(datosByPass.cargas).array().length), ' areas: ', likeAr(datosByPass.cargas).keys().join(', ')]),
|
|
153
|
+
js_to_html_1.html.p([htmlNumero(likeAr(datosByPass.respuestas.viviendas).array().length), ' viviendas']),
|
|
154
|
+
mostrarLinkHdr ? js_to_html_1.html.a({ href: './campo' }, [js_to_html_1.html.b('IR A LA HOJA DE RUTA')]) : null
|
|
155
|
+
]).create());
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
divAvisoSincro.appendChild(js_to_html_1.html.div({ class: 'aviso' }, [
|
|
159
|
+
js_to_html_1.html.h4('Sistema vacío'),
|
|
160
|
+
js_to_html_1.html.p('No hay información de formularios'),
|
|
161
|
+
js_to_html_1.html.p('No hay información de viviendas')
|
|
162
|
+
]).create());
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
var procederSincroFun = (button, divAvisoSincro) => __awaiter(void 0, void 0, void 0, function* () {
|
|
166
|
+
button.disabled = true;
|
|
167
|
+
button.className = 'download-dm-button';
|
|
168
|
+
divAvisoSincro.innerHTML = '';
|
|
169
|
+
try {
|
|
170
|
+
var datosByPass = my.getLocalVar(abrir_formulario_1.GLOVAR_DATOSBYPASS);
|
|
171
|
+
var datos = yield sincronizarDatos(datosByPass);
|
|
172
|
+
mostrarInfoLocal(divAvisoSincro, 'datos recibidos', datos.num_sincro, true);
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
alertPromise(err.message);
|
|
176
|
+
throw err;
|
|
177
|
+
}
|
|
178
|
+
finally {
|
|
179
|
+
button.disabled = false;
|
|
180
|
+
button.className = 'download-dm-button-cont';
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
myOwn.wScreens.sincronizar_dm = function () {
|
|
184
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
185
|
+
var mainLayout = document.getElementById('main_layout');
|
|
186
|
+
var procederButton = js_to_html_1.html.button({ class: 'download-dm-button-cont' }, 'proceder ⇒').create();
|
|
187
|
+
var divAvisoSincro = js_to_html_1.html.div().create();
|
|
188
|
+
mostrarInfoLocal(mainLayout, 'información a transmitir', null, false);
|
|
189
|
+
mainLayout.appendChild(procederButton);
|
|
190
|
+
mainLayout.appendChild(divAvisoSincro);
|
|
191
|
+
procederButton.onclick = () => procederSincroFun(procederButton, divAvisoSincro);
|
|
192
|
+
});
|
|
193
|
+
};
|
|
194
|
+
function inicializarState(state) {
|
|
195
|
+
state.modo = {
|
|
196
|
+
demo: false
|
|
197
|
+
};
|
|
198
|
+
// OJO state.opciones se modifica acá y en otro lado con este mismo cartel
|
|
199
|
+
state.opciones = {
|
|
200
|
+
bienvenido: true,
|
|
201
|
+
forPk: null,
|
|
202
|
+
pilaForPk: [],
|
|
203
|
+
modoDespliegue: "relevamiento",
|
|
204
|
+
modoDirecto: false,
|
|
205
|
+
modoBorrarRespuesta: null,
|
|
206
|
+
conCampoOpciones: false,
|
|
207
|
+
saltoAutomatico: true,
|
|
208
|
+
};
|
|
209
|
+
//@ts-ignore
|
|
210
|
+
state.feedbackRowValidator = {};
|
|
211
|
+
}
|
|
212
|
+
/*
|
|
213
|
+
function mostrarDatosPersona(hayDatos:boolean, datos:any, divResult:HTMLDivElement){
|
|
214
|
+
//TODO: EVALUAR SI CONVIENE TRAERLO DE LA BASE
|
|
215
|
+
var tiposDocumento = ['DNI argentino', 'Documento extranjero', 'No tiene documento', 'Otro'];
|
|
216
|
+
var paisDocumento = ['Uruguay', 'Paraguay', 'Brasil', 'Bolivia', 'Chile', 'Perú', 'Venezuela', 'Otro'];
|
|
217
|
+
divResult.appendChild(
|
|
218
|
+
hayDatos?
|
|
219
|
+
html.div({class:'datos-persona-cargada'},[
|
|
220
|
+
html.h2("Datos persona"),
|
|
221
|
+
html.div({class:'ficha-persona'},[
|
|
222
|
+
html.div([html.label('Apellido: '), datos.apellido]),
|
|
223
|
+
html.div([html.label('Nombres: '), datos.nombres]),
|
|
224
|
+
datos.tipoDocumento?
|
|
225
|
+
html.div([
|
|
226
|
+
html.label('Tipo documento: '),
|
|
227
|
+
tiposDocumento[datos.tipoDocumento-1],
|
|
228
|
+
datos.tipoDocumento==4 && datos.tipoDocumentoEspecificado?' ('+ datos.tipoDocumentoEspecificado+')':'',
|
|
229
|
+
])
|
|
230
|
+
:
|
|
231
|
+
'',
|
|
232
|
+
datos.tipoDocumento==2 && datos.paisDocumento?
|
|
233
|
+
html.div([
|
|
234
|
+
html.label('Pais: '),
|
|
235
|
+
paisDocumento[datos.paisDocumento-1],
|
|
236
|
+
datos.paisDocumento==8 && datos.paisDocumentoEspecificado?' ('+datos.paisDocumentoEspecificado+')':'',
|
|
237
|
+
])
|
|
238
|
+
:
|
|
239
|
+
'',
|
|
240
|
+
datos.tipoDocumento!=3 && datos.tipoDocumento?html.div([html.label('Nº Documento: '), datos.documento]):'',
|
|
241
|
+
datos.celular?html.div([html.label('Cel.: '), datos.celular]):'',
|
|
242
|
+
datos.email?html.div([html.label('Email: '), datos.email]):'',
|
|
243
|
+
datos.telefonoAlternativo?html.div([html.label('Tel. alternativo: '), datos.telefonoAlternativo]):'',
|
|
244
|
+
datos.observaciones?html.div([html.label('Observaciones: '), datos.observaciones]):'',
|
|
245
|
+
])
|
|
246
|
+
]).create()
|
|
247
|
+
:
|
|
248
|
+
html.p("No se encontró una encuesta para la etiqueta cargada").create()
|
|
249
|
+
)
|
|
250
|
+
}
|
|
251
|
+
*/
|
|
252
|
+
/*myOwn.clientSides.tareasTemRow={
|
|
253
|
+
update:(depot)=>{
|
|
254
|
+
var tarea:'nada'|'preasignar'|'cargar'|'realizar'|'verificar'='nada';
|
|
255
|
+
var row=depot.row;
|
|
256
|
+
// @ts-ignore
|
|
257
|
+
var idper=my.config.idper;
|
|
258
|
+
var esperar:boolean=false;
|
|
259
|
+
if(row.habilitada){
|
|
260
|
+
if(!row.asignante && !row.asignado){
|
|
261
|
+
tarea='preasignar';
|
|
262
|
+
esperar=true;
|
|
263
|
+
}else if(!row.asignado || !row.fecha_asignacion || !row.operacion){
|
|
264
|
+
tarea='cargar';
|
|
265
|
+
esperar=row.asignante!=idper;
|
|
266
|
+
}else if(!row.rea){
|
|
267
|
+
tarea='realizar';
|
|
268
|
+
esperar=row.asignado!=idper;
|
|
269
|
+
}else if(!row.verificado){
|
|
270
|
+
tarea='verificar';
|
|
271
|
+
esperar=row.asignante!=idper;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
var poner={
|
|
275
|
+
asignante :tarea=='preasignar' && (esperar?'esperar':'normal'),
|
|
276
|
+
asignado :tarea=='cargar' && (esperar?'esperar':'normal'),
|
|
277
|
+
fecha_asignacion :tarea=='cargar' && (esperar?'esperar':'normal'),
|
|
278
|
+
operacion :tarea=='cargar' && (esperar?'esperar':'normal'),
|
|
279
|
+
carga_observaciones:(tarea=='cargar' || tarea=='realizar' && !row.cargado && !row.rea ) && row.asignante==idper && 'optativo',
|
|
280
|
+
verificado :tarea=='verificar' && (esperar?'esperar':'normal'),
|
|
281
|
+
obs_verificado :tarea=='verificar' && (esperar?'esperar':'optativo'),
|
|
282
|
+
}
|
|
283
|
+
likeAr(poner).forEach((valor, campo)=>{
|
|
284
|
+
if(!valor){
|
|
285
|
+
depot.rowControls[campo].removeAttribute('my-mandatory')
|
|
286
|
+
}else{
|
|
287
|
+
depot.rowControls[campo].setAttribute('my-mandatory',valor);
|
|
288
|
+
}
|
|
289
|
+
})
|
|
290
|
+
},
|
|
291
|
+
prepare: function(){}
|
|
292
|
+
}
|
|
293
|
+
*/
|
|
294
|
+
var crearBotonVerAbrirEncuesta = (operativo, tarea, encuesta, label) => {
|
|
295
|
+
var up = {
|
|
296
|
+
operativo: operativo,
|
|
297
|
+
tarea: tarea,
|
|
298
|
+
encuesta: encuesta
|
|
299
|
+
};
|
|
300
|
+
let ver = my.createForkeableButton({ w: 'abrir_encuesta', up, autoproced: true, label }, {});
|
|
301
|
+
return ver;
|
|
302
|
+
};
|
|
303
|
+
var crearBotonesVerAbrirTareas = (depot, fieldName, label) => __awaiter(void 0, void 0, void 0, function* () {
|
|
304
|
+
tareas = tareas ? tareas : (yield myOwn.ajax.table_data({ table: `tareas`, fixedFields: [] }));
|
|
305
|
+
var misTareas = tareas.filter((tarea) => !!tarea.main_form && tarea.operativo == depot.row.operativo && depot.manager.def.tableName == 'tem' ? true : depot.row.tarea == tarea.tarea);
|
|
306
|
+
depot.rowControls[fieldName].innerHTML = '';
|
|
307
|
+
misTareas.forEach((tarea) => {
|
|
308
|
+
let buttonLabel = `${label} ${tarea.tarea}`;
|
|
309
|
+
let ver = crearBotonVerAbrirEncuesta(depot.row.operativo, tarea.tarea, Number(depot.row.enc), buttonLabel);
|
|
310
|
+
ver.style = 'margin:0px 2px;';
|
|
311
|
+
depot.rowControls[fieldName].appendChild(ver);
|
|
312
|
+
});
|
|
313
|
+
});
|
|
314
|
+
var getAbrirOver = (depot, _fieldName) => depot.row.cargado_dm || !depot.row['estados__permite_editar_encuesta'] ? 'ver' : 'abrir';
|
|
315
|
+
myOwn.clientSides.abrir = {
|
|
316
|
+
prepare: (_depot, _fieldName) => { },
|
|
317
|
+
update: (depot, fieldName) => {
|
|
318
|
+
var label = getAbrirOver(depot, fieldName);
|
|
319
|
+
crearBotonesVerAbrirTareas(depot, fieldName, label); //no espero promesa porque no es necesario
|
|
320
|
+
}
|
|
321
|
+
};
|
|
322
|
+
myOwn.clientSides.abrirRecepcion = {
|
|
323
|
+
prepare: (_depot, _fieldName) => { },
|
|
324
|
+
update: (depot, fieldName) => {
|
|
325
|
+
var label = getAbrirOver(depot, fieldName);
|
|
326
|
+
crearBotonesVerAbrirTareas(depot, fieldName, label); //no espero promesa porque no es necesario
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
myOwn.clientSides.verIconoSvg = {
|
|
330
|
+
prepare: (_depot, _fieldName) => { },
|
|
331
|
+
update: (depot, fieldName) => {
|
|
332
|
+
let td = depot.rowControls[fieldName];
|
|
333
|
+
td.innerHTML = '';
|
|
334
|
+
if (depot.row.path_icono_svg) {
|
|
335
|
+
var svg = js_to_html_1.html.svg({
|
|
336
|
+
class: "svg-acciones"
|
|
337
|
+
}, [
|
|
338
|
+
js_to_html_1.html.path({
|
|
339
|
+
d: depot.row.path_icono_svg
|
|
340
|
+
})
|
|
341
|
+
]).create();
|
|
342
|
+
svg.setAttribute("viewBox", "0 0 50 50");
|
|
343
|
+
td.appendChild(svg);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
};
|
|
347
|
+
var crearSVG = (path, props) => {
|
|
348
|
+
var svg = js_to_html_1.html.svg(props || {}, [
|
|
349
|
+
js_to_html_1.html.path({
|
|
350
|
+
d: path
|
|
351
|
+
})
|
|
352
|
+
]).create();
|
|
353
|
+
svg.setAttribute("viewBox", "0 0 50 50");
|
|
354
|
+
return svg;
|
|
355
|
+
};
|
|
356
|
+
var crearBotonAccion = (depot, action) => {
|
|
357
|
+
var svg = crearSVG(action.path_icono_svg, { class: "svg-acciones" });
|
|
358
|
+
if (action.desactiva_boton) {
|
|
359
|
+
return svg;
|
|
360
|
+
}
|
|
361
|
+
let button = js_to_html_1.html.button({
|
|
362
|
+
class: `boton-accion boton-accion-${action.eaccion_direccion}`
|
|
363
|
+
}, [
|
|
364
|
+
`${action.eaccion}`,
|
|
365
|
+
//@ts-ignore svg es htmlelement
|
|
366
|
+
action.path_icono_svg ? svg : null,
|
|
367
|
+
]).create();
|
|
368
|
+
button.onclick = () => {
|
|
369
|
+
var actionFun = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
370
|
+
button.disabled = true;
|
|
371
|
+
try {
|
|
372
|
+
var result = yield my.ajax.accion_tareas_tem_ejecutar({
|
|
373
|
+
operativo: depot.row.operativo,
|
|
374
|
+
tarea: depot.row.tarea,
|
|
375
|
+
enc: depot.row.enc,
|
|
376
|
+
condicion: action.condicion,
|
|
377
|
+
accion: action
|
|
378
|
+
});
|
|
379
|
+
console.log(result);
|
|
380
|
+
var grid = depot.manager;
|
|
381
|
+
grid.retrieveRowAndRefresh(depot);
|
|
382
|
+
}
|
|
383
|
+
catch (err) {
|
|
384
|
+
alertPromise(err.message);
|
|
385
|
+
throw err;
|
|
386
|
+
}
|
|
387
|
+
finally {
|
|
388
|
+
//retraso la habilitación porque a veces tarda en redibujarse la botonera y puede traer problemas si dan doble click
|
|
389
|
+
//ya que ejecuta nuevamente una acción que ya se ejecutó (y terminó) antes
|
|
390
|
+
setTimeout(() => button.disabled = false, 3000);
|
|
391
|
+
}
|
|
392
|
+
});
|
|
393
|
+
var confirmPromiseOpts = {};
|
|
394
|
+
if (action.confirma) {
|
|
395
|
+
confirmPromiseOpts.askForNoRepeat = 'no volver a mostrar'; //muestra mensaje por default pero anda igual
|
|
396
|
+
var buttonsDef = [
|
|
397
|
+
{ label: 'sí', value: true },
|
|
398
|
+
{ label: 'no', value: false }
|
|
399
|
+
];
|
|
400
|
+
confirmPromise(`confirma acción "${action.eaccion}"?`, Object.assign(Object.assign({}, confirmPromiseOpts), { buttonsDef })).then(actionFun);
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
actionFun();
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
return button;
|
|
407
|
+
};
|
|
408
|
+
var crearBotonesAcciones = (opts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
409
|
+
let { depot, fieldName, direccion } = opts;
|
|
410
|
+
let td = depot.rowControls[fieldName];
|
|
411
|
+
td.innerHTML = '';
|
|
412
|
+
(depot.rowControls.acciones.getTypedValue() || [])
|
|
413
|
+
.filter((action) => action.eaccion_direccion == direccion)
|
|
414
|
+
.forEach((action) => td.appendChild(crearBotonAccion(depot, action)));
|
|
415
|
+
});
|
|
416
|
+
var crearSwitch = (opts) => {
|
|
417
|
+
var checkbox = js_to_html_1.html.input({ type: 'checkbox', checked: opts.checked }).create();
|
|
418
|
+
checkbox.onclick = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
419
|
+
try {
|
|
420
|
+
checkbox.disabled = true;
|
|
421
|
+
yield opts.onClickFun();
|
|
422
|
+
}
|
|
423
|
+
catch (err) {
|
|
424
|
+
alertPromise(err.message);
|
|
425
|
+
throw err;
|
|
426
|
+
}
|
|
427
|
+
finally {
|
|
428
|
+
checkbox.disabled = false;
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
return js_to_html_1.html.label({ class: 'switch' }, [
|
|
432
|
+
checkbox,
|
|
433
|
+
js_to_html_1.html.span({ class: `slider ${opts.round ? 'round' : ''}` }),
|
|
434
|
+
]).create();
|
|
435
|
+
};
|
|
436
|
+
myOwn.clientSides.habilitar = {
|
|
437
|
+
prepare: (_depot, _fieldName) => { },
|
|
438
|
+
update: (depot, fieldName) => {
|
|
439
|
+
var td = depot.rowControls[fieldName];
|
|
440
|
+
td.innerHTML = "";
|
|
441
|
+
td.appendChild(crearSwitch({
|
|
442
|
+
round: true,
|
|
443
|
+
checked: depot.row.habilitada,
|
|
444
|
+
onClickFun: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
445
|
+
yield my.ajax.encuesta_habilitar_deshabilitar({
|
|
446
|
+
operativo: depot.row.operativo,
|
|
447
|
+
enc: depot.row.enc
|
|
448
|
+
});
|
|
449
|
+
var grid = depot.manager;
|
|
450
|
+
setTimeout(() => grid.retrieveRowAndRefresh(depot), 300); //para que se vea el efecto
|
|
451
|
+
})
|
|
452
|
+
}));
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
myOwn.clientSides.accionesAvance = {
|
|
456
|
+
prepare: (_depot, _fieldName) => { },
|
|
457
|
+
update: (depot, fieldName) => {
|
|
458
|
+
crearBotonesAcciones({ depot, fieldName, direccion: 'avance' });
|
|
459
|
+
}
|
|
460
|
+
};
|
|
461
|
+
myOwn.clientSides.accionesRetroceso = {
|
|
462
|
+
prepare: (_depot, _fieldName) => { },
|
|
463
|
+
update: (depot, fieldName) => {
|
|
464
|
+
crearBotonesAcciones({ depot, fieldName, direccion: 'retroceso' });
|
|
465
|
+
}
|
|
466
|
+
};
|
|
467
|
+
myOwn.clientSides.accionesBlanqueo = {
|
|
468
|
+
prepare: (_depot, _fieldName) => { },
|
|
469
|
+
update: (depot, fieldName) => {
|
|
470
|
+
crearBotonesAcciones({ depot, fieldName, direccion: 'blanqueo' });
|
|
471
|
+
}
|
|
472
|
+
};
|
|
473
|
+
function botonClientSideEnGrilla(opts) {
|
|
474
|
+
return {
|
|
475
|
+
prepare: function (depot, fieldName) {
|
|
476
|
+
var td = depot.rowControls[fieldName];
|
|
477
|
+
var boton = js_to_html_1.html.button(opts.nombreBoton).create();
|
|
478
|
+
td.innerHTML = "";
|
|
479
|
+
td.appendChild(boton);
|
|
480
|
+
var restaurarBoton = function () {
|
|
481
|
+
boton.disabled = false;
|
|
482
|
+
boton.textContent = opts.nombreBoton;
|
|
483
|
+
boton.style.backgroundColor = '';
|
|
484
|
+
};
|
|
485
|
+
boton.onclick = function () {
|
|
486
|
+
boton.disabled = true;
|
|
487
|
+
boton.textContent = 'procesando...';
|
|
488
|
+
opts.llamada(depot).then(function (result) {
|
|
489
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
490
|
+
if (result && typeof result === 'object' && 'ok' in result) {
|
|
491
|
+
if (result.ok) {
|
|
492
|
+
var grid = depot.manager;
|
|
493
|
+
yield grid.retrieveRowAndRefresh(depot);
|
|
494
|
+
if (depot.detailControls.inconsistencias) {
|
|
495
|
+
depot.detailControls.inconsistencias.forceDisplayDetailGrid({});
|
|
496
|
+
}
|
|
497
|
+
boton.textContent = result.message;
|
|
498
|
+
boton.title = result;
|
|
499
|
+
boton.style.backgroundColor = '#8F8';
|
|
500
|
+
}
|
|
501
|
+
else {
|
|
502
|
+
throw new Error(result.message);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
setTimeout(restaurarBoton, 2500);
|
|
506
|
+
});
|
|
507
|
+
}, function (err) {
|
|
508
|
+
boton.textContent = 'error';
|
|
509
|
+
boton.style.backgroundColor = '#FF8';
|
|
510
|
+
alertPromise(err.message);
|
|
511
|
+
});
|
|
512
|
+
};
|
|
513
|
+
//if ((depot.row.consistido==null && depot.row.rea!=null) || depot.row.modificado!=null && depot.row.consistido!=null && depot.row.modificado >depot.row.consistido){
|
|
514
|
+
// boton.style.backgroundColor='#8CF'
|
|
515
|
+
//}
|
|
516
|
+
}
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
myOwn.clientSides.consistir = botonClientSideEnGrilla({
|
|
520
|
+
nombreBoton: 'consistir',
|
|
521
|
+
llamada: function (depot) {
|
|
522
|
+
var myReaFieldName = depot.manager.def.tableName == "tem" ? 'rea' : 'ult_rea';
|
|
523
|
+
var filtroRea = consistir_filtro(depot.row.tarea, depot.row[myReaFieldName], depot.row.rea);
|
|
524
|
+
return filtroRea ? myOwn.ajax.consistir_encuesta({
|
|
525
|
+
operativo: depot.row.operativo,
|
|
526
|
+
id_caso: depot.row.enc
|
|
527
|
+
}) : alertPromise('La encuesta debe tener dato en rea para poder consistirla.');
|
|
528
|
+
}
|
|
529
|
+
});
|
|
530
|
+
myOwn.wScreens.demo = function (_addrParams) {
|
|
531
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
532
|
+
// @ts-ignore desplegarFormularioActual global
|
|
533
|
+
window.desplegarFormularioActual({ modoDemo: true });
|
|
534
|
+
});
|
|
535
|
+
};
|
|
536
|
+
function arrayFlat(arrays) {
|
|
537
|
+
return [].concat.apply([], arrays);
|
|
538
|
+
}
|
|
539
|
+
});
|
|
540
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsMkNBQWdDO0lBQ2hDLG1FQUE2RDtJQUk3RCxrQ0FBa0M7SUFDbEMscUVBQW9GO0lBQ3BGLG1FQUFrSjtJQUlsSixrQkFBa0I7SUFFbEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDO0lBQzdCLElBQUksaUJBQWlCLEdBQWMsSUFBSSxDQUFDO0lBRXhDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBUSxFQUFFO1FBQ3BDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNmLElBQUc7WUFDQyxpQkFBaUIsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZEO1FBQUEsT0FBTSxHQUFHLEVBQUM7WUFDUCxpQkFBaUIsR0FBQyxJQUFJLENBQUM7U0FDMUI7UUFDRCxLQUFLLENBQUMsUUFBUSxDQUFDLGNBQWMsR0FBQztZQUMxQixVQUFVLEVBQUM7Z0JBQ1AsRUFBQyxJQUFJLEVBQUMsV0FBVyxFQUFHLFFBQVEsRUFBQyxNQUFNLEVBQUUsWUFBWSxFQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBQyxZQUFZLEVBQUM7Z0JBQzdGLEVBQUMsSUFBSSxFQUFDLE9BQU8sRUFBTyxRQUFRLEVBQUMsTUFBTSxFQUFFLFlBQVksRUFBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBQztnQkFDdEYsRUFBQyxJQUFJLEVBQUMsVUFBVSxFQUFJLFFBQVEsRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFDLE1BQU0sRUFBQzthQUMvRDtZQUNELFVBQVUsRUFBQyxJQUFJO1lBQ2YsVUFBVSxFQUFDLENBQU8sTUFBTSxFQUFDLEVBQUU7O2dCQUN2QixzQkFBc0I7Z0JBQ3RCLElBQUksRUFBQyxTQUFTLEVB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IjtcclxuaW1wb3J0IHt0cmFlckVzdHJ1Y3R1cmF9IGZyb20gXCIuLi91bmxvZ2dlZC9yZWR1eC1mb3JtdWxhcmlvXCI7XHJcbmltcG9ydCB7IENhc29TdGF0ZSwgIFxyXG4gICAgSWRGb3JtdWxhcmlvLCBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcywgSWRFbmMsIElkT3BlcmF0aXZvLCBJZFRhcmVhLCBFc3RhZG9BY2Npb24sIERpcmVjY2lvbkFjY2lvbixcclxufSBmcm9tIFwiLi4vdW5sb2dnZWQvdGlwb3NcIjtcclxuaW1wb3J0ICogYXMgbGlrZUFyIGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCB7Z2V0RXN0cnVjdHVyYSwgc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3N9IGZyb20gXCIuLi91bmxvZ2dlZC9ieXBhc3MtZm9ybXVsYXJpb1wiXHJcbmltcG9ydCB7QkFDS1VQUywgY2FyZ2FyRXN0cnVjdHVyYSwgY2FyZ2FySG9qYURlUnV0YSwgR0xPVkFSX0RBVE9TQllQQVNTLCBHTE9WQVJfRVNUUlVDVFVSQSwgR0xPVkFSX01PRE9CWVBBU1N9IGZyb20gXCIuLi91bmxvZ2dlZC9hYnJpci1mb3JtdWxhcmlvXCJcclxuaW1wb3J0IHsgT3BlcmF0aXZvIH0gZnJvbSBcIm1ldGEtZW5jXCI7XHJcbmltcG9ydCB7c2xlZXAsIGNvYWxlc2NlfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcblxyXG4vL1RPRE8gR0VORVJBTElaQVJcclxuXHJcbmNvbnN0IFRBUkVBX0RFRkFVTFQgPSAnZW5jdSc7XHJcbnZhciBPUEVSQVRJVk9fREVGQVVMVDpzdHJpbmd8bnVsbD0gbnVsbDtcclxuXHJcbm15T3duLmF1dG9TZXR1cEZ1bmN0aW9ucy5wdXNoKGFzeW5jICgpPT57XHJcbiAgICB2YXIgbXkgPSBteU93bjsgICAgXHJcbiAgICB0cnl7XHJcbiAgICAgICAgT1BFUkFUSVZPX0RFRkFVTFQgPSBhd2FpdCBteS5hamF4Lm9wZXJhdGl2b19nZXQoe30pO1xyXG4gICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgT1BFUkFUSVZPX0RFRkFVTFQ9bnVsbDtcclxuICAgIH1cclxuICAgIG15T3duLndTY3JlZW5zLmFicmlyX2VuY3Vlc3RhPXtcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgLCB0eXBlTmFtZTondGV4dCcsIGRlZmF1bHRWYWx1ZTpPUEVSQVRJVk9fREVGQVVMVCwgcmVmZXJlbmNlczonb3BlcmF0aXZvcyd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAsIHR5cGVOYW1lOid0ZXh0JywgZGVmYXVsdFZhbHVlOlRBUkVBX0RFRkFVTFQsIHJlZmVyZW5jZXM6ICd0YXJlYXMnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuY3Vlc3RhJyAgLCB0eXBlTmFtZTonaW50ZWdlcicsIGRlZmF1bHRWYWx1ZToxMzAwMzF9XHJcbiAgICAgICAgXSxcclxuICAgICAgICBhdXRvcHJvY2VkOnRydWUsXHJcbiAgICAgICAgbWFpbkFjdGlvbjphc3luYyAocGFyYW1zKT0+e1xyXG4gICAgICAgICAgICAvLyBhbnRlczogYWJyaXJEaXJlY3RvXHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCBlbmN1ZXN0YSwgdGFyZWF9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB2YXIgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgICAgICAgICAgdmFyIGNhcmdhID0gYXdhaXQgbXkuYWpheC5kbV9mb3Jwa3JhaXpfY2FyZ2FyKHtvcGVyYXRpdm8sIHZpdmllbmRhOmVuY3Vlc3RhLCB0YXJlYX0pIGFzIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzO1xyXG4gICAgICAgICAgICBpZighZXN0cnVjdHVyYSB8fCAoZXN0cnVjdHVyYS50aW1lc3RhbXA/PzApIDwgY2FyZ2EudGltZXN0YW1wRXN0cnVjdHVyYSEgfHwgZXN0cnVjdHVyYS5vcGVyYXRpdm8gIT0gb3BlcmF0aXZvIHx8IG15LmNvbmZpZy5jb25maWcuZGV2ZWwpe1xyXG4gICAgICAgICAgICAgICAgZXN0cnVjdHVyYSA9IGF3YWl0IHRyYWVyRXN0cnVjdHVyYSh7b3BlcmF0aXZvfSlcclxuICAgICAgICAgICAgICAgIGNhcmdhckVzdHJ1Y3R1cmEoZXN0cnVjdHVyYSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHZhciBzdGF0ZTpDYXNvU3RhdGUgPSB7fVxyXG4gICAgICAgICAgICBpbmljaWFsaXphclN0YXRlKHN0YXRlKTtcclxuICAgICAgICAgICAgdmFyIGZvclBrUmFpeiA9IHtmb3JtdWxhcmlvOmNhcmdhLmluZm9ybWFjaW9uSGRyW2VuY3Vlc3RhIGFzIElkRW5jXS50YXJlYS5tYWluX2Zvcm0sIHZpdmllbmRhOmVuY3Vlc3RhfTtcclxuICAgICAgICAgICAgc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MoXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJEYXRvc0J5UGFzc0VuQmFzZURlRGF0b3MocGVyc2lzdGVudGVzOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihwZXJzaXN0ZW50ZXMuc29sb0xlY3R1cmEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFc3TDoSBpbnRlbnRhbmRvIG1vZGlmaWNhciB1bmEgZW5jdWVzdGEgYWJpZXJ0YSBjb21vIHNvbG8gbGVjdHVyYSwgbm8gc2UgZ3VhcmRhcm9uIGxvcyBjYW1iaW9zXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15LmFqYXguZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhcih7b3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXN9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICBpZighY2FyZ2EucmVzcHVlc3Rhcy52aXZpZW5kYXNbZm9yUGtSYWl6LnZpdmllbmRhIV0pe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBzZSBlbmN1ZW50cmEgbGEgdml2aWVuZGEgJHtmb3JQa1JhaXoudml2aWVuZGEhfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhcmdhckhvamFEZVJ1dGEoey4uLmNhcmdhLCBtb2RvQWxtYWNlbmFtaWVudG86J3Nlc3Npb24nfSk7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbCh7b3BlcmF0aXZvLCBtb2RvRGVtbzpmYWxzZSwgZm9yUGtSYWl6fSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIG15T3duLndTY3JlZW5zLm9idGVuZXJfdGVsZWZvbm89e1xyXG4gICAgICAgIHBhcmFtZXRlcnM6W10sXHJcbiAgICAgICAgYXV0b3Byb2NlZDp0cnVlLFxyXG4gICAgICAgIG1haW5BY3Rpb246YXN5bmMgKF9wYXJhbXMpPT57XHJcbiAgICAgICAgICAgIC8vIGFudGVzOiBhYnJpckRpcmVjdG9cclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sIHRhcmVhfSA9IHtvcGVyYXRpdm86IE9QRVJBVElWT19ERUZBVUxULCB0YXJlYTogVEFSRUFfREVGQVVMVH07XHJcbiAgICAgICAgICAgIGxldCBlbmN1ZXN0YSA9IHBhcnNlSW50KGF3YWl0IG15LmFqYXguZ2V0X3JhbmRvbV9mcmVlX2Nhc2Uoe29wZXJhdGl2b30pKTsgXHJcbiAgICAgICAgICAgIGF3YWl0IG15T3duLndTY3JlZW5zLmFicmlyX2VuY3Vlc3RhLm1haW5BY3Rpb24oe29wZXJhdGl2bywgZW5jdWVzdGEsIHRhcmVhfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIG15T3duLndTY3JlZW5zLmNvbnNpc3Rpcl9lbmN1ZXN0YT17XHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICwgdHlwZU5hbWU6J3RleHQnLCBkZWZhdWx0VmFsdWU6T1BFUkFUSVZPX0RFRkFVTFQsIHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jdWVzdGEnICAsIHR5cGVOYW1lOidpbnRlZ2VyJ31cclxuICAgICAgICBdLFxyXG4gICAgICAgIGF1dG9wcm9jZWQ6dHJ1ZSxcclxuICAgICAgICBtYWluQWN0aW9uOmFzeW5jIChwYXJhbXMpPT57XHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCB0YXJlYSwgZW5jdWVzdGEgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IG15T3duLmFqYXguY29uc2lzdGlyX2VuY3Vlc3RhKHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgaWRfY2FzbzogZW5jdWVzdGFcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmKHJlc3VsdC5vayl7XHJcbiAgICAgICAgICAgICAgICB2YXIgZml4ZWRGaWVsZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZpeGVkRmllbGRzLnB1c2goe2ZpZWxkTmFtZTogJ29wZXJhdGl2bycsIHZhbHVlOiBvcGVyYXRpdm99KTtcclxuICAgICAgICAgICAgICAgIGZpeGVkRmllbGRzLnB1c2goe2ZpZWxkTmFtZTogJ3ZpdmllbmRhJywgdmFsdWU6IGVuY3Vlc3RhfSk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWFpbkxheW91dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluX2xheW91dCcpITtcclxuICAgICAgICAgICAgICAgIHZhciBkaXZHcmlsbGEgPSBodG1sLmRpdih7aWQ6J2luY29uc2lzdGVuY2lhcyd9KS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgICAgIG1haW5MYXlvdXQuaW5zZXJ0QmVmb3JlKGRpdkdyaWxsYSwgbWFpbkxheW91dC5maXJzdENoaWxkKTtcclxuICAgICAgICAgICAgICAgIG1haW5MYXlvdXQuaW5zZXJ0QmVmb3JlKFxyXG4gICAgICAgICAgICAgICAgICAgIGNyZWFyQm90b25WZXJBYnJpckVuY3Vlc3RhKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmN1ZXN0YSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBpciBhIGVuY3Vlc3RhICR7ZW5jdWVzdGF9YFxyXG4gICAgICAgICAgICAgICAgICAgICksIFxyXG4gICAgICAgICAgICAgICAgICAgIG1haW5MYXlvdXQuZmlyc3RDaGlsZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG15LnRhYmxlR3JpZChcImluY29uc2lzdGVuY2lhc1wiLCBkaXZHcmlsbGEse3RhYmxlRGVmOnt9LGZpeGVkRmllbGRzOiBmaXhlZEZpZWxkc30pO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5cclxuXHJcbi8vcXVpdGEgYm9vdHN0cmFwIGRlbCBoZWFkIHBhcmEgcXVlIG5vIHJvbXBhIGxvcyBlc3RpbG9zIGRlIEJFUGx1cyAoc29sbyBzZSB1c2EgYm9vdHN0cmFwIGVuIGVsIGZvcm0pXHJcbnZhciBsaW5rTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tocmVmPVwiY3NzL2Jvb3RzdHJhcC5taW4uY3NzXCJdJyk7XHJcbmxpbmtOb2RlWzBdPy5wYXJlbnROb2RlPy5yZW1vdmVDaGlsZChsaW5rTm9kZVswXSk7XHJcblxyXG5mdW5jdGlvbiBjb25zaXN0aXJfZmlsdHJvKHRhcmVhLCByZWFfdGVtLCByZWEpe1xyXG4gICAgcmV0dXJuIHRhcmVhP3JlYV90ZW06cmVhO1xyXG59O1xyXG5cclxudmFyIHRhcmVhczphbnkgPSBudWxsO1xyXG5cclxuZnVuY3Rpb24gaHRtbE51bWVybyhudW06bnVtYmVyKXtcclxuICAgIHJldHVybiBodG1sLnNwYW4oe2NsYXNzOidudW1lcm8nfSwnJysobnVtPz8nJykpXHJcbn1cclxuXHJcbnZhciBwZXJzaXN0aXJFbk1lbW9yaWEgPSBhc3luYyAocGVyc2lzdGVudGVzOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzKSA9PiB7XHJcbiAgICB2YXIge21vZG9BbG1hY2VuYW1pZW50b30gPSBwZXJzaXN0ZW50ZXNcclxuICAgICAgICBpZihtb2RvQWxtYWNlbmFtaWVudG89PSdsb2NhbCcpe1xyXG4gICAgICAgICAgICBteS5zZXRMb2NhbFZhcihHTE9WQVJfREFUT1NCWVBBU1MsIHBlcnNpc3RlbnRlcylcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgbXkuc2V0U2Vzc2lvblZhcihHTE9WQVJfREFUT1NCWVBBU1MsIHBlcnNpc3RlbnRlcylcclxuICAgICAgICB9XHJcbiAgICAgICAgbXkuc2V0U2Vzc2lvblZhcihHTE9WQVJfTU9ET0JZUEFTUywgbW9kb0FsbWFjZW5hbWllbnRvKVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBzaW5jcm9uaXphckRhdG9zKHBlcnNpc3RlbnRlczpEYXRvc0J5UGFzc1BlcnNpc3RpYmxlc3xudWxsKXtcclxuICAgIHZhciBkYXRvcyA9IGF3YWl0IG15LmFqYXguZG1fc2luY3Jvbml6YXIoe3BlcnNpc3RlbnRlc30pO1xyXG4gICAgdmFyIG9wZXJhdGl2byA9IGRhdG9zLm9wZXJhdGl2bztcclxuICAgIHBlcnNpc3RpckVuTWVtb3JpYSh7Li4uZGF0b3MsIG1vZG9BbG1hY2VuYW1pZW50bzonbG9jYWwnfSk7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9IGF3YWl0IHRyYWVyRXN0cnVjdHVyYSh7b3BlcmF0aXZvfSlcclxuICAgIG15LnNldExvY2FsVmFyKEdMT1ZBUl9FU1RSVUNUVVJBLCBlc3RydWN0dXJhKTtcclxuICAgIG15LnJlbW92ZUxvY2FsVmFyKEJBQ0tVUFMpO1xyXG4gICAgcmV0dXJuIGRhdG9zO1xyXG59XHJcblxyXG5cclxuXHJcbnZhciBtb3N0cmFySW5mb0xvY2FsID0gKGRpdkF2aXNvU2luY3JvOkhUTUxEaXZFbGVtZW50LCB0aXR1bG86c3RyaW5nLCBucm9TaW5jcm86bnVtYmVyfG51bGwsIG1vc3RyYXJMaW5rSGRyOiBib29sZWFuKT0+e1xyXG4gICAgbGV0IGRhdG9zQnlQYXNzID0gbXkuZ2V0TG9jYWxWYXIoR0xPVkFSX0RBVE9TQllQQVNTKTtcclxuICAgIGlmKGRhdG9zQnlQYXNzKXtcclxuICAgICAgICBkaXZBdmlzb1NpbmNyby5hcHBlbmQoaHRtbC5kaXYoe2lkOidhdmlzby1zaW5jcm8nfSwgW1xyXG4gICAgICAgICAgICBucm9TaW5jcm8/aHRtbC5wKFtcIk7Dum1lcm8gZGUgc2luY3Jvbml6YWNpw7NuOiBcIiwgaHRtbC5iKFwiXCIrbnJvU2luY3JvLnRvU3RyaW5nKCkpXSk6bnVsbCxcclxuICAgICAgICAgICAgaHRtbC5oNCh0aXR1bG8pLFxyXG4gICAgICAgICAgICBodG1sLnAoW2h0bWxOdW1lcm8obGlrZUFyKGRhdG9zQnlQYXNzLmNhcmdhcykuYXJyYXkoKS5sZW5ndGgpLCcgYXJlYXM6ICcsbGlrZUFyKGRhdG9zQnlQYXNzLmNhcmdhcykua2V5cygpLmpvaW4oJywgJyldKSxcclxuICAgICAgICAgICAgaHRtbC5wKFtodG1sTnVtZXJvKGxpa2VBcihkYXRvc0J5UGFzcy5yZXNwdWVzdGFzLnZpdmllbmRhcykuYXJyYXkoKS5sZW5ndGgpLCcgdml2aWVuZGFzJ10pLFxyXG4gICAgICAgICAgICBtb3N0cmFyTGlua0hkcj9odG1sLmEoe2hyZWY6Jy4vY2FtcG8nfSxbaHRtbC5iKCdJUiBBIExBIEhPSkEgREUgUlVUQScpXSk6bnVsbFxyXG4gICAgICAgIF0pLmNyZWF0ZSgpKTtcclxuICAgIH1lbHNle1xyXG4gICAgICAgIGRpdkF2aXNvU2luY3JvLmFwcGVuZENoaWxkKGh0bWwuZGl2KHtjbGFzczonYXZpc28nfSxbXHJcbiAgICAgICAgICAgIGh0bWwuaDQoJ1Npc3RlbWEgdmFjw61vJyksXHJcbiAgICAgICAgICAgIGh0bWwucCgnTm8gaGF5IGluZm9ybWFjacOzbiBkZSBmb3JtdWxhcmlvcycpLFxyXG4gICAgICAgICAgICBodG1sLnAoJ05vIGhheSBpbmZvcm1hY2nDs24gZGUgdml2aWVuZGFzJylcclxuICAgICAgICBdKS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcbn1cclxudmFyIHByb2NlZGVyU2luY3JvRnVuID0gYXN5bmMgKGJ1dHRvbjpIVE1MQnV0dG9uRWxlbWVudCwgZGl2QXZpc29TaW5jcm86SFRNTERpdkVsZW1lbnQpPT57XHJcbiAgICBidXR0b24uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgIGJ1dHRvbi5jbGFzc05hbWU9J2Rvd25sb2FkLWRtLWJ1dHRvbic7XHJcbiAgICBkaXZBdmlzb1NpbmNyby5pbm5lckhUTUw9Jyc7XHJcbiAgICB0cnl7XHJcbiAgICAgICAgdmFyIGRhdG9zQnlQYXNzOkRhdG9zQnlQYXNzUGVyc2lzdGlibGVzID0gbXkuZ2V0TG9jYWxWYXIoR0xPVkFSX0RBVE9TQllQQVNTKTtcclxuICAgICAgICB2YXIgZGF0b3MgPSBhd2FpdCBzaW5jcm9uaXphckRhdG9zKGRhdG9zQnlQYXNzKTtcclxuICAgICAgICBtb3N0cmFySW5mb0xvY2FsKGRpdkF2aXNvU2luY3JvLCAnZGF0b3MgcmVjaWJpZG9zJywgZGF0b3MubnVtX3NpbmNybywgdHJ1ZSlcclxuICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSlcclxuICAgICAgICB0aHJvdyBlcnJcclxuICAgIH1maW5hbGx5e1xyXG4gICAgICAgIGJ1dHRvbi5kaXNhYmxlZD1mYWxzZTtcclxuICAgICAgICBidXR0b24uY2xhc3NOYW1lPSdkb3dubG9hZC1kbS1idXR0b24tY29udCc7XHJcbiAgICB9XHJcbn1cclxubXlPd24ud1NjcmVlbnMuc2luY3Jvbml6YXJfZG09YXN5bmMgZnVuY3Rpb24oKXtcclxuICAgIHZhciBtYWluTGF5b3V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW5fbGF5b3V0JykhO1xyXG4gICAgdmFyIHByb2NlZGVyQnV0dG9uID0gaHRtbC5idXR0b24oe2NsYXNzOidkb3dubG9hZC1kbS1idXR0b24tY29udCd9LCdwcm9jZWRlciDih5InKS5jcmVhdGUoKTtcclxuICAgIHZhciBkaXZBdmlzb1NpbmNybzpIVE1MRGl2RWxlbWVudD1odG1sLmRpdigpLmNyZWF0ZSgpO1xyXG4gICAgbW9zdHJhckluZm9Mb2NhbChtYWluTGF5b3V0IGFzIEhUTUxEaXZFbGVtZW50LCAnaW5mb3JtYWNpw7NuIGEgdHJhbnNtaXRpcicsIG51bGwsIGZhbHNlKVxyXG4gICAgbWFpbkxheW91dC5hcHBlbmRDaGlsZChwcm9jZWRlckJ1dHRvbik7XHJcbiAgICBtYWluTGF5b3V0LmFwcGVuZENoaWxkKGRpdkF2aXNvU2luY3JvKTtcclxuICAgIHByb2NlZGVyQnV0dG9uLm9uY2xpY2sgPSAoKT0+cHJvY2VkZXJTaW5jcm9GdW4ocHJvY2VkZXJCdXR0b24sIGRpdkF2aXNvU2luY3JvKVxyXG59O1xyXG5cclxuZnVuY3Rpb24gaW5pY2lhbGl6YXJTdGF0ZShzdGF0ZTogQ2Fzb1N0YXRlKSB7XHJcbiAgICBzdGF0ZS5tb2RvID0ge1xyXG4gICAgICAgIGRlbW86IGZhbHNlXHJcbiAgICB9O1xyXG4gICAgLy8gT0pPIHN0YXRlLm9wY2lvbmVzIHNlIG1vZGlmaWNhIGFjw6EgeSBlbiBvdHJvIGxhZG8gY29uIGVzdGUgbWlzbW8gY2FydGVsXHJcbiAgICBzdGF0ZS5vcGNpb25lcyA9IHtcclxuICAgICAgICBiaWVudmVuaWRvOiB0cnVlLFxyXG4gICAgICAgIGZvclBrOiBudWxsLFxyXG4gICAgICAgIHBpbGFGb3JQazogW10sXHJcbiAgICAgICAgbW9kb0Rlc3BsaWVndWU6IFwicmVsZXZhbWllbnRvXCIsXHJcbiAgICAgICAgbW9kb0RpcmVjdG86IGZhbHNlLFxyXG4gICAgICAgIG1vZG9Cb3JyYXJSZXNwdWVzdGE6IG51bGwsXHJcbiAgICAgICAgY29uQ2FtcG9PcGNpb25lczogZmFsc2UsXHJcbiAgICAgICAgc2FsdG9BdXRvbWF0aWNvOiB0cnVlLFxyXG4gICAgfTtcclxuICAgIC8vQHRzLWlnbm9yZVxyXG4gICAgc3RhdGUuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSB7fTtcclxufVxyXG4vKlxyXG5mdW5jdGlvbiBtb3N0cmFyRGF0b3NQZXJzb25hKGhheURhdG9zOmJvb2xlYW4sIGRhdG9zOmFueSwgZGl2UmVzdWx0OkhUTUxEaXZFbGVtZW50KXtcclxuICAgIC8vVE9ETzogRVZBTFVBUiBTSSBDT05WSUVORSBUUkFFUkxPIERFIExBIEJBU0VcclxuICAgIHZhciB0aXBvc0RvY3VtZW50byA9IFsnRE5JIGFyZ2VudGlubycsICdEb2N1bWVudG8gZXh0cmFuamVybycsICdObyB0aWVuZSBkb2N1bWVudG8nLCAnT3RybyddO1xyXG4gICAgdmFyIHBhaXNEb2N1bWVudG8gPSBbJ1VydWd1YXknLCAnUGFyYWd1YXknLCAnQnJhc2lsJywgJ0JvbGl2aWEnLCAnQ2hpbGUnLCAnUGVyw7onLCAnVmVuZXp1ZWxhJywgJ090cm8nXTtcclxuICAgIGRpdlJlc3VsdC5hcHBlbmRDaGlsZChcclxuICAgICAgICBoYXlEYXRvcz9cclxuICAgICAgICAgICAgaHRtbC5kaXYoe2NsYXNzOidkYXRvcy1wZXJzb25hLWNhcmdhZGEnfSxbXHJcbiAgICAgICAgICAgICAgICBodG1sLmgyKFwiRGF0b3MgcGVyc29uYVwiKSxcclxuICAgICAgICAgICAgICAgIGh0bWwuZGl2KHtjbGFzczonZmljaGEtcGVyc29uYSd9LFtcclxuICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihbaHRtbC5sYWJlbCgnQXBlbGxpZG86ICcpLCBkYXRvcy5hcGVsbGlkb10pLFxyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KFtodG1sLmxhYmVsKCdOb21icmVzOiAnKSwgZGF0b3Mubm9tYnJlc10pLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLnRpcG9Eb2N1bWVudG8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZGl2KFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwubGFiZWwoJ1RpcG8gZG9jdW1lbnRvOiAnKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXBvc0RvY3VtZW50b1tkYXRvcy50aXBvRG9jdW1lbnRvLTFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0b3MudGlwb0RvY3VtZW50bz09NCAmJiBkYXRvcy50aXBvRG9jdW1lbnRvRXNwZWNpZmljYWRvPycgKCcrIGRhdG9zLnRpcG9Eb2N1bWVudG9Fc3BlY2lmaWNhZG8rJyknOicnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MudGlwb0RvY3VtZW50bz09MiAmJiBkYXRvcy5wYWlzRG9jdW1lbnRvP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sLmRpdihbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmxhYmVsKCdQYWlzOiAnKSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlzRG9jdW1lbnRvW2RhdG9zLnBhaXNEb2N1bWVudG8tMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRvcy5wYWlzRG9jdW1lbnRvPT04ICYmIGRhdG9zLnBhaXNEb2N1bWVudG9Fc3BlY2lmaWNhZG8/JyAoJytkYXRvcy5wYWlzRG9jdW1lbnRvRXNwZWNpZmljYWRvKycpJzonJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLnRpcG9Eb2N1bWVudG8hPTMgJiYgZGF0b3MudGlwb0RvY3VtZW50bz9odG1sLmRpdihbaHRtbC5sYWJlbCgnTsK6IERvY3VtZW50bzogJyksIGRhdG9zLmRvY3VtZW50b10pOicnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLmNlbHVsYXI/aHRtbC5kaXYoW2h0bWwubGFiZWwoJ0NlbC46ICcpLCBkYXRvcy5jZWx1bGFyXSk6JycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0b3MuZW1haWw/aHRtbC5kaXYoW2h0bWwubGFiZWwoJ0VtYWlsOiAnKSwgZGF0b3MuZW1haWxdKTonJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRvcy50ZWxlZm9ub0FsdGVybmF0aXZvP2h0bWwuZGl2KFtodG1sLmxhYmVsKCdUZWwuIGFsdGVybmF0aXZvOiAnKSwgZGF0b3MudGVsZWZvbm9BbHRlcm5hdGl2b10pOicnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdG9zLm9ic2VydmFjaW9uZXM/aHRtbC5kaXYoW2h0bWwubGFiZWwoJ09ic2VydmFjaW9uZXM6ICcpLCBkYXRvcy5vYnNlcnZhY2lvbmVzXSk6JycsXHJcbiAgICAgICAgICAgICAgICBdKVxyXG4gICAgICAgICAgICBdKS5jcmVhdGUoKVxyXG4gICAgICAgIDpcclxuICAgICAgICAgICAgaHRtbC5wKFwiTm8gc2UgZW5jb250csOzIHVuYSBlbmN1ZXN0YSBwYXJhIGxhIGV0aXF1ZXRhIGNhcmdhZGFcIikuY3JlYXRlKClcclxuICAgIClcclxufVxyXG4qL1xyXG4vKm15T3duLmNsaWVudFNpZGVzLnRhcmVhc1RlbVJvdz17XHJcbiAgICB1cGRhdGU6KGRlcG90KT0+e1xyXG4gICAgICAgIHZhciB0YXJlYTonbmFkYSd8J3ByZWFzaWduYXInfCdjYXJnYXInfCdyZWFsaXphcid8J3ZlcmlmaWNhcic9J25hZGEnO1xyXG4gICAgICAgIHZhciByb3c9ZGVwb3Qucm93O1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICB2YXIgaWRwZXI9bXkuY29uZmlnLmlkcGVyO1xyXG4gICAgICAgIHZhciBlc3BlcmFyOmJvb2xlYW49ZmFsc2U7XHJcbiAgICAgICAgaWYocm93LmhhYmlsaXRhZGEpe1xyXG4gICAgICAgICAgICBpZighcm93LmFzaWduYW50ZSAmJiAhcm93LmFzaWduYWRvKXtcclxuICAgICAgICAgICAgICAgIHRhcmVhPSdwcmVhc2lnbmFyJztcclxuICAgICAgICAgICAgICAgIGVzcGVyYXI9dHJ1ZTtcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXJvdy5hc2lnbmFkbyB8fCAhcm93LmZlY2hhX2FzaWduYWNpb24gfHwgIXJvdy5vcGVyYWNpb24pe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J2Nhcmdhcic7XHJcbiAgICAgICAgICAgICAgICBlc3BlcmFyPXJvdy5hc2lnbmFudGUhPWlkcGVyO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZighcm93LnJlYSl7XHJcbiAgICAgICAgICAgICAgICB0YXJlYT0ncmVhbGl6YXInO1xyXG4gICAgICAgICAgICAgICAgZXNwZXJhcj1yb3cuYXNpZ25hZG8hPWlkcGVyO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZighcm93LnZlcmlmaWNhZG8pe1xyXG4gICAgICAgICAgICAgICAgdGFyZWE9J3ZlcmlmaWNhcic7XHJcbiAgICAgICAgICAgICAgICBlc3BlcmFyPXJvdy5hc2lnbmFudGUhPWlkcGVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBwb25lcj17XHJcbiAgICAgICAgICAgIGFzaWduYW50ZSAgICAgICAgICA6dGFyZWE9PSdwcmVhc2lnbmFyJyAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBhc2lnbmFkbyAgICAgICAgICAgOnRhcmVhPT0nY2FyZ2FyJyAgICAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidub3JtYWwnKSxcclxuICAgICAgICAgICAgZmVjaGFfYXNpZ25hY2lvbiAgIDp0YXJlYT09J2NhcmdhcicgICAgICYmIChlc3BlcmFyPydlc3BlcmFyJzonbm9ybWFsJyksXHJcbiAgICAgICAgICAgIG9wZXJhY2lvbiAgICAgICAgICA6dGFyZWE9PSdjYXJnYXInICAgICAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBjYXJnYV9vYnNlcnZhY2lvbmVzOih0YXJlYT09J2NhcmdhcicgICAgIHx8IHRhcmVhPT0ncmVhbGl6YXInICYmICFyb3cuY2FyZ2FkbyAmJiAhcm93LnJlYSApICYmIHJvdy5hc2lnbmFudGU9PWlkcGVyICYmICdvcHRhdGl2bycsXHJcbiAgICAgICAgICAgIHZlcmlmaWNhZG8gICAgICAgICA6dGFyZWE9PSd2ZXJpZmljYXInICAmJiAoZXNwZXJhcj8nZXNwZXJhcic6J25vcm1hbCcpLFxyXG4gICAgICAgICAgICBvYnNfdmVyaWZpY2FkbyAgICAgOnRhcmVhPT0ndmVyaWZpY2FyJyAgJiYgKGVzcGVyYXI/J2VzcGVyYXInOidvcHRhdGl2bycpLFxyXG4gICAgICAgIH1cclxuICAgICAgICBsaWtlQXIocG9uZXIpLmZvckVhY2goKHZhbG9yLCBjYW1wbyk9PntcclxuICAgICAgICAgICAgaWYoIXZhbG9yKXtcclxuICAgICAgICAgICAgICAgIGRlcG90LnJvd0NvbnRyb2xzW2NhbXBvXS5yZW1vdmVBdHRyaWJ1dGUoJ215LW1hbmRhdG9yeScpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgZGVwb3Qucm93Q29udHJvbHNbY2FtcG9dLnNldEF0dHJpYnV0ZSgnbXktbWFuZGF0b3J5Jyx2YWxvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIHByZXBhcmU6IGZ1bmN0aW9uKCl7fVxyXG59XHJcbiovXHJcblxyXG52YXIgY3JlYXJCb3RvblZlckFicmlyRW5jdWVzdGEgPSAob3BlcmF0aXZvOklkT3BlcmF0aXZvLHRhcmVhOklkVGFyZWEsZW5jdWVzdGE6bnVtYmVyLCBsYWJlbDpzdHJpbmcpPT57XHJcbiAgICB2YXIgdXAgPSB7XHJcbiAgICAgICAgb3BlcmF0aXZvOm9wZXJhdGl2byxcclxuICAgICAgICB0YXJlYTp0YXJlYSxcclxuICAgICAgICBlbmN1ZXN0YTplbmN1ZXN0YVxyXG4gICAgfVxyXG4gICAgbGV0IHZlciA9IG15LmNyZWF0ZUZvcmtlYWJsZUJ1dHRvbih7dzonYWJyaXJfZW5jdWVzdGEnLHVwLCBhdXRvcHJvY2VkOnRydWUsIGxhYmVsfSx7fSk7XHJcbiAgICByZXR1cm4gdmVyXHJcbn1cclxuXHJcbnZhciBjcmVhckJvdG9uZXNWZXJBYnJpclRhcmVhcyA9IGFzeW5jIChkZXBvdDpteU93bi5EZXBvdCwgZmllbGROYW1lOnN0cmluZywgbGFiZWw6J2FicmlyJ3wndmVyJyk9PntcclxuICAgIHRhcmVhcyA9IHRhcmVhcz90YXJlYXM6KGF3YWl0IG15T3duLmFqYXgudGFibGVfZGF0YSh7dGFibGU6IGB0YXJlYXNgLCBmaXhlZEZpZWxkczpbXX0pKTtcclxuICAgIHZhciBtaXNUYXJlYXMgPSB0YXJlYXMuZmlsdGVyKCh0YXJlYSk9PiEhdGFyZWEubWFpbl9mb3JtICYmIHRhcmVhLm9wZXJhdGl2bz09ZGVwb3Qucm93Lm9wZXJhdGl2byAmJiBkZXBvdC5tYW5hZ2VyLmRlZi50YWJsZU5hbWU9PSd0ZW0nP3RydWU6ZGVwb3Qucm93LnRhcmVhID09IHRhcmVhLnRhcmVhKTtcclxuICAgIGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV0uaW5uZXJIVE1MPScnO1xyXG4gICAgbWlzVGFyZWFzLmZvckVhY2goKHRhcmVhOnt0YXJlYTpzdHJpbmcsIG5vbWJyZTpzdHJpbmcsIG1haW5fZm9ybTpJZEZvcm11bGFyaW99KT0+e1xyXG4gICAgICAgIGxldCBidXR0b25MYWJlbCA9IGAke2xhYmVsfSAke3RhcmVhLnRhcmVhfWA7XHJcbiAgICAgICAgbGV0IHZlciA9IGNyZWFyQm90b25WZXJBYnJpckVuY3Vlc3RhKFxyXG4gICAgICAgICAgICBkZXBvdC5yb3cub3BlcmF0aXZvIGFzIElkT3BlcmF0aXZvLFxyXG4gICAgICAgICAgICB0YXJlYS50YXJlYSBhcyBJZFRhcmVhLCBcclxuICAgICAgICAgICAgTnVtYmVyKGRlcG90LnJvdy5lbmMpLFxyXG4gICAgICAgICAgICBidXR0b25MYWJlbFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdmVyLnN0eWxlPSdtYXJnaW46MHB4IDJweDsnO1xyXG4gICAgICAgIGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV0uYXBwZW5kQ2hpbGQodmVyKTtcclxuICAgIH0pXHJcbn1cclxuXHJcbnZhciBnZXRBYnJpck92ZXIgPSAoZGVwb3Q6bXlPd24uRGVwb3QsX2ZpZWxkTmFtZTpzdHJpbmcpPT5cclxuICAgIGRlcG90LnJvdy5jYXJnYWRvX2RtIHx8ICFkZXBvdC5yb3dbJ2VzdGFkb3NfX3Blcm1pdGVfZWRpdGFyX2VuY3Vlc3RhJ10/J3Zlcic6J2FicmlyJ1xyXG5cclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFicmlyPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgdmFyIGxhYmVsOid2ZXInfCdhYnJpcicgPSBnZXRBYnJpck92ZXIoZGVwb3QsZmllbGROYW1lKTtcclxuICAgICAgICBjcmVhckJvdG9uZXNWZXJBYnJpclRhcmVhcyhkZXBvdCxmaWVsZE5hbWUsbGFiZWwpOyAvL25vIGVzcGVybyBwcm9tZXNhIHBvcnF1ZSBubyBlcyBuZWNlc2FyaW9cclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFicmlyUmVjZXBjaW9uPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgdmFyIGxhYmVsOid2ZXInfCdhYnJpcicgPSBnZXRBYnJpck92ZXIoZGVwb3QsZmllbGROYW1lKTtcclxuICAgICAgICBjcmVhckJvdG9uZXNWZXJBYnJpclRhcmVhcyhkZXBvdCxmaWVsZE5hbWUsbGFiZWwpOyAvL25vIGVzcGVybyBwcm9tZXNhIHBvcnF1ZSBubyBlcyBuZWNlc2FyaW9cclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLnZlckljb25vU3ZnPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgbGV0IHRkID0gZGVwb3Qucm93Q29udHJvbHNbZmllbGROYW1lXTtcclxuICAgICAgICB0ZC5pbm5lckhUTUw9Jyc7XHJcbiAgICAgICAgaWYoZGVwb3Qucm93LnBhdGhfaWNvbm9fc3ZnKXtcclxuICAgICAgICAgICAgdmFyIHN2ZyA9IGh0bWwuc3ZnKHtcclxuICAgICAgICAgICAgICAgIGNsYXNzOlwic3ZnLWFjY2lvbmVzXCJcclxuICAgICAgICAgICAgfSxbXHJcbiAgICAgICAgICAgICAgICBodG1sLnBhdGgoe1xyXG4gICAgICAgICAgICAgICAgICAgIGQ6ZGVwb3Qucm93LnBhdGhfaWNvbm9fc3ZnXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBdKS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIixcIjAgMCA1MCA1MFwiKTtcclxuICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoc3ZnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07XHJcblxyXG52YXIgY3JlYXJTVkcgPSAocGF0aDpzdHJpbmcscHJvcHM6YW55KSA9PiB7XHJcbiAgICB2YXIgc3ZnID0gaHRtbC5zdmcocHJvcHMgfHwge30sW1xyXG4gICAgICAgIGh0bWwucGF0aCh7XHJcbiAgICAgICAgICAgIGQ6cGF0aFxyXG4gICAgICAgIH0pXHJcbiAgICBdKS5jcmVhdGUoKTtcclxuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJ2aWV3Qm94XCIsXCIwIDAgNTAgNTBcIik7XHJcbiAgICByZXR1cm4gc3ZnXHJcbn1cclxudmFyIGNyZWFyQm90b25BY2Npb24gPSAoZGVwb3Q6bXlPd24uRGVwb3QsIGFjdGlvbjpFc3RhZG9BY2Npb24pPT57XHJcbiAgICB2YXIgc3ZnID0gY3JlYXJTVkcoYWN0aW9uLnBhdGhfaWNvbm9fc3ZnLHtjbGFzczpcInN2Zy1hY2Npb25lc1wifSlcclxuICAgIGlmKGFjdGlvbi5kZXNhY3RpdmFfYm90b24pe1xyXG4gICAgICAgIHJldHVybiBzdmdcclxuICAgIH1cclxuICAgIGxldCBidXR0b24gPSBodG1sLmJ1dHRvbih7XHJcbiAgICAgICAgY2xhc3M6YGJvdG9uLWFjY2lvbiBib3Rvbi1hY2Npb24tJHthY3Rpb24uZWFjY2lvbl9kaXJlY2Npb259YFxyXG4gICAgfSxbXHJcbiAgICAgICAgYCR7YWN0aW9uLmVhY2Npb259YCxcclxuICAgICAgICAvL0B0cy1pZ25vcmUgc3ZnIGVzIGh0bWxlbGVtZW50XHJcbiAgICAgICAgYWN0aW9uLnBhdGhfaWNvbm9fc3ZnP3N2ZzpudWxsLFxyXG4gICAgXSkuY3JlYXRlKCk7XHJcbiAgICBidXR0b24ub25jbGljayA9ICgpPT4ge1xyXG4gICAgICAgIHZhciBhY3Rpb25GdW4gPSBhc3luYyAoKT0+e1xyXG4gICAgICAgICAgICBidXR0b24uZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IG15LmFqYXguYWNjaW9uX3RhcmVhc190ZW1fZWplY3V0YXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICB0YXJlYTogZGVwb3Qucm93LnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYzogZGVwb3Qucm93LmVuYyxcclxuICAgICAgICAgICAgICAgICAgICBjb25kaWNpb246IGFjdGlvbi5jb25kaWNpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uOiBhY3Rpb25cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgdmFyIGdyaWQ9ZGVwb3QubWFuYWdlcjtcclxuICAgICAgICAgICAgICAgIGdyaWQucmV0cmlldmVSb3dBbmRSZWZyZXNoKGRlcG90KVxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGFsZXJ0UHJvbWlzZShlcnIubWVzc2FnZSlcclxuICAgICAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgICAgIC8vcmV0cmFzbyBsYSBoYWJpbGl0YWNpw7NuIHBvcnF1ZSBhIHZlY2VzIHRhcmRhIGVuIHJlZGlidWphcnNlIGxhIGJvdG9uZXJhIHkgcHVlZGUgdHJhZXIgcHJvYmxlbWFzIHNpIGRhbiBkb2JsZSBjbGljayBcclxuICAgICAgICAgICAgICAgIC8veWEgcXVlIGVqZWN1dGEgbnVldmFtZW50ZSB1bmEgYWNjacOzbiBxdWUgeWEgc2UgZWplY3V0w7MgKHkgdGVybWluw7MpIGFudGVzXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT5idXR0b24uZGlzYWJsZWQ9ZmFsc2UsMzAwMClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB2YXIgY29uZmlybVByb21pc2VPcHRzOiBEaWFsb2dPcHRpb25zID0ge31cclxuICAgICAgICBpZihhY3Rpb24uY29uZmlybWEpe1xyXG4gICAgICAgICAgICBjb25maXJtUHJvbWlzZU9wdHMuYXNrRm9yTm9SZXBlYXQgPSAnbm8gdm9sdmVyIGEgbW9zdHJhcic7IC8vbXVlc3RyYSBtZW5zYWplIHBvciBkZWZhdWx0IHBlcm8gYW5kYSBpZ3VhbFxyXG4gICAgICAgICAgICB2YXIgYnV0dG9uc0RlZiA9IFtcclxuICAgICAgICAgICAgICAgIHtsYWJlbDonc8OtJywgdmFsdWU6dHJ1ZX0sXHJcbiAgICAgICAgICAgICAgICB7bGFiZWw6J25vJywgdmFsdWU6ZmFsc2V9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgY29uZmlybVByb21pc2UoYGNvbmZpcm1hIGFjY2nDs24gXCIke2FjdGlvbi5lYWNjaW9ufVwiP2AsIHsuLi5jb25maXJtUHJvbWlzZU9wdHMsIGJ1dHRvbnNEZWZ9KS50aGVuKGFjdGlvbkZ1bik7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGFjdGlvbkZ1bigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBidXR0b25cclxufVxyXG5cclxudmFyIGNyZWFyQm90b25lc0FjY2lvbmVzID0gYXN5bmMgKG9wdHM6e2RlcG90Om15T3duLkRlcG90LCBmaWVsZE5hbWU6c3RyaW5nLCBkaXJlY2Npb246IERpcmVjY2lvbkFjY2lvbn0pPT57XHJcbiAgICBsZXQge2RlcG90LGZpZWxkTmFtZSxkaXJlY2Npb259ID0gb3B0cztcclxuICAgIGxldCB0ZCA9IGRlcG90LnJvd0NvbnRyb2xzW2ZpZWxkTmFtZV07XHJcbiAgICB0ZC5pbm5lckhUTUw9Jyc7XHJcbiAgICAoZGVwb3Qucm93Q29udHJvbHMuYWNjaW9uZXMuZ2V0VHlwZWRWYWx1ZSgpfHxbXSlcclxuICAgICAgICAuZmlsdGVyKChhY3Rpb246RXN0YWRvQWNjaW9uKT0+YWN0aW9uLmVhY2Npb25fZGlyZWNjaW9uPT1kaXJlY2Npb24pXHJcbiAgICAgICAgLmZvckVhY2goKGFjdGlvbjpFc3RhZG9BY2Npb24pPT50ZC5hcHBlbmRDaGlsZChjcmVhckJvdG9uQWNjaW9uKGRlcG90LCBhY3Rpb24pKSk7XHJcbn1cclxuXHJcbnZhciBjcmVhclN3aXRjaCA9IChvcHRzOntyb3VuZD86Ym9vbGVhbiwgZGlzYWJsZWQ/OmJvb2xlYW4sIGNoZWNrZWQ/OmJvb2xlYW4sIG9uQ2xpY2tGdW46RnVuY3Rpb24sIG9uRXJyRnVuPzpGdW5jdGlvbn0pPT57XHJcbiAgICB2YXIgY2hlY2tib3ggPSBodG1sLmlucHV0KHt0eXBlOidjaGVja2JveCcsIGNoZWNrZWQ6b3B0cy5jaGVja2VkfSkuY3JlYXRlKCk7XHJcbiAgICBjaGVja2JveC5vbmNsaWNrID0gYXN5bmMoKT0+e1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgY2hlY2tib3guZGlzYWJsZWQ9dHJ1ZTtcclxuICAgICAgICAgICAgYXdhaXQgb3B0cy5vbkNsaWNrRnVuKClcclxuICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgYWxlcnRQcm9taXNlKGVyci5tZXNzYWdlKVxyXG4gICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICB9ZmluYWxseXtcclxuICAgICAgICAgICAgY2hlY2tib3guZGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGh0bWwubGFiZWwoe2NsYXNzOidzd2l0Y2gnfSxbXHJcbiAgICAgICAgY2hlY2tib3gsXHJcbiAgICAgICAgaHRtbC5zcGFuKHtjbGFzczpgc2xpZGVyICR7b3B0cy5yb3VuZD8ncm91bmQnOicnfWB9KSxcclxuICAgIF0pLmNyZWF0ZSgpO1xyXG59XHJcblxyXG5teU93bi5jbGllbnRTaWRlcy5oYWJpbGl0YXI9e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgIHRkLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgdGQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgICAgIGNyZWFyU3dpdGNoKHtcclxuICAgICAgICAgICAgICAgIHJvdW5kOnRydWUsXHJcbiAgICAgICAgICAgICAgICBjaGVja2VkOmRlcG90LnJvdy5oYWJpbGl0YWRhLFxyXG4gICAgICAgICAgICAgICAgb25DbGlja0Z1bjogYXN5bmMgKCk9PntcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBteS5hamF4LmVuY3Vlc3RhX2hhYmlsaXRhcl9kZXNoYWJpbGl0YXIoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86IGRlcG90LnJvdy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYzogZGVwb3Qucm93LmVuY1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBncmlkPWRlcG90Lm1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+Z3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QpLDMwMCk7Ly9wYXJhIHF1ZSBzZSB2ZWEgZWwgZWZlY3RvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFjY2lvbmVzQXZhbmNlPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzQWNjaW9uZXMoe2RlcG90LGZpZWxkTmFtZSxkaXJlY2Npb246J2F2YW5jZSd9KTtcclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFjY2lvbmVzUmV0cm9jZXNvPXtcclxuICAgIHByZXBhcmU6IChfZGVwb3QsIF9maWVsZE5hbWUpPT57fSxcclxuICAgIHVwZGF0ZTogKGRlcG90LCBmaWVsZE5hbWUpPT57XHJcbiAgICAgICAgY3JlYXJCb3RvbmVzQWNjaW9uZXMoe2RlcG90LGZpZWxkTmFtZSxkaXJlY2Npb246J3JldHJvY2Vzbyd9KTtcclxuICAgIH1cclxufTtcclxuXHJcbm15T3duLmNsaWVudFNpZGVzLmFjY2lvbmVzQmxhbnF1ZW89e1xyXG4gICAgcHJlcGFyZTogKF9kZXBvdCwgX2ZpZWxkTmFtZSk9Pnt9LFxyXG4gICAgdXBkYXRlOiAoZGVwb3QsIGZpZWxkTmFtZSk9PntcclxuICAgICAgICBjcmVhckJvdG9uZXNBY2Npb25lcyh7ZGVwb3QsZmllbGROYW1lLGRpcmVjY2lvbjonYmxhbnF1ZW8nfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5mdW5jdGlvbiBcclxuYm90b25DbGllbnRTaWRlRW5HcmlsbGEob3B0czogeyBub21icmVCb3Rvbjogc3RyaW5nLCBsbGFtYWRhOiAoZGVwb3Q6IG15T3duLkRlcG90KSA9PiBQcm9taXNlPGFueT4gfSkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBwcmVwYXJlOiBmdW5jdGlvbiAoZGVwb3Q6IG15T3duLkRlcG90LCBmaWVsZE5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgdGQgPSBkZXBvdC5yb3dDb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgICAgICB2YXIgYm90b24gPSBodG1sLmJ1dHRvbihvcHRzLm5vbWJyZUJvdG9uKS5jcmVhdGUoKTtcclxuICAgICAgICAgICAgdGQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoYm90b24pO1xyXG4gICAgICAgICAgICB2YXIgcmVzdGF1cmFyQm90b24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSBvcHRzLm5vbWJyZUJvdG9uO1xyXG4gICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGJvdG9uLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9ICdwcm9jZXNhbmRvLi4uJztcclxuICAgICAgICAgICAgICAgIG9wdHMubGxhbWFkYShkZXBvdCkudGhlbihhc3luYyBmdW5jdGlvbihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHJlc3VsdCAmJiB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiAnb2snIGluIHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3VsdC5vayl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JpZD1kZXBvdC5tYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ3JpZC5yZXRyaWV2ZVJvd0FuZFJlZnJlc2goZGVwb3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcG90LmRldGFpbENvbnRyb2xzLmluY29uc2lzdGVuY2lhcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwb3QuZGV0YWlsQ29udHJvbHMuaW5jb25zaXN0ZW5jaWFzLmZvcmNlRGlzcGxheURldGFpbEdyaWQoe30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3Rvbi50ZXh0Q29udGVudCA9ICByZXN1bHQubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdG9uLnRpdGxlID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyM4RjgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChyZXN0YXVyYXJCb3RvbiwgMjUwMCk7XHJcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYm90b24udGV4dENvbnRlbnQgPSAnZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgICAgIGJvdG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjRkY4JztcclxuICAgICAgICAgICAgICAgICAgICBhbGVydFByb21pc2UoZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2lmICgoZGVwb3Qucm93LmNvbnNpc3RpZG89PW51bGwgICYmIGRlcG90LnJvdy5yZWEhPW51bGwpIHx8IGRlcG90LnJvdy5tb2RpZmljYWRvIT1udWxsICYmIGRlcG90LnJvdy5jb25zaXN0aWRvIT1udWxsICYmIGRlcG90LnJvdy5tb2RpZmljYWRvID5kZXBvdC5yb3cuY29uc2lzdGlkbyl7XHJcbiAgICAgICAgICAgIC8vICAgIGJvdG9uLnN0eWxlLmJhY2tncm91bmRDb2xvcj0nIzhDRidcclxuICAgICAgICAgICAgLy99XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICB9O1xyXG59XHJcblxyXG5cclxubXlPd24uY2xpZW50U2lkZXMuY29uc2lzdGlyID0gYm90b25DbGllbnRTaWRlRW5HcmlsbGEoe1xyXG4gICAgbm9tYnJlQm90b246ICdjb25zaXN0aXInLFxyXG4gICAgbGxhbWFkYTogZnVuY3Rpb24gKGRlcG90OiBteU93bi5EZXBvdCkge1xyXG4gICAgICAgIHZhciBteVJlYUZpZWxkTmFtZSA9IGRlcG90Lm1hbmFnZXIuZGVmLnRhYmxlTmFtZT09XCJ0ZW1cIj8ncmVhJzondWx0X3JlYSc7XHJcbiAgICAgICAgdmFyIGZpbHRyb1JlYT1jb25zaXN0aXJfZmlsdHJvKGRlcG90LnJvdy50YXJlYSwgZGVwb3Qucm93W215UmVhRmllbGROYW1lXSwgZGVwb3Qucm93LnJlYSlcclxuICAgICAgICByZXR1cm4gZmlsdHJvUmVhPyBteU93bi5hamF4LmNvbnNpc3Rpcl9lbmN1ZXN0YSh7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzogZGVwb3Qucm93Lm9wZXJhdGl2byxcclxuICAgICAgICAgICAgaWRfY2FzbzogZGVwb3Qucm93LmVuY1xyXG4gICAgICAgIH0pOiBhbGVydFByb21pc2UoJ0xhIGVuY3Vlc3RhIGRlYmUgdGVuZXIgZGF0byBlbiByZWEgcGFyYSBwb2RlciBjb25zaXN0aXJsYS4nKTtcclxuICAgIH1cclxufSk7XHJcblxyXG5teU93bi53U2NyZWVucy5kZW1vPWFzeW5jIGZ1bmN0aW9uKF9hZGRyUGFyYW1zKXtcclxuICAgIC8vIEB0cy1pZ25vcmUgZGVzcGxlZ2FyRm9ybXVsYXJpb0FjdHVhbCBnbG9iYWxcclxuICAgIHdpbmRvdy5kZXNwbGVnYXJGb3JtdWxhcmlvQWN0dWFsKHttb2RvRGVtbzp0cnVlfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFycmF5RmxhdDxUPihhcnJheXM6VFtdW10pOlRbXXtcclxuICAgIHJldHVybiAoW10gYXMgVFtdKS5jb25jYXQuYXBwbHkoW10sIGFycmF5cyk7XHJcbn1cclxuIl19
|