dmencu 0.8.2 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/client/client.js +9 -6
- package/dist/client/client.d.ts +0 -0
- package/dist/client/client.js +2 -0
- package/dist/client/menu.d.ts +0 -0
- package/dist/client/menu.js +3 -0
- package/dist/server/server/app-dmencu.d.ts +20 -0
- package/dist/server/server/app-dmencu.js +10 -10
- package/dist/server/server/def-config.d.ts +1 -1
- package/dist/server/server/def-config.js +3 -2
- package/dist/server/server/procedures-dmencu.js +150 -23
- package/dist/server/server/table-encuestadores.d.ts +1 -1
- package/dist/server/server/table-encuestadores.js +8 -8
- package/dist/server/server/table-historial_tem copy.d.ts +15 -0
- package/dist/server/server/table-historial_tem copy.js +187 -0
- package/dist/server/server/table-historial_tem.d.ts +3 -0
- package/dist/server/server/table-historial_tem.js +57 -0
- package/dist/server/server/table-s_tem copy.d.ts +15 -0
- package/dist/server/server/table-s_tem copy.js +187 -0
- package/dist/server/server/table-tareas.js +3 -2
- package/dist/server/server/table-tareas_areas.js +6 -6
- package/dist/server/server/table-tareas_proximas.js +8 -2
- package/dist/server/server/table-tareas_tem copy.d.ts +15 -0
- package/dist/server/server/table-tareas_tem copy.js +187 -0
- package/dist/server/server/table-tareas_tem.d.ts +3 -3
- package/dist/server/server/table-tareas_tem.js +13 -15
- package/dist/server/server/table-tareas_tem_analisis_campo.js +2 -4
- package/dist/server/server/table-tareas_tem_fin_campo.js +2 -2
- package/dist/server/server/table-tareas_tem_procesamiento.js +2 -4
- package/dist/server/server/table-tareas_tem_recepcion.d.ts +0 -3
- package/dist/server/server/table-tareas_tem_recepcion.js +3 -14
- package/dist/server/server/table-tem.js +6 -10
- package/dist/server/server/table-tem_asignacion.js +2 -2
- package/install/agregar_historial_tem_trg.sql +48 -0
- package/install/asignar_desasignar_tareas_tem_trg.sql +9 -6
- package/install/carga_inicial_tareas_tem.sql +1 -1
- package/install/desverificar_tarea_trg.sql +24 -3
- package/install/validar_tareas_tem_trg.sql +8 -6
- package/package.json +2 -2
- package/install/determinar_tarea_proxima_trg.sql +0 -68
|
@@ -814,6 +814,7 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
814
814
|
{ name: 'enc', typeName: 'text' },
|
|
815
815
|
{ name: 'condicion', typeName: 'text' },
|
|
816
816
|
{ name: 'accion', typeName: 'jsonb' },
|
|
817
|
+
{ name: 'tareasTemTable', typeName: 'text' },
|
|
817
818
|
],
|
|
818
819
|
coreFunction: async function (context, params) {
|
|
819
820
|
var be = context.be;
|
|
@@ -877,17 +878,27 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
877
878
|
if (tareaSiguiente) {
|
|
878
879
|
await context.client.query(`
|
|
879
880
|
update tem
|
|
880
|
-
set
|
|
881
|
+
set tarea_actual = $3
|
|
881
882
|
where operativo = $1 and enc = $2
|
|
882
883
|
returning *`, [params.operativo, params.enc, tareaSiguiente.tarea_destino]).fetchUniqueRow();
|
|
884
|
+
let autoAsignado = tareaSiguiente.registra_recepcionista ? context.user.idper : null;
|
|
885
|
+
let q = context.be.db.quoteLiteral;
|
|
883
886
|
await context.client.query(`
|
|
884
887
|
update tareas_tem
|
|
885
888
|
set ts_entrada = current_timestamp
|
|
889
|
+
${autoAsignado ?
|
|
890
|
+
", recepcionista=" + q(autoAsignado)
|
|
891
|
+
: ""}
|
|
886
892
|
where operativo = $1 and enc = $2 and tarea = $3
|
|
887
893
|
returning *`, [params.operativo, params.enc, tareaSiguiente.tarea_destino]).fetchUniqueRow();
|
|
888
894
|
}
|
|
889
895
|
// FIN PASE DE TAREA
|
|
890
|
-
|
|
896
|
+
var mainDefTable = be.tableStructures[params.tareasTemTable](context);
|
|
897
|
+
console.log("from:", mainDefTable.sql.from);
|
|
898
|
+
return (await context.client.query(`
|
|
899
|
+
select ${[...mainDefTable.sql.select].join(', ')}
|
|
900
|
+
from ${mainDefTable.sql.from}
|
|
901
|
+
where "tareas_tem".operativo = $1 and "tareas_tem".enc = $2 and "tareas_tem".tarea = $3`, [params.operativo, params.enc, params.tarea]).fetchUniqueRow()).row;
|
|
891
902
|
}
|
|
892
903
|
},
|
|
893
904
|
{
|
|
@@ -1032,9 +1043,9 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
1032
1043
|
coreFunction: async function (context, params) {
|
|
1033
1044
|
await context.client.query(`
|
|
1034
1045
|
UPDATE tem
|
|
1035
|
-
set tarea_actual = $3,
|
|
1046
|
+
set tarea_actual = $3, supervision_dirigida = $4
|
|
1036
1047
|
where operativo=$1 and enc=$2
|
|
1037
|
-
returning *`, [params.operativo, params.enc, '
|
|
1048
|
+
returning *`, [params.operativo, params.enc, 'supe', 1])
|
|
1038
1049
|
.fetchUniqueRow();
|
|
1039
1050
|
return 'ok';
|
|
1040
1051
|
}
|
|
@@ -1049,9 +1060,9 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
1049
1060
|
coreFunction: async function (context, params) {
|
|
1050
1061
|
await context.client.query(`
|
|
1051
1062
|
UPDATE tem
|
|
1052
|
-
set tarea_actual = $3,
|
|
1063
|
+
set tarea_actual = $3, supervision_dirigida = $4
|
|
1053
1064
|
where operativo=$1 and enc=$2
|
|
1054
|
-
returning *`, [params.operativo, params.enc, '
|
|
1065
|
+
returning *`, [params.operativo, params.enc, 'supe', 2])
|
|
1055
1066
|
.fetchUniqueRow();
|
|
1056
1067
|
return 'ok';
|
|
1057
1068
|
}
|
|
@@ -1066,13 +1077,128 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
1066
1077
|
coreFunction: async function (context, params) {
|
|
1067
1078
|
await context.client.query(`
|
|
1068
1079
|
UPDATE tem
|
|
1069
|
-
set tarea_actual = $3,
|
|
1080
|
+
set tarea_actual = $3, supervision_dirigida = null
|
|
1070
1081
|
where operativo=$1 and enc=$2
|
|
1071
|
-
returning *`, [params.operativo, params.enc,
|
|
1082
|
+
returning *`, [params.operativo, params.enc, 'finc'])
|
|
1072
1083
|
.fetchUniqueRow();
|
|
1073
1084
|
return 'ok';
|
|
1074
1085
|
}
|
|
1075
1086
|
},
|
|
1087
|
+
/**
|
|
1088
|
+
* {
|
|
1089
|
+
action: 'encuesta_pasar_a_anac',
|
|
1090
|
+
parameters:[
|
|
1091
|
+
{name:'operativo' , typeName:'text'},
|
|
1092
|
+
{name:'enc' , typeName:'text'},
|
|
1093
|
+
{name:'tarea' , typeName:'text'},
|
|
1094
|
+
],
|
|
1095
|
+
coreFunction:async function(context:ProcedureContext, params:CoreFunctionParameters){
|
|
1096
|
+
await context.client.query(`
|
|
1097
|
+
UPDATE tem
|
|
1098
|
+
set tarea_actual = $3
|
|
1099
|
+
where operativo=$1 and enc=$2
|
|
1100
|
+
returning *`,
|
|
1101
|
+
[params.operativo, params.enc, 'anac'])
|
|
1102
|
+
.fetchUniqueRow();
|
|
1103
|
+
await context.client.query(`
|
|
1104
|
+
UPDATE tareas_tem
|
|
1105
|
+
set estado = 'CC'
|
|
1106
|
+
where operativo=$1 and tarea= $2 and enc=$3
|
|
1107
|
+
returning *`,
|
|
1108
|
+
[params.operativo, params.tarea, params.enc])
|
|
1109
|
+
.fetchUniqueRow();
|
|
1110
|
+
return 'ok';
|
|
1111
|
+
}
|
|
1112
|
+
},
|
|
1113
|
+
{
|
|
1114
|
+
action: 'encuesta_no_pasar_a_anac',
|
|
1115
|
+
parameters:[
|
|
1116
|
+
{name:'operativo' , typeName:'text'},
|
|
1117
|
+
{name:'enc' , typeName:'text'},
|
|
1118
|
+
{name:'tarea' , typeName:'text'},
|
|
1119
|
+
],
|
|
1120
|
+
coreFunction:async function(context:ProcedureContext, params:CoreFunctionParameters){
|
|
1121
|
+
await context.client.query(`
|
|
1122
|
+
UPDATE tem
|
|
1123
|
+
set tarea_actual = $3
|
|
1124
|
+
where operativo=$1 and enc=$2
|
|
1125
|
+
returning *`,
|
|
1126
|
+
[params.operativo, params.enc, 'proc'])
|
|
1127
|
+
.fetchUniqueRow();
|
|
1128
|
+
await context.client.query(`
|
|
1129
|
+
UPDATE tareas_tem
|
|
1130
|
+
set estado = 'A'
|
|
1131
|
+
where operativo=$1 and tarea= $2 and enc=$3
|
|
1132
|
+
returning *`,
|
|
1133
|
+
[params.operativo, 'proc', params.enc])
|
|
1134
|
+
.fetchUniqueRow();
|
|
1135
|
+
return 'ok';
|
|
1136
|
+
}
|
|
1137
|
+
},
|
|
1138
|
+
{
|
|
1139
|
+
action: 'encuesta_recuperar_desde_anac',
|
|
1140
|
+
parameters:[
|
|
1141
|
+
{name:'operativo' , typeName:'text'},
|
|
1142
|
+
{name:'enc' , typeName:'text'},
|
|
1143
|
+
{name:'tarea' , typeName:'text'},
|
|
1144
|
+
],
|
|
1145
|
+
coreFunction:async function(context:ProcedureContext, params:CoreFunctionParameters){
|
|
1146
|
+
var be = context.be;
|
|
1147
|
+
var forzarTareaEncuestaProc = be.procedure.encuesta_forzar_tarea;
|
|
1148
|
+
var {operativo,enc,tarea:tarea_actual} = params;
|
|
1149
|
+
await forzarTareaEncuestaProc.coreFunction(context,{operativo,enc,tarea_actual,tarea_nueva:'recu'});
|
|
1150
|
+
return 'ok'
|
|
1151
|
+
}
|
|
1152
|
+
},
|
|
1153
|
+
{
|
|
1154
|
+
action: 'encuesta_forzar_tarea',
|
|
1155
|
+
parameters:[
|
|
1156
|
+
{name:'operativo' , typeName:'text'},
|
|
1157
|
+
{name:'enc' , typeName:'text'},
|
|
1158
|
+
{name:'tarea_actual' , typeName:'text'},
|
|
1159
|
+
{name:'tarea_nueva' , typeName:'text'},
|
|
1160
|
+
],
|
|
1161
|
+
coreFunction:async function(context:ProcedureContext, params:CoreFunctionParameters){
|
|
1162
|
+
var {operativo, enc, tarea_actual, tarea_nueva} = params;
|
|
1163
|
+
await context.client.query(`
|
|
1164
|
+
update tem
|
|
1165
|
+
set tarea_actual = $4
|
|
1166
|
+
where operativo = $1 and enc = $2 and tarea_actual = $3
|
|
1167
|
+
returning *`,
|
|
1168
|
+
[operativo, enc, tarea_actual, tarea_nueva])
|
|
1169
|
+
.fetchUniqueRow();
|
|
1170
|
+
var result = await context.client.query(`
|
|
1171
|
+
update tareas_tem
|
|
1172
|
+
set estado = '0D'
|
|
1173
|
+
where operativo = $1 and enc = $2 and tarea in ($3, $4)
|
|
1174
|
+
returning *`,
|
|
1175
|
+
[operativo, enc, tarea_actual, tarea_nueva])
|
|
1176
|
+
.fetchAll();
|
|
1177
|
+
|
|
1178
|
+
if(result.rowCount != 2){
|
|
1179
|
+
throw Error(`Se esperaban 2 registros y se obtuvo/obtuvieron ${result.rowCount}`)
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
await context.client.query(`
|
|
1183
|
+
update tareas_tem
|
|
1184
|
+
set asignado = null
|
|
1185
|
+
where operativo = $1 and enc = $2 and tarea = $3
|
|
1186
|
+
returning *`,
|
|
1187
|
+
[operativo, enc, tarea_nueva])
|
|
1188
|
+
.fetchUniqueRow();
|
|
1189
|
+
|
|
1190
|
+
await context.client.query(`
|
|
1191
|
+
update tareas_tem
|
|
1192
|
+
set recepcionista = null
|
|
1193
|
+
where operativo = $1 and enc = $2 and tarea = $3
|
|
1194
|
+
returning *`,
|
|
1195
|
+
[operativo, enc, tarea_nueva])
|
|
1196
|
+
.fetchUniqueRow();
|
|
1197
|
+
|
|
1198
|
+
return 'ok';
|
|
1199
|
+
}
|
|
1200
|
+
},
|
|
1201
|
+
*/
|
|
1076
1202
|
{
|
|
1077
1203
|
action: 'encuesta_habilitar_deshabilitar',
|
|
1078
1204
|
parameters: [
|
|
@@ -1095,30 +1221,31 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
1095
1221
|
coreFunction: async function (context, _params) {
|
|
1096
1222
|
let parametros = (await context.client.query(`
|
|
1097
1223
|
select * from parametros where unico_registro`, []).fetchUniqueRow()).row;
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
from tareas_tem left join tem t using (operativo,enc)
|
|
1102
|
-
where operativo=$1 and tarea= $2 and (${getDiasAPasarQuery()} <= 0 or coalesce(adelantar,false)) and tarea_proxima = $3`
|
|
1103
|
-
*/
|
|
1104
|
-
var select = `select t.operativo, t.enc, t.tarea_actual, t.tarea_proxima, tt.ts_entrada, tta.estado
|
|
1105
|
-
from tareas_tem tt left join tem t using (operativo,enc) join tareas_tem tta on tta.operativo=t.operativo and tta.enc=t.enc and tta.tarea=t.tarea_actual
|
|
1106
|
-
where tt.operativo=$1 and tt.tarea= $2 and (${(0, table_tareas_tem_1.getDiasAPasarQuery)('tt')} <= 0 or coalesce(tt.adelantar,false)) and tarea_proxima = $3
|
|
1107
|
-
and tta.estado='V' and tta.asignado is not null and tta.recepcionista is not null
|
|
1224
|
+
var select = `select t.operativo, t.enc, t.tarea_actual, tt.ts_entrada
|
|
1225
|
+
from tareas_tem tt join tem t using (operativo,enc)
|
|
1226
|
+
where tt.operativo=$1 and tt.tarea= $2 and (${(0, table_tareas_tem_1.getDiasAPasarQuery)('tt')} <= 0 or coalesce(tt.adelantar,false)) and tt.tarea = t.tarea_actual
|
|
1108
1227
|
`;
|
|
1228
|
+
await context.client.query(`
|
|
1229
|
+
UPDATE tareas_tem tt
|
|
1230
|
+
set estado = 'V'
|
|
1231
|
+
from (${select}) aux
|
|
1232
|
+
where tt.operativo = aux.operativo and tt.enc = aux.enc and tt.tarea = $3
|
|
1233
|
+
returning *`, [parametros.operativo, 'finc', 'finc'])
|
|
1234
|
+
.fetchAll();
|
|
1235
|
+
//TODO asignar en procesamiento
|
|
1109
1236
|
await context.client.query(`
|
|
1110
1237
|
UPDATE tareas_tem tt
|
|
1111
1238
|
set estado = 'A'
|
|
1112
1239
|
from (${select}) aux
|
|
1113
|
-
where tt.operativo = aux.operativo and tt.enc = aux.enc and tt.tarea = $
|
|
1114
|
-
returning *`, [parametros.operativo, 'finc', '
|
|
1240
|
+
where tt.operativo = aux.operativo and tt.enc = aux.enc and tt.tarea = $3
|
|
1241
|
+
returning *`, [parametros.operativo, 'finc', 'proc'])
|
|
1115
1242
|
.fetchAll();
|
|
1116
1243
|
await context.client.query(`
|
|
1117
1244
|
update tem t
|
|
1118
|
-
set tarea_actual = 'proc'
|
|
1245
|
+
set tarea_actual = 'proc'
|
|
1119
1246
|
from (${select}) aux
|
|
1120
1247
|
where t.operativo = aux.operativo and t.enc = aux.enc
|
|
1121
|
-
returning *`, [parametros.operativo, 'finc'
|
|
1248
|
+
returning *`, [parametros.operativo, 'finc']).fetchAll();
|
|
1122
1249
|
return 'ok';
|
|
1123
1250
|
}
|
|
1124
1251
|
},
|
|
@@ -1259,4 +1386,4 @@ select o.id_casillero as id_formulario, o.unidad_analisis, 'BF_'||o.casillero bo
|
|
|
1259
1386
|
},
|
|
1260
1387
|
];
|
|
1261
1388
|
});
|
|
1262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUFJYixrQ0FBa0M7SUFDbEMsaURBQStCO0lBRy9CLHlEQUE4QztJQUU5QywrQ0FBNkM7SUFDN0MsMkJBQW1DO0lBRW5DLGdEQUFnRDtJQUdoRCx5REFBd0Q7SUFDeEQscUNBQWdDO0lBRWhDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFcEMsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRTNDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUM3QixNQUFNLGNBQWMsR0FBRSxXQUFXLENBQUM7SUFDbEMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7SUFDbkMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFFL0IsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsT0FBd0IsRUFBQyxFQUFFOztRQUNoRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BCLElBQUksTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBQyxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFDdkcsSUFBRyxNQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsMENBQUUsU0FBUyxFQUFDO1lBQ3BCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtTQUM3QjthQUFJO1lBQ0QsTUFBTSxLQUFLLENBQUUscURB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eEo7aUJBQ0o7Z0JBQ0QsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ2hDLENBQUM7U0FDSjtLQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7IFByb2NlZHVyZURlZiwgVGFibGVEZWZpbml0aW9uLCBDbGllbnQsIFRhYmxlRGVmaW5pdGlvbnMgfSBmcm9tIFwiLi90eXBlcy1kbWVuY3VcIjtcclxuaW1wb3J0IHsgUHJvY2VkdXJlQ29udGV4dCwgQ29yZUZ1bmN0aW9uUGFyYW1ldGVycywgRm9yZWlnbktleSB9IGZyb20gXCJtZXRhLWVuY1wiO1xyXG5pbXBvcnQgKiBhcyBsaWtlQXIgZnJvbSBcImxpa2UtYXJcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMtZG1lbmN1XCI7XHJcbmltcG9ydCB7IElkVW5pZGFkQW5hbGlzaXMsIFVuaWRhZEFuYWxpc2lzLCBFc3RhZG9BY2Npb24sIElkRW5jLCBJZFRhcmVhLCBSZXNwdWVzdGFzUmFpeiwgSWRPcGVyYXRpdm8gfSBmcm9tIFwiLi4vdW5sb2dnZWQvdGlwb3NcIjtcclxuXHJcbmltcG9ydCB7anNvbiwganNvbm99IGZyb20gXCJwZy1wcm9taXNlLXN0cmljdFwiO1xyXG5cclxuaW1wb3J0IHtjaGFuZ2luZywgZGF0ZSB9IGZyb20gJ2Jlc3QtZ2xvYmFscyc7XHJcbmltcG9ydCB7cHJvbWlzZXMgYXMgIGZzfSBmcm9tIFwiZnNcIjtcclxuXHJcbmltcG9ydCAqIGFzIEV4cHJlc2lvblBhcnNlciBmcm9tICdleHByZS1wYXJzZXInO1xyXG5pbXBvcnQgeyB0YXJlYXMgfSBmcm9tIFwiLi90YWJsZS10YXJlYXNcIjtcclxuaW1wb3J0IHsgcHJlcGVuZExpc3RlbmVyIH0gZnJvbSBcInByb2Nlc3NcIjtcclxuaW1wb3J0IHsgZ2V0RGlhc0FQYXNhclF1ZXJ5IH0gZnJvbSBcIi4vdGFibGUtdGFyZWFzX3RlbVwiO1xyXG5pbXBvcnQgeyBlcnJvciB9IGZyb20gXCJjb25zb2xlXCI7XHJcblxyXG52YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcclxudmFyIHNxbFRvb2xzID0gcmVxdWlyZSgnc3FsLXRvb2xzJyk7XHJcblxyXG52YXIgZGlzY3JlcGFuY2VzID0gcmVxdWlyZSgnZGlzY3JlcGFuY2VzJyk7XHJcblxyXG5jb25zdCBmb3JtUHJpbmNpcGFsID0gJ0Y6RjEnO1xyXG5jb25zdCBNQUlOX1RBQkxFTkFNRSA9J3ZpdmllbmRhcyc7XHJcbmNvbnN0IEVTVEFET19QT1NURVJJT1JfQ0FSR0EgPSAnQyc7XHJcbmNvbnN0IEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0EgPSAnRCc7XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0T3BlcmF0aXZvQWN0dWFsID0gYXN5bmMgKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCk9PntcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICB2YXIgcmVzdWx0ID0gYXdhaXQgYmUucHJvY2VkdXJlLnRhYmxlX2RhdGEuY29yZUZ1bmN0aW9uKGNvbnRleHQse3RhYmxlOiBgcGFyYW1ldHJvc2AsIGZpeGVkRmllbGRzOltdfSk7XHJcbiAgICBpZihyZXN1bHRbMF0/Lm9wZXJhdGl2byl7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFswXS5vcGVyYXRpdm9cclxuICAgIH1lbHNle1xyXG4gICAgICAgIHRocm93IEVycm9yICgnbm8gc2UgY29uZmlndXLDsyB1biBvcGVyYXRpdm8gZW4gbGEgdGFibGEgcGFyw6FtZXRyb3MnKTtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbi8qZGVmaW5pY2nDs24gZGUgZXN0cnVjdHVyYSBjb21wbGV0YSwgY3VhbmRvIGV4aXN0YSBpbmctZW5jIGhheSBxdWUgcG9uZXJsbyBhaMOtKi8gXHJcbnR5cGUgRXN0cnVjdHVyYVRhYmxhPXt0YWJsZU5hbWU6c3RyaW5nLCBwa0ZpZWxkczp7ZmllbGROYW1lOnN0cmluZ31bXSwgY2hpbGRUYWJsZXM6RXN0cnVjdHVyYVRhYmxhW119O1xyXG5mdW5jdGlvbiBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCB0YWJsZU5hbWU6c3RyaW5nKXtcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICB2YXIgbWFpblRhYmxlRGVmOlRhYmxlRGVmaW5pdGlvbiA9IGJlLnRhYmxlU3RydWN0dXJlc1t0YWJsZU5hbWVdKGNvbnRleHQpO1xyXG4gICAgdmFyIGdldFBrRnJvbVRhYmxlRGVmID0gZnVuY3Rpb24gZ2V0UGtGcm9tVGFibGVEZWYodGFibGVEZWY6VGFibGVEZWZpbml0aW9uKXtcclxuICAgICAgICByZXR1cm4gdGFibGVEZWYucHJpbWFyeUtleS5tYXAoZnVuY3Rpb24ocGspe1xyXG4gICAgICAgICAgICByZXR1cm4ge2ZpZWxkTmFtZTpwa307XHJcbiAgICAgICAgfSlcclxuICAgIH07XHJcbiAgICB2YXIgZ2V0RmtGcm9tVGFibGVEZWYgPSBmdW5jdGlvbiBnZXRGa0Zyb21UYWJsZURlZih0YWJsZURlZjpUYWJsZURlZmluaXRpb24sIHBhcmVudFRhYmxlTmFtZTogc3RyaW5nKXtcclxuICAgICAgICAvLyByZXR1cm4gdGFibGVEZWYuZm9yZWlnbktleXM/IHRhYmxlRGVmLmZvcmVpZ25LZXlzLm1hcChmaz0+ZmsuZmllbGRzKTogW107XHJcbiAgICAgICAgbGV0IHBhcmVudEZrID0gKDxGb3JlaWduS2V5W10+IHRhYmxlRGVmLmZvcmVpZ25LZXlzKS5maW5kKGZrPT5may5yZWZlcmVuY2VzID09IHBhcmVudFRhYmxlTmFtZSk7XHJcbiAgICAgICAgcmV0dXJuIHBhcmVudEZrPyBwYXJlbnRGay5maWVsZHM6IFtdO1xyXG4gICAgfVxyXG4gICAgdmFyIHN0cnVjdDpFc3RydWN0dXJhVGFibGE9e1xyXG4gICAgICAgIHRhYmxlTmFtZTptYWluVGFibGVEZWYubmFtZSxcclxuICAgICAgICBwa0ZpZWxkczpnZXRQa0Zyb21UYWJsZURlZihtYWluVGFibGVEZWYpLFxyXG4gICAgICAgIGNoaWxkVGFibGVzOltdXHJcbiAgICB9O1xyXG4gICAgaWYobWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcyAmJiBtYWluVGFibGVEZWYuZGV0YWlsVGFibGVzLmxlbmd0aCl7XHJcbiAgICAgICAgbWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKGRldGFpbFRhYmxlKXtcclxuICAgICAgICAgICAgc3RydWN0LmNoaWxkVGFibGVzLnB1c2goXHJcbiAgICAgICAgICAgICAgICBjaGFuZ2luZyhcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dCwgZGV0YWlsVGFibGUudGFibGUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHtma0ZpZWxkczogZ2V0RmtGcm9tVGFibGVEZWYoYmUudGFibGVTdHJ1Y3R1cmVzW2RldGFpbFRhYmxlLnRhYmxlXShjb250ZXh0KSwgdGFibGVOYW1lKX1cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0cnVjdDtcclxufVxyXG4vKiBmaW4gZGVmaW5pY2lvbiBlc3RydWN0dXJhIGNvbXBsZXRhICovXHJcblxyXG50eXBlIEFueU9iamVjdCA9IHtbazpzdHJpbmddOmFueX1cclxuXHJcbnZhciBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyA9IChmdW5QYXJhbXM6e3RhcmVhOklkVGFyZWEsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDpSZXNwdWVzdGFzUmFpeiwgc2V0dGVyczpzdHJpbmdbXSwgcGFyYW1zOmFueVtdfSk9PntcclxuICAgIGxldCB7dGFyZWEscmVzcHVlc3Rhc1VBUHJpbmNpcGFsLHNldHRlcnMscGFyYW1zfSA9IGZ1blBhcmFtcztcclxuICAgIGxldCB7cmVzdW1lbkVzdGFkb1N1cCwgY29kTm9SZWFTdXAsIGNvZFJlYVN1cCwgcmVzdW1lbkVzdGFkbywgY29kTm9SZWEsIGNvZFJlYX0gPSByZXNwdWVzdGFzVUFQcmluY2lwYWw7XHJcbiAgICBzZXR0ZXJzID0gc2V0dGVycy5jb25jYXQoW1xyXG4gICAgICAgIGByZXN1bWVuX2VzdGFkbyR7dGFyZWE9PSdzdXBlJz8nX3N1cCc6Jyd9PSQke3BhcmFtcy5sZW5ndGgrMX1gLFxyXG4gICAgICAgIGBub3JlYSR7dGFyZWE9PSdzdXBlJz8nX3N1cCc6Jyd9PSQke3BhcmFtcy5sZW5ndGgrMn1gLFxyXG4gICAgICAgIGByZWEke3RhcmVhPT0nc3VwZSc/J19zdXAnOicnfT0kJHtwYXJhbXMubGVuZ3RoKzN9YFxyXG4gICAgXSlcclxuICAgIHBhcmFtcyA9IHBhcmFtcy5jb25jYXQoW1xyXG4gICAgICAgIHRhcmVhPT0nc3VwZSc/cmVzdW1lbkVzdGFkb1N1cDpyZXN1bWVuRXN0YWRvLFxyXG4gICAgICAgIHRhcmVhPT0nc3VwZSc/Y29kTm9SZWFTdXA6Y29kTm9SZWEsXHJcbiAgICAgICAgdGFyZWE9PSdzdXBlJz9jb2RSZWFTdXA6Y29kUmVhXHJcbiAgICBdKTtcclxuICAgIHJldHVybiB7c2V0dGVycyxwYXJhbXN9XHJcbn1cclxuXHJcbnZhciBndWFyZGFyRW5jdWVzdGFFblRlbSA9IGFzeW5jIChjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIG9wZXJhdGl2bzpJZE9wZXJhdGl2bywgaWRFbmM6SWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbDpSZXNwdWVzdGFzUmFpeiwgdGFyZWE6SWRUYXJlYSk9PntcclxuICAgIHZhciB7cGFyYW1zLHNldHRlcnN9ID0gZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8oe1xyXG4gICAgICAgIHRhcmVhLFxyXG4gICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCxcclxuICAgICAgICBzZXR0ZXJzOiBbYGpzb25fZW5jdWVzdGEgPSAkM2AsIGBmZWNoYV9tb2RpZl9lbmN1ZXN0YSA9IGN1cnJlbnRfdGltZXN0YW1wYF0sXHJcbiAgICAgICAgcGFyYW1zOiBbb3BlcmF0aXZvLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsXVxyXG4gICAgfSlcclxuICAgIHJldHVybiBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICBzZXQgJHtzZXR0ZXJzLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgLFxyXG4gICAgICAgIHBhcmFtc1xyXG4gICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG59XHJcblxyXG52YXIgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3JpbyA9IGFzeW5jIChjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0ICxvcGVyYXRpdm86IHN0cmluZywgZW5jOiBJZEVuYywgdGFyZWE6IElkVGFyZWEsIGpzb25fZW5jdWVzdGE6YW55ICk9PntcclxuICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICBjb25zdCBVQV9QUklOQ0lQQUwgPSBhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgb3BlcmF0aXZvKTtcclxuICAgIHJldHVybiBhd2FpdCBiZS5wcm9jZWR1cmUuZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhci5jb3JlRnVuY3Rpb24oXHJcbiAgICAgICAgY29udGV4dCwgXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBvcGVyYXRpdm86b3BlcmF0aXZvLCBcclxuICAgICAgICAgICAgcGVyc2lzdGVudGVzOntcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXM6e1xyXG4gICAgICAgICAgICAgICAgICAgIFtVQV9QUklOQ0lQQUxdOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtlbmNdOiBqc29uX2VuY3Vlc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGluZm9ybWFjaW9uSGRyOntcclxuICAgICAgICAgICAgICAgICAgICBbZW5jXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIClcclxufVxyXG5cclxuXHJcbnZhciBnZXRIZHJRdWVyeSA9ICBmdW5jdGlvbiBnZXRIZHJRdWVyeShxdW90ZWRDb25kVml2OnN0cmluZyl7XHJcbiAgICByZXR1cm4gYFxyXG4gICAgd2l0aCB2aXZpZW5kYXMgYXMgXHJcbiAgICAgICAgKHNlbGVjdCB0LmVuYywgdC5qc29uX2VuY3Vlc3RhIGFzIHJlc3B1ZXN0YXMsIHQucmVzdW1lbl9lc3RhZG8gYXMgXCJyZXN1bWVuRXN0YWRvXCIsIFxyXG4gICAgICAgICAgICBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAnZG9taW5pbycgICAgICAgLCBkb21pbmlvICAgICAgICxcclxuICAgICAgICAgICAgICAgICdub21jYWxsZScgICAgICAsIG5vbWNhbGxlICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ3NlY3RvcicgICAgICAgICwgc2VjdG9yICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZWRpZmljaW8nICAgICAgLCBlZGlmaWNpbyAgICAgICxcclxuICAgICAgICAgICAgICAgICdlbnRyYWRhJyAgICAgICAsIGVudHJhZGEgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ25yb2NhdGFzdHJhbCcgICwgbnJvY2F0YXN0cmFsICAsXHJcbiAgICAgICAgICAgICAgICAncGlzbycgICAgICAgICAgLCBwaXNvICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICdkZXBhcnRhbWVudG8nICAsIGRlcGFydGFtZW50byAgLFxyXG4gICAgICAgICAgICAgICAgJ2hhYml0YWNpb24nICAgICwgaGFiaXRhY2lvbiAgICAsXHJcbiAgICAgICAgICAgICAgICAnY2FzYScgICAgICAgICAgLCBjYXNhICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICdwcmlvcmlkYWQnICAgICAsIHJlc2VydmErMSAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ29ic2VydmFjaW9uZXMnICwgdHQuY2FyZ2Ffb2JzZXJ2YWNpb25lcyAsXHJcbiAgICAgICAgICAgICAgICAnY2l0YScgICAgICAgICAgLCBjaXRhICxcclxuICAgICAgICAgICAgICAgICdjYXJnYScgICAgICAgICAsIHQuYXJlYSAgICAgICAgIFxyXG4gICAgICAgICAgICApIGFzIHRlbSwgdC5hcmVhLFxyXG4gICAgICAgICAgICAtLVRPRE86IEdFTkVSQUxJWkFSXHJcbiAgICAgICAgICAgIGpzb25iX2J1aWxkX29iamVjdChcclxuICAgICAgICAgICAgICAgICd0YXJlYScsIHR0LnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgJ2ZlY2hhX2FzaWduYWNpb24nLCBmZWNoYV9hc2lnbmFjaW9uLFxyXG4gICAgICAgICAgICAgICAgJ2FzaWduYWRvJywgYXNpZ25hZG8sXHJcbiAgICAgICAgICAgICAgICAnbWFpbl9mb3JtJywgbWFpbl9mb3JtXHJcbiAgICAgICAgICAgICkgYXMgdGFyZWEsXHJcbiAgICAgICAgICAgIG1pbihmZWNoYV9hc2lnbmFjaW9uKSBhcyBmZWNoYV9hc2lnbmFjaW9uXHJcbiAgICAgICAgICAgIGZyb20gdGVtIHQgbGVmdCBqb2luIHRhcmVhc190ZW0gdHQgb24gKHQub3BlcmF0aXZvID0gdHQub3BlcmF0aXZvIGFuZCB0LmVuYyA9IHR0LmVuYyBhbmQgdC50YXJlYV9hY3R1YWwgPSB0dC50YXJlYSlcclxuICAgICAgICAgICAgICAgICAgICAgICBsZWZ0IGpvaW4gdGFyZWFzIHRhIG9uIHQudGFyZWFfYWN0dWFsID0gdGEudGFyZWFcclxuICAgICAgICAgICAgd2hlcmUgdC5oYWJpbGl0YWRhIGFuZCAke3F1b3RlZENvbmRWaXZ9XHJcbiAgICAgICAgICAgIGdyb3VwIGJ5IHQuZW5jLCB0Lmpzb25fZW5jdWVzdGEsIHQucmVzdW1lbl9lc3RhZG8sIGRvbWluaW8sIG5vbWNhbGxlLHNlY3RvcixlZGlmaWNpbywgZW50cmFkYSwgbnJvY2F0YXN0cmFsLCBwaXNvLGRlcGFydGFtZW50byxoYWJpdGFjaW9uLGNhc2EscmVzZXJ2YSx0dC5jYXJnYV9vYnNlcnZhY2lvbmVzLCBjaXRhLCB0LmFyZWEsIHR0LnRhcmVhLCBmZWNoYV9hc2lnbmFjaW9uLCBhc2lnbmFkbywgbWFpbl9mb3JtXHJcbiAgICAgICAgKVxyXG4gICAgICAgIHNlbGVjdCBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAndml2aWVuZGFzJywgJHtqc29ubyhcclxuICAgICAgICAgICAgICAgICAgICBgc2VsZWN0IGVuYywgcmVzcHVlc3RhcywganNvbmJfYnVpbGRfb2JqZWN0KCdyZXN1bWVuRXN0YWRvJyxcInJlc3VtZW5Fc3RhZG9cIikgYXMgb3RyYXMgZnJvbSB2aXZpZW5kYXNgLFxyXG4gICAgICAgICAgICAgICAgICAgICdlbmMnLFxyXG4gICAgICAgICAgICAgICAgICAgIGBvdHJhcyB8fCBjb2FsZXNjZShyZXNwdWVzdGFzLCd7fSc6Ompzb25iKWBcclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICkgYXMgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgJHtqc29uKGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBhcmVhIGFzIGNhcmdhLCBvYnNlcnZhY2lvbmVzX2hkciBhcyBvYnNlcnZhY2lvbmVzLCBtaW4oZmVjaGFfYXNpZ25hY2lvbikgYXMgZmVjaGFcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHZpdmllbmRhcyBpbm5lciBqb2luIGFyZWFzIHVzaW5nIChhcmVhKSBcclxuICAgICAgICAgICAgICAgICAgICBncm91cCBieSBhcmVhLCBvYnNlcnZhY2lvbmVzX2hkcmAsIFxyXG4gICAgICAgICAgICAgICAgJ2ZlY2hhJyl9IGFzIGNhcmdhcyxcclxuICAgICAgICAgICAgJHtqc29ubyhcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgZW5jLCBqc29uYl9idWlsZF9vYmplY3QoJ3RlbScsIHRlbSwgJ3RhcmVhJywgdGFyZWEpIGFzIG90cmFzIGZyb20gdml2aWVuZGFzYCxcclxuICAgICAgICAgICAgICAgICAnZW5jJyxcclxuICAgICAgICAgICAgICAgICBgb3RyYXMgfHwne30nOjpqc29uYmBcclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIGFzIFwiaW5mb3JtYWNpb25IZHJcIlxyXG5gXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgc2V0SGRyUXVlcnkgPSAobXlGdW46KHF1b3RlZENvbmRWaXY6c3RyaW5nKT0+c3RyaW5nKT0+IGdldEhkclF1ZXJ5PW15RnVuXHJcblxyXG5jb25zdCBnZXRVQVByaW5jaXBhbCA9IGFzeW5jIChjbGllbnQ6Q2xpZW50LCBvcGVyYXRpdm86c3RyaW5nKT0+XHJcbiAgICAoYXdhaXQgY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgIGBzZWxlY3QgdW5pZGFkX2FuYWxpc2lzXHJcbiAgICAgICAgICAgIGZyb20gdW5pZGFkX2FuYWxpc2lzXHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIHByaW5jaXBhbFxyXG4gICAgICAgIGBcclxuICAgICAgICAsXHJcbiAgICAgICAgW29wZXJhdGl2b11cclxuICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZVxyXG5cclxudmFyIGZ1bmNpb25lc0Nvbm9jaWRhczp7W2sgaW4gc3RyaW5nXTpib29sZWFufSA9IHt9XHJcblxyXG52YXIgY29tcGlsZXIgPSBuZXcgRXhwcmVzaW9uUGFyc2VyLkNvbXBpbGVyKHtcclxuICAgIGxhbmd1YWdlOidqcycsXHJcbiAgICB2YXJXcmFwcGVyOih2YXJfbmFtZTpzdHJpbmcpPT5gaGVscGVycy5udWxsMnplcm8odmFsb3Jlcy4ke3Zhcl9uYW1lfSlgLFxyXG4gICAgZnVuV3JhcHBlcjooZnVuY3Rpb25OYW1lOnN0cmluZyk9PntcclxuICAgICAgICBpZighZnVuY2lvbmVzQ29ub2NpZGFzW2Z1bmN0aW9uTmFtZV0pe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhmdW5jdGlvbk5hbWUpXHJcbiAgICAgICAgICAgIGZ1bmNpb25lc0Nvbm9jaWRhc1tmdW5jdGlvbk5hbWVdID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGBoZWxwZXJzLmZ1bnMuJHtmdW5jdGlvbk5hbWV9YFxyXG4gICAgfVxyXG59KVxyXG5cclxudHlwZSBDYXNpbGxlcm9EZUFjYT17XHJcbiAgICBjaGlsZHM6IENhc2lsbGVyb0RlQWNhW10sXHJcbiAgICBkYXRhOntcclxuICAgICAgICBleHByZXNpb25faGFiaWxpdGFyOiBzdHJpbmdcclxuICAgICAgICBleHByZXNpb25faGFiaWxpdGFyX2pzOiBzdHJpbmdcclxuICAgICAgICBlc3BlY2lhbDogYW55XHJcbiAgICAgICAgZXhwcmVzaW9uX2F1dG9pbmdyZXNhcl9qczogc3RyaW5nXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNvbXBpbGFyRXhwcmVzaW9uKGV4cHJlc2lvbjpzdHJpbmcpe1xyXG4gICAgcmV0dXJuIGNvbXBpbGVyLnRvQ29kZShFeHByZXNpb25QYXJzZXIucGFyc2UoXHJcbiAgICAgICAgZXhwcmVzaW9uXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGJpcyBkaXN0aW5jdCBmcm9tXFxiL2dpLCcgPD4gJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoLyEhL2dpLCcgJylcclxuICAgICkpLnJlcGxhY2UoL2hlbHBlcnNcXC5mdW5zXFwuYmxhbmNvXFwoaGVscGVycy5udWxsMnplcm9cXCgvZywnaGVscGVycy5mdW5zLmJsYW5jbygoJylcclxuICAgIC5yZXBsYWNlKC9oZWxwZXJzXFwuZnVuc1xcLmluZm9ybWFkb1xcKGhlbHBlcnMubnVsbDJ6ZXJvXFwoL2csJ2hlbHBlcnMuZnVucy5pbmZvcm1hZG8oKCcpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjb21waWxhckV4cHJlc2lvbmVzKGNhc2lsbGVybzpDYXNpbGxlcm9EZUFjYSl7XHJcbiAgICBpZighY2FzaWxsZXJvKXsgcmV0dXJuIH1cclxuICAgIGlmKGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9oYWJpbGl0YXIpe1xyXG4gICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9oYWJpbGl0YXJfanMgPSBjb21waWxhckV4cHJlc2lvbihjYXNpbGxlcm8uZGF0YS5leHByZXNpb25faGFiaWxpdGFyKTtcclxuICAgIH1cclxuICAgIGlmKGNhc2lsbGVyby5kYXRhLmVzcGVjaWFsPy5hdXRvaW5nKXtcclxuICAgICAgICB2YXIgcGFydGVzID0gY2FzaWxsZXJvLmRhdGEuZXNwZWNpYWw/LmF1dG9pbmcuc3BsaXQoJz0+Jyk7XHJcbiAgICAgICAgaWYocGFydGVzLmxlbmd0aD4xKXtcclxuICAgICAgICAgICAgdmFyIHByZWNvbmRpY2lvbiA9IHBhcnRlc1swXTtcclxuICAgICAgICAgICAgdmFyIHZhbG9yID0gcGFydGVzLnNsaWNlKDEpLmpvaW4oJz0+Jyk7XHJcbiAgICAgICAgICAgIGNhc2lsbGVyby5kYXRhLmV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanMgPSBgKCR7Y29tcGlsYXJFeHByZXNpb24ocHJlY29uZGljaW9uKX0pPygke2NvbXBpbGFyRXhwcmVzaW9uKHZhbG9yKX0pOm51bGxgO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjYXNpbGxlcm8uZGF0YS5leHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzID0gY29tcGlsYXJFeHByZXNpb24ocGFydGVzWzBdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IodmFyIGNhc2lsbGVyb0ludGVybm8gb2YgY2FzaWxsZXJvLmNoaWxkcykgY29tcGlsYXJFeHByZXNpb25lcyhjYXNpbGxlcm9JbnRlcm5vKTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IEFDQ0lPTl9QQVNBUl9QUk9JRSA9ICdlbmN1ZXN0YXNfcHJvY2VzYW1pZW50b19wYXNhcic7XHJcbmV4cG9ydCBjb25zdCBQcm9jZWR1cmVzRG1FbmN1IDogUHJvY2VkdXJlRGVmW10gPSBbXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidvcGVyYXRpdm9fZXN0cnVjdHVyYV9jb21wbGV0YScsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICAgICAgLHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczonb3BlcmF0aXZvcyd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6J2Rlc3BsZWdhckZvcm11bGFyaW8nLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgY2FzaWxsZXJvc19qZXJhcnF1aXphZG9zKCQxKSBhcyBmb3JtdWxhcmlvcywgXHJcbiAgICAgICAgICAgICAgICAgICAgJHtqc29ubyhgc2VsZWN0IHVuaWRhZF9hbmFsaXNpcywgcGFkcmUsIHBrX2FncmVnYWRhLCAne30nOjpqc29uYiBhcyBoaWphcyBmcm9tIHVuaWRhZF9hbmFsaXNpcyB3aGVyZSBvcGVyYXRpdm8gPSAkMmAsICd1bmlkYWRfYW5hbGlzaXMnKX0gYXMgdW5pZGFkZXNfYW5hbGlzaXNcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm8sIHBhcmFtZXRlcnMub3BlcmF0aXZvXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGxpa2VBcihyZXN1bHQucm93LmZvcm11bGFyaW9zKS5mb3JFYWNoKGY9PmNvbXBpbGFyRXhwcmVzaW9uZXMoZikpO1xyXG4gICAgICAgICAgICAvLyBIZXJtYW5vcyBzb24gbG9zIGZvcm11bGFyaW9zIHF1ZSBlc3TDoW4gaW1wbGFudGFkb3MgZW4gb3RybyBmb3JtdWxhcmlvIGRlIGxhIG1pc21hIFVBLiBQb3IgZWplbXBsbyBlbCBBMSBlbiBlbCBTMVxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0SGVybWFub3MgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbnNlbGVjdCBvLmlkX2Nhc2lsbGVybyBhcyBpZF9mb3JtdWxhcmlvLCBvLnVuaWRhZF9hbmFsaXNpcywgJ0JGXyd8fG8uY2FzaWxsZXJvIGJvdG9uLCBiZi5jYXNpbGxlcm8sIGJmLnBhZHJlLCBmcC5jYXNpbGxlcm8sIGZwLnVuaWRhZF9hbmFsaXNpc1xyXG4gIGZyb20gY2FzaWxsZXJvcyBvIGxlZnQgam9pbiBjYXNpbGxlcm9zIGJmXHJcbiAgICBvbiBiZi50aXBvYz0nQkYnXHJcblx0YW5kIGJmLmNhc2lsbGVybyA9ICdCRl8nfHxvLmNhc2lsbGVyb1xyXG5cdGFuZCBiZi5vcGVyYXRpdm8gPSBvLm9wZXJhdGl2b1xyXG5cdGxlZnQgam9pbiBjYXNpbGxlcm9zIGZwXHJcblx0ICBvbiBmcC5pZF9jYXNpbGxlcm8gPSBiZi5wYWRyZVxyXG5cdCAgYW5kIGZwLm9wZXJhdGl2byA9IGJmLm9wZXJhdGl2b1xyXG4gIHdoZXJlIG8udGlwb2MgPSAnRidcclxuICAgIGFuZCBvLnVuaWRhZF9hbmFsaXNpcyA9IGZwLnVuaWRhZF9hbmFsaXNpc1xyXG5cdGFuZCBvLm9wZXJhdGl2byA9ICQxYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbWV0ZXJzLm9wZXJhdGl2b11cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICByZXN1bHRIZXJtYW5vcy5yb3dzLmZvckVhY2gocm93PT57XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucm93LmZvcm11bGFyaW9zW3Jvdy5pZF9mb3JtdWxhcmlvXS5kYXRhLmhlcm1hbm8gPSB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBmdW5jdGlvbiBjb21wbGV0YXJVQSh1YTpVbmlkYWRBbmFsaXNpcywgaWRVYTpJZFVuaWRhZEFuYWxpc2lzLCB1QXM6e1trIGluIElkVW5pZGFkQW5hbGlzaXNdOiBVbmlkYWRBbmFsaXNpc30pe1xyXG4gICAgICAgICAgICAgICAgaWYodWEucGFkcmUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHVBc1t1YS5wYWRyZV0uaGlqYXNbaWRVYV0gPSB1YTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHVhLnByaW5jaXBhbD10cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxpa2VBcihyZXN1bHQucm93LnVuaWRhZGVzX2FuYWxpc2lzKS5mb3JFYWNoKCh1YSwgaWRVYSk9PlxyXG4gICAgICAgICAgICAgICAgY29tcGxldGFyVUEodWEsIGlkVWEgYXMgSWRVbmlkYWRBbmFsaXNpcywgcmVzdWx0LnJvdy51bmlkYWRlc19hbmFsaXNpcylcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB2YXIge2Nvbl9yZWFfaG9nYXI6IGNvblJlYUhvZ2FyLCBjb25maWdfc29ydGVvOiBjb25maWdTb3J0ZW8sIGhhYmlsaXRhY2lvbl9ib3Rvbl9mb3JtdWxhcmlvOmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb30gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0IGNvbmZpZ19zb3J0ZW8sIGNvbl9yZWFfaG9nYXIsIGhhYmlsaXRhY2lvbl9ib3Rvbl9mb3JtdWxhcmlvIFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gb3BlcmF0aXZvcyBcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMVxyXG4gICAgICAgICAgICBgLFtwYXJhbWV0ZXJzLm9wZXJhdGl2b10pLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgICAgICAgICAgbGV0IGNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyA9IChleHByZXNpb25lc0RvbWluaW86YW55KT0+IFxyXG4gICAgICAgICAgICAgICAgbGlrZUFyKGV4cHJlc2lvbmVzRG9taW5pbylcclxuICAgICAgICAgICAgICAgICAgICAubWFwKChleHByLGRvbWluaW8pPT4oe2RvbWluaW8sIGV4cHI6Y29tcGlsYXJFeHByZXNpb24oZXhwci5leHByKX0pKVxyXG4gICAgICAgICAgICAgICAgICAgIC5wbGFpbigpO1xyXG4gICAgICAgICAgICBpZihjb25maWdTb3J0ZW8pe1xyXG4gICAgICAgICAgICAgICAgbGlrZUFyKGNvbmZpZ1NvcnRlbykuZm9yRWFjaCgoY29uZmlnU29ydGVvRm9ybXVsYXJpbyk9PntcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmV4cHJfaW5jb21wbGV0aXR1ZF9qcz1jb21waWxhckV4cHJlc2lvbmVzRG9taW5pb3MoY29uZmlnU29ydGVvRm9ybXVsYXJpby5leHByX2luY29tcGxldGl0dWQpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5maWx0cm9fanM9Y29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZmlsdHJvKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8pe1xyXG4gICAgICAgICAgICAgICAgbGlrZUFyKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbykuZm9yRWFjaCgoZm9ybSk9PntcclxuICAgICAgICAgICAgICAgICAgICBmb3JtLmV4cHJfaGFiaWxpdGFyX2JvdG9uX2pzPWNvbXBpbGFyRXhwcmVzaW9uKGZvcm0uZXhwcl9oYWJpbGl0YXJfYm90b24pXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7dGltZXN0YW1wOiBiZS5jYWNoZXMudGltZXN0YW1wRXN0cnVjdHVyYSwgLi4ucmVzdWx0LnJvdywgb3BlcmF0aXZvOnBhcmFtZXRlcnMub3BlcmF0aXZvLCBjb25SZWFIb2dhciwgY29uZmlnU29ydGVvLCBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sIG5vUmVhczpiZS5jYWNoZXMudGFibGVDb250ZW50Lm5vX3JlYSwgbm9SZWFzU3VwOmJlLmNhY2hlcy50YWJsZUNvbnRlbnQubm9fcmVhX3N1cH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2dlbmVyYXJfZm9ybXVsYXJpb3MnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonYW5uaW8nLCB0eXBlTmFtZTonaW50ZWdlcicsIHJlZmVyZW5jZXM6J2FubmlvJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOidtZXMnICAsIHR5cGVOYW1lOidpbnRlZ2VyJywgcmVmZXJlbmNlczonbWVzJyAgfSxcclxuICAgICAgICAgICAge25hbWU6J2xvdGUnICwgdHlwZU5hbWU6J2ludGVnZXInLCByZWZlcmVuY2VzOidsb3Rlcyd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdFVBID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgIGZyb20gdW5pZGFkX2FuYWxpc2lzXHJcbiAgICAgICAgICAgICAgICAgICB3aGVyZSBwcmluY2lwYWwgPSB0cnVlIGFuZCBvcGVyYXRpdm8gPSAkMVxyXG4gICAgICAgICAgICAgICAgYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0VUEucm93Q291bnQgPT09IDApe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBzZSBjb25maWd1csOzIHVuYSB1bmlkYWQgZGUgYW5hbGlzaXMgY29tbyBwcmluY2lwYWwnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgcm93ID0gcmVzdWx0VUEucm93O1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0UHJlZ3VudGFzID0gYXdhaXQgYmUucHJvY2VkdXJlLnByZWd1bnRhc191YV90cmFlci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcm93KVxyXG4gICAgICAgICAgICB2YXIgY29udGVuZWRvclZhY2lvOntba2V5OnN0cmluZ106YW55fSA9IHt9O1xyXG4gICAgICAgICAgICByZXN1bHRQcmVndW50YXMuZm9yRWFjaChmdW5jdGlvbihkZWZQcmVndW50YSl7XHJcbiAgICAgICAgICAgICAgICBjb250ZW5lZG9yVmFjaW9bZGVmUHJlZ3VudGEudmFyX25hbWVdID0gZGVmUHJlZ3VudGEudW5pZGFkX2FuYWxpc2lzP1tdOm51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8uYW5uaW89IHBhcmFtZXRlcnMuYW5uaW87XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5tZXMgID0gcGFyYW1ldGVycy5tZXMgIDtcclxuICAgICAgICAgICAgY29udGVuZWRvclZhY2lvLmxvdGUgPSBwYXJhbWV0ZXJzLmxvdGUgO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBkZWJlX2hhYmVyLmlkX2Nhc28sIHMgYXMgaWRcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgbG90ZSwgYXJtYXJfaWQoYW5uaW8sIG1lcywgbG90ZSwgcykgYXMgaWRfY2Fzbywgc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tIChzZWxlY3QgYW5uaW8sbWVzLGxvdGUsIGNhbnRfY3VlcyBmcm9tIGxvdGVzIHdoZXJlIChhbm5pbyxtZXMsbG90ZSk9KCQyLCQzLCQ0KSkgciwgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJpZXMoMSxjYW50X2N1ZXMpIHNcclxuICAgICAgICAgICAgICAgICAgICApIGRlYmVfaGFiZXIgbGVmdCBqb2luIGRlZmdlbiBoYXkgb24gaGF5LmlkX2Nhc28gPSBkZWJlX2hhYmVyLmlkX2Nhc28gYW5kIGhheS5vcGVyYXRpdm89JDFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBoYXkuaWRfY2FzbyBpcyBudWxsYCxcclxuICAgICAgICAgICAgICAgIFsgT1BFUkFUSVZPLCBwYXJhbWV0ZXJzLmFubmlvLCBwYXJhbWV0ZXJzLm1lcywgcGFyYW1ldGVycy5sb3RlXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7b3BlcmF0aXZvOiBPUEVSQVRJVk99O1xyXG4gICAgICAgICAgICBmb3IodmFyIGk9MDsgaSA8IHJlc3VsdC5yb3dDb3VudDsgaSsrKXtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQsIFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5naW5nKHBhcmFtcyx7aWRfY2FzbzpyZXN1bHQucm93c1tpXS5pZF9jYXNvLCBkYXRvc19jYXNvOmNoYW5naW5nKGNvbnRlbmVkb3JWYWNpbyx7aWQ6cmVzdWx0LnJvd3NbaV0uaWR9KX0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHthZ3JlZ2FkYXM6cmVzdWx0LnJvd0NvdW50fVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOid1cGxvYWRfZmlsZScsXHJcbiAgICAgICAgcHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOiAnaWRfYWRqdW50bycsIHR5cGVOYW1lOiAnaW50ZWdlcid9LFxyXG4gICAgICAgICAgICB7bmFtZTogJ25vbWJyZScsIHR5cGVOYW1lOiAndGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgZmlsZXM6e2NvdW50OjF9LFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjpmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycywgZmlsZXMpe1xyXG4gICAgICAgICAgICBsZXQgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgbGV0IGNsaWVudD1jb250ZXh0LmNsaWVudDtcclxuICAgICAgICAgICAgY29udGV4dC5pbmZvcm1Qcm9ncmVzcyh7bWVzc2FnZTpiZS5tZXNzYWdlcy5maWxlVXBsb2FkZWR9KTtcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBmaWxlc1swXVxyXG4gICAgICAgICAgICBsZXQgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGUucGF0aCkuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxGaWxlbmFtZSA9IGZpbGUub3JpZ2luYWxGaWxlbmFtZS5zbGljZSgwLC0oZXh0Lmxlbmd0aCsxKSk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlbmFtZT0gcGFyYW1ldGVycy5ub21icmUgfHwgb3JpZ2luYWxGaWxlbmFtZTtcclxuICAgICAgICAgICAgbGV0IG5ld1BhdGggPSAnbG9jYWwtYXR0YWNobWVudHMvZmlsZS0nO1xyXG4gICAgICAgICAgICB2YXIgY3JlYXRlUmVzcG9uc2UgPSBmdW5jdGlvbiBjcmVhdGVSZXNwb25zZShhZGp1bnRvUm93KXtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0xhIHN1YmlkYSBzZSByZWFsaXrDsyBjb3JyZWN0YW1lbnRlICh1cGRhdGUpJyxcclxuICAgICAgICAgICAgICAgICAgICBub21icmU6IGFkanVudG9Sb3cubm9tYnJlLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vbWJyZV9vcmlnaW5hbDogYWRqdW50b1Jvdy5ub21icmVfb3JpZ2luYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgZXh0OiBhZGp1bnRvUm93LmV4dCxcclxuICAgICAgICAgICAgICAgICAgICBmZWNoYTogYWRqdW50b1Jvdy5mZWNoYSxcclxuICAgICAgICAgICAgICAgICAgICBob3JhOiBhZGp1bnRvUm93LmhvcmEsXHJcbiAgICAgICAgICAgICAgICAgICAgaWRfYWRqdW50bzogYWRqdW50b1Jvdy5pZF9hZGp1bnRvXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIG1vdmVGaWxlID0gZnVuY3Rpb24gbW92ZUZpbGUoZmlsZSwgaWRfYWRqdW50bywgZXh0ZW5zaW9uKXtcclxuICAgICAgICAgICAgICAgIGZzLm1vdmUoZmlsZS5wYXRoLCBuZXdQYXRoICsgaWRfYWRqdW50byArICcuJyArIGV4dGVuc2lvbiwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIGlmKHBhcmFtZXRlcnMuaWRfYWRqdW50byl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuY2xpZW50LnF1ZXJ5KGB1cGRhdGUgYWRqdW50b3Mgc2V0IG5vbWJyZT0gJDEsbm9tYnJlX29yaWdpbmFsID0gJDIsIGV4dCA9ICQzLCBydXRhID0gY29uY2F0KCdsb2NhbC1hdHRhY2htZW50cy9maWxlLScsJDQ6OnRleHQsJy4nLCQzOjp0ZXh0KSwgZmVjaGEgPSBub3coKSwgaG9yYSA9IGRhdGVfdHJ1bmMoJ3NlY29uZHMnLGN1cnJlbnRfdGltZXN0YW1wLWN1cnJlbnRfZGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaWRfYWRqdW50byA9ICQ0IHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbGVuYW1lLCBvcmlnaW5hbEZpbGVuYW1lLCBleHQsIHBhcmFtZXRlcnMuaWRfYWRqdW50b11cclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVzcG9uc2UocmVzdWx0LnJvdylcclxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdGFkbyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUscmVzdWx0YWRvLmlkX2FkanVudG8scmVzdWx0YWRvLmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgaW5zZXJ0IGludG8gYWRqdW50b3MgKG5vbWJyZSwgbm9tYnJlX29yaWdpbmFsLCBleHQsIGZlY2hhLCBob3JhKSB2YWx1ZXMgKCQxLCQyLCQzLG5vdygpLCBkYXRlX3RydW5jKCdzZWNvbmRzJyxjdXJyZW50X3RpbWVzdGFtcC1jdXJyZW50X2RhdGUpKSByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlbmFtZSwgb3JpZ2luYWxGaWxlbmFtZSwgZXh0XVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgdXBkYXRlIGFkanVudG9zIHNldCBydXRhID0gY29uY2F0KCdsb2NhbC1hdHRhY2htZW50cy9maWxlLScsaWRfYWRqdW50bzo6dGV4dCwnLicsZXh0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaWRfYWRqdW50byA9ICQxIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHQucm93LmlkX2FkanVudG9dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVzcG9uc2UocmVzdWx0LnJvdylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbihyZXN1bHRhZG8pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92ZUZpbGUoZmlsZSxyZXN1bHRhZG8uaWRfYWRqdW50byxyZXN1bHRhZG8uZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycil7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidjYXNvX2d1YXJkYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICwgdHlwZU5hbWU6J3RleHQnLCByZWZlcmVuY2VzOidvcGVyYXRpdm9zJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOidpZF9jYXNvJyAgICAgLCB0eXBlTmFtZTondGV4dCcgICAgICB9LFxyXG4gICAgICAgICAgICB7bmFtZTonZGF0b3NfY2FzbycgICwgdHlwZU5hbWU6J2pzb25iJyAgICAgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGRlZmluZWRJbjogJ2RtZW5jdScsXHJcbiAgICAgICAgLy9AdHMtaWdub3JlIGVzcGVjaWZpY28gZWwgdGlwbyBkZSBsb3MgcGFyw6FtZXRyb3NcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOntcclxuICAgICAgICAgICAgb3BlcmF0aXZvOnN0cmluZywgXHJcbiAgICAgICAgICAgIGlkX2Nhc286c3RyaW5nLFxyXG4gICAgICAgICAgICBkYXRvc19jYXNvOkFueU9iamVjdFxyXG4gICAgICAgIH0sbmV3Q2xpZW50OkNsaWVudCl7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnQ9bmV3Q2xpZW50IHx8IGNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICB2YXIgZGF0b3NfanNvbj1wYXJhbWV0ZXJzLmRhdG9zX2Nhc287XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB0YWJsZVN0cnVjdHVyZXNfYXBwOlRhYmxlRGVmaW5pdGlvbnMgPSBiZS50YWJsZVN0cnVjdHVyZXM7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBzdHJ1Y3RfZG1lbmN1ID0gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIE1BSU5fVEFCTEVOQU1FKTtcclxuICAgICAgICAgICAgZGF0b3NfanNvblsnb3BlcmF0aXZvJ10gPSBwYXJhbWV0ZXJzLm9wZXJhdGl2bztcclxuICAgICAgICAgICAgLy9UT0RPIDogdml2aWVuZGEgw7MgZW5jPz8/XHJcbiAgICAgICAgICAgIGRhdG9zX2pzb25bJ3ZpdmllbmRhJ10gPSBwYXJhbWV0ZXJzLmlkX2Nhc287XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRhcl91bHRfcGtfZW5fYXJyKCB1bHRfcGssIHVhX2Fycil7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29uX3BrX2NvbXBsZXRhPXVhX2FycjsgXHJcbiAgICAgICAgICAgICAgICBpZiAodWFfYXJyICYmIHVhX2Fyci5sZW5ndGg+PTEpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbl9wa19jb21wbGV0YT0gY29uX3BrX2NvbXBsZXRhLm1hcCgodW5hX3VhLGkpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuYV91YVt1bHRfcGtdPWkrMSAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5hX3VhO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbl9wa19jb21wbGV0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZGF0b3NqKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXlOYW1lIGluIGRhdG9zaikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRvSyA9IGRhdG9zaltrZXlOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0b0sgaW5zdGFuY2VvZiBBcnJheSAmJiBkYXRvSy5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGsgPSB0YWJsZVN0cnVjdHVyZXNfYXBwW2tleU5hbWVdKGNvbnRleHQpLnByaW1hcnlLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bHRfcGsgPSBwa1tway5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0b0sgPSBjb21wbGV0YXJfdWx0X3BrX2VuX2Fycih1bHRfcGssIGRhdG9LKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0b0suZm9yRWFjaCgoZWxlbUkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1JPXJlY29ycmVyX2RhdG9zX2FncmVnYW5kb19wa3MoZWxlbUkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlOYW1lLnN0YXJ0c1dpdGgoJyQnKXx8a2V5TmFtZS5zdGFydHNXaXRoKCdfJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRhdG9zaltrZXlOYW1lXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b3NqO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGRhdG9zX2pzb24gPSByZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGRhdG9zX2pzb24pO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2RSZWE7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLmNvZE5vUmVhO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5yZXN1bWVuRXN0YWRvO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2RSZWFTdXA7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRvc19qc29uLmNvZE5vUmVhU3VwO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5yZXN1bWVuRXN0YWRvU3VwO1xyXG5cclxuICAgICAgICAgICAgaWYoIE9iamVjdC5rZXlzKGRhdG9zX2pzb24pLmxlbmd0aCA+Mil7XHJcbiAgICAgICAgICAgICAgICB2YXIgcXVlcmllcyA9IHNxbFRvb2xzLnN0cnVjdHVyZWREYXRhLnNxbFdyaXRlKGRhdG9zX2pzb24sIHN0cnVjdF9kbWVuY3UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHF1ZXJpZXMucmVkdWNlKGZ1bmN0aW9uKHByb21pc2UsIHF1ZXJ5KXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xpZW50LnF1ZXJ5KHF1ZXJ5KS5leGVjdXRlKCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxQcm9taXNlLnJlc29sdmUoKSkudGhlbihmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm9rXCI7XHJcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnI6RXJyb3Ipe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Fzb19ndWFyZGFyIEVOVFJBIEVOIEVMIENBVENIOiBcIixlcnIpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiAndmFjaW8nO1xyXG4gICAgICAgICAgICB9ICAgIFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY2Fzb190cmFlcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICAvL3tuYW1lOidmb3JtdWxhcmlvJyAgICAsICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgLHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnLCAgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2lkX2Nhc28nICAgICAgICx0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdnb1RvRW5jJyxcclxuICAgICAgICBkZWZpbmVkSW46ICdkbWVuY3UnLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBjbGllbnQ9Y29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgICB2YXIgc3RydWN0X2RtZW5jdSA9IGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0LCBNQUlOX1RBQkxFTkFNRSk7XHJcbiAgICAgICAgICAgIHZhciBzcWwgPSBzcWxUb29scy5zdHJ1Y3R1cmVkRGF0YS5zcWxSZWFkKHtvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLCB2aXZpZW5kYTpwYXJhbWV0ZXJzLmlkX2Nhc299LCBzdHJ1Y3RfZG1lbmN1KTtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGF3YWl0IGNsaWVudC5xdWVyeShzcWwpLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0ge1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIHZpdmllbmRhOiBwYXJhbWV0ZXJzLmlkX2Nhc28sXHJcbiAgICAgICAgICAgICAgICBkYXRvc19jYXNvOiByZXN1bHQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICAvL2Zvcm11bGFyaW86IGZvcm1QcmluY2lwYWwsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2Nhc29fdHJhZXJfb19jcmVhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgLHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnLCAgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2lkX2Nhc28nICAgICAgICx0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgcmVzdWx0T2s6ICdnb1RvRW5jJyxcclxuICAgICAgICAvLyBiaXRhY29yYTp7YWx3YXlzOnRydWV9LFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBiZS5wcm9jZWR1cmVbJ2Nhc29fdHJhZXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGpzb24gPSBhd2FpdCBiZS5wcm9jZWR1cmVbJ2Nhc29fcHJlcGFyYXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmVbJ2Nhc29fZ3VhcmRhciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBjaGFuZ2luZyhwYXJhbWV0ZXJzLCB7ZGF0b3NfY2Fzbzpqc29ufSkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGJlLnByb2NlZHVyZVsnY2Fzb190cmFlciddLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbWV0ZXJzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidwYXNhcl9qc29uMnVhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIF9wYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICAvKiBHRU5FUkFMSVpBUjogKi9cclxuICAgICAgICAgICAgdmFyIGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIC8qIEZJTi1HRU5FUkFMSVpBUjogKi9cclxuICAgICAgICAgICAgY29uc3QgT1BFUkFUSVZPID0gYXdhaXQgZ2V0T3BlcmF0aXZvQWN0dWFsKGNvbnRleHQpO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0TWFpbiA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBTRUxFQ1QgKiBGUk9NICR7TUFJTl9UQUJMRU5BTUV9IExJTUlUIDFgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBpZihyZXN1bHRNYWluLnJvd0NvdW50PjApe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0hBWSBEQVRPUycscmVzdWx0TWFpbi5yb3dzKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIQVkgREFUT1MuIE5PIFNFIFBVRURFIElOSUNJQVIgRUwgUEFTQUpFJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHJlc3VsdEpzb24gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBTRUxFQ1Qgb3BlcmF0aXZvLCBlbmMgaWRfY2FzbywganNvbl9lbmN1ZXN0YSBkYXRvc19jYXNvIGZyb20gdGVtIFxyXG4gICAgICAgICAgICAgICAgICAgIFdIRVJFIG9wZXJhdGl2bz0kMSBhbmQgcmVzdW1lbl9lc3RhZG8gaXMgZGlzdGluY3QgZnJvbSAndmFjaW8nIGFuZCBqc29uX2VuY3Vlc3RhIGlzIG5vdCBudWxsIFxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyIGJ5IGVuYyBgLFxyXG4gICAgICAgICAgICAgICAgW09QRVJBVElWT11cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICB2YXIgcHJvY2VkdXJlR3VhcmRhciA9IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXI7XHJcbiAgICAgICAgICAgIGlmKHByb2NlZHVyZUd1YXJkYXIuZGVmaW5lZEluIT0nZG1lbmN1Jyl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hheSBxdWUgc29icmVlc2NyaWJpciBjYXNvX2d1YXJkYXInKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmVzdWx0SnNvbi5yb3dzLm1hcChhc3luYyBmdW5jdGlvbihyb3cpe1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdGFkbyA9IGBpZCBjYXNvICR7cm93LmlkX2Nhc299OiBgO1xyXG4gICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLmluVHJhbnNhY3Rpb24obnVsbCwgYXN5bmMgZnVuY3Rpb24oY2xpZW50KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcm93LCBjbGllbnQpOyAgICBcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2UgPSByZXN1bHRhZG8gKyBcImpzb24ydWEgZXJyb3IuIFwiKyBlcnIgO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJNZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgfSAgICAgXHJcbiAgICAgICAgICAgICAgICBpZihyZXN1bHRhZG8uaW5jbHVkZXMoJ29rJykpeyBcclxuICAgICAgICAgICAgICAgICAgICB2YXIge2RhdG9zX2Nhc28sIHZpdmllbmRhLCBvcGVyYXRpdm99ID0gYXdhaXQgYmUucHJvY2VkdXJlLmNhc29fdHJhZXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHtvcGVyYXRpdm86cm93Lm9wZXJhdGl2bywgaWRfY2Fzbzpyb3cuaWRfY2Fzb30pXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZlclF1ZUdyYWJvID0ge2RhdG9zX2Nhc28sIHZpdmllbmRhLCBvcGVyYXRpdm99XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNjcmVwYW5jZXMuc2hvd0FuZFRocm93KHZlclF1ZUdyYWJvLHJvdylcclxuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codmVyUXVlR3JhYm8scm93KVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRhZG87XHJcbiAgICAgICAgICAgIH0pKS5jYXRjaChmdW5jdGlvbihlcnIpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidkbV9mb3Jwa3JhaXpfY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid2aXZpZW5kYScgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnLCByZWZlcmVuY2VzOlwidGFyZWFzXCJ9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmU9Y29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sdml2aWVuZGEsIHRhcmVhfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIHZhciBtYWluX2Zvcm0gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IG1haW5fZm9ybVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgdGFyZWE9JDJgXHJcbiAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCB0YXJlYV1cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCkpLnZhbHVlO1xyXG4gICAgICAgICAgICB2YXIgY29uZHZpdj0gYCB0Lm9wZXJhdGl2bz0gJDEgYW5kIHQuZW5jID0kMmA7XHJcbiAgICAgICAgICAgIHZhciBzb2xvTGVjdHVyYSA9ICEhKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3RlbSBqb2luIGVzdGFkb3MgdXNpbmcgKG9wZXJhdGl2bywgZXN0YWRvKSAtLXBrIGVzdGFkbyB2ZXJpZmljYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZ2Fkb19kbSBpcyBub3QgbnVsbCBvciBcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBlcm1pdGVfZWRpdGFyX2VuY3Vlc3RhIGFuZCBhc2lnbmFkbyA8PiAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKGNvbnRleHQudXNlci5pZHBlcil9XHJcbiAgICAgICAgICAgICAgICAgICAgKWAsIFtvcGVyYXRpdm8sIHZpdmllbmRhXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpKS5yb3dDb3VudDtcclxuICAgICAgICAgICAgdmFyIHtyb3d9ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoZ2V0SGRyUXVlcnkoY29uZHZpdiksW29wZXJhdGl2byx2aXZpZW5kYV0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJvdy5pbmZvcm1hY2lvbkhkclt2aXZpZW5kYV0udGFyZWE9e1xyXG4gICAgICAgICAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgICAgICAgICBtYWluX2Zvcm1cclxuICAgICAgICAgICAgfSA7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5yb3csXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICBzb2xvTGVjdHVyYSxcclxuICAgICAgICAgICAgICAgIGlkUGVyOmNvbnRleHQudXNlci5pZHBlcixcclxuICAgICAgICAgICAgICAgIGNhcmdhczpsaWtlQXIuY3JlYXRlSW5kZXgocm93LmNhcmdhcy5tYXAoY2FyZ2E9Pih7Li4uY2FyZ2EsIGZlY2hhOmNhcmdhLmZlY2hhP2RhdGUuaXNvKGNhcmdhLmZlY2hhKS50b0RteSgpOm51bGx9KSksICdjYXJnYScpLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wRXN0cnVjdHVyYTpiZS5jYWNoZXMudGltZXN0YW1wRXN0cnVjdHVyYVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidkbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidwZXJzaXN0ZW50ZXMnICAgICAgLCB0eXBlTmFtZTonanNvbmInfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLCBwZXJzaXN0ZW50ZXN9ID0gcGFyYW1ldGVycztcclxuICAgICAgICAgICAgY29uc3QgVUFfUFJJTkNJUEFMID0gYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIG9wZXJhdGl2byk7XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGxpa2VBcihwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdKS5tYXAoYXN5bmMgKHJlc3B1ZXN0YXNVQVByaW5jaXBhbCxpZEVuYyk9PntcclxuICAgICAgICAgICAgICAgIGlmKHJlc3B1ZXN0YXNVQVByaW5jaXBhbC5zMWExX29icyA9PSAnIXBydWViYSBkZSBlcnJvciBhbCBncmFiYXIhJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdESU8gUFJVRUJBIERFIEVSUk9SIEFMIEdSQUJBUicpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgZ3VhcmRhckVuY3Vlc3RhRW5UZW0oY29udGV4dCwgb3BlcmF0aXZvLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLCBwZXJzaXN0ZW50ZXMuaW5mb3JtYWNpb25IZHJbaWRFbmNdLnRhcmVhLnRhcmVhKTtcclxuICAgICAgICAgICAgICAgIC8vZ3VhcmRhciBwYXJhbGVsYW1lbnRlIGVuIHRhYmxhcyB1YVxyXG4gICAgICAgICAgICAgICAgdmFyIHByb2NlZHVyZUd1YXJkYXIgPSBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdGFkbyA9IGBpZCBlbmMgJHtpZEVuY306IGA7XHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyYW1fZ3VhcmRhcj17b3BlcmF0aXZvOiBvcGVyYXRpdm8saWRfY2FzbzppZEVuYywgZGF0b3NfY2FzbzpyZXNwdWVzdGFzVUFQcmluY2lwYWx9XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyTWVzc2FnZTogc3RyaW5nfG51bGw7XHJcbiAgICAgICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUuaW5UcmFuc2FjdGlvbihudWxsLCBhc3luYyBmdW5jdGlvbihjbGllbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8rPSBhd2FpdCBwcm9jZWR1cmVHdWFyZGFyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbV9ndWFyZGFyLCBjbGllbnQpOyAgICBcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyTWVzc2FnZSA9IHJlc3VsdGFkbyArIFwiZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhci4gXCIrIGVyciA7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvID0gZXJyTWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVyck1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHBhc2VfdGFibGE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBpZEVuYywgcmVzdWx0YWRvXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpOyAgICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIH0pLmFycmF5KCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJ1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidkbV9zaW5jcm9uaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidwZXJzaXN0ZW50ZXMnICAgICAgICwgdHlwZU5hbWU6J2pzb25iJ30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB7cGVyc2lzdGVudGVzfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIHZhciBudW1fc2luY3JvOm51bWJlcj0wO1xyXG4gICAgICAgICAgICB2YXIgdG9rZW46c3RyaW5nfG51bGw9cGVyc2lzdGVudGVzPy50b2tlbjtcclxuICAgICAgICAgICAgaWYoIXRva2VuKXtcclxuICAgICAgICAgICAgICAgIHRva2VuID0gKGF3YWl0IGJlLnByb2NlZHVyZS50b2tlbl9nZXQuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyYWdlbnQ6IGNvbnRleHQuc2Vzc2lvbi5yZXEudXNlcmFnZW50LCBcclxuICAgICAgICAgICAgICAgICAgICB1c2VybmFtZTogY29udGV4dC51c2VybmFtZVxyXG4gICAgICAgICAgICAgICAgfSkpLnRva2VuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciB7dmFsdWV9ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgSU5TRVJUIElOVE8gc2luY3Jvbml6YWNpb25lcyAodG9rZW4sIHVzdWFyaW8sIGRhdG9zKVxyXG4gICAgICAgICAgICAgICAgICAgIFZBTFVFUyAoJDEsJDIsJDMpIFxyXG4gICAgICAgICAgICAgICAgICAgIFJFVFVSTklORyBzaW5jcm9cclxuICAgICAgICAgICAgICAgIGAsIFt0b2tlbiwgY29udGV4dC51c2VybmFtZSwgcGVyc2lzdGVudGVzXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgbnVtX3NpbmNybz12YWx1ZTtcclxuICAgICAgICAgICAgdmFyIGNvbmR2aXY9IGBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHQub3BlcmF0aXZvPSAkMSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFzaWduYWRvID0gJDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHR0Lm9wZXJhY2lvbj0nY2FyZ2FyJyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kICh0dC5jYXJnYWRvX2RtIGlzIG51bGwgb3IgdHQuY2FyZ2Fkb19kbSA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwodG9rZW4pfSlcclxuICAgICAgICAgICAgYFxyXG4gICAgICAgICAgICBjb25zdCBVQV9QUklOQ0lQQUwgPSBhd2FpdCBnZXRVQVByaW5jaXBhbChjb250ZXh0LmNsaWVudCwgT1BFUkFUSVZPKTtcclxuICAgICAgICAgICAgaWYocGVyc2lzdGVudGVzKXtcclxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGxpa2VBcihwZXJzaXN0ZW50ZXMucmVzcHVlc3Rhc1tVQV9QUklOQ0lQQUxdKS5tYXAoYXN5bmMgKHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgaWRFbmMpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmVhID0gcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50YXJlYS50YXJlYTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHVlZG9HdWFyZGFyRW5URU09dHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIge3BhcmFtcyxzZXR0ZXJzfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGVzdGFkbyA9ICR7Y29udGV4dC5iZS5kYi5xdW90ZUxpdGVyYWwoRVNUQURPX1BPU1RFUklPUl9ERVNDQVJHQSl9YCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgY2FyZ2Fkb19kbT1udWxsYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IFtPUEVSQVRJVk8sIGlkRW5jLCB0YXJlYSwgdG9rZW5dXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcXVlcnlUYXJlYXNUZW0gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgJHtzZXR0ZXJzLmpvaW4oJywnKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSA9ICQzIGFuZCBjYXJnYWRvX2RtID0gJDRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1xyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHB1ZWRvR3VhcmRhckVuVEVNPXF1ZXJ5VGFyZWFzVGVtLnJvd0NvdW50PT0xO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHB1ZWRvR3VhcmRhckVuVEVNKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZ3VhcmRhckVuY3Vlc3RhRW5UZW0oY29udGV4dCwgT1BFUkFUSVZPLCBpZEVuYywgcmVzcHVlc3Rhc1VBUHJpbmNpcGFsLCB0YXJlYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZ3VhcmRhciBwYXJhbGVsYW1lbnRlIGVuIHRhYmxhcyB1YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvY2VkdXJlR3VhcmRhciA9IGJlLnByb2NlZHVyZS5jYXNvX2d1YXJkYXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgZW5jICR7aWRFbmN9OiBgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGFyYW1fZ3VhcmRhcj17b3BlcmF0aXZvOiBPUEVSQVRJVk8saWRfY2FzbzppZEVuYywgZGF0b3NfY2FzbzpyZXNwdWVzdGFzVUFQcmluY2lwYWx9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlOiBzdHJpbmd8bnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUuaW5UcmFuc2FjdGlvbihudWxsLCBhc3luYyBmdW5jdGlvbihjbGllbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbys9IGF3YWl0IHByb2NlZHVyZUd1YXJkYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtX2d1YXJkYXIsIGNsaWVudCk7ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJNZXNzYWdlID0gcmVzdWx0YWRvICsgXCJkbV9mb3Jwa3JhaXpfZGVzY2FyZ2FyLiBcIisgZXJyIDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVyck1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgcGFzZV90YWJsYT0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW09QRVJBVElWTywgaWRFbmMsIHJlc3VsdGFkb11cclxuICAgICAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKCdsb2NhbC1yZWNpYmlkby1zaW4tdG9rZW4udHh0JywgSlNPTi5zdHJpbmdpZnkoe25vdzpuZXcgRGF0ZSgpLHVzZXI6Y29udGV4dC51c2VybmFtZSxpZENhc286IGlkRW5jLHZpdmllbmRhOiByZXNwdWVzdGFzVUFQcmluY2lwYWx9KSsnXFxuXFxuJywgJ3V0ZjgnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfSkuYXJyYXkoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJjb25kdml2OiBcIiwgY29uZHZpdik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicXVlcnk6IFwiLCBnZXRIZHJRdWVyeShjb25kdml2KSk7XHJcbiAgICAgICAgICAgIHZhciB7cm93fSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGdldEhkclF1ZXJ5KGNvbmR2aXYpLFtPUEVSQVRJVk8sY29udGV4dC51c2VyLmlkcGVyXSkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3h4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCcsZ2V0SGRyUXVlcnkoY29uZHZpdikpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbSB0dFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCAgZXN0YWRvID0gJDQsIGNhcmdhZG9fZG09JDM6OnRleHRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSAke2NvbmR2aXZ9IFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyBlbmNgXHJcbiAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICBbT1BFUkFUSVZPLCBwYXJhbWV0ZXJzLmVuYz9wYXJhbWV0ZXJzLmVuYzpjb250ZXh0LnVzZXIuaWRwZXIsIHRva2VuLCBFU1RBRE9fUE9TVEVSSU9SX0NBUkdBXVxyXG4gICAgICAgICAgICApLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAuLi5yb3csXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IE9QRVJBVElWTywgXHJcbiAgICAgICAgICAgICAgICBzb2xvTGVjdHVyYTpmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRva2VuLFxyXG4gICAgICAgICAgICAgICAgbnVtX3NpbmNybyxcclxuICAgICAgICAgICAgICAgIGlkcGVyOmNvbnRleHQudXNlci5pZHBlcixcclxuICAgICAgICAgICAgICAgIGNhcmdhczpsaWtlQXIuY3JlYXRlSW5kZXgocm93LmNhcmdhcy5tYXAoY2FyZ2E9Pih7Li4uY2FyZ2EsIGZlY2hhOmNhcmdhLmZlY2hhP2RhdGUuaXNvKGNhcmdhLmZlY2hhKS50b0RteSgpOm51bGwsIGVzdGFkb19jYXJnYToncmVsZXZhbWllbnRvJ30pKSwgJ2NhcmdhJylcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonZG1fYmFja3VwJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J3Rva2VuJyAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RlbScgICAgICAgICAsIHR5cGVOYW1lOidqc29uYid9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5sb2dnZWQ6dHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciB7YmUsIGNsaWVudH0gPWNvbnRleHQ7XHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgdmFyIG51bV9zaW5jcm86bnVtYmVyPTA7XHJcbiAgICAgICAgICAgIHZhciB0b2tlbjpzdHJpbmd8bnVsbD1wYXJhbWV0ZXJzLnRva2VuO1xyXG4gICAgICAgICAgICBpZih0b2tlbiA9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7b2s6J29rOk4vVCd9O1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHZhciB7cm93Q291bnR9ID0gYXdhaXQgY2xpZW50LnF1ZXJ5KGBzZWxlY3QgMSBmcm9tIHRva2VucyB3aGVyZSB0b2tlbiA9ICQxYCxbdG9rZW5dKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICBpZighcm93Q291bnQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7b2s6J29rOk4vVCd9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHBhcmFtZXRlcnMudGVtKXtcclxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGxpa2VBcihwYXJhbWV0ZXJzLnRlbSkubWFwKGFzeW5jIChiYWNrdXA6YW55KT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGpzb25fYmFja3VwID0gJDMsIGZlY2hhX2JhY2t1cCA9IGN1cnJlbnRfdGltZXN0YW1wXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQganNvbl9iYWNrdXAgaXMgZGlzdGluY3QgZnJvbSAkNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICdvaydgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW09QRVJBVElWTywgYmFja3VwLmZvclBrUmFpei52aXZpZW5kYSwgYmFja3VwLnJlc3B1ZXN0YXNSYWl6LCBiYWNrdXAucmVzcHVlc3Rhc1JhaXpdXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICB9KS5hcnJheSgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgb2s6J29rJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnY29uc2lzdGlyX3ZpdmllbmRhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAscmVmZXJlbmNlczonb3BlcmF0aXZvcycsICB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondml2aWVuZGEnICAgICAgICx0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIge2JlLCBjbGllbnR9ID1jb250ZXh0O1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1fcHJvYz17XHJcbiAgICAgICAgICAgICAgICBvcGVyYXRpdm86IHBhcmFtZXRlcnMub3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgaWRfY2FzbzogcGFyYW1ldGVycy52aXZpZW5kYVxyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBsZXQgZXJyTWVzc2FnZTogc3RyaW5nfG51bGw7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRhZG86IHN0cmluZ3xudWxsO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRhZG89IGF3YWl0IGJlLnByb2NlZHVyZS5jb25zaXN0aXJfZW5jdWVzdGEuY29yZUZ1bmN0aW9uKGNvbnRleHQsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9wcm9jLCBjbGllbnRcclxuICAgICAgICAgICAgICAgICk7ICAgIFxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UgPSBcIiBjb25zaXN0aXJfdml2aWVuZGEuIFwiKyBlcnIgO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyTWVzc2FnZSlcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJyoqKioqKiBjb25zaXN0aXJfdml2aWVuZGEgcmVzdWx0YWRvOicscmVzdWx0YWRvKSAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgb2s6J29rJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2RtX3Jlc2NhdGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J2xvY2FsU3RvcmFnZUl0ZW0nICAgICAgICwgdHlwZU5hbWU6J2pzb25iJ30sXHJcbiAgICAgICAgICAgIHtuYW1lOidsb2NhbFN0b3JhZ2VJdGVtS2V5JyAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICB1bmxvZ2dlZDp0cnVlLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIHtsb2NhbFN0b3JhZ2VJdGVtS2V5LCBsb2NhbFN0b3JhZ2VJdGVtfSA9IHBhcmFtcztcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cobG9jYWxTdG9yYWdlSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKCdsb2NhbC1yZXNjYXRlLnR4dCcsIEpTT04uc3RyaW5naWZ5KHtub3c6bmV3IERhdGUoKSx1c2VyOmNvbnRleHQudXNlcm5hbWUsIGl0ZW1LZXk6IGxvY2FsU3RvcmFnZUl0ZW1LZXksIGl0ZW1EYXRhOiBsb2NhbFN0b3JhZ2VJdGVtfSkrJ1xcblxcbicsICd1dGY4Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1InLGVycik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ29wZXJhdGl2b19nZXQnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W10sXHJcbiAgICAgICAgdW5sb2dnZWQ6dHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZ2V0X3JhbmRvbV9mcmVlX2Nhc2UnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W3tuYW1lOidvcGVyYXRpdm8nICAgICwgdHlwZU5hbWU6J3RleHQnfV0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBjb25zdCBtaW5zVG9FeHBpcmUgPSAzMDtcclxuICAgICAgICAgICAgY29uc3QgbWluc1NpbmNlQmxvcXVlZCA9IGBkYXRlX3BhcnQoJ21pbicsIGFnZShjdXJyZW50X3RpbWVzdGFtcCwgZmVjaGFfYmxvcXVlbykpYDtcclxuICAgICAgICAgICAgY29uc3QgZW5jID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYHNlbGVjdCBlbmMgZnJvbSB0ZW0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAobGlicmUgb3IgJHttaW5zU2luY2VCbG9xdWVkfSA+ICR7bWluc1RvRXhwaXJlfSkgbGltaXQgMTtgLFtwYXJhbXMub3BlcmF0aXZvXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgVVBEQVRFIHRlbSBzZXQgbGlicmUgPSBmYWxzZSwgZmVjaGFfYmxvcXVlbz1jdXJyZW50X3RpbWVzdGFtcCB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMmAsW3BhcmFtcy5vcGVyYXRpdm8sIGVuYy52YWx1ZV0pLmV4ZWN1dGUoKTtcclxuICAgICAgICAgICAgcmV0dXJuIGVuYy52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2FjY2lvbl90YXJlYXNfdGVtX2VqZWN1dGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2NvbmRpY2lvbicgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonYWNjaW9uJyAgICAgICAgICAsIHR5cGVOYW1lOidqc29uYid9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSAgY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIGFjY2lvbiA9IHBhcmFtcy5hY2Npb24gYXMgRXN0YWRvQWNjaW9uO1xyXG4gICAgICAgICAgICB2YXIgY3VtcGxlOmJvb2xlYW4gPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGFjY2lvbl9jdW1wbGVfY29uZGljaW9uKCQ1LCAkNiwgJDcsICQ4LCAoXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0IGNvbmRpY2lvbiBcclxuICAgICAgICAgICAgICAgICAgICAgIGZyb20gZXN0YWRvc19hY2Npb25lcyBcclxuICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlc3RhZG8gPSAkMiBhbmQgZWFjY2lvbiA9ICQzIGFuZCBlc3RhZG9fZGVzdGlubyA9ICQ0XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClgLCBbXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLCBcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG8sIFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVhY2Npb24sIFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvLCBcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5lbmMsIFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVhY2Npb24sXHJcbiAgICAgICAgICAgIF0pLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWU7XHJcbiAgICAgICAgICAgIGlmKCFjdW1wbGUpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIHNlIHB1ZG8gZWplY3V0YXIgbGEgYWNjacOzbiwgbm8gc2UgY3VtcGxlIGxhIGNvbmRpY2nDs24gXCIke3BhcmFtcy5jb25kaWNpb259XCIgbyBiaWVuIGVsIGVzdGFkbyBlc3TDoSBkZXNhY3R1YWxpemFkbywgcmVmcmVzcXVlIGxhIGdyaWxsYS5gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgZW5jPSQyIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLCBcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZW5jLCBcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsIFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlub1xyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIGlmKGFjY2lvbi5ub21icmVfcHJvY2VkdXJlKXtcclxuICAgICAgICAgICAgICAgIGlmKGJlLnByb2NlZHVyZVthY2Npb24ubm9tYnJlX3Byb2NlZHVyZV0pe1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLnByb2NlZHVyZVthY2Npb24ubm9tYnJlX3Byb2NlZHVyZV0uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtcylcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKGBObyBleGlzdGUgZWwgcHJvY2VkdXJlIFwiJHthY2Npb24ubm9tYnJlX3Byb2NlZHVyZX1cIiBkZWZpbmlkbyBlbiBsYSB0YWJsYSBcImVzdGFkb3NfYWNjaW9uZXNcIiBwYXJhIGVsXHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0aXZvOiAke2FjY2lvbi5vcGVyYXRpdm99LCBlc3RhZG86ICR7YWNjaW9uLmVzdGFkb30sIGVhY2Npb246ICR7YWNjaW9uLmVhY2Npb259LmApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gQlVTQ08gUEFTRSBERSBUQVJFQVxyXG4gICAgICAgICAgICB2YXIgdGFyZWFTaWd1aWVudGUgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc19wcm94aW1hc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm8gPSAkMSBhbmQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhID0gJDIgYW5kIGVzdGFkbyA9ICQzIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWFfY3VtcGxlX2NvbmRpY2lvbigkNCwgJDUsICQ2LCAkNywgY29uZGljaW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyIGJ5IG9yZGVuXHJcbiAgICAgICAgICAgICAgICAgICAgbGltaXQgMWBcclxuICAgICAgICAgICAgLFtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sIFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm8sXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMuZW5jXHJcbiAgICAgICAgICAgIF0pLmZldGNoT25lUm93SWZFeGlzdHMoKSkucm93O1xyXG4gICAgICAgICAgICBpZih0YXJlYVNpZ3VpZW50ZSl7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfcHJveGltYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmBcclxuICAgICAgICAgICAgICAgICAgICAsW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHRzX2VudHJhZGEgPSBjdXJyZW50X3RpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgXHJcbiAgICAgICAgICAgICAgICAgICAgLFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCB0YXJlYVNpZ3VpZW50ZS50YXJlYV9kZXN0aW5vXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIEZJTiBQQVNFIERFIFRBUkVBXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQucm93O1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2NhcmdhX3ByZXBhcmFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJ2NhcmdhcidcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Rpc3BvbmliaWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgYXNpZ25hZG8gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19jYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9kZXNjYXJnYV9wcmVwYXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICdkZXNjYXJnYXInXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19kZXNjYXJnYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSAnY2FyZ2FyJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfYW5hbGl6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuY29uc2lzdGlyX2VuY3Vlc3RhLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7b3BlcmF0aXZvOnBhcmFtcy5vcGVyYXRpdm8sIGlkX2Nhc286cGFyYW1zLmVuY30pXHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfdmVyaWZpY2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9ICcxJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fdmVyaWZpY2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdmVyaWZpY2FkbyA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3N1cGVydmlzYXJfcHJlc2VuY2lhbCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDMsIHRhcmVhX3Byb3hpbWEgPSAkNCwgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSAkNVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdmaW5jJywgJ3N1cGUnLCAxXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfc3VwZXJ2aXNhcl90ZWxlZm9uaWNhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgdGFyZWFfcHJveGltYSA9ICQ0LCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9ICQ1XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ2ZpbmMnLCAnc3VwZScsIDJdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9ub19zdXBlcnZpc2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgdGFyZWFfcHJveGltYSA9ICQ0LCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCBudWxsLCAnZmluYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9oYWJpbGl0YXJfZGVzaGFiaWxpdGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgaGFiaWxpdGFkYSA9IG5vdCBoYWJpbGl0YWRhXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogQUNDSU9OX1BBU0FSX1BST0lFLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W10sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgbGV0IHBhcmFtZXRyb3MgPSAoYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICogZnJvbSBwYXJhbWV0cm9zIHdoZXJlIHVuaWNvX3JlZ2lzdHJvYCxcclxuICAgICAgICAgICAgW10pLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuICAgICAgICAgICAgLy9wYXJhbWV0cm9zLmRpYXNfZmluY1xyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICB2YXIgc2VsZWN0ID0gYHNlbGVjdCAqIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIGxlZnQgam9pbiB0ZW0gdCB1c2luZyAob3BlcmF0aXZvLGVuYylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCAoJHtnZXREaWFzQVBhc2FyUXVlcnkoKX0gPD0gMCBvciBjb2FsZXNjZShhZGVsYW50YXIsZmFsc2UpKSBhbmQgdGFyZWFfcHJveGltYSA9ICQzYFxyXG4gICAgICAgICAgICAqLyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHNlbGVjdCA9IGBzZWxlY3QgdC5vcGVyYXRpdm8sIHQuZW5jLCB0LnRhcmVhX2FjdHVhbCwgdC50YXJlYV9wcm94aW1hLCB0dC50c19lbnRyYWRhLCB0dGEuZXN0YWRvIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSB0YXJlYXNfdGVtIHR0IGxlZnQgam9pbiB0ZW0gdCB1c2luZyAob3BlcmF0aXZvLGVuYykgam9pbiB0YXJlYXNfdGVtIHR0YSBvbiB0dGEub3BlcmF0aXZvPXQub3BlcmF0aXZvIGFuZCB0dGEuZW5jPXQuZW5jIGFuZCB0dGEudGFyZWE9dC50YXJlYV9hY3R1YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2bz0kMSBhbmQgdHQudGFyZWE9ICQyIGFuZCAoJHtnZXREaWFzQVBhc2FyUXVlcnkoJ3R0Jyl9IDw9IDAgb3IgY29hbGVzY2UodHQuYWRlbGFudGFyLGZhbHNlKSkgYW5kIHRhcmVhX3Byb3hpbWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgdHRhLmVzdGFkbz0nVicgYW5kIHR0YS5hc2lnbmFkbyBpcyBub3QgbnVsbCBhbmQgdHRhLnJlY2VwY2lvbmlzdGEgaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYDtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdHQuZW5jID0gYXV4LmVuYyBhbmQgdHQudGFyZWEgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJywgJ2ZpbmMnLCdwcm9jJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGVtIHRcclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJ3Byb2MnLCB0YXJlYV9wcm94aW1hID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gKCR7c2VsZWN0fSkgYXV4XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgdC5vcGVyYXRpdm8gPSBhdXgub3BlcmF0aXZvIGFuZCB0LmVuYyA9IGF1eC5lbmNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAgLFxyXG4gICAgICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJywnZmluYyddKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidpbnRlcmNhbWJpYXJfZW5jdWVzdGFzJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J2VuYzEnICAgICAgICAgICAgLHJlZmVyZW5jZXM6J3RlbScgLCB0eXBlTmFtZTondGV4dCcgICAgfSxcclxuICAgICAgICAgICAge25hbWU6J2NhbnRIb2cxJyAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonaW50ZWdlcicgfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYzInICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCcgICAgfSxcclxuICAgICAgICAgICAge25hbWU6J2NhbnRIb2cyJyAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonaW50ZWdlcicgfSxcclxuICAgICAgICAgICAge25hbWU6J3Bhc28nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonaW50ZWdlcicgfSxcclxuICAgICAgICAgICAge25hbWU6J2NvbmZpcm1hJyAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonYm9vbGVhbicsIGRlZmF1bHRWYWx1ZTpmYWxzZSwgbGFiZWw6J0NvbmZpcm1hIGludGVyY2FtYmlvIGRlIGxvcyBkYXRvcyBlbnRyZSBsYXMgZW5jdWVzdGFzPyAnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczpbJ2Nvb3JfcHJvYycsJ3Byb2Nlc2FtaWVudG8nLCdhZG1pbiddLFxyXG4gICAgICAgIHByb2dyZXNzOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFBhcmEgY29udHJvbGFyOlxyXG4gICAgICAgICAgICAgKiAtIHF1ZSBsYXMgaG9nYXJlcywgcGVyc29uYXMsIGV0YyBlc3TDqW4gaW50ZXJjYW1iaWFkYXMgXHJcbiAgICAgICAgICAgICAqICAqIHRhbnRvIGVuIGVsIGpzb25cclxuICAgICAgICAgICAgICogICogY29tbyBlbiBsYXMgVERzXHJcbiAgICAgICAgICAgICAqIC0gY29zYXMgcXVlIHNlIGNhbGN1bGFuIHBvciBsYSBhcHA/IGN1YWxlcz8gKHJlc3VtZW5fZXN0YWRvLCByZWEgeSBub3JlYSlcclxuICAgICAgICAgICAgICovXHJcblxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5jb25maXJtYSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbmZpcm3DsyBpbnRlcmNhbWJpbycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCAhcGFyYW1zLmVuYzEgfHwgIXBhcmFtcy5lbmMyKSAge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgRmFsdGEgaW5ncmVzYXIgdW4gbnVtZXJvIGRlIGVuY3Vlc3RhIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICggcGFyYW1zLmVuYzE9PXBhcmFtcy5lbmMyKSAge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgZW5jMSB5IGVuYzIgZGViZW4gc2VyIGRpc3RpbnRvcyEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5jYW50SG9nMSkgIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIENhbnRpZGFkIGRlIEhvZ2FyZXMgZGUgZW5jMSwgbm8gZXN0YSBpbmdyZXNhZG8hJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY2FudEhvZzIpICB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBDYW50aWRhZCBkZSBIb2dhcmVzIGRlIGVuYzIsIG5vIGVzdGEgaW5ncmVzYWRvIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENPTlRST0xBUiBRVUUgTklOR1VOQSBERSBMQVMgMiBlbmN1ZXN0YXMgRVNURSBDQVJHQURBLCBBQklFUlRBIEZBTFRBXHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgY2FudF9ob2dzPShhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3Qgdml2aWVuZGEsIGNvdW50KCopbmggZnJvbSBob2dhcmVzIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKHZpdmllbmRhPSQyIG9yIHZpdmllbmRhPSQzKVxyXG4gICAgICAgICAgICAgICAgZ3JvdXAgYnkgdml2aWVuZGEgb3JkZXIgYnkgdml2aWVuZGFcclxuICAgICAgICAgICAgICAgIGAsW09QRVJBVElWTywgcGFyYW1zLmVuYzEsIHBhcmFtcy5lbmMyXSkuZmV0Y2hBbGwoKSkucm93cztcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgcGFyYW1fbmg9W3BhcmFtcy5jYW50SG9nMSxwYXJhbXMuY2FudEhvZzJdO1xyXG4gICAgICAgICAgICBjYW50X2hvZ3MuZm9yRWFjaCgoeGUsaSk9PntcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbV9uaFtpXSAhPT0geGUubmgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWVucz1gRXJyb3IsIG5vIGNvaW5jaWRlIGxhIGNhbnRpZGFkIGRlIGhvZ2FyZXMgZGUgZW5jJHtpKzF9YDtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoeG1lbnMpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7ICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHJlZ0VuYz0oYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBzZWxlY3QgZW5jLCB0YXJlYV9hY3R1YWwsIGpzb25fZW5jdWVzdGEgZnJvbSB0ZW0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAoZW5jID0kMiBvciBlbmM9JDMpIG9yZGVyIGJ5IGVuY1xyXG4gICAgICAgICAgICBgLFtPUEVSQVRJVk8sIHBhcmFtcy5lbmMxLCBwYXJhbXMuZW5jMl0pLmZldGNoQWxsKCkpLnJvd3M7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAocmVnRW5jLmxlbmd0aCE9Mil7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBObyBzZSBlbmNvbnRyYXJvbiAyIGVuY3Vlc3RhcycpICAgIFxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIC8vIGxpbXBpYSBsYXMgVERzICBcclxuICAgICAgICAgICAgICAgIGxldCBbZW5jMSxlbmMyXSA9IFtyZWdFbmNbMF0sIHJlZ0VuY1sxXV1cclxuICAgICAgICAgICAgICAgIGlmKHBhcmFtcy5wYXNvID09IDEpe1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgZGVsZXRlIGZyb20gdml2aWVuZGFzIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKHZpdmllbmRhPSQyIE9SIHZpdmllbmRhPSQzKWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLCBbT1BFUkFUSVZPLCBlbmMxLmVuYywgZW5jMi5lbmNdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihwYXJhbXMucGFzbyA9PSAyKXtcclxuICAgICAgICAgICAgICAgICAgICAvL3NpbXVsYSBndWFyZGFkb1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgT1BFUkFUSVZPLCBlbmMxLmVuYywgZW5jMS50YXJlYV9hY3R1YWwgLCBlbmMyLmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3Jpbyhjb250ZXh0LCBPUEVSQVRJVk8sIGVuYzIuZW5jLCBlbmMyLnRhcmVhX2FjdHVhbCAsIGVuYzEuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKGBMaXN0byBwYXNvICR7cGFyYW1zLnBhc299LiBJbnRlcmNhbWJpbyByZWFsaXphZG8gZW50cmUgbGFzIGVuY3Vlc3RhcyAgJHtwYXJhbXMuZW5jMX0geSAke3BhcmFtcy5lbmMyfS4gUG9yIGZhdm9yIGNvbnNpc3RhIGxhIGVuY3Vlc3RhYClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgeyAgICAgXHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFkb3JfZG1zX21vc3RyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczpcIm9wZXJhdGl2b3NcIn0sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmN1ZXN0YWRvcicgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOidtb3N0cmFyX2VuY3Vlc3Rhc19hX2JsYW5xdWVhcicsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGFzaWduYWRvID0gJDIgYW5kIGNhcmdhZG9fZG0gaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBjYXJnYWRvX2RtXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmN1ZXN0YWRvcl0pXHJcbiAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBpZihyZXN1bHQucm93Q291bnQgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciAoYE5vIHNlIGVuY29udHJhcm9uIGVuY3Vlc3RhcyBjYXJnYWRhcyBlbiB1biBETSBwYXJhIGVsIG9wZXJhdGl2byAke3BhcmFtcy5vcGVyYXRpdm99LCBlbmN1ZXN0YWRvciAke3BhcmFtcy5lbmN1ZXN0YWRvcn1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7cm93czogcmVzdWx0LnJvd3MsIG9wZXJhdGl2bzogcGFyYW1zLm9wZXJhdGl2b307XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9ibGFucXVlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczpcIm9wZXJhdGl2b3NcIn0sXHJcbiAgICAgICAgICAgIHtuYW1lOid0b2tlbicgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgbGV0IHRhcmVhc1RlbVJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSBudWxsLCBvcGVyYWNpb24gPSAnZGVzY2FyZ2FyJywgZXN0YWRvID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGNhcmdhZG9fZG0gPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudG9rZW4sIEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0FdKVxyXG4gICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYodGFyZWFzVGVtUmVzdWx0LnJvd0NvdW50ID09IDApe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3IoJ05vIHNlIGJsYW5xdWXDsyBuaW5ndW5hIGVuY3Vlc3RhJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IobGV0IHR0IG9mIHRhcmVhc1RlbVJlc3VsdC5yb3dzKXtcclxuICAgICAgICAgICAgICAgIHR0LnJlc3VsdF9ibGFucXVlbyA9IGBlbmMgJHt0dC5lbmN9IHNlIGJsYW5xdWXDsyBjb3JyZWN0YW1lbnRlLmA7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0QmFja3VwID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGpzb25fZW5jdWVzdGEgPSBqc29uX2JhY2t1cCwgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBmZWNoYV9iYWNrdXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIGZlY2hhX2JhY2t1cCA+IGNvYWxlc2NlKGZlY2hhX21vZGlmX2VuY3Vlc3RhLCAnMTkwMC0wMS0wMScpIGFuZCBqc29uX2JhY2t1cCBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgW3R0Lm9wZXJhdGl2bywgdHQuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICBpZihyZXN1bHRCYWNrdXAucm93Q291bnQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHR0LnJlc3VsdF9ibGFucXVlbys9YCBTZSByZXN0YWJsZWNpw7MgZWwgYmFja3VwIGNvbiBmZWNoYSAke3Jlc3VsdEJhY2t1cC5yb3cuZmVjaGFfYmFja3VwLnRvWW1kSG1zKCl9LmBcclxuICAgICAgICAgICAgICAgICAgICB2YXIge3BhcmFtczpxdWVyeVBhcmFtcyxzZXR0ZXJzfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE6IHR0LnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWw6IHJlc3VsdEJhY2t1cC5yb3cuanNvbl9lbmN1ZXN0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogW3R0Lm9wZXJhdGl2bywgdHQuZW5jLCB0dC50YXJlYV1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgcmVzdWx0QmFja3VwLnJvdy5vcGVyYXRpdm8sIHJlc3VsdEJhY2t1cC5yb3cuZW5jLCB0dC50YXJlYSxyZXN1bHRCYWNrdXAucm93Lmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmVhc1RlbVJlc3VsdC5yb3dzO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbl07XHJcbiJdfQ==
|
|
1389
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2VkdXJlcy1kbWVuY3UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmVyL3Byb2NlZHVyZXMtZG1lbmN1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsWUFBWSxDQUFDOzs7SUFJYixrQ0FBa0M7SUFDbEMsaURBQStCO0lBRy9CLHlEQUE4QztJQUU5QywrQ0FBNkM7SUFDN0MsMkJBQW1DO0lBRW5DLGdEQUFnRDtJQUdoRCx5REFBd0Q7SUFDeEQscUNBQWdDO0lBRWhDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFcEMsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRTNDLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQztJQUM3QixNQUFNLGNBQWMsR0FBRSxXQUFXLENBQUM7SUFDbEMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7SUFDbkMsTUFBTSx5QkFBeUIsR0FBRyxHQUFHLENBQUM7SUFFL0IsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsT0FBd0IsRUFBQyxFQUFFOztRQUNoRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BCLElBQUksTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBQyxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUM7UUFDdkcsSUFBRyxNQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsMENBQUUsU0FBUyxFQUFDO1lBQ3BCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtTQUM3QjthQUFJO1lBQ0QsTUFBTSxLQUFLLENBQUUscURB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QUNKO2dCQUNELE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQztZQUNoQyxDQUFDO1NBQ0o7S0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBQcm9jZWR1cmVEZWYsIFRhYmxlRGVmaW5pdGlvbiwgQ2xpZW50LCBUYWJsZURlZmluaXRpb25zIH0gZnJvbSBcIi4vdHlwZXMtZG1lbmN1XCI7XHJcbmltcG9ydCB7IFByb2NlZHVyZUNvbnRleHQsIENvcmVGdW5jdGlvblBhcmFtZXRlcnMsIEZvcmVpZ25LZXkgfSBmcm9tIFwibWV0YS1lbmNcIjtcclxuaW1wb3J0ICogYXMgbGlrZUFyIGZyb20gXCJsaWtlLWFyXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzLWRtZW5jdVwiO1xyXG5pbXBvcnQgeyBJZFVuaWRhZEFuYWxpc2lzLCBVbmlkYWRBbmFsaXNpcywgRXN0YWRvQWNjaW9uLCBJZEVuYywgSWRUYXJlYSwgUmVzcHVlc3Rhc1JhaXosIElkT3BlcmF0aXZvIH0gZnJvbSBcIi4uL3VubG9nZ2VkL3RpcG9zXCI7XHJcblxyXG5pbXBvcnQge2pzb24sIGpzb25vfSBmcm9tIFwicGctcHJvbWlzZS1zdHJpY3RcIjtcclxuXHJcbmltcG9ydCB7Y2hhbmdpbmcsIGRhdGUgfSBmcm9tICdiZXN0LWdsb2JhbHMnO1xyXG5pbXBvcnQge3Byb21pc2VzIGFzICBmc30gZnJvbSBcImZzXCI7XHJcblxyXG5pbXBvcnQgKiBhcyBFeHByZXNpb25QYXJzZXIgZnJvbSAnZXhwcmUtcGFyc2VyJztcclxuaW1wb3J0IHsgdGFyZWFzIH0gZnJvbSBcIi4vdGFibGUtdGFyZWFzXCI7XHJcbmltcG9ydCB7IHByZXBlbmRMaXN0ZW5lciB9IGZyb20gXCJwcm9jZXNzXCI7XHJcbmltcG9ydCB7IGdldERpYXNBUGFzYXJRdWVyeSB9IGZyb20gXCIuL3RhYmxlLXRhcmVhc190ZW1cIjtcclxuaW1wb3J0IHsgZXJyb3IgfSBmcm9tIFwiY29uc29sZVwiO1xyXG5cclxudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcbnZhciBzcWxUb29scyA9IHJlcXVpcmUoJ3NxbC10b29scycpO1xyXG5cclxudmFyIGRpc2NyZXBhbmNlcyA9IHJlcXVpcmUoJ2Rpc2NyZXBhbmNlcycpO1xyXG5cclxuY29uc3QgZm9ybVByaW5jaXBhbCA9ICdGOkYxJztcclxuY29uc3QgTUFJTl9UQUJMRU5BTUUgPSd2aXZpZW5kYXMnO1xyXG5jb25zdCBFU1RBRE9fUE9TVEVSSU9SX0NBUkdBID0gJ0MnO1xyXG5jb25zdCBFU1RBRE9fUE9TVEVSSU9SX0RFU0NBUkdBID0gJ0QnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldE9wZXJhdGl2b0FjdHVhbCA9IGFzeW5jIChjb250ZXh0OlByb2NlZHVyZUNvbnRleHQpPT57XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIHJlc3VsdCA9IGF3YWl0IGJlLnByb2NlZHVyZS50YWJsZV9kYXRhLmNvcmVGdW5jdGlvbihjb250ZXh0LHt0YWJsZTogYHBhcmFtZXRyb3NgLCBmaXhlZEZpZWxkczpbXX0pO1xyXG4gICAgaWYocmVzdWx0WzBdPy5vcGVyYXRpdm8pe1xyXG4gICAgICAgIHJldHVybiByZXN1bHRbMF0ub3BlcmF0aXZvXHJcbiAgICB9ZWxzZXtcclxuICAgICAgICB0aHJvdyBFcnJvciAoJ25vIHNlIGNvbmZpZ3Vyw7MgdW4gb3BlcmF0aXZvIGVuIGxhIHRhYmxhIHBhcsOhbWV0cm9zJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcblxyXG4vKmRlZmluaWNpw7NuIGRlIGVzdHJ1Y3R1cmEgY29tcGxldGEsIGN1YW5kbyBleGlzdGEgaW5nLWVuYyBoYXkgcXVlIHBvbmVybG8gYWjDrSovIFxyXG50eXBlIEVzdHJ1Y3R1cmFUYWJsYT17dGFibGVOYW1lOnN0cmluZywgcGtGaWVsZHM6e2ZpZWxkTmFtZTpzdHJpbmd9W10sIGNoaWxkVGFibGVzOkVzdHJ1Y3R1cmFUYWJsYVtdfTtcclxuZnVuY3Rpb24gY3JlYXRlU3RydWN0dXJlKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgdGFibGVOYW1lOnN0cmluZyl7XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgdmFyIG1haW5UYWJsZURlZjpUYWJsZURlZmluaXRpb24gPSBiZS50YWJsZVN0cnVjdHVyZXNbdGFibGVOYW1lXShjb250ZXh0KTtcclxuICAgIHZhciBnZXRQa0Zyb21UYWJsZURlZiA9IGZ1bmN0aW9uIGdldFBrRnJvbVRhYmxlRGVmKHRhYmxlRGVmOlRhYmxlRGVmaW5pdGlvbil7XHJcbiAgICAgICAgcmV0dXJuIHRhYmxlRGVmLnByaW1hcnlLZXkubWFwKGZ1bmN0aW9uKHBrKXtcclxuICAgICAgICAgICAgcmV0dXJuIHtmaWVsZE5hbWU6cGt9O1xyXG4gICAgICAgIH0pXHJcbiAgICB9O1xyXG4gICAgdmFyIGdldEZrRnJvbVRhYmxlRGVmID0gZnVuY3Rpb24gZ2V0RmtGcm9tVGFibGVEZWYodGFibGVEZWY6VGFibGVEZWZpbml0aW9uLCBwYXJlbnRUYWJsZU5hbWU6IHN0cmluZyl7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRhYmxlRGVmLmZvcmVpZ25LZXlzPyB0YWJsZURlZi5mb3JlaWduS2V5cy5tYXAoZms9PmZrLmZpZWxkcyk6IFtdO1xyXG4gICAgICAgIGxldCBwYXJlbnRGayA9ICg8Rm9yZWlnbktleVtdPiB0YWJsZURlZi5mb3JlaWduS2V5cykuZmluZChmaz0+ZmsucmVmZXJlbmNlcyA9PSBwYXJlbnRUYWJsZU5hbWUpO1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRGaz8gcGFyZW50RmsuZmllbGRzOiBbXTtcclxuICAgIH1cclxuICAgIHZhciBzdHJ1Y3Q6RXN0cnVjdHVyYVRhYmxhPXtcclxuICAgICAgICB0YWJsZU5hbWU6bWFpblRhYmxlRGVmLm5hbWUsXHJcbiAgICAgICAgcGtGaWVsZHM6Z2V0UGtGcm9tVGFibGVEZWYobWFpblRhYmxlRGVmKSxcclxuICAgICAgICBjaGlsZFRhYmxlczpbXVxyXG4gICAgfTtcclxuICAgIGlmKG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMgJiYgbWFpblRhYmxlRGVmLmRldGFpbFRhYmxlcy5sZW5ndGgpe1xyXG4gICAgICAgIG1haW5UYWJsZURlZi5kZXRhaWxUYWJsZXMuZm9yRWFjaChmdW5jdGlvbihkZXRhaWxUYWJsZSl7XHJcbiAgICAgICAgICAgIHN0cnVjdC5jaGlsZFRhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgY2hhbmdpbmcoXHJcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlU3RydWN0dXJlKGNvbnRleHQsIGRldGFpbFRhYmxlLnRhYmxlKSxcclxuICAgICAgICAgICAgICAgICAgICB7ZmtGaWVsZHM6IGdldEZrRnJvbVRhYmxlRGVmKGJlLnRhYmxlU3RydWN0dXJlc1tkZXRhaWxUYWJsZS50YWJsZV0oY29udGV4dCksIHRhYmxlTmFtZSl9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIHJldHVybiBzdHJ1Y3Q7XHJcbn1cclxuLyogZmluIGRlZmluaWNpb24gZXN0cnVjdHVyYSBjb21wbGV0YSAqL1xyXG5cclxudHlwZSBBbnlPYmplY3QgPSB7W2s6c3RyaW5nXTphbnl9XHJcblxyXG52YXIgZ2V0U2V0dGVyc0FuZFBhcmFtZXRlcnNGb3JSZWFOb1JlYVJlc3VtZW5Fc3RhZG8gPSAoZnVuUGFyYW1zOnt0YXJlYTpJZFRhcmVhLCByZXNwdWVzdGFzVUFQcmluY2lwYWw6UmVzcHVlc3Rhc1JhaXosIHNldHRlcnM6c3RyaW5nW10sIHBhcmFtczphbnlbXX0pPT57XHJcbiAgICBsZXQge3RhcmVhLHJlc3B1ZXN0YXNVQVByaW5jaXBhbCxzZXR0ZXJzLHBhcmFtc30gPSBmdW5QYXJhbXM7XHJcbiAgICBsZXQge3Jlc3VtZW5Fc3RhZG9TdXAsIGNvZE5vUmVhU3VwLCBjb2RSZWFTdXAsIHJlc3VtZW5Fc3RhZG8sIGNvZE5vUmVhLCBjb2RSZWF9ID0gcmVzcHVlc3Rhc1VBUHJpbmNpcGFsO1xyXG4gICAgc2V0dGVycyA9IHNldHRlcnMuY29uY2F0KFtcclxuICAgICAgICBgcmVzdW1lbl9lc3RhZG8ke3RhcmVhPT0nc3VwZSc/J19zdXAnOicnfT0kJHtwYXJhbXMubGVuZ3RoKzF9YCxcclxuICAgICAgICBgbm9yZWEke3RhcmVhPT0nc3VwZSc/J19zdXAnOicnfT0kJHtwYXJhbXMubGVuZ3RoKzJ9YCxcclxuICAgICAgICBgcmVhJHt0YXJlYT09J3N1cGUnPydfc3VwJzonJ309JCR7cGFyYW1zLmxlbmd0aCszfWBcclxuICAgIF0pXHJcbiAgICBwYXJhbXMgPSBwYXJhbXMuY29uY2F0KFtcclxuICAgICAgICB0YXJlYT09J3N1cGUnP3Jlc3VtZW5Fc3RhZG9TdXA6cmVzdW1lbkVzdGFkbyxcclxuICAgICAgICB0YXJlYT09J3N1cGUnP2NvZE5vUmVhU3VwOmNvZE5vUmVhLFxyXG4gICAgICAgIHRhcmVhPT0nc3VwZSc/Y29kUmVhU3VwOmNvZFJlYVxyXG4gICAgXSk7XHJcbiAgICByZXR1cm4ge3NldHRlcnMscGFyYW1zfVxyXG59XHJcblxyXG52YXIgZ3VhcmRhckVuY3Vlc3RhRW5UZW0gPSBhc3luYyAoY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBvcGVyYXRpdm86SWRPcGVyYXRpdm8sIGlkRW5jOklkRW5jLCByZXNwdWVzdGFzVUFQcmluY2lwYWw6UmVzcHVlc3Rhc1JhaXosIHRhcmVhOklkVGFyZWEpPT57XHJcbiAgICB2YXIge3BhcmFtcyxzZXR0ZXJzfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICB0YXJlYSxcclxuICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgc2V0dGVyczogW2Bqc29uX2VuY3Vlc3RhID0gJDNgLCBgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBjdXJyZW50X3RpbWVzdGFtcGBdLFxyXG4gICAgICAgIHBhcmFtczogW29wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbF1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyXHJcbiAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICxcclxuICAgICAgICBwYXJhbXNcclxuICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxufVxyXG5cclxudmFyIHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8gPSBhc3luYyAoY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCAsb3BlcmF0aXZvOiBzdHJpbmcsIGVuYzogSWRFbmMsIHRhcmVhOiBJZFRhcmVhLCBqc29uX2VuY3Vlc3RhOmFueSApPT57XHJcbiAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgY29uc3QgVUFfUFJJTkNJUEFMID0gYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIG9wZXJhdGl2byk7XHJcbiAgICByZXR1cm4gYXdhaXQgYmUucHJvY2VkdXJlLmRtX2ZvcnBrcmFpel9kZXNjYXJnYXIuY29yZUZ1bmN0aW9uKFxyXG4gICAgICAgIGNvbnRleHQsIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgb3BlcmF0aXZvOm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgIHBlcnNpc3RlbnRlczp7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzOntcclxuICAgICAgICAgICAgICAgICAgICBbVUFfUFJJTkNJUEFMXToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZW5jXToganNvbl9lbmN1ZXN0YVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpbmZvcm1hY2lvbkhkcjp7XHJcbiAgICAgICAgICAgICAgICAgICAgW2VuY106IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICApXHJcbn1cclxuXHJcblxyXG52YXIgZ2V0SGRyUXVlcnkgPSAgZnVuY3Rpb24gZ2V0SGRyUXVlcnkocXVvdGVkQ29uZFZpdjpzdHJpbmcpe1xyXG4gICAgcmV0dXJuIGBcclxuICAgIHdpdGggdml2aWVuZGFzIGFzIFxyXG4gICAgICAgIChzZWxlY3QgdC5lbmMsIHQuanNvbl9lbmN1ZXN0YSBhcyByZXNwdWVzdGFzLCB0LnJlc3VtZW5fZXN0YWRvIGFzIFwicmVzdW1lbkVzdGFkb1wiLCBcclxuICAgICAgICAgICAganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ2RvbWluaW8nICAgICAgICwgZG9taW5pbyAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnbm9tY2FsbGUnICAgICAgLCBub21jYWxsZSAgICAgICxcclxuICAgICAgICAgICAgICAgICdzZWN0b3InICAgICAgICAsIHNlY3RvciAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgJ2VkaWZpY2lvJyAgICAgICwgZWRpZmljaW8gICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZW50cmFkYScgICAgICAgLCBlbnRyYWRhICAgICAgICxcclxuICAgICAgICAgICAgICAgICducm9jYXRhc3RyYWwnICAsIG5yb2NhdGFzdHJhbCAgLFxyXG4gICAgICAgICAgICAgICAgJ3Bpc28nICAgICAgICAgICwgcGlzbyAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAnZGVwYXJ0YW1lbnRvJyAgLCBkZXBhcnRhbWVudG8gICxcclxuICAgICAgICAgICAgICAgICdoYWJpdGFjaW9uJyAgICAsIGhhYml0YWNpb24gICAgLFxyXG4gICAgICAgICAgICAgICAgJ2Nhc2EnICAgICAgICAgICwgY2FzYSAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAncHJpb3JpZGFkJyAgICAgLCByZXNlcnZhKzEgICAgICxcclxuICAgICAgICAgICAgICAgICdvYnNlcnZhY2lvbmVzJyAsIHR0LmNhcmdhX29ic2VydmFjaW9uZXMgLFxyXG4gICAgICAgICAgICAgICAgJ2NpdGEnICAgICAgICAgICwgY2l0YSAsXHJcbiAgICAgICAgICAgICAgICAnY2FyZ2EnICAgICAgICAgLCB0LmFyZWEgICAgICAgICBcclxuICAgICAgICAgICAgKSBhcyB0ZW0sIHQuYXJlYSxcclxuICAgICAgICAgICAgLS1UT0RPOiBHRU5FUkFMSVpBUlxyXG4gICAgICAgICAgICBqc29uYl9idWlsZF9vYmplY3QoXHJcbiAgICAgICAgICAgICAgICAndGFyZWEnLCB0dC50YXJlYSxcclxuICAgICAgICAgICAgICAgICdmZWNoYV9hc2lnbmFjaW9uJywgZmVjaGFfYXNpZ25hY2lvbixcclxuICAgICAgICAgICAgICAgICdhc2lnbmFkbycsIGFzaWduYWRvLFxyXG4gICAgICAgICAgICAgICAgJ21haW5fZm9ybScsIG1haW5fZm9ybVxyXG4gICAgICAgICAgICApIGFzIHRhcmVhLFxyXG4gICAgICAgICAgICBtaW4oZmVjaGFfYXNpZ25hY2lvbikgYXMgZmVjaGFfYXNpZ25hY2lvblxyXG4gICAgICAgICAgICBmcm9tIHRlbSB0IGxlZnQgam9pbiB0YXJlYXNfdGVtIHR0IG9uICh0Lm9wZXJhdGl2byA9IHR0Lm9wZXJhdGl2byBhbmQgdC5lbmMgPSB0dC5lbmMgYW5kIHQudGFyZWFfYWN0dWFsID0gdHQudGFyZWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgbGVmdCBqb2luIHRhcmVhcyB0YSBvbiB0LnRhcmVhX2FjdHVhbCA9IHRhLnRhcmVhXHJcbiAgICAgICAgICAgIHdoZXJlIHQuaGFiaWxpdGFkYSBhbmQgJHtxdW90ZWRDb25kVml2fVxyXG4gICAgICAgICAgICBncm91cCBieSB0LmVuYywgdC5qc29uX2VuY3Vlc3RhLCB0LnJlc3VtZW5fZXN0YWRvLCBkb21pbmlvLCBub21jYWxsZSxzZWN0b3IsZWRpZmljaW8sIGVudHJhZGEsIG5yb2NhdGFzdHJhbCwgcGlzbyxkZXBhcnRhbWVudG8saGFiaXRhY2lvbixjYXNhLHJlc2VydmEsdHQuY2FyZ2Ffb2JzZXJ2YWNpb25lcywgY2l0YSwgdC5hcmVhLCB0dC50YXJlYSwgZmVjaGFfYXNpZ25hY2lvbiwgYXNpZ25hZG8sIG1haW5fZm9ybVxyXG4gICAgICAgIClcclxuICAgICAgICBzZWxlY3QganNvbmJfYnVpbGRfb2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgJ3ZpdmllbmRhcycsICR7anNvbm8oXHJcbiAgICAgICAgICAgICAgICAgICAgYHNlbGVjdCBlbmMsIHJlc3B1ZXN0YXMsIGpzb25iX2J1aWxkX29iamVjdCgncmVzdW1lbkVzdGFkbycsXCJyZXN1bWVuRXN0YWRvXCIpIGFzIG90cmFzIGZyb20gdml2aWVuZGFzYCxcclxuICAgICAgICAgICAgICAgICAgICAnZW5jJyxcclxuICAgICAgICAgICAgICAgICAgICBgb3RyYXMgfHwgY29hbGVzY2UocmVzcHVlc3Rhcywne30nOjpqc29uYilgXHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICApIGFzIHJlc3B1ZXN0YXMsXHJcbiAgICAgICAgICAgICR7anNvbihgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgYXJlYSBhcyBjYXJnYSwgb2JzZXJ2YWNpb25lc19oZHIgYXMgb2JzZXJ2YWNpb25lcywgbWluKGZlY2hhX2FzaWduYWNpb24pIGFzIGZlY2hhXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSB2aXZpZW5kYXMgaW5uZXIgam9pbiBhcmVhcyB1c2luZyAoYXJlYSkgXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgYnkgYXJlYSwgb2JzZXJ2YWNpb25lc19oZHJgLCBcclxuICAgICAgICAgICAgICAgICdmZWNoYScpfSBhcyBjYXJnYXMsXHJcbiAgICAgICAgICAgICR7anNvbm8oXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGVuYywganNvbmJfYnVpbGRfb2JqZWN0KCd0ZW0nLCB0ZW0sICd0YXJlYScsIHRhcmVhKSBhcyBvdHJhcyBmcm9tIHZpdmllbmRhc2AsXHJcbiAgICAgICAgICAgICAgICAgJ2VuYycsXHJcbiAgICAgICAgICAgICAgICAgYG90cmFzIHx8J3t9Jzo6anNvbmJgXHJcbiAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICBhcyBcImluZm9ybWFjaW9uSGRyXCJcclxuYFxyXG59XHJcblxyXG5leHBvcnQgdmFyIHNldEhkclF1ZXJ5ID0gKG15RnVuOihxdW90ZWRDb25kVml2OnN0cmluZyk9PnN0cmluZyk9PiBnZXRIZHJRdWVyeT1teUZ1blxyXG5cclxuY29uc3QgZ2V0VUFQcmluY2lwYWwgPSBhc3luYyAoY2xpZW50OkNsaWVudCwgb3BlcmF0aXZvOnN0cmluZyk9PlxyXG4gICAgKGF3YWl0IGNsaWVudC5xdWVyeShcclxuICAgICAgICBgc2VsZWN0IHVuaWRhZF9hbmFsaXNpc1xyXG4gICAgICAgICAgICBmcm9tIHVuaWRhZF9hbmFsaXNpc1xyXG4gICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBwcmluY2lwYWxcclxuICAgICAgICBgXHJcbiAgICAgICAgLFxyXG4gICAgICAgIFtvcGVyYXRpdm9dXHJcbiAgICApLmZldGNoVW5pcXVlVmFsdWUoKSkudmFsdWVcclxuXHJcbnZhciBmdW5jaW9uZXNDb25vY2lkYXM6e1trIGluIHN0cmluZ106Ym9vbGVhbn0gPSB7fVxyXG5cclxudmFyIGNvbXBpbGVyID0gbmV3IEV4cHJlc2lvblBhcnNlci5Db21waWxlcih7XHJcbiAgICBsYW5ndWFnZTonanMnLFxyXG4gICAgdmFyV3JhcHBlcjoodmFyX25hbWU6c3RyaW5nKT0+YGhlbHBlcnMubnVsbDJ6ZXJvKHZhbG9yZXMuJHt2YXJfbmFtZX0pYCxcclxuICAgIGZ1bldyYXBwZXI6KGZ1bmN0aW9uTmFtZTpzdHJpbmcpPT57XHJcbiAgICAgICAgaWYoIWZ1bmNpb25lc0Nvbm9jaWRhc1tmdW5jdGlvbk5hbWVdKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZnVuY3Rpb25OYW1lKVxyXG4gICAgICAgICAgICBmdW5jaW9uZXNDb25vY2lkYXNbZnVuY3Rpb25OYW1lXSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgaGVscGVycy5mdW5zLiR7ZnVuY3Rpb25OYW1lfWBcclxuICAgIH1cclxufSlcclxuXHJcbnR5cGUgQ2FzaWxsZXJvRGVBY2E9e1xyXG4gICAgY2hpbGRzOiBDYXNpbGxlcm9EZUFjYVtdLFxyXG4gICAgZGF0YTp7XHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcjogc3RyaW5nXHJcbiAgICAgICAgZXhwcmVzaW9uX2hhYmlsaXRhcl9qczogc3RyaW5nXHJcbiAgICAgICAgZXNwZWNpYWw6IGFueVxyXG4gICAgICAgIGV4cHJlc2lvbl9hdXRvaW5ncmVzYXJfanM6IHN0cmluZ1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjb21waWxhckV4cHJlc2lvbihleHByZXNpb246c3RyaW5nKXtcclxuICAgIHJldHVybiBjb21waWxlci50b0NvZGUoRXhwcmVzaW9uUGFyc2VyLnBhcnNlKFxyXG4gICAgICAgIGV4cHJlc2lvblxyXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxiaXMgZGlzdGluY3QgZnJvbVxcYi9naSwnIDw+ICcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8hIS9naSwnICcpXHJcbiAgICApKS5yZXBsYWNlKC9oZWxwZXJzXFwuZnVuc1xcLmJsYW5jb1xcKGhlbHBlcnMubnVsbDJ6ZXJvXFwoL2csJ2hlbHBlcnMuZnVucy5ibGFuY28oKCcpXHJcbiAgICAucmVwbGFjZSgvaGVscGVyc1xcLmZ1bnNcXC5pbmZvcm1hZG9cXChoZWxwZXJzLm51bGwyemVyb1xcKC9nLCdoZWxwZXJzLmZ1bnMuaW5mb3JtYWRvKCgnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY29tcGlsYXJFeHByZXNpb25lcyhjYXNpbGxlcm86Q2FzaWxsZXJvRGVBY2Epe1xyXG4gICAgaWYoIWNhc2lsbGVybyl7IHJldHVybiB9XHJcbiAgICBpZihjYXNpbGxlcm8uZGF0YS5leHByZXNpb25faGFiaWxpdGFyKXtcclxuICAgICAgICBjYXNpbGxlcm8uZGF0YS5leHByZXNpb25faGFiaWxpdGFyX2pzID0gY29tcGlsYXJFeHByZXNpb24oY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2hhYmlsaXRhcik7XHJcbiAgICB9XHJcbiAgICBpZihjYXNpbGxlcm8uZGF0YS5lc3BlY2lhbD8uYXV0b2luZyl7XHJcbiAgICAgICAgdmFyIHBhcnRlcyA9IGNhc2lsbGVyby5kYXRhLmVzcGVjaWFsPy5hdXRvaW5nLnNwbGl0KCc9PicpO1xyXG4gICAgICAgIGlmKHBhcnRlcy5sZW5ndGg+MSl7XHJcbiAgICAgICAgICAgIHZhciBwcmVjb25kaWNpb24gPSBwYXJ0ZXNbMF07XHJcbiAgICAgICAgICAgIHZhciB2YWxvciA9IHBhcnRlcy5zbGljZSgxKS5qb2luKCc9PicpO1xyXG4gICAgICAgICAgICBjYXNpbGxlcm8uZGF0YS5leHByZXNpb25fYXV0b2luZ3Jlc2FyX2pzID0gYCgke2NvbXBpbGFyRXhwcmVzaW9uKHByZWNvbmRpY2lvbil9KT8oJHtjb21waWxhckV4cHJlc2lvbih2YWxvcil9KTpudWxsYDtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY2FzaWxsZXJvLmRhdGEuZXhwcmVzaW9uX2F1dG9pbmdyZXNhcl9qcyA9IGNvbXBpbGFyRXhwcmVzaW9uKHBhcnRlc1swXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yKHZhciBjYXNpbGxlcm9JbnRlcm5vIG9mIGNhc2lsbGVyby5jaGlsZHMpIGNvbXBpbGFyRXhwcmVzaW9uZXMoY2FzaWxsZXJvSW50ZXJubyk7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBBQ0NJT05fUEFTQVJfUFJPSUUgPSAnZW5jdWVzdGFzX3Byb2Nlc2FtaWVudG9fcGFzYXInO1xyXG5leHBvcnQgY29uc3QgUHJvY2VkdXJlc0RtRW5jdSA6IFByb2NlZHVyZURlZltdID0gW1xyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonb3BlcmF0aXZvX2VzdHJ1Y3R1cmFfY29tcGxldGEnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAgICAgICx0eXBlTmFtZTondGV4dCcsIHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOidkZXNwbGVnYXJGb3JtdWxhcmlvJyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgc2VsZWN0IGNhc2lsbGVyb3NfamVyYXJxdWl6YWRvcygkMSkgYXMgZm9ybXVsYXJpb3MsIFxyXG4gICAgICAgICAgICAgICAgICAgICR7anNvbm8oYHNlbGVjdCB1bmlkYWRfYW5hbGlzaXMsIHBhZHJlLCBwa19hZ3JlZ2FkYSwgJ3t9Jzo6anNvbmIgYXMgaGlqYXMgZnJvbSB1bmlkYWRfYW5hbGlzaXMgd2hlcmUgb3BlcmF0aXZvID0gJDJgLCAndW5pZGFkX2FuYWxpc2lzJyl9IGFzIHVuaWRhZGVzX2FuYWxpc2lzXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtZXRlcnMub3BlcmF0aXZvLCBwYXJhbWV0ZXJzLm9wZXJhdGl2b11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBsaWtlQXIocmVzdWx0LnJvdy5mb3JtdWxhcmlvcykuZm9yRWFjaChmPT5jb21waWxhckV4cHJlc2lvbmVzKGYpKTtcclxuICAgICAgICAgICAgLy8gSGVybWFub3Mgc29uIGxvcyBmb3JtdWxhcmlvcyBxdWUgZXN0w6FuIGltcGxhbnRhZG9zIGVuIG90cm8gZm9ybXVsYXJpbyBkZSBsYSBtaXNtYSBVQS4gUG9yIGVqZW1wbG8gZWwgQTEgZW4gZWwgUzFcclxuICAgICAgICAgICAgdmFyIHJlc3VsdEhlcm1hbm9zID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG5zZWxlY3Qgby5pZF9jYXNpbGxlcm8gYXMgaWRfZm9ybXVsYXJpbywgby51bmlkYWRfYW5hbGlzaXMsICdCRl8nfHxvLmNhc2lsbGVybyBib3RvbiwgYmYuY2FzaWxsZXJvLCBiZi5wYWRyZSwgZnAuY2FzaWxsZXJvLCBmcC51bmlkYWRfYW5hbGlzaXNcclxuICBmcm9tIGNhc2lsbGVyb3MgbyBsZWZ0IGpvaW4gY2FzaWxsZXJvcyBiZlxyXG4gICAgb24gYmYudGlwb2M9J0JGJ1xyXG5cdGFuZCBiZi5jYXNpbGxlcm8gPSAnQkZfJ3x8by5jYXNpbGxlcm9cclxuXHRhbmQgYmYub3BlcmF0aXZvID0gby5vcGVyYXRpdm9cclxuXHRsZWZ0IGpvaW4gY2FzaWxsZXJvcyBmcFxyXG5cdCAgb24gZnAuaWRfY2FzaWxsZXJvID0gYmYucGFkcmVcclxuXHQgIGFuZCBmcC5vcGVyYXRpdm8gPSBiZi5vcGVyYXRpdm9cclxuICB3aGVyZSBvLnRpcG9jID0gJ0YnXHJcbiAgICBhbmQgby51bmlkYWRfYW5hbGlzaXMgPSBmcC51bmlkYWRfYW5hbGlzaXNcclxuXHRhbmQgby5vcGVyYXRpdm8gPSAkMWAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldGVycy5vcGVyYXRpdm9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgcmVzdWx0SGVybWFub3Mucm93cy5mb3JFYWNoKHJvdz0+e1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnJvdy5mb3JtdWxhcmlvc1tyb3cuaWRfZm9ybXVsYXJpb10uZGF0YS5oZXJtYW5vID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGxldGFyVUEodWE6VW5pZGFkQW5hbGlzaXMsIGlkVWE6SWRVbmlkYWRBbmFsaXNpcywgdUFzOntbayBpbiBJZFVuaWRhZEFuYWxpc2lzXTogVW5pZGFkQW5hbGlzaXN9KXtcclxuICAgICAgICAgICAgICAgIGlmKHVhLnBhZHJlKXtcclxuICAgICAgICAgICAgICAgICAgICB1QXNbdWEucGFkcmVdLmhpamFzW2lkVWFdID0gdWE7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB1YS5wcmluY2lwYWw9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaWtlQXIocmVzdWx0LnJvdy51bmlkYWRlc19hbmFsaXNpcykuZm9yRWFjaCgodWEsIGlkVWEpPT5cclxuICAgICAgICAgICAgICAgIGNvbXBsZXRhclVBKHVhLCBpZFVhIGFzIElkVW5pZGFkQW5hbGlzaXMsIHJlc3VsdC5yb3cudW5pZGFkZXNfYW5hbGlzaXMpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgdmFyIHtjb25fcmVhX2hvZ2FyOiBjb25SZWFIb2dhciwgY29uZmlnX3NvcnRlbzogY29uZmlnU29ydGVvLCBoYWJpbGl0YWNpb25fYm90b25fZm9ybXVsYXJpbzpoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW99ID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHNlbGVjdCBjb25maWdfc29ydGVvLCBjb25fcmVhX2hvZ2FyLCBoYWJpbGl0YWNpb25fYm90b25fZm9ybXVsYXJpbyBcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIG9wZXJhdGl2b3MgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDFcclxuICAgICAgICAgICAgYCxbcGFyYW1ldGVycy5vcGVyYXRpdm9dKS5mZXRjaFVuaXF1ZVJvdygpKS5yb3c7XHJcbiAgICAgICAgICAgIGxldCBjb21waWxhckV4cHJlc2lvbmVzRG9taW5pb3MgPSAoZXhwcmVzaW9uZXNEb21pbmlvOmFueSk9PiBcclxuICAgICAgICAgICAgICAgIGxpa2VBcihleHByZXNpb25lc0RvbWluaW8pXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoZXhwcixkb21pbmlvKT0+KHtkb21pbmlvLCBleHByOmNvbXBpbGFyRXhwcmVzaW9uKGV4cHIuZXhwcil9KSlcclxuICAgICAgICAgICAgICAgICAgICAucGxhaW4oKTtcclxuICAgICAgICAgICAgaWYoY29uZmlnU29ydGVvKXtcclxuICAgICAgICAgICAgICAgIGxpa2VBcihjb25maWdTb3J0ZW8pLmZvckVhY2goKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8pPT57XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5leHByX2luY29tcGxldGl0dWRfanM9Y29tcGlsYXJFeHByZXNpb25lc0RvbWluaW9zKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZXhwcl9pbmNvbXBsZXRpdHVkKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uZmlsdHJvX2pzPWNvbXBpbGFyRXhwcmVzaW9uZXNEb21pbmlvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmZpbHRybylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvKXtcclxuICAgICAgICAgICAgICAgIGxpa2VBcihoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8pLmZvckVhY2goKGZvcm0pPT57XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybS5leHByX2hhYmlsaXRhcl9ib3Rvbl9qcz1jb21waWxhckV4cHJlc2lvbihmb3JtLmV4cHJfaGFiaWxpdGFyX2JvdG9uKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge3RpbWVzdGFtcDogYmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmEsIC4uLnJlc3VsdC5yb3csIG9wZXJhdGl2bzpwYXJhbWV0ZXJzLm9wZXJhdGl2bywgY29uUmVhSG9nYXIsIGNvbmZpZ1NvcnRlbywgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLCBub1JlYXM6YmUuY2FjaGVzLnRhYmxlQ29udGVudC5ub19yZWEsIG5vUmVhc1N1cDpiZS5jYWNoZXMudGFibGVDb250ZW50Lm5vX3JlYV9zdXB9O1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidnZW5lcmFyX2Zvcm11bGFyaW9zJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J2FubmlvJywgdHlwZU5hbWU6J2ludGVnZXInLCByZWZlcmVuY2VzOidhbm5pbyd9LFxyXG4gICAgICAgICAgICB7bmFtZTonbWVzJyAgLCB0eXBlTmFtZTonaW50ZWdlcicsIHJlZmVyZW5jZXM6J21lcycgIH0sXHJcbiAgICAgICAgICAgIHtuYW1lOidsb3RlJyAsIHR5cGVOYW1lOidpbnRlZ2VyJywgcmVmZXJlbmNlczonbG90ZXMnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRVQSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCAqXHJcbiAgICAgICAgICAgICAgICAgICBmcm9tIHVuaWRhZF9hbmFsaXNpc1xyXG4gICAgICAgICAgICAgICAgICAgd2hlcmUgcHJpbmNpcGFsID0gdHJ1ZSBhbmQgb3BlcmF0aXZvID0gJDFcclxuICAgICAgICAgICAgICAgIGAsXHJcbiAgICAgICAgICAgICAgICBbT1BFUkFUSVZPXVxyXG4gICAgICAgICAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdFVBLnJvd0NvdW50ID09PSAwKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gc2UgY29uZmlndXLDsyB1bmEgdW5pZGFkIGRlIGFuYWxpc2lzIGNvbW8gcHJpbmNpcGFsJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHJvdyA9IHJlc3VsdFVBLnJvdztcclxuICAgICAgICAgICAgbGV0IHJlc3VsdFByZWd1bnRhcyA9IGF3YWl0IGJlLnByb2NlZHVyZS5wcmVndW50YXNfdWFfdHJhZXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHJvdylcclxuICAgICAgICAgICAgdmFyIGNvbnRlbmVkb3JWYWNpbzp7W2tleTpzdHJpbmddOmFueX0gPSB7fTtcclxuICAgICAgICAgICAgcmVzdWx0UHJlZ3VudGFzLmZvckVhY2goZnVuY3Rpb24oZGVmUHJlZ3VudGEpe1xyXG4gICAgICAgICAgICAgICAgY29udGVuZWRvclZhY2lvW2RlZlByZWd1bnRhLnZhcl9uYW1lXSA9IGRlZlByZWd1bnRhLnVuaWRhZF9hbmFsaXNpcz9bXTpudWxsO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29udGVuZWRvclZhY2lvLmFubmlvPSBwYXJhbWV0ZXJzLmFubmlvO1xyXG4gICAgICAgICAgICBjb250ZW5lZG9yVmFjaW8ubWVzICA9IHBhcmFtZXRlcnMubWVzICA7XHJcbiAgICAgICAgICAgIGNvbnRlbmVkb3JWYWNpby5sb3RlID0gcGFyYW1ldGVycy5sb3RlIDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgZGViZV9oYWJlci5pZF9jYXNvLCBzIGFzIGlkXHJcbiAgICAgICAgICAgICAgICAgICAgZnJvbSAoc2VsZWN0IGxvdGUsIGFybWFyX2lkKGFubmlvLCBtZXMsIGxvdGUsIHMpIGFzIGlkX2Nhc28sIHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAoc2VsZWN0IGFubmlvLG1lcyxsb3RlLCBjYW50X2N1ZXMgZnJvbSBsb3RlcyB3aGVyZSAoYW5uaW8sbWVzLGxvdGUpPSgkMiwkMywkNCkpIHIsIGxhdGVyYWwgZ2VuZXJhdGVfc2VyaWVzKDEsY2FudF9jdWVzKSBzXHJcbiAgICAgICAgICAgICAgICAgICAgKSBkZWJlX2hhYmVyIGxlZnQgam9pbiBkZWZnZW4gaGF5IG9uIGhheS5pZF9jYXNvID0gZGViZV9oYWJlci5pZF9jYXNvIGFuZCBoYXkub3BlcmF0aXZvPSQxXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgaGF5LmlkX2Nhc28gaXMgbnVsbGAsXHJcbiAgICAgICAgICAgICAgICBbIE9QRVJBVElWTywgcGFyYW1ldGVycy5hbm5pbywgcGFyYW1ldGVycy5tZXMsIHBhcmFtZXRlcnMubG90ZV1cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICB2YXIgcGFyYW1zID0ge29wZXJhdGl2bzogT1BFUkFUSVZPfTtcclxuICAgICAgICAgICAgZm9yKHZhciBpPTA7IGkgPCByZXN1bHQucm93Q291bnQ7IGkrKyl7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyLmNvcmVGdW5jdGlvbihcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBcclxuICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZyhwYXJhbXMse2lkX2Nhc286cmVzdWx0LnJvd3NbaV0uaWRfY2FzbywgZGF0b3NfY2FzbzpjaGFuZ2luZyhjb250ZW5lZG9yVmFjaW8se2lkOnJlc3VsdC5yb3dzW2ldLmlkfSl9KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7YWdyZWdhZGFzOnJlc3VsdC5yb3dDb3VudH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjondXBsb2FkX2ZpbGUnLFxyXG4gICAgICAgIHByb2dyZXNzOiB0cnVlLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTogJ2lkX2FkanVudG8nLCB0eXBlTmFtZTogJ2ludGVnZXInfSxcclxuICAgICAgICAgICAge25hbWU6ICdub21icmUnLCB0eXBlTmFtZTogJ3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGZpbGVzOntjb3VudDoxfSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246ZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMsIGZpbGVzKXtcclxuICAgICAgICAgICAgbGV0IGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGxldCBjbGllbnQ9Y29udGV4dC5jbGllbnQ7XHJcbiAgICAgICAgICAgIGNvbnRleHQuaW5mb3JtUHJvZ3Jlc3Moe21lc3NhZ2U6YmUubWVzc2FnZXMuZmlsZVVwbG9hZGVkfSk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlID0gZmlsZXNbMF1cclxuICAgICAgICAgICAgbGV0IGV4dCA9IHBhdGguZXh0bmFtZShmaWxlLnBhdGgpLnN1YnN0cigxKTtcclxuICAgICAgICAgICAgbGV0IG9yaWdpbmFsRmlsZW5hbWUgPSBmaWxlLm9yaWdpbmFsRmlsZW5hbWUuc2xpY2UoMCwtKGV4dC5sZW5ndGgrMSkpO1xyXG4gICAgICAgICAgICBsZXQgZmlsZW5hbWU9IHBhcmFtZXRlcnMubm9tYnJlIHx8IG9yaWdpbmFsRmlsZW5hbWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdQYXRoID0gJ2xvY2FsLWF0dGFjaG1lbnRzL2ZpbGUtJztcclxuICAgICAgICAgICAgdmFyIGNyZWF0ZVJlc3BvbnNlID0gZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2UoYWRqdW50b1Jvdyl7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0YWRvID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdMYSBzdWJpZGEgc2UgcmVhbGl6w7MgY29ycmVjdGFtZW50ZSAodXBkYXRlKScsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9tYnJlOiBhZGp1bnRvUm93Lm5vbWJyZSxcclxuICAgICAgICAgICAgICAgICAgICBub21icmVfb3JpZ2luYWw6IGFkanVudG9Sb3cubm9tYnJlX29yaWdpbmFsLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4dDogYWRqdW50b1Jvdy5leHQsXHJcbiAgICAgICAgICAgICAgICAgICAgZmVjaGE6IGFkanVudG9Sb3cuZmVjaGEsXHJcbiAgICAgICAgICAgICAgICAgICAgaG9yYTogYWRqdW50b1Jvdy5ob3JhLFxyXG4gICAgICAgICAgICAgICAgICAgIGlkX2FkanVudG86IGFkanVudG9Sb3cuaWRfYWRqdW50b1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdGFkb1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBtb3ZlRmlsZSA9IGZ1bmN0aW9uIG1vdmVGaWxlKGZpbGUsIGlkX2FkanVudG8sIGV4dGVuc2lvbil7XHJcbiAgICAgICAgICAgICAgICBmcy5tb3ZlKGZpbGUucGF0aCwgbmV3UGF0aCArIGlkX2FkanVudG8gKyAnLicgKyBleHRlbnNpb24sIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICAgICBpZihwYXJhbWV0ZXJzLmlkX2FkanVudG8pe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LmNsaWVudC5xdWVyeShgdXBkYXRlIGFkanVudG9zIHNldCBub21icmU9ICQxLG5vbWJyZV9vcmlnaW5hbCA9ICQyLCBleHQgPSAkMywgcnV0YSA9IGNvbmNhdCgnbG9jYWwtYXR0YWNobWVudHMvZmlsZS0nLCQ0Ojp0ZXh0LCcuJywkMzo6dGV4dCksIGZlY2hhID0gbm93KCksIGhvcmEgPSBkYXRlX3RydW5jKCdzZWNvbmRzJyxjdXJyZW50X3RpbWVzdGFtcC1jdXJyZW50X2RhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGlkX2FkanVudG8gPSAkNCByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWxlbmFtZSwgb3JpZ2luYWxGaWxlbmFtZSwgZXh0LCBwYXJhbWV0ZXJzLmlkX2FkanVudG9dXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbnNlKHJlc3VsdC5yb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbihyZXN1bHRhZG8pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlRmlsZShmaWxlLHJlc3VsdGFkby5pZF9hZGp1bnRvLHJlc3VsdGFkby5leHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYGluc2VydCBpbnRvIGFkanVudG9zIChub21icmUsIG5vbWJyZV9vcmlnaW5hbCwgZXh0LCBmZWNoYSwgaG9yYSkgdmFsdWVzICgkMSwkMiwkMyxub3coKSwgZGF0ZV90cnVuYygnc2Vjb25kcycsY3VycmVudF90aW1lc3RhbXAtY3VycmVudF9kYXRlKSkgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsZW5hbWUsIG9yaWdpbmFsRmlsZW5hbWUsIGV4dF1cclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dC5jbGllbnQucXVlcnkoYHVwZGF0ZSBhZGp1bnRvcyBzZXQgcnV0YSA9IGNvbmNhdCgnbG9jYWwtYXR0YWNobWVudHMvZmlsZS0nLGlkX2FkanVudG86OnRleHQsJy4nLGV4dClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGlkX2FkanVudG8gPSAkMSByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0LnJvdy5pZF9hZGp1bnRvXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVJlc3BvbnNlKHJlc3VsdC5yb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0YWRvKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVGaWxlKGZpbGUscmVzdWx0YWRvLmlkX2FkanVudG8scmVzdWx0YWRvLmV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonY2Fzb19ndWFyZGFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAsIHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczonb3BlcmF0aXZvcyd9LFxyXG4gICAgICAgICAgICB7bmFtZTonaWRfY2FzbycgICAgICwgdHlwZU5hbWU6J3RleHQnICAgICAgfSxcclxuICAgICAgICAgICAge25hbWU6J2RhdG9zX2Nhc28nICAsIHR5cGVOYW1lOidqc29uYicgICAgIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBkZWZpbmVkSW46ICdkbWVuY3UnLFxyXG4gICAgICAgIC8vQHRzLWlnbm9yZSBlc3BlY2lmaWNvIGVsIHRpcG8gZGUgbG9zIHBhcsOhbWV0cm9zXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczp7XHJcbiAgICAgICAgICAgIG9wZXJhdGl2bzpzdHJpbmcsIFxyXG4gICAgICAgICAgICBpZF9jYXNvOnN0cmluZyxcclxuICAgICAgICAgICAgZGF0b3NfY2FzbzpBbnlPYmplY3RcclxuICAgICAgICB9LG5ld0NsaWVudDpDbGllbnQpe1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50PW5ld0NsaWVudCB8fCBjb250ZXh0LmNsaWVudDtcclxuICAgICAgICAgICAgdmFyIGRhdG9zX2pzb249cGFyYW1ldGVycy5kYXRvc19jYXNvO1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgdGFibGVTdHJ1Y3R1cmVzX2FwcDpUYWJsZURlZmluaXRpb25zID0gYmUudGFibGVTdHJ1Y3R1cmVzO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgc3RydWN0X2RtZW5jdSA9IGNyZWF0ZVN0cnVjdHVyZShjb250ZXh0LCBNQUlOX1RBQkxFTkFNRSk7XHJcbiAgICAgICAgICAgIGRhdG9zX2pzb25bJ29wZXJhdGl2byddID0gcGFyYW1ldGVycy5vcGVyYXRpdm87XHJcbiAgICAgICAgICAgIC8vVE9ETyA6IHZpdmllbmRhIMOzIGVuYz8/P1xyXG4gICAgICAgICAgICBkYXRvc19qc29uWyd2aXZpZW5kYSddID0gcGFyYW1ldGVycy5pZF9jYXNvO1xyXG4gICAgICAgICAgICBmdW5jdGlvbiBjb21wbGV0YXJfdWx0X3BrX2VuX2FyciggdWx0X3BrLCB1YV9hcnIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbl9wa19jb21wbGV0YT11YV9hcnI7IFxyXG4gICAgICAgICAgICAgICAgaWYgKHVhX2FyciAmJiB1YV9hcnIubGVuZ3RoPj0xKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25fcGtfY29tcGxldGE9IGNvbl9wa19jb21wbGV0YS5tYXAoKHVuYV91YSxpKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmFfdWFbdWx0X3BrXT1pKzEgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuYV91YTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25fcGtfY29tcGxldGFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiByZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGRhdG9zaikge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIga2V5TmFtZSBpbiBkYXRvc2opIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0b0sgPSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdG9LIGluc3RhbmNlb2YgQXJyYXkgJiYgZGF0b0subGVuZ3RoID49IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBrID0gdGFibGVTdHJ1Y3R1cmVzX2FwcFtrZXlOYW1lXShjb250ZXh0KS5wcmltYXJ5S2V5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWx0X3BrID0gcGtbcGsubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9LID0gY29tcGxldGFyX3VsdF9wa19lbl9hcnIodWx0X3BrLCBkYXRvSyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdG9LLmZvckVhY2goKGVsZW1JKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtST1yZWNvcnJlcl9kYXRvc19hZ3JlZ2FuZG9fcGtzKGVsZW1JKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5TmFtZS5zdGFydHNXaXRoKCckJyl8fGtleU5hbWUuc3RhcnRzV2l0aCgnXycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRvc2pba2V5TmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9zajtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBkYXRvc19qc29uID0gcmVjb3JyZXJfZGF0b3NfYWdyZWdhbmRvX3BrcyhkYXRvc19qc29uKTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYTtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkbztcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24uY29kUmVhU3VwO1xyXG4gICAgICAgICAgICBkZWxldGUgZGF0b3NfanNvbi5jb2ROb1JlYVN1cDtcclxuICAgICAgICAgICAgZGVsZXRlIGRhdG9zX2pzb24ucmVzdW1lbkVzdGFkb1N1cDtcclxuXHJcbiAgICAgICAgICAgIGlmKCBPYmplY3Qua2V5cyhkYXRvc19qc29uKS5sZW5ndGggPjIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHF1ZXJpZXMgPSBzcWxUb29scy5zdHJ1Y3R1cmVkRGF0YS5zcWxXcml0ZShkYXRvc19qc29uLCBzdHJ1Y3RfZG1lbmN1KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBxdWVyaWVzLnJlZHVjZShmdW5jdGlvbihwcm9taXNlLCBxdWVyeSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNsaWVudC5xdWVyeShxdWVyeSkuZXhlY3V0ZSgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJva1wiO1xyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyOkVycm9yKXtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNhc29fZ3VhcmRhciBFTlRSQSBFTiBFTCBDQVRDSDogXCIsZXJyKVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVyclxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZhY2lvJztcclxuICAgICAgICAgICAgfSAgICBcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2Nhc29fdHJhZXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAgLy97bmFtZTonZm9ybXVsYXJpbycgICAgLCAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICxyZWZlcmVuY2VzOidvcGVyYXRpdm9zJywgIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidpZF9jYXNvJyAgICAgICAsdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnZ29Ub0VuYycsXHJcbiAgICAgICAgZGVmaW5lZEluOiAnZG1lbmN1JyxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50PWNvbnRleHQuY2xpZW50O1xyXG4gICAgICAgICAgICAgdmFyIHN0cnVjdF9kbWVuY3UgPSBjcmVhdGVTdHJ1Y3R1cmUoY29udGV4dCwgTUFJTl9UQUJMRU5BTUUpO1xyXG4gICAgICAgICAgICB2YXIgc3FsID0gc3FsVG9vbHMuc3RydWN0dXJlZERhdGEuc3FsUmVhZCh7b3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2bywgdml2aWVuZGE6cGFyYW1ldGVycy5pZF9jYXNvfSwgc3RydWN0X2RtZW5jdSk7XHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjbGllbnQucXVlcnkoc3FsKS5mZXRjaFVuaXF1ZVZhbHVlKCk7XHJcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IHtcclxuICAgICAgICAgICAgICAgIG9wZXJhdGl2bzogcGFyYW1ldGVycy5vcGVyYXRpdm8sXHJcbiAgICAgICAgICAgICAgICB2aXZpZW5kYTogcGFyYW1ldGVycy5pZF9jYXNvLFxyXG4gICAgICAgICAgICAgICAgZGF0b3NfY2FzbzogcmVzdWx0LnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgLy9mb3JtdWxhcmlvOiBmb3JtUHJpbmNpcGFsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdjYXNvX3RyYWVyX29fY3JlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6IFtcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICxyZWZlcmVuY2VzOidvcGVyYXRpdm9zJywgIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidpZF9jYXNvJyAgICAgICAsdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOiAnZ29Ub0VuYycsXHJcbiAgICAgICAgLy8gYml0YWNvcmE6e2Fsd2F5czp0cnVlfSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgYmUgPSBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3RyYWVyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAgICAgICAgIHZhciBqc29uID0gYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX3ByZXBhcmFyJ10uY29yZUZ1bmN0aW9uKGNvbnRleHQsIHBhcmFtZXRlcnMpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlWydjYXNvX2d1YXJkYXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgY2hhbmdpbmcocGFyYW1ldGVycywge2RhdG9zX2Nhc286anNvbn0pKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBiZS5wcm9jZWR1cmVbJ2Nhc29fdHJhZXInXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1ldGVycyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjoncGFzYXJfanNvbjJ1YScsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1ldGVyczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgLyogR0VORVJBTElaQVI6ICovXHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICAvKiBGSU4tR0VORVJBTElaQVI6ICovXHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdE1haW4gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgU0VMRUNUICogRlJPTSAke01BSU5fVEFCTEVOQU1FfSBMSU1JVCAxYCkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYocmVzdWx0TWFpbi5yb3dDb3VudD4wKXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdIQVkgREFUT1MnLHJlc3VsdE1haW4ucm93cylcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSEFZIERBVE9TLiBOTyBTRSBQVUVERSBJTklDSUFSIEVMIFBBU0FKRScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCByZXN1bHRKc29uID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgU0VMRUNUIG9wZXJhdGl2bywgZW5jIGlkX2Nhc28sIGpzb25fZW5jdWVzdGEgZGF0b3NfY2FzbyBmcm9tIHRlbSBcclxuICAgICAgICAgICAgICAgICAgICBXSEVSRSBvcGVyYXRpdm89JDEgYW5kIHJlc3VtZW5fZXN0YWRvIGlzIGRpc3RpbmN0IGZyb20gJ3ZhY2lvJyBhbmQganNvbl9lbmN1ZXN0YSBpcyBub3QgbnVsbCBcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBlbmMgYCxcclxuICAgICAgICAgICAgICAgIFtPUEVSQVRJVk9dXHJcbiAgICAgICAgICAgICkuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgdmFyIHByb2NlZHVyZUd1YXJkYXIgPSBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyO1xyXG4gICAgICAgICAgICBpZihwcm9jZWR1cmVHdWFyZGFyLmRlZmluZWRJbiE9J2RtZW5jdScpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoYXkgcXVlIHNvYnJlZXNjcmliaXIgY2Fzb19ndWFyZGFyJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJlc3VsdEpzb24ucm93cy5tYXAoYXN5bmMgZnVuY3Rpb24ocm93KXtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgY2FzbyAke3Jvdy5pZF9jYXNvfTogYDtcclxuICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBiZS5pblRyYW5zYWN0aW9uKG51bGwsIGFzeW5jIGZ1bmN0aW9uKGNsaWVudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbys9IGF3YWl0IHByb2NlZHVyZUd1YXJkYXIuY29yZUZ1bmN0aW9uKGNvbnRleHQsIHJvdywgY2xpZW50KTsgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJNZXNzYWdlID0gcmVzdWx0YWRvICsgXCJqc29uMnVhIGVycm9yLiBcIisgZXJyIDtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBlcnJNZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyTWVzc2FnZSlcclxuICAgICAgICAgICAgICAgIH0gICAgIFxyXG4gICAgICAgICAgICAgICAgaWYocmVzdWx0YWRvLmluY2x1ZGVzKCdvaycpKXsgXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHtkYXRvc19jYXNvLCB2aXZpZW5kYSwgb3BlcmF0aXZvfSA9IGF3YWl0IGJlLnByb2NlZHVyZS5jYXNvX3RyYWVyLmNvcmVGdW5jdGlvbihjb250ZXh0LCB7b3BlcmF0aXZvOnJvdy5vcGVyYXRpdm8sIGlkX2Nhc286cm93LmlkX2Nhc299KVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB2ZXJRdWVHcmFibyA9IHtkYXRvc19jYXNvLCB2aXZpZW5kYSwgb3BlcmF0aXZvfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzY3JlcGFuY2VzLnNob3dBbmRUaHJvdyh2ZXJRdWVHcmFibyxyb3cpXHJcbiAgICAgICAgICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHZlclF1ZUdyYWJvLHJvdylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0YWRvO1xyXG4gICAgICAgICAgICB9KSkuY2F0Y2goZnVuY3Rpb24oZXJyKXtcclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonZG1fZm9ycGtyYWl6X2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondml2aWVuZGEnICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczpcInRhcmVhc1wifSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlPWNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIHZhciB7b3BlcmF0aXZvLHZpdmllbmRhLCB0YXJlYX0gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICB2YXIgbWFpbl9mb3JtID0gKGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgYHNlbGVjdCBtYWluX2Zvcm1cclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIHRhcmVhPSQyYFxyXG4gICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgdGFyZWFdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgdmFyIGNvbmR2aXY9IGAgdC5vcGVyYXRpdm89ICQxIGFuZCB0LmVuYyA9JDJgO1xyXG4gICAgICAgICAgICB2YXIgc29sb0xlY3R1cmEgPSAhIShhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gam9pbiBlc3RhZG9zIHVzaW5nIChvcGVyYXRpdm8sIGVzdGFkbykgLS1wayBlc3RhZG8gdmVyaWZpY2FkYVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0gJDEgYW5kIGVuYyA9ICQyIGFuZCAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmdhZG9fZG0gaXMgbm90IG51bGwgb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBwZXJtaXRlX2VkaXRhcl9lbmN1ZXN0YSBhbmQgYXNpZ25hZG8gPD4gJHtjb250ZXh0LmJlLmRiLnF1b3RlTGl0ZXJhbChjb250ZXh0LnVzZXIuaWRwZXIpfVxyXG4gICAgICAgICAgICAgICAgICAgIClgLCBbb3BlcmF0aXZvLCB2aXZpZW5kYV0pLmZldGNoT25lUm93SWZFeGlzdHMoKSkucm93Q291bnQ7XHJcbiAgICAgICAgICAgIHZhciB7cm93fSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGdldEhkclF1ZXJ5KGNvbmR2aXYpLFtvcGVyYXRpdm8sdml2aWVuZGFdKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByb3cuaW5mb3JtYWNpb25IZHJbdml2aWVuZGFdLnRhcmVhPXtcclxuICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgbWFpbl9mb3JtXHJcbiAgICAgICAgICAgIH0gO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4ucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvLFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmEsXHJcbiAgICAgICAgICAgICAgICBpZFBlcjpjb250ZXh0LnVzZXIuaWRwZXIsXHJcbiAgICAgICAgICAgICAgICBjYXJnYXM6bGlrZUFyLmNyZWF0ZUluZGV4KHJvdy5jYXJnYXMubWFwKGNhcmdhPT4oey4uLmNhcmdhLCBmZWNoYTpjYXJnYS5mZWNoYT9kYXRlLmlzbyhjYXJnYS5mZWNoYSkudG9EbXkoKTpudWxsfSkpLCAnY2FyZ2EnKSxcclxuICAgICAgICAgICAgICAgIHRpbWVzdGFtcEVzdHJ1Y3R1cmE6YmUuY2FjaGVzLnRpbWVzdGFtcEVzdHJ1Y3R1cmFcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonZG1fZm9ycGtyYWl6X2Rlc2NhcmdhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZToncGVyc2lzdGVudGVzJyAgICAgICwgdHlwZU5hbWU6J2pzb25iJ30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDogUHJvY2VkdXJlQ29udGV4dCwgcGFyYW1ldGVyczogQ29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIge29wZXJhdGl2bywgcGVyc2lzdGVudGVzfSA9IHBhcmFtZXRlcnM7XHJcbiAgICAgICAgICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBvcGVyYXRpdm8pO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsaWtlQXIocGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSkubWFwKGFzeW5jIChyZXNwdWVzdGFzVUFQcmluY2lwYWwsaWRFbmMpPT57XHJcbiAgICAgICAgICAgICAgICBpZihyZXNwdWVzdGFzVUFQcmluY2lwYWwuczFhMV9vYnMgPT0gJyFwcnVlYmEgZGUgZXJyb3IgYWwgZ3JhYmFyIScpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRElPIFBSVUVCQSBERSBFUlJPUiBBTCBHUkFCQVInKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIG9wZXJhdGl2bywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgcGVyc2lzdGVudGVzLmluZm9ybWFjaW9uSGRyW2lkRW5jXS50YXJlYS50YXJlYSk7XHJcbiAgICAgICAgICAgICAgICAvL2d1YXJkYXIgcGFyYWxlbGFtZW50ZSBlbiB0YWJsYXMgdWFcclxuICAgICAgICAgICAgICAgIHZhciBwcm9jZWR1cmVHdWFyZGFyID0gYmUucHJvY2VkdXJlLmNhc29fZ3VhcmRhcjtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHRhZG8gPSBgaWQgZW5jICR7aWRFbmN9OiBgO1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtX2d1YXJkYXI9e29wZXJhdGl2bzogb3BlcmF0aXZvLGlkX2Nhc286aWRFbmMsIGRhdG9zX2Nhc286cmVzcHVlc3Rhc1VBUHJpbmNpcGFsfVxyXG4gICAgICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2U6IHN0cmluZ3xudWxsO1xyXG4gICAgICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLmluVHJhbnNhY3Rpb24obnVsbCwgYXN5bmMgZnVuY3Rpb24oY2xpZW50KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0YWRvKz0gYXdhaXQgcHJvY2VkdXJlR3VhcmRhci5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1fZ3VhcmRhciwgY2xpZW50KTsgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGVyck1lc3NhZ2UgPSByZXN1bHRhZG8gKyBcImRtX2ZvcnBrcmFpel9kZXNjYXJnYXIuIFwiKyBlcnIgO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdGFkbyA9IGVyck1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJNZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBwYXNlX3RhYmxhPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgW29wZXJhdGl2bywgaWRFbmMsIHJlc3VsdGFkb11cclxuICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTsgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICB9KS5hcnJheSgpKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvaydcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjonZG1fc2luY3Jvbml6YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZToncGVyc2lzdGVudGVzJyAgICAgICAsIHR5cGVOYW1lOidqc29uYid9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciBiZT1jb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIge3BlcnNpc3RlbnRlc30gPSBwYXJhbWV0ZXJzO1xyXG4gICAgICAgICAgICB2YXIgbnVtX3NpbmNybzpudW1iZXI9MDtcclxuICAgICAgICAgICAgdmFyIHRva2VuOnN0cmluZ3xudWxsPXBlcnNpc3RlbnRlcz8udG9rZW47XHJcbiAgICAgICAgICAgIGlmKCF0b2tlbil7XHJcbiAgICAgICAgICAgICAgICB0b2tlbiA9IChhd2FpdCBiZS5wcm9jZWR1cmUudG9rZW5fZ2V0LmNvcmVGdW5jdGlvbihjb250ZXh0LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcmFnZW50OiBjb250ZXh0LnNlc3Npb24ucmVxLnVzZXJhZ2VudCwgXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6IGNvbnRleHQudXNlcm5hbWVcclxuICAgICAgICAgICAgICAgIH0pKS50b2tlbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIge3ZhbHVlfSA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIElOU0VSVCBJTlRPIHNpbmNyb25pemFjaW9uZXMgKHRva2VuLCB1c3VhcmlvLCBkYXRvcylcclxuICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKCQxLCQyLCQzKSBcclxuICAgICAgICAgICAgICAgICAgICBSRVRVUk5JTkcgc2luY3JvXHJcbiAgICAgICAgICAgICAgICBgLCBbdG9rZW4sIGNvbnRleHQudXNlcm5hbWUsIHBlcnNpc3RlbnRlc11cclxuICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVZhbHVlKCk7XHJcbiAgICAgICAgICAgIG51bV9zaW5jcm89dmFsdWU7XHJcbiAgICAgICAgICAgIHZhciBjb25kdml2PSBgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR0Lm9wZXJhdGl2bz0gJDEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhc2lnbmFkbyA9ICQyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0dC5vcGVyYWNpb249J2NhcmdhcicgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCAodHQuY2FyZ2Fkb19kbSBpcyBudWxsIG9yIHR0LmNhcmdhZG9fZG0gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKHRva2VuKX0pXHJcbiAgICAgICAgICAgIGBcclxuICAgICAgICAgICAgY29uc3QgVUFfUFJJTkNJUEFMID0gYXdhaXQgZ2V0VUFQcmluY2lwYWwoY29udGV4dC5jbGllbnQsIE9QRVJBVElWTyk7XHJcbiAgICAgICAgICAgIGlmKHBlcnNpc3RlbnRlcyl7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsaWtlQXIocGVyc2lzdGVudGVzLnJlc3B1ZXN0YXNbVUFfUFJJTkNJUEFMXSkubWFwKGFzeW5jIChyZXNwdWVzdGFzVUFQcmluY2lwYWwsIGlkRW5jKT0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJlYSA9IHBlcnNpc3RlbnRlcy5pbmZvcm1hY2lvbkhkcltpZEVuY10udGFyZWEudGFyZWE7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHB1ZWRvR3VhcmRhckVuVEVNPXRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHtwYXJhbXMsc2V0dGVyc30gPSBnZXRTZXR0ZXJzQW5kUGFyYW1ldGVyc0ZvclJlYU5vUmVhUmVzdW1lbkVzdGFkbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlcnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBlc3RhZG8gPSAke2NvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsKEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0EpfWAsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGNhcmdhZG9fZG09bnVsbGBcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbT1BFUkFUSVZPLCBpZEVuYywgdGFyZWEsIHRva2VuXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5VGFyZWFzVGVtID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0ICR7c2V0dGVycy5qb2luKCcsJyl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkMyBhbmQgY2FyZ2Fkb19kbSA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNcclxuICAgICAgICAgICAgICAgICAgICApLmZldGNoT25lUm93SWZFeGlzdHMoKTtcclxuICAgICAgICAgICAgICAgICAgICBwdWVkb0d1YXJkYXJFblRFTT1xdWVyeVRhcmVhc1RlbS5yb3dDb3VudD09MTtcclxuICAgICAgICAgICAgICAgICAgICBpZihwdWVkb0d1YXJkYXJFblRFTSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGd1YXJkYXJFbmN1ZXN0YUVuVGVtKGNvbnRleHQsIE9QRVJBVElWTywgaWRFbmMsIHJlc3B1ZXN0YXNVQVByaW5jaXBhbCwgdGFyZWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2d1YXJkYXIgcGFyYWxlbGFtZW50ZSBlbiB0YWJsYXMgdWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2NlZHVyZUd1YXJkYXIgPSBiZS5wcm9jZWR1cmUuY2Fzb19ndWFyZGFyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0YWRvID0gYGlkIGVuYyAke2lkRW5jfTogYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtX2d1YXJkYXI9e29wZXJhdGl2bzogT1BFUkFUSVZPLGlkX2Nhc286aWRFbmMsIGRhdG9zX2Nhc286cmVzcHVlc3Rhc1VBUHJpbmNpcGFsfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyTWVzc2FnZTogc3RyaW5nfG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGJlLmluVHJhbnNhY3Rpb24obnVsbCwgYXN5bmMgZnVuY3Rpb24oY2xpZW50KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8rPSBhd2FpdCBwcm9jZWR1cmVHdWFyZGFyLmNvcmVGdW5jdGlvbihjb250ZXh0LCBwYXJhbV9ndWFyZGFyLCBjbGllbnQpOyAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyTWVzc2FnZSA9IHJlc3VsdGFkbyArIFwiZG1fZm9ycGtyYWl6X2Rlc2Nhcmdhci4gXCIrIGVyciA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRhZG8gPSBlcnJNZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJNZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHBhc2VfdGFibGE9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgJ29rJ2BcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIGlkRW5jLCByZXN1bHRhZG9dXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZSgnbG9jYWwtcmVjaWJpZG8tc2luLXRva2VuLnR4dCcsIEpTT04uc3RyaW5naWZ5KHtub3c6bmV3IERhdGUoKSx1c2VyOmNvbnRleHQudXNlcm5hbWUsaWRDYXNvOiBpZEVuYyx2aXZpZW5kYTogcmVzcHVlc3Rhc1VBUHJpbmNpcGFsfSkrJ1xcblxcbicsICd1dGY4Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pLmFycmF5KCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY29uZHZpdjogXCIsIGNvbmR2aXYpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInF1ZXJ5OiBcIiwgZ2V0SGRyUXVlcnkoY29uZHZpdikpO1xyXG4gICAgICAgICAgICB2YXIge3Jvd30gPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShnZXRIZHJRdWVyeShjb25kdml2KSxbT1BFUkFUSVZPLGNvbnRleHQudXNlci5pZHBlcl0pLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgnLGdldEhkclF1ZXJ5KGNvbmR2aXYpKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoXHJcbiAgICAgICAgICAgICAgICBgdXBkYXRlIHRhcmVhc190ZW0gdHRcclxuICAgICAgICAgICAgICAgICAgICBzZXQgIGVzdGFkbyA9ICQ0LCBjYXJnYWRvX2RtPSQzOjp0ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgJHtjb25kdml2fSBcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgZW5jYFxyXG4gICAgICAgICAgICAgICAgLFxyXG4gICAgICAgICAgICAgICAgW09QRVJBVElWTywgcGFyYW1ldGVycy5lbmM/cGFyYW1ldGVycy5lbmM6Y29udGV4dC51c2VyLmlkcGVyLCB0b2tlbiwgRVNUQURPX1BPU1RFUklPUl9DQVJHQV1cclxuICAgICAgICAgICAgKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4ucm93LFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBPUEVSQVRJVk8sIFxyXG4gICAgICAgICAgICAgICAgc29sb0xlY3R1cmE6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0b2tlbixcclxuICAgICAgICAgICAgICAgIG51bV9zaW5jcm8sXHJcbiAgICAgICAgICAgICAgICBpZHBlcjpjb250ZXh0LnVzZXIuaWRwZXIsXHJcbiAgICAgICAgICAgICAgICBjYXJnYXM6bGlrZUFyLmNyZWF0ZUluZGV4KHJvdy5jYXJnYXMubWFwKGNhcmdhPT4oey4uLmNhcmdhLCBmZWNoYTpjYXJnYS5mZWNoYT9kYXRlLmlzbyhjYXJnYS5mZWNoYSkudG9EbXkoKTpudWxsLCBlc3RhZG9fY2FyZ2E6J3JlbGV2YW1pZW50byd9KSksICdjYXJnYScpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246J2RtX2JhY2t1cCcsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOid0b2tlbicgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0ZW0nICAgICAgICAgLCB0eXBlTmFtZTonanNvbmInfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6IFByb2NlZHVyZUNvbnRleHQsIHBhcmFtZXRlcnM6IENvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIge2JlLCBjbGllbnR9ID1jb250ZXh0O1xyXG4gICAgICAgICAgICBjb25zdCBPUEVSQVRJVk8gPSBhd2FpdCBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dCk7XHJcbiAgICAgICAgICAgIHZhciBudW1fc2luY3JvOm51bWJlcj0wO1xyXG4gICAgICAgICAgICB2YXIgdG9rZW46c3RyaW5nfG51bGw9cGFyYW1ldGVycy50b2tlbjtcclxuICAgICAgICAgICAgaWYodG9rZW4gPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge29rOidvazpOL1QnfTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICB2YXIge3Jvd0NvdW50fSA9IGF3YWl0IGNsaWVudC5xdWVyeShgc2VsZWN0IDEgZnJvbSB0b2tlbnMgd2hlcmUgdG9rZW4gPSAkMWAsW3Rva2VuXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgaWYoIXJvd0NvdW50KXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge29rOidvazpOL1QnfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihwYXJhbWV0ZXJzLnRlbSl7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsaWtlQXIocGFyYW1ldGVycy50ZW0pLm1hcChhc3luYyAoYmFja3VwOmFueSk9PntcclxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgYHVwZGF0ZSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCBqc29uX2JhY2t1cCA9ICQzLCBmZWNoYV9iYWNrdXAgPSBjdXJyZW50X3RpbWVzdGFtcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIGpzb25fYmFja3VwIGlzIGRpc3RpbmN0IGZyb20gJDRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtPUEVSQVRJVk8sIGJhY2t1cC5mb3JQa1JhaXoudml2aWVuZGEsIGJhY2t1cC5yZXNwdWVzdGFzUmFpeiwgYmFja3VwLnJlc3B1ZXN0YXNSYWl6XVxyXG4gICAgICAgICAgICAgICAgICAgICkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpO1xyXG4gICAgICAgICAgICAgICAgfSkuYXJyYXkoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9rOidvaydcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2NvbnNpc3Rpcl92aXZpZW5kYScsXHJcbiAgICAgICAgcGFyYW1ldGVyczogW1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgLHJlZmVyZW5jZXM6J29wZXJhdGl2b3MnLCAgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3ZpdmllbmRhJyAgICAgICAsdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OiBQcm9jZWR1cmVDb250ZXh0LCBwYXJhbWV0ZXJzOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIHtiZSwgY2xpZW50fSA9Y29udGV4dDtcclxuICAgICAgICAgICAgbGV0IHBhcmFtX3Byb2M9e1xyXG4gICAgICAgICAgICAgICAgb3BlcmF0aXZvOiBwYXJhbWV0ZXJzLm9wZXJhdGl2byxcclxuICAgICAgICAgICAgICAgIGlkX2Nhc286IHBhcmFtZXRlcnMudml2aWVuZGFcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgbGV0IGVyck1lc3NhZ2U6IHN0cmluZ3xudWxsO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0YWRvOiBzdHJpbmd8bnVsbDtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0YWRvPSBhd2FpdCBiZS5wcm9jZWR1cmUuY29uc2lzdGlyX2VuY3Vlc3RhLmNvcmVGdW5jdGlvbihjb250ZXh0LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fcHJvYywgY2xpZW50XHJcbiAgICAgICAgICAgICAgICApOyAgICBcclxuICAgICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgICAgICBlcnJNZXNzYWdlID0gXCIgY29uc2lzdGlyX3ZpdmllbmRhLiBcIisgZXJyIDtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVyck1lc3NhZ2UpXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcqKioqKiogY29uc2lzdGlyX3ZpdmllbmRhIHJlc3VsdGFkbzonLHJlc3VsdGFkbykgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIG9rOidvaydcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9yZXNjYXRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidsb2NhbFN0b3JhZ2VJdGVtJyAgICAgICAsIHR5cGVOYW1lOidqc29uYid9LFxyXG4gICAgICAgICAgICB7bmFtZTonbG9jYWxTdG9yYWdlSXRlbUtleScgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgdW5sb2dnZWQ6dHJ1ZSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciB7bG9jYWxTdG9yYWdlSXRlbUtleSwgbG9jYWxTdG9yYWdlSXRlbX0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxvY2FsU3RvcmFnZUl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgZnMuYXBwZW5kRmlsZSgnbG9jYWwtcmVzY2F0ZS50eHQnLCBKU09OLnN0cmluZ2lmeSh7bm93Om5ldyBEYXRlKCksdXNlcjpjb250ZXh0LnVzZXJuYW1lLCBpdGVtS2V5OiBsb2NhbFN0b3JhZ2VJdGVtS2V5LCBpdGVtRGF0YTogbG9jYWxTdG9yYWdlSXRlbX0pKydcXG5cXG4nLCAndXRmOCcpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SJyxlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdvcGVyYXRpdm9fZ2V0JyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltdLFxyXG4gICAgICAgIHVubG9nZ2VkOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgX3BhcmFtZXRlcnM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRPcGVyYXRpdm9BY3R1YWwoY29udGV4dClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2dldF9yYW5kb21fZnJlZV9jYXNlJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOlt7bmFtZTonb3BlcmF0aXZvJyAgICAsIHR5cGVOYW1lOid0ZXh0J31dLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgY29uc3QgbWluc1RvRXhwaXJlID0gMzA7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbnNTaW5jZUJsb3F1ZWQgPSBgZGF0ZV9wYXJ0KCdtaW4nLCBhZ2UoY3VycmVudF90aW1lc3RhbXAsIGZlY2hhX2Jsb3F1ZW8pKWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuYyA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBzZWxlY3QgZW5jIGZyb20gdGVtIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKGxpYnJlIG9yICR7bWluc1NpbmNlQmxvcXVlZH0gPiAke21pbnNUb0V4cGlyZX0pIGxpbWl0IDE7YCxbcGFyYW1zLm9wZXJhdGl2b10pLmZldGNoVW5pcXVlVmFsdWUoKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFVQREFURSB0ZW0gc2V0IGxpYnJlID0gZmFsc2UsIGZlY2hhX2Jsb3F1ZW89Y3VycmVudF90aW1lc3RhbXAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJgLFtwYXJhbXMub3BlcmF0aXZvLCBlbmMudmFsdWVdKS5leGVjdXRlKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBlbmMudmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdhY2Npb25fdGFyZWFzX3RlbV9lamVjdXRhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidjb25kaWNpb24nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2FjY2lvbicgICAgICAgICAgLCB0eXBlTmFtZTonanNvbmInfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhc1RlbVRhYmxlJyAgLCB0eXBlTmFtZTondGV4dCd9LCAgICAgICAgXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9ICBjb250ZXh0LmJlO1xyXG4gICAgICAgICAgICB2YXIgYWNjaW9uID0gcGFyYW1zLmFjY2lvbiBhcyBFc3RhZG9BY2Npb247XHJcbiAgICAgICAgICAgIHZhciBjdW1wbGU6Ym9vbGVhbiA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgYWNjaW9uX2N1bXBsZV9jb25kaWNpb24oJDUsICQ2LCAkNywgJDgsIChcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgY29uZGljaW9uIFxyXG4gICAgICAgICAgICAgICAgICAgICAgZnJvbSBlc3RhZG9zX2FjY2lvbmVzIFxyXG4gICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVzdGFkbyA9ICQyIGFuZCBlYWNjaW9uID0gJDMgYW5kIGVzdGFkb19kZXN0aW5vID0gJDRcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKWAsIFtcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sIFxyXG4gICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkbywgXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZWFjY2lvbiwgXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm8sXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLCBcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG8sIFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLmVuYywgXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZWFjY2lvbixcclxuICAgICAgICAgICAgXSkuZmV0Y2hVbmlxdWVWYWx1ZSgpKS52YWx1ZTtcclxuICAgICAgICAgICAgaWYoIWN1bXBsZSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgTm8gc2UgcHVkbyBlamVjdXRhciBsYSBhY2Npw7NuLCBubyBzZSBjdW1wbGUgbGEgY29uZGljacOzbiBcIiR7cGFyYW1zLmNvbmRpY2lvbn1cIiBvIGJpZW4gZWwgZXN0YWRvIGVzdMOhIGRlc2FjdHVhbGl6YWRvLCByZWZyZXNxdWUgbGEgZ3JpbGxhLmApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJDRcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlbmM9JDIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0YXJlYSA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5vcGVyYXRpdm8sIFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5lbmMsIFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy50YXJlYSwgXHJcbiAgICAgICAgICAgICAgICAgICAgYWNjaW9uLmVzdGFkb19kZXN0aW5vXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICkuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgaWYoYWNjaW9uLm5vbWJyZV9wcm9jZWR1cmUpe1xyXG4gICAgICAgICAgICAgICAgaWYoYmUucHJvY2VkdXJlW2FjY2lvbi5ub21icmVfcHJvY2VkdXJlXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlW2FjY2lvbi5ub21icmVfcHJvY2VkdXJlXS5jb3JlRnVuY3Rpb24oY29udGV4dCwgcGFyYW1zKVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE5vIGV4aXN0ZSBlbCBwcm9jZWR1cmUgXCIke2FjY2lvbi5ub21icmVfcHJvY2VkdXJlfVwiIGRlZmluaWRvIGVuIGxhIHRhYmxhIFwiZXN0YWRvc19hY2Npb25lc1wiIHBhcmEgZWxcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRpdm86ICR7YWNjaW9uLm9wZXJhdGl2b30sIGVzdGFkbzogJHthY2Npb24uZXN0YWRvfSwgZWFjY2lvbjogJHthY2Npb24uZWFjY2lvbn0uYClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBCVVNDTyBQQVNFIERFIFRBUkVBXHJcbiAgICAgICAgICAgIHZhciB0YXJlYVNpZ3VpZW50ZSA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShcclxuICAgICAgICAgICAgICAgIGBzZWxlY3QgKlxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gdGFyZWFzX3Byb3hpbWFzXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGl2byA9ICQxIGFuZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWEgPSAkMiBhbmQgZXN0YWRvID0gJDMgYW5kIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJlYV9jdW1wbGVfY29uZGljaW9uKCQ0LCAkNSwgJDYsICQ3LCBjb25kaWNpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXIgYnkgb3JkZW5cclxuICAgICAgICAgICAgICAgICAgICBsaW1pdCAxYFxyXG4gICAgICAgICAgICAsW1xyXG4gICAgICAgICAgICAgICAgcGFyYW1zLm9wZXJhdGl2bywgXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMudGFyZWEsXHJcbiAgICAgICAgICAgICAgICBhY2Npb24uZXN0YWRvX2Rlc3Rpbm8sXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMub3BlcmF0aXZvLCBcclxuICAgICAgICAgICAgICAgIHBhcmFtcy50YXJlYSxcclxuICAgICAgICAgICAgICAgIGFjY2lvbi5lc3RhZG9fZGVzdGlubyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcy5lbmNcclxuICAgICAgICAgICAgXSkuZmV0Y2hPbmVSb3dJZkV4aXN0cygpKS5yb3c7XHJcbiAgICAgICAgICAgIGlmKHRhcmVhU2lndWllbnRlKXtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgXHJcbiAgICAgICAgICAgICAgICAgICAgLFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCB0YXJlYVNpZ3VpZW50ZS50YXJlYV9kZXN0aW5vXVxyXG4gICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGF1dG9Bc2lnbmFkbyA9IHRhcmVhU2lndWllbnRlLnJlZ2lzdHJhX3JlY2VwY2lvbmlzdGE/Y29udGV4dC51c2VyLmlkcGVyOm51bGw7XHJcbiAgICAgICAgICAgICAgICBsZXQgcSA9IGNvbnRleHQuYmUuZGIucXVvdGVMaXRlcmFsO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCB0c19lbnRyYWRhID0gY3VycmVudF90aW1lc3RhbXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YXV0b0FzaWduYWRvP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiLCByZWNlcGNpb25pc3RhPVwiK3EoYXV0b0FzaWduYWRvKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOlwiXCJ9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmBcclxuICAgICAgICAgICAgICAgICAgICAsW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsIHRhcmVhU2lndWllbnRlLnRhcmVhX2Rlc3Rpbm9dXHJcbiAgICAgICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gRklOIFBBU0UgREUgVEFSRUFcclxuXHJcbiAgICAgICAgICAgIHZhciBtYWluRGVmVGFibGU9YmUudGFibGVTdHJ1Y3R1cmVzW3BhcmFtcy50YXJlYXNUZW1UYWJsZV0oY29udGV4dCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZnJvbTpcIiwgbWFpbkRlZlRhYmxlLnNxbCEuZnJvbSlcclxuICAgICAgICAgICAgcmV0dXJuIChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgJHtbLi4ubWFpbkRlZlRhYmxlLnNxbCEuc2VsZWN0XS5qb2luKCcsICcpfVxyXG4gICAgICAgICAgICAgICAgICAgIGZyb20gJHttYWluRGVmVGFibGUuc3FsIS5mcm9tfVxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIFwidGFyZWFzX3RlbVwiLm9wZXJhdGl2byA9ICQxIGFuZCBcInRhcmVhc190ZW1cIi5lbmMgPSAkMiBhbmQgXCJ0YXJlYXNfdGVtXCIudGFyZWEgPSAkM2BcclxuICAgICAgICAgICAgICAgICxbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgcGFyYW1zLnRhcmVhXVxyXG4gICAgICAgICAgICApLmZldGNoVW5pcXVlUm93KCkpLnJvdztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9jYXJnYV9wcmVwYXJhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IG9wZXJhY2lvbiA9ICdjYXJnYXInXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9kaXNwb25pYmlsaXphcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGFzaWduYWRvID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfZGVzY2FyZ2FfcHJlcGFyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBvcGVyYWNpb24gPSAnZGVzY2FyZ2FyJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fZGVzY2FyZ2FyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgb3BlcmFjaW9uID0gJ2NhcmdhcidcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2FuYWxpemFyJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgYXdhaXQgYmUucHJvY2VkdXJlLmNvbnNpc3Rpcl9lbmN1ZXN0YS5jb3JlRnVuY3Rpb24oY29udGV4dCwge29wZXJhdGl2bzpwYXJhbXMub3BlcmF0aXZvLCBpZF9jYXNvOnBhcmFtcy5lbmN9KVxyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3ZlcmlmaWNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSAnMSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy50YXJlYSwgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3ZlcmlmaWNhcicsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHZlcmlmaWNhZG8gPSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCB0YXJlYT0gJDIgYW5kIGVuYz0kM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudGFyZWEsIHBhcmFtcy5lbmNdKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdlbmN1ZXN0YV9zdXBlcnZpc2FyX3ByZXNlbmNpYWwnLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzLCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDJcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLmVuYywgJ3N1cGUnLCAxXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfc3VwZXJ2aXNhcl90ZWxlZm9uaWNhJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkMywgc3VwZXJ2aXNpb25fZGlyaWdpZGEgPSAkNFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdzdXBlJywgMl0pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX25vX3N1cGVydmlzYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J3RhcmVhJyAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQzLCBzdXBlcnZpc2lvbl9kaXJpZ2lkYSA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnZmluYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qKlxyXG4gICAgICoge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3Bhc2FyX2FfYW5hYycsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWEnICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgdGFyZWFfYWN0dWFsID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jLCAnYW5hYyddKVxyXG4gICAgICAgICAgICAuZmV0Y2hVbmlxdWVSb3coKTtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICBzZXQgZXN0YWRvID0gJ0NDJ1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgdGFyZWE9ICQyIGFuZCBlbmM9JDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1zLm9wZXJhdGl2bywgcGFyYW1zLnRhcmVhLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFfbm9fcGFzYXJfYV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgZW5jPSQyXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmMsICdwcm9jJ10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBVUERBVEUgdGFyZWFzX3RlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIHRhcmVhPSAkMiBhbmQgZW5jPSQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sICdwcm9jJywgcGFyYW1zLmVuY10pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICByZXR1cm4gJ29rJztcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX3JlY3VwZXJhcl9kZXNkZV9hbmFjJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J29wZXJhdGl2bycgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTonZW5jJyAgICAgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYScgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIGJlID0gY29udGV4dC5iZTtcclxuICAgICAgICAgICAgdmFyIGZvcnphclRhcmVhRW5jdWVzdGFQcm9jID0gYmUucHJvY2VkdXJlLmVuY3Vlc3RhX2Zvcnphcl90YXJlYTtcclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sZW5jLHRhcmVhOnRhcmVhX2FjdHVhbH0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIGF3YWl0IGZvcnphclRhcmVhRW5jdWVzdGFQcm9jLmNvcmVGdW5jdGlvbihjb250ZXh0LHtvcGVyYXRpdm8sZW5jLHRhcmVhX2FjdHVhbCx0YXJlYV9udWV2YToncmVjdSd9KTtcclxuICAgICAgICAgICAgcmV0dXJuICdvaydcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2Zvcnphcl90YXJlYScsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXHJcbiAgICAgICAgICAgIHtuYW1lOidvcGVyYXRpdm8nICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYycgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCd9LFxyXG4gICAgICAgICAgICB7bmFtZTondGFyZWFfYWN0dWFsJyAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOid0YXJlYV9udWV2YScgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgdmFyIHtvcGVyYXRpdm8sIGVuYywgdGFyZWFfYWN0dWFsLCB0YXJlYV9udWV2YX0gPSBwYXJhbXM7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IHRhcmVhX2FjdHVhbCA9ICQ0XHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYV9hY3R1YWwgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfYWN0dWFsLCB0YXJlYV9udWV2YV0pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGVzdGFkbyA9ICcwRCcgXHJcbiAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvID0gJDEgYW5kIGVuYyA9ICQyIGFuZCB0YXJlYSBpbiAoJDMsICQ0KVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtvcGVyYXRpdm8sIGVuYywgdGFyZWFfYWN0dWFsLCB0YXJlYV9udWV2YV0pXHJcbiAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG5cclxuICAgICAgICAgICAgaWYocmVzdWx0LnJvd0NvdW50ICE9IDIpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoYFNlIGVzcGVyYWJhbiAyIHJlZ2lzdHJvcyB5IHNlIG9idHV2by9vYnR1dmllcm9uICR7cmVzdWx0LnJvd0NvdW50fWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlIHRhcmVhc190ZW0gXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGFzaWduYWRvID0gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIG9wZXJhdGl2byA9ICQxIGFuZCBlbmMgPSAkMiBhbmQgdGFyZWEgID0gJDNcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbb3BlcmF0aXZvLCBlbmMsIHRhcmVhX251ZXZhXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcblxyXG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGUgdGFyZWFzX3RlbSBcclxuICAgICAgICAgICAgICAgICAgICBzZXQgcmVjZXBjaW9uaXN0YSA9IG51bGxcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm8gPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhICA9ICQzXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgLFxyXG4gICAgICAgICAgICAgICAgW29wZXJhdGl2bywgZW5jLCB0YXJlYV9udWV2YV0pXHJcbiAgICAgICAgICAgIC5mZXRjaFVuaXF1ZVJvdygpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuICdvayc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgICAqL1xyXG4gICAge1xyXG4gICAgICAgIGFjdGlvbjogJ2VuY3Vlc3RhX2hhYmlsaXRhcl9kZXNoYWJpbGl0YXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmMnICAgICAgICAgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIGNvcmVGdW5jdGlvbjphc3luYyBmdW5jdGlvbihjb250ZXh0OlByb2NlZHVyZUNvbnRleHQsIHBhcmFtczpDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgVVBEQVRFIHRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHNldCBoYWJpbGl0YWRhID0gbm90IGhhYmlsaXRhZGFcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGVuYz0kMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMuZW5jXSlcclxuICAgICAgICAgICAgLmZldGNoVW5pcXVlUm93KCk7XHJcbiAgICAgICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOiBBQ0NJT05fUEFTQVJfUFJPSUUsXHJcbiAgICAgICAgcGFyYW1ldGVyczpbXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBfcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1ldHJvcyA9IChhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3QgKiBmcm9tIHBhcmFtZXRyb3Mgd2hlcmUgdW5pY29fcmVnaXN0cm9gLFxyXG4gICAgICAgICAgICBbXSkuZmV0Y2hVbmlxdWVSb3coKSkucm93O1xyXG4gICAgICAgICAgICB2YXIgc2VsZWN0ID0gYHNlbGVjdCB0Lm9wZXJhdGl2bywgdC5lbmMsIHQudGFyZWFfYWN0dWFsLCB0dC50c19lbnRyYWRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW0gdHQgam9pbiB0ZW0gdCB1c2luZyAob3BlcmF0aXZvLGVuYylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHR0Lm9wZXJhdGl2bz0kMSBhbmQgdHQudGFyZWE9ICQyIGFuZCAoJHtnZXREaWFzQVBhc2FyUXVlcnkoJ3R0Jyl9IDw9IDAgb3IgY29hbGVzY2UodHQuYWRlbGFudGFyLGZhbHNlKSkgYW5kIHR0LnRhcmVhID0gdC50YXJlYV9hY3R1YWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYDtcclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnVidcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdHQuZW5jID0gYXV4LmVuYyBhbmQgdHQudGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJywgJ2ZpbmMnXSlcclxuICAgICAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIC8vVE9ETyBhc2lnbmFyIGVuIHByb2Nlc2FtaWVudG9cclxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtIHR0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBlc3RhZG8gPSAnQSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAoJHtzZWxlY3R9KSBhdXhcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdHQuZW5jID0gYXV4LmVuYyBhbmQgdHQudGFyZWEgPSAkM1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICBbcGFyYW1ldHJvcy5vcGVyYXRpdm8sICdmaW5jJywgJ3Byb2MnXSlcclxuICAgICAgICAgICAgLmZldGNoQWxsKCk7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIHVwZGF0ZSB0ZW0gdFxyXG4gICAgICAgICAgICAgICAgICAgIHNldCB0YXJlYV9hY3R1YWwgPSAncHJvYydcclxuICAgICAgICAgICAgICAgICAgICBmcm9tICgke3NlbGVjdH0pIGF1eFxyXG4gICAgICAgICAgICAgICAgICAgIHdoZXJlIHQub3BlcmF0aXZvID0gYXV4Lm9wZXJhdGl2byBhbmQgdC5lbmMgPSBhdXguZW5jXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuaW5nICpgICxcclxuICAgICAgICAgICAgW3BhcmFtZXRyb3Mub3BlcmF0aXZvLCAnZmluYyddKS5mZXRjaEFsbCgpO1xyXG4gICAgICAgIHJldHVybiAnb2snO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgYWN0aW9uOidpbnRlcmNhbWJpYXJfZW5jdWVzdGFzJyxcclxuICAgICAgICBwYXJhbWV0ZXJzOltcclxuICAgICAgICAgICAge25hbWU6J2VuYzEnICAgICAgICAgICAgLHJlZmVyZW5jZXM6J3RlbScgLCB0eXBlTmFtZTondGV4dCcgICAgfSxcclxuICAgICAgICAgICAge25hbWU6J2NhbnRIb2cxJyAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonaW50ZWdlcicgfSxcclxuICAgICAgICAgICAge25hbWU6J2VuYzInICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTondGV4dCcgICAgfSxcclxuICAgICAgICAgICAge25hbWU6J2NhbnRIb2cyJyAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonaW50ZWdlcicgfSxcclxuICAgICAgICAgICAge25hbWU6J3Bhc28nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonaW50ZWdlcicgfSxcclxuICAgICAgICAgICAge25hbWU6J2NvbmZpcm1hJyAgICAgICAgICAgICAgICAgLCB0eXBlTmFtZTonYm9vbGVhbicsIGRlZmF1bHRWYWx1ZTpmYWxzZSwgbGFiZWw6J0NvbmZpcm1hIGludGVyY2FtYmlvIGRlIGxvcyBkYXRvcyBlbnRyZSBsYXMgZW5jdWVzdGFzPyAnIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICByb2xlczpbJ2Nvb3JfcHJvYycsJ3Byb2Nlc2FtaWVudG8nLCdhZG1pbiddLFxyXG4gICAgICAgIHByb2dyZXNzOnRydWUsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOiBDb3JlRnVuY3Rpb25QYXJhbWV0ZXJzKXtcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIFBhcmEgY29udHJvbGFyOlxyXG4gICAgICAgICAgICAgKiAtIHF1ZSBsYXMgaG9nYXJlcywgcGVyc29uYXMsIGV0YyBlc3TDqW4gaW50ZXJjYW1iaWFkYXMgXHJcbiAgICAgICAgICAgICAqICAqIHRhbnRvIGVuIGVsIGpzb25cclxuICAgICAgICAgICAgICogICogY29tbyBlbiBsYXMgVERzXHJcbiAgICAgICAgICAgICAqIC0gY29zYXMgcXVlIHNlIGNhbGN1bGFuIHBvciBsYSBhcHA/IGN1YWxlcz8gKHJlc3VtZW5fZXN0YWRvLCByZWEgeSBub3JlYSlcclxuICAgICAgICAgICAgICovXHJcblxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5jb25maXJtYSl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbmZpcm3DsyBpbnRlcmNhbWJpbycpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCAhcGFyYW1zLmVuYzEgfHwgIXBhcmFtcy5lbmMyKSAge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgRmFsdGEgaW5ncmVzYXIgdW4gbnVtZXJvIGRlIGVuY3Vlc3RhIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICggcGFyYW1zLmVuYzE9PXBhcmFtcy5lbmMyKSAge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciwgZW5jMSB5IGVuYzIgZGViZW4gc2VyIGRpc3RpbnRvcyEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5jYW50SG9nMSkgIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IsIENhbnRpZGFkIGRlIEhvZ2FyZXMgZGUgZW5jMSwgbm8gZXN0YSBpbmdyZXNhZG8hJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFwYXJhbXMuY2FudEhvZzIpICB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBDYW50aWRhZCBkZSBIb2dhcmVzIGRlIGVuYzIsIG5vIGVzdGEgaW5ncmVzYWRvIScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIENPTlRST0xBUiBRVUUgTklOR1VOQSBERSBMQVMgMiBlbmN1ZXN0YXMgRVNURSBDQVJHQURBLCBBQklFUlRBIEZBTFRBXHJcbiAgICAgICAgICAgIGNvbnN0IE9QRVJBVElWTyA9IGF3YWl0IGdldE9wZXJhdGl2b0FjdHVhbChjb250ZXh0KTtcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgY2FudF9ob2dzPShhd2FpdCBjb250ZXh0LmNsaWVudC5xdWVyeShgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3Qgdml2aWVuZGEsIGNvdW50KCopbmggZnJvbSBob2dhcmVzIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKHZpdmllbmRhPSQyIG9yIHZpdmllbmRhPSQzKVxyXG4gICAgICAgICAgICAgICAgZ3JvdXAgYnkgdml2aWVuZGEgb3JkZXIgYnkgdml2aWVuZGFcclxuICAgICAgICAgICAgICAgIGAsW09QRVJBVElWTywgcGFyYW1zLmVuYzEsIHBhcmFtcy5lbmMyXSkuZmV0Y2hBbGwoKSkucm93cztcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgcGFyYW1fbmg9W3BhcmFtcy5jYW50SG9nMSxwYXJhbXMuY2FudEhvZzJdO1xyXG4gICAgICAgICAgICBjYW50X2hvZ3MuZm9yRWFjaCgoeGUsaSk9PntcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbV9uaFtpXSAhPT0geGUubmgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB4bWVucz1gRXJyb3IsIG5vIGNvaW5jaWRlIGxhIGNhbnRpZGFkIGRlIGhvZ2FyZXMgZGUgZW5jJHtpKzF9YDtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoeG1lbnMpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7ICAgIFxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFyIHJlZ0VuYz0oYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICBzZWxlY3QgZW5jLCB0YXJlYV9hY3R1YWwsIGpzb25fZW5jdWVzdGEgZnJvbSB0ZW0gd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCAoZW5jID0kMiBvciBlbmM9JDMpIG9yZGVyIGJ5IGVuY1xyXG4gICAgICAgICAgICBgLFtPUEVSQVRJVk8sIHBhcmFtcy5lbmMxLCBwYXJhbXMuZW5jMl0pLmZldGNoQWxsKCkpLnJvd3M7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAocmVnRW5jLmxlbmd0aCE9Mil7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yLCBObyBzZSBlbmNvbnRyYXJvbiAyIGVuY3Vlc3RhcycpICAgIFxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIC8vIGxpbXBpYSBsYXMgVERzICBcclxuICAgICAgICAgICAgICAgIGxldCBbZW5jMSxlbmMyXSA9IFtyZWdFbmNbMF0sIHJlZ0VuY1sxXV1cclxuICAgICAgICAgICAgICAgIGlmKHBhcmFtcy5wYXNvID09IDEpe1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgZGVsZXRlIGZyb20gdml2aWVuZGFzIHdoZXJlIG9wZXJhdGl2bz0kMSBhbmQgKHZpdmllbmRhPSQyIE9SIHZpdmllbmRhPSQzKWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLCBbT1BFUkFUSVZPLCBlbmMxLmVuYywgZW5jMi5lbmNdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkuZXhlY3V0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZihwYXJhbXMucGFzbyA9PSAyKXtcclxuICAgICAgICAgICAgICAgICAgICAvL3NpbXVsYSBndWFyZGFkb1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgT1BFUkFUSVZPLCBlbmMxLmVuYywgZW5jMS50YXJlYV9hY3R1YWwgLCBlbmMyLmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2ltdWxhckd1YXJkYWRvRGVFbmN1ZXN0YURlc2RlQXBwRXNjcml0b3Jpbyhjb250ZXh0LCBPUEVSQVRJVk8sIGVuYzIuZW5jLCBlbmMyLnRhcmVhX2FjdHVhbCAsIGVuYzEuanNvbl9lbmN1ZXN0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKGBMaXN0byBwYXNvICR7cGFyYW1zLnBhc299LiBJbnRlcmNhbWJpbyByZWFsaXphZG8gZW50cmUgbGFzIGVuY3Vlc3RhcyAgJHtwYXJhbXMuZW5jMX0geSAke3BhcmFtcy5lbmMyfS4gUG9yIGZhdm9yIGNvbnNpc3RhIGxhIGVuY3Vlc3RhYClcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgeyAgICAgXHJcbiAgICAgICAgYWN0aW9uOiAnZW5jdWVzdGFkb3JfZG1zX21vc3RyYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczpcIm9wZXJhdGl2b3NcIn0sXHJcbiAgICAgICAgICAgIHtuYW1lOidlbmN1ZXN0YWRvcicgICAgICwgdHlwZU5hbWU6J3RleHQnfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHJlc3VsdE9rOidtb3N0cmFyX2VuY3Vlc3Rhc19hX2JsYW5xdWVhcicsXHJcbiAgICAgICAgY29yZUZ1bmN0aW9uOmFzeW5jIGZ1bmN0aW9uKGNvbnRleHQ6UHJvY2VkdXJlQ29udGV4dCwgcGFyYW1zOkNvcmVGdW5jdGlvblBhcmFtZXRlcnMpe1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ICpcclxuICAgICAgICAgICAgICAgICAgICBmcm9tIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGFzaWduYWRvID0gJDIgYW5kIGNhcmdhZG9fZG0gaXMgbm90IG51bGxcclxuICAgICAgICAgICAgICAgICAgICBvcmRlciBieSBjYXJnYWRvX2RtXHJcbiAgICAgICAgICAgICAgICBgLFxyXG4gICAgICAgICAgICAgICAgW3BhcmFtcy5vcGVyYXRpdm8sIHBhcmFtcy5lbmN1ZXN0YWRvcl0pXHJcbiAgICAgICAgICAgIC5mZXRjaEFsbCgpO1xyXG4gICAgICAgICAgICBpZihyZXN1bHQucm93Q291bnQgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciAoYE5vIHNlIGVuY29udHJhcm9uIGVuY3Vlc3RhcyBjYXJnYWRhcyBlbiB1biBETSBwYXJhIGVsIG9wZXJhdGl2byAke3BhcmFtcy5vcGVyYXRpdm99LCBlbmN1ZXN0YWRvciAke3BhcmFtcy5lbmN1ZXN0YWRvcn1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7cm93czogcmVzdWx0LnJvd3MsIG9wZXJhdGl2bzogcGFyYW1zLm9wZXJhdGl2b307XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBhY3Rpb246ICdkbV9ibGFucXVlYXInLFxyXG4gICAgICAgIHBhcmFtZXRlcnM6W1xyXG4gICAgICAgICAgICB7bmFtZTonb3BlcmF0aXZvJyAgICAgICAsIHR5cGVOYW1lOid0ZXh0JywgcmVmZXJlbmNlczpcIm9wZXJhdGl2b3NcIn0sXHJcbiAgICAgICAgICAgIHtuYW1lOid0b2tlbicgICAgICAgICAsIHR5cGVOYW1lOid0ZXh0J30sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjb3JlRnVuY3Rpb246YXN5bmMgZnVuY3Rpb24oY29udGV4dDpQcm9jZWR1cmVDb250ZXh0LCBwYXJhbXM6Q29yZUZ1bmN0aW9uUGFyYW1ldGVycyl7XHJcbiAgICAgICAgICAgIHZhciBiZSA9IGNvbnRleHQuYmU7XHJcbiAgICAgICAgICAgIGNvbnN0IFVBX1BSSU5DSVBBTCA9IGF3YWl0IGdldFVBUHJpbmNpcGFsKGNvbnRleHQuY2xpZW50LCBwYXJhbXMub3BlcmF0aXZvKTtcclxuICAgICAgICAgICAgbGV0IHRhcmVhc1RlbVJlc3VsdCA9IGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KGBcclxuICAgICAgICAgICAgICAgIFVQREFURSB0YXJlYXNfdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0IGNhcmdhZG9fZG0gPSBudWxsLCBvcGVyYWNpb24gPSAnZGVzY2FyZ2FyJywgZXN0YWRvID0gJDNcclxuICAgICAgICAgICAgICAgICAgICB3aGVyZSBvcGVyYXRpdm89JDEgYW5kIGNhcmdhZG9fZG0gPSAkMlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAqYCxcclxuICAgICAgICAgICAgICAgIFtwYXJhbXMub3BlcmF0aXZvLCBwYXJhbXMudG9rZW4sIEVTVEFET19QT1NURVJJT1JfREVTQ0FSR0FdKVxyXG4gICAgICAgICAgICAuZmV0Y2hBbGwoKTtcclxuICAgICAgICAgICAgaWYodGFyZWFzVGVtUmVzdWx0LnJvd0NvdW50ID09IDApe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3IoJ05vIHNlIGJsYW5xdWXDsyBuaW5ndW5hIGVuY3Vlc3RhJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IobGV0IHR0IG9mIHRhcmVhc1RlbVJlc3VsdC5yb3dzKXtcclxuICAgICAgICAgICAgICAgIHR0LnJlc3VsdF9ibGFucXVlbyA9IGBlbmMgJHt0dC5lbmN9IHNlIGJsYW5xdWXDsyBjb3JyZWN0YW1lbnRlLmA7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0QmFja3VwID0gYXdhaXQgY29udGV4dC5jbGllbnQucXVlcnkoYFxyXG4gICAgICAgICAgICAgICAgICAgIFVQREFURSB0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGpzb25fZW5jdWVzdGEgPSBqc29uX2JhY2t1cCwgZmVjaGFfbW9kaWZfZW5jdWVzdGEgPSBmZWNoYV9iYWNrdXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSQxIGFuZCBlbmM9JDIgYW5kIGZlY2hhX2JhY2t1cCA+IGNvYWxlc2NlKGZlY2hhX21vZGlmX2VuY3Vlc3RhLCAnMTkwMC0wMS0wMScpIGFuZCBqc29uX2JhY2t1cCBpcyBub3QgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5pbmcgKmAsXHJcbiAgICAgICAgICAgICAgICAgICAgW3R0Lm9wZXJhdGl2bywgdHQuZW5jXSlcclxuICAgICAgICAgICAgICAgIC5mZXRjaE9uZVJvd0lmRXhpc3RzKCk7XHJcbiAgICAgICAgICAgICAgICBpZihyZXN1bHRCYWNrdXAucm93Q291bnQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHR0LnJlc3VsdF9ibGFucXVlbys9YCBTZSByZXN0YWJsZWNpw7MgZWwgYmFja3VwIGNvbiBmZWNoYSAke3Jlc3VsdEJhY2t1cC5yb3cuZmVjaGFfYmFja3VwLnRvWW1kSG1zKCl9LmBcclxuICAgICAgICAgICAgICAgICAgICB2YXIge3BhcmFtczpxdWVyeVBhcmFtcyxzZXR0ZXJzfSA9IGdldFNldHRlcnNBbmRQYXJhbWV0ZXJzRm9yUmVhTm9SZWFSZXN1bWVuRXN0YWRvKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZWE6IHR0LnRhcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUFQcmluY2lwYWw6IHJlc3VsdEJhY2t1cC5yb3cuanNvbl9lbmN1ZXN0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczogW3R0Lm9wZXJhdGl2bywgdHQuZW5jLCB0dC50YXJlYV1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuY2xpZW50LnF1ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgdXBkYXRlIHRhcmVhc190ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCAke3NldHRlcnMuam9pbignLCcpfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgb3BlcmF0aXZvPSAkMSBhbmQgZW5jID0gJDIgYW5kIHRhcmVhID0gJDNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmluZyAnb2snYFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgICAgICAgICAgKS5mZXRjaFVuaXF1ZVJvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNpbXVsYXJHdWFyZGFkb0RlRW5jdWVzdGFEZXNkZUFwcEVzY3JpdG9yaW8oY29udGV4dCwgcmVzdWx0QmFja3VwLnJvdy5vcGVyYXRpdm8sIHJlc3VsdEJhY2t1cC5yb3cuZW5jLCB0dC50YXJlYSxyZXN1bHRCYWNrdXAucm93Lmpzb25fZW5jdWVzdGEpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRhcmVhc1RlbVJlc3VsdC5yb3dzO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbl07XHJcbiJdfQ==
|