dmencu 3.2.20 → 3.2.21

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.
Files changed (34) hide show
  1. package/dist/client/unlogged/calculos-encuesta.d.ts +7 -0
  2. package/dist/client/unlogged/calculos-encuesta.js +139 -0
  3. package/dist/client/unlogged/helpers-casilleros.d.ts +14 -0
  4. package/dist/client/unlogged/helpers-casilleros.js +129 -0
  5. package/dist/server/server/procedures-dmencu.js +141 -28
  6. package/dist/server/server/table-rea.js +9 -5
  7. package/dist/server/server/table-rea_sup.js +8 -4
  8. package/dist/test/test-ejemplo.d.ts +1 -0
  9. package/dist/test/test-ejemplo.js +29 -0
  10. package/dist/test/test-rea-no-rea.d.ts +1 -0
  11. package/dist/test/test-rea-no-rea.js +589 -0
  12. package/dist/test/test.d.ts +2 -0
  13. package/dist/test/test.js +15 -0
  14. package/dist/unlogged/bypass-formulario.d.ts +198 -0
  15. package/dist/unlogged/bypass-formulario.js +1226 -0
  16. package/dist/unlogged/calculos-encuesta.d.ts +7 -0
  17. package/dist/unlogged/calculos-encuesta.js +213 -0
  18. package/dist/unlogged/helpers-casilleros.d.ts +14 -0
  19. package/dist/unlogged/helpers-casilleros.js +129 -0
  20. package/dist/unlogged/redux-formulario.d.ts +440 -0
  21. package/dist/unlogged/redux-formulario.js +324 -0
  22. package/dist/unlogged/render-config.d.ts +52 -0
  23. package/dist/unlogged/render-config.js +161 -0
  24. package/dist/unlogged/tipos.d.ts +575 -0
  25. package/dist/unlogged/tipos.js +21 -0
  26. package/dist/unlogged/unlogged/bypass-formulario copy.d.ts +198 -0
  27. package/dist/unlogged/unlogged/bypass-formulario copy.js +1226 -0
  28. package/dist/unlogged/unlogged/calculos-encuesta.d.ts +7 -0
  29. package/dist/unlogged/unlogged/calculos-encuesta.js +213 -0
  30. package/dist/unlogged/unlogged/helpers-casilleros.d.ts +14 -0
  31. package/dist/unlogged/unlogged/helpers-casilleros.js +130 -0
  32. package/dist/unlogged/unlogged/helpers.d.ts +14 -0
  33. package/dist/unlogged/unlogged/helpers.js +129 -0
  34. package/package.json +1 -1
@@ -0,0 +1,7 @@
1
+ import { MapeoTipoItem, Respuestas, TipoCondicion, UnidadAnalisis } from "./tipos";
2
+ export type EvaluadorExpresion = (condicionJs: string, respuestas: Respuestas) => boolean;
3
+ export type ResultadoBusqueda = {
4
+ codigo: number | null;
5
+ resultado: boolean;
6
+ };
7
+ export declare function buscarReaNoReaEnRespuestas<T extends TipoCondicion>(unidadAnalisis: UnidadAnalisis, respuestas: Respuestas, lista: MapeoTipoItem[T][], tipo: T, tarea: string, evaluarExpresion?: EvaluadorExpresion): ResultadoBusqueda;
@@ -0,0 +1,139 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports", "like-ar"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.buscarReaNoReaEnRespuestas = buscarReaNoReaEnRespuestas;
13
+ const likeAr = require("like-ar");
14
+ const estrategiasCondicion = {
15
+ 'rea': {
16
+ getCondicion: (item) => item.condicion_js,
17
+ getVariable: () => null,
18
+ getValor: () => null,
19
+ getCodigo: (item) => item.rea,
20
+ getResultado: (item) => item.es_positiva,
21
+ getTarea: (item) => { var _a; return (_a = item.tarea) !== null && _a !== void 0 ? _a : null; },
22
+ },
23
+ 'no_rea': {
24
+ getCondicion: () => null,
25
+ getVariable: (item) => item.variable,
26
+ getValor: (item) => item.valor,
27
+ getCodigo: (item) => item.no_rea,
28
+ getResultado: () => true,
29
+ getTarea: (_item) => null,
30
+ },
31
+ 'rea_sup': {
32
+ getCondicion: (item) => item.condicion_js,
33
+ getVariable: () => null,
34
+ getValor: () => null,
35
+ getCodigo: (item) => item.rea_sup,
36
+ getResultado: (item) => item.es_positiva,
37
+ getTarea: (item) => { var _a; return (_a = item.tarea) !== null && _a !== void 0 ? _a : null; },
38
+ },
39
+ 'no_rea_sup': {
40
+ getCondicion: () => null,
41
+ getVariable: (item) => item.variable_sup,
42
+ getValor: (item) => item.valor_sup,
43
+ getCodigo: (item) => item.no_rea_sup,
44
+ getResultado: () => true,
45
+ getTarea: (_item) => null,
46
+ }
47
+ };
48
+ function itemCumpleCondicion(item, respuestas, estrategia, evaluarExpresion) {
49
+ const condicion = estrategia.getCondicion(item);
50
+ if (condicion !== null) {
51
+ if (!evaluarExpresion) {
52
+ throw new Error('Se requiere evaluarExpresion para evaluar una condicion JS');
53
+ }
54
+ return evaluarExpresion(condicion, respuestas);
55
+ }
56
+ const variable = estrategia.getVariable(item);
57
+ const valor = estrategia.getValor(item);
58
+ return !!variable && variable in respuestas && respuestas[variable] == valor;
59
+ }
60
+ /**
61
+ * Recorre la estructura completa desde la raíz y extrae el contexto combinado de
62
+ * TODAS las instancias de la UA 'targetUaNombre' (hermanas, primas, etc.).
63
+ */
64
+ function obtenerTodasLasInstanciasDeUa(unidadAnalisis, respuestas, targetUaNombre, contextoAcumulado = {}) {
65
+ const resultados = [];
66
+ const respuestasPlanas = {};
67
+ for (const [key, value] of Object.keys(respuestas)) {
68
+ if (!Array.isArray(value)) {
69
+ respuestasPlanas[key] = value;
70
+ }
71
+ }
72
+ const contextoActual = Object.assign(Object.assign({}, contextoAcumulado), respuestasPlanas);
73
+ if ((unidadAnalisis === null || unidadAnalisis === void 0 ? void 0 : unidadAnalisis.unidad_analisis) === targetUaNombre) {
74
+ return [contextoActual];
75
+ }
76
+ const hijas = likeAr(unidadAnalisis === null || unidadAnalisis === void 0 ? void 0 : unidadAnalisis.hijas).array();
77
+ for (const uaHija of hijas) {
78
+ const nombreUaHija = uaHija === null || uaHija === void 0 ? void 0 : uaHija.unidad_analisis;
79
+ if (nombreUaHija && Array.isArray(respuestas[nombreUaHija])) {
80
+ for (const respuestasHija of respuestas[nombreUaHija]) {
81
+ const res = obtenerTodasLasInstanciasDeUa(uaHija, respuestasHija, targetUaNombre, contextoActual);
82
+ resultados.push(...res);
83
+ }
84
+ }
85
+ }
86
+ return resultados;
87
+ }
88
+ function buscarRecursivo(uaRaiz, respuestasRaiz, unidadAnalisisActual, respuestasActuales, listaOrdenada, tipo, tarea, evaluarExpresion) {
89
+ const estrategia = estrategiasCondicion[tipo];
90
+ for (const item of listaOrdenada) {
91
+ const itemTarea = estrategia.getTarea(item);
92
+ if (itemTarea && itemTarea !== tarea) {
93
+ continue;
94
+ }
95
+ if (itemCumpleCondicion(item, respuestasActuales, estrategia, evaluarExpresion)) {
96
+ const resultado = estrategia.getResultado(item);
97
+ const esReaPositiva = (tipo === 'rea' || tipo === 'rea_sup') && resultado === true;
98
+ if (esReaPositiva) {
99
+ const nombreUaActual = unidadAnalisisActual === null || unidadAnalisisActual === void 0 ? void 0 : unidadAnalisisActual.unidad_analisis;
100
+ if (nombreUaActual) {
101
+ // Obtener todas las personas/hogares de la encuesta (hermanas + primas)
102
+ const todasLasInstancias = obtenerTodasLasInstanciasDeUa(uaRaiz, respuestasRaiz, nombreUaActual);
103
+ if (todasLasInstancias.length > 1) {
104
+ const todasCumplen = todasLasInstancias.every((instanciaContexto) => itemCumpleCondicion(item, instanciaContexto, estrategia, evaluarExpresion));
105
+ if (!todasCumplen) {
106
+ continue; // Si alguna hermana o prima no cumple, se descarta este item
107
+ }
108
+ }
109
+ }
110
+ }
111
+ return {
112
+ codigo: estrategia.getCodigo(item),
113
+ resultado,
114
+ };
115
+ }
116
+ }
117
+ const hijas = likeAr(unidadAnalisisActual === null || unidadAnalisisActual === void 0 ? void 0 : unidadAnalisisActual.hijas).array();
118
+ for (const uaHija of hijas) {
119
+ const nombreUaHija = uaHija === null || uaHija === void 0 ? void 0 : uaHija.unidad_analisis;
120
+ if (nombreUaHija && Array.isArray(respuestasActuales[nombreUaHija])) {
121
+ for (const respuestasHija of respuestasActuales[nombreUaHija]) {
122
+ const res = buscarRecursivo(uaRaiz, respuestasRaiz, uaHija, Object.assign(Object.assign({}, respuestasActuales), respuestasHija), listaOrdenada, tipo, tarea, evaluarExpresion);
123
+ if (res.codigo !== null) {
124
+ return res;
125
+ }
126
+ }
127
+ }
128
+ }
129
+ return { codigo: null, resultado: false };
130
+ }
131
+ function buscarReaNoReaEnRespuestas(unidadAnalisis, respuestas, lista, tipo, tarea, evaluarExpresion) {
132
+ if (!estrategiasCondicion[tipo]) {
133
+ throw new Error(`Tipo de condición desconocido: ${tipo}`);
134
+ }
135
+ const listaOrdenada = [...lista].sort((a, b) => { var _a, _b; return ((_a = a.orden) !== null && _a !== void 0 ? _a : 0) - ((_b = b.orden) !== null && _b !== void 0 ? _b : 0); });
136
+ return buscarRecursivo(unidadAnalisis, respuestas, unidadAnalisis, respuestas, listaOrdenada, tipo, tarea, evaluarExpresion);
137
+ }
138
+ });
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3Vsb3MtZW5jdWVzdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvY2FsY3Vsb3MtZW5jdWVzdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFnTUEsZ0VBd0JDO0lBeE5ELGtDQUFtQztJQUtuQyxNQUFNLG9CQUFvQixHQVN0QjtRQUNBLEtBQUssRUFBRTtZQUNILFlBQVksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUUsSUFBWSxDQUFDLFlBQVk7WUFDbEQsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDdkIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDcEIsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBRSxJQUFZLENBQUMsR0FBRztZQUN0QyxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQVksQ0FBQyxXQUFXO1lBQ2pELFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLFdBQUMsT0FBQSxNQUFDLElBQVksQ0FBQyxLQUFLLG1DQUFJLElBQUksQ0FBQSxFQUFBO1NBQ2xEO1FBQ0QsUUFBUSxFQUFFO1lBQ04sWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDeEIsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBRSxJQUFjLENBQUMsUUFBUTtZQUMvQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFFLElBQWMsQ0FBQyxLQUFLO1lBQ3pDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUUsSUFBYyxDQUFDLE1BQU07WUFDM0MsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDeEIsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJO1NBQzVCO1FBQ0QsU0FBUyxFQUFFO1lBQ1AsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLEVB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Y2VzQ29udGVudCI6WyJpbXBvcnQgbGlrZUFyID0gcmVxdWlyZShcImxpa2UtYXJcIik7XG5pbXBvcnQgeyBJZFZhcmlhYmxlLCBNYXBlb1RpcG9JdGVtLCBOb1JlYSwgTm9SZWFTdXAsIFJlYSwgUmVhU3VwLCBSZXNwdWVzdGFzLCBUaXBvQ29uZGljaW9uLCBVbmlkYWRBbmFsaXNpcyB9IGZyb20gXCIuL3RpcG9zXCI7XG5cbmV4cG9ydCB0eXBlIEV2YWx1YWRvckV4cHJlc2lvbiA9IChjb25kaWNpb25Kczogc3RyaW5nLCByZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiBib29sZWFuO1xuXG5jb25zdCBlc3RyYXRlZ2lhc0NvbmRpY2lvbjoge1xuICAgIFtLIGluIFRpcG9Db25kaWNpb25dOiB7XG4gICAgICAgIGdldENvbmRpY2lvbjogKGl0ZW06IE1hcGVvVGlwb0l0ZW1bS10pID0+IHN0cmluZyB8IG51bGw7XG4gICAgICAgIGdldFZhcmlhYmxlOiAoaXRlbTogTWFwZW9UaXBvSXRlbVtLXSkgPT4gc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgZ2V0VmFsb3I6IChpdGVtOiBNYXBlb1RpcG9JdGVtW0tdKSA9PiBzdHJpbmcgfCBudWxsO1xuICAgICAgICBnZXRDb2RpZ286IChpdGVtOiBNYXBlb1RpcG9JdGVtW0tdKSA9PiBudW1iZXI7XG4gICAgICAgIGdldFJlc3VsdGFkbzogKGl0ZW06IE1hcGVvVGlwb0l0ZW1bS10pID0+IGJvb2xlYW47XG4gICAgICAgIGdldFRhcmVhOiAoaXRlbTogTWFwZW9UaXBvSXRlbVtLXSkgPT4gc3RyaW5nIHwgbnVsbDtcbiAgICB9XG59ID0ge1xuICAgICdyZWEnOiB7XG4gICAgICAgIGdldENvbmRpY2lvbjogKGl0ZW0pID0+IChpdGVtIGFzIFJlYSkuY29uZGljaW9uX2pzLFxuICAgICAgICBnZXRWYXJpYWJsZTogKCkgPT4gbnVsbCxcbiAgICAgICAgZ2V0VmFsb3I6ICgpID0+IG51bGwsXG4gICAgICAgIGdldENvZGlnbzogKGl0ZW0pID0+IChpdGVtIGFzIFJlYSkucmVhLFxuICAgICAgICBnZXRSZXN1bHRhZG86IChpdGVtKSA9PiAoaXRlbSBhcyBSZWEpLmVzX3Bvc2l0aXZhLFxuICAgICAgICBnZXRUYXJlYTogKGl0ZW0pID0+IChpdGVtIGFzIFJlYSkudGFyZWEgPz8gbnVsbCxcbiAgICB9LFxuICAgICdub19yZWEnOiB7XG4gICAgICAgIGdldENvbmRpY2lvbjogKCkgPT4gbnVsbCxcbiAgICAgICAgZ2V0VmFyaWFibGU6IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYSkudmFyaWFibGUsXG4gICAgICAgIGdldFZhbG9yOiAoaXRlbSkgPT4gKGl0ZW0gYXMgTm9SZWEpLnZhbG9yLFxuICAgICAgICBnZXRDb2RpZ286IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYSkubm9fcmVhLFxuICAgICAgICBnZXRSZXN1bHRhZG86ICgpID0+IHRydWUsXG4gICAgICAgIGdldFRhcmVhOiAoX2l0ZW0pID0+IG51bGwsXG4gICAgfSxcbiAgICAncmVhX3N1cCc6IHtcbiAgICAgICAgZ2V0Q29uZGljaW9uOiAoaXRlbSkgPT4gKGl0ZW0gYXMgUmVhU3VwKS5jb25kaWNpb25fanMsXG4gICAgICAgIGdldFZhcmlhYmxlOiAoKSA9PiBudWxsLFxuICAgICAgICBnZXRWYWxvcjogKCkgPT4gbnVsbCxcbiAgICAgICAgZ2V0Q29kaWdvOiAoaXRlbSkgPT4gKGl0ZW0gYXMgUmVhU3VwKS5yZWFfc3VwLFxuICAgICAgICBnZXRSZXN1bHRhZG86IChpdGVtKSA9PiAoaXRlbSBhcyBSZWFTdXApLmVzX3Bvc2l0aXZhLFxuICAgICAgICBnZXRUYXJlYTogKGl0ZW0pID0+IChpdGVtIGFzIFJlYVN1cCkudGFyZWEgPz8gbnVsbCxcbiAgICB9LFxuICAgICdub19yZWFfc3VwJzoge1xuICAgICAgICBnZXRDb25kaWNpb246ICgpID0+IG51bGwsXG4gICAgICAgIGdldFZhcmlhYmxlOiAoaXRlbSkgPT4gKGl0ZW0gYXMgTm9SZWFTdXApLnZhcmlhYmxlX3N1cCxcbiAgICAgICAgZ2V0VmFsb3I6IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYVN1cCkudmFsb3Jfc3VwLFxuICAgICAgICBnZXRDb2RpZ286IChpdGVtKSA9PiAoaXRlbSBhcyBOb1JlYVN1cCkubm9fcmVhX3N1cCxcbiAgICAgICAgZ2V0UmVzdWx0YWRvOiAoKSA9PiB0cnVlLFxuICAgICAgICBnZXRUYXJlYTogKF9pdGVtKSA9PiBudWxsLFxuICAgIH1cbn07XG5cbmV4cG9ydCB0eXBlIFJlc3VsdGFkb0J1c3F1ZWRhID0ge1xuICAgIGNvZGlnbzogbnVtYmVyIHwgbnVsbDtcbiAgICByZXN1bHRhZG86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBpdGVtQ3VtcGxlQ29uZGljaW9uPFQgZXh0ZW5kcyBUaXBvQ29uZGljaW9uPihcbiAgICBpdGVtOiBNYXBlb1RpcG9JdGVtW1RdLFxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsXG4gICAgZXN0cmF0ZWdpYTogdHlwZW9mIGVzdHJhdGVnaWFzQ29uZGljaW9uW1RdLFxuICAgIGV2YWx1YXJFeHByZXNpb246IEV2YWx1YWRvckV4cHJlc2lvbiB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29uZGljaW9uID0gZXN0cmF0ZWdpYS5nZXRDb25kaWNpb24oaXRlbSk7XG4gICAgaWYgKGNvbmRpY2lvbiAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoIWV2YWx1YXJFeHByZXNpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU2UgcmVxdWllcmUgZXZhbHVhckV4cHJlc2lvbiBwYXJhIGV2YWx1YXIgdW5hIGNvbmRpY2lvbiBKUycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmFsdWFyRXhwcmVzaW9uKGNvbmRpY2lvbiwgcmVzcHVlc3Rhcyk7XG4gICAgfVxuICAgIGNvbnN0IHZhcmlhYmxlID0gZXN0cmF0ZWdpYS5nZXRWYXJpYWJsZShpdGVtKTtcbiAgICBjb25zdCB2YWxvciA9IGVzdHJhdGVnaWEuZ2V0VmFsb3IoaXRlbSk7XG4gICAgcmV0dXJuICEhdmFyaWFibGUgJiYgdmFyaWFibGUgaW4gcmVzcHVlc3RhcyAmJiByZXNwdWVzdGFzW3ZhcmlhYmxlIGFzIElkVmFyaWFibGVdID09IHZhbG9yO1xufVxuXG4vKipcbiAqIFJlY29ycmUgbGEgZXN0cnVjdHVyYSBjb21wbGV0YSBkZXNkZSBsYSByYcOteiB5IGV4dHJhZSBlbCBjb250ZXh0byBjb21iaW5hZG8gZGVcbiAqIFRPREFTIGxhcyBpbnN0YW5jaWFzIGRlIGxhIFVBICd0YXJnZXRVYU5vbWJyZScgKGhlcm1hbmFzLCBwcmltYXMsIGV0Yy4pLlxuICovXG5mdW5jdGlvbiBvYnRlbmVyVG9kYXNMYXNJbnN0YW5jaWFzRGVVYShcbiAgICB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMsXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcbiAgICB0YXJnZXRVYU5vbWJyZTogc3RyaW5nLFxuICAgIGNvbnRleHRvQWN1bXVsYWRvID0ge30gYXMgUmVzcHVlc3Rhc1xuKTogUmVzcHVlc3Rhc1tdIHtcbiAgICBjb25zdCByZXN1bHRhZG9zOiBSZXNwdWVzdGFzW10gPSBbXTtcblxuICAgIGNvbnN0IHJlc3B1ZXN0YXNQbGFuYXMgPSB7fSBhcyBSZXNwdWVzdGFzO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5rZXlzKHJlc3B1ZXN0YXMpKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNQbGFuYXNba2V5IGFzIElkVmFyaWFibGVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29udGV4dG9BY3R1YWwgPSB7IC4uLmNvbnRleHRvQWN1bXVsYWRvLCAuLi5yZXNwdWVzdGFzUGxhbmFzIH07XG5cbiAgICBpZiAodW5pZGFkQW5hbGlzaXM/LnVuaWRhZF9hbmFsaXNpcyA9PT0gdGFyZ2V0VWFOb21icmUpIHtcbiAgICAgICAgcmV0dXJuIFtjb250ZXh0b0FjdHVhbF07XG4gICAgfVxuXG4gICAgY29uc3QgaGlqYXMgPSBsaWtlQXIodW5pZGFkQW5hbGlzaXM/LmhpamFzKS5hcnJheSgpO1xuICAgIGZvciAoY29uc3QgdWFIaWphIG9mIGhpamFzKSB7XG4gICAgICAgIGNvbnN0IG5vbWJyZVVhSGlqYSA9IHVhSGlqYT8udW5pZGFkX2FuYWxpc2lzO1xuICAgICAgICBpZiAobm9tYnJlVWFIaWphICYmIEFycmF5LmlzQXJyYXkocmVzcHVlc3Rhc1tub21icmVVYUhpamFdKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXNwdWVzdGFzSGlqYSBvZiByZXNwdWVzdGFzW25vbWJyZVVhSGlqYV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBvYnRlbmVyVG9kYXNMYXNJbnN0YW5jaWFzRGVVYShcbiAgICAgICAgICAgICAgICAgICAgdWFIaWphLFxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzSGlqYSxcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VWFOb21icmUsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHRvQWN0dWFsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXN1bHRhZG9zLnB1c2goLi4ucmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRhZG9zO1xufVxuXG5mdW5jdGlvbiBidXNjYXJSZWN1cnNpdm88VCBleHRlbmRzIFRpcG9Db25kaWNpb24+KFxuICAgIHVhUmFpejogVW5pZGFkQW5hbGlzaXMsXG4gICAgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXMsXG4gICAgdW5pZGFkQW5hbGlzaXNBY3R1YWw6IFVuaWRhZEFuYWxpc2lzLFxuICAgIHJlc3B1ZXN0YXNBY3R1YWxlczogUmVzcHVlc3RhcyxcbiAgICBsaXN0YU9yZGVuYWRhOiBNYXBlb1RpcG9JdGVtW1RdW10sXG4gICAgdGlwbzogVCxcbiAgICB0YXJlYTogc3RyaW5nLFxuICAgIGV2YWx1YXJFeHByZXNpb246IEV2YWx1YWRvckV4cHJlc2lvbiB8IHVuZGVmaW5lZFxuKTogUmVzdWx0YWRvQnVzcXVlZGEge1xuXG4gICAgY29uc3QgZXN0cmF0ZWdpYSA9IGVzdHJhdGVnaWFzQ29uZGljaW9uW3RpcG9dO1xuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3RhT3JkZW5hZGEpIHtcbiAgICAgICAgY29uc3QgaXRlbVRhcmVhID0gZXN0cmF0ZWdpYS5nZXRUYXJlYShpdGVtKTtcbiAgICAgICAgaWYgKGl0ZW1UYXJlYSAmJiBpdGVtVGFyZWEgIT09IHRhcmVhKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtQ3VtcGxlQ29uZGljaW9uKGl0ZW0sIHJlc3B1ZXN0YXNBY3R1YWxlcywgZXN0cmF0ZWdpYSwgZXZhbHVhckV4cHJlc2lvbikpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdGFkbyA9IGVzdHJhdGVnaWEuZ2V0UmVzdWx0YWRvKGl0ZW0pO1xuICAgICAgICAgICAgY29uc3QgZXNSZWFQb3NpdGl2YSA9ICh0aXBvID09PSAncmVhJyB8fCB0aXBvID09PSAncmVhX3N1cCcpICYmIHJlc3VsdGFkbyA9PT0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKGVzUmVhUG9zaXRpdmEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub21icmVVYUFjdHVhbCA9IHVuaWRhZEFuYWxpc2lzQWN0dWFsPy51bmlkYWRfYW5hbGlzaXM7XG4gICAgICAgICAgICAgICAgaWYgKG5vbWJyZVVhQWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE9idGVuZXIgdG9kYXMgbGFzIHBlcnNvbmFzL2hvZ2FyZXMgZGUgbGEgZW5jdWVzdGEgKGhlcm1hbmFzICsgcHJpbWFzKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b2Rhc0xhc0luc3RhbmNpYXMgPSBvYnRlbmVyVG9kYXNMYXNJbnN0YW5jaWFzRGVVYShcbiAgICAgICAgICAgICAgICAgICAgICAgIHVhUmFpeixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9tYnJlVWFBY3R1YWxcbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodG9kYXNMYXNJbnN0YW5jaWFzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvZGFzQ3VtcGxlbiA9IHRvZGFzTGFzSW5zdGFuY2lhcy5ldmVyeSgoaW5zdGFuY2lhQ29udGV4dG8pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUN1bXBsZUNvbmRpY2lvbihpdGVtLCBpbnN0YW5jaWFDb250ZXh0bywgZXN0cmF0ZWdpYSwgZXZhbHVhckV4cHJlc2lvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdG9kYXNDdW1wbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IC8vIFNpIGFsZ3VuYSBoZXJtYW5hIG8gcHJpbWEgbm8gY3VtcGxlLCBzZSBkZXNjYXJ0YSBlc3RlIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjb2RpZ286IGVzdHJhdGVnaWEuZ2V0Q29kaWdvKGl0ZW0pLFxuICAgICAgICAgICAgICAgIHJlc3VsdGFkbyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBoaWphcyA9IGxpa2VBcih1bmlkYWRBbmFsaXNpc0FjdHVhbD8uaGlqYXMpLmFycmF5KCk7XG4gICAgZm9yIChjb25zdCB1YUhpamEgb2YgaGlqYXMpIHtcbiAgICAgICAgY29uc3Qgbm9tYnJlVWFIaWphID0gdWFIaWphPy51bmlkYWRfYW5hbGlzaXM7XG4gICAgICAgIGlmIChub21icmVVYUhpamEgJiYgQXJyYXkuaXNBcnJheShyZXNwdWVzdGFzQWN0dWFsZXNbbm9tYnJlVWFIaWphXSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVzcHVlc3Rhc0hpamEgb2YgcmVzcHVlc3Rhc0FjdHVhbGVzW25vbWJyZVVhSGlqYV0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBidXNjYXJSZWN1cnNpdm8oXG4gICAgICAgICAgICAgICAgICAgIHVhUmFpeixcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXG4gICAgICAgICAgICAgICAgICAgIHVhSGlqYSxcbiAgICAgICAgICAgICAgICAgICAgeyAuLi5yZXNwdWVzdGFzQWN0dWFsZXMsIC4uLnJlc3B1ZXN0YXNIaWphIH0sXG4gICAgICAgICAgICAgICAgICAgIGxpc3RhT3JkZW5hZGEsXG4gICAgICAgICAgICAgICAgICAgIHRpcG8sXG4gICAgICAgICAgICAgICAgICAgIHRhcmVhLFxuICAgICAgICAgICAgICAgICAgICBldmFsdWFyRXhwcmVzaW9uXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzLmNvZGlnbyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGNvZGlnbzogbnVsbCwgcmVzdWx0YWRvOiBmYWxzZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVzY2FyUmVhTm9SZWFFblJlc3B1ZXN0YXM8VCBleHRlbmRzIFRpcG9Db25kaWNpb24+KFxuICAgIHVuaWRhZEFuYWxpc2lzOiBVbmlkYWRBbmFsaXNpcyxcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLFxuICAgIGxpc3RhOiBNYXBlb1RpcG9JdGVtW1RdW10sXG4gICAgdGlwbzogVCxcbiAgICB0YXJlYTogc3RyaW5nLFxuICAgIGV2YWx1YXJFeHByZXNpb24/OiBFdmFsdWFkb3JFeHByZXNpb25cbik6IFJlc3VsdGFkb0J1c3F1ZWRhIHtcblxuICAgIGlmICghZXN0cmF0ZWdpYXNDb25kaWNpb25bdGlwb10pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaXBvIGRlIGNvbmRpY2nDs24gZGVzY29ub2NpZG86ICR7dGlwb31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBsaXN0YU9yZGVuYWRhID0gWy4uLmxpc3RhXS5zb3J0KChhLCBiKSA9PiAoYS5vcmRlbiA/PyAwKSAtIChiLm9yZGVuID8/IDApKTtcbiAgICByZXR1cm4gYnVzY2FyUmVjdXJzaXZvKFxuICAgICAgICB1bmlkYWRBbmFsaXNpcyxcbiAgICAgICAgcmVzcHVlc3RhcyxcbiAgICAgICAgdW5pZGFkQW5hbGlzaXMsXG4gICAgICAgIHJlc3B1ZXN0YXMsXG4gICAgICAgIGxpc3RhT3JkZW5hZGEsXG4gICAgICAgIHRpcG8sXG4gICAgICAgIHRhcmVhLFxuICAgICAgICBldmFsdWFyRXhwcmVzaW9uXG4gICAgKTtcbn0iXX0=
@@ -0,0 +1,14 @@
1
+ export declare const helpersCasilleros: {
2
+ null2zero(posibleNull: any): any;
3
+ div0err(numerador: number, denominador: number, pk: string): number;
4
+ funs: {
5
+ blanco(x: any): boolean;
6
+ hoy(): any;
7
+ fecha_valida(x: string): boolean;
8
+ mesanio_valido(x: string): boolean;
9
+ informado(x: any): boolean;
10
+ nsnc(x: any): boolean;
11
+ par(x: number): boolean;
12
+ edad_mes_annio_valido(edad: number, mesAnnio: string, fechaRealizacionDDMMYYYY: string): boolean;
13
+ };
14
+ };
@@ -0,0 +1,129 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define(["require", "exports"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.helpersCasilleros = void 0;
13
+ exports.helpersCasilleros = {
14
+ null2zero(posibleNull) {
15
+ if (posibleNull == null) {
16
+ return 0;
17
+ }
18
+ return posibleNull;
19
+ },
20
+ div0err(numerador, denominador, pk) {
21
+ if (denominador == 0) {
22
+ throw new Error("Error en " + pk + " division por cero de " + numerador);
23
+ }
24
+ return numerador / denominador;
25
+ },
26
+ funs: {
27
+ blanco(x) {
28
+ return x !== 0 && !x;
29
+ },
30
+ hoy() {
31
+ return date.today().toDmy();
32
+ },
33
+ fecha_valida(x) {
34
+ var formato_valido = /^([1-9]|0[1-9]|[12]\d|3[01])\/([1-9]|0[1-9]|1[012])\/20\d\d$/.test(x);
35
+ var xDate;
36
+ var conversionOk;
37
+ conversionOk = true;
38
+ if (formato_valido) {
39
+ const [d, m, y] = x.split('/');
40
+ try {
41
+ xDate = new Date(`${y}/${m}/${d}`);
42
+ }
43
+ catch (err) {
44
+ conversionOk = false;
45
+ }
46
+ }
47
+ ;
48
+ //faltaria validar que no sea una fecha futura y que sea una fecha en el rango del operativo
49
+ return formato_valido && conversionOk;
50
+ },
51
+ mesanio_valido(x) {
52
+ var formato_valido = /^([1-9]|0[1-9]|1[012])\/(19|20)\d\d$/.test(x);
53
+ return formato_valido;
54
+ },
55
+ informado(x) {
56
+ return x !== undefined && x !== null && (!(x instanceof Array) || x.length !== 0)
57
+ && (!(x instanceof Object) || Object.keys(x).length !== 0);
58
+ },
59
+ nsnc(x) {
60
+ return x == -9;
61
+ },
62
+ par(x) {
63
+ return x % 2 == 0;
64
+ },
65
+ edad_mes_annio_valido(edad, mesAnnio, fechaRealizacionDDMMYYYY) {
66
+ var mesesDiferencia = (d1, d2) => {
67
+ var months;
68
+ months = (d2.getFullYear() - d1.getFullYear()) * 12;
69
+ months -= d1.getMonth();
70
+ months += d2.getMonth();
71
+ return months <= 0 ? 0 : months;
72
+ };
73
+ var partesRealizacion = fechaRealizacionDDMMYYYY.split("/");
74
+ //@ts-ignore las partes corresponden a una fecha válida
75
+ var today = date.ymd(Number(partesRealizacion[2]), Number(partesRealizacion[1]), Number(partesRealizacion[0]));
76
+ var partesMesAnnio = mesAnnio.split('/');
77
+ //@ts-ignore las partes corresponden a una fecha válida
78
+ var nacimiento = date.ymd(Number(partesMesAnnio[1]), Number(partesMesAnnio[0]), 1);
79
+ //@ts-ignore RealDate es Date y se puede restar
80
+ var diferenciaMeses = mesesDiferencia(nacimiento, today);
81
+ var edadDecimales = diferenciaMeses / 12; //ej 36.5
82
+ return (Math.floor(edadDecimales) == edad || //misma edad
83
+ edadDecimales == edad + 1 //mes de tolerancia
84
+ );
85
+ },
86
+ //copiar_campo_ua_rama(respuestasOrigen:Respuestas[], posicion:number, variableOrigen: IdVariable, camino:string, condicion:boolean){
87
+ // return condicion?(respuestasOrigen && respuestasOrigen[posicion-1] && respuestasOrigen[posicion-1][`${camino}`][variableOrigen]):null
88
+ // return condicion?eval(`respuestasOrigen[${posicion-1}].`+camino+'.'+variableOrigen):null;
89
+ //}
90
+ /*
91
+ dbo:{
92
+ datoFamiliar(encu:string,hog:number,per:number, dato:string){
93
+ var xpersonas=personas;
94
+ return encu==enc && hog==hogar && informado(xpersonas) && per<= xpersonas.length && per>=1 && !!xpersonas[per-1][dato]? xpersonas[per-1][dato]:null
95
+ },
96
+ edadfamiliar(encu:string,hog:number,per:number){
97
+ var xpersonas=personas;
98
+ return datoFamiliar(encu:string,hog:number,per:number,'edad')
99
+ },
100
+ existeindividual(encu:string,hog:number,per:number){
101
+ var xpersonas=personas;
102
+ return encu==enc && hog==hogar && !!personas && per<= personas.length && per>=1 && !!personas[per-1]['entreaind']
103
+ },
104
+ existemiembro(encu:string,hog:number,per:number){
105
+ var xpersonas=personas;
106
+ return encu==enc && hog==hogar && !!personas && per<= personas.length && per>=1
107
+ },
108
+ nroconyuges(encu:string,hog:number){
109
+ var xpersonas=personas
110
+ return xpersonas.filter( per->per.p4==2).length
111
+ },
112
+ nrojefes(encu:string,hog:number,per:number){
113
+ return personas.filter( per->per.p4==1).length
114
+ },
115
+ parentescofamiliar(encu:string,hog:number,per:number){
116
+ return datoFamiliar(encu:string,hog:number,per:number,'p4')
117
+ },
118
+ sexofamiliar(encu:string,hog:number,per:number){
119
+ var xpersonas=personas;
120
+ return encu==enc && hog==hogar && !!xpersonas && per<= xpersonas.length && per>=1 && !!xpersonas[per-1].sexo? xpersonas[per-1]['sexo']:null
121
+ },
122
+ sitconyjefe(encu:string,hog:number){
123
+ return datoFamiliar(encu:string,hog:number,1,'p5')
124
+ }
125
+ } */
126
+ }
127
+ };
128
+ });
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy1jYXNpbGxlcm9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3VubG9nZ2VkL2hlbHBlcnMtY2FzaWxsZXJvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFDYSxRQUFBLGlCQUFpQixHQUFHO1FBQzdCLFNBQVMsQ0FBQyxXQUFnQjtZQUN0QixJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLENBQUM7WUFDYixDQUFDO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDdkIsQ0FBQztRQUNELE9BQU8sQ0FBQyxTQUFpQixFQUFFLFdBQW1CLEVBQUUsRUFBVTtZQUN0RCxJQUFJLFdBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLHdCQUF3QixHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQzdFLENBQUM7WUFDRCxPQUFPLFNBQVMsR0FBRyxXQUFXLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksRUFBRTtZQUNGLE1BQU0sQ0FBQyxDQUFNO2dCQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtZQUN4QixDQUFDO1lBQ0QsR0FBRztnQkFDQyxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUMvQixDQUFDO1lBQ0QsWUFBWSxDQUFDLENBQVM7Z0JBQ2xCLElBQUksY0FBYyxHQUFHLDhEQUE4RCxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDM0YsSUFBSSxLQUFXLENBQUM7Z0JBQ2hCLElBQUksWUFBcUIsQ0FBQztnQkFDMUIsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDcEIsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxD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QUFJLFlBQVk7b0JBQ2pELGFBQWEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLG1CQUFtQjtpQkFDaEQsQ0FBQTtZQUNMLENBQUM7WUFDRCxxSUFBcUk7WUFDckksMklBQTJJO1lBQzNJLCtGQUErRjtZQUMvRixHQUFHO1lBQ0g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dCQW1DSTtTQUNQO0tBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5leHBvcnQgY29uc3QgaGVscGVyc0Nhc2lsbGVyb3MgPSB7XHJcbiAgICBudWxsMnplcm8ocG9zaWJsZU51bGw6IGFueSkge1xyXG4gICAgICAgIGlmIChwb3NpYmxlTnVsbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcG9zaWJsZU51bGw7XHJcbiAgICB9LFxyXG4gICAgZGl2MGVycihudW1lcmFkb3I6IG51bWJlciwgZGVub21pbmFkb3I6IG51bWJlciwgcGs6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChkZW5vbWluYWRvciA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIGVuIFwiICsgcGsgKyBcIiBkaXZpc2lvbiBwb3IgY2VybyBkZSBcIiArIG51bWVyYWRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudW1lcmFkb3IgLyBkZW5vbWluYWRvcjtcclxuICAgIH0sXHJcbiAgICBmdW5zOiB7XHJcbiAgICAgICAgYmxhbmNvKHg6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCAhPT0gMCAmJiAheFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaG95KCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZS50b2RheSgpLnRvRG15KClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZlY2hhX3ZhbGlkYSh4OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvID0gL14oWzEtOV18MFsxLTldfFsxMl1cXGR8M1swMV0pXFwvKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvMjBcXGRcXGQkLy50ZXN0KHgpXHJcbiAgICAgICAgICAgIHZhciB4RGF0ZTogRGF0ZTtcclxuICAgICAgICAgICAgdmFyIGNvbnZlcnNpb25PazogYm9vbGVhbjtcclxuICAgICAgICAgICAgY29udmVyc2lvbk9rID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdG9fdmFsaWRvKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbZCwgbSwgeV0gPSB4LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHhEYXRlID0gbmV3IERhdGUoYCR7eX0vJHttfS8ke2R9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uT2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy9mYWx0YXJpYSB2YWxpZGFyIHF1ZSBubyBzZWEgdW5hIGZlY2hhIGZ1dHVyYSB5IHF1ZSBzZWEgdW5hIGZlY2hhIGVuIGVsIHJhbmdvIGRlbCBvcGVyYXRpdm9cclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvICYmIGNvbnZlcnNpb25Pa1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWVzYW5pb192YWxpZG8oeDogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbyA9IC9eKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvKDE5fDIwKVxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbmZvcm1hZG8oeDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICE9PSB1bmRlZmluZWQgJiYgeCAhPT0gbnVsbCAmJiAoISh4IGluc3RhbmNlb2YgQXJyYXkpIHx8IHgubGVuZ3RoICE9PSAwKVxyXG4gICAgICAgICAgICAgICAgJiYgKCEoeCBpbnN0YW5jZW9mIE9iamVjdCkgfHwgT2JqZWN0LmtleXMoeCkubGVuZ3RoICE9PSAwKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbnNuYyh4OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggPT0gLTlcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcih4OiBudW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggJSAyID09IDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVkYWRfbWVzX2FubmlvX3ZhbGlkbyhlZGFkOiBudW1iZXIsIG1lc0FubmlvOiBzdHJpbmcsIGZlY2hhUmVhbGl6YWNpb25ERE1NWVlZWTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNlc0RpZmVyZW5jaWEgPSAoZDE6IERhdGUsIGQyOiBEYXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbW9udGhzO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzID0gKGQyLmdldEZ1bGxZZWFyKCkgLSBkMS5nZXRGdWxsWWVhcigpKSAqIDEyO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzIC09IGQxLmdldE1vbnRoKCk7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgKz0gZDIuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgPD0gMCA/IDAgOiBtb250aHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHBhcnRlc1JlYWxpemFjaW9uID0gZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyBwYXJ0ZXMgY29ycmVzcG9uZGVuIGEgdW5hIGZlY2hhIHbDoWxpZGFcclxuICAgICAgICAgICAgdmFyIHRvZGF5ID0gZGF0ZS55bWQoTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzJdKSwgTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzFdKSwgTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzBdKSlcclxuICAgICAgICAgICAgdmFyIHBhcnRlc01lc0FubmlvID0gbWVzQW5uaW8uc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyBwYXJ0ZXMgY29ycmVzcG9uZGVuIGEgdW5hIGZlY2hhIHbDoWxpZGFcclxuICAgICAgICAgICAgdmFyIG5hY2ltaWVudG8gPSBkYXRlLnltZChOdW1iZXIocGFydGVzTWVzQW5uaW9bMV0pLCBOdW1iZXIocGFydGVzTWVzQW5uaW9bMF0pLCAxKVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgUmVhbERhdGUgZXMgRGF0ZSB5IHNlIHB1ZWRlIHJlc3RhclxyXG4gICAgICAgICAgICB2YXIgZGlmZXJlbmNpYU1lc2VzID0gbWVzZXNEaWZlcmVuY2lhKG5hY2ltaWVudG8sIHRvZGF5KTtcclxuICAgICAgICAgICAgdmFyIGVkYWREZWNpbWFsZXMgPSBkaWZlcmVuY2lhTWVzZXMgLyAxMjsgLy9laiAzNi41XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGVkYWREZWNpbWFsZXMpID09IGVkYWQgfHwgLy9taXNtYSBlZGFkXHJcbiAgICAgICAgICAgICAgICBlZGFkRGVjaW1hbGVzID09IGVkYWQgKyAxIC8vbWVzIGRlIHRvbGVyYW5jaWFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy9jb3BpYXJfY2FtcG9fdWFfcmFtYShyZXNwdWVzdGFzT3JpZ2VuOlJlc3B1ZXN0YXNbXSwgcG9zaWNpb246bnVtYmVyLCB2YXJpYWJsZU9yaWdlbjogSWRWYXJpYWJsZSwgY2FtaW5vOnN0cmluZywgY29uZGljaW9uOmJvb2xlYW4pe1xyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/KHJlc3B1ZXN0YXNPcmlnZW4gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXSAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdW2Ake2NhbWlub31gXVt2YXJpYWJsZU9yaWdlbl0pOm51bGxcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uP2V2YWwoYHJlc3B1ZXN0YXNPcmlnZW5bJHtwb3NpY2lvbi0xfV0uYCtjYW1pbm8rJy4nK3ZhcmlhYmxlT3JpZ2VuKTpudWxsO1xyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZGJvOntcclxuICAgICAgICAgICAgZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwgZGF0bzpzdHJpbmcpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiBpbmZvcm1hZG8oeHBlcnNvbmFzKSAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV1bZGF0b10/IHhwZXJzb25hc1twZXItMV1bZGF0b106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlZGFkZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwnZWRhZCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZWluZGl2aWR1YWwoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEhcGVyc29uYXNbcGVyLTFdWydlbnRyZWFpbmQnXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVtaWVtYnJvKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9jb255dWdlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXNcclxuICAgICAgICAgICAgICAgIHJldHVybiB4cGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MikubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2plZmVzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MSkubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhcmVudGVzY29mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ3A0JylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V4b2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEheHBlcnNvbmFzICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXS5zZXhvPyB4cGVyc29uYXNbcGVyLTFdWydzZXhvJ106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaXRjb255amVmZShlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlciwxLCdwNScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICovXHJcbiAgICB9XHJcbn07Il19