dmencu 2.2.15 → 2.3.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/dist/client/client/client.js +15 -14
- package/dist/client/unlogged/bypass-formulario.d.ts +0 -1
- package/dist/client/unlogged/bypass-formulario.js +19 -10
- package/dist/client/unlogged/redux-formulario.d.ts +2 -4
- package/dist/client/unlogged/redux-formulario.js +19 -24
- package/dist/client/unlogged/render-config.d.ts +14 -0
- package/dist/client/unlogged/render-config.js +25 -0
- package/dist/client/unlogged/render-formulario.tsx +7 -7
- package/dist/client/unlogged/render-init.d.ts +1 -0
- package/dist/client/unlogged/render-init.js +49 -0
- package/dist/server/server/app-dmencu.js +5 -1
- package/dist/unlogged/unlogged/bypass-formulario.d.ts +0 -1
- package/dist/unlogged/unlogged/bypass-formulario.js +19 -10
- package/dist/unlogged/unlogged/redux-formulario.d.ts +2 -4
- package/dist/unlogged/unlogged/redux-formulario.js +19 -24
- package/dist/unlogged/unlogged/render-config copy.d.ts +11 -0
- package/dist/unlogged/unlogged/render-config copy.js +22 -0
- package/dist/unlogged/unlogged/render-config.d.ts +14 -0
- package/dist/unlogged/unlogged/render-config.js +25 -0
- package/dist/unlogged/unlogged/render-formulario.js +8 -7
- package/dist/unlogged/unlogged/render-formulario.tsx +7 -7
- package/dist/unlogged/unlogged/render-init.d.ts +1 -0
- package/dist/unlogged/unlogged/render-init.js +49 -0
- package/dist/unlogged/unlogged/tipos copy.d.ts +0 -0
- package/dist/unlogged/unlogged/tipos copy.js +2 -0
- package/dist/unlogged/unlogged/unlogged.js +8 -6
- package/package.json +1 -1
|
@@ -13,12 +13,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
13
13
|
if (v !== undefined) module.exports = v;
|
|
14
14
|
}
|
|
15
15
|
else if (typeof define === "function" && define.amd) {
|
|
16
|
-
define(["require", "exports", "like-ar", "row-validator", "best-globals", "cast-error", "./tipos"], factory);
|
|
16
|
+
define(["require", "exports", "like-ar", "row-validator", "best-globals", "cast-error", "./tipos", "./render-config"], factory);
|
|
17
17
|
}
|
|
18
18
|
})(function (require, exports) {
|
|
19
19
|
"use strict";
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.calcularPermiteBorrarBF = exports.calcularDisabledBF = exports.calcularActualBF = exports.getFormulariosForValuePkRaiz = exports.buscarFormulariosHijos = exports.getMainFormForVivienda = exports.setCalculoReaNoRea = exports.defOperativo = exports.buscarNoReaEnRespuestas = exports.getFuncionValorar = exports.getFuncionHabilitar = exports.helpersCasilleros = exports.MAXCP = exports.ultimaVaribleVivienda = exports.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO = exports.NO_CAMBIAR__SOLO_TRAER_STATUS = exports.getDatosByPass = exports.intentarBackup = exports.crearEncuesta =
|
|
21
|
+
exports.calcularPermiteBorrarBF = exports.calcularDisabledBF = exports.calcularActualBF = exports.getFormulariosForValuePkRaiz = exports.buscarFormulariosHijos = exports.getMainFormForVivienda = exports.setCalculoReaNoRea = exports.defOperativo = exports.buscarNoReaEnRespuestas = exports.getFuncionValorar = exports.getFuncionHabilitar = exports.helpersCasilleros = exports.MAXCP = exports.ultimaVaribleVivienda = exports.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO = exports.NO_CAMBIAR__SOLO_TRAER_STATUS = exports.getDatosByPass = exports.intentarBackup = exports.crearEncuesta = void 0;
|
|
22
22
|
exports.setCalcularVariables = setCalcularVariables;
|
|
23
23
|
exports.setCalcularVariablesEspecificasOperativo = setCalcularVariablesEspecificasOperativo;
|
|
24
24
|
exports.setPersistirDatosByPass = setPersistirDatosByPass;
|
|
@@ -59,7 +59,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
59
59
|
const best_globals_1 = require("best-globals");
|
|
60
60
|
const cast_error_1 = require("cast-error");
|
|
61
61
|
const tipos_1 = require("./tipos");
|
|
62
|
-
|
|
62
|
+
const render_config_1 = require("./render-config");
|
|
63
63
|
var especiales = {};
|
|
64
64
|
function setCalcularVariables(calcularVariables) {
|
|
65
65
|
especiales.calcularVariables = calcularVariables;
|
|
@@ -68,6 +68,16 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
68
68
|
especiales.calcularVariablesEspecificasOperativo = calcularVariablesEspecificasOperativo;
|
|
69
69
|
}
|
|
70
70
|
var datosByPass = {};
|
|
71
|
+
function getRect(element) {
|
|
72
|
+
var rect = { top: 0, left: 0, width: element.offsetWidth, height: element.offsetHeight };
|
|
73
|
+
var current = element;
|
|
74
|
+
while (current != null) {
|
|
75
|
+
rect.top += current.offsetTop;
|
|
76
|
+
rect.left += current.offsetLeft;
|
|
77
|
+
current = current.offsetParent;
|
|
78
|
+
}
|
|
79
|
+
return rect;
|
|
80
|
+
}
|
|
71
81
|
//@ts-ignore arranca en blanco
|
|
72
82
|
var estructura = null;
|
|
73
83
|
let persistirDatosByPassInterno = () => {
|
|
@@ -84,10 +94,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
84
94
|
});
|
|
85
95
|
}
|
|
86
96
|
const crearEncuesta = (idCarga, callBack) => {
|
|
87
|
-
const
|
|
88
|
-
const NEXT_AUTO_VALUE_PK_RAIZ = my.getLocalVar(LAST_AUTO_VALUE_PK_RAIZ) || '-1';
|
|
97
|
+
const NEXT_AUTO_VALUE_PK_RAIZ = (0, render_config_1.getFormularioConfig)().getUltimoValorPkRaiz() || '-1';
|
|
89
98
|
const estructura = getEstructura();
|
|
90
|
-
|
|
99
|
+
(0, render_config_1.getFormularioConfig)().setUltimoValorPkRaiz((Number(NEXT_AUTO_VALUE_PK_RAIZ) - 1).toString());
|
|
91
100
|
datosByPass.respuestas[estructura.uaPpal][NEXT_AUTO_VALUE_PK_RAIZ] = {};
|
|
92
101
|
datosByPass.informacionHdr[NEXT_AUTO_VALUE_PK_RAIZ] = Object.assign(Object.assign({}, estructura.defaultInformacionHdr), { tem: Object.assign({}, estructura.defaultInformacionHdr.tem) });
|
|
93
102
|
datosByPass.informacionHdr[NEXT_AUTO_VALUE_PK_RAIZ].tem.carga = idCarga;
|
|
@@ -275,10 +284,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
275
284
|
elementoEntero = elemento;
|
|
276
285
|
if (rectElementoEntero == null) {
|
|
277
286
|
elementoSuperior = elementoEntero;
|
|
278
|
-
rectElementoEntero =
|
|
287
|
+
rectElementoEntero = getRect(elementoEntero);
|
|
279
288
|
rectElementoSuperior = rectElementoEntero;
|
|
280
289
|
}
|
|
281
|
-
var rect =
|
|
290
|
+
var rect = getRect(elemento);
|
|
282
291
|
if (rectElementoEntero.top + rectElementoEntero.height - rect.top < altoPantalla) {
|
|
283
292
|
elementoSuperior = elemento;
|
|
284
293
|
rectElementoSuperior = rect;
|
|
@@ -296,7 +305,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
296
305
|
var result = {};
|
|
297
306
|
if (elementoEntero != null) {
|
|
298
307
|
if (rectElementoEntero == null) {
|
|
299
|
-
rectElementoEntero =
|
|
308
|
+
rectElementoEntero = getRect(elementoEntero);
|
|
300
309
|
}
|
|
301
310
|
result.elementoInputVariable = elementoVariableAEnfocar;
|
|
302
311
|
var top = (rectElementoSuperior !== null && rectElementoSuperior !== void 0 ? rectElementoSuperior : rectElementoEntero).top - MARGEN_SCROLL;
|
|
@@ -1124,4 +1133,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
1124
1133
|
return resultado;
|
|
1125
1134
|
}
|
|
1126
1135
|
});
|
|
1127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBcUNBLG9EQUVDO0lBRUQsNEZBRUM7SUFrQkQsMERBRUM7SUFFRCxvREFJQztJQXVCRCw0Q0FJQztJQWdCRCxzQ0FVQztJQUVELHdDQU9DO0lBV0QsMERBS0M7SUFFRCw0QkFFQztJQUVELHNDQUVDO0lBa0NELDhDQUlDO0lBTUQsMENBaURDO0lBRUQsZ0ZBdUNDO0lBRUQsNERBb0VDO0lBRUQsMENBUUM7SUFFRCw0Q0FRQztJQWtCRCxnREFDQztJQWNELGdFQXlEQztJQUVELHNEQUdDO0lBRUQsc0RBRUM7SUFFRCwwREFFQztJQUVELG9EQUVDO0lBRUQsOERBTUM7SUFFRCwwREFNQztJQUVELDREQWVDO0lBR0Qsd0NBS0M7SUFvSkQsa0RBZ0JDO0lBRUQsa0RBMEJDO0lBc0hELDBDQWtJQztJQWdDRCxzREFLQztJQUVELHdFQWdGQztJQUVELDREQU1DO0lBTUQsZ0VBaUJDO0lBRUQsNERBU0M7SUF5RkQsMERBZ0dDO0lBanlDRCxxQ0FBdUQ7SUFFdkQsaURBQW9HO0lBRXBHLCtDQUErRDtJQUMvRCwyQ0FBc0M7SUFFdEMsbUNBc0JpQjtJQUVKLFFBQUEsd0JBQXdCLEdBQUcsU0FBUyxDQUFDO0lBRWxELElBQUksVUFBVSxHQUFHLEVBR2hCLENBQUE7SUFDRCxTQUFnQixvQkFBb0IsQ0FBQyxpQkFBeUU7UUFDMUcsVUFBVSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO0lBQ3BELENBQUM7SUFFRCxTQUFnQix3Q0FBd0MsQ0FBQyxxQ0FBNkY7UUFDbEosVUFBVSxDQUFDLHFDQUFxQyxHQUFHLHFDQUFxQyxDQUFBO0lBQzVGLENBQUM7SUFTRCxJQUFJLFdBQVcsR0FBRyxFQUFpQixDQUFBO0lBRW5DLDhCQUE4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LEtBQUssQ0FBQywrQ0FBK0MsRUFBRSxDQUFDO2dCQUN4RCxVQUFVLEdBQUcsY0FBYyxDQUFDO1lBQ2hDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixVQUFVLEdBQUcsWUFBWSxDQUFDO1lBQzlCLENBQUM7UUFDTCxDQUFDO1FBRUQsd0NBQXdDO1FBQ3hDLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDL0csSUFBSSxhQUE0QixDQUFDO1FBQ2pDLElBQUksZ0JBQWdCLEdBQWtCLE9BQU8sQ0FBQztRQUM5QyxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNsQixnQkFBZ0IsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFBO1lBQ3JELHFFQUFxRTtZQUNyRSxhQUFhLEdBQUcsZ0JBQWdCLENBQUE7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDSixhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtRQUNuRCxDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQXFCO1lBQzlCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsTUFBTTtZQUNOLFFBQVE7WUFDUixTQUFTO1lBQ1QsV0FBVztTQUNkLENBQUE7UUFDRCxPQUFPLFNBQVMsQ0FBQTtJQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRSb3dWYWxpZGF0b3IsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSwgT3BjaW9uZXNSb3dWYWxpZGF0b3IsIEZlZWRiYWNrIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbmltcG9ydCB7IGRhdGUsIGNvbXBhcmVGb3JPcmRlciwgY29hbGVzY2UgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IGV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBFc3RydWN0dXJhLFxyXG4gICAgRm9yUGssIEZvclBrUmFpeixcclxuICAgIElkRmluLCBJZEZvcm11bGFyaW8sIElkUHJlZ3VudGEsIElkVGFyZWEsIElkVmFyaWFibGUsXHJcbiAgICBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgSW5mb0Zvcm11bGFyaW8sXHJcbiAgICBQbGFpbkZvclBrLCBSZXNwdWVzdGFzLCBSZXNwdWVzdGFzUmFpeiwgUmVzdW1lbkVzdGFkbyxcclxuICAgIFZhbG9yLCBWaXNpdGEsXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBVbmlkYWRBbmFsaXNpcyxcclxuICAgIEZvcm11bGFyaW8sXHJcbiAgICBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzLFxyXG4gICAgSWRFbmMsXHJcbiAgICBEZWZPcGVyYXRpdm8sXHJcbiAgICBpdGVyYXRvcixcclxuICAgIENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8sXHJcbiAgICBDYW1wb1BrLFxyXG4gICAgSWRDYXJnYSxcclxuICAgIENhcmdhLFxyXG4gICAgQ2FtcG9Qa1JhaXosXHJcbiAgICBWYWx1ZVBrUmFpelxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcblxyXG5leHBvcnQgY29uc3QgTU9ET19ETV9MT0NBTFNUT1JBR0VfS0VZID0gJ21vZG9fZG0nO1xyXG5cclxudmFyIGVzcGVjaWFsZXMgPSB7fSBhcyB7XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlcz86IChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOiBGb3JQaykgPT4gdm9pZFxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bz86IChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOiBGb3JQaykgPT4gdm9pZFxyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlcyhjYWxjdWxhclZhcmlhYmxlczogKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6IEZvclBrKSA9PiB2b2lkKSB7XHJcbiAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzID0gY2FsY3VsYXJWYXJpYWJsZXNcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8oY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bzogKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6IEZvclBrKSA9PiB2b2lkKSB7XHJcbiAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8gPSBjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvXHJcbn1cclxuXHJcbnR5cGUgRGF0b3NCeVBhc3MgPSBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyAmIHtcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7ICAvLyBubyBzZSBwZXJzaXN0ZVxyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgfVxyXG4gICAgZGlydHk6IGJvb2xlYW5cclxufTtcclxuXHJcbnZhciBkYXRvc0J5UGFzcyA9IHt9IGFzIERhdG9zQnlQYXNzXHJcblxyXG4vL0B0cy1pZ25vcmUgYXJyYW5jYSBlbiBibGFuY29cclxudmFyIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmEgPSBudWxsIGFzIEVzdHJ1Y3R1cmE7XHJcblxyXG5sZXQgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vOiAoZGJwcDogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpID0+IFByb21pc2U8YW55PiA9ICgpID0+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcigncGVyc2lzdGlyRGF0b3NCeVBhc3MgU0lOIERFRklOSVInKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0UGVyc2lzdGlyRGF0b3NCeVBhc3MocGVyc2lzdGlyRGF0b3NCeVBhc3NGdW46IHR5cGVvZiBwZXJzaXN0aXJEYXRvc0J5UGFzcykge1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vID0gcGVyc2lzdGlyRGF0b3NCeVBhc3NGdW47XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYnBwOiBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcykge1xyXG4gICAgYXdhaXQgcGVyc2lzdGlyRGF0b3NCeVBhc3NJbnRlcm5vKGRicHApO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBmYWxzZVxyXG4gICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXJFbmN1ZXN0YSA9IChpZENhcmdhOiBJZENhcmdhLCBjYWxsQmFjazogKGZvclBrUmFpejogRm9yUGtSYWl6KSA9PiB2b2lkKSA9PiB7XHJcbiAgICBjb25zdCBMQVNUX0FVVE9fVkFMVUVfUEtfUkFJWiA9ICdwcm94aW1vX3ZhbG9yX3BrX3JhaXonXHJcbiAgICBjb25zdCBORVhUX0FVVE9fVkFMVUVfUEtfUkFJWjogVmFsdWVQa1JhaXogPSBteS5nZXRMb2NhbFZhcihMQVNUX0FVVE9fVkFMVUVfUEtfUkFJWikgfHwgJy0xJ1xyXG4gICAgY29uc3QgZXN0cnVjdHVyYSA9IGdldEVzdHJ1Y3R1cmEoKTtcclxuICAgIG15LnNldExvY2FsVmFyKExBU1RfQVVUT19WQUxVRV9QS19SQUlaLCAoTnVtYmVyKE5FWFRfQVVUT19WQUxVRV9QS19SQUlaKSAtIDEpLnRvU3RyaW5nKCkpO1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVpdID0ge30gYXMgUmVzcHVlc3Rhc1JhaXo7XHJcbiAgICBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltORVhUX0FVVE9fVkFMVUVfUEtfUkFJWl0gPSB7XHJcbiAgICAgICAgLi4uZXN0cnVjdHVyYS5kZWZhdWx0SW5mb3JtYWNpb25IZHIsXHJcbiAgICAgICAgdGVtOiB7IC4uLmVzdHJ1Y3R1cmEuZGVmYXVsdEluZm9ybWFjaW9uSGRyLnRlbSB9XHJcbiAgICB9O1xyXG4gICAgZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVpdLnRlbS5jYXJnYSA9IGlkQ2FyZ2E7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpLnRoZW4oXHJcbiAgICAgICAgKCkgPT4gY2FsbEJhY2soe1xyXG4gICAgICAgICAgICBmb3JtdWxhcmlvOiBlc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkci50YXJlYS5tYWluX2Zvcm0sXHJcbiAgICAgICAgICAgIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOiBOdW1iZXIoTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVopIGFzIFZhbHVlUGtSYWl6XHJcbiAgICAgICAgfSBhcyBGb3JQa1JhaXopXHJcbiAgICApLy9ubyBxdWl0YXIgZWwgY2FzdGVvIHBvcnF1ZSB2aWVuZSBjb21vIHRleHRvIHkgbmVjZXNpdG8gcXVlIHNlYSBuw7ptZXJvXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RW5jb2xhckJhY2t1cChcclxuICAgIGVuY29sYXJCYWNrdXBGdW46ICh0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXMpID0+IHZvaWRcclxuKSB7XHJcbiAgICBlbmNvbGFyQmFja3VwID0gZW5jb2xhckJhY2t1cEZ1blxyXG59XHJcblxyXG5sZXQgZW5jb2xhckJhY2t1cDogKHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZvclBrUmFpejogRm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejogUmVzcHVlc3RhcykgPT4gdm9pZCA9ICgpID0+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIlNJTiBFU1BFQ0lGSUNBUiBlbmNvbGFyQmFja3VwXCIpXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgaW50ZW50YXJCYWNrdXAgPSAoZm9yUGs6IEZvclBrKSA9PiB7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpXHJcbiAgICB2YXIgdG9rZW4gPSBkYXRvc0J5UGFzcy50b2tlbjtcclxuICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgIGVuY29sYXJCYWNrdXAodG9rZW4sIGZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm5vIGhheSB0b2tlbiwgbm8gc2UgcHVkbyBoYWNlciBlbCBiYWNrdXBcIilcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVzdHJ1Y3R1cmEoZXN0cnVjdHVyYUFDYXJnYXI6IEVzdHJ1Y3R1cmEpIHtcclxuICAgIGVzdHJ1Y3R1cmEgPSBlc3RydWN0dXJhQUNhcmdhcjtcclxuICAgIGRlZk9wZXJhdGl2by5VQXByaW5jaXBhbCA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKHVhID0+ICEhdWEucHJpbmNpcGFsKT8udW5pZGFkX2FuYWxpc2lzIVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZkZvciA9IGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5tYXAoZiA9PiAoeyBoZXJtYW5vOiBmLmNhc2lsbGVyb3MuaGVybWFubyB9KSkucGxhaW4oKVxyXG4gICAgZGVmT3BlcmF0aXZvLmRlZlVBID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLm1hcCgodWFEZWYsIHVhKSA9PiAoe1xyXG4gICAgICAgIHBrOiB1YURlZi5wa19hZ3JlZ2FkYSBhcyBJZFZhcmlhYmxlLFxyXG4gICAgICAgIGluY2x1aWRhczogbGlrZUFyKHVhRGVmLmhpamFzKS5rZXlzKCksXHJcbiAgICAgICAgaWRzRm9yOiBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGYgPT4gZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YSkua2V5cygpXHJcbiAgICB9KSkucGxhaW4oKVxyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXREYXRvc0J5UGFzcyhkYnBwOiBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyAmIHsgZGlydHk/OiBib29sZWFuIH0pIHtcclxuICAgIGRhdG9zQnlQYXNzID0ge1xyXG4gICAgICAgIGRpcnR5OiBmYWxzZSxcclxuICAgICAgICAuLi5kYnBwLFxyXG4gICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7fSBhcyBEYXRvc0J5UGFzc1tcImZlZWRiYWNrUm93VmFsaWRhdG9yXCJdXHJcbiAgICB9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldERhdG9zQnlQYXNzID0gKCkgPT4gZGF0b3NCeVBhc3NcclxuXHJcbmZ1bmN0aW9uIG9iamV0b1ZhY2lvKG86IG9iamVjdCkge1xyXG4gICAgZm9yICh2YXIgayBpbiBvKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGZWVkYmFja1Jvd1ZhbGlkYXRvcigpIHtcclxuICAgIGlmICghZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgfHwgb2JqZXRvVmFjaW8oZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpKSB7XHJcbiAgICAgICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERpcnR5KCkge1xyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmRpcnR5XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFc3RydWN0dXJhKCkge1xyXG4gICAgcmV0dXJuIGVzdHJ1Y3R1cmE7XHJcbn1cclxuXHJcbnR5cGUgRWxlbWVudG9zUmVnaXN0cmFibGVzID0gSFRNTERpdkVsZW1lbnQgfCBIVE1MQnV0dG9uRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG50eXBlIERpcmVjdEZ1bmN0aW9uPFQsIFJlc3VsdD4gPSAocmVzcHVlc3Rhc0F1bWVudGFkYXM6IFJlc3B1ZXN0YXMsIGZlZWRiYWNrRm9ybTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4sIGVsZW1lbnRvOiBULFxyXG4gICAgZmVlZGJhY2tBbGw6IHtcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH0sXHJcbiAgICBlc3RydWN0dXJhOiBFc3RydWN0dXJhXHJcbikgPT4gUmVzdWx0XHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4gPSB7XHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBhbnk+LFxyXG4gICAgdmFyaWFibGU/OiBJZFZhcmlhYmxlLFxyXG4gICAgZm9yUGs/OiBGb3JQayxcclxufSAmICh7XHJcbiAgICBwcm9wOiBrZXlvZiBUXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIFRba2V5b2YgVF0+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgbGEgcHJvcChlcnR5KSBkZWwgZWxlbWVudG9cclxufSB8IHtcclxuICAgIGF0dHI6IHN0cmluZ1xyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgZWwgdmFsb3IgZGVsIGF0dHIoaWJ1dG8pXHJcbn0gfCB7XHJcbiAgICBzdHlsZToga2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvblxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBzdHJpbmc+IC8vIExvIHF1ZSByZXRvcm5hIGxhIGZ1bihjacOzbikgc2UgdXNhIHBhcmEgZWwgdmFsb3IgZGVsIHN0eWxlXHJcbn0gfCB7XHJcbiAgICBkaXJlY3Q6IHRydWVcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgdm9pZD4gLy8gTGEgZnVuY2nDs24gdmEgYSB0b2NhciBkaXJlY3RhbWVudGUgZWwgZWxlbWVudG8geSBoYWNlciB0b2RvIGxvIHF1ZSB0ZW5nYSBxdWUgaGFjZXJcclxufSlcclxuXHJcbnR5cGUgUmVnaXN0cm9FbGVtZW50b3M8VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4gPSB7IFtpZDogc3RyaW5nXTogUmVnaXN0cm9FbGVtZW50bzxUPiAmIHsgZWxlbWVudG8/OiBUIH0gfTtcclxuXHJcbnZhciByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbCA9IHt9IGFzIFJlZ2lzdHJvRWxlbWVudG9zPEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0cmFyRWxlbWVudG88VCBleHRlbmRzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcz4oZGVmOiBSZWdpc3Ryb0VsZW1lbnRvPFQ+KSB7XHJcbiAgICAvLyBAdHMtaWdub3JlIFPDrSwgcG9kcsOtYSBzZXIgcXVlIGxvcyB0aXBvcyBkZSBUIHNlYW4gZGlzdGludG9zLCBwZXJvIHZhbiBhIHNlciBjb2hlcmVudGVzXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3M6IFJlZ2lzdHJvRWxlbWVudG9zPFQ+ID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICByZWdpc3Ryb0VsZW1lbnRvc1tkZWYuaWRdID0gZGVmO1xyXG59XHJcblxyXG50eXBlIFJlc3B1ZXN0YXNGb3JQa0NvbXVuID0geyByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpejogRm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMgfVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazogRm9yUGspOiBSZXNwdWVzdGFzRm9yUGtDb211blxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOiBGb3JQaywgY29uQXVtZW50YWRhczogdHJ1ZSwgYWdyZWdhclNpRmFsdGE/OiBib29sZWFuKTogUmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzIH1cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazogRm9yUGssIGNvbkF1bWVudGFkYXM/OiBib29sZWFuLCBhZ3JlZ2FyU2lGYWx0YT86IGJvb2xlYW4pOiBSZXNwdWVzdGFzRm9yUGtDb211biAmIHsgcmVzcHVlc3Rhc0F1bWVudGFkYXM/OiBSZXNwdWVzdGFzIH0ge1xyXG4gICAgdmFyIHJlc3B1ZXN0YXNBdW1lbnRhZGFzID0ge30gYXMgUmVzcHVlc3RhcztcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgbG8gcXVlIHNvYnJhciBkZSByZXNwdWVzdGFzIG5vIG1lIGltcG9ydGEuLi5cclxuICAgIHZhciByZXNwdWVzdGFzID0gZGF0b3NCeVBhc3MucmVzcHVlc3RhcyBhcyBSZXNwdWVzdGFzO1xyXG4gICAgdmFyIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpejtcclxuICAgIHZhciBmb3JQa1JhaXo6IEZvclBrO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpczogSWRVbmlkYWRBbmFsaXNpcyB8IHVuZGVmaW5lZCA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXNcclxuICAgIHZhciBmb3JQa0FwaWxhZGEgPSBmb3JQaztcclxuICAgIHZhciBwaWxhOiBbdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzLCB1YURlZjogVW5pZGFkQW5hbGlzaXMsIGZvclBrOiBGb3JQa11bXSA9IFtdO1xyXG4gICAgd2hpbGUgKHVuaWRhZF9hbmFsaXNpcykge1xyXG4gICAgICAgIHZhciB1YURlZjogVW5pZGFkQW5hbGlzaXMgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgcGlsYS5wdXNoKFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdKTtcclxuICAgICAgICBmb3JQa0FwaWxhZGEgPSB7IC4uLmZvclBrQXBpbGFkYSB9O1xyXG4gICAgICAgIGRlbGV0ZSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdXHJcbiAgICAgICAgdW5pZGFkX2FuYWxpc2lzID0gdWFEZWYucGFkcmVcclxuICAgIH1cclxuICAgIHdoaWxlIChwaWxhLmxlbmd0aCkge1xyXG4gICAgICAgIFt1bmlkYWRfYW5hbGlzaXMsIHVhRGVmLCBmb3JQa0FwaWxhZGFdID0gcGlsYS5wb3AoKSFcclxuICAgICAgICB2YXIgdmFsb3JQa09Qb3NpY2lvbiA9IGZvclBrQXBpbGFkYVt1YURlZi5wa19hZ3JlZ2FkYV07XHJcbiAgICAgICAgaWYgKHZhbG9yUGtPUG9zaWNpb24gPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZmFsdGEgdW4gdmFsb3IgcGFyYSAke0pTT04uc3RyaW5naWZ5KHVhRGVmLnBrX2FncmVnYWRhKX1gKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciByZXNwdWVzdGFzQW50ZXJpb3IgPSByZXNwdWVzdGFzO1xyXG4gICAgICAgIGxldCBwb3NpY2lvbiA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5ID8gdmFsb3JQa09Qb3NpY2lvbiAtIDEgOiB2YWxvclBrT1Bvc2ljaW9uXHJcbiAgICAgICAgcmVzcHVlc3RhcyA9IHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl07XHJcbiAgICAgICAgaWYgKHJlc3B1ZXN0YXMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBpZiAoYWdyZWdhclNpRmFsdGEpIHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSB7fSBhcyBSZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzQW50ZXJpb3JbdW5pZGFkX2FuYWxpc2lzXVtwb3NpY2lvbl0gPSByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGV4aXN0ZSBlbCBlbGVtZW50byAnJHtwb3NpY2lvbn0nIGVuIGxhIHVuaWRhZF9hbmFsaXNpcyAnJHt1bmlkYWRfYW5hbGlzaXN9J2ApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvclBrUmFpeiB8fD0gZm9yUGtBcGlsYWRhO1xyXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgU8OpIHF1ZSBlcyByYcOteiBwb3IgY8OzbW8gZXN0b3kgcmV2b2x2aWVuZG8gbGEgcGlsYVxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6IHx8PSByZXNwdWVzdGFzO1xyXG4gICAgICAgIGlmIChjb25BdW1lbnRhZGFzKSB7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzID0geyAuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3RhcywgW3VhRGVmLnBrX2FncmVnYWRhXTogdmFsb3JQa09Qb3NpY2lvbiB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICByZXNwdWVzdGFzLCByZXNwdWVzdGFzQXVtZW50YWRhcyxcclxuICAgICAgICAvLyBAdHMtaWdub3JlIFPDqSBxdWUgbGEgcGlsYSB0aWVuZSBhbCBtZW5vcyB1biBlbGVtZW50byBwb3IgbG8gdGFudG8gZXN0byBlc3TDoSBsbGVubyBzZWd1cm8uIFxyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHVuaWRhZEFuYWxpc2lzOiB1YURlZlxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQa1JhaXo6IEZvclBrUmFpeikge1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc0F1bWVudGFkYXMgfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1JhaXosIHRydWUpXHJcbiAgICB2YXIgcmVnaXN0cm9FbGVtZW50b3MgPSByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbDtcclxuICAgIHZhciBwbGFpbkZvclBrID0gdG9QbGFpbkZvclBrKGZvclBrUmFpeilcclxuICAgIHZhciByb3dWYWxpZGF0b3IgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXTtcclxuICAgIGZvciAodmFyIGlkIGluIHJlZ2lzdHJvRWxlbWVudG9zKSB7XHJcbiAgICAgICAgdmFyIGRlZiA9IHJlZ2lzdHJvRWxlbWVudG9zW2lkXTtcclxuICAgICAgICBpZiAoZGVmLmVsZW1lbnRvKSB7XHJcbiAgICAgICAgICAgIGlmICghZG9jdW1lbnQuYm9keS5jb250YWlucyhkZWYuZWxlbWVudG8pKSB7XHJcbiAgICAgICAgICAgICAgICBkZWYuZWxlbWVudG8gPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFkZWYuZWxlbWVudG8pIHtcclxuICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVmLmlkKSBhcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGVmLmVsZW1lbnRvKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdCVVNDQU5ETyBlbCBlbGVtZW50byByZWdpc3RyYWRvICcsaWQsJ25vIGVzdMOhIGVuIGVsIERPTScpXHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgdmFsdWUgPSBkZWYuZnVuKHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByb3dWYWxpZGF0b3IsIGRlZi5lbGVtZW50bywgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEpO1xyXG4gICAgICAgIGlmICgncHJvcCcgaW4gZGVmKSB7XHJcbiAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZGVmLmVsZW1lbnRvLCBkZWYucHJvcCwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgnYXR0cicgaW4gZGVmKSB7XHJcbiAgICAgICAgICAgIHNldEF0dHJEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5hdHRyLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCdzdHlsZScgaW4gZGVmKSB7XHJcbiAgICAgICAgICAgIHNldFZhbG9yRGlzdGludG8oZGVmLmVsZW1lbnRvLnN0eWxlLCBkZWYuc3R5bGUsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyb3dWYWxpZGF0b3IuYWN0dWFsKSB7XHJcbiAgICAgICAgdmFyIHsgdG9wLCBib3R0b20gfSA9IGNhbGN1bGFyRWxlbWVudG9FbmZvY2Fkbyhyb3dWYWxpZGF0b3IuYWN0dWFsKTtcclxuICAgICAgICBpZiAodG9wICE9IG51bGwgJiYgYm90dG9tICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hcnJpYmEnKS5lbFRvcFZpc2liaWxpemFyID0gdG9wO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFiYWpvJykuZWxCb3R0b21WaXNpYmlsaXphciA9IGJvdHRvbTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8oaWRWYXJpYWJsZTogSWRWYXJpYWJsZSB8IElkRmluKSB7XHJcbiAgICB2YXIgZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRWYXJpYWJsZSA9PSAnZmluJyA/IGBib3Rvbi12b2x2ZXItMmAgOiBgdmFyLSR7aWRWYXJpYWJsZX1gKVxyXG4gICAgICAgIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkVmFyaWFibGUpO1xyXG4gICAgdmFyIGVsZW1lbnRvID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgdmFyIE1BUkdFTl9TQ1JPTEwgPSA2NDtcclxuICAgIHZhciBhbHRvUGFudGFsbGEgPSB3aW5kb3cuaW5uZXJIZWlnaHQgKiAwLjcgLSBNQVJHRU5fU0NST0xMO1xyXG4gICAgdmFyIGVsZW1lbnRvRW50ZXJvOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsOyAvLyBlcyBlbCBlbGVtZW50byBxdWUgdmEgYSBlbnRhciBlbnRlcm8gZW4gcGFudGFsbGEsIGRlZmluZSBlbCBib3R0b21cclxuICAgIHZhciByZWN0RWxlbWVudG9FbnRlcm86IFJldHVyblR5cGU8dHlwZW9mIG15T3duLmdldFJlY3Q+IHwgbnVsbCA9IG51bGw7XHJcbiAgICB2YXIgZWxlbWVudG9TdXBlcmlvcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgbW9zdHJhcnNlIGRlc2RlIGFycmliYSBhdW5xdWUgbm8gZW50cmUgZW50ZXJvLCBkZWZpbmUgZWwgdG9wXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvU3VwZXJpb3I6IFJldHVyblR5cGU8dHlwZW9mIG15T3duLmdldFJlY3Q+IHwgbnVsbCA9IG51bGw7XHJcbiAgICB3aGlsZSAoZWxlbWVudG8gIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgKGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygndmFyaWFibGUnKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdtdWx0aXBsZScpXHJcbiAgICAgICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ByZWd1bnRhJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnY29uanVudG9wcmVndW50YXMnKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdzZWNjaW9uLWJvdG9uLWZvcm11bGFyaW8nKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdib3RvbmZvcm11bGFyaW8nKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdib3Rvbi12b2x2ZXInKVxyXG4gICAgICAgICAgICApICYmIGVsZW1lbnRvLm9mZnNldEhlaWdodCA+IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnRvU3VwZXJpb3IgPT0gbnVsbCAmJiBlbGVtZW50by5jbGllbnRIZWlnaHQgPCBhbHRvUGFudGFsbGEpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudG9FbnRlcm8gPT0gbnVsbCkgZWxlbWVudG9FbnRlcm8gPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgIGlmIChyZWN0RWxlbWVudG9FbnRlcm8gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50b0VudGVyb1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b0VudGVybyA9IG15T3duLmdldFJlY3QoZWxlbWVudG9FbnRlcm8hKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b1N1cGVyaW9yID0gcmVjdEVsZW1lbnRvRW50ZXJvO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBteU93bi5nZXRSZWN0KGVsZW1lbnRvKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCAtIHJlY3QudG9wIDwgYWx0b1BhbnRhbGxhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY3RFbGVtZW50b1N1cGVyaW9yID0gcmVjdDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG8gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnRvID0gZWxlbWVudG8/LnBhcmVudEVsZW1lbnQgPz8gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChlbGVtZW50b1N1cGVyaW9yID09IG51bGwpIHtcclxuICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm87XHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0OiB7XHJcbiAgICAgICAgZWxlbWVudG9JbnB1dFZhcmlhYmxlPzogSFRNTEVsZW1lbnQgfCBudWxsXHJcbiAgICAgICAgdG9wPzogbnVtYmVyIHwgbnVsbFxyXG4gICAgICAgIGJvdHRvbT86IG51bWJlciB8IG51bGxcclxuICAgICAgICBlbmZvY2Fkbz86IGJvb2xlYW4gfCBudWxsXHJcbiAgICAgICAgZGVzZW5mb3F1ZT86IHN0cmluZyB8IG51bGxcclxuICAgIH0gPSB7fTtcclxuICAgIGlmIChlbGVtZW50b0VudGVybyAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJlY3RFbGVtZW50b0VudGVybyA9IG15T3duLmdldFJlY3QoZWxlbWVudG9FbnRlcm8pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5lbGVtZW50b0lucHV0VmFyaWFibGUgPSBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXI7XHJcbiAgICAgICAgdmFyIHRvcCA9IChyZWN0RWxlbWVudG9TdXBlcmlvciA/PyByZWN0RWxlbWVudG9FbnRlcm8pLnRvcCAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICAgICAgcmVzdWx0LnRvcCA9IHRvcDtcclxuICAgICAgICByZXN1bHQuYm90dG9tID0gcmVjdEVsZW1lbnRvRW50ZXJvLnRvcCArIHJlY3RFbGVtZW50b0VudGVyby5oZWlnaHQ7XHJcbiAgICAgICAgaWYgKHRvcCA8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApIHtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWUgPSAnYXJyaWJhJztcclxuICAgICAgICB9IGVsc2UgaWYgKHJlY3RFbGVtZW50b0VudGVyby50b3AgKyByZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCArIGFsdG9QYW50YWxsYSkge1xyXG4gICAgICAgICAgICByZXN1bHQuZGVzZW5mb3F1ZSA9ICdhYmFqbyc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0LmVuZm9jYWRvID0gdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRBdHRyRGlzdGludG88TiBleHRlbmRzIHN0cmluZz4oXHJcbiAgICBvYmpldG86IHsgc2V0QXR0cmlidXRlOiAobmFtZTogTiwgdmFsb3I6IHN0cmluZykgPT4gdm9pZCwgZ2V0QXR0cmlidXRlOiAobmFtZTogTikgPT4gc3RyaW5nIHwgbnVsbCB9LFxyXG4gICAgbmFtZTogTixcclxuICAgIHZhbG9yOiBzdHJpbmdcclxuKSB7XHJcbiAgICBpZiAob2JqZXRvICYmIG9iamV0by5nZXRBdHRyaWJ1dGUobmFtZSkgIT0gdmFsb3IpIHtcclxuICAgICAgICBvYmpldG8uc2V0QXR0cmlidXRlKG5hbWUsIHZhbG9yKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFZhbG9yRGlzdGludG88VCBleHRlbmRzIHt9LCBOIGV4dGVuZHMga2V5b2YgVD4oXHJcbiAgICBvYmpldG86IFQsXHJcbiAgICBuYW1lOiBOLFxyXG4gICAgdmFsb3I6IFRbTl1cclxuKSB7XHJcbiAgICBpZiAob2JqZXRvW25hbWVdICE9IHZhbG9yKSB7XHJcbiAgICAgICAgb2JqZXRvW25hbWVdID0gdmFsb3I7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrOiBGb3JQaykge1xyXG4gICAgaWYgKGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvICYmICFkYXRvc0J5UGFzcz8uc29sb0xlY3R1cmEpIHtcclxuICAgICAgICB2YXIgeyByZXNwdWVzdGFzIH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgICAgIGxpa2VBcihlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbylcclxuICAgICAgICAgICAgLmZvckVhY2goKGNvbmZpZ0JvdG9uRm9ybXVsYXJpbywgaWRGb3JtdWxhcmlvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzcFVBID0gcmVzcHVlc3Rhc1tlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tpZEZvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpc107XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcFVBICE9IG51bGwgJiYgcmVzcFVBIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZ0JvdG9uRm9ybXVsYXJpby5oYWJpbGl0YXJfYWdyZWdhcl9saXN0bykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzWyckQi4nICsgaWRGb3JtdWxhcmlvIGFzIElkVmFyaWFibGVdID0gJ29rJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICB9XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9pZF9wcmVndW50YShfcGF5bG9hZDogeyBwcmVndW50YTogSWRQcmVndW50YSwgZm9yUGs6IEZvclBrIH0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTID0gU3ltYm9sKCdOT19DQU1CSUFSX1NPTE9fVFJBRVJfU1RBVFVTJylcclxuZXhwb3J0IGNvbnN0IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gPSBTeW1ib2woJ05PX0NBTUJJQVJfVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTycpXHJcblxyXG5mdW5jdGlvbiByZWZyZXNjYXJNYXJjYURpcnR5KCkge1xyXG4gICAgdmFyIGJvdG9uR3JhYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzYXZlLWJ1dHRvblwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcclxuICAgIGlmIChib3RvbkdyYWJhcikge1xyXG4gICAgICAgIGlmIChib3RvbkdyYWJhci5kaXNhYmxlZCAhPT0gIWRhdG9zQnlQYXNzLmRpcnR5KSB7XHJcbiAgICAgICAgICAgIGJvdG9uR3JhYmFyLmRpc2FibGVkID0gIWRhdG9zQnlQYXNzLmRpcnR5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhKHBheWxvYWQ6IHtcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIHZhcmlhYmxlOiBJZFZhcmlhYmxlIHwgdHlwZW9mIE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLFxyXG4gICAgcmVzcHVlc3RhOiBWYWxvciB8IHR5cGVvZiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPXHJcbn0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIGxldCB0b2tlbiA9ICdBVkVSSUdVQVIgVE9ETydcclxuICAgIGxldCB7IGZvclBrLCByZXNwdWVzdGEsIHZhcmlhYmxlIH0gPSBwYXlsb2FkO1xyXG4gICAgdmFyIHsgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXMgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dO1xyXG4gICAgdmFyIHJlY2VudE1vZGlmaWVkID0gZmFsc2U7XHJcbiAgICB2YXIgdmFsb3JBbnRlcmlvciA9IHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTID8gcmVzcHVlc3Rhc1t2YXJpYWJsZV0gOiBudWxsO1xyXG4gICAgdmFyIGZlZWRiYWNrUm93ID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKGZvclBrKV1cclxuICAgIGlmIChyZXNwdWVzdGEgIT09IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMpIHtcclxuICAgICAgICBpZiAocmVzcHVlc3RhID09PSAnJykge1xyXG4gICAgICAgICAgICByZXNwdWVzdGEgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yLnZhcmlhYmxlc1t2YXJpYWJsZV0/LnRpcG8gPT0gJ251bWVybycpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGEgPSBOdW1iZXIocmVzcHVlc3RhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBzaSBlcyB1biBmYWxzeSAoMCA9PSBmYWxzZSkgdGVuZ28gcXVlIGNvbXBhcmFyIGNvbiAhPT1cclxuICAgICAgICByZWNlbnRNb2RpZmllZCA9IHJlc3B1ZXN0YSA/IHZhbG9yQW50ZXJpb3IgIT0gcmVzcHVlc3RhIDogdmFsb3JBbnRlcmlvciAhPT0gcmVzcHVlc3RhXHJcbiAgICAgICAgaWYgKHJlY2VudE1vZGlmaWVkKSB7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyaWFibGVdID0gcmVzcHVlc3RhID8/IG51bGw7IC8vIGNhbWJpbyB1bmRlZmluZWQgcG9yIG51bGxcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3ZhcmlhYmxlXT8uc2lndWllbnRlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHZhciBzaWd1aWVudGVWYXJpYWJsZTogSWRWYXJpYWJsZSB8IElkRmluIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuICAgIGlmICh2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyAmJiAocmVjZW50TW9kaWZpZWQgfHwgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyAmJiBmZWVkYmFja1Jvdy5hdXRvSW5ncmVzYWRhcz8uW3ZhcmlhYmxlXSkpIHtcclxuICAgICAgICByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeik7XHJcbiAgICAgICAgaWYgKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFkYXRvc0J5UGFzcz8uc29sb0xlY3R1cmEpIHtcclxuICAgICAgICAgICAgdmVyaWZpY2FyU29ydGVvKHtcclxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW86IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVBY3R1YWw6IHZhcmlhYmxlLFxyXG4gICAgICAgICAgICAgICAgZm9yUGs6IGZvclBrXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZGF0b3NCeVBhc3MuZGlydHkgfHwgcmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHJlY2VudE1vZGlmaWVkO1xyXG4gICAgICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHsgYXV0b0luZ3Jlc286IHRydWUgfSk7XHJcbiAgICAgICAgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgICAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICAgICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gdmFyaWFibGU7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3NpZ3VpZW50ZVZhcmlhYmxlXT8uc2lndWllbnRlO1xyXG4gICAgICAgIH0gd2hpbGUgKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpXHJcbiAgICAgICAgaWYgKHNpZ3VpZW50ZVZhcmlhYmxlID09IG51bGwgJiYgZmVlZGJhY2tSb3cuZmVlZGJhY2tbdmFyaWFibGVdPy5lc3RhZG8gPT0gJ3ZhbGlkYScpIHtcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSAnZmluJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyByZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsOiBmZWVkYmFja1Jvdy5hY3R1YWwgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9yZWdpc3RyYXJfbm90YShwYXlsb2FkOiB7IGZvclBrUmFpejogRm9yUGtSYWl6LCB0YXJlYTogSWRUYXJlYSwgbm90YTogc3RyaW5nIHwgbnVsbCB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIHRhcmVhLCBub3RhIH0gPSBwYXlsb2FkO1xyXG4gICAgY29uc29sZS5sb2coXCJGQUxUQSAvLyBUT0RPXCIpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWdyZWdhcl92aXNpdGEocGF5bG9hZDogeyBmb3JQa1JhaXo6IEZvclBrUmFpeiwgb2JzZXJ2YWNpb25lczogc3RyaW5nIHwgbnVsbCB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIG9ic2VydmFjaW9uZXMgfSA9IHBheWxvYWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fbW9kaWZpY2FyX3Zpc2l0YShwYXlsb2FkOiB7IGZvclBrUmFpejogRm9yUGtSYWl6LCBpbmRleDogbnVtYmVyLCBvcGNpb246IGtleW9mIFZpc2l0YSwgdmFsb3I6IHN0cmluZyB8IG51bGwgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleCwgb3BjaW9uLCB2YWxvciB9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfdmlzaXRhKHBheWxvYWQ6IHsgZm9yUGtSYWl6OiBGb3JQa1JhaXosIGluZGV4OiBudW1iZXIgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleCB9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8oeyBmb3JQayB9OiB7IGZvclBrOiBGb3JQayB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeik7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvKHsgZm9yUGsgfTogeyBmb3JQazogRm9yUGsgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgdmFyIHsgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcywgbnVsbCwge30pXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oeyBmb3JQaywgZm9yUGtQYWRyZSB9OiB7IGZvclBrOiBGb3JQaywgZm9yUGtQYWRyZTogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMgfCB1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgdWFEZWY6IFVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGluZGV4ID0gZm9yUGtbdWFEZWYucGtfYWdyZWdhZGFdIGFzIG51bWJlcjtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXM6IHJlc3B1ZXN0YXNQYWRyZSB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrUGFkcmUsIHRydWUsIHRydWUpO1xyXG4gICAgKHJlc3B1ZXN0YXNQYWRyZVt1bmlkYWRfYW5hbGlzaXNdIGFzIFJlc3B1ZXN0YXNbXSkuc3BsaWNlKGluZGV4IC0gMSwgMSk7XHJcbiAgICByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeik7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHRydWU7XHJcbiAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgdHJ1ZTtcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgeyBhdXRvSW5ncmVzbzogdHJ1ZSB9KTtcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrUGFkcmUpO1xyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQa1BhZHJlKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaEJ5UGFzczxULCBSPihcclxuICAgIGZ1bjogKHBheWxvYWQ6IFQsIGRhdG9zOiB0eXBlb2YgZGF0b3NCeVBhc3MpID0+IFIsXHJcbiAgICBwYXlsb2FkOiBUXHJcbikge1xyXG4gICAgcmV0dXJuIGZ1bihwYXlsb2FkLCBkYXRvc0J5UGFzcyk7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHVsdGltYVZhcmlibGVWaXZpZW5kYSA9ICdOT19FU1RBX0RFRklOSURBX0FVTi8vVE9ETycgYXMgSWRWYXJpYWJsZTtcclxuXHJcbmV4cG9ydCBjb25zdCBNQVhDUCA9IDIwO1xyXG5cclxuLyogUkVEVUNFUlMgKi9cclxuXHJcbnZhciByZWVtcGxhem9zSGFiaWxpdGFyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgZmFsc2U6ICdmYWxzZScsXHJcbiAgICB0cnVlOiAndHJ1ZScsXHJcbiAgICBcIj1cIjogJz09JyxcclxuICAgIFwiPD5cIjogJyE9JyxcclxuICAgIFwiJlwiOiAnJiYnLFxyXG4gICAgXCJ8XCI6ICd8fCcsXHJcbiAgICBcIk9SXCI6ICd8fCcsXHJcbiAgICBcIkFORFwiOiAnJiYnLFxyXG4gICAgXCJvclwiOiAnfHwnLFxyXG4gICAgXCJhbmRcIjogJyYmJyxcclxuICAgIFwibm90XCI6ICchJyxcclxuICAgIFwiTk9UXCI6ICchJyxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBoZWxwZXJzQ2FzaWxsZXJvcyA9IHtcclxuICAgIG51bGwyemVybyhwb3NpYmxlTnVsbDogYW55KSB7XHJcbiAgICAgICAgaWYgKHBvc2libGVOdWxsID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwb3NpYmxlTnVsbDtcclxuICAgIH0sXHJcbiAgICBkaXYwZXJyKG51bWVyYWRvcjogbnVtYmVyLCBkZW5vbWluYWRvcjogbnVtYmVyLCBwazogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGRlbm9taW5hZG9yID09IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZW4gXCIgKyBwayArIFwiIGRpdmlzaW9uIHBvciBjZXJvIGRlIFwiICsgbnVtZXJhZG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWRvciAvIGRlbm9taW5hZG9yO1xyXG4gICAgfSxcclxuICAgIGZ1bnM6IHtcclxuICAgICAgICBibGFuY28oeDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICE9PSAwICYmICF4XHJcbiAgICAgICAgfSxcclxuICAgICAgICBob3koKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnRvZGF5KCkudG9EbXkoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmVjaGFfdmFsaWRhKHg6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgZm9ybWF0b192YWxpZG8gPSAvXihbMS05XXwwWzEtOV18WzEyXVxcZHwzWzAxXSlcXC8oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8yMFxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgdmFyIHhEYXRlOiBEYXRlO1xyXG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbk9rOiBib29sZWFuO1xyXG4gICAgICAgICAgICBjb252ZXJzaW9uT2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0b192YWxpZG8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtkLCBtLCB5XSA9IHguc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBuZXcgRGF0ZShgJHt5fS8ke219LyR7ZH1gKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL2ZhbHRhcmlhIHZhbGlkYXIgcXVlIG5vIHNlYSB1bmEgZmVjaGEgZnV0dXJhIHkgcXVlIHNlYSB1bmEgZmVjaGEgZW4gZWwgcmFuZ28gZGVsIG9wZXJhdGl2b1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gJiYgY29udmVyc2lvbk9rXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXNhbmlvX3ZhbGlkbyh4OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvID0gL14oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8oMTl8MjApXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG9cclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZm9ybWFkbyh4OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggIT09IHVuZGVmaW5lZCAmJiB4ICE9PSBudWxsICYmICghKHggaW5zdGFuY2VvZiBBcnJheSkgfHwgeC5sZW5ndGggIT09IDApXHJcbiAgICAgICAgICAgICAgICAmJiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSB8fCBPYmplY3Qua2V5cyh4KS5sZW5ndGggIT09IDApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBuc25jKHg6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCA9PSAtOVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyKHg6IG51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4geCAlIDIgPT0gMFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZWRhZF9tZXNfYW5uaW9fdmFsaWRvKGVkYWQ6IG51bWJlciwgbWVzQW5uaW86IHN0cmluZywgZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIG1lc2VzRGlmZXJlbmNpYSA9IChkMTogRGF0ZSwgZDI6IERhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBtb250aHM7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgPSAoZDIuZ2V0RnVsbFllYXIoKSAtIGQxLmdldEZ1bGxZZWFyKCkpICogMTI7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgLT0gZDEuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIG1vbnRocyArPSBkMi5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyA8PSAwID8gMCA6IG1vbnRocztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzUmVhbGl6YWNpb24gPSBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVkuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBkYXRlLnltZChOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMl0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMV0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMF0pKVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzTWVzQW5uaW8gPSBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNNZXNBbm5pb1sxXSksIE51bWJlcihwYXJ0ZXNNZXNBbm5pb1swXSksIDEpXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBSZWFsRGF0ZSBlcyBEYXRlIHkgc2UgcHVlZGUgcmVzdGFyXHJcbiAgICAgICAgICAgIHZhciBkaWZlcmVuY2lhTWVzZXMgPSBtZXNlc0RpZmVyZW5jaWEobmFjaW1pZW50bywgdG9kYXkpO1xyXG4gICAgICAgICAgICB2YXIgZWRhZERlY2ltYWxlcyA9IGRpZmVyZW5jaWFNZXNlcyAvIDEyOyAvL2VqIDM2LjVcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoZWRhZERlY2ltYWxlcykgPT0gZWRhZCB8fCAvL21pc21hIGVkYWRcclxuICAgICAgICAgICAgICAgIGVkYWREZWNpbWFsZXMgPT0gZWRhZCArIDEgLy9tZXMgZGUgdG9sZXJhbmNpYVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvL2NvcGlhcl9jYW1wb191YV9yYW1hKHJlc3B1ZXN0YXNPcmlnZW46UmVzcHVlc3Rhc1tdLCBwb3NpY2lvbjpudW1iZXIsIHZhcmlhYmxlT3JpZ2VuOiBJZFZhcmlhYmxlLCBjYW1pbm86c3RyaW5nLCBjb25kaWNpb246Ym9vbGVhbil7XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj8ocmVzcHVlc3Rhc09yaWdlbiAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV1bYCR7Y2FtaW5vfWBdW3ZhcmlhYmxlT3JpZ2VuXSk6bnVsbFxyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/ZXZhbChgcmVzcHVlc3Rhc09yaWdlblske3Bvc2ljaW9uLTF9XS5gK2NhbWlubysnLicrdmFyaWFibGVPcmlnZW4pOm51bGw7XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLypcclxuICAgICAgICBkYm86e1xyXG4gICAgICAgICAgICBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCBkYXRvOnN0cmluZyl7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmIGluZm9ybWFkbyh4cGVyc29uYXMpICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXVtkYXRvXT8geHBlcnNvbmFzW3Blci0xXVtkYXRvXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVkYWRmYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdlZGFkJylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlaW5kaXZpZHVhbChlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISFwZXJzb25hc1twZXItMV1bJ2VudHJlYWluZCddXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZW1pZW1icm8oZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2Nvbnl1Z2VzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hc1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHhwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0yKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvamVmZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0xKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFyZW50ZXNjb2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwncDQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXhvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISF4cGVyc29uYXMgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdLnNleG8/IHhwZXJzb25hc1twZXItMV1bJ3NleG8nXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNpdGNvbnlqZWZlKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLDEsJ3A1JylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gKi9cclxuICAgIH1cclxufTtcclxuXHJcbnR5cGUgRnVuY2lvbkhhYmlsaXRhciA9ICh2YWxvcmVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBib29sZWFuO1xyXG50eXBlIEZ1bmNpb25WYWxvcmFyID0gKHZhbG9yZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IGFueTtcclxudmFyIGZ1bmNpb25lc0hhYmlsaXRhcjogeyBba2V5OiBzdHJpbmddOiBGdW5jaW9uSGFiaWxpdGFyIH0gPSB7XHJcbn1cclxudmFyIGZ1bmNpb25lc1ZhbG9yYXI6IHsgW2tleTogc3RyaW5nXTogRnVuY2lvblZhbG9yYXIgfSA9IHtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1pbmlDb21waWxhZG9yU1FsSnMoZXhwcmVzaW9uQ2FzaVNRTDogc3RyaW5nKSB7XHJcbiAgICB2YXIgZXhwcmVzaW9uID0gZXhwcmVzaW9uQ2FzaVNRTC5yZXBsYWNlKC9cXHUwMEEwL2csICcgJyk7XHJcbiAgICB2YXIgY3VlcnBvID0gZXhwcmVzaW9uLnJlcGxhY2UoL1xcYmlzIGRpc3RpbmN0IGZyb21cXGIvZ2ksICchPScpLnJlcGxhY2UoL1xcYi4rP1xcYi9nLCBmdW5jdGlvbiAoZWxUb2tlbikge1xyXG4gICAgICAgIHZhciBlbFRva2VuVHJpbWVhZG8gPSBlbFRva2VuLnRyaW0oKTtcclxuICAgICAgICBpZiAoZWxUb2tlblRyaW1lYWRvIGluIHJlZW1wbGF6b3NIYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZW1wbGF6b3NIYWJpbGl0YXJbZWxUb2tlblRyaW1lYWRvXTtcclxuICAgICAgICB9IGVsc2UgaWYgKC9eXFxkK1xcLj9cXGQqJC8udGVzdChlbFRva2VuVHJpbWVhZG8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfSBlbHNlIGlmICgvXlxcVyskLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9IGVsc2UgaWYgKC9eXFxzKyQvLnRlc3QoZWxUb2tlbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLicgKyBlbFRva2VuICsgJyknO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY3VlcnBvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY2lvbkNvbXBpbGFkYTxUPihjb25qdW50b0RlRnVuY2lvbmVzOiB7IFtrZXk6IHN0cmluZ106ICh2YWxvcmVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBUIH0pIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kczogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdKSB7XHJcbiAgICAgICAgICAgIHZhciBjdWVycG8gPSBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gdmFyIGN1ZXJwbyA9IG1pbmlDb21waWxhZG9yU1FsSnMobm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxGdW4gPSBuZXcgRnVuY3Rpb24oJ3ZhbG9yZXMnLCAnaGVscGVycycsICdyZXR1cm4gJyArIGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdID0gZnVuY3Rpb24gKHZhbG9yZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJuYWxGdW4odmFsb3JlcywgaGVscGVyc0Nhc2lsbGVyb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1IgRUpFQ1VDQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLCBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzLCBleHBlY3RlZChlcnIpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWxvcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBDT01QSUxBQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLCBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzLCBleHBlY3RlZChlcnIpKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY3VlcnBvKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25IYWJpbGl0YXIgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc0hhYmlsaXRhcik7XHJcbmV4cG9ydCBjb25zdCBnZXRGdW5jaW9uVmFsb3JhciA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzVmFsb3Jhcik7XHJcblxyXG5cclxudmFyIHJvd1ZhbGlkYXRvciA9IGdldFJvd1ZhbGlkYXRvcjxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+KHsgZ2V0RnVuY2lvbkhhYmlsaXRhciwgZ2V0RnVuY2lvblZhbG9yYXIgfSlcclxuZXhwb3J0IHZhciBidXNjYXJOb1JlYUVuUmVzcHVlc3RhcyA9ICh1bmlkYWRlc0FSZWNvcnJlclBybTogSWRVbmlkYWRBbmFsaXNpc1tdLCB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsIG5vUmVhc1RhcmVhOiBhbnlbXSwgbm9tYk5vUmVhOiBzdHJpbmcpXHJcbiAgICA6IHsgbnJjb2RpZ286IHN0cmluZyB8IG51bGwsIGVzdmFsb3I6IGJvb2xlYW4gfSA9PiB7XHJcbiAgICB2YXIgbnJjb2RpZ286IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgdmFyIGVzdmFsb3IgPSBmYWxzZTtcclxuICAgIHZhciBydmFsb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgdmFyIHJ2YXJpYWJsZTogc3RyaW5nO1xyXG4gICAgdmFyIHJub3JlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAvLyB2YXIgcmVzdWx0PXtucmNvZDpTdHJpbmcsIGVzdmFsOkJvb2xlYW59O1xyXG4gICAgaWYgKHVuaWRhZGVzQVJlY29ycmVyUHJtLmluY2x1ZGVzKHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcykpIHtcclxuICAgICAgICBmb3IgKGxldCBub1JlYSBvZiBub1JlYXNUYXJlYSkgeyAvL2VzdHJ1Y3R1cmEubm9SZWFzLCBlc3RydWN0dXJhLm5vUmVhc1N1cFxyXG4gICAgICAgICAgICBpZiAobm9tYk5vUmVhID09ICdub19yZWEnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeyB2YXJpYWJsZSwgdmFsb3IsIG5vX3JlYSB9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWEgPSBub19yZWE7XHJcbiAgICAgICAgICAgICAgICBydmFsb3IgPSB2YWxvcjtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZSA9IHZhcmlhYmxlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHsgdmFyaWFibGVfc3VwLCB2YWxvcl9zdXAsIG5vX3JlYV9zdXAgfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhID0gbm9fcmVhX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YWxvciA9IHZhbG9yX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZSA9IHZhcmlhYmxlX3N1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1tydmFyaWFibGUgYXMgSWRWYXJpYWJsZV0gPT0gcnZhbG9yKSB7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbyA9IHJub3JlYTsgIC8vbm9fcmVhLCBub19yZWFfc3VwXHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG5yY29kaWdvLCBlc3ZhbG9yIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5yY29kaWdvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGVzdmFsb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IHVhIG9mIChsaWtlQXIodW5pZGFkQW5hbGlzaXM/LmhpamFzKS5hcnJheSgpKSkge1xyXG4gICAgICAgIGlmICh1YT8udW5pZGFkX2FuYWxpc2lzICYmIHJlc3B1ZXN0YXNbdWEudW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlc3B1ZXN0YXNIaWphcyBvZiBpdGVyYXRvcihyZXNwdWVzdGFzW3VhPy51bmlkYWRfYW5hbGlzaXNdID8/IFtdKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKHVuaWRhZGVzQVJlY29ycmVyUHJtLCB1YSwgcmVzcHVlc3Rhc0hpamFzLCBub1JlYXNUYXJlYSwgbm9tYk5vUmVhKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZXN2YWxvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvID0gcmVzdWx0Lm5yY29kaWdvO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3IgPSByZXN1bHQuZXN2YWxvcjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBucmNvZGlnbywgZXN2YWxvciB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBlc3ZhbG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IG5yY29kaWdvLCBlc3ZhbG9yIH1cclxufVxyXG5cclxuXHJcblxyXG5leHBvcnQgdmFyIGRlZk9wZXJhdGl2bzogRGVmT3BlcmF0aXZvID0ge1xyXG4gICAgZXNOb1JlYTogKF9yZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kTm9SZWEsIGVzTm9SZWEgfTtcclxuICAgIH0sXHJcbiAgICBlc05vUmVhU3VwOiAoX3Jlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHtcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhU3VwOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgICByZXR1cm4geyBjb2ROb1JlYVN1cCwgZXNOb1JlYVN1cCB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGE6IChfcmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4ge1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kUmVhLCBlc1JlYSB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGFTdXA6IChfcmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4ge1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYVN1cDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kUmVhU3VwLCBlc1JlYVN1cCB9XHJcbiAgICB9LFxyXG4gICAgVUFwcmluY2lwYWw6ICcnIGFzIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBkZWZVQToge30gYXMgeyBbaSBpbiBJZFVuaWRhZEFuYWxpc2lzXTogeyBwazogSWRWYXJpYWJsZSwgaW5jbHVpZGFzOiBJZFVuaWRhZEFuYWxpc2lzW10sIGlkc0ZvcjogSWRGb3JtdWxhcmlvW10gfSB9LFxyXG4gICAgZGVmRm9yOiB7fSBhcyB7IFtmIGluIElkRm9ybXVsYXJpb106IHsvKmFyYm9sVUE6SWRVbmlkYWRBbmFsaXNpc1tdLCAqLyBoZXJtYW5vPzogdHJ1ZSB9IH1cclxufVxyXG4vLy8vLyBBQkFKTyBkZSBlc3RhIGzDrW5lYSBubyBwdWVkZSBoYWJlciBvdHJvcyBub21icmVzIGRlIHZhcmlhYmxlcyBvIGZvcm11bGFyaW9zIG8gY2FzaWxsZXJvcyBlbiBnZW5lcmFsXHJcblxyXG5leHBvcnQgdmFyIHNldENhbGN1bG9SZWFOb1JlYSA9IChcclxuICAgIGVzTm9SZWE6IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7IGNvZE5vUmVhOiBzdHJpbmcgfCBudWxsLCBlc05vUmVhOiBib29sZWFuIH0sXHJcbiAgICBlc05vUmVhU3VwOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2ROb1JlYVN1cDogc3RyaW5nIHwgbnVsbCwgZXNOb1JlYVN1cDogYm9vbGVhbiB9LFxyXG4gICAgZXNSZWFsaXphZGE6IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7IGNvZFJlYTogbnVtYmVyIHwgbnVsbCwgZXNSZWE6IGJvb2xlYW4gfSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2RSZWFTdXA6IG51bWJlciB8IG51bGwsIGVzUmVhU3VwOiBib29sZWFuIH1cclxuKSA9PiB7XHJcbiAgICBkZWZPcGVyYXRpdm8gPSB7XHJcbiAgICAgICAgLi4uZGVmT3BlcmF0aXZvLFxyXG4gICAgICAgIGVzTm9SZWEsXHJcbiAgICAgICAgZXNOb1JlYVN1cCxcclxuICAgICAgICBlc1JlYWxpemFkYSxcclxuICAgICAgICBlc1JlYWxpemFkYVN1cFxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG50eXBlIFBlcnNvbmEgPSB7IHAxOiBzdHJpbmcsIHAyOiBudW1iZXIsIHAzOiBudW1iZXIsIHA0OiBudW1iZXIgfCBudWxsLCBwNTogMSB8IG51bGwsIHA2OiAxIHwgbnVsbCB9XHJcblxyXG5mdW5jdGlvbiBudW0obnVtOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsKTogbnVtYmVyIHtcclxuICAgIC8vQHRzLWlnbm9yZSBsYSBncmFjaWEgZXMgbWV0ZXIgbnVtIGN1YW5kbyBlcyBzdHJpbmdcclxuICAgIGlmIChpc05hTihudW0gLSAwKSkgcmV0dXJuIDA7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICByZXR1cm4gbnVtIC0gMDtcclxufVxyXG5cclxudmFyIGZ1bmNpb25lc0Nvbm9jaWRhczogeyBbayBpbiBzdHJpbmddOiBib29sZWFuIH0gPSB7fVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmaWNhclNvcnRlbyhvcHRzOiB7XHJcbiAgICBjb25maWd1cmFjaW9uU29ydGVvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsXHJcbiAgICByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXpcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIHZhcmlhYmxlQWN0dWFsOiBJZFZhcmlhYmxlXHJcblxyXG59KSB7XHJcbiAgICBjb25zdCByZXNldGVhclNvcnRlbyA9IChvcHRzOiB7IHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMgfSkgPT4ge1xyXG4gICAgICAgIHZhciB7IHJlc3B1ZXN0YXMgfSA9IG9wdHM7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gPSBudWxsO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXSA9IG51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdID0gbnVsbDtcclxuICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnNvcnRlYWRvX21vc3RyYXI/LmZvckVhY2goKG1vc3RyYXIpID0+IHJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdID0gbnVsbCk7XHJcbiAgICAgICAgaWYgKCd2YXJfbGV0cmEnIGluIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAmJiByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwZXIgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciB7IGNvbmZpZ3VyYWNpb25Tb3J0ZW8sIHZhcmlhYmxlQWN0dWFsLCByZXNwdWVzdGFzLCBmb3JQaywgcmVzcHVlc3Rhc1JhaXogfSA9IG9wdHM7XHJcbiAgICB2YXIgaWRFbmMgPSBmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdO1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpO1xyXG4gICAgdmFyIGV4cHJfaW5jb21wbGV0aXR1ZF9mdW4gPSBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvIGFzIHVua25vd24gYXMgbnVtYmVyXS5leHByKTtcclxuICAgIHZhciBmaWx0cm9fZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmZpbHRyb19qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pbyBhcyB1bmtub3duIGFzIG51bWJlcl0uZXhwcik7XHJcbiAgICB2YXIgdW5pZGFkQW5hbGlzaXMgPSBjb25maWd1cmFjaW9uU29ydGVvLnVuaWRhZF9hbmFsaXNpcztcclxuXHJcbiAgICBpZiAoY29uZmlndXJhY2lvblNvcnRlby5wYXJhbWV0cm9zLmluY2x1ZGVzKHZhcmlhYmxlQWN0dWFsKSkge1xyXG4gICAgICAgIHZhciB1YVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKSA9PiB1YS51bmlkYWRfYW5hbGlzaXMgPT0gdW5pZGFkQW5hbGlzaXMpPy5wYWRyZTtcclxuICAgICAgICB2YXIgcGtBZ3JlZ2FkYVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKSA9PiB1YS51bmlkYWRfYW5hbGlzaXMgPT0gdWFQYWRyZSk/LnBrX2FncmVnYWRhXHJcbiAgICAgICAgaWYgKGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIpIHtcclxuICAgICAgICAgICAgaWYgKHVhUGFkcmUgJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV0pIHtcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBwa0FncmVnYWRhUGFkcmUgZXhpc3RlIGUgaW5kaWNhIGxhIHBvc2ljaW9uIGRlbCBwYWRyZVxyXG4gICAgICAgICAgICAgICAgdmFyIHBhZHJlID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV1bTnVtYmVyKHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3BrQWdyZWdhZGFQYWRyZV0pIC0gMV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY3R1YWwgIT0gY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdID0gbGlrZUFyKHBhZHJlW3VuaWRhZEFuYWxpc2lzXSB8fCBbXSkuYXJyYXkoKS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHsgcmVzcHVlc3RhczogcGFkcmUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodWFQYWRyZSAmJiByZXNwdWVzdGFzUmFpeikge1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIHBrQWdyZWdhZGFQYWRyZSBleGlzdGUgZSBpbmRpY2EgbGEgcG9zaWNpb24gZGVsIHBhZHJlXHJcbiAgICAgICAgICAgICAgICB2YXIgcGFkcmUgPSByZXNwdWVzdGFzUmFpejtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjdHVhbCAhPSBjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkcmVbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0gPSBsaWtlQXIocGFkcmVbdW5pZGFkQW5hbGlzaXNdIHx8IFtdKS5hcnJheSgpLmxlbmd0aDsgLy9zaSBhZ3JlZ2EgZGVzZGUgYm90b24gYWdyZWdhclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oeyByZXNwdWVzdGFzOiBwYWRyZSB9KTtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSBwYWRyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGFzIFJlc3B1ZXN0YXNbXVxyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdICE9IDEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0gPSByZXNwdWVzdGFzVUEubGVuZ3RoICsgMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oeyByZXNwdWVzdGFzIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjYW50aWRhZFRvdGFsID0gTnVtYmVyKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0pO1xyXG4gICAgICAgICAgICBpZiAoY2FudGlkYWRUb3RhbCA8IHJlc3B1ZXN0YXNVQS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIC8vIGRvYmxlIGFzaWduYWNpw7NuIHBhcmEgcXVlIGxvIGNhcmd1ZSBlbiByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzVUEuZmlsdGVyKChwLCBpKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5zb21lKChwYXJhbSkgPT4gcFtwYXJhbV0gfHwgaSA8PSBjYW50aWRhZFRvdGFsIC0gMSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSA9IHJlc3B1ZXN0YXNVQVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlIChjYW50aWRhZFRvdGFsID4gcmVzcHVlc3Rhc1VBLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLnB1c2goe30gYXMgUmVzcHVlc3RhcylcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXSA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIocCA9PiBleHByX2luY29tcGxldGl0dWRfZnVuKHApKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciB2YXIkcDAgPSBcIiRwMFwiIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSA9PSAxICYmXHJcbiAgICAgICAgICAgICAgICAhcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gJiZcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5pbmNvbXBsZXRhc10gPT0gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHZhciBzb3J0ZWFyID0gcmVzcHVlc3Rhc1VBLmZpbHRlcihwID0+IGZpbHRyb19mdW4ocCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnRlYXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZvckVhY2goKHBlciwgaSkgPT4gcGVyW3ZhciRwMF0gPSBpICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5vcmRlbi5wdXNoKHsgdmFyaWFibGU6IHZhciRwMCwgb3JkZW46IDEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zb3J0KGNvbXBhcmVGb3JPcmRlcihjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLm1hcChlbGVtID0+ICh7IGNvbHVtbjogZWxlbS52YXJpYWJsZSwgb3JkZXI6IGVsZW0ub3JkZW4gfSkpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2ljaW9uU29ydGVhZGEgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWd1cmFjaW9uU29ydGVvLm1ldG9kbyA9PSAnaGFzaCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOTyBJTVBMRU1FTlRBRE8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLypwb3NpY2lvblNvcnRlYWRhPShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9jb2VmLnJlZHVjZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN1bSwgcGFpcik9PnN1bSArIGRhdG9zVml2aWVuZGEudGVtW3BhaXIudmFyXSAqIHBhaXIuY29lZiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAlIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLmRpdmlzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSAlIHNvcnRlYXIubGVuZ3RoKi9cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV0cmEgPSAnQSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhckxldHJhOiBJZFZhcmlhYmxlID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udmFyX2xldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwZXJzb25hIG9mIHNvcnRlYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5maW5kKChfcGVyLCBpKSA9PiBpID09IHBlcnNvbmFbdmFyJHAwXSBhcyBudW1iZXIgLSAxKSFbdmFyTGV0cmFdID0gbGV0cmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hW3ZhckxldHJhXSA9IGxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0cmEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxldHJhLmNoYXJDb2RlQXQoMCkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGFBbGVhdG9yaWFNaWVtYnJvcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnRhYmxhLm1hcCgobGlzdGEpID0+IGxpc3RhLnNwbGl0KCcnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN0byA9IGlkRW5jICUgMTA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5hVGFibGFBbGVhdG9yaWEgPSByZXN0byA/IHJlc3RvIC0gMSA6IDk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3J0ZWFyLmxlbmd0aCA+IHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNwbGljZSh0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCkgLy9kZXNjYXJ0byBjYW5kaWRhdG9zIHNpIHNvbiBtw6FzIHF1ZSBsbyBxdWUgcGVybWl0ZSBsYSB0YWJsYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxhVGFibGFBbGVhdG9yaWEgPSBzb3J0ZWFyLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYVNlbGVjY2lvbmFkYSA9IHRhYmxhQWxlYXRvcmlhTWllbWJyb3NbZmlsYVRhYmxhQWxlYXRvcmlhXVtjb2x1bW5hVGFibGFBbGVhdG9yaWFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpY2lvblNvcnRlYWRhID0gcmVzcHVlc3Rhc1VBLmZpbmRJbmRleCgocDogUmVzcHVlc3RhcykgPT4gcFt2YXJMZXRyYV0gPT0gbGV0cmFTZWxlY2Npb25hZGEpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gPSBwb3NpY2lvblNvcnRlYWRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc10gPSBzb3J0ZWFyLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1ttb3N0cmFyLnRhcmdldF0gPSByZXNwdWVzdGFzVUFbcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gYXMgbnVtYmVyIC0gMV1bbW9zdHJhci5zb3VyY2VdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSA9IHJlc3B1ZXN0YXNVQS5sZW5ndGggfHwgbnVsbDsgLy9ubyBxdWVyZW1vcyBlbCB2YWxvciAwXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBXSA9ICdvayc7XHJcbiAgICAgICAgICAgIGlmIChjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWxdID0gJ29rJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYmFycmVyU3ViQXJib2wocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBub2RvQWN0dWFsOiBSZXNwdWVzdGFzIHwgUmVzcHVlc3Rhc1tdLCB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMsIGZvclBrQWN1bXVsYWRvOiBGb3JQaykge1xyXG4gICAgdmFyIHVhRGVmID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGVzQXJyYXkgPSBub2RvQWN0dWFsIGluc3RhbmNlb2YgQXJyYXk7XHJcbiAgICB2YXIgY29uanVudG86IFJlc3B1ZXN0YXNbXSA9IGVzQXJyYXkgPyBub2RvQWN0dWFsIGFzIFJlc3B1ZXN0YXNbXSA6IFtub2RvQWN0dWFsIGFzIFJlc3B1ZXN0YXNdO1xyXG4gICAgXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbmp1bnRvLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHJlc3AgPSBjb25qdW50b1tpXTtcclxuICAgICAgICBpZiAoIXJlc3ApIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICB2YXIgbnVtID0gZXNBcnJheSA/IGkgKyAxIDogKGZvclBrQWN1bXVsYWRvW3VhRGVmLnBrX2FncmVnYWRhXSB8fCAxKTtcclxuICAgICAgICB2YXIgaWRGb3JtdWxhcmlvID0gT2JqZWN0LmtleXMoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmluZChrZXkgPT4gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1trZXkgYXMgSWRGb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PT0gdW5pZGFkX2FuYWxpc2lzKSBhcyBJZEZvcm11bGFyaW87XHJcbiAgICAgICAgdmFyIG1pRm9yUGs6IEZvclBrID0geyAuLi5mb3JQa0FjdW11bGFkbywgW3VhRGVmLnBrX2FncmVnYWRhXTogbnVtLCBmb3JtdWxhcmlvOiBpZEZvcm11bGFyaW8gfHwgZm9yUGtBY3VtdWxhZG8uZm9ybXVsYXJpbyB9O1xyXG5cclxuICAgICAgICBpZiAoZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcykge1xyXG4gICAgICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKHJlc3B1ZXN0YXNSYWl6LCBtaUZvclBrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bykge1xyXG4gICAgICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8ocmVzcHVlc3Rhc1JhaXosIG1pRm9yUGspO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGhpamFzID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbHRlcih1ID0+IHUucGFkcmUgPT09IHVuaWRhZF9hbmFsaXNpcykua2V5cygpO1xyXG4gICAgICAgIGZvciAodmFyIHVhSGlqYSBvZiBoaWphcykge1xyXG4gICAgICAgICAgICB2YXIgaGlqYXNSZXNwID0gcmVzcFt1YUhpamEgYXMgSWRVbmlkYWRBbmFsaXNpc107XHJcbiAgICAgICAgICAgIGlmIChoaWphc1Jlc3ApIHtcclxuICAgICAgICAgICAgICAgIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBoaWphc1Jlc3AgYXMgUmVzcHVlc3Rhc1tdLCB1YUhpamEgYXMgSWRVbmlkYWRBbmFsaXNpcywgbWlGb3JQayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXo6IEZvclBrKSB7XHJcbiAgICB2YXIgdWFQcGFsID0gT2JqZWN0LmtleXMoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZChrZXkgPT4gIWVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNba2V5IGFzIElkVW5pZGFkQW5hbGlzaXNdLnBhZHJlKSBhcyBJZFVuaWRhZEFuYWxpc2lzO1xyXG4gICAgXHJcbiAgICBiYXJyZXJTdWJBcmJvbChyZXNwdWVzdGFzUmFpeiwgcmVzcHVlc3Rhc1JhaXosIHVhUHBhbCwgZm9yUGtSYWl6KTtcclxuICAgIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6LCByZXNwdWVzdGFzUmFpeiwgdWFQcGFsLCBmb3JQa1JhaXopO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICBmb3JtdWxhcmlvczogeyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOiBJbmZvRm9ybXVsYXJpbyB9LFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcclxuICAgIFVBOiBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgZm9yUGs6IEZvclBrLFxyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXM6IFJlc3B1ZXN0YXMsIC8vIGluY2x1eWVuIGxhIGRlIHRvZG9zIGxvcyBwYWRyZXMgeSBhbnNlc3Ryb3MsXHJcbiAgICByZXNwdWVzdGFzUGFkcmU6IFJlc3B1ZXN0YXMgfCBudWxsLFxyXG4gICAgb3B0czogT3BjaW9uZXNSb3dWYWxpZGF0b3IsXHJcbikge1xyXG4gICAgLy8gcmVjb3JyaWVuZCBVQSBwZXJzb25hcyB5IG1hc2NvdGFzXHJcbiAgICBmb3IgKHZhciBVQWluY2x1aWRhIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaW5jbHVpZGFzKSB7XHJcbiAgICAgICAgdmFyIHBrTnVldmEgPSBkZWZPcGVyYXRpdm8uZGVmVUFbVUFpbmNsdWlkYV0ucGs7XHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1tVQWluY2x1aWRhXTtcclxuICAgICAgICBsaWtlQXIoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXNIaWpvLCB2YWxvclBrT1Bvc2ljaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB2YWxvclBrID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KHZhbG9yUGtPUG9zaWNpb24sIGNvbmp1bnRvUmVzcHVlc3Rhc1VBKTtcclxuICAgICAgICAgICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3IsXHJcbiAgICAgICAgICAgICAgICBmb3JtdWxhcmlvcyxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNIaWpvLFxyXG4gICAgICAgICAgICAgICAgVUFpbmNsdWlkYSxcclxuICAgICAgICAgICAgICAgIHsgLi4uZm9yUGssIFtwa051ZXZhXTogdmFsb3JQayB9LFxyXG4gICAgICAgICAgICAgICAgeyAuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3Rhc0hpam8sIFtwa051ZXZhXTogdmFsb3JQayB9LFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgLy8gUzEgLCBBMVxyXG4gICAgZm9yICh2YXIgZXNIZXJtYW5vIG9mIFt0cnVlLCBmYWxzZV0pIHtcclxuICAgICAgICBmb3IgKHZhciBmb3JtdWxhcmlvIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaWRzRm9yKSBpZiAoISFlc0hlcm1hbm8gPT0gISFkZWZPcGVyYXRpdm8uZGVmRm9yW2Zvcm11bGFyaW9dLmhlcm1hbm8pIHtcclxuICAgICAgICAgICAgdmFyIHBsYWluRm9yUGs6IFBsYWluRm9yUGsgPSB0b1BsYWluRm9yUGsoeyAuLi5mb3JQaywgZm9ybXVsYXJpbyB9KVxyXG4gICAgICAgICAgICB2YXIgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcyA9IDEwO1xyXG4gICAgICAgICAgICB2YXIgdmFyQXV0b0luZ3Jlc2FkYXMgPSBbXTtcclxuICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGh1Ym9BdXRvaW5ncmVzb3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdID1cclxuICAgICAgICAgICAgICAgICAgICByb3dWYWxpZGF0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbWFyY2FGaW46ICdmaW4nLCAuLi5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdmFyIHsgcmVzdW1lbiwgYXV0b0luZ3Jlc2FkYXMgfSA9IGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhck5hbWU6IElkVmFyaWFibGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0b0luZ3Jlc2FkYXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyTmFtZSBpbiBhdXRvSW5ncmVzYWRhcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FtYmlvID0gcmVzcHVlc3Rhc1t2YXJOYW1lXSAhPT0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW1iaW8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5wdXNoKHZhck5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVib0F1dG9pbmdyZXNvcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gd2hpbGUgKGh1Ym9BdXRvaW5ncmVzb3MgJiYgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcy0tID4gMCk7XHJcbiAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLmZvckVhY2goX3Zhcm5hbWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa10uZXN0YWRvc1tfdmFybmFtZSBhcyBJZFZhcmlhYmxlXSA9ICdhY3R1YWwnO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB2YXIgQkZfdmFybmFtZSA9ICckQi4nICsgZm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIHZhciBmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGEgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgICAgICAgICBpZiAoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYV0pIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gaGF5IGNvbmZpZ3VyYWNpb24gZGUgc29ydGVvIHBhcmEgZWwgZm9ybXVsYXJpbyAke2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYX1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXTtcclxuICAgICAgICAgICAgdmFyIHJlc3VtZW5Pck51bGwgPVxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgJiZcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsID09IEJGX3Zhcm5hbWUgP1xyXG4gICAgICAgICAgICAgICAgICAgICdvaydcclxuICAgICAgICAgICAgICAgICAgICA6IHJlc3VtZW4gPT0gJ3ZhY2lvJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiByZXN1bWVuXHJcbiAgICAgICAgICAgIGlmIChlc0hlcm1hbm8pIHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsID09ICdvaycgPyAnb2snIDogbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwdWVzdGFzUGFkcmUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgLy9yZXNwdWVzdGFzUGFkcmVbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KG51bWJlck9yU3RyaW5nOiBudW1iZXIgfCBzdHJpbmcsIG9iamVjdDogb2JqZWN0IHwgYW55W10pOiAobnVtYmVyIHwgc3RyaW5nKSB7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzdG95IHVzYW5kbyBpc05hTiBwYXJhIHZlciBzaSBlcyBvIG5vIHVuIG7Dum1lcm8gc3VtYWJsZVxyXG4gICAgaWYgKGlzTmFOKG51bWJlck9yU3RyaW5nKSkge1xyXG4gICAgICAgIHJldHVybiBudW1iZXJPclN0cmluZztcclxuICAgIH1cclxuICAgIHJldHVybiBOdW1iZXIobnVtYmVyT3JTdHJpbmcpICsgKG9iamVjdCBpbnN0YW5jZW9mIEFycmF5ID8gMSA6IDApO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldE1haW5Gb3JtRm9yVml2aWVuZGEgPSAodmFsdWVQa1JhaXo6IFZhbHVlUGtSYWl6KTogSWRGb3JtdWxhcmlvID0+IHtcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkclt2YWx1ZVBrUmFpel0udGFyZWEubWFpbl9mb3JtXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpIHtcclxuICAgIGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maWx0ZXIodWFEZWYgPT4gIXVhRGVmLnBhZHJlKS5mb3JFYWNoKHVhRGVmID0+IHtcclxuICAgICAgICB2YXIgZXNQcmluY2lwYWwgPSAoZjogRm9ybXVsYXJpbywgZW5jOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZvcm11bGFyaW9QcmluY2lwYWwgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGVuYyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtdWxhcmlvUHJpbmNpcGFsID8gZm9ybXVsYXJpb1ByaW5jaXBhbCA9PSBmLmlkX2Nhc2lsbGVybyA6IGYuZm9ybXVsYXJpb19wcmluY2lwYWxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vYWPDoSBoYXkgcXVlIHNhbml0aXphciBwb3JxdWUgZXZpZGVudGVtZW50ZSBwdWVkZSB2ZW5pciBjb24gaGFzaHMgZGUgZW5jdWVzdGFzIHNpbiBpbmZvIGVsIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNcclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW3VhRGVmLnVuaWRhZF9hbmFsaXNpc11cclxuICAgICAgICBiZWluZ0FycmF5KGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzLCB2YWxvclBrT1Bvc2ljaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB2YWxvclBrID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KHZhbG9yUGtPUG9zaWNpb24sIGNvbmp1bnRvUmVzcHVlc3Rhc1VBKTtcclxuICAgICAgICAgICAgbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmID0+IGYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFEZWYudW5pZGFkX2FuYWxpc2lzICYmIGVzUHJpbmNpcGFsKGYuY2FzaWxsZXJvcywgdmFsb3JQayBhcyBudW1iZXIpKS5mb3JFYWNoKChfZGVmRiwgZm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvclBrUmFpeiA9IHsgZm9ybXVsYXJpbywgW3VhRGVmLnBrX2FncmVnYWRhXTogdmFsb3JQayB9IGFzIEZvclBrUmFpelxyXG4gICAgICAgICAgICAgICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzLCBmb3JQa1JhaXosIHt9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOiB7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106IEluZm9Gb3JtdWxhcmlvIH0sXHJcbiAgICBmb3JQa1JhaXo6IEZvclBrUmFpeixcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsXHJcbiAgICBvcHRzOiBPcGNpb25lc1Jvd1ZhbGlkYXRvclxyXG4pIHtcclxuICAgIHZhciBmb3JQazogRm9yUGsgPSB7IC4uLmZvclBrUmFpeiB9O1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGZlZWRiYWNrUm93VmFsaWRhdG9yLCBmb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsLCBmb3JQaywgcmVzcHVlc3RhcywgbnVsbCwgb3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhczogUmVzcHVlc3RhcywgZm9yUGtSYWl6OiBGb3JQa1JhaXosIG9wdHM6IE9wY2lvbmVzUm93VmFsaWRhdG9yKSB7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzogUmVzdW1lbkVzdGFkbztcclxuICAgIC8vIEB0cy1pZ25vcmUgUGFydGlhbFxyXG4gICAgdmFyIG51ZXZvc1Jvd3M6IHsgW3ggaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBJZEZpbj4gfSA9IHt9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEobnVldm9zUm93cywgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgZm9yUGtSYWl6LCByZXNwdWVzdGFzLCBvcHRzKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0gbGlrZUFyKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9mZWVkYmFjazogYW55LCBwbGFpblBrOiBQbGFpbkZvclBrKSA9PiBKU09OLnBhcnNlKHBsYWluUGspW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gIT0gZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pLnBsYWluKCk7XHJcbiAgICBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciA9IHsgLi4uZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIC4uLm51ZXZvc1Jvd3MgfTtcclxuICAgIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXSA9IHtcclxuICAgICAgICAuLi5kYXRvc0J5UGFzcy5yZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXVtmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0sXHJcbiAgICAgICAgLi4uY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoXHJcbiAgICAgICAgICAgIGZvclBrUmFpeixcclxuICAgICAgICAgICAgbnVldm9zUm93cyxcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1xyXG4gICAgICAgIClcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyA9IChpZEZvcm11bGFyaW86IElkRm9ybXVsYXJpbyB8IHVuZGVmaW5lZCwgZm9ybXNGZWVkYmFjazogSWRGb3JtdWxhcmlvW10gPSBbXSkgPT4ge1xyXG4gICAgaWYgKGlkRm9ybXVsYXJpbykge1xyXG4gICAgICAgIGZvciAobGV0IGNhc2lsbGVybyBvZiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb10uY2FzaWxsZXJvcy5jYXNpbGxlcm9zKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXNpbGxlcm8udGlwb2MgPT0gJ0JGJykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1IaWpvID0gKGNhc2lsbGVyby5zYWx0bz8uc3RhcnRzV2l0aCgnRjonKSA/IGNhc2lsbGVyby5zYWx0byA6ICdGOicgKyBjYXNpbGxlcm8uc2FsdG8pIGFzIElkRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtSGlqbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1zRmVlZGJhY2sucHVzaChmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhmb3JtSGlqbywgZm9ybXNGZWVkYmFjayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybXNGZWVkYmFjaztcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRGb3JtdWxhcmlvc0ZvclZhbHVlUGtSYWl6ID0gKHZhbHVlUGtSYWl6OiBWYWx1ZVBrUmFpeikgPT4ge1xyXG4gICAgdmFyIG1haW5Gb3JtRm9yVmFsdWVQa1JhaXogPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKHZhbHVlUGtSYWl6KTtcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gW21haW5Gb3JtRm9yVmFsdWVQa1JhaXpdO1xyXG4gICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhtYWluRm9ybUZvclZhbHVlUGtSYWl6LCBmb3Jtc0ZlZWRiYWNrKTtcclxuICAgIHJldHVybiBmb3Jtc0ZlZWRiYWNrO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyQWN0dWFsQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gfCBudWxsLCBudW1FbGVtZW50b1VBOiBudW1iZXIsIG51bUFjdHVhbDogbnVtYmVyIHwgbnVsbCwgZm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvLCByOiBSZXNwdWVzdGFzKSA9PlxyXG4gICAgISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmXHJcbiAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpb1xyXG4gICAgICAgID9cclxuICAgICAgICBudW1FbGVtZW50b1VBID09IGNvYWxlc2NlKFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDpcclxuICAgICAgICBudW1BY3R1YWwgPT0gbnVtRWxlbWVudG9VQVxyXG4gICAgKVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhckRpc2FibGVkQkYgPSAoXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyB8IG51bGwsXHJcbiAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW86IENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8gfCBudWxsLFxyXG4gICAgbnVtRWxlbWVudG9VQTogbnVtYmVyLFxyXG4gICAgZm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvLFxyXG4gICAgcjogUmVzcHVlc3Rhc1xyXG4pID0+IHtcclxuICAgIGlmIChoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dKSB7XHJcbiAgICAgICAgdmFyIGV4cHJfaGFiaWxpdGFyX2Z1biA9IGdldEZ1bmNpb25IYWJpbGl0YXIoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dLmV4cHJfaGFiaWxpdGFyX2JvdG9uX2pzKTtcclxuICAgICAgICByZXR1cm4gIWV4cHJfaGFiaWxpdGFyX2Z1bihyW2hhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXNdW251bUVsZW1lbnRvVUEgLSAxXSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICAgICAgKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8gfHxcclxuICAgICAgICAgICAgICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MoY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwpLmluY2x1ZGVzKGZvcm11bGFyaW8pXHJcbiAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgbnVtRWxlbWVudG9VQSAhPSBjb2FsZXNjZShcclxuICAgICAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgICAgICkpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gfCBudWxsLCBmb3JtdWxhcmlvOiBJZEZvcm11bGFyaW8pID0+XHJcbiAgICAhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvKVxyXG5cclxudHlwZSBSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgcmVzdW1lbkVzdGFkbzogUmVzdW1lbkVzdGFkbyxcclxuICAgIHJlc3VtZW5Fc3RhZG9TdXA6IFJlc3VtZW5Fc3RhZG8sXHJcbiAgICBjb2RSZWE6IG51bWJlciB8IG51bGwsXHJcbiAgICBjb2ROb1JlYTogc3RyaW5nIHwgbnVsbCxcclxuICAgIGNvZFJlYVN1cDogbnVtYmVyIHwgbnVsbFxyXG4gICAgY29kTm9SZWFTdXA6IHN0cmluZyB8IG51bGwsXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzXHJcbik6IFJlc3VsdGFkb1Jlc3VtZW4ge1xyXG4gICAgdmFyIHsgY29kUmVhLCBlc1JlYSB9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgeyBjb2ROb1JlYSwgZXNOb1JlYSB9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWEocmVzcHVlc3RhcylcclxuICAgIHZhciB7IGNvZFJlYVN1cCwgZXNSZWFTdXAgfSA9IGRlZk9wZXJhdGl2by5lc1JlYWxpemFkYVN1cChyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHsgY29kTm9SZWFTdXAsIGVzTm9SZWFTdXAgfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXooZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgdmFyIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldXHJcbiAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICB2YXIgZmVlZEJhY2tWaXZpZW5kYSA9IGxpa2VBcihmZWVkYmFja1Jvd1ZhbGlkYXRvcikuZmlsdGVyKChfcm93LCBwbGFpblBrKSA9PiB7XHJcbiAgICAgICAgdmFyIHRpZW5lSW5kaXZpZHVhbCA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvICYmICEhKGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCAmJiBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlKVxyXG4gICAgICAgIHZhciB0aWVuZUJvdG9uRGVzSGFiaWxpdGFibGUgPSBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW0pTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbyBhcyBJZEZvcm11bGFyaW9dO1xyXG4gICAgICAgIHZhciBwa0FncmVnYWRhID0gbnVsbDtcclxuICAgICAgICBpZiAodGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlKSB7XHJcbiAgICAgICAgICAgIHBrQWdyZWdhZGEgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEsIF9pZFVBKSA9PlxyXG4gICAgICAgICAgICAgICAgdWEudW5pZGFkX2FuYWxpc2lzID09IGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8gYXMgSWRGb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXMpPy5wa19hZ3JlZ2FkYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocGxhaW5QaylbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSA9PSBmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSAmJlxyXG4gICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLmluY2x1ZGVzKEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbykgJiZcclxuICAgICAgICAgICAgKHRpZW5lQm90b25EZXNIYWJpbGl0YWJsZSA/XHJcbiAgICAgICAgICAgICAgICAhY2FsY3VsYXJEaXNhYmxlZEJGKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspW3BrQWdyZWdhZGEgYXMgQ2FtcG9Qa10sXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNGb3JQayhKU09OLnBhcnNlKHBsYWluUGspLCB0cnVlKS5yZXNwdWVzdGFzQXVtZW50YWRhc1xyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgOiB0aWVuZUluZGl2aWR1YWwgP1xyXG4gICAgICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykucGVyc29uYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlc3RydWN0dXJhLmNvblJlYUhvZ2FyID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykuaG9nYXIgPyByZXNwdWVzdGFzRm9yUGsoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOiBmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtdWxhcmlvOiBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2dhcjogSlNPTi5wYXJzZShwbGFpblBrKS5ob2dhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBGb3JQaykucmVzcHVlc3RhcyA6IHt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNGb3JQayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBGb3JQaykucmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICA6IHRydWUpXHJcbiAgICB9KS5hcnJheSgpO1xyXG4gICAgdmFyIHByaW9yaWRhZGVzOiB7IFtrZXkgaW4gUmVzdW1lbkVzdGFkb106IHsgcHJpb3JpZGFkOiBudW1iZXIsIGNhbnRpZGFkOiBudW1iZXIgfSB9ID0ge1xyXG4gICAgICAgICdubyByZWEnOiB7IHByaW9yaWRhZDogMSwgY2FudGlkYWQ6IDAgfSxcclxuICAgICAgICAnY29uIHByb2JsZW1hcyc6IHsgcHJpb3JpZGFkOiAyLCBjYW50aWRhZDogMCB9LFxyXG4gICAgICAgICdpbmNvbXBsZXRvJzogeyBwcmlvcmlkYWQ6IDMsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ3ZhY2lvJzogeyBwcmlvcmlkYWQ6IDQsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ2NpdGEgcGFjdGFkYSc6IHsgcHJpb3JpZGFkOiA1LCBjYW50aWRhZDogMCB9LFxyXG4gICAgICAgICdvayc6IHsgcHJpb3JpZGFkOiA2LCBjYW50aWRhZDogMCB9XHJcbiAgICB9XHJcbiAgICB2YXIgbWluID0gNjtcclxuICAgIHZhciBtaW5SZXN1bWVuOiBSZXN1bWVuRXN0YWRvID0gJ29rJztcclxuICAgIGZvciAodmFyIGZlZWRiYWNrIG9mIGZlZWRCYWNrVml2aWVuZGEpIHtcclxuICAgICAgICB2YXIgcmVzdW1lbiA9IGZlZWRiYWNrLnJlc3VtZW47XHJcbiAgICAgICAgcHJpb3JpZGFkZXNbcmVzdW1lbl0uY2FudGlkYWQrKztcclxuICAgICAgICBpZiAocHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkIDwgbWluKSB7XHJcbiAgICAgICAgICAgIG1pbiA9IHByaW9yaWRhZGVzW3Jlc3VtZW5dLnByaW9yaWRhZDtcclxuICAgICAgICAgICAgbWluUmVzdW1lbiA9IHJlc3VtZW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG1pblJlc3VtZW4gPT0gJ3ZhY2lvJyAmJiBwcmlvcmlkYWRlc1snb2snXS5jYW50aWRhZCB8fCBtaW5SZXN1bWVuID09ICdpbmNvbXBsZXRvJykge1xyXG4gICAgICAgIGlmIChmYWxzZSAvKnJlc3B1ZXN0YXNbc3AxXT09MiAmJiByZXNwdWVzdGFzW3NwNl09PW51bGwqLykge1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuID0gJ2NpdGEgcGFjdGFkYSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWluUmVzdW1lbiA9ICdpbmNvbXBsZXRvJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9UT0RPIEFSUkVHTEFSIEVTVEUgSE9SUk9SLCBHRU5FUkFMSVpBUlxyXG4gICAgdmFyIHRhcmVhID0gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gYXMgdW5rbm93biBhcyBJZEVuY10udGFyZWEudGFyZWE7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzogUmVzdW1lbkVzdGFkbztcclxuICAgIHZhciByZXN1bWVuRXN0YWRvU3VwOiBSZXN1bWVuRXN0YWRvID0gJ3ZhY2lvJztcclxuICAgIGlmICh0YXJlYSA9PSAnc3VwZScpIHtcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwID0gZXNOb1JlYVN1cCA/ICdubyByZWEnIDogbWluUmVzdW1lblxyXG4gICAgICAgIC8vcGFyYSBxdWUgY29sb3JlZSBiaWVuIGVuIGxhIGhkciBkZWwgRE0gKGx1ZWdvIGVuIGJiZGQgbm8gc2UgZ3VhcmRhKVxyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSByZXN1bWVuRXN0YWRvU3VwXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSBlc05vUmVhID8gJ25vIHJlYScgOiBtaW5SZXN1bWVuXHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0YWRvOiBSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8sXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkb1N1cCxcclxuICAgICAgICBjb2RSZWEsXHJcbiAgICAgICAgY29kTm9SZWEsXHJcbiAgICAgICAgY29kUmVhU3VwLFxyXG4gICAgICAgIGNvZE5vUmVhU3VwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0YWRvXHJcbn1cclxuIl19
|
|
1136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBcUNBLG9EQUVDO0lBRUQsNEZBRUM7SUFvQ0QsMERBRUM7SUFFRCxvREFJQztJQXNCRCw0Q0FJQztJQWdCRCxzQ0FVQztJQUVELHdDQU9DO0lBV0QsMERBS0M7SUFFRCw0QkFFQztJQUVELHNDQUVDO0lBa0NELDhDQUlDO0lBTUQsMENBaURDO0lBRUQsZ0ZBdUNDO0lBRUQsNERBb0VDO0lBRUQsMENBUUM7SUFFRCw0Q0FRQztJQWtCRCxnREFDQztJQWNELGdFQXlEQztJQUVELHNEQUdDO0lBRUQsc0RBRUM7SUFFRCwwREFFQztJQUVELG9EQUVDO0lBRUQsOERBTUM7SUFFRCwwREFNQztJQUVELDREQWVDO0lBR0Qsd0NBS0M7SUFvSkQsa0RBZ0JDO0lBRUQsa0RBMEJDO0lBc0hELDBDQWtJQztJQWdDRCxzREFLQztJQUVELHdFQWdGQztJQUVELDREQU1DO0lBTUQsZ0VBaUJDO0lBRUQsNERBU0M7SUF5RkQsMERBZ0dDO0lBbHpDRCxxQ0FBdUQ7SUFFdkQsaURBQW9HO0lBRXBHLCtDQUErRDtJQUMvRCwyQ0FBc0M7SUFFdEMsbUNBc0JpQjtJQUVqQixtREFBc0Q7SUFFdEQsSUFBSSxVQUFVLEdBQUcsRUFHaEIsQ0FBQTtJQUNELFNBQWdCLG9CQUFvQixDQUFDLGlCQUF5RTtRQUMxRyxVQUFVLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUE7SUFDcEQsQ0FBQztJQUVELFNBQWdCLHdDQUF3QyxDQUFDLHFDQUE2RjtRQUNsSixVQUFVLENBQUMscUNBQXFDLEdBQUcscUNBQXFDLENBQUE7SUFDNUYsQ0FBQztJQVNELElBQUksV0FBVyxHQUFHLEVBQWlCLENBQUE7SUFTbkMsU0FBUyxPQUFPLENBQUMsT0FBb0I7UUFD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QixNQUFNO1lBQ04sUUFBUTtZQUNSLFNBQVM7WUFDVCxXQUFXO1NBQ2QsQ0FBQTtRQUNELE9BQU8sU0FBUyxDQUFBO0lBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzdHJpY3QgYXMgbGlrZUFyLCBiZWluZ0FycmF5IH0gZnJvbSBcImxpa2UtYXJcIjtcclxuXHJcbmltcG9ydCB7IGdldFJvd1ZhbGlkYXRvciwgRm9ybVN0cnVjdHVyZVN0YXRlLCBPcGNpb25lc1Jvd1ZhbGlkYXRvciwgRmVlZGJhY2sgfSBmcm9tIFwicm93LXZhbGlkYXRvclwiO1xyXG5cclxuaW1wb3J0IHsgZGF0ZSwgY29tcGFyZUZvck9yZGVyLCBjb2FsZXNjZSB9IGZyb20gXCJiZXN0LWdsb2JhbHNcIjtcclxuaW1wb3J0IHsgZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEVzdHJ1Y3R1cmEsXHJcbiAgICBGb3JQaywgRm9yUGtSYWl6LFxyXG4gICAgSWRGaW4sIElkRm9ybXVsYXJpbywgSWRQcmVndW50YSwgSWRUYXJlYSwgSWRWYXJpYWJsZSxcclxuICAgIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBJbmZvRm9ybXVsYXJpbyxcclxuICAgIFBsYWluRm9yUGssIFJlc3B1ZXN0YXMsIFJlc3B1ZXN0YXNSYWl6LCBSZXN1bWVuRXN0YWRvLFxyXG4gICAgVmFsb3IsIFZpc2l0YSxcclxuICAgIHRvUGxhaW5Gb3JQayxcclxuICAgIFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgRm9ybXVsYXJpbyxcclxuICAgIENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMsXHJcbiAgICBJZEVuYyxcclxuICAgIERlZk9wZXJhdGl2byxcclxuICAgIGl0ZXJhdG9yLFxyXG4gICAgQ29uZmlndXJhY2lvbkhhYmlsaXRhckJvdG9uRm9ybXVsYXJpbyxcclxuICAgIENhbXBvUGssXHJcbiAgICBJZENhcmdhLFxyXG4gICAgQ2FyZ2EsXHJcbiAgICBDYW1wb1BrUmFpeixcclxuICAgIFZhbHVlUGtSYWl6XHJcbn0gZnJvbSBcIi4vdGlwb3NcIjtcclxuXHJcbmltcG9ydCB7IGdldEZvcm11bGFyaW9Db25maWcgfSBmcm9tIFwiLi9yZW5kZXItY29uZmlnXCI7XHJcblxyXG52YXIgZXNwZWNpYWxlcyA9IHt9IGFzIHtcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzPzogKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6IEZvclBrKSA9PiB2b2lkXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvPzogKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6IEZvclBrKSA9PiB2b2lkXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbGN1bGFyVmFyaWFibGVzKGNhbGN1bGFyVmFyaWFibGVzOiAocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHZvaWQpIHtcclxuICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMgPSBjYWxjdWxhclZhcmlhYmxlc1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byhjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvOiAocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHZvaWQpIHtcclxuICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byA9IGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm9cclxufVxyXG5cclxudHlwZSBEYXRvc0J5UGFzcyA9IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzICYge1xyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHsgIC8vIG5vIHNlIHBlcnNpc3RlXHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9XHJcbiAgICBkaXJ0eTogYm9vbGVhblxyXG59O1xyXG5cclxudmFyIGRhdG9zQnlQYXNzID0ge30gYXMgRGF0b3NCeVBhc3NcclxuXHJcbmludGVyZmFjZSBSZWN0IHtcclxuICAgIHRvcDogbnVtYmVyO1xyXG4gICAgbGVmdDogbnVtYmVyO1xyXG4gICAgd2lkdGg6IG51bWJlcjtcclxuICAgIGhlaWdodDogbnVtYmVyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRSZWN0KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUmVjdCB7XHJcbiAgICB2YXIgcmVjdDogUmVjdCA9IHsgdG9wOiAwLCBsZWZ0OiAwLCB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCwgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodCB9O1xyXG4gICAgdmFyIGN1cnJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XHJcbiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgcmVjdC50b3AgKz0gY3VycmVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgcmVjdC5sZWZ0ICs9IGN1cnJlbnQub2Zmc2V0TGVmdDtcclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5vZmZzZXRQYXJlbnQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbn1cclxuXHJcbi8vQHRzLWlnbm9yZSBhcnJhbmNhIGVuIGJsYW5jb1xyXG52YXIgZXN0cnVjdHVyYTogRXN0cnVjdHVyYSA9IG51bGwgYXMgRXN0cnVjdHVyYTtcclxuXHJcbmxldCBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm86IChkYnBwOiBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcykgPT4gUHJvbWlzZTxhbnk+ID0gKCkgPT4ge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdwZXJzaXN0aXJEYXRvc0J5UGFzcyBTSU4gREVGSU5JUicpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRQZXJzaXN0aXJEYXRvc0J5UGFzcyhwZXJzaXN0aXJEYXRvc0J5UGFzc0Z1bjogdHlwZW9mIHBlcnNpc3RpckRhdG9zQnlQYXNzKSB7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm8gPSBwZXJzaXN0aXJEYXRvc0J5UGFzc0Z1bjtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRicHA6IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzKSB7XHJcbiAgICBhd2FpdCBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm8oZGJwcCk7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGZhbHNlXHJcbiAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBjcmVhckVuY3Vlc3RhID0gKGlkQ2FyZ2E6IElkQ2FyZ2EsIGNhbGxCYWNrOiAoZm9yUGtSYWl6OiBGb3JQa1JhaXopID0+IHZvaWQpID0+IHtcclxuICAgIGNvbnN0IE5FWFRfQVVUT19WQUxVRV9QS19SQUlaID0gZ2V0Rm9ybXVsYXJpb0NvbmZpZygpLmdldFVsdGltb1ZhbG9yUGtSYWl6KCkgfHwgJy0xJztcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBnZXRGb3JtdWxhcmlvQ29uZmlnKCkuc2V0VWx0aW1vVmFsb3JQa1JhaXooKE51bWJlcihORVhUX0FVVE9fVkFMVUVfUEtfUkFJWikgLSAxKS50b1N0cmluZygpKTtcclxuICAgIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW05FWFRfQVVUT19WQUxVRV9QS19SQUlaIGFzIHVua25vd24gYXMgSWRFbmNdID0ge30gYXMgUmVzcHVlc3Rhc1JhaXo7XHJcbiAgICBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltORVhUX0FVVE9fVkFMVUVfUEtfUkFJWiBhcyB1bmtub3duIGFzIElkRW5jXSA9IHtcclxuICAgICAgICAuLi5lc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkcixcclxuICAgICAgICB0ZW06IHsgLi4uZXN0cnVjdHVyYS5kZWZhdWx0SW5mb3JtYWNpb25IZHIudGVtIH1cclxuICAgIH07XHJcbiAgICBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltORVhUX0FVVE9fVkFMVUVfUEtfUkFJWiBhcyB1bmtub3duIGFzIElkRW5jXS50ZW0uY2FyZ2EgPSBpZENhcmdhO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKS50aGVuKFxyXG4gICAgICAgICgpID0+IGNhbGxCYWNrKHtcclxuICAgICAgICAgICAgZm9ybXVsYXJpbzogZXN0cnVjdHVyYS5kZWZhdWx0SW5mb3JtYWNpb25IZHIudGFyZWEubWFpbl9mb3JtLFxyXG4gICAgICAgICAgICBbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTogTnVtYmVyKE5FWFRfQVVUT19WQUxVRV9QS19SQUlaKSBhcyBWYWx1ZVBrUmFpelxyXG4gICAgICAgIH0gYXMgRm9yUGtSYWl6KVxyXG4gICAgKS8vbm8gcXVpdGFyIGVsIGNhc3RlbyBwb3JxdWUgdmllbmUgY29tbyB0ZXh0byB5IG5lY2VzaXRvIHF1ZSBzZWEgbsO6bWVyb1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVuY29sYXJCYWNrdXAoXHJcbiAgICBlbmNvbGFyQmFja3VwRnVuOiAodG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCwgZm9yUGtSYWl6OiBGb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzKSA9PiB2b2lkXHJcbikge1xyXG4gICAgZW5jb2xhckJhY2t1cCA9IGVuY29sYXJCYWNrdXBGdW5cclxufVxyXG5cclxubGV0IGVuY29sYXJCYWNrdXA6ICh0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXMpID0+IHZvaWQgPSAoKSA9PiB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTSU4gRVNQRUNJRklDQVIgZW5jb2xhckJhY2t1cFwiKVxyXG59XHJcblxyXG5leHBvcnQgdmFyIGludGVudGFyQmFja3VwID0gKGZvclBrOiBGb3JQaykgPT4ge1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlKVxyXG4gICAgdmFyIHRva2VuID0gZGF0b3NCeVBhc3MudG9rZW47XHJcbiAgICBpZiAodG9rZW4pIHtcclxuICAgICAgICBlbmNvbGFyQmFja3VwKHRva2VuLCBmb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJubyBoYXkgdG9rZW4sIG5vIHNlIHB1ZG8gaGFjZXIgZWwgYmFja3VwXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFc3RydWN0dXJhKGVzdHJ1Y3R1cmFBQ2FyZ2FyOiBFc3RydWN0dXJhKSB7XHJcbiAgICBlc3RydWN0dXJhID0gZXN0cnVjdHVyYUFDYXJnYXI7XHJcbiAgICBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCh1YSA9PiAhIXVhLnByaW5jaXBhbCk/LnVuaWRhZF9hbmFsaXNpcyFcclxuICAgIGRlZk9wZXJhdGl2by5kZWZGb3IgPSBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykubWFwKGYgPT4gKHsgaGVybWFubzogZi5jYXNpbGxlcm9zLmhlcm1hbm8gfSkpLnBsYWluKClcclxuICAgIGRlZk9wZXJhdGl2by5kZWZVQSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5tYXAoKHVhRGVmLCB1YSkgPT4gKHtcclxuICAgICAgICBwazogdWFEZWYucGtfYWdyZWdhZGEgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICBpbmNsdWlkYXM6IGxpa2VBcih1YURlZi5oaWphcykua2V5cygpLFxyXG4gICAgICAgIGlkc0ZvcjogbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmID0+IGYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWEpLmtleXMoKVxyXG4gICAgfSkpLnBsYWluKClcclxuICAgIHJldHVybiBlc3RydWN0dXJhO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RGF0b3NCeVBhc3MoZGJwcDogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7IGRpcnR5PzogYm9vbGVhbiB9KSB7XHJcbiAgICBkYXRvc0J5UGFzcyA9IHtcclxuICAgICAgICBkaXJ0eTogZmFsc2UsXHJcbiAgICAgICAgLi4uZGJwcCxcclxuICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjoge30gYXMgRGF0b3NCeVBhc3NbXCJmZWVkYmFja1Jvd1ZhbGlkYXRvclwiXVxyXG4gICAgfVxyXG4gICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXREYXRvc0J5UGFzcyA9ICgpID0+IGRhdG9zQnlQYXNzXHJcblxyXG5mdW5jdGlvbiBvYmpldG9WYWNpbyhvOiBvYmplY3QpIHtcclxuICAgIGZvciAodmFyIGsgaW4gbykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKSB7XHJcbiAgICBpZiAoIWRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yIHx8IG9iamV0b1ZhY2lvKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKSkge1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3I7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJ0eSgpIHtcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5kaXJ0eVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXN0cnVjdHVyYSgpIHtcclxuICAgIHJldHVybiBlc3RydWN0dXJhO1xyXG59XHJcblxyXG50eXBlIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcyA9IEhUTUxEaXZFbGVtZW50IHwgSFRNTEJ1dHRvbkVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxudHlwZSBEaXJlY3RGdW5jdGlvbjxULCBSZXN1bHQ+ID0gKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzLCBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBlbGVtZW50bzogVCxcclxuICAgIGZlZWRiYWNrQWxsOiB7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9LFxyXG4gICAgZXN0cnVjdHVyYTogRXN0cnVjdHVyYVxyXG4pID0+IFJlc3VsdFxyXG5cclxudHlwZSBSZWdpc3Ryb0VsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0ge1xyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgYW55PixcclxuICAgIHZhcmlhYmxlPzogSWRWYXJpYWJsZSxcclxuICAgIGZvclBrPzogRm9yUGssXHJcbn0gJiAoe1xyXG4gICAgcHJvcDoga2V5b2YgVFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBUW2tleW9mIFRdPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGxhIHByb3AoZXJ0eSkgZGVsIGVsZW1lbnRvXHJcbn0gfCB7XHJcbiAgICBhdHRyOiBzdHJpbmdcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGVsIHZhbG9yIGRlbCBhdHRyKGlidXRvKVxyXG59IHwge1xyXG4gICAgc3R5bGU6IGtleW9mIENTU1N0eWxlRGVjbGFyYXRpb25cclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGVsIHZhbG9yIGRlbCBzdHlsZVxyXG59IHwge1xyXG4gICAgZGlyZWN0OiB0cnVlXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHZvaWQ+IC8vIExhIGZ1bmNpw7NuIHZhIGEgdG9jYXIgZGlyZWN0YW1lbnRlIGVsIGVsZW1lbnRvIHkgaGFjZXIgdG9kbyBsbyBxdWUgdGVuZ2EgcXVlIGhhY2VyXHJcbn0pXHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG9zPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0geyBbaWQ6IHN0cmluZ106IFJlZ2lzdHJvRWxlbWVudG88VD4gJiB7IGVsZW1lbnRvPzogVCB9IH07XHJcblxyXG52YXIgcmVnaXN0cm9FbGVtZW50b3NHbG9iYWwgPSB7fSBhcyBSZWdpc3Ryb0VsZW1lbnRvczxFbGVtZW50b3NSZWdpc3RyYWJsZXM+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdHJhckVsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+KGRlZjogUmVnaXN0cm9FbGVtZW50bzxUPikge1xyXG4gICAgLy8gQHRzLWlnbm9yZSBTw60sIHBvZHLDrWEgc2VyIHF1ZSBsb3MgdGlwb3MgZGUgVCBzZWFuIGRpc3RpbnRvcywgcGVybyB2YW4gYSBzZXIgY29oZXJlbnRlc1xyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zOiBSZWdpc3Ryb0VsZW1lbnRvczxUPiA9IHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsO1xyXG4gICAgcmVnaXN0cm9FbGVtZW50b3NbZGVmLmlkXSA9IGRlZjtcclxufVxyXG5cclxudHlwZSBSZXNwdWVzdGFzRm9yUGtDb211biA9IHsgcmVzcHVlc3RhczogUmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6IFVuaWRhZEFuYWxpc2lzIH1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6IEZvclBrKTogUmVzcHVlc3Rhc0ZvclBrQ29tdW5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazogRm9yUGssIGNvbkF1bWVudGFkYXM6IHRydWUsIGFncmVnYXJTaUZhbHRhPzogYm9vbGVhbik6IFJlc3B1ZXN0YXNGb3JQa0NvbXVuICYgeyByZXNwdWVzdGFzQXVtZW50YWRhczogUmVzcHVlc3RhcyB9XHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6IEZvclBrLCBjb25BdW1lbnRhZGFzPzogYm9vbGVhbiwgYWdyZWdhclNpRmFsdGE/OiBib29sZWFuKTogUmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzPzogUmVzcHVlc3RhcyB9IHtcclxuICAgIHZhciByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHt9IGFzIFJlc3B1ZXN0YXM7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGxvIHF1ZSBzb2JyYXIgZGUgcmVzcHVlc3RhcyBubyBtZSBpbXBvcnRhLi4uXHJcbiAgICB2YXIgcmVzcHVlc3RhcyA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMgYXMgUmVzcHVlc3RhcztcclxuICAgIHZhciByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXo7XHJcbiAgICB2YXIgZm9yUGtSYWl6OiBGb3JQaztcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMgfCB1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgZm9yUGtBcGlsYWRhID0gZm9yUGs7XHJcbiAgICB2YXIgcGlsYTogW3VuaWRhZF9hbmFsaXNpczogSWRVbmlkYWRBbmFsaXNpcywgdWFEZWY6IFVuaWRhZEFuYWxpc2lzLCBmb3JQazogRm9yUGtdW10gPSBbXTtcclxuICAgIHdoaWxlICh1bmlkYWRfYW5hbGlzaXMpIHtcclxuICAgICAgICB2YXIgdWFEZWY6IFVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgICAgIHBpbGEucHVzaChbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSk7XHJcbiAgICAgICAgZm9yUGtBcGlsYWRhID0geyAuLi5mb3JQa0FwaWxhZGEgfTtcclxuICAgICAgICBkZWxldGUgZm9yUGtBcGlsYWRhW3VhRGVmLnBrX2FncmVnYWRhXVxyXG4gICAgICAgIHVuaWRhZF9hbmFsaXNpcyA9IHVhRGVmLnBhZHJlXHJcbiAgICB9XHJcbiAgICB3aGlsZSAocGlsYS5sZW5ndGgpIHtcclxuICAgICAgICBbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSA9IHBpbGEucG9wKCkhXHJcbiAgICAgICAgdmFyIHZhbG9yUGtPUG9zaWNpb24gPSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgICAgIGlmICh2YWxvclBrT1Bvc2ljaW9uID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhbHRhIHVuIHZhbG9yIHBhcmEgJHtKU09OLnN0cmluZ2lmeSh1YURlZi5wa19hZ3JlZ2FkYSl9YClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzcHVlc3Rhc0FudGVyaW9yID0gcmVzcHVlc3RhcztcclxuICAgICAgICBsZXQgcG9zaWNpb24gPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSA/IHZhbG9yUGtPUG9zaWNpb24gLSAxIDogdmFsb3JQa09Qb3NpY2lvblxyXG4gICAgICAgIHJlc3B1ZXN0YXMgPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dO1xyXG4gICAgICAgIGlmIChyZXNwdWVzdGFzID09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGFncmVnYXJTaUZhbHRhKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0ge30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0FudGVyaW9yW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dID0gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBleGlzdGUgZWwgZWxlbWVudG8gJyR7cG9zaWNpb259JyBlbiBsYSB1bmlkYWRfYW5hbGlzaXMgJyR7dW5pZGFkX2FuYWxpc2lzfSdgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JQa1JhaXogfHw9IGZvclBrQXBpbGFkYTtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFPDqSBxdWUgZXMgcmHDrXogcG9yIGPDs21vIGVzdG95IHJldm9sdmllbmRvIGxhIHBpbGFcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiB8fD0gcmVzcHVlc3RhcztcclxuICAgICAgICBpZiAoY29uQXVtZW50YWRhcykge1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHsgLi4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXMsIFt1YURlZi5wa19hZ3JlZ2FkYV06IHZhbG9yUGtPUG9zaWNpb24gfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBTw6kgcXVlIGxhIHBpbGEgdGllbmUgYWwgbWVub3MgdW4gZWxlbWVudG8gcG9yIGxvIHRhbnRvIGVzdG8gZXN0w6EgbGxlbm8gc2VndXJvLiBcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczogdWFEZWZcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtSYWl6OiBGb3JQa1JhaXopIHtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzIH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGtSYWl6LCB0cnVlKVxyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICB2YXIgcGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayhmb3JQa1JhaXopXHJcbiAgICB2YXIgcm93VmFsaWRhdG9yID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa107XHJcbiAgICBmb3IgKHZhciBpZCBpbiByZWdpc3Ryb0VsZW1lbnRvcykge1xyXG4gICAgICAgIHZhciBkZWYgPSByZWdpc3Ryb0VsZW1lbnRvc1tpZF07XHJcbiAgICAgICAgaWYgKGRlZi5lbGVtZW50bykge1xyXG4gICAgICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoZGVmLmVsZW1lbnRvKSkge1xyXG4gICAgICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGVmLmVsZW1lbnRvKSB7XHJcbiAgICAgICAgICAgIGRlZi5lbGVtZW50byA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlZi5pZCkgYXMgRWxlbWVudG9zUmVnaXN0cmFibGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWRlZi5lbGVtZW50bykge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQlVTQ0FORE8gZWwgZWxlbWVudG8gcmVnaXN0cmFkbyAnLGlkLCdubyBlc3TDoSBlbiBlbCBET00nKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmLmZ1bihyZXNwdWVzdGFzQXVtZW50YWRhcywgcm93VmFsaWRhdG9yLCBkZWYuZWxlbWVudG8sIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhKTtcclxuICAgICAgICBpZiAoJ3Byb3AnIGluIGRlZikge1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50bywgZGVmLnByb3AsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoJ2F0dHInIGluIGRlZikge1xyXG4gICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGVmLmVsZW1lbnRvLCBkZWYuYXR0ciwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgnc3R5bGUnIGluIGRlZikge1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50by5zdHlsZSwgZGVmLnN0eWxlLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocm93VmFsaWRhdG9yLmFjdHVhbCkge1xyXG4gICAgICAgIHZhciB7IHRvcCwgYm90dG9tIH0gPSBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8ocm93VmFsaWRhdG9yLmFjdHVhbCk7XHJcbiAgICAgICAgaWYgKHRvcCAhPSBudWxsICYmIGJvdHRvbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYXJyaWJhJykuZWxUb3BWaXNpYmlsaXphciA9IHRvcDtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hYmFqbycpLmVsQm90dG9tVmlzaWJpbGl6YXIgPSBib3R0b207XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKGlkVmFyaWFibGU6IElkVmFyaWFibGUgfCBJZEZpbikge1xyXG4gICAgdmFyIGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkVmFyaWFibGUgPT0gJ2ZpbicgPyBgYm90b24tdm9sdmVyLTJgIDogYHZhci0ke2lkVmFyaWFibGV9YClcclxuICAgICAgICB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlKTtcclxuICAgIHZhciBlbGVtZW50byA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgIHZhciBNQVJHRU5fU0NST0xMID0gNjQ7XHJcbiAgICB2YXIgYWx0b1BhbnRhbGxhID0gd2luZG93LmlubmVySGVpZ2h0ICogMC43IC0gTUFSR0VOX1NDUk9MTDtcclxuICAgIHZhciBlbGVtZW50b0VudGVybzogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgZW50YXIgZW50ZXJvIGVuIHBhbnRhbGxhLCBkZWZpbmUgZWwgYm90dG9tXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvRW50ZXJvOiBSZWN0IHwgbnVsbCA9IG51bGw7XHJcbiAgICB2YXIgZWxlbWVudG9TdXBlcmlvcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgbW9zdHJhcnNlIGRlc2RlIGFycmliYSBhdW5xdWUgbm8gZW50cmUgZW50ZXJvLCBkZWZpbmUgZWwgdG9wXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvU3VwZXJpb3I6IFJlY3R8IG51bGwgPSBudWxsO1xyXG4gICAgd2hpbGUgKGVsZW1lbnRvICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ZhcmlhYmxlJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnbXVsdGlwbGUnKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmVndW50YScpXHJcbiAgICAgICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2Nvbmp1bnRvcHJlZ3VudGFzJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnc2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnYm90b25mb3JtdWxhcmlvJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnYm90b24tdm9sdmVyJylcclxuICAgICAgICAgICAgKSAmJiBlbGVtZW50by5vZmZzZXRIZWlnaHQgPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50b1N1cGVyaW9yID09IG51bGwgJiYgZWxlbWVudG8uY2xpZW50SGVpZ2h0IDwgYWx0b1BhbnRhbGxhKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50b0VudGVybyA9IGVsZW1lbnRvO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRvRW50ZXJvID09IG51bGwpIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICBpZiAocmVjdEVsZW1lbnRvRW50ZXJvID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm9cclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBnZXRSZWN0KGVsZW1lbnRvRW50ZXJvISlcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3RFbGVtZW50b0VudGVybztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZ2V0UmVjdChlbGVtZW50byk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCArIHJlY3RFbGVtZW50b0VudGVyby5oZWlnaHQgLSByZWN0LnRvcCA8IGFsdG9QYW50YWxsYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3Q7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50byA9IGVsZW1lbnRvPy5wYXJlbnRFbGVtZW50ID8/IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoZWxlbWVudG9TdXBlcmlvciA9PSBudWxsKSB7XHJcbiAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdDoge1xyXG4gICAgICAgIGVsZW1lbnRvSW5wdXRWYXJpYWJsZT86IEhUTUxFbGVtZW50IHwgbnVsbFxyXG4gICAgICAgIHRvcD86IG51bWJlciB8IG51bGxcclxuICAgICAgICBib3R0b20/OiBudW1iZXIgfCBudWxsXHJcbiAgICAgICAgZW5mb2NhZG8/OiBib29sZWFuIHwgbnVsbFxyXG4gICAgICAgIGRlc2VuZm9xdWU/OiBzdHJpbmcgfCBudWxsXHJcbiAgICB9ID0ge307XHJcbiAgICBpZiAoZWxlbWVudG9FbnRlcm8gIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChyZWN0RWxlbWVudG9FbnRlcm8gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBnZXRSZWN0KGVsZW1lbnRvRW50ZXJvKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuZWxlbWVudG9JbnB1dFZhcmlhYmxlID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgICAgIHZhciB0b3AgPSAocmVjdEVsZW1lbnRvU3VwZXJpb3IgPz8gcmVjdEVsZW1lbnRvRW50ZXJvKS50b3AgLSBNQVJHRU5fU0NST0xMO1xyXG4gICAgICAgIHJlc3VsdC50b3AgPSB0b3A7XHJcbiAgICAgICAgcmVzdWx0LmJvdHRvbSA9IHJlY3RFbGVtZW50b0VudGVyby50b3AgKyByZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0O1xyXG4gICAgICAgIGlmICh0b3AgPCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlID0gJ2FycmliYSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyBhbHRvUGFudGFsbGEpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWUgPSAnYWJham8nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lbmZvY2FkbyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0QXR0ckRpc3RpbnRvPE4gZXh0ZW5kcyBzdHJpbmc+KFxyXG4gICAgb2JqZXRvOiB7IHNldEF0dHJpYnV0ZTogKG5hbWU6IE4sIHZhbG9yOiBzdHJpbmcpID0+IHZvaWQsIGdldEF0dHJpYnV0ZTogKG5hbWU6IE4pID0+IHN0cmluZyB8IG51bGwgfSxcclxuICAgIG5hbWU6IE4sXHJcbiAgICB2YWxvcjogc3RyaW5nXHJcbikge1xyXG4gICAgaWYgKG9iamV0byAmJiBvYmpldG8uZ2V0QXR0cmlidXRlKG5hbWUpICE9IHZhbG9yKSB7XHJcbiAgICAgICAgb2JqZXRvLnNldEF0dHJpYnV0ZShuYW1lLCB2YWxvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRWYWxvckRpc3RpbnRvPFQgZXh0ZW5kcyB7fSwgTiBleHRlbmRzIGtleW9mIFQ+KFxyXG4gICAgb2JqZXRvOiBULFxyXG4gICAgbmFtZTogTixcclxuICAgIHZhbG9yOiBUW05dXHJcbikge1xyXG4gICAgaWYgKG9iamV0b1tuYW1lXSAhPSB2YWxvcikge1xyXG4gICAgICAgIG9iamV0b1tuYW1lXSA9IHZhbG9yO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQazogRm9yUGspIHtcclxuICAgIGlmIChlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKSB7XHJcbiAgICAgICAgdmFyIHsgcmVzcHVlc3RhcyB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrKTtcclxuICAgICAgICBsaWtlQXIoZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8pXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChjb25maWdCb3RvbkZvcm11bGFyaW8sIGlkRm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3BVQSA9IHJlc3B1ZXN0YXNbZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9baWRGb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BVQSAhPSBudWxsICYmIHJlc3BVQSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWdCb3RvbkZvcm11bGFyaW8uaGFiaWxpdGFyX2FncmVnYXJfbGlzdG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1snJEIuJyArIGlkRm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXSA9ICdvayc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25faWRfcHJlZ3VudGEoX3BheWxvYWQ6IHsgcHJlZ3VudGE6IElkUHJlZ3VudGEsIGZvclBrOiBGb3JQayB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9TT0xPX1RSQUVSX1NUQVRVUycpXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPID0gU3ltYm9sKCdOT19DQU1CSUFSX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8nKVxyXG5cclxuZnVuY3Rpb24gcmVmcmVzY2FyTWFyY2FEaXJ0eSgpIHtcclxuICAgIHZhciBib3RvbkdyYWJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2F2ZS1idXR0b25cIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICBpZiAoYm90b25HcmFiYXIpIHtcclxuICAgICAgICBpZiAoYm90b25HcmFiYXIuZGlzYWJsZWQgIT09ICFkYXRvc0J5UGFzcy5kaXJ0eSkge1xyXG4gICAgICAgICAgICBib3RvbkdyYWJhci5kaXNhYmxlZCA9ICFkYXRvc0J5UGFzcy5kaXJ0eTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YShwYXlsb2FkOiB7XHJcbiAgICBmb3JQazogRm9yUGssXHJcbiAgICB2YXJpYWJsZTogSWRWYXJpYWJsZSB8IHR5cGVvZiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyxcclxuICAgIHJlc3B1ZXN0YTogVmFsb3IgfCB0eXBlb2YgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJT1xyXG59LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgdG9rZW4gPSAnQVZFUklHVUFSIFRPRE8nXHJcbiAgICBsZXQgeyBmb3JQaywgcmVzcHVlc3RhLCB2YXJpYWJsZSB9ID0gcGF5bG9hZDtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXTtcclxuICAgIHZhciByZWNlbnRNb2RpZmllZCA9IGZhbHNlO1xyXG4gICAgdmFyIHZhbG9yQW50ZXJpb3IgPSB2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA/IHJlc3B1ZXN0YXNbdmFyaWFibGVdIDogbnVsbDtcclxuICAgIHZhciBmZWVkYmFja1JvdyA9IGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhmb3JQayldXHJcbiAgICBpZiAocmVzcHVlc3RhICE9PSBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPICYmIHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTKSB7XHJcbiAgICAgICAgaWYgKHJlc3B1ZXN0YSA9PT0gJycpIHtcclxuICAgICAgICAgICAgcmVzcHVlc3RhID0gbnVsbDtcclxuICAgICAgICB9IGVsc2UgaWYgKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbdmFyaWFibGVdPy50aXBvID09ICdudW1lcm8nKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwdWVzdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhID0gTnVtYmVyKHJlc3B1ZXN0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gc2kgZXMgdW4gZmFsc3kgKDAgPT0gZmFsc2UpIHRlbmdvIHF1ZSBjb21wYXJhciBjb24gIT09XHJcbiAgICAgICAgcmVjZW50TW9kaWZpZWQgPSByZXNwdWVzdGEgPyB2YWxvckFudGVyaW9yICE9IHJlc3B1ZXN0YSA6IHZhbG9yQW50ZXJpb3IgIT09IHJlc3B1ZXN0YVxyXG4gICAgICAgIGlmIChyZWNlbnRNb2RpZmllZCkge1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzW3ZhcmlhYmxlXSA9IHJlc3B1ZXN0YSA/PyBudWxsOyAvLyBjYW1iaW8gdW5kZWZpbmVkIHBvciBudWxsXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSBmZWVkYmFja1Jvdy5mZWVkYmFja1t2YXJpYWJsZV0/LnNpZ3VpZW50ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB2YXIgc2lndWllbnRlVmFyaWFibGU6IElkVmFyaWFibGUgfCBJZEZpbiB8IG51bGwgfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAodmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgJiYgKHJlY2VudE1vZGlmaWVkIHx8IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgZmVlZGJhY2tSb3cuYXV0b0luZ3Jlc2FkYXM/Llt2YXJpYWJsZV0pKSB7XHJcbiAgICAgICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgICAgIGlmIChlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKSB7XHJcbiAgICAgICAgICAgIHZlcmlmaWNhclNvcnRlbyh7XHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvOiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pXSxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlQWN0dWFsOiB2YXJpYWJsZSxcclxuICAgICAgICAgICAgICAgIGZvclBrOiBmb3JQa1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHJlY2VudE1vZGlmaWVkO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSA9IHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgICAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbiAgICAgICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB7IGF1dG9JbmdyZXNvOiB0cnVlIH0pO1xyXG4gICAgICAgIGZlZWRiYWNrUm93ID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICAgICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG4gICAgICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGspO1xyXG4gICAgICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxuICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IHZhcmlhYmxlO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSBmZWVkYmFja1Jvdy5mZWVkYmFja1tzaWd1aWVudGVWYXJpYWJsZV0/LnNpZ3VpZW50ZTtcclxuICAgICAgICB9IHdoaWxlICh2YWxvckFudGVyaW9yID09IG51bGwgJiYgcmVjZW50TW9kaWZpZWQgJiYgc2lndWllbnRlVmFyaWFibGUgIT0gbnVsbCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSAnZmluJyAmJiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IudmFyaWFibGVzW3NpZ3VpZW50ZVZhcmlhYmxlXS5mdW5jaW9uQXV0b0luZ3Jlc2FyKVxyXG4gICAgICAgIGlmIChzaWd1aWVudGVWYXJpYWJsZSA9PSBudWxsICYmIGZlZWRiYWNrUm93LmZlZWRiYWNrW3ZhcmlhYmxlXT8uZXN0YWRvID09ICd2YWxpZGEnKSB7XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gJ2Zpbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgcmVjZW50TW9kaWZpZWQsIHNpZ3VpZW50ZVZhcmlhYmxlLCB2YXJpYWJsZUFjdHVhbDogZmVlZGJhY2tSb3cuYWN0dWFsIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fcmVnaXN0cmFyX25vdGEocGF5bG9hZDogeyBmb3JQa1JhaXo6IEZvclBrUmFpeiwgdGFyZWE6IElkVGFyZWEsIG5vdGE6IHN0cmluZyB8IG51bGwgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCB0YXJlYSwgbm90YSB9ID0gcGF5bG9hZDtcclxuICAgIGNvbnNvbGUubG9nKFwiRkFMVEEgLy8gVE9ET1wiKVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfdmlzaXRhKHBheWxvYWQ6IHsgZm9yUGtSYWl6OiBGb3JQa1JhaXosIG9ic2VydmFjaW9uZXM6IHN0cmluZyB8IG51bGwgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBvYnNlcnZhY2lvbmVzIH0gPSBwYXlsb2FkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX21vZGlmaWNhcl92aXNpdGEocGF5bG9hZDogeyBmb3JQa1JhaXo6IEZvclBrUmFpeiwgaW5kZXg6IG51bWJlciwgb3BjaW9uOiBrZXlvZiBWaXNpdGEsIHZhbG9yOiBzdHJpbmcgfCBudWxsIH0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgaW5kZXgsIG9wY2lvbiwgdmFsb3IgfSA9IHBheWxvYWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYm9ycmFyX3Zpc2l0YShwYXlsb2FkOiB7IGZvclBrUmFpejogRm9yUGtSYWl6LCBpbmRleDogbnVtYmVyIH0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgaW5kZXggfSA9IHBheWxvYWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWdyZWdhcl9mb3JtdWxhcmlvKHsgZm9yUGsgfTogeyBmb3JQazogRm9yUGsgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgdmFyIHsgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcywgbnVsbCwge30pXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWJyaXJfZm9ybXVsYXJpbyh7IGZvclBrIH06IHsgZm9yUGs6IEZvclBrIH0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHJlY2FsY3VsYXJUb2RvRWxBcmJvbChyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6KTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMudW5pZGFkX2FuYWxpc2lzLCBmb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIG51bGwsIHt9KVxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHsgZm9yUGssIGZvclBrUGFkcmUgfTogeyBmb3JQazogRm9yUGssIGZvclBrUGFkcmU6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzIHwgdW5kZWZpbmVkID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc1xyXG4gICAgdmFyIHVhRGVmOiBVbmlkYWRBbmFsaXNpcyA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgIHZhciBpbmRleCA9IGZvclBrW3VhRGVmLnBrX2FncmVnYWRhXSBhcyBudW1iZXI7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzOiByZXNwdWVzdGFzUGFkcmUgfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1BhZHJlLCB0cnVlLCB0cnVlKTtcclxuICAgIChyZXNwdWVzdGFzUGFkcmVbdW5pZGFkX2FuYWxpc2lzXSBhcyBSZXNwdWVzdGFzW10pLnNwbGljZShpbmRleCAtIDEsIDEpO1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCB0cnVlO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHRydWU7XHJcbiAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHsgYXV0b0luZ3Jlc286IHRydWUgfSk7XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQa1BhZHJlKTtcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtQYWRyZSk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hCeVBhc3M8VCwgUj4oXHJcbiAgICBmdW46IChwYXlsb2FkOiBULCBkYXRvczogdHlwZW9mIGRhdG9zQnlQYXNzKSA9PiBSLFxyXG4gICAgcGF5bG9hZDogVFxyXG4pIHtcclxuICAgIHJldHVybiBmdW4ocGF5bG9hZCwgZGF0b3NCeVBhc3MpO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCB1bHRpbWFWYXJpYmxlVml2aWVuZGEgPSAnTk9fRVNUQV9ERUZJTklEQV9BVU4vL1RPRE8nIGFzIElkVmFyaWFibGU7XHJcblxyXG5leHBvcnQgY29uc3QgTUFYQ1AgPSAyMDtcclxuXHJcbi8qIFJFRFVDRVJTICovXHJcblxyXG52YXIgcmVlbXBsYXpvc0hhYmlsaXRhcjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgIGZhbHNlOiAnZmFsc2UnLFxyXG4gICAgdHJ1ZTogJ3RydWUnLFxyXG4gICAgXCI9XCI6ICc9PScsXHJcbiAgICBcIjw+XCI6ICchPScsXHJcbiAgICBcIiZcIjogJyYmJyxcclxuICAgIFwifFwiOiAnfHwnLFxyXG4gICAgXCJPUlwiOiAnfHwnLFxyXG4gICAgXCJBTkRcIjogJyYmJyxcclxuICAgIFwib3JcIjogJ3x8JyxcclxuICAgIFwiYW5kXCI6ICcmJicsXHJcbiAgICBcIm5vdFwiOiAnIScsXHJcbiAgICBcIk5PVFwiOiAnIScsXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaGVscGVyc0Nhc2lsbGVyb3MgPSB7XHJcbiAgICBudWxsMnplcm8ocG9zaWJsZU51bGw6IGFueSkge1xyXG4gICAgICAgIGlmIChwb3NpYmxlTnVsbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcG9zaWJsZU51bGw7XHJcbiAgICB9LFxyXG4gICAgZGl2MGVycihudW1lcmFkb3I6IG51bWJlciwgZGVub21pbmFkb3I6IG51bWJlciwgcGs6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChkZW5vbWluYWRvciA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIGVuIFwiICsgcGsgKyBcIiBkaXZpc2lvbiBwb3IgY2VybyBkZSBcIiArIG51bWVyYWRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudW1lcmFkb3IgLyBkZW5vbWluYWRvcjtcclxuICAgIH0sXHJcbiAgICBmdW5zOiB7XHJcbiAgICAgICAgYmxhbmNvKHg6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCAhPT0gMCAmJiAheFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaG95KCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZS50b2RheSgpLnRvRG15KClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZlY2hhX3ZhbGlkYSh4OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvID0gL14oWzEtOV18MFsxLTldfFsxMl1cXGR8M1swMV0pXFwvKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvMjBcXGRcXGQkLy50ZXN0KHgpXHJcbiAgICAgICAgICAgIHZhciB4RGF0ZTogRGF0ZTtcclxuICAgICAgICAgICAgdmFyIGNvbnZlcnNpb25PazogYm9vbGVhbjtcclxuICAgICAgICAgICAgY29udmVyc2lvbk9rID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdG9fdmFsaWRvKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbZCwgbSwgeV0gPSB4LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHhEYXRlID0gbmV3IERhdGUoYCR7eX0vJHttfS8ke2R9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uT2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy9mYWx0YXJpYSB2YWxpZGFyIHF1ZSBubyBzZWEgdW5hIGZlY2hhIGZ1dHVyYSB5IHF1ZSBzZWEgdW5hIGZlY2hhIGVuIGVsIHJhbmdvIGRlbCBvcGVyYXRpdm9cclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvICYmIGNvbnZlcnNpb25Pa1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWVzYW5pb192YWxpZG8oeDogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbyA9IC9eKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvKDE5fDIwKVxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbmZvcm1hZG8oeDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICE9PSB1bmRlZmluZWQgJiYgeCAhPT0gbnVsbCAmJiAoISh4IGluc3RhbmNlb2YgQXJyYXkpIHx8IHgubGVuZ3RoICE9PSAwKVxyXG4gICAgICAgICAgICAgICAgJiYgKCEoeCBpbnN0YW5jZW9mIE9iamVjdCkgfHwgT2JqZWN0LmtleXMoeCkubGVuZ3RoICE9PSAwKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbnNuYyh4OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggPT0gLTlcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcih4OiBudW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggJSAyID09IDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVkYWRfbWVzX2FubmlvX3ZhbGlkbyhlZGFkOiBudW1iZXIsIG1lc0FubmlvOiBzdHJpbmcsIGZlY2hhUmVhbGl6YWNpb25ERE1NWVlZWTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNlc0RpZmVyZW5jaWEgPSAoZDE6IERhdGUsIGQyOiBEYXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbW9udGhzO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzID0gKGQyLmdldEZ1bGxZZWFyKCkgLSBkMS5nZXRGdWxsWWVhcigpKSAqIDEyO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzIC09IGQxLmdldE1vbnRoKCk7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgKz0gZDIuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgPD0gMCA/IDAgOiBtb250aHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHBhcnRlc1JlYWxpemFjaW9uID0gZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyBwYXJ0ZXMgY29ycmVzcG9uZGVuIGEgdW5hIGZlY2hhIHbDoWxpZGFcclxuICAgICAgICAgICAgdmFyIHRvZGF5ID0gZGF0ZS55bWQoTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzJdKSwgTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzFdKSwgTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzBdKSlcclxuICAgICAgICAgICAgdmFyIHBhcnRlc01lc0FubmlvID0gbWVzQW5uaW8uc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyBwYXJ0ZXMgY29ycmVzcG9uZGVuIGEgdW5hIGZlY2hhIHbDoWxpZGFcclxuICAgICAgICAgICAgdmFyIG5hY2ltaWVudG8gPSBkYXRlLnltZChOdW1iZXIocGFydGVzTWVzQW5uaW9bMV0pLCBOdW1iZXIocGFydGVzTWVzQW5uaW9bMF0pLCAxKVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgUmVhbERhdGUgZXMgRGF0ZSB5IHNlIHB1ZWRlIHJlc3RhclxyXG4gICAgICAgICAgICB2YXIgZGlmZXJlbmNpYU1lc2VzID0gbWVzZXNEaWZlcmVuY2lhKG5hY2ltaWVudG8sIHRvZGF5KTtcclxuICAgICAgICAgICAgdmFyIGVkYWREZWNpbWFsZXMgPSBkaWZlcmVuY2lhTWVzZXMgLyAxMjsgLy9laiAzNi41XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGVkYWREZWNpbWFsZXMpID09IGVkYWQgfHwgLy9taXNtYSBlZGFkXHJcbiAgICAgICAgICAgICAgICBlZGFkRGVjaW1hbGVzID09IGVkYWQgKyAxIC8vbWVzIGRlIHRvbGVyYW5jaWFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy9jb3BpYXJfY2FtcG9fdWFfcmFtYShyZXNwdWVzdGFzT3JpZ2VuOlJlc3B1ZXN0YXNbXSwgcG9zaWNpb246bnVtYmVyLCB2YXJpYWJsZU9yaWdlbjogSWRWYXJpYWJsZSwgY2FtaW5vOnN0cmluZywgY29uZGljaW9uOmJvb2xlYW4pe1xyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/KHJlc3B1ZXN0YXNPcmlnZW4gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXSAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdW2Ake2NhbWlub31gXVt2YXJpYWJsZU9yaWdlbl0pOm51bGxcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uP2V2YWwoYHJlc3B1ZXN0YXNPcmlnZW5bJHtwb3NpY2lvbi0xfV0uYCtjYW1pbm8rJy4nK3ZhcmlhYmxlT3JpZ2VuKTpudWxsO1xyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZGJvOntcclxuICAgICAgICAgICAgZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwgZGF0bzpzdHJpbmcpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiBpbmZvcm1hZG8oeHBlcnNvbmFzKSAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV1bZGF0b10/IHhwZXJzb25hc1twZXItMV1bZGF0b106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlZGFkZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwnZWRhZCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZWluZGl2aWR1YWwoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEhcGVyc29uYXNbcGVyLTFdWydlbnRyZWFpbmQnXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVtaWVtYnJvKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9jb255dWdlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXNcclxuICAgICAgICAgICAgICAgIHJldHVybiB4cGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MikubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2plZmVzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MSkubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhcmVudGVzY29mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ3A0JylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V4b2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEheHBlcnNvbmFzICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXS5zZXhvPyB4cGVyc29uYXNbcGVyLTFdWydzZXhvJ106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaXRjb255amVmZShlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlciwxLCdwNScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICovXHJcbiAgICB9XHJcbn07XHJcblxyXG50eXBlIEZ1bmNpb25IYWJpbGl0YXIgPSAodmFsb3JlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gYm9vbGVhbjtcclxudHlwZSBGdW5jaW9uVmFsb3JhciA9ICh2YWxvcmVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBhbnk7XHJcbnZhciBmdW5jaW9uZXNIYWJpbGl0YXI6IHsgW2tleTogc3RyaW5nXTogRnVuY2lvbkhhYmlsaXRhciB9ID0ge1xyXG59XHJcbnZhciBmdW5jaW9uZXNWYWxvcmFyOiB7IFtrZXk6IHN0cmluZ106IEZ1bmNpb25WYWxvcmFyIH0gPSB7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtaW5pQ29tcGlsYWRvclNRbEpzKGV4cHJlc2lvbkNhc2lTUUw6IHN0cmluZykge1xyXG4gICAgdmFyIGV4cHJlc2lvbiA9IGV4cHJlc2lvbkNhc2lTUUwucmVwbGFjZSgvXFx1MDBBMC9nLCAnICcpO1xyXG4gICAgdmFyIGN1ZXJwbyA9IGV4cHJlc2lvbi5yZXBsYWNlKC9cXGJpcyBkaXN0aW5jdCBmcm9tXFxiL2dpLCAnIT0nKS5yZXBsYWNlKC9cXGIuKz9cXGIvZywgZnVuY3Rpb24gKGVsVG9rZW4pIHtcclxuICAgICAgICB2YXIgZWxUb2tlblRyaW1lYWRvID0gZWxUb2tlbi50cmltKCk7XHJcbiAgICAgICAgaWYgKGVsVG9rZW5UcmltZWFkbyBpbiByZWVtcGxhem9zSGFiaWxpdGFyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZWVtcGxhem9zSGFiaWxpdGFyW2VsVG9rZW5UcmltZWFkb107XHJcbiAgICAgICAgfSBlbHNlIGlmICgvXlxcZCtcXC4/XFxkKiQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZWxUb2tlblxyXG4gICAgICAgIH0gZWxzZSBpZiAoL15cXFcrJC8udGVzdChlbFRva2VuVHJpbWVhZG8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfSBlbHNlIGlmICgvXlxccyskLy50ZXN0KGVsVG9rZW4pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnaGVscGVycy5udWxsMnplcm8odmFsb3Jlcy4nICsgZWxUb2tlbiArICcpJztcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGN1ZXJwbztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmNpb25Db21waWxhZGE8VD4oY29uanVudG9EZUZ1bmNpb25lczogeyBba2V5OiBzdHJpbmddOiAodmFsb3JlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gVCB9KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSkge1xyXG4gICAgICAgICAgICB2YXIgY3VlcnBvID0gbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KcztcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIC8vIHZhciBjdWVycG8gPSBtaW5pQ29tcGlsYWRvclNRbEpzKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVybmFsRnVuID0gbmV3IEZ1bmN0aW9uKCd2YWxvcmVzJywgJ2hlbHBlcnMnLCAncmV0dXJuICcgKyBjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSA9IGZ1bmN0aW9uICh2YWxvcmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVybmFsRnVuKHZhbG9yZXMsIGhlbHBlcnNDYXNpbGxlcm9zKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIEVKRUNVQ0NJT04gRVhQUkVTSU9OIEVYVEVSTkEgJywgbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KcywgZXhwZWN0ZWQoZXJyKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY3VlcnBvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codmFsb3Jlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1IgQ09NUElMQUNJT04gRVhQUkVTSU9OIEVYVEVSTkEgJywgbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KcywgZXhwZWN0ZWQoZXJyKSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmp1bnRvRGVGdW5jaW9uZXNbbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kc107XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGdW5jaW9uSGFiaWxpdGFyID0gZ2V0RnVuY2lvbkNvbXBpbGFkYShmdW5jaW9uZXNIYWJpbGl0YXIpO1xyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvblZhbG9yYXIgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc1ZhbG9yYXIpO1xyXG5cclxuXHJcbnZhciByb3dWYWxpZGF0b3IgPSBnZXRSb3dWYWxpZGF0b3I8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPih7IGdldEZ1bmNpb25IYWJpbGl0YXIsIGdldEZ1bmNpb25WYWxvcmFyIH0pXHJcbmV4cG9ydCB2YXIgYnVzY2FyTm9SZWFFblJlc3B1ZXN0YXMgPSAodW5pZGFkZXNBUmVjb3JyZXJQcm06IElkVW5pZGFkQW5hbGlzaXNbXSwgdW5pZGFkQW5hbGlzaXM6IFVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCBub1JlYXNUYXJlYTogYW55W10sIG5vbWJOb1JlYTogc3RyaW5nKVxyXG4gICAgOiB7IG5yY29kaWdvOiBzdHJpbmcgfCBudWxsLCBlc3ZhbG9yOiBib29sZWFuIH0gPT4ge1xyXG4gICAgdmFyIG5yY29kaWdvOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIHZhciBlc3ZhbG9yID0gZmFsc2U7XHJcbiAgICB2YXIgcnZhbG9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIHZhciBydmFyaWFibGU6IHN0cmluZztcclxuICAgIHZhciBybm9yZWE6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgLy8gdmFyIHJlc3VsdD17bnJjb2Q6U3RyaW5nLCBlc3ZhbDpCb29sZWFufTtcclxuICAgIGlmICh1bmlkYWRlc0FSZWNvcnJlclBybS5pbmNsdWRlcyh1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgbm9SZWEgb2Ygbm9SZWFzVGFyZWEpIHsgLy9lc3RydWN0dXJhLm5vUmVhcywgZXN0cnVjdHVyYS5ub1JlYXNTdXBcclxuICAgICAgICAgICAgaWYgKG5vbWJOb1JlYSA9PSAnbm9fcmVhJykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHsgdmFyaWFibGUsIHZhbG9yLCBub19yZWEgfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhID0gbm9fcmVhO1xyXG4gICAgICAgICAgICAgICAgcnZhbG9yID0gdmFsb3I7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGUgPSB2YXJpYWJsZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciB7IHZhcmlhYmxlX3N1cCwgdmFsb3Jfc3VwLCBub19yZWFfc3VwIH0gPSBub1JlYTtcclxuICAgICAgICAgICAgICAgIHJub3JlYSA9IG5vX3JlYV9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFsb3IgPSB2YWxvcl9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGUgPSB2YXJpYWJsZV9zdXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNbcnZhcmlhYmxlIGFzIElkVmFyaWFibGVdID09IHJ2YWxvcikge1xyXG4gICAgICAgICAgICAgICAgbnJjb2RpZ28gPSBybm9yZWE7ICAvL25vX3JlYSwgbm9fcmVhX3N1cFxyXG4gICAgICAgICAgICAgICAgZXN2YWxvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBucmNvZGlnbywgZXN2YWxvciB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCB1YSBvZiAobGlrZUFyKHVuaWRhZEFuYWxpc2lzPy5oaWphcykuYXJyYXkoKSkpIHtcclxuICAgICAgICBpZiAodWE/LnVuaWRhZF9hbmFsaXNpcyAmJiByZXNwdWVzdGFzW3VhLnVuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCByZXNwdWVzdGFzSGlqYXMgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1t1YT8udW5pZGFkX2FuYWxpc2lzXSA/PyBbXSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBidXNjYXJOb1JlYUVuUmVzcHVlc3Rhcyh1bmlkYWRlc0FSZWNvcnJlclBybSwgdWEsIHJlc3B1ZXN0YXNIaWphcywgbm9SZWFzVGFyZWEsIG5vbWJOb1JlYSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVzdmFsb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBucmNvZGlnbyA9IHJlc3VsdC5ucmNvZGlnbztcclxuICAgICAgICAgICAgICAgICAgICBlc3ZhbG9yID0gcmVzdWx0LmVzdmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbnJjb2RpZ28sIGVzdmFsb3IgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBucmNvZGlnbyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB7bnJjb2RpZ28sIGVzdmFsb3J9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBucmNvZGlnbywgZXN2YWxvciB9XHJcbn1cclxuXHJcblxyXG5cclxuZXhwb3J0IHZhciBkZWZPcGVyYXRpdm86IERlZk9wZXJhdGl2byA9IHtcclxuICAgIGVzTm9SZWE6IChfcmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4ge1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzTm9SZWEgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kTm9SZWE6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7IGNvZE5vUmVhLCBlc05vUmVhIH07XHJcbiAgICB9LFxyXG4gICAgZXNOb1JlYVN1cDogKF9yZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYVN1cDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kTm9SZWFTdXAsIGVzTm9SZWFTdXAgfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhOiAoX3Jlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHtcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2RSZWE6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7IGNvZFJlYSwgZXNSZWEgfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOiAoX3Jlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHtcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2RSZWFTdXA6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7IGNvZFJlYVN1cCwgZXNSZWFTdXAgfVxyXG4gICAgfSxcclxuICAgIFVBcHJpbmNpcGFsOiAnJyBhcyBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgZGVmVUE6IHt9IGFzIHsgW2kgaW4gSWRVbmlkYWRBbmFsaXNpc106IHsgcGs6IElkVmFyaWFibGUsIGluY2x1aWRhczogSWRVbmlkYWRBbmFsaXNpc1tdLCBpZHNGb3I6IElkRm9ybXVsYXJpb1tdIH0gfSxcclxuICAgIGRlZkZvcjoge30gYXMgeyBbZiBpbiBJZEZvcm11bGFyaW9dOiB7LyphcmJvbFVBOklkVW5pZGFkQW5hbGlzaXNbXSwgKi8gaGVybWFubz86IHRydWUgfSB9XHJcbn1cclxuLy8vLy8gQUJBSk8gZGUgZXN0YSBsw61uZWEgbm8gcHVlZGUgaGFiZXIgb3Ryb3Mgbm9tYnJlcyBkZSB2YXJpYWJsZXMgbyBmb3JtdWxhcmlvcyBvIGNhc2lsbGVyb3MgZW4gZ2VuZXJhbFxyXG5cclxuZXhwb3J0IHZhciBzZXRDYWxjdWxvUmVhTm9SZWEgPSAoXHJcbiAgICBlc05vUmVhOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2ROb1JlYTogc3RyaW5nIHwgbnVsbCwgZXNOb1JlYTogYm9vbGVhbiB9LFxyXG4gICAgZXNOb1JlYVN1cDogKHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHsgY29kTm9SZWFTdXA6IHN0cmluZyB8IG51bGwsIGVzTm9SZWFTdXA6IGJvb2xlYW4gfSxcclxuICAgIGVzUmVhbGl6YWRhOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2RSZWE6IG51bWJlciB8IG51bGwsIGVzUmVhOiBib29sZWFuIH0sXHJcbiAgICBlc1JlYWxpemFkYVN1cDogKHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHsgY29kUmVhU3VwOiBudW1iZXIgfCBudWxsLCBlc1JlYVN1cDogYm9vbGVhbiB9XHJcbikgPT4ge1xyXG4gICAgZGVmT3BlcmF0aXZvID0ge1xyXG4gICAgICAgIC4uLmRlZk9wZXJhdGl2byxcclxuICAgICAgICBlc05vUmVhLFxyXG4gICAgICAgIGVzTm9SZWFTdXAsXHJcbiAgICAgICAgZXNSZWFsaXphZGEsXHJcbiAgICAgICAgZXNSZWFsaXphZGFTdXBcclxuICAgIH1cclxufVxyXG5cclxuLy8gVE9ETzogR0VORVJBTElaQVJcclxudHlwZSBQZXJzb25hID0geyBwMTogc3RyaW5nLCBwMjogbnVtYmVyLCBwMzogbnVtYmVyLCBwNDogbnVtYmVyIHwgbnVsbCwgcDU6IDEgfCBudWxsLCBwNjogMSB8IG51bGwgfVxyXG5cclxuZnVuY3Rpb24gbnVtKG51bTogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCk6IG51bWJlciB7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICBpZiAoaXNOYU4obnVtIC0gMCkpIHJldHVybiAwO1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIGdyYWNpYSBlcyBtZXRlciBudW0gY3VhbmRvIGVzIHN0cmluZ1xyXG4gICAgcmV0dXJuIG51bSAtIDA7XHJcbn1cclxuXHJcbnZhciBmdW5jaW9uZXNDb25vY2lkYXM6IHsgW2sgaW4gc3RyaW5nXTogYm9vbGVhbiB9ID0ge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZmljYXJTb3J0ZW8ob3B0czoge1xyXG4gICAgY29uZmlndXJhY2lvblNvcnRlbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLFxyXG4gICAgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6XHJcbiAgICBmb3JQazogRm9yUGssXHJcbiAgICB2YXJpYWJsZUFjdHVhbDogSWRWYXJpYWJsZVxyXG5cclxufSkge1xyXG4gICAgY29uc3QgcmVzZXRlYXJTb3J0ZW8gPSAob3B0czogeyByZXNwdWVzdGFzOiBSZXNwdWVzdGFzIH0pID0+IHtcclxuICAgICAgICB2YXIgeyByZXNwdWVzdGFzIH0gPSBvcHRzO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dID0gbnVsbDtcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc10gPSBudWxsO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSA9IG51bGw7XHJcbiAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKSA9PiByZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XSA9IG51bGwpO1xyXG4gICAgICAgIGlmICgndmFyX2xldHJhJyBpbiBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kbykge1xyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gJiYgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcGVyIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBlcltjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfbGV0cmFdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgeyBjb25maWd1cmFjaW9uU29ydGVvLCB2YXJpYWJsZUFjdHVhbCwgcmVzcHVlc3RhcywgZm9yUGssIHJlc3B1ZXN0YXNSYWl6IH0gPSBvcHRzO1xyXG4gICAgdmFyIGlkRW5jID0gZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlKTtcclxuICAgIHZhciBleHByX2luY29tcGxldGl0dWRfZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmV4cHJfaW5jb21wbGV0aXR1ZF9qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pbyBhcyB1bmtub3duIGFzIG51bWJlcl0uZXhwcik7XHJcbiAgICB2YXIgZmlsdHJvX2Z1biA9IGdldEZ1bmNpb25IYWJpbGl0YXIoY29uZmlndXJhY2lvblNvcnRlby5maWx0cm9fanNbcmVzcHVlc3Rhc0F1bWVudGFkYXMudmRvbWluaW8gYXMgdW5rbm93biBhcyBudW1iZXJdLmV4cHIpO1xyXG4gICAgdmFyIHVuaWRhZEFuYWxpc2lzID0gY29uZmlndXJhY2lvblNvcnRlby51bmlkYWRfYW5hbGlzaXM7XHJcblxyXG4gICAgaWYgKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5pbmNsdWRlcyh2YXJpYWJsZUFjdHVhbCkpIHtcclxuICAgICAgICB2YXIgdWFQYWRyZSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSkgPT4gdWEudW5pZGFkX2FuYWxpc2lzID09IHVuaWRhZEFuYWxpc2lzKT8ucGFkcmU7XHJcbiAgICAgICAgdmFyIHBrQWdyZWdhZGFQYWRyZSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSkgPT4gdWEudW5pZGFkX2FuYWxpc2lzID09IHVhUGFkcmUpPy5wa19hZ3JlZ2FkYVxyXG4gICAgICAgIGlmIChlc3RydWN0dXJhLmNvblJlYUhvZ2FyKSB7XHJcbiAgICAgICAgICAgIGlmICh1YVBhZHJlICYmIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3VhUGFkcmVdKSB7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgICAgIHZhciBwYWRyZSA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3VhUGFkcmVdW051bWJlcihyZXNwdWVzdGFzQXVtZW50YWRhc1twa0FncmVnYWRhUGFkcmVdKSAtIDFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWN0dWFsICE9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWRyZVtjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSA9IGxpa2VBcihwYWRyZVt1bmlkYWRBbmFsaXNpc10gfHwgW10pLmFycmF5KCkubGVuZ3RoOyAvL3NpIGFncmVnYSBkZXNkZSBib3RvbiBhZ3JlZ2FyXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNldGVhclNvcnRlbyh7IHJlc3B1ZXN0YXM6IHBhZHJlIH0pO1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyA9IHBhZHJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHVhUGFkcmUgJiYgcmVzcHVlc3Rhc1JhaXopIHtcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBwa0FncmVnYWRhUGFkcmUgZXhpc3RlIGUgaW5kaWNhIGxhIHBvc2ljaW9uIGRlbCBwYWRyZVxyXG4gICAgICAgICAgICAgICAgdmFyIHBhZHJlID0gcmVzcHVlc3Rhc1JhaXo7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY3R1YWwgIT0gY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdID0gbGlrZUFyKHBhZHJlW3VuaWRhZEFuYWxpc2lzXSB8fCBbXSkuYXJyYXkoKS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHsgcmVzcHVlc3RhczogcGFkcmUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgIHZhciByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBhcyBSZXNwdWVzdGFzW11cclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSAhPSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdID0gcmVzcHVlc3Rhc1VBLmxlbmd0aCArIDFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHsgcmVzcHVlc3RhcyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgY2FudGlkYWRUb3RhbCA9IE51bWJlcihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdKTtcclxuICAgICAgICAgICAgaWYgKGNhbnRpZGFkVG90YWwgPCByZXNwdWVzdGFzVUEubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkb2JsZSBhc2lnbmFjacOzbiBwYXJhIHF1ZSBsbyBjYXJndWUgZW4gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1VBLmZpbHRlcigocCwgaSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtZXRyb3Muc29tZSgocGFyYW0pID0+IHBbcGFyYW1dIHx8IGkgPD0gY2FudGlkYWRUb3RhbCAtIDEpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gPSByZXNwdWVzdGFzVUFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aGlsZSAoY2FudGlkYWRUb3RhbCA+IHJlc3B1ZXN0YXNVQS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5wdXNoKHt9IGFzIFJlc3B1ZXN0YXMpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5pbmNvbXBsZXRhc10gPSByZXNwdWVzdGFzVUEuZmlsdGVyKHAgPT4gZXhwcl9pbmNvbXBsZXRpdHVkX2Z1bihwKSkubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgdmFyJHAwID0gXCIkcDBcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gPT0gMSAmJlxyXG4gICAgICAgICAgICAgICAgIXJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dICYmXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdID09IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc29ydGVhciA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIocCA9PiBmaWx0cm9fZnVuKHApKTtcclxuICAgICAgICAgICAgICAgIGlmIChzb3J0ZWFyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5mb3JFYWNoKChwZXIsIGkpID0+IHBlclt2YXIkcDBdID0gaSArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ucHVzaCh7IHZhcmlhYmxlOiB2YXIkcDAsIG9yZGVuOiAxIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHNvcnRlYXIuc29ydChjb21wYXJlRm9yT3JkZXIoY29uZmlndXJhY2lvblNvcnRlby5vcmRlbi5tYXAoZWxlbSA9PiAoeyBjb2x1bW46IGVsZW0udmFyaWFibGUsIG9yZGVyOiBlbGVtLm9yZGVuIH0pKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpY2lvblNvcnRlYWRhID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlndXJhY2lvblNvcnRlby5tZXRvZG8gPT0gJ2hhc2gnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTk8gSU1QTEVNRU5UQURPJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qcG9zaWNpb25Tb3J0ZWFkYT0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfY29lZi5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdW0sIHBhaXIpPT5zdW0gKyBkYXRvc1ZpdmllbmRhLnRlbVtwYWlyLnZhcl0gKiBwYWlyLmNvZWYpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby5kaXZpc29yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgJSBzb3J0ZWFyLmxlbmd0aCovXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldHJhID0gJ0EnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJMZXRyYTogSWRWYXJpYWJsZSA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcGVyc29uYSBvZiBzb3J0ZWFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEuZmluZCgoX3BlciwgaSkgPT4gaSA9PSBwZXJzb25hW3ZhciRwMF0gYXMgbnVtYmVyIC0gMSkhW3ZhckxldHJhXSA9IGxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uYVt2YXJMZXRyYV0gPSBsZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldHJhID0gU3RyaW5nLmZyb21DaGFyQ29kZShsZXRyYS5jaGFyQ29kZUF0KDApICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxhQWxlYXRvcmlhTWllbWJyb3MgPSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby50YWJsYS5tYXAoKGxpc3RhKSA9PiBsaXN0YS5zcGxpdCgnJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdG8gPSBpZEVuYyAlIDEwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uYVRhYmxhQWxlYXRvcmlhID0gcmVzdG8gPyByZXN0byAtIDEgOiA5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29ydGVhci5sZW5ndGggPiB0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zcGxpY2UodGFibGFBbGVhdG9yaWFNaWVtYnJvcy5sZW5ndGgpIC8vZGVzY2FydG8gY2FuZGlkYXRvcyBzaSBzb24gbcOhcyBxdWUgbG8gcXVlIHBlcm1pdGUgbGEgdGFibGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsYVRhYmxhQWxlYXRvcmlhID0gc29ydGVhci5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV0cmFTZWxlY2Npb25hZGEgPSB0YWJsYUFsZWF0b3JpYU1pZW1icm9zW2ZpbGFUYWJsYUFsZWF0b3JpYV1bY29sdW1uYVRhYmxhQWxlYXRvcmlhXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaWNpb25Tb3J0ZWFkYSA9IHJlc3B1ZXN0YXNVQS5maW5kSW5kZXgoKHA6IFJlc3B1ZXN0YXMpID0+IHBbdmFyTGV0cmFdID09IGxldHJhU2VsZWNjaW9uYWRhKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dID0gcG9zaWNpb25Tb3J0ZWFkYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3NvcnRlYWJsZXNdID0gc29ydGVhci5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8uc29ydGVhZG9fbW9zdHJhcj8uZm9yRWFjaCgobW9zdHJhcikgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdID0gcmVzcHVlc3Rhc1VBW3Jlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dIGFzIG51bWJlciAtIDFdW21vc3RyYXIuc291cmNlXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc10gPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0gPSByZXNwdWVzdGFzVUEubGVuZ3RoIHx8IG51bGw7IC8vbm8gcXVlcmVtb3MgZWwgdmFsb3IgMFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQV0gPSAnb2snO1xyXG4gICAgICAgICAgICBpZiAoY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsXSA9ICdvayc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgbm9kb0FjdHVhbDogUmVzcHVlc3RhcyB8IFJlc3B1ZXN0YXNbXSwgdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzLCBmb3JQa0FjdW11bGFkbzogRm9yUGspIHtcclxuICAgIHZhciB1YURlZiA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgIHZhciBlc0FycmF5ID0gbm9kb0FjdHVhbCBpbnN0YW5jZW9mIEFycmF5O1xyXG4gICAgdmFyIGNvbmp1bnRvOiBSZXNwdWVzdGFzW10gPSBlc0FycmF5ID8gbm9kb0FjdHVhbCBhcyBSZXNwdWVzdGFzW10gOiBbbm9kb0FjdHVhbCBhcyBSZXNwdWVzdGFzXTtcclxuICAgIFxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25qdW50by5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciByZXNwID0gY29uanVudG9baV07XHJcbiAgICAgICAgaWYgKCFyZXNwKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgdmFyIG51bSA9IGVzQXJyYXkgPyBpICsgMSA6IChmb3JQa0FjdW11bGFkb1t1YURlZi5wa19hZ3JlZ2FkYV0gfHwgMSk7XHJcbiAgICAgICAgdmFyIGlkRm9ybXVsYXJpbyA9IE9iamVjdC5rZXlzKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbmQoa2V5ID0+IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3Nba2V5IGFzIElkRm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT09IHVuaWRhZF9hbmFsaXNpcykgYXMgSWRGb3JtdWxhcmlvO1xyXG4gICAgICAgIHZhciBtaUZvclBrOiBGb3JQayA9IHsgLi4uZm9yUGtBY3VtdWxhZG8sIFt1YURlZi5wa19hZ3JlZ2FkYV06IG51bSwgZm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvIHx8IGZvclBrQWN1bXVsYWRvLmZvcm11bGFyaW8gfTtcclxuXHJcbiAgICAgICAgaWYgKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMpIHtcclxuICAgICAgICAgICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcyhyZXNwdWVzdGFzUmFpeiwgbWlGb3JQayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8pIHtcclxuICAgICAgICAgICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKHJlc3B1ZXN0YXNSYWl6LCBtaUZvclBrKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBoaWphcyA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maWx0ZXIodSA9PiB1LnBhZHJlID09PSB1bmlkYWRfYW5hbGlzaXMpLmtleXMoKTtcclxuICAgICAgICBmb3IgKHZhciB1YUhpamEgb2YgaGlqYXMpIHtcclxuICAgICAgICAgICAgdmFyIGhpamFzUmVzcCA9IHJlc3BbdWFIaWphIGFzIElkVW5pZGFkQW5hbGlzaXNdO1xyXG4gICAgICAgICAgICBpZiAoaGlqYXNSZXNwKSB7XHJcbiAgICAgICAgICAgICAgICBiYXJyZXJTdWJBcmJvbChyZXNwdWVzdGFzUmFpeiwgaGlqYXNSZXNwIGFzIFJlc3B1ZXN0YXNbXSwgdWFIaWphIGFzIElkVW5pZGFkQW5hbGlzaXMsIG1pRm9yUGspO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6OiBGb3JQaykge1xyXG4gICAgdmFyIHVhUHBhbCA9IE9iamVjdC5rZXlzKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoa2V5ID0+ICFlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW2tleSBhcyBJZFVuaWRhZEFuYWxpc2lzXS5wYWRyZSkgYXMgSWRVbmlkYWRBbmFsaXNpcztcclxuICAgIFxyXG4gICAgYmFycmVyU3ViQXJib2wocmVzcHVlc3Rhc1JhaXosIHJlc3B1ZXN0YXNSYWl6LCB1YVBwYWwsIGZvclBrUmFpeik7XHJcbiAgICBiYXJyZXJTdWJBcmJvbChyZXNwdWVzdGFzUmFpeiwgcmVzcHVlc3Rhc1JhaXosIHVhUHBhbCwgZm9yUGtSYWl6KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgZm9ybXVsYXJpb3M6IHsgW25vbWJyZUZvcm11bGFyaW8gaW4gSWRGb3JtdWxhcmlvXTogSW5mb0Zvcm11bGFyaW8gfSxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsXHJcbiAgICBVQTogSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzLCAvLyBpbmNsdXllbiBsYSBkZSB0b2RvcyBsb3MgcGFkcmVzIHkgYW5zZXN0cm9zLFxyXG4gICAgcmVzcHVlc3Rhc1BhZHJlOiBSZXNwdWVzdGFzIHwgbnVsbCxcclxuICAgIG9wdHM6IE9wY2lvbmVzUm93VmFsaWRhdG9yLFxyXG4pIHtcclxuICAgIC8vIHJlY29ycmllbmQgVUEgcGVyc29uYXMgeSBtYXNjb3Rhc1xyXG4gICAgZm9yICh2YXIgVUFpbmNsdWlkYSBvZiBkZWZPcGVyYXRpdm8uZGVmVUFbVUFdLmluY2x1aWRhcykge1xyXG4gICAgICAgIHZhciBwa051ZXZhID0gZGVmT3BlcmF0aXZvLmRlZlVBW1VBaW5jbHVpZGFdLnBrO1xyXG4gICAgICAgIHZhciBjb25qdW50b1Jlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNbVUFpbmNsdWlkYV07XHJcbiAgICAgICAgbGlrZUFyKGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzSGlqbywgdmFsb3JQa09Qb3NpY2lvbikgPT4ge1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yLFxyXG4gICAgICAgICAgICAgICAgZm9ybXVsYXJpb3MsXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzSGlqbyxcclxuICAgICAgICAgICAgICAgIFVBaW5jbHVpZGEsXHJcbiAgICAgICAgICAgICAgICB7IC4uLmZvclBrLCBbcGtOdWV2YV06IHZhbG9yUGsgfSxcclxuICAgICAgICAgICAgICAgIHsgLi4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXNIaWpvLCBbcGtOdWV2YV06IHZhbG9yUGsgfSxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICBvcHRzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIC8vIFMxICwgQTFcclxuICAgIGZvciAodmFyIGVzSGVybWFubyBvZiBbdHJ1ZSwgZmFsc2VdKSB7XHJcbiAgICAgICAgZm9yICh2YXIgZm9ybXVsYXJpbyBvZiBkZWZPcGVyYXRpdm8uZGVmVUFbVUFdLmlkc0ZvcikgaWYgKCEhZXNIZXJtYW5vID09ICEhZGVmT3BlcmF0aXZvLmRlZkZvcltmb3JtdWxhcmlvXS5oZXJtYW5vKSB7XHJcbiAgICAgICAgICAgIHZhciBwbGFpbkZvclBrOiBQbGFpbkZvclBrID0gdG9QbGFpbkZvclBrKHsgLi4uZm9yUGssIGZvcm11bGFyaW8gfSlcclxuICAgICAgICAgICAgdmFyIG1heFBhc29zQXV0b2luZ3Jlc2FkYXMgPSAxMDtcclxuICAgICAgICAgICAgdmFyIHZhckF1dG9JbmdyZXNhZGFzID0gW107XHJcbiAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgIHZhciBodWJvQXV0b2luZ3Jlc29zID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXSA9XHJcbiAgICAgICAgICAgICAgICAgICAgcm93VmFsaWRhdG9yKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IG1hcmNhRmluOiAnZmluJywgLi4uZm9ybXVsYXJpb3NbZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvciB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIHZhciB7IHJlc3VtZW4sIGF1dG9JbmdyZXNhZGFzIH0gPSBmZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXTtcclxuICAgICAgICAgICAgICAgIHZhciB2YXJOYW1lOiBJZFZhcmlhYmxlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1dG9JbmdyZXNhZGFzICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhck5hbWUgaW4gYXV0b0luZ3Jlc2FkYXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbWJpbyA9IHJlc3B1ZXN0YXNbdmFyTmFtZV0gIT09IGF1dG9JbmdyZXNhZGFzW3Zhck5hbWVdIGFzIFZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FtYmlvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhc1t2YXJOYW1lXSA9IGF1dG9JbmdyZXNhZGFzW3Zhck5hbWVdIGFzIFZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyQXV0b0luZ3Jlc2FkYXMucHVzaCh2YXJOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1Ym9BdXRvaW5ncmVzb3MgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IHdoaWxlIChodWJvQXV0b2luZ3Jlc29zICYmIG1heFBhc29zQXV0b2luZ3Jlc2FkYXMtLSA+IDApO1xyXG4gICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5mb3JFYWNoKF92YXJuYW1lID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdLmVzdGFkb3NbX3Zhcm5hbWUgYXMgSWRWYXJpYWJsZV0gPSAnYWN0dWFsJztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdmFyIEJGX3Zhcm5hbWUgPSAnJEIuJyArIGZvcm11bGFyaW8gYXMgSWRWYXJpYWJsZVxyXG4gICAgICAgICAgICB2YXIgZm9ybVByaW5jaXBhbEZvclZpdmllbmRhID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKTtcclxuICAgICAgICAgICAgaWYgKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG5vIGhheSBjb25maWd1cmFjaW9uIGRlIHNvcnRlbyBwYXJhIGVsIGZvcm11bGFyaW8gJHtmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGF9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgY29uZmlnU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmIGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYV07XHJcbiAgICAgICAgICAgIHZhciByZXN1bWVuT3JOdWxsID1cclxuICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsICYmXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCA9PSBCRl92YXJuYW1lID9cclxuICAgICAgICAgICAgICAgICAgICAnb2snXHJcbiAgICAgICAgICAgICAgICAgICAgOiByZXN1bWVuID09ICd2YWNpbycgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcmVzdW1lblxyXG4gICAgICAgICAgICBpZiAoZXNIZXJtYW5vKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbCA9PSAnb2snID8gJ29rJyA6IG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcHVlc3Rhc1BhZHJlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIC8vcmVzcHVlc3Rhc1BhZHJlW0JGX3Zhcm5hbWVdID0gcmVzdW1lbk9yTnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG51bWJlck9yU3RyaW5nSW5jSWZBcnJheShudW1iZXJPclN0cmluZzogbnVtYmVyIHwgc3RyaW5nLCBvYmplY3Q6IG9iamVjdCB8IGFueVtdKTogKG51bWJlciB8IHN0cmluZykge1xyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBlc3RveSB1c2FuZG8gaXNOYU4gcGFyYSB2ZXIgc2kgZXMgbyBubyB1biBuw7ptZXJvIHN1bWFibGVcclxuICAgIGlmIChpc05hTihudW1iZXJPclN0cmluZykpIHtcclxuICAgICAgICByZXR1cm4gbnVtYmVyT3JTdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTnVtYmVyKG51bWJlck9yU3RyaW5nKSArIChvYmplY3QgaW5zdGFuY2VvZiBBcnJheSA/IDEgOiAwKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRNYWluRm9ybUZvclZpdmllbmRhID0gKHZhbHVlUGtSYWl6OiBWYWx1ZVBrUmFpeik6IElkRm9ybXVsYXJpbyA9PiB7XHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbdmFsdWVQa1JhaXpdLnRhcmVhLm1haW5fZm9ybVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKSB7XHJcbiAgICBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmlsdGVyKHVhRGVmID0+ICF1YURlZi5wYWRyZSkuZm9yRWFjaCh1YURlZiA9PiB7XHJcbiAgICAgICAgdmFyIGVzUHJpbmNpcGFsID0gKGY6IEZvcm11bGFyaW8sIGVuYzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmb3JtdWxhcmlvUHJpbmNpcGFsID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShlbmMpO1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybXVsYXJpb1ByaW5jaXBhbCA/IGZvcm11bGFyaW9QcmluY2lwYWwgPT0gZi5pZF9jYXNpbGxlcm8gOiBmLmZvcm11bGFyaW9fcHJpbmNpcGFsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2Fjw6EgaGF5IHF1ZSBzYW5pdGl6YXIgcG9ycXVlIGV2aWRlbnRlbWVudGUgcHVlZGUgdmVuaXIgY29uIGhhc2hzIGRlIGVuY3Vlc3RhcyBzaW4gaW5mbyBlbCBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzXHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1t1YURlZi51bmlkYWRfYW5hbGlzaXNdXHJcbiAgICAgICAgYmVpbmdBcnJheShjb25qdW50b1Jlc3B1ZXN0YXNVQSkuZm9yRWFjaCgocmVzcHVlc3RhcywgdmFsb3JQa09Qb3NpY2lvbikgPT4ge1xyXG4gICAgICAgICAgICB2YXIgdmFsb3JQayA9IG51bWJlck9yU3RyaW5nSW5jSWZBcnJheSh2YWxvclBrT1Bvc2ljaW9uLCBjb25qdW50b1Jlc3B1ZXN0YXNVQSk7XHJcbiAgICAgICAgICAgIGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5maWx0ZXIoZiA9PiBmLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhRGVmLnVuaWRhZF9hbmFsaXNpcyAmJiBlc1ByaW5jaXBhbChmLmNhc2lsbGVyb3MsIHZhbG9yUGsgYXMgbnVtYmVyKSkuZm9yRWFjaCgoX2RlZkYsIGZvcm11bGFyaW8pID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBmb3JQa1JhaXogPSB7IGZvcm11bGFyaW8sIFt1YURlZi5wa19hZ3JlZ2FkYV06IHZhbG9yUGsgfSBhcyBGb3JQa1JhaXpcclxuICAgICAgICAgICAgICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhcywgZm9yUGtSYWl6LCB7fSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja0VuY3Vlc3RhKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICBmb3JtdWxhcmlvczogeyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOiBJbmZvRm9ybXVsYXJpbyB9LFxyXG4gICAgZm9yUGtSYWl6OiBGb3JQa1JhaXosXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLFxyXG4gICAgb3B0czogT3BjaW9uZXNSb3dWYWxpZGF0b3JcclxuKSB7XHJcbiAgICB2YXIgZm9yUGs6IEZvclBrID0geyAuLi5mb3JQa1JhaXogfTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhmZWVkYmFja1Jvd1ZhbGlkYXRvciwgZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIGRlZk9wZXJhdGl2by5VQXByaW5jaXBhbCwgZm9yUGssIHJlc3B1ZXN0YXMsIG51bGwsIG9wdHMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsIGZvclBrUmFpejogRm9yUGtSYWl6LCBvcHRzOiBPcGNpb25lc1Jvd1ZhbGlkYXRvcikge1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG86IFJlc3VtZW5Fc3RhZG87XHJcbiAgICAvLyBAdHMtaWdub3JlIFBhcnRpYWxcclxuICAgIHZhciBudWV2b3NSb3dzOiB7IFt4IGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgSWRGaW4+IH0gPSB7fVxyXG4gICAgY2FsY3VsYXJGZWVkYmFja0VuY3Vlc3RhKG51ZXZvc1Jvd3MsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIGZvclBrUmFpeiwgcmVzcHVlc3Rhcywgb3B0cyk7XHJcbiAgICBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciA9IGxpa2VBcihkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcikuZmlsdGVyKChfZmVlZGJhY2s6IGFueSwgcGxhaW5QazogUGxhaW5Gb3JQaykgPT4gSlNPTi5wYXJzZShwbGFpblBrKVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdICE9IGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKS5wbGFpbigpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSB7IC4uLmRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCAuLi5udWV2b3NSb3dzIH07XHJcbiAgICBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXVtmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0gPSB7XHJcbiAgICAgICAgLi4uZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dLFxyXG4gICAgICAgIC4uLmNhbGN1bGFyUmVzdW1lblZpdmllbmRhKFxyXG4gICAgICAgICAgICBmb3JQa1JhaXosXHJcbiAgICAgICAgICAgIG51ZXZvc1Jvd3MsXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNcclxuICAgICAgICApXHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MgPSAoaWRGb3JtdWxhcmlvOiBJZEZvcm11bGFyaW8gfCB1bmRlZmluZWQsIGZvcm1zRmVlZGJhY2s6IElkRm9ybXVsYXJpb1tdID0gW10pID0+IHtcclxuICAgIGlmIChpZEZvcm11bGFyaW8pIHtcclxuICAgICAgICBmb3IgKGxldCBjYXNpbGxlcm8gb2YgZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tpZEZvcm11bGFyaW9dLmNhc2lsbGVyb3MuY2FzaWxsZXJvcykge1xyXG4gICAgICAgICAgICBpZiAoY2FzaWxsZXJvLnRpcG9jID09ICdCRicpIHtcclxuICAgICAgICAgICAgICAgIHZhciBmb3JtSGlqbyA9IChjYXNpbGxlcm8uc2FsdG8/LnN0YXJ0c1dpdGgoJ0Y6JykgPyBjYXNpbGxlcm8uc2FsdG8gOiAnRjonICsgY2FzaWxsZXJvLnNhbHRvKSBhcyBJZEZvcm11bGFyaW87XHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUhpam8pIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLnB1c2goZm9ybUhpam8pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MoZm9ybUhpam8sIGZvcm1zRmVlZGJhY2spO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1zRmVlZGJhY2s7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeiA9ICh2YWx1ZVBrUmFpejogVmFsdWVQa1JhaXopID0+IHtcclxuICAgIHZhciBtYWluRm9ybUZvclZhbHVlUGtSYWl6ID0gZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYSh2YWx1ZVBrUmFpeik7XHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IFttYWluRm9ybUZvclZhbHVlUGtSYWl6XTtcclxuICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MobWFpbkZvcm1Gb3JWYWx1ZVBrUmFpeiwgZm9ybXNGZWVkYmFjayk7XHJcbiAgICByZXR1cm4gZm9ybXNGZWVkYmFjaztcclxufVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhckFjdHVhbEJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86IENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvIHwgbnVsbCwgbnVtRWxlbWVudG9VQTogbnVtYmVyLCBudW1BY3R1YWw6IG51bWJlciB8IG51bGwsIGZvcm11bGFyaW86IElkRm9ybXVsYXJpbywgcjogUmVzcHVlc3RhcykgPT5cclxuICAgICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCAmJlxyXG4gICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW9cclxuICAgICAgICA/XHJcbiAgICAgICAgbnVtRWxlbWVudG9VQSA9PSBjb2FsZXNjZShcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb19tYW51YWxdLFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvXVxyXG4gICAgICAgIClcclxuICAgICAgICA6XHJcbiAgICAgICAgbnVtQWN0dWFsID09IG51bUVsZW1lbnRvVUFcclxuICAgIClcclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJEaXNhYmxlZEJGID0gKFxyXG4gICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gfCBudWxsLFxyXG4gICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvIHwgbnVsbCxcclxuICAgIG51bUVsZW1lbnRvVUE6IG51bWJlcixcclxuICAgIGZvcm11bGFyaW86IElkRm9ybXVsYXJpbyxcclxuICAgIHI6IFJlc3B1ZXN0YXNcclxuKSA9PiB7XHJcbiAgICBpZiAoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvICYmIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXSkge1xyXG4gICAgICAgIHZhciBleHByX2hhYmlsaXRhcl9mdW4gPSBnZXRGdW5jaW9uSGFiaWxpdGFyKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXS5leHByX2hhYmlsaXRhcl9ib3Rvbl9qcyk7XHJcbiAgICAgICAgcmV0dXJuICFleHByX2hhYmlsaXRhcl9mdW4ocltoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10udW5pZGFkX2FuYWxpc2lzXVtudW1FbGVtZW50b1VBIC0gMV0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmXHJcbiAgICAgICAgICAgIChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvIHx8XHJcbiAgICAgICAgICAgICAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsKS5pbmNsdWRlcyhmb3JtdWxhcmlvKVxyXG4gICAgICAgICAgICApICYmXHJcbiAgICAgICAgICAgIG51bUVsZW1lbnRvVUEgIT0gY29hbGVzY2UoXHJcbiAgICAgICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvXVxyXG4gICAgICAgICAgICApKVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyUGVybWl0ZUJvcnJhckJGID0gKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86IENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvIHwgbnVsbCwgZm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvKSA9PlxyXG4gICAgIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmXHJcbiAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbylcclxuXHJcbnR5cGUgUmVzdWx0YWRvUmVzdW1lbiA9IHtcclxuICAgIHJlc3VtZW5Fc3RhZG86IFJlc3VtZW5Fc3RhZG8sXHJcbiAgICByZXN1bWVuRXN0YWRvU3VwOiBSZXN1bWVuRXN0YWRvLFxyXG4gICAgY29kUmVhOiBudW1iZXIgfCBudWxsLFxyXG4gICAgY29kTm9SZWE6IHN0cmluZyB8IG51bGwsXHJcbiAgICBjb2RSZWFTdXA6IG51bWJlciB8IG51bGxcclxuICAgIGNvZE5vUmVhU3VwOiBzdHJpbmcgfCBudWxsLFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoXHJcbiAgICBmb3JQa1JhaXo6IEZvclBrUmFpeixcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3Rhc1xyXG4pOiBSZXN1bHRhZG9SZXN1bWVuIHtcclxuICAgIHZhciB7IGNvZFJlYSwgZXNSZWEgfSA9IGRlZk9wZXJhdGl2by5lc1JlYWxpemFkYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHsgY29kTm9SZWEsIGVzTm9SZWEgfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgeyBjb2RSZWFTdXAsIGVzUmVhU3VwIH0gPSBkZWZPcGVyYXRpdm8uZXNSZWFsaXphZGFTdXAocmVzcHVlc3RhcylcclxuICAgIHZhciB7IGNvZE5vUmVhU3VwLCBlc05vUmVhU3VwIH0gPSBkZWZPcGVyYXRpdm8uZXNOb1JlYVN1cChyZXNwdWVzdGFzKVxyXG4gICAgdmFyIGZvcm1zRmVlZGJhY2sgPSBnZXRGb3JtdWxhcmlvc0ZvclZhbHVlUGtSYWl6KGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKTtcclxuICAgIHZhciBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmIGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2dldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pXVxyXG4gICAgdmFyIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyA9IGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvO1xyXG4gICAgdmFyIGZlZWRCYWNrVml2aWVuZGEgPSBsaWtlQXIoZmVlZGJhY2tSb3dWYWxpZGF0b3IpLmZpbHRlcigoX3JvdywgcGxhaW5QaykgPT4ge1xyXG4gICAgICAgIHZhciB0aWVuZUluZGl2aWR1YWwgPSBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyAmJiAhIShjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgJiYgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSlcclxuICAgICAgICB2YXIgdGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlID0gaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvICYmIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8gYXMgSWRGb3JtdWxhcmlvXTtcclxuICAgICAgICB2YXIgcGtBZ3JlZ2FkYSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRpZW5lQm90b25EZXNIYWJpbGl0YWJsZSkge1xyXG4gICAgICAgICAgICBwa0FncmVnYWRhID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhLCBfaWRVQSkgPT5cclxuICAgICAgICAgICAgICAgIHVhLnVuaWRhZF9hbmFsaXNpcyA9PSBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvIGFzIElkRm9ybXVsYXJpb10udW5pZGFkX2FuYWxpc2lzKT8ucGtfYWdyZWdhZGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHBsYWluUGspW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gPT0gZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gJiZcclxuICAgICAgICAgICAgZm9ybXNGZWVkYmFjay5pbmNsdWRlcyhKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8pICYmXHJcbiAgICAgICAgICAgICh0aWVuZUJvdG9uRGVzSGFiaWxpdGFibGUgP1xyXG4gICAgICAgICAgICAgICAgIWNhbGN1bGFyRGlzYWJsZWRCRihcclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgICAgICAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKVtwa0FncmVnYWRhIGFzIENhbXBvUGtdLFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzRm9yUGsoSlNPTi5wYXJzZShwbGFpblBrKSwgdHJ1ZSkucmVzcHVlc3Rhc0F1bWVudGFkYXNcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIDogdGllbmVJbmRpdmlkdWFsID9cclxuICAgICAgICAgICAgICAgICAgICAhY2FsY3VsYXJEaXNhYmxlZEJGKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLnBlcnNvbmEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXN0cnVjdHVyYS5jb25SZWFIb2dhciA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmhvZ2FyID8gcmVzcHVlc3Rhc0ZvclBrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTogZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXVsYXJpbzogY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9nYXI6IEpTT04ucGFyc2UocGxhaW5QaykuaG9nYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgRm9yUGspLnJlc3B1ZXN0YXMgOiB7fSBhcyBSZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzRm9yUGsoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOiBmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtdWxhcmlvOiBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gYXMgRm9yUGspLnJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0cnVlKVxyXG4gICAgfSkuYXJyYXkoKTtcclxuICAgIHZhciBwcmlvcmlkYWRlczogeyBba2V5IGluIFJlc3VtZW5Fc3RhZG9dOiB7IHByaW9yaWRhZDogbnVtYmVyLCBjYW50aWRhZDogbnVtYmVyIH0gfSA9IHtcclxuICAgICAgICAnbm8gcmVhJzogeyBwcmlvcmlkYWQ6IDEsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ2NvbiBwcm9ibGVtYXMnOiB7IHByaW9yaWRhZDogMiwgY2FudGlkYWQ6IDAgfSxcclxuICAgICAgICAnaW5jb21wbGV0byc6IHsgcHJpb3JpZGFkOiAzLCBjYW50aWRhZDogMCB9LFxyXG4gICAgICAgICd2YWNpbyc6IHsgcHJpb3JpZGFkOiA0LCBjYW50aWRhZDogMCB9LFxyXG4gICAgICAgICdjaXRhIHBhY3RhZGEnOiB7IHByaW9yaWRhZDogNSwgY2FudGlkYWQ6IDAgfSxcclxuICAgICAgICAnb2snOiB7IHByaW9yaWRhZDogNiwgY2FudGlkYWQ6IDAgfVxyXG4gICAgfVxyXG4gICAgdmFyIG1pbiA9IDY7XHJcbiAgICB2YXIgbWluUmVzdW1lbjogUmVzdW1lbkVzdGFkbyA9ICdvayc7XHJcbiAgICBmb3IgKHZhciBmZWVkYmFjayBvZiBmZWVkQmFja1ZpdmllbmRhKSB7XHJcbiAgICAgICAgdmFyIHJlc3VtZW4gPSBmZWVkYmFjay5yZXN1bWVuO1xyXG4gICAgICAgIHByaW9yaWRhZGVzW3Jlc3VtZW5dLmNhbnRpZGFkKys7XHJcbiAgICAgICAgaWYgKHByaW9yaWRhZGVzW3Jlc3VtZW5dLnByaW9yaWRhZCA8IG1pbikge1xyXG4gICAgICAgICAgICBtaW4gPSBwcmlvcmlkYWRlc1tyZXN1bWVuXS5wcmlvcmlkYWQ7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW4gPSByZXN1bWVuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChtaW5SZXN1bWVuID09ICd2YWNpbycgJiYgcHJpb3JpZGFkZXNbJ29rJ10uY2FudGlkYWQgfHwgbWluUmVzdW1lbiA9PSAnaW5jb21wbGV0bycpIHtcclxuICAgICAgICBpZiAoZmFsc2UgLypyZXNwdWVzdGFzW3NwMV09PTIgJiYgcmVzcHVlc3Rhc1tzcDZdPT1udWxsKi8pIHtcclxuICAgICAgICAgICAgbWluUmVzdW1lbiA9ICdjaXRhIHBhY3RhZGEnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW4gPSAnaW5jb21wbGV0byc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vVE9ETyBBUlJFR0xBUiBFU1RFIEhPUlJPUiwgR0VORVJBTElaQVJcclxuICAgIHZhciB0YXJlYSA9IGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdIGFzIHVua25vd24gYXMgSWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG86IFJlc3VtZW5Fc3RhZG87XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkb1N1cDogUmVzdW1lbkVzdGFkbyA9ICd2YWNpbyc7XHJcbiAgICBpZiAodGFyZWEgPT0gJ3N1cGUnKSB7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkb1N1cCA9IGVzTm9SZWFTdXAgPyAnbm8gcmVhJyA6IG1pblJlc3VtZW5cclxuICAgICAgICAvL3BhcmEgcXVlIGNvbG9yZWUgYmllbiBlbiBsYSBoZHIgZGVsIERNIChsdWVnbyBlbiBiYmRkIG5vIHNlIGd1YXJkYSlcclxuICAgICAgICByZXN1bWVuRXN0YWRvID0gcmVzdW1lbkVzdGFkb1N1cFxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXN1bWVuRXN0YWRvID0gZXNOb1JlYSA/ICdubyByZWEnIDogbWluUmVzdW1lblxyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdGFkbzogUmVzdWx0YWRvUmVzdW1lbiA9IHtcclxuICAgICAgICByZXN1bWVuRXN0YWRvLFxyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAsXHJcbiAgICAgICAgY29kUmVhLFxyXG4gICAgICAgIGNvZE5vUmVhLFxyXG4gICAgICAgIGNvZFJlYVN1cCxcclxuICAgICAgICBjb2ROb1JlYVN1cFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdGFkb1xyXG59XHJcbiJdfQ==
|