dmencu 3.2.15 → 3.2.17

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.
@@ -41,6 +41,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
41
41
  exports.setValorDistinto = setValorDistinto;
42
42
  exports.accion_id_pregunta = accion_id_pregunta;
43
43
  exports.accion_registrar_respuesta = accion_registrar_respuesta;
44
+ exports.accion_registrar_respuestas = accion_registrar_respuestas;
44
45
  exports.accion_registrar_nota = accion_registrar_nota;
45
46
  exports.accion_agregar_visita = accion_agregar_visita;
46
47
  exports.accion_modificar_visita = accion_modificar_visita;
@@ -415,8 +416,55 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
415
416
  }
416
417
  }
417
418
  }
419
+ function aplicarCambioUnaRespuesta(forPk, respuestas, variable, respuestaInput) {
420
+ var _a;
421
+ var respuesta = respuestaInput;
422
+ var valorAnterior = respuestas[variable];
423
+ if (respuesta === '') {
424
+ respuesta = null;
425
+ }
426
+ else if (((_a = estructura.formularios[forPk.formulario].estructuraRowValidator.variables[variable]) === null || _a === void 0 ? void 0 : _a.tipo) == 'numero') {
427
+ if (respuesta != null) {
428
+ respuesta = Number(respuesta);
429
+ }
430
+ }
431
+ // si es un falsy (0 == false) tengo que comparar con !==
432
+ var recentModified = respuesta ? valorAnterior != respuesta : valorAnterior !== respuesta;
433
+ if (recentModified) {
434
+ respuestas[variable] = respuesta !== null && respuesta !== void 0 ? respuesta : null; // cambio undefined por null
435
+ }
436
+ return { recentModified, valorAnterior, respuestaProcesada: respuesta };
437
+ }
438
+ function refrescarYRecalcularBypass(forPk, respuestas, respuestasRaiz, forPkRaiz, variablesModificadas, recentModified) {
439
+ recalcularTodoElArbol(respuestasRaiz, forPkRaiz);
440
+ if (estructura.configSorteo && !(datosByPass === null || datosByPass === void 0 ? void 0 : datosByPass.soloLectura)) {
441
+ for (var i = 0; i < variablesModificadas.length; i++) {
442
+ verificarSorteo({
443
+ configuracionSorteo: estructura.configSorteo[(0, exports.getMainFormForVivienda)(forPk[estructura.pkAgregadaUaPpal])],
444
+ respuestas,
445
+ respuestasRaiz,
446
+ variableActual: variablesModificadas[i],
447
+ forPk: forPk
448
+ });
449
+ }
450
+ }
451
+ datosByPass.dirty = datosByPass.dirty || recentModified;
452
+ respuestasRaiz.$dirty = respuestasRaiz.$dirty || recentModified;
453
+ refrescarMarcaDirty();
454
+ calcularFeedback(respuestasRaiz, forPkRaiz, { autoIngreso: true });
455
+ var feedbackRow = datosByPass.feedbackRowValidator[(0, tipos_1.toPlainForPk)(forPk)];
456
+ calcularVariablesBotonFormulario(forPk);
457
+ volcadoInicialElementosRegistrados(forPk);
458
+ const { respuestasAumentadas } = respuestasForPk(forPk, true);
459
+ for (var j = 0; j < variablesModificadas.length; j++) {
460
+ var v = variablesModificadas[j];
461
+ notificarCambioVariable(v, respuestasAumentadas[v], forPk, respuestasAumentadas);
462
+ }
463
+ persistirDatosByPass(datosByPass); // OJO ASYNC DESCONTROLADA
464
+ return feedbackRow;
465
+ }
418
466
  function accion_registrar_respuesta(payload, _datosByPass) {
419
- var _a, _b, _c, _d, _e;
467
+ var _a, _b, _c, _d;
420
468
  let token = 'AVERIGUAR TODO';
421
469
  let { forPk, respuesta, variable } = payload;
422
470
  var { respuestas, respuestasRaiz, forPkRaiz } = respuestasForPk(forPk);
@@ -424,56 +472,44 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
424
472
  var recentModified = false;
425
473
  var valorAnterior = variable != exports.NO_CAMBIAR__SOLO_TRAER_STATUS ? respuestas[variable] : null;
426
474
  var feedbackRow = datosByPass.feedbackRowValidator[(0, tipos_1.toPlainForPk)(forPk)];
475
+ var siguienteVariable;
427
476
  if (respuesta !== exports.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO && variable != exports.NO_CAMBIAR__SOLO_TRAER_STATUS) {
428
- if (respuesta === '') {
429
- respuesta = null;
430
- }
431
- else if (((_a = estructura.formularios[forPk.formulario].estructuraRowValidator.variables[variable]) === null || _a === void 0 ? void 0 : _a.tipo) == 'numero') {
432
- if (respuesta != null) {
433
- respuesta = Number(respuesta);
434
- }
435
- }
436
- // si es un falsy (0 == false) tengo que comparar con !==
437
- recentModified = respuesta ? valorAnterior != respuesta : valorAnterior !== respuesta;
438
- if (recentModified) {
439
- respuestas[variable] = respuesta !== null && respuesta !== void 0 ? respuesta : null; // cambio undefined por null
440
- }
441
- else {
442
- siguienteVariable = (_b = feedbackRow.feedback[variable]) === null || _b === void 0 ? void 0 : _b.siguiente;
477
+ var resCambio = aplicarCambioUnaRespuesta(forPk, respuestas, variable, respuesta);
478
+ recentModified = resCambio.recentModified;
479
+ if (!recentModified) {
480
+ siguienteVariable = (_a = feedbackRow.feedback[variable]) === null || _a === void 0 ? void 0 : _a.siguiente;
443
481
  }
444
482
  }
445
- var siguienteVariable;
446
- if (variable != exports.NO_CAMBIAR__SOLO_TRAER_STATUS && (recentModified || exports.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO && ((_c = feedbackRow.autoIngresadas) === null || _c === void 0 ? void 0 : _c[variable]))) {
447
- recalcularTodoElArbol(respuestasRaiz, forPkRaiz);
448
- if (estructura.configSorteo && !(datosByPass === null || datosByPass === void 0 ? void 0 : datosByPass.soloLectura)) {
449
- verificarSorteo({
450
- configuracionSorteo: estructura.configSorteo[(0, exports.getMainFormForVivienda)(forPk[estructura.pkAgregadaUaPpal])],
451
- respuestas,
452
- respuestasRaiz,
453
- variableActual: variable,
454
- forPk: forPk
455
- });
456
- }
457
- datosByPass.dirty = datosByPass.dirty || recentModified;
458
- respuestasRaiz.$dirty = respuestasRaiz.$dirty || recentModified;
459
- refrescarMarcaDirty();
460
- calcularFeedback(respuestasRaiz, forPkRaiz, { autoIngreso: true });
461
- feedbackRow = datosByPass.feedbackRowValidator[(0, tipos_1.toPlainForPk)(forPk)];
462
- calcularVariablesBotonFormulario(forPk);
463
- volcadoInicialElementosRegistrados(forPk);
464
- const { respuestasAumentadas } = respuestasForPk(forPk, true);
465
- notificarCambioVariable(variable, respuestasAumentadas[variable], forPk, respuestasAumentadas);
466
- persistirDatosByPass(datosByPass); // OJO ASYNC DESCONTROLADA
483
+ if (variable != exports.NO_CAMBIAR__SOLO_TRAER_STATUS && (recentModified || exports.NO_CAMBIAR__VERIFICAR_SI_ES_NECESARIO && ((_b = feedbackRow.autoIngresadas) === null || _b === void 0 ? void 0 : _b[variable]))) {
484
+ feedbackRow = refrescarYRecalcularBypass(forPk, respuestas, respuestasRaiz, forPkRaiz, [variable], recentModified);
467
485
  siguienteVariable = variable;
468
486
  do {
469
- siguienteVariable = (_d = feedbackRow.feedback[siguienteVariable]) === null || _d === void 0 ? void 0 : _d.siguiente;
487
+ siguienteVariable = (_c = feedbackRow.feedback[siguienteVariable]) === null || _c === void 0 ? void 0 : _c.siguiente;
470
488
  } while (valorAnterior == null && recentModified && siguienteVariable != null && siguienteVariable != 'fin' && estructura.formularios[forPk.formulario].estructuraRowValidator.variables[siguienteVariable].funcionAutoIngresar);
471
- if (siguienteVariable == null && ((_e = feedbackRow.feedback[variable]) === null || _e === void 0 ? void 0 : _e.estado) == 'valida') {
489
+ if (siguienteVariable == null && ((_d = feedbackRow.feedback[variable]) === null || _d === void 0 ? void 0 : _d.estado) == 'valida') {
472
490
  siguienteVariable = 'fin';
473
491
  }
474
492
  }
475
493
  return { recentModified, siguienteVariable, variableActual: feedbackRow.actual };
476
494
  }
495
+ function accion_registrar_respuestas(payload, _datosByPass) {
496
+ let { forPk, respuestas: listaRespuestas } = payload;
497
+ var { respuestas, respuestasRaiz, forPkRaiz } = respuestasForPk(forPk);
498
+ var recentModifiedAny = false;
499
+ var variablesModificadas = [];
500
+ for (var i = 0; i < listaRespuestas.length; i++) {
501
+ var item = listaRespuestas[i];
502
+ var resCambio = aplicarCambioUnaRespuesta(forPk, respuestas, item.variable, item.respuesta);
503
+ if (resCambio.recentModified) {
504
+ recentModifiedAny = true;
505
+ variablesModificadas.push(item.variable);
506
+ }
507
+ }
508
+ if (recentModifiedAny && variablesModificadas.length > 0) {
509
+ refrescarYRecalcularBypass(forPk, respuestas, respuestasRaiz, forPkRaiz, variablesModificadas, recentModifiedAny);
510
+ }
511
+ return { recentModified: recentModifiedAny };
512
+ }
477
513
  function accion_registrar_nota(payload, _datosByPass) {
478
514
  let { forPkRaiz, tarea, nota } = payload;
479
515
  console.log("FALTA // TODO");
@@ -1195,4 +1231,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
1195
1231
  return resultado;
1196
1232
  }
1197
1233
  });
1198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBc0NBLG9EQUVDO0lBV0QsMERBWUM7SUFFRCw4REFLQztJQUVELDBEQXFCQztJQU1ELG9EQUVDO0lBRUQsNEZBRUM7SUFzQ0QsMERBRUM7SUFFRCxvREFJQztJQXNCRCw0Q0FJQztJQWdCRCxzQ0FVQztJQUVELHdDQVVDO0lBV0QsMERBS0M7SUFFRCw0QkFFQztJQUVELHNDQUVDO0lBa0NELDhDQUlDO0lBTUQsMENBaURDO0lBRUQsZ0ZBdUNDO0lBRUQsNERBb0VDO0lBRUQsMENBUUM7SUFFRCw0Q0FRQztJQWtCRCxnREFDQztJQWNELGdFQTJEQztJQUVELHNEQUdDO0lBRUQsc0RBRUM7SUFFRCwwREFFQztJQUVELG9EQUVDO0lBRUQsOERBTUM7SUFFRCwwREFNQztJQUVELDREQWVDO0lBR0Qsd0NBS0M7SUFvSkQsa0RBZ0JDO0lBRUQsa0RBMEJDO0lBc0hELDBDQWtJQztJQW9DRCxzREFLQztJQUVELHdFQWdGQztJQUVELDREQU1DO0lBTUQsZ0VBaUJDO0lBRUQsNERBU0M7SUF5RkQsMERBZ0dDO0lBMzNDRCxxQ0FBdUQ7SUFFdkQsaURBQW9HO0lBRXBHLCtDQUErRDtJQUMvRCwyQ0FBc0M7SUFFdEMsbUNBc0JpQjtJQUVqQixtREFBa0Q7SUFDbEQseURBQXVEO0lBRXZELElBQUksU0FBUyxHQUFHLEVBRWYsQ0FBQTtJQUVELFNBQWdCLG9CQUFvQixDQUFDLGlCQUF5QztRQUMxRSxTQUFTLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUE7SUFDbkQsQ0FBQztJQVNELElBQUksMkJBQTJCLEdBQWdDLEVBQUUsQ0FBQztJQUVsRSxTQUFnQix1QkFBdUIsQ0FBQyxRQUFnQyxFQUFFLFNBQTZCO1FBQ25HLE1BQU0sT0FBTyxHQUFHLFNBQVM7WUFDckIsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3RCxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hCLE1BQU0sR0FBRyxHQUE4QixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEUsMkJBQTJCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sR0FBRyxFQUFFO1lBQ1IsTUFBTSxLQUFLLEdBQUcsMkJBQTJCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2IsMkJBQTJCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELFNBQWdCLHlCQUF5QixDQUFDLFFBQWdDO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDbEYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNiLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxRQUFnQixFQUFFLEtBQVUsRUFBRSxLQUFhLEVBQUUsb0JBQWlDO1FBQ2xILEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxRCxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9ELElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ1osSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDckMsSUFBSSxDQUFDLE1BQU0sSUFBSSxvQkFBb0IsRUFBRSxDQUFDO29CQUNsQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLFNBQVMsRUFBRSxDQUFDO3dCQUN4QixJQUFJLENBQUMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDOzRCQUM1QixNQUFNLEdBQUcsSUFBSSxDQUFDOzRCQUNkLE1BQU07d0JBQ1YsQ0FBQztvQkFDTCxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLE1BQU07b0JBQUUsU0FBUztZQUMxQixDQUFDO1lBQ0QsSUFBSSxDQUFDO2dCQUNELFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMseUNBQXlDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbEUsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxVQUFVLEdBQUcsRUFHaEIsQ0FBQTtJQUNELFNBQWdCLG9CQUFvQixDQUFDLGlCQUF5RTtRQUMxRyxVQUFVLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUE7SUFDcEQsQ0FBQztJQUVELFNBQWdCLHdDQUF3QyxDQUFDLHFDQUE2RjtRQUNsSixVQUFVLENBQUMscUNBQXFDLEdBQUcscUNBQXFDLENBQUE7SUFDNUYsQ0FBQztJQVNELElBQUksV0FBVyxHQUFHLEVBQWlCLENBQUE7SUFFNUIsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO0lBQXBGLFFBQUEseUJBQXlCLDZCQUEyRDtJQVNqRyxTQUFTLE9BQU8sQ0FBQyxPQUFvQjtRQUNqQyxJQUFJLElBQUksR0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9GLElBQUksT0FBTyxHQUF1QixPQUFPLENBQUM7UUFDMUMsT0FBTyxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNoQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFlBQWtDLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsSUFBSSxVQUFVLEdBQWUsSUFBa0IsQ0FBQztJQUVoRCxJQUFJLDJCQUEyQixHQUFvRCxHQUFHLEVBQUU7UUFDcEYsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO0lBQ3ZELENBQUMsQ0FBQTtJQUVELFNBQWdCLHVCQUF1QixDQUFDLHVCQUFvRDtRQUN4RiwyQkFBMkIsR0FBRyx1QkFBdUIsQ0FBQztJQUMxRCxDQUFDO0lBRUQsU0FBc0Isb0JBQW9CLENBQUMsSUFBNkI7O1lBQ3BFLE1BQU0sSUFBQSwrQkFBZSxHQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1lBQ3pCLG1CQUFtQixFQUFFLENBQUM7UUFDMUIsQ0FBQztLQUFBO0lBRU0sTUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUFnQixFQUFFLFFBQXdDLEVBQUUsRUFBRTtRQUN4RixNQUFNLHVCQUF1QixHQUFHLElBQUEsK0JBQWUsR0FBRSxDQUFDLG9CQUFvQixFQUFFLElBQUksSUFBSSxDQUFDO1FBQ2pGLE1BQU0sVUFBVSxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQ25DLElBQUEsK0JBQWUsR0FBRSxDQUFDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN6RixXQUFXLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyx1QkFBMkMsQ0FBQyxHQUFHLEVBQW9CLENBQUM7UUFDOUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyx1QkFBMkMsQ0FBQyxtQ0FDaEUsVUFBVSxDQUFDLHFCQUFxQixLQUNuQyxHQUFHLG9CQUFPLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLElBQ2pELENBQUM7UUFDRixXQUFXLENBQUMsY0FBYyxDQUFDLHVCQUEyQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUM7UUFDNUYsMEJBQTBCLEVBQUUsQ0FBQztRQUM3QixvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQ2xDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQztZQUNYLFVBQVUsRUFBRSxVQUFVLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLFNBQVM7WUFDNUQsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLENBQUMsdUJBQXVCLENBQWdCO1NBQ25FLENBQUMsQ0FDbEIsQ0FBQSxDQUFBLHVFQUF1RTtJQUM1RSxDQUFDLENBQUE7SUFqQlksUUFBQSxhQUFhLGlCQWlCekI7SUFHRCxTQUFnQixnQkFBZ0IsQ0FDNUIsZ0JBQXVHO1FBRXZHLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQTtJQUNwQyxDQUFDO0lBRUQsSUFBSSxhQUFhLEdBQTBGLEdBQUcsRUFBRTtRQUM1RyxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7SUFDcEQsQ0FBQyxDQUFBO0lBRU0sSUFBSSxjQUFjLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRTtRQUN6QyxJQUFJLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDaEUsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUM5QixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDcEQsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxDQUFDLENBQUE7UUFDM0QsQ0FBQztJQUNMLENBQUMsQ0FBQTtJQVJVLFFBQUEsY0FBYyxrQkFReEI7SUFFRCxTQUFnQixhQUFhLENBQUMsaUJBQTZCOztRQUN2RCxVQUFVLEdBQUcsSUFBQSxvQ0FBaUIsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xELG9CQUFZLENBQUMsV0FBVyxHQUFHLE1BQUEsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLDBDQUFFLGVBQWdCLENBQUE7UUFDNUcsb0JBQVksQ0FBQyxNQUFNLEdBQUcsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQzFHLG9CQUFZLENBQUMsS0FBSyxHQUFHLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLEVBQUUsRUFBRSxLQUFLLENBQUMsV0FBeUI7WUFDbkMsU0FBUyxFQUFFLElBQUEsZ0JBQU0sRUFBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFO1lBQ3JDLE1BQU0sRUFBRSxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRTtTQUNoRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNYLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxTQUFnQixjQUFjLENBQzFCLFlBQTJEO1FBRTNELFdBQVcsaUNBQ1AsS0FBSyxFQUFFLEtBQUssSUFDVCxZQUFZLEtBQ2Ysb0JBQW9CLEVBQUUsRUFBeUMsR0FDbEUsQ0FBQztRQUVGLDBCQUEwQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVNLElBQUksY0FBYyxHQUFHLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQTtJQUFsQyxRQUFBLGNBQWMsa0JBQW9CO0lBRTdDLFNBQVMsV0FBVyxDQUFDLENBQVM7UUFDMUIsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNkLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBZ0IsdUJBQXVCO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLElBQUksV0FBVyxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUM7WUFDckYsMEJBQTBCLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUMsb0JBQW9CLENBQUM7SUFDNUMsQ0FBQztJQUVELFNBQWdCLFFBQVE7UUFDcEIsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFBO0lBQzVCLENBQUM7SUFFRCxTQUFnQixhQUFhO1FBQ3pCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFnQ0QsSUFBSSx1QkFBdUIsR0FBRyxFQUE4QyxDQUFDO0lBRTdFLFNBQWdCLGlCQUFpQixDQUFrQyxHQUF3QjtRQUN2Rix5RkFBeUY7UUFDekYsSUFBSSxpQkFBaUIsR0FBeUIsdUJBQXVCLENBQUM7UUFDdEUsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNwQyxDQUFDO0lBTUQsU0FBZ0IsZUFBZSxDQUFDLEtBQVksRUFBRSxhQUF1QixFQUFFLGNBQXdCO1FBQzNGLElBQUksb0JBQW9CLEdBQUcsRUFBZ0IsQ0FBQztRQUM1QyxnRUFBZ0U7UUFDaEUsSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQXdCLENBQUM7UUFDdEQsSUFBSSxjQUE4QixDQUFDO1FBQ25DLElBQUksU0FBZ0IsQ0FBQztRQUNyQixJQUFJLGVBQWUsR0FBaUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQTtRQUN2SCxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxJQUFJLEdBQStFLEVBQUUsQ0FBQztRQUMxRixPQUFPLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLElBQUksS0FBSyxHQUFtQixVQUFVLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNsRCxZQUFZLHFCQUFRLFlBQVksQ0FBRSxDQUFDO1lBQ25DLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUN0QyxlQUFlLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQTtRQUNqQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUcsQ0FBQTtZQUNwRCxJQUFJLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkQsSUFBSSxnQkFBZ0IsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQy9FLENBQUM7WUFDRCxJQUFJLFVBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDdEMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsSUFBSSxrQkFBa0IsR0FBRyxVQUFVLENBQUM7WUFDcEMsSUFBSSxRQUFRLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQTtZQUNyRyxVQUFVLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELElBQUksVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNyQixJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNqQixVQUFVLEdBQUcsRUFBZ0IsQ0FBQTtvQkFDN0Isa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxDQUFBO29CQUMxRCxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLDBCQUEwQjtnQkFDakUsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLFFBQVEsNEJBQTRCLGVBQWUsR0FBRyxDQUFDLENBQUM7Z0JBQ3RHLENBQUM7WUFDTCxDQUFDO1lBQ0QsU0FBUyxLQUFULFNBQVMsR0FBSyxZQUFZLEVBQUM7WUFDM0IscUVBQXFFO1lBQ3JFLGNBQWMsS0FBZCxjQUFjLEdBQUssVUFBVSxFQUFDO1lBQzlCLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2hCLG9CQUFvQixpREFBUSxvQkFBb0IsR0FBSyxVQUFVLEtBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsZ0JBQWdCLEdBQUUsQ0FBQTtZQUM1RyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU87WUFDSCxVQUFVLEVBQUUsb0JBQW9CO1lBQ2hDLDZGQUE2RjtZQUM3RixjQUFjLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxLQUFLO1NBQ25ELENBQUE7SUFDTCxDQUFDO0lBRUQsU0FBZ0Isa0NBQWtDLENBQUMsU0FBb0I7UUFDbkUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUMvRCxJQUFJLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDO1FBQ2hELElBQUksVUFBVSxHQUFHLElBQUEsb0JBQVksRUFBQyxTQUFTLENBQUMsQ0FBQTtRQUN4QyxJQUFJLFlBQVksR0FBRyxXQUFXLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEUsS0FBSyxJQUFJLEVBQUUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQy9CLElBQUksR0FBRyxHQUFHLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hDLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDeEMsR0FBRyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7Z0JBQzdCLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDaEIsR0FBRyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQTBCLENBQUM7WUFDNUUsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLHlFQUF5RTtnQkFDekUsU0FBUztZQUNiLENBQUM7WUFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwSCxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO1lBQ25ELENBQUM7WUFDRCxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNsRCxDQUFDO1lBQ0QsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ2pCLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDMUQsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNoQyxhQUFhO2dCQUNiLFFBQVEsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7Z0JBQ3BFLGFBQWE7Z0JBQ2IsUUFBUSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztZQUM3RSxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFnQix3QkFBd0IsQ0FBQyxVQUE4Qjs7UUFDbkUsSUFBSSx3QkFBd0IsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxPQUFPLFVBQVUsRUFBRSxDQUFDO2VBQzdHLFFBQVEsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsSUFBSSxRQUFRLEdBQUcsd0JBQXdCLENBQUM7UUFDeEMsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLGFBQWEsQ0FBQztRQUM1RCxJQUFJLGNBQWMsR0FBdUIsSUFBSSxDQUFDLENBQUMscUVBQXFFO1FBQ3BILElBQUksa0JBQWtCLEdBQWdCLElBQUksQ0FBQztRQUMzQyxJQUFJLGdCQUFnQixHQUF1QixJQUFJLENBQUMsQ0FBQyx1RkFBdUY7UUFDeEksSUFBSSxvQkFBb0IsR0FBZSxJQUFJLENBQUM7UUFDNUMsT0FBTyxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdEIsSUFDSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQzttQkFDakMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO21CQUN2QyxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7bUJBQ3ZDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDO21CQUNoRCxRQUFRLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQzttQkFDdkQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUM7bUJBQzlDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUNqRCxJQUFJLFFBQVEsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxFQUNoQyxDQUFDO2dCQUNDLElBQUksZ0JBQWdCLElBQUksSUFBSSxJQUFJLFFBQVEsQ0FBQyxZQUFZLEdBQUcsWUFBWSxFQUFFLENBQUM7b0JBQ25FLGNBQWMsR0FBRyxRQUFRLENBQUM7Z0JBQzlCLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLGNBQWMsSUFBSSxJQUFJO3dCQUFFLGNBQWMsR0FBRyxRQUFRLENBQUM7b0JBQ3RELElBQUksa0JBQWtCLElBQUksSUFBSSxFQUFFLENBQUM7d0JBQzdCLGdCQUFnQixHQUFHLGNBQWMsQ0FBQTt3QkFDakMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGNBQWUsQ0FBQyxDQUFBO3dCQUM3QyxvQkFBb0IsR0FBRyxrQkFBa0IsQ0FBQztvQkFDOUMsQ0FBQztvQkFDRCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzdCLElBQUksa0JBQWtCLENBQUMsR0FBRyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLFlBQVksRUFBRSxDQUFDO3dCQUMvRSxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7d0JBQzVCLG9CQUFvQixHQUFHLElBQUksQ0FBQztvQkFDaEMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLFFBQVEsR0FBRyxJQUFJLENBQUM7b0JBQ3BCLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7WUFDRCxRQUFRLEdBQUcsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsYUFBYSxtQ0FBSSxJQUFJLENBQUM7UUFDL0MsQ0FBQztRQUNELElBQUksZ0JBQWdCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0IsZ0JBQWdCLEdBQUcsY0FBYyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLE1BQU0sR0FNTixFQUFFLENBQUM7UUFDUCxJQUFJLGNBQWMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QixJQUFJLGtCQUFrQixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUM3QixrQkFBa0IsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUE7WUFDaEQsQ0FBQztZQUNELE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQztZQUN4RCxJQUFJLEdBQUcsR0FBRyxDQUFDLG9CQUFvQixhQUFwQixvQkFBb0IsY0FBcEIsb0JBQW9CLEdBQUksa0JBQWtCLENBQUMsQ0FBQyxHQUFHLEdBQUcsYUFBYSxDQUFDO1lBQzNFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztZQUNuRSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMzQyxNQUFNLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztZQUNqQyxDQUFDO2lCQUFNLElBQUksa0JBQWtCLENBQUMsR0FBRyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQztnQkFDaEgsTUFBTSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7WUFDaEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO1lBQzFCLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFNBQWdCLGVBQWUsQ0FDM0IsTUFBb0csRUFDcEcsSUFBTyxFQUNQLEtBQWE7UUFFYixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBZ0IsZ0JBQWdCLENBQzVCLE1BQVMsRUFDVCxJQUFPLEVBQ1AsS0FBVztRQUVYLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLGdDQUFnQyxDQUFDLEtBQVk7UUFDbEQsSUFBSSxVQUFVLENBQUMsMkJBQTJCLElBQUksQ0FBQyxDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxXQUFXLENBQUEsRUFBRSxDQUFDO1lBQ3RFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUMsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQztpQkFDekMsT0FBTyxDQUFDLENBQUMscUJBQXFCLEVBQUUsWUFBWSxFQUFFLEVBQUU7Z0JBQzdDLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsMkJBQTJCLENBQUMsWUFBWSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQzlGLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLFlBQVksS0FBSyxFQUFFLENBQUM7b0JBQzVDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO3dCQUNqRCxVQUFVLENBQUMsS0FBSyxHQUFHLFlBQTBCLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQzFELENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFBO1FBQ1YsQ0FBQztJQUNMLENBQUM7SUFBQSxDQUFDO0lBR0YsU0FBZ0Isa0JBQWtCLENBQUMsUUFBZ0QsRUFBRSxZQUF5QjtJQUM5RyxDQUFDO0lBRVksUUFBQSw2QkFBNkIsR0FBRyxNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBQTtJQUN0RSxRQUFBLHFDQUFxQyxHQUFHLE1BQU0sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFBO0lBRW5HLFNBQVMsbUJBQW1CO1FBQ3hCLElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFzQixDQUFDO1FBQzlFLElBQUksV0FBVyxFQUFFLENBQUM7WUFDZCxJQUFJLFdBQVcsQ0FBQyxRQUFRLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzlDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzlDLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQWdCLDBCQUEwQixDQUFDLE9BSTFDLEVBQUUsWUFBeUI7O1FBQ3hCLElBQUksS0FBSyxHQUFHLGdCQUFnQixDQUFBO1FBQzVCLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUM3QyxJQUFJLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkUsSUFBSSxlQUFlLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksYUFBYSxHQUFHLFFBQVEsSUFBSSxxQ0FBNkIsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDNUYsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLG9CQUFvQixDQUFDLElBQUEsb0JBQVksRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ3ZFLElBQUksU0FBUyxLQUFLLDZDQUFxQyxJQUFJLFFBQVEsSUFBSSxxQ0FBNkIsRUFBRSxDQUFDO1lBQ25HLElBQUksU0FBUyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNuQixTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLENBQUM7aUJBQU0sSUFBSSxDQUFBLE1BQUEsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQywwQ0FBRSxJQUFJLEtBQUksUUFBUSxFQUFFLENBQUM7Z0JBQy9HLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNwQixTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO1lBQ0wsQ0FBQztZQUNELHlEQUF5RDtZQUN6RCxjQUFjLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUFBO1lBQ3JGLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ2pCLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLGFBQVQsU0FBUyxjQUFULFNBQVMsR0FBSSxJQUFJLENBQUMsQ0FBQyw0QkFBNEI7WUFDMUUsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLGlCQUFpQixHQUFHLE1BQUEsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsMENBQUUsU0FBUyxDQUFDO1lBQ2xFLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxpQkFBd0QsQ0FBQztRQUM3RCxJQUFJLFFBQVEsSUFBSSxxQ0FBNkIsSUFBSSxDQUFDLGNBQWMsSUFBSSw2Q0FBcUMsS0FBSSxNQUFBLFdBQVcsQ0FBQyxjQUFjLDBDQUFHLFFBQVEsQ0FBQyxDQUFBLENBQUMsRUFBRSxDQUFDO1lBQ25KLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRCxJQUFJLFVBQVUsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFBLFdBQVcsYUFBWCxXQUFXLHVCQUFYLFdBQVcsQ0FBRSxXQUFXLENBQUEsRUFBRSxDQUFDO2dCQUN2RCxlQUFlLENBQUM7b0JBQ1osbUJBQW1CLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxJQUFBLDhCQUFzQixFQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO29CQUN4RyxVQUFVO29CQUNWLGNBQWM7b0JBQ2QsY0FBYyxFQUFFLFFBQVE7b0JBQ3hCLEtBQUssRUFBRSxLQUFLO2lCQUNmLENBQUMsQ0FBQTtZQUNOLENBQUM7WUFDRCxXQUFXLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLElBQUksY0FBYyxDQUFDO1lBQ3hELGNBQWMsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUM7WUFDaEUsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QixnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDbkUsV0FBVyxHQUFHLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFBLG9CQUFZLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNwRSxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlELHVCQUF1QixDQUFDLFFBQWtCLEVBQUUsb0JBQW9CLENBQUMsUUFBc0IsQ0FBQyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3ZILG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsMEJBQTBCO1lBQzdELGlCQUFpQixHQUFHLFFBQVEsQ0FBQztZQUM3QixHQUFHLENBQUM7Z0JBQ0EsaUJBQWlCLEdBQUcsTUFBQSxXQUFXLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLDBDQUFFLFNBQVMsQ0FBQztZQUMzRSxDQUFDLFFBQVEsYUFBYSxJQUFJLElBQUksSUFBSSxjQUFjLElBQUksaUJBQWlCLElBQUksSUFBSSxJQUFJLGlCQUFpQixJQUFJLEtBQUssSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxtQkFBbUIsRUFBQztZQUNoTyxJQUFJLGlCQUFpQixJQUFJLElBQUksSUFBSSxDQUFBLE1BQUEsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsMENBQUUsTUFBTSxLQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNsRixpQkFBaUIsR0FBRyxLQUFLLENBQUM7WUFDOUIsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDckYsQ0FBQztJQUVELFNBQWdCLHFCQUFxQixDQUFDLE9BQXNFLEVBQUUsWUFBeUI7UUFDbkksSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQUVELFNBQWdCLHFCQUFxQixDQUFDLE9BQStELEVBQUUsWUFBeUI7UUFDNUgsSUFBSSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDL0MsQ0FBQztJQUVELFNBQWdCLHVCQUF1QixDQUFDLE9BQTRGLEVBQUUsWUFBeUI7UUFDM0osSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUN0RCxDQUFDO0lBRUQsU0FBZ0Isb0JBQW9CLENBQUMsT0FBZ0QsRUFBRSxZQUF5QjtRQUM1RyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUN2QyxDQUFDO0lBRUQsU0FBZ0IseUJBQXlCLENBQUMsRUFBRSxLQUFLLEVBQW9CLEVBQUUsWUFBeUI7UUFDNUYsSUFBSSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pILHFCQUFxQixDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqRCw4QkFBOEIsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQzNLLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsMEJBQTBCO0lBQ2pFLENBQUM7SUFFRCxTQUFnQix1QkFBdUIsQ0FBQyxFQUFFLEtBQUssRUFBb0IsRUFBRSxZQUF5QjtRQUMxRixJQUFJLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekgscUJBQXFCLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELDhCQUE4QixDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDM0ssZ0NBQWdDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7SUFDakUsQ0FBQztJQUVELFNBQWdCLHdCQUF3QixDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBdUM7UUFDL0YsSUFBSSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RSxJQUFJLGVBQWUsR0FBaUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQTtRQUN2SCxJQUFJLEtBQUssR0FBbUIsVUFBVSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFFLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFXLENBQUM7UUFDL0MsSUFBSSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3RSxlQUFlLENBQUMsZUFBZSxDQUFrQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqRCxXQUFXLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDO1FBQzlDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7UUFDdEQsbUJBQW1CLEVBQUUsQ0FBQztRQUN0QixnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbkUsZ0NBQWdDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0Msa0NBQWtDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0Msb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7SUFDakUsQ0FBQztJQUdELFNBQWdCLGNBQWMsQ0FDMUIsR0FBaUQsRUFDakQsT0FBVTtRQUVWLE9BQU8sR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsMEVBQTBFO0lBRzdELFFBQUEscUJBQXFCLEdBQUcsNEJBQTBDLENBQUM7SUFFbkUsUUFBQSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRXhCLGNBQWM7SUFFZCxJQUFJLG1CQUFtQixHQUE4QjtRQUNqRCxLQUFLLEVBQUUsT0FBTztRQUNkLElBQUksRUFBRSxNQUFNO1FBQ1osR0FBRyxFQUFFLElBQUk7UUFDVCxJQUFJLEVBQUUsSUFBSTtRQUNWLEdBQUcsRUFBRSxJQUFJO1FBQ1QsR0FBRyxFQUFFLElBQUk7UUFDVCxJQUFJLEVBQUUsSUFBSTtRQUNWLEtBQUssRUFBRSxJQUFJO1FBQ1gsSUFBSSxFQUFFLElBQUk7UUFDVixLQUFLLEVBQUUsSUFBSTtRQUNYLEtBQUssRUFBRSxHQUFHO1FBQ1YsS0FBSyxFQUFFLEdBQUc7S0FDYixDQUFDO0lBRVcsUUFBQSxpQkFBaUIsR0FBRztRQUM3QixTQUFTLENBQUMsV0FBZ0I7WUFDdEIsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLE9BQU8sQ0FBQyxDQUFDO1lBQ2IsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLENBQUMsU0FBaUIsRUFBRSxXQUFtQixFQUFFLEVBQVU7WUFDdEQsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxTQUFTLENBQUMsQ0FBQztZQUM3RSxDQUFDO1lBQ0QsT0FBTyxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLEVBQUU7WUFDRixNQUFNLENBQUMsQ0FBTTtnQkFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDeEIsQ0FBQztZQUNELEdBQUc7Z0JBQ0MsT0FBTyxtQkFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQy9CLENBQUM7WUFDRCxZQUFZLENBQUMsQ0FBUztnQkFDbEIsSUFBSSxjQUFjLEdBQUcsOERBQThELENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUMzRixJQUFJLEtBQVcsQ0FBQztnQkFDaEIsSUFBSSxZQUFxQixDQUFDO2dCQUMxQixZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNqQixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUM7d0JBQ0QsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN2QyxDQUFDO29CQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7d0JBQ1gsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDekIsQ0FBQztnQkFDTCxDQUFDO2dCQUFBLENBQUM7Z0JBQ0YsNEZBQTRGO2dCQUM1RixPQUFPLGNBQWMsSUFBSSxZQUFZLENBQUE7WUFDekMsQ0FBQztZQUNELGNBQWMsQ0FBQyxDQUFTO2dCQUNwQixJQUFJLGNBQWMsR0FBRyxzQ0FBc0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ25FLE9BQU8sY0FBYyxDQUFBO1lBQ3pCLENBQUM7WUFDRCxTQUFTLENBQUMsQ0FBTTtnQkFDWixPQUFPLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7dUJBQzFFLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUNsRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQU07Z0JBQ1AsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFDbEIsQ0FBQztZQUNELEdBQUcsQ0FBQyxDQUFTO2dCQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDckIsQ0FBQztZQUNELHFCQUFxQixDQUFDLElBQVksRUFBRSxRQUFnQixFQUFFLHdCQUFnQztnQkFDbEYsSUFBSSxlQUFlLEdBQUcsQ0FBQyxFQUFRLEVBQUUsRUFBUSxFQUFFLEVBQUU7b0JBQ3pDLElBQUksTUFBTSxDQUFDO29CQUNYLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3BELE1BQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3hCLE1BQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3hCLE9BQU8sTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQTtnQkFDRCxJQUFJLGlCQUFpQixHQUFHLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUQsdURBQXVEO2dCQUN2RCxJQUFJLEtBQUssR0FBRyxtQkFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUM5RyxJQUFJLGNBQWMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6Qyx1REFBdUQ7Z0JBQ3ZELElBQUksVUFBVSxHQUFHLG1CQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7Z0JBQ2xGLCtDQUErQztnQkFDL0MsSUFBSSxlQUFlLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDekQsSUFBSSxhQUFhLEdBQUcsZUFBZSxHQUFHLEVBQUUsQ0FBQyxDQUFDLFNBQVM7Z0JBQ25ELE9BQU8sQ0FDSCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksSUFBSSxZQUFZO29CQUNqRCxhQUFhLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxtQkFBbUI7aUJBQ2hELENBQUE7WUFDTCxDQUFDO1lBQ0QscUlBQXFJO1lBQ3JJLDJJQUEySTtZQUMzSSwrRkFBK0Y7WUFDL0YsR0FBRztZQUNIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnQkFtQ0k7U0FDUDtLQUNKLENBQUM7SUFJRixJQUFJLGtCQUFrQixHQUF3QyxFQUM3RCxDQUFBO0lBQ0QsSUFBSSxnQkFBZ0IsR0FBc0MsRUFDekQsQ0FBQTtJQUVELFNBQWdCLG1CQUFtQixDQUFDLGdCQUF3QjtRQUN4RCxJQUFJLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxVQUFVLE9BQU87WUFDaEcsSUFBSSxlQUFlLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksZUFBZSxJQUFJLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3pDLE9BQU8sbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDaEQsQ0FBQztpQkFBTSxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsT0FBTyxPQUFPLENBQUE7WUFDbEIsQ0FBQztpQkFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsT0FBTyxPQUFPLENBQUE7WUFDbEIsQ0FBQztpQkFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsT0FBTyxPQUFPLENBQUE7WUFDbEIsQ0FBQztZQUNELE9BQU8sNEJBQTRCLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxTQUFnQixtQkFBbUIsQ0FBSSxtQkFBOEU7UUFDakgsT0FBTyxVQUFVLDRCQUFvQztZQUNqRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsNEJBQTRCLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxJQUFJLE1BQU0sR0FBRyw0QkFBNEIsQ0FBQztnQkFDMUMsSUFBSSxDQUFDO29CQUNELGtFQUFrRTtvQkFDbEUsSUFBSSxXQUFXLEdBQUcsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUM7b0JBQ3pFLG1CQUFtQixDQUFDLDRCQUE0QixDQUFDLEdBQUcsVUFBVSxPQUFPO3dCQUNqRSxJQUFJLENBQUM7NEJBQ0QsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSx5QkFBaUIsQ0FBQyxDQUFDO3dCQUN6RCxDQUFDO3dCQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7NEJBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsRUFBRSw0QkFBNEIsRUFBRSxJQUFBLHFCQUFRLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTs0QkFDL0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQzs0QkFDckIsTUFBTSxHQUFHLENBQUM7d0JBQ2QsQ0FBQzt3QkFDRCxPQUFPLE1BQU0sQ0FBQztvQkFDbEIsQ0FBQyxDQUFBO2dCQUNMLENBQUM7Z0JBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztvQkFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxFQUFFLDRCQUE0QixFQUFFLElBQUEscUJBQVEsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO29CQUNoRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNwQixNQUFNLEdBQUcsQ0FBQztnQkFDZCxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sbUJBQW1CLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUE7SUFDTCxDQUFDO0lBRVksUUFBQSxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzlELFFBQUEsaUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUd2RSxJQUFJLFlBQVksR0FBRyxJQUFBLCtCQUFlLEVBQTJCLEVBQUUsbUJBQW1CLEVBQW5CLDJCQUFtQixFQUFFLGlCQUFpQixFQUFqQix5QkFBaUIsRUFBRSxDQUFDLENBQUE7SUFDakcsSUFBSSx1QkFBdUIsR0FBRyxDQUFDLG9CQUF3QyxFQUFFLGNBQThCLEVBQUUsVUFBc0IsRUFBRSxXQUFrQixFQUFFLFNBQWlCLEVBQ3pILEVBQUU7O1FBQ2xELElBQUksUUFBUSxHQUFrQixJQUFJLENBQUM7UUFDbkMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksTUFBTSxHQUFrQixJQUFJLENBQUM7UUFDakMsSUFBSSxTQUFpQixDQUFDO1FBQ3RCLElBQUksTUFBTSxHQUFrQixJQUFJLENBQUM7UUFDakMsNENBQTRDO1FBQzVDLElBQUksb0JBQW9CLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ2hFLEtBQUssSUFBSSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyx5Q0FBeUM7Z0JBQ3RFLElBQUksU0FBUyxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUN4QixJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7b0JBQ3hDLE1BQU0sR0FBRyxNQUFNLENBQUM7b0JBQ2hCLE1BQU0sR0FBRyxLQUFLLENBQUM7b0JBQ2YsU0FBUyxHQUFHLFFBQVEsQ0FBQztnQkFDekIsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQztvQkFDcEQsTUFBTSxHQUFHLFVBQVUsQ0FBQztvQkFDcEIsTUFBTSxHQUFHLFNBQVMsQ0FBQztvQkFDbkIsU0FBUyxHQUFHLFlBQVksQ0FBQztnQkFDN0IsQ0FBQztnQkFDRCxJQUFJLFVBQVUsQ0FBQyxTQUF1QixDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ2hELFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBRSxvQkFBb0I7b0JBQ3hDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2YsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQTtnQkFDaEMsQ0FBQztxQkFBTSxDQUFDO29CQUNKLFFBQVEsR0FBRyxJQUFJLENBQUM7b0JBQ2hCLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3BCLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUNELEtBQUssSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFBLGdCQUFNLEVBQUMsY0FBYyxhQUFkLGNBQWMsdUJBQWQsY0FBYyxDQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUEsRUFBRSxhQUFGLEVBQUUsdUJBQUYsRUFBRSxDQUFFLGVBQWUsS0FBSSxVQUFVLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEtBQUssRUFBRSxDQUFDO2dCQUN6RSxLQUFLLElBQUksZUFBZSxJQUFJLElBQUEsZ0JBQVEsRUFBQyxNQUFBLFVBQVUsQ0FBQyxFQUFFLGFBQUYsRUFBRSx1QkFBRixFQUFFLENBQUUsZUFBZSxDQUFDLG1DQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzFFLElBQUksTUFBTSxHQUFHLElBQUEsK0JBQXVCLEVBQUMsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7b0JBQ3hHLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUNqQixRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQzt3QkFDM0IsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7d0JBQ3pCLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUE7d0JBQzVCLE1BQU07b0JBQ1YsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLFFBQVEsR0FBRyxJQUFJLENBQUM7d0JBQ2hCLE9BQU8sR0FBRyxLQUFLLENBQUM7d0JBQ2hCLDZCQUE2QjtvQkFDakMsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFBO0lBQ2hDLENBQUMsQ0FBQTtJQWpEVSxRQUFBLHVCQUF1QiwyQkFpRGpDO0lBSVUsUUFBQSxZQUFZLEdBQWlCO1FBQ3BDLE9BQU8sRUFBRSxDQUFDLFdBQXVCLEVBQUUsRUFBRTtZQUNqQywwQkFBMEI7WUFDMUIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLElBQUksUUFBUSxHQUFrQixJQUFJLENBQUM7WUFDbkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsVUFBVSxFQUFFLENBQUMsV0FBdUIsRUFBRSxFQUFFO1lBQ3BDLDBCQUEwQjtZQUMxQixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxXQUFXLEdBQWtCLElBQUksQ0FBQztZQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFBO1FBQ3RDLENBQUM7UUFDRCxXQUFXLEVBQUUsQ0FBQyxXQUF1QixFQUFFLEVBQUU7WUFDckMsMEJBQTBCO1lBQzFCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNsQixJQUFJLE1BQU0sR0FBa0IsSUFBSSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUE7UUFDNUIsQ0FBQztRQUNELGNBQWMsRUFBRSxDQUFDLFdBQXVCLEVBQUUsRUFBRTtZQUN4QywwQkFBMEI7WUFDMUIsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksU0FBUyxHQUFrQixJQUFJLENBQUM7WUFDcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQTtRQUNsQyxDQUFDO1FBQ0QsV0FBVyxFQUFFLEVBQXNCO1FBQ25DLEtBQUssRUFBRSxFQUE0RztRQUNuSCxNQUFNLEVBQUUsRUFBaUY7S0FDNUYsQ0FBQTtJQUNELHlHQUF5RztJQUVsRyxJQUFJLGtCQUFrQixHQUFHLENBQzVCLE9BQWtGLEVBQ2xGLFVBQTJGLEVBQzNGLFdBQWtGLEVBQ2xGLGNBQTJGLEVBQzdGLEVBQUU7UUFDQSxvQkFBWSxtQ0FDTCxvQkFBWSxLQUNmLE9BQU87WUFDUCxVQUFVO1lBQ1YsV0FBVztZQUNYLGNBQWMsR0FDakIsQ0FBQTtJQUNMLENBQUMsQ0FBQTtJQWJVLFFBQUEsa0JBQWtCLHNCQWE1QjtJQUtELFNBQVMsR0FBRyxDQUFDLEdBQTJCO1FBQ3BDLG9EQUFvRDtRQUNwRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0Isb0RBQW9EO1FBQ3BELE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxrQkFBa0IsR0FBK0IsRUFBRSxDQUFBO0lBRXZELFNBQWdCLGVBQWUsQ0FBQyxJQU8vQjs7UUFDRyxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQWdDLEVBQUUsRUFBRTs7WUFDeEQsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQztZQUMxQixVQUFVLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2pELFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUMzRCxVQUFVLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ2xELE1BQUEsbUJBQW1CLENBQUMsZ0JBQWdCLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUM5RixJQUFJLFdBQVcsSUFBSSxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEtBQUssRUFBRSxDQUFDO29CQUM1RSxLQUFLLElBQUksR0FBRyxJQUFJLElBQUEsZ0JBQVEsRUFBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNuRCxHQUFHLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDM0QsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQTtRQUVELElBQUksRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDdEYsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9DLElBQUksRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVFLElBQUksc0JBQXNCLEdBQUcsSUFBQSwyQkFBbUIsRUFBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxRQUE2QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckosSUFBSSxVQUFVLEdBQUcsSUFBQSwyQkFBbUIsRUFBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsUUFBNkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdILElBQUksY0FBYyxHQUFHLG1CQUFtQixDQUFDLGVBQWUsQ0FBQztRQUV6RCxJQUFJLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLE9BQU8sR0FBRyxNQUFBLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxlQUFlLElBQUksY0FBYyxDQUFDLDBDQUFFLEtBQUssQ0FBQztZQUM3RyxJQUFJLGVBQWUsR0FBRyxNQUFBLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDLDBDQUFFLFdBQVcsQ0FBQTtZQUNuSCxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxPQUFPLElBQUksb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDM0Msa0VBQWtFO29CQUNsRSxJQUFJLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDN0YsSUFBSSxjQUFjLElBQUksbUJBQW1CLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3ZELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFBLGdCQUFNLEVBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLCtCQUErQjtvQkFDbkksQ0FBQztvQkFDRCxjQUFjLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztvQkFDdEMsVUFBVSxHQUFHLEtBQUssQ0FBQztnQkFDdkIsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLE9BQU8sSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDNUIsa0VBQWtFO29CQUNsRSxJQUFJLEtBQUssR0FBRyxjQUFjLENBQUM7b0JBQzNCLElBQUksY0FBYyxJQUFJLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2RCxLQUFLLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBQSxnQkFBTSxFQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQywrQkFBK0I7b0JBQ25JLENBQUM7b0JBQ0QsY0FBYyxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBQ3RDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksVUFBVSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEtBQUssRUFBRSxDQUFDO2dCQUM5QyxJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFpQixDQUFBO2dCQUM3RCxJQUFJLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDbEQsSUFBSSxVQUFVLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ2xELFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtvQkFDNUUsQ0FBQztvQkFDRCxjQUFjLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDO2dCQUNELElBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxhQUFhLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN0QyxvREFBb0Q7b0JBQ3BELFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ3hDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUNyRixDQUFDO29CQUNGLFVBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxZQUFZLENBQUE7Z0JBQzdDLENBQUM7Z0JBQ0QsT0FBTyxhQUFhLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN6QyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQWdCLENBQUMsQ0FBQTtnQkFDdkMsQ0FBQztnQkFFRCxVQUFVLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUN6RyxJQUFJLE1BQU0sR0FBRyxLQUFtQixDQUFBO2dCQUNoQyxJQUFJLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO29CQUMvQyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7b0JBQzFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQ2xELENBQUM7b0JBQ0MsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN0RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDakIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQ3RELG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUMvRCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUEsOEJBQWUsRUFBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDckgsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7d0JBQzVCLElBQUksbUJBQW1CLENBQUMsTUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDOzRCQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7NEJBQ25DOzs7OztnREFLb0I7d0JBQ3hCLENBQUM7NkJBQU0sQ0FBQzs0QkFDSixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7NEJBQ2hCLE1BQU0sUUFBUSxHQUFlLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7NEJBQ3hFLEtBQUssSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFLENBQUM7Z0NBQzFCLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBVyxHQUFHLENBQUMsQ0FBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQ0FDdEYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQ0FDMUIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzs0QkFDekQsQ0FBQzs0QkFDRCxJQUFJLHNCQUFzQixHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQ3BHLElBQUksS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7NEJBQ3ZCLElBQUkscUJBQXFCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ2xELElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQ0FDakQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFDLDREQUE0RDs0QkFDOUcsQ0FBQzs0QkFDRCxJQUFJLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDOzRCQUM1QyxJQUFJLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQzs0QkFDMUYsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUNuRyxVQUFVLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7NEJBQzdELFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7NEJBQ3JFLE1BQUEsbUJBQW1CLENBQUMsZ0JBQWdCLDBDQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ3RELFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQ3JILENBQUE7d0JBQ0wsQ0FBQztvQkFDTCxDQUFDO3lCQUFNLENBQUM7d0JBQ0osVUFBVSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM1RCxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsd0JBQXdCO2dCQUN0RyxVQUFVLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ2pFLElBQUksbUJBQW1CLENBQUMsbUNBQW1DLEVBQUUsQ0FBQztvQkFDMUQsVUFBVSxDQUFDLG1CQUFtQixDQUFDLG1DQUFtQyxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUMvRSxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxjQUFjLENBQUMsY0FBOEIsRUFBRSxVQUFxQyxFQUFFLGVBQWlDLEVBQUUsY0FBcUI7UUFDbkosSUFBSSxLQUFLLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFELElBQUksT0FBTyxHQUFHLFVBQVUsWUFBWSxLQUFLLENBQUM7UUFDMUMsSUFBSSxRQUFRLEdBQWlCLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUF3QixDQUFDLENBQUM7UUFFL0YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN2QyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLElBQUk7Z0JBQUUsU0FBUztZQUVwQixJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNyRSxJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQW1CLENBQUMsQ0FBQyxVQUFVLENBQUMsZUFBZSxLQUFLLGVBQWUsQ0FBQyxDQUFDO1lBQ2xLLEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksT0FBTyxtQ0FBZSxjQUFjLEtBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxZQUE0QixJQUFJLGNBQWMsQ0FBQyxVQUFVLEdBQUUsQ0FBQztnQkFDNUksSUFBSSxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDL0IsVUFBVSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFDRCxJQUFJLFVBQVUsQ0FBQyxxQ0FBcUMsRUFBRSxDQUFDO29CQUNuRCxVQUFVLENBQUMscUNBQXFDLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM5RSxDQUFDO2dCQUVELElBQUksS0FBSyxHQUFHLElBQUEsZ0JBQU0sRUFBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNqRyxLQUFLLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUN2QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBMEIsQ0FBQyxDQUFDO29CQUNqRCxJQUFJLFNBQVMsRUFBRSxDQUFDO3dCQUNaLGNBQWMsQ0FBQyxjQUFjLEVBQUUsU0FBeUIsRUFBRSxNQUEwQixFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNuRyxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsSUFBRyxTQUFTLENBQUMsaUJBQWlCLEVBQUMsQ0FBQztvQkFDNUIsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN6QyxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBZ0IscUJBQXFCLENBQUMsY0FBOEIsRUFBRSxTQUFnQjtRQUNsRixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEdBQXVCLENBQUMsQ0FBQyxLQUFLLENBQXFCLENBQUM7UUFFckosY0FBYyxDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xFLGNBQWMsQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsU0FBZ0IsOEJBQThCLENBQzFDLG9CQUFrRyxFQUNsRyxXQUFtRSxFQUNuRSxVQUFzQixFQUN0QixFQUFvQixFQUNwQixLQUFZLEVBQ1osb0JBQWdDLEVBQUUsK0NBQStDO0lBQ2pGLGVBQWtDLEVBQ2xDLElBQTBCO1FBRTFCLG9DQUFvQztRQUNwQyxLQUFLLElBQUksVUFBVSxJQUFJLG9CQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RELElBQUksT0FBTyxHQUFHLG9CQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRCxJQUFJLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRCxJQUFBLGdCQUFNLEVBQUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtnQkFDdEUsSUFBSSxPQUFPLEdBQUcsd0JBQXdCLENBQUMsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztnQkFDL0UsOEJBQThCLENBQzFCLG9CQUFvQixFQUNwQixXQUFXLEVBQ1gsY0FBYyxFQUNkLFVBQVUsa0NBQ0wsS0FBSyxLQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxtREFDekIsb0JBQW9CLEdBQUssY0FBYyxLQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsT0FBTyxLQUNoRSxVQUFVLEVBQ1YsSUFBSSxDQUNQLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUM7UUFDRCxVQUFVO1FBQ1YsS0FBSyxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2xDLEtBQUssSUFBSSxVQUFVLElBQUksb0JBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTTtnQkFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLG9CQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNqSCxJQUFJLFVBQVUsR0FBZSxJQUFBLG9CQUFZLGtDQUFNLEtBQUssS0FBRSxVQUFVLElBQUcsQ0FBQTtvQkFDbkUsSUFBSSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7b0JBQ2hDLElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFDO29CQUMzQixHQUFHLENBQUM7d0JBQ0EsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7d0JBQzdCLG9CQUFvQixDQUFDLFVBQVUsQ0FBQzs0QkFDNUIsWUFBWSxpQkFDTixRQUFRLEVBQUUsS0FBSyxJQUFLLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxzQkFBc0IsR0FDcEUsb0JBQW9CLEVBQ3BCLElBQUksQ0FDUCxDQUFBO3dCQUNMLElBQUksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLEdBQUcsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ25FLElBQUksT0FBbUIsQ0FBQzt3QkFDeEIsSUFBSSxjQUFjLElBQUksSUFBSSxFQUFFLENBQUM7NEJBQ3pCLEtBQUssT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dDQUM3QixJQUFJLE1BQU0sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssY0FBYyxDQUFDLE9BQU8sQ0FBVSxDQUFDO2dDQUN0RSxJQUFJLE1BQU0sRUFBRSxDQUFDO29DQUNULFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFVLENBQUM7b0NBQ3ZELG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQVUsQ0FBQztvQ0FDakUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29DQUNoQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0NBQzVCLENBQUM7NEJBQ0wsQ0FBQzt3QkFDTCxDQUFDO29CQUNMLENBQUMsUUFBUSxnQkFBZ0IsSUFBSSxzQkFBc0IsRUFBRSxHQUFHLENBQUMsRUFBRTtvQkFDM0QsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUNqQywrRUFBK0U7b0JBQ25GLENBQUMsQ0FBQyxDQUFBO29CQUNGLElBQUksVUFBVSxHQUFHLEtBQUssR0FBRyxVQUF3QixDQUFBO29CQUNqRCxJQUFJLHdCQUF3QixHQUFHLElBQUEsOEJBQXNCLEVBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7b0JBQzFGLElBQUksVUFBVSxDQUFDLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDO3dCQUNoRixNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCx3QkFBd0IsRUFBRSxDQUFDLENBQUE7b0JBQ3BHLENBQUM7b0JBQ0QsSUFBSSxzQkFBc0IsR0FBRyxVQUFVLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUMsQ0FBQztvQkFDMUcsSUFBSSxhQUFhLEdBQ2Isc0JBQXNCO3dCQUNsQixzQkFBc0IsQ0FBQyxtQ0FBbUM7d0JBQzFELHNCQUFzQixDQUFDLG1DQUFtQyxJQUFJLFVBQVUsQ0FBQyxDQUFDO3dCQUMxRSxJQUFJO3dCQUNKLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUM7NEJBQ2xCLElBQUk7NEJBQ0osQ0FBQyxDQUFDLE9BQU8sQ0FBQTtvQkFDckIsSUFBSSxTQUFTLEVBQUUsQ0FBQzt3QkFDWixVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsYUFBYSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ2pFLENBQUM7eUJBQU0sSUFBSSxlQUFlLElBQUksSUFBSSxFQUFFLENBQUM7d0JBQ2pDLDhDQUE4QztvQkFDbEQsQ0FBQztnQkFDTCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFnQix3QkFBd0IsQ0FBQyxjQUErQixFQUFFLE1BQXNCO1FBQzVGLDRFQUE0RTtRQUM1RSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sY0FBYyxDQUFDO1FBQzFCLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVNLElBQUksc0JBQXNCLEdBQUcsQ0FBQyxXQUF3QixFQUFnQixFQUFFO1FBQzNFLE9BQU8sV0FBVyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBO0lBQ2xFLENBQUMsQ0FBQTtJQUZVLFFBQUEsc0JBQXNCLDBCQUVoQztJQUVELFNBQWdCLDBCQUEwQjtRQUN0QyxJQUFBLGdCQUFNLEVBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQy9FLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBYSxFQUFFLEdBQVEsRUFBRSxFQUFFO2dCQUMxQyxJQUFJLG1CQUFtQixHQUFHLElBQUEsOEJBQXNCLEVBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RELE9BQU8sbUJBQW1CLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQTtZQUMvRixDQUFDLENBQUE7WUFFRCxrSEFBa0g7WUFDbEgsSUFBSSxvQkFBb0IsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQTtZQUN4RSxJQUFBLG9CQUFVLEVBQUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtnQkFDdEUsSUFBSSxPQUFPLEdBQUcsd0JBQXdCLENBQUMsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztnQkFDL0UsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUMsZUFBZSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQWlCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRTtvQkFDNUssSUFBSSxTQUFTLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFlLENBQUE7b0JBQ3pFLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxDQUFBO1lBQ04sQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFnQix3QkFBd0IsQ0FDcEMsb0JBQWtHLEVBQ2xHLFdBQW1FLEVBQ25FLFNBQW9CLEVBQ3BCLFVBQXNCLEVBQ3RCLElBQTBCO1FBRTFCLElBQUksS0FBSyxxQkFBZSxTQUFTLENBQUUsQ0FBQztRQUNwQyw4QkFBOEIsQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLG9CQUFZLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNJLENBQUM7SUFFRCxTQUFTLGdCQUFnQixDQUFDLFVBQXNCLEVBQUUsU0FBb0IsRUFBRSxJQUEwQjtRQUM5RixJQUFJLGFBQTRCLENBQUM7UUFDakMscUJBQXFCO1FBQ3JCLElBQUksVUFBVSxHQUFpRSxFQUFFLENBQUE7UUFDakYsd0JBQXdCLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRixXQUFXLENBQUMsb0JBQW9CLEdBQUcsSUFBQSxnQkFBTSxFQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQWMsRUFBRSxPQUFtQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hPLFdBQVcsQ0FBQyxvQkFBb0IsbUNBQVEsV0FBVyxDQUFDLG9CQUFvQixHQUFLLFVBQVUsQ0FBRSxDQUFDO1FBQzFGLFdBQVcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxtQ0FDMUUsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQ2pGLHVCQUF1QixDQUN0QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsQ0FDYixDQUNKLENBQUM7SUFDTixDQUFDO0lBRU0sSUFBSSxzQkFBc0IsR0FBRyxDQUFDLFlBQXNDLEVBQUUsZ0JBQWdDLEVBQUUsRUFBRSxFQUFFOztRQUMvRyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2YsS0FBSyxJQUFJLFNBQVMsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDL0UsSUFBSSxTQUFTLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUMxQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUEsTUFBQSxTQUFTLENBQUMsS0FBSywwQ0FBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFpQixDQUFDO29CQUM5RyxJQUFJLFFBQVEsRUFBRSxDQUFDO3dCQUNYLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzdCLElBQUEsOEJBQXNCLEVBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO29CQUNwRCxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUMsQ0FBQTtJQWJVLFFBQUEsc0JBQXNCLDBCQWFoQztJQUVNLElBQUksNEJBQTRCLEdBQUcsQ0FBQyxXQUF3QixFQUFFLEVBQUU7UUFDbkUsSUFBSSxzQkFBc0IsR0FBRyxJQUFBLDhCQUFzQixFQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksYUFBYSxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUM3QyxJQUFBLDhCQUFzQixFQUFDLHNCQUFzQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzlELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUMsQ0FBQTtJQUxVLFFBQUEsNEJBQTRCLGdDQUt0QztJQUVNLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxzQkFBNEQsRUFBRSxhQUFxQixFQUFFLFNBQXdCLEVBQUUsVUFBd0IsRUFBRSxDQUFhLEVBQUUsRUFBRSxDQUNyTCxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7UUFDckIsc0JBQXNCLENBQUMsd0JBQXdCO1FBQy9DLHNCQUFzQixDQUFDLHdCQUF3QixJQUFJLFVBQVU7UUFDN0QsQ0FBQztZQUNELGFBQWEsSUFBSSxJQUFBLHVCQUFRLEVBQ3JCLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUMxQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQ3RDO1FBQ0QsQ0FBQztZQUNELFNBQVMsSUFBSSxhQUFhLENBQzdCLENBQUE7SUFYTSxRQUFBLGdCQUFnQixvQkFXdEI7SUFFRSxJQUFJLGtCQUFrQixHQUFHLENBQzVCLHNCQUE0RCxFQUM1RCwyQkFBeUUsRUFDekUsYUFBcUIsRUFDckIsVUFBd0IsRUFDeEIsQ0FBYSxFQUNmLEVBQUU7UUFDQSxJQUFJLDJCQUEyQixJQUFJLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDekUsSUFBSSxrQkFBa0IsR0FBRyxJQUFBLDJCQUFtQixFQUFDLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDOUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUM3RyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sQ0FBQyxDQUFDLENBQUMsc0JBQXNCO2dCQUM1QixDQUFDLHNCQUFzQixDQUFDLHdCQUF3QixJQUFJLFVBQVU7b0JBQzFELElBQUEsOEJBQXNCLEVBQUMsc0JBQXNCLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQy9GO2dCQUNELGFBQWEsSUFBSSxJQUFBLHVCQUFRLEVBQ3JCLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUMxQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQ3RDLENBQUMsQ0FBQTtRQUNWLENBQUM7SUFDTCxDQUFDLENBQUE7SUFwQlUsUUFBQSxrQkFBa0Isc0JBb0I1QjtJQUVNLElBQUksdUJBQXVCLEdBQUcsQ0FBQyxzQkFBNEQsRUFBRSxVQUF3QixFQUFFLEVBQUUsQ0FDNUgsQ0FBQyxDQUFDLHNCQUFzQjtRQUNwQixzQkFBc0IsQ0FBQyx3QkFBd0IsSUFBSSxVQUFVLENBQUMsQ0FBQTtJQUYzRCxRQUFBLHVCQUF1QiwyQkFFb0M7SUFXdEUsU0FBZ0IsdUJBQXVCLENBQ25DLFNBQW9CLEVBQ3BCLG9CQUFrRyxFQUNsRyxVQUFzQjtRQUV0QixJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLG9CQUFZLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzVELElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsb0JBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDNUQsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxvQkFBWSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUNyRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxHQUFHLG9CQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3JFLElBQUksYUFBYSxHQUFHLElBQUEsb0NBQTRCLEVBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDekYsSUFBSSw2QkFBNkIsR0FBRyxVQUFVLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBQSw4QkFBc0IsRUFBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RKLElBQUksMkJBQTJCLEdBQUcsVUFBVSxDQUFDLDJCQUEyQixDQUFDO1FBQ3pFLElBQUksZ0JBQWdCLEdBQUcsSUFBQSxnQkFBTSxFQUFDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFOztZQUN6RSxJQUFJLGVBQWUsR0FBRyw2QkFBNkIsSUFBSSxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyx3QkFBd0IsSUFBSSw2QkFBNkIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1lBQ3RLLElBQUksd0JBQXdCLEdBQUcsMkJBQTJCLElBQUksMkJBQTJCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUEwQixDQUFDLENBQUM7WUFDMUksSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksd0JBQXdCLEVBQUUsQ0FBQztnQkFDM0IsVUFBVSxHQUFHLE1BQUEsSUFBQSxnQkFBTSxFQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUNqRSxFQUFFLENBQUMsZUFBZSxJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBMEIsQ0FBQyxDQUFDLGVBQWUsQ0FBQywwQ0FBRSxXQUFXLENBQUM7WUFDeEksQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO2dCQUM3RixhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDO2dCQUN0RCxDQUFDLHdCQUF3QixDQUFDLENBQUM7b0JBQ3ZCLENBQUMsSUFBQSwwQkFBa0IsRUFDZiw2QkFBNkIsRUFDN0IsMkJBQTJCLEVBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBcUIsQ0FBQyxFQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFDOUIsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsb0JBQW9CLENBQ2xFO29CQUNELENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQzt3QkFDZixDQUFDLElBQUEsMEJBQWtCLEVBQ2YsNkJBQTZCLEVBQzdCLDJCQUEyQixFQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQzlCLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQzs0QkFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztnQ0FDeEMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO2dDQUNyRSxVQUFVLEVBQUUsNkJBQTZCLENBQUMsbUJBQW9CO2dDQUM5RCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLOzZCQUMxQixDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFnQjs0QkFDekMsQ0FBQztnQ0FDRCxlQUFlLENBQUM7b0NBQ1osQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO29DQUNyRSxVQUFVLEVBQUUsNkJBQTZCLENBQUMsbUJBQW9CO2lDQUN4RCxDQUFDLENBQUMsVUFBVSxDQUM3Qjt3QkFDRCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxJQUFJLFdBQVcsR0FBd0U7WUFDbkYsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFO1lBQ3ZDLGVBQWUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRTtZQUM5QyxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7WUFDM0MsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFO1lBQ3RDLGNBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRTtZQUM3QyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUU7U0FDdEMsQ0FBQTtRQUNELElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNaLElBQUksVUFBVSxHQUFrQixJQUFJLENBQUM7UUFDckMsS0FBSyxJQUFJLFFBQVEsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3BDLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFDL0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDdkMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3JDLFVBQVUsR0FBRyxPQUFPLENBQUM7WUFDekIsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLFVBQVUsSUFBSSxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxVQUFVLElBQUksWUFBWSxFQUFFLENBQUM7WUFDcEYsSUFBSSxLQUFLLENBQUMsK0NBQStDLEVBQUUsQ0FBQztnQkFDeEQsVUFBVSxHQUFHLGNBQWMsQ0FBQztZQUNoQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osVUFBVSxHQUFHLFlBQVksQ0FBQztZQUM5QixDQUFDO1FBQ0wsQ0FBQztRQUVELHdDQUF3QztRQUN4QyxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQXFCLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQy9HLElBQUksYUFBNEIsQ0FBQztRQUNqQyxJQUFJLGdCQUFnQixHQUFrQixPQUFPLENBQUM7UUFDOUMsSUFBSSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDbEIsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtZQUNyRCxxRUFBcUU7WUFDckUsYUFBYSxHQUFHLGdCQUFnQixDQUFBO1FBQ3BDLENBQUM7YUFBTSxDQUFDO1lBQ0osYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUE7UUFDbkQsQ0FBQztRQUNELElBQUksU0FBUyxHQUFxQjtZQUM5QixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLE1BQU07WUFDTixRQUFRO1lBQ1IsU0FBUztZQUNULFdBQVc7U0FDZCxDQUFBO1FBQ0QsT0FBTyxTQUFTLENBQUE7SUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN0cmljdCBhcyBsaWtlQXIsIGJlaW5nQXJyYXkgfSBmcm9tIFwibGlrZS1hclwiO1xyXG5cclxuaW1wb3J0IHsgZ2V0Um93VmFsaWRhdG9yLCBGb3JtU3RydWN0dXJlU3RhdGUsIE9wY2lvbmVzUm93VmFsaWRhdG9yLCBGZWVkYmFjayB9IGZyb20gXCJyb3ctdmFsaWRhdG9yXCI7XHJcblxyXG5pbXBvcnQgeyBkYXRlLCBjb21wYXJlRm9yT3JkZXIsIGNvYWxlc2NlIH0gZnJvbSBcImJlc3QtZ2xvYmFsc1wiO1xyXG5pbXBvcnQgeyBleHBlY3RlZCB9IGZyb20gXCJjYXN0LWVycm9yXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgRXN0cnVjdHVyYSxcclxuICAgIEZvclBrLCBGb3JQa1JhaXosXHJcbiAgICBJZEZpbiwgSWRGb3JtdWxhcmlvLCBJZFByZWd1bnRhLCBJZFRhcmVhLCBJZFZhcmlhYmxlLFxyXG4gICAgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIEluZm9Gb3JtdWxhcmlvLFxyXG4gICAgUGxhaW5Gb3JQaywgUmVzcHVlc3RhcywgUmVzcHVlc3Rhc1JhaXosIFJlc3VtZW5Fc3RhZG8sXHJcbiAgICBWYWxvciwgVmlzaXRhLFxyXG4gICAgdG9QbGFpbkZvclBrLFxyXG4gICAgVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBGb3JtdWxhcmlvLFxyXG4gICAgQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyxcclxuICAgIElkRW5jLFxyXG4gICAgRGVmT3BlcmF0aXZvLFxyXG4gICAgaXRlcmF0b3IsXHJcbiAgICBDb25maWd1cmFjaW9uSGFiaWxpdGFyQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgQ2FtcG9QayxcclxuICAgIElkQ2FyZ2EsXHJcbiAgICBDYXJnYSxcclxuICAgIENhbXBvUGtSYWl6LFxyXG4gICAgVmFsdWVQa1JhaXpcclxufSBmcm9tIFwiLi90aXBvc1wiO1xyXG5cclxuaW1wb3J0IHsgZ2V0Rm9ybVJlbmRlcmVyIH0gZnJvbSBcIi4vcmVuZGVyLWNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBhZGFwdGFyRXN0cnVjdHVyYSB9IGZyb20gXCIuL3JlZHV4LWZvcm11bGFyaW9cIjtcclxuXHJcbnZhciBjb21vZGluZXMgPSB7fSBhcyB7XHJcbiAgICBjYWxjdWxhckNvbW9kaW5lcz86IChmb3JQazogRm9yUGspID0+IHZvaWRcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbGN1bGFyQ29tb2RpbmVzKGNhbGN1bGFyQ29tb2RpbmVzOiAoZm9yUGs6IEZvclBrKSA9PiB2b2lkKSB7XHJcbiAgICBjb21vZGluZXMuY2FsY3VsYXJDb21vZGluZXMgPSBjYWxjdWxhckNvbW9kaW5lc1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBMaXN0ZW5lckNhbWJpb1ZhcmlhYmxlID0gKHZhcmlhYmxlOiBzdHJpbmcsIHZhbG9yOiBhbnksIGZvclBrPzogRm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzPzogUmVzcHVlc3RhcykgPT4gdm9pZDtcclxuXHJcbnR5cGUgU3VzY3JpcGNpb25DYW1iaW9WYXJpYWJsZSA9IHtcclxuICAgIGxpc3RlbmVyOiBMaXN0ZW5lckNhbWJpb1ZhcmlhYmxlO1xyXG4gICAgdmFyaWFibGVzPzogU2V0PHN0cmluZz47XHJcbn07XHJcblxyXG52YXIgc3VzY3JpcGNpb25lc0NhbWJpb1ZhcmlhYmxlOiBTdXNjcmlwY2lvbkNhbWJpb1ZhcmlhYmxlW10gPSBbXTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdXNjcmliaXJDYW1iaW9WYXJpYWJsZShsaXN0ZW5lcjogTGlzdGVuZXJDYW1iaW9WYXJpYWJsZSwgdmFyaWFibGVzPzogc3RyaW5nIHwgc3RyaW5nW10pOiAoKSA9PiB2b2lkIHtcclxuICAgIGNvbnN0IHZhcnNTZXQgPSB2YXJpYWJsZXNcclxuICAgICAgICA/IG5ldyBTZXQoQXJyYXkuaXNBcnJheSh2YXJpYWJsZXMpID8gdmFyaWFibGVzIDogW3ZhcmlhYmxlc10pXHJcbiAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBzdWI6IFN1c2NyaXBjaW9uQ2FtYmlvVmFyaWFibGUgPSB7IGxpc3RlbmVyLCB2YXJpYWJsZXM6IHZhcnNTZXQgfTtcclxuICAgIHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZS5wdXNoKHN1Yik7XHJcbiAgICByZXR1cm4gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gc3VzY3JpcGNpb25lc0NhbWJpb1ZhcmlhYmxlLmluZGV4T2Yoc3ViKTtcclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICBzdXNjcmlwY2lvbmVzQ2FtYmlvVmFyaWFibGUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVzdXNjcmliaXJDYW1iaW9WYXJpYWJsZShsaXN0ZW5lcjogTGlzdGVuZXJDYW1iaW9WYXJpYWJsZSkge1xyXG4gICAgY29uc3QgaW5kZXggPSBzdXNjcmlwY2lvbmVzQ2FtYmlvVmFyaWFibGUuZmluZEluZGV4KHMgPT4gcy5saXN0ZW5lciA9PT0gbGlzdGVuZXIpO1xyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICBzdXNjcmlwY2lvbmVzQ2FtYmlvVmFyaWFibGUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5vdGlmaWNhckNhbWJpb1ZhcmlhYmxlKHZhcmlhYmxlOiBzdHJpbmcsIHZhbG9yOiBhbnksIGZvclBrPzogRm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzPzogUmVzcHVlc3Rhcykge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdXNjcmlwY2lvbmVzQ2FtYmlvVmFyaWFibGUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB7IGxpc3RlbmVyLCB2YXJpYWJsZXMgfSA9IHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZVtpXTtcclxuICAgICAgICBpZiAodmFyaWFibGVzKSB7XHJcbiAgICAgICAgICAgIGxldCBhcGxpY2EgPSB2YXJpYWJsZXMuaGFzKHZhcmlhYmxlKTtcclxuICAgICAgICAgICAgaWYgKCFhcGxpY2EgJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXMpIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YXJpYWJsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodiBpbiByZXNwdWVzdGFzQXVtZW50YWRhcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcGxpY2EgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFhcGxpY2EpIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsaXN0ZW5lcih2YXJpYWJsZSwgdmFsb3IsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGVuIGxpc3RlbmVyIGRlIGNhbWJpbyBkZSB2YXJpYWJsZScsIGVycik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG52YXIgZXNwZWNpYWxlcyA9IHt9IGFzIHtcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzPzogKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6IEZvclBrKSA9PiB2b2lkXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvPzogKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGs6IEZvclBrKSA9PiB2b2lkXHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNldENhbGN1bGFyVmFyaWFibGVzKGNhbGN1bGFyVmFyaWFibGVzOiAocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHZvaWQpIHtcclxuICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMgPSBjYWxjdWxhclZhcmlhYmxlc1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byhjYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvOiAocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHZvaWQpIHtcclxuICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byA9IGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm9cclxufVxyXG5cclxudHlwZSBEYXRvc0J5UGFzcyA9IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzICYge1xyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHsgIC8vIG5vIHNlIHBlcnNpc3RlXHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9XHJcbiAgICBkaXJ0eTogYm9vbGVhblxyXG59O1xyXG5cclxudmFyIGRhdG9zQnlQYXNzID0ge30gYXMgRGF0b3NCeVBhc3NcclxuXHJcbmV4cG9ydCBjb25zdCBoYXlEYXRvc0J5UGFzc0FsbWFjZW5hZG9zID0gKCkgPT4gZGF0b3NCeVBhc3MgJiYgT2JqZWN0LmtleXMoZGF0b3NCeVBhc3MpLmxlbmd0aCA+IDBcclxuXHJcbmludGVyZmFjZSBSZWN0IHtcclxuICAgIHRvcDogbnVtYmVyO1xyXG4gICAgbGVmdDogbnVtYmVyO1xyXG4gICAgd2lkdGg6IG51bWJlcjtcclxuICAgIGhlaWdodDogbnVtYmVyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRSZWN0KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUmVjdCB7XHJcbiAgICB2YXIgcmVjdDogUmVjdCA9IHsgdG9wOiAwLCBsZWZ0OiAwLCB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCwgaGVpZ2h0OiBlbGVtZW50Lm9mZnNldEhlaWdodCB9O1xyXG4gICAgdmFyIGN1cnJlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XHJcbiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7XHJcbiAgICAgICAgcmVjdC50b3AgKz0gY3VycmVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgcmVjdC5sZWZ0ICs9IGN1cnJlbnQub2Zmc2V0TGVmdDtcclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5vZmZzZXRQYXJlbnQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlY3Q7XHJcbn1cclxuXHJcbi8vQHRzLWlnbm9yZSBhcnJhbmNhIGVuIGJsYW5jb1xyXG52YXIgZXN0cnVjdHVyYTogRXN0cnVjdHVyYSA9IG51bGwgYXMgRXN0cnVjdHVyYTtcclxuXHJcbmxldCBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm86IChkYnBwOiBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcykgPT4gUHJvbWlzZTxhbnk+ID0gKCkgPT4ge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdwZXJzaXN0aXJEYXRvc0J5UGFzcyBTSU4gREVGSU5JUicpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRQZXJzaXN0aXJEYXRvc0J5UGFzcyhwZXJzaXN0aXJEYXRvc0J5UGFzc0Z1bjogdHlwZW9mIHBlcnNpc3RpckRhdG9zQnlQYXNzKSB7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzc0ludGVybm8gPSBwZXJzaXN0aXJEYXRvc0J5UGFzc0Z1bjtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRicHA6IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzKSB7XHJcbiAgICBhd2FpdCBnZXRGb3JtUmVuZGVyZXIoKS5wZXJzaXN0aXJEYXRvcyhkYnBwKTtcclxuICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZmFsc2VcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGNyZWFyRW5jdWVzdGEgPSAoaWRDYXJnYTogSWRDYXJnYSwgY2FsbEJhY2s6IChmb3JQa1JhaXo6IEZvclBrUmFpeikgPT4gdm9pZCkgPT4ge1xyXG4gICAgY29uc3QgTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVogPSBnZXRGb3JtUmVuZGVyZXIoKS5nZXRVbHRpbW9WYWxvclBrUmFpeigpIHx8ICctMSc7XHJcbiAgICBjb25zdCBlc3RydWN0dXJhID0gZ2V0RXN0cnVjdHVyYSgpO1xyXG4gICAgZ2V0Rm9ybVJlbmRlcmVyKCkuc2V0VWx0aW1vVmFsb3JQa1JhaXooKE51bWJlcihORVhUX0FVVE9fVkFMVUVfUEtfUkFJWikgLSAxKS50b1N0cmluZygpKTtcclxuICAgIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW05FWFRfQVVUT19WQUxVRV9QS19SQUlaIGFzIHVua25vd24gYXMgSWRFbmNdID0ge30gYXMgUmVzcHVlc3Rhc1JhaXo7XHJcbiAgICBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltORVhUX0FVVE9fVkFMVUVfUEtfUkFJWiBhcyB1bmtub3duIGFzIElkRW5jXSA9IHtcclxuICAgICAgICAuLi5lc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkcixcclxuICAgICAgICB0ZW06IHsgLi4uZXN0cnVjdHVyYS5kZWZhdWx0SW5mb3JtYWNpb25IZHIudGVtIH1cclxuICAgIH07XHJcbiAgICBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltORVhUX0FVVE9fVkFMVUVfUEtfUkFJWiBhcyB1bmtub3duIGFzIElkRW5jXS50ZW0uY2FyZ2EgPSBpZENhcmdhO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKS50aGVuKFxyXG4gICAgICAgICgpID0+IGNhbGxCYWNrKHtcclxuICAgICAgICAgICAgZm9ybXVsYXJpbzogZXN0cnVjdHVyYS5kZWZhdWx0SW5mb3JtYWNpb25IZHIudGFyZWEubWFpbl9mb3JtLFxyXG4gICAgICAgICAgICBbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTogTnVtYmVyKE5FWFRfQVVUT19WQUxVRV9QS19SQUlaKSBhcyBWYWx1ZVBrUmFpelxyXG4gICAgICAgIH0gYXMgRm9yUGtSYWl6KVxyXG4gICAgKS8vbm8gcXVpdGFyIGVsIGNhc3RlbyBwb3JxdWUgdmllbmUgY29tbyB0ZXh0byB5IG5lY2VzaXRvIHF1ZSBzZWEgbsO6bWVyb1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVuY29sYXJCYWNrdXAoXHJcbiAgICBlbmNvbGFyQmFja3VwRnVuOiAodG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCwgZm9yUGtSYWl6OiBGb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzKSA9PiB2b2lkXHJcbikge1xyXG4gICAgZW5jb2xhckJhY2t1cCA9IGVuY29sYXJCYWNrdXBGdW5cclxufVxyXG5cclxubGV0IGVuY29sYXJCYWNrdXA6ICh0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXMpID0+IHZvaWQgPSAoKSA9PiB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJTSU4gRVNQRUNJRklDQVIgZW5jb2xhckJhY2t1cFwiKVxyXG59XHJcblxyXG5leHBvcnQgdmFyIGludGVudGFyQmFja3VwID0gKGZvclBrOiBGb3JQaykgPT4ge1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlKVxyXG4gICAgdmFyIHRva2VuID0gZGF0b3NCeVBhc3MudG9rZW47XHJcbiAgICBpZiAodG9rZW4pIHtcclxuICAgICAgICBlbmNvbGFyQmFja3VwKHRva2VuLCBmb3JQa1JhaXosIHJlc3B1ZXN0YXNSYWl6KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJubyBoYXkgdG9rZW4sIG5vIHNlIHB1ZG8gaGFjZXIgZWwgYmFja3VwXCIpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRFc3RydWN0dXJhKGVzdHJ1Y3R1cmFBQ2FyZ2FyOiBFc3RydWN0dXJhKSB7XHJcbiAgICBlc3RydWN0dXJhID0gYWRhcHRhckVzdHJ1Y3R1cmEoZXN0cnVjdHVyYUFDYXJnYXIpO1xyXG4gICAgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQodWEgPT4gISF1YS5wcmluY2lwYWwpPy51bmlkYWRfYW5hbGlzaXMhXHJcbiAgICBkZWZPcGVyYXRpdm8uZGVmRm9yID0gbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLm1hcChmID0+ICh7IGhlcm1hbm86IGYuY2FzaWxsZXJvcy5oZXJtYW5vIH0pKS5wbGFpbigpXHJcbiAgICBkZWZPcGVyYXRpdm8uZGVmVUEgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykubWFwKCh1YURlZiwgdWEpID0+ICh7XHJcbiAgICAgICAgcGs6IHVhRGVmLnBrX2FncmVnYWRhIGFzIElkVmFyaWFibGUsXHJcbiAgICAgICAgaW5jbHVpZGFzOiBsaWtlQXIodWFEZWYuaGlqYXMpLmtleXMoKSxcclxuICAgICAgICBpZHNGb3I6IGxpa2VBcihlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5maWx0ZXIoZiA9PiBmLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09IHVhKS5rZXlzKClcclxuICAgIH0pKS5wbGFpbigpXHJcbiAgICByZXR1cm4gZXN0cnVjdHVyYTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldERhdG9zQnlQYXNzKFxyXG4gICAgbnVldm9QYXF1ZXRlOiBEYXRvc0J5UGFzc1BlcnNpc3RpYmxlcyAmIHsgZGlydHk/OiBib29sZWFuIH1cclxuKSB7XHJcbiAgICBkYXRvc0J5UGFzcyA9IHtcclxuICAgICAgICBkaXJ0eTogZmFsc2UsXHJcbiAgICAgICAgLi4ubnVldm9QYXF1ZXRlLFxyXG4gICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7fSBhcyBEYXRvc0J5UGFzc1tcImZlZWRiYWNrUm93VmFsaWRhdG9yXCJdXHJcbiAgICB9O1xyXG5cclxuICAgIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0RGF0b3NCeVBhc3MgPSAoKSA9PiBkYXRvc0J5UGFzc1xyXG5cclxuZnVuY3Rpb24gb2JqZXRvVmFjaW8obzogb2JqZWN0KSB7XHJcbiAgICBmb3IgKHZhciBrIGluIG8pIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZlZWRiYWNrUm93VmFsaWRhdG9yKCkge1xyXG4gICAgaWYgKCFkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciB8fCBvYmpldG9WYWNpbyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvcikpIHtcclxuICAgICAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlydHkoKSB7XHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuZGlydHlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVzdHJ1Y3R1cmEoKSB7XHJcbiAgICByZXR1cm4gZXN0cnVjdHVyYTtcclxufVxyXG5cclxudHlwZSBFbGVtZW50b3NSZWdpc3RyYWJsZXMgPSBIVE1MRGl2RWxlbWVudCB8IEhUTUxCdXR0b25FbGVtZW50IHwgSFRNTElucHV0RWxlbWVudDtcclxuXHJcbnR5cGUgRGlyZWN0RnVuY3Rpb248VCwgUmVzdWx0PiA9IChyZXNwdWVzdGFzQXVtZW50YWRhczogUmVzcHVlc3RhcywgZmVlZGJhY2tGb3JtOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiwgZWxlbWVudG86IFQsXHJcbiAgICBmZWVkYmFja0FsbDoge1xyXG4gICAgICAgIFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiAvLyByZXN1bHRhZG8gZGVsIHJvd1ZhbGlkYXRvciBwYXJhIGVzdGFkby5mb3JQa1xyXG4gICAgfSxcclxuICAgIGVzdHJ1Y3R1cmE6IEVzdHJ1Y3R1cmFcclxuKSA9PiBSZXN1bHRcclxuXHJcbnR5cGUgUmVnaXN0cm9FbGVtZW50bzxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPiA9IHtcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIGFueT4sXHJcbiAgICB2YXJpYWJsZT86IElkVmFyaWFibGUsXHJcbiAgICBmb3JQaz86IEZvclBrLFxyXG59ICYgKHtcclxuICAgIHByb3A6IGtleW9mIFRcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgVFtrZXlvZiBUXT4gLy8gTG8gcXVlIHJldG9ybmEgbGEgZnVuKGNpw7NuKSBzZSB1c2EgcGFyYSBsYSBwcm9wKGVydHkpIGRlbCBlbGVtZW50b1xyXG59IHwge1xyXG4gICAgYXR0cjogc3RyaW5nXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHN0cmluZz4gLy8gTG8gcXVlIHJldG9ybmEgbGEgZnVuKGNpw7NuKSBzZSB1c2EgcGFyYSBlbCB2YWxvciBkZWwgYXR0cihpYnV0bylcclxufSB8IHtcclxuICAgIHN0eWxlOiBrZXlvZiBDU1NTdHlsZURlY2xhcmF0aW9uXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHN0cmluZz4gLy8gTG8gcXVlIHJldG9ybmEgbGEgZnVuKGNpw7NuKSBzZSB1c2EgcGFyYSBlbCB2YWxvciBkZWwgc3R5bGVcclxufSB8IHtcclxuICAgIGRpcmVjdDogdHJ1ZVxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCB2b2lkPiAvLyBMYSBmdW5jacOzbiB2YSBhIHRvY2FyIGRpcmVjdGFtZW50ZSBlbCBlbGVtZW50byB5IGhhY2VyIHRvZG8gbG8gcXVlIHRlbmdhIHF1ZSBoYWNlclxyXG59KVxyXG5cclxudHlwZSBSZWdpc3Ryb0VsZW1lbnRvczxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPiA9IHsgW2lkOiBzdHJpbmddOiBSZWdpc3Ryb0VsZW1lbnRvPFQ+ICYgeyBlbGVtZW50bz86IFQgfSB9O1xyXG5cclxudmFyIHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsID0ge30gYXMgUmVnaXN0cm9FbGVtZW50b3M8RWxlbWVudG9zUmVnaXN0cmFibGVzPjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RyYXJFbGVtZW50bzxUIGV4dGVuZHMgRWxlbWVudG9zUmVnaXN0cmFibGVzPihkZWY6IFJlZ2lzdHJvRWxlbWVudG88VD4pIHtcclxuICAgIC8vIEB0cy1pZ25vcmUgU8OtLCBwb2Ryw61hIHNlciBxdWUgbG9zIHRpcG9zIGRlIFQgc2VhbiBkaXN0aW50b3MsIHBlcm8gdmFuIGEgc2VyIGNvaGVyZW50ZXNcclxuICAgIHZhciByZWdpc3Ryb0VsZW1lbnRvczogUmVnaXN0cm9FbGVtZW50b3M8VD4gPSByZWdpc3Ryb0VsZW1lbnRvc0dsb2JhbDtcclxuICAgIHJlZ2lzdHJvRWxlbWVudG9zW2RlZi5pZF0gPSBkZWY7XHJcbn1cclxuXHJcbnR5cGUgUmVzcHVlc3Rhc0ZvclBrQ29tdW4gPSB7IHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6OiBGb3JQa1JhaXosIHVuaWRhZEFuYWxpc2lzOiBVbmlkYWRBbmFsaXNpcyB9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOiBGb3JQayk6IFJlc3B1ZXN0YXNGb3JQa0NvbXVuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6IEZvclBrLCBjb25BdW1lbnRhZGFzOiB0cnVlLCBhZ3JlZ2FyU2lGYWx0YT86IGJvb2xlYW4pOiBSZXNwdWVzdGFzRm9yUGtDb211biAmIHsgcmVzcHVlc3Rhc0F1bWVudGFkYXM6IFJlc3B1ZXN0YXMgfVxyXG5leHBvcnQgZnVuY3Rpb24gcmVzcHVlc3Rhc0ZvclBrKGZvclBrOiBGb3JQaywgY29uQXVtZW50YWRhcz86IGJvb2xlYW4sIGFncmVnYXJTaUZhbHRhPzogYm9vbGVhbik6IFJlc3B1ZXN0YXNGb3JQa0NvbXVuICYgeyByZXNwdWVzdGFzQXVtZW50YWRhcz86IFJlc3B1ZXN0YXMgfSB7XHJcbiAgICB2YXIgcmVzcHVlc3Rhc0F1bWVudGFkYXMgPSB7fSBhcyBSZXNwdWVzdGFzO1xyXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBsbyBxdWUgc29icmFyIGRlIHJlc3B1ZXN0YXMgbm8gbWUgaW1wb3J0YS4uLlxyXG4gICAgdmFyIHJlc3B1ZXN0YXMgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzIGFzIFJlc3B1ZXN0YXM7XHJcbiAgICB2YXIgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6O1xyXG4gICAgdmFyIGZvclBrUmFpejogRm9yUGs7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzIHwgdW5kZWZpbmVkID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc1xyXG4gICAgdmFyIGZvclBrQXBpbGFkYSA9IGZvclBrO1xyXG4gICAgdmFyIHBpbGE6IFt1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMsIHVhRGVmOiBVbmlkYWRBbmFsaXNpcywgZm9yUGs6IEZvclBrXVtdID0gW107XHJcbiAgICB3aGlsZSAodW5pZGFkX2FuYWxpc2lzKSB7XHJcbiAgICAgICAgdmFyIHVhRGVmOiBVbmlkYWRBbmFsaXNpcyA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgICAgICBwaWxhLnB1c2goW3VuaWRhZF9hbmFsaXNpcywgdWFEZWYsIGZvclBrQXBpbGFkYV0pO1xyXG4gICAgICAgIGZvclBrQXBpbGFkYSA9IHsgLi4uZm9yUGtBcGlsYWRhIH07XHJcbiAgICAgICAgZGVsZXRlIGZvclBrQXBpbGFkYVt1YURlZi5wa19hZ3JlZ2FkYV1cclxuICAgICAgICB1bmlkYWRfYW5hbGlzaXMgPSB1YURlZi5wYWRyZVxyXG4gICAgfVxyXG4gICAgd2hpbGUgKHBpbGEubGVuZ3RoKSB7XHJcbiAgICAgICAgW3VuaWRhZF9hbmFsaXNpcywgdWFEZWYsIGZvclBrQXBpbGFkYV0gPSBwaWxhLnBvcCgpIVxyXG4gICAgICAgIHZhciB2YWxvclBrT1Bvc2ljaW9uID0gZm9yUGtBcGlsYWRhW3VhRGVmLnBrX2FncmVnYWRhXTtcclxuICAgICAgICBpZiAodmFsb3JQa09Qb3NpY2lvbiA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBmYWx0YSB1biB2YWxvciBwYXJhICR7SlNPTi5zdHJpbmdpZnkodWFEZWYucGtfYWdyZWdhZGEpfWApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHJlc3B1ZXN0YXNBbnRlcmlvciA9IHJlc3B1ZXN0YXM7XHJcbiAgICAgICAgbGV0IHBvc2ljaW9uID0gcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkgPyB2YWxvclBrT1Bvc2ljaW9uIC0gMSA6IHZhbG9yUGtPUG9zaWNpb25cclxuICAgICAgICByZXNwdWVzdGFzID0gcmVzcHVlc3Rhc1t1bmlkYWRfYW5hbGlzaXNdW3Bvc2ljaW9uXTtcclxuICAgICAgICBpZiAocmVzcHVlc3RhcyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGlmIChhZ3JlZ2FyU2lGYWx0YSkge1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyA9IHt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBbnRlcmlvclt1bmlkYWRfYW5hbGlzaXNdW3Bvc2ljaW9uXSA9IHJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gZXhpc3RlIGVsIGVsZW1lbnRvICcke3Bvc2ljaW9ufScgZW4gbGEgdW5pZGFkX2FuYWxpc2lzICcke3VuaWRhZF9hbmFsaXNpc30nYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yUGtSYWl6IHx8PSBmb3JQa0FwaWxhZGE7XHJcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBTw6kgcXVlIGVzIHJhw616IHBvciBjw7NtbyBlc3RveSByZXZvbHZpZW5kbyBsYSBwaWxhXHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXogfHw9IHJlc3B1ZXN0YXM7XHJcbiAgICAgICAgaWYgKGNvbkF1bWVudGFkYXMpIHtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXMgPSB7IC4uLnJlc3B1ZXN0YXNBdW1lbnRhZGFzLCAuLi5yZXNwdWVzdGFzLCBbdWFEZWYucGtfYWdyZWdhZGFdOiB2YWxvclBrT1Bvc2ljaW9uIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmUgU8OpIHF1ZSBsYSBwaWxhIHRpZW5lIGFsIG1lbm9zIHVuIGVsZW1lbnRvIHBvciBsbyB0YW50byBlc3RvIGVzdMOhIGxsZW5vIHNlZ3Vyby4gXHJcbiAgICAgICAgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6IHVhRGVmXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrUmFpejogRm9yUGtSYWl6KSB7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzQXVtZW50YWRhcyB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrUmFpeiwgdHJ1ZSlcclxuICAgIHZhciByZWdpc3Ryb0VsZW1lbnRvcyA9IHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsO1xyXG4gICAgdmFyIHBsYWluRm9yUGsgPSB0b1BsYWluRm9yUGsoZm9yUGtSYWl6KVxyXG4gICAgdmFyIHJvd1ZhbGlkYXRvciA9IGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgZm9yICh2YXIgaWQgaW4gcmVnaXN0cm9FbGVtZW50b3MpIHtcclxuICAgICAgICB2YXIgZGVmID0gcmVnaXN0cm9FbGVtZW50b3NbaWRdO1xyXG4gICAgICAgIGlmIChkZWYuZWxlbWVudG8pIHtcclxuICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGRlZi5lbGVtZW50bykpIHtcclxuICAgICAgICAgICAgICAgIGRlZi5lbGVtZW50byA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWRlZi5lbGVtZW50bykge1xyXG4gICAgICAgICAgICBkZWYuZWxlbWVudG8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkZWYuaWQpIGFzIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFkZWYuZWxlbWVudG8pIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0JVU0NBTkRPIGVsIGVsZW1lbnRvIHJlZ2lzdHJhZG8gJyxpZCwnbm8gZXN0w6EgZW4gZWwgRE9NJylcclxuICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB2YWx1ZSA9IGRlZi5mdW4ocmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJvd1ZhbGlkYXRvciwgZGVmLmVsZW1lbnRvLCBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYSk7XHJcbiAgICAgICAgaWYgKCdwcm9wJyBpbiBkZWYpIHtcclxuICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhkZWYuZWxlbWVudG8sIGRlZi5wcm9wLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCdhdHRyJyBpbiBkZWYpIHtcclxuICAgICAgICAgICAgc2V0QXR0ckRpc3RpbnRvKGRlZi5lbGVtZW50bywgZGVmLmF0dHIsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoJ3N0eWxlJyBpbiBkZWYpIHtcclxuICAgICAgICAgICAgc2V0VmFsb3JEaXN0aW50byhkZWYuZWxlbWVudG8uc3R5bGUsIGRlZi5zdHlsZSwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJvd1ZhbGlkYXRvci5hY3R1YWwpIHtcclxuICAgICAgICB2YXIgeyB0b3AsIGJvdHRvbSB9ID0gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKHJvd1ZhbGlkYXRvci5hY3R1YWwpO1xyXG4gICAgICAgIGlmICh0b3AgIT0gbnVsbCAmJiBib3R0b20gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmYWItYWN0aXZvLWFycmliYScpLmVsVG9wVmlzaWJpbGl6YXIgPSB0b3A7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYWJham8nKS5lbEJvdHRvbVZpc2liaWxpemFyID0gYm90dG9tO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRWxlbWVudG9FbmZvY2FkbyhpZFZhcmlhYmxlOiBJZFZhcmlhYmxlIHwgSWRGaW4pIHtcclxuICAgIHZhciBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlID09ICdmaW4nID8gYGJvdG9uLXZvbHZlci0yYCA6IGB2YXItJHtpZFZhcmlhYmxlfWApXHJcbiAgICAgICAgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRWYXJpYWJsZSk7XHJcbiAgICB2YXIgZWxlbWVudG8gPSBlbGVtZW50b1ZhcmlhYmxlQUVuZm9jYXI7XHJcbiAgICB2YXIgTUFSR0VOX1NDUk9MTCA9IDY0O1xyXG4gICAgdmFyIGFsdG9QYW50YWxsYSA9IHdpbmRvdy5pbm5lckhlaWdodCAqIDAuNyAtIE1BUkdFTl9TQ1JPTEw7XHJcbiAgICB2YXIgZWxlbWVudG9FbnRlcm86IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7IC8vIGVzIGVsIGVsZW1lbnRvIHF1ZSB2YSBhIGVudGFyIGVudGVybyBlbiBwYW50YWxsYSwgZGVmaW5lIGVsIGJvdHRvbVxyXG4gICAgdmFyIHJlY3RFbGVtZW50b0VudGVybzogUmVjdCB8IG51bGwgPSBudWxsO1xyXG4gICAgdmFyIGVsZW1lbnRvU3VwZXJpb3I6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7IC8vIGVzIGVsIGVsZW1lbnRvIHF1ZSB2YSBhIG1vc3RyYXJzZSBkZXNkZSBhcnJpYmEgYXVucXVlIG5vIGVudHJlIGVudGVybywgZGVmaW5lIGVsIHRvcFxyXG4gICAgdmFyIHJlY3RFbGVtZW50b1N1cGVyaW9yOiBSZWN0fCBudWxsID0gbnVsbDtcclxuICAgIHdoaWxlIChlbGVtZW50byAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAoZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCd2YXJpYWJsZScpXHJcbiAgICAgICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ211bHRpcGxlJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygncHJlZ3VudGEnKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdjb25qdW50b3ByZWd1bnRhcycpXHJcbiAgICAgICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3NlY2Npb24tYm90b24tZm9ybXVsYXJpbycpXHJcbiAgICAgICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2JvdG9uZm9ybXVsYXJpbycpXHJcbiAgICAgICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2JvdG9uLXZvbHZlcicpXHJcbiAgICAgICAgICAgICkgJiYgZWxlbWVudG8ub2Zmc2V0SGVpZ2h0ID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudG9TdXBlcmlvciA9PSBudWxsICYmIGVsZW1lbnRvLmNsaWVudEhlaWdodCA8IGFsdG9QYW50YWxsYSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudG9FbnRlcm8gPSBlbGVtZW50bztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50b0VudGVybyA9PSBudWxsKSBlbGVtZW50b0VudGVybyA9IGVsZW1lbnRvO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlY3RFbGVtZW50b0VudGVybyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdEVsZW1lbnRvRW50ZXJvID0gZ2V0UmVjdChlbGVtZW50b0VudGVybyEpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdEVsZW1lbnRvU3VwZXJpb3IgPSByZWN0RWxlbWVudG9FbnRlcm87XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IGdldFJlY3QoZWxlbWVudG8pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlY3RFbGVtZW50b0VudGVyby50b3AgKyByZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0IC0gcmVjdC50b3AgPCBhbHRvUGFudGFsbGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjdEVsZW1lbnRvU3VwZXJpb3IgPSByZWN0O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50byA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudG8gPSBlbGVtZW50bz8ucGFyZW50RWxlbWVudCA/PyBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKGVsZW1lbnRvU3VwZXJpb3IgPT0gbnVsbCkge1xyXG4gICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50b0VudGVybztcclxuICAgIH1cclxuICAgIHZhciByZXN1bHQ6IHtcclxuICAgICAgICBlbGVtZW50b0lucHV0VmFyaWFibGU/OiBIVE1MRWxlbWVudCB8IG51bGxcclxuICAgICAgICB0b3A/OiBudW1iZXIgfCBudWxsXHJcbiAgICAgICAgYm90dG9tPzogbnVtYmVyIHwgbnVsbFxyXG4gICAgICAgIGVuZm9jYWRvPzogYm9vbGVhbiB8IG51bGxcclxuICAgICAgICBkZXNlbmZvcXVlPzogc3RyaW5nIHwgbnVsbFxyXG4gICAgfSA9IHt9O1xyXG4gICAgaWYgKGVsZW1lbnRvRW50ZXJvICE9IG51bGwpIHtcclxuICAgICAgICBpZiAocmVjdEVsZW1lbnRvRW50ZXJvID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmVjdEVsZW1lbnRvRW50ZXJvID0gZ2V0UmVjdChlbGVtZW50b0VudGVybylcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LmVsZW1lbnRvSW5wdXRWYXJpYWJsZSA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgICAgICB2YXIgdG9wID0gKHJlY3RFbGVtZW50b1N1cGVyaW9yID8/IHJlY3RFbGVtZW50b0VudGVybykudG9wIC0gTUFSR0VOX1NDUk9MTDtcclxuICAgICAgICByZXN1bHQudG9wID0gdG9wO1xyXG4gICAgICAgIHJlc3VsdC5ib3R0b20gPSByZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodDtcclxuICAgICAgICBpZiAodG9wIDwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkge1xyXG4gICAgICAgICAgICByZXN1bHQuZGVzZW5mb3F1ZSA9ICdhcnJpYmEnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCArIHJlY3RFbGVtZW50b0VudGVyby5oZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wICsgYWx0b1BhbnRhbGxhKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlID0gJ2FiYWpvJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQuZW5mb2NhZG8gPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEF0dHJEaXN0aW50bzxOIGV4dGVuZHMgc3RyaW5nPihcclxuICAgIG9iamV0bzogeyBzZXRBdHRyaWJ1dGU6IChuYW1lOiBOLCB2YWxvcjogc3RyaW5nKSA9PiB2b2lkLCBnZXRBdHRyaWJ1dGU6IChuYW1lOiBOKSA9PiBzdHJpbmcgfCBudWxsIH0sXHJcbiAgICBuYW1lOiBOLFxyXG4gICAgdmFsb3I6IHN0cmluZ1xyXG4pIHtcclxuICAgIGlmIChvYmpldG8gJiYgb2JqZXRvLmdldEF0dHJpYnV0ZShuYW1lKSAhPSB2YWxvcikge1xyXG4gICAgICAgIG9iamV0by5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsb3IpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0VmFsb3JEaXN0aW50bzxUIGV4dGVuZHMge30sIE4gZXh0ZW5kcyBrZXlvZiBUPihcclxuICAgIG9iamV0bzogVCxcclxuICAgIG5hbWU6IE4sXHJcbiAgICB2YWxvcjogVFtOXVxyXG4pIHtcclxuICAgIGlmIChvYmpldG9bbmFtZV0gIT0gdmFsb3IpIHtcclxuICAgICAgICBvYmpldG9bbmFtZV0gPSB2YWxvcjtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGs6IEZvclBrKSB7XHJcbiAgICBpZiAoZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgIWRhdG9zQnlQYXNzPy5zb2xvTGVjdHVyYSkge1xyXG4gICAgICAgIHZhciB7IHJlc3B1ZXN0YXMgfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICAgICAgbGlrZUFyKGVzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKVxyXG4gICAgICAgICAgICAuZm9yRWFjaCgoY29uZmlnQm90b25Gb3JtdWxhcmlvLCBpZEZvcm11bGFyaW8pID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciByZXNwVUEgPSByZXNwdWVzdGFzW2VzdHJ1Y3R1cmEuaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2lkRm9ybXVsYXJpb10udW5pZGFkX2FuYWxpc2lzXTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwVUEgIT0gbnVsbCAmJiByZXNwVUEgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY29uZmlnQm90b25Gb3JtdWxhcmlvLmhhYmlsaXRhcl9hZ3JlZ2FyX2xpc3RvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbJyRCLicgKyBpZEZvcm11bGFyaW8gYXMgSWRWYXJpYWJsZV0gPSAnb2snO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxufTtcclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2lkX3ByZWd1bnRhKF9wYXlsb2FkOiB7IHByZWd1bnRhOiBJZFByZWd1bnRhLCBmb3JQazogRm9yUGsgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgPSBTeW1ib2woJ05PX0NBTUJJQVJfU09MT19UUkFFUl9TVEFUVVMnKVxyXG5leHBvcnQgY29uc3QgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPJylcclxuXHJcbmZ1bmN0aW9uIHJlZnJlc2Nhck1hcmNhRGlydHkoKSB7XHJcbiAgICB2YXIgYm90b25HcmFiYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNhdmUtYnV0dG9uXCIpIGFzIEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgaWYgKGJvdG9uR3JhYmFyKSB7XHJcbiAgICAgICAgaWYgKGJvdG9uR3JhYmFyLmRpc2FibGVkICE9PSAhZGF0b3NCeVBhc3MuZGlydHkpIHtcclxuICAgICAgICAgICAgYm90b25HcmFiYXIuZGlzYWJsZWQgPSAhZGF0b3NCeVBhc3MuZGlydHk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGEocGF5bG9hZDoge1xyXG4gICAgZm9yUGs6IEZvclBrLFxyXG4gICAgdmFyaWFibGU6IElkVmFyaWFibGUgfCB0eXBlb2YgTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMsXHJcbiAgICByZXNwdWVzdGE6IFZhbG9yIHwgdHlwZW9mIE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU9cclxufSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHRva2VuID0gJ0FWRVJJR1VBUiBUT0RPJ1xyXG4gICAgbGV0IHsgZm9yUGssIHJlc3B1ZXN0YSwgdmFyaWFibGUgfSA9IHBheWxvYWQ7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpcyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb107XHJcbiAgICB2YXIgcmVjZW50TW9kaWZpZWQgPSBmYWxzZTtcclxuICAgIHZhciB2YWxvckFudGVyaW9yID0gdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgPyByZXNwdWVzdGFzW3ZhcmlhYmxlXSA6IG51bGw7XHJcbiAgICB2YXIgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXVxyXG4gICAgaWYgKHJlc3B1ZXN0YSAhPT0gTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJTyAmJiB2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUykge1xyXG4gICAgICAgIGlmIChyZXNwdWVzdGEgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YSA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IudmFyaWFibGVzW3ZhcmlhYmxlXT8udGlwbyA9PSAnbnVtZXJvJykge1xyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3RhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YSA9IE51bWJlcihyZXNwdWVzdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNpIGVzIHVuIGZhbHN5ICgwID09IGZhbHNlKSB0ZW5nbyBxdWUgY29tcGFyYXIgY29uICE9PVxyXG4gICAgICAgIHJlY2VudE1vZGlmaWVkID0gcmVzcHVlc3RhID8gdmFsb3JBbnRlcmlvciAhPSByZXNwdWVzdGEgOiB2YWxvckFudGVyaW9yICE9PSByZXNwdWVzdGFcclxuICAgICAgICBpZiAocmVjZW50TW9kaWZpZWQpIHtcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1t2YXJpYWJsZV0gPSByZXNwdWVzdGEgPz8gbnVsbDsgLy8gY2FtYmlvIHVuZGVmaW5lZCBwb3IgbnVsbFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gZmVlZGJhY2tSb3cuZmVlZGJhY2tbdmFyaWFibGVdPy5zaWd1aWVudGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIHNpZ3VpZW50ZVZhcmlhYmxlOiBJZFZhcmlhYmxlIHwgSWRGaW4gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTICYmIChyZWNlbnRNb2RpZmllZCB8fCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPICYmIGZlZWRiYWNrUm93LmF1dG9JbmdyZXNhZGFzPy5bdmFyaWFibGVdKSkge1xyXG4gICAgICAgIHJlY2FsY3VsYXJUb2RvRWxBcmJvbChyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6KTtcclxuICAgICAgICBpZiAoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWRhdG9zQnlQYXNzPy5zb2xvTGVjdHVyYSkge1xyXG4gICAgICAgICAgICB2ZXJpZmljYXJTb3J0ZW8oe1xyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlbzogZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV0sXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgICAgICAgICB2YXJpYWJsZUFjdHVhbDogdmFyaWFibGUsXHJcbiAgICAgICAgICAgICAgICBmb3JQazogZm9yUGtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgICAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgcmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgeyBhdXRvSW5ncmVzbzogdHJ1ZSB9KTtcclxuICAgICAgICBmZWVkYmFja1JvdyA9IGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgICAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrKTtcclxuICAgICAgICBjb25zdCB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzIH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpO1xyXG4gICAgICAgIG5vdGlmaWNhckNhbWJpb1ZhcmlhYmxlKHZhcmlhYmxlIGFzIHN0cmluZywgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdmFyaWFibGUgYXMgSWRWYXJpYWJsZV0sIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcyk7XHJcbiAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gdmFyaWFibGU7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3NpZ3VpZW50ZVZhcmlhYmxlXT8uc2lndWllbnRlO1xyXG4gICAgICAgIH0gd2hpbGUgKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpXHJcbiAgICAgICAgaWYgKHNpZ3VpZW50ZVZhcmlhYmxlID09IG51bGwgJiYgZmVlZGJhY2tSb3cuZmVlZGJhY2tbdmFyaWFibGVdPy5lc3RhZG8gPT0gJ3ZhbGlkYScpIHtcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSAnZmluJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyByZWNlbnRNb2RpZmllZCwgc2lndWllbnRlVmFyaWFibGUsIHZhcmlhYmxlQWN0dWFsOiBmZWVkYmFja1Jvdy5hY3R1YWwgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9yZWdpc3RyYXJfbm90YShwYXlsb2FkOiB7IGZvclBrUmFpejogRm9yUGtSYWl6LCB0YXJlYTogSWRUYXJlYSwgbm90YTogc3RyaW5nIHwgbnVsbCB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIHRhcmVhLCBub3RhIH0gPSBwYXlsb2FkO1xyXG4gICAgY29uc29sZS5sb2coXCJGQUxUQSAvLyBUT0RPXCIpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWdyZWdhcl92aXNpdGEocGF5bG9hZDogeyBmb3JQa1JhaXo6IEZvclBrUmFpeiwgb2JzZXJ2YWNpb25lczogc3RyaW5nIHwgbnVsbCB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIG9ic2VydmFjaW9uZXMgfSA9IHBheWxvYWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fbW9kaWZpY2FyX3Zpc2l0YShwYXlsb2FkOiB7IGZvclBrUmFpejogRm9yUGtSYWl6LCBpbmRleDogbnVtYmVyLCBvcGNpb246IGtleW9mIFZpc2l0YSwgdmFsb3I6IHN0cmluZyB8IG51bGwgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleCwgb3BjaW9uLCB2YWxvciB9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfdmlzaXRhKHBheWxvYWQ6IHsgZm9yUGtSYWl6OiBGb3JQa1JhaXosIGluZGV4OiBudW1iZXIgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleCB9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8oeyBmb3JQayB9OiB7IGZvclBrOiBGb3JQayB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeik7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvKHsgZm9yUGsgfTogeyBmb3JQazogRm9yUGsgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgdmFyIHsgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcywgbnVsbCwge30pXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oeyBmb3JQaywgZm9yUGtQYWRyZSB9OiB7IGZvclBrOiBGb3JQaywgZm9yUGtQYWRyZTogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMgfCB1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgdWFEZWY6IFVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGluZGV4ID0gZm9yUGtbdWFEZWYucGtfYWdyZWdhZGFdIGFzIG51bWJlcjtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXM6IHJlc3B1ZXN0YXNQYWRyZSB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrUGFkcmUsIHRydWUsIHRydWUpO1xyXG4gICAgKHJlc3B1ZXN0YXNQYWRyZVt1bmlkYWRfYW5hbGlzaXNdIGFzIFJlc3B1ZXN0YXNbXSkuc3BsaWNlKGluZGV4IC0gMSwgMSk7XHJcbiAgICByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeik7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHRydWU7XHJcbiAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgdHJ1ZTtcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgeyBhdXRvSW5ncmVzbzogdHJ1ZSB9KTtcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrUGFkcmUpO1xyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQa1BhZHJlKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaEJ5UGFzczxULCBSPihcclxuICAgIGZ1bjogKHBheWxvYWQ6IFQsIGRhdG9zOiB0eXBlb2YgZGF0b3NCeVBhc3MpID0+IFIsXHJcbiAgICBwYXlsb2FkOiBUXHJcbikge1xyXG4gICAgcmV0dXJuIGZ1bihwYXlsb2FkLCBkYXRvc0J5UGFzcyk7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHVsdGltYVZhcmlibGVWaXZpZW5kYSA9ICdOT19FU1RBX0RFRklOSURBX0FVTi8vVE9ETycgYXMgSWRWYXJpYWJsZTtcclxuXHJcbmV4cG9ydCBjb25zdCBNQVhDUCA9IDIwO1xyXG5cclxuLyogUkVEVUNFUlMgKi9cclxuXHJcbnZhciByZWVtcGxhem9zSGFiaWxpdGFyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgZmFsc2U6ICdmYWxzZScsXHJcbiAgICB0cnVlOiAndHJ1ZScsXHJcbiAgICBcIj1cIjogJz09JyxcclxuICAgIFwiPD5cIjogJyE9JyxcclxuICAgIFwiJlwiOiAnJiYnLFxyXG4gICAgXCJ8XCI6ICd8fCcsXHJcbiAgICBcIk9SXCI6ICd8fCcsXHJcbiAgICBcIkFORFwiOiAnJiYnLFxyXG4gICAgXCJvclwiOiAnfHwnLFxyXG4gICAgXCJhbmRcIjogJyYmJyxcclxuICAgIFwibm90XCI6ICchJyxcclxuICAgIFwiTk9UXCI6ICchJyxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBoZWxwZXJzQ2FzaWxsZXJvcyA9IHtcclxuICAgIG51bGwyemVybyhwb3NpYmxlTnVsbDogYW55KSB7XHJcbiAgICAgICAgaWYgKHBvc2libGVOdWxsID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwb3NpYmxlTnVsbDtcclxuICAgIH0sXHJcbiAgICBkaXYwZXJyKG51bWVyYWRvcjogbnVtYmVyLCBkZW5vbWluYWRvcjogbnVtYmVyLCBwazogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGRlbm9taW5hZG9yID09IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZW4gXCIgKyBwayArIFwiIGRpdmlzaW9uIHBvciBjZXJvIGRlIFwiICsgbnVtZXJhZG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWRvciAvIGRlbm9taW5hZG9yO1xyXG4gICAgfSxcclxuICAgIGZ1bnM6IHtcclxuICAgICAgICBibGFuY28oeDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICE9PSAwICYmICF4XHJcbiAgICAgICAgfSxcclxuICAgICAgICBob3koKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnRvZGF5KCkudG9EbXkoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmVjaGFfdmFsaWRhKHg6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgZm9ybWF0b192YWxpZG8gPSAvXihbMS05XXwwWzEtOV18WzEyXVxcZHwzWzAxXSlcXC8oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8yMFxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgdmFyIHhEYXRlOiBEYXRlO1xyXG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbk9rOiBib29sZWFuO1xyXG4gICAgICAgICAgICBjb252ZXJzaW9uT2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0b192YWxpZG8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtkLCBtLCB5XSA9IHguc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBuZXcgRGF0ZShgJHt5fS8ke219LyR7ZH1gKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL2ZhbHRhcmlhIHZhbGlkYXIgcXVlIG5vIHNlYSB1bmEgZmVjaGEgZnV0dXJhIHkgcXVlIHNlYSB1bmEgZmVjaGEgZW4gZWwgcmFuZ28gZGVsIG9wZXJhdGl2b1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gJiYgY29udmVyc2lvbk9rXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXNhbmlvX3ZhbGlkbyh4OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvID0gL14oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8oMTl8MjApXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG9cclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZm9ybWFkbyh4OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggIT09IHVuZGVmaW5lZCAmJiB4ICE9PSBudWxsICYmICghKHggaW5zdGFuY2VvZiBBcnJheSkgfHwgeC5sZW5ndGggIT09IDApXHJcbiAgICAgICAgICAgICAgICAmJiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSB8fCBPYmplY3Qua2V5cyh4KS5sZW5ndGggIT09IDApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBuc25jKHg6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCA9PSAtOVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyKHg6IG51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4geCAlIDIgPT0gMFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZWRhZF9tZXNfYW5uaW9fdmFsaWRvKGVkYWQ6IG51bWJlciwgbWVzQW5uaW86IHN0cmluZywgZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIG1lc2VzRGlmZXJlbmNpYSA9IChkMTogRGF0ZSwgZDI6IERhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBtb250aHM7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgPSAoZDIuZ2V0RnVsbFllYXIoKSAtIGQxLmdldEZ1bGxZZWFyKCkpICogMTI7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgLT0gZDEuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIG1vbnRocyArPSBkMi5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyA8PSAwID8gMCA6IG1vbnRocztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzUmVhbGl6YWNpb24gPSBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVkuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBkYXRlLnltZChOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMl0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMV0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMF0pKVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzTWVzQW5uaW8gPSBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNNZXNBbm5pb1sxXSksIE51bWJlcihwYXJ0ZXNNZXNBbm5pb1swXSksIDEpXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBSZWFsRGF0ZSBlcyBEYXRlIHkgc2UgcHVlZGUgcmVzdGFyXHJcbiAgICAgICAgICAgIHZhciBkaWZlcmVuY2lhTWVzZXMgPSBtZXNlc0RpZmVyZW5jaWEobmFjaW1pZW50bywgdG9kYXkpO1xyXG4gICAgICAgICAgICB2YXIgZWRhZERlY2ltYWxlcyA9IGRpZmVyZW5jaWFNZXNlcyAvIDEyOyAvL2VqIDM2LjVcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoZWRhZERlY2ltYWxlcykgPT0gZWRhZCB8fCAvL21pc21hIGVkYWRcclxuICAgICAgICAgICAgICAgIGVkYWREZWNpbWFsZXMgPT0gZWRhZCArIDEgLy9tZXMgZGUgdG9sZXJhbmNpYVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvL2NvcGlhcl9jYW1wb191YV9yYW1hKHJlc3B1ZXN0YXNPcmlnZW46UmVzcHVlc3Rhc1tdLCBwb3NpY2lvbjpudW1iZXIsIHZhcmlhYmxlT3JpZ2VuOiBJZFZhcmlhYmxlLCBjYW1pbm86c3RyaW5nLCBjb25kaWNpb246Ym9vbGVhbil7XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj8ocmVzcHVlc3Rhc09yaWdlbiAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV1bYCR7Y2FtaW5vfWBdW3ZhcmlhYmxlT3JpZ2VuXSk6bnVsbFxyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/ZXZhbChgcmVzcHVlc3Rhc09yaWdlblske3Bvc2ljaW9uLTF9XS5gK2NhbWlubysnLicrdmFyaWFibGVPcmlnZW4pOm51bGw7XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLypcclxuICAgICAgICBkYm86e1xyXG4gICAgICAgICAgICBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCBkYXRvOnN0cmluZyl7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmIGluZm9ybWFkbyh4cGVyc29uYXMpICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXVtkYXRvXT8geHBlcnNvbmFzW3Blci0xXVtkYXRvXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVkYWRmYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdlZGFkJylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlaW5kaXZpZHVhbChlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISFwZXJzb25hc1twZXItMV1bJ2VudHJlYWluZCddXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZW1pZW1icm8oZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2Nvbnl1Z2VzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hc1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHhwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0yKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvamVmZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0xKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFyZW50ZXNjb2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwncDQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXhvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISF4cGVyc29uYXMgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdLnNleG8/IHhwZXJzb25hc1twZXItMV1bJ3NleG8nXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNpdGNvbnlqZWZlKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLDEsJ3A1JylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gKi9cclxuICAgIH1cclxufTtcclxuXHJcbnR5cGUgRnVuY2lvbkhhYmlsaXRhciA9ICh2YWxvcmVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBib29sZWFuO1xyXG50eXBlIEZ1bmNpb25WYWxvcmFyID0gKHZhbG9yZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IGFueTtcclxudmFyIGZ1bmNpb25lc0hhYmlsaXRhcjogeyBba2V5OiBzdHJpbmddOiBGdW5jaW9uSGFiaWxpdGFyIH0gPSB7XHJcbn1cclxudmFyIGZ1bmNpb25lc1ZhbG9yYXI6IHsgW2tleTogc3RyaW5nXTogRnVuY2lvblZhbG9yYXIgfSA9IHtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1pbmlDb21waWxhZG9yU1FsSnMoZXhwcmVzaW9uQ2FzaVNRTDogc3RyaW5nKSB7XHJcbiAgICB2YXIgZXhwcmVzaW9uID0gZXhwcmVzaW9uQ2FzaVNRTC5yZXBsYWNlKC9cXHUwMEEwL2csICcgJyk7XHJcbiAgICB2YXIgY3VlcnBvID0gZXhwcmVzaW9uLnJlcGxhY2UoL1xcYmlzIGRpc3RpbmN0IGZyb21cXGIvZ2ksICchPScpLnJlcGxhY2UoL1xcYi4rP1xcYi9nLCBmdW5jdGlvbiAoZWxUb2tlbikge1xyXG4gICAgICAgIHZhciBlbFRva2VuVHJpbWVhZG8gPSBlbFRva2VuLnRyaW0oKTtcclxuICAgICAgICBpZiAoZWxUb2tlblRyaW1lYWRvIGluIHJlZW1wbGF6b3NIYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZW1wbGF6b3NIYWJpbGl0YXJbZWxUb2tlblRyaW1lYWRvXTtcclxuICAgICAgICB9IGVsc2UgaWYgKC9eXFxkK1xcLj9cXGQqJC8udGVzdChlbFRva2VuVHJpbWVhZG8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfSBlbHNlIGlmICgvXlxcVyskLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9IGVsc2UgaWYgKC9eXFxzKyQvLnRlc3QoZWxUb2tlbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLicgKyBlbFRva2VuICsgJyknO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY3VlcnBvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY2lvbkNvbXBpbGFkYTxUPihjb25qdW50b0RlRnVuY2lvbmVzOiB7IFtrZXk6IHN0cmluZ106ICh2YWxvcmVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBUIH0pIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kczogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdKSB7XHJcbiAgICAgICAgICAgIHZhciBjdWVycG8gPSBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gdmFyIGN1ZXJwbyA9IG1pbmlDb21waWxhZG9yU1FsSnMobm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxGdW4gPSBuZXcgRnVuY3Rpb24oJ3ZhbG9yZXMnLCAnaGVscGVycycsICdyZXR1cm4gJyArIGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdID0gZnVuY3Rpb24gKHZhbG9yZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJuYWxGdW4odmFsb3JlcywgaGVscGVyc0Nhc2lsbGVyb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1IgRUpFQ1VDQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLCBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzLCBleHBlY3RlZChlcnIpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWxvcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBDT01QSUxBQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLCBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzLCBleHBlY3RlZChlcnIpKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY3VlcnBvKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25IYWJpbGl0YXIgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc0hhYmlsaXRhcik7XHJcbmV4cG9ydCBjb25zdCBnZXRGdW5jaW9uVmFsb3JhciA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzVmFsb3Jhcik7XHJcblxyXG5cclxudmFyIHJvd1ZhbGlkYXRvciA9IGdldFJvd1ZhbGlkYXRvcjxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+KHsgZ2V0RnVuY2lvbkhhYmlsaXRhciwgZ2V0RnVuY2lvblZhbG9yYXIgfSlcclxuZXhwb3J0IHZhciBidXNjYXJOb1JlYUVuUmVzcHVlc3RhcyA9ICh1bmlkYWRlc0FSZWNvcnJlclBybTogSWRVbmlkYWRBbmFsaXNpc1tdLCB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsIG5vUmVhc1RhcmVhOiBhbnlbXSwgbm9tYk5vUmVhOiBzdHJpbmcpXHJcbiAgICA6IHsgbnJjb2RpZ286IHN0cmluZyB8IG51bGwsIGVzdmFsb3I6IGJvb2xlYW4gfSA9PiB7XHJcbiAgICB2YXIgbnJjb2RpZ286IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgdmFyIGVzdmFsb3IgPSBmYWxzZTtcclxuICAgIHZhciBydmFsb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgdmFyIHJ2YXJpYWJsZTogc3RyaW5nO1xyXG4gICAgdmFyIHJub3JlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAvLyB2YXIgcmVzdWx0PXtucmNvZDpTdHJpbmcsIGVzdmFsOkJvb2xlYW59O1xyXG4gICAgaWYgKHVuaWRhZGVzQVJlY29ycmVyUHJtLmluY2x1ZGVzKHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcykpIHtcclxuICAgICAgICBmb3IgKGxldCBub1JlYSBvZiBub1JlYXNUYXJlYSkgeyAvL2VzdHJ1Y3R1cmEubm9SZWFzLCBlc3RydWN0dXJhLm5vUmVhc1N1cFxyXG4gICAgICAgICAgICBpZiAobm9tYk5vUmVhID09ICdub19yZWEnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeyB2YXJpYWJsZSwgdmFsb3IsIG5vX3JlYSB9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWEgPSBub19yZWE7XHJcbiAgICAgICAgICAgICAgICBydmFsb3IgPSB2YWxvcjtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZSA9IHZhcmlhYmxlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHsgdmFyaWFibGVfc3VwLCB2YWxvcl9zdXAsIG5vX3JlYV9zdXAgfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhID0gbm9fcmVhX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YWxvciA9IHZhbG9yX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZSA9IHZhcmlhYmxlX3N1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1tydmFyaWFibGUgYXMgSWRWYXJpYWJsZV0gPT0gcnZhbG9yKSB7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbyA9IHJub3JlYTsgIC8vbm9fcmVhLCBub19yZWFfc3VwXHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG5yY29kaWdvLCBlc3ZhbG9yIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5yY29kaWdvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGVzdmFsb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IHVhIG9mIChsaWtlQXIodW5pZGFkQW5hbGlzaXM/LmhpamFzKS5hcnJheSgpKSkge1xyXG4gICAgICAgIGlmICh1YT8udW5pZGFkX2FuYWxpc2lzICYmIHJlc3B1ZXN0YXNbdWEudW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlc3B1ZXN0YXNIaWphcyBvZiBpdGVyYXRvcihyZXNwdWVzdGFzW3VhPy51bmlkYWRfYW5hbGlzaXNdID8/IFtdKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKHVuaWRhZGVzQVJlY29ycmVyUHJtLCB1YSwgcmVzcHVlc3Rhc0hpamFzLCBub1JlYXNUYXJlYSwgbm9tYk5vUmVhKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZXN2YWxvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvID0gcmVzdWx0Lm5yY29kaWdvO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3IgPSByZXN1bHQuZXN2YWxvcjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBucmNvZGlnbywgZXN2YWxvciB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBlc3ZhbG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IG5yY29kaWdvLCBlc3ZhbG9yIH1cclxufVxyXG5cclxuXHJcblxyXG5leHBvcnQgdmFyIGRlZk9wZXJhdGl2bzogRGVmT3BlcmF0aXZvID0ge1xyXG4gICAgZXNOb1JlYTogKF9yZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kTm9SZWEsIGVzTm9SZWEgfTtcclxuICAgIH0sXHJcbiAgICBlc05vUmVhU3VwOiAoX3Jlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHtcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhU3VwOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgICByZXR1cm4geyBjb2ROb1JlYVN1cCwgZXNOb1JlYVN1cCB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGE6IChfcmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4ge1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kUmVhLCBlc1JlYSB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGFTdXA6IChfcmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4ge1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYVN1cDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kUmVhU3VwLCBlc1JlYVN1cCB9XHJcbiAgICB9LFxyXG4gICAgVUFwcmluY2lwYWw6ICcnIGFzIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBkZWZVQToge30gYXMgeyBbaSBpbiBJZFVuaWRhZEFuYWxpc2lzXTogeyBwazogSWRWYXJpYWJsZSwgaW5jbHVpZGFzOiBJZFVuaWRhZEFuYWxpc2lzW10sIGlkc0ZvcjogSWRGb3JtdWxhcmlvW10gfSB9LFxyXG4gICAgZGVmRm9yOiB7fSBhcyB7IFtmIGluIElkRm9ybXVsYXJpb106IHsvKmFyYm9sVUE6SWRVbmlkYWRBbmFsaXNpc1tdLCAqLyBoZXJtYW5vPzogdHJ1ZSB9IH1cclxufVxyXG4vLy8vLyBBQkFKTyBkZSBlc3RhIGzDrW5lYSBubyBwdWVkZSBoYWJlciBvdHJvcyBub21icmVzIGRlIHZhcmlhYmxlcyBvIGZvcm11bGFyaW9zIG8gY2FzaWxsZXJvcyBlbiBnZW5lcmFsXHJcblxyXG5leHBvcnQgdmFyIHNldENhbGN1bG9SZWFOb1JlYSA9IChcclxuICAgIGVzTm9SZWE6IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7IGNvZE5vUmVhOiBzdHJpbmcgfCBudWxsLCBlc05vUmVhOiBib29sZWFuIH0sXHJcbiAgICBlc05vUmVhU3VwOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2ROb1JlYVN1cDogc3RyaW5nIHwgbnVsbCwgZXNOb1JlYVN1cDogYm9vbGVhbiB9LFxyXG4gICAgZXNSZWFsaXphZGE6IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7IGNvZFJlYTogbnVtYmVyIHwgbnVsbCwgZXNSZWE6IGJvb2xlYW4gfSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2RSZWFTdXA6IG51bWJlciB8IG51bGwsIGVzUmVhU3VwOiBib29sZWFuIH1cclxuKSA9PiB7XHJcbiAgICBkZWZPcGVyYXRpdm8gPSB7XHJcbiAgICAgICAgLi4uZGVmT3BlcmF0aXZvLFxyXG4gICAgICAgIGVzTm9SZWEsXHJcbiAgICAgICAgZXNOb1JlYVN1cCxcclxuICAgICAgICBlc1JlYWxpemFkYSxcclxuICAgICAgICBlc1JlYWxpemFkYVN1cFxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG50eXBlIFBlcnNvbmEgPSB7IHAxOiBzdHJpbmcsIHAyOiBudW1iZXIsIHAzOiBudW1iZXIsIHA0OiBudW1iZXIgfCBudWxsLCBwNTogMSB8IG51bGwsIHA2OiAxIHwgbnVsbCB9XHJcblxyXG5mdW5jdGlvbiBudW0obnVtOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsKTogbnVtYmVyIHtcclxuICAgIC8vQHRzLWlnbm9yZSBsYSBncmFjaWEgZXMgbWV0ZXIgbnVtIGN1YW5kbyBlcyBzdHJpbmdcclxuICAgIGlmIChpc05hTihudW0gLSAwKSkgcmV0dXJuIDA7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICByZXR1cm4gbnVtIC0gMDtcclxufVxyXG5cclxudmFyIGZ1bmNpb25lc0Nvbm9jaWRhczogeyBbayBpbiBzdHJpbmddOiBib29sZWFuIH0gPSB7fVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmaWNhclNvcnRlbyhvcHRzOiB7XHJcbiAgICBjb25maWd1cmFjaW9uU29ydGVvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsXHJcbiAgICByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXpcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIHZhcmlhYmxlQWN0dWFsOiBJZFZhcmlhYmxlXHJcblxyXG59KSB7XHJcbiAgICBjb25zdCByZXNldGVhclNvcnRlbyA9IChvcHRzOiB7IHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMgfSkgPT4ge1xyXG4gICAgICAgIHZhciB7IHJlc3B1ZXN0YXMgfSA9IG9wdHM7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gPSBudWxsO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXSA9IG51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdID0gbnVsbDtcclxuICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnNvcnRlYWRvX21vc3RyYXI/LmZvckVhY2goKG1vc3RyYXIpID0+IHJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdID0gbnVsbCk7XHJcbiAgICAgICAgaWYgKCd2YXJfbGV0cmEnIGluIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAmJiByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwZXIgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciB7IGNvbmZpZ3VyYWNpb25Tb3J0ZW8sIHZhcmlhYmxlQWN0dWFsLCByZXNwdWVzdGFzLCBmb3JQaywgcmVzcHVlc3Rhc1JhaXogfSA9IG9wdHM7XHJcbiAgICB2YXIgaWRFbmMgPSBmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdO1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpO1xyXG4gICAgdmFyIGV4cHJfaW5jb21wbGV0aXR1ZF9mdW4gPSBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvIGFzIHVua25vd24gYXMgbnVtYmVyXS5leHByKTtcclxuICAgIHZhciBmaWx0cm9fZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmZpbHRyb19qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pbyBhcyB1bmtub3duIGFzIG51bWJlcl0uZXhwcik7XHJcbiAgICB2YXIgdW5pZGFkQW5hbGlzaXMgPSBjb25maWd1cmFjaW9uU29ydGVvLnVuaWRhZF9hbmFsaXNpcztcclxuXHJcbiAgICBpZiAoY29uZmlndXJhY2lvblNvcnRlby5wYXJhbWV0cm9zLmluY2x1ZGVzKHZhcmlhYmxlQWN0dWFsKSkge1xyXG4gICAgICAgIHZhciB1YVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKSA9PiB1YS51bmlkYWRfYW5hbGlzaXMgPT0gdW5pZGFkQW5hbGlzaXMpPy5wYWRyZTtcclxuICAgICAgICB2YXIgcGtBZ3JlZ2FkYVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKSA9PiB1YS51bmlkYWRfYW5hbGlzaXMgPT0gdWFQYWRyZSk/LnBrX2FncmVnYWRhXHJcbiAgICAgICAgaWYgKGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIpIHtcclxuICAgICAgICAgICAgaWYgKHVhUGFkcmUgJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV0pIHtcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBwa0FncmVnYWRhUGFkcmUgZXhpc3RlIGUgaW5kaWNhIGxhIHBvc2ljaW9uIGRlbCBwYWRyZVxyXG4gICAgICAgICAgICAgICAgdmFyIHBhZHJlID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV1bTnVtYmVyKHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3BrQWdyZWdhZGFQYWRyZV0pIC0gMV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY3R1YWwgIT0gY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdID0gbGlrZUFyKHBhZHJlW3VuaWRhZEFuYWxpc2lzXSB8fCBbXSkuYXJyYXkoKS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHsgcmVzcHVlc3RhczogcGFkcmUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodWFQYWRyZSAmJiByZXNwdWVzdGFzUmFpeikge1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIHBrQWdyZWdhZGFQYWRyZSBleGlzdGUgZSBpbmRpY2EgbGEgcG9zaWNpb24gZGVsIHBhZHJlXHJcbiAgICAgICAgICAgICAgICB2YXIgcGFkcmUgPSByZXNwdWVzdGFzUmFpejtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjdHVhbCAhPSBjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkcmVbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0gPSBsaWtlQXIocGFkcmVbdW5pZGFkQW5hbGlzaXNdIHx8IFtdKS5hcnJheSgpLmxlbmd0aDsgLy9zaSBhZ3JlZ2EgZGVzZGUgYm90b24gYWdyZWdhclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oeyByZXNwdWVzdGFzOiBwYWRyZSB9KTtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSBwYWRyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGFzIFJlc3B1ZXN0YXNbXVxyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdICE9IDEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0gPSByZXNwdWVzdGFzVUEubGVuZ3RoICsgMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oeyByZXNwdWVzdGFzIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjYW50aWRhZFRvdGFsID0gTnVtYmVyKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0pO1xyXG4gICAgICAgICAgICBpZiAoY2FudGlkYWRUb3RhbCA8IHJlc3B1ZXN0YXNVQS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIC8vIGRvYmxlIGFzaWduYWNpw7NuIHBhcmEgcXVlIGxvIGNhcmd1ZSBlbiByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzVUEuZmlsdGVyKChwLCBpKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5zb21lKChwYXJhbSkgPT4gcFtwYXJhbV0gfHwgaSA8PSBjYW50aWRhZFRvdGFsIC0gMSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSA9IHJlc3B1ZXN0YXNVQVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlIChjYW50aWRhZFRvdGFsID4gcmVzcHVlc3Rhc1VBLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLnB1c2goe30gYXMgUmVzcHVlc3RhcylcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXSA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIocCA9PiBleHByX2luY29tcGxldGl0dWRfZnVuKHApKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciB2YXIkcDAgPSBcIiRwMFwiIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSA9PSAxICYmXHJcbiAgICAgICAgICAgICAgICAhcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gJiZcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5pbmNvbXBsZXRhc10gPT0gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHZhciBzb3J0ZWFyID0gcmVzcHVlc3Rhc1VBLmZpbHRlcihwID0+IGZpbHRyb19mdW4ocCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnRlYXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZvckVhY2goKHBlciwgaSkgPT4gcGVyW3ZhciRwMF0gPSBpICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5vcmRlbi5wdXNoKHsgdmFyaWFibGU6IHZhciRwMCwgb3JkZW46IDEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zb3J0KGNvbXBhcmVGb3JPcmRlcihjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLm1hcChlbGVtID0+ICh7IGNvbHVtbjogZWxlbS52YXJpYWJsZSwgb3JkZXI6IGVsZW0ub3JkZW4gfSkpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2ljaW9uU29ydGVhZGEgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWd1cmFjaW9uU29ydGVvLm1ldG9kbyA9PSAnaGFzaCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOTyBJTVBMRU1FTlRBRE8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLypwb3NpY2lvblNvcnRlYWRhPShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9jb2VmLnJlZHVjZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN1bSwgcGFpcik9PnN1bSArIGRhdG9zVml2aWVuZGEudGVtW3BhaXIudmFyXSAqIHBhaXIuY29lZiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAlIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLmRpdmlzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSAlIHNvcnRlYXIubGVuZ3RoKi9cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV0cmEgPSAnQSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhckxldHJhOiBJZFZhcmlhYmxlID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udmFyX2xldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwZXJzb25hIG9mIHNvcnRlYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5maW5kKChfcGVyLCBpKSA9PiBpID09IHBlcnNvbmFbdmFyJHAwXSBhcyBudW1iZXIgLSAxKSFbdmFyTGV0cmFdID0gbGV0cmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hW3ZhckxldHJhXSA9IGxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0cmEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxldHJhLmNoYXJDb2RlQXQoMCkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGFBbGVhdG9yaWFNaWVtYnJvcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnRhYmxhLm1hcCgobGlzdGEpID0+IGxpc3RhLnNwbGl0KCcnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN0byA9IGlkRW5jICUgMTA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5hVGFibGFBbGVhdG9yaWEgPSByZXN0byA/IHJlc3RvIC0gMSA6IDk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3J0ZWFyLmxlbmd0aCA+IHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNwbGljZSh0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCkgLy9kZXNjYXJ0byBjYW5kaWRhdG9zIHNpIHNvbiBtw6FzIHF1ZSBsbyBxdWUgcGVybWl0ZSBsYSB0YWJsYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxhVGFibGFBbGVhdG9yaWEgPSBzb3J0ZWFyLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYVNlbGVjY2lvbmFkYSA9IHRhYmxhQWxlYXRvcmlhTWllbWJyb3NbZmlsYVRhYmxhQWxlYXRvcmlhXVtjb2x1bW5hVGFibGFBbGVhdG9yaWFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpY2lvblNvcnRlYWRhID0gcmVzcHVlc3Rhc1VBLmZpbmRJbmRleCgocDogUmVzcHVlc3RhcykgPT4gcFt2YXJMZXRyYV0gPT0gbGV0cmFTZWxlY2Npb25hZGEpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gPSBwb3NpY2lvblNvcnRlYWRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc10gPSBzb3J0ZWFyLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1ttb3N0cmFyLnRhcmdldF0gPSByZXNwdWVzdGFzVUFbcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gYXMgbnVtYmVyIC0gMV1bbW9zdHJhci5zb3VyY2VdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSA9IHJlc3B1ZXN0YXNVQS5sZW5ndGggfHwgbnVsbDsgLy9ubyBxdWVyZW1vcyBlbCB2YWxvciAwXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBXSA9ICdvayc7XHJcbiAgICAgICAgICAgIGlmIChjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWxdID0gJ29rJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYmFycmVyU3ViQXJib2wocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBub2RvQWN0dWFsOiBSZXNwdWVzdGFzIHwgUmVzcHVlc3Rhc1tdLCB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMsIGZvclBrQWN1bXVsYWRvOiBGb3JQaykge1xyXG4gICAgdmFyIHVhRGVmID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGVzQXJyYXkgPSBub2RvQWN0dWFsIGluc3RhbmNlb2YgQXJyYXk7XHJcbiAgICB2YXIgY29uanVudG86IFJlc3B1ZXN0YXNbXSA9IGVzQXJyYXkgPyBub2RvQWN0dWFsIGFzIFJlc3B1ZXN0YXNbXSA6IFtub2RvQWN0dWFsIGFzIFJlc3B1ZXN0YXNdO1xyXG4gICAgXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbmp1bnRvLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHJlc3AgPSBjb25qdW50b1tpXTtcclxuICAgICAgICBpZiAoIXJlc3ApIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICB2YXIgbnVtID0gZXNBcnJheSA/IGkgKyAxIDogKGZvclBrQWN1bXVsYWRvW3VhRGVmLnBrX2FncmVnYWRhXSB8fCAxKTtcclxuICAgICAgICB2YXIgaWRGb3JtdWxhcmlvcyA9IE9iamVjdC5rZXlzKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihrZXkgPT4gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1trZXkgYXMgSWRGb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PT0gdW5pZGFkX2FuYWxpc2lzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGlkRm9ybXVsYXJpbyBvZiBpZEZvcm11bGFyaW9zKSB7XHJcbiAgICAgICAgICAgIHZhciBtaUZvclBrOiBGb3JQayA9IHsgLi4uZm9yUGtBY3VtdWxhZG8sIFt1YURlZi5wa19hZ3JlZ2FkYV06IG51bSwgZm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvIGFzIElkRm9ybXVsYXJpbyB8fCBmb3JQa0FjdW11bGFkby5mb3JtdWxhcmlvIH07XHJcbiAgICAgICAgICAgIGlmIChlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKSB7XHJcbiAgICAgICAgICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKHJlc3B1ZXN0YXNSYWl6LCBtaUZvclBrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKSB7XHJcbiAgICAgICAgICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8ocmVzcHVlc3Rhc1JhaXosIG1pRm9yUGspO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgaGlqYXMgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmlsdGVyKHUgPT4gdS5wYWRyZSA9PT0gdW5pZGFkX2FuYWxpc2lzKS5rZXlzKCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHVhSGlqYSBvZiBoaWphcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGhpamFzUmVzcCA9IHJlc3BbdWFIaWphIGFzIElkVW5pZGFkQW5hbGlzaXNdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhpamFzUmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBoaWphc1Jlc3AgYXMgUmVzcHVlc3Rhc1tdLCB1YUhpamEgYXMgSWRVbmlkYWRBbmFsaXNpcywgbWlGb3JQayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoY29tb2RpbmVzLmNhbGN1bGFyQ29tb2RpbmVzKXtcclxuICAgICAgICAgICAgICAgIGNvbW9kaW5lcy5jYWxjdWxhckNvbW9kaW5lcyhtaUZvclBrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlY2FsY3VsYXJUb2RvRWxBcmJvbChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpejogRm9yUGspIHtcclxuICAgIHZhciB1YVBwYWwgPSBPYmplY3Qua2V5cyhlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKGtleSA9PiAhZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1trZXkgYXMgSWRVbmlkYWRBbmFsaXNpc10ucGFkcmUpIGFzIElkVW5pZGFkQW5hbGlzaXM7XHJcbiAgICBcclxuICAgIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6LCByZXNwdWVzdGFzUmFpeiwgdWFQcGFsLCBmb3JQa1JhaXopO1xyXG4gICAgYmFycmVyU3ViQXJib2wocmVzcHVlc3Rhc1JhaXosIHJlc3B1ZXN0YXNSYWl6LCB1YVBwYWwsIGZvclBrUmFpeik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOiB7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106IEluZm9Gb3JtdWxhcmlvIH0sXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLFxyXG4gICAgVUE6IElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBmb3JQazogRm9yUGssXHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhczogUmVzcHVlc3RhcywgLy8gaW5jbHV5ZW4gbGEgZGUgdG9kb3MgbG9zIHBhZHJlcyB5IGFuc2VzdHJvcyxcclxuICAgIHJlc3B1ZXN0YXNQYWRyZTogUmVzcHVlc3RhcyB8IG51bGwsXHJcbiAgICBvcHRzOiBPcGNpb25lc1Jvd1ZhbGlkYXRvcixcclxuKSB7XHJcbiAgICAvLyByZWNvcnJpZW5kIFVBIHBlcnNvbmFzIHkgbWFzY290YXNcclxuICAgIGZvciAodmFyIFVBaW5jbHVpZGEgb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pbmNsdWlkYXMpIHtcclxuICAgICAgICB2YXIgcGtOdWV2YSA9IGRlZk9wZXJhdGl2by5kZWZVQVtVQWluY2x1aWRhXS5waztcclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzW1VBaW5jbHVpZGFdO1xyXG4gICAgICAgIGxpa2VBcihjb25qdW50b1Jlc3B1ZXN0YXNVQSkuZm9yRWFjaCgocmVzcHVlc3Rhc0hpam8sIHZhbG9yUGtPUG9zaWNpb24pID0+IHtcclxuICAgICAgICAgICAgdmFyIHZhbG9yUGsgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkodmFsb3JQa09Qb3NpY2lvbiwgY29uanVudG9SZXNwdWVzdGFzVUEpO1xyXG4gICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcixcclxuICAgICAgICAgICAgICAgIGZvcm11bGFyaW9zLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0hpam8sXHJcbiAgICAgICAgICAgICAgICBVQWluY2x1aWRhLFxyXG4gICAgICAgICAgICAgICAgeyAuLi5mb3JQaywgW3BrTnVldmFdOiB2YWxvclBrIH0sXHJcbiAgICAgICAgICAgICAgICB7IC4uLnJlc3B1ZXN0YXNBdW1lbnRhZGFzLCAuLi5yZXNwdWVzdGFzSGlqbywgW3BrTnVldmFdOiB2YWxvclBrIH0sXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvLyBTMSAsIEExXHJcbiAgICBmb3IgKHZhciBlc0hlcm1hbm8gb2YgW3RydWUsIGZhbHNlXSkge1xyXG4gICAgICAgIGZvciAodmFyIGZvcm11bGFyaW8gb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pZHNGb3IpIGlmICghIWVzSGVybWFubyA9PSAhIWRlZk9wZXJhdGl2by5kZWZGb3JbZm9ybXVsYXJpb10uaGVybWFubykge1xyXG4gICAgICAgICAgICB2YXIgcGxhaW5Gb3JQazogUGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayh7IC4uLmZvclBrLCBmb3JtdWxhcmlvIH0pXHJcbiAgICAgICAgICAgIHZhciBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzID0gMTA7XHJcbiAgICAgICAgICAgIHZhciB2YXJBdXRvSW5ncmVzYWRhcyA9IFtdO1xyXG4gICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaHVib0F1dG9pbmdyZXNvcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa10gPVxyXG4gICAgICAgICAgICAgICAgICAgIHJvd1ZhbGlkYXRvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBtYXJjYUZpbjogJ2ZpbicsIC4uLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB2YXIgeyByZXN1bWVuLCBhdXRvSW5ncmVzYWRhcyB9ID0gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa107XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFyTmFtZTogSWRWYXJpYWJsZTtcclxuICAgICAgICAgICAgICAgIGlmIChhdXRvSW5ncmVzYWRhcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXJOYW1lIGluIGF1dG9JbmdyZXNhZGFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW1iaW8gPSByZXNwdWVzdGFzW3Zhck5hbWVdICE9PSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbWJpbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1t2YXJOYW1lXSA9IGF1dG9JbmdyZXNhZGFzW3Zhck5hbWVdIGFzIFZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLnB1c2godmFyTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodWJvQXV0b2luZ3Jlc29zID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSB3aGlsZSAoaHVib0F1dG9pbmdyZXNvcyAmJiBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzLS0gPiAwKTtcclxuICAgICAgICAgICAgdmFyQXV0b0luZ3Jlc2FkYXMuZm9yRWFjaChfdmFybmFtZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBmZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXS5lc3RhZG9zW192YXJuYW1lIGFzIElkVmFyaWFibGVdID0gJ2FjdHVhbCc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHZhciBCRl92YXJuYW1lID0gJyRCLicgKyBmb3JtdWxhcmlvIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgdmFyIGZvcm1QcmluY2lwYWxGb3JWaXZpZW5kYSA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSk7XHJcbiAgICAgICAgICAgIGlmIChlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiAhZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBoYXkgY29uZmlndXJhY2lvbiBkZSBzb3J0ZW8gcGFyYSBlbCBmb3JtdWxhcmlvICR7Zm9ybVByaW5jaXBhbEZvclZpdmllbmRhfWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdO1xyXG4gICAgICAgICAgICB2YXIgcmVzdW1lbk9yTnVsbCA9XHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgPT0gQkZfdmFybmFtZSA/XHJcbiAgICAgICAgICAgICAgICAgICAgJ29rJ1xyXG4gICAgICAgICAgICAgICAgICAgIDogcmVzdW1lbiA9PSAndmFjaW8nID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJlc3VtZW5cclxuICAgICAgICAgICAgaWYgKGVzSGVybWFubykge1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tCRl92YXJuYW1lXSA9IHJlc3VtZW5Pck51bGwgPT0gJ29rJyA/ICdvaycgOiBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3B1ZXN0YXNQYWRyZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAvL3Jlc3B1ZXN0YXNQYWRyZVtCRl92YXJuYW1lXSA9IHJlc3VtZW5Pck51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkobnVtYmVyT3JTdHJpbmc6IG51bWJlciB8IHN0cmluZywgb2JqZWN0OiBvYmplY3QgfCBhbnlbXSk6IChudW1iZXIgfCBzdHJpbmcpIHtcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZXN0b3kgdXNhbmRvIGlzTmFOIHBhcmEgdmVyIHNpIGVzIG8gbm8gdW4gbsO6bWVybyBzdW1hYmxlXHJcbiAgICBpZiAoaXNOYU4obnVtYmVyT3JTdHJpbmcpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bWJlck9yU3RyaW5nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE51bWJlcihudW1iZXJPclN0cmluZykgKyAob2JqZWN0IGluc3RhbmNlb2YgQXJyYXkgPyAxIDogMCk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYSA9ICh2YWx1ZVBrUmFpejogVmFsdWVQa1JhaXopOiBJZEZvcm11bGFyaW8gPT4ge1xyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW3ZhbHVlUGtSYWl6XS50YXJlYS5tYWluX2Zvcm1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCkge1xyXG4gICAgbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbHRlcih1YURlZiA9PiAhdWFEZWYucGFkcmUpLmZvckVhY2godWFEZWYgPT4ge1xyXG4gICAgICAgIHZhciBlc1ByaW5jaXBhbCA9IChmOiBGb3JtdWxhcmlvLCBlbmM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZm9ybXVsYXJpb1ByaW5jaXBhbCA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZW5jKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm11bGFyaW9QcmluY2lwYWwgPyBmb3JtdWxhcmlvUHJpbmNpcGFsID09IGYuaWRfY2FzaWxsZXJvIDogZi5mb3JtdWxhcmlvX3ByaW5jaXBhbFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9hY8OhIGhheSBxdWUgc2FuaXRpemFyIHBvcnF1ZSBldmlkZW50ZW1lbnRlIHB1ZWRlIHZlbmlyIGNvbiBoYXNocyBkZSBlbmN1ZXN0YXMgc2luIGluZm8gZWwgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1xyXG4gICAgICAgIHZhciBjb25qdW50b1Jlc3B1ZXN0YXNVQSA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbdWFEZWYudW5pZGFkX2FuYWxpc2lzXVxyXG4gICAgICAgIGJlaW5nQXJyYXkoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXMsIHZhbG9yUGtPUG9zaWNpb24pID0+IHtcclxuICAgICAgICAgICAgdmFyIHZhbG9yUGsgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkodmFsb3JQa09Qb3NpY2lvbiwgY29uanVudG9SZXNwdWVzdGFzVUEpO1xyXG4gICAgICAgICAgICBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGYgPT4gZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YURlZi51bmlkYWRfYW5hbGlzaXMgJiYgZXNQcmluY2lwYWwoZi5jYXNpbGxlcm9zLCB2YWxvclBrIGFzIG51bWJlcikpLmZvckVhY2goKF9kZWZGLCBmb3JtdWxhcmlvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm9yUGtSYWl6ID0geyBmb3JtdWxhcmlvLCBbdWFEZWYucGtfYWdyZWdhZGFdOiB2YWxvclBrIH0gYXMgRm9yUGtSYWl6XHJcbiAgICAgICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXMsIGZvclBrUmFpeiwge30pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgZm9ybXVsYXJpb3M6IHsgW25vbWJyZUZvcm11bGFyaW8gaW4gSWRGb3JtdWxhcmlvXTogSW5mb0Zvcm11bGFyaW8gfSxcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcclxuICAgIG9wdHM6IE9wY2lvbmVzUm93VmFsaWRhdG9yXHJcbikge1xyXG4gICAgdmFyIGZvclBrOiBGb3JQayA9IHsgLi4uZm9yUGtSYWl6IH07XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwsIGZvclBrLCByZXNwdWVzdGFzLCBudWxsLCBvcHRzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgb3B0czogT3BjaW9uZXNSb3dWYWxpZGF0b3IpIHtcclxuICAgIHZhciByZXN1bWVuRXN0YWRvOiBSZXN1bWVuRXN0YWRvO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBQYXJ0aWFsXHJcbiAgICB2YXIgbnVldm9zUm93czogeyBbeCBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIElkRmluPiB9ID0ge31cclxuICAgIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShudWV2b3NSb3dzLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCBmb3JQa1JhaXosIHJlc3B1ZXN0YXMsIG9wdHMpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBsaWtlQXIoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpLmZpbHRlcigoX2ZlZWRiYWNrOiBhbnksIHBsYWluUGs6IFBsYWluRm9yUGspID0+IEpTT04ucGFyc2UocGxhaW5QaylbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSAhPSBmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSkucGxhaW4oKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0geyAuLi5kYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgLi4ubnVldm9zUm93cyB9O1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dID0ge1xyXG4gICAgICAgIC4uLmRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXSxcclxuICAgICAgICAuLi5jYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgICAgICAgICAgZm9yUGtSYWl6LFxyXG4gICAgICAgICAgICBudWV2b3NSb3dzLFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzXHJcbiAgICAgICAgKVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBidXNjYXJGb3JtdWxhcmlvc0hpam9zID0gKGlkRm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvIHwgdW5kZWZpbmVkLCBmb3Jtc0ZlZWRiYWNrOiBJZEZvcm11bGFyaW9bXSA9IFtdKSA9PiB7XHJcbiAgICBpZiAoaWRGb3JtdWxhcmlvKSB7XHJcbiAgICAgICAgZm9yIChsZXQgY2FzaWxsZXJvIG9mIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvXS5jYXNpbGxlcm9zLmNhc2lsbGVyb3MpIHtcclxuICAgICAgICAgICAgaWYgKGNhc2lsbGVyby50aXBvYyA9PSAnQkYnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm9ybUhpam8gPSAoY2FzaWxsZXJvLnNhbHRvPy5zdGFydHNXaXRoKCdGOicpID8gY2FzaWxsZXJvLnNhbHRvIDogJ0Y6JyArIGNhc2lsbGVyby5zYWx0bykgYXMgSWRGb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1IaWpvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybXNGZWVkYmFjay5wdXNoKGZvcm1IaWpvKTtcclxuICAgICAgICAgICAgICAgICAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKGZvcm1IaWpvLCBmb3Jtc0ZlZWRiYWNrKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmb3Jtc0ZlZWRiYWNrO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXogPSAodmFsdWVQa1JhaXo6IFZhbHVlUGtSYWl6KSA9PiB7XHJcbiAgICB2YXIgbWFpbkZvcm1Gb3JWYWx1ZVBrUmFpeiA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEodmFsdWVQa1JhaXopO1xyXG4gICAgdmFyIGZvcm1zRmVlZGJhY2sgPSBbbWFpbkZvcm1Gb3JWYWx1ZVBrUmFpel07XHJcbiAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKG1haW5Gb3JtRm9yVmFsdWVQa1JhaXosIGZvcm1zRmVlZGJhY2spO1xyXG4gICAgcmV0dXJuIGZvcm1zRmVlZGJhY2s7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJBY3R1YWxCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyB8IG51bGwsIG51bUVsZW1lbnRvVUE6IG51bWJlciwgbnVtQWN0dWFsOiBudW1iZXIgfCBudWxsLCBmb3JtdWxhcmlvOiBJZEZvcm11bGFyaW8sIHI6IFJlc3B1ZXN0YXMpID0+XHJcbiAgICAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmXHJcbiAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgJiZcclxuICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvXHJcbiAgICAgICAgP1xyXG4gICAgICAgIG51bUVsZW1lbnRvVUEgPT0gY29hbGVzY2UoXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICAgICApXHJcbiAgICAgICAgOlxyXG4gICAgICAgIG51bUFjdHVhbCA9PSBudW1FbGVtZW50b1VBXHJcbiAgICApXHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyRGlzYWJsZWRCRiA9IChcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86IENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvIHwgbnVsbCxcclxuICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvbkhhYmlsaXRhckJvdG9uRm9ybXVsYXJpbyB8IG51bGwsXHJcbiAgICBudW1FbGVtZW50b1VBOiBudW1iZXIsXHJcbiAgICBmb3JtdWxhcmlvOiBJZEZvcm11bGFyaW8sXHJcbiAgICByOiBSZXNwdWVzdGFzXHJcbikgPT4ge1xyXG4gICAgaWYgKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10pIHtcclxuICAgICAgICB2YXIgZXhwcl9oYWJpbGl0YXJfZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10uZXhwcl9oYWJpbGl0YXJfYm90b25fanMpO1xyXG4gICAgICAgIHJldHVybiAhZXhwcl9oYWJpbGl0YXJfZnVuKHJbaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpc11bbnVtRWxlbWVudG9VQSAtIDFdKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgICAgICAoY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbyB8fFxyXG4gICAgICAgICAgICAgICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCkuaW5jbHVkZXMoZm9ybXVsYXJpbylcclxuICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICBudW1FbGVtZW50b1VBICE9IGNvYWxlc2NlKFxyXG4gICAgICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb19tYW51YWxdLFxyXG4gICAgICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICAgICAgICAgKSlcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyB8IG51bGwsIGZvcm11bGFyaW86IElkRm9ybXVsYXJpbykgPT5cclxuICAgICEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8pXHJcblxyXG50eXBlIFJlc3VsdGFkb1Jlc3VtZW4gPSB7XHJcbiAgICByZXN1bWVuRXN0YWRvOiBSZXN1bWVuRXN0YWRvLFxyXG4gICAgcmVzdW1lbkVzdGFkb1N1cDogUmVzdW1lbkVzdGFkbyxcclxuICAgIGNvZFJlYTogbnVtYmVyIHwgbnVsbCxcclxuICAgIGNvZE5vUmVhOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgY29kUmVhU3VwOiBudW1iZXIgfCBudWxsXHJcbiAgICBjb2ROb1JlYVN1cDogc3RyaW5nIHwgbnVsbCxcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKFxyXG4gICAgZm9yUGtSYWl6OiBGb3JQa1JhaXosXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXNcclxuKTogUmVzdWx0YWRvUmVzdW1lbiB7XHJcbiAgICB2YXIgeyBjb2RSZWEsIGVzUmVhIH0gPSBkZWZPcGVyYXRpdm8uZXNSZWFsaXphZGEocmVzcHVlc3RhcylcclxuICAgIHZhciB7IGNvZE5vUmVhLCBlc05vUmVhIH0gPSBkZWZPcGVyYXRpdm8uZXNOb1JlYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHsgY29kUmVhU3VwLCBlc1JlYVN1cCB9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgeyBjb2ROb1JlYVN1cCwgZXNOb1JlYVN1cCB9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWFTdXAocmVzcHVlc3RhcylcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeihmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSk7XHJcbiAgICB2YXIgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV1cclxuICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgIHZhciBmZWVkQmFja1ZpdmllbmRhID0gbGlrZUFyKGZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9yb3csIHBsYWluUGspID0+IHtcclxuICAgICAgICB2YXIgdGllbmVJbmRpdmlkdWFsID0gY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gJiYgISEoY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUpXHJcbiAgICAgICAgdmFyIHRpZW5lQm90b25EZXNIYWJpbGl0YWJsZSA9IGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvIGFzIElkRm9ybXVsYXJpb107XHJcbiAgICAgICAgdmFyIHBrQWdyZWdhZGEgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aWVuZUJvdG9uRGVzSGFiaWxpdGFibGUpIHtcclxuICAgICAgICAgICAgcGtBZ3JlZ2FkYSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSwgX2lkVUEpID0+XHJcbiAgICAgICAgICAgICAgICB1YS51bmlkYWRfYW5hbGlzaXMgPT0gaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW0pTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbyBhcyBJZEZvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpcyk/LnBrX2FncmVnYWRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShwbGFpblBrKVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdID09IGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdICYmXHJcbiAgICAgICAgICAgIGZvcm1zRmVlZGJhY2suaW5jbHVkZXMoSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvKSAmJlxyXG4gICAgICAgICAgICAodGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlID9cclxuICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaylbcGtBZ3JlZ2FkYSBhcyBDYW1wb1BrXSxcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0ZvclBrKEpTT04ucGFyc2UocGxhaW5QayksIHRydWUpLnJlc3B1ZXN0YXNBdW1lbnRhZGFzXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6IHRpZW5lSW5kaXZpZHVhbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgIWNhbGN1bGFyRGlzYWJsZWRCRihcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5wZXJzb25hLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5ob2dhciA/IHJlc3B1ZXN0YXNGb3JQayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvZ2FyOiBKU09OLnBhcnNlKHBsYWluUGspLmhvZ2FyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIEZvclBrKS5yZXNwdWVzdGFzIDoge30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0ZvclBrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTogZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXVsYXJpbzogY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIEZvclBrKS5yZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIDogdHJ1ZSlcclxuICAgIH0pLmFycmF5KCk7XHJcbiAgICB2YXIgcHJpb3JpZGFkZXM6IHsgW2tleSBpbiBSZXN1bWVuRXN0YWRvXTogeyBwcmlvcmlkYWQ6IG51bWJlciwgY2FudGlkYWQ6IG51bWJlciB9IH0gPSB7XHJcbiAgICAgICAgJ25vIHJlYSc6IHsgcHJpb3JpZGFkOiAxLCBjYW50aWRhZDogMCB9LFxyXG4gICAgICAgICdjb24gcHJvYmxlbWFzJzogeyBwcmlvcmlkYWQ6IDIsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ2luY29tcGxldG8nOiB7IHByaW9yaWRhZDogMywgY2FudGlkYWQ6IDAgfSxcclxuICAgICAgICAndmFjaW8nOiB7IHByaW9yaWRhZDogNCwgY2FudGlkYWQ6IDAgfSxcclxuICAgICAgICAnY2l0YSBwYWN0YWRhJzogeyBwcmlvcmlkYWQ6IDUsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ29rJzogeyBwcmlvcmlkYWQ6IDYsIGNhbnRpZGFkOiAwIH1cclxuICAgIH1cclxuICAgIHZhciBtaW4gPSA2O1xyXG4gICAgdmFyIG1pblJlc3VtZW46IFJlc3VtZW5Fc3RhZG8gPSAnb2snO1xyXG4gICAgZm9yICh2YXIgZmVlZGJhY2sgb2YgZmVlZEJhY2tWaXZpZW5kYSkge1xyXG4gICAgICAgIHZhciByZXN1bWVuID0gZmVlZGJhY2sucmVzdW1lbjtcclxuICAgICAgICBwcmlvcmlkYWRlc1tyZXN1bWVuXS5jYW50aWRhZCsrO1xyXG4gICAgICAgIGlmIChwcmlvcmlkYWRlc1tyZXN1bWVuXS5wcmlvcmlkYWQgPCBtaW4pIHtcclxuICAgICAgICAgICAgbWluID0gcHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkO1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuID0gcmVzdW1lbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobWluUmVzdW1lbiA9PSAndmFjaW8nICYmIHByaW9yaWRhZGVzWydvayddLmNhbnRpZGFkIHx8IG1pblJlc3VtZW4gPT0gJ2luY29tcGxldG8nKSB7XHJcbiAgICAgICAgaWYgKGZhbHNlIC8qcmVzcHVlc3Rhc1tzcDFdPT0yICYmIHJlc3B1ZXN0YXNbc3A2XT09bnVsbCovKSB7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW4gPSAnY2l0YSBwYWN0YWRhJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuID0gJ2luY29tcGxldG8nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL1RPRE8gQVJSRUdMQVIgRVNURSBIT1JST1IsIEdFTkVSQUxJWkFSXHJcbiAgICB2YXIgdGFyZWEgPSBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSBhcyB1bmtub3duIGFzIElkRW5jXS50YXJlYS50YXJlYTtcclxuICAgIHZhciByZXN1bWVuRXN0YWRvOiBSZXN1bWVuRXN0YWRvO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG9TdXA6IFJlc3VtZW5Fc3RhZG8gPSAndmFjaW8nO1xyXG4gICAgaWYgKHRhcmVhID09ICdzdXBlJykge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAgPSBlc05vUmVhU3VwID8gJ25vIHJlYScgOiBtaW5SZXN1bWVuXHJcbiAgICAgICAgLy9wYXJhIHF1ZSBjb2xvcmVlIGJpZW4gZW4gbGEgaGRyIGRlbCBETSAobHVlZ28gZW4gYmJkZCBubyBzZSBndWFyZGEpXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IHJlc3VtZW5Fc3RhZG9TdXBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IGVzTm9SZWEgPyAnbm8gcmVhJyA6IG1pblJlc3VtZW5cclxuICAgIH1cclxuICAgIHZhciByZXN1bHRhZG86IFJlc3VsdGFkb1Jlc3VtZW4gPSB7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyxcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwLFxyXG4gICAgICAgIGNvZFJlYSxcclxuICAgICAgICBjb2ROb1JlYSxcclxuICAgICAgICBjb2RSZWFTdXAsXHJcbiAgICAgICAgY29kTm9SZWFTdXBcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRhZG9cclxufVxyXG4iXX0=
1234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBc0NBLG9EQUVDO0lBV0QsMERBWUM7SUFFRCw4REFLQztJQUVELDBEQXFCQztJQU1ELG9EQUVDO0lBRUQsNEZBRUM7SUFzQ0QsMERBRUM7SUFFRCxvREFJQztJQXNCRCw0Q0FJQztJQWdCRCxzQ0FVQztJQUVELHdDQVVDO0lBV0QsMERBS0M7SUFFRCw0QkFFQztJQUVELHNDQUVDO0lBa0NELDhDQUlDO0lBTUQsMENBaURDO0lBRUQsZ0ZBdUNDO0lBRUQsNERBb0VDO0lBRUQsMENBUUM7SUFFRCw0Q0FRQztJQWtCRCxnREFDQztJQXlFRCxnRUFpQ0M7SUFPRCxrRUF1QkM7SUFFRCxzREFHQztJQUVELHNEQUVDO0lBRUQsMERBRUM7SUFFRCxvREFFQztJQUVELDhEQU1DO0lBRUQsMERBTUM7SUFFRCw0REFlQztJQUdELHdDQUtDO0lBb0pELGtEQWdCQztJQUVELGtEQTBCQztJQXNIRCwwQ0FrSUM7SUFvQ0Qsc0RBS0M7SUFFRCx3RUFnRkM7SUFFRCw0REFNQztJQU1ELGdFQWlCQztJQUVELDREQVNDO0lBeUZELDBEQWdHQztJQTE3Q0QscUNBQXVEO0lBRXZELGlEQUFvRztJQUVwRywrQ0FBK0Q7SUFDL0QsMkNBQXNDO0lBRXRDLG1DQXNCaUI7SUFFakIsbURBQWtEO0lBQ2xELHlEQUF1RDtJQUV2RCxJQUFJLFNBQVMsR0FBRyxFQUVmLENBQUE7SUFFRCxTQUFnQixvQkFBb0IsQ0FBQyxpQkFBeUM7UUFDMUUsU0FBUyxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO0lBQ25ELENBQUM7SUFTRCxJQUFJLDJCQUEyQixHQUFnQyxFQUFFLENBQUM7SUFFbEUsU0FBZ0IsdUJBQXVCLENBQUMsUUFBZ0MsRUFBRSxTQUE2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QkFBZ0IsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFBO1lBQ3JELHFFQUFxRTtZQUNyRSxhQUFhLEdBQUcsZ0JBQWdCLENBQUE7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDSixhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtRQUNuRCxDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQXFCO1lBQzlCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsTUFBTTtZQUNOLFFBQVE7WUFDUixTQUFTO1lBQ1QsV0FBVztTQUNkLENBQUE7UUFDRCxPQUFPLFNBQVMsQ0FBQTtJQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRSb3dWYWxpZGF0b3IsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSwgT3BjaW9uZXNSb3dWYWxpZGF0b3IsIEZlZWRiYWNrIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbmltcG9ydCB7IGRhdGUsIGNvbXBhcmVGb3JPcmRlciwgY29hbGVzY2UgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IGV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBFc3RydWN0dXJhLFxyXG4gICAgRm9yUGssIEZvclBrUmFpeixcclxuICAgIElkRmluLCBJZEZvcm11bGFyaW8sIElkUHJlZ3VudGEsIElkVGFyZWEsIElkVmFyaWFibGUsXHJcbiAgICBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgSW5mb0Zvcm11bGFyaW8sXHJcbiAgICBQbGFpbkZvclBrLCBSZXNwdWVzdGFzLCBSZXNwdWVzdGFzUmFpeiwgUmVzdW1lbkVzdGFkbyxcclxuICAgIFZhbG9yLCBWaXNpdGEsXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBVbmlkYWRBbmFsaXNpcyxcclxuICAgIEZvcm11bGFyaW8sXHJcbiAgICBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzLFxyXG4gICAgSWRFbmMsXHJcbiAgICBEZWZPcGVyYXRpdm8sXHJcbiAgICBpdGVyYXRvcixcclxuICAgIENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8sXHJcbiAgICBDYW1wb1BrLFxyXG4gICAgSWRDYXJnYSxcclxuICAgIENhcmdhLFxyXG4gICAgQ2FtcG9Qa1JhaXosXHJcbiAgICBWYWx1ZVBrUmFpelxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRGb3JtUmVuZGVyZXIgfSBmcm9tIFwiLi9yZW5kZXItY29uZmlnXCI7XHJcbmltcG9ydCB7IGFkYXB0YXJFc3RydWN0dXJhIH0gZnJvbSBcIi4vcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5cclxudmFyIGNvbW9kaW5lcyA9IHt9IGFzIHtcclxuICAgIGNhbGN1bGFyQ29tb2RpbmVzPzogKGZvclBrOiBGb3JQaykgPT4gdm9pZFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJDb21vZGluZXMoY2FsY3VsYXJDb21vZGluZXM6IChmb3JQazogRm9yUGspID0+IHZvaWQpIHtcclxuICAgIGNvbW9kaW5lcy5jYWxjdWxhckNvbW9kaW5lcyA9IGNhbGN1bGFyQ29tb2RpbmVzXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIExpc3RlbmVyQ2FtYmlvVmFyaWFibGUgPSAodmFyaWFibGU6IHN0cmluZywgdmFsb3I6IGFueSwgZm9yUGs/OiBGb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXM/OiBSZXNwdWVzdGFzKSA9PiB2b2lkO1xyXG5cclxudHlwZSBTdXNjcmlwY2lvbkNhbWJpb1ZhcmlhYmxlID0ge1xyXG4gICAgbGlzdGVuZXI6IExpc3RlbmVyQ2FtYmlvVmFyaWFibGU7XHJcbiAgICB2YXJpYWJsZXM/OiBTZXQ8c3RyaW5nPjtcclxufTtcclxuXHJcbnZhciBzdXNjcmlwY2lvbmVzQ2FtYmlvVmFyaWFibGU6IFN1c2NyaXBjaW9uQ2FtYmlvVmFyaWFibGVbXSA9IFtdO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN1c2NyaWJpckNhbWJpb1ZhcmlhYmxlKGxpc3RlbmVyOiBMaXN0ZW5lckNhbWJpb1ZhcmlhYmxlLCB2YXJpYWJsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSk6ICgpID0+IHZvaWQge1xyXG4gICAgY29uc3QgdmFyc1NldCA9IHZhcmlhYmxlc1xyXG4gICAgICAgID8gbmV3IFNldChBcnJheS5pc0FycmF5KHZhcmlhYmxlcykgPyB2YXJpYWJsZXMgOiBbdmFyaWFibGVzXSlcclxuICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IHN1YjogU3VzY3JpcGNpb25DYW1iaW9WYXJpYWJsZSA9IHsgbGlzdGVuZXIsIHZhcmlhYmxlczogdmFyc1NldCB9O1xyXG4gICAgc3VzY3JpcGNpb25lc0NhbWJpb1ZhcmlhYmxlLnB1c2goc3ViKTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBzdXNjcmlwY2lvbmVzQ2FtYmlvVmFyaWFibGUuaW5kZXhPZihzdWIpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZXN1c2NyaWJpckNhbWJpb1ZhcmlhYmxlKGxpc3RlbmVyOiBMaXN0ZW5lckNhbWJpb1ZhcmlhYmxlKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZS5maW5kSW5kZXgocyA9PiBzLmxpc3RlbmVyID09PSBsaXN0ZW5lcik7XHJcbiAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbm90aWZpY2FyQ2FtYmlvVmFyaWFibGUodmFyaWFibGU6IHN0cmluZywgdmFsb3I6IGFueSwgZm9yUGs/OiBGb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXM/OiBSZXNwdWVzdGFzKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHsgbGlzdGVuZXIsIHZhcmlhYmxlcyB9ID0gc3VzY3JpcGNpb25lc0NhbWJpb1ZhcmlhYmxlW2ldO1xyXG4gICAgICAgIGlmICh2YXJpYWJsZXMpIHtcclxuICAgICAgICAgICAgbGV0IGFwbGljYSA9IHZhcmlhYmxlcy5oYXModmFyaWFibGUpO1xyXG4gICAgICAgICAgICBpZiAoIWFwbGljYSAmJiByZXNwdWVzdGFzQXVtZW50YWRhcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhcmlhYmxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2IGluIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwbGljYSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWFwbGljYSkgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxpc3RlbmVyKHZhcmlhYmxlLCB2YWxvciwgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZW4gbGlzdGVuZXIgZGUgY2FtYmlvIGRlIHZhcmlhYmxlJywgZXJyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbnZhciBlc3BlY2lhbGVzID0ge30gYXMge1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXM/OiAocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHZvaWRcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8/OiAocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHZvaWRcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXMoY2FsY3VsYXJWYXJpYWJsZXM6IChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOiBGb3JQaykgPT4gdm9pZCkge1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcyA9IGNhbGN1bGFyVmFyaWFibGVzXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm86IChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOiBGb3JQaykgPT4gdm9pZCkge1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvID0gY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2b1xyXG59XHJcblxyXG50eXBlIERhdG9zQnlQYXNzID0gRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7XHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjogeyAgLy8gbm8gc2UgcGVyc2lzdGVcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH1cclxuICAgIGRpcnR5OiBib29sZWFuXHJcbn07XHJcblxyXG52YXIgZGF0b3NCeVBhc3MgPSB7fSBhcyBEYXRvc0J5UGFzc1xyXG5cclxuZXhwb3J0IGNvbnN0IGhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MgPSAoKSA9PiBkYXRvc0J5UGFzcyAmJiBPYmplY3Qua2V5cyhkYXRvc0J5UGFzcykubGVuZ3RoID4gMFxyXG5cclxuaW50ZXJmYWNlIFJlY3Qge1xyXG4gICAgdG9wOiBudW1iZXI7XHJcbiAgICBsZWZ0OiBudW1iZXI7XHJcbiAgICB3aWR0aDogbnVtYmVyO1xyXG4gICAgaGVpZ2h0OiBudW1iZXI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFJlY3QoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBSZWN0IHtcclxuICAgIHZhciByZWN0OiBSZWN0ID0geyB0b3A6IDAsIGxlZnQ6IDAsIHdpZHRoOiBlbGVtZW50Lm9mZnNldFdpZHRoLCBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IH07XHJcbiAgICB2YXIgY3VycmVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gZWxlbWVudDtcclxuICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHtcclxuICAgICAgICByZWN0LnRvcCArPSBjdXJyZW50Lm9mZnNldFRvcDtcclxuICAgICAgICByZWN0LmxlZnQgKz0gY3VycmVudC5vZmZzZXRMZWZ0O1xyXG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm9mZnNldFBhcmVudCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVjdDtcclxufVxyXG5cclxuLy9AdHMtaWdub3JlIGFycmFuY2EgZW4gYmxhbmNvXHJcbnZhciBlc3RydWN0dXJhOiBFc3RydWN0dXJhID0gbnVsbCBhcyBFc3RydWN0dXJhO1xyXG5cclxubGV0IHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubzogKGRicHA6IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzKSA9PiBQcm9taXNlPGFueT4gPSAoKSA9PiB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BlcnNpc3RpckRhdG9zQnlQYXNzIFNJTiBERUZJTklSJylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzKHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuOiB0eXBlb2YgcGVyc2lzdGlyRGF0b3NCeVBhc3MpIHtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubyA9IHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGJwcDogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpIHtcclxuICAgIGF3YWl0IGdldEZvcm1SZW5kZXJlcigpLnBlcnNpc3RpckRhdG9zKGRicHApO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBmYWxzZVxyXG4gICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXJFbmN1ZXN0YSA9IChpZENhcmdhOiBJZENhcmdhLCBjYWxsQmFjazogKGZvclBrUmFpejogRm9yUGtSYWl6KSA9PiB2b2lkKSA9PiB7XHJcbiAgICBjb25zdCBORVhUX0FVVE9fVkFMVUVfUEtfUkFJWiA9IGdldEZvcm1SZW5kZXJlcigpLmdldFVsdGltb1ZhbG9yUGtSYWl6KCkgfHwgJy0xJztcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBnZXRGb3JtUmVuZGVyZXIoKS5zZXRVbHRpbW9WYWxvclBrUmFpeigoTnVtYmVyKE5FWFRfQVVUT19WQUxVRV9QS19SQUlaKSAtIDEpLnRvU3RyaW5nKCkpO1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVogYXMgdW5rbm93biBhcyBJZEVuY10gPSB7fSBhcyBSZXNwdWVzdGFzUmFpejtcclxuICAgIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW05FWFRfQVVUT19WQUxVRV9QS19SQUlaIGFzIHVua25vd24gYXMgSWRFbmNdID0ge1xyXG4gICAgICAgIC4uLmVzdHJ1Y3R1cmEuZGVmYXVsdEluZm9ybWFjaW9uSGRyLFxyXG4gICAgICAgIHRlbTogeyAuLi5lc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkci50ZW0gfVxyXG4gICAgfTtcclxuICAgIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW05FWFRfQVVUT19WQUxVRV9QS19SQUlaIGFzIHVua25vd24gYXMgSWRFbmNdLnRlbS5jYXJnYSA9IGlkQ2FyZ2E7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpLnRoZW4oXHJcbiAgICAgICAgKCkgPT4gY2FsbEJhY2soe1xyXG4gICAgICAgICAgICBmb3JtdWxhcmlvOiBlc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkci50YXJlYS5tYWluX2Zvcm0sXHJcbiAgICAgICAgICAgIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOiBOdW1iZXIoTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVopIGFzIFZhbHVlUGtSYWl6XHJcbiAgICAgICAgfSBhcyBGb3JQa1JhaXopXHJcbiAgICApLy9ubyBxdWl0YXIgZWwgY2FzdGVvIHBvcnF1ZSB2aWVuZSBjb21vIHRleHRvIHkgbmVjZXNpdG8gcXVlIHNlYSBuw7ptZXJvXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RW5jb2xhckJhY2t1cChcclxuICAgIGVuY29sYXJCYWNrdXBGdW46ICh0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXMpID0+IHZvaWRcclxuKSB7XHJcbiAgICBlbmNvbGFyQmFja3VwID0gZW5jb2xhckJhY2t1cEZ1blxyXG59XHJcblxyXG5sZXQgZW5jb2xhckJhY2t1cDogKHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZvclBrUmFpejogRm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejogUmVzcHVlc3RhcykgPT4gdm9pZCA9ICgpID0+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIlNJTiBFU1BFQ0lGSUNBUiBlbmNvbGFyQmFja3VwXCIpXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgaW50ZW50YXJCYWNrdXAgPSAoZm9yUGs6IEZvclBrKSA9PiB7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpXHJcbiAgICB2YXIgdG9rZW4gPSBkYXRvc0J5UGFzcy50b2tlbjtcclxuICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgIGVuY29sYXJCYWNrdXAodG9rZW4sIGZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm5vIGhheSB0b2tlbiwgbm8gc2UgcHVkbyBoYWNlciBlbCBiYWNrdXBcIilcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVzdHJ1Y3R1cmEoZXN0cnVjdHVyYUFDYXJnYXI6IEVzdHJ1Y3R1cmEpIHtcclxuICAgIGVzdHJ1Y3R1cmEgPSBhZGFwdGFyRXN0cnVjdHVyYShlc3RydWN0dXJhQUNhcmdhcik7XHJcbiAgICBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCh1YSA9PiAhIXVhLnByaW5jaXBhbCk/LnVuaWRhZF9hbmFsaXNpcyFcclxuICAgIGRlZk9wZXJhdGl2by5kZWZGb3IgPSBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykubWFwKGYgPT4gKHsgaGVybWFubzogZi5jYXNpbGxlcm9zLmhlcm1hbm8gfSkpLnBsYWluKClcclxuICAgIGRlZk9wZXJhdGl2by5kZWZVQSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5tYXAoKHVhRGVmLCB1YSkgPT4gKHtcclxuICAgICAgICBwazogdWFEZWYucGtfYWdyZWdhZGEgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICBpbmNsdWlkYXM6IGxpa2VBcih1YURlZi5oaWphcykua2V5cygpLFxyXG4gICAgICAgIGlkc0ZvcjogbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmID0+IGYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWEpLmtleXMoKVxyXG4gICAgfSkpLnBsYWluKClcclxuICAgIHJldHVybiBlc3RydWN0dXJhO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RGF0b3NCeVBhc3MoXHJcbiAgICBudWV2b1BhcXVldGU6IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzICYgeyBkaXJ0eT86IGJvb2xlYW4gfVxyXG4pIHtcclxuICAgIGRhdG9zQnlQYXNzID0ge1xyXG4gICAgICAgIGRpcnR5OiBmYWxzZSxcclxuICAgICAgICAuLi5udWV2b1BhcXVldGUsXHJcbiAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHt9IGFzIERhdG9zQnlQYXNzW1wiZmVlZGJhY2tSb3dWYWxpZGF0b3JcIl1cclxuICAgIH07XHJcblxyXG4gICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXREYXRvc0J5UGFzcyA9ICgpID0+IGRhdG9zQnlQYXNzXHJcblxyXG5mdW5jdGlvbiBvYmpldG9WYWNpbyhvOiBvYmplY3QpIHtcclxuICAgIGZvciAodmFyIGsgaW4gbykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKSB7XHJcbiAgICBpZiAoIWRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yIHx8IG9iamV0b1ZhY2lvKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKSkge1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3I7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJ0eSgpIHtcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5kaXJ0eVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXN0cnVjdHVyYSgpIHtcclxuICAgIHJldHVybiBlc3RydWN0dXJhO1xyXG59XHJcblxyXG50eXBlIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcyA9IEhUTUxEaXZFbGVtZW50IHwgSFRNTEJ1dHRvbkVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxudHlwZSBEaXJlY3RGdW5jdGlvbjxULCBSZXN1bHQ+ID0gKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzLCBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBlbGVtZW50bzogVCxcclxuICAgIGZlZWRiYWNrQWxsOiB7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9LFxyXG4gICAgZXN0cnVjdHVyYTogRXN0cnVjdHVyYVxyXG4pID0+IFJlc3VsdFxyXG5cclxudHlwZSBSZWdpc3Ryb0VsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0ge1xyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgYW55PixcclxuICAgIHZhcmlhYmxlPzogSWRWYXJpYWJsZSxcclxuICAgIGZvclBrPzogRm9yUGssXHJcbn0gJiAoe1xyXG4gICAgcHJvcDoga2V5b2YgVFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBUW2tleW9mIFRdPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGxhIHByb3AoZXJ0eSkgZGVsIGVsZW1lbnRvXHJcbn0gfCB7XHJcbiAgICBhdHRyOiBzdHJpbmdcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGVsIHZhbG9yIGRlbCBhdHRyKGlidXRvKVxyXG59IHwge1xyXG4gICAgc3R5bGU6IGtleW9mIENTU1N0eWxlRGVjbGFyYXRpb25cclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGVsIHZhbG9yIGRlbCBzdHlsZVxyXG59IHwge1xyXG4gICAgZGlyZWN0OiB0cnVlXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHZvaWQ+IC8vIExhIGZ1bmNpw7NuIHZhIGEgdG9jYXIgZGlyZWN0YW1lbnRlIGVsIGVsZW1lbnRvIHkgaGFjZXIgdG9kbyBsbyBxdWUgdGVuZ2EgcXVlIGhhY2VyXHJcbn0pXHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG9zPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0geyBbaWQ6IHN0cmluZ106IFJlZ2lzdHJvRWxlbWVudG88VD4gJiB7IGVsZW1lbnRvPzogVCB9IH07XHJcblxyXG52YXIgcmVnaXN0cm9FbGVtZW50b3NHbG9iYWwgPSB7fSBhcyBSZWdpc3Ryb0VsZW1lbnRvczxFbGVtZW50b3NSZWdpc3RyYWJsZXM+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdHJhckVsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+KGRlZjogUmVnaXN0cm9FbGVtZW50bzxUPikge1xyXG4gICAgLy8gQHRzLWlnbm9yZSBTw60sIHBvZHLDrWEgc2VyIHF1ZSBsb3MgdGlwb3MgZGUgVCBzZWFuIGRpc3RpbnRvcywgcGVybyB2YW4gYSBzZXIgY29oZXJlbnRlc1xyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zOiBSZWdpc3Ryb0VsZW1lbnRvczxUPiA9IHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsO1xyXG4gICAgcmVnaXN0cm9FbGVtZW50b3NbZGVmLmlkXSA9IGRlZjtcclxufVxyXG5cclxudHlwZSBSZXNwdWVzdGFzRm9yUGtDb211biA9IHsgcmVzcHVlc3RhczogUmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6IFVuaWRhZEFuYWxpc2lzIH1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6IEZvclBrKTogUmVzcHVlc3Rhc0ZvclBrQ29tdW5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazogRm9yUGssIGNvbkF1bWVudGFkYXM6IHRydWUsIGFncmVnYXJTaUZhbHRhPzogYm9vbGVhbik6IFJlc3B1ZXN0YXNGb3JQa0NvbXVuICYgeyByZXNwdWVzdGFzQXVtZW50YWRhczogUmVzcHVlc3RhcyB9XHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6IEZvclBrLCBjb25BdW1lbnRhZGFzPzogYm9vbGVhbiwgYWdyZWdhclNpRmFsdGE/OiBib29sZWFuKTogUmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzPzogUmVzcHVlc3RhcyB9IHtcclxuICAgIHZhciByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHt9IGFzIFJlc3B1ZXN0YXM7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGxvIHF1ZSBzb2JyYXIgZGUgcmVzcHVlc3RhcyBubyBtZSBpbXBvcnRhLi4uXHJcbiAgICB2YXIgcmVzcHVlc3RhcyA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMgYXMgUmVzcHVlc3RhcztcclxuICAgIHZhciByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXo7XHJcbiAgICB2YXIgZm9yUGtSYWl6OiBGb3JQaztcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMgfCB1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgZm9yUGtBcGlsYWRhID0gZm9yUGs7XHJcbiAgICB2YXIgcGlsYTogW3VuaWRhZF9hbmFsaXNpczogSWRVbmlkYWRBbmFsaXNpcywgdWFEZWY6IFVuaWRhZEFuYWxpc2lzLCBmb3JQazogRm9yUGtdW10gPSBbXTtcclxuICAgIHdoaWxlICh1bmlkYWRfYW5hbGlzaXMpIHtcclxuICAgICAgICB2YXIgdWFEZWY6IFVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgICAgIHBpbGEucHVzaChbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSk7XHJcbiAgICAgICAgZm9yUGtBcGlsYWRhID0geyAuLi5mb3JQa0FwaWxhZGEgfTtcclxuICAgICAgICBkZWxldGUgZm9yUGtBcGlsYWRhW3VhRGVmLnBrX2FncmVnYWRhXVxyXG4gICAgICAgIHVuaWRhZF9hbmFsaXNpcyA9IHVhRGVmLnBhZHJlXHJcbiAgICB9XHJcbiAgICB3aGlsZSAocGlsYS5sZW5ndGgpIHtcclxuICAgICAgICBbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSA9IHBpbGEucG9wKCkhXHJcbiAgICAgICAgdmFyIHZhbG9yUGtPUG9zaWNpb24gPSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgICAgIGlmICh2YWxvclBrT1Bvc2ljaW9uID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhbHRhIHVuIHZhbG9yIHBhcmEgJHtKU09OLnN0cmluZ2lmeSh1YURlZi5wa19hZ3JlZ2FkYSl9YClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzcHVlc3Rhc0FudGVyaW9yID0gcmVzcHVlc3RhcztcclxuICAgICAgICBsZXQgcG9zaWNpb24gPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSA/IHZhbG9yUGtPUG9zaWNpb24gLSAxIDogdmFsb3JQa09Qb3NpY2lvblxyXG4gICAgICAgIHJlc3B1ZXN0YXMgPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dO1xyXG4gICAgICAgIGlmIChyZXNwdWVzdGFzID09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGFncmVnYXJTaUZhbHRhKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0ge30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0FudGVyaW9yW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dID0gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBleGlzdGUgZWwgZWxlbWVudG8gJyR7cG9zaWNpb259JyBlbiBsYSB1bmlkYWRfYW5hbGlzaXMgJyR7dW5pZGFkX2FuYWxpc2lzfSdgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JQa1JhaXogfHw9IGZvclBrQXBpbGFkYTtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFPDqSBxdWUgZXMgcmHDrXogcG9yIGPDs21vIGVzdG95IHJldm9sdmllbmRvIGxhIHBpbGFcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiB8fD0gcmVzcHVlc3RhcztcclxuICAgICAgICBpZiAoY29uQXVtZW50YWRhcykge1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHsgLi4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXMsIFt1YURlZi5wa19hZ3JlZ2FkYV06IHZhbG9yUGtPUG9zaWNpb24gfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBTw6kgcXVlIGxhIHBpbGEgdGllbmUgYWwgbWVub3MgdW4gZWxlbWVudG8gcG9yIGxvIHRhbnRvIGVzdG8gZXN0w6EgbGxlbm8gc2VndXJvLiBcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczogdWFEZWZcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtSYWl6OiBGb3JQa1JhaXopIHtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzIH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGtSYWl6LCB0cnVlKVxyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICB2YXIgcGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayhmb3JQa1JhaXopXHJcbiAgICB2YXIgcm93VmFsaWRhdG9yID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa107XHJcbiAgICBmb3IgKHZhciBpZCBpbiByZWdpc3Ryb0VsZW1lbnRvcykge1xyXG4gICAgICAgIHZhciBkZWYgPSByZWdpc3Ryb0VsZW1lbnRvc1tpZF07XHJcbiAgICAgICAgaWYgKGRlZi5lbGVtZW50bykge1xyXG4gICAgICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoZGVmLmVsZW1lbnRvKSkge1xyXG4gICAgICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGVmLmVsZW1lbnRvKSB7XHJcbiAgICAgICAgICAgIGRlZi5lbGVtZW50byA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlZi5pZCkgYXMgRWxlbWVudG9zUmVnaXN0cmFibGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWRlZi5lbGVtZW50bykge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQlVTQ0FORE8gZWwgZWxlbWVudG8gcmVnaXN0cmFkbyAnLGlkLCdubyBlc3TDoSBlbiBlbCBET00nKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmLmZ1bihyZXNwdWVzdGFzQXVtZW50YWRhcywgcm93VmFsaWRhdG9yLCBkZWYuZWxlbWVudG8sIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhKTtcclxuICAgICAgICBpZiAoJ3Byb3AnIGluIGRlZikge1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50bywgZGVmLnByb3AsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoJ2F0dHInIGluIGRlZikge1xyXG4gICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGVmLmVsZW1lbnRvLCBkZWYuYXR0ciwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgnc3R5bGUnIGluIGRlZikge1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50by5zdHlsZSwgZGVmLnN0eWxlLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocm93VmFsaWRhdG9yLmFjdHVhbCkge1xyXG4gICAgICAgIHZhciB7IHRvcCwgYm90dG9tIH0gPSBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8ocm93VmFsaWRhdG9yLmFjdHVhbCk7XHJcbiAgICAgICAgaWYgKHRvcCAhPSBudWxsICYmIGJvdHRvbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYXJyaWJhJykuZWxUb3BWaXNpYmlsaXphciA9IHRvcDtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hYmFqbycpLmVsQm90dG9tVmlzaWJpbGl6YXIgPSBib3R0b207XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKGlkVmFyaWFibGU6IElkVmFyaWFibGUgfCBJZEZpbikge1xyXG4gICAgdmFyIGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkVmFyaWFibGUgPT0gJ2ZpbicgPyBgYm90b24tdm9sdmVyLTJgIDogYHZhci0ke2lkVmFyaWFibGV9YClcclxuICAgICAgICB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlKTtcclxuICAgIHZhciBlbGVtZW50byA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgIHZhciBNQVJHRU5fU0NST0xMID0gNjQ7XHJcbiAgICB2YXIgYWx0b1BhbnRhbGxhID0gd2luZG93LmlubmVySGVpZ2h0ICogMC43IC0gTUFSR0VOX1NDUk9MTDtcclxuICAgIHZhciBlbGVtZW50b0VudGVybzogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgZW50YXIgZW50ZXJvIGVuIHBhbnRhbGxhLCBkZWZpbmUgZWwgYm90dG9tXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvRW50ZXJvOiBSZWN0IHwgbnVsbCA9IG51bGw7XHJcbiAgICB2YXIgZWxlbWVudG9TdXBlcmlvcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgbW9zdHJhcnNlIGRlc2RlIGFycmliYSBhdW5xdWUgbm8gZW50cmUgZW50ZXJvLCBkZWZpbmUgZWwgdG9wXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvU3VwZXJpb3I6IFJlY3R8IG51bGwgPSBudWxsO1xyXG4gICAgd2hpbGUgKGVsZW1lbnRvICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ZhcmlhYmxlJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnbXVsdGlwbGUnKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmVndW50YScpXHJcbiAgICAgICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2Nvbmp1bnRvcHJlZ3VudGFzJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnc2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnYm90b25mb3JtdWxhcmlvJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnYm90b24tdm9sdmVyJylcclxuICAgICAgICAgICAgKSAmJiBlbGVtZW50by5vZmZzZXRIZWlnaHQgPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50b1N1cGVyaW9yID09IG51bGwgJiYgZWxlbWVudG8uY2xpZW50SGVpZ2h0IDwgYWx0b1BhbnRhbGxhKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50b0VudGVybyA9IGVsZW1lbnRvO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRvRW50ZXJvID09IG51bGwpIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICBpZiAocmVjdEVsZW1lbnRvRW50ZXJvID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm9cclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBnZXRSZWN0KGVsZW1lbnRvRW50ZXJvISlcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3RFbGVtZW50b0VudGVybztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZ2V0UmVjdChlbGVtZW50byk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCArIHJlY3RFbGVtZW50b0VudGVyby5oZWlnaHQgLSByZWN0LnRvcCA8IGFsdG9QYW50YWxsYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3Q7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50byA9IGVsZW1lbnRvPy5wYXJlbnRFbGVtZW50ID8/IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoZWxlbWVudG9TdXBlcmlvciA9PSBudWxsKSB7XHJcbiAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdDoge1xyXG4gICAgICAgIGVsZW1lbnRvSW5wdXRWYXJpYWJsZT86IEhUTUxFbGVtZW50IHwgbnVsbFxyXG4gICAgICAgIHRvcD86IG51bWJlciB8IG51bGxcclxuICAgICAgICBib3R0b20/OiBudW1iZXIgfCBudWxsXHJcbiAgICAgICAgZW5mb2NhZG8/OiBib29sZWFuIHwgbnVsbFxyXG4gICAgICAgIGRlc2VuZm9xdWU/OiBzdHJpbmcgfCBudWxsXHJcbiAgICB9ID0ge307XHJcbiAgICBpZiAoZWxlbWVudG9FbnRlcm8gIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChyZWN0RWxlbWVudG9FbnRlcm8gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBnZXRSZWN0KGVsZW1lbnRvRW50ZXJvKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuZWxlbWVudG9JbnB1dFZhcmlhYmxlID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgICAgIHZhciB0b3AgPSAocmVjdEVsZW1lbnRvU3VwZXJpb3IgPz8gcmVjdEVsZW1lbnRvRW50ZXJvKS50b3AgLSBNQVJHRU5fU0NST0xMO1xyXG4gICAgICAgIHJlc3VsdC50b3AgPSB0b3A7XHJcbiAgICAgICAgcmVzdWx0LmJvdHRvbSA9IHJlY3RFbGVtZW50b0VudGVyby50b3AgKyByZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0O1xyXG4gICAgICAgIGlmICh0b3AgPCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlID0gJ2FycmliYSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyBhbHRvUGFudGFsbGEpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWUgPSAnYWJham8nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lbmZvY2FkbyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0QXR0ckRpc3RpbnRvPE4gZXh0ZW5kcyBzdHJpbmc+KFxyXG4gICAgb2JqZXRvOiB7IHNldEF0dHJpYnV0ZTogKG5hbWU6IE4sIHZhbG9yOiBzdHJpbmcpID0+IHZvaWQsIGdldEF0dHJpYnV0ZTogKG5hbWU6IE4pID0+IHN0cmluZyB8IG51bGwgfSxcclxuICAgIG5hbWU6IE4sXHJcbiAgICB2YWxvcjogc3RyaW5nXHJcbikge1xyXG4gICAgaWYgKG9iamV0byAmJiBvYmpldG8uZ2V0QXR0cmlidXRlKG5hbWUpICE9IHZhbG9yKSB7XHJcbiAgICAgICAgb2JqZXRvLnNldEF0dHJpYnV0ZShuYW1lLCB2YWxvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRWYWxvckRpc3RpbnRvPFQgZXh0ZW5kcyB7fSwgTiBleHRlbmRzIGtleW9mIFQ+KFxyXG4gICAgb2JqZXRvOiBULFxyXG4gICAgbmFtZTogTixcclxuICAgIHZhbG9yOiBUW05dXHJcbikge1xyXG4gICAgaWYgKG9iamV0b1tuYW1lXSAhPSB2YWxvcikge1xyXG4gICAgICAgIG9iamV0b1tuYW1lXSA9IHZhbG9yO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQazogRm9yUGspIHtcclxuICAgIGlmIChlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKSB7XHJcbiAgICAgICAgdmFyIHsgcmVzcHVlc3RhcyB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrKTtcclxuICAgICAgICBsaWtlQXIoZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8pXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChjb25maWdCb3RvbkZvcm11bGFyaW8sIGlkRm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3BVQSA9IHJlc3B1ZXN0YXNbZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9baWRGb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BVQSAhPSBudWxsICYmIHJlc3BVQSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWdCb3RvbkZvcm11bGFyaW8uaGFiaWxpdGFyX2FncmVnYXJfbGlzdG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1snJEIuJyArIGlkRm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXSA9ICdvayc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25faWRfcHJlZ3VudGEoX3BheWxvYWQ6IHsgcHJlZ3VudGE6IElkUHJlZ3VudGEsIGZvclBrOiBGb3JQayB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9TT0xPX1RSQUVSX1NUQVRVUycpXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPID0gU3ltYm9sKCdOT19DQU1CSUFSX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8nKVxyXG5cclxuZnVuY3Rpb24gcmVmcmVzY2FyTWFyY2FEaXJ0eSgpIHtcclxuICAgIHZhciBib3RvbkdyYWJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2F2ZS1idXR0b25cIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICBpZiAoYm90b25HcmFiYXIpIHtcclxuICAgICAgICBpZiAoYm90b25HcmFiYXIuZGlzYWJsZWQgIT09ICFkYXRvc0J5UGFzcy5kaXJ0eSkge1xyXG4gICAgICAgICAgICBib3RvbkdyYWJhci5kaXNhYmxlZCA9ICFkYXRvc0J5UGFzcy5kaXJ0eTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFwbGljYXJDYW1iaW9VbmFSZXNwdWVzdGEoXHJcbiAgICBmb3JQazogRm9yUGssXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLFxyXG4gICAgdmFyaWFibGU6IElkVmFyaWFibGUsXHJcbiAgICByZXNwdWVzdGFJbnB1dDogVmFsb3JcclxuKSB7XHJcbiAgICB2YXIgcmVzcHVlc3RhID0gcmVzcHVlc3RhSW5wdXQ7XHJcbiAgICB2YXIgdmFsb3JBbnRlcmlvciA9IHJlc3B1ZXN0YXNbdmFyaWFibGVdO1xyXG4gICAgaWYgKHJlc3B1ZXN0YSA9PT0gJycpIHtcclxuICAgICAgICByZXNwdWVzdGEgPSBudWxsO1xyXG4gICAgfSBlbHNlIGlmIChlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IudmFyaWFibGVzW3ZhcmlhYmxlXT8udGlwbyA9PSAnbnVtZXJvJykge1xyXG4gICAgICAgIGlmIChyZXNwdWVzdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXNwdWVzdGEgPSBOdW1iZXIocmVzcHVlc3RhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBzaSBlcyB1biBmYWxzeSAoMCA9PSBmYWxzZSkgdGVuZ28gcXVlIGNvbXBhcmFyIGNvbiAhPT1cclxuICAgIHZhciByZWNlbnRNb2RpZmllZCA9IHJlc3B1ZXN0YSA/IHZhbG9yQW50ZXJpb3IgIT0gcmVzcHVlc3RhIDogdmFsb3JBbnRlcmlvciAhPT0gcmVzcHVlc3RhO1xyXG4gICAgaWYgKHJlY2VudE1vZGlmaWVkKSB7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1t2YXJpYWJsZV0gPSByZXNwdWVzdGEgPz8gbnVsbDsgLy8gY2FtYmlvIHVuZGVmaW5lZCBwb3IgbnVsbFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgcmVjZW50TW9kaWZpZWQsIHZhbG9yQW50ZXJpb3IsIHJlc3B1ZXN0YVByb2Nlc2FkYTogcmVzcHVlc3RhIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlZnJlc2NhcllSZWNhbGN1bGFyQnlwYXNzKFxyXG4gICAgZm9yUGs6IEZvclBrLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcclxuICAgIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeixcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LFxyXG4gICAgdmFyaWFibGVzTW9kaWZpY2FkYXM6IElkVmFyaWFibGVbXSxcclxuICAgIHJlY2VudE1vZGlmaWVkOiBib29sZWFuXHJcbikge1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgaWYgKGVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvICYmICFkYXRvc0J5UGFzcz8uc29sb0xlY3R1cmEpIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhcmlhYmxlc01vZGlmaWNhZGFzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZlcmlmaWNhclNvcnRlbyh7XHJcbiAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvOiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pXSxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlQWN0dWFsOiB2YXJpYWJsZXNNb2RpZmljYWRhc1tpXSxcclxuICAgICAgICAgICAgICAgIGZvclBrOiBmb3JQa1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHJlY2VudE1vZGlmaWVkO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHJlY2VudE1vZGlmaWVkO1xyXG4gICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB7IGF1dG9JbmdyZXNvOiB0cnVlIH0pO1xyXG4gICAgdmFyIGZlZWRiYWNrUm93ID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbdG9QbGFpbkZvclBrKGZvclBrKV07XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrKTtcclxuICAgIGNvbnN0IHsgcmVzcHVlc3Rhc0F1bWVudGFkYXMgfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSk7XHJcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhcmlhYmxlc01vZGlmaWNhZGFzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgdmFyIHYgPSB2YXJpYWJsZXNNb2RpZmljYWRhc1tqXTtcclxuICAgICAgICBub3RpZmljYXJDYW1iaW9WYXJpYWJsZSh2IGFzIHN0cmluZywgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdl0sIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcyk7XHJcbiAgICB9XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbiAgICByZXR1cm4gZmVlZGJhY2tSb3c7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fcmVnaXN0cmFyX3Jlc3B1ZXN0YShwYXlsb2FkOiB7XHJcbiAgICBmb3JQazogRm9yUGssXHJcbiAgICB2YXJpYWJsZTogSWRWYXJpYWJsZSB8IHR5cGVvZiBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyxcclxuICAgIHJlc3B1ZXN0YTogVmFsb3IgfCB0eXBlb2YgTk9fQ0FNQklBUl9fVkVSSUZJQ0FSX1NJX0VTX05FQ0VTQVJJT1xyXG59LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgdG9rZW4gPSAnQVZFUklHVUFSIFRPRE8nO1xyXG4gICAgbGV0IHsgZm9yUGssIHJlc3B1ZXN0YSwgdmFyaWFibGUgfSA9IHBheWxvYWQ7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgdmFyIHVuaWRhZF9hbmFsaXNpcyA9IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb107XHJcbiAgICB2YXIgcmVjZW50TW9kaWZpZWQgPSBmYWxzZTtcclxuICAgIHZhciB2YWxvckFudGVyaW9yID0gdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgPyByZXNwdWVzdGFzW3ZhcmlhYmxlXSA6IG51bGw7XHJcbiAgICB2YXIgZmVlZGJhY2tSb3cgPSBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvclt0b1BsYWluRm9yUGsoZm9yUGspXTtcclxuICAgIHZhciBzaWd1aWVudGVWYXJpYWJsZTogSWRWYXJpYWJsZSB8IElkRmluIHwgbnVsbCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAocmVzcHVlc3RhICE9PSBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPICYmIHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTKSB7XHJcbiAgICAgICAgdmFyIHJlc0NhbWJpbyA9IGFwbGljYXJDYW1iaW9VbmFSZXNwdWVzdGEoZm9yUGssIHJlc3B1ZXN0YXMsIHZhcmlhYmxlLCByZXNwdWVzdGEpO1xyXG4gICAgICAgIHJlY2VudE1vZGlmaWVkID0gcmVzQ2FtYmlvLnJlY2VudE1vZGlmaWVkO1xyXG4gICAgICAgIGlmICghcmVjZW50TW9kaWZpZWQpIHtcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSBmZWVkYmFja1Jvdy5mZWVkYmFja1t2YXJpYWJsZV0/LnNpZ3VpZW50ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhcmlhYmxlICE9IE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTICYmIChyZWNlbnRNb2RpZmllZCB8fCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPICYmIGZlZWRiYWNrUm93LmF1dG9JbmdyZXNhZGFzPy5bdmFyaWFibGVdKSkge1xyXG4gICAgICAgIGZlZWRiYWNrUm93ID0gcmVmcmVzY2FyWVJlY2FsY3VsYXJCeXBhc3MoZm9yUGssIHJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIFt2YXJpYWJsZV0sIHJlY2VudE1vZGlmaWVkKTtcclxuICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IHZhcmlhYmxlO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgc2lndWllbnRlVmFyaWFibGUgPSBmZWVkYmFja1Jvdy5mZWVkYmFja1tzaWd1aWVudGVWYXJpYWJsZV0/LnNpZ3VpZW50ZTtcclxuICAgICAgICB9IHdoaWxlICh2YWxvckFudGVyaW9yID09IG51bGwgJiYgcmVjZW50TW9kaWZpZWQgJiYgc2lndWllbnRlVmFyaWFibGUgIT0gbnVsbCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSAnZmluJyAmJiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IudmFyaWFibGVzW3NpZ3VpZW50ZVZhcmlhYmxlXS5mdW5jaW9uQXV0b0luZ3Jlc2FyKTtcclxuICAgICAgICBpZiAoc2lndWllbnRlVmFyaWFibGUgPT0gbnVsbCAmJiBmZWVkYmFja1Jvdy5mZWVkYmFja1t2YXJpYWJsZV0/LmVzdGFkbyA9PSAndmFsaWRhJykge1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9ICdmaW4nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IHJlY2VudE1vZGlmaWVkLCBzaWd1aWVudGVWYXJpYWJsZSwgdmFyaWFibGVBY3R1YWw6IGZlZWRiYWNrUm93LmFjdHVhbCB9O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBSZWdpc3Ryb1Jlc3B1ZXN0YVNpbXBsZSA9IHtcclxuICAgIHZhcmlhYmxlOiBJZFZhcmlhYmxlLFxyXG4gICAgcmVzcHVlc3RhOiBWYWxvclxyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhcyhwYXlsb2FkOiB7XHJcbiAgICBmb3JQazogRm9yUGssXHJcbiAgICByZXNwdWVzdGFzOiBSZWdpc3Ryb1Jlc3B1ZXN0YVNpbXBsZVtdXHJcbn0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIGxldCB7IGZvclBrLCByZXNwdWVzdGFzOiBsaXN0YVJlc3B1ZXN0YXMgfSA9IHBheWxvYWQ7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGspO1xyXG4gICAgdmFyIHJlY2VudE1vZGlmaWVkQW55ID0gZmFsc2U7XHJcbiAgICB2YXIgdmFyaWFibGVzTW9kaWZpY2FkYXM6IElkVmFyaWFibGVbXSA9IFtdO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGFSZXNwdWVzdGFzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGl0ZW0gPSBsaXN0YVJlc3B1ZXN0YXNbaV07XHJcbiAgICAgICAgdmFyIHJlc0NhbWJpbyA9IGFwbGljYXJDYW1iaW9VbmFSZXNwdWVzdGEoZm9yUGssIHJlc3B1ZXN0YXMsIGl0ZW0udmFyaWFibGUsIGl0ZW0ucmVzcHVlc3RhKTtcclxuICAgICAgICBpZiAocmVzQ2FtYmlvLnJlY2VudE1vZGlmaWVkKSB7XHJcbiAgICAgICAgICAgIHJlY2VudE1vZGlmaWVkQW55ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdmFyaWFibGVzTW9kaWZpY2FkYXMucHVzaChpdGVtLnZhcmlhYmxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJlY2VudE1vZGlmaWVkQW55ICYmIHZhcmlhYmxlc01vZGlmaWNhZGFzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICByZWZyZXNjYXJZUmVjYWxjdWxhckJ5cGFzcyhmb3JQaywgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgdmFyaWFibGVzTW9kaWZpY2FkYXMsIHJlY2VudE1vZGlmaWVkQW55KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyByZWNlbnRNb2RpZmllZDogcmVjZW50TW9kaWZpZWRBbnkgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9yZWdpc3RyYXJfbm90YShwYXlsb2FkOiB7IGZvclBrUmFpejogRm9yUGtSYWl6LCB0YXJlYTogSWRUYXJlYSwgbm90YTogc3RyaW5nIHwgbnVsbCB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIHRhcmVhLCBub3RhIH0gPSBwYXlsb2FkO1xyXG4gICAgY29uc29sZS5sb2coXCJGQUxUQSAvLyBUT0RPXCIpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYWdyZWdhcl92aXNpdGEocGF5bG9hZDogeyBmb3JQa1JhaXo6IEZvclBrUmFpeiwgb2JzZXJ2YWNpb25lczogc3RyaW5nIHwgbnVsbCB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIG9ic2VydmFjaW9uZXMgfSA9IHBheWxvYWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fbW9kaWZpY2FyX3Zpc2l0YShwYXlsb2FkOiB7IGZvclBrUmFpejogRm9yUGtSYWl6LCBpbmRleDogbnVtYmVyLCBvcGNpb246IGtleW9mIFZpc2l0YSwgdmFsb3I6IHN0cmluZyB8IG51bGwgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleCwgb3BjaW9uLCB2YWxvciB9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9ib3JyYXJfdmlzaXRhKHBheWxvYWQ6IHsgZm9yUGtSYWl6OiBGb3JQa1JhaXosIGluZGV4OiBudW1iZXIgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGtSYWl6LCBpbmRleCB9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hZ3JlZ2FyX2Zvcm11bGFyaW8oeyBmb3JQayB9OiB7IGZvclBrOiBGb3JQayB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeik7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvKHsgZm9yUGsgfTogeyBmb3JQazogRm9yUGsgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgdmFyIHsgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCB1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMsIGZvclBrLCByZXNwdWVzdGFzQXVtZW50YWRhcywgbnVsbCwge30pXHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQayk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25fYm9ycmFyX2Zvcm11bGFyaW8oeyBmb3JQaywgZm9yUGtQYWRyZSB9OiB7IGZvclBrOiBGb3JQaywgZm9yUGtQYWRyZTogRm9yUGsgfSkge1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMgfCB1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgdWFEZWY6IFVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGluZGV4ID0gZm9yUGtbdWFEZWYucGtfYWdyZWdhZGFdIGFzIG51bWJlcjtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXM6IHJlc3B1ZXN0YXNQYWRyZSB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrUGFkcmUsIHRydWUsIHRydWUpO1xyXG4gICAgKHJlc3B1ZXN0YXNQYWRyZVt1bmlkYWRfYW5hbGlzaXNdIGFzIFJlc3B1ZXN0YXNbXSkuc3BsaWNlKGluZGV4IC0gMSwgMSk7XHJcbiAgICByZWNhbGN1bGFyVG9kb0VsQXJib2wocmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeik7XHJcbiAgICBkYXRvc0J5UGFzcy5kaXJ0eSA9IGRhdG9zQnlQYXNzLmRpcnR5IHx8IHRydWU7XHJcbiAgICByZXNwdWVzdGFzUmFpei4kZGlydHkgPSByZXNwdWVzdGFzUmFpei4kZGlydHkgfHwgdHJ1ZTtcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgeyBhdXRvSW5ncmVzbzogdHJ1ZSB9KTtcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrUGFkcmUpO1xyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQa1BhZHJlKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaEJ5UGFzczxULCBSPihcclxuICAgIGZ1bjogKHBheWxvYWQ6IFQsIGRhdG9zOiB0eXBlb2YgZGF0b3NCeVBhc3MpID0+IFIsXHJcbiAgICBwYXlsb2FkOiBUXHJcbikge1xyXG4gICAgcmV0dXJuIGZ1bihwYXlsb2FkLCBkYXRvc0J5UGFzcyk7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IHVsdGltYVZhcmlibGVWaXZpZW5kYSA9ICdOT19FU1RBX0RFRklOSURBX0FVTi8vVE9ETycgYXMgSWRWYXJpYWJsZTtcclxuXHJcbmV4cG9ydCBjb25zdCBNQVhDUCA9IDIwO1xyXG5cclxuLyogUkVEVUNFUlMgKi9cclxuXHJcbnZhciByZWVtcGxhem9zSGFiaWxpdGFyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gICAgZmFsc2U6ICdmYWxzZScsXHJcbiAgICB0cnVlOiAndHJ1ZScsXHJcbiAgICBcIj1cIjogJz09JyxcclxuICAgIFwiPD5cIjogJyE9JyxcclxuICAgIFwiJlwiOiAnJiYnLFxyXG4gICAgXCJ8XCI6ICd8fCcsXHJcbiAgICBcIk9SXCI6ICd8fCcsXHJcbiAgICBcIkFORFwiOiAnJiYnLFxyXG4gICAgXCJvclwiOiAnfHwnLFxyXG4gICAgXCJhbmRcIjogJyYmJyxcclxuICAgIFwibm90XCI6ICchJyxcclxuICAgIFwiTk9UXCI6ICchJyxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBoZWxwZXJzQ2FzaWxsZXJvcyA9IHtcclxuICAgIG51bGwyemVybyhwb3NpYmxlTnVsbDogYW55KSB7XHJcbiAgICAgICAgaWYgKHBvc2libGVOdWxsID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwb3NpYmxlTnVsbDtcclxuICAgIH0sXHJcbiAgICBkaXYwZXJyKG51bWVyYWRvcjogbnVtYmVyLCBkZW5vbWluYWRvcjogbnVtYmVyLCBwazogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGRlbm9taW5hZG9yID09IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgZW4gXCIgKyBwayArIFwiIGRpdmlzaW9uIHBvciBjZXJvIGRlIFwiICsgbnVtZXJhZG9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bWVyYWRvciAvIGRlbm9taW5hZG9yO1xyXG4gICAgfSxcclxuICAgIGZ1bnM6IHtcclxuICAgICAgICBibGFuY28oeDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICE9PSAwICYmICF4XHJcbiAgICAgICAgfSxcclxuICAgICAgICBob3koKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnRvZGF5KCkudG9EbXkoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmVjaGFfdmFsaWRhKHg6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgZm9ybWF0b192YWxpZG8gPSAvXihbMS05XXwwWzEtOV18WzEyXVxcZHwzWzAxXSlcXC8oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8yMFxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgdmFyIHhEYXRlOiBEYXRlO1xyXG4gICAgICAgICAgICB2YXIgY29udmVyc2lvbk9rOiBib29sZWFuO1xyXG4gICAgICAgICAgICBjb252ZXJzaW9uT2sgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZm9ybWF0b192YWxpZG8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtkLCBtLCB5XSA9IHguc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBuZXcgRGF0ZShgJHt5fS8ke219LyR7ZH1gKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL2ZhbHRhcmlhIHZhbGlkYXIgcXVlIG5vIHNlYSB1bmEgZmVjaGEgZnV0dXJhIHkgcXVlIHNlYSB1bmEgZmVjaGEgZW4gZWwgcmFuZ28gZGVsIG9wZXJhdGl2b1xyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG8gJiYgY29udmVyc2lvbk9rXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXNhbmlvX3ZhbGlkbyh4OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvID0gL14oWzEtOV18MFsxLTldfDFbMDEyXSlcXC8oMTl8MjApXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0b192YWxpZG9cclxuICAgICAgICB9LFxyXG4gICAgICAgIGluZm9ybWFkbyh4OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggIT09IHVuZGVmaW5lZCAmJiB4ICE9PSBudWxsICYmICghKHggaW5zdGFuY2VvZiBBcnJheSkgfHwgeC5sZW5ndGggIT09IDApXHJcbiAgICAgICAgICAgICAgICAmJiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSB8fCBPYmplY3Qua2V5cyh4KS5sZW5ndGggIT09IDApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBuc25jKHg6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCA9PSAtOVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcGFyKHg6IG51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4geCAlIDIgPT0gMFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZWRhZF9tZXNfYW5uaW9fdmFsaWRvKGVkYWQ6IG51bWJlciwgbWVzQW5uaW86IHN0cmluZywgZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIG1lc2VzRGlmZXJlbmNpYSA9IChkMTogRGF0ZSwgZDI6IERhdGUpID0+IHtcclxuICAgICAgICAgICAgICAgIHZhciBtb250aHM7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgPSAoZDIuZ2V0RnVsbFllYXIoKSAtIGQxLmdldEZ1bGxZZWFyKCkpICogMTI7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgLT0gZDEuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIG1vbnRocyArPSBkMi5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyA8PSAwID8gMCA6IG1vbnRocztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzUmVhbGl6YWNpb24gPSBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVkuc3BsaXQoXCIvXCIpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgdG9kYXkgPSBkYXRlLnltZChOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMl0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMV0pLCBOdW1iZXIocGFydGVzUmVhbGl6YWNpb25bMF0pKVxyXG4gICAgICAgICAgICB2YXIgcGFydGVzTWVzQW5uaW8gPSBtZXNBbm5pby5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgbGFzIHBhcnRlcyBjb3JyZXNwb25kZW4gYSB1bmEgZmVjaGEgdsOhbGlkYVxyXG4gICAgICAgICAgICB2YXIgbmFjaW1pZW50byA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNNZXNBbm5pb1sxXSksIE51bWJlcihwYXJ0ZXNNZXNBbm5pb1swXSksIDEpXHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBSZWFsRGF0ZSBlcyBEYXRlIHkgc2UgcHVlZGUgcmVzdGFyXHJcbiAgICAgICAgICAgIHZhciBkaWZlcmVuY2lhTWVzZXMgPSBtZXNlc0RpZmVyZW5jaWEobmFjaW1pZW50bywgdG9kYXkpO1xyXG4gICAgICAgICAgICB2YXIgZWRhZERlY2ltYWxlcyA9IGRpZmVyZW5jaWFNZXNlcyAvIDEyOyAvL2VqIDM2LjVcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIE1hdGguZmxvb3IoZWRhZERlY2ltYWxlcykgPT0gZWRhZCB8fCAvL21pc21hIGVkYWRcclxuICAgICAgICAgICAgICAgIGVkYWREZWNpbWFsZXMgPT0gZWRhZCArIDEgLy9tZXMgZGUgdG9sZXJhbmNpYVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvL2NvcGlhcl9jYW1wb191YV9yYW1hKHJlc3B1ZXN0YXNPcmlnZW46UmVzcHVlc3Rhc1tdLCBwb3NpY2lvbjpudW1iZXIsIHZhcmlhYmxlT3JpZ2VuOiBJZFZhcmlhYmxlLCBjYW1pbm86c3RyaW5nLCBjb25kaWNpb246Ym9vbGVhbil7XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj8ocmVzcHVlc3Rhc09yaWdlbiAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV1bYCR7Y2FtaW5vfWBdW3ZhcmlhYmxlT3JpZ2VuXSk6bnVsbFxyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/ZXZhbChgcmVzcHVlc3Rhc09yaWdlblske3Bvc2ljaW9uLTF9XS5gK2NhbWlubysnLicrdmFyaWFibGVPcmlnZW4pOm51bGw7XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgLypcclxuICAgICAgICBkYm86e1xyXG4gICAgICAgICAgICBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCBkYXRvOnN0cmluZyl7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmIGluZm9ybWFkbyh4cGVyc29uYXMpICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXVtkYXRvXT8geHBlcnNvbmFzW3Blci0xXVtkYXRvXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVkYWRmYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdlZGFkJylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlaW5kaXZpZHVhbChlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISFwZXJzb25hc1twZXItMV1bJ2VudHJlYWluZCddXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZW1pZW1icm8oZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2Nvbnl1Z2VzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hc1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHhwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0yKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvamVmZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwZXJzb25hcy5maWx0ZXIoIHBlci0+cGVyLnA0PT0xKS5sZW5ndGhcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFyZW50ZXNjb2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwncDQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzZXhvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISF4cGVyc29uYXMgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdLnNleG8/IHhwZXJzb25hc1twZXItMV1bJ3NleG8nXTpudWxsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNpdGNvbnlqZWZlKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLDEsJ3A1JylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gKi9cclxuICAgIH1cclxufTtcclxuXHJcbnR5cGUgRnVuY2lvbkhhYmlsaXRhciA9ICh2YWxvcmVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBib29sZWFuO1xyXG50eXBlIEZ1bmNpb25WYWxvcmFyID0gKHZhbG9yZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IGFueTtcclxudmFyIGZ1bmNpb25lc0hhYmlsaXRhcjogeyBba2V5OiBzdHJpbmddOiBGdW5jaW9uSGFiaWxpdGFyIH0gPSB7XHJcbn1cclxudmFyIGZ1bmNpb25lc1ZhbG9yYXI6IHsgW2tleTogc3RyaW5nXTogRnVuY2lvblZhbG9yYXIgfSA9IHtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1pbmlDb21waWxhZG9yU1FsSnMoZXhwcmVzaW9uQ2FzaVNRTDogc3RyaW5nKSB7XHJcbiAgICB2YXIgZXhwcmVzaW9uID0gZXhwcmVzaW9uQ2FzaVNRTC5yZXBsYWNlKC9cXHUwMEEwL2csICcgJyk7XHJcbiAgICB2YXIgY3VlcnBvID0gZXhwcmVzaW9uLnJlcGxhY2UoL1xcYmlzIGRpc3RpbmN0IGZyb21cXGIvZ2ksICchPScpLnJlcGxhY2UoL1xcYi4rP1xcYi9nLCBmdW5jdGlvbiAoZWxUb2tlbikge1xyXG4gICAgICAgIHZhciBlbFRva2VuVHJpbWVhZG8gPSBlbFRva2VuLnRyaW0oKTtcclxuICAgICAgICBpZiAoZWxUb2tlblRyaW1lYWRvIGluIHJlZW1wbGF6b3NIYWJpbGl0YXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZW1wbGF6b3NIYWJpbGl0YXJbZWxUb2tlblRyaW1lYWRvXTtcclxuICAgICAgICB9IGVsc2UgaWYgKC9eXFxkK1xcLj9cXGQqJC8udGVzdChlbFRva2VuVHJpbWVhZG8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfSBlbHNlIGlmICgvXlxcVyskLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9IGVsc2UgaWYgKC9eXFxzKyQvLnRlc3QoZWxUb2tlbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICdoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLicgKyBlbFRva2VuICsgJyknO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY3VlcnBvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY2lvbkNvbXBpbGFkYTxUPihjb25qdW50b0RlRnVuY2lvbmVzOiB7IFtrZXk6IHN0cmluZ106ICh2YWxvcmVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBUIH0pIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kczogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdKSB7XHJcbiAgICAgICAgICAgIHZhciBjdWVycG8gPSBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gdmFyIGN1ZXJwbyA9IG1pbmlDb21waWxhZG9yU1FsSnMobm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW50ZXJuYWxGdW4gPSBuZXcgRnVuY3Rpb24oJ3ZhbG9yZXMnLCAnaGVscGVycycsICdyZXR1cm4gJyArIGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdID0gZnVuY3Rpb24gKHZhbG9yZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gaW50ZXJuYWxGdW4odmFsb3JlcywgaGVscGVyc0Nhc2lsbGVyb3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1IgRUpFQ1VDQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLCBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzLCBleHBlY3RlZChlcnIpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh2YWxvcmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBDT01QSUxBQ0lPTiBFWFBSRVNJT04gRVhURVJOQSAnLCBub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzLCBleHBlY3RlZChlcnIpKVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY3VlcnBvKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25IYWJpbGl0YXIgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc0hhYmlsaXRhcik7XHJcbmV4cG9ydCBjb25zdCBnZXRGdW5jaW9uVmFsb3JhciA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzVmFsb3Jhcik7XHJcblxyXG5cclxudmFyIHJvd1ZhbGlkYXRvciA9IGdldFJvd1ZhbGlkYXRvcjxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+KHsgZ2V0RnVuY2lvbkhhYmlsaXRhciwgZ2V0RnVuY2lvblZhbG9yYXIgfSlcclxuZXhwb3J0IHZhciBidXNjYXJOb1JlYUVuUmVzcHVlc3RhcyA9ICh1bmlkYWRlc0FSZWNvcnJlclBybTogSWRVbmlkYWRBbmFsaXNpc1tdLCB1bmlkYWRBbmFsaXNpczogVW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsIG5vUmVhc1RhcmVhOiBhbnlbXSwgbm9tYk5vUmVhOiBzdHJpbmcpXHJcbiAgICA6IHsgbnJjb2RpZ286IHN0cmluZyB8IG51bGwsIGVzdmFsb3I6IGJvb2xlYW4gfSA9PiB7XHJcbiAgICB2YXIgbnJjb2RpZ286IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgdmFyIGVzdmFsb3IgPSBmYWxzZTtcclxuICAgIHZhciBydmFsb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgdmFyIHJ2YXJpYWJsZTogc3RyaW5nO1xyXG4gICAgdmFyIHJub3JlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAvLyB2YXIgcmVzdWx0PXtucmNvZDpTdHJpbmcsIGVzdmFsOkJvb2xlYW59O1xyXG4gICAgaWYgKHVuaWRhZGVzQVJlY29ycmVyUHJtLmluY2x1ZGVzKHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcykpIHtcclxuICAgICAgICBmb3IgKGxldCBub1JlYSBvZiBub1JlYXNUYXJlYSkgeyAvL2VzdHJ1Y3R1cmEubm9SZWFzLCBlc3RydWN0dXJhLm5vUmVhc1N1cFxyXG4gICAgICAgICAgICBpZiAobm9tYk5vUmVhID09ICdub19yZWEnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeyB2YXJpYWJsZSwgdmFsb3IsIG5vX3JlYSB9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWEgPSBub19yZWE7XHJcbiAgICAgICAgICAgICAgICBydmFsb3IgPSB2YWxvcjtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZSA9IHZhcmlhYmxlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHsgdmFyaWFibGVfc3VwLCB2YWxvcl9zdXAsIG5vX3JlYV9zdXAgfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhID0gbm9fcmVhX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YWxvciA9IHZhbG9yX3N1cDtcclxuICAgICAgICAgICAgICAgIHJ2YXJpYWJsZSA9IHZhcmlhYmxlX3N1cDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1tydmFyaWFibGUgYXMgSWRWYXJpYWJsZV0gPT0gcnZhbG9yKSB7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbyA9IHJub3JlYTsgIC8vbm9fcmVhLCBub19yZWFfc3VwXHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG5yY29kaWdvLCBlc3ZhbG9yIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG5yY29kaWdvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGVzdmFsb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IHVhIG9mIChsaWtlQXIodW5pZGFkQW5hbGlzaXM/LmhpamFzKS5hcnJheSgpKSkge1xyXG4gICAgICAgIGlmICh1YT8udW5pZGFkX2FuYWxpc2lzICYmIHJlc3B1ZXN0YXNbdWEudW5pZGFkX2FuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHJlc3B1ZXN0YXNIaWphcyBvZiBpdGVyYXRvcihyZXNwdWVzdGFzW3VhPy51bmlkYWRfYW5hbGlzaXNdID8/IFtdKSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzKHVuaWRhZGVzQVJlY29ycmVyUHJtLCB1YSwgcmVzcHVlc3Rhc0hpamFzLCBub1JlYXNUYXJlYSwgbm9tYk5vUmVhKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZXN2YWxvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvID0gcmVzdWx0Lm5yY29kaWdvO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3IgPSByZXN1bHQuZXN2YWxvcjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBucmNvZGlnbywgZXN2YWxvciB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5yY29kaWdvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBlc3ZhbG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHtucmNvZGlnbywgZXN2YWxvcn1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IG5yY29kaWdvLCBlc3ZhbG9yIH1cclxufVxyXG5cclxuXHJcblxyXG5leHBvcnQgdmFyIGRlZk9wZXJhdGl2bzogRGVmT3BlcmF0aXZvID0ge1xyXG4gICAgZXNOb1JlYTogKF9yZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kTm9SZWEsIGVzTm9SZWEgfTtcclxuICAgIH0sXHJcbiAgICBlc05vUmVhU3VwOiAoX3Jlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHtcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhU3VwOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgICByZXR1cm4geyBjb2ROb1JlYVN1cCwgZXNOb1JlYVN1cCB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGE6IChfcmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4ge1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kUmVhLCBlc1JlYSB9XHJcbiAgICB9LFxyXG4gICAgZXNSZWFsaXphZGFTdXA6IChfcmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4ge1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzUmVhU3VwID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZFJlYVN1cDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kUmVhU3VwLCBlc1JlYVN1cCB9XHJcbiAgICB9LFxyXG4gICAgVUFwcmluY2lwYWw6ICcnIGFzIElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBkZWZVQToge30gYXMgeyBbaSBpbiBJZFVuaWRhZEFuYWxpc2lzXTogeyBwazogSWRWYXJpYWJsZSwgaW5jbHVpZGFzOiBJZFVuaWRhZEFuYWxpc2lzW10sIGlkc0ZvcjogSWRGb3JtdWxhcmlvW10gfSB9LFxyXG4gICAgZGVmRm9yOiB7fSBhcyB7IFtmIGluIElkRm9ybXVsYXJpb106IHsvKmFyYm9sVUE6SWRVbmlkYWRBbmFsaXNpc1tdLCAqLyBoZXJtYW5vPzogdHJ1ZSB9IH1cclxufVxyXG4vLy8vLyBBQkFKTyBkZSBlc3RhIGzDrW5lYSBubyBwdWVkZSBoYWJlciBvdHJvcyBub21icmVzIGRlIHZhcmlhYmxlcyBvIGZvcm11bGFyaW9zIG8gY2FzaWxsZXJvcyBlbiBnZW5lcmFsXHJcblxyXG5leHBvcnQgdmFyIHNldENhbGN1bG9SZWFOb1JlYSA9IChcclxuICAgIGVzTm9SZWE6IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7IGNvZE5vUmVhOiBzdHJpbmcgfCBudWxsLCBlc05vUmVhOiBib29sZWFuIH0sXHJcbiAgICBlc05vUmVhU3VwOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2ROb1JlYVN1cDogc3RyaW5nIHwgbnVsbCwgZXNOb1JlYVN1cDogYm9vbGVhbiB9LFxyXG4gICAgZXNSZWFsaXphZGE6IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7IGNvZFJlYTogbnVtYmVyIHwgbnVsbCwgZXNSZWE6IGJvb2xlYW4gfSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2RSZWFTdXA6IG51bWJlciB8IG51bGwsIGVzUmVhU3VwOiBib29sZWFuIH1cclxuKSA9PiB7XHJcbiAgICBkZWZPcGVyYXRpdm8gPSB7XHJcbiAgICAgICAgLi4uZGVmT3BlcmF0aXZvLFxyXG4gICAgICAgIGVzTm9SZWEsXHJcbiAgICAgICAgZXNOb1JlYVN1cCxcclxuICAgICAgICBlc1JlYWxpemFkYSxcclxuICAgICAgICBlc1JlYWxpemFkYVN1cFxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBUT0RPOiBHRU5FUkFMSVpBUlxyXG50eXBlIFBlcnNvbmEgPSB7IHAxOiBzdHJpbmcsIHAyOiBudW1iZXIsIHAzOiBudW1iZXIsIHA0OiBudW1iZXIgfCBudWxsLCBwNTogMSB8IG51bGwsIHA2OiAxIHwgbnVsbCB9XHJcblxyXG5mdW5jdGlvbiBudW0obnVtOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsKTogbnVtYmVyIHtcclxuICAgIC8vQHRzLWlnbm9yZSBsYSBncmFjaWEgZXMgbWV0ZXIgbnVtIGN1YW5kbyBlcyBzdHJpbmdcclxuICAgIGlmIChpc05hTihudW0gLSAwKSkgcmV0dXJuIDA7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICByZXR1cm4gbnVtIC0gMDtcclxufVxyXG5cclxudmFyIGZ1bmNpb25lc0Nvbm9jaWRhczogeyBbayBpbiBzdHJpbmddOiBib29sZWFuIH0gPSB7fVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmaWNhclNvcnRlbyhvcHRzOiB7XHJcbiAgICBjb25maWd1cmFjaW9uU29ydGVvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsXHJcbiAgICByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXpcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIHZhcmlhYmxlQWN0dWFsOiBJZFZhcmlhYmxlXHJcblxyXG59KSB7XHJcbiAgICBjb25zdCByZXNldGVhclNvcnRlbyA9IChvcHRzOiB7IHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMgfSkgPT4ge1xyXG4gICAgICAgIHZhciB7IHJlc3B1ZXN0YXMgfSA9IG9wdHM7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gPSBudWxsO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXSA9IG51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdID0gbnVsbDtcclxuICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnNvcnRlYWRvX21vc3RyYXI/LmZvckVhY2goKG1vc3RyYXIpID0+IHJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdID0gbnVsbCk7XHJcbiAgICAgICAgaWYgKCd2YXJfbGV0cmEnIGluIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAmJiByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBwZXIgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYV0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciB7IGNvbmZpZ3VyYWNpb25Tb3J0ZW8sIHZhcmlhYmxlQWN0dWFsLCByZXNwdWVzdGFzLCBmb3JQaywgcmVzcHVlc3Rhc1JhaXogfSA9IG9wdHM7XHJcbiAgICB2YXIgaWRFbmMgPSBmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdO1xyXG4gICAgdmFyIHsgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIHJlc3B1ZXN0YXNSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpO1xyXG4gICAgdmFyIGV4cHJfaW5jb21wbGV0aXR1ZF9mdW4gPSBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvIGFzIHVua25vd24gYXMgbnVtYmVyXS5leHByKTtcclxuICAgIHZhciBmaWx0cm9fZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmZpbHRyb19qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pbyBhcyB1bmtub3duIGFzIG51bWJlcl0uZXhwcik7XHJcbiAgICB2YXIgdW5pZGFkQW5hbGlzaXMgPSBjb25maWd1cmFjaW9uU29ydGVvLnVuaWRhZF9hbmFsaXNpcztcclxuXHJcbiAgICBpZiAoY29uZmlndXJhY2lvblNvcnRlby5wYXJhbWV0cm9zLmluY2x1ZGVzKHZhcmlhYmxlQWN0dWFsKSkge1xyXG4gICAgICAgIHZhciB1YVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKSA9PiB1YS51bmlkYWRfYW5hbGlzaXMgPT0gdW5pZGFkQW5hbGlzaXMpPy5wYWRyZTtcclxuICAgICAgICB2YXIgcGtBZ3JlZ2FkYVBhZHJlID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoKHVhKSA9PiB1YS51bmlkYWRfYW5hbGlzaXMgPT0gdWFQYWRyZSk/LnBrX2FncmVnYWRhXHJcbiAgICAgICAgaWYgKGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIpIHtcclxuICAgICAgICAgICAgaWYgKHVhUGFkcmUgJiYgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV0pIHtcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBwa0FncmVnYWRhUGFkcmUgZXhpc3RlIGUgaW5kaWNhIGxhIHBvc2ljaW9uIGRlbCBwYWRyZVxyXG4gICAgICAgICAgICAgICAgdmFyIHBhZHJlID0gcmVzcHVlc3Rhc0F1bWVudGFkYXNbdWFQYWRyZV1bTnVtYmVyKHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3BrQWdyZWdhZGFQYWRyZV0pIC0gMV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY3R1YWwgIT0gY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdID0gbGlrZUFyKHBhZHJlW3VuaWRhZEFuYWxpc2lzXSB8fCBbXSkuYXJyYXkoKS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHsgcmVzcHVlc3RhczogcGFkcmUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodWFQYWRyZSAmJiByZXNwdWVzdGFzUmFpeikge1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIHBrQWdyZWdhZGFQYWRyZSBleGlzdGUgZSBpbmRpY2EgbGEgcG9zaWNpb24gZGVsIHBhZHJlXHJcbiAgICAgICAgICAgICAgICB2YXIgcGFkcmUgPSByZXNwdWVzdGFzUmFpejtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjdHVhbCAhPSBjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkcmVbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0gPSBsaWtlQXIocGFkcmVbdW5pZGFkQW5hbGlzaXNdIHx8IFtdKS5hcnJheSgpLmxlbmd0aDsgLy9zaSBhZ3JlZ2EgZGVzZGUgYm90b24gYWdyZWdhclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oeyByZXNwdWVzdGFzOiBwYWRyZSB9KTtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSBwYWRyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGFzIFJlc3B1ZXN0YXNbXVxyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdICE9IDEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0gPSByZXNwdWVzdGFzVUEubGVuZ3RoICsgMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oeyByZXNwdWVzdGFzIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjYW50aWRhZFRvdGFsID0gTnVtYmVyKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0pO1xyXG4gICAgICAgICAgICBpZiAoY2FudGlkYWRUb3RhbCA8IHJlc3B1ZXN0YXNVQS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIC8vIGRvYmxlIGFzaWduYWNpw7NuIHBhcmEgcXVlIGxvIGNhcmd1ZSBlbiByZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzVUEuZmlsdGVyKChwLCBpKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5zb21lKChwYXJhbSkgPT4gcFtwYXJhbV0gfHwgaSA8PSBjYW50aWRhZFRvdGFsIC0gMSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSA9IHJlc3B1ZXN0YXNVQVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHdoaWxlIChjYW50aWRhZFRvdGFsID4gcmVzcHVlc3Rhc1VBLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLnB1c2goe30gYXMgUmVzcHVlc3RhcylcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXSA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIocCA9PiBleHByX2luY29tcGxldGl0dWRfZnVuKHApKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIHZhciB2YXIkcDAgPSBcIiRwMFwiIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSA9PSAxICYmXHJcbiAgICAgICAgICAgICAgICAhcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gJiZcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5pbmNvbXBsZXRhc10gPT0gMFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHZhciBzb3J0ZWFyID0gcmVzcHVlc3Rhc1VBLmZpbHRlcihwID0+IGZpbHRyb19mdW4ocCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNvcnRlYXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZvckVhY2goKHBlciwgaSkgPT4gcGVyW3ZhciRwMF0gPSBpICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5vcmRlbi5wdXNoKHsgdmFyaWFibGU6IHZhciRwMCwgb3JkZW46IDEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zb3J0KGNvbXBhcmVGb3JPcmRlcihjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLm1hcChlbGVtID0+ICh7IGNvbHVtbjogZWxlbS52YXJpYWJsZSwgb3JkZXI6IGVsZW0ub3JkZW4gfSkpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2ljaW9uU29ydGVhZGEgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25maWd1cmFjaW9uU29ydGVvLm1ldG9kbyA9PSAnaGFzaCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOTyBJTVBMRU1FTlRBRE8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLypwb3NpY2lvblNvcnRlYWRhPShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9jb2VmLnJlZHVjZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHN1bSwgcGFpcik9PnN1bSArIGRhdG9zVml2aWVuZGEudGVtW3BhaXIudmFyXSAqIHBhaXIuY29lZiksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAlIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLmRpdmlzb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSAlIHNvcnRlYXIubGVuZ3RoKi9cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV0cmEgPSAnQSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhckxldHJhOiBJZFZhcmlhYmxlID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udmFyX2xldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwZXJzb25hIG9mIHNvcnRlYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5maW5kKChfcGVyLCBpKSA9PiBpID09IHBlcnNvbmFbdmFyJHAwXSBhcyBudW1iZXIgLSAxKSFbdmFyTGV0cmFdID0gbGV0cmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hW3ZhckxldHJhXSA9IGxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0cmEgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGxldHJhLmNoYXJDb2RlQXQoMCkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGFBbGVhdG9yaWFNaWVtYnJvcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnRhYmxhLm1hcCgobGlzdGEpID0+IGxpc3RhLnNwbGl0KCcnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN0byA9IGlkRW5jICUgMTA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5hVGFibGFBbGVhdG9yaWEgPSByZXN0byA/IHJlc3RvIC0gMSA6IDk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3J0ZWFyLmxlbmd0aCA+IHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNwbGljZSh0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCkgLy9kZXNjYXJ0byBjYW5kaWRhdG9zIHNpIHNvbiBtw6FzIHF1ZSBsbyBxdWUgcGVybWl0ZSBsYSB0YWJsYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxhVGFibGFBbGVhdG9yaWEgPSBzb3J0ZWFyLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYVNlbGVjY2lvbmFkYSA9IHRhYmxhQWxlYXRvcmlhTWllbWJyb3NbZmlsYVRhYmxhQWxlYXRvcmlhXVtjb2x1bW5hVGFibGFBbGVhdG9yaWFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpY2lvblNvcnRlYWRhID0gcmVzcHVlc3Rhc1VBLmZpbmRJbmRleCgocDogUmVzcHVlc3RhcykgPT4gcFt2YXJMZXRyYV0gPT0gbGV0cmFTZWxlY2Npb25hZGEpICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gPSBwb3NpY2lvblNvcnRlYWRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc10gPSBzb3J0ZWFyLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1ttb3N0cmFyLnRhcmdldF0gPSByZXNwdWVzdGFzVUFbcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnJlc3VsdGFkb10gYXMgbnVtYmVyIC0gMV1bbW9zdHJhci5zb3VyY2VdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSA9IHJlc3B1ZXN0YXNVQS5sZW5ndGggfHwgbnVsbDsgLy9ubyBxdWVyZW1vcyBlbCB2YWxvciAwXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBXSA9ICdvayc7XHJcbiAgICAgICAgICAgIGlmIChjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWxdID0gJ29rJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYmFycmVyU3ViQXJib2wocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBub2RvQWN0dWFsOiBSZXNwdWVzdGFzIHwgUmVzcHVlc3Rhc1tdLCB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMsIGZvclBrQWN1bXVsYWRvOiBGb3JQaykge1xyXG4gICAgdmFyIHVhRGVmID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgdmFyIGVzQXJyYXkgPSBub2RvQWN0dWFsIGluc3RhbmNlb2YgQXJyYXk7XHJcbiAgICB2YXIgY29uanVudG86IFJlc3B1ZXN0YXNbXSA9IGVzQXJyYXkgPyBub2RvQWN0dWFsIGFzIFJlc3B1ZXN0YXNbXSA6IFtub2RvQWN0dWFsIGFzIFJlc3B1ZXN0YXNdO1xyXG4gICAgXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbmp1bnRvLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIHJlc3AgPSBjb25qdW50b1tpXTtcclxuICAgICAgICBpZiAoIXJlc3ApIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICB2YXIgbnVtID0gZXNBcnJheSA/IGkgKyAxIDogKGZvclBrQWN1bXVsYWRvW3VhRGVmLnBrX2FncmVnYWRhXSB8fCAxKTtcclxuICAgICAgICB2YXIgaWRGb3JtdWxhcmlvcyA9IE9iamVjdC5rZXlzKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihrZXkgPT4gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1trZXkgYXMgSWRGb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PT0gdW5pZGFkX2FuYWxpc2lzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGlkRm9ybXVsYXJpbyBvZiBpZEZvcm11bGFyaW9zKSB7XHJcbiAgICAgICAgICAgIHZhciBtaUZvclBrOiBGb3JQayA9IHsgLi4uZm9yUGtBY3VtdWxhZG8sIFt1YURlZi5wa19hZ3JlZ2FkYV06IG51bSwgZm9ybXVsYXJpbzogaWRGb3JtdWxhcmlvIGFzIElkRm9ybXVsYXJpbyB8fCBmb3JQa0FjdW11bGFkby5mb3JtdWxhcmlvIH07XHJcbiAgICAgICAgICAgIGlmIChlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKSB7XHJcbiAgICAgICAgICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzKHJlc3B1ZXN0YXNSYWl6LCBtaUZvclBrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKSB7XHJcbiAgICAgICAgICAgICAgICBlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8ocmVzcHVlc3Rhc1JhaXosIG1pRm9yUGspO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgaGlqYXMgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmlsdGVyKHUgPT4gdS5wYWRyZSA9PT0gdW5pZGFkX2FuYWxpc2lzKS5rZXlzKCk7XHJcbiAgICAgICAgICAgIGZvciAodmFyIHVhSGlqYSBvZiBoaWphcykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGhpamFzUmVzcCA9IHJlc3BbdWFIaWphIGFzIElkVW5pZGFkQW5hbGlzaXNdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhpamFzUmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBoaWphc1Jlc3AgYXMgUmVzcHVlc3Rhc1tdLCB1YUhpamEgYXMgSWRVbmlkYWRBbmFsaXNpcywgbWlGb3JQayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoY29tb2RpbmVzLmNhbGN1bGFyQ29tb2RpbmVzKXtcclxuICAgICAgICAgICAgICAgIGNvbW9kaW5lcy5jYWxjdWxhckNvbW9kaW5lcyhtaUZvclBrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlY2FsY3VsYXJUb2RvRWxBcmJvbChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpejogRm9yUGspIHtcclxuICAgIHZhciB1YVBwYWwgPSBPYmplY3Qua2V5cyhlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKGtleSA9PiAhZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1trZXkgYXMgSWRVbmlkYWRBbmFsaXNpc10ucGFkcmUpIGFzIElkVW5pZGFkQW5hbGlzaXM7XHJcbiAgICBcclxuICAgIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6LCByZXNwdWVzdGFzUmFpeiwgdWFQcGFsLCBmb3JQa1JhaXopO1xyXG4gICAgYmFycmVyU3ViQXJib2wocmVzcHVlc3Rhc1JhaXosIHJlc3B1ZXN0YXNSYWl6LCB1YVBwYWwsIGZvclBrUmFpeik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOiB7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106IEluZm9Gb3JtdWxhcmlvIH0sXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLFxyXG4gICAgVUE6IElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBmb3JQazogRm9yUGssXHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhczogUmVzcHVlc3RhcywgLy8gaW5jbHV5ZW4gbGEgZGUgdG9kb3MgbG9zIHBhZHJlcyB5IGFuc2VzdHJvcyxcclxuICAgIHJlc3B1ZXN0YXNQYWRyZTogUmVzcHVlc3RhcyB8IG51bGwsXHJcbiAgICBvcHRzOiBPcGNpb25lc1Jvd1ZhbGlkYXRvcixcclxuKSB7XHJcbiAgICAvLyByZWNvcnJpZW5kIFVBIHBlcnNvbmFzIHkgbWFzY290YXNcclxuICAgIGZvciAodmFyIFVBaW5jbHVpZGEgb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pbmNsdWlkYXMpIHtcclxuICAgICAgICB2YXIgcGtOdWV2YSA9IGRlZk9wZXJhdGl2by5kZWZVQVtVQWluY2x1aWRhXS5waztcclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzW1VBaW5jbHVpZGFdO1xyXG4gICAgICAgIGxpa2VBcihjb25qdW50b1Jlc3B1ZXN0YXNVQSkuZm9yRWFjaCgocmVzcHVlc3Rhc0hpam8sIHZhbG9yUGtPUG9zaWNpb24pID0+IHtcclxuICAgICAgICAgICAgdmFyIHZhbG9yUGsgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkodmFsb3JQa09Qb3NpY2lvbiwgY29uanVudG9SZXNwdWVzdGFzVUEpO1xyXG4gICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcixcclxuICAgICAgICAgICAgICAgIGZvcm11bGFyaW9zLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0hpam8sXHJcbiAgICAgICAgICAgICAgICBVQWluY2x1aWRhLFxyXG4gICAgICAgICAgICAgICAgeyAuLi5mb3JQaywgW3BrTnVldmFdOiB2YWxvclBrIH0sXHJcbiAgICAgICAgICAgICAgICB7IC4uLnJlc3B1ZXN0YXNBdW1lbnRhZGFzLCAuLi5yZXNwdWVzdGFzSGlqbywgW3BrTnVldmFdOiB2YWxvclBrIH0sXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvLyBTMSAsIEExXHJcbiAgICBmb3IgKHZhciBlc0hlcm1hbm8gb2YgW3RydWUsIGZhbHNlXSkge1xyXG4gICAgICAgIGZvciAodmFyIGZvcm11bGFyaW8gb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pZHNGb3IpIGlmICghIWVzSGVybWFubyA9PSAhIWRlZk9wZXJhdGl2by5kZWZGb3JbZm9ybXVsYXJpb10uaGVybWFubykge1xyXG4gICAgICAgICAgICB2YXIgcGxhaW5Gb3JQazogUGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayh7IC4uLmZvclBrLCBmb3JtdWxhcmlvIH0pXHJcbiAgICAgICAgICAgIHZhciBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzID0gMTA7XHJcbiAgICAgICAgICAgIHZhciB2YXJBdXRvSW5ncmVzYWRhcyA9IFtdO1xyXG4gICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaHVib0F1dG9pbmdyZXNvcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa10gPVxyXG4gICAgICAgICAgICAgICAgICAgIHJvd1ZhbGlkYXRvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBtYXJjYUZpbjogJ2ZpbicsIC4uLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB2YXIgeyByZXN1bWVuLCBhdXRvSW5ncmVzYWRhcyB9ID0gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa107XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFyTmFtZTogSWRWYXJpYWJsZTtcclxuICAgICAgICAgICAgICAgIGlmIChhdXRvSW5ncmVzYWRhcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXJOYW1lIGluIGF1dG9JbmdyZXNhZGFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW1iaW8gPSByZXNwdWVzdGFzW3Zhck5hbWVdICE9PSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbWJpbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1t2YXJOYW1lXSA9IGF1dG9JbmdyZXNhZGFzW3Zhck5hbWVdIGFzIFZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLnB1c2godmFyTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodWJvQXV0b2luZ3Jlc29zID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSB3aGlsZSAoaHVib0F1dG9pbmdyZXNvcyAmJiBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzLS0gPiAwKTtcclxuICAgICAgICAgICAgdmFyQXV0b0luZ3Jlc2FkYXMuZm9yRWFjaChfdmFybmFtZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBmZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXS5lc3RhZG9zW192YXJuYW1lIGFzIElkVmFyaWFibGVdID0gJ2FjdHVhbCc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHZhciBCRl92YXJuYW1lID0gJyRCLicgKyBmb3JtdWxhcmlvIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgdmFyIGZvcm1QcmluY2lwYWxGb3JWaXZpZW5kYSA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSk7XHJcbiAgICAgICAgICAgIGlmIChlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiAhZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBoYXkgY29uZmlndXJhY2lvbiBkZSBzb3J0ZW8gcGFyYSBlbCBmb3JtdWxhcmlvICR7Zm9ybVByaW5jaXBhbEZvclZpdmllbmRhfWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdO1xyXG4gICAgICAgICAgICB2YXIgcmVzdW1lbk9yTnVsbCA9XHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgPT0gQkZfdmFybmFtZSA/XHJcbiAgICAgICAgICAgICAgICAgICAgJ29rJ1xyXG4gICAgICAgICAgICAgICAgICAgIDogcmVzdW1lbiA9PSAndmFjaW8nID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJlc3VtZW5cclxuICAgICAgICAgICAgaWYgKGVzSGVybWFubykge1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tCRl92YXJuYW1lXSA9IHJlc3VtZW5Pck51bGwgPT0gJ29rJyA/ICdvaycgOiBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3B1ZXN0YXNQYWRyZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAvL3Jlc3B1ZXN0YXNQYWRyZVtCRl92YXJuYW1lXSA9IHJlc3VtZW5Pck51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkobnVtYmVyT3JTdHJpbmc6IG51bWJlciB8IHN0cmluZywgb2JqZWN0OiBvYmplY3QgfCBhbnlbXSk6IChudW1iZXIgfCBzdHJpbmcpIHtcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZXN0b3kgdXNhbmRvIGlzTmFOIHBhcmEgdmVyIHNpIGVzIG8gbm8gdW4gbsO6bWVybyBzdW1hYmxlXHJcbiAgICBpZiAoaXNOYU4obnVtYmVyT3JTdHJpbmcpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bWJlck9yU3RyaW5nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE51bWJlcihudW1iZXJPclN0cmluZykgKyAob2JqZWN0IGluc3RhbmNlb2YgQXJyYXkgPyAxIDogMCk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYSA9ICh2YWx1ZVBrUmFpejogVmFsdWVQa1JhaXopOiBJZEZvcm11bGFyaW8gPT4ge1xyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW3ZhbHVlUGtSYWl6XS50YXJlYS5tYWluX2Zvcm1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCkge1xyXG4gICAgbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbHRlcih1YURlZiA9PiAhdWFEZWYucGFkcmUpLmZvckVhY2godWFEZWYgPT4ge1xyXG4gICAgICAgIHZhciBlc1ByaW5jaXBhbCA9IChmOiBGb3JtdWxhcmlvLCBlbmM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZm9ybXVsYXJpb1ByaW5jaXBhbCA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZW5jKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm11bGFyaW9QcmluY2lwYWwgPyBmb3JtdWxhcmlvUHJpbmNpcGFsID09IGYuaWRfY2FzaWxsZXJvIDogZi5mb3JtdWxhcmlvX3ByaW5jaXBhbFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9hY8OhIGhheSBxdWUgc2FuaXRpemFyIHBvcnF1ZSBldmlkZW50ZW1lbnRlIHB1ZWRlIHZlbmlyIGNvbiBoYXNocyBkZSBlbmN1ZXN0YXMgc2luIGluZm8gZWwgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1xyXG4gICAgICAgIHZhciBjb25qdW50b1Jlc3B1ZXN0YXNVQSA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbdWFEZWYudW5pZGFkX2FuYWxpc2lzXVxyXG4gICAgICAgIGJlaW5nQXJyYXkoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXMsIHZhbG9yUGtPUG9zaWNpb24pID0+IHtcclxuICAgICAgICAgICAgdmFyIHZhbG9yUGsgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkodmFsb3JQa09Qb3NpY2lvbiwgY29uanVudG9SZXNwdWVzdGFzVUEpO1xyXG4gICAgICAgICAgICBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGYgPT4gZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YURlZi51bmlkYWRfYW5hbGlzaXMgJiYgZXNQcmluY2lwYWwoZi5jYXNpbGxlcm9zLCB2YWxvclBrIGFzIG51bWJlcikpLmZvckVhY2goKF9kZWZGLCBmb3JtdWxhcmlvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm9yUGtSYWl6ID0geyBmb3JtdWxhcmlvLCBbdWFEZWYucGtfYWdyZWdhZGFdOiB2YWxvclBrIH0gYXMgRm9yUGtSYWl6XHJcbiAgICAgICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXMsIGZvclBrUmFpeiwge30pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgZm9ybXVsYXJpb3M6IHsgW25vbWJyZUZvcm11bGFyaW8gaW4gSWRGb3JtdWxhcmlvXTogSW5mb0Zvcm11bGFyaW8gfSxcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcclxuICAgIG9wdHM6IE9wY2lvbmVzUm93VmFsaWRhdG9yXHJcbikge1xyXG4gICAgdmFyIGZvclBrOiBGb3JQayA9IHsgLi4uZm9yUGtSYWl6IH07XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwsIGZvclBrLCByZXNwdWVzdGFzLCBudWxsLCBvcHRzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgb3B0czogT3BjaW9uZXNSb3dWYWxpZGF0b3IpIHtcclxuICAgIHZhciByZXN1bWVuRXN0YWRvOiBSZXN1bWVuRXN0YWRvO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBQYXJ0aWFsXHJcbiAgICB2YXIgbnVldm9zUm93czogeyBbeCBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIElkRmluPiB9ID0ge31cclxuICAgIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShudWV2b3NSb3dzLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCBmb3JQa1JhaXosIHJlc3B1ZXN0YXMsIG9wdHMpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBsaWtlQXIoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpLmZpbHRlcigoX2ZlZWRiYWNrOiBhbnksIHBsYWluUGs6IFBsYWluRm9yUGspID0+IEpTT04ucGFyc2UocGxhaW5QaylbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSAhPSBmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSkucGxhaW4oKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0geyAuLi5kYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgLi4ubnVldm9zUm93cyB9O1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dID0ge1xyXG4gICAgICAgIC4uLmRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXSxcclxuICAgICAgICAuLi5jYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgICAgICAgICAgZm9yUGtSYWl6LFxyXG4gICAgICAgICAgICBudWV2b3NSb3dzLFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzXHJcbiAgICAgICAgKVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBidXNjYXJGb3JtdWxhcmlvc0hpam9zID0gKGlkRm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvIHwgdW5kZWZpbmVkLCBmb3Jtc0ZlZWRiYWNrOiBJZEZvcm11bGFyaW9bXSA9IFtdKSA9PiB7XHJcbiAgICBpZiAoaWRGb3JtdWxhcmlvKSB7XHJcbiAgICAgICAgZm9yIChsZXQgY2FzaWxsZXJvIG9mIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvXS5jYXNpbGxlcm9zLmNhc2lsbGVyb3MpIHtcclxuICAgICAgICAgICAgaWYgKGNhc2lsbGVyby50aXBvYyA9PSAnQkYnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm9ybUhpam8gPSAoY2FzaWxsZXJvLnNhbHRvPy5zdGFydHNXaXRoKCdGOicpID8gY2FzaWxsZXJvLnNhbHRvIDogJ0Y6JyArIGNhc2lsbGVyby5zYWx0bykgYXMgSWRGb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1IaWpvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybXNGZWVkYmFjay5wdXNoKGZvcm1IaWpvKTtcclxuICAgICAgICAgICAgICAgICAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKGZvcm1IaWpvLCBmb3Jtc0ZlZWRiYWNrKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmb3Jtc0ZlZWRiYWNrO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXogPSAodmFsdWVQa1JhaXo6IFZhbHVlUGtSYWl6KSA9PiB7XHJcbiAgICB2YXIgbWFpbkZvcm1Gb3JWYWx1ZVBrUmFpeiA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEodmFsdWVQa1JhaXopO1xyXG4gICAgdmFyIGZvcm1zRmVlZGJhY2sgPSBbbWFpbkZvcm1Gb3JWYWx1ZVBrUmFpel07XHJcbiAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKG1haW5Gb3JtRm9yVmFsdWVQa1JhaXosIGZvcm1zRmVlZGJhY2spO1xyXG4gICAgcmV0dXJuIGZvcm1zRmVlZGJhY2s7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJBY3R1YWxCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyB8IG51bGwsIG51bUVsZW1lbnRvVUE6IG51bWJlciwgbnVtQWN0dWFsOiBudW1iZXIgfCBudWxsLCBmb3JtdWxhcmlvOiBJZEZvcm11bGFyaW8sIHI6IFJlc3B1ZXN0YXMpID0+XHJcbiAgICAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmXHJcbiAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgJiZcclxuICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvXHJcbiAgICAgICAgP1xyXG4gICAgICAgIG51bUVsZW1lbnRvVUEgPT0gY29hbGVzY2UoXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICAgICApXHJcbiAgICAgICAgOlxyXG4gICAgICAgIG51bUFjdHVhbCA9PSBudW1FbGVtZW50b1VBXHJcbiAgICApXHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyRGlzYWJsZWRCRiA9IChcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86IENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvIHwgbnVsbCxcclxuICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvbkhhYmlsaXRhckJvdG9uRm9ybXVsYXJpbyB8IG51bGwsXHJcbiAgICBudW1FbGVtZW50b1VBOiBudW1iZXIsXHJcbiAgICBmb3JtdWxhcmlvOiBJZEZvcm11bGFyaW8sXHJcbiAgICByOiBSZXNwdWVzdGFzXHJcbikgPT4ge1xyXG4gICAgaWYgKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10pIHtcclxuICAgICAgICB2YXIgZXhwcl9oYWJpbGl0YXJfZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10uZXhwcl9oYWJpbGl0YXJfYm90b25fanMpO1xyXG4gICAgICAgIHJldHVybiAhZXhwcl9oYWJpbGl0YXJfZnVuKHJbaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpc11bbnVtRWxlbWVudG9VQSAtIDFdKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgICAgICAoY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbyB8fFxyXG4gICAgICAgICAgICAgICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCkuaW5jbHVkZXMoZm9ybXVsYXJpbylcclxuICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICBudW1FbGVtZW50b1VBICE9IGNvYWxlc2NlKFxyXG4gICAgICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb19tYW51YWxdLFxyXG4gICAgICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICAgICAgICAgKSlcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyB8IG51bGwsIGZvcm11bGFyaW86IElkRm9ybXVsYXJpbykgPT5cclxuICAgICEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8pXHJcblxyXG50eXBlIFJlc3VsdGFkb1Jlc3VtZW4gPSB7XHJcbiAgICByZXN1bWVuRXN0YWRvOiBSZXN1bWVuRXN0YWRvLFxyXG4gICAgcmVzdW1lbkVzdGFkb1N1cDogUmVzdW1lbkVzdGFkbyxcclxuICAgIGNvZFJlYTogbnVtYmVyIHwgbnVsbCxcclxuICAgIGNvZE5vUmVhOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgY29kUmVhU3VwOiBudW1iZXIgfCBudWxsXHJcbiAgICBjb2ROb1JlYVN1cDogc3RyaW5nIHwgbnVsbCxcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKFxyXG4gICAgZm9yUGtSYWl6OiBGb3JQa1JhaXosXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXNcclxuKTogUmVzdWx0YWRvUmVzdW1lbiB7XHJcbiAgICB2YXIgeyBjb2RSZWEsIGVzUmVhIH0gPSBkZWZPcGVyYXRpdm8uZXNSZWFsaXphZGEocmVzcHVlc3RhcylcclxuICAgIHZhciB7IGNvZE5vUmVhLCBlc05vUmVhIH0gPSBkZWZPcGVyYXRpdm8uZXNOb1JlYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHsgY29kUmVhU3VwLCBlc1JlYVN1cCB9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgeyBjb2ROb1JlYVN1cCwgZXNOb1JlYVN1cCB9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWFTdXAocmVzcHVlc3RhcylcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeihmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSk7XHJcbiAgICB2YXIgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV1cclxuICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgIHZhciBmZWVkQmFja1ZpdmllbmRhID0gbGlrZUFyKGZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9yb3csIHBsYWluUGspID0+IHtcclxuICAgICAgICB2YXIgdGllbmVJbmRpdmlkdWFsID0gY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gJiYgISEoY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUpXHJcbiAgICAgICAgdmFyIHRpZW5lQm90b25EZXNIYWJpbGl0YWJsZSA9IGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvIGFzIElkRm9ybXVsYXJpb107XHJcbiAgICAgICAgdmFyIHBrQWdyZWdhZGEgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aWVuZUJvdG9uRGVzSGFiaWxpdGFibGUpIHtcclxuICAgICAgICAgICAgcGtBZ3JlZ2FkYSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSwgX2lkVUEpID0+XHJcbiAgICAgICAgICAgICAgICB1YS51bmlkYWRfYW5hbGlzaXMgPT0gaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW0pTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbyBhcyBJZEZvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpcyk/LnBrX2FncmVnYWRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShwbGFpblBrKVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdID09IGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdICYmXHJcbiAgICAgICAgICAgIGZvcm1zRmVlZGJhY2suaW5jbHVkZXMoSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvKSAmJlxyXG4gICAgICAgICAgICAodGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlID9cclxuICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaylbcGtBZ3JlZ2FkYSBhcyBDYW1wb1BrXSxcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0ZvclBrKEpTT04ucGFyc2UocGxhaW5QayksIHRydWUpLnJlc3B1ZXN0YXNBdW1lbnRhZGFzXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6IHRpZW5lSW5kaXZpZHVhbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgIWNhbGN1bGFyRGlzYWJsZWRCRihcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5wZXJzb25hLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5ob2dhciA/IHJlc3B1ZXN0YXNGb3JQayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvZ2FyOiBKU09OLnBhcnNlKHBsYWluUGspLmhvZ2FyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIEZvclBrKS5yZXNwdWVzdGFzIDoge30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0ZvclBrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTogZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXVsYXJpbzogY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIEZvclBrKS5yZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIDogdHJ1ZSlcclxuICAgIH0pLmFycmF5KCk7XHJcbiAgICB2YXIgcHJpb3JpZGFkZXM6IHsgW2tleSBpbiBSZXN1bWVuRXN0YWRvXTogeyBwcmlvcmlkYWQ6IG51bWJlciwgY2FudGlkYWQ6IG51bWJlciB9IH0gPSB7XHJcbiAgICAgICAgJ25vIHJlYSc6IHsgcHJpb3JpZGFkOiAxLCBjYW50aWRhZDogMCB9LFxyXG4gICAgICAgICdjb24gcHJvYmxlbWFzJzogeyBwcmlvcmlkYWQ6IDIsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ2luY29tcGxldG8nOiB7IHByaW9yaWRhZDogMywgY2FudGlkYWQ6IDAgfSxcclxuICAgICAgICAndmFjaW8nOiB7IHByaW9yaWRhZDogNCwgY2FudGlkYWQ6IDAgfSxcclxuICAgICAgICAnY2l0YSBwYWN0YWRhJzogeyBwcmlvcmlkYWQ6IDUsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ29rJzogeyBwcmlvcmlkYWQ6IDYsIGNhbnRpZGFkOiAwIH1cclxuICAgIH1cclxuICAgIHZhciBtaW4gPSA2O1xyXG4gICAgdmFyIG1pblJlc3VtZW46IFJlc3VtZW5Fc3RhZG8gPSAnb2snO1xyXG4gICAgZm9yICh2YXIgZmVlZGJhY2sgb2YgZmVlZEJhY2tWaXZpZW5kYSkge1xyXG4gICAgICAgIHZhciByZXN1bWVuID0gZmVlZGJhY2sucmVzdW1lbjtcclxuICAgICAgICBwcmlvcmlkYWRlc1tyZXN1bWVuXS5jYW50aWRhZCsrO1xyXG4gICAgICAgIGlmIChwcmlvcmlkYWRlc1tyZXN1bWVuXS5wcmlvcmlkYWQgPCBtaW4pIHtcclxuICAgICAgICAgICAgbWluID0gcHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkO1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuID0gcmVzdW1lbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobWluUmVzdW1lbiA9PSAndmFjaW8nICYmIHByaW9yaWRhZGVzWydvayddLmNhbnRpZGFkIHx8IG1pblJlc3VtZW4gPT0gJ2luY29tcGxldG8nKSB7XHJcbiAgICAgICAgaWYgKGZhbHNlIC8qcmVzcHVlc3Rhc1tzcDFdPT0yICYmIHJlc3B1ZXN0YXNbc3A2XT09bnVsbCovKSB7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW4gPSAnY2l0YSBwYWN0YWRhJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuID0gJ2luY29tcGxldG8nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL1RPRE8gQVJSRUdMQVIgRVNURSBIT1JST1IsIEdFTkVSQUxJWkFSXHJcbiAgICB2YXIgdGFyZWEgPSBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSBhcyB1bmtub3duIGFzIElkRW5jXS50YXJlYS50YXJlYTtcclxuICAgIHZhciByZXN1bWVuRXN0YWRvOiBSZXN1bWVuRXN0YWRvO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG9TdXA6IFJlc3VtZW5Fc3RhZG8gPSAndmFjaW8nO1xyXG4gICAgaWYgKHRhcmVhID09ICdzdXBlJykge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAgPSBlc05vUmVhU3VwID8gJ25vIHJlYScgOiBtaW5SZXN1bWVuXHJcbiAgICAgICAgLy9wYXJhIHF1ZSBjb2xvcmVlIGJpZW4gZW4gbGEgaGRyIGRlbCBETSAobHVlZ28gZW4gYmJkZCBubyBzZSBndWFyZGEpXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IHJlc3VtZW5Fc3RhZG9TdXBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IGVzTm9SZWEgPyAnbm8gcmVhJyA6IG1pblJlc3VtZW5cclxuICAgIH1cclxuICAgIHZhciByZXN1bHRhZG86IFJlc3VsdGFkb1Jlc3VtZW4gPSB7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyxcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwLFxyXG4gICAgICAgIGNvZFJlYSxcclxuICAgICAgICBjb2ROb1JlYSxcclxuICAgICAgICBjb2RSZWFTdXAsXHJcbiAgICAgICAgY29kTm9SZWFTdXBcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRhZG9cclxufVxyXG4iXX0=