dmencu 3.3.1 → 3.5.0
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/ayuda/asignacion.md +16 -0
- package/ayuda/circuito-encuesta.md +27 -0
- package/ayuda/control.md +13 -0
- package/ayuda/dm-cambiar-modo.md +16 -0
- package/ayuda/dm-relevamiento.md +20 -0
- package/ayuda/dm-sincronizar.md +18 -0
- package/ayuda/fin-de-campo.md +14 -0
- package/ayuda/metadatos.md +14 -0
- package/ayuda/muestra.md +14 -0
- package/ayuda/procesar.md +13 -0
- package/ayuda/recepcion.md +20 -0
- package/ayuda/supervision.md +9 -0
- package/ayuda/usuarios.md +12 -0
- package/ayuda/varios.md +23 -0
- package/dist/client/client/client.js +99 -2
- package/dist/client/client/css/menu.styl +29 -0
- package/dist/client/unlogged/css/formulario-react.styl +9 -0
- package/dist/client/unlogged/render-config.d.ts +5 -1
- package/dist/client/unlogged/render-config.js +14 -1
- package/dist/client/unlogged/render-formulario.d.ts +1 -0
- package/dist/client/unlogged/render-formulario.js +43 -2
- package/dist/client/unlogged/render-formulario.tsx +71 -0
- package/dist/client/unlogged/render-general.d.ts +2 -0
- package/dist/client/unlogged/render-general.js +2 -1
- package/dist/client/unlogged/render-general.tsx +1 -0
- package/dist/client/unlogged/render-init.d.ts +1 -0
- package/dist/client/unlogged/render-init.js +9 -2
- package/dist/client/unlogged/tipos.d.ts +19 -1
- package/dist/client/unlogged/tipos.js +1 -1
- package/dist/server/app-dmencu.d.ts +8 -1
- package/dist/server/app-dmencu.js +42 -2
- package/dist/server/ayuda.d.ts +19 -0
- package/dist/server/ayuda.js +224 -0
- package/dist/server/def-config.d.ts +1 -1
- package/dist/server/def-config.js +2 -1
- package/dist/server/procedures-dmencu.js +20 -2
- package/dist/server/server/app-dmencu.d.ts +8 -1
- package/dist/server/server/app-dmencu.js +42 -2
- package/dist/server/server/ayuda.d.ts +19 -0
- package/dist/server/server/ayuda.js +224 -0
- package/dist/server/server/def-config.d.ts +1 -1
- package/dist/server/server/def-config.js +2 -1
- package/dist/server/server/procedures-dmencu.js +18 -2
- package/dist/server/server/table-tem.d.ts +1 -0
- package/dist/server/server/table-tem.js +25 -21
- package/dist/server/server/table-tem_edicion.d.ts +2 -0
- package/dist/server/server/table-tem_edicion.js +62 -0
- package/dist/server/server/types-dmencu.d.ts +20 -1
- package/dist/server/server/types-dmencu.js +1 -1
- package/dist/server/table-tem.d.ts +1 -0
- package/dist/server/table-tem.js +25 -21
- package/dist/server/table-tem_edicion.d.ts +2 -0
- package/dist/server/table-tem_edicion.js +62 -0
- package/dist/server/types-dmencu.d.ts +20 -1
- package/dist/server/types-dmencu.js +1 -1
- package/dist/server/unlogged/tipos.d.ts +19 -1
- package/dist/server/unlogged/tipos.js +1 -1
- package/dist/test/app-para-tests.d.ts +11 -8
- package/dist/test/app-para-tests.js +8 -2
- package/dist/test/test-ayuda.d.ts +1 -0
- package/dist/test/test-ayuda.js +183 -0
- package/dist/test/test-tem-edicion.d.ts +1 -0
- package/dist/test/test-tem-edicion.js +103 -0
- package/dist/test/test.d.ts +2 -0
- package/dist/test/test.js +4 -2
- package/dist/unlogged/tipos.d.ts +19 -1
- package/dist/unlogged/tipos.js +1 -1
- package/dist/unlogged/unlogged/css/formulario-react.styl +9 -0
- package/dist/unlogged/unlogged/render-config.d.ts +5 -1
- package/dist/unlogged/unlogged/render-config.js +14 -1
- package/dist/unlogged/unlogged/render-formulario.d.ts +1 -0
- package/dist/unlogged/unlogged/render-formulario.js +43 -2
- package/dist/unlogged/unlogged/render-formulario.tsx +71 -0
- package/dist/unlogged/unlogged/render-general.d.ts +2 -0
- package/dist/unlogged/unlogged/render-general.js +2 -1
- package/dist/unlogged/unlogged/render-general.tsx +1 -0
- package/dist/unlogged/unlogged/render-init.d.ts +1 -0
- package/dist/unlogged/unlogged/render-init.js +9 -2
- package/dist/unlogged/unlogged/tipos.d.ts +19 -1
- package/dist/unlogged/unlogged/tipos.js +1 -1
- package/dist/unlogged/unlogged/unlogged.js +14 -1
- package/install/validar_manzana_casa_tem_trg.sql +25 -0
- package/package.json +5 -2
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { AyudaOpcionMenu, ModoApp } from "../unlogged/tipos";
|
|
2
|
+
import type { AyudaFuente, AyudaTema, MenuInfoBase, Puede } from "./types-dmencu";
|
|
3
|
+
export type QuienConsultaAyuda = {
|
|
4
|
+
rol: string | null;
|
|
5
|
+
superuser: boolean;
|
|
6
|
+
puede: Puede | undefined;
|
|
7
|
+
modo: ModoApp;
|
|
8
|
+
};
|
|
9
|
+
export declare function parsearTemaDeAyuda(contenido: string, archivo: string, origen: string): AyudaTema;
|
|
10
|
+
export declare function carpetaDelPaquete(desde: string): string;
|
|
11
|
+
export declare function leerFuenteDeAyuda(fuente: AyudaFuente): AyudaTema[];
|
|
12
|
+
export declare function combinarTemasDeAyuda(temasPorFuente: AyudaTema[][]): AyudaTema[];
|
|
13
|
+
export declare function cargarAyuda(fuentes: AyudaFuente[]): AyudaTema[];
|
|
14
|
+
export declare function tienePermiso(puede: Puede | undefined, permisoAccion: string): boolean;
|
|
15
|
+
export declare function temaVisible(tema: AyudaTema, quien: QuienConsultaAyuda): boolean;
|
|
16
|
+
export declare function temasVisibles(temas: AyudaTema[], quien: QuienConsultaAyuda): AyudaTema[];
|
|
17
|
+
export declare function menuConAyuda(menu: MenuInfoBase[], temas: AyudaTema[], prefijo?: string): AyudaOpcionMenu[];
|
|
18
|
+
export declare function rutasDelMenu(menu: MenuInfoBase[], prefijo?: string): string[];
|
|
19
|
+
export declare function problemasDeAyuda(temas: AyudaTema[], permisosExistentes: Puede, rolesExistentes: string[], rutasExistentes: string[]): string[];
|
|
@@ -0,0 +1,224 @@
|
|
|
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", "fs", "path", "js-yaml", "markdown-it"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.parsearTemaDeAyuda = parsearTemaDeAyuda;
|
|
13
|
+
exports.carpetaDelPaquete = carpetaDelPaquete;
|
|
14
|
+
exports.leerFuenteDeAyuda = leerFuenteDeAyuda;
|
|
15
|
+
exports.combinarTemasDeAyuda = combinarTemasDeAyuda;
|
|
16
|
+
exports.cargarAyuda = cargarAyuda;
|
|
17
|
+
exports.tienePermiso = tienePermiso;
|
|
18
|
+
exports.temaVisible = temaVisible;
|
|
19
|
+
exports.temasVisibles = temasVisibles;
|
|
20
|
+
exports.menuConAyuda = menuConAyuda;
|
|
21
|
+
exports.rutasDelMenu = rutasDelMenu;
|
|
22
|
+
exports.problemasDeAyuda = problemasDeAyuda;
|
|
23
|
+
// Ayuda en línea para usuarios: temas en archivos .md con un encabezado YAML que dice a quién se muestran.
|
|
24
|
+
// Las apps finales agregan, reemplazan u ocultan temas con getAyudaFuentes (ver docs/ayuda-online.md).
|
|
25
|
+
const fs = require("fs");
|
|
26
|
+
const path = require("path");
|
|
27
|
+
const jsYaml = require("js-yaml");
|
|
28
|
+
const MarkdownIt = require("markdown-it");
|
|
29
|
+
const ENCABEZADO = /^---\r?\n([\s\S]*?)\r?\n---[ \t]*(?:\r?\n|$)/;
|
|
30
|
+
const CAMPOS_DEL_ENCABEZADO = ['id', 'titulo', 'orden', 'permisos', 'roles', 'modo', 'menu', 'ocultar'];
|
|
31
|
+
const ORDEN_PREDETERMINADO = 100;
|
|
32
|
+
// html: false porque el contenido es texto para usuarios, no páginas; los enlaces "ayuda:id" llevan a otro tema
|
|
33
|
+
const markdown = new MarkdownIt({ html: false, linkify: true, typographer: true });
|
|
34
|
+
function errorDeAyuda(archivo, mensaje) {
|
|
35
|
+
return new Error(`ayuda ${archivo}: ${mensaje}`);
|
|
36
|
+
}
|
|
37
|
+
function texto(valor, campo, archivo) {
|
|
38
|
+
if (typeof valor != 'string' || valor.trim() == '') {
|
|
39
|
+
throw errorDeAyuda(archivo, `${campo} debe ser un texto no vacío`);
|
|
40
|
+
}
|
|
41
|
+
return valor.trim();
|
|
42
|
+
}
|
|
43
|
+
function listaDeTextos(valor, campo, archivo) {
|
|
44
|
+
if (valor == null) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
if (typeof valor == 'string') {
|
|
48
|
+
return [texto(valor, campo, archivo)];
|
|
49
|
+
}
|
|
50
|
+
if (!Array.isArray(valor)) {
|
|
51
|
+
throw errorDeAyuda(archivo, `${campo} debe ser una lista de textos`);
|
|
52
|
+
}
|
|
53
|
+
var elementos = valor;
|
|
54
|
+
return elementos.map(elemento => texto(elemento, campo, archivo));
|
|
55
|
+
}
|
|
56
|
+
function modoApp(valor, archivo) {
|
|
57
|
+
if (valor == null) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
if (valor === 'RELEVAMIENTO' || valor === 'GABINETE') {
|
|
61
|
+
return valor;
|
|
62
|
+
}
|
|
63
|
+
throw errorDeAyuda(archivo, `modo debe ser RELEVAMIENTO o GABINETE`);
|
|
64
|
+
}
|
|
65
|
+
// lee el texto de un archivo de ayuda (encabezado + markdown)
|
|
66
|
+
function parsearTemaDeAyuda(contenido, archivo, origen) {
|
|
67
|
+
var _a, _b;
|
|
68
|
+
var sinBom = contenido.replace(/^/, '');
|
|
69
|
+
var partes = ENCABEZADO.exec(sinBom);
|
|
70
|
+
if (partes == null) {
|
|
71
|
+
throw errorDeAyuda(archivo, 'falta el encabezado entre líneas ---');
|
|
72
|
+
}
|
|
73
|
+
var yaml = jsYaml.load(partes[1]);
|
|
74
|
+
if (yaml == null || typeof yaml != 'object' || Array.isArray(yaml)) {
|
|
75
|
+
throw errorDeAyuda(archivo, 'el encabezado debe tener la forma "campo: valor"');
|
|
76
|
+
}
|
|
77
|
+
var encabezado = new Map();
|
|
78
|
+
for (var campo of Object.keys(yaml)) {
|
|
79
|
+
if (!CAMPOS_DEL_ENCABEZADO.includes(campo)) {
|
|
80
|
+
throw errorDeAyuda(archivo, `campo desconocido "${campo}" (los válidos son: ${CAMPOS_DEL_ENCABEZADO.join(', ')})`);
|
|
81
|
+
}
|
|
82
|
+
encabezado.set(campo, Reflect.get(yaml, campo));
|
|
83
|
+
}
|
|
84
|
+
var id = texto(encabezado.get('id'), 'id', archivo);
|
|
85
|
+
if (!/^[a-z0-9_-]+$/.test(id)) {
|
|
86
|
+
throw errorDeAyuda(archivo, `el id "${id}" sólo puede tener minúsculas, números, "_" y "-"`);
|
|
87
|
+
}
|
|
88
|
+
var ocultar = (_a = encabezado.get('ocultar')) !== null && _a !== void 0 ? _a : false;
|
|
89
|
+
if (typeof ocultar != 'boolean') {
|
|
90
|
+
throw errorDeAyuda(archivo, 'ocultar debe ser true o false');
|
|
91
|
+
}
|
|
92
|
+
var orden = (_b = encabezado.get('orden')) !== null && _b !== void 0 ? _b : ORDEN_PREDETERMINADO;
|
|
93
|
+
if (typeof orden != 'number') {
|
|
94
|
+
throw errorDeAyuda(archivo, 'orden debe ser un número');
|
|
95
|
+
}
|
|
96
|
+
var permisos = listaDeTextos(encabezado.get('permisos'), 'permisos', archivo);
|
|
97
|
+
permisos.forEach(permiso => {
|
|
98
|
+
if (!/^\w+\.\w+$/.test(permiso)) {
|
|
99
|
+
throw errorDeAyuda(archivo, `el permiso "${permiso}" debe tener la forma permiso.accion`);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
return {
|
|
103
|
+
id,
|
|
104
|
+
// un tema que sólo oculta otro no necesita título
|
|
105
|
+
titulo: ocultar && encabezado.get('titulo') == null ? id : texto(encabezado.get('titulo'), 'titulo', archivo),
|
|
106
|
+
orden,
|
|
107
|
+
permisos,
|
|
108
|
+
roles: listaDeTextos(encabezado.get('roles'), 'roles', archivo),
|
|
109
|
+
modo: modoApp(encabezado.get('modo'), archivo),
|
|
110
|
+
menu: listaDeTextos(encabezado.get('menu'), 'menu', archivo),
|
|
111
|
+
ocultar,
|
|
112
|
+
origen,
|
|
113
|
+
archivo,
|
|
114
|
+
html: ocultar ? '' : markdown.render(sinBom.slice(partes[0].length)),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
// carpeta del paquete (la que tiene el package.json) que contiene a la carpeta "desde" (normalmente __dirname);
|
|
118
|
+
// así se ubica la carpeta ayuda/ sin importar si el js está en dist/server/server, en dist/server (tests) o en node_modules
|
|
119
|
+
function carpetaDelPaquete(desde) {
|
|
120
|
+
var carpeta = path.resolve(desde);
|
|
121
|
+
while (!fs.existsSync(path.join(carpeta, 'package.json'))) {
|
|
122
|
+
var padre = path.dirname(carpeta);
|
|
123
|
+
if (padre == carpeta) {
|
|
124
|
+
throw new Error(`ayuda: no se encontró el package.json de ${desde}`);
|
|
125
|
+
}
|
|
126
|
+
carpeta = padre;
|
|
127
|
+
}
|
|
128
|
+
return carpeta;
|
|
129
|
+
}
|
|
130
|
+
// lee los .md de la carpeta de una fuente (sin subcarpetas)
|
|
131
|
+
function leerFuenteDeAyuda(fuente) {
|
|
132
|
+
if (!fs.existsSync(fuente.carpeta)) {
|
|
133
|
+
throw new Error(`ayuda: no existe la carpeta ${fuente.carpeta} de ${fuente.origen}`);
|
|
134
|
+
}
|
|
135
|
+
var temas = fs.readdirSync(fuente.carpeta)
|
|
136
|
+
.filter(nombre => nombre.endsWith('.md'))
|
|
137
|
+
.sort()
|
|
138
|
+
.map(nombre => {
|
|
139
|
+
var archivo = path.join(fuente.carpeta, nombre);
|
|
140
|
+
return parsearTemaDeAyuda(fs.readFileSync(archivo, 'utf8'), archivo, fuente.origen);
|
|
141
|
+
});
|
|
142
|
+
var vistos = new Map();
|
|
143
|
+
temas.forEach(tema => {
|
|
144
|
+
var anterior = vistos.get(tema.id);
|
|
145
|
+
if (anterior != null) {
|
|
146
|
+
throw errorDeAyuda(tema.archivo, `el id "${tema.id}" ya está en ${anterior}`);
|
|
147
|
+
}
|
|
148
|
+
vistos.set(tema.id, tema.archivo);
|
|
149
|
+
});
|
|
150
|
+
return temas;
|
|
151
|
+
}
|
|
152
|
+
// combina los temas de varias fuentes en orden: un id repetido reemplaza al anterior y "ocultar" lo quita
|
|
153
|
+
function combinarTemasDeAyuda(temasPorFuente) {
|
|
154
|
+
var temas = new Map();
|
|
155
|
+
temasPorFuente.forEach(temasDeLaFuente => temasDeLaFuente.forEach(tema => {
|
|
156
|
+
if (tema.ocultar) {
|
|
157
|
+
temas.delete(tema.id);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
temas.set(tema.id, tema);
|
|
161
|
+
}
|
|
162
|
+
}));
|
|
163
|
+
return Array.from(temas.values()).sort((a, b) => a.orden - b.orden || a.titulo.localeCompare(b.titulo));
|
|
164
|
+
}
|
|
165
|
+
function cargarAyuda(fuentes) {
|
|
166
|
+
return combinarTemasDeAyuda(fuentes.map(leerFuenteDeAyuda));
|
|
167
|
+
}
|
|
168
|
+
function tienePermiso(puede, permisoAccion) {
|
|
169
|
+
var _a;
|
|
170
|
+
var [permiso, accion] = permisoAccion.split('.');
|
|
171
|
+
var acciones = puede !== null && puede !== void 0 ? puede : {};
|
|
172
|
+
return ((_a = acciones[permiso]) === null || _a === void 0 ? void 0 : _a[accion]) === true;
|
|
173
|
+
}
|
|
174
|
+
function temaVisible(tema, quien) {
|
|
175
|
+
if (tema.modo != null && tema.modo != quien.modo) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
if (quien.superuser || tema.permisos.length == 0 && tema.roles.length == 0) {
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
return quien.rol != null && tema.roles.includes(quien.rol)
|
|
182
|
+
|| tema.permisos.some(permiso => tienePermiso(quien.puede, permiso));
|
|
183
|
+
}
|
|
184
|
+
function temasVisibles(temas, quien) {
|
|
185
|
+
return temas.filter(tema => temaVisible(tema, quien));
|
|
186
|
+
}
|
|
187
|
+
// el menú del usuario (el que arma getMenu) con el tema de ayuda de cada opción
|
|
188
|
+
function menuConAyuda(menu, temas, prefijo = '') {
|
|
189
|
+
return menu.filter(opcion => opcion.menuType != 'ayuda').map(opcion => {
|
|
190
|
+
var _a, _b;
|
|
191
|
+
var ruta = prefijo + opcion.name;
|
|
192
|
+
var contenido = opcion.menuType == 'menu' ? opcion.menuContent : [];
|
|
193
|
+
var tema = temas.find(tema => tema.menu.includes(ruta));
|
|
194
|
+
return {
|
|
195
|
+
ruta,
|
|
196
|
+
label: (_a = opcion.label) !== null && _a !== void 0 ? _a : opcion.name.replace(/_/g, ' '),
|
|
197
|
+
tema: (_b = tema === null || tema === void 0 ? void 0 : tema.id) !== null && _b !== void 0 ? _b : null,
|
|
198
|
+
opciones: menuConAyuda(contenido, temas, ruta + '/'),
|
|
199
|
+
};
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
// rutas de todas las opciones de un menú (para validar las que mencionan los temas)
|
|
203
|
+
function rutasDelMenu(menu, prefijo = '') {
|
|
204
|
+
return menu.reduce((rutas, opcion) => {
|
|
205
|
+
var contenido = opcion.menuType == 'menu' ? opcion.menuContent : [];
|
|
206
|
+
return rutas.concat(prefijo + opcion.name, rutasDelMenu(contenido, prefijo + opcion.name + '/'));
|
|
207
|
+
}, []);
|
|
208
|
+
}
|
|
209
|
+
// problemas que no impiden mostrar la ayuda pero indican un error en los temas:
|
|
210
|
+
// permisos o roles que no existen y opciones de menú que nadie ve
|
|
211
|
+
function problemasDeAyuda(temas, permisosExistentes, rolesExistentes, rutasExistentes) {
|
|
212
|
+
var problemas = [];
|
|
213
|
+
temas.forEach(tema => {
|
|
214
|
+
tema.permisos.filter(permiso => !tienePermiso(permisosExistentes, permiso))
|
|
215
|
+
.forEach(permiso => problemas.push(`ayuda ${tema.archivo}: no existe el permiso ${permiso}`));
|
|
216
|
+
tema.roles.filter(rol => !rolesExistentes.includes(rol))
|
|
217
|
+
.forEach(rol => problemas.push(`ayuda ${tema.archivo}: no existe el rol ${rol}`));
|
|
218
|
+
tema.menu.filter(ruta => !rutasExistentes.includes(ruta))
|
|
219
|
+
.forEach(ruta => problemas.push(`ayuda ${tema.archivo}: ningún rol tiene la opción de menú ${ruta}`));
|
|
220
|
+
});
|
|
221
|
+
return problemas;
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXl1ZGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL2F5dWRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztJQUFBLFlBQVksQ0FBQzs7SUFnRWIsZ0RBaURDO0lBSUQsOENBVUM7SUFHRCw4Q0FvQkM7SUFHRCxvREFVQztJQUVELGtDQUVDO0lBRUQsb0NBSUM7SUFFRCxrQ0FTQztJQUVELHNDQUVDO0lBR0Qsb0NBWUM7SUFHRCxvQ0FLQztJQUlELDRDQVdDO0lBaE9ELDJHQUEyRztJQUMzRyx1R0FBdUc7SUFFdkcseUJBQXlCO0lBQ3pCLDZCQUE2QjtJQUM3QixrQ0FBa0M7SUFDbEMsMENBQTJDO0lBYTNDLE1BQU0sVUFBVSxHQUFHLDhDQUE4QyxDQUFDO0lBQ2xFLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDeEcsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7SUFFakMsZ0hBQWdIO0lBQ2hILE1BQU0sUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRW5GLFNBQVMsWUFBWSxDQUFDLE9BQWUsRUFBRSxPQUFlO1FBQ2xELE9BQU8sSUFBSSxLQUFLLENBQUMsU0FBUyxPQUFPLEtBQUssT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsU0FBUyxLQUFLLENBQUMsS0FBYyxFQUFFLEtBQWEsRUFBRSxPQUFlO1FBQ3pELElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFlBQVksQ0FBQyxPQUFPLEVB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LENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuLy8gQXl1ZGEgZW4gbMOtbmVhIHBhcmEgdXN1YXJpb3M6IHRlbWFzIGVuIGFyY2hpdm9zIC5tZCBjb24gdW4gZW5jYWJlemFkbyBZQU1MIHF1ZSBkaWNlIGEgcXVpw6luIHNlIG11ZXN0cmFuLlxuLy8gTGFzIGFwcHMgZmluYWxlcyBhZ3JlZ2FuLCByZWVtcGxhemFuIHUgb2N1bHRhbiB0ZW1hcyBjb24gZ2V0QXl1ZGFGdWVudGVzICh2ZXIgZG9jcy9heXVkYS1vbmxpbmUubWQpLlxuXG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIGpzWWFtbCBmcm9tIFwianMteWFtbFwiO1xuaW1wb3J0IE1hcmtkb3duSXQgPSByZXF1aXJlKFwibWFya2Rvd24taXRcIik7XG5cbmltcG9ydCB0eXBlIHsgQXl1ZGFPcGNpb25NZW51LCBNb2RvQXBwIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XG5pbXBvcnQgdHlwZSB7IEF5dWRhRnVlbnRlLCBBeXVkYVRlbWEsIE1lbnVJbmZvQmFzZSwgUHVlZGUgfSBmcm9tIFwiLi90eXBlcy1kbWVuY3VcIjtcblxuLy8gcXVpZW4gY29uc3VsdGEgbGEgYXl1ZGE6IGxvIHF1ZSBoYWNlIGZhbHRhIGRlbCBjb250ZXh0IHBhcmEgZGVjaWRpciBxdcOpIHRlbWFzIHZlXG5leHBvcnQgdHlwZSBRdWllbkNvbnN1bHRhQXl1ZGEgPSB7XG4gICAgcm9sOiBzdHJpbmcgfCBudWxsXG4gICAgc3VwZXJ1c2VyOiBib29sZWFuXG4gICAgcHVlZGU6IFB1ZWRlIHwgdW5kZWZpbmVkXG4gICAgbW9kbzogTW9kb0FwcFxufVxuXG5jb25zdCBFTkNBQkVaQURPID0gL14tLS1cXHI/XFxuKFtcXHNcXFNdKj8pXFxyP1xcbi0tLVsgXFx0XSooPzpcXHI/XFxufCQpLztcbmNvbnN0IENBTVBPU19ERUxfRU5DQUJFWkFETyA9IFsnaWQnLCAndGl0dWxvJywgJ29yZGVuJywgJ3Blcm1pc29zJywgJ3JvbGVzJywgJ21vZG8nLCAnbWVudScsICdvY3VsdGFyJ107XG5jb25zdCBPUkRFTl9QUkVERVRFUk1JTkFETyA9IDEwMDtcblxuLy8gaHRtbDogZmFsc2UgcG9ycXVlIGVsIGNvbnRlbmlkbyBlcyB0ZXh0byBwYXJhIHVzdWFyaW9zLCBubyBww6FnaW5hczsgbG9zIGVubGFjZXMgXCJheXVkYTppZFwiIGxsZXZhbiBhIG90cm8gdGVtYVxuY29uc3QgbWFya2Rvd24gPSBuZXcgTWFya2Rvd25JdCh7IGh0bWw6IGZhbHNlLCBsaW5raWZ5OiB0cnVlLCB0eXBvZ3JhcGhlcjogdHJ1ZSB9KTtcblxuZnVuY3Rpb24gZXJyb3JEZUF5dWRhKGFyY2hpdm86IHN0cmluZywgbWVuc2FqZTogc3RyaW5nKTogRXJyb3Ige1xuICAgIHJldHVybiBuZXcgRXJyb3IoYGF5dWRhICR7YXJjaGl2b306ICR7bWVuc2FqZX1gKTtcbn1cblxuZnVuY3Rpb24gdGV4dG8odmFsb3I6IHVua25vd24sIGNhbXBvOiBzdHJpbmcsIGFyY2hpdm86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiB2YWxvciAhPSAnc3RyaW5nJyB8fCB2YWxvci50cmltKCkgPT0gJycpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JEZUF5dWRhKGFyY2hpdm8sIGAke2NhbXBvfSBkZWJlIHNlciB1biB0ZXh0byBubyB2YWPDrW9gKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbG9yLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gbGlzdGFEZVRleHRvcyh2YWxvcjogdW5rbm93biwgY2FtcG86IHN0cmluZywgYXJjaGl2bzogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGlmICh2YWxvciA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWxvciA9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gW3RleHRvKHZhbG9yLCBjYW1wbywgYXJjaGl2byldO1xuICAgIH1cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsb3IpKSB7XG4gICAgICAgIHRocm93IGVycm9yRGVBeXVkYShhcmNoaXZvLCBgJHtjYW1wb30gZGViZSBzZXIgdW5hIGxpc3RhIGRlIHRleHRvc2ApO1xuICAgIH1cbiAgICB2YXIgZWxlbWVudG9zOiB1bmtub3duW10gPSB2YWxvcjtcbiAgICByZXR1cm4gZWxlbWVudG9zLm1hcChlbGVtZW50byA9PiB0ZXh0byhlbGVtZW50bywgY2FtcG8sIGFyY2hpdm8pKTtcbn1cblxuZnVuY3Rpb24gbW9kb0FwcCh2YWxvcjogdW5rbm93biwgYXJjaGl2bzogc3RyaW5nKTogTW9kb0FwcCB8IG51bGwge1xuICAgIGlmICh2YWxvciA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodmFsb3IgPT09ICdSRUxFVkFNSUVOVE8nIHx8IHZhbG9yID09PSAnR0FCSU5FVEUnKSB7XG4gICAgICAgIHJldHVybiB2YWxvcjtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3JEZUF5dWRhKGFyY2hpdm8sIGBtb2RvIGRlYmUgc2VyIFJFTEVWQU1JRU5UTyBvIEdBQklORVRFYCk7XG59XG5cbi8vIGxlZSBlbCB0ZXh0byBkZSB1biBhcmNoaXZvIGRlIGF5dWRhIChlbmNhYmV6YWRvICsgbWFya2Rvd24pXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VhclRlbWFEZUF5dWRhKGNvbnRlbmlkbzogc3RyaW5nLCBhcmNoaXZvOiBzdHJpbmcsIG9yaWdlbjogc3RyaW5nKTogQXl1ZGFUZW1hIHtcbiAgICB2YXIgc2luQm9tID0gY29udGVuaWRvLnJlcGxhY2UoL17vu78vLCAnJyk7XG4gICAgdmFyIHBhcnRlcyA9IEVOQ0FCRVpBRE8uZXhlYyhzaW5Cb20pO1xuICAgIGlmIChwYXJ0ZXMgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBlcnJvckRlQXl1ZGEoYXJjaGl2bywgJ2ZhbHRhIGVsIGVuY2FiZXphZG8gZW50cmUgbMOtbmVhcyAtLS0nKTtcbiAgICB9XG4gICAgdmFyIHlhbWw6IHVua25vd24gPSBqc1lhbWwubG9hZChwYXJ0ZXNbMV0pO1xuICAgIGlmICh5YW1sID09IG51bGwgfHwgdHlwZW9mIHlhbWwgIT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheSh5YW1sKSkge1xuICAgICAgICB0aHJvdyBlcnJvckRlQXl1ZGEoYXJjaGl2bywgJ2VsIGVuY2FiZXphZG8gZGViZSB0ZW5lciBsYSBmb3JtYSBcImNhbXBvOiB2YWxvclwiJyk7XG4gICAgfVxuICAgIHZhciBlbmNhYmV6YWRvOiBNYXA8c3RyaW5nLCB1bmtub3duPiA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKHZhciBjYW1wbyBvZiBPYmplY3Qua2V5cyh5YW1sKSkge1xuICAgICAgICBpZiAoIUNBTVBPU19ERUxfRU5DQUJFWkFETy5pbmNsdWRlcyhjYW1wbykpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yRGVBeXVkYShhcmNoaXZvLCBgY2FtcG8gZGVzY29ub2NpZG8gXCIke2NhbXBvfVwiIChsb3MgdsOhbGlkb3Mgc29uOiAke0NBTVBPU19ERUxfRU5DQUJFWkFETy5qb2luKCcsICcpfSlgKTtcbiAgICAgICAgfVxuICAgICAgICBlbmNhYmV6YWRvLnNldChjYW1wbywgUmVmbGVjdC5nZXQoeWFtbCwgY2FtcG8pKTtcbiAgICB9XG4gICAgdmFyIGlkID0gdGV4dG8oZW5jYWJlemFkby5nZXQoJ2lkJyksICdpZCcsIGFyY2hpdm8pO1xuICAgIGlmICghL15bYS16MC05Xy1dKyQvLnRlc3QoaWQpKSB7XG4gICAgICAgIHRocm93IGVycm9yRGVBeXVkYShhcmNoaXZvLCBgZWwgaWQgXCIke2lkfVwiIHPDs2xvIHB1ZWRlIHRlbmVyIG1pbsO6c2N1bGFzLCBuw7ptZXJvcywgXCJfXCIgeSBcIi1cImApO1xuICAgIH1cbiAgICB2YXIgb2N1bHRhciA9IGVuY2FiZXphZG8uZ2V0KCdvY3VsdGFyJykgPz8gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBvY3VsdGFyICE9ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBlcnJvckRlQXl1ZGEoYXJjaGl2bywgJ29jdWx0YXIgZGViZSBzZXIgdHJ1ZSBvIGZhbHNlJyk7XG4gICAgfVxuICAgIHZhciBvcmRlbiA9IGVuY2FiZXphZG8uZ2V0KCdvcmRlbicpID8/IE9SREVOX1BSRURFVEVSTUlOQURPO1xuICAgIGlmICh0eXBlb2Ygb3JkZW4gIT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JEZUF5dWRhKGFyY2hpdm8sICdvcmRlbiBkZWJlIHNlciB1biBuw7ptZXJvJyk7XG4gICAgfVxuICAgIHZhciBwZXJtaXNvcyA9IGxpc3RhRGVUZXh0b3MoZW5jYWJlemFkby5nZXQoJ3Blcm1pc29zJyksICdwZXJtaXNvcycsIGFyY2hpdm8pO1xuICAgIHBlcm1pc29zLmZvckVhY2gocGVybWlzbyA9PiB7XG4gICAgICAgIGlmICghL15cXHcrXFwuXFx3KyQvLnRlc3QocGVybWlzbykpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yRGVBeXVkYShhcmNoaXZvLCBgZWwgcGVybWlzbyBcIiR7cGVybWlzb31cIiBkZWJlIHRlbmVyIGxhIGZvcm1hIHBlcm1pc28uYWNjaW9uYCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZCxcbiAgICAgICAgLy8gdW4gdGVtYSBxdWUgc8OzbG8gb2N1bHRhIG90cm8gbm8gbmVjZXNpdGEgdMOtdHVsb1xuICAgICAgICB0aXR1bG86IG9jdWx0YXIgJiYgZW5jYWJlemFkby5nZXQoJ3RpdHVsbycpID09IG51bGwgPyBpZCA6IHRleHRvKGVuY2FiZXphZG8uZ2V0KCd0aXR1bG8nKSwgJ3RpdHVsbycsIGFyY2hpdm8pLFxuICAgICAgICBvcmRlbixcbiAgICAgICAgcGVybWlzb3MsXG4gICAgICAgIHJvbGVzOiBsaXN0YURlVGV4dG9zKGVuY2FiZXphZG8uZ2V0KCdyb2xlcycpLCAncm9sZXMnLCBhcmNoaXZvKSxcbiAgICAgICAgbW9kbzogbW9kb0FwcChlbmNhYmV6YWRvLmdldCgnbW9kbycpLCBhcmNoaXZvKSxcbiAgICAgICAgbWVudTogbGlzdGFEZVRleHRvcyhlbmNhYmV6YWRvLmdldCgnbWVudScpLCAnbWVudScsIGFyY2hpdm8pLFxuICAgICAgICBvY3VsdGFyLFxuICAgICAgICBvcmlnZW4sXG4gICAgICAgIGFyY2hpdm8sXG4gICAgICAgIGh0bWw6IG9jdWx0YXIgPyAnJyA6IG1hcmtkb3duLnJlbmRlcihzaW5Cb20uc2xpY2UocGFydGVzWzBdLmxlbmd0aCkpLFxuICAgIH07XG59XG5cbi8vIGNhcnBldGEgZGVsIHBhcXVldGUgKGxhIHF1ZSB0aWVuZSBlbCBwYWNrYWdlLmpzb24pIHF1ZSBjb250aWVuZSBhIGxhIGNhcnBldGEgXCJkZXNkZVwiIChub3JtYWxtZW50ZSBfX2Rpcm5hbWUpO1xuLy8gYXPDrSBzZSB1YmljYSBsYSBjYXJwZXRhIGF5dWRhLyBzaW4gaW1wb3J0YXIgc2kgZWwganMgZXN0w6EgZW4gZGlzdC9zZXJ2ZXIvc2VydmVyLCBlbiBkaXN0L3NlcnZlciAodGVzdHMpIG8gZW4gbm9kZV9tb2R1bGVzXG5leHBvcnQgZnVuY3Rpb24gY2FycGV0YURlbFBhcXVldGUoZGVzZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdmFyIGNhcnBldGEgPSBwYXRoLnJlc29sdmUoZGVzZGUpO1xuICAgIHdoaWxlICghZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4oY2FycGV0YSwgJ3BhY2thZ2UuanNvbicpKSkge1xuICAgICAgICB2YXIgcGFkcmUgPSBwYXRoLmRpcm5hbWUoY2FycGV0YSk7XG4gICAgICAgIGlmIChwYWRyZSA9PSBjYXJwZXRhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGF5dWRhOiBubyBzZSBlbmNvbnRyw7MgZWwgcGFja2FnZS5qc29uIGRlICR7ZGVzZGV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FycGV0YSA9IHBhZHJlO1xuICAgIH1cbiAgICByZXR1cm4gY2FycGV0YTtcbn1cblxuLy8gbGVlIGxvcyAubWQgZGUgbGEgY2FycGV0YSBkZSB1bmEgZnVlbnRlIChzaW4gc3ViY2FycGV0YXMpXG5leHBvcnQgZnVuY3Rpb24gbGVlckZ1ZW50ZURlQXl1ZGEoZnVlbnRlOiBBeXVkYUZ1ZW50ZSk6IEF5dWRhVGVtYVtdIHtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZnVlbnRlLmNhcnBldGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgYXl1ZGE6IG5vIGV4aXN0ZSBsYSBjYXJwZXRhICR7ZnVlbnRlLmNhcnBldGF9IGRlICR7ZnVlbnRlLm9yaWdlbn1gKTtcbiAgICB9XG4gICAgdmFyIHRlbWFzID0gZnMucmVhZGRpclN5bmMoZnVlbnRlLmNhcnBldGEpXG4gICAgICAgIC5maWx0ZXIobm9tYnJlID0+IG5vbWJyZS5lbmRzV2l0aCgnLm1kJykpXG4gICAgICAgIC5zb3J0KClcbiAgICAgICAgLm1hcChub21icmUgPT4ge1xuICAgICAgICAgICAgdmFyIGFyY2hpdm8gPSBwYXRoLmpvaW4oZnVlbnRlLmNhcnBldGEsIG5vbWJyZSk7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VhclRlbWFEZUF5dWRhKGZzLnJlYWRGaWxlU3luYyhhcmNoaXZvLCAndXRmOCcpLCBhcmNoaXZvLCBmdWVudGUub3JpZ2VuKTtcbiAgICAgICAgfSk7XG4gICAgdmFyIHZpc3RvczogTWFwPHN0cmluZywgc3RyaW5nPiA9IG5ldyBNYXAoKTtcbiAgICB0ZW1hcy5mb3JFYWNoKHRlbWEgPT4ge1xuICAgICAgICB2YXIgYW50ZXJpb3IgPSB2aXN0b3MuZ2V0KHRlbWEuaWQpO1xuICAgICAgICBpZiAoYW50ZXJpb3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgZXJyb3JEZUF5dWRhKHRlbWEuYXJjaGl2bywgYGVsIGlkIFwiJHt0ZW1hLmlkfVwiIHlhIGVzdMOhIGVuICR7YW50ZXJpb3J9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdmlzdG9zLnNldCh0ZW1hLmlkLCB0ZW1hLmFyY2hpdm8pO1xuICAgIH0pO1xuICAgIHJldHVybiB0ZW1hcztcbn1cblxuLy8gY29tYmluYSBsb3MgdGVtYXMgZGUgdmFyaWFzIGZ1ZW50ZXMgZW4gb3JkZW46IHVuIGlkIHJlcGV0aWRvIHJlZW1wbGF6YSBhbCBhbnRlcmlvciB5IFwib2N1bHRhclwiIGxvIHF1aXRhXG5leHBvcnQgZnVuY3Rpb24gY29tYmluYXJUZW1hc0RlQXl1ZGEodGVtYXNQb3JGdWVudGU6IEF5dWRhVGVtYVtdW10pOiBBeXVkYVRlbWFbXSB7XG4gICAgdmFyIHRlbWFzOiBNYXA8c3RyaW5nLCBBeXVkYVRlbWE+ID0gbmV3IE1hcCgpO1xuICAgIHRlbWFzUG9yRnVlbnRlLmZvckVhY2godGVtYXNEZUxhRnVlbnRlID0+IHRlbWFzRGVMYUZ1ZW50ZS5mb3JFYWNoKHRlbWEgPT4ge1xuICAgICAgICBpZiAodGVtYS5vY3VsdGFyKSB7XG4gICAgICAgICAgICB0ZW1hcy5kZWxldGUodGVtYS5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1hcy5zZXQodGVtYS5pZCwgdGVtYSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGVtYXMudmFsdWVzKCkpLnNvcnQoKGEsIGIpID0+IGEub3JkZW4gLSBiLm9yZGVuIHx8IGEudGl0dWxvLmxvY2FsZUNvbXBhcmUoYi50aXR1bG8pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcmdhckF5dWRhKGZ1ZW50ZXM6IEF5dWRhRnVlbnRlW10pOiBBeXVkYVRlbWFbXSB7XG4gICAgcmV0dXJuIGNvbWJpbmFyVGVtYXNEZUF5dWRhKGZ1ZW50ZXMubWFwKGxlZXJGdWVudGVEZUF5dWRhKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aWVuZVBlcm1pc28ocHVlZGU6IFB1ZWRlIHwgdW5kZWZpbmVkLCBwZXJtaXNvQWNjaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB2YXIgW3Blcm1pc28sIGFjY2lvbl0gPSBwZXJtaXNvQWNjaW9uLnNwbGl0KCcuJyk7XG4gICAgdmFyIGFjY2lvbmVzOiB7IFtwZXJtaXNvOiBzdHJpbmddOiB7IFthY2Npb246IHN0cmluZ106IGJvb2xlYW4gfCB1bmRlZmluZWQgfSB8IHVuZGVmaW5lZCB9ID0gcHVlZGUgPz8ge307XG4gICAgcmV0dXJuIGFjY2lvbmVzW3Blcm1pc29dPy5bYWNjaW9uXSA9PT0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlbWFWaXNpYmxlKHRlbWE6IEF5dWRhVGVtYSwgcXVpZW46IFF1aWVuQ29uc3VsdGFBeXVkYSk6IGJvb2xlYW4ge1xuICAgIGlmICh0ZW1hLm1vZG8gIT0gbnVsbCAmJiB0ZW1hLm1vZG8gIT0gcXVpZW4ubW9kbykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChxdWllbi5zdXBlcnVzZXIgfHwgdGVtYS5wZXJtaXNvcy5sZW5ndGggPT0gMCAmJiB0ZW1hLnJvbGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gcXVpZW4ucm9sICE9IG51bGwgJiYgdGVtYS5yb2xlcy5pbmNsdWRlcyhxdWllbi5yb2wpXG4gICAgICAgIHx8IHRlbWEucGVybWlzb3Muc29tZShwZXJtaXNvID0+IHRpZW5lUGVybWlzbyhxdWllbi5wdWVkZSwgcGVybWlzbykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtYXNWaXNpYmxlcyh0ZW1hczogQXl1ZGFUZW1hW10sIHF1aWVuOiBRdWllbkNvbnN1bHRhQXl1ZGEpOiBBeXVkYVRlbWFbXSB7XG4gICAgcmV0dXJuIHRlbWFzLmZpbHRlcih0ZW1hID0+IHRlbWFWaXNpYmxlKHRlbWEsIHF1aWVuKSk7XG59XG5cbi8vIGVsIG1lbsO6IGRlbCB1c3VhcmlvIChlbCBxdWUgYXJtYSBnZXRNZW51KSBjb24gZWwgdGVtYSBkZSBheXVkYSBkZSBjYWRhIG9wY2nDs25cbmV4cG9ydCBmdW5jdGlvbiBtZW51Q29uQXl1ZGEobWVudTogTWVudUluZm9CYXNlW10sIHRlbWFzOiBBeXVkYVRlbWFbXSwgcHJlZmlqbzogc3RyaW5nID0gJycpOiBBeXVkYU9wY2lvbk1lbnVbXSB7XG4gICAgcmV0dXJuIG1lbnUuZmlsdGVyKG9wY2lvbiA9PiBvcGNpb24ubWVudVR5cGUgIT0gJ2F5dWRhJykubWFwKG9wY2lvbiA9PiB7XG4gICAgICAgIHZhciBydXRhID0gcHJlZmlqbyArIG9wY2lvbi5uYW1lO1xuICAgICAgICB2YXIgY29udGVuaWRvOiBNZW51SW5mb0Jhc2VbXSA9IG9wY2lvbi5tZW51VHlwZSA9PSAnbWVudScgPyBvcGNpb24ubWVudUNvbnRlbnQgOiBbXTtcbiAgICAgICAgdmFyIHRlbWEgPSB0ZW1hcy5maW5kKHRlbWEgPT4gdGVtYS5tZW51LmluY2x1ZGVzKHJ1dGEpKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJ1dGEsXG4gICAgICAgICAgICBsYWJlbDogb3BjaW9uLmxhYmVsID8/IG9wY2lvbi5uYW1lLnJlcGxhY2UoL18vZywgJyAnKSxcbiAgICAgICAgICAgIHRlbWE6IHRlbWE/LmlkID8/IG51bGwsXG4gICAgICAgICAgICBvcGNpb25lczogbWVudUNvbkF5dWRhKGNvbnRlbmlkbywgdGVtYXMsIHJ1dGEgKyAnLycpLFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG4vLyBydXRhcyBkZSB0b2RhcyBsYXMgb3BjaW9uZXMgZGUgdW4gbWVuw7ogKHBhcmEgdmFsaWRhciBsYXMgcXVlIG1lbmNpb25hbiBsb3MgdGVtYXMpXG5leHBvcnQgZnVuY3Rpb24gcnV0YXNEZWxNZW51KG1lbnU6IE1lbnVJbmZvQmFzZVtdLCBwcmVmaWpvOiBzdHJpbmcgPSAnJyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gbWVudS5yZWR1Y2UoKHJ1dGFzOiBzdHJpbmdbXSwgb3BjaW9uKSA9PiB7XG4gICAgICAgIHZhciBjb250ZW5pZG86IE1lbnVJbmZvQmFzZVtdID0gb3BjaW9uLm1lbnVUeXBlID09ICdtZW51JyA/IG9wY2lvbi5tZW51Q29udGVudCA6IFtdO1xuICAgICAgICByZXR1cm4gcnV0YXMuY29uY2F0KHByZWZpam8gKyBvcGNpb24ubmFtZSwgcnV0YXNEZWxNZW51KGNvbnRlbmlkbywgcHJlZmlqbyArIG9wY2lvbi5uYW1lICsgJy8nKSk7XG4gICAgfSwgW10pO1xufVxuXG4vLyBwcm9ibGVtYXMgcXVlIG5vIGltcGlkZW4gbW9zdHJhciBsYSBheXVkYSBwZXJvIGluZGljYW4gdW4gZXJyb3IgZW4gbG9zIHRlbWFzOlxuLy8gcGVybWlzb3MgbyByb2xlcyBxdWUgbm8gZXhpc3RlbiB5IG9wY2lvbmVzIGRlIG1lbsO6IHF1ZSBuYWRpZSB2ZVxuZXhwb3J0IGZ1bmN0aW9uIHByb2JsZW1hc0RlQXl1ZGEodGVtYXM6IEF5dWRhVGVtYVtdLCBwZXJtaXNvc0V4aXN0ZW50ZXM6IFB1ZWRlLCByb2xlc0V4aXN0ZW50ZXM6IHN0cmluZ1tdLCBydXRhc0V4aXN0ZW50ZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgIHZhciBwcm9ibGVtYXM6IHN0cmluZ1tdID0gW107XG4gICAgdGVtYXMuZm9yRWFjaCh0ZW1hID0+IHtcbiAgICAgICAgdGVtYS5wZXJtaXNvcy5maWx0ZXIocGVybWlzbyA9PiAhdGllbmVQZXJtaXNvKHBlcm1pc29zRXhpc3RlbnRlcywgcGVybWlzbykpXG4gICAgICAgICAgICAuZm9yRWFjaChwZXJtaXNvID0+IHByb2JsZW1hcy5wdXNoKGBheXVkYSAke3RlbWEuYXJjaGl2b306IG5vIGV4aXN0ZSBlbCBwZXJtaXNvICR7cGVybWlzb31gKSk7XG4gICAgICAgIHRlbWEucm9sZXMuZmlsdGVyKHJvbCA9PiAhcm9sZXNFeGlzdGVudGVzLmluY2x1ZGVzKHJvbCkpXG4gICAgICAgICAgICAuZm9yRWFjaChyb2wgPT4gcHJvYmxlbWFzLnB1c2goYGF5dWRhICR7dGVtYS5hcmNoaXZvfTogbm8gZXhpc3RlIGVsIHJvbCAke3JvbH1gKSk7XG4gICAgICAgIHRlbWEubWVudS5maWx0ZXIocnV0YSA9PiAhcnV0YXNFeGlzdGVudGVzLmluY2x1ZGVzKHJ1dGEpKVxuICAgICAgICAgICAgLmZvckVhY2gocnV0YSA9PiBwcm9ibGVtYXMucHVzaChgYXl1ZGEgJHt0ZW1hLmFyY2hpdm99OiBuaW5nw7puIHJvbCB0aWVuZSBsYSBvcGNpw7NuIGRlIG1lbsO6ICR7cnV0YX1gKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb2JsZW1hcztcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const defConfig = "\nserver:\n port: 3068\n base-url: /dmencu\n session-store: memory-saved\n skins:\n \"\":\n local-path: client/\n modern:\n local-path: node_modules/backend-skins/dist/\ndb:\n user: dmencu_admin\n motor: postgresql\n host: localhost\n database: dmencu_db\n schema: base\n search_path: [base, comun, his]\ninstall:\n dump:\n db:\n owner: dmencu_owner\n apply-generic-user-replaces: true\n admin-can-create-tables: true\n enances: inline\n skip-content: true\n scripts:\n prepare:\n - ../node_modules/operativos/install/rel_tabla_relacionada.sql\n - esquema_comun.sql\n - esquema_comun_sin_dato.sql\n - esquema_comun_nsnc.sql\n - ../node_modules/meta-enc/install/prepare.sql\n - ../node_modules/varcal/install/wrappers.sql\n - ../node_modules/operativos/install/sql2tabla_datos.sql\n post-adapt: \n - para-install.sql\n - ../node_modules/pg-triggers/lib/recreate-his.sql\n - ../node_modules/pg-triggers/lib/table-changes.sql\n - ../node_modules/pg-triggers/lib/function-changes-trg.sql\n - ../node_modules/pg-triggers/lib/enance.sql\n - ../node_modules/datos-ext/install/controlar_modificacion_estructura_cerrada.sql\n - ../node_modules/meta-enc/install/casilleros_orden_total_fun.sql\n - ../node_modules/meta-enc/install/casilleros_jerarquizados_fun.sql\n - ../node_modules/consistencias/install/try_sql.sql\n - esquema_dbo.sql \n - varcal_manual/estructura.sql\n - varcal_manual/funcion_update.sql\n - fun_validar_tipodato.sql\n - desintegrarpk.sql\n - agregar_adjunto_carto_trg\n - sincro_tareas_areas_tareas_tem_trg.sql\n - sincronizacion_tareas_tem.sql\n - sincronizacion_tem.sql\n - control_disform_cerrado_trg.sql\n - control_cargado_tareas_tem_trg.sql\n - generador_accion_cumple_condicion.sql\n - tarea_cumple_condicion.sql\n - momento_consistencia_cumple_condicion.sql\n - agregar_historial_tem_trg.sql\n - carga_inicial_tareas_tem.sql\n - validar_tareas_tem_trg.sql\n - asignar_desasignar_tareas_tem_trg.sql\n - desverificar_tarea_trg.sql\n - inicial_update_varcal_por_encuesta.sql\n - diccionario_func.sql\n - obtener_siguiente_contador_area.sql\nlogin:\n infoFieldList: [usuario, rol, idper, muestra_encuestas_prod, muestra_encuestas_capa]\n table: usuarios\n userFieldName: usuario\n passFieldName: md5clave\n rolFieldName: rol\n activeClausule: activo\n lockedClausule: not activo\n plus:\n maxAge-5-sec: 5000 \n maxAge: 864000000\n maxAge-10-day: 864000000\n allowHttpLogin: true\n fileStore: false\n skipCheckAlreadyLoggedIn: true\n loginForm:\n formTitle: dmencu\n usernameLabel: usuario\n passwordLabel: clave\n buttonLabel: entrar\n formImg: img/login-lock-icon.png\n chPassForm:\n usernameLabel: usuario\n oldPasswordLabel: clave anterior\n newPasswordLabel: nueva clave\n repPasswordLabel: repetir nueva clave\n buttonLabel: Cambiar\n formTitle: Cambio de clave\n messages:\n userOrPassFail: el nombre de usuario no existe o la clave no corresponde\n lockedFail: el usuario se encuentra bloqueado\n inactiveFail: es usuario est\u00E1 marcado como inactivo\nclient-setup:\n title: SIEH 2.0\n cursors: true\n lang: es\n menu: true\n background-img: ../img/background-test.png\n grid-row-retain-moved-or-deleted: true\n deviceWidthForMobile: device-width\n user-scalable: no\n skin: modern\n";
|
|
1
|
+
export declare const defConfig = "\nserver:\n port: 3068\n base-url: /dmencu\n session-store: memory-saved\n skins:\n \"\":\n local-path: client/\n modern:\n local-path: node_modules/backend-skins/dist/\ndb:\n user: dmencu_admin\n motor: postgresql\n host: localhost\n database: dmencu_db\n schema: base\n search_path: [base, comun, his]\ninstall:\n dump:\n db:\n owner: dmencu_owner\n apply-generic-user-replaces: true\n admin-can-create-tables: true\n enances: inline\n skip-content: true\n scripts:\n prepare:\n - ../node_modules/operativos/install/rel_tabla_relacionada.sql\n - esquema_comun.sql\n - esquema_comun_sin_dato.sql\n - esquema_comun_nsnc.sql\n - ../node_modules/meta-enc/install/prepare.sql\n - ../node_modules/varcal/install/wrappers.sql\n - ../node_modules/operativos/install/sql2tabla_datos.sql\n post-adapt: \n - para-install.sql\n - ../node_modules/pg-triggers/lib/recreate-his.sql\n - ../node_modules/pg-triggers/lib/table-changes.sql\n - ../node_modules/pg-triggers/lib/function-changes-trg.sql\n - ../node_modules/pg-triggers/lib/enance.sql\n - ../node_modules/datos-ext/install/controlar_modificacion_estructura_cerrada.sql\n - ../node_modules/meta-enc/install/casilleros_orden_total_fun.sql\n - ../node_modules/meta-enc/install/casilleros_jerarquizados_fun.sql\n - ../node_modules/consistencias/install/try_sql.sql\n - esquema_dbo.sql \n - varcal_manual/estructura.sql\n - varcal_manual/funcion_update.sql\n - fun_validar_tipodato.sql\n - desintegrarpk.sql\n - agregar_adjunto_carto_trg\n - sincro_tareas_areas_tareas_tem_trg.sql\n - sincronizacion_tareas_tem.sql\n - sincronizacion_tem.sql\n - control_disform_cerrado_trg.sql\n - control_cargado_tareas_tem_trg.sql\n - generador_accion_cumple_condicion.sql\n - tarea_cumple_condicion.sql\n - momento_consistencia_cumple_condicion.sql\n - agregar_historial_tem_trg.sql\n - carga_inicial_tareas_tem.sql\n - validar_tareas_tem_trg.sql\n - validar_manzana_casa_tem_trg.sql\n - asignar_desasignar_tareas_tem_trg.sql\n - desverificar_tarea_trg.sql\n - inicial_update_varcal_por_encuesta.sql\n - diccionario_func.sql\n - obtener_siguiente_contador_area.sql\nlogin:\n infoFieldList: [usuario, rol, idper, muestra_encuestas_prod, muestra_encuestas_capa]\n table: usuarios\n userFieldName: usuario\n passFieldName: md5clave\n rolFieldName: rol\n activeClausule: activo\n lockedClausule: not activo\n plus:\n maxAge-5-sec: 5000 \n maxAge: 864000000\n maxAge-10-day: 864000000\n allowHttpLogin: true\n fileStore: false\n skipCheckAlreadyLoggedIn: true\n loginForm:\n formTitle: dmencu\n usernameLabel: usuario\n passwordLabel: clave\n buttonLabel: entrar\n formImg: img/login-lock-icon.png\n chPassForm:\n usernameLabel: usuario\n oldPasswordLabel: clave anterior\n newPasswordLabel: nueva clave\n repPasswordLabel: repetir nueva clave\n buttonLabel: Cambiar\n formTitle: Cambio de clave\n messages:\n userOrPassFail: el nombre de usuario no existe o la clave no corresponde\n lockedFail: el usuario se encuentra bloqueado\n inactiveFail: es usuario est\u00E1 marcado como inactivo\nclient-setup:\n title: SIEH 2.0\n cursors: true\n lang: es\n menu: true\n background-img: ../img/background-test.png\n grid-row-retain-moved-or-deleted: true\n deviceWidthForMobile: device-width\n user-scalable: no\n skin: modern\n";
|
|
@@ -71,6 +71,7 @@ install:
|
|
|
71
71
|
- agregar_historial_tem_trg.sql
|
|
72
72
|
- carga_inicial_tareas_tem.sql
|
|
73
73
|
- validar_tareas_tem_trg.sql
|
|
74
|
+
- validar_manzana_casa_tem_trg.sql
|
|
74
75
|
- asignar_desasignar_tareas_tem_trg.sql
|
|
75
76
|
- desverificar_tarea_trg.sql
|
|
76
77
|
- inicial_update_varcal_por_encuesta.sql
|
|
@@ -120,4 +121,4 @@ client-setup:
|
|
|
120
121
|
skin: modern
|
|
121
122
|
`;
|
|
122
123
|
});
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2ZXIvZGVmLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFBYSxRQUFBLFNBQVMsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTZHeEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBkZWZDb25maWcgPSBgXHJcbnNlcnZlcjpcclxuICBwb3J0OiAzMDY4XHJcbiAgYmFzZS11cmw6IC9kbWVuY3VcclxuICBzZXNzaW9uLXN0b3JlOiBtZW1vcnktc2F2ZWRcclxuICBza2luczpcclxuICAgIFwiXCI6XHJcbiAgICAgIGxvY2FsLXBhdGg6IGNsaWVudC9cclxuICAgIG1vZGVybjpcclxuICAgICAgbG9jYWwtcGF0aDogbm9kZV9tb2R1bGVzL2JhY2tlbmQtc2tpbnMvZGlzdC9cclxuZGI6XHJcbiAgdXNlcjogZG1lbmN1X2FkbWluXHJcbiAgbW90b3I6IHBvc3RncmVzcWxcclxuICBob3N0OiBsb2NhbGhvc3RcclxuICBkYXRhYmFzZTogZG1lbmN1X2RiXHJcbiAgc2NoZW1hOiBiYXNlXHJcbiAgc2VhcmNoX3BhdGg6IFtiYXNlLCBjb211biwgaGlzXVxyXG5pbnN0YWxsOlxyXG4gIGR1bXA6XHJcbiAgICBkYjpcclxuICAgICAgb3duZXI6IGRtZW5jdV9vd25lclxyXG4gICAgICBhcHBseS1nZW5lcmljLXVzZXItcmVwbGFjZXM6IHRydWVcclxuICAgIGFkbWluLWNhbi1jcmVhdGUtdGFibGVzOiB0cnVlXHJcbiAgICBlbmFuY2VzOiBpbmxpbmVcclxuICAgIHNraXAtY29udGVudDogdHJ1ZVxyXG4gICAgc2NyaXB0czpcclxuICAgICAgcHJlcGFyZTpcclxuICAgICAgLSAuLi9ub2RlX21vZHVsZXMvb3BlcmF0aXZvcy9pbnN0YWxsL3JlbF90YWJsYV9yZWxhY2lvbmFkYS5zcWxcclxuICAgICAgLSBlc3F1ZW1hX2NvbXVuLnNxbFxyXG4gICAgICAtIGVzcXVlbWFfY29tdW5fc2luX2RhdG8uc3FsXHJcbiAgICAgIC0gZXNxdWVtYV9jb211bl9uc25jLnNxbFxyXG4gICAgICAtIC4uL25vZGVfbW9kdWxlcy9tZXRhLWVuYy9pbnN0YWxsL3ByZXBhcmUuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL3ZhcmNhbC9pbnN0YWxsL3dyYXBwZXJzLnNxbFxyXG4gICAgICAtIC4uL25vZGVfbW9kdWxlcy9vcGVyYXRpdm9zL2luc3RhbGwvc3FsMnRhYmxhX2RhdG9zLnNxbFxyXG4gICAgICBwb3N0LWFkYXB0OiBcclxuICAgICAgLSBwYXJhLWluc3RhbGwuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL3BnLXRyaWdnZXJzL2xpYi9yZWNyZWF0ZS1oaXMuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL3BnLXRyaWdnZXJzL2xpYi90YWJsZS1jaGFuZ2VzLnNxbFxyXG4gICAgICAtIC4uL25vZGVfbW9kdWxlcy9wZy10cmlnZ2Vycy9saWIvZnVuY3Rpb24tY2hhbmdlcy10cmcuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL3BnLXRyaWdnZXJzL2xpYi9lbmFuY2Uuc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL2RhdG9zLWV4dC9pbnN0YWxsL2NvbnRyb2xhcl9tb2RpZmljYWNpb25fZXN0cnVjdHVyYV9jZXJyYWRhLnNxbFxyXG4gICAgICAtIC4uL25vZGVfbW9kdWxlcy9tZXRhLWVuYy9pbnN0YWxsL2Nhc2lsbGVyb3Nfb3JkZW5fdG90YWxfZnVuLnNxbFxyXG4gICAgICAtIC4uL25vZGVfbW9kdWxlcy9tZXRhLWVuYy9pbnN0YWxsL2Nhc2lsbGVyb3NfamVyYXJxdWl6YWRvc19mdW4uc3FsXHJcbiAgICAgIC0gLi4vbm9kZV9tb2R1bGVzL2NvbnNpc3RlbmNpYXMvaW5zdGFsbC90cnlfc3FsLnNxbFxyXG4gICAgICAtIGVzcXVlbWFfZGJvLnNxbCBcclxuICAgICAgLSB2YXJjYWxfbWFudWFsL2VzdHJ1Y3R1cmEuc3FsXHJcbiAgICAgIC0gdmFyY2FsX21hbnVhbC9mdW5jaW9uX3VwZGF0ZS5zcWxcclxuICAgICAgLSBmdW5fdmFsaWRhcl90aXBvZGF0by5zcWxcclxuICAgICAgLSBkZXNpbnRlZ3JhcnBrLnNxbFxyXG4gICAgICAtIGFncmVnYXJfYWRqdW50b19jYXJ0b190cmdcclxuICAgICAgLSBzaW5jcm9fdGFyZWFzX2FyZWFzX3RhcmVhc190ZW1fdHJnLnNxbFxyXG4gICAgICAtIHNpbmNyb25pemFjaW9uX3RhcmVhc190ZW0uc3FsXHJcbiAgICAgIC0gc2luY3Jvbml6YWNpb25fdGVtLnNxbFxyXG4gICAgICAtIGNvbnRyb2xfZGlzZm9ybV9jZXJyYWRvX3RyZy5zcWxcclxuICAgICAgLSBjb250cm9sX2NhcmdhZG9fdGFyZWFzX3RlbV90cmcuc3FsXHJcbiAgICAgIC0gZ2VuZXJhZG9yX2FjY2lvbl9jdW1wbGVfY29uZGljaW9uLnNxbFxyXG4gICAgICAtIHRhcmVhX2N1bXBsZV9jb25kaWNpb24uc3FsXHJcbiAgICAgIC0gbW9tZW50b19jb25zaXN0ZW5jaWFfY3VtcGxlX2NvbmRpY2lvbi5zcWxcclxuICAgICAgLSBhZ3JlZ2FyX2hpc3RvcmlhbF90ZW1fdHJnLnNxbFxyXG4gICAgICAtIGNhcmdhX2luaWNpYWxfdGFyZWFzX3RlbS5zcWxcclxuICAgICAgLSB2YWxpZGFyX3RhcmVhc190ZW1fdHJnLnNxbFxyXG4gICAgICAtIHZhbGlkYXJfbWFuemFuYV9jYXNhX3RlbV90cmcuc3FsXHJcbiAgICAgIC0gYXNpZ25hcl9kZXNhc2lnbmFyX3RhcmVhc190ZW1fdHJnLnNxbFxyXG4gICAgICAtIGRlc3ZlcmlmaWNhcl90YXJlYV90cmcuc3FsXHJcbiAgICAgIC0gaW5pY2lhbF91cGRhdGVfdmFyY2FsX3Bvcl9lbmN1ZXN0YS5zcWxcclxuICAgICAgLSBkaWNjaW9uYXJpb19mdW5jLnNxbFxyXG4gICAgICAtIG9idGVuZXJfc2lndWllbnRlX2NvbnRhZG9yX2FyZWEuc3FsXHJcbmxvZ2luOlxyXG4gIGluZm9GaWVsZExpc3Q6IFt1c3VhcmlvLCByb2wsIGlkcGVyLCBtdWVzdHJhX2VuY3Vlc3Rhc19wcm9kLCBtdWVzdHJhX2VuY3Vlc3Rhc19jYXBhXVxyXG4gIHRhYmxlOiB1c3Vhcmlvc1xyXG4gIHVzZXJGaWVsZE5hbWU6IHVzdWFyaW9cclxuICBwYXNzRmllbGROYW1lOiBtZDVjbGF2ZVxyXG4gIHJvbEZpZWxkTmFtZTogcm9sXHJcbiAgYWN0aXZlQ2xhdXN1bGU6IGFjdGl2b1xyXG4gIGxvY2tlZENsYXVzdWxlOiBub3QgYWN0aXZvXHJcbiAgcGx1czpcclxuICAgIG1heEFnZS01LXNlYzogNTAwMCAgICBcclxuICAgIG1heEFnZTogODY0MDAwMDAwXHJcbiAgICBtYXhBZ2UtMTAtZGF5OiA4NjQwMDAwMDBcclxuICAgIGFsbG93SHR0cExvZ2luOiB0cnVlXHJcbiAgICBmaWxlU3RvcmU6IGZhbHNlXHJcbiAgICBza2lwQ2hlY2tBbHJlYWR5TG9nZ2VkSW46IHRydWVcclxuICAgIGxvZ2luRm9ybTpcclxuICAgICAgZm9ybVRpdGxlOiBkbWVuY3VcclxuICAgICAgdXNlcm5hbWVMYWJlbDogdXN1YXJpb1xyXG4gICAgICBwYXNzd29yZExhYmVsOiBjbGF2ZVxyXG4gICAgICBidXR0b25MYWJlbDogZW50cmFyXHJcbiAgICAgIGZvcm1JbWc6IGltZy9sb2dpbi1sb2NrLWljb24ucG5nXHJcbiAgICBjaFBhc3NGb3JtOlxyXG4gICAgICB1c2VybmFtZUxhYmVsOiB1c3VhcmlvXHJcbiAgICAgIG9sZFBhc3N3b3JkTGFiZWw6IGNsYXZlIGFudGVyaW9yXHJcbiAgICAgIG5ld1Bhc3N3b3JkTGFiZWw6IG51ZXZhIGNsYXZlXHJcbiAgICAgIHJlcFBhc3N3b3JkTGFiZWw6IHJlcGV0aXIgbnVldmEgY2xhdmVcclxuICAgICAgYnV0dG9uTGFiZWw6IENhbWJpYXJcclxuICAgICAgZm9ybVRpdGxlOiBDYW1iaW8gZGUgY2xhdmVcclxuICBtZXNzYWdlczpcclxuICAgIHVzZXJPclBhc3NGYWlsOiBlbCBub21icmUgZGUgdXN1YXJpbyBubyBleGlzdGUgbyBsYSBjbGF2ZSBubyBjb3JyZXNwb25kZVxyXG4gICAgbG9ja2VkRmFpbDogZWwgdXN1YXJpbyBzZSBlbmN1ZW50cmEgYmxvcXVlYWRvXHJcbiAgICBpbmFjdGl2ZUZhaWw6IGVzIHVzdWFyaW8gZXN0w6EgbWFyY2FkbyBjb21vIGluYWN0aXZvXHJcbmNsaWVudC1zZXR1cDpcclxuICB0aXRsZTogU0lFSCAyLjBcclxuICBjdXJzb3JzOiB0cnVlXHJcbiAgbGFuZzogZXNcclxuICBtZW51OiB0cnVlXHJcbiAgYmFja2dyb3VuZC1pbWc6IC4uL2ltZy9iYWNrZ3JvdW5kLXRlc3QucG5nXHJcbiAgZ3JpZC1yb3ctcmV0YWluLW1vdmVkLW9yLWRlbGV0ZWQ6IHRydWVcclxuICBkZXZpY2VXaWR0aEZvck1vYmlsZTogZGV2aWNlLXdpZHRoXHJcbiAgdXNlci1zY2FsYWJsZTogbm9cclxuICBza2luOiBtb2Rlcm5cclxuYCJdfQ==
|