dmencu 2.3.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/client/client/client.d.ts +4 -1
  2. package/dist/client/client/client.js +163 -270
  3. package/dist/client/unlogged/abrir-formulario.d.ts +1 -8
  4. package/dist/client/unlogged/abrir-formulario.js +7 -48
  5. package/dist/client/unlogged/bypass-formulario.d.ts +2 -1
  6. package/dist/client/unlogged/bypass-formulario.js +12 -9
  7. package/dist/client/unlogged/redux-formulario.d.ts +140 -89
  8. package/dist/client/unlogged/redux-formulario.js +18 -62
  9. package/dist/client/unlogged/render-config.d.ts +46 -8
  10. package/dist/client/unlogged/render-config.js +146 -10
  11. package/dist/client/unlogged/render-formulario.d.ts +139 -0
  12. package/dist/client/unlogged/render-formulario.js +2045 -0
  13. package/dist/client/unlogged/render-formulario.tsx +609 -233
  14. package/dist/client/unlogged/render-general.d.ts +147 -0
  15. package/dist/client/unlogged/render-general.js +254 -0
  16. package/dist/client/unlogged/render-general.tsx +9 -3
  17. package/dist/client/unlogged/render-init.d.ts +17 -1
  18. package/dist/client/unlogged/render-init.js +107 -29
  19. package/dist/client/unlogged/tipos.d.ts +6 -4
  20. package/dist/client/unlogged/tipos.js +1 -1
  21. package/dist/server/server/app-dmencu.d.ts +8 -2
  22. package/dist/server/server/app-dmencu.js +16 -9
  23. package/dist/server/server/procedures-dmencu.d.ts +1 -1
  24. package/dist/server/server/procedures-dmencu.js +24 -21
  25. package/dist/server/server/table-sincronizaciones.js +3 -2
  26. package/dist/server/unlogged/tipos.d.ts +6 -4
  27. package/dist/server/unlogged/tipos.js +1 -1
  28. package/dist/unlogged/unlogged/abrir-formulario.d.ts +1 -8
  29. package/dist/unlogged/unlogged/abrir-formulario.js +7 -48
  30. package/dist/unlogged/unlogged/bypass-formulario.d.ts +2 -1
  31. package/dist/unlogged/unlogged/bypass-formulario.js +12 -9
  32. package/dist/unlogged/unlogged/redux-formulario.d.ts +140 -89
  33. package/dist/unlogged/unlogged/redux-formulario.js +18 -62
  34. package/dist/unlogged/unlogged/render-config.d.ts +46 -8
  35. package/dist/unlogged/unlogged/render-config.js +146 -10
  36. package/dist/unlogged/unlogged/render-formulario.d.ts +57 -10
  37. package/dist/unlogged/unlogged/render-formulario.js +363 -170
  38. package/dist/unlogged/unlogged/render-formulario.tsx +609 -233
  39. package/dist/unlogged/unlogged/render-general.d.ts +10 -0
  40. package/dist/unlogged/unlogged/render-general.js +8 -4
  41. package/dist/unlogged/unlogged/render-general.tsx +9 -3
  42. package/dist/unlogged/unlogged/render-init.d.ts +17 -1
  43. package/dist/unlogged/unlogged/render-init.js +107 -29
  44. package/dist/unlogged/unlogged/tipos.d.ts +6 -4
  45. package/dist/unlogged/unlogged/tipos.js +1 -1
  46. package/dist/unlogged/unlogged/unlogged.js +232 -50
  47. package/package.json +1 -1
  48. package/dist/unlogged/unlogged/render-config copy.d.ts +0 -11
  49. package/dist/unlogged/unlogged/render-config copy.js +0 -22
  50. package/dist/unlogged/unlogged/tipos copy.d.ts +0 -0
  51. package/dist/unlogged/unlogged/tipos copy.js +0 -2
@@ -220,7 +220,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
220
220
  }
221
221
  });
222
222
  };
223
- var getHdrQuery = function getHdrQuery(quotedCondViv, context, unidadAnalisisPrincipal, permiteGenerarMuestra) {
223
+ var getHdrQuery = function getHdrQuery(quotedCondViv, context, unidadAnalisisPrincipal, permiteGenerarMuestra, idper) {
224
224
  return `
225
225
  with ${context.be.db.quoteIdent(unidadAnalisisPrincipal)} as
226
226
  (select t.operativo, t.enc, t.json_encuesta as respuestas, t.resumen_estado as "resumenEstado",
@@ -259,7 +259,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
259
259
  ${(0, pg_promise_strict_1.json)(`
260
260
  select a.area as carga, observaciones_hdr as observaciones, min(fecha_asignacion) as fecha, ta.recepcionista,
261
261
  ${permiteGenerarMuestra ? `case
262
- when ta.asignado = ${context.be.db.quoteLiteral(context.user.idper)}
262
+ when ta.asignado = ${context.be.db.quoteLiteral(idper)}
263
263
  then true
264
264
  else false
265
265
  end` : `false`} as puede_autogenerar
@@ -268,7 +268,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
268
268
  ${permiteGenerarMuestra ? `
269
269
  union -- este union permite visualizar areas asignadas sin encuestas generadas
270
270
  select area as carga, null as observaciones, null as fecha, recepcionista, true as puede_autogenerar
271
- from tareas_areas where asignado = ${context.be.db.quoteLiteral(context.user.idper)} and tarea = 'encu'` : ''}
271
+ from tareas_areas where asignado = ${context.be.db.quoteLiteral(idper)} and tarea = 'encu'` : ''}
272
272
  `, 'fecha')} as cargas,
273
273
  ${(0, pg_promise_strict_1.jsono)(`select enc, jsonb_build_object('tem', tem, 'tarea', tarea) as otras from ${context.be.db.quoteIdent(unidadAnalisisPrincipal)}`, 'enc', `otras ||'{}'::jsonb`)}
274
274
  as "informacionHdr"
@@ -382,8 +382,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
382
382
  action: 'operativo_estructura_completa',
383
383
  parameters: [
384
384
  { name: 'operativo', typeName: 'text', references: 'operativos' },
385
+ { name: 'idper_logueado_tablet', typeName: 'text', defaultValue: null },
385
386
  ],
386
387
  resultOk: 'desplegarFormulario',
388
+ unlogged: true,
387
389
  coreFunction: async function (context, parameters) {
388
390
  var be = context.be;
389
391
  var result = await context.client.query(`select casilleros_jerarquizados($1) as formularios,
@@ -455,7 +457,7 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
455
457
  jsonb_build_object(
456
458
  'tarea', ${context.be.db.quoteLiteral(defaultTarea.tarea)},
457
459
  'fecha_asignacion', null,
458
- 'asignado', ${context.be.db.quoteLiteral(context.user.idper)},
460
+ 'asignado', ${context.be.db.quoteLiteral(parameters.idper_logueado_tablet || context.user.idper)},
459
461
  'main_form', ${context.be.db.quoteLiteral(defaultTarea.main_form)}
460
462
  ) as tarea
461
463
  `, []).fetchUniqueRow()).row;
@@ -778,7 +780,7 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
778
780
  from operativos
779
781
  where operativo = $1
780
782
  `, [operativo]).fetchUniqueValue()).value;
781
- var { row } = await context.client.query(getHdrQuery(condviv, context, unidad_analisis, permiteGenerarMuestra), [operativo, pk_raiz_value]).fetchUniqueRow();
783
+ var { row } = await context.client.query(getHdrQuery(condviv, context, unidad_analisis, permiteGenerarMuestra, context.user.idper), [operativo, pk_raiz_value]).fetchUniqueRow();
782
784
  row.informacionHdr[pk_raiz_value].tarea = {
783
785
  tarea,
784
786
  main_form
@@ -839,22 +841,23 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
839
841
  { name: 'persistentes', typeName: 'jsonb' },
840
842
  { name: 'modo_dm', typeName: 'text' },
841
843
  { name: 'cambia_modo_dm', typeName: 'boolean' },
844
+ { name: 'idper_logueado_tablet', typeName: 'text' },
842
845
  ],
846
+ unlogged: true,
843
847
  coreFunction: async function (context, parameters) {
844
848
  const OPERATIVO = await (0, exports.getOperativoActual)(context);
845
849
  var be = context.be;
846
- var { persistentes, modo_dm, cambia_modo_dm } = parameters;
847
- var num_sincro = 0;
850
+ var { persistentes, modo_dm, cambia_modo_dm, idper_logueado_tablet } = parameters;
851
+ const usernameLogueadoTablet = (await context.client.query(`select usuario from usuarios where idper = $1`, [idper_logueado_tablet]).fetchUniqueValue()).value;
848
852
  var token = (persistentes === null || persistentes === void 0 ? void 0 : persistentes.token) || (await be.procedure.token_get.coreFunction(context, {
849
853
  useragent: context.session.req.useragent,
850
- username: context.username
854
+ username: usernameLogueadoTablet
851
855
  })).token;
852
- var { value } = await context.client.query(`
856
+ const num_sincro = (await context.client.query(`
853
857
  INSERT INTO sincronizaciones (token, usuario, datos)
854
858
  VALUES ($1,$2,$3)
855
859
  RETURNING sincro
856
- `, [token, context.username, persistentes]).fetchUniqueValue();
857
- num_sincro = value;
860
+ `, [token, usernameLogueadoTablet, persistentes]).fetchUniqueValue()).value;
858
861
  var condviv = `
859
862
  tt.operativo= $1
860
863
  and asignado = $2
@@ -870,14 +873,14 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
870
873
  let carga = persistentes.cargas[persistentes.informacionHdr[idEnc].tem.carga];
871
874
  var tarea = persistentes.informacionHdr[idEnc].tarea.tarea;
872
875
  const cargaTareasAreas = (await context.client.query(`select recepcionista
873
- from tareas_areas
874
- where operativo= $1 and tarea = $2 and area = $3 --pk verificada
875
- `, [OPERATIVO, tarea, carga.carga]).fetchUniqueValue()).value;
876
+ from tareas_areas
877
+ where operativo= $1 and tarea = $2 and area = $3 --pk verificada
878
+ `, [OPERATIVO, tarea, carga.carga]).fetchUniqueValue()).value;
876
879
  if (!cargaTareasAreas && !carga.recepcionista) {
877
880
  throw Error(`no se definió un recepcionista para el operativo ${OPERATIVO}, tarea ${tarea}, área ${carga.carga}, por favor comuniquesé con GABINETE para que carguen un recepcionista`);
878
881
  }
879
882
  if (Number(idEnc) < 0) {
880
- idEnc = await persistirEncuestaAutogeneradaEnDM(context, OPERATIVO, carga.carga, idEnc, token, respuestasUAPrincipal, carga.recepcionista || cargaTareasAreas, context.user.idper, modo_dm, cambia_modo_dm);
883
+ idEnc = await persistirEncuestaAutogeneradaEnDM(context, OPERATIVO, carga.carga, idEnc, token, respuestasUAPrincipal, carga.recepcionista || cargaTareasAreas, persistentes.idper, modo_dm, cambia_modo_dm);
881
884
  }
882
885
  var puedoGuardarEnTEM = true;
883
886
  var { params, setters } = getSettersAndParametersForReaNoReaResumenEstado({
@@ -889,7 +892,7 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
889
892
  ],
890
893
  params: [OPERATIVO, idEnc, tarea, token]
891
894
  });
892
- if (cambia_modo_dm) {
895
+ if (cambia_modo_dm || persistentes.idper != idper_logueado_tablet) {
893
896
  setters.push(`operacion = 'descargar'`);
894
897
  }
895
898
  var queryTareasTem = await context.client.query(`update tareas_tem
@@ -921,7 +924,7 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
921
924
  returning 'ok'`, [OPERATIVO, idEnc, resultado]).fetchUniqueRow();
922
925
  }
923
926
  else {
924
- await fs_1.promises.appendFile('local-recibido-sin-token.txt', JSON.stringify({ now: new Date(), user: context.username, idCaso: idEnc, [pk_agregada]: respuestasUAPrincipal }) + '\n\n', 'utf8');
927
+ await fs_1.promises.appendFile('local-recibido-sin-token.txt', JSON.stringify({ now: new Date(), idper: persistentes.idper, idCaso: idEnc, [pk_agregada]: respuestasUAPrincipal }) + '\n\n', 'utf8');
925
928
  }
926
929
  }
927
930
  }
@@ -931,18 +934,18 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
931
934
  from operativos
932
935
  where operativo = $1
933
936
  `, [OPERATIVO]).fetchUniqueValue()).value;
934
- var { row } = await context.client.query(getHdrQuery(condviv, context, UA_PRINCIPAL, permiteGenerarMuestra), [OPERATIVO, context.user.idper]).fetchUniqueRow();
937
+ var { row } = await context.client.query(getHdrQuery(condviv, context, UA_PRINCIPAL, permiteGenerarMuestra, idper_logueado_tablet), [OPERATIVO, idper_logueado_tablet]).fetchUniqueRow();
935
938
  await context.client.query(`update tareas_tem tt
936
939
  set estado = $4, cargado_dm=$3::text
937
940
  where ${condviv}
938
- returning enc`, [OPERATIVO, parameters.enc ? parameters.enc : context.user.idper, token, ESTADO_POSTERIOR_CARGA]).fetchAll();
941
+ returning enc`, [OPERATIVO, idper_logueado_tablet, token, ESTADO_POSTERIOR_CARGA]).fetchAll();
939
942
  return {
940
943
  ...row,
941
944
  operativo: OPERATIVO,
942
945
  soloLectura: false,
943
946
  token,
944
947
  num_sincro,
945
- idper: context.user.idper,
948
+ idper: idper_logueado_tablet,
946
949
  cargas: likeAr.createIndex(row.cargas.map(carga => ({ ...carga, fecha: carga.fecha ? best_globals_1.date.iso(carga.fecha).toDmy() : null, estado_carga: 'relevamiento' })), 'carga')
947
950
  };
948
951
  }
@@ -2056,4 +2059,4 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
2056
2059
  }
2057
2060
  ];
2058
2061
  });
2059
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUFrWmIsb0RBaUNDO0lBL2FELGtDQUFrQztJQUNsQyxpREFBK0I7SUFLL0IseURBQTREO0lBRTVELCtDQUF3RDtJQUN4RCwyQkFBb0M7SUFFcEMsZ0RBQWdEO0lBR2hELHlEQUF3RDtJQUN4RCxxQ0FBZ0M7SUFFaEMsMkNBQWtEO0lBQ2xELDZDQUErQztJQUUvQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXBDLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFFN0IsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7SUFDbkMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFDdEMsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLENBQUM7SUFDMUMsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQUM7SUFDaEQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBSTFCLElBQUksZUFBZ0MsQ0FBQztJQUNyQyxJQUFJLGNBQWMsR0FBRyxHQUFHLENBQUE7SUFFakIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQW9CLEVBQUUsRUFBRSxDQUN2RCxlQUFlLEdBQUcsR0FBRyxDQUFDO0lBRGIsUUFBQSxrQkFBa0Isc0JBQ0w7SUFFbkIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQzVDLGNBQWMsR0FBRyxHQUFHLENBQUM7SUFEWixRQUFBLGdCQUFnQixvQkFDSjtJQUV6QixJQUFB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QUFVLEVBQUU7Z0JBQ1IsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRTtnQkFDakUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7YUFDcEM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDaEIsWUFBWSxFQUFFLEtBQUssV0FBVyxPQUF5QixFQUFFLFVBQTJFO2dCQUNoSSxDQUFDLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ3ZCOzs7Z0NBR2dCLEVBQ2hCLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQ3pDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBRXhCLE9BQU8sd0JBQXdCLFVBQVUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztZQUNqRSxDQUFDO1NBQ0o7S0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBQcm9jZWR1cmVEZWYsIFRhYmxlRGVmaW5pdGlvbiwgQ2xpZW50LCBUYWJsZURlZmluaXRpb25zIH0gZnJvbSBcIi4vdHlwZXMtZG1lbmN1XCI7XHJcbmltcG9ydCB7IFByb2NlZHVyZUNvbnRleHQsIENvcmVGdW5jdGlvblBhcmFtZXRlcnMsIEZvcmVpZ25LZXkgfSBmcm9tIFwibWV0YS1lbmNcIjtcclxuaW1wb3J0ICogYXMgbGlrZUFyIGZyb20gXCJsaWtlLWFyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBJZFVuaWRhZEFuYWxpc2lzLCBVbmlkYWRBbmFsaXNpcywgRXN0YWRvQWNjaW9uLCBJZEVuYywgSWRUYXJlYSwgUmVzcHVlc3Rhc1JhaXosIElkT3BlcmF0aXZvLCBJZENhcmdhLCBNb2RvRE0gfSBmcm9tIFwiLi4vdW5sb2dnZWQvdGlwb3NcIjtcclxuXHJcbmltcG9ydCB7IE9wZXJhdGl2b0dlbmVyYXRvciB9IGZyb20gXCJwcm9jZXNhbWllbnRvXCI7XHJcblxyXG5pbXBvcnQgeyBqc29uLCBqc29ubywgUmVzdWx0Um93cyB9IGZyb20gXCJwZy1wcm9taXNlLXN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgY2hhbmdpbmcsIGRhdGUsIGNvYWxlc2NlIH0gZnJvbSAnYmVzdC1nbG9iYWxzJztcclxuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tIFwiZnNcIjtcclxuXHJcbmltcG9ydCAqIGFzIEV4cHJlc2lvblBhcnNlciBmcm9tICdleHByZS1wYXJzZXInO1xyXG5pbXBvcnQgeyB0YXJlYXMgfSBmcm9tIFwiLi90YWJsZS10YXJlYXNcIjtcclxuaW1wb3J0IHsgcHJlcGVuZExpc3RlbmVyIH0gZnJvbSBcInByb2Nlc3NcIjtcclxuaW1wb3J0IHsgZ2V0RGlhc0FQYXNhclF1ZXJ5IH0gZnJvbSBcIi4vdGFibGUtdGFyZWFzX3RlbVwiO1xyXG5pbXBvcnQgeyBlcnJvciB9IGZyb20gXCJjb25zb2xlXCI7XHJcbmltcG9ydCB7IENvbnRleHQgfSBmcm9tIFwidm1cIjtcclxuaW1wb3J0IHsgZXhwZWN0ZWQsIHVuZXhwZWN0ZWQgfSBmcm9tIFwiY2FzdC1lcnJvclwiO1xyXG5pbXBvcnQgeyBnZXRNb2RvQnlQb2xpY3kgfSBmcm9tIFwiLi9hcHAtZG1lbmN1XCI7XHJcblxyXG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxudmFyIHNxbFRvb2xzID0gcmVxdWlyZSgnc3FsLXRvb2xzJyk7XHJcblxyXG52YXIgZGlzY3JlcGFuY2VzID0gcmVxdWlyZSgnZGlzY3JlcGFuY2VzJyk7XHJcblxyXG5jb25zdCBmb3JtUHJpbmNpcGFsID0gJ0Y6RjEnO1xyXG5cclxuY29uc3QgRVNUQURPX1BPU1RFUklPUl9DQVJHQSA9ICdDJztcclxuY29uc3QgRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQSA9ICdEJztcclxuY29uc3QgT1BFUkFDSU9OX1BSRVBBUkFSX0NBUkdBID0gJ2Nhcmdhcic7XHJcbmNvbnN0IE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQSA9ICdkZXNjYXJnYXInO1xyXG5jb25zdCBERUZBVUxUX0RPTUlOSU8gPSAzO1xyXG5cclxuZXhwb3J0IHR5cGUgZ2VuZXJhcklkRW5jRnVuID0gKGFyZWE6IG51bWJlciwgaW5kZXg6IG51bWJlcikgPT4gSWRFbmNcclxuXHJcbnZhciBnZW5lcmFySWRFbmNGdW46IGdlbmVyYXJJZEVuY0Z1bjtcclxudmFyIG1heEFFbmNQb3JBcmVhID0gOTk5XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0R2VuZXJhcklkRW5jRnVuID0gKGZ1bjogZ2VuZXJhcklkRW5jRnVuKSA9PlxyXG4gICAgZ2VuZXJhcklkRW5jRnVuID0gZnVuO1xyXG5cclxuZXhwb3J0IGNvbnN0IHNldE1heEVuY1BvckFyZWEgPSAobWF4OiBudW1iZXIpID0+XHJcbiAgICBtYXhBRW5jUG9yQXJlYSA9IG1heDtcclxuXHJcbnNldEdlbmVyYXJJZEVuY0Z1bigoYXJlYTogbnVtYmVyLCBudW1FbmM6IG51bWJlcikgPT4gYXJlYS50b1N0cmluZygpICsgbnVtRW5jLnRvU3RyaW5nKCkucGFkU3RhcnQobWF4QUVuY1BvckFyZWEudG9TdHJpbmcoKS5sZW5ndGgsICcwJykgYXMgdW5rbm93biBhcyBJZEVuYyk7XHJcblxyXG5zZXRNYXhFbmNQb3JBcmVhKDk5OSk7XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZW5lcmFyTnVldm9JZEVuYyhjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBhcmVhOiBudW1iZXIsIG1heEFFbmNQb3JBcmVhOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHNpZ3VpZW50ZU51bWVyb0VuY3Vlc3RhID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBTRUxFQ1Qgb2J0ZW5lcl9zaWd1aWVudGVfY29udGFkb3JfYXJlYSgkMSwkMiwkMykgQVMgbmV4dF9jb3VudGVyO1xyXG4gICAgYCwgW29wZXJhdGl2bywgYXJlYSwgbWF4QUVuY1BvckFyZWFdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgcmV0dXJuIGdlbmVyYXJJZEVuY0Z1bihhcmVhLCBzaWd1aWVudGVOdW1lcm9FbmN1ZXN0YSk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRPcGVyYXRpdm9BY3R1YWwgPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCkgPT4ge1xyXG4gICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgIHZhciBvcGVyYXRpdm8gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHNlbGVjdCBvcGVyYXRpdm9cclxuICAgICAgICAgICAgZnJvbSBwYXJhbWV0cm9zXHJcbiAgICAgICAgICAgIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYFxyXG4gICAgICAgICwgW11cclxuICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZVxyXG4gICAgaWYgKG9wZXJhdGl2bykge1xyXG4gICAgICAgIHJldHVybiBvcGVyYXRpdm9cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoJ25vIHNlIGNvbmZpZ3Vyw7MgdW4gb3BlcmF0aXZvIGVuIGxhIHRhYmxhIHBhcsOhbWV0cm9zJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGdldERlZmF1bHRUYXJlYShjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSB7XHJcbiAgICByZXR1cm4gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBzZWxlY3QgKiBcclxuICAgICAgICAgICAgZnJvbSB0YXJlYXMgXHJcbiAgICAgICAgICAgIHdoZXJlIGVzX2luaWNpYWwgYW5kIG9wZXJhdGl2byA9ICQxXHJcbiAgICBgLCBbb3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBwZXJzaXN0aXJFbmN1ZXN0YUF1dG9nZW5lcmFkYUVuRE0oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgT1BFUkFUSVZPOiBJZE9wZXJhdGl2bywgYXJlYTogbnVtYmVyLCBlbmNBdXRvZ2VuZXJhZG9EbTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIHJlY2VwY2lvbmlzdGE6IHN0cmluZywgYXNpZ25hZG86IHN0cmluZywgbW9kb19kbTogTW9kb0RNLCBjYW1iaWFfbW9kb19kbTogYm9vbGVhbik6IFByb21pc2U8SWRFbmM+IHtcclxuICAgIGxldCBpZEVuYyA9IG51bGw7XHJcbiAgICB2YXIgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgIHNlbGVjdCBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSBcclxuICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMVxyXG4gICAgYCwgW09QRVJBVElWT10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICBpZiAocGVybWl0ZV9nZW5lcmFyX211ZXN0cmEpIHtcclxuICAgICAgICBjb25zdCBhdXRvZ2VuZXJhZG9GaWVsZCA9IG1vZG9fZG0gPT0gJ3Byb2R1YycgPyAnZW5jX2F1dG9nZW5lcmFkb19kbScgOiAnZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhJztcclxuICAgICAgICBjb25zdCByZXN1bHRVcGRhdGUgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgIFVQREFURSB0ZW0gXHJcbiAgICAgICAgICAgICAgICBzZXQgKGpzb25fYmFja3VwLCBqc29uX2VuY3Vlc3RhLCBmZWNoYV9iYWNrdXApID0gXHJcbiAgICAgICAgICAgICAgICAgICAgKCQ0LCAkNSwgY3VycmVudF90aW1lc3RhbXApXHJcbiAgICAgICAgICAgICAgICB3aGVyZSAob3BlcmF0aXZvID0gJDEgYW5kICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KGF1dG9nZW5lcmFkb0ZpZWxkKX0gPSAkMiBhbmQgdG9rZW5fYXV0b2dlbmVyYWRvX2RtID0gJDMpXHJcbiAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgIGAsIFtPUEVSQVRJVk8sIGVuY0F1dG9nZW5lcmFkb0RtLCB0b2tlbiwgcmVzcHVlc3Rhc1JhaXosIHJlc3B1ZXN0YXNSYWl6XSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgIC8vIGhhZ28gaW5zZXJ0IHBvcnF1ZSBubyBleGlzdGUgZW4gdGVtXHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFRhcmVhID0gYXdhaXQgZ2V0RGVmYXVsdFRhcmVhKGNvbnRleHQsIE9QRVJBVElWTyk7XHJcbiAgICAgICAgaWYgKHJlc3VsdFVwZGF0ZS5yb3dDb3VudCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGlkRW5jID0gYXdhaXQgZ2VuZXJhck51ZXZvSWRFbmMoY29udGV4dCwgT1BFUkFUSVZPLCBhcmVhLCBtYXhBRW5jUG9yQXJlYSlcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgSU5TRVJUIGludG8gdGVtIChcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgZW5jLFxyXG4gICAgICAgICAgICAgICAgICAgIGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgZG9taW5pbyxcclxuICAgICAgICAgICAgICAgICAgICBoYWJpbGl0YWRhLFxyXG4gICAgICAgICAgICAgICAgICAgICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KGF1dG9nZW5lcmFkb0ZpZWxkKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5fYXV0b2dlbmVyYWRvX2RtLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmVhX2FjdHVhbCxcclxuICAgICAgICAgICAgICAgICAgICBqc29uX2JhY2t1cCxcclxuICAgICAgICAgICAgICAgICAgICBqc29uX2VuY3Vlc3RhLCBcclxuICAgICAgICAgICAgICAgICAgICBmZWNoYV9iYWNrdXBcclxuICAgICAgICAgICAgICAgICkgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzICgkMSwgJDIsICQzLCAkNCwgJDUsICQ2LCAkNywgJDgsICQ5LCAkMTAsIGN1cnJlbnRfdGltZXN0YW1wKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgIGAsIFtcclxuICAgICAgICAgICAgICAgIE9QRVJBVElWTyxcclxuICAgICAgICAgICAgICAgIGlkRW5jLFxyXG4gICAgICAgICAgICAgICAgYXJlYSxcclxuICAgICAgICAgICAgICAgIERFRkFVTFRfRE9NSU5JTyxcclxuICAgICAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgICAgICBlbmNBdXRvZ2VuZXJhZG9EbSxcclxuICAgICAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICAgICAgZGVmYXVsdFRhcmVhLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzUmFpeixcclxuICAgICAgICAgICAgXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZEVuYyA9IHJlc3VsdFVwZGF0ZS5yb3cuZW5jXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgT1BFUkFUSVZPKTtcclxuICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICBzZXQgcmVjZXBjaW9uaXN0YSA9ICQ0LCBhc2lnbmFkbyA9ICQ1XHJcbiAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgIGAsIFtPUEVSQVRJVk8sIGlkRW5jLCBkZWZhdWx0VGFyZWEudGFyZWEsIHJlY2VwY2lvbmlzdGEsIGFzaWduYWRvXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICBzZXQgY2FyZ2Fkb19kbSA9ICQ0LCBlc3RhZG8gPSAkNSwgb3BlcmFjaW9uID0gJDZcclxuICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgYCwgW09QRVJBVElWTywgaWRFbmMsIGRlZmF1bHRUYXJlYS50YXJlYSwgdG9rZW4sIEVTVEFET19QT1NURVJJT1JfQ0FSR0EsIGNhbWJpYV9tb2RvX2RtID8gbnVsbCA6IE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQV1cclxuICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaWRFbmNcclxufVxyXG5cclxuLypkZWZpbmljacOzbiBkZSBlc3RydWN0dXJhIGNvbXBsZXRhLCBjdWFuZG8gZXhpc3RhIGluZy1lbmMgaGF5IHF1ZSBwb25lcmxvIGFow60qL1xyXG50eXBlIEVzdHJ1Y3R1cmFUYWJsYSA9IHsgdGFibGVOYW1lOiBzdHJpbmcsIHBrRmllbGRzOiB7IGZpZWxkTmFtZTogc3RyaW5nIH1bXSwgY2hpbGRUYWJsZXM6IEVzdHJ1Y3R1cmFUYWJsYVtdIH07XHJcbmZ1bmN0aW9uIGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCB0YWJsZU5hbWU6IHN0cmluZykge1xyXG4gICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgIHZhciBtYWluVGFibGVEZWY6IFRhYmxlRGVmaW5pdGlvbiA9IGJlLnRhYmxlU3RydWN0dXJlc1t0YWJsZU5hbWVdKGNvbnRleHQpO1xyXG4gICAgdmFyIGdldFBrRnJvbVRhYmxlRGVmID0gZnVuY3Rpb24gZ2V0UGtGcm9tVGFibGVEZWYodGFibGVEZWY6IFRhYmxlRGVmaW5pdGlvbikge1xyXG4gICAgICAgIHJldHVybiB0YWJsZURlZi5wcmltYXJ5S2V5Lm1hcChmdW5jdGlvbiAocGspIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZmllbGROYW1lOiBwayB9O1xyXG4gICAgICAgIH0pXHJcbiAgICB9O1xyXG4gICAgdmFyIGdldEZrRnJvbVRhYmxlRGVmID0gZnVuY3Rpb24gZ2V0RmtGcm9tVGFibGVEZWYodGFibGVEZWY6IFRhYmxlRGVmaW5pdGlvbiwgcGFyZW50VGFibGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgcGFyZW50RmsgPSAoPEZvcmVpZ25LZXlbXT50YWJsZURlZi5mb3JlaWduS2V5cykuZmluZChmayA9PiBmay5yZWZlcmVuY2VzID09IHBhcmVudFRhYmxlTmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudEZrID8gcGFyZW50RmsuZmllbGRzIDogW107XHJcbiAgICB9XHJcbiAgICB2YXIgc3RydWN0OiBFc3RydWN0dXJhVGFibGEgPSB7XHJcbiAgICAgICAgdGFibGVOYW1lOiBtYWluVGFibGVEZWYubmFtZSxcclxuICAgICAgICBwa0ZpZWxkczogZ2V0UGtGcm9tVGFibGVEZWYobWFpblRhYmxlRGVmKSxcclxuICAgICAgICBjaGlsZFRhYmxlczogW11cclxuICAgIH07XHJcbiAgICBpZiAobWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcyAmJiBtYWluVGFibGVEZWYuZGV0YWlsVGFibGVzLmxlbmd0aCkge1xyXG4gICAgICAgIG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAoZGV0YWlsVGFibGUpIHtcclxuICAgICAgICAgICAgaWYgKGRldGFpbFRhYmxlLnRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICBzdHJ1Y3QuY2hpbGRUYWJsZXMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIGRldGFpbFRhYmxlLnRhYmxlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBma0ZpZWxkczogZ2V0RmtGcm9tVGFibGVEZWYoYmUudGFibGVTdHJ1Y3R1cmVzW2RldGFpbFRhYmxlLnRhYmxlXShjb250ZXh0KSwgdGFibGVOYW1lKSB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RydWN0O1xyXG59XHJcbi8qIGZpbiBkZWZpbmljaW9uIGVzdHJ1Y3R1cmEgY29tcGxldGEgKi9cclxuXHJcbnR5cGUgQW55T2JqZWN0ID0geyBbazogc3RyaW5nXTogYW55IH1cclxuXHJcbnZhciBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyA9IChmdW5QYXJhbXM6IHsgdGFyZWE6IElkVGFyZWEsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogUmVzcHVlc3Rhc1JhaXosIHNldHRlcnM6IHN0cmluZ1tdLCBwYXJhbXM6IGFueVtdIH0pID0+IHtcclxuICAgIGxldCB7IHRhcmVhLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIHNldHRlcnMsIHBhcmFtcyB9ID0gZnVuUGFyYW1zO1xyXG4gICAgbGV0IHsgcmVzdW1lbkVzdGFkb1N1cCwgY29kTm9SZWFTdXAsIGNvZFJlYVN1cCwgcmVzdW1lbkVzdGFkbywgY29kTm9SZWEsIGNvZFJlYSB9ID0gcmVzcHVlc3Rhc1VBUHJpbmNpcGFsO1xyXG4gICAgc2V0dGVycyA9IHNldHRlcnMuY29uY2F0KFtcclxuICAgICAgICBgcmVzdW1lbl9lc3RhZG8ke3RhcmVhID09ICdzdXBlJyA/ICdfc3VwJyA6ICcnfT0kJHtwYXJhbXMubGVuZ3RoICsgMX1gLFxyXG4gICAgICAgIGBub3JlYSR7dGFyZWEgPT0gJ3N1cGUnID8gJ19zdXAnIDogJyd9PSQke3BhcmFtcy5sZW5ndGggKyAyfWAsXHJcbiAgICAgICAgYHJlYSR7dGFyZWEgPT0gJ3N1cGUnID8gJ19zdXAnIDogJyd9PSQke3BhcmFtcy5sZW5ndGggKyAzfWBcclxuICAgIF0pXHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuY29uY2F0KFtcclxuICAgICAgICB0YXJlYSA9PSAnc3VwZScgPyByZXN1bWVuRXN0YWRvU3VwIDogcmVzdW1lbkVzdGFkbyxcclxuICAgICAgICB0YXJlYSA9PSAnc3VwZScgPyBjb2ROb1JlYVN1cCA6IGNvZE5vUmVhLFxyXG4gICAgICAgIHRhcmVhID09ICdzdXBlJyA/IGNvZFJlYVN1cCA6IGNvZFJlYVxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4geyBzZXR0ZXJzLCBwYXJhbXMgfVxyXG59XHJcblxyXG52YXIgZ3VhcmRhckVuY3Vlc3RhRW5UZW0gPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRFbmM6IElkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWw6IFJlc3B1ZXN0YXNSYWl6LCB0YXJlYTogSWRUYXJlYSkgPT4ge1xyXG4gICAgdmFyIHsgcGFyYW1zLCBzZXR0ZXJzIH0gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLFxyXG4gICAgICAgIHNldHRlcnM6IFtganNvbl9lbmN1ZXN0YSA9ICQzYCwgYGZlY2hhX21vZGlmX2VuY3Vlc3RhID0gY3VycmVudF90aW1lc3RhbXBgXSxcclxuICAgICAgICBwYXJhbXM6IFtvcGVyYXRpdm8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWxdXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAsXHJcbiAgICAgICAgcGFyYW1zXHJcbiAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbn1cclxuXHJcbnZhciBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogSWRFbmMsIHRhcmVhOiBJZFRhcmVhLCBqc29uX2VuY3Vlc3RhOiBhbnkpID0+IHtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICBjb25zdCBVQV9QUklOQ0lQQUwgPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIG9wZXJhdGl2bykpLnVuaWRhZF9hbmFsaXNpcztcclxuICAgIHJldHVybiBhd2FpdCBiZS5wcm9jZWR1cmUuZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhci5jb3JlRnVuY3Rpb24oXHJcbiAgICAgICAgY29udGV4dCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzogb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICBwZXJzaXN0ZW50ZXM6IHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXM6IHtcclxuICAgICAgICAgICAgICAgICAgICBbVUFfUFJJTkNJUEFMXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZW5jXToganNvbl9lbmN1ZXN0YVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpbmZvcm1hY2lvbkhkcjoge1xyXG4gICAgICAgICAgICAgICAgICAgIFtlbmNdOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgKVxyXG59XHJcblxyXG52YXIgZ2V0SGRyUXVlcnkgPSBmdW5jdGlvbiBnZXRIZHJRdWVyeShxdW90ZWRDb25kVml2OiBzdHJpbmcsIGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsOiBJZFVuaWRhZEFuYWxpc2lzLCBwZXJtaXRlR2VuZXJhck11ZXN0cmE6IGJvb2xlYW4pIHtcclxuICAgIHJldHVybiBgXHJcbiAgICB3aXRoICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX0gYXMgXHJcbiAgICAgICAgKHNlbGVjdCB0Lm9wZXJhdGl2bywgdC5lbmMsIHQuanNvbl9lbmN1ZXN0YSBhcyByZXNwdWVzdGFzLCB0LnJlc3VtZW5fZXN0YWRvIGFzIFwicmVzdW1lbkVzdGFkb1wiLCBcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ2RvbWluaW8nICAgICAgICwgZG9taW5pbyAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnbm9tY2FsbGUnICAgICAgLCBub21jYWxsZSAgICAgICxcclxuICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIHNlY3RvciAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2VkaWZpY2lvJyAgICAgICwgZWRpZmljaW8gICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZW50cmFkYScgICAgICAgLCBlbnRyYWRhICAgICAgICxcclxuICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG5yb2NhdGFzdHJhbCAgLFxyXG4gICAgICAgICAgICAgICAgJ3Bpc28nICAgICAgICAgICwgcGlzbyAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZGVwYXJ0YW1lbnRvJyAgLCBkZXBhcnRhbWVudG8gICxcclxuICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIGhhYml0YWNpb24gICAgLFxyXG4gICAgICAgICAgICAgICAgJ2Nhc2EnICAgICAgICAgICwgY2FzYSAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAncHJpb3JpZGFkJyAgICAgLCByZXNlcnZhKzEgICAgICxcclxuICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIHR0LmNhcmdhX29ic2VydmFjaW9uZXMgLFxyXG4gICAgICAgICAgICAgICAgJ2NpdGEnICAgICAgICAgICwgY2l0YSAsXHJcbiAgICAgICAgICAgICAgICAnY2FyZ2EnICAgICAgICAgLCB0LmFyZWEgICAgICAgICBcclxuICAgICAgICAgICAgKSBhcyB0ZW0sIHQuYXJlYSxcclxuICAgICAgICAgICAgLS1UT0RPOiBHRU5FUkFMSVpBUlxyXG4gICAgICAgICAgICBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAndGFyZWEnLCB0dC50YXJlYSxcclxuICAgICAgICAgICAgICAgICdmZWNoYV9hc2lnbmFjaW9uJywgZmVjaGFfYXNpZ25hY2lvbixcclxuICAgICAgICAgICAgICAgICdhc2lnbmFkbycsIGFzaWduYWRvLFxyXG4gICAgICAgICAgICAgICAgJ21haW5fZm9ybScsIG1haW5fZm9ybVxyXG4gICAgICAgICAgICApIGFzIHRhcmVhLFxyXG4gICAgICAgICAgICBtaW4oZmVjaGFfYXNpZ25hY2lvbikgYXMgZmVjaGFfYXNpZ25hY2lvblxyXG4gICAgICAgICAgICBmcm9tIHRlbSB0IGxlZnQgam9pbiB0YXJlYXNfdGVtIHR0IG9uICh0Lm9wZXJhdGl2byA9IHR0Lm9wZXJhdGl2byBhbmQgdC5lbmMgPSB0dC5lbmMgYW5kIHQudGFyZWFfYWN0dWFsID0gdHQudGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbGVmdCBqb2luIHRhcmVhcyB0YSBvbiB0LnRhcmVhX2FjdHVhbCA9IHRhLnRhcmVhXHJcbiAgICAgICAgICAgIHdoZXJlIHQuaGFiaWxpdGFkYSBhbmQgJHtxdW90ZWRDb25kVml2fVxyXG4gICAgICAgICAgICBncm91cCBieSB0Lm9wZXJhdGl2bywgdC5lbmMsIHQuanNvbl9lbmN1ZXN0YSwgdC5yZXN1bWVuX2VzdGFkbywgZG9taW5pbywgbm9tY2FsbGUsc2VjdG9yLGVkaWZpY2lvLCBlbnRyYWRhLCBucm9jYXRhc3RyYWwsIHBpc28sZGVwYXJ0YW1lbnRvLGhhYml0YWNpb24sY2FzYSxyZXNlcnZhLHR0LmNhcmdhX29ic2VydmFjaW9uZXMsIGNpdGEsIHQuYXJlYSwgdHQudGFyZWEsIGZlY2hhX2FzaWduYWNpb24sIGFzaWduYWRvLCBtYWluX2Zvcm1cclxuICAgICAgICApXHJcbiAgICAgICAgc2VsZWN0IGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwodW5pZGFkQW5hbGlzaXNQcmluY2lwYWwpfSwgJHtqc29ubyhcclxuICAgICAgICBgc2VsZWN0IGVuYywgcmVzcHVlc3RhcywganNvbmJfYnVpbGRfb2JqZWN0KCdyZXN1bWVuRXN0YWRvJyxcInJlc3VtZW5Fc3RhZG9cIikgYXMgb3RyYXMgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9YCxcclxuICAgICAgICAnZW5jJyxcclxuICAgICAgICBgb3RyYXMgfHwgY29hbGVzY2UocmVzcHVlc3Rhcywne30nOjpqc29uYilgXHJcbiAgICApfVxyXG4gICAgICAgICAgICApIGFzIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICR7anNvbihgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgYS5hcmVhIGFzIGNhcmdhLCBvYnNlcnZhY2lvbmVzX2hkciBhcyBvYnNlcnZhY2lvbmVzLCBtaW4oZmVjaGFfYXNpZ25hY2lvbikgYXMgZmVjaGEsIHRhLnJlY2VwY2lvbmlzdGEsXHJcbiAgICAgICAgICAgICAgICAke3Blcm1pdGVHZW5lcmFyTXVlc3RyYSA/IGBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGEuYXNpZ25hZG8gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKGNvbnRleHQudXNlci5pZHBlcil9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kYDogYGZhbHNlYH0gYXMgcHVlZGVfYXV0b2dlbmVyYXJcclxuICAgICAgICAgICAgICAgICAgICBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX0gYXV4IGlubmVyIGpvaW4gYXJlYXMgYSB1c2luZyAob3BlcmF0aXZvLCBhcmVhKSBpbm5lciBqb2luIHRhcmVhc19hcmVhcyB0YSBvbiAoYS5hcmVhID0gdGEuYXJlYSBhbmQgYXV4LnRhcmVhLT4+J3RhcmVhJyA9IHRhLnRhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwIGJ5IGEuYXJlYSwgb2JzZXJ2YWNpb25lc19oZHIsIHRhLnJlY2VwY2lvbmlzdGEsIHB1ZWRlX2F1dG9nZW5lcmFyXHJcbiAgICAgICAgICAgICAgICAke3Blcm1pdGVHZW5lcmFyTXVlc3RyYSA/IGBcclxuICAgICAgICAgICAgICAgICAgICB1bmlvbiAtLSBlc3RlIHVuaW9uIHBlcm1pdGUgdmlzdWFsaXphciBhcmVhcyBhc2lnbmFkYXMgc2luIGVuY3Vlc3RhcyBnZW5lcmFkYXNcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgYXJlYSBhcyBjYXJnYSwgbnVsbCBhcyBvYnNlcnZhY2lvbmVzLCBudWxsIGFzIGZlY2hhLCByZWNlcGNpb25pc3RhLCB0cnVlIGFzIHB1ZWRlX2F1dG9nZW5lcmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX2FyZWFzIHdoZXJlIGFzaWduYWRvID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChjb250ZXh0LnVzZXIuaWRwZXIpfSBhbmQgdGFyZWEgPSAnZW5jdSdgIDogJyd9XHJcbiAgICAgICAgICAgICAgICBgLCAnZmVjaGEnKX0gYXMgY2FyZ2FzLFxyXG4gICAgICAgICAgICAke2pzb25vKFxyXG4gICAgICAgIGBzZWxlY3QgZW5jLCBqc29uYl9idWlsZF9vYmplY3QoJ3RlbScsIHRlbSwgJ3RhcmVhJywgdGFyZWEpIGFzIG90cmFzIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodW5pZGFkQW5hbGlzaXNQcmluY2lwYWwpfWAsXHJcbiAgICAgICAgJ2VuYycsXHJcbiAgICAgICAgYG90cmFzIHx8J3t9Jzo6anNvbmJgXHJcbiAgICApfVxyXG4gICAgICAgICAgICBhcyBcImluZm9ybWFjaW9uSGRyXCJcclxuYFxyXG59XHJcblxyXG5leHBvcnQgdmFyIHNldEhkclF1ZXJ5ID0gKG15RnVuOiAocXVvdGVkQ29uZFZpdjogc3RyaW5nLCBjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCB1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbDogSWRVbmlkYWRBbmFsaXNpcywgcGVybWl0ZUdlbmVyYXJNdWVzdHJhOiBib29sZWFuKSA9PiBzdHJpbmcpID0+IGdldEhkclF1ZXJ5ID0gbXlGdW5cclxuXHJcbmNvbnN0IGdldFVBUHJpbmNpcGFsID0gYXN5bmMgKGNsaWVudDogQ2xpZW50LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSA9PlxyXG4gICAgKGF3YWl0IGNsaWVudC5xdWVyeShcclxuICAgICAgICBgc2VsZWN0ICpcclxuICAgICAgICAgICAgZnJvbSB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgcHJpbmNpcGFsXHJcbiAgICAgICAgYFxyXG4gICAgICAgICxcclxuICAgICAgICBbb3BlcmF0aXZvXVxyXG4gICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3dcclxuXHJcbnZhciBmdW5jaW9uZXNDb25vY2lkYXM6IHsgW2sgaW4gc3RyaW5nXTogYm9vbGVhbiB9ID0ge31cclxuXHJcbnZhciBjb21waWxlciA9IG5ldyBFeHByZXNpb25QYXJzZXIuQ29tcGlsZXIoe1xyXG4gICAgbGFuZ3VhZ2U6ICdqcycsXHJcbiAgICB2YXJXcmFwcGVyOiAodmFyX25hbWU6IHN0cmluZykgPT4gYGhlbHBlcnMubnVsbDJ6ZXJvKHZhbG9yZXMuJHt2YXJfbmFtZX0pYCxcclxuICAgIGZ1bldyYXBwZXI6IChmdW5jdGlvbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICghZnVuY2lvbmVzQ29ub2NpZGFzW2Z1bmN0aW9uTmFtZV0pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZnVuY3Rpb25OYW1lKVxyXG4gICAgICAgICAgICBmdW5jaW9uZXNDb25vY2lkYXNbZnVuY3Rpb25OYW1lXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgaGVscGVycy5mdW5zLiR7ZnVuY3Rpb25OYW1lfWBcclxuICAgIH1cclxufSlcclxuXHJcbnR5cGUgQ2FzaWxsZXJvRGVBY2EgPSB7XHJcbiAgICBjaGlsZHM6IENhc2lsbGVyb0RlQWNhW10sXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcjogc3RyaW5nXHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcl9qczogc3RyaW5nXHJcbiAgICAgICAgZXNwZWNpYWw6IGFueVxyXG4gICAgICAgIGV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanM6IHN0cmluZ1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjb21waWxhckV4cHJlc2lvbihleHByZXNpb246IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGNvbXBpbGVyLnRvQ29kZShFeHByZXNpb25QYXJzZXIucGFyc2UoXHJcbiAgICAgICAgZXhwcmVzaW9uXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJpcyBkaXN0aW5jdCBmcm9tXFxiL2dpLCAnIDw+ICcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8hIS9naSwgJyAnKVxyXG4gICAgKSkucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5ibGFuY29cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCAnaGVscGVycy5mdW5zLmJsYW5jbygoJylcclxuICAgICAgICAucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5pbmZvcm1hZG9cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCAnaGVscGVycy5mdW5zLmluZm9ybWFkbygoJyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBpbGFyRXhwcmVzaW9uZXMoY2FzaWxsZXJvOiBDYXNpbGxlcm9EZUFjYSkge1xyXG4gICAgaWYgKCFjYXNpbGxlcm8pIHsgcmV0dXJuIH1cclxuICAgIGlmIChjYXNpbGxlcm8uZGF0YS5leHByZXNpb25faGFiaWxpdGFyKSB7XHJcbiAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcl9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uKGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9oYWJpbGl0YXIpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNhc2lsbGVyby5kYXRhLmVzcGVjaWFsPy5hdXRvaW5nKSB7XHJcbiAgICAgICAgdmFyIHBhcnRlcyA9IGNhc2lsbGVyby5kYXRhLmVzcGVjaWFsPy5hdXRvaW5nLnNwbGl0KCc9PicpO1xyXG4gICAgICAgIGlmIChwYXJ0ZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICB2YXIgcHJlY29uZGljaW9uID0gcGFydGVzWzBdO1xyXG4gICAgICAgICAgICB2YXIgdmFsb3IgPSBwYXJ0ZXMuc2xpY2UoMSkuam9pbignPT4nKTtcclxuICAgICAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2F1dG9pbmdyZXNhcl9qcyA9IGAoJHtjb21waWxhckV4cHJlc2lvbihwcmVjb25kaWNpb24pfSk/KCR7Y29tcGlsYXJFeHByZXNpb24odmFsb3IpfSk6bnVsbGA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2F1dG9pbmdyZXNhcl9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uKHBhcnRlc1swXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yICh2YXIgY2FzaWxsZXJvSW50ZXJubyBvZiBjYXNpbGxlcm8uY2hpbGRzKSBjb21waWxhckV4cHJlc2lvbmVzKGNhc2lsbGVyb0ludGVybm8pO1xyXG59XHJcblxyXG5jb25zdCBnZW5lcmFyRW5jdWVzdGFUZW0gPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRFbmM6IElkRW5jLCBhcmVhOiBudW1iZXIsIGRvbWluaW86IG51bWJlciwgdGFyZWFfYWN0dWFsOiBJZFRhcmVhKSA9PiB7XHJcbiAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgSU5TRVJUIGludG8gdGVtIChvcGVyYXRpdm8sIGVuYywgYXJlYSwgZG9taW5pbywgaGFiaWxpdGFkYSwgdGFyZWFfYWN0dWFsKSB2YWx1ZXMgKCQxLCAkMiwgJDMsICQ0LCAkNSwgJDYpYCxcclxuICAgICAgICBbb3BlcmF0aXZvLCBpZEVuYywgYXJlYSwgZG9taW5pbywgdHJ1ZSwgdGFyZWFfYWN0dWFsXSkuZXhlY3V0ZSgpO1xyXG59XHJcblxyXG5jb25zdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8pID0+IHtcclxuICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBpbnNlcnQgaW50byB0YXJlYXNfdGVtIChvcGVyYXRpdm8sIGVuYywgdGFyZWEpXHJcbiAgICAgICAgICAgIHNlbGVjdCB0YS5vcGVyYXRpdm8sIHRhLmVuYywgdGEudGFyZWFcclxuICAgICAgICAgICAgZnJvbSAoc2VsZWN0IHRhLiosIHQuZW5jLHQuYXJlYSBmcm9tIHRhcmVhcyB0YSwgdGVtIHQgd2hlcmUgdGEub3BlcmF0aXZvPXQub3BlcmF0aXZvKSB0YSBcclxuICAgICAgICAgICAgd2hlcmUgdGEub3BlcmF0aXZvID0gJDEgXHJcbiAgICAgICAgICAgICAgICBhbmQgbm90ICh0YS5vcGVyYXRpdm8sIHRhLmVuYywgdGEudGFyZWEpIGluIChzZWxlY3Qgb3BlcmF0aXZvLCBlbmMsIHRhcmVhIGZyb20gdGFyZWFzX3RlbSlcclxuICAgICAgICAgICAgb3JkZXIgYnkgMSwzLDI7XHJcbiAgICBgLCBbb3BlcmF0aXZvXSkuZXhlY3V0ZSgpO1xyXG59XHJcblxyXG5jb25zdCBidXNjYXJFbmN1ZXN0YUVuVGVtID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczxhbnk+KSA9PiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgIHNlbGVjdCAqXHJcbiAgICAgICAgICAgICAgICBmcm9tIHRlbVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIHRocm93IEVycm9yKGBObyBzZSBlbmNvbnRyw7MgbGEgZW5jdWVzdGEgJHtwYXJhbXMuZW5jfSBwYXJhIGVsIG9wZXJhdGl2byAke3BhcmFtcy5vcGVyYXRpdm99LiAke2V4cGVjdGVkKGVycikubWVzc2FnZX1gKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgY2Fzb1RlbTogcmVzdWx0LnJvdyB9O1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFzYXJFbmN1ZXN0YXNBUHJvaWUoY2xpZW50OiBDbGllbnQpIHtcclxuICAgIGxldCBwYXJhbWV0cm9zID0gKGF3YWl0IGNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgKiBmcm9tIHBhcmFtZXRyb3Mgd2hlcmUgdW5pY29fcmVnaXN0cm9gLFxyXG4gICAgICAgIFtdKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICB2YXIgc2VsZWN0ID0gYHNlbGVjdCB0Lm9wZXJhdGl2bywgdC5lbmMsIHQudGFyZWFfYWN0dWFsLCB0dC50c19lbnRyYWRhXHJcbiAgICAgICAgZnJvbSB0YXJlYXNfdGVtIHR0IGpvaW4gdGVtIHQgdXNpbmcgKG9wZXJhdGl2byxlbmMpXHJcbiAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvPSQxIGFuZCB0dC50YXJlYT0gJDIgYW5kICgke2dldERpYXNBUGFzYXJRdWVyeSgndHQnKX0gPD0gMCBvciBjb2FsZXNjZSh0dC5hZGVsYW50YXIsZmFsc2UpKSBhbmQgdHQudGFyZWEgPSB0LnRhcmVhX2FjdHVhbFxyXG4gICAgYDtcclxuICAgIGF3YWl0IGNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgVVBEQVRFIHRhcmVhc190ZW0gdHRcclxuICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdWJ1xyXG4gICAgICAgICAgICBmcm9tICgke3NlbGVjdH0pIGF1eFxyXG4gICAgICAgICAgICB3aGVyZSB0dC5vcGVyYXRpdm8gPSBhdXgub3BlcmF0aXZvIGFuZCB0dC5lbmMgPSBhdXguZW5jIGFuZCB0dC50YXJlYSA9ICQzXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJywgJ2ZpbmMnXSlcclxuICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgIC8vVE9ETyBhc2lnbmFyIGVuIHByb2Nlc2FtaWVudG9cclxuICAgIGF3YWl0IGNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgVVBEQVRFIHRhcmVhc190ZW0gdHRcclxuICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICBmcm9tICgke3NlbGVjdH0pIGF1eFxyXG4gICAgICAgICAgICB3aGVyZSB0dC5vcGVyYXRpdm8gPSBhdXgub3BlcmF0aXZvIGFuZCB0dC5lbmMgPSBhdXguZW5jIGFuZCB0dC50YXJlYSA9ICQzXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJywgJ3Byb2MnXSlcclxuICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgIGF3YWl0IGNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgdXBkYXRlIHRlbSB0XHJcbiAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAncHJvYydcclxuICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgd2hlcmUgdC5vcGVyYXRpdm8gPSBhdXgub3BlcmF0aXZvIGFuZCB0LmVuYyA9IGF1eC5lbmNcclxuICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgIFtwYXJhbWV0cm9zLm9wZXJhdGl2bywgJ2ZpbmMnXSkuZmV0Y2hBbGwoKTtcclxuICAgIHJldHVybiAnb2snO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgUHJvY2VkdXJlc0RtRW5jdTogUHJvY2VkdXJlRGVmW10gPSBbXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnb3BlcmF0aXZvX2VzdHJ1Y3R1cmFfY29tcGxldGEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByZXN1bHRPazonZGVzcGxlZ2FyRm9ybXVsYXJpbycsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtvcGVyYXRpdm86IElkT3BlcmF0aXZvfT4pe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGNhc2lsbGVyb3NfamVyYXJxdWl6YWRvcygkMSkgYXMgZm9ybXVsYXJpb3MsIFxyXG4gICAgICAgICAgICAgICAgICAgICR7anNvbm8oYHNlbGVjdCB1bmlkYWRfYW5hbGlzaXMsIHBhZHJlLCBwa19hZ3JlZ2FkYSwgJ3t9Jzo6anNvbmIgYXMgaGlqYXMgZnJvbSB1bmlkYWRfYW5hbGlzaXMgd2hlcmUgb3BlcmF0aXZvID0gJDJgLCAndW5pZGFkX2FuYWxpc2lzJyl9IGFzIHVuaWRhZGVzX2FuYWxpc2lzXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvLCBwYXJhbWV0ZXJzLm9wZXJhdGl2b11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBsaWtlQXIocmVzdWx0LnJvdy5mb3JtdWxhcmlvcykuZm9yRWFjaChmID0+IGNvbXBpbGFyRXhwcmVzaW9uZXMoZikpO1xyXG4gICAgICAgICAgICAvLyBIZXJtYW5vcyBzb24gbG9zIGZvcm11bGFyaW9zIHF1ZSBlc3TDoW4gaW1wbGFudGFkb3MgZW4gb3RybyBmb3JtdWxhcmlvIGRlIGxhIG1pc21hIFVBLiBQb3IgZWplbXBsbyBlbCBBMSBlbiBlbCBTMVxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0SGVybWFub3MgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbnNlbGVjdCBvLmlkX2Nhc2lsbGVybyBhcyBpZF9mb3JtdWxhcmlvLCBvLnVuaWRhZF9hbmFsaXNpcywgJ0JGXyd8fG8uY2FzaWxsZXJvIGJvdG9uLCBiZi5jYXNpbGxlcm8sIGJmLnBhZHJlLCBmcC5jYXNpbGxlcm8sIGZwLnVuaWRhZF9hbmFsaXNpc1xyXG4gIGZyb20gY2FzaWxsZXJvcyBvIGxlZnQgam9pbiBjYXNpbGxlcm9zIGJmXHJcbiAgICBvbiBiZi50aXBvYz0nQkYnXHJcblx0YW5kIGJmLmNhc2lsbGVybyA9ICdCRl8nfHxvLmNhc2lsbGVyb1xyXG5cdGFuZCBiZi5vcGVyYXRpdm8gPSBvLm9wZXJhdGl2b1xyXG5cdGxlZnQgam9pbiBjYXNpbGxlcm9zIGZwXHJcblx0ICBvbiBmcC5pZF9jYXNpbGxlcm8gPSBiZi5wYWRyZVxyXG5cdCAgYW5kIGZwLm9wZXJhdGl2byA9IGJmLm9wZXJhdGl2b1xyXG4gIHdoZXJlIG8udGlwb2MgPSAnRidcclxuICAgIGFuZCBvLnVuaWRhZF9hbmFsaXNpcyA9IGZwLnVuaWRhZF9hbmFsaXNpc1xyXG5cdGFuZCBvLm9wZXJhdGl2byA9ICQxYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzLm9wZXJhdGl2b11cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICByZXN1bHRIZXJtYW5vcy5yb3dzLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5yb3cuZm9ybXVsYXJpb3Nbcm93LmlkX2Zvcm11bGFyaW9dLmRhdGEuaGVybWFubyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRhclVBKHVhOiBVbmlkYWRBbmFsaXNpcywgaWRVYTogSWRVbmlkYWRBbmFsaXNpcywgdUFzOiB7IFtrIGluIElkVW5pZGFkQW5hbGlzaXNdOiBVbmlkYWRBbmFsaXNpcyB9KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodWEucGFkcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICB1QXNbdWEucGFkcmVdLmhpamFzW2lkVWFdID0gdWE7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHVhLnByaW5jaXBhbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGlrZUFyKHJlc3VsdC5yb3cudW5pZGFkZXNfYW5hbGlzaXMpLmZvckVhY2goKHVhLCBpZFVhKSA9PlxyXG4gICAgICAgICAgICAgICAgY29tcGxldGFyVUEodWEsIGlkVWEgYXMgSWRVbmlkYWRBbmFsaXNpcywgcmVzdWx0LnJvdy51bmlkYWRlc19hbmFsaXNpcylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB2YXIge1xyXG4gICAgICAgICAgICAgICAgY29uX3JlYV9ob2dhcjogY29uUmVhSG9nYXIsXHJcbiAgICAgICAgICAgICAgICBjb25maWdfc29ydGVvOiBjb25maWdTb3J0ZW8sXHJcbiAgICAgICAgICAgICAgICBoYWJpbGl0YWNpb25fYm90b25fZm9ybXVsYXJpbzogaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICB9ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBjb25maWdfc29ydGVvLCBjb25fcmVhX2hvZ2FyLCBoYWJpbGl0YWNpb25fYm90b25fZm9ybXVsYXJpbywgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbWV0ZXJzLm9wZXJhdGl2b10pLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgICAgICAgICAgbGV0IGNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyA9IChleHByZXNpb25lc0RvbWluaW86IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIGxpa2VBcihleHByZXNpb25lc0RvbWluaW8pXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoZXhwciwgZG9taW5pbykgPT4gKHsgZG9taW5pbywgZXhwcjogY29tcGlsYXJFeHByZXNpb24oZXhwci5leHByKSB9KSlcclxuICAgICAgICAgICAgICAgICAgICAucGxhaW4oKTtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZ1NvcnRlbykge1xyXG4gICAgICAgICAgICAgICAgbGlrZUFyKGNvbmZpZ1NvcnRlbykuZm9yRWFjaCgoY29uZmlnU29ydGVvRm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzID0gY29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZXhwcl9pbmNvbXBsZXRpdHVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZmlsdHJvX2pzID0gY29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZmlsdHJvKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKSB7XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKS5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybS5leHByX2hhYmlsaXRhcl9ib3Rvbl9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uKGZvcm0uZXhwcl9oYWJpbGl0YXJfYm90b24pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBkZWZhdWx0VGFyZWEgPSBhd2FpdCBnZXREZWZhdWx0VGFyZWEoY29udGV4dCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdEluZm9ybWFjaW9uSGRyID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCAgXHJcbiAgICAgICAgICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICdkb21pbmlvJyAgICAgICAsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoREVGQVVMVF9ET01JTklPKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ25vbWNhbGxlJyAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NlY3RvcicgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2VkaWZpY2lvJyAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2VudHJhZGEnICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ25yb2NhdGFzdHJhbCcgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3Bpc28nICAgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2RlcGFydGFtZW50bycgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2hhYml0YWNpb24nICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2Nhc2EnICAgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3ByaW9yaWRhZCcgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ29ic2VydmFjaW9uZXMnICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2NpdGEnICAgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2NhcmdhJyAgICAgICAgICwgbnVsbCAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgKSBhcyB0ZW0sXHJcbiAgICAgICAgICAgICAgICBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAgICAgJ3RhcmVhJywgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChkZWZhdWx0VGFyZWEudGFyZWEpfSxcclxuICAgICAgICAgICAgICAgICAgICAnZmVjaGFfYXNpZ25hY2lvbicsIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2FzaWduYWRvJywgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChjb250ZXh0LnVzZXIuaWRwZXIpfSxcclxuICAgICAgICAgICAgICAgICAgICAnbWFpbl9mb3JtJywgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChkZWZhdWx0VGFyZWEubWFpbl9mb3JtKX1cclxuICAgICAgICAgICAgICAgICkgYXMgdGFyZWFcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBiZS5jYWNoZXMudGltZXN0YW1wRXN0cnVjdHVyYSxcclxuICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5yb3csXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgY29uUmVhSG9nYXIsXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW8sXHJcbiAgICAgICAgICAgICAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICBub1JlYXM6IGJlLmNhY2hlcy50YWJsZUNvbnRlbnQubm9fcmVhLFxyXG4gICAgICAgICAgICAgICAgbm9SZWFzU3VwOiBiZS5jYWNoZXMudGFibGVDb250ZW50Lm5vX3JlYV9zdXAsXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0SW5mb3JtYWNpb25IZHIsXHJcbiAgICAgICAgICAgICAgICB1YVBwYWw6IHVuaWRhZF9hbmFsaXNpcyxcclxuICAgICAgICAgICAgICAgIHBrQWdyZWdhZGFVYVBwYWw6IHBrX2FncmVnYWRhXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdnZW5lcmFyX2Zvcm11bGFyaW9zJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2FubmlvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogJ2FubmlvJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdtZXMnLCB0eXBlTmFtZTogJ2ludGVnZXInLCByZWZlcmVuY2VzOiAnbWVzJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdsb3RlJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogJ2xvdGVzJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHthbm5pbzpudW1iZXIsIG1lczpudW1iZXIsIGxvdGU6bnVtYmVyfT4pe1xyXG4gICAgICAgICAgICB2YXIgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0VUEgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgZnJvbSB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgICAgICAgIHdoZXJlIHByaW5jaXBhbCA9IHRydWUgYW5kIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW09QRVJBVElWT11cclxuICAgICAgICAgICAgKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRVQS5yb3dDb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzZSBjb25maWd1csOzIHVuYSB1bmlkYWQgZGUgYW5hbGlzaXMgY29tbyBwcmluY2lwYWwnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcm93ID0gcmVzdWx0VUEucm93O1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0UHJlZ3VudGFzID0gYXdhaXQgYmUucHJvY2VkdXJlLnByZWd1bnRhc191YV90cmFlci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcm93KVxyXG4gICAgICAgICAgICB2YXIgY29udGVuZWRvclZhY2lvOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAgICAgICAgIHJlc3VsdFByZWd1bnRhcy5mb3JFYWNoKGZ1bmN0aW9uIChkZWZQcmVndW50YTphbnkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpb1tkZWZQcmVndW50YS52YXJfbmFtZV0gPSBkZWZQcmVndW50YS51bmlkYWRfYW5hbGlzaXMgPyBbXSA6IG51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8uYW5uaW8gPSBwYXJhbWV0ZXJzLmFubmlvO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8ubWVzID0gcGFyYW1ldGVycy5tZXM7XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5sb3RlID0gcGFyYW1ldGVycy5sb3RlO1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBkZWJlX2hhYmVyLmlkX2Nhc28sIHMgYXMgaWRcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgbG90ZSwgYXJtYXJfaWQoYW5uaW8sIG1lcywgbG90ZSwgcykgYXMgaWRfY2Fzbywgc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgYW5uaW8sbWVzLGxvdGUsIGNhbnRfY3VlcyBmcm9tIGxvdGVzIHdoZXJlIChhbm5pbyxtZXMsbG90ZSk9KCQyLCQzLCQ0KSkgciwgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJpZXMoMSxjYW50X2N1ZXMpIHNcclxuICAgICAgICAgICAgICAgICAgICApIGRlYmVfaGFiZXIgbGVmdCBqb2luIGRlZmdlbiBoYXkgb24gaGF5LmlkX2Nhc28gPSBkZWJlX2hhYmVyLmlkX2Nhc28gYW5kIGhheS5vcGVyYXRpdm89JDFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBoYXkuaWRfY2FzbyBpcyBudWxsYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIHBhcmFtZXRlcnMuYW5uaW8sIHBhcmFtZXRlcnMubWVzLCBwYXJhbWV0ZXJzLmxvdGVdXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHsgb3BlcmF0aXZvOiBPUEVSQVRJVk8gfTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAocmVzdWx0LnJvd0NvdW50IHx8IDApOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcocGFyYW1zLCB7IGlkX2Nhc286IHJlc3VsdC5yb3dzW2ldLmlkX2Nhc28sIGRhdG9zX2Nhc286IGNoYW5naW5nKGNvbnRlbmVkb3JWYWNpbywgeyBpZDogcmVzdWx0LnJvd3NbaV0uaWQgfSkgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBhZ3JlZ2FkYXM6IHJlc3VsdC5yb3dDb3VudCB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICd1cGxvYWRfZmlsZScsXHJcbiAgICAgICAgcHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZF9hZGp1bnRvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdub21icmUnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBmaWxlczp7Y291bnQ6MX0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtpZF9hZGp1bnRvPzpudW1iZXIsIG5vbWJyZT86c3RyaW5nfT4sIGZpbGVzKXtcclxuICAgICAgICAgICAgbGV0IGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGxldCBjbGllbnQ9Y29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaW5mb3JtUHJvZ3Jlc3Moe21lc3NhZ2U6YmUubWVzc2FnZXMuZmlsZVVwbG9hZGVkfSk7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBleGlzdGVcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBmaWxlc1swXVxyXG4gICAgICAgICAgICBsZXQgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGUucGF0aCkuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxGaWxlbmFtZSA9IGZpbGUub3JpZ2luYWxGaWxlbmFtZS5zbGljZSgwLCAtKGV4dC5sZW5ndGggKyAxKSk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlbmFtZSA9IHBhcmFtZXRlcnMubm9tYnJlIHx8IG9yaWdpbmFsRmlsZW5hbWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdQYXRoID0gJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJztcclxuICAgICAgICAgICAgdmFyIGNyZWF0ZVJlc3BvbnNlID0gZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoYWRqdW50b1JvdzphbnkpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0xhIHN1YmlkYSBzZSByZWFsaXrDsyBjb3JyZWN0YW1lbnRlICh1cGRhdGUpJyxcclxuICAgICAgICAgICAgICAgICAgICBub21icmU6IGFkanVudG9Sb3cubm9tYnJlLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vbWJyZV9vcmlnaW5hbDogYWRqdW50b1Jvdy5ub21icmVfb3JpZ2luYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0OiBhZGp1bnRvUm93LmV4dCxcclxuICAgICAgICAgICAgICAgICAgICBmZWNoYTogYWRqdW50b1Jvdy5mZWNoYSxcclxuICAgICAgICAgICAgICAgICAgICBob3JhOiBhZGp1bnRvUm93LmhvcmEsXHJcbiAgICAgICAgICAgICAgICAgICAgaWRfYWRqdW50bzogYWRqdW50b1Jvdy5pZF9hZGp1bnRvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHZhciBtb3ZlRmlsZSA9IGZ1bmN0aW9uIG1vdmVGaWxlKGZpbGUsIGlkX2FkanVudG8sIGV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICBmcy5tb3ZlKGZpbGUucGF0aCwgbmV3UGF0aCArIGlkX2FkanVudG8gKyAnLicgKyBleHRlbnNpb24sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmlkX2FkanVudG8pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYHVwZGF0ZSBhZGp1bnRvcyBzZXQgbm9tYnJlPSAkMSxub21icmVfb3JpZ2luYWwgPSAkMiwgZXh0ID0gJDMsIHJ1dGEgPSBjb25jYXQoJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJywkNDo6dGV4dCwnLicsJDM6OnRleHQpLCBmZWNoYSA9IG5vdygpLCBob3JhID0gZGF0ZV90cnVuYygnc2Vjb25kcycsY3VycmVudF90aW1lc3RhbXAtY3VycmVudF9kYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBpZF9hZGp1bnRvID0gJDQgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZW5hbWUsIG9yaWdpbmFsRmlsZW5hbWUsIGV4dCwgcGFyYW1ldGVycy5pZF9hZGp1bnRvXVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbnNlKHJlc3VsdC5yb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0YWRvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUsIHJlc3VsdGFkby5pZF9hZGp1bnRvLCByZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkb1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYGluc2VydCBpbnRvIGFkanVudG9zIChub21icmUsIG5vbWJyZV9vcmlnaW5hbCwgZXh0LCBmZWNoYSwgaG9yYSkgdmFsdWVzICgkMSwkMiwkMyxub3coKSwgZGF0ZV90cnVuYygnc2Vjb25kcycsY3VycmVudF90aW1lc3RhbXAtY3VycmVudF9kYXRlKSkgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZW5hbWUsIG9yaWdpbmFsRmlsZW5hbWUsIGV4dF1cclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgdXBkYXRlIGFkanVudG9zIHNldCBydXRhID0gY29uY2F0KCdsb2NhbC1hdHRhY2htZW50cy9maWxlLScsaWRfYWRqdW50bzo6dGV4dCwnLicsZXh0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaWRfYWRqdW50byA9ICQxIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQucm93LmlkX2FkanVudG9dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZXNwb25zZShyZXN1bHQucm93KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHRhZG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUsIHJlc3VsdGFkby5pZF9hZGp1bnRvLCByZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX2d1YXJkYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkX2Nhc28nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2RhdG9zX2Nhc28nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICAvL0B0cy1pZ25vcmUgZXNwZWNpZmljbyBlbCB0aXBvIGRlIGxvcyBwYXLDoW1ldHJvc1xyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IHtcclxuICAgICAgICAgICAgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgaWRfY2Fzbzogc3RyaW5nLFxyXG4gICAgICAgICAgICBkYXRvc19jYXNvOiBBbnlPYmplY3RcclxuICAgICAgICB9LCBuZXdDbGllbnQ6IENsaWVudCkge1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIHBhcmFtZXRlcnMub3BlcmF0aXZvKSk7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnQgPSBuZXdDbGllbnQgfHwgY29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIHZhciBkYXRvc19qc29uID0gcGFyYW1ldGVycy5kYXRvc19jYXNvO1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgdGFibGVTdHJ1Y3R1cmVzX2FwcDogVGFibGVEZWZpbml0aW9ucyA9IGJlLnRhYmxlU3RydWN0dXJlcztcclxuXHJcbiAgICAgICAgICAgIHZhciBzdHJ1Y3RfZG1lbmN1ID0gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIHVuaWRhZF9hbmFsaXNpcyk7XHJcbiAgICAgICAgICAgIGRhdG9zX2pzb25bJ29wZXJhdGl2byddID0gcGFyYW1ldGVycy5vcGVyYXRpdm87XHJcblxyXG4gICAgICAgICAgICBkYXRvc19qc29uW3BrX2FncmVnYWRhXSA9IHBhcmFtZXRlcnMuaWRfY2FzbztcclxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGFyX3VsdF9wa19lbl9hcnIodWx0X3BrOmFueSwgdWFfYXJyOmFueVtdKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29uX3BrX2NvbXBsZXRhID0gdWFfYXJyO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVhX2FyciAmJiB1YV9hcnIubGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25fcGtfY29tcGxldGEgPSBjb25fcGtfY29tcGxldGEubWFwKCh1bmFfdWEsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5hX3VhW3VsdF9wa10gPSBpICsgMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5hX3VhO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbl9wa19jb21wbGV0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZGF0b3NqOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleU5hbWUgaW4gZGF0b3NqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdG9LID0gZGF0b3NqW2tleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRvSyBpbnN0YW5jZW9mIEFycmF5ICYmIGRhdG9LLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwayA9IHRhYmxlU3RydWN0dXJlc19hcHBba2V5TmFtZV0oY29udGV4dCkucHJpbWFyeUtleTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVsdF9wayA9IHBrW3BrLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRvSyA9IGNvbXBsZXRhcl91bHRfcGtfZW5fYXJyKHVsdF9waywgZGF0b0spO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRvSy5mb3JFYWNoKChlbGVtSTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtSSA9IHJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZWxlbUkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleU5hbWUuc3RhcnRzV2l0aCgnJCcpIHx8IGtleU5hbWUuc3RhcnRzV2l0aCgnXycpIHx8IGtleU5hbWUgPT0gJ251bGwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9zajtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRvc19qc29uID0gcmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhkYXRvc19qc29uKTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkbztcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhU3VwO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYVN1cDtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkb1N1cDtcclxuXHJcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRvc19qc29uKS5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcXVlcmllcyA9IHNxbFRvb2xzLnN0cnVjdHVyZWREYXRhLnNxbFdyaXRlKGRhdG9zX2pzb24sIHN0cnVjdF9kbWVuY3UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJpZXMucmVkdWNlKGZ1bmN0aW9uIChwcm9taXNlOiBQcm9taXNlPGFueT4sIHF1ZXJ5OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsaWVudC5xdWVyeShxdWVyeSkuZXhlY3V0ZSgpLnRoZW4oZnVuY3Rpb24gKF9yZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJva1wiO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycjogRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiY2Fzb19ndWFyZGFyIEVOVFJBIEVOIEVMIENBVENIOiBcIiwgZXhwZWN0ZWQoZXJyKSlcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZhY2lvJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY2Fzb190cmFlcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICAvL3tuYW1lOidmb3JtdWxhcmlvJyAgICAsICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnaWRfY2FzbycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnZ29Ub0VuYycsXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRfY2Fzbzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgdmFyIGNsaWVudCA9IGNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICB2YXIgc3RydWN0X2RtZW5jdSA9IGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0LCB1bmlkYWRfYW5hbGlzaXMpO1xyXG4gICAgICAgICAgICB2YXIgc3FsID0gc3FsVG9vbHMuc3RydWN0dXJlZERhdGEuc3FsUmVhZCh7IG9wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sIFtwa19hZ3JlZ2FkYV06IHBhcmFtZXRlcnMuaWRfY2FzbyB9LCBzdHJ1Y3RfZG1lbmN1KTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeShzcWwpLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IHBhcmFtZXRlcnMuaWRfY2FzbyxcclxuICAgICAgICAgICAgICAgIGRhdG9zX2Nhc286IHJlc3VsdC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIC8vZm9ybXVsYXJpbzogZm9ybVByaW5jaXBhbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY2Fzb190cmFlcl9vX2NyZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZF9jYXNvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdnb1RvRW5jJyxcclxuICAgICAgICAvLyBiaXRhY29yYTp7YWx3YXlzOnRydWV9LFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7b3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRfY2Fzbzogc3RyaW5nfT4pe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb190cmFlciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19wcmVwYXJhciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19ndWFyZGFyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIGNoYW5naW5nKHBhcmFtZXRlcnMsIHsgZGF0b3NfY2FzbzoganNvbiB9KSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3RyYWVyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdwYXNhcl9qc29uMnVhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pil7XHJcbiAgICAgICAgICAgIC8qIEdFTkVSQUxJWkFSOiAqL1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICAvKiBGSU4tR0VORVJBTElaQVI6ICovXHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgU0VMRUNUICogZnJvbSAke2JlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gTElNSVQgMWApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIGlmICgocmVzdWx0TWFpbi5yb3dDb3VudCB8fCAwKSA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdIQVkgREFUT1MnLCByZXN1bHRNYWluLnJvd3MpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hBWSBEQVRPUy4gTk8gU0UgUFVFREUgSU5JQ0lBUiBFTCBQQVNBSkUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcmVzdWx0SnNvbiA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYFNFTEVDVCBvcGVyYXRpdm8sIGVuYyBpZF9jYXNvLCBqc29uX2VuY3Vlc3RhIGRhdG9zX2Nhc28gZnJvbSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3BlcmF0aXZvPSQxIGFuZCByZXN1bWVuX2VzdGFkbyBpcyBkaXN0aW5jdCBmcm9tICd2YWNpbycgYW5kIGpzb25fZW5jdWVzdGEgaXMgbm90IG51bGwgXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgZW5jIGAsXHJcbiAgICAgICAgICAgICAgICBbT1BFUkFUSVZPXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuICAgICAgICAgICAgaWYgKHByb2NlZHVyZUd1YXJkYXIuZGVmaW5lZEluICE9ICdkbWVuY3UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hheSBxdWUgc29icmVlc2NyaWJpciBjYXNvX2d1YXJkYXInKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVzdWx0SnNvbi5yb3dzLm1hcChhc3luYyBmdW5jdGlvbiAocm93KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0YWRvID0gYGlkIGNhc28gJHtyb3cuaWRfY2Fzb306IGA7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLmluVHJhbnNhY3Rpb24obnVsbCwgYXN5bmMgZnVuY3Rpb24gKF9jbGllbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvICs9IGF3YWl0IHByb2NlZHVyZUd1YXJkYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHJvdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2UgPSByZXN1bHRhZG8gKyBcImpzb24ydWEgZXJyb3IuIFwiICsgZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBlcnJNZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNZXNzYWdlLCBlcnJvcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRhZG8uaW5jbHVkZXMoJ29rJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeyBkYXRvc19jYXNvLCBpZF9jYXNvLCBvcGVyYXRpdm8gfSA9IGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX3RyYWVyLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7IG9wZXJhdGl2bzogcm93Lm9wZXJhdGl2bywgaWRfY2Fzbzogcm93LmlkX2Nhc28gfSlcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmVyUXVlR3JhYm8gPSB7IGRhdG9zX2Nhc28sIGlkX2Nhc28sIG9wZXJhdGl2byB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3JlcGFuY2VzLnNob3dBbmRUaHJvdyh2ZXJRdWVHcmFibywgcm93KVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHZlclF1ZUdyYWJvLCByb3csIGV4cGVjdGVkKGVycikpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkbztcclxuICAgICAgICAgICAgfSkpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fZm9ycGtyYWl6X2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3BrX3JhaXpfdmFsdWUnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJ0YXJlYXNcIiB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e29wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHBrX3JhaXpfdmFsdWU6IHN0cmluZywgdGFyZWE6IHN0cmluZ30+KXtcclxuICAgICAgICAgICAgY29uc3QgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgY29uc3Qge29wZXJhdGl2byxwa19yYWl6X3ZhbHVlLCB0YXJlYX0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICBjb25zdCB7cGVybWl0ZV9ib3JyYXJfdWE6IHRhcmVhUGVybWl0ZUJvcnJhclVBLCBtYWluX2Zvcm19ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBwZXJtaXRlX2JvcnJhcl91YSwgbWFpbl9mb3JtIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIHRhcmVhPSQyXHJcbiAgICAgICAgICAgIGAsIFtvcGVyYXRpdm8sIHRhcmVhXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgICAgICAgICBjb25zdCB7dW5pZGFkX2FuYWxpc2lzfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgY29uc3QgY29uZHZpdj0gYCB0Lm9wZXJhdGl2bz0gJDEgYW5kIHQuZW5jID0kMmA7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzdWFyaW9QdWVkZVByb2Nlc2FyRW5jdWVzdGFzID0gY29udGV4dC5wdWVkZT8uZW5jdWVzdGFzPy5wcm9jZXNhciB8fCBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3Qgc29sb0xlY3R1cmEgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGNvdW50KCopXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIGpvaW4gdGVtIHVzaW5nKG9wZXJhdGl2bywgZW5jKSBqb2luIGVzdGFkb3MgdXNpbmcgKG9wZXJhdGl2bywgZXN0YWRvKSAtLXBrIGVzdGFkbyB5IHRlbSB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ2Fkb19kbSBpcyBub3QgbnVsbCBvciBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBlcm1pdGVfZWRpdGFyX2VuY3Vlc3RhIGFuZCBhc2lnbmFkbyA8PiAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKGNvbnRleHQudXNlci5pZHBlcil9IG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhID0gdGFyZWFfYWN0dWFsIGFuZCB0YXJlYV9hY3R1YWwgPSAncHJvYycgYW5kICQzIG9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSA9IHRhcmVhX2FjdHVhbCBhbmQgdGFyZWFfYWN0dWFsID0gJ3Byb2MnIGFuZCBlc3RhZG8gPSAnVidcclxuICAgICAgICAgICAgKWAsIFtvcGVyYXRpdm8sIHBrX3JhaXpfdmFsdWUsICF1c3VhcmlvUHVlZGVQcm9jZXNhckVuY3Vlc3Rhc10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWUgPiAwO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDFcclxuICAgICAgICAgICAgYCwgW29wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIHZhciB7IHJvdyB9ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoZ2V0SGRyUXVlcnkoY29uZHZpdiwgY29udGV4dCwgdW5pZGFkX2FuYWxpc2lzLCBwZXJtaXRlR2VuZXJhck11ZXN0cmEpLCBbb3BlcmF0aXZvLCBwa19yYWl6X3ZhbHVlXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcm93LmluZm9ybWFjaW9uSGRyW3BrX3JhaXpfdmFsdWVdLnRhcmVhID0ge1xyXG4gICAgICAgICAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgICAgICAgICBtYWluX2Zvcm1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnJvdyxcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIHNvbG9MZWN0dXJhLFxyXG4gICAgICAgICAgICAgICAgaWRwZXI6IGNvbnRleHQudXNlci5pZHBlcixcclxuICAgICAgICAgICAgICAgIGNhcmdhczogbGlrZUFyLmNyZWF0ZUluZGV4KHJvdy5jYXJnYXMubWFwKChjYXJnYTogYW55KSA9PiAoeyAuLi5jYXJnYSwgZmVjaGE6IGNhcmdhLmZlY2hhID8gZGF0ZS5pc28oY2FyZ2EuZmVjaGEpLnRvRG15KCkgOiBudWxsIH0pKSwgJ2NhcmdhJyksXHJcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXBFc3RydWN0dXJhOiBiZS5jYWNoZXMudGltZXN0YW1wRXN0cnVjdHVyYSxcclxuICAgICAgICAgICAgICAgIHBlcm1pdGVCb3JyYXJFbGVtZW50b3NVQTogISEodGFyZWFQZXJtaXRlQm9ycmFyVUEgJiYgZ2V0TW9kb0J5UG9saWN5KGJlKSA9PT0gJ0dBQklORVRFJyAmJiBjb250ZXh0LnB1ZWRlPy5lbmN1ZXN0YXM/LmJvcnJhcl91YSlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX2ZvcnBrcmFpel9kZXNjYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdwZXJzaXN0ZW50ZXMnLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHBlcnNpc3RlbnRlczogQW55T2JqZWN0IH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB7IG9wZXJhdGl2bywgcGVyc2lzdGVudGVzIH0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICBjb25zdCBVQV9QUklOQ0lQQUwgPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIG9wZXJhdGl2bykpLnVuaWRhZF9hbmFsaXNpcztcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwobGlrZUFyKHBlcnNpc3RlbnRlcy5yZXNwdWVzdGFzW1VBX1BSSU5DSVBBTF0pLm1hcChhc3luYyAocmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiBhbnksIGlkRW5jOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzVUFQcmluY2lwYWwuczFhMV9vYnMgPT0gJyFwcnVlYmEgZGUgZXJyb3IgYWwgZ3JhYmFyIScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RJTyBQUlVFQkEgREUgRVJST1IgQUwgR1JBQkFSJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBndWFyZGFyRW5jdWVzdGFFblRlbShjb250ZXh0LCBvcGVyYXRpdm8sIGlkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIHBlcnNpc3RlbnRlcy5pbmZvcm1hY2lvbkhkcltpZEVuY10udGFyZWEudGFyZWEpO1xyXG4gICAgICAgICAgICAgICAgLy9ndWFyZGFyIHBhcmFsZWxhbWVudGUgZW4gdGFibGFzIHVhXHJcbiAgICAgICAgICAgICAgICB2YXIgcHJvY2VkdXJlR3VhcmRhciA9IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXI7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0YWRvID0gYGlkIGVuYyAke2lkRW5jfTogYDtcclxuICAgICAgICAgICAgICAgIGxldCBwYXJhbV9ndWFyZGFyID0geyBvcGVyYXRpdm86IG9wZXJhdGl2bywgaWRfY2FzbzogaWRFbmMsIGRhdG9zX2Nhc286IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCB9XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyTWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUuaW5UcmFuc2FjdGlvbihudWxsLCBhc3luYyBmdW5jdGlvbiAoX2NsaWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1fZ3VhcmRhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyTWVzc2FnZSA9IHJlc3VsdGFkbyArIFwiZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhci4gXCIgKyBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1lc3NhZ2UsIGVycm9yKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHBhc2VfdGFibGE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBpZEVuYywgcmVzdWx0YWRvXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG5cclxuICAgICAgICAgICAgfSkuYXJyYXkoKSk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9zaW5jcm9uaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdwZXJzaXN0ZW50ZXMnLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdtb2RvX2RtJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYW1iaWFfbW9kb19kbScsIHR5cGVOYW1lOiAnYm9vbGVhbicgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtwZXJzaXN0ZW50ZXM6IEFueU9iamVjdCwgbW9kb19kbTogc3RyaW5nLCBjYW1iaWFfbW9kb19kbTogYm9vbGVhbn0+KXtcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBwZXJzaXN0ZW50ZXMsIG1vZG9fZG0sIGNhbWJpYV9tb2RvX2RtIH0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICB2YXIgbnVtX3NpbmNybzogbnVtYmVyID0gMDtcclxuICAgICAgICAgICAgdmFyIHRva2VuOiBzdHJpbmcgPSBwZXJzaXN0ZW50ZXM/LnRva2VuIHx8IChhd2FpdCBiZS5wcm9jZWR1cmUudG9rZW5fZ2V0LmNvcmVGdW5jdGlvbihjb250ZXh0LCB7XHJcbiAgICAgICAgICAgICAgICB1c2VyYWdlbnQ6IGNvbnRleHQuc2Vzc2lvbi5yZXEudXNlcmFnZW50LFxyXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IGNvbnRleHQudXNlcm5hbWVcclxuICAgICAgICAgICAgfSkpLnRva2VuO1xyXG4gICAgICAgICAgICB2YXIgeyB2YWx1ZSB9ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gc2luY3Jvbml6YWNpb25lcyAodG9rZW4sIHVzdWFyaW8sIGRhdG9zKVxyXG4gICAgICAgICAgICAgICAgICAgIFZBTFVFUyAoJDEsJDIsJDMpIFxyXG4gICAgICAgICAgICAgICAgICAgIFJFVFVSTklORyBzaW5jcm9cclxuICAgICAgICAgICAgICAgIGAsIFt0b2tlbiwgY29udGV4dC51c2VybmFtZSwgcGVyc2lzdGVudGVzXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgbnVtX3NpbmNybyA9IHZhbHVlO1xyXG4gICAgICAgICAgICB2YXIgY29uZHZpdiA9IGBcclxuICAgICAgICAgICAgICAgIHR0Lm9wZXJhdGl2bz0gJDEgXHJcbiAgICAgICAgICAgICAgICBhbmQgYXNpZ25hZG8gPSAkMlxyXG4gICAgICAgICAgICAgICAgYW5kIHR0Lm9wZXJhY2lvbj0nY2FyZ2FyJyBcclxuICAgICAgICAgICAgICAgIGFuZCAodHQuY2FyZ2Fkb19kbSBpcyBudWxsIG9yIHR0LmNhcmdhZG9fZG0gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKHRva2VuKX0pXHJcbiAgICAgICAgICAgIGA7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdW5pZGFkX2FuYWxpc2lzOiBVQV9QUklOQ0lQQUwsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTykpO1xyXG4gICAgICAgICAgICBpZiAocGVyc2lzdGVudGVzKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpZEVuYyBpbiBwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCA9IHBlcnNpc3RlbnRlcy5yZXNwdWVzdGFzW1VBX1BSSU5DSVBBTF1baWRFbmNdO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vVE9ETyBBTCBQQVJFQ0VSIEVTVMOBIFJFU1VFTFRPLCBMTyBERUpPIFBPUiBMQVMgRFVEQVNcclxuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzcHVlc3Rhc1VBUHJpbmNpcGFsKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjYXJnYSA9IHBlcnNpc3RlbnRlcy5jYXJnYXNbcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50ZW0uY2FyZ2FdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZWEgPSBwZXJzaXN0ZW50ZXMuaW5mb3JtYWNpb25IZHJbaWRFbmNdLnRhcmVhLnRhcmVhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJnYVRhcmVhc0FyZWFzID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHNlbGVjdCByZWNlcGNpb25pc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX2FyZWFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIHRhcmVhID0gJDIgYW5kIGFyZWEgPSAkMyAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW09QRVJBVElWTywgdGFyZWEsIGNhcmdhLmNhcmdhXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FyZ2FUYXJlYXNBcmVhcyAmJiAhY2FyZ2EucmVjZXBjaW9uaXN0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYG5vIHNlIGRlZmluacOzIHVuIHJlY2VwY2lvbmlzdGEgcGFyYSBlbCBvcGVyYXRpdm8gJHtPUEVSQVRJVk99LCB0YXJlYSAke3RhcmVhfSwgw6FyZWEgJHtjYXJnYS5jYXJnYX0sIHBvciBmYXZvciBjb211bmlxdWVzw6kgY29uIEdBQklORVRFIHBhcmEgcXVlIGNhcmd1ZW4gdW4gcmVjZXBjaW9uaXN0YWApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihpZEVuYykgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEVuYyA9IGF3YWl0IHBlcnNpc3RpckVuY3Vlc3RhQXV0b2dlbmVyYWRhRW5ETShjb250ZXh0LCBPUEVSQVRJVk8sIGNhcmdhLmNhcmdhLCBpZEVuYywgdG9rZW4sIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgY2FyZ2EucmVjZXBjaW9uaXN0YSB8fCBjYXJnYVRhcmVhc0FyZWFzLCBjb250ZXh0LnVzZXIuaWRwZXIsIG1vZG9fZG0sIGNhbWJpYV9tb2RvX2RtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVlZG9HdWFyZGFyRW5URU0gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeyBwYXJhbXMsIHNldHRlcnMgfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBlc3RhZG8gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0EpfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhcmdhZG9fZG09bnVsbGBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtPUEVSQVRJVk8sIGlkRW5jLCB0YXJlYSwgdG9rZW5dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW1iaWFfbW9kb19kbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVycy5wdXNoKGBvcGVyYWNpb24gPSAnZGVzY2FyZ2FyJ2ApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWVyeVRhcmVhc1RlbSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDMgYW5kIGNhcmdhZG9fZG0gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwdWVkb0d1YXJkYXJFblRFTSA9IHF1ZXJ5VGFyZWFzVGVtLnJvd0NvdW50ID09IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdWVkb0d1YXJkYXJFblRFTSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ3VhcmRhckVuY3Vlc3RhRW5UZW0oY29udGV4dCwgT1BFUkFUSVZPLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLCB0YXJlYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2d1YXJkYXIgcGFyYWxlbGFtZW50ZSBlbiB0YWJsYXMgdWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgZW5jICR7aWRFbmN9OiBgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtX2d1YXJkYXIgPSB7IG9wZXJhdGl2bzogT1BFUkFUSVZPLCBpZF9jYXNvOiBpZEVuYywgZGF0b3NfY2FzbzogcmVzcHVlc3Rhc1VBUHJpbmNpcGFsIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5pblRyYW5zYWN0aW9uKG51bGwsIGFzeW5jIGZ1bmN0aW9uIChfY2xpZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyArPSBhd2FpdCBwcm9jZWR1cmVHdWFyZGFyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbV9ndWFyZGFyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJNZXNzYWdlID0gcmVzdWx0YWRvICsgXCJkbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyLiBcIiArIGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvID0gZXJyTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTWVzc2FnZSwgZXJyb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgcGFzZV90YWJsYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIGlkRW5jLCByZXN1bHRhZG9dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKCdsb2NhbC1yZWNpYmlkby1zaW4tdG9rZW4udHh0JywgSlNPTi5zdHJpbmdpZnkoeyBub3c6IG5ldyBEYXRlKCksIHVzZXI6IGNvbnRleHQudXNlcm5hbWUsIGlkQ2FzbzogaWRFbmMsIFtwa19hZ3JlZ2FkYV06IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCB9KSArICdcXG5cXG4nLCAndXRmOCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gb3BlcmF0aXZvcyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMVxyXG4gICAgICAgICAgICBgLCBbT1BFUkFUSVZPXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgdmFyIHsgcm93IH0gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShnZXRIZHJRdWVyeShjb25kdml2LCBjb250ZXh0LCBVQV9QUklOQ0lQQUwsIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSksIFtPUEVSQVRJVk8sIGNvbnRleHQudXNlci5pZHBlcl0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0ICBlc3RhZG8gPSAkNCwgY2FyZ2Fkb19kbT0kMzo6dGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlICR7Y29uZHZpdn0gXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIGVuY2BcclxuICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIHBhcmFtZXRlcnMuZW5jID8gcGFyYW1ldGVycy5lbmMgOiBjb250ZXh0LnVzZXIuaWRwZXIsIHRva2VuLCBFU1RBRE9fUE9TVEVSSU9SX0NBUkdBXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5yb3csXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IE9QRVJBVElWTyxcclxuICAgICAgICAgICAgICAgIHNvbG9MZWN0dXJhOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICAgICAgbnVtX3NpbmNybyxcclxuICAgICAgICAgICAgICAgIGlkcGVyOiBjb250ZXh0LnVzZXIuaWRwZXIsXHJcbiAgICAgICAgICAgICAgICBjYXJnYXM6IGxpa2VBci5jcmVhdGVJbmRleChyb3cuY2FyZ2FzLm1hcChjYXJnYSA9PiAoeyAuLi5jYXJnYSwgZmVjaGE6IGNhcmdhLmZlY2hhID8gZGF0ZS5pc28oY2FyZ2EuZmVjaGEpLnRvRG15KCkgOiBudWxsLCBlc3RhZG9fY2FyZ2E6ICdyZWxldmFtaWVudG8nIH0pKSwgJ2NhcmdhJylcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9iYWNrdXAnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAndG9rZW4nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RlbScsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ21vZG9fZG0nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgdG9rZW46IHN0cmluZyB8IG51bGwsIHRlbTogQW55T2JqZWN0LCBtb2RvX2RtOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHsgYmUsIGNsaWVudCB9ID0gY29udGV4dDtcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICB2YXIgbnVtX3NpbmNybzogbnVtYmVyID0gMDtcclxuICAgICAgICAgICAgdmFyIHRva2VuOiBzdHJpbmcgfCBudWxsID0gcGFyYW1ldGVycy50b2tlbjtcclxuICAgICAgICAgICAgaWYgKHRva2VuID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IG9rOiAnb2s6Ti9UJyB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIHsgcm93Q291bnQgfSA9IGF3YWl0IGNsaWVudC5xdWVyeShgc2VsZWN0IDEgZnJvbSB0b2tlbnMgd2hlcmUgdG9rZW4gPSAkMWAsIFt0b2tlbl0pLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgIGlmICghcm93Q291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvazogJ29rOk4vVCcgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTykpO1xyXG4gICAgICAgICAgICBpZiAocGFyYW1ldGVycy50ZW0pIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGJhY2t1cCBvZiBsaWtlQXIocGFyYW1ldGVycy50ZW0pLmFycmF5KCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXJlYSA9IGJhY2t1cC5jYXJnYS5jYXJnYTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcHVlc3Rhc1JhaXogPSBiYWNrdXAucmVzcHVlc3Rhc1JhaXo7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkRW5jRE0gPSBiYWNrdXAuZm9yUGtSYWl6W3BrX2FncmVnYWRhXS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWNlcGNpb25pc3RhID0gYmFja3VwLmNhcmdhLnJlY2VwY2lvbmlzdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFzaWduYWRvID0gYmFja3VwLmlkcGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoaWRFbmNETSkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHBlcnNpc3RpckVuY3Vlc3RhQXV0b2dlbmVyYWRhRW5ETShjb250ZXh0LCBPUEVSQVRJVk8sIGFyZWEsIGlkRW5jRE0sIHRva2VuLCByZXNwdWVzdGFzUmFpeiwgcmVjZXBjaW9uaXN0YSwgYXNpZ25hZG8sIHBhcmFtZXRlcnMubW9kb19kbSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGpzb25fYmFja3VwID0gJDMsIGZlY2hhX2JhY2t1cCA9IGN1cnJlbnRfdGltZXN0YW1wXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIGpzb25fYmFja3VwIGlzIGRpc3RpbmN0IGZyb20gJDRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIGlkRW5jRE0sIHJlc3B1ZXN0YXNSYWl6LCByZXNwdWVzdGFzUmFpel1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgb2s6ICdvaydcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2NvbnNpc3Rpcl92aXZpZW5kYScsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FzbycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBjYXNvOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHsgYmUsIGNsaWVudCB9ID0gY29udGV4dDtcclxuICAgICAgICAgICAgbGV0IHBhcmFtX3Byb2MgPSB7XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgaWRfY2FzbzogcGFyYW1ldGVycy5jYXNvXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2U6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0YWRvOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGF3YWl0IGJlLnByb2NlZHVyZS5jb25zaXN0aXJfZW5jdWVzdGEuY29yZUZ1bmN0aW9uKGNvbnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1fcHJvY1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSB1bmV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICBlcnJNZXNzYWdlID0gXCIgY29uc2lzdGlyX2Nhc28uIFwiICsgZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTWVzc2FnZSwgZXJyb3IpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coJyoqKioqKiBjb25zaXN0aXJfY2FzbyByZXN1bHRhZG86JywgcmVzdWx0YWRvKVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgb2s6ICdvaydcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9yZXNjYXRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdsb2NhbFN0b3JhZ2VJdGVtJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbG9jYWxTdG9yYWdlSXRlbUtleScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IGxvY2FsU3RvcmFnZUl0ZW1LZXk6IHN0cmluZywgbG9jYWxTdG9yYWdlSXRlbTogQW55T2JqZWN0IH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IGxvY2FsU3RvcmFnZUl0ZW1LZXksIGxvY2FsU3RvcmFnZUl0ZW0gfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxvY2FsU3RvcmFnZUl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZSgnbG9jYWwtcmVzY2F0ZS50eHQnLCBKU09OLnN0cmluZ2lmeSh7IG5vdzogbmV3IERhdGUoKSwgdXNlcjogY29udGV4dC51c2VybmFtZSwgaXRlbUtleTogbG9jYWxTdG9yYWdlSXRlbUtleSwgaXRlbURhdGE6IGxvY2FsU3RvcmFnZUl0ZW0gfSkgKyAnXFxuXFxuJywgJ3V0ZjgnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VSUk9SJywgZXhwZWN0ZWQoZXJyKSk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ29wZXJhdGl2b19nZXQnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W10sXHJcbiAgICAgICAgdW5sb2dnZWQ6dHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pil7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2dldF9yYW5kb21fZnJlZV9jYXNlJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9XSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvIH0+KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbnNUb0V4cGlyZSA9IDMwO1xyXG4gICAgICAgICAgICBjb25zdCBtaW5zU2luY2VCbG9xdWVkID0gYGRhdGVfcGFydCgnbWluJywgYWdlKGN1cnJlbnRfdGltZXN0YW1wLCBmZWNoYV9ibG9xdWVvKSlgO1xyXG4gICAgICAgICAgICBjb25zdCBlbmMgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgc2VsZWN0IGVuYyBmcm9tIHRlbSB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIChsaWJyZSBvciAke21pbnNTaW5jZUJsb3F1ZWR9ID4gJHttaW5zVG9FeHBpcmV9KSBsaW1pdCAxO2AsIFtwYXJhbXMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgVVBEQVRFIHRlbSBzZXQgbGlicmUgPSBmYWxzZSwgZmVjaGFfYmxvcXVlbz1jdXJyZW50X3RpbWVzdGFtcCB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMmAsIFtwYXJhbXMub3BlcmF0aXZvLCBlbmMudmFsdWVdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBlbmMudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdtdWVzdHJhX2dlbmVyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnYXJlYScsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6IFwiYXJlYXNcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdkb21pbmlvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgZGVmYXVsdFZhbHVlOiAzIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NhbnRfZW5jdWVzdGFzJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYV9hY3R1YWwnLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAndGFyZWFzJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgYXJlYTogbnVtYmVyLCBkb21pbmlvOiBudW1iZXIsIGNhbnRfZW5jdWVzdGFzOiBudW1iZXIsIHRhcmVhX2FjdHVhbDogSWRUYXJlYSB9Pikge1xyXG4gICAgICAgICAgICBjb25zdCBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gb3BlcmF0aXZvcyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMVxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIGlmIChwZXJtaXRlR2VuZXJhck11ZXN0cmEpIHtcclxuICAgICAgICAgICAgICAgIGxldCB0b3RhbEFjdHVhbCA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICBgc2VsZWN0IGNvdW50KCopIGFzIHRvdGFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGFyZWEgPSAkMmAsXHJcbiAgICAgICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5hcmVhXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJhbXMuY2FudF9lbmN1ZXN0YXMgLSB0b3RhbEFjdHVhbDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jID0gYXdhaXQgZ2VuZXJhck51ZXZvSWRFbmMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmFyZWEsIG1heEFFbmNQb3JBcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJFbmN1ZXN0YVRlbShjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBlbmMsIHBhcmFtcy5hcmVhLCBwYXJhbXMuZG9taW5pbywgcGFyYW1zLnRhcmVhX2FjdHVhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImVsIG9wZXJhdGl2byBubyBwZXJtaXRlIGdlbmVyYXIgbXVlc3RyYVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnbXVlc3RyYV9hZ3JlZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2FyZWEnLCB0eXBlTmFtZTogJ2ludGVnZXInLCByZWZlcmVuY2VzOiBcImFyZWFzXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZG9taW5pbycsIHR5cGVOYW1lOiAnaW50ZWdlcicsIGRlZmF1bHRWYWx1ZTogMyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYW50X2VuY3Vlc3RhcycsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWFfYWN0dWFsJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ3RhcmVhcycgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgZG9taW5pbzogbnVtYmVyLCBjYW50X2VuY3Vlc3RhczogbnVtYmVyLCB0YXJlYV9hY3R1YWw6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBjb25zdCBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlR2VuZXJhck11ZXN0cmEgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gb3BlcmF0aXZvcyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMVxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIGlmIChwZXJtaXRlR2VuZXJhck11ZXN0cmEpIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHBhcmFtcy5jYW50X2VuY3Vlc3RhczsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jID0gYXdhaXQgZ2VuZXJhck51ZXZvSWRFbmMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmFyZWEsIG1heEFFbmNQb3JBcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJFbmN1ZXN0YVRlbShjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBlbmMsIHBhcmFtcy5hcmVhLCBwYXJhbXMuZG9taW5pbywgcGFyYW1zLnRhcmVhX2FjdHVhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihcImVsIG9wZXJhdGl2byBubyBwZXJtaXRlIGdlbmVyYXIgbXVlc3RyYVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYmxhbnF1ZWFyX3ByZXZpc3VhbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICByZXN1bHRPazogJ21vc3RyYXJfZW5jdWVzdGFfYV9ibGFucXVlYXJfY29udGVuaWRvJyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgYnVzY2FyRW5jdWVzdGFFblRlbShjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYmxhbnF1ZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdzdWJjb29yX2NhbXBvJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gJHtiZS5kYi5xdW90ZUlkZW50KHVuaWRhZF9hbmFsaXNpcyl9IFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgJHtiZS5kYi5xdW90ZUlkZW50KHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAvL3Bhc28gYSBlbmN1IHBhcmEgZ3VhcmRhciBlbiBoaXN0b3JpYWxcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWFfYWN0dWFsID0gJ2VuY3UnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIC8vcmVzZXRlbyB0ZW0gKG5vIHNlIGd1YXJkYSBoaXN0b3JpYWwgcG9ycXVlIHRhcmVhX2FjdHVhbCBlcyBudWxsKVxyXG4gICAgICAgICAgICAvL2d1YXJkbyBiYWNrdXAgcG9yIGxhcyBkdWRhc1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqc29uX2JhY2t1cCA9IGpzb25fZW5jdWVzdGEsIGpzb25fZW5jdWVzdGEgPSBudWxsLCB0YXJlYV9hY3R1YWwgPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWNoYV9tb2RpZl9lbmN1ZXN0YSA9IG51bGwsIGZlY2hhX2JhY2t1cCA9IGN1cnJlbnRfdGltZXN0YW1wLCBtb2RpZmljYWRvID0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lbl9lc3RhZG8gPSBudWxsLCByZXN1bWVuX2VzdGFkb19zdXAgPSBudWxsLCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc2VfdGFibGEgPSBudWxsLCByZWEgPSBudWxsLCBub3JlYSA9IG51bGwsIHJlYV9zdXAgPSBudWxsLCBub3JlYV9zdXAgPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGluX2Nvbl92YXJcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgcGtfaW50ZWdyYWRhLT4+JHtiZS5kYi5xdW90ZUxpdGVyYWwocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNfdWx0aW1hc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBwa19pbnRlZ3JhZGEtPj4ke2JlLmRiLnF1b3RlTGl0ZXJhbChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBgbGEgZW5jdWVzdGEgJHtwYXJhbXMuZW5jfSBzZSBibGFucXVlw7MgY29ycmVjdGFtZW50ZWA7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ib3JyYXJfcHJldmlzdWFsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczpbJ2Nvb3JfcHJvYycsJ3N1YmNvb3JfY2FtcG8nLCdjb29yX2NhbXBvJywnYWRtaW4nXSxcclxuICAgICAgICByZXN1bHRPazonbW9zdHJhcl9lbmN1ZXN0YV9hX2JvcnJhcicsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e29wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nfT4pe1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgYnVzY2FyRW5jdWVzdGFFblRlbShjb250ZXh0LHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ib3JyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ3N1YmNvb3JfY2FtcG8nLCAnY29vcl9jYW1wbycsICdhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIHBhcmFtcy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2Fzb1RlbSB9ID0gYXdhaXQgYnVzY2FyRW5jdWVzdGFFblRlbShjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1fYm9ycmFkYXMgKG9wZXJhdGl2bywgZW5jLCBjdWFuZG8sIGFyZWEsIGNsdXN0ZXIsIGRvbWluaW8sIHRhcmVhX2FjdHVhbCwganNvbl9lbmN1ZXN0YSwgdG9rZW5fYXV0b2dlbmVyYWRvX2RtLCBlbmNfYXV0b2dlbmVyYWRvX2RtLCBlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEsIHByb2llKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgKCQxLCQyLGN1cnJlbnRfdGltZXN0YW1wLCQzLCQ0LCQ1LCQ2LCQ3LCQ4LCQ5LCQxMCwkMTEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqXHJcbiAgICAgICAgICAgICAgICAgICAgYCwgW1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0ub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uZW5jLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uYXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmNsdXN0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5kb21pbmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0udGFyZWFfYWN0dWFsLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uanNvbl9lbmN1ZXN0YSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLnRva2VuX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmVuY19hdXRvZ2VuZXJhZG9fZG0sXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5lbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5wcm9pZVxyXG4gICAgICAgICAgICAgICAgXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJHtiZS5kYi5xdW90ZUlkZW50KHVuaWRhZF9hbmFsaXNpcyl9IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaGlzdG9yaWFsX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCAke2JlLmRiLnF1b3RlSWRlbnQocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5fY29uX3ZhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgcGtfaW50ZWdyYWRhLT4+JHtiZS5kYi5xdW90ZUxpdGVyYWwocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzX3VsdGltYXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIHBrX2ludGVncmFkYS0+PiR7YmUuZGIucXVvdGVMaXRlcmFsKHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYGxhIGVuY3Vlc3RhICR7cGFyYW1zLmVuY30gc2UgYm9ycsOzIGNvcnJlY3RhbWVudGVgO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ25vIHNlIHB1ZWRlIGJvcnJhciBsYSBlbmN1ZXN0YSBwb3JxdWUgZWwgb3BlcmF0aXZvIHRpZW5lIG11ZXN0cmEgZXN0w6F0aWNhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3Rhc19jYXBhY2l0YWNpb25fYm9ycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH1cclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gb3BlcmF0aXZvcyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMVxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIGlmIChwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5jc0FCb3JyYXIgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgYHNlbGVjdCAqIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm9dKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGVuY3NBQm9ycmFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX2JvcnJhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgeyBvcGVyYXRpdm86IHBhcmFtcy5vcGVyYXRpdm8sIGVuYzogcm93LmVuYyB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdzZSBib3JyYXJvbiBsYXMgZW5jdWVzdGFzIGRlIGNhcGFjaXRhY2nDs24nO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ25vIHNlIHB1ZWRlIGJvcnJhciBsYSBlbmN1ZXN0YSBwb3JxdWUgZWwgb3BlcmF0aXZvIHRpZW5lIG11ZXN0cmEgZXN0w6F0aWNhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2FjY2lvbl90YXJlYXNfdGVtX2VqZWN1dGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY29uZGljaW9uJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdhY2Npb24nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcsIGNvbmRpY2lvbjogc3RyaW5nLCBhY2Npb246IEVzdGFkb0FjY2lvbiB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgYWNjaW9uID0gcGFyYW1zLmFjY2lvbiBhcyBFc3RhZG9BY2Npb247XHJcbiAgICAgICAgICAgIHZhciBjdW1wbGU6IGJvb2xlYW4gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGFjY2lvbl9jdW1wbGVfY29uZGljaW9uKCQ1LCAkNiwgJDcsICQ4LCAoXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0IGNvbmRpY2lvbiBcclxuICAgICAgICAgICAgICAgICAgICAgIGZyb20gZXN0YWRvc19hY2Npb25lcyBcclxuICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlc3RhZG8gPSAkMiBhbmQgZWFjY2lvbiA9ICQzIGFuZCBlc3RhZG9fZGVzdGlubyA9ICQ0XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClgLCBbXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkbyxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lYWNjaW9uLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG8sXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW5jLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVhY2Npb24sXHJcbiAgICAgICAgICAgIF0pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIGlmICghY3VtcGxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gc2UgcHVkbyBlamVjdXRhciBsYSBhY2Npw7NuLCBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzbiBcIiR7cGFyYW1zLmNvbmRpY2lvbn1cIiBvIGJpZW4gZWwgZXN0YWRvIGVzdMOhIGRlc2FjdHVhbGl6YWRvLCByZWZyZXNxdWUgbGEgZ3JpbGxhLmApXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlbmM9JDIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmVuYyxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgaWYgKGFjY2lvbi5ub21icmVfcHJvY2VkdXJlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYmUucHJvY2VkdXJlW2FjY2lvbi5ub21icmVfcHJvY2VkdXJlXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVthY2Npb24ubm9tYnJlX3Byb2NlZHVyZV0uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcylcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIGV4aXN0ZSBlbCBwcm9jZWR1cmUgXCIke2FjY2lvbi5ub21icmVfcHJvY2VkdXJlfVwiIGRlZmluaWRvIGVuIGxhIHRhYmxhIFwiZXN0YWRvc19hY2Npb25lc1wiIHBhcmEgZWxcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86ICR7YWNjaW9uLm9wZXJhdGl2b30sIGVzdGFkbzogJHthY2Npb24uZXN0YWRvfSwgZWFjY2lvbjogJHthY2Npb24uZWFjY2lvbn0uYClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBCVVNDTyBQQVNFIERFIFRBUkVBXHJcbiAgICAgICAgICAgIHZhciB0YXJlYVNpZ3VpZW50ZSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3Byb3hpbWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2byA9ICQxIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEgPSAkMiBhbmQgZXN0YWRvID0gJDMgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYV9jdW1wbGVfY29uZGljaW9uKCQ0LCAkNSwgJDYsICQ3LCBjb25kaWNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgb3JkZW5cclxuICAgICAgICAgICAgICAgICAgICBsaW1pdCAxYFxyXG4gICAgICAgICAgICAgICAgLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW5jXHJcbiAgICAgICAgICAgICAgICBdKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCkpLnJvdztcclxuICAgICAgICAgICAgaWYgKHRhcmVhU2lndWllbnRlKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYFxyXG4gICAgICAgICAgICAgICAgICAgICwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXV0b0FzaWduYWRvID0gdGFyZWFTaWd1aWVudGUucmVnaXN0cmFfcmVjZXBjaW9uaXN0YSA/IGNvbnRleHQudXNlci5pZHBlciA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgcSA9IGNvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0c19lbnRyYWRhID0gY3VycmVudF90aW1lc3RhbXAsIGFkZWxhbnRhciA9IG51bGwsIGVzdGFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2F1dG9Bc2lnbmFkbyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLCByZWNlcGNpb25pc3RhPVwiICsgcShhdXRvQXNpZ25hZG8pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIn1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYFxyXG4gICAgICAgICAgICAgICAgICAgICwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm8sIHRhcmVhU2lndWllbnRlLmVzdGFkb19kZXN0aW5vXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmVhU2lndWllbnRlLm5vbWJyZV9wcm9jZWR1cmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmVbdGFyZWFTaWd1aWVudGUubm9tYnJlX3Byb2NlZHVyZV0uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRklOIFBBU0UgREUgVEFSRUFcclxuICAgICAgICAgICAgcmV0dXJuIFwib2tcIjtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2NhcmdhX3ByZXBhcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmMsIE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9kaXNwb25pYmlsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBhc2lnbmFkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19jYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rlc2NhcmdhX3ByZXBhcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmMsIE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19kZXNjYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJ2NhcmdhcidcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9hbmFsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuY29uc2lzdGlyX2VuY3Vlc3RhLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7IG9wZXJhdGl2bzogcGFyYW1zLm9wZXJhdGl2bywgaWRfY2FzbzogcGFyYW1zLmVuYyB9KVxyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2luY29uc2lzdGVuY2lhc19lbmN1ZXN0YV9jb250cm9sYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGNhbnRpZGFkOiBudW1iZXIgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGNvdW50KCopIGFzIGN1bXBsZVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5jb25zaXN0ZW5jaWFzIGkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4gY29uc2lzdGVuY2lhcyBjIHVzaW5nIChvcGVyYXRpdm8sIGNvbnNpc3RlbmNpYSkgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpvaW4gbW9tZW50b3NfY29uc2lzdGVuY2lhIG1jIHVzaW5nIChvcGVyYXRpdm8sIG1vbWVudG8pXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2byA9ICQxIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdml2aWVuZGEgPSAkMiBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudG9fY29uc2lzdGVuY2lhX2N1bXBsZV9jb25kaWNpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLnZpdmllbmRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJDMsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdCBjb25kaWNpb24gZnJvbSBtb21lbnRvc19jb25zaXN0ZW5jaWEgd2hlcmUgb3BlcmF0aXZvID0gbWMub3BlcmF0aXZvIGFuZCBtb21lbnRvID0gbWMubW9tZW50bylcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaS5qdXN0aWZpY2FjaW9uIGlzIG51bGxgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIGNvbnRleHQudXNlcm5hbWVdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWVcclxuICAgICAgICAgICAgaWYgKGNhbnRpZGFkKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgbm8gc2UgcHVlZGUgdmVyaWZpY2FyIGxhIHRhcmVhIHBvcnF1ZSBoYXkgaW5jb25zaXN0ZW5jaWFzLCBwb3IgZmF2b3IgcmVzdcOpbHZhbGFzIG8ganVzdGlmw61xdWVsYXMgZW4gY2FzbyBkZSBzZXIgbmVjZXNhcmlvLmApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV92ZXJpZmljYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmluY29uc2lzdGVuY2lhc19lbmN1ZXN0YV9jb250cm9sYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSAnMSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub192ZXJpZmljYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9jZXJyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9ICcxJywgYXNpZ25hZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jLCBjb250ZXh0LnVzZXIuaWRwZXJdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fY2VycmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfc3VwZXJ2aXNhcl9wcmVzZW5jaWFsJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnc3VwZScsIDFdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfc3VwZXJ2aXNhcl90ZWxlZm9uaWNhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnc3VwZScsIDJdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fc3VwZXJ2aXNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzLCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnZmluYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfcGFzYXJfYV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdDQydcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWEgaW4gKCQzLCQ0KSAtLXF1aWVybyBwYXNhciBsYXMgMiB0YXJlYXMgYSBDQ1xyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYycsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3Bhc2FyX2FfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rldm9sdmVyX3Byb2NfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfdmVyaWZpY2FyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbXMpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgdGFyZWE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19kZXZvbHZlcl9wcm9jX2Rlc2RlX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0NDJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYSBpbiAoJDMsJDQpIC0tcXVpZXJvIHBhc2FyIGxhcyAyIHRhcmVhcyBhIENDXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9ub192ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfcmVjdXBlcmFyX2Rlc2RlX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMsIHRhcmVhIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV92ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCAncmVjdSddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fcmVjdXBlcmFyX2Rlc2RlX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMsIHRhcmVhIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgJ3JlY3UnLCAnYW5hYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV9ub192ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZm9yemFyX3RhcmVhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYV9hY3R1YWwnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhX251ZXZhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhX2FjdHVhbDogc3RyaW5nLCB0YXJlYV9udWV2YTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IG9wZXJhdGl2bywgZW5jLCB0YXJlYV9hY3R1YWwsIHRhcmVhX251ZXZhIH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfYWN0dWFsLCB0YXJlYV9udWV2YV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdWJyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbF0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICcwRCdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX251ZXZhXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2hhYmlsaXRhcl9kZXNoYWJpbGl0YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGhhYmlsaXRhZGEgPSBub3QgaGFiaWxpdGFkYVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFzX3Byb2Nlc2FtaWVudG9fcGFzYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pe1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgcGFzYXJFbmN1ZXN0YXNBUHJvaWUoY29udGV4dC5jbGllbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnaW50ZXJjYW1iaWFyX2VuY3Vlc3RhcycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMxJywgcmVmZXJlbmNlczogJ3RlbScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FudEhvZzEnLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYzInLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NhbnRIb2cyJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdwYXNvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjb25maXJtYScsIHR5cGVOYW1lOiAnYm9vbGVhbicsIGRlZmF1bHRWYWx1ZTogZmFsc2UsIGxhYmVsOiAnQ29uZmlybWEgaW50ZXJjYW1iaW8gZGUgbG9zIGRhdG9zIGVudHJlIGxhcyBlbmN1ZXN0YXM/ICcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdwcm9jZXNhbWllbnRvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgcHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPGFueT4pIHtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFBhcmEgY29udHJvbGFyOlxyXG4gICAgICAgICAgICAgKiAtIHF1ZSBsYXMgaG9nYXJlcywgcGVyc29uYXMsIGV0YyBlc3TDqW4gaW50ZXJjYW1iaWFkYXMgXHJcbiAgICAgICAgICAgICAqICAqIHRhbnRvIGVuIGVsIGpzb25cclxuICAgICAgICAgICAgICogICogY29tbyBlbiBsYXMgVERzXHJcbiAgICAgICAgICAgICAqIC0gY29zYXMgcXVlIHNlIGNhbGN1bGFuIHBvciBsYSBhcHA/IGN1YWxlcz8gKHJlc3VtZW5fZXN0YWRvLCByZWEgeSBub3JlYSlcclxuICAgICAgICAgICAgICovXHJcblxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5jb25maXJtYSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb25maXJtw7MgaW50ZXJjYW1iaW8nKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmVuYzEgfHwgIXBhcmFtcy5lbmMyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBGYWx0YSBpbmdyZXNhciB1biBudW1lcm8gZGUgZW5jdWVzdGEhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHBhcmFtcy5lbmMxID09IHBhcmFtcy5lbmMyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBlbmMxIHkgZW5jMiBkZWJlbiBzZXIgZGlzdGludG9zIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNhbnRIb2cxKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBDYW50aWRhZCBkZSBIb2dhcmVzIGRlIGVuYzEsIG5vIGVzdGEgaW5ncmVzYWRvIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNhbnRIb2cyKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBDYW50aWRhZCBkZSBIb2dhcmVzIGRlIGVuYzIsIG5vIGVzdGEgaW5ncmVzYWRvIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENPTlRST0xBUiBRVUUgTklOR1VOQSBERSBMQVMgMiBlbmN1ZXN0YXMgRVNURSBDQVJHQURBLCBBQklFUlRBIEZBTFRBXHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgY29uc3QgY2FudF9ob2dzID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCB2aXZpZW5kYSwgY291bnQoKiluaCBmcm9tIGhvZ2FyZXMgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAodml2aWVuZGE9JDIgb3Igdml2aWVuZGE9JDMpXHJcbiAgICAgICAgICAgICAgICBncm91cCBieSB2aXZpZW5kYSBvcmRlciBieSB2aXZpZW5kYVxyXG4gICAgICAgICAgICAgICAgYCwgW09QRVJBVElWTywgcGFyYW1zLmVuYzEsIHBhcmFtcy5lbmMyXSkuZmV0Y2hBbGwoKSkucm93cztcclxuXHJcbiAgICAgICAgICAgIHZhciBwYXJhbV9uaCA9IFtwYXJhbXMuY2FudEhvZzEsIHBhcmFtcy5jYW50SG9nMl07XHJcbiAgICAgICAgICAgIGNhbnRfaG9ncy5mb3JFYWNoKCh4ZSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtX25oW2ldICE9PSB4ZS5uaCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhtZW5zID0gYEVycm9yLCBubyBjb2luY2lkZSBsYSBjYW50aWRhZCBkZSBob2dhcmVzIGRlIGVuYyR7aSArIDF9YDtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoeG1lbnMpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVnRW5jID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgc2VsZWN0IGVuYywgdGFyZWFfYWN0dWFsLCBqc29uX2VuY3Vlc3RhIGZyb20gdGVtIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKGVuYyA9JDIgb3IgZW5jPSQzKSBvcmRlciBieSBlbmNcclxuICAgICAgICAgICAgYCwgW09QRVJBVElWTywgcGFyYW1zLmVuYzEsIHBhcmFtcy5lbmMyXSkuZmV0Y2hBbGwoKSkucm93cztcclxuXHJcbiAgICAgICAgICAgIGlmIChyZWdFbmMubGVuZ3RoICE9IDIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIE5vIHNlIGVuY29udHJhcm9uIDIgZW5jdWVzdGFzJylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGxpbXBpYSBsYXMgVERzICBcclxuICAgICAgICAgICAgICAgIGxldCBbZW5jMSwgZW5jMl0gPSBbcmVnRW5jWzBdLCByZWdFbmNbMV1dXHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnBhc28gPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgZGVsZXRlIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAodml2aWVuZGE9JDIgT1Igdml2aWVuZGE9JDMpYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsIFtPUEVSQVRJVk8sIGVuYzEuZW5jLCBlbmMyLmVuY11cclxuICAgICAgICAgICAgICAgICAgICApLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBhcmFtcy5wYXNvID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL3NpbXVsYSBndWFyZGFkb1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgT1BFUkFUSVZPLCBlbmMxLmVuYywgZW5jMS50YXJlYV9hY3R1YWwsIGVuYzIuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvKGNvbnRleHQsIE9QRVJBVElWTywgZW5jMi5lbmMsIGVuYzIudGFyZWFfYWN0dWFsLCBlbmMxLmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIChgTGlzdG8gcGFzbyAke3BhcmFtcy5wYXNvfS4gSW50ZXJjYW1iaW8gcmVhbGl6YWRvIGVudHJlIGxhcyBlbmN1ZXN0YXMgICR7cGFyYW1zLmVuYzF9IHkgJHtwYXJhbXMuZW5jMn0uIFBvciBmYXZvciBjb25zaXN0YSBsYSBlbmN1ZXN0YWApXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YWRvcl9kbXNfbW9zdHJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmN1ZXN0YWRvcicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2Nvb3JfcHJvYycsICdjb29yX2NhbXBvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdtb3N0cmFyX2VuY3Vlc3Rhc19hX2JsYW5xdWVhcicsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jdWVzdGFkb3I6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGFzaWduYWRvID0gJDIgYW5kIGNhcmdhZG9fZG0gaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBjYXJnYWRvX2RtXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmN1ZXN0YWRvcl0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5yb3dDb3VudCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gc2UgZW5jb250cmFyb24gZW5jdWVzdGFzIGNhcmdhZGFzIGVuIHVuIERNIHBhcmEgZWwgb3BlcmF0aXZvICR7cGFyYW1zLm9wZXJhdGl2b30sIGVuY3Vlc3RhZG9yICR7cGFyYW1zLmVuY3Vlc3RhZG9yfWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHsgcm93czogcmVzdWx0LnJvd3MsIG9wZXJhdGl2bzogcGFyYW1zLm9wZXJhdGl2byB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fYmxhbnF1ZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3Rva2VuJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0b2tlbjogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGxldCB0YXJlYXNUZW1SZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBjYXJnYWRvX2RtID0gbnVsbCwgb3BlcmFjaW9uID0gJDMsIGVzdGFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBjYXJnYWRvX2RtID0gJDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRva2VuLCBPUEVSQUNJT05fUFJFUEFSQVJfREVTQ0FSR0EsIEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0FdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIGlmICh0YXJlYXNUZW1SZXN1bHQucm93Q291bnQgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3IoJ05vIHNlIGJsYW5xdWXDsyBuaW5ndW5hIGVuY3Vlc3RhJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCB0dCBvZiB0YXJlYXNUZW1SZXN1bHQucm93cykge1xyXG4gICAgICAgICAgICAgICAgdHQucmVzdWx0X2JsYW5xdWVvID0gYGVuYyAke3R0LmVuY30gc2UgYmxhbnF1ZcOzIGNvcnJlY3RhbWVudGUuYDtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRCYWNrdXAgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQganNvbl9lbmN1ZXN0YSA9IGpzb25fYmFja3VwLCBmZWNoYV9tb2RpZl9lbmN1ZXN0YSA9IGZlY2hhX2JhY2t1cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMiBhbmQgZmVjaGFfYmFja3VwID4gY29hbGVzY2UoZmVjaGFfbW9kaWZfZW5jdWVzdGEsICcxOTAwLTAxLTAxJykgYW5kIGpzb25fYmFja3VwIGlzIG5vdCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICBbdHQub3BlcmF0aXZvLCB0dC5lbmNdKVxyXG4gICAgICAgICAgICAgICAgICAgIC5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0QmFja3VwLnJvd0NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHQucmVzdWx0X2JsYW5xdWVvICs9IGAgU2UgcmVzdGFibGVjacOzIGVsIGJhY2t1cCBjb24gZmVjaGEgJHtyZXN1bHRCYWNrdXAucm93LmZlY2hhX2JhY2t1cC50b1ltZEhtcygpfS5gXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHsgcGFyYW1zOiBxdWVyeVBhcmFtcywgc2V0dGVycyB9ID0gZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYTogdHQudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDogcmVzdWx0QmFja3VwLnJvdy5qc29uX2VuY3Vlc3RhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbdHQub3BlcmF0aXZvLCB0dC5lbmMsIHR0LnRhcmVhXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNcclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3Jpbyhjb250ZXh0LCByZXN1bHRCYWNrdXAucm93Lm9wZXJhdGl2bywgcmVzdWx0QmFja3VwLnJvdy5lbmMsIHR0LnRhcmVhLCByZXN1bHRCYWNrdXAucm93Lmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmVhc1RlbVJlc3VsdC5yb3dzO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnbW9kb19kbV9kZWZlY3RvX29idGVuZXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pikge1xyXG4gICAgICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gY29udGV4dDtcclxuICAgICAgICAgICAgY29uc3QgbW9kb0RtRGVmZWN0byA9IChhd2FpdCAoY2xpZW50LnF1ZXJ5KGBzZWxlY3QgbW9kb19kbV9kZWZlY3RvIGZyb20gcGFyYW1ldHJvcyB3aGVyZSB1bmljb19yZWdpc3Ryb2AsIFtdKS5mZXRjaFVuaXF1ZVZhbHVlKCkpKS52YWx1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIG1vZG9EbURlZmVjdG87XHJcbiAgICAgICAgfVxyXG4gICAgfSwge1xyXG4gICAgICAgIGFjdGlvbjogJ21vZG9fYXBwX2dldCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW10sXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgYmUgfSA9IGNvbnRleHQ7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRNb2RvQnlQb2xpY3koYmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnb3BlcmF0aXZvX21pZ3JhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm9fb3JpZ2VuJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2b19kZXN0aW5vJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdzY2hlbWFfbmFtZScsIHR5cGVOYW1lOiAndGV4dCcsIGxhYmVsOiAnbm9tYnJlIGRlIHNjaGVtYScgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnZG93bmxvYWRfc3FsJyxcclxuICAgICAgICBwcm9jZWVkTGFiZWw6ICdtaWdyYXInLFxyXG4gICAgICAgIHJvbGVzOiBbJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiB7IG9wZXJhdGl2b19vcmlnZW46IHN0cmluZywgb3BlcmF0aXZvX2Rlc3Rpbm86IHN0cmluZywgc2NoZW1hX25hbWU6IHN0cmluZyB9KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlcyA9IGF3YWl0IFByb21pc2UuYWxsKFsnb3BlcmF0aXZvcycsICd0YXJlYXMnLCAndW5pZGFkX2FuYWxpc2lzJywgJ2Nhc2lsbGVyb3MnXS5tYXAoYXN5bmMgdGFibGVOYW1lID0+ICh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0YWJsZU5hbWUsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBzZWxlY3QgKiBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHRhYmxlTmFtZSl9IHdoZXJlIG9wZXJhdGl2byA9ICQxYCwgW3BhcmFtcy5vcGVyYXRpdm9fb3JpZ2VuXSkuZmV0Y2hBbGwoKVxyXG4gICAgICAgICAgICB9KSkpO1xyXG5cclxuICAgICAgICAgICAgdGFibGVzLmZvckVhY2goKF8sIGkpID0+IHRhYmxlc1tpXS5yZXN1bHQucm93cy5mb3JFYWNoKHJvdyA9PiByb3cub3BlcmF0aXZvID0gcGFyYW1zLm9wZXJhdGl2b19kZXN0aW5vKSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBidWlsZEluc2VydHMgPSAocXVlcnk6IHsgbmFtZTogc3RyaW5nLCByZXN1bHQ6IFJlc3VsdFJvd3MgfSkgPT4gcXVlcnkucmVzdWx0LnJvd3MubWFwKHJvdyA9PlxyXG4gICAgICAgICAgICAgICAgJ2luc2VydCBpbnRvICcgKyBjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQocGFyYW1zLnNjaGVtYV9uYW1lKSArICcuJyArIGNvbnRleHQuYmUuZGIucXVvdGVJZGVudChxdWVyeS5uYW1lKSArXHJcbiAgICAgICAgICAgICAgICAnICgnICsgcXVlcnkucmVzdWx0LmZpZWxkcy5tYXAoKGY6IHsgbmFtZTogc3RyaW5nIH0pID0+IGNvbnRleHQuYmUuZGIucXVvdGVJZGVudChmLm5hbWUpKS5qb2luKCcsICcpICsgJyknICtcclxuICAgICAgICAgICAgICAgICcgdmFsdWVzICgnICsgcXVlcnkucmVzdWx0LmZpZWxkcy5tYXAoKGY6IHsgbmFtZTogc3RyaW5nIH0pID0+IGNvbnRleHQuYmUuZGIucXVvdGVOdWxsYWJsZShyb3dbZi5uYW1lXSkpLmpvaW4oJywgJykgKyAnKTsnXHJcbiAgICAgICAgICAgICkuam9pbignXFxuJyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpbnNlcnRBcmVhcyA9IGBcclxuICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIGFyZWFzIChvcGVyYXRpdm8sIGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ICR7Y29udGV4dC5iZS5kYi5xdW90ZU51bGxhYmxlKHBhcmFtcy5vcGVyYXRpdm9fZGVzdGlubyl9IGFzIG9wZXJhdGl2bywgYXJlYVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gYXJlYXMgd2hlcmUgb3BlcmF0aXZvID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19vcmlnZW4pfTtcclxuICAgICAgICAgICAgYFxyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5zZXJ0VGFyZWFzQXJlYXMgPSBgXHJcbiAgICAgICAgICAgICAgICBpbnNlcnQgaW50byB0YXJlYXNfYXJlYXMgKG9wZXJhdGl2byx0YXJlYSwgYXJlYSlcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19kZXN0aW5vKX0gYXMgb3BlcmF0aXZvLCB0YXJlYSwgYXJlYVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX2FyZWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19vcmlnZW4pfTtcclxuICAgICAgICAgICAgYDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGluc2VydFRlbSA9IGBcclxuICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIHRlbSAob3BlcmF0aXZvLCBhcmVhLCBlbmMsIGRvbWluaW8sIGhhYmlsaXRhZGEpXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ICR7Y29udGV4dC5iZS5kYi5xdW90ZU51bGxhYmxlKHBhcmFtcy5vcGVyYXRpdm9fZGVzdGlubyl9IGFzIG9wZXJhdGl2bywgYXJlYSwgKGFyZWEgfHwgZW5jOjp0ZXh0KSBlbmMsIGNhc2Ugd2hlbiBlbmNzLmVuYyA8IDEwNiB0aGVuIDMgZWxzZSA1IGVuZCBhcyBkb21pbmlvLCB0cnVlIGFzIGhhYmlsaXRhZGFcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGFyZWFzIGpvaW4gKFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMTAwLCAxMTApIGVuYykgZW5jc1xyXG4gICAgICAgICAgICAgICAgICAgIG9uIG9wZXJhdGl2byA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZU51bGxhYmxlKHBhcmFtcy5vcGVyYXRpdm9fb3JpZ2VuKX07XHJcbiAgICAgICAgICAgIGA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzcWwgPSBgc2V0IHNlYXJjaF9wYXRoID0gXCIke3BhcmFtcy5zY2hlbWFfbmFtZX1cIjtgICsgYFxcblxcbmBcclxuICAgICAgICAgICAgICAgICsgdGFibGVzLm1hcChxdWVyeSA9PiBidWlsZEluc2VydHMocXVlcnkpKS5qb2luKCdcXG5cXG4nKVxyXG4gICAgICAgICAgICAgICAgKyAnXFxuXFxuJyArIGluc2VydEFyZWFzXHJcbiAgICAgICAgICAgICAgICArICdcXG5cXG4nICsgaW5zZXJ0VGFyZWFzQXJlYXNcclxuICAgICAgICAgICAgICAgICsgJ1xcblxcbicgKyBpbnNlcnRUZW07XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc3FsO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfY2FwYV9hX3Byb2RfcGFzYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOiBbJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVuY19hdXRvZ2VuZXJhZG9fZG0gPSBlbmNfYXV0b2dlbmVyYWRvX2RtX2NhcGEsIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzLm9wZXJhdGl2bywgcGFyYW1ldGVycy5lbmNdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGBzZSBtb3Zpw7MgbGEgZW5jdWVzdGEgJHtwYXJhbWV0ZXJzLmVuY30gYSBwcm9kdWNjacOzbmA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5dOyJdfQ==
2062
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUFrWmIsb0RBaUNDO0lBL2FELGtDQUFrQztJQUNsQyxpREFBK0I7SUFLL0IseURBQTREO0lBRTVELCtDQUF3RDtJQUN4RCwyQkFBb0M7SUFFcEMsZ0RBQWdEO0lBR2hELHlEQUF3RDtJQUN4RCxxQ0FBZ0M7SUFFaEMsMkNBQWtEO0lBQ2xELDZDQUErQztJQUUvQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRXBDLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7SUFFN0IsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7SUFDbkMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFDdEMsTUFBTSx3QkFBd0IsR0FBRyxRQUFRLENBQUM7SUFDMUMsTUFBTSwyQkFBMkIsR0FBRyxXQUFXLENBQUM7SUFDaEQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBSTFCLElBQUksZUFBZ0MsQ0FBQztJQUNyQyxJQUFJLGNBQWMsR0FBRyxHQUFHLENBQUE7SUFFakIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQW9CLEVBQUUsRUFBRSxDQUN2RCxlQUFlLEdBQUcsR0FBRyxDQUFDO0lBRGIsUUFBQSxrQkFBa0Isc0JBQ0w7SUFFbkIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQzVDLGNBQWMsR0FBRyxHQUFHLENBQUM7SUFEWixRQUFBLGdCQUFnQixvQkFDSjtJQUV6QixJQUFB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QUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO3NCQUNyRCxNQUFNLEdBQUcsV0FBVztzQkFDcEIsTUFBTSxHQUFHLGlCQUFpQjtzQkFDMUIsTUFBTSxHQUFHLFNBQVMsQ0FBQztnQkFFekIsT0FBTyxHQUFHLENBQUM7WUFDZixDQUFDO1NBQ0o7UUFDRDtZQUNJLE1BQU0sRUFBRSw0QkFBNEI7WUFDcEMsVUFBVSxFQUFFO2dCQUNSLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUU7Z0JBQ2pFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO2FBQ3BDO1lBQ0QsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDO1lBQ2hCLFlBQVksRUFBRSxLQUFLLFdBQVcsT0FBeUIsRUFBRSxVQUEyRTtnQkFDaEksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2Qjs7O2dDQUdnQixFQUNoQixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUN6QyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUV4QixPQUFPLHdCQUF3QixVQUFVLENBQUMsR0FBRyxlQUFlLENBQUM7WUFDakUsQ0FBQztTQUNKO0tBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHsgUHJvY2VkdXJlRGVmLCBUYWJsZURlZmluaXRpb24sIENsaWVudCwgVGFibGVEZWZpbml0aW9ucyB9IGZyb20gXCIuL3R5cGVzLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBQcm9jZWR1cmVDb250ZXh0LCBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzLCBGb3JlaWduS2V5IH0gZnJvbSBcIm1ldGEtZW5jXCI7XHJcbmltcG9ydCAqIGFzIGxpa2VBciBmcm9tIFwibGlrZS1hclwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy1kbWVuY3VcIjtcclxuaW1wb3J0IHsgSWRVbmlkYWRBbmFsaXNpcywgVW5pZGFkQW5hbGlzaXMsIEVzdGFkb0FjY2lvbiwgSWRFbmMsIElkVGFyZWEsIFJlc3B1ZXN0YXNSYWl6LCBJZE9wZXJhdGl2bywgSWRDYXJnYSwgTW9kb0RNIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XHJcblxyXG5pbXBvcnQgeyBPcGVyYXRpdm9HZW5lcmF0b3IgfSBmcm9tIFwicHJvY2VzYW1pZW50b1wiO1xyXG5cclxuaW1wb3J0IHsganNvbiwganNvbm8sIFJlc3VsdFJvd3MgfSBmcm9tIFwicGctcHJvbWlzZS1zdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IGNoYW5naW5nLCBkYXRlLCBjb2FsZXNjZSB9IGZyb20gJ2Jlc3QtZ2xvYmFscyc7XHJcbmltcG9ydCB7IHByb21pc2VzIGFzIGZzIH0gZnJvbSBcImZzXCI7XHJcblxyXG5pbXBvcnQgKiBhcyBFeHByZXNpb25QYXJzZXIgZnJvbSAnZXhwcmUtcGFyc2VyJztcclxuaW1wb3J0IHsgdGFyZWFzIH0gZnJvbSBcIi4vdGFibGUtdGFyZWFzXCI7XHJcbmltcG9ydCB7IHByZXBlbmRMaXN0ZW5lciB9IGZyb20gXCJwcm9jZXNzXCI7XHJcbmltcG9ydCB7IGdldERpYXNBUGFzYXJRdWVyeSB9IGZyb20gXCIuL3RhYmxlLXRhcmVhc190ZW1cIjtcclxuaW1wb3J0IHsgZXJyb3IgfSBmcm9tIFwiY29uc29sZVwiO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSBcInZtXCI7XHJcbmltcG9ydCB7IGV4cGVjdGVkLCB1bmV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuaW1wb3J0IHsgZ2V0TW9kb0J5UG9saWN5IH0gZnJvbSBcIi4vYXBwLWRtZW5jdVwiO1xyXG5cclxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbnZhciBzcWxUb29scyA9IHJlcXVpcmUoJ3NxbC10b29scycpO1xyXG5cclxudmFyIGRpc2NyZXBhbmNlcyA9IHJlcXVpcmUoJ2Rpc2NyZXBhbmNlcycpO1xyXG5cclxuY29uc3QgZm9ybVByaW5jaXBhbCA9ICdGOkYxJztcclxuXHJcbmNvbnN0IEVTVEFET19QT1NURVJJT1JfQ0FSR0EgPSAnQyc7XHJcbmNvbnN0IEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0EgPSAnRCc7XHJcbmNvbnN0IE9QRVJBQ0lPTl9QUkVQQVJBUl9DQVJHQSA9ICdjYXJnYXInO1xyXG5jb25zdCBPUEVSQUNJT05fUFJFUEFSQVJfREVTQ0FSR0EgPSAnZGVzY2FyZ2FyJztcclxuY29uc3QgREVGQVVMVF9ET01JTklPID0gMztcclxuXHJcbmV4cG9ydCB0eXBlIGdlbmVyYXJJZEVuY0Z1biA9IChhcmVhOiBudW1iZXIsIGluZGV4OiBudW1iZXIpID0+IElkRW5jXHJcblxyXG52YXIgZ2VuZXJhcklkRW5jRnVuOiBnZW5lcmFySWRFbmNGdW47XHJcbnZhciBtYXhBRW5jUG9yQXJlYSA9IDk5OVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldEdlbmVyYXJJZEVuY0Z1biA9IChmdW46IGdlbmVyYXJJZEVuY0Z1bikgPT5cclxuICAgIGdlbmVyYXJJZEVuY0Z1biA9IGZ1bjtcclxuXHJcbmV4cG9ydCBjb25zdCBzZXRNYXhFbmNQb3JBcmVhID0gKG1heDogbnVtYmVyKSA9PlxyXG4gICAgbWF4QUVuY1BvckFyZWEgPSBtYXg7XHJcblxyXG5zZXRHZW5lcmFySWRFbmNGdW4oKGFyZWE6IG51bWJlciwgbnVtRW5jOiBudW1iZXIpID0+IGFyZWEudG9TdHJpbmcoKSArIG51bUVuYy50b1N0cmluZygpLnBhZFN0YXJ0KG1heEFFbmNQb3JBcmVhLnRvU3RyaW5nKCkubGVuZ3RoLCAnMCcpIGFzIHVua25vd24gYXMgSWRFbmMpO1xyXG5cclxuc2V0TWF4RW5jUG9yQXJlYSg5OTkpO1xyXG5cclxuYXN5bmMgZnVuY3Rpb24gZ2VuZXJhck51ZXZvSWRFbmMoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgYXJlYTogbnVtYmVyLCBtYXhBRW5jUG9yQXJlYTogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBzaWd1aWVudGVOdW1lcm9FbmN1ZXN0YSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgU0VMRUNUIG9idGVuZXJfc2lndWllbnRlX2NvbnRhZG9yX2FyZWEoJDEsJDIsJDMpIEFTIG5leHRfY291bnRlcjtcclxuICAgIGAsIFtvcGVyYXRpdm8sIGFyZWEsIG1heEFFbmNQb3JBcmVhXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgIHJldHVybiBnZW5lcmFySWRFbmNGdW4oYXJlYSwgc2lndWllbnRlTnVtZXJvRW5jdWVzdGEpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0T3BlcmF0aXZvQWN0dWFsID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQpID0+IHtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICB2YXIgb3BlcmF0aXZvID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGBzZWxlY3Qgb3BlcmF0aXZvXHJcbiAgICAgICAgICAgIGZyb20gcGFyYW1ldHJvc1xyXG4gICAgICAgICAgICB3aGVyZSB1bmljb19yZWdpc3Ryb2BcclxuICAgICAgICAsIFtdXHJcbiAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWVcclxuICAgIGlmIChvcGVyYXRpdm8pIHtcclxuICAgICAgICByZXR1cm4gb3BlcmF0aXZvXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdubyBzZSBjb25maWd1csOzIHVuIG9wZXJhdGl2byBlbiBsYSB0YWJsYSBwYXLDoW1ldHJvcycpO1xyXG4gICAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiBnZXREZWZhdWx0VGFyZWEoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bykge1xyXG4gICAgcmV0dXJuIChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgc2VsZWN0ICogXHJcbiAgICAgICAgICAgIGZyb20gdGFyZWFzIFxyXG4gICAgICAgICAgICB3aGVyZSBlc19pbmljaWFsIGFuZCBvcGVyYXRpdm8gPSAkMVxyXG4gICAgYCwgW29wZXJhdGl2b10pLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIE9QRVJBVElWTzogSWRPcGVyYXRpdm8sIGFyZWE6IG51bWJlciwgZW5jQXV0b2dlbmVyYWRvRG06IHN0cmluZywgdG9rZW46IHN0cmluZywgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCByZWNlcGNpb25pc3RhOiBzdHJpbmcsIGFzaWduYWRvOiBzdHJpbmcsIG1vZG9fZG06IE1vZG9ETSwgY2FtYmlhX21vZG9fZG06IGJvb2xlYW4pOiBQcm9taXNlPElkRW5jPiB7XHJcbiAgICBsZXQgaWRFbmMgPSBudWxsO1xyXG4gICAgdmFyIHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICBzZWxlY3QgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgIGZyb20gb3BlcmF0aXZvcyBcclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDFcclxuICAgIGAsIFtPUEVSQVRJVk9dKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgaWYgKHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhKSB7XHJcbiAgICAgICAgY29uc3QgYXV0b2dlbmVyYWRvRmllbGQgPSBtb2RvX2RtID09ICdwcm9kdWMnID8gJ2VuY19hdXRvZ2VuZXJhZG9fZG0nIDogJ2VuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSc7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0VXBkYXRlID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBVUERBVEUgdGVtIFxyXG4gICAgICAgICAgICAgICAgc2V0IChqc29uX2JhY2t1cCwganNvbl9lbmN1ZXN0YSwgZmVjaGFfYmFja3VwKSA9IFxyXG4gICAgICAgICAgICAgICAgICAgICgkNCwgJDUsIGN1cnJlbnRfdGltZXN0YW1wKVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgKG9wZXJhdGl2byA9ICQxIGFuZCAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChhdXRvZ2VuZXJhZG9GaWVsZCl9ID0gJDIgYW5kIHRva2VuX2F1dG9nZW5lcmFkb19kbSA9ICQzKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICBgLCBbT1BFUkFUSVZPLCBlbmNBdXRvZ2VuZXJhZG9EbSwgdG9rZW4sIHJlc3B1ZXN0YXNSYWl6LCByZXNwdWVzdGFzUmFpel0pLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAvLyBoYWdvIGluc2VydCBwb3JxdWUgbm8gZXhpc3RlIGVuIHRlbVxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRUYXJlYSA9IGF3YWl0IGdldERlZmF1bHRUYXJlYShjb250ZXh0LCBPUEVSQVRJVk8pO1xyXG4gICAgICAgIGlmIChyZXN1bHRVcGRhdGUucm93Q291bnQgPT0gMCkge1xyXG4gICAgICAgICAgICBpZEVuYyA9IGF3YWl0IGdlbmVyYXJOdWV2b0lkRW5jKGNvbnRleHQsIE9QRVJBVElWTywgYXJlYSwgbWF4QUVuY1BvckFyZWEpXHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIElOU0VSVCBpbnRvIHRlbSAoXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYyxcclxuICAgICAgICAgICAgICAgICAgICBhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGRvbWluaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFkYSxcclxuICAgICAgICAgICAgICAgICAgICAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudChhdXRvZ2VuZXJhZG9GaWVsZCl9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRva2VuX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgICAgICB0YXJlYV9hY3R1YWwsXHJcbiAgICAgICAgICAgICAgICAgICAganNvbl9iYWNrdXAsXHJcbiAgICAgICAgICAgICAgICAgICAganNvbl9lbmN1ZXN0YSwgXHJcbiAgICAgICAgICAgICAgICAgICAgZmVjaGFfYmFja3VwXHJcbiAgICAgICAgICAgICAgICApIFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcyAoJDEsICQyLCAkMywgJDQsICQ1LCAkNiwgJDcsICQ4LCAkOSwgJDEwLCBjdXJyZW50X3RpbWVzdGFtcClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICBgLCBbXHJcbiAgICAgICAgICAgICAgICBPUEVSQVRJVk8sXHJcbiAgICAgICAgICAgICAgICBpZEVuYyxcclxuICAgICAgICAgICAgICAgIGFyZWEsXHJcbiAgICAgICAgICAgICAgICBERUZBVUxUX0RPTUlOSU8sXHJcbiAgICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZW5jQXV0b2dlbmVyYWRvRG0sXHJcbiAgICAgICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgICAgIGRlZmF1bHRUYXJlYS50YXJlYSxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNSYWl6LFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgICAgIF0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWRFbmMgPSByZXN1bHRVcGRhdGUucm93LmVuY1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBnZW5lcmFyVGFyZWFzVGVtRmFsdGFudGVzKGNvbnRleHQsIE9QRVJBVElWTyk7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgc2V0IHJlY2VwY2lvbmlzdGEgPSAkNCwgYXNpZ25hZG8gPSAkNVxyXG4gICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICBgLCBbT1BFUkFUSVZPLCBpZEVuYywgZGVmYXVsdFRhcmVhLnRhcmVhLCByZWNlcGNpb25pc3RhLCBhc2lnbmFkb10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSAkNCwgZXN0YWRvID0gJDUsIG9wZXJhY2lvbiA9ICQ2XHJcbiAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgIGAsIFtPUEVSQVRJVk8sIGlkRW5jLCBkZWZhdWx0VGFyZWEudGFyZWEsIHRva2VuLCBFU1RBRE9fUE9TVEVSSU9SX0NBUkdBLCBjYW1iaWFfbW9kb19kbSA/IG51bGwgOiBPUEVSQUNJT05fUFJFUEFSQVJfQ0FSR0FdXHJcbiAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlkRW5jXHJcbn1cclxuXHJcbi8qZGVmaW5pY2nDs24gZGUgZXN0cnVjdHVyYSBjb21wbGV0YSwgY3VhbmRvIGV4aXN0YSBpbmctZW5jIGhheSBxdWUgcG9uZXJsbyBhaMOtKi9cclxudHlwZSBFc3RydWN0dXJhVGFibGEgPSB7IHRhYmxlTmFtZTogc3RyaW5nLCBwa0ZpZWxkczogeyBmaWVsZE5hbWU6IHN0cmluZyB9W10sIGNoaWxkVGFibGVzOiBFc3RydWN0dXJhVGFibGFbXSB9O1xyXG5mdW5jdGlvbiBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgdGFibGVOYW1lOiBzdHJpbmcpIHtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICB2YXIgbWFpblRhYmxlRGVmOiBUYWJsZURlZmluaXRpb24gPSBiZS50YWJsZVN0cnVjdHVyZXNbdGFibGVOYW1lXShjb250ZXh0KTtcclxuICAgIHZhciBnZXRQa0Zyb21UYWJsZURlZiA9IGZ1bmN0aW9uIGdldFBrRnJvbVRhYmxlRGVmKHRhYmxlRGVmOiBUYWJsZURlZmluaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gdGFibGVEZWYucHJpbWFyeUtleS5tYXAoZnVuY3Rpb24gKHBrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGZpZWxkTmFtZTogcGsgfTtcclxuICAgICAgICB9KVxyXG4gICAgfTtcclxuICAgIHZhciBnZXRGa0Zyb21UYWJsZURlZiA9IGZ1bmN0aW9uIGdldEZrRnJvbVRhYmxlRGVmKHRhYmxlRGVmOiBUYWJsZURlZmluaXRpb24sIHBhcmVudFRhYmxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IHBhcmVudEZrID0gKDxGb3JlaWduS2V5W10+dGFibGVEZWYuZm9yZWlnbktleXMpLmZpbmQoZmsgPT4gZmsucmVmZXJlbmNlcyA9PSBwYXJlbnRUYWJsZU5hbWUpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRGayA/IHBhcmVudEZrLmZpZWxkcyA6IFtdO1xyXG4gICAgfVxyXG4gICAgdmFyIHN0cnVjdDogRXN0cnVjdHVyYVRhYmxhID0ge1xyXG4gICAgICAgIHRhYmxlTmFtZTogbWFpblRhYmxlRGVmLm5hbWUsXHJcbiAgICAgICAgcGtGaWVsZHM6IGdldFBrRnJvbVRhYmxlRGVmKG1haW5UYWJsZURlZiksXHJcbiAgICAgICAgY2hpbGRUYWJsZXM6IFtdXHJcbiAgICB9O1xyXG4gICAgaWYgKG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMgJiYgbWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcy5sZW5ndGgpIHtcclxuICAgICAgICBtYWluVGFibGVEZWYuZGV0YWlsVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKGRldGFpbFRhYmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChkZXRhaWxUYWJsZS50YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgc3RydWN0LmNoaWxkVGFibGVzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0LCBkZXRhaWxUYWJsZS50YWJsZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmtGaWVsZHM6IGdldEZrRnJvbVRhYmxlRGVmKGJlLnRhYmxlU3RydWN0dXJlc1tkZXRhaWxUYWJsZS50YWJsZV0oY29udGV4dCksIHRhYmxlTmFtZSkgfVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cnVjdDtcclxufVxyXG4vKiBmaW4gZGVmaW5pY2lvbiBlc3RydWN0dXJhIGNvbXBsZXRhICovXHJcblxyXG50eXBlIEFueU9iamVjdCA9IHsgW2s6IHN0cmluZ106IGFueSB9XHJcblxyXG52YXIgZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8gPSAoZnVuUGFyYW1zOiB7IHRhcmVhOiBJZFRhcmVhLCByZXNwdWVzdGFzVUFQcmluY2lwYWw6IFJlc3B1ZXN0YXNSYWl6LCBzZXR0ZXJzOiBzdHJpbmdbXSwgcGFyYW1zOiBhbnlbXSB9KSA9PiB7XHJcbiAgICBsZXQgeyB0YXJlYSwgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLCBzZXR0ZXJzLCBwYXJhbXMgfSA9IGZ1blBhcmFtcztcclxuICAgIGxldCB7IHJlc3VtZW5Fc3RhZG9TdXAsIGNvZE5vUmVhU3VwLCBjb2RSZWFTdXAsIHJlc3VtZW5Fc3RhZG8sIGNvZE5vUmVhLCBjb2RSZWEgfSA9IHJlc3B1ZXN0YXNVQVByaW5jaXBhbDtcclxuICAgIHNldHRlcnMgPSBzZXR0ZXJzLmNvbmNhdChbXHJcbiAgICAgICAgYHJlc3VtZW5fZXN0YWRvJHt0YXJlYSA9PSAnc3VwZScgPyAnX3N1cCcgOiAnJ309JCR7cGFyYW1zLmxlbmd0aCArIDF9YCxcclxuICAgICAgICBgbm9yZWEke3RhcmVhID09ICdzdXBlJyA/ICdfc3VwJyA6ICcnfT0kJHtwYXJhbXMubGVuZ3RoICsgMn1gLFxyXG4gICAgICAgIGByZWEke3RhcmVhID09ICdzdXBlJyA/ICdfc3VwJyA6ICcnfT0kJHtwYXJhbXMubGVuZ3RoICsgM31gXHJcbiAgICBdKVxyXG4gICAgcGFyYW1zID0gcGFyYW1zLmNvbmNhdChbXHJcbiAgICAgICAgdGFyZWEgPT0gJ3N1cGUnID8gcmVzdW1lbkVzdGFkb1N1cCA6IHJlc3VtZW5Fc3RhZG8sXHJcbiAgICAgICAgdGFyZWEgPT0gJ3N1cGUnID8gY29kTm9SZWFTdXAgOiBjb2ROb1JlYSxcclxuICAgICAgICB0YXJlYSA9PSAnc3VwZScgPyBjb2RSZWFTdXAgOiBjb2RSZWFcclxuICAgIF0pO1xyXG4gICAgcmV0dXJuIHsgc2V0dGVycywgcGFyYW1zIH1cclxufVxyXG5cclxudmFyIGd1YXJkYXJFbmN1ZXN0YUVuVGVtID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkRW5jOiBJZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiBSZXNwdWVzdGFzUmFpeiwgdGFyZWE6IElkVGFyZWEpID0+IHtcclxuICAgIHZhciB7IHBhcmFtcywgc2V0dGVycyB9ID0gZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8oe1xyXG4gICAgICAgIHRhcmVhLFxyXG4gICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCxcclxuICAgICAgICBzZXR0ZXJzOiBbYGpzb25fZW5jdWVzdGEgPSAkM2AsIGBmZWNoYV9tb2RpZl9lbmN1ZXN0YSA9IGN1cnJlbnRfdGltZXN0YW1wYF0sXHJcbiAgICAgICAgcGFyYW1zOiBbb3BlcmF0aXZvLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsXVxyXG4gICAgfSlcclxuICAgIHJldHVybiBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICBzZXQgJHtzZXR0ZXJzLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgLFxyXG4gICAgICAgIHBhcmFtc1xyXG4gICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG59XHJcblxyXG52YXIgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3JpbyA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IElkRW5jLCB0YXJlYTogSWRUYXJlYSwganNvbl9lbmN1ZXN0YTogYW55KSA9PiB7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgY29uc3QgVUFfUFJJTkNJUEFMID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBvcGVyYXRpdm8pKS51bmlkYWRfYW5hbGlzaXM7XHJcbiAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlLmRtX2ZvcnBrcmFpel9kZXNjYXJnYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvcGVyYXRpdm86IG9wZXJhdGl2byxcclxuICAgICAgICAgICAgcGVyc2lzdGVudGVzOiB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgW1VBX1BSSU5DSVBBTF06IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2VuY106IGpzb25fZW5jdWVzdGFcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaW5mb3JtYWNpb25IZHI6IHtcclxuICAgICAgICAgICAgICAgICAgICBbZW5jXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIClcclxufVxyXG5cclxudmFyIGdldEhkclF1ZXJ5ID0gZnVuY3Rpb24gZ2V0SGRyUXVlcnkocXVvdGVkQ29uZFZpdjogc3RyaW5nLCBjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCB1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbDogSWRVbmlkYWRBbmFsaXNpcywgcGVybWl0ZUdlbmVyYXJNdWVzdHJhOiBib29sZWFuLCBpZHBlcjpzdHJpbmcpIHtcclxuICAgIHJldHVybiBgXHJcbiAgICB3aXRoICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX0gYXMgXHJcbiAgICAgICAgKHNlbGVjdCB0Lm9wZXJhdGl2bywgdC5lbmMsIHQuanNvbl9lbmN1ZXN0YSBhcyByZXNwdWVzdGFzLCB0LnJlc3VtZW5fZXN0YWRvIGFzIFwicmVzdW1lbkVzdGFkb1wiLCBcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ2RvbWluaW8nICAgICAgICwgZG9taW5pbyAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnbm9tY2FsbGUnICAgICAgLCBub21jYWxsZSAgICAgICxcclxuICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIHNlY3RvciAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2VkaWZpY2lvJyAgICAgICwgZWRpZmljaW8gICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZW50cmFkYScgICAgICAgLCBlbnRyYWRhICAgICAgICxcclxuICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG5yb2NhdGFzdHJhbCAgLFxyXG4gICAgICAgICAgICAgICAgJ3Bpc28nICAgICAgICAgICwgcGlzbyAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZGVwYXJ0YW1lbnRvJyAgLCBkZXBhcnRhbWVudG8gICxcclxuICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIGhhYml0YWNpb24gICAgLFxyXG4gICAgICAgICAgICAgICAgJ2Nhc2EnICAgICAgICAgICwgY2FzYSAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAncHJpb3JpZGFkJyAgICAgLCByZXNlcnZhKzEgICAgICxcclxuICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIHR0LmNhcmdhX29ic2VydmFjaW9uZXMgLFxyXG4gICAgICAgICAgICAgICAgJ2NpdGEnICAgICAgICAgICwgY2l0YSAsXHJcbiAgICAgICAgICAgICAgICAnY2FyZ2EnICAgICAgICAgLCB0LmFyZWEgICAgICAgICBcclxuICAgICAgICAgICAgKSBhcyB0ZW0sIHQuYXJlYSxcclxuICAgICAgICAgICAgLS1UT0RPOiBHRU5FUkFMSVpBUlxyXG4gICAgICAgICAgICBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAndGFyZWEnLCB0dC50YXJlYSxcclxuICAgICAgICAgICAgICAgICdmZWNoYV9hc2lnbmFjaW9uJywgZmVjaGFfYXNpZ25hY2lvbixcclxuICAgICAgICAgICAgICAgICdhc2lnbmFkbycsIGFzaWduYWRvLFxyXG4gICAgICAgICAgICAgICAgJ21haW5fZm9ybScsIG1haW5fZm9ybVxyXG4gICAgICAgICAgICApIGFzIHRhcmVhLFxyXG4gICAgICAgICAgICBtaW4oZmVjaGFfYXNpZ25hY2lvbikgYXMgZmVjaGFfYXNpZ25hY2lvblxyXG4gICAgICAgICAgICBmcm9tIHRlbSB0IGxlZnQgam9pbiB0YXJlYXNfdGVtIHR0IG9uICh0Lm9wZXJhdGl2byA9IHR0Lm9wZXJhdGl2byBhbmQgdC5lbmMgPSB0dC5lbmMgYW5kIHQudGFyZWFfYWN0dWFsID0gdHQudGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbGVmdCBqb2luIHRhcmVhcyB0YSBvbiB0LnRhcmVhX2FjdHVhbCA9IHRhLnRhcmVhXHJcbiAgICAgICAgICAgIHdoZXJlIHQuaGFiaWxpdGFkYSBhbmQgJHtxdW90ZWRDb25kVml2fVxyXG4gICAgICAgICAgICBncm91cCBieSB0Lm9wZXJhdGl2bywgdC5lbmMsIHQuanNvbl9lbmN1ZXN0YSwgdC5yZXN1bWVuX2VzdGFkbywgZG9taW5pbywgbm9tY2FsbGUsc2VjdG9yLGVkaWZpY2lvLCBlbnRyYWRhLCBucm9jYXRhc3RyYWwsIHBpc28sZGVwYXJ0YW1lbnRvLGhhYml0YWNpb24sY2FzYSxyZXNlcnZhLHR0LmNhcmdhX29ic2VydmFjaW9uZXMsIGNpdGEsIHQuYXJlYSwgdHQudGFyZWEsIGZlY2hhX2FzaWduYWNpb24sIGFzaWduYWRvLCBtYWluX2Zvcm1cclxuICAgICAgICApXHJcbiAgICAgICAgc2VsZWN0IGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwodW5pZGFkQW5hbGlzaXNQcmluY2lwYWwpfSwgJHtqc29ubyhcclxuICAgICAgICBgc2VsZWN0IGVuYywgcmVzcHVlc3RhcywganNvbmJfYnVpbGRfb2JqZWN0KCdyZXN1bWVuRXN0YWRvJyxcInJlc3VtZW5Fc3RhZG9cIikgYXMgb3RyYXMgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRBbmFsaXNpc1ByaW5jaXBhbCl9YCxcclxuICAgICAgICAnZW5jJyxcclxuICAgICAgICBgb3RyYXMgfHwgY29hbGVzY2UocmVzcHVlc3Rhcywne30nOjpqc29uYilgXHJcbiAgICApfVxyXG4gICAgICAgICAgICApIGFzIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICR7anNvbihgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgYS5hcmVhIGFzIGNhcmdhLCBvYnNlcnZhY2lvbmVzX2hkciBhcyBvYnNlcnZhY2lvbmVzLCBtaW4oZmVjaGFfYXNpZ25hY2lvbikgYXMgZmVjaGEsIHRhLnJlY2VwY2lvbmlzdGEsXHJcbiAgICAgICAgICAgICAgICAke3Blcm1pdGVHZW5lcmFyTXVlc3RyYSA/IGBjYXNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdGEuYXNpZ25hZG8gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKGlkcGVyKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICBlbmRgOiBgZmFsc2VgfSBhcyBwdWVkZV9hdXRvZ2VuZXJhclxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodW5pZGFkQW5hbGlzaXNQcmluY2lwYWwpfSBhdXggaW5uZXIgam9pbiBhcmVhcyBhIHVzaW5nIChvcGVyYXRpdm8sIGFyZWEpIGlubmVyIGpvaW4gdGFyZWFzX2FyZWFzIHRhIG9uIChhLmFyZWEgPSB0YS5hcmVhIGFuZCBhdXgudGFyZWEtPj4ndGFyZWEnID0gdGEudGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgYnkgYS5hcmVhLCBvYnNlcnZhY2lvbmVzX2hkciwgdGEucmVjZXBjaW9uaXN0YSwgcHVlZGVfYXV0b2dlbmVyYXJcclxuICAgICAgICAgICAgICAgICR7cGVybWl0ZUdlbmVyYXJNdWVzdHJhID8gYFxyXG4gICAgICAgICAgICAgICAgICAgIHVuaW9uIC0tIGVzdGUgdW5pb24gcGVybWl0ZSB2aXN1YWxpemFyIGFyZWFzIGFzaWduYWRhcyBzaW4gZW5jdWVzdGFzIGdlbmVyYWRhc1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCBhcmVhIGFzIGNhcmdhLCBudWxsIGFzIG9ic2VydmFjaW9uZXMsIG51bGwgYXMgZmVjaGEsIHJlY2VwY2lvbmlzdGEsIHRydWUgYXMgcHVlZGVfYXV0b2dlbmVyYXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfYXJlYXMgd2hlcmUgYXNpZ25hZG8gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKGlkcGVyKX0gYW5kIHRhcmVhID0gJ2VuY3UnYCA6ICcnfVxyXG4gICAgICAgICAgICAgICAgYCwgJ2ZlY2hhJyl9IGFzIGNhcmdhcyxcclxuICAgICAgICAgICAgJHtqc29ubyhcclxuICAgICAgICBgc2VsZWN0IGVuYywganNvbmJfYnVpbGRfb2JqZWN0KCd0ZW0nLCB0ZW0sICd0YXJlYScsIHRhcmVhKSBhcyBvdHJhcyBmcm9tICR7Y29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHVuaWRhZEFuYWxpc2lzUHJpbmNpcGFsKX1gLFxyXG4gICAgICAgICdlbmMnLFxyXG4gICAgICAgIGBvdHJhcyB8fCd7fSc6Ompzb25iYFxyXG4gICAgKX1cclxuICAgICAgICAgICAgYXMgXCJpbmZvcm1hY2lvbkhkclwiXHJcbmBcclxufVxyXG5cclxuZXhwb3J0IHZhciBzZXRIZHJRdWVyeSA9IChteUZ1bjogKHF1b3RlZENvbmRWaXY6IHN0cmluZywgY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgdW5pZGFkQW5hbGlzaXNQcmluY2lwYWw6IElkVW5pZGFkQW5hbGlzaXMsIHBlcm1pdGVHZW5lcmFyTXVlc3RyYTogYm9vbGVhbiwgaWRwZXI6IHN0cmluZykgPT4gc3RyaW5nKSA9PiBnZXRIZHJRdWVyeSA9IG15RnVuXHJcblxyXG5jb25zdCBnZXRVQVByaW5jaXBhbCA9IGFzeW5jIChjbGllbnQ6IENsaWVudCwgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bykgPT5cclxuICAgIChhd2FpdCBjbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHNlbGVjdCAqXHJcbiAgICAgICAgICAgIGZyb20gdW5pZGFkX2FuYWxpc2lzXHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIHByaW5jaXBhbFxyXG4gICAgICAgIGBcclxuICAgICAgICAsXHJcbiAgICAgICAgW29wZXJhdGl2b11cclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKSkucm93XHJcblxyXG52YXIgZnVuY2lvbmVzQ29ub2NpZGFzOiB7IFtrIGluIHN0cmluZ106IGJvb2xlYW4gfSA9IHt9XHJcblxyXG52YXIgY29tcGlsZXIgPSBuZXcgRXhwcmVzaW9uUGFyc2VyLkNvbXBpbGVyKHtcclxuICAgIGxhbmd1YWdlOiAnanMnLFxyXG4gICAgdmFyV3JhcHBlcjogKHZhcl9uYW1lOiBzdHJpbmcpID0+IGBoZWxwZXJzLm51bGwyemVybyh2YWxvcmVzLiR7dmFyX25hbWV9KWAsXHJcbiAgICBmdW5XcmFwcGVyOiAoZnVuY3Rpb25OYW1lOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAoIWZ1bmNpb25lc0Nvbm9jaWRhc1tmdW5jdGlvbk5hbWVdKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGZ1bmN0aW9uTmFtZSlcclxuICAgICAgICAgICAgZnVuY2lvbmVzQ29ub2NpZGFzW2Z1bmN0aW9uTmFtZV0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYGhlbHBlcnMuZnVucy4ke2Z1bmN0aW9uTmFtZX1gXHJcbiAgICB9XHJcbn0pXHJcblxyXG50eXBlIENhc2lsbGVyb0RlQWNhID0ge1xyXG4gICAgY2hpbGRzOiBDYXNpbGxlcm9EZUFjYVtdLFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIGV4cHJlc2lvbl9oYWJpbGl0YXI6IHN0cmluZ1xyXG4gICAgICAgIGV4cHJlc2lvbl9oYWJpbGl0YXJfanM6IHN0cmluZ1xyXG4gICAgICAgIGVzcGVjaWFsOiBhbnlcclxuICAgICAgICBleHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzOiBzdHJpbmdcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY29tcGlsYXJFeHByZXNpb24oZXhwcmVzaW9uOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBjb21waWxlci50b0NvZGUoRXhwcmVzaW9uUGFyc2VyLnBhcnNlKFxyXG4gICAgICAgIGV4cHJlc2lvblxyXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxiaXMgZGlzdGluY3QgZnJvbVxcYi9naSwgJyA8PiAnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvISEvZ2ksICcgJylcclxuICAgICkpLnJlcGxhY2UoL2hlbHBlcnNcXC5mdW5zXFwuYmxhbmNvXFwoaGVscGVycy5udWxsMnplcm9cXCgvZywgJ2hlbHBlcnMuZnVucy5ibGFuY28oKCcpXHJcbiAgICAgICAgLnJlcGxhY2UoL2hlbHBlcnNcXC5mdW5zXFwuaW5mb3JtYWRvXFwoaGVscGVycy5udWxsMnplcm9cXCgvZywgJ2hlbHBlcnMuZnVucy5pbmZvcm1hZG8oKCcpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb21waWxhckV4cHJlc2lvbmVzKGNhc2lsbGVybzogQ2FzaWxsZXJvRGVBY2EpIHtcclxuICAgIGlmICghY2FzaWxsZXJvKSB7IHJldHVybiB9XHJcbiAgICBpZiAoY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcikge1xyXG4gICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPSBjb21waWxhckV4cHJlc2lvbihjYXNpbGxlcm8uZGF0YS5leHByZXNpb25faGFiaWxpdGFyKTtcclxuICAgIH1cclxuICAgIGlmIChjYXNpbGxlcm8uZGF0YS5lc3BlY2lhbD8uYXV0b2luZykge1xyXG4gICAgICAgIHZhciBwYXJ0ZXMgPSBjYXNpbGxlcm8uZGF0YS5lc3BlY2lhbD8uYXV0b2luZy5zcGxpdCgnPT4nKTtcclxuICAgICAgICBpZiAocGFydGVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdmFyIHByZWNvbmRpY2lvbiA9IHBhcnRlc1swXTtcclxuICAgICAgICAgICAgdmFyIHZhbG9yID0gcGFydGVzLnNsaWNlKDEpLmpvaW4oJz0+Jyk7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMgPSBgKCR7Y29tcGlsYXJFeHByZXNpb24ocHJlY29uZGljaW9uKX0pPygke2NvbXBpbGFyRXhwcmVzaW9uKHZhbG9yKX0pOm51bGxgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMgPSBjb21waWxhckV4cHJlc2lvbihwYXJ0ZXNbMF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAodmFyIGNhc2lsbGVyb0ludGVybm8gb2YgY2FzaWxsZXJvLmNoaWxkcykgY29tcGlsYXJFeHByZXNpb25lcyhjYXNpbGxlcm9JbnRlcm5vKTtcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhckVuY3Vlc3RhVGVtID0gYXN5bmMgKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGlkRW5jOiBJZEVuYywgYXJlYTogbnVtYmVyLCBkb21pbmlvOiBudW1iZXIsIHRhcmVhX2FjdHVhbDogSWRUYXJlYSkgPT4ge1xyXG4gICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgIElOU0VSVCBpbnRvIHRlbSAob3BlcmF0aXZvLCBlbmMsIGFyZWEsIGRvbWluaW8sIGhhYmlsaXRhZGEsIHRhcmVhX2FjdHVhbCkgdmFsdWVzICgkMSwgJDIsICQzLCAkNCwgJDUsICQ2KWAsXHJcbiAgICAgICAgW29wZXJhdGl2bywgaWRFbmMsIGFyZWEsIGRvbWluaW8sIHRydWUsIHRhcmVhX2FjdHVhbF0pLmV4ZWN1dGUoKTtcclxufVxyXG5cclxuY29uc3QgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86IElkT3BlcmF0aXZvKSA9PiB7XHJcbiAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgaW5zZXJ0IGludG8gdGFyZWFzX3RlbSAob3BlcmF0aXZvLCBlbmMsIHRhcmVhKVxyXG4gICAgICAgICAgICBzZWxlY3QgdGEub3BlcmF0aXZvLCB0YS5lbmMsIHRhLnRhcmVhXHJcbiAgICAgICAgICAgIGZyb20gKHNlbGVjdCB0YS4qLCB0LmVuYyx0LmFyZWEgZnJvbSB0YXJlYXMgdGEsIHRlbSB0IHdoZXJlIHRhLm9wZXJhdGl2bz10Lm9wZXJhdGl2bykgdGEgXHJcbiAgICAgICAgICAgIHdoZXJlIHRhLm9wZXJhdGl2byA9ICQxIFxyXG4gICAgICAgICAgICAgICAgYW5kIG5vdCAodGEub3BlcmF0aXZvLCB0YS5lbmMsIHRhLnRhcmVhKSBpbiAoc2VsZWN0IG9wZXJhdGl2bywgZW5jLCB0YXJlYSBmcm9tIHRhcmVhc190ZW0pXHJcbiAgICAgICAgICAgIG9yZGVyIGJ5IDEsMywyO1xyXG4gICAgYCwgW29wZXJhdGl2b10pLmV4ZWN1dGUoKTtcclxufVxyXG5cclxuY29uc3QgYnVzY2FyRW5jdWVzdGFFblRlbSA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8YW55PikgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihgTm8gc2UgZW5jb250csOzIGxhIGVuY3Vlc3RhICR7cGFyYW1zLmVuY30gcGFyYSBlbCBvcGVyYXRpdm8gJHtwYXJhbXMub3BlcmF0aXZvfS4gJHtleHBlY3RlZChlcnIpLm1lc3NhZ2V9YClcclxuICAgIH1cclxuICAgIHJldHVybiB7IGNhc29UZW06IHJlc3VsdC5yb3cgfTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhc2FyRW5jdWVzdGFzQVByb2llKGNsaWVudDogQ2xpZW50KSB7XHJcbiAgICBsZXQgcGFyYW1ldHJvcyA9IChhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICogZnJvbSBwYXJhbWV0cm9zIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYCxcclxuICAgICAgICBbXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgdmFyIHNlbGVjdCA9IGBzZWxlY3QgdC5vcGVyYXRpdm8sIHQuZW5jLCB0LnRhcmVhX2FjdHVhbCwgdHQudHNfZW50cmFkYVxyXG4gICAgICAgIGZyb20gdGFyZWFzX3RlbSB0dCBqb2luIHRlbSB0IHVzaW5nIChvcGVyYXRpdm8sZW5jKVxyXG4gICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2bz0kMSBhbmQgdHQudGFyZWE9ICQyIGFuZCAoJHtnZXREaWFzQVBhc2FyUXVlcnkoJ3R0Jyl9IDw9IDAgb3IgY29hbGVzY2UodHQuYWRlbGFudGFyLGZhbHNlKSkgYW5kIHR0LnRhcmVhID0gdC50YXJlYV9hY3R1YWxcclxuICAgIGA7XHJcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIFVQREFURSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnVidcclxuICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdHQuZW5jID0gYXV4LmVuYyBhbmQgdHQudGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYycsICdmaW5jJ10pXHJcbiAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAvL1RPRE8gYXNpZ25hciBlbiBwcm9jZXNhbWllbnRvXHJcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIFVQREFURSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdHQuZW5jID0gYXV4LmVuYyBhbmQgdHQudGFyZWEgPSAkM1xyXG4gICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYycsICdwcm9jJ10pXHJcbiAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICBhd2FpdCBjbGllbnQucXVlcnkoYFxyXG4gICAgICAgIHVwZGF0ZSB0ZW0gdFxyXG4gICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJ3Byb2MnXHJcbiAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgIHdoZXJlIHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdC5lbmMgPSBhdXguZW5jXHJcbiAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJ10pLmZldGNoQWxsKCk7XHJcbiAgICByZXR1cm4gJ29rJztcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFByb2NlZHVyZXNEbUVuY3U6IFByb2NlZHVyZURlZltdID0gW1xyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ29wZXJhdGl2b19lc3RydWN0dXJhX2NvbXBsZXRhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZHBlcl9sb2d1ZWFkb190YWJsZXQnLCB0eXBlTmFtZTogJ3RleHQnLCBkZWZhdWx0VmFsdWU6bnVsbCB9LFxyXG5cclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOidkZXNwbGVnYXJGb3JtdWxhcmlvJyxcclxuICAgICAgICB1bmxvZ2dlZDogdHJ1ZSwgXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBpZHBlcl9sb2d1ZWFkb190YWJsZXQ6IHN0cmluZ3xudWxsfT4pe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGNhc2lsbGVyb3NfamVyYXJxdWl6YWRvcygkMSkgYXMgZm9ybXVsYXJpb3MsIFxyXG4gICAgICAgICAgICAgICAgICAgICR7anNvbm8oYHNlbGVjdCB1bmlkYWRfYW5hbGlzaXMsIHBhZHJlLCBwa19hZ3JlZ2FkYSwgJ3t9Jzo6anNvbmIgYXMgaGlqYXMgZnJvbSB1bmlkYWRfYW5hbGlzaXMgd2hlcmUgb3BlcmF0aXZvID0gJDJgLCAndW5pZGFkX2FuYWxpc2lzJyl9IGFzIHVuaWRhZGVzX2FuYWxpc2lzXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvLCBwYXJhbWV0ZXJzLm9wZXJhdGl2b11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBsaWtlQXIocmVzdWx0LnJvdy5mb3JtdWxhcmlvcykuZm9yRWFjaChmID0+IGNvbXBpbGFyRXhwcmVzaW9uZXMoZikpO1xyXG4gICAgICAgICAgICAvLyBIZXJtYW5vcyBzb24gbG9zIGZvcm11bGFyaW9zIHF1ZSBlc3TDoW4gaW1wbGFudGFkb3MgZW4gb3RybyBmb3JtdWxhcmlvIGRlIGxhIG1pc21hIFVBLiBQb3IgZWplbXBsbyBlbCBBMSBlbiBlbCBTMVxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0SGVybWFub3MgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbnNlbGVjdCBvLmlkX2Nhc2lsbGVybyBhcyBpZF9mb3JtdWxhcmlvLCBvLnVuaWRhZF9hbmFsaXNpcywgJ0JGXyd8fG8uY2FzaWxsZXJvIGJvdG9uLCBiZi5jYXNpbGxlcm8sIGJmLnBhZHJlLCBmcC5jYXNpbGxlcm8sIGZwLnVuaWRhZF9hbmFsaXNpc1xyXG4gIGZyb20gY2FzaWxsZXJvcyBvIGxlZnQgam9pbiBjYXNpbGxlcm9zIGJmXHJcbiAgICBvbiBiZi50aXBvYz0nQkYnXHJcblx0YW5kIGJmLmNhc2lsbGVybyA9ICdCRl8nfHxvLmNhc2lsbGVyb1xyXG5cdGFuZCBiZi5vcGVyYXRpdm8gPSBvLm9wZXJhdGl2b1xyXG5cdGxlZnQgam9pbiBjYXNpbGxlcm9zIGZwXHJcblx0ICBvbiBmcC5pZF9jYXNpbGxlcm8gPSBiZi5wYWRyZVxyXG5cdCAgYW5kIGZwLm9wZXJhdGl2byA9IGJmLm9wZXJhdGl2b1xyXG4gIHdoZXJlIG8udGlwb2MgPSAnRidcclxuICAgIGFuZCBvLnVuaWRhZF9hbmFsaXNpcyA9IGZwLnVuaWRhZF9hbmFsaXNpc1xyXG5cdGFuZCBvLm9wZXJhdGl2byA9ICQxYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzLm9wZXJhdGl2b11cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICByZXN1bHRIZXJtYW5vcy5yb3dzLmZvckVhY2gocm93ID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5yb3cuZm9ybXVsYXJpb3Nbcm93LmlkX2Zvcm11bGFyaW9dLmRhdGEuaGVybWFubyA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRhclVBKHVhOiBVbmlkYWRBbmFsaXNpcywgaWRVYTogSWRVbmlkYWRBbmFsaXNpcywgdUFzOiB7IFtrIGluIElkVW5pZGFkQW5hbGlzaXNdOiBVbmlkYWRBbmFsaXNpcyB9KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodWEucGFkcmUpIHtcclxuICAgICAgICAgICAgICAgICAgICB1QXNbdWEucGFkcmVdLmhpamFzW2lkVWFdID0gdWE7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHVhLnByaW5jaXBhbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGlrZUFyKHJlc3VsdC5yb3cudW5pZGFkZXNfYW5hbGlzaXMpLmZvckVhY2goKHVhLCBpZFVhKSA9PlxyXG4gICAgICAgICAgICAgICAgY29tcGxldGFyVUEodWEsIGlkVWEgYXMgSWRVbmlkYWRBbmFsaXNpcywgcmVzdWx0LnJvdy51bmlkYWRlc19hbmFsaXNpcylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB2YXIge1xyXG4gICAgICAgICAgICAgICAgY29uX3JlYV9ob2dhcjogY29uUmVhSG9nYXIsXHJcbiAgICAgICAgICAgICAgICBjb25maWdfc29ydGVvOiBjb25maWdTb3J0ZW8sXHJcbiAgICAgICAgICAgICAgICBoYWJpbGl0YWNpb25fYm90b25fZm9ybXVsYXJpbzogaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICB9ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBjb25maWdfc29ydGVvLCBjb25fcmVhX2hvZ2FyLCBoYWJpbGl0YWNpb25fYm90b25fZm9ybXVsYXJpbywgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbWV0ZXJzLm9wZXJhdGl2b10pLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgICAgICAgICAgbGV0IGNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyA9IChleHByZXNpb25lc0RvbWluaW86IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIGxpa2VBcihleHByZXNpb25lc0RvbWluaW8pXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoZXhwciwgZG9taW5pbykgPT4gKHsgZG9taW5pbywgZXhwcjogY29tcGlsYXJFeHByZXNpb24oZXhwci5leHByKSB9KSlcclxuICAgICAgICAgICAgICAgICAgICAucGxhaW4oKTtcclxuICAgICAgICAgICAgaWYgKGNvbmZpZ1NvcnRlbykge1xyXG4gICAgICAgICAgICAgICAgbGlrZUFyKGNvbmZpZ1NvcnRlbykuZm9yRWFjaCgoY29uZmlnU29ydGVvRm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZXhwcl9pbmNvbXBsZXRpdHVkX2pzID0gY29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZXhwcl9pbmNvbXBsZXRpdHVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZmlsdHJvX2pzID0gY29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZmlsdHJvKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKSB7XHJcbiAgICAgICAgICAgICAgICBsaWtlQXIoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKS5mb3JFYWNoKChmb3JtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybS5leHByX2hhYmlsaXRhcl9ib3Rvbl9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uKGZvcm0uZXhwcl9oYWJpbGl0YXJfYm90b24pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBkZWZhdWx0VGFyZWEgPSBhd2FpdCBnZXREZWZhdWx0VGFyZWEoY29udGV4dCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICB2YXIgZGVmYXVsdEluZm9ybWFjaW9uSGRyID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCAgXHJcbiAgICAgICAgICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICdkb21pbmlvJyAgICAgICAsICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoREVGQVVMVF9ET01JTklPKX0sXHJcbiAgICAgICAgICAgICAgICAgICAgJ25vbWNhbGxlJyAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NlY3RvcicgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2VkaWZpY2lvJyAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2VudHJhZGEnICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ25yb2NhdGFzdHJhbCcgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3Bpc28nICAgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2RlcGFydGFtZW50bycgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2hhYml0YWNpb24nICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2Nhc2EnICAgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3ByaW9yaWRhZCcgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ29ic2VydmFjaW9uZXMnICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2NpdGEnICAgICAgICAgICwgbnVsbCAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2NhcmdhJyAgICAgICAgICwgbnVsbCAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgKSBhcyB0ZW0sXHJcbiAgICAgICAgICAgICAgICBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAgICAgJ3RhcmVhJywgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChkZWZhdWx0VGFyZWEudGFyZWEpfSxcclxuICAgICAgICAgICAgICAgICAgICAnZmVjaGFfYXNpZ25hY2lvbicsIG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgJ2FzaWduYWRvJywgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChwYXJhbWV0ZXJzLmlkcGVyX2xvZ3VlYWRvX3RhYmxldCB8fCBjb250ZXh0LnVzZXIuaWRwZXIpfSxcclxuICAgICAgICAgICAgICAgICAgICAnbWFpbl9mb3JtJywgJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChkZWZhdWx0VGFyZWEubWFpbl9mb3JtKX1cclxuICAgICAgICAgICAgICAgICkgYXMgdGFyZWFcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbWV0ZXJzLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOiBiZS5jYWNoZXMudGltZXN0YW1wRXN0cnVjdHVyYSxcclxuICAgICAgICAgICAgICAgIC4uLnJlc3VsdC5yb3csXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgY29uUmVhSG9nYXIsXHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW8sXHJcbiAgICAgICAgICAgICAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICBub1JlYXM6IGJlLmNhY2hlcy50YWJsZUNvbnRlbnQubm9fcmVhLFxyXG4gICAgICAgICAgICAgICAgbm9SZWFzU3VwOiBiZS5jYWNoZXMudGFibGVDb250ZW50Lm5vX3JlYV9zdXAsXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0SW5mb3JtYWNpb25IZHIsXHJcbiAgICAgICAgICAgICAgICB1YVBwYWw6IHVuaWRhZF9hbmFsaXNpcyxcclxuICAgICAgICAgICAgICAgIHBrQWdyZWdhZGFVYVBwYWw6IHBrX2FncmVnYWRhXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdnZW5lcmFyX2Zvcm11bGFyaW9zJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2FubmlvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogJ2FubmlvJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdtZXMnLCB0eXBlTmFtZTogJ2ludGVnZXInLCByZWZlcmVuY2VzOiAnbWVzJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdsb3RlJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogJ2xvdGVzJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHthbm5pbzpudW1iZXIsIG1lczpudW1iZXIsIGxvdGU6bnVtYmVyfT4pe1xyXG4gICAgICAgICAgICB2YXIgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0VUEgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgZnJvbSB1bmlkYWRfYW5hbGlzaXNcclxuICAgICAgICAgICAgICAgICAgIHdoZXJlIHByaW5jaXBhbCA9IHRydWUgYW5kIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW09QRVJBVElWT11cclxuICAgICAgICAgICAgKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRVQS5yb3dDb3VudCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzZSBjb25maWd1csOzIHVuYSB1bmlkYWQgZGUgYW5hbGlzaXMgY29tbyBwcmluY2lwYWwnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcm93ID0gcmVzdWx0VUEucm93O1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0UHJlZ3VudGFzID0gYXdhaXQgYmUucHJvY2VkdXJlLnByZWd1bnRhc191YV90cmFlci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcm93KVxyXG4gICAgICAgICAgICB2YXIgY29udGVuZWRvclZhY2lvOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICAgICAgICAgIHJlc3VsdFByZWd1bnRhcy5mb3JFYWNoKGZ1bmN0aW9uIChkZWZQcmVndW50YTphbnkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpb1tkZWZQcmVndW50YS52YXJfbmFtZV0gPSBkZWZQcmVndW50YS51bmlkYWRfYW5hbGlzaXMgPyBbXSA6IG51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8uYW5uaW8gPSBwYXJhbWV0ZXJzLmFubmlvO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8ubWVzID0gcGFyYW1ldGVycy5tZXM7XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5sb3RlID0gcGFyYW1ldGVycy5sb3RlO1xyXG5cclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBkZWJlX2hhYmVyLmlkX2Nhc28sIHMgYXMgaWRcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgbG90ZSwgYXJtYXJfaWQoYW5uaW8sIG1lcywgbG90ZSwgcykgYXMgaWRfY2Fzbywgc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgYW5uaW8sbWVzLGxvdGUsIGNhbnRfY3VlcyBmcm9tIGxvdGVzIHdoZXJlIChhbm5pbyxtZXMsbG90ZSk9KCQyLCQzLCQ0KSkgciwgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJpZXMoMSxjYW50X2N1ZXMpIHNcclxuICAgICAgICAgICAgICAgICAgICApIGRlYmVfaGFiZXIgbGVmdCBqb2luIGRlZmdlbiBoYXkgb24gaGF5LmlkX2Nhc28gPSBkZWJlX2hhYmVyLmlkX2Nhc28gYW5kIGhheS5vcGVyYXRpdm89JDFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBoYXkuaWRfY2FzbyBpcyBudWxsYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIHBhcmFtZXRlcnMuYW5uaW8sIHBhcmFtZXRlcnMubWVzLCBwYXJhbWV0ZXJzLmxvdGVdXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHsgb3BlcmF0aXZvOiBPUEVSQVRJVk8gfTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAocmVzdWx0LnJvd0NvdW50IHx8IDApOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmcocGFyYW1zLCB7IGlkX2Nhc286IHJlc3VsdC5yb3dzW2ldLmlkX2Nhc28sIGRhdG9zX2Nhc286IGNoYW5naW5nKGNvbnRlbmVkb3JWYWNpbywgeyBpZDogcmVzdWx0LnJvd3NbaV0uaWQgfSkgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyBhZ3JlZ2FkYXM6IHJlc3VsdC5yb3dDb3VudCB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICd1cGxvYWRfZmlsZScsXHJcbiAgICAgICAgcHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZF9hZGp1bnRvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdub21icmUnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBmaWxlczp7Y291bnQ6MX0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtpZF9hZGp1bnRvPzpudW1iZXIsIG5vbWJyZT86c3RyaW5nfT4sIGZpbGVzKXtcclxuICAgICAgICAgICAgbGV0IGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGxldCBjbGllbnQ9Y29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaW5mb3JtUHJvZ3Jlc3Moe21lc3NhZ2U6YmUubWVzc2FnZXMuZmlsZVVwbG9hZGVkfSk7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBleGlzdGVcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBmaWxlc1swXVxyXG4gICAgICAgICAgICBsZXQgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGUucGF0aCkuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxGaWxlbmFtZSA9IGZpbGUub3JpZ2luYWxGaWxlbmFtZS5zbGljZSgwLCAtKGV4dC5sZW5ndGggKyAxKSk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlbmFtZSA9IHBhcmFtZXRlcnMubm9tYnJlIHx8IG9yaWdpbmFsRmlsZW5hbWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdQYXRoID0gJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJztcclxuICAgICAgICAgICAgdmFyIGNyZWF0ZVJlc3BvbnNlID0gZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoYWRqdW50b1JvdzphbnkpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0xhIHN1YmlkYSBzZSByZWFsaXrDsyBjb3JyZWN0YW1lbnRlICh1cGRhdGUpJyxcclxuICAgICAgICAgICAgICAgICAgICBub21icmU6IGFkanVudG9Sb3cubm9tYnJlLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vbWJyZV9vcmlnaW5hbDogYWRqdW50b1Jvdy5ub21icmVfb3JpZ2luYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0OiBhZGp1bnRvUm93LmV4dCxcclxuICAgICAgICAgICAgICAgICAgICBmZWNoYTogYWRqdW50b1Jvdy5mZWNoYSxcclxuICAgICAgICAgICAgICAgICAgICBob3JhOiBhZGp1bnRvUm93LmhvcmEsXHJcbiAgICAgICAgICAgICAgICAgICAgaWRfYWRqdW50bzogYWRqdW50b1Jvdy5pZF9hZGp1bnRvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHZhciBtb3ZlRmlsZSA9IGZ1bmN0aW9uIG1vdmVGaWxlKGZpbGUsIGlkX2FkanVudG8sIGV4dGVuc2lvbikge1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICBmcy5tb3ZlKGZpbGUucGF0aCwgbmV3UGF0aCArIGlkX2FkanVudG8gKyAnLicgKyBleHRlbnNpb24sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmlkX2FkanVudG8pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYHVwZGF0ZSBhZGp1bnRvcyBzZXQgbm9tYnJlPSAkMSxub21icmVfb3JpZ2luYWwgPSAkMiwgZXh0ID0gJDMsIHJ1dGEgPSBjb25jYXQoJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJywkNDo6dGV4dCwnLicsJDM6OnRleHQpLCBmZWNoYSA9IG5vdygpLCBob3JhID0gZGF0ZV90cnVuYygnc2Vjb25kcycsY3VycmVudF90aW1lc3RhbXAtY3VycmVudF9kYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBpZF9hZGp1bnRvID0gJDQgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZW5hbWUsIG9yaWdpbmFsRmlsZW5hbWUsIGV4dCwgcGFyYW1ldGVycy5pZF9hZGp1bnRvXVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbnNlKHJlc3VsdC5yb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0YWRvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUsIHJlc3VsdGFkby5pZF9hZGp1bnRvLCByZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkb1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYGluc2VydCBpbnRvIGFkanVudG9zIChub21icmUsIG5vbWJyZV9vcmlnaW5hbCwgZXh0LCBmZWNoYSwgaG9yYSkgdmFsdWVzICgkMSwkMiwkMyxub3coKSwgZGF0ZV90cnVuYygnc2Vjb25kcycsY3VycmVudF90aW1lc3RhbXAtY3VycmVudF9kYXRlKSkgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZW5hbWUsIG9yaWdpbmFsRmlsZW5hbWUsIGV4dF1cclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgdXBkYXRlIGFkanVudG9zIHNldCBydXRhID0gY29uY2F0KCdsb2NhbC1hdHRhY2htZW50cy9maWxlLScsaWRfYWRqdW50bzo6dGV4dCwnLicsZXh0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaWRfYWRqdW50byA9ICQxIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQucm93LmlkX2FkanVudG9dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZXNwb25zZShyZXN1bHQucm93KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHRhZG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUsIHJlc3VsdGFkby5pZF9hZGp1bnRvLCByZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX2d1YXJkYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogJ29wZXJhdGl2b3MnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2lkX2Nhc28nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2RhdG9zX2Nhc28nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICAvL0B0cy1pZ25vcmUgZXNwZWNpZmljbyBlbCB0aXBvIGRlIGxvcyBwYXLDoW1ldHJvc1xyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IHtcclxuICAgICAgICAgICAgb3BlcmF0aXZvOiBJZE9wZXJhdGl2byxcclxuICAgICAgICAgICAgaWRfY2Fzbzogc3RyaW5nLFxyXG4gICAgICAgICAgICBkYXRvc19jYXNvOiBBbnlPYmplY3RcclxuICAgICAgICB9LCBuZXdDbGllbnQ6IENsaWVudCkge1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIHBhcmFtZXRlcnMub3BlcmF0aXZvKSk7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnQgPSBuZXdDbGllbnQgfHwgY29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIHZhciBkYXRvc19qc29uID0gcGFyYW1ldGVycy5kYXRvc19jYXNvO1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgdGFibGVTdHJ1Y3R1cmVzX2FwcDogVGFibGVEZWZpbml0aW9ucyA9IGJlLnRhYmxlU3RydWN0dXJlcztcclxuXHJcbiAgICAgICAgICAgIHZhciBzdHJ1Y3RfZG1lbmN1ID0gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIHVuaWRhZF9hbmFsaXNpcyk7XHJcbiAgICAgICAgICAgIGRhdG9zX2pzb25bJ29wZXJhdGl2byddID0gcGFyYW1ldGVycy5vcGVyYXRpdm87XHJcblxyXG4gICAgICAgICAgICBkYXRvc19qc29uW3BrX2FncmVnYWRhXSA9IHBhcmFtZXRlcnMuaWRfY2FzbztcclxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGFyX3VsdF9wa19lbl9hcnIodWx0X3BrOmFueSwgdWFfYXJyOmFueVtdKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29uX3BrX2NvbXBsZXRhID0gdWFfYXJyO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVhX2FyciAmJiB1YV9hcnIubGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25fcGtfY29tcGxldGEgPSBjb25fcGtfY29tcGxldGEubWFwKCh1bmFfdWEsIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5hX3VhW3VsdF9wa10gPSBpICsgMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5hX3VhO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbl9wa19jb21wbGV0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZGF0b3NqOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleU5hbWUgaW4gZGF0b3NqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdG9LID0gZGF0b3NqW2tleU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRvSyBpbnN0YW5jZW9mIEFycmF5ICYmIGRhdG9LLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwayA9IHRhYmxlU3RydWN0dXJlc19hcHBba2V5TmFtZV0oY29udGV4dCkucHJpbWFyeUtleTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVsdF9wayA9IHBrW3BrLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRvSyA9IGNvbXBsZXRhcl91bHRfcGtfZW5fYXJyKHVsdF9waywgZGF0b0spO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRvSy5mb3JFYWNoKChlbGVtSTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtSSA9IHJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZWxlbUkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleU5hbWUuc3RhcnRzV2l0aCgnJCcpIHx8IGtleU5hbWUuc3RhcnRzV2l0aCgnXycpIHx8IGtleU5hbWUgPT0gJ251bGwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9zajtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRvc19qc29uID0gcmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhkYXRvc19qc29uKTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkbztcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhU3VwO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYVN1cDtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkb1N1cDtcclxuXHJcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRvc19qc29uKS5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcXVlcmllcyA9IHNxbFRvb2xzLnN0cnVjdHVyZWREYXRhLnNxbFdyaXRlKGRhdG9zX2pzb24sIHN0cnVjdF9kbWVuY3UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJpZXMucmVkdWNlKGZ1bmN0aW9uIChwcm9taXNlOiBQcm9taXNlPGFueT4sIHF1ZXJ5OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsaWVudC5xdWVyeShxdWVyeSkuZXhlY3V0ZSgpLnRoZW4oZnVuY3Rpb24gKF9yZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKS50aGVuKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJva1wiO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycjogRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiY2Fzb19ndWFyZGFyIEVOVFJBIEVOIEVMIENBVENIOiBcIiwgZXhwZWN0ZWQoZXJyKSlcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZhY2lvJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY2Fzb190cmFlcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICAvL3tuYW1lOidmb3JtdWxhcmlvJyAgICAsICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnaWRfY2FzbycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnZ29Ub0VuYycsXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRfY2Fzbzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgdmFyIGNsaWVudCA9IGNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICB2YXIgc3RydWN0X2RtZW5jdSA9IGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0LCB1bmlkYWRfYW5hbGlzaXMpO1xyXG4gICAgICAgICAgICB2YXIgc3FsID0gc3FsVG9vbHMuc3RydWN0dXJlZERhdGEuc3FsUmVhZCh7IG9wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sIFtwa19hZ3JlZ2FkYV06IHBhcmFtZXRlcnMuaWRfY2FzbyB9LCBzdHJ1Y3RfZG1lbmN1KTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeShzcWwpLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IHBhcmFtZXRlcnMuaWRfY2FzbyxcclxuICAgICAgICAgICAgICAgIGRhdG9zX2Nhc286IHJlc3VsdC52YWx1ZSxcclxuICAgICAgICAgICAgICAgIC8vZm9ybXVsYXJpbzogZm9ybVByaW5jaXBhbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY2Fzb190cmFlcl9vX2NyZWFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZF9jYXNvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdnb1RvRW5jJyxcclxuICAgICAgICAvLyBiaXRhY29yYTp7YWx3YXlzOnRydWV9LFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7b3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgaWRfY2Fzbzogc3RyaW5nfT4pe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb190cmFlciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIganNvbiA9IGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19wcmVwYXJhciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb19ndWFyZGFyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIGNoYW5naW5nKHBhcmFtZXRlcnMsIHsgZGF0b3NfY2FzbzoganNvbiB9KSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3RyYWVyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdwYXNhcl9qc29uMnVhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pil7XHJcbiAgICAgICAgICAgIC8qIEdFTkVSQUxJWkFSOiAqL1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICAvKiBGSU4tR0VORVJBTElaQVI6ICovXHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIHsgdW5pZGFkX2FuYWxpc2lzLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgU0VMRUNUICogZnJvbSAke2JlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gTElNSVQgMWApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIGlmICgocmVzdWx0TWFpbi5yb3dDb3VudCB8fCAwKSA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdIQVkgREFUT1MnLCByZXN1bHRNYWluLnJvd3MpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hBWSBEQVRPUy4gTk8gU0UgUFVFREUgSU5JQ0lBUiBFTCBQQVNBSkUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcmVzdWx0SnNvbiA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYFNFTEVDVCBvcGVyYXRpdm8sIGVuYyBpZF9jYXNvLCBqc29uX2VuY3Vlc3RhIGRhdG9zX2Nhc28gZnJvbSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgV0hFUkUgb3BlcmF0aXZvPSQxIGFuZCByZXN1bWVuX2VzdGFkbyBpcyBkaXN0aW5jdCBmcm9tICd2YWNpbycgYW5kIGpzb25fZW5jdWVzdGEgaXMgbm90IG51bGwgXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgZW5jIGAsXHJcbiAgICAgICAgICAgICAgICBbT1BFUkFUSVZPXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuICAgICAgICAgICAgaWYgKHByb2NlZHVyZUd1YXJkYXIuZGVmaW5lZEluICE9ICdkbWVuY3UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hheSBxdWUgc29icmVlc2NyaWJpciBjYXNvX2d1YXJkYXInKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVzdWx0SnNvbi5yb3dzLm1hcChhc3luYyBmdW5jdGlvbiAocm93KSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0YWRvID0gYGlkIGNhc28gJHtyb3cuaWRfY2Fzb306IGA7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLmluVHJhbnNhY3Rpb24obnVsbCwgYXN5bmMgZnVuY3Rpb24gKF9jbGllbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvICs9IGF3YWl0IHByb2NlZHVyZUd1YXJkYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHJvdyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2UgPSByZXN1bHRhZG8gKyBcImpzb24ydWEgZXJyb3IuIFwiICsgZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBlcnJNZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNZXNzYWdlLCBlcnJvcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRhZG8uaW5jbHVkZXMoJ29rJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeyBkYXRvc19jYXNvLCBpZF9jYXNvLCBvcGVyYXRpdm8gfSA9IGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX3RyYWVyLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7IG9wZXJhdGl2bzogcm93Lm9wZXJhdGl2bywgaWRfY2Fzbzogcm93LmlkX2Nhc28gfSlcclxuICAgICAgICAgICAgICAgICAgICB2YXIgdmVyUXVlR3JhYm8gPSB7IGRhdG9zX2Nhc28sIGlkX2Nhc28sIG9wZXJhdGl2byB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3JlcGFuY2VzLnNob3dBbmRUaHJvdyh2ZXJRdWVHcmFibywgcm93KVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHZlclF1ZUdyYWJvLCByb3csIGV4cGVjdGVkKGVycikpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkbztcclxuICAgICAgICAgICAgfSkpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fZm9ycGtyYWl6X2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3BrX3JhaXpfdmFsdWUnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJ0YXJlYXNcIiB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e29wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHBrX3JhaXpfdmFsdWU6IHN0cmluZywgdGFyZWE6IHN0cmluZ30+KXtcclxuICAgICAgICAgICAgY29uc3QgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgY29uc3Qge29wZXJhdGl2byxwa19yYWl6X3ZhbHVlLCB0YXJlYX0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICBjb25zdCB7cGVybWl0ZV9ib3JyYXJfdWE6IHRhcmVhUGVybWl0ZUJvcnJhclVBLCBtYWluX2Zvcm19ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBwZXJtaXRlX2JvcnJhcl91YSwgbWFpbl9mb3JtIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIHRhcmVhPSQyXHJcbiAgICAgICAgICAgIGAsIFtvcGVyYXRpdm8sIHRhcmVhXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgICAgICAgICBjb25zdCB7dW5pZGFkX2FuYWxpc2lzfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1ldGVycy5vcGVyYXRpdm8pKTtcclxuICAgICAgICAgICAgY29uc3QgY29uZHZpdj0gYCB0Lm9wZXJhdGl2bz0gJDEgYW5kIHQuZW5jID0kMmA7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzdWFyaW9QdWVkZVByb2Nlc2FyRW5jdWVzdGFzID0gY29udGV4dC5wdWVkZT8uZW5jdWVzdGFzPy5wcm9jZXNhciB8fCBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3Qgc29sb0xlY3R1cmEgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGNvdW50KCopXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIGpvaW4gdGVtIHVzaW5nKG9wZXJhdGl2bywgZW5jKSBqb2luIGVzdGFkb3MgdXNpbmcgKG9wZXJhdGl2bywgZXN0YWRvKSAtLXBrIGVzdGFkbyB5IHRlbSB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ2Fkb19kbSBpcyBub3QgbnVsbCBvciBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBlcm1pdGVfZWRpdGFyX2VuY3Vlc3RhIGFuZCBhc2lnbmFkbyA8PiAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKGNvbnRleHQudXNlci5pZHBlcil9IG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhID0gdGFyZWFfYWN0dWFsIGFuZCB0YXJlYV9hY3R1YWwgPSAncHJvYycgYW5kICQzIG9yIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSA9IHRhcmVhX2FjdHVhbCBhbmQgdGFyZWFfYWN0dWFsID0gJ3Byb2MnIGFuZCBlc3RhZG8gPSAnVidcclxuICAgICAgICAgICAgKWAsIFtvcGVyYXRpdm8sIHBrX3JhaXpfdmFsdWUsICF1c3VhcmlvUHVlZGVQcm9jZXNhckVuY3Vlc3Rhc10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWUgPiAwO1xyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDFcclxuICAgICAgICAgICAgYCwgW29wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIHZhciB7IHJvdyB9ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoZ2V0SGRyUXVlcnkoY29uZHZpdiwgY29udGV4dCwgdW5pZGFkX2FuYWxpc2lzLCBwZXJtaXRlR2VuZXJhck11ZXN0cmEsIGNvbnRleHQudXNlci5pZHBlciksIFtvcGVyYXRpdm8sIHBrX3JhaXpfdmFsdWVdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByb3cuaW5mb3JtYWNpb25IZHJbcGtfcmFpel92YWx1ZV0udGFyZWEgPSB7XHJcbiAgICAgICAgICAgICAgICB0YXJlYSxcclxuICAgICAgICAgICAgICAgIG1haW5fZm9ybVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4ucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmEsXHJcbiAgICAgICAgICAgICAgICBpZHBlcjogY29udGV4dC51c2VyLmlkcGVyLFxyXG4gICAgICAgICAgICAgICAgY2FyZ2FzOiBsaWtlQXIuY3JlYXRlSW5kZXgocm93LmNhcmdhcy5tYXAoKGNhcmdhOiBhbnkpID0+ICh7IC4uLmNhcmdhLCBmZWNoYTogY2FyZ2EuZmVjaGEgPyBkYXRlLmlzbyhjYXJnYS5mZWNoYSkudG9EbXkoKSA6IG51bGwgfSkpLCAnY2FyZ2EnKSxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcEVzdHJ1Y3R1cmE6IGJlLmNhY2hlcy50aW1lc3RhbXBFc3RydWN0dXJhLFxyXG4gICAgICAgICAgICAgICAgcGVybWl0ZUJvcnJhckVsZW1lbnRvc1VBOiAhISh0YXJlYVBlcm1pdGVCb3JyYXJVQSAmJiBnZXRNb2RvQnlQb2xpY3koYmUpID09PSAnR0FCSU5FVEUnICYmIGNvbnRleHQucHVlZGU/LmVuY3Vlc3Rhcz8uYm9ycmFyX3VhKVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZG1fZm9ycGtyYWl6X2Rlc2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3BlcnNpc3RlbnRlcycsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgcGVyc2lzdGVudGVzOiBBbnlPYmplY3QgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXMgfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgb3BlcmF0aXZvKSkudW5pZGFkX2FuYWxpc2lzO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsaWtlQXIocGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSkubWFwKGFzeW5jIChyZXNwdWVzdGFzVUFQcmluY2lwYWw6IGFueSwgaWRFbmM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNVQVByaW5jaXBhbC5zMWExX29icyA9PSAnIXBydWViYSBkZSBlcnJvciBhbCBncmFiYXIhJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRElPIFBSVUVCQSBERSBFUlJPUiBBTCBHUkFCQVInKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIG9wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50YXJlYS50YXJlYSk7XHJcbiAgICAgICAgICAgICAgICAvL2d1YXJkYXIgcGFyYWxlbGFtZW50ZSBlbiB0YWJsYXMgdWFcclxuICAgICAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgZW5jICR7aWRFbmN9OiBgO1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtX2d1YXJkYXIgPSB7IG9wZXJhdGl2bzogb3BlcmF0aXZvLCBpZF9jYXNvOiBpZEVuYywgZGF0b3NfY2FzbzogcmVzcHVlc3Rhc1VBUHJpbmNpcGFsIH1cclxuICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5pblRyYW5zYWN0aW9uKG51bGwsIGFzeW5jIGZ1bmN0aW9uIChfY2xpZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyArPSBhd2FpdCBwcm9jZWR1cmVHdWFyZGFyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbV9ndWFyZGFyKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICBlcnJNZXNzYWdlID0gcmVzdWx0YWRvICsgXCJkbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyLiBcIiArIGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvID0gZXJyTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyTWVzc2FnZSwgZXJyb3IpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgcGFzZV90YWJsYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGlkRW5jLCByZXN1bHRhZG9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcblxyXG4gICAgICAgICAgICB9KS5hcnJheSgpKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvaydcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX3NpbmNyb25pemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3BlcnNpc3RlbnRlcycsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ21vZG9fZG0nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NhbWJpYV9tb2RvX2RtJywgdHlwZU5hbWU6ICdib29sZWFuJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdpZHBlcl9sb2d1ZWFkb190YWJsZXQnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHtwZXJzaXN0ZW50ZXM6IEFueU9iamVjdCwgbW9kb19kbTogc3RyaW5nLCBjYW1iaWFfbW9kb19kbTogYm9vbGVhbiwgaWRwZXJfbG9ndWVhZG9fdGFibGV0OiBzdHJpbmd9Pil7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHsgcGVyc2lzdGVudGVzLCBtb2RvX2RtLCBjYW1iaWFfbW9kb19kbSwgaWRwZXJfbG9ndWVhZG9fdGFibGV0IH0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VybmFtZUxvZ3VlYWRvVGFibGV0ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBzZWxlY3QgdXN1YXJpbyBmcm9tIHVzdWFyaW9zIHdoZXJlIGlkcGVyID0gJDFgLCBbaWRwZXJfbG9ndWVhZG9fdGFibGV0XSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTsgXHJcbiAgICAgICAgICAgIHZhciB0b2tlbjogc3RyaW5nID0gcGVyc2lzdGVudGVzPy50b2tlbiB8fCAoYXdhaXQgYmUucHJvY2VkdXJlLnRva2VuX2dldC5jb3JlRnVuY3Rpb24oY29udGV4dCwge1xyXG4gICAgICAgICAgICAgICAgdXNlcmFnZW50OiBjb250ZXh0LnNlc3Npb24ucmVxLnVzZXJhZ2VudCxcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZUxvZ3VlYWRvVGFibGV0XHJcbiAgICAgICAgICAgIH0pKS50b2tlbjtcclxuICAgICAgICAgICAgY29uc3QgbnVtX3NpbmNybyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBJTlNFUlQgSU5UTyBzaW5jcm9uaXphY2lvbmVzICh0b2tlbiwgdXN1YXJpbywgZGF0b3MpXHJcbiAgICAgICAgICAgICAgICAgICAgVkFMVUVTICgkMSwkMiwkMykgXHJcbiAgICAgICAgICAgICAgICAgICAgUkVUVVJOSU5HIHNpbmNyb1xyXG4gICAgICAgICAgICAgICAgYCwgW3Rva2VuLCB1c2VybmFtZUxvZ3VlYWRvVGFibGV0LCBwZXJzaXN0ZW50ZXNdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgdmFyIGNvbmR2aXYgPSBgXHJcbiAgICAgICAgICAgICAgICB0dC5vcGVyYXRpdm89ICQxIFxyXG4gICAgICAgICAgICAgICAgYW5kIGFzaWduYWRvID0gJDJcclxuICAgICAgICAgICAgICAgIGFuZCB0dC5vcGVyYWNpb249J2NhcmdhcicgXHJcbiAgICAgICAgICAgICAgICBhbmQgKHR0LmNhcmdhZG9fZG0gaXMgbnVsbCBvciB0dC5jYXJnYWRvX2RtID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbCh0b2tlbil9KVxyXG4gICAgICAgICAgICBgO1xyXG4gICAgICAgICAgICBjb25zdCB7IHVuaWRhZF9hbmFsaXNpczogVUFfUFJJTkNJUEFMLCBwa19hZ3JlZ2FkYSB9ID0gKGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBPUEVSQVRJVk8pKTtcclxuICAgICAgICAgICAgaWYgKHBlcnNpc3RlbnRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWRFbmMgaW4gcGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwdWVzdGFzVUFQcmluY2lwYWwgPSBwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdW2lkRW5jXTtcclxuICAgICAgICAgICAgICAgICAgICAvL1RPRE8gQUwgUEFSRUNFUiBFU1TDgSBSRVNVRUxUTywgTE8gREVKTyBQT1IgTEFTIERVREFTXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlc3B1ZXN0YXNVQVByaW5jaXBhbCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2FyZ2EgPSBwZXJzaXN0ZW50ZXMuY2FyZ2FzW3BlcnNpc3RlbnRlcy5pbmZvcm1hY2lvbkhkcltpZEVuY10udGVtLmNhcmdhXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmVhID0gcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50YXJlYS50YXJlYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZ2FUYXJlYXNBcmVhcyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBzZWxlY3QgcmVjZXBjaW9uaXN0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX2FyZWFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgdGFyZWEgPSAkMiBhbmQgYXJlYSA9ICQzIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIHRhcmVhLCBjYXJnYS5jYXJnYV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhcmdhVGFyZWFzQXJlYXMgJiYgIWNhcmdhLnJlY2VwY2lvbmlzdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBubyBzZSBkZWZpbmnDsyB1biByZWNlcGNpb25pc3RhIHBhcmEgZWwgb3BlcmF0aXZvICR7T1BFUkFUSVZPfSwgdGFyZWEgJHt0YXJlYX0sIMOhcmVhICR7Y2FyZ2EuY2FyZ2F9LCBwb3IgZmF2b3IgY29tdW5pcXVlc8OpIGNvbiBHQUJJTkVURSBwYXJhIHF1ZSBjYXJndWVuIHVuIHJlY2VwY2lvbmlzdGFgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIoaWRFbmMpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRFbmMgPSBhd2FpdCBwZXJzaXN0aXJFbmN1ZXN0YUF1dG9nZW5lcmFkYUVuRE0oY29udGV4dCwgT1BFUkFUSVZPLCBjYXJnYS5jYXJnYSwgaWRFbmMsIHRva2VuLCByZXNwdWVzdGFzVUFQcmluY2lwYWwsIGNhcmdhLnJlY2VwY2lvbmlzdGEgfHwgY2FyZ2FUYXJlYXNBcmVhcywgcGVyc2lzdGVudGVzLmlkcGVyLCBtb2RvX2RtIGFzIE1vZG9ETSwgY2FtYmlhX21vZG9fZG0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdWVkb0d1YXJkYXJFblRFTSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB7IHBhcmFtcywgc2V0dGVycyB9ID0gZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGVzdGFkbyA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQSl9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgY2FyZ2Fkb19kbT1udWxsYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogW09QRVJBVElWTywgaWRFbmMsIHRhcmVhLCB0b2tlbl1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbWJpYV9tb2RvX2RtIHx8IHBlcnNpc3RlbnRlcy5pZHBlciAhPSBpZHBlcl9sb2d1ZWFkb190YWJsZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlcnMucHVzaChgb3BlcmFjaW9uID0gJ2Rlc2NhcmdhcidgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVlcnlUYXJlYXNUZW0gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzIGFuZCBjYXJnYWRvX2RtID0gJDRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHVlZG9HdWFyZGFyRW5URU0gPSBxdWVyeVRhcmVhc1RlbS5yb3dDb3VudCA9PSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHVlZG9HdWFyZGFyRW5URU0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIE9QRVJBVElWTywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgdGFyZWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ndWFyZGFyIHBhcmFsZWxhbWVudGUgZW4gdGFibGFzIHVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvY2VkdXJlR3VhcmRhciA9IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0YWRvID0gYGlkIGVuYyAke2lkRW5jfTogYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbV9ndWFyZGFyID0geyBvcGVyYXRpdm86IE9QRVJBVElWTywgaWRfY2FzbzogaWRFbmMsIGRhdG9zX2Nhc286IHJlc3B1ZXN0YXNVQVByaW5jaXBhbCB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyTWVzc2FnZTogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUuaW5UcmFuc2FjdGlvbihudWxsLCBhc3luYyBmdW5jdGlvbiAoX2NsaWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1fZ3VhcmRhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGV4cGVjdGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyTWVzc2FnZSA9IHJlc3VsdGFkbyArIFwiZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhci4gXCIgKyBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyck1lc3NhZ2UsIGVycm9yKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHBhc2VfdGFibGE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT1BFUkFUSVZPLCBpZEVuYywgcmVzdWx0YWRvXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZSgnbG9jYWwtcmVjaWJpZG8tc2luLXRva2VuLnR4dCcsIEpTT04uc3RyaW5naWZ5KHsgbm93OiBuZXcgRGF0ZSgpLCBpZHBlcjogcGVyc2lzdGVudGVzLmlkcGVyLCBpZENhc286IGlkRW5jLCBbcGtfYWdyZWdhZGFdOiByZXNwdWVzdGFzVUFQcmluY2lwYWwgfSkgKyAnXFxuXFxuJywgJ3V0ZjgnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgcGVybWl0ZUdlbmVyYXJNdWVzdHJhID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDFcclxuICAgICAgICAgICAgYCwgW09QRVJBVElWT10pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIHZhciB7IHJvdyB9ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoZ2V0SGRyUXVlcnkoY29uZHZpdiwgY29udGV4dCwgVUFfUFJJTkNJUEFMLCBwZXJtaXRlR2VuZXJhck11ZXN0cmEsIGlkcGVyX2xvZ3VlYWRvX3RhYmxldCksIFtPUEVSQVRJVk8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldF0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0ICBlc3RhZG8gPSAkNCwgY2FyZ2Fkb19kbT0kMzo6dGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlICR7Y29uZHZpdn0gXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nIGVuY2BcclxuICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIGlkcGVyX2xvZ3VlYWRvX3RhYmxldCwgdG9rZW4sIEVTVEFET19QT1NURVJJT1JfQ0FSR0FdXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIC4uLnJvdyxcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogT1BFUkFUSVZPLFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmE6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdG9rZW4sXHJcbiAgICAgICAgICAgICAgICBudW1fc2luY3JvLFxyXG4gICAgICAgICAgICAgICAgaWRwZXI6IGlkcGVyX2xvZ3VlYWRvX3RhYmxldCxcclxuICAgICAgICAgICAgICAgIGNhcmdhczogbGlrZUFyLmNyZWF0ZUluZGV4KHJvdy5jYXJnYXMubWFwKGNhcmdhID0+ICh7IC4uLmNhcmdhLCBmZWNoYTogY2FyZ2EuZmVjaGEgPyBkYXRlLmlzbyhjYXJnYS5mZWNoYSkudG9EbXkoKSA6IG51bGwsIGVzdGFkb19jYXJnYTogJ3JlbGV2YW1pZW50bycgfSkpLCAnY2FyZ2EnKVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX2JhY2t1cCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICd0b2tlbicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGVtJywgdHlwZU5hbWU6ICdqc29uYicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnbW9kb19kbScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOiB0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyB0b2tlbjogc3RyaW5nIHwgbnVsbCwgdGVtOiBBbnlPYmplY3QsIG1vZG9fZG06IE1vZG9ETSB9Pikge1xyXG4gICAgICAgICAgICB2YXIgeyBiZSwgY2xpZW50IH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciBudW1fc2luY3JvOiBudW1iZXIgPSAwO1xyXG4gICAgICAgICAgICB2YXIgdG9rZW46IHN0cmluZyB8IG51bGwgPSBwYXJhbWV0ZXJzLnRva2VuO1xyXG4gICAgICAgICAgICBpZiAodG9rZW4gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgb2s6ICdvazpOL1QnIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeyByb3dDb3VudCB9ID0gYXdhaXQgY2xpZW50LnF1ZXJ5KGBzZWxlY3QgMSBmcm9tIHRva2VucyB3aGVyZSB0b2tlbiA9ICQxYCwgW3Rva2VuXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyb3dDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9rOiAnb2s6Ti9UJyB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgT1BFUkFUSVZPKSk7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLnRlbSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYmFja3VwIG9mIGxpa2VBcihwYXJhbWV0ZXJzLnRlbSkuYXJyYXkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcmVhID0gYmFja3VwLmNhcmdhLmNhcmdhO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwdWVzdGFzUmFpeiA9IGJhY2t1cC5yZXNwdWVzdGFzUmFpejtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRFbmNETSA9IGJhY2t1cC5mb3JQa1JhaXpbcGtfYWdyZWdhZGFdLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlY2VwY2lvbmlzdGEgPSBiYWNrdXAuY2FyZ2EucmVjZXBjaW9uaXN0YTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXNpZ25hZG8gPSBiYWNrdXAuaWRwZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlcihpZEVuY0RNKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGVyc2lzdGlyRW5jdWVzdGFBdXRvZ2VuZXJhZGFFbkRNKGNvbnRleHQsIE9QRVJBVElWTywgYXJlYSwgaWRFbmNETSwgdG9rZW4sIHJlc3B1ZXN0YXNSYWl6LCByZWNlcGNpb25pc3RhLCBhc2lnbmFkbywgcGFyYW1ldGVycy5tb2RvX2RtLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQganNvbl9iYWNrdXAgPSAkMywgZmVjaGFfYmFja3VwID0gY3VycmVudF90aW1lc3RhbXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQganNvbl9iYWNrdXAgaXMgZGlzdGluY3QgZnJvbSAkNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW09QRVJBVElWTywgaWRFbmNETSwgcmVzcHVlc3Rhc1JhaXosIHJlc3B1ZXN0YXNSYWl6XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBvazogJ29rJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY29uc2lzdGlyX3ZpdmllbmRhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHJlZmVyZW5jZXM6ICdvcGVyYXRpdm9zJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYXNvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGNhc286IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgeyBiZSwgY2xpZW50IH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1fcHJvYyA9IHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBpZF9jYXNvOiBwYXJhbWV0ZXJzLmNhc29cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZXJyTWVzc2FnZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRhZG86IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0YWRvID0gYXdhaXQgYmUucHJvY2VkdXJlLmNvbnNpc3Rpcl9lbmN1ZXN0YS5jb3JlRnVuY3Rpb24oY29udGV4dCxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbV9wcm9jXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IHVuZXhwZWN0ZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UgPSBcIiBjb25zaXN0aXJfY2Fzby4gXCIgKyBlcnJvci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJNZXNzYWdlLCBlcnJvcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnKioqKioqIGNvbnNpc3Rpcl9jYXNvIHJlc3VsdGFkbzonLCByZXN1bHRhZG8pXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBvazogJ29rJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX3Jlc2NhdGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2xvY2FsU3RvcmFnZUl0ZW0nLCB0eXBlTmFtZTogJ2pzb25iJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdsb2NhbFN0b3JhZ2VJdGVtS2V5JywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgbG9jYWxTdG9yYWdlSXRlbUtleTogc3RyaW5nLCBsb2NhbFN0b3JhZ2VJdGVtOiBBbnlPYmplY3QgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHsgbG9jYWxTdG9yYWdlSXRlbUtleSwgbG9jYWxTdG9yYWdlSXRlbSB9ID0gcGFyYW1zO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG9jYWxTdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKCdsb2NhbC1yZXNjYXRlLnR4dCcsIEpTT04uc3RyaW5naWZ5KHsgbm93OiBuZXcgRGF0ZSgpLCB1c2VyOiBjb250ZXh0LnVzZXJuYW1lLCBpdGVtS2V5OiBsb2NhbFN0b3JhZ2VJdGVtS2V5LCBpdGVtRGF0YTogbG9jYWxTdG9yYWdlSXRlbSB9KSArICdcXG5cXG4nLCAndXRmOCcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRVJST1InLCBleHBlY3RlZChlcnIpKTtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnb3BlcmF0aXZvX2dldCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXSxcclxuICAgICAgICB1bmxvZ2dlZDp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KXtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZ2V0X3JhbmRvbV9mcmVlX2Nhc2UnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFt7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH1dLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8gfT4pIHtcclxuICAgICAgICAgICAgY29uc3QgbWluc1RvRXhwaXJlID0gMzA7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbnNTaW5jZUJsb3F1ZWQgPSBgZGF0ZV9wYXJ0KCdtaW4nLCBhZ2UoY3VycmVudF90aW1lc3RhbXAsIGZlY2hhX2Jsb3F1ZW8pKWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuYyA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBzZWxlY3QgZW5jIGZyb20gdGVtIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKGxpYnJlIG9yICR7bWluc1NpbmNlQmxvcXVlZH0gPiAke21pbnNUb0V4cGlyZX0pIGxpbWl0IDE7YCwgW3BhcmFtcy5vcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVZhbHVlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBVUERBVEUgdGVtIHNldCBsaWJyZSA9IGZhbHNlLCBmZWNoYV9ibG9xdWVvPWN1cnJlbnRfdGltZXN0YW1wIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyYCwgW3BhcmFtcy5vcGVyYXRpdm8sIGVuYy52YWx1ZV0pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGVuYy52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ211ZXN0cmFfZ2VuZXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdhcmVhJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgcmVmZXJlbmNlczogXCJhcmVhc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2RvbWluaW8nLCB0eXBlTmFtZTogJ2ludGVnZXInLCBkZWZhdWx0VmFsdWU6IDMgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FudF9lbmN1ZXN0YXMnLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhX2FjdHVhbCcsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6ICd0YXJlYXMnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBhcmVhOiBudW1iZXIsIGRvbWluaW86IG51bWJlciwgY2FudF9lbmN1ZXN0YXM6IG51bWJlciwgdGFyZWFfYWN0dWFsOiBJZFRhcmVhIH0+KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pdGVHZW5lcmFyTXVlc3RyYSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsQWN0dWFsID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGBzZWxlY3QgY291bnQoKikgYXMgdG90YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgYXJlYSA9ICQyYCxcclxuICAgICAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmFyZWFdXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHBhcmFtcy5jYW50X2VuY3Vlc3RhcyAtIHRvdGFsQWN0dWFsOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmMgPSBhd2FpdCBnZW5lcmFyTnVldm9JZEVuYyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuYXJlYSwgbWF4QUVuY1BvckFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2VuZXJhckVuY3Vlc3RhVGVtKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8sIGVuYywgcGFyYW1zLmFyZWEsIHBhcmFtcy5kb21pbmlvLCBwYXJhbXMudGFyZWFfYWN0dWFsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiZWwgb3BlcmF0aXZvIG5vIHBlcm1pdGUgZ2VuZXJhciBtdWVzdHJhXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdtdWVzdHJhX2FncmVnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnYXJlYScsIHR5cGVOYW1lOiAnaW50ZWdlcicsIHJlZmVyZW5jZXM6IFwiYXJlYXNcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdkb21pbmlvJywgdHlwZU5hbWU6ICdpbnRlZ2VyJywgZGVmYXVsdFZhbHVlOiAzIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NhbnRfZW5jdWVzdGFzJywgdHlwZU5hbWU6ICdpbnRlZ2VyJyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYV9hY3R1YWwnLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAndGFyZWFzJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgYXJlYTogbnVtYmVyLCBkb21pbmlvOiBudW1iZXIsIGNhbnRfZW5jdWVzdGFzOiBudW1iZXIsIHRhcmVhX2FjdHVhbDogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVHZW5lcmFyTXVlc3RyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pdGVHZW5lcmFyTXVlc3RyYSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gcGFyYW1zLmNhbnRfZW5jdWVzdGFzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmMgPSBhd2FpdCBnZW5lcmFyTnVldm9JZEVuYyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuYXJlYSwgbWF4QUVuY1BvckFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ2VuZXJhckVuY3Vlc3RhVGVtKGNvbnRleHQsIHBhcmFtcy5vcGVyYXRpdm8sIGVuYywgcGFyYW1zLmFyZWEsIHBhcmFtcy5kb21pbmlvLCBwYXJhbXMudGFyZWFfYWN0dWFsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXJUYXJlYXNUZW1GYWx0YW50ZXMoY29udGV4dCwgcGFyYW1zLm9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKFwiZWwgb3BlcmF0aXZvIG5vIHBlcm1pdGUgZ2VuZXJhciBtdWVzdHJhXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ibGFucXVlYXJfcHJldmlzdWFsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnY29vcl9jYW1wbycsICdhZG1pbiddLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnbW9zdHJhcl9lbmN1ZXN0YV9hX2JsYW5xdWVhcl9jb250ZW5pZG8nLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBidXNjYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ibGFucXVlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ3N1YmNvb3JfY2FtcG8nLCAnY29vcl9jYW1wbycsICdhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSAke2JlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAke2JlLmRiLnF1b3RlSWRlbnQocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgIC8vcGFzbyBhIGVuY3UgcGFyYSBndWFyZGFyIGVuIGhpc3RvcmlhbFxyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYV9hY3R1YWwgPSAnZW5jdSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgZ2VuZXJhclRhcmVhc1RlbUZhbHRhbnRlcyhjb250ZXh0LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgLy9yZXNldGVvIHRlbSAobm8gc2UgZ3VhcmRhIGhpc3RvcmlhbCBwb3JxdWUgdGFyZWFfYWN0dWFsIGVzIG51bGwpXHJcbiAgICAgICAgICAgIC8vZ3VhcmRvIGJhY2t1cCBwb3IgbGFzIGR1ZGFzXHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25fYmFja3VwID0ganNvbl9lbmN1ZXN0YSwganNvbl9lbmN1ZXN0YSA9IG51bGwsIHRhcmVhX2FjdHVhbCA9IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlY2hhX21vZGlmX2VuY3Vlc3RhID0gbnVsbCwgZmVjaGFfYmFja3VwID0gY3VycmVudF90aW1lc3RhbXAsIG1vZGlmaWNhZG8gPSBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVuX2VzdGFkbyA9IG51bGwsIHJlc3VtZW5fZXN0YWRvX3N1cCA9IG51bGwsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzZV90YWJsYSA9IG51bGwsIHJlYSA9IG51bGwsIG5vcmVhID0gbnVsbCwgcmVhX3N1cCA9IG51bGwsIG5vcmVhX3N1cCA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgLS1wayB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBkZWxldGUgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgJHtiZS5kYi5xdW90ZUlkZW50KHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gaW5fY29uX3ZhclxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBwa19pbnRlZ3JhZGEtPj4ke2JlLmRiLnF1b3RlTGl0ZXJhbChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIGluY29uc2lzdGVuY2lhc191bHRpbWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIHBrX2ludGVncmFkYS0+PiR7YmUuZGIucXVvdGVMaXRlcmFsKHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGBsYSBlbmN1ZXN0YSAke3BhcmFtcy5lbmN9IHNlIGJsYW5xdWXDsyBjb3JyZWN0YW1lbnRlYDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2JvcnJhcl9wcmV2aXN1YWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJvbGVzOlsnY29vcl9wcm9jJywnc3ViY29vcl9jYW1wbycsJ2Nvb3JfY2FtcG8nLCdhZG1pbiddLFxyXG4gICAgICAgIHJlc3VsdE9rOidtb3N0cmFyX2VuY3Vlc3RhX2FfYm9ycmFyJyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7b3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmd9Pil7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBidXNjYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQscGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2JvcnJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiBcIm9wZXJhdGl2b3NcIiB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnc3ViY29vcl9jYW1wbycsICdjb29yX2NhbXBvJywgJ2FkbWluJ10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDFcclxuICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICBpZiAocGVybWl0ZV9nZW5lcmFyX211ZXN0cmEpIHtcclxuICAgICAgICAgICAgICAgIHZhciB7IHVuaWRhZF9hbmFsaXNpcywgcGtfYWdyZWdhZGEgfSA9IChhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgcGFyYW1zLm9wZXJhdGl2bykpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjYXNvVGVtIH0gPSBhd2FpdCBidXNjYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbV9ib3JyYWRhcyAob3BlcmF0aXZvLCBlbmMsIGN1YW5kbywgYXJlYSwgY2x1c3RlciwgZG9taW5pbywgdGFyZWFfYWN0dWFsLCBqc29uX2VuY3Vlc3RhLCB0b2tlbl9hdXRvZ2VuZXJhZG9fZG0sIGVuY19hdXRvZ2VuZXJhZG9fZG0sIGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSwgcHJvaWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyAoJDEsJDIsY3VycmVudF90aW1lc3RhbXAsJDMsJDQsJDUsJDYsJDcsJDgsJDksJDEwLCQxMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpcclxuICAgICAgICAgICAgICAgICAgICBgLCBbXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5lbmMsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5hcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uY2x1c3RlcixcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmRvbWluaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS50YXJlYV9hY3R1YWwsXHJcbiAgICAgICAgICAgICAgICAgICAgY2Fzb1RlbS5qc29uX2VuY3Vlc3RhLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0udG9rZW5fYXV0b2dlbmVyYWRvX2RtLFxyXG4gICAgICAgICAgICAgICAgICAgIGNhc29UZW0uZW5jX2F1dG9nZW5lcmFkb19kbSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLmVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSxcclxuICAgICAgICAgICAgICAgICAgICBjYXNvVGVtLnByb2llXHJcbiAgICAgICAgICAgICAgICBdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgYGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAke2JlLmRiLnF1b3RlSWRlbnQodW5pZGFkX2FuYWxpc2lzKX0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgJHtiZS5kYi5xdW90ZUlkZW50KHBrX2FncmVnYWRhKX0gPSAkMlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIC0tcGsgdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKlxyXG4gICAgICAgICAgICAgICAgYCwgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmNdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBoaXN0b3JpYWxfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiAtLXBrIHZlcmlmaWNhZGFcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kICR7YmUuZGIucXVvdGVJZGVudChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbl9jb25fdmFyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBwa19pbnRlZ3JhZGEtPj4ke2JlLmRiLnF1b3RlTGl0ZXJhbChwa19hZ3JlZ2FkYSl9ID0gJDJcclxuICAgICAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXNfdWx0aW1hc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgcGtfaW50ZWdyYWRhLT4+JHtiZS5kYi5xdW90ZUxpdGVyYWwocGtfYWdyZWdhZGEpfSA9ICQyXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgbGEgZW5jdWVzdGEgJHtwYXJhbXMuZW5jfSBzZSBib3Jyw7MgY29ycmVjdGFtZW50ZWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignbm8gc2UgcHVlZGUgYm9ycmFyIGxhIGVuY3Vlc3RhIHBvcnF1ZSBlbCBvcGVyYXRpdm8gdGllbmUgbXVlc3RyYSBlc3TDoXRpY2EnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFzX2NhcGFjaXRhY2lvbl9ib3JyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfVxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBwZXJtaXRlX2dlbmVyYXJfbXVlc3RyYSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgcGVybWl0ZV9nZW5lcmFyX211ZXN0cmEgXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBvcGVyYXRpdm9zIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxXHJcbiAgICAgICAgICAgIGAsIFtwYXJhbXMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pdGVfZ2VuZXJhcl9tdWVzdHJhKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbmNzQUJvcnJhciA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICBgc2VsZWN0ICogXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhIGlzIG5vdCBudWxsXHJcbiAgICAgICAgICAgICAgICBgLCBbcGFyYW1zLm9wZXJhdGl2b10pLmZldGNoQWxsKCkpLnJvd3M7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgZW5jc0FCb3JyYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuZW5jdWVzdGFfYm9ycmFyLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7IG9wZXJhdGl2bzogcGFyYW1zLm9wZXJhdGl2bywgZW5jOiByb3cuZW5jIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NlIGJvcnJhcm9uIGxhcyBlbmN1ZXN0YXMgZGUgY2FwYWNpdGFjacOzbic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignbm8gc2UgcHVlZGUgYm9ycmFyIGxhIGVuY3Vlc3RhIHBvcnF1ZSBlbCBvcGVyYXRpdm8gdGllbmUgbXVlc3RyYSBlc3TDoXRpY2EnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnYWNjaW9uX3RhcmVhc190ZW1fZWplY3V0YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjb25kaWNpb24nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2FjY2lvbicsIHR5cGVOYW1lOiAnanNvbmInIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZywgY29uZGljaW9uOiBzdHJpbmcsIGFjY2lvbjogRXN0YWRvQWNjaW9uIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciBhY2Npb24gPSBwYXJhbXMuYWNjaW9uIGFzIEVzdGFkb0FjY2lvbjtcclxuICAgICAgICAgICAgdmFyIGN1bXBsZTogYm9vbGVhbiA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgYWNjaW9uX2N1bXBsZV9jb25kaWNpb24oJDUsICQ2LCAkNywgJDgsIChcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgY29uZGljaW9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgZnJvbSBlc3RhZG9zX2FjY2lvbmVzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVzdGFkbyA9ICQyIGFuZCBlYWNjaW9uID0gJDMgYW5kIGVzdGFkb19kZXN0aW5vID0gJDRcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKWAsIFtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVhY2Npb24sXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm8sXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkbyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5lbmMsXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZWFjY2lvbixcclxuICAgICAgICAgICAgXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgaWYgKCFjdW1wbGUpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBzZSBwdWRvIGVqZWN1dGFyIGxhIGFjY2nDs24sIG5vIHNlIGN1bXBsZSBsYSBjb25kaWNpw7NuIFwiJHtwYXJhbXMuY29uZGljaW9ufVwiIG8gYmllbiBlbCBlc3RhZG8gZXN0w6EgZGVzYWN0dWFsaXphZG8sIHJlZnJlc3F1ZSBsYSBncmlsbGEuYClcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGVuYz0kMiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW5jLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm9cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBpZiAoYWNjaW9uLm5vbWJyZV9wcm9jZWR1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChiZS5wcm9jZWR1cmVbYWNjaW9uLm5vbWJyZV9wcm9jZWR1cmVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlW2FjY2lvbi5ub21icmVfcHJvY2VkdXJlXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gZXhpc3RlIGVsIHByb2NlZHVyZSBcIiR7YWNjaW9uLm5vbWJyZV9wcm9jZWR1cmV9XCIgZGVmaW5pZG8gZW4gbGEgdGFibGEgXCJlc3RhZG9zX2FjY2lvbmVzXCIgcGFyYSBlbFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogJHthY2Npb24ub3BlcmF0aXZvfSwgZXN0YWRvOiAke2FjY2lvbi5lc3RhZG99LCBlYWNjaW9uOiAke2FjY2lvbi5lYWNjaW9ufS5gKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEJVU0NPIFBBU0UgREUgVEFSRUFcclxuICAgICAgICAgICAgdmFyIHRhcmVhU2lndWllbnRlID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCAqXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfcHJveGltYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvID0gJDEgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYSA9ICQyIGFuZCBlc3RhZG8gPSAkMyBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhX2N1bXBsZV9jb25kaWNpb24oJDQsICQ1LCAkNiwgJDcsIGNvbmRpY2lvbilcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBvcmRlblxyXG4gICAgICAgICAgICAgICAgICAgIGxpbWl0IDFgXHJcbiAgICAgICAgICAgICAgICAsIFtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm8sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5lbmNcclxuICAgICAgICAgICAgICAgIF0pLmZldGNoT25lUm93SWZFeGlzdHMoKSkucm93O1xyXG4gICAgICAgICAgICBpZiAodGFyZWFTaWd1aWVudGUpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgXHJcbiAgICAgICAgICAgICAgICAgICAgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgdGFyZWFTaWd1aWVudGUudGFyZWFfZGVzdGlub11cclxuICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgIGxldCBhdXRvQXNpZ25hZG8gPSB0YXJlYVNpZ3VpZW50ZS5yZWdpc3RyYV9yZWNlcGNpb25pc3RhID8gY29udGV4dC51c2VyLmlkcGVyIDogbnVsbDtcclxuICAgICAgICAgICAgICAgIGxldCBxID0gY29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWw7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRzX2VudHJhZGEgPSBjdXJyZW50X3RpbWVzdGFtcCwgYWRlbGFudGFyID0gbnVsbCwgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YXV0b0FzaWduYWRvID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIsIHJlY2VwY2lvbmlzdGE9XCIgKyBxKGF1dG9Bc2lnbmFkbylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwifVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgXHJcbiAgICAgICAgICAgICAgICAgICAgLCBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgdGFyZWFTaWd1aWVudGUudGFyZWFfZGVzdGlubywgdGFyZWFTaWd1aWVudGUuZXN0YWRvX2Rlc3Rpbm9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGFyZWFTaWd1aWVudGUubm9tYnJlX3Byb2NlZHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVt0YXJlYVNpZ3VpZW50ZS5ub21icmVfcHJvY2VkdXJlXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBGSU4gUEFTRSBERSBUQVJFQVxyXG4gICAgICAgICAgICByZXR1cm4gXCJva1wiO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfY2FyZ2FfcHJlcGFyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuYywgT1BFUkFDSU9OX1BSRVBBUkFSX0NBUkdBXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rpc3BvbmliaWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGFzaWduYWRvID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGVzY2FyZ2FfcHJlcGFyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuYywgT1BFUkFDSU9OX1BSRVBBUkFSX0RFU0NBUkdBXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2Rlc2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSAnY2FyZ2FyJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2FuYWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRhcmVhOiBzdHJpbmcsIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5jb25zaXN0aXJfZW5jdWVzdGEuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHsgb3BlcmF0aXZvOiBwYXJhbXMub3BlcmF0aXZvLCBpZF9jYXNvOiBwYXJhbXMuZW5jIH0pXHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnaW5jb25zaXN0ZW5jaWFzX2VuY3Vlc3RhX2NvbnRyb2xhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgY2FudGlkYWQ6IG51bWJlciA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgY291bnQoKikgYXMgY3VtcGxlXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBpbmNvbnNpc3RlbmNpYXMgaSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgam9pbiBjb25zaXN0ZW5jaWFzIGMgdXNpbmcgKG9wZXJhdGl2bywgY29uc2lzdGVuY2lhKSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgam9pbiBtb21lbnRvc19jb25zaXN0ZW5jaWEgbWMgdXNpbmcgKG9wZXJhdGl2bywgbW9tZW50bylcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvID0gJDEgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXZpZW5kYSA9ICQyIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50b19jb25zaXN0ZW5jaWFfY3VtcGxlX2NvbmRpY2lvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkudml2aWVuZGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMywgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0IGNvbmRpY2lvbiBmcm9tIG1vbWVudG9zX2NvbnNpc3RlbmNpYSB3aGVyZSBvcGVyYXRpdm8gPSBtYy5vcGVyYXRpdm8gYW5kIG1vbWVudG8gPSBtYy5tb21lbnRvKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpLmp1c3RpZmljYWNpb24gaXMgbnVsbGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgY29udGV4dC51c2VybmFtZV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZVxyXG4gICAgICAgICAgICBpZiAoY2FudGlkYWQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBubyBzZSBwdWVkZSB2ZXJpZmljYXIgbGEgdGFyZWEgcG9ycXVlIGhheSBpbmNvbnNpc3RlbmNpYXMsIHBvciBmYXZvciByZXN1w6lsdmFsYXMgbyBqdXN0aWbDrXF1ZWxhcyBlbiBjYXNvIGRlIHNlciBuZWNlc2FyaW8uYClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3ZlcmlmaWNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuaW5jb25zaXN0ZW5jaWFzX2VuY3Vlc3RhX2NvbnRyb2xhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9ICcxJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3ZlcmlmaWNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2NlcnJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCB0YXJlYTogc3RyaW5nLCBlbmM6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB2ZXJpZmljYWRvID0gJzEnLCBhc2lnbmFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmMsIGNvbnRleHQudXNlci5pZHBlcl0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19jZXJyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgdGFyZWE6IHN0cmluZywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9zdXBlcnZpc2FyX3ByZXNlbmNpYWwnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdzdXBlJywgMV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9zdXBlcnZpc2FyX3RlbGVmb25pY2EnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdzdXBlJywgMl0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19zdXBlcnZpc2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHN1cGVydmlzaW9uX2RpcmlnaWRhID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdmaW5jJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9wYXNhcl9hX2FuYWMnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcsIHRhcmVhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0NDJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYSBpbiAoJDMsJDQpIC0tcXVpZXJvIHBhc2FyIGxhcyAyIHRhcmVhcyBhIENDXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdhbmFjJywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fcGFzYXJfYV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnMEQnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAncHJvYyddKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGV2b2x2ZXJfcHJvY19kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICd0YXJlYScsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nLCB0YXJlYTogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5lbmN1ZXN0YV92ZXJpZmljYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICdBJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCB0YXJlYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX2Rldm9sdmVyX3Byb2NfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQ0MnXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIHRhcmVhIGluICgkMywkNCkgLS1xdWllcm8gcGFzYXIgbGFzIDIgdGFyZWFzIGEgQ0NcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2FuYWMnLCAncHJvYyddKVxyXG4gICAgICAgICAgICAgICAgLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX25vX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9yZWN1cGVyYXJfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIGVuYywgdGFyZWEgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsICdyZWN1J10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19yZWN1cGVyYXJfZGVzZGVfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWE6IHN0cmluZyB9Pikge1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgeyBvcGVyYXRpdm8sIGVuYywgdGFyZWEgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCAncmVjdScsICdhbmFjJ10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmVuY3Vlc3RhX25vX3ZlcmlmaWNhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9mb3J6YXJfdGFyZWEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdlbmMnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3RhcmVhX2FjdHVhbCcsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndGFyZWFfbnVldmEnLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmM6IHN0cmluZywgdGFyZWFfYWN0dWFsOiBzdHJpbmcsIHRhcmVhX251ZXZhOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIHsgb3BlcmF0aXZvLCBlbmMsIHRhcmVhX2FjdHVhbCwgdGFyZWFfbnVldmEgfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhX2FjdHVhbCA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCB0YXJlYV9hY3R1YWwsIHRhcmVhX251ZXZhXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ1YnIFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfYWN0dWFsXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJzBEJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfbnVldmFdKVxyXG4gICAgICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfaGFiaWxpdGFyX2Rlc2hhYmlsaXRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYycsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIGVuYzogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgaGFiaWxpdGFkYSA9IG5vdCBoYWJpbGl0YWRhXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YXNfcHJvY2VzYW1pZW50b19wYXNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHt9Pil7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBwYXNhckVuY3Vlc3Rhc0FQcm9pZShjb250ZXh0LmNsaWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdpbnRlcmNhbWJpYXJfZW5jdWVzdGFzJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuYzEnLCByZWZlcmVuY2VzOiAndGVtJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgICAgICB7IG5hbWU6ICdjYW50SG9nMScsIHR5cGVOYW1lOiAnaW50ZWdlcicgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jMicsIHR5cGVOYW1lOiAndGV4dCcgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnY2FudEhvZzInLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3Bhc28nLCB0eXBlTmFtZTogJ2ludGVnZXInIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2NvbmZpcm1hJywgdHlwZU5hbWU6ICdib29sZWFuJywgZGVmYXVsdFZhbHVlOiBmYWxzZSwgbGFiZWw6ICdDb25maXJtYSBpbnRlcmNhbWJpbyBkZSBsb3MgZGF0b3MgZW50cmUgbGFzIGVuY3Vlc3Rhcz8gJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ3Byb2Nlc2FtaWVudG8nLCAnYWRtaW4nXSxcclxuICAgICAgICBwcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8YW55Pikge1xyXG4gICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICogUGFyYSBjb250cm9sYXI6XHJcbiAgICAgICAgICAgICAqIC0gcXVlIGxhcyBob2dhcmVzLCBwZXJzb25hcywgZXRjIGVzdMOpbiBpbnRlcmNhbWJpYWRhcyBcclxuICAgICAgICAgICAgICogICogdGFudG8gZW4gZWwganNvblxyXG4gICAgICAgICAgICAgKiAgKiBjb21vIGVuIGxhcyBURHNcclxuICAgICAgICAgICAgICogLSBjb3NhcyBxdWUgc2UgY2FsY3VsYW4gcG9yIGxhIGFwcD8gY3VhbGVzPyAocmVzdW1lbl9lc3RhZG8sIHJlYSB5IG5vcmVhKVxyXG4gICAgICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICAgIGlmICghcGFyYW1zLmNvbmZpcm1hKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbmZpcm3DsyBpbnRlcmNhbWJpbycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuZW5jMSB8fCAhcGFyYW1zLmVuYzIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIEZhbHRhIGluZ3Jlc2FyIHVuIG51bWVybyBkZSBlbmN1ZXN0YSEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGFyYW1zLmVuYzEgPT0gcGFyYW1zLmVuYzIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIGVuYzEgeSBlbmMyIGRlYmVuIHNlciBkaXN0aW50b3MhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY2FudEhvZzEpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIENhbnRpZGFkIGRlIEhvZ2FyZXMgZGUgZW5jMSwgbm8gZXN0YSBpbmdyZXNhZG8hJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY2FudEhvZzIpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIENhbnRpZGFkIGRlIEhvZ2FyZXMgZGUgZW5jMiwgbm8gZXN0YSBpbmdyZXNhZG8hJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQ09OVFJPTEFSIFFVRSBOSU5HVU5BIERFIExBUyAyIGVuY3Vlc3RhcyBFU1RFIENBUkdBREEsIEFCSUVSVEEgRkFMVEFcclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICB2YXIgeyB1bmlkYWRfYW5hbGlzaXMsIHBrX2FncmVnYWRhIH0gPSAoYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTykpO1xyXG4gICAgICAgICAgICBjb25zdCBjYW50X2hvZ3MgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IHZpdmllbmRhLCBjb3VudCgqKW5oIGZyb20gaG9nYXJlcyB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICh2aXZpZW5kYT0kMiBvciB2aXZpZW5kYT0kMylcclxuICAgICAgICAgICAgICAgIGdyb3VwIGJ5IHZpdmllbmRhIG9yZGVyIGJ5IHZpdmllbmRhXHJcbiAgICAgICAgICAgICAgICBgLCBbT1BFUkFUSVZPLCBwYXJhbXMuZW5jMSwgcGFyYW1zLmVuYzJdKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG5cclxuICAgICAgICAgICAgdmFyIHBhcmFtX25oID0gW3BhcmFtcy5jYW50SG9nMSwgcGFyYW1zLmNhbnRIb2cyXTtcclxuICAgICAgICAgICAgY2FudF9ob2dzLmZvckVhY2goKHhlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyYW1fbmhbaV0gIT09IHhlLm5oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeG1lbnMgPSBgRXJyb3IsIG5vIGNvaW5jaWRlIGxhIGNhbnRpZGFkIGRlIGhvZ2FyZXMgZGUgZW5jJHtpICsgMX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih4bWVucyk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciByZWdFbmMgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBzZWxlY3QgZW5jLCB0YXJlYV9hY3R1YWwsIGpzb25fZW5jdWVzdGEgZnJvbSB0ZW0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAoZW5jID0kMiBvciBlbmM9JDMpIG9yZGVyIGJ5IGVuY1xyXG4gICAgICAgICAgICBgLCBbT1BFUkFUSVZPLCBwYXJhbXMuZW5jMSwgcGFyYW1zLmVuYzJdKS5mZXRjaEFsbCgpKS5yb3dzO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlZ0VuYy5sZW5ndGggIT0gMikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgTm8gc2UgZW5jb250cmFyb24gMiBlbmN1ZXN0YXMnKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gbGltcGlhIGxhcyBURHMgIFxyXG4gICAgICAgICAgICAgICAgbGV0IFtlbmMxLCBlbmMyXSA9IFtyZWdFbmNbMF0sIHJlZ0VuY1sxXV1cclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbXMucGFzbyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGBkZWxldGUgZnJvbSAke2NvbnRleHQuYmUuZGIucXVvdGVJZGVudCh1bmlkYWRfYW5hbGlzaXMpfSB3aGVyZSBvcGVyYXRpdm89JDEgYW5kICh2aXZpZW5kYT0kMiBPUiB2aXZpZW5kYT0kMylgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICwgW09QRVJBVElWTywgZW5jMS5lbmMsIGVuYzIuZW5jXVxyXG4gICAgICAgICAgICAgICAgICAgICkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocGFyYW1zLnBhc28gPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vc2ltdWxhIGd1YXJkYWRvXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3Jpbyhjb250ZXh0LCBPUEVSQVRJVk8sIGVuYzEuZW5jLCBlbmMxLnRhcmVhX2FjdHVhbCwgZW5jMi5qc29uX2VuY3Vlc3RhKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgT1BFUkFUSVZPLCBlbmMyLmVuYywgZW5jMi50YXJlYV9hY3R1YWwsIGVuYzEuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKGBMaXN0byBwYXNvICR7cGFyYW1zLnBhc299LiBJbnRlcmNhbWJpbyByZWFsaXphZG8gZW50cmUgbGFzIGVuY3Vlc3RhcyAgJHtwYXJhbXMuZW5jMX0geSAke3BhcmFtcy5lbmMyfS4gUG9yIGZhdm9yIGNvbnNpc3RhIGxhIGVuY3Vlc3RhYClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhZG9yX2Rtc19tb3N0cmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2bycsIHR5cGVOYW1lOiAndGV4dCcsIHJlZmVyZW5jZXM6IFwib3BlcmF0aXZvc1wiIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2VuY3Vlc3RhZG9yJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnY29vcl9wcm9jJywgJ2Nvb3JfY2FtcG8nLCAnYWRtaW4nXSxcclxuICAgICAgICByZXN1bHRPazogJ21vc3RyYXJfZW5jdWVzdGFzX2FfYmxhbnF1ZWFyJyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8eyBvcGVyYXRpdm86IElkT3BlcmF0aXZvLCBlbmN1ZXN0YWRvcjogc3RyaW5nIH0+KSB7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgYXNpZ25hZG8gPSAkMiBhbmQgY2FyZ2Fkb19kbSBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyIGJ5IGNhcmdhZG9fZG1cclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY3Vlc3RhZG9yXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnJvd0NvdW50ID09IDApIHtcclxuICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBzZSBlbmNvbnRyYXJvbiBlbmN1ZXN0YXMgY2FyZ2FkYXMgZW4gdW4gRE0gcGFyYSBlbCBvcGVyYXRpdm8gJHtwYXJhbXMub3BlcmF0aXZvfSwgZW5jdWVzdGFkb3IgJHtwYXJhbXMuZW5jdWVzdGFkb3J9YClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4geyByb3dzOiByZXN1bHQucm93cywgb3BlcmF0aXZvOiBwYXJhbXMub3BlcmF0aXZvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9ibGFucXVlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvJywgdHlwZU5hbWU6ICd0ZXh0JywgcmVmZXJlbmNlczogXCJvcGVyYXRpdm9zXCIgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAndG9rZW4nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczogWydjb29yX3Byb2MnLCAnY29vcl9jYW1wbycsICdhZG1pbiddLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjogYXN5bmMgZnVuY3Rpb24gKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7IG9wZXJhdGl2bzogSWRPcGVyYXRpdm8sIHRva2VuOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgbGV0IHRhcmVhc1RlbVJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSBudWxsLCBvcGVyYWNpb24gPSAkMywgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGNhcmdhZG9fZG0gPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudG9rZW4sIE9QRVJBQ0lPTl9QUkVQQVJBUl9ERVNDQVJHQSwgRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQV0pXHJcbiAgICAgICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYgKHRhcmVhc1RlbVJlc3VsdC5yb3dDb3VudCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcignTm8gc2UgYmxhbnF1ZcOzIG5pbmd1bmEgZW5jdWVzdGEnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IHR0IG9mIHRhcmVhc1RlbVJlc3VsdC5yb3dzKSB7XHJcbiAgICAgICAgICAgICAgICB0dC5yZXN1bHRfYmxhbnF1ZW8gPSBgZW5jICR7dHQuZW5jfSBzZSBibGFucXVlw7MgY29ycmVjdGFtZW50ZS5gO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdEJhY2t1cCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBqc29uX2VuY3Vlc3RhID0ganNvbl9iYWNrdXAsIGZlY2hhX21vZGlmX2VuY3Vlc3RhID0gZmVjaGFfYmFja3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyIGFuZCBmZWNoYV9iYWNrdXAgPiBjb2FsZXNjZShmZWNoYV9tb2RpZl9lbmN1ZXN0YSwgJzE5MDAtMDEtMDEnKSBhbmQganNvbl9iYWNrdXAgaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgIFt0dC5vcGVyYXRpdm8sIHR0LmVuY10pXHJcbiAgICAgICAgICAgICAgICAgICAgLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHRCYWNrdXAucm93Q291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0dC5yZXN1bHRfYmxhbnF1ZW8gKz0gYCBTZSByZXN0YWJsZWNpw7MgZWwgYmFja3VwIGNvbiBmZWNoYSAke3Jlc3VsdEJhY2t1cC5yb3cuZmVjaGFfYmFja3VwLnRvWW1kSG1zKCl9LmBcclxuICAgICAgICAgICAgICAgICAgICB2YXIgeyBwYXJhbXM6IHF1ZXJ5UGFyYW1zLCBzZXR0ZXJzIH0gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhOiB0dC50YXJlYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsOiByZXN1bHRCYWNrdXAucm93Lmpzb25fZW5jdWVzdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFt0dC5vcGVyYXRpdm8sIHR0LmVuYywgdHQudGFyZWFdXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgJHtzZXR0ZXJzLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBzaW11bGFyR3VhcmRhZG9EZUVuY3Vlc3RhRGVzZGVBcHBFc2NyaXRvcmlvKGNvbnRleHQsIHJlc3VsdEJhY2t1cC5yb3cub3BlcmF0aXZvLCByZXN1bHRCYWNrdXAucm93LmVuYywgdHQudGFyZWEsIHJlc3VsdEJhY2t1cC5yb3cuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGFyZWFzVGVtUmVzdWx0LnJvd3M7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdtb2RvX2RtX2RlZmVjdG9fb2J0ZW5lcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5sb2dnZWQ6IHRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOiBhc3luYyBmdW5jdGlvbiAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnM8e30+KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBjb250ZXh0O1xyXG4gICAgICAgICAgICBjb25zdCBtb2RvRG1EZWZlY3RvID0gKGF3YWl0IChjbGllbnQucXVlcnkoYHNlbGVjdCBtb2RvX2RtX2RlZmVjdG8gZnJvbSBwYXJhbWV0cm9zIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYCwgW10pLmZldGNoVW5pcXVlVmFsdWUoKSkpLnZhbHVlO1xyXG4gICAgICAgICAgICByZXR1cm4gbW9kb0RtRGVmZWN0bztcclxuICAgICAgICB9XHJcbiAgICB9LCB7XHJcbiAgICAgICAgYWN0aW9uOiAnbW9kb19hcHBfZ2V0JyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXSxcclxuICAgICAgICB1bmxvZ2dlZDogdHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVyczx7fT4pIHtcclxuICAgICAgICAgICAgY29uc3QgeyBiZSB9ID0gY29udGV4dDtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE1vZG9CeVBvbGljeShiZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdvcGVyYXRpdm9fbWlncmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ29wZXJhdGl2b19vcmlnZW4nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnb3BlcmF0aXZvX2Rlc3Rpbm8nLCB0eXBlTmFtZTogJ3RleHQnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ3NjaGVtYV9uYW1lJywgdHlwZU5hbWU6ICd0ZXh0JywgbGFiZWw6ICdub21icmUgZGUgc2NoZW1hJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdkb3dubG9hZF9zcWwnLFxyXG4gICAgICAgIHByb2NlZWRMYWJlbDogJ21pZ3JhcicsXHJcbiAgICAgICAgcm9sZXM6IFsnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6IHsgb3BlcmF0aXZvX29yaWdlbjogc3RyaW5nLCBvcGVyYXRpdm9fZGVzdGlubzogc3RyaW5nLCBzY2hlbWFfbmFtZTogc3RyaW5nIH0pIHtcclxuICAgICAgICAgICAgY29uc3QgdGFibGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoWydvcGVyYXRpdm9zJywgJ3RhcmVhcycsICd1bmlkYWRfYW5hbGlzaXMnLCAnY2FzaWxsZXJvcyddLm1hcChhc3luYyB0YWJsZU5hbWUgPT4gKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHRhYmxlTmFtZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYHNlbGVjdCAqIGZyb20gJHtjb250ZXh0LmJlLmRiLnF1b3RlSWRlbnQodGFibGVOYW1lKX0gd2hlcmUgb3BlcmF0aXZvID0gJDFgLCBbcGFyYW1zLm9wZXJhdGl2b19vcmlnZW5dKS5mZXRjaEFsbCgpXHJcbiAgICAgICAgICAgIH0pKSk7XHJcblxyXG4gICAgICAgICAgICB0YWJsZXMuZm9yRWFjaCgoXywgaSkgPT4gdGFibGVzW2ldLnJlc3VsdC5yb3dzLmZvckVhY2gocm93ID0+IHJvdy5vcGVyYXRpdm8gPSBwYXJhbXMub3BlcmF0aXZvX2Rlc3Rpbm8pKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkSW5zZXJ0cyA9IChxdWVyeTogeyBuYW1lOiBzdHJpbmcsIHJlc3VsdDogUmVzdWx0Um93cyB9KSA9PiBxdWVyeS5yZXN1bHQucm93cy5tYXAocm93ID0+XHJcbiAgICAgICAgICAgICAgICAnaW5zZXJ0IGludG8gJyArIGNvbnRleHQuYmUuZGIucXVvdGVJZGVudChwYXJhbXMuc2NoZW1hX25hbWUpICsgJy4nICsgY29udGV4dC5iZS5kYi5xdW90ZUlkZW50KHF1ZXJ5Lm5hbWUpICtcclxuICAgICAgICAgICAgICAgICcgKCcgKyBxdWVyeS5yZXN1bHQuZmllbGRzLm1hcCgoZjogeyBuYW1lOiBzdHJpbmcgfSkgPT4gY29udGV4dC5iZS5kYi5xdW90ZUlkZW50KGYubmFtZSkpLmpvaW4oJywgJykgKyAnKScgK1xyXG4gICAgICAgICAgICAgICAgJyB2YWx1ZXMgKCcgKyBxdWVyeS5yZXN1bHQuZmllbGRzLm1hcCgoZjogeyBuYW1lOiBzdHJpbmcgfSkgPT4gY29udGV4dC5iZS5kYi5xdW90ZU51bGxhYmxlKHJvd1tmLm5hbWVdKSkuam9pbignLCAnKSArICcpOydcclxuICAgICAgICAgICAgKS5qb2luKCdcXG4nKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGluc2VydEFyZWFzID0gYFxyXG4gICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gYXJlYXMgKG9wZXJhdGl2bywgYXJlYSlcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19kZXN0aW5vKX0gYXMgb3BlcmF0aXZvLCBhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSBhcmVhcyB3aGVyZSBvcGVyYXRpdm8gPSAke2NvbnRleHQuYmUuZGIucXVvdGVOdWxsYWJsZShwYXJhbXMub3BlcmF0aXZvX29yaWdlbil9O1xyXG4gICAgICAgICAgICBgXHJcblxyXG4gICAgICAgICAgICBjb25zdCBpbnNlcnRUYXJlYXNBcmVhcyA9IGBcclxuICAgICAgICAgICAgICAgIGluc2VydCBpbnRvIHRhcmVhc19hcmVhcyAob3BlcmF0aXZvLHRhcmVhLCBhcmVhKVxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdCAke2NvbnRleHQuYmUuZGIucXVvdGVOdWxsYWJsZShwYXJhbXMub3BlcmF0aXZvX2Rlc3Rpbm8pfSBhcyBvcGVyYXRpdm8sIHRhcmVhLCBhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfYXJlYXNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAke2NvbnRleHQuYmUuZGIucXVvdGVOdWxsYWJsZShwYXJhbXMub3BlcmF0aXZvX29yaWdlbil9O1xyXG4gICAgICAgICAgICBgO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5zZXJ0VGVtID0gYFxyXG4gICAgICAgICAgICAgICAgaW5zZXJ0IGludG8gdGVtIChvcGVyYXRpdm8sIGFyZWEsIGVuYywgZG9taW5pbywgaGFiaWxpdGFkYSlcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19kZXN0aW5vKX0gYXMgb3BlcmF0aXZvLCBhcmVhLCAoYXJlYSB8fCBlbmM6OnRleHQpIGVuYywgY2FzZSB3aGVuIGVuY3MuZW5jIDwgMTA2IHRoZW4gMyBlbHNlIDUgZW5kIGFzIGRvbWluaW8sIHRydWUgYXMgaGFiaWxpdGFkYVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gYXJlYXMgam9pbiAoU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxMDAsIDExMCkgZW5jKSBlbmNzXHJcbiAgICAgICAgICAgICAgICAgICAgb24gb3BlcmF0aXZvID0gJHtjb250ZXh0LmJlLmRiLnF1b3RlTnVsbGFibGUocGFyYW1zLm9wZXJhdGl2b19vcmlnZW4pfTtcclxuICAgICAgICAgICAgYDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNxbCA9IGBzZXQgc2VhcmNoX3BhdGggPSBcIiR7cGFyYW1zLnNjaGVtYV9uYW1lfVwiO2AgKyBgXFxuXFxuYFxyXG4gICAgICAgICAgICAgICAgKyB0YWJsZXMubWFwKHF1ZXJ5ID0+IGJ1aWxkSW5zZXJ0cyhxdWVyeSkpLmpvaW4oJ1xcblxcbicpXHJcbiAgICAgICAgICAgICAgICArICdcXG5cXG4nICsgaW5zZXJ0QXJlYXNcclxuICAgICAgICAgICAgICAgICsgJ1xcblxcbicgKyBpbnNlcnRUYXJlYXNBcmVhc1xyXG4gICAgICAgICAgICAgICAgKyAnXFxuXFxuJyArIGluc2VydFRlbTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzcWw7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9jYXBhX2FfcHJvZF9wYXNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7IG5hbWU6ICdvcGVyYXRpdm8nLCB0eXBlTmFtZTogJ3RleHQnLCByZWZlcmVuY2VzOiAnb3BlcmF0aXZvcycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZW5jJywgdHlwZU5hbWU6ICd0ZXh0JyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcm9sZXM6IFsnYWRtaW4nXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246IGFzeW5jIGZ1bmN0aW9uIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzPHsgb3BlcmF0aXZvOiBJZE9wZXJhdGl2bywgZW5jOiBzdHJpbmcgfT4pIHtcclxuICAgICAgICAgICAgKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZW5jX2F1dG9nZW5lcmFkb19kbSA9IGVuY19hdXRvZ2VuZXJhZG9fZG1fY2FwYSwgZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgZW5jX2F1dG9nZW5lcmFkb19kbV9jYXBhIGlzIG5vdCBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvLCBwYXJhbWV0ZXJzLmVuY11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gYHNlIG1vdmnDsyBsYSBlbmN1ZXN0YSAke3BhcmFtZXRlcnMuZW5jfSBhIHByb2R1Y2Npw7NuYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbl07Il19