dmencu 0.1.5
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.js +372 -0
- package/dist/client/client/css/form-data-signals-2.styl +11 -0
- package/dist/client/client/css/form-data-signals.styl +68 -0
- package/dist/client/client/css/menu.styl +6 -0
- package/dist/client/client/img/ba_etiqueta.jpg +0 -0
- package/dist/client/client/img/logo_etiqueta.jpg +0 -0
- package/dist/client/client/img/mandatory.png +0 -0
- package/dist/client/client/img/optativo.png +0 -0
- package/dist/client/client/img/pk-mandatory.png +0 -0
- package/dist/client/client/img/wait4this.png +0 -0
- package/dist/client/client/menu.js +3 -0
- package/dist/client/client/tsconfig.json +14 -0
- package/dist/client/unlogged/abrir-formulario.js +99 -0
- package/dist/client/unlogged/bypass-formulario.js +1141 -0
- package/dist/client/unlogged/css/Roboto-Regular.ttf +0 -0
- package/dist/client/unlogged/css/bootstrap.min.css +7 -0
- package/dist/client/unlogged/css/formulario-react.styl +756 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-192.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-192_capa.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-192_test.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-32.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-32_capa.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-32_test.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-48.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-48_capa.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-48_test.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-512.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-512_capa.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-512_test.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-64.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-64_capa.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-64_test.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-72.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-72_capa.png +0 -0
- package/dist/client/unlogged/img/PREJU_2022-logo-dm-72_test.png +0 -0
- package/dist/client/unlogged/img/_login-logo-icon.png +0 -0
- package/dist/client/unlogged/img/_logo-128.png +0 -0
- package/dist/client/unlogged/img/_logo.png +0 -0
- package/dist/client/unlogged/img/borrar-valor.pdn +0 -0
- package/dist/client/unlogged/img/borrar-valor.png +0 -0
- package/dist/client/unlogged/img/fondo-salteado-crudo.pdn +0 -0
- package/dist/client/unlogged/img/fondo-salteado-error.png +0 -0
- package/dist/client/unlogged/img/fondo-salteado.pdn +0 -0
- package/dist/client/unlogged/img/fondo-salteado.png +0 -0
- package/dist/client/unlogged/img/img-logo-dgeyc_blanco.png +0 -0
- package/dist/client/unlogged/img/login-logo-icon.png +0 -0
- package/dist/client/unlogged/img/logo-128.png +0 -0
- package/dist/client/unlogged/img/logo.png +0 -0
- package/dist/client/unlogged/img/logos-gcbs-blanco-150x57.png +0 -0
- package/dist/client/unlogged/offline.jade +10 -0
- package/dist/client/unlogged/redux-formulario.js +315 -0
- package/dist/client/unlogged/render-formulario.tsx +2103 -0
- package/dist/client/unlogged/render-general.tsx +228 -0
- package/dist/client/unlogged/tipos.js +19 -0
- package/dist/client/unlogged/tsconfig.json +15 -0
- package/dist/server/server/app-dmencu.js +641 -0
- package/dist/server/server/def-config.js +108 -0
- package/dist/server/server/procedures-dmencu.js +759 -0
- package/dist/server/server/server-dmencu.js +23 -0
- package/dist/server/server/table-areas.js +121 -0
- package/dist/server/server/table-comunas.js +29 -0
- package/dist/server/server/table-control_campo.js +100 -0
- package/dist/server/server/table-control_resumen.js +19 -0
- package/dist/server/server/table-encuestadores.js +19 -0
- package/dist/server/server/table-hogares.js +157 -0
- package/dist/server/server/table-hogares_sup.js +192 -0
- package/dist/server/server/table-lotes.js +44 -0
- package/dist/server/server/table-mis_encuestadores.js +78 -0
- package/dist/server/server/table-mis_tareas.js +19 -0
- package/dist/server/server/table-mis_tareas_areas.js +19 -0
- package/dist/server/server/table-mis_tareas_tem.js +19 -0
- package/dist/server/server/table-no_rea.js +33 -0
- package/dist/server/server/table-no_rea_sup.js +33 -0
- package/dist/server/server/table-operaciones.js +31 -0
- package/dist/server/server/table-parametros.js +40 -0
- package/dist/server/server/table-permisos.js +32 -0
- package/dist/server/server/table-personal.js +63 -0
- package/dist/server/server/table-personal_rol.js +43 -0
- package/dist/server/server/table-personas.js +449 -0
- package/dist/server/server/table-personas_sup.js +94 -0
- package/dist/server/server/table-recepcionistas.js +19 -0
- package/dist/server/server/table-recuperadores.js +19 -0
- package/dist/server/server/table-resultados_tarea.js +29 -0
- package/dist/server/server/table-roles.js +33 -0
- package/dist/server/server/table-roles_permisos.js +36 -0
- package/dist/server/server/table-roles_subordinados.js +33 -0
- package/dist/server/server/table-semanas.js +42 -0
- package/dist/server/server/table-sincronizaciones.js +31 -0
- package/dist/server/server/table-supervisores.js +19 -0
- package/dist/server/server/table-tareas.js +47 -0
- package/dist/server/server/table-tareas_areas.js +68 -0
- package/dist/server/server/table-tareas_tem.js +148 -0
- package/dist/server/server/table-tem.js +187 -0
- package/dist/server/server/table-tem_recepcion.js +19 -0
- package/dist/server/server/table-usuarios.js +59 -0
- package/dist/server/server/table-visitas.js +92 -0
- package/dist/server/server/table-visitas_sup.js +92 -0
- package/dist/server/server/table-viviendas.js +300 -0
- package/dist/server/server/types-dmencu.js +24 -0
- package/dist/server/unlogged/tipos.js +19 -0
- package/dist/unlogged/unlogged/abrir-formulario.js +99 -0
- package/dist/unlogged/unlogged/adapt.js +8 -0
- package/dist/unlogged/unlogged/bypass-formulario.js +1141 -0
- package/dist/unlogged/unlogged/css/Roboto-Regular.ttf +0 -0
- package/dist/unlogged/unlogged/css/bootstrap.min.css +7 -0
- package/dist/unlogged/unlogged/css/formulario-react.styl +756 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-192.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-192_capa.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-192_test.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-32.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-32_capa.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-32_test.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-48.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-48_capa.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-48_test.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-512.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-512_capa.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-512_test.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-64.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-64_capa.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-64_test.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-72.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-72_capa.png +0 -0
- package/dist/unlogged/unlogged/img/PREJU_2022-logo-dm-72_test.png +0 -0
- package/dist/unlogged/unlogged/img/_login-logo-icon.png +0 -0
- package/dist/unlogged/unlogged/img/_logo-128.png +0 -0
- package/dist/unlogged/unlogged/img/_logo.png +0 -0
- package/dist/unlogged/unlogged/img/borrar-valor.pdn +0 -0
- package/dist/unlogged/unlogged/img/borrar-valor.png +0 -0
- package/dist/unlogged/unlogged/img/fondo-salteado-crudo.pdn +0 -0
- package/dist/unlogged/unlogged/img/fondo-salteado-error.png +0 -0
- package/dist/unlogged/unlogged/img/fondo-salteado.pdn +0 -0
- package/dist/unlogged/unlogged/img/fondo-salteado.png +0 -0
- package/dist/unlogged/unlogged/img/img-logo-dgeyc_blanco.png +0 -0
- package/dist/unlogged/unlogged/img/login-logo-icon.png +0 -0
- package/dist/unlogged/unlogged/img/logo-128.png +0 -0
- package/dist/unlogged/unlogged/img/logo.png +0 -0
- package/dist/unlogged/unlogged/img/logos-gcbs-blanco-150x57.png +0 -0
- package/dist/unlogged/unlogged/offline.jade +10 -0
- package/dist/unlogged/unlogged/redux-formulario.js +315 -0
- package/dist/unlogged/unlogged/render-formulario.js +1485 -0
- package/dist/unlogged/unlogged/render-formulario.tsx +2103 -0
- package/dist/unlogged/unlogged/render-general.js +185 -0
- package/dist/unlogged/unlogged/render-general.tsx +228 -0
- package/dist/unlogged/unlogged/tipos.js +19 -0
- package/dist/unlogged/unlogged/tsconfig.json +15 -0
- package/dist/unlogged/unlogged/unlogged.js +180 -0
- package/package.json +91 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,315 @@
|
|
|
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", "redux", "./tipos", "redux-typed-reducer", "like-ar", "best-globals"], factory);
|
|
17
|
+
}
|
|
18
|
+
})(function (require, exports) {
|
|
19
|
+
"use strict";
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.dmTraerDatosFormulario = exports.traerEstructura = exports.getCacheVersion = exports.gotoConsistir = exports.gotoCampo = exports.gotoSincronizar = exports.replaceSpecialWords = exports.dispatchers = void 0;
|
|
22
|
+
const redux_1 = require("redux");
|
|
23
|
+
const tipos_1 = require("./tipos");
|
|
24
|
+
const redux_typed_reducer_1 = require("redux-typed-reducer");
|
|
25
|
+
const likeAr = require("like-ar");
|
|
26
|
+
const bestGlobals = require("best-globals");
|
|
27
|
+
var my = myOwn;
|
|
28
|
+
const LOCAL_STORAGE_STATE_NAME = 'hdr-state';
|
|
29
|
+
function forPkToUrl(forPk, pilaForPk) {
|
|
30
|
+
var addrParams = myOwn.UriSearchToObject(location.hash || location.search || '');
|
|
31
|
+
myOwn.replaceAddrParams(Object.assign(Object.assign({}, addrParams), { state_forPk: forPk == null ? 'null' : (0, tipos_1.toPlainForPk)(forPk), state_pilaForPk: pilaForPk.map(tipos_1.toPlainForPk).join('|') }));
|
|
32
|
+
}
|
|
33
|
+
var reducers = {
|
|
34
|
+
MODO_DESPLIEGUE: (payload) => function (state) {
|
|
35
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { modoDespliegue: payload.modoDespliegue }) });
|
|
36
|
+
},
|
|
37
|
+
CAMBIAR_FORMULARIO: (payload) => function (state) {
|
|
38
|
+
var forPk = payload.forPk;
|
|
39
|
+
var pilaForPk = payload.apilarVuelta ? (state.opciones.forPk == null ? [] : [...state.opciones.pilaForPk, state.opciones.forPk]) : state.opciones.pilaForPk;
|
|
40
|
+
forPkToUrl(forPk, pilaForPk);
|
|
41
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk,
|
|
42
|
+
pilaForPk }) });
|
|
43
|
+
},
|
|
44
|
+
VOLVER_DE_FORMULARIO: ({ magnitudRetroceso }) => function (state) {
|
|
45
|
+
var forPk = state.opciones.pilaForPk[state.opciones.pilaForPk.length - magnitudRetroceso] || null;
|
|
46
|
+
var pilaForPk = state.opciones.pilaForPk.slice(0, state.opciones.pilaForPk.length - magnitudRetroceso);
|
|
47
|
+
forPkToUrl(forPk, pilaForPk);
|
|
48
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk,
|
|
49
|
+
pilaForPk }) });
|
|
50
|
+
},
|
|
51
|
+
ESTADO_CARGA: (payload) => function (state) {
|
|
52
|
+
return state;
|
|
53
|
+
//DESACTIVADO
|
|
54
|
+
//return {
|
|
55
|
+
// ...state,
|
|
56
|
+
// datos:{
|
|
57
|
+
// ...state.datos,
|
|
58
|
+
// cargas:{
|
|
59
|
+
// ...state.datos.cargas,
|
|
60
|
+
// [payload.idCarga]: {
|
|
61
|
+
// ...state.datos.cargas[payload.idCarga],
|
|
62
|
+
// estado_carga: payload.estado_carga
|
|
63
|
+
// }
|
|
64
|
+
// }
|
|
65
|
+
// }
|
|
66
|
+
//}
|
|
67
|
+
},
|
|
68
|
+
VOLVER_HDR: (_payload) => function (state) {
|
|
69
|
+
var forPk = null;
|
|
70
|
+
var pilaForPk = [];
|
|
71
|
+
forPkToUrl(forPk, pilaForPk);
|
|
72
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk,
|
|
73
|
+
pilaForPk }) });
|
|
74
|
+
},
|
|
75
|
+
SET_OPCION: (payload) => function (state) {
|
|
76
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { [payload.opcion]: payload.valor }) });
|
|
77
|
+
},
|
|
78
|
+
RESET_OPCIONES: (_payload) => function (state) {
|
|
79
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk: null }) });
|
|
80
|
+
},
|
|
81
|
+
REINICIAR_DEMO: (_payload) => function (state) {
|
|
82
|
+
if (!state.modo.demo)
|
|
83
|
+
return state;
|
|
84
|
+
return Object.assign(Object.assign({}, state), {
|
|
85
|
+
// @ts-ignore copio los datos iniciales
|
|
86
|
+
datos: bestGlobals.deepCopy(state.modo.demo) });
|
|
87
|
+
},
|
|
88
|
+
CONFIRMAR_BORRAR_RESPUESTA: (payload) => function (state) {
|
|
89
|
+
return Object.assign(Object.assign({}, state), { opciones: Object.assign(Object.assign({}, state.opciones), { forPk: payload.forPk, modoBorrarRespuesta: payload.variable }) });
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
/* FIN ACCIONES */
|
|
93
|
+
exports.dispatchers = (0, redux_typed_reducer_1.createDispatchers)(reducers);
|
|
94
|
+
const casilleroVacio = { salto: null, despliegue: null, aclaracion: null, ver_id: null, casilleros: [], leer: null,
|
|
95
|
+
despliegueEncabezado: null, despliegueContenido: null, despliegueOculta: null, despliegueTipoInput: null
|
|
96
|
+
};
|
|
97
|
+
const opcionesSiNo = [
|
|
98
|
+
Object.assign(Object.assign({}, casilleroVacio), { casillero: 1, tipoc: 'O', nombre: 'Sí' }),
|
|
99
|
+
Object.assign(Object.assign({}, casilleroVacio), { casillero: 2, tipoc: 'O', nombre: 'No' }),
|
|
100
|
+
];
|
|
101
|
+
function aplanarLaCurva(casillerosData) {
|
|
102
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
103
|
+
var data = casillerosData.data;
|
|
104
|
+
return Object.assign(Object.assign({}, data), { despliegueContenido: ((_a = data.despliegue) === null || _a === void 0 ? void 0 : _a.includes('horizontal')) ? 'horizontal' : ((_b = data.despliegue) === null || _b === void 0 ? void 0 : _b.includes('vertical')) ? 'vertical' : null, despliegueEncabezado: ((_c = data.despliegue) === null || _c === void 0 ? void 0 : _c.includes('lateral')) ? 'lateral' : ((_d = data.despliegue) === null || _d === void 0 ? void 0 : _d.includes('superior')) ? 'superior' : null, despliegueOculta: (_f = (_e = data.despliegue) === null || _e === void 0 ? void 0 : _e.includes('ocultar')) !== null && _f !== void 0 ? _f : null, despliegueTipoInput: ((_g = data.despliegue) === null || _g === void 0 ? void 0 : _g.includes('telefono')) ? 'tel' : null, casilleros: !casillerosData.childs.length && casillerosData.data.tipoc == 'OM' ? opcionesSiNo :
|
|
105
|
+
casillerosData.childs.map(casillero => aplanarLaCurva(casillero)) });
|
|
106
|
+
}
|
|
107
|
+
// type AnyRef<T extends {}>=[T, keyof T];
|
|
108
|
+
function rellenarVariablesYOpciones(idFormulario, estructura, casillero, unidadAnalisis, subordinadaVar, subordinadaValor) {
|
|
109
|
+
if (casillero.var_name != null || casillero.tipoc == 'FILTRO') {
|
|
110
|
+
var var_name;
|
|
111
|
+
if (casillero.tipoc == 'FILTRO') {
|
|
112
|
+
// @ts-ignore pongo como nombre de variable el filtro;
|
|
113
|
+
var_name = casillero.casillero;
|
|
114
|
+
}
|
|
115
|
+
else if (casillero.var_name.endsWith('!')) {
|
|
116
|
+
// @ts-ignore las variables espejo son las que terminan en !
|
|
117
|
+
var_name = casillero.var_name_especial.replace(/!+$/, '');
|
|
118
|
+
casillero.var_name = var_name;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
var_name = casillero.var_name;
|
|
122
|
+
}
|
|
123
|
+
let variableDef = {
|
|
124
|
+
tipo: casillero.tipoc == 'FILTRO' ? 'filtro' : casillero.tipoc == 'OM' || casillero.tipovar == 'si_no' ? 'opciones' : casillero.tipovar,
|
|
125
|
+
// @ts-ignore optativo podría no existir, quedará null.
|
|
126
|
+
optativa: casillero.optativo,
|
|
127
|
+
opciones: (casillero.tipoc == 'OM' || casillero.tipovar == 'opciones' || casillero.tipovar == 'si_no' ?
|
|
128
|
+
likeAr.createIndex(casillero.casilleros, 'casillero') : {}),
|
|
129
|
+
salto: casillero.salto,
|
|
130
|
+
saltoNsNr: 'salto_ns_nc' in casillero && casillero.salto_ns_nc || null,
|
|
131
|
+
funcionHabilitar: casillero.expresion_habilitar_js,
|
|
132
|
+
funcionAutoIngresar: casillero.expresion_autoingresar_js,
|
|
133
|
+
calculada:
|
|
134
|
+
// @ts-ignore // TODO. Averiguar si las preguntas y filtros pueden tener unidad de análisis
|
|
135
|
+
casillero.unidad_analisis && casillero.unidad_analisis != unidadAnalisis
|
|
136
|
+
|| casillero.calculada,
|
|
137
|
+
libre: casillero.libre
|
|
138
|
+
};
|
|
139
|
+
if (subordinadaValor != undefined) {
|
|
140
|
+
variableDef.subordinadaVar = subordinadaVar;
|
|
141
|
+
variableDef.subordinadaValor = subordinadaValor;
|
|
142
|
+
}
|
|
143
|
+
estructura.variables[var_name] = variableDef;
|
|
144
|
+
}
|
|
145
|
+
else if (casillero.tipoc == 'BF') {
|
|
146
|
+
// var var_name = '$B.F:'+casillero.salto as IdVariable; //original
|
|
147
|
+
var saltoNombre = casillero.salto.substr(0, 2) == 'F:' ? casillero.salto.slice(2) : casillero.salto;
|
|
148
|
+
var var_name = '$B.F:' + saltoNombre;
|
|
149
|
+
casillero.var_name_BF = var_name;
|
|
150
|
+
let variableDef = Object.assign({ tipo: 'texto', libre: true }, (casillero.expresion_habilitar ? { funcionHabilitar: `valores['${casillero.expresion_habilitar}'] !==0 ` } : {}));
|
|
151
|
+
estructura.variables[var_name] = variableDef;
|
|
152
|
+
}
|
|
153
|
+
if (casillero.casilleros) {
|
|
154
|
+
casillero.casilleros.forEach((casilleroHijo) => rellenarVariablesYOpciones(idFormulario, estructura, casilleroHijo, unidadAnalisis, casillero.var_name ? casillero.var_name : casillero.tipoc == 'O' ? subordinadaVar : undefined, casillero.tipoc == 'O' ? casillero.casillero : undefined));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function obtenerDestinosCasilleros(casillero, destinos) {
|
|
158
|
+
if (destinos == null)
|
|
159
|
+
return obtenerDestinosCasilleros(casillero, {});
|
|
160
|
+
if (casillero.tipoc == 'FILTRO') {
|
|
161
|
+
destinos[casillero.casillero] = casillero.casillero;
|
|
162
|
+
}
|
|
163
|
+
else if (casillero.tipoc != 'F' && casillero.tipoc != 'O' && casillero.tipoc != 'OM') {
|
|
164
|
+
destinos[casillero.casillero] = casillero.primera_variable || null;
|
|
165
|
+
}
|
|
166
|
+
if (casillero.casilleros) {
|
|
167
|
+
casillero.casilleros.forEach(c => obtenerDestinosCasilleros(c, destinos));
|
|
168
|
+
}
|
|
169
|
+
return destinos;
|
|
170
|
+
}
|
|
171
|
+
function rellenarDestinos(estructura, destinos) {
|
|
172
|
+
function obtenerDestino(idVariableQueTieneUnDestino) {
|
|
173
|
+
return idVariableQueTieneUnDestino == 'fin' ? 'fin' : idVariableQueTieneUnDestino != null && destinos[idVariableQueTieneUnDestino] || null;
|
|
174
|
+
}
|
|
175
|
+
return Object.assign(Object.assign({}, estructura), { variables: likeAr(estructura.variables).map(variableDef => (Object.assign(Object.assign({}, variableDef), { salto: obtenerDestino(variableDef.salto), saltoNsNr: obtenerDestino(variableDef.saltoNsNr), opciones: variableDef.opciones != null ? likeAr(variableDef.opciones).map(opcionDef => ({ salto: obtenerDestino(opcionDef.salto) })).plain() : undefined }))).plain() });
|
|
176
|
+
}
|
|
177
|
+
function generarEstructuraRowValidator(casillero, idFormulario) {
|
|
178
|
+
var estructuraIncompleta = { variables: {}, marcaFin: 'fin' };
|
|
179
|
+
rellenarVariablesYOpciones(idFormulario, estructuraIncompleta, casillero,
|
|
180
|
+
// @ts-ignore ver si cualquier cosa puede tener unidad_analisis
|
|
181
|
+
casillero.unidad_analisis);
|
|
182
|
+
var destinos = obtenerDestinosCasilleros(casillero);
|
|
183
|
+
return rellenarDestinos(estructuraIncompleta, destinos);
|
|
184
|
+
}
|
|
185
|
+
function replaceSpecialWords(text, nombre, apellido, resultado) {
|
|
186
|
+
function capitalizeFirstLetter(text) {
|
|
187
|
+
return text.charAt(0).toUpperCase() + text.slice(1);
|
|
188
|
+
}
|
|
189
|
+
var simplificatedChars = {
|
|
190
|
+
"#nombre": capitalizeFirstLetter(nombre),
|
|
191
|
+
"#apellido": capitalizeFirstLetter(apellido),
|
|
192
|
+
"#resultado": resultado,
|
|
193
|
+
};
|
|
194
|
+
var re = new RegExp(Object.keys(simplificatedChars).join("|"), "gi");
|
|
195
|
+
return text.replace(re, function (matched) {
|
|
196
|
+
return simplificatedChars[matched.toLowerCase()];
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
exports.replaceSpecialWords = replaceSpecialWords;
|
|
200
|
+
function gotoSincronizar() {
|
|
201
|
+
history.replaceState(null, '', `${location.origin + location.pathname}/../menu#i=sincronizar`);
|
|
202
|
+
location.reload();
|
|
203
|
+
}
|
|
204
|
+
exports.gotoSincronizar = gotoSincronizar;
|
|
205
|
+
function gotoCampo() {
|
|
206
|
+
history.replaceState(null, '', `${location.origin + location.pathname}/../campo`);
|
|
207
|
+
location.reload();
|
|
208
|
+
}
|
|
209
|
+
exports.gotoCampo = gotoCampo;
|
|
210
|
+
function gotoConsistir(operativo, tarea, idEnc) {
|
|
211
|
+
history.replaceState(null, '', `${location.origin + location.pathname}/../menu#w=consistir_encuesta&up={"operativo":"${operativo}","tarea":"${tarea}","encuesta":${idEnc}}&autoproced=true`);
|
|
212
|
+
location.reload();
|
|
213
|
+
}
|
|
214
|
+
exports.gotoConsistir = gotoConsistir;
|
|
215
|
+
function getCacheVersion() {
|
|
216
|
+
return my.getLocalVar('app-cache-version');
|
|
217
|
+
}
|
|
218
|
+
exports.getCacheVersion = getCacheVersion;
|
|
219
|
+
var redirectIfNotLogged = function redirectIfNotLogged(err) {
|
|
220
|
+
if (err.message == my.messages.notLogged) {
|
|
221
|
+
setTimeout(() => {
|
|
222
|
+
history.replaceState(null, '', `${location.origin + location.pathname}/../login${location.hash}`);
|
|
223
|
+
location.reload();
|
|
224
|
+
}, 1500);
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
function traerEstructura(params) {
|
|
228
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
229
|
+
var estructura = yield my.ajax.operativo_estructura_completa(params);
|
|
230
|
+
var casillerosOriginales = estructura.formularios;
|
|
231
|
+
//TODO: GENERALIZAR
|
|
232
|
+
//@ts-ignore
|
|
233
|
+
// casillerosOriginales['F:F2_personas']=casillerosOriginales['F:F2'].childs.find(casillero=>casillero.data.casillero=='LP');
|
|
234
|
+
var mainForm;
|
|
235
|
+
//@ts-ignore
|
|
236
|
+
var casillerosTodosFormularios = likeAr(casillerosOriginales).map((casillerosJerarquizados, idFormulario) => {
|
|
237
|
+
var casillerosAplanados = aplanarLaCurva(casillerosJerarquizados);
|
|
238
|
+
if (casillerosAplanados.tipoc == 'F' && casillerosAplanados.formulario_principal) {
|
|
239
|
+
mainForm = idFormulario;
|
|
240
|
+
}
|
|
241
|
+
return {
|
|
242
|
+
casilleros: casillerosAplanados,
|
|
243
|
+
estructuraRowValidator: generarEstructuraRowValidator(casillerosAplanados, idFormulario)
|
|
244
|
+
};
|
|
245
|
+
}).plain();
|
|
246
|
+
estructura.formularios = casillerosTodosFormularios;
|
|
247
|
+
return estructura;
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
exports.traerEstructura = traerEstructura;
|
|
251
|
+
function dmTraerDatosFormulario(opts) {
|
|
252
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
253
|
+
var getCasoState = () => myOwn.getLocalVar(LOCAL_STORAGE_STATE_NAME);
|
|
254
|
+
var setCasoState = (casoState) => myOwn.setLocalVar(LOCAL_STORAGE_STATE_NAME, casoState);
|
|
255
|
+
var loadState = function loadState() {
|
|
256
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
257
|
+
var casoState = getCasoState();
|
|
258
|
+
var initialState = {
|
|
259
|
+
opciones: {
|
|
260
|
+
forPk: null,
|
|
261
|
+
pilaForPk: [],
|
|
262
|
+
modoDespliegue: 'relevamiento',
|
|
263
|
+
modoDirecto: false,
|
|
264
|
+
conCampoOpciones: false,
|
|
265
|
+
saltoAutomatico: true,
|
|
266
|
+
bienvenido: true,
|
|
267
|
+
modoBorrarRespuesta: null,
|
|
268
|
+
},
|
|
269
|
+
modo: {
|
|
270
|
+
//@ts-ignore es un booleano pero pongo ahí los datos de demo!
|
|
271
|
+
demo:
|
|
272
|
+
// @ts-ignore
|
|
273
|
+
myOwn.config.config.ambiente == 'test' || myOwn.config.config.ambiente == 'demo',
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
if (casoState) {
|
|
277
|
+
initialState = Object.assign(Object.assign({}, initialState), { opciones: casoState.opciones });
|
|
278
|
+
}
|
|
279
|
+
if (opts.forPkRaiz) {
|
|
280
|
+
initialState.opciones.forPk = opts.forPkRaiz;
|
|
281
|
+
initialState.opciones.modoDirecto = !!opts.forPkRaiz;
|
|
282
|
+
initialState.opciones.pilaForPk = [];
|
|
283
|
+
}
|
|
284
|
+
var addrParams = myOwn.UriSearchToObject(location.hash || location.search || '');
|
|
285
|
+
if (addrParams.state_forPk) {
|
|
286
|
+
initialState.opciones.forPk = JSON.parse(addrParams.state_forPk);
|
|
287
|
+
}
|
|
288
|
+
if (addrParams.state_pilaForPk) {
|
|
289
|
+
initialState.opciones.pilaForPk = addrParams.state_pilaForPk.split('|').map(j => JSON.parse(j));
|
|
290
|
+
}
|
|
291
|
+
return initialState;
|
|
292
|
+
});
|
|
293
|
+
};
|
|
294
|
+
var saveState = function saveState(state) {
|
|
295
|
+
setCasoState(state);
|
|
296
|
+
};
|
|
297
|
+
/* DEFINICION CONTROLADOR */
|
|
298
|
+
var initialState = yield loadState();
|
|
299
|
+
const hdrReducer = (0, redux_typed_reducer_1.createReducer)(reducers, initialState);
|
|
300
|
+
/* FIN DEFINICION CONTROLADOR */
|
|
301
|
+
/* CARGA Y GUARDADO DE STATE */
|
|
302
|
+
/* CREACION STORE */
|
|
303
|
+
const store = (0, redux_1.createStore)(hdrReducer, initialState);
|
|
304
|
+
saveState(store.getState());
|
|
305
|
+
store.subscribe(function () {
|
|
306
|
+
saveState(store.getState());
|
|
307
|
+
});
|
|
308
|
+
/* FIN CREACION STORE */
|
|
309
|
+
//HDR CON STORE CREADO
|
|
310
|
+
return store;
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
exports.dmTraerDatosFormulario = dmTraerDatosFormulario;
|
|
314
|
+
});
|
|
315
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdXgtZm9ybXVsYXJpby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91bmxvZ2dlZC9yZWR1eC1mb3JtdWxhcmlvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUFBLGlDQUFvQztJQUNwQyxtQ0FVaUI7SUFDakIsNkRBQW9GO0lBRXBGLGtDQUFrQztJQUNsQyw0Q0FBNEM7SUFJNUMsSUFBSSxFQUFFLEdBQUMsS0FBSyxDQUFDO0lBRWIsTUFBTSx3QkFBd0IsR0FBRSxXQUFXLENBQUM7SUFFNUMsU0FBUyxVQUFVLENBQUMsS0FBZ0IsRUFBRSxTQUFpQjtRQUNuRCxJQUFJLFVBQVUsR0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksSUFBRSxRQUFRLENBQUMsTUFBTSxJQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLEtBQUssQ0FBQyxpQkFBaUIsaUNBQ2hCLFVBQVUsS0FDYixXQUFXLEVBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFBLG9CQUFZLEVBQUMsS0FBSyxDQUFDLEVBQ3hELGVBQWUsRUFBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQ3ZELENBQUM7SUFDUCxDQUFDO0lBRUQsSUFBSSxRQUFRLEdBQUM7UUFDVCxlQUFlLEVBQUUsQ0FBQyxPQUF3QyxFQUFFLEVBQUUsQ0FDMUQsVUFBUyxLQUFnQjtZQUNyQix1Q0FDTyxLQUFLLEtBQ1IsUUFBUSxrQ0FDRCxLQUFLLENBQUMsUUFBUSxLQUNqQixjQUFjLEVBQUMsT0FBTyxDQUFDLGNBQWMsT0FFNUM7UUFDTCxDQUFDO1FBQ0wsa0JBQWtCLEVBQUUsQ0FBQyxPQUE0QyxFQUFFLEVBQUUsQ0FDakUsVUFBUyxLQUFnQjtZQUNyQixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxD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U0FBUyxHQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDL0Y7b0JBQ0QsT0FBTyxZQUFZLENBQUM7Z0JBQ3hCLENBQUM7YUFBQSxDQUFBO1lBQ0QsSUFBSSxTQUFTLEdBQUcsU0FBUyxTQUFTLENBQUMsS0FBZTtnQkFDOUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQTtZQUNELDRCQUE0QjtZQUM1QixJQUFJLFlBQVksR0FBYSxNQUFNLFNBQVMsRUFBRSxDQUFDO1lBQy9DLE1BQU0sVUFBVSxHQUFHLElBQUEsbUNBQWEsRUFBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDekQsZ0NBQWdDO1lBQ2hDLCtCQUErQjtZQUMvQixvQkFBb0I7WUFDcEIsTUFBTSxLQUFLLEdBQUcsSUFBQSxtQkFBVyxFQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNwRCxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDNUIsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDWCxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7WUFDSCx3QkFBd0I7WUFDeEIsc0JBQXNCO1lBQ3RCLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7S0FBQTtJQTdERCx3REE2REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVTdG9yZSB9IGZyb20gXCJyZWR1eFwiO1xyXG5pbXBvcnQgeyBDYXNpbGxlcm9zSW1wbGVtZW50YWRvcywgQ2Fzb1N0YXRlLCBcclxuICAgIEVzdGFkb0NhcmdhLCBFc3RydWN0dXJhUm93VmFsaWRhdG9yLCBcclxuICAgIEZvcm11bGFyaW8sIEZvclBrLCBGb3JQa1JhaXosIFxyXG4gICAgSWRDYXJnYSwgSWREZXN0aW5vLCBJZEZvcm11bGFyaW8sIElkVmFyaWFibGUsIElkT3BlcmF0aXZvLCBcclxuICAgIE1vZG9EZXNwbGllZ3VlLCBcclxuICAgIE9wY2lvbixcclxuICAgIHRvUGxhaW5Gb3JQayxcclxuICAgIElkRmluLFxyXG4gICAgSWRFbmMsXHJcbiAgICBJZFRhcmVhLFxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVJlZHVjZXIsIGNyZWF0ZURpc3BhdGNoZXJzLCBBY3Rpb25zRnJvbSB9IGZyb20gXCJyZWR1eC10eXBlZC1yZWR1Y2VyXCI7XHJcbmltcG9ydCB7IE1vZG9BbG1hY2VuYW1pZW50byB9IGZyb20gXCIuL3RpcG9zXCJcclxuaW1wb3J0ICogYXMgbGlrZUFyIGZyb20gXCJsaWtlLWFyXCI7XHJcbmltcG9ydCAqIGFzIGJlc3RHbG9iYWxzIGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuXHJcbmltcG9ydCB7IE9wY2lvbiBhcyBSb3dWYWxpZGF0b3JPcGNpb24gfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5cclxudmFyIG15PW15T3duO1xyXG5cclxuY29uc3QgTE9DQUxfU1RPUkFHRV9TVEFURV9OQU1FID0naGRyLXN0YXRlJztcclxuXHJcbmZ1bmN0aW9uIGZvclBrVG9VcmwoZm9yUGs6Rm9yUGt8bnVsbCwgcGlsYUZvclBrOkZvclBrW10pe1xyXG4gICAgdmFyIGFkZHJQYXJhbXM9bXlPd24uVXJpU2VhcmNoVG9PYmplY3QobG9jYXRpb24uaGFzaHx8bG9jYXRpb24uc2VhcmNofHwnJyk7XHJcbiAgICBteU93bi5yZXBsYWNlQWRkclBhcmFtcyh7XHJcbiAgICAgICAgLi4uYWRkclBhcmFtcywgXHJcbiAgICAgICAgc3RhdGVfZm9yUGs6Zm9yUGsgPT0gbnVsbCA/ICdudWxsJyA6IHRvUGxhaW5Gb3JQayhmb3JQayksIFxyXG4gICAgICAgIHN0YXRlX3BpbGFGb3JQazpwaWxhRm9yUGsubWFwKHRvUGxhaW5Gb3JQaykuam9pbignfCcpXHJcbiAgICB9KTtcclxufVxyXG5cclxudmFyIHJlZHVjZXJzPXtcclxuICAgIE1PRE9fREVTUExJRUdVRTogKHBheWxvYWQ6IHttb2RvRGVzcGxpZWd1ZTpNb2RvRGVzcGxpZWd1ZX0pID0+IFxyXG4gICAgICAgIGZ1bmN0aW9uKHN0YXRlOiBDYXNvU3RhdGUpe1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczp7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kb0Rlc3BsaWVndWU6cGF5bG9hZC5tb2RvRGVzcGxpZWd1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIENBTUJJQVJfRk9STVVMQVJJTzogKHBheWxvYWQ6IHtmb3JQazpGb3JQaywgYXBpbGFyVnVlbHRhOmJvb2xlYW59KSA9PiBcclxuICAgICAgICBmdW5jdGlvbihzdGF0ZTogQ2Fzb1N0YXRlKXtcclxuICAgICAgICAgICAgdmFyIGZvclBrID0gcGF5bG9hZC5mb3JQaztcclxuICAgICAgICAgICAgdmFyIHBpbGFGb3JQayA9IHBheWxvYWQuYXBpbGFyVnVlbHRhPyhcclxuICAgICAgICAgICAgICAgIHN0YXRlLm9wY2lvbmVzLmZvclBrPT1udWxsP1tdOlsuLi5zdGF0ZS5vcGNpb25lcy5waWxhRm9yUGssIHN0YXRlLm9wY2lvbmVzLmZvclBrXVxyXG4gICAgICAgICAgICApOnN0YXRlLm9wY2lvbmVzLnBpbGFGb3JQaztcclxuICAgICAgICAgICAgZm9yUGtUb1VybChmb3JQaywgcGlsYUZvclBrKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgb3BjaW9uZXM6e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgIHBpbGFGb3JQa1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFZPTFZFUl9ERV9GT1JNVUxBUklPOiAoe21hZ25pdHVkUmV0cm9jZXNvfToge21hZ25pdHVkUmV0cm9jZXNvOm51bWJlcn0pID0+IFxyXG4gICAgICAgIGZ1bmN0aW9uKHN0YXRlOiBDYXNvU3RhdGUpe1xyXG4gICAgICAgICAgICB2YXIgZm9yUGsgPSBzdGF0ZS5vcGNpb25lcy5waWxhRm9yUGtbc3RhdGUub3BjaW9uZXMucGlsYUZvclBrLmxlbmd0aC1tYWduaXR1ZFJldHJvY2Vzb118fG51bGw7XHJcbiAgICAgICAgICAgIHZhciBwaWxhRm9yUGsgPSBzdGF0ZS5vcGNpb25lcy5waWxhRm9yUGsuc2xpY2UoMCxzdGF0ZS5vcGNpb25lcy5waWxhRm9yUGsubGVuZ3RoLW1hZ25pdHVkUmV0cm9jZXNvKTtcclxuICAgICAgICAgICAgZm9yUGtUb1VybChmb3JQaywgcGlsYUZvclBrKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgb3BjaW9uZXM6e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgIHBpbGFGb3JQa1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIEVTVEFET19DQVJHQTogKHBheWxvYWQ6IHtpZENhcmdhOklkQ2FyZ2EsIGVzdGFkb19jYXJnYTpFc3RhZG9DYXJnYX0pID0+XHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IENhc29TdGF0ZSl7XHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZVxyXG4gICAgICAgICAgICAvL0RFU0FDVElWQURPXHJcbiAgICAgICAgICAgIC8vcmV0dXJuIHtcclxuICAgICAgICAgICAgLy8gICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgIC8vICAgIGRhdG9zOntcclxuICAgICAgICAgICAgLy8gICAgICAgIC4uLnN0YXRlLmRhdG9zLFxyXG4gICAgICAgICAgICAvLyAgICAgICAgY2FyZ2FzOntcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAuLi5zdGF0ZS5kYXRvcy5jYXJnYXMsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgW3BheWxvYWQuaWRDYXJnYV06IHtcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgLi4uc3RhdGUuZGF0b3MuY2FyZ2FzW3BheWxvYWQuaWRDYXJnYV0sXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGVzdGFkb19jYXJnYTogcGF5bG9hZC5lc3RhZG9fY2FyZ2FcclxuICAgICAgICAgICAgLy8gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vICAgIH1cclxuICAgICAgICAgICAgLy99XHJcbiAgICAgICAgfSxcclxuICAgIFZPTFZFUl9IRFI6IChfcGF5bG9hZDoge30pID0+IFxyXG4gICAgICAgIGZ1bmN0aW9uKHN0YXRlOiBDYXNvU3RhdGUpe1xyXG4gICAgICAgICAgICB2YXIgZm9yUGsgPSBudWxsO1xyXG4gICAgICAgICAgICB2YXIgcGlsYUZvclBrOkZvclBrW10gPSBbXTtcclxuICAgICAgICAgICAgZm9yUGtUb1VybChmb3JQaywgcGlsYUZvclBrKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnN0YXRlLFxyXG4gICAgICAgICAgICAgICAgb3BjaW9uZXM6e1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLnN0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgIHBpbGFGb3JQa1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIFNFVF9PUENJT046IChwYXlsb2FkOiB7b3BjaW9uOmtleW9mIENhc29TdGF0ZVsnb3BjaW9uZXMnXSwgdmFsb3I6YW55fSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IENhc29TdGF0ZSl7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIG9wY2lvbmVzOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICAgICAgICAgICAgICBbcGF5bG9hZC5vcGNpb25dOiBwYXlsb2FkLnZhbG9yXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgUkVTRVRfT1BDSU9ORVM6IChfcGF5bG9hZDoge30pID0+IFxyXG4gICAgICAgIGZ1bmN0aW9uKHN0YXRlOiBDYXNvU3RhdGUpe1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBvcGNpb25lczp7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RhdGUub3BjaW9uZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yUGs6IG51bGxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICBSRUlOSUNJQVJfREVNTzogKF9wYXlsb2FkOiB7fSkgPT5cclxuICAgICAgICBmdW5jdGlvbihzdGF0ZTogQ2Fzb1N0YXRlKXtcclxuICAgICAgICAgICAgaWYoIXN0YXRlLm1vZG8uZGVtbykgcmV0dXJuIHN0YXRlO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIGNvcGlvIGxvcyBkYXRvcyBpbmljaWFsZXNcclxuICAgICAgICAgICAgICAgIGRhdG9zOmJlc3RHbG9iYWxzLmRlZXBDb3B5KHN0YXRlLm1vZG8uZGVtbylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICBDT05GSVJNQVJfQk9SUkFSX1JFU1BVRVNUQTogKHBheWxvYWQ6IHtmb3JQazpGb3JQaywgdmFyaWFibGU6SWRWYXJpYWJsZXxudWxsfSkgPT4gXHJcbiAgICAgICAgZnVuY3Rpb24oc3RhdGU6IENhc29TdGF0ZSl7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZSxcclxuICAgICAgICAgICAgICAgIG9wY2lvbmVzOntcclxuICAgICAgICAgICAgICAgICAgICAuLi5zdGF0ZS5vcGNpb25lcyxcclxuICAgICAgICAgICAgICAgICAgICBmb3JQazpwYXlsb2FkLmZvclBrLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZG9Cb3JyYXJSZXNwdWVzdGE6IHBheWxvYWQudmFyaWFibGVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIEFjdGlvbkZvcm11bGFyaW9TdGF0ZSA9IEFjdGlvbnNGcm9tPHR5cGVvZiByZWR1Y2Vycz47XHJcbi8qIEZJTiBBQ0NJT05FUyAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IGRpc3BhdGNoZXJzID0gY3JlYXRlRGlzcGF0Y2hlcnMocmVkdWNlcnMpO1xyXG5cclxuaW50ZXJmYWNlIElEYXRhU2VwYXJhZGE8VCBleHRlbmRzIHt0aXBvYzpzdHJpbmd9PiB7XHJcbiAgICBkYXRhOlQsXHJcbiAgICBjaGlsZHM6SURhdGFTZXBhcmFkYTxUPltdXHJcbn1cclxuXHJcbnR5cGUgSURhdGFDb25DYXNpbGxlcm9zPFQ+ID0gVCAmIHtcclxuICAgIGNhc2lsbGVyb3M6cmVhZG9ubHkgSURhdGFDb25DYXNpbGxlcm9zPFQ+W11cclxufVxyXG5cclxuY29uc3QgY2FzaWxsZXJvVmFjaW89e3NhbHRvOm51bGwsIGRlc3BsaWVndWU6bnVsbCwgYWNsYXJhY2lvbjpudWxsLCB2ZXJfaWQ6bnVsbCwgY2FzaWxsZXJvczpbXSwgbGVlcjpudWxsLFxyXG4gICAgZGVzcGxpZWd1ZUVuY2FiZXphZG86bnVsbCwgZGVzcGxpZWd1ZUNvbnRlbmlkbzpudWxsLCBkZXNwbGllZ3VlT2N1bHRhOm51bGwsIGRlc3BsaWVndWVUaXBvSW5wdXQ6bnVsbFxyXG59XHJcblxyXG5jb25zdCBvcGNpb25lc1NpTm86IE9wY2lvbltdID0gW1xyXG4gICAgey4uLmNhc2lsbGVyb1ZhY2lvLCBjYXNpbGxlcm86MSwgdGlwb2M6J08nLCBub21icmU6J1PDrSd9LFxyXG4gICAgey4uLmNhc2lsbGVyb1ZhY2lvLCBjYXNpbGxlcm86MiwgdGlwb2M6J08nLCBub21icmU6J05vJ30sXHJcbl1cclxuXHJcbnR5cGUgQ2FyYWNlcml6YWNpb25Fc3RhZG9Sb3dWYWxpZGF0b3I9e1xyXG4gICAgY29ycmVjdG86Ym9vbGVhbixcclxuICAgIGNvblZhbG9yOmJvb2xlYW58bnVsbCwgLy8gbnVsbCA9IHVua25vd25cclxufVxyXG5cclxuZnVuY3Rpb24gYXBsYW5hckxhQ3VydmE8VCBleHRlbmRzIHt0aXBvYzpzdHJpbmcsIGRlc3BsaWVndWU/OnN0cmluZ30+KGNhc2lsbGVyb3NEYXRhOklEYXRhU2VwYXJhZGE8VD4pOklEYXRhQ29uQ2FzaWxsZXJvczxUfE9wY2lvbj57XHJcbiAgICB2YXIgZGF0YSA9IGNhc2lsbGVyb3NEYXRhLmRhdGFcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZGF0YSxcclxuICAgICAgICBkZXNwbGllZ3VlQ29udGVuaWRvOiBkYXRhLmRlc3BsaWVndWU/LmluY2x1ZGVzKCdob3Jpem9udGFsJyk/J2hvcml6b250YWwnOmRhdGEuZGVzcGxpZWd1ZT8uaW5jbHVkZXMoJ3ZlcnRpY2FsJyk/J3ZlcnRpY2FsJzpudWxsLFxyXG4gICAgICAgIGRlc3BsaWVndWVFbmNhYmV6YWRvOiBkYXRhLmRlc3BsaWVndWU/LmluY2x1ZGVzKCdsYXRlcmFsJyk/J2xhdGVyYWwnOmRhdGEuZGVzcGxpZWd1ZT8uaW5jbHVkZXMoJ3N1cGVyaW9yJyk/J3N1cGVyaW9yJzpudWxsLFxyXG4gICAgICAgIGRlc3BsaWVndWVPY3VsdGE6IGRhdGEuZGVzcGxpZWd1ZT8uaW5jbHVkZXMoJ29jdWx0YXInKT8/bnVsbCxcclxuICAgICAgICBkZXNwbGllZ3VlVGlwb0lucHV0OiBkYXRhLmRlc3BsaWVndWU/LmluY2x1ZGVzKCd0ZWxlZm9ubycpPyd0ZWwnOm51bGwsXHJcbiAgICAgICAgY2FzaWxsZXJvczogIWNhc2lsbGVyb3NEYXRhLmNoaWxkcy5sZW5ndGggJiYgY2FzaWxsZXJvc0RhdGEuZGF0YS50aXBvYz09J09NJyA/IG9wY2lvbmVzU2lObyA6XHJcbiAgICAgICAgICAgICBjYXNpbGxlcm9zRGF0YS5jaGlsZHMubWFwKGNhc2lsbGVybz0+YXBsYW5hckxhQ3VydmEoY2FzaWxsZXJvKSlcclxuICAgIH1cclxufVxyXG5cclxuLy8gdHlwZSBBbnlSZWY8VCBleHRlbmRzIHt9Pj1bVCwga2V5b2YgVF07XHJcblxyXG5mdW5jdGlvbiByZWxsZW5hclZhcmlhYmxlc1lPcGNpb25lcyhpZEZvcm11bGFyaW86SWRGb3JtdWxhcmlvLCBlc3RydWN0dXJhOkVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IsIGNhc2lsbGVybzpDYXNpbGxlcm9zSW1wbGVtZW50YWRvcywgdW5pZGFkQW5hbGlzaXM/OnN0cmluZ3xudWxsLFxyXG4gICAgc3Vib3JkaW5hZGFWYXI/OklkVmFyaWFibGUsIHN1Ym9yZGluYWRhVmFsb3I/OmFueVxyXG4pe1xyXG4gICAgaWYoY2FzaWxsZXJvLnZhcl9uYW1lICE9IG51bGwgfHwgY2FzaWxsZXJvLnRpcG9jPT0nRklMVFJPJyl7XHJcbiAgICAgICAgdmFyIHZhcl9uYW1lOklkVmFyaWFibGVcclxuICAgICAgICBpZihjYXNpbGxlcm8udGlwb2M9PSdGSUxUUk8nKXtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBwb25nbyBjb21vIG5vbWJyZSBkZSB2YXJpYWJsZSBlbCBmaWx0cm87XHJcbiAgICAgICAgICAgIHZhcl9uYW1lID0gY2FzaWxsZXJvLmNhc2lsbGVybztcclxuICAgICAgICB9ZWxzZSBpZihjYXNpbGxlcm8udmFyX25hbWUuZW5kc1dpdGgoJyEnKSl7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgbGFzIHZhcmlhYmxlcyBlc3Blam8gc29uIGxhcyBxdWUgdGVybWluYW4gZW4gIVxyXG4gICAgICAgICAgICB2YXJfbmFtZSA9IGNhc2lsbGVyby52YXJfbmFtZV9lc3BlY2lhbC5yZXBsYWNlKC8hKyQvLCcnKTtcclxuICAgICAgICAgICAgY2FzaWxsZXJvLnZhcl9uYW1lID0gdmFyX25hbWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHZhcl9uYW1lID0gY2FzaWxsZXJvLnZhcl9uYW1lXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB2YXJpYWJsZURlZj17XHJcbiAgICAgICAgICAgIHRpcG86Y2FzaWxsZXJvLnRpcG9jPT0nRklMVFJPJz8nZmlsdHJvJzpjYXNpbGxlcm8udGlwb2M9PSdPTScgfHwgY2FzaWxsZXJvLnRpcG92YXI9PSdzaV9ubyc/J29wY2lvbmVzJzpjYXNpbGxlcm8udGlwb3ZhcixcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBvcHRhdGl2byBwb2Ryw61hIG5vIGV4aXN0aXIsIHF1ZWRhcsOhIG51bGwuXHJcbiAgICAgICAgICAgIG9wdGF0aXZhOmNhc2lsbGVyby5vcHRhdGl2byEsXHJcbiAgICAgICAgICAgIG9wY2lvbmVzOihjYXNpbGxlcm8udGlwb2M9PSdPTScgfHwgY2FzaWxsZXJvLnRpcG92YXI9PSdvcGNpb25lcycgfHwgY2FzaWxsZXJvLnRpcG92YXI9PSdzaV9ubyc/XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIuY3JlYXRlSW5kZXgoY2FzaWxsZXJvLmNhc2lsbGVyb3MsICdjYXNpbGxlcm8nKTp7fSkgYXMgdW5rbm93biBhcyB7IFtrZXk6IHN0cmluZ106IFJvd1ZhbGlkYXRvck9wY2lvbjxJZFZhcmlhYmxlPiB9LFxyXG4gICAgICAgICAgICBzYWx0bzpjYXNpbGxlcm8uc2FsdG8gYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICAgICAgc2FsdG9Oc05yOidzYWx0b19uc19uYycgaW4gY2FzaWxsZXJvICYmIGNhc2lsbGVyby5zYWx0b19uc19uYyB8fCBudWxsLFxyXG4gICAgICAgICAgICBmdW5jaW9uSGFiaWxpdGFyOmNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyX2pzLFxyXG4gICAgICAgICAgICBmdW5jaW9uQXV0b0luZ3Jlc2FyOmNhc2lsbGVyby5leHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzLFxyXG4gICAgICAgICAgICBjYWxjdWxhZGE6XHJcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlIC8vIFRPRE8uIEF2ZXJpZ3VhciBzaSBsYXMgcHJlZ3VudGFzIHkgZmlsdHJvcyBwdWVkZW4gdGVuZXIgdW5pZGFkIGRlIGFuw6FsaXNpc1xyXG4gICAgICAgICAgICAgICAgY2FzaWxsZXJvLnVuaWRhZF9hbmFsaXNpcyAmJiBjYXNpbGxlcm8udW5pZGFkX2FuYWxpc2lzIT11bmlkYWRBbmFsaXNpcyBcclxuICAgICAgICAgICAgICAgIHx8IGNhc2lsbGVyby5jYWxjdWxhZGEsXHJcbiAgICAgICAgICAgIGxpYnJlOmNhc2lsbGVyby5saWJyZVxyXG4gICAgICAgIH0gYXMgKHR5cGVvZiBlc3RydWN0dXJhLnZhcmlhYmxlcylbSWRWYXJpYWJsZV1cclxuICAgICAgICBpZihzdWJvcmRpbmFkYVZhbG9yICE9IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIHZhcmlhYmxlRGVmLnN1Ym9yZGluYWRhVmFyID0gc3Vib3JkaW5hZGFWYXI7XHJcbiAgICAgICAgICAgIHZhcmlhYmxlRGVmLnN1Ym9yZGluYWRhVmFsb3IgPSBzdWJvcmRpbmFkYVZhbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlc3RydWN0dXJhLnZhcmlhYmxlc1t2YXJfbmFtZV09dmFyaWFibGVEZWY7XHJcbiAgICB9IGVsc2UgaWYgKGNhc2lsbGVyby50aXBvYz09J0JGJyl7XHJcbiAgICAgICAvLyB2YXIgdmFyX25hbWUgPSAnJEIuRjonK2Nhc2lsbGVyby5zYWx0byBhcyBJZFZhcmlhYmxlOyAgICAvL29yaWdpbmFsXHJcbiAgICAgICAgdmFyIHNhbHRvTm9tYnJlPWNhc2lsbGVyby5zYWx0byEuc3Vic3RyKDAsMik9PSdGOic/Y2FzaWxsZXJvLnNhbHRvIS5zbGljZSgyKTpjYXNpbGxlcm8uc2FsdG87XHJcbiAgICAgICAgdmFyIHZhcl9uYW1lID0gJyRCLkY6JytzYWx0b05vbWJyZSBhcyBJZFZhcmlhYmxlO1xyXG4gICAgICAgIGNhc2lsbGVyby52YXJfbmFtZV9CRiA9IHZhcl9uYW1lO1xyXG4gICAgICAgIGxldCB2YXJpYWJsZURlZj17XHJcbiAgICAgICAgICAgIHRpcG86J3RleHRvJyxcclxuICAgICAgICAgICAgbGlicmU6dHJ1ZSxcclxuICAgICAgICAgICAgLi4uKGNhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyP3tmdW5jaW9uSGFiaWxpdGFyOmB2YWxvcmVzWycke2Nhc2lsbGVyby5leHByZXNpb25faGFiaWxpdGFyfSddICE9PTAgYH06e30pLFxyXG4gICAgICAgIH1cclxuICAgICAgICBlc3RydWN0dXJhLnZhcmlhYmxlc1t2YXJfbmFtZV09dmFyaWFibGVEZWY7XHJcbiAgICB9XHJcbiAgICBpZihjYXNpbGxlcm8uY2FzaWxsZXJvcyl7XHJcbiAgICAgICAgY2FzaWxsZXJvLmNhc2lsbGVyb3MuZm9yRWFjaCgoY2FzaWxsZXJvSGlqbzpDYXNpbGxlcm9zSW1wbGVtZW50YWRvcyk9PlxyXG4gICAgICAgICAgICByZWxsZW5hclZhcmlhYmxlc1lPcGNpb25lcyhpZEZvcm11bGFyaW8sIGVzdHJ1Y3R1cmEsIGNhc2lsbGVyb0hpam8sIHVuaWRhZEFuYWxpc2lzLCBjYXNpbGxlcm8udmFyX25hbWU/Y2FzaWxsZXJvLnZhcl9uYW1lOmNhc2lsbGVyby50aXBvYz09J08nP3N1Ym9yZGluYWRhVmFyOnVuZGVmaW5lZCxjYXNpbGxlcm8udGlwb2M9PSdPJz9jYXNpbGxlcm8uY2FzaWxsZXJvOnVuZGVmaW5lZClcclxuICAgICAgICApXHJcbiAgICB9XHJcbn1cclxuXHJcbnR5cGUgUmVnaXN0cm9EZXN0aW5vcz17W2Rlc3Rpbm8gaW4gSWREZXN0aW5vXTpJZFZhcmlhYmxlfG51bGx9O1xyXG5cclxuZnVuY3Rpb24gb2J0ZW5lckRlc3Rpbm9zQ2FzaWxsZXJvcyhjYXNpbGxlcm86Q2FzaWxsZXJvc0ltcGxlbWVudGFkb3MsIGRlc3Rpbm9zPzpSZWdpc3Ryb0Rlc3Rpbm9zKTpSZWdpc3Ryb0Rlc3Rpbm9ze1xyXG4gICAgaWYoZGVzdGlub3M9PW51bGwpIHJldHVybiBvYnRlbmVyRGVzdGlub3NDYXNpbGxlcm9zKGNhc2lsbGVybywge30gYXMgUmVnaXN0cm9EZXN0aW5vcyk7XHJcbiAgICBpZihjYXNpbGxlcm8udGlwb2M9PSdGSUxUUk8nKXtcclxuICAgICAgICBkZXN0aW5vc1tjYXNpbGxlcm8uY2FzaWxsZXJvXT1jYXNpbGxlcm8uY2FzaWxsZXJvIGFzIElkVmFyaWFibGU7XHJcbiAgICB9ZWxzZSBpZihjYXNpbGxlcm8udGlwb2MhPSdGJyAmJiBjYXNpbGxlcm8udGlwb2MhPSdPJyAmJiBjYXNpbGxlcm8udGlwb2MhPSdPTScpe1xyXG4gICAgICAgIGRlc3Rpbm9zW2Nhc2lsbGVyby5jYXNpbGxlcm9dPWNhc2lsbGVyby5wcmltZXJhX3ZhcmlhYmxlfHxudWxsXHJcbiAgICB9XHJcbiAgICBpZihjYXNpbGxlcm8uY2FzaWxsZXJvcyl7XHJcbiAgICAgICAgY2FzaWxsZXJvLmNhc2lsbGVyb3MuZm9yRWFjaChjPT5vYnRlbmVyRGVzdGlub3NDYXNpbGxlcm9zKGMsZGVzdGlub3MpKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkZXN0aW5vcztcclxufVxyXG5cclxuZnVuY3Rpb24gcmVsbGVuYXJEZXN0aW5vcyhlc3RydWN0dXJhOkVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IsIGRlc3Rpbm9zOlJlZ2lzdHJvRGVzdGlub3MpOkVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3J7XHJcbiAgICBmdW5jdGlvbiBvYnRlbmVyRGVzdGlubyhpZFZhcmlhYmxlUXVlVGllbmVVbkRlc3Rpbm86SWRWYXJpYWJsZXxudWxsfHVuZGVmaW5lZHxJZEZpbik6SWRWYXJpYWJsZXxudWxse1xyXG4gICAgICAgIHJldHVybiBpZFZhcmlhYmxlUXVlVGllbmVVbkRlc3Rpbm89PSdmaW4nIGFzIElkVmFyaWFibGUgPyAnZmluJyBhcyBJZFZhcmlhYmxlIDogaWRWYXJpYWJsZVF1ZVRpZW5lVW5EZXN0aW5vIT1udWxsICYmIGRlc3Rpbm9zW2lkVmFyaWFibGVRdWVUaWVuZVVuRGVzdGlubyBhcyBJZERlc3Rpbm9dIHx8IG51bGxcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uZXN0cnVjdHVyYSxcclxuICAgICAgICB2YXJpYWJsZXM6bGlrZUFyKGVzdHJ1Y3R1cmEudmFyaWFibGVzKS5tYXAodmFyaWFibGVEZWY9Pih7XHJcbiAgICAgICAgICAgIC4uLnZhcmlhYmxlRGVmLFxyXG4gICAgICAgICAgICBzYWx0bzpvYnRlbmVyRGVzdGlubyh2YXJpYWJsZURlZi5zYWx0byksXHJcbiAgICAgICAgICAgIHNhbHRvTnNOcjpvYnRlbmVyRGVzdGlubyh2YXJpYWJsZURlZi5zYWx0b05zTnIpLFxyXG4gICAgICAgICAgICBvcGNpb25lczp2YXJpYWJsZURlZi5vcGNpb25lcyE9bnVsbCA/IGxpa2VBcih2YXJpYWJsZURlZi5vcGNpb25lcykubWFwKG9wY2lvbkRlZj0+KHtzYWx0bzpvYnRlbmVyRGVzdGlubyhvcGNpb25EZWYuc2FsdG8pfSkpLnBsYWluKCk6dW5kZWZpbmVkXHJcbiAgICAgICAgfSkpLnBsYWluKClcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2VuZXJhckVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IoY2FzaWxsZXJvOkNhc2lsbGVyb3NJbXBsZW1lbnRhZG9zLCBpZEZvcm11bGFyaW86IElkRm9ybXVsYXJpbyk6RXN0cnVjdHVyYVJvd1ZhbGlkYXRvcntcclxuICAgIHZhciBlc3RydWN0dXJhSW5jb21wbGV0YTpFc3RydWN0dXJhUm93VmFsaWRhdG9yPXt2YXJpYWJsZXM6e30sIG1hcmNhRmluOidmaW4nfSBhcyB1bmtub3duIGFzIEVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3I7XHJcbiAgICByZWxsZW5hclZhcmlhYmxlc1lPcGNpb25lcyhpZEZvcm11bGFyaW8sIGVzdHJ1Y3R1cmFJbmNvbXBsZXRhLCBjYXNpbGxlcm8sIFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgdmVyIHNpIGN1YWxxdWllciBjb3NhIHB1ZWRlIHRlbmVyIHVuaWRhZF9hbmFsaXNpc1xyXG4gICAgICAgIGNhc2lsbGVyby51bmlkYWRfYW5hbGlzaXNcclxuICAgICk7XHJcbiAgICB2YXIgZGVzdGlub3M9b2J0ZW5lckRlc3Rpbm9zQ2FzaWxsZXJvcyhjYXNpbGxlcm8pO1xyXG4gICAgcmV0dXJuIHJlbGxlbmFyRGVzdGlub3MoZXN0cnVjdHVyYUluY29tcGxldGEsIGRlc3Rpbm9zKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VTcGVjaWFsV29yZHModGV4dDpzdHJpbmcsIG5vbWJyZTpzdHJpbmcsIGFwZWxsaWRvOnN0cmluZywgcmVzdWx0YWRvOnN0cmluZyk6c3RyaW5ne1xyXG4gICAgZnVuY3Rpb24gY2FwaXRhbGl6ZUZpcnN0TGV0dGVyKHRleHQ6c3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRleHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXh0LnNsaWNlKDEpO1xyXG4gICAgfVxyXG4gICAgdmFyIHNpbXBsaWZpY2F0ZWRDaGFyczp7W2s6c3RyaW5nXTpzdHJpbmd9PXtcclxuICAgICAgICBcIiNub21icmVcIjpjYXBpdGFsaXplRmlyc3RMZXR0ZXIobm9tYnJlKSxcclxuICAgICAgICBcIiNhcGVsbGlkb1wiOmNhcGl0YWxpemVGaXJzdExldHRlcihhcGVsbGlkbyksXHJcbiAgICAgICAgXCIjcmVzdWx0YWRvXCI6cmVzdWx0YWRvLFxyXG4gICAgfTtcclxuICAgIHZhciByZSA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMoc2ltcGxpZmljYXRlZENoYXJzKS5qb2luKFwifFwiKSxcImdpXCIpO1xyXG5cclxuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UocmUsIGZ1bmN0aW9uKG1hdGNoZWQpe1xyXG4gICAgICAgIHJldHVybiBzaW1wbGlmaWNhdGVkQ2hhcnNbbWF0Y2hlZC50b0xvd2VyQ2FzZSgpXTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ290b1NpbmNyb25pemFyKCl7XHJcbiAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgYCR7bG9jYXRpb24ub3JpZ2luK2xvY2F0aW9uLnBhdGhuYW1lfS8uLi9tZW51I2k9c2luY3Jvbml6YXJgKTtcclxuICAgIGxvY2F0aW9uLnJlbG9hZCgpOyAgIFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ290b0NhbXBvKCl7XHJcbiAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgYCR7bG9jYXRpb24ub3JpZ2luK2xvY2F0aW9uLnBhdGhuYW1lfS8uLi9jYW1wb2ApO1xyXG4gICAgbG9jYXRpb24ucmVsb2FkKCk7ICAgXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnb3RvQ29uc2lzdGlyKG9wZXJhdGl2bzpJZE9wZXJhdGl2byx0YXJlYTpJZFRhcmVhLCBpZEVuYzpJZEVuYyl7XHJcbiAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgYCR7bG9jYXRpb24ub3JpZ2luK2xvY2F0aW9uLnBhdGhuYW1lfS8uLi9tZW51I3c9Y29uc2lzdGlyX2VuY3Vlc3RhJnVwPXtcIm9wZXJhdGl2b1wiOlwiJHtvcGVyYXRpdm99XCIsXCJ0YXJlYVwiOlwiJHt0YXJlYX1cIixcImVuY3Vlc3RhXCI6JHtpZEVuY319JmF1dG9wcm9jZWQ9dHJ1ZWApO1xyXG4gICAgbG9jYXRpb24ucmVsb2FkKCk7ICAgXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZVZlcnNpb24oKXtcclxuICAgIHJldHVybiBteS5nZXRMb2NhbFZhcignYXBwLWNhY2hlLXZlcnNpb24nKTtcclxufVxyXG5cclxudmFyIHJlZGlyZWN0SWZOb3RMb2dnZWQgPSBmdW5jdGlvbiByZWRpcmVjdElmTm90TG9nZ2VkKGVycjpFcnJvcil7XHJcbiAgICBpZihlcnIubWVzc2FnZSA9PSBteS5tZXNzYWdlcy5ub3RMb2dnZWQpe1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsIGAke2xvY2F0aW9uLm9yaWdpbitsb2NhdGlvbi5wYXRobmFtZX0vLi4vbG9naW4ke2xvY2F0aW9uLmhhc2h9YCk7XHJcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOyAgIFxyXG4gICAgICAgIH0sMTUwMClcclxuICAgICAgICBcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYWVyRXN0cnVjdHVyYShwYXJhbXM6e29wZXJhdGl2bzogc3RyaW5nfSl7XHJcbiAgICB2YXIgZXN0cnVjdHVyYSA9ICBhd2FpdCBteS5hamF4Lm9wZXJhdGl2b19lc3RydWN0dXJhX2NvbXBsZXRhKHBhcmFtcyk7XHJcbiAgICB2YXIgY2FzaWxsZXJvc09yaWdpbmFsZXM6e30gPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zO1xyXG4gICAgLy9UT0RPOiBHRU5FUkFMSVpBUlxyXG4gICAgLy9AdHMtaWdub3JlXHJcbiAgICAvLyBjYXNpbGxlcm9zT3JpZ2luYWxlc1snRjpGMl9wZXJzb25hcyddPWNhc2lsbGVyb3NPcmlnaW5hbGVzWydGOkYyJ10uY2hpbGRzLmZpbmQoY2FzaWxsZXJvPT5jYXNpbGxlcm8uZGF0YS5jYXNpbGxlcm89PSdMUCcpO1xyXG4gICAgdmFyIG1haW5Gb3JtOklkRm9ybXVsYXJpb3x1bmRlZmluZWQ7XHJcbiAgICAvL0B0cy1pZ25vcmVcclxuICAgIHZhciBjYXNpbGxlcm9zVG9kb3NGb3JtdWxhcmlvczp7W2YgaW4gSWRGb3JtdWxhcmlvXTp7Y2FzaWxsZXJvczpGb3JtdWxhcmlvLCBlc3RydWN0dXJhUm93VmFsaWRhdG9yOkVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3J9fT1cclxuICAgICAgICBsaWtlQXIoY2FzaWxsZXJvc09yaWdpbmFsZXMpLm1hcChcclxuICAgICAgICAgICAgKGNhc2lsbGVyb3NKZXJhcnF1aXphZG9zOmFueSwgaWRGb3JtdWxhcmlvKT0+e1xyXG4gICAgICAgICAgICAgICAgdmFyIGNhc2lsbGVyb3NBcGxhbmFkb3M6Q2FzaWxsZXJvc0ltcGxlbWVudGFkb3MgPSBhcGxhbmFyTGFDdXJ2YShjYXNpbGxlcm9zSmVyYXJxdWl6YWRvcyk7XHJcbiAgICAgICAgICAgICAgICBpZihjYXNpbGxlcm9zQXBsYW5hZG9zLnRpcG9jPT0nRicgJiYgY2FzaWxsZXJvc0FwbGFuYWRvcy5mb3JtdWxhcmlvX3ByaW5jaXBhbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgbWFpbkZvcm09aWRGb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNpbGxlcm9zOiBjYXNpbGxlcm9zQXBsYW5hZG9zLFxyXG4gICAgICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3I6IGdlbmVyYXJFc3RydWN0dXJhUm93VmFsaWRhdG9yKGNhc2lsbGVyb3NBcGxhbmFkb3MsIGlkRm9ybXVsYXJpbylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICkucGxhaW4oKTtcclxuICAgIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MgPSBjYXNpbGxlcm9zVG9kb3NGb3JtdWxhcmlvc1xyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkbVRyYWVyRGF0b3NGb3JtdWxhcmlvKG9wdHM6e29wZXJhdGl2bzpJZE9wZXJhdGl2bywgbW9kb0RlbW86Ym9vbGVhbiwgZm9yUGtSYWl6PzpGb3JQa1JhaXp9KXtcclxuICAgIHZhciBnZXRDYXNvU3RhdGU9KCk6Q2Fzb1N0YXRlPT4gbXlPd24uZ2V0TG9jYWxWYXIoTE9DQUxfU1RPUkFHRV9TVEFURV9OQU1FKTtcclxuICAgIHZhciBzZXRDYXNvU3RhdGU9KGNhc29TdGF0ZTpDYXNvU3RhdGUpPT4gbXlPd24uc2V0TG9jYWxWYXIoTE9DQUxfU1RPUkFHRV9TVEFURV9OQU1FLCBjYXNvU3RhdGUpO1xyXG4gICAgXHJcbiAgICB2YXIgbG9hZFN0YXRlID0gYXN5bmMgZnVuY3Rpb24gbG9hZFN0YXRlKCk6UHJvbWlzZTxDYXNvU3RhdGU+e1xyXG4gICAgICAgIHZhciBjYXNvU3RhdGU6Q2Fzb1N0YXRlfG51bGwgPSBnZXRDYXNvU3RhdGUoKTtcclxuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0ge1xyXG4gICAgICAgICAgICBvcGNpb25lczp7XHJcbiAgICAgICAgICAgICAgICBmb3JQazpudWxsLFxyXG4gICAgICAgICAgICAgICAgcGlsYUZvclBrOltdLFxyXG4gICAgICAgICAgICAgICAgbW9kb0Rlc3BsaWVndWU6J3JlbGV2YW1pZW50bycsXHJcbiAgICAgICAgICAgICAgICBtb2RvRGlyZWN0bzpmYWxzZSxcclxuICAgICAgICAgICAgICAgIGNvbkNhbXBvT3BjaW9uZXM6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBzYWx0b0F1dG9tYXRpY286dHJ1ZSwgXHJcbiAgICAgICAgICAgICAgICBiaWVudmVuaWRvOnRydWUsXHJcbiAgICAgICAgICAgICAgICBtb2RvQm9ycmFyUmVzcHVlc3RhOm51bGwsXHJcbiAgICAgICAgICAgIH0gYXMgQ2Fzb1N0YXRlW1wib3BjaW9uZXNcIl0sIC8vIHBvbmVyIGxvcyB2YWxvcmVzIHBvciBkZWZlY3RvIG3DoXMgYWJham9cclxuICAgICAgICAgICAgbW9kbzp7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgZXMgdW4gYm9vbGVhbm8gcGVybyBwb25nbyBhaMOtIGxvcyBkYXRvcyBkZSBkZW1vIVxyXG4gICAgICAgICAgICAgICAgZGVtbzogXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICAgICAgICAgIG15T3duLmNvbmZpZy5jb25maWcuYW1iaWVudGU9PSd0ZXN0JyB8fCBteU93bi5jb25maWcuY29uZmlnLmFtYmllbnRlPT0nZGVtbycsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGFzIENhc29TdGF0ZTtcclxuICAgICAgICBpZihjYXNvU3RhdGUpe1xyXG4gICAgICAgICAgICBpbml0aWFsU3RhdGUgPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5pbml0aWFsU3RhdGUsIFxyXG4gICAgICAgICAgICAgICAgb3BjaW9uZXM6Y2Fzb1N0YXRlLm9wY2lvbmVzLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKG9wdHMuZm9yUGtSYWl6KXtcclxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlLm9wY2lvbmVzLmZvclBrPW9wdHMuZm9yUGtSYWl6O1xyXG4gICAgICAgICAgICBpbml0aWFsU3RhdGUub3BjaW9uZXMubW9kb0RpcmVjdG89ISFvcHRzLmZvclBrUmFpejtcclxuICAgICAgICAgICAgaW5pdGlhbFN0YXRlLm9wY2lvbmVzLnBpbGFGb3JQaz1bXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGFkZHJQYXJhbXM9bXlPd24uVXJpU2VhcmNoVG9PYmplY3QobG9jYXRpb24uaGFzaHx8bG9jYXRpb24uc2VhcmNofHwnJyk7XHJcbiAgICAgICAgaWYoYWRkclBhcmFtcy5zdGF0ZV9mb3JQayl7XHJcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5vcGNpb25lcy5mb3JQaz1KU09OLnBhcnNlKGFkZHJQYXJhbXMuc3RhdGVfZm9yUGspO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihhZGRyUGFyYW1zLnN0YXRlX3BpbGFGb3JQayl7XHJcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5vcGNpb25lcy5waWxhRm9yUGs9YWRkclBhcmFtcy5zdGF0ZV9waWxhRm9yUGsuc3BsaXQoJ3wnKS5tYXAoaj0+SlNPTi5wYXJzZShqKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbml0aWFsU3RhdGU7XHJcbiAgICB9XHJcbiAgICB2YXIgc2F2ZVN0YXRlID0gZnVuY3Rpb24gc2F2ZVN0YXRlKHN0YXRlOkNhc29TdGF0ZSl7XHJcbiAgICAgICAgc2V0Q2Fzb1N0YXRlKHN0YXRlKTtcclxuICAgIH1cclxuICAgIC8qIERFRklOSUNJT04gQ09OVFJPTEFET1IgKi9cclxuICAgIHZhciBpbml0aWFsU3RhdGU6Q2Fzb1N0YXRlID0gYXdhaXQgbG9hZFN0YXRlKCk7XHJcbiAgICBjb25zdCBoZHJSZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihyZWR1Y2VycywgaW5pdGlhbFN0YXRlKTtcclxuICAgIC8qIEZJTiBERUZJTklDSU9OIENPTlRST0xBRE9SICovXHJcbiAgICAvKiBDQVJHQSBZIEdVQVJEQURPIERFIFNUQVRFICovXHJcbiAgICAvKiBDUkVBQ0lPTiBTVE9SRSAqL1xyXG4gICAgY29uc3Qgc3RvcmUgPSBjcmVhdGVTdG9yZShoZHJSZWR1Y2VyLCBpbml0aWFsU3RhdGUpOyBcclxuICAgIHNhdmVTdGF0ZShzdG9yZS5nZXRTdGF0ZSgpKTtcclxuICAgIHN0b3JlLnN1YnNjcmliZShmdW5jdGlvbigpe1xyXG4gICAgICAgICBzYXZlU3RhdGUoc3RvcmUuZ2V0U3RhdGUoKSk7XHJcbiAgICB9KTtcclxuICAgIC8qIEZJTiBDUkVBQ0lPTiBTVE9SRSAqL1xyXG4gICAgLy9IRFIgQ09OIFNUT1JFIENSRUFET1xyXG4gICAgcmV0dXJuIHN0b3JlO1xyXG59Il19
|