valtech-components 4.0.572 → 4.0.575
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/esm2022/lib/components/organisms/mini-games/chessimals-engine.mjs +365 -67
- package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +415 -262
- package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +3 -1
- package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +781 -328
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +2 -1
- package/lib/components/organisms/mini-games/types.d.ts +1 -1
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -139,28 +139,250 @@ export const CHESSIMALS_BOT_PROFILES = [
|
|
|
139
139
|
},
|
|
140
140
|
];
|
|
141
141
|
const BOT_STYLES = {
|
|
142
|
-
explorer: {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
142
|
+
explorer: {
|
|
143
|
+
advancement: 1.05,
|
|
144
|
+
capture: 0.82,
|
|
145
|
+
safety: 0.62,
|
|
146
|
+
power: 0.8,
|
|
147
|
+
center: 1.15,
|
|
148
|
+
unlock: 1.05,
|
|
149
|
+
reply: 0.7,
|
|
150
|
+
randomness: 260,
|
|
151
|
+
spread: 0.68,
|
|
152
|
+
mobility: 0.75,
|
|
153
|
+
trap: 0.5,
|
|
154
|
+
endgame: 0.55,
|
|
155
|
+
},
|
|
156
|
+
impulsive: {
|
|
157
|
+
advancement: 0.9,
|
|
158
|
+
capture: 1.45,
|
|
159
|
+
safety: 0.48,
|
|
160
|
+
power: 1.15,
|
|
161
|
+
center: 0.8,
|
|
162
|
+
unlock: 0.9,
|
|
163
|
+
reply: 0.55,
|
|
164
|
+
randomness: 290,
|
|
165
|
+
spread: 0.62,
|
|
166
|
+
mobility: 0.85,
|
|
167
|
+
trap: 0.62,
|
|
168
|
+
endgame: 0.5,
|
|
169
|
+
},
|
|
170
|
+
runner: {
|
|
171
|
+
advancement: 1.55,
|
|
172
|
+
capture: 0.78,
|
|
173
|
+
safety: 0.5,
|
|
174
|
+
power: 0.95,
|
|
175
|
+
center: 0.7,
|
|
176
|
+
unlock: 1.1,
|
|
177
|
+
reply: 0.55,
|
|
178
|
+
randomness: 250,
|
|
179
|
+
spread: 0.6,
|
|
180
|
+
mobility: 0.72,
|
|
181
|
+
trap: 0.45,
|
|
182
|
+
endgame: 1.1,
|
|
183
|
+
},
|
|
184
|
+
hunter: {
|
|
185
|
+
advancement: 0.95,
|
|
186
|
+
capture: 1.45,
|
|
187
|
+
safety: 0.9,
|
|
188
|
+
power: 1.05,
|
|
189
|
+
center: 0.95,
|
|
190
|
+
unlock: 0.95,
|
|
191
|
+
reply: 1,
|
|
192
|
+
randomness: 90,
|
|
193
|
+
spread: 0.3,
|
|
194
|
+
mobility: 0.95,
|
|
195
|
+
trap: 0.82,
|
|
196
|
+
endgame: 0.76,
|
|
197
|
+
},
|
|
198
|
+
guardian: {
|
|
199
|
+
advancement: 0.88,
|
|
200
|
+
capture: 1,
|
|
201
|
+
safety: 1.45,
|
|
202
|
+
power: 0.85,
|
|
203
|
+
center: 1.05,
|
|
204
|
+
unlock: 1,
|
|
205
|
+
reply: 1.15,
|
|
206
|
+
randomness: 70,
|
|
207
|
+
spread: 0.26,
|
|
208
|
+
mobility: 0.82,
|
|
209
|
+
trap: 0.72,
|
|
210
|
+
endgame: 0.72,
|
|
211
|
+
},
|
|
212
|
+
jumper: {
|
|
213
|
+
advancement: 1.12,
|
|
214
|
+
capture: 1,
|
|
215
|
+
safety: 0.92,
|
|
216
|
+
power: 1.42,
|
|
217
|
+
center: 1.18,
|
|
218
|
+
unlock: 1.08,
|
|
219
|
+
reply: 0.95,
|
|
220
|
+
randomness: 95,
|
|
221
|
+
spread: 0.32,
|
|
222
|
+
mobility: 1.15,
|
|
223
|
+
trap: 0.9,
|
|
224
|
+
endgame: 0.82,
|
|
225
|
+
},
|
|
226
|
+
strategist: {
|
|
227
|
+
advancement: 1.05,
|
|
228
|
+
capture: 1.08,
|
|
229
|
+
safety: 1.22,
|
|
230
|
+
power: 1.08,
|
|
231
|
+
center: 1.16,
|
|
232
|
+
unlock: 1.1,
|
|
233
|
+
reply: 1.25,
|
|
234
|
+
randomness: 22,
|
|
235
|
+
spread: 0.14,
|
|
236
|
+
mobility: 1.08,
|
|
237
|
+
trap: 1.06,
|
|
238
|
+
endgame: 1,
|
|
239
|
+
},
|
|
240
|
+
predator: {
|
|
241
|
+
advancement: 0.98,
|
|
242
|
+
capture: 1.68,
|
|
243
|
+
safety: 1.02,
|
|
244
|
+
power: 1.34,
|
|
245
|
+
center: 1,
|
|
246
|
+
unlock: 1,
|
|
247
|
+
reply: 1.12,
|
|
248
|
+
randomness: 28,
|
|
249
|
+
spread: 0.16,
|
|
250
|
+
mobility: 1.02,
|
|
251
|
+
trap: 1.18,
|
|
252
|
+
endgame: 0.82,
|
|
253
|
+
},
|
|
254
|
+
sprinter: {
|
|
255
|
+
advancement: 1.72,
|
|
256
|
+
capture: 0.9,
|
|
257
|
+
safety: 0.95,
|
|
258
|
+
power: 1.08,
|
|
259
|
+
center: 0.86,
|
|
260
|
+
unlock: 1.18,
|
|
261
|
+
reply: 1,
|
|
262
|
+
randomness: 26,
|
|
263
|
+
spread: 0.15,
|
|
264
|
+
mobility: 0.95,
|
|
265
|
+
trap: 0.78,
|
|
266
|
+
endgame: 1.42,
|
|
267
|
+
},
|
|
268
|
+
sentinel: {
|
|
269
|
+
advancement: 0.9,
|
|
270
|
+
capture: 1.12,
|
|
271
|
+
safety: 1.72,
|
|
272
|
+
power: 0.95,
|
|
273
|
+
center: 1.28,
|
|
274
|
+
unlock: 1.05,
|
|
275
|
+
reply: 1.38,
|
|
276
|
+
randomness: 18,
|
|
277
|
+
spread: 0.12,
|
|
278
|
+
mobility: 0.86,
|
|
279
|
+
trap: 1.04,
|
|
280
|
+
endgame: 0.84,
|
|
281
|
+
},
|
|
282
|
+
oracle: {
|
|
283
|
+
advancement: 1,
|
|
284
|
+
capture: 1.12,
|
|
285
|
+
safety: 1.42,
|
|
286
|
+
power: 1.1,
|
|
287
|
+
center: 1.18,
|
|
288
|
+
unlock: 1.08,
|
|
289
|
+
reply: 1.8,
|
|
290
|
+
randomness: 8,
|
|
291
|
+
spread: 0.08,
|
|
292
|
+
mobility: 1.06,
|
|
293
|
+
trap: 1.22,
|
|
294
|
+
endgame: 1.08,
|
|
295
|
+
},
|
|
296
|
+
ambusher: {
|
|
297
|
+
advancement: 0.9,
|
|
298
|
+
capture: 1.48,
|
|
299
|
+
safety: 1.08,
|
|
300
|
+
power: 1.46,
|
|
301
|
+
center: 1.05,
|
|
302
|
+
unlock: 1.02,
|
|
303
|
+
reply: 1.32,
|
|
304
|
+
randomness: 14,
|
|
305
|
+
spread: 0.1,
|
|
306
|
+
mobility: 1.12,
|
|
307
|
+
trap: 1.72,
|
|
308
|
+
endgame: 0.92,
|
|
309
|
+
},
|
|
310
|
+
locksmith: {
|
|
311
|
+
advancement: 0.88,
|
|
312
|
+
capture: 1.04,
|
|
313
|
+
safety: 1.55,
|
|
314
|
+
power: 1.02,
|
|
315
|
+
center: 1.48,
|
|
316
|
+
unlock: 1.12,
|
|
317
|
+
reply: 1.52,
|
|
318
|
+
randomness: 12,
|
|
319
|
+
spread: 0.1,
|
|
320
|
+
mobility: 1.58,
|
|
321
|
+
trap: 1.24,
|
|
322
|
+
endgame: 0.86,
|
|
323
|
+
},
|
|
324
|
+
storm: {
|
|
325
|
+
advancement: 1.18,
|
|
326
|
+
capture: 1.38,
|
|
327
|
+
safety: 0.98,
|
|
328
|
+
power: 1.62,
|
|
329
|
+
center: 1.08,
|
|
330
|
+
unlock: 1.18,
|
|
331
|
+
reply: 1.22,
|
|
332
|
+
randomness: 18,
|
|
333
|
+
spread: 0.13,
|
|
334
|
+
mobility: 1.36,
|
|
335
|
+
trap: 1.28,
|
|
336
|
+
endgame: 1.02,
|
|
337
|
+
},
|
|
338
|
+
matriarch: {
|
|
339
|
+
advancement: 0.96,
|
|
340
|
+
capture: 1.18,
|
|
341
|
+
safety: 1.64,
|
|
342
|
+
power: 1.18,
|
|
343
|
+
center: 1.22,
|
|
344
|
+
unlock: 1.08,
|
|
345
|
+
reply: 1.66,
|
|
346
|
+
randomness: 10,
|
|
347
|
+
spread: 0.08,
|
|
348
|
+
mobility: 1.02,
|
|
349
|
+
trap: 1.36,
|
|
350
|
+
endgame: 1,
|
|
351
|
+
},
|
|
352
|
+
endgame: {
|
|
353
|
+
advancement: 1.46,
|
|
354
|
+
capture: 1,
|
|
355
|
+
safety: 1.28,
|
|
356
|
+
power: 1.04,
|
|
357
|
+
center: 0.94,
|
|
358
|
+
unlock: 1.08,
|
|
359
|
+
reply: 1.44,
|
|
360
|
+
randomness: 10,
|
|
361
|
+
spread: 0.09,
|
|
362
|
+
mobility: 0.98,
|
|
363
|
+
trap: 1.02,
|
|
364
|
+
endgame: 1.86,
|
|
365
|
+
},
|
|
366
|
+
magnus: {
|
|
367
|
+
advancement: 1.04,
|
|
368
|
+
capture: 1.22,
|
|
369
|
+
safety: 1.9,
|
|
370
|
+
power: 0.9,
|
|
371
|
+
center: 1.42,
|
|
372
|
+
unlock: 1.08,
|
|
373
|
+
reply: 2.08,
|
|
374
|
+
randomness: 3,
|
|
375
|
+
spread: 0.04,
|
|
376
|
+
mobility: 1.08,
|
|
377
|
+
trap: 1.42,
|
|
378
|
+
endgame: 1.86,
|
|
379
|
+
},
|
|
159
380
|
};
|
|
160
381
|
const DEFAULT_BOT_PROFILE_BY_DIFFICULTY = {
|
|
161
382
|
easy: 'explorer',
|
|
162
383
|
normal: 'hunter',
|
|
163
384
|
hard: 'strategist',
|
|
385
|
+
master: 'magnus',
|
|
164
386
|
};
|
|
165
387
|
export function createChessimalsGame(boardSize = 6, options = {}) {
|
|
166
388
|
const pieces = [];
|
|
@@ -200,12 +422,12 @@ export function createChessimalsGame(boardSize = 6, options = {}) {
|
|
|
200
422
|
};
|
|
201
423
|
}
|
|
202
424
|
export function getChessimalsPieceAt(state, position) {
|
|
203
|
-
return activePieces(state).find(
|
|
425
|
+
return activePieces(state).find(piece => !piece.captured && piece.position.row === position.row && piece.position.col === position.col);
|
|
204
426
|
}
|
|
205
427
|
export function getChessimalsLegalMoves(state, pieceId, animal) {
|
|
206
428
|
if (state.status !== 'in_progress')
|
|
207
429
|
return [];
|
|
208
|
-
const piece = activePieces(state).find(
|
|
430
|
+
const piece = activePieces(state).find(item => item.id === pieceId && !item.captured);
|
|
209
431
|
if (!piece || piece.color !== state.currentTurn)
|
|
210
432
|
return [];
|
|
211
433
|
if (animal) {
|
|
@@ -244,9 +466,18 @@ export function chooseChessimalsBotMove(state, difficulty = 'normal', profileId
|
|
|
244
466
|
const challengePressure = getChallengePressure(options.challengeRound);
|
|
245
467
|
const style = tuneBotStyle(baseStyle, difficulty, challengePressure, options.nightmareMode);
|
|
246
468
|
const quickScored = moves
|
|
247
|
-
.map(
|
|
469
|
+
.map(move => ({
|
|
470
|
+
move,
|
|
471
|
+
score: scoreBotMove(state, move, difficulty, style, challengePressure, false, options.nightmareMode),
|
|
472
|
+
}))
|
|
248
473
|
.sort((a, b) => b.score - a.score);
|
|
249
|
-
const lookaheadLimit = options.nightmareMode === 'magnus'
|
|
474
|
+
const lookaheadLimit = options.nightmareMode === 'magnus' || difficulty === 'master'
|
|
475
|
+
? 48
|
|
476
|
+
: difficulty === 'hard'
|
|
477
|
+
? 32
|
|
478
|
+
: difficulty === 'normal'
|
|
479
|
+
? 24
|
|
480
|
+
: 0;
|
|
250
481
|
const scored = quickScored
|
|
251
482
|
.map((item, index) => ({
|
|
252
483
|
move: item.move,
|
|
@@ -256,18 +487,18 @@ export function chooseChessimalsBotMove(state, difficulty = 'normal', profileId
|
|
|
256
487
|
}))
|
|
257
488
|
.sort((a, b) => b.score - a.score);
|
|
258
489
|
if (difficulty === 'easy') {
|
|
259
|
-
const playable = scored.filter(
|
|
490
|
+
const playable = scored.filter(item => item.score > -3000);
|
|
260
491
|
return pickNoisyBotMove(playable.length ? playable : scored, 0.55);
|
|
261
492
|
}
|
|
262
493
|
if (difficulty === 'normal') {
|
|
263
494
|
return scored[0]?.move;
|
|
264
495
|
}
|
|
265
|
-
const winningMove = scored.find(
|
|
496
|
+
const winningMove = scored.find(item => item.score >= 10000);
|
|
266
497
|
if (winningMove)
|
|
267
498
|
return winningMove.move;
|
|
268
|
-
const opponentWinningTargets = new Set(getImmediateWinningMoves(state, otherColor(state.currentTurn)).map(
|
|
499
|
+
const opponentWinningTargets = new Set(getImmediateWinningMoves(state, otherColor(state.currentTurn)).map(move => positionKey(move.to)));
|
|
269
500
|
if (opponentWinningTargets.size > 0) {
|
|
270
|
-
const blockingMove = scored.find(
|
|
501
|
+
const blockingMove = scored.find(item => item.move.capturesPieceId || opponentWinningTargets.has(positionKey(item.move.to)));
|
|
271
502
|
if (blockingMove)
|
|
272
503
|
return blockingMove.move;
|
|
273
504
|
}
|
|
@@ -283,15 +514,15 @@ export function chooseChessimalsBotMove(state, difficulty = 'normal', profileId
|
|
|
283
514
|
return scored[0]?.move;
|
|
284
515
|
}
|
|
285
516
|
export function applyChessimalsMove(state, candidate) {
|
|
286
|
-
const legalMove = getChessimalsLegalMoves(state, candidate.pieceId, candidate.animal).find(
|
|
517
|
+
const legalMove = getChessimalsLegalMoves(state, candidate.pieceId, candidate.animal).find(move => samePosition(move.from, candidate.from) && samePosition(move.to, candidate.to));
|
|
287
518
|
if (!legalMove) {
|
|
288
519
|
throw new Error('CHESSIMALS_ILLEGAL_MOVE');
|
|
289
520
|
}
|
|
290
|
-
const movedPiece = activePieces(state).find(
|
|
521
|
+
const movedPiece = activePieces(state).find(piece => piece.id === legalMove.pieceId);
|
|
291
522
|
if (!movedPiece) {
|
|
292
523
|
throw new Error('CHESSIMALS_PIECE_NOT_FOUND');
|
|
293
524
|
}
|
|
294
|
-
const pieces = activePieces(state).map(
|
|
525
|
+
const pieces = activePieces(state).map(piece => {
|
|
295
526
|
if (piece.id === legalMove.pieceId) {
|
|
296
527
|
return { ...piece, position: { ...legalMove.to } };
|
|
297
528
|
}
|
|
@@ -321,7 +552,7 @@ export function applyChessimalsMove(state, candidate) {
|
|
|
321
552
|
lastMove: legalMove,
|
|
322
553
|
});
|
|
323
554
|
const promoted = isPromotionRow(nextState.boardSize, movedPiece.color, legalMove.to);
|
|
324
|
-
const enemyPieces = activePieces(nextState).filter(
|
|
555
|
+
const enemyPieces = activePieces(nextState).filter(piece => piece.color !== movedPiece.color && !piece.captured);
|
|
325
556
|
const enemyHasLegalMoves = getChessimalsAllLegalMoves(nextState, nextState.currentTurn).length > 0;
|
|
326
557
|
const resolvedState = promoted || enemyPieces.length === 0 || !enemyHasLegalMoves
|
|
327
558
|
? {
|
|
@@ -337,10 +568,7 @@ export function applyChessimalsMove(state, candidate) {
|
|
|
337
568
|
: nextState;
|
|
338
569
|
return {
|
|
339
570
|
...resolvedState,
|
|
340
|
-
moveHistory: [
|
|
341
|
-
...ensureMoveHistory(state),
|
|
342
|
-
createMoveHistoryEntry(resolvedState, legalMove),
|
|
343
|
-
],
|
|
571
|
+
moveHistory: [...ensureMoveHistory(state), createMoveHistoryEntry(resolvedState, legalMove)],
|
|
344
572
|
};
|
|
345
573
|
}
|
|
346
574
|
export function createChessimalsReviewState(state, entry) {
|
|
@@ -383,7 +611,7 @@ function cloneMoveHistoryEntry(entry) {
|
|
|
383
611
|
};
|
|
384
612
|
}
|
|
385
613
|
function clonePieces(pieces) {
|
|
386
|
-
return pieces.map(
|
|
614
|
+
return pieces.map(piece => ({
|
|
387
615
|
...piece,
|
|
388
616
|
position: { ...piece.position },
|
|
389
617
|
}));
|
|
@@ -407,10 +635,7 @@ export function resignChessimalsGame(state, color) {
|
|
|
407
635
|
};
|
|
408
636
|
return {
|
|
409
637
|
...resignedState,
|
|
410
|
-
moveHistory: [
|
|
411
|
-
...ensureMoveHistory(state),
|
|
412
|
-
createMoveHistoryEntry(resignedState),
|
|
413
|
-
],
|
|
638
|
+
moveHistory: [...ensureMoveHistory(state), createMoveHistoryEntry(resignedState)],
|
|
414
639
|
};
|
|
415
640
|
}
|
|
416
641
|
export function positionKey(position) {
|
|
@@ -537,12 +762,16 @@ function getKangarooMoves(state, piece) {
|
|
|
537
762
|
function scoreBotMove(state, move, difficulty, style, challengePressure = 0, includeTacticalPressure = true, nightmareMode = 'none') {
|
|
538
763
|
const color = state.currentTurn;
|
|
539
764
|
const targetPiece = move.capturesPieceId
|
|
540
|
-
? activePieces(state).find(
|
|
765
|
+
? activePieces(state).find(piece => piece.id === move.capturesPieceId)
|
|
541
766
|
: undefined;
|
|
542
767
|
const advancement = color === 'white' ? state.boardSize - 1 - move.to.row : move.to.row;
|
|
543
768
|
let score = advancement * 24 * style.advancement;
|
|
544
769
|
const stepsToPromotion = color === 'white' ? move.to.row : state.boardSize - 1 - move.to.row;
|
|
545
|
-
score +=
|
|
770
|
+
score +=
|
|
771
|
+
Math.max(0, state.boardSize - 1 - stepsToPromotion) *
|
|
772
|
+
10 *
|
|
773
|
+
challengePressure *
|
|
774
|
+
style.advancement;
|
|
546
775
|
if (move.kind === 'basic' && isPromotionRow(state.boardSize, color, move.to)) {
|
|
547
776
|
score += 10000 + 2500 * challengePressure;
|
|
548
777
|
}
|
|
@@ -559,7 +788,9 @@ function scoreBotMove(state, move, difficulty, style, challengePressure = 0, inc
|
|
|
559
788
|
score += targetAdvancement * (16 + 8 * challengePressure) * style.capture;
|
|
560
789
|
}
|
|
561
790
|
if (move.kind === 'power') {
|
|
562
|
-
score +=
|
|
791
|
+
score +=
|
|
792
|
+
(targetPiece ? 120 : difficulty === 'hard' ? -60 - 170 * challengePressure : -30) *
|
|
793
|
+
style.power;
|
|
563
794
|
}
|
|
564
795
|
if (nightmareMode === 'magnus' && move.kind === 'power') {
|
|
565
796
|
score += scoreMagnusPowerPatience(state, move, targetPiece, style);
|
|
@@ -571,8 +802,14 @@ function scoreBotMove(state, move, difficulty, style, challengePressure = 0, inc
|
|
|
571
802
|
if (wouldUnlockPower(state, color, move.to))
|
|
572
803
|
score += 90 * style.unlock;
|
|
573
804
|
if (includeTacticalPressure && state.boardSize <= 6) {
|
|
574
|
-
score +=
|
|
575
|
-
|
|
805
|
+
score +=
|
|
806
|
+
countPowerReachAfterMove(state, move, color) *
|
|
807
|
+
(difficulty === 'hard' ? 8 : 4) *
|
|
808
|
+
style.mobility;
|
|
809
|
+
score +=
|
|
810
|
+
countProtectedThreatsAfterMove(state, move, color) *
|
|
811
|
+
(difficulty === 'hard' ? 36 : 18) *
|
|
812
|
+
style.trap;
|
|
576
813
|
score += scoreEndgamePressure(state, move, color) * style.endgame;
|
|
577
814
|
}
|
|
578
815
|
else {
|
|
@@ -591,30 +828,74 @@ function scoreBotMoveWithLookahead(state, move, difficulty, style, challengePres
|
|
|
591
828
|
if (afterMove.status === 'finished')
|
|
592
829
|
return score + 5000;
|
|
593
830
|
const opponentMoves = getChessimalsAllLegalMoves(afterMove);
|
|
594
|
-
const opponentImmediateWin = opponentMoves.some(
|
|
831
|
+
const opponentImmediateWin = opponentMoves.some(opponentMove => opponentMove.kind === 'basic' &&
|
|
595
832
|
isPromotionRow(afterMove.boardSize, afterMove.currentTurn, opponentMove.to));
|
|
596
833
|
if (opponentImmediateWin) {
|
|
597
|
-
score -=
|
|
834
|
+
score -=
|
|
835
|
+
(difficulty === 'easy'
|
|
836
|
+
? 1800
|
|
837
|
+
: difficulty === 'normal'
|
|
838
|
+
? 5200
|
|
839
|
+
: 8000 + 4200 * challengePressure) * style.safety;
|
|
598
840
|
}
|
|
599
|
-
const movedPiece = afterMove.pieces.find(
|
|
841
|
+
const movedPiece = afterMove.pieces.find(piece => piece.id === move.pieceId && !piece.captured);
|
|
600
842
|
if (movedPiece) {
|
|
601
|
-
const canCaptureMovedPiece = opponentMoves.some(
|
|
843
|
+
const canCaptureMovedPiece = opponentMoves.some(opponentMove => opponentMove.capturesPieceId === move.pieceId);
|
|
602
844
|
if (canCaptureMovedPiece) {
|
|
603
|
-
score -=
|
|
604
|
-
|
|
605
|
-
|
|
845
|
+
score -=
|
|
846
|
+
(move.capturesPieceId
|
|
847
|
+
? 180
|
|
848
|
+
: difficulty === 'easy'
|
|
849
|
+
? 120
|
|
850
|
+
: difficulty === 'normal'
|
|
851
|
+
? 360
|
|
852
|
+
: 560) *
|
|
853
|
+
style.safety *
|
|
854
|
+
(1 + challengePressure);
|
|
606
855
|
}
|
|
607
856
|
const center = (afterMove.boardSize - 1) / 2;
|
|
608
857
|
const centerControl = Math.max(0, afterMove.boardSize / 2 - Math.abs(movedPiece.position.col - center));
|
|
609
858
|
score += centerControl * (difficulty === 'hard' ? 18 : 10) * style.center;
|
|
610
859
|
}
|
|
611
860
|
const opponentBestReply = opponentMoves
|
|
612
|
-
.map(
|
|
861
|
+
.map(opponentMove => scoreBotMove(afterMove, opponentMove, difficulty, style, challengePressure, false, nightmareMode))
|
|
613
862
|
.sort((a, b) => b - a)[0];
|
|
614
863
|
if (opponentBestReply) {
|
|
615
|
-
const replyWeight = difficulty === 'easy'
|
|
864
|
+
const replyWeight = difficulty === 'easy'
|
|
865
|
+
? 0.12
|
|
866
|
+
: difficulty === 'normal'
|
|
867
|
+
? 0.4 + 0.1 * challengePressure
|
|
868
|
+
: difficulty === 'master'
|
|
869
|
+
? 0.72 + 0.22 * challengePressure
|
|
870
|
+
: 0.48 + 0.16 * challengePressure;
|
|
616
871
|
score -= opponentBestReply * replyWeight * style.reply;
|
|
617
872
|
}
|
|
873
|
+
if (difficulty === 'hard' || difficulty === 'master') {
|
|
874
|
+
const topOppMoves = opponentMoves
|
|
875
|
+
.map(m => ({
|
|
876
|
+
move: m,
|
|
877
|
+
score: scoreBotMove(afterMove, m, difficulty, style, challengePressure, false, nightmareMode),
|
|
878
|
+
}))
|
|
879
|
+
.sort((a, b) => b.score - a.score)
|
|
880
|
+
.slice(0, 4);
|
|
881
|
+
for (const { move: oppMove } of topOppMoves) {
|
|
882
|
+
try {
|
|
883
|
+
const s2 = applyChessimalsMove(afterMove, oppMove);
|
|
884
|
+
if (s2.status === 'finished')
|
|
885
|
+
continue;
|
|
886
|
+
const myCounters = getChessimalsAllLegalMoves(s2);
|
|
887
|
+
if (myCounters.length === 0)
|
|
888
|
+
continue;
|
|
889
|
+
const myBest = myCounters
|
|
890
|
+
.map(m => scoreBotMove(s2, m, difficulty, style, challengePressure, false, nightmareMode))
|
|
891
|
+
.sort((a, b) => b - a)[0] ?? 0;
|
|
892
|
+
score += myBest * (difficulty === 'master' ? 0.22 : 0.14) * style.reply;
|
|
893
|
+
}
|
|
894
|
+
catch {
|
|
895
|
+
// skip
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
}
|
|
618
899
|
}
|
|
619
900
|
catch {
|
|
620
901
|
score -= 1000;
|
|
@@ -622,9 +903,9 @@ function scoreBotMoveWithLookahead(state, move, difficulty, style, challengePres
|
|
|
622
903
|
return score;
|
|
623
904
|
}
|
|
624
905
|
function getChallengePressure(round) {
|
|
625
|
-
if (!round
|
|
906
|
+
if (!round)
|
|
626
907
|
return 0;
|
|
627
|
-
return Math.min(1, Math.max(0,
|
|
908
|
+
return Math.min(1, Math.max(0, round / 8));
|
|
628
909
|
}
|
|
629
910
|
function tuneBotStyle(style, difficulty, challengePressure, nightmareMode = 'none') {
|
|
630
911
|
if (nightmareMode === 'hunt') {
|
|
@@ -662,9 +943,26 @@ function tuneBotStyle(style, difficulty, challengePressure, nightmareMode = 'non
|
|
|
662
943
|
endgame: style.endgame * 1.28,
|
|
663
944
|
};
|
|
664
945
|
}
|
|
946
|
+
if (difficulty === 'master') {
|
|
947
|
+
style = {
|
|
948
|
+
...style,
|
|
949
|
+
capture: style.capture * 1.08,
|
|
950
|
+
safety: style.safety * 1.22,
|
|
951
|
+
reply: style.reply * 1.32,
|
|
952
|
+
center: style.center * 1.12,
|
|
953
|
+
randomness: Math.min(style.randomness, 3),
|
|
954
|
+
spread: style.spread * 0.5,
|
|
955
|
+
trap: style.trap * 1.14,
|
|
956
|
+
endgame: style.endgame * 1.18,
|
|
957
|
+
};
|
|
958
|
+
}
|
|
665
959
|
if (!challengePressure)
|
|
666
960
|
return style;
|
|
667
|
-
const pressure = difficulty === 'easy'
|
|
961
|
+
const pressure = difficulty === 'easy'
|
|
962
|
+
? challengePressure * 0.45
|
|
963
|
+
: difficulty === 'master'
|
|
964
|
+
? challengePressure * 1.15
|
|
965
|
+
: challengePressure;
|
|
668
966
|
return {
|
|
669
967
|
...style,
|
|
670
968
|
capture: style.capture * (1 + pressure * 0.28),
|
|
@@ -679,7 +977,7 @@ function chooseChallengeBasicCapture(scored, challengePressure) {
|
|
|
679
977
|
if (challengePressure < 0.5)
|
|
680
978
|
return undefined;
|
|
681
979
|
const best = scored[0];
|
|
682
|
-
const bestBasicCapture = scored.find(
|
|
980
|
+
const bestBasicCapture = scored.find(item => item.move.kind === 'basic' && item.move.capturesPieceId);
|
|
683
981
|
if (!best || !bestBasicCapture)
|
|
684
982
|
return undefined;
|
|
685
983
|
if (best.move.kind === 'basic' && best.move.capturesPieceId)
|
|
@@ -691,7 +989,7 @@ function chooseNightmareCapture(scored, nightmareMode) {
|
|
|
691
989
|
if (nightmareMode !== 'hunt')
|
|
692
990
|
return undefined;
|
|
693
991
|
const best = scored[0];
|
|
694
|
-
const capture = scored.find(
|
|
992
|
+
const capture = scored.find(item => item.move.capturesPieceId);
|
|
695
993
|
if (!best || !capture)
|
|
696
994
|
return undefined;
|
|
697
995
|
return best.score - capture.score <= 1800 ? capture.move : undefined;
|
|
@@ -716,7 +1014,7 @@ function countPowerReachAfterMove(state, move, color) {
|
|
|
716
1014
|
try {
|
|
717
1015
|
const afterMove = applyChessimalsMove(state, move);
|
|
718
1016
|
const evaluationState = { ...afterMove, currentTurn: color };
|
|
719
|
-
return getChessimalsAllLegalMoves(evaluationState, color).filter(
|
|
1017
|
+
return getChessimalsAllLegalMoves(evaluationState, color).filter(nextMove => nextMove.kind === 'power').length;
|
|
720
1018
|
}
|
|
721
1019
|
catch {
|
|
722
1020
|
return 0;
|
|
@@ -727,15 +1025,15 @@ function countProtectedThreatsAfterMove(state, move, color) {
|
|
|
727
1025
|
const afterMove = applyChessimalsMove(state, move);
|
|
728
1026
|
const evaluationState = { ...afterMove, currentTurn: color };
|
|
729
1027
|
const ourMoves = getChessimalsAllLegalMoves(evaluationState, color);
|
|
730
|
-
const enemyPieces = activePieces(afterMove).filter(
|
|
731
|
-
return enemyPieces.filter(
|
|
1028
|
+
const enemyPieces = activePieces(afterMove).filter(piece => piece.color !== color && !piece.captured);
|
|
1029
|
+
return enemyPieces.filter(piece => ourMoves.some(nextMove => nextMove.capturesPieceId === piece.id)).length;
|
|
732
1030
|
}
|
|
733
1031
|
catch {
|
|
734
1032
|
return 0;
|
|
735
1033
|
}
|
|
736
1034
|
}
|
|
737
1035
|
function scoreEndgamePressure(state, move, color) {
|
|
738
|
-
const remainingEnemyPieces = activePieces(state).filter(
|
|
1036
|
+
const remainingEnemyPieces = activePieces(state).filter(piece => piece.color !== color && !piece.captured).length;
|
|
739
1037
|
const urgency = remainingEnemyPieces <= Math.max(2, Math.floor(state.boardSize / 2)) ? 1.6 : 1;
|
|
740
1038
|
const distanceToPromotion = color === 'white' ? move.to.row : state.boardSize - 1 - move.to.row;
|
|
741
1039
|
return Math.max(0, state.boardSize - distanceToPromotion) * 14 * urgency;
|
|
@@ -747,7 +1045,7 @@ function chooseConservativeHardCapture(state, scored) {
|
|
|
747
1045
|
if (!best || best.move.kind !== 'power' || !best.move.capturesPieceId || best.score >= 10000) {
|
|
748
1046
|
return undefined;
|
|
749
1047
|
}
|
|
750
|
-
const bestBasicCapture = scored.find(
|
|
1048
|
+
const bestBasicCapture = scored.find(item => item.move.kind === 'basic' && item.move.capturesPieceId);
|
|
751
1049
|
if (!bestBasicCapture)
|
|
752
1050
|
return undefined;
|
|
753
1051
|
return best.score - bestBasicCapture.score <= 650 ? bestBasicCapture.move : undefined;
|
|
@@ -773,7 +1071,7 @@ function pickNoisyBotMove(scored, spread) {
|
|
|
773
1071
|
return pool[0]?.move;
|
|
774
1072
|
}
|
|
775
1073
|
function getImmediateWinningMoves(state, color) {
|
|
776
|
-
return getChessimalsAllLegalMoves(state, color).filter(
|
|
1074
|
+
return getChessimalsAllLegalMoves(state, color).filter(move => move.kind === 'basic' && isPromotionRow(state.boardSize, color, move.to));
|
|
777
1075
|
}
|
|
778
1076
|
function wouldUnlockPower(state, color, position) {
|
|
779
1077
|
if (state.players[color].powerUnlocked)
|
|
@@ -787,7 +1085,7 @@ function isSquareVulnerableAfterMove(state, move) {
|
|
|
787
1085
|
const afterMove = applyChessimalsMove(state, move);
|
|
788
1086
|
if (afterMove.status === 'finished')
|
|
789
1087
|
return false;
|
|
790
|
-
return getChessimalsAllLegalMoves(afterMove).some(
|
|
1088
|
+
return getChessimalsAllLegalMoves(afterMove).some(enemyMove => samePosition(enemyMove.to, move.to) && !!enemyMove.capturesPieceId);
|
|
791
1089
|
}
|
|
792
1090
|
catch {
|
|
793
1091
|
return false;
|
|
@@ -843,7 +1141,7 @@ function refreshChessimalsPowerUnlocks(state) {
|
|
|
843
1141
|
function hasCrossedCenter(state, color) {
|
|
844
1142
|
const centerTop = state.boardSize / 2 - 1;
|
|
845
1143
|
const centerBottom = state.boardSize / 2;
|
|
846
|
-
return activePieces(state).some(
|
|
1144
|
+
return activePieces(state).some(piece => {
|
|
847
1145
|
if (piece.color !== color || piece.captured)
|
|
848
1146
|
return false;
|
|
849
1147
|
return color === 'white' ? piece.position.row <= centerTop : piece.position.row >= centerBottom;
|
|
@@ -853,7 +1151,7 @@ function hasEnemyEnteredHome(state, color) {
|
|
|
853
1151
|
const centerTop = state.boardSize / 2 - 1;
|
|
854
1152
|
const centerBottom = state.boardSize / 2;
|
|
855
1153
|
const enemy = otherColor(color);
|
|
856
|
-
return activePieces(state).some(
|
|
1154
|
+
return activePieces(state).some(piece => {
|
|
857
1155
|
if (piece.color !== enemy || piece.captured)
|
|
858
1156
|
return false;
|
|
859
1157
|
return color === 'white' ? piece.position.row >= centerBottom : piece.position.row <= centerTop;
|
|
@@ -874,4 +1172,4 @@ function otherColor(color) {
|
|
|
874
1172
|
function createLocalId() {
|
|
875
1173
|
return `local-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
876
1174
|
}
|
|
877
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1lbmdpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21pbmktZ2FtZXMvY2hlc3NpbWFscy1lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE1BQU0sT0FBTyxHQUEyQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlFLE1BQU0sZ0NBQWdDLEdBQUcsMkNBQTJDLENBQUM7QUFzQnJGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUEyQjtJQUM3RDtRQUNFLEVBQUUsRUFBRSxVQUFVO1FBQ2QsVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLElBQUk7UUFDWixTQUFTLEVBQUUsR0FBRyxnQ0FBZ0MsZUFBZTtRQUM3RCxRQUFRLEVBQUUsdUJBQXVCO1FBQ2pDLGNBQWMsRUFBRSwyQkFBMkI7S0FDNUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxXQUFXO1FBQ2YsVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLEdBQUc7UUFDWCxTQUFTLEVBQUUsR0FBRyxnQ0FBZ0MsZ0JBQWdCO1FBQzlELFFBQVEsRUFBRSx3QkFBd0I7UUFDbEMsY0FBYyxFQUFFLDRCQUE0QjtLQUM3QztJQUNEO1FBQ0UsRUFBRSxFQUFFLFFBQVE7UUFDWixVQUFVLEVBQUUsTUFBTTtRQUNsQixNQUFNLEVBQUUsSUFBSTtRQUNaLFNBQVMsRUFBRSxHQUFHLGdDQUFnQyxhQUFhO1FBQzNELFFBQVEsRUFBRSxxQkFBcUI7UUFDL0IsY0FBYyxFQUFFLHlCQUF5QjtLQUMxQztJQUNEO1FBQ0UsRUFBRSxFQUFFLFFBQVE7UUFDWixVQUFVLEVBQUUsUUFBUTtRQUNwQixNQUFNLEVBQUUsSUFBSTtRQUNaLFNBQVMsRUFBRSxHQUFHLGdDQUFnQyxhQUFhO1FBQzNELFFBQVEsRUFBRSxxQkFBcUI7UUFDL0Is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LEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7SUFDckwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDcEwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDckwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDckwsVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDekwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDckwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDdkwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDMUwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDbkwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDekwsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDM0wsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDeEwsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDekwsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDdkwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUs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UUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLElBQUksUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQy9GLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsQ0FBcUIsRUFBRSxDQUFxQjtJQUNoRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDNUMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQTRCO0lBQzlDLE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixPQUFPLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hlc3NpbWFsc0FuaW1hbFR5cGUsXG4gIENoZXNzaW1hbHNCb3REaWZmaWN1bHR5LFxuICBDaGVzc2ltYWxzQm90UHJvZmlsZSxcbiAgQ2hlc3NpbWFsc0JvdFByb2ZpbGVJZCxcbiAgQ2hlc3NpbWFsc0JvYXJkU2l6ZSxcbiAgQ2hlc3NpbWFsc0dhbWVNb2RlLFxuICBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBDaGVzc2ltYWxzR2FtZVN0YXR1cyxcbiAgQ2hlc3NpbWFsc01vdmUsXG4gIENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5LFxuICBDaGVzc2ltYWxzTmlnaHRtYXJlTW9kZSxcbiAgQ2hlc3NpbWFsc09ubGluZVN0YXRlLFxuICBDaGVzc2ltYWxzUGllY2UsXG4gIENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbiAgQ2hlc3NpbWFsc1Bvc2l0aW9uLFxufSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQU5JTUFMUzogQ2hlc3NpbWFsc0FuaW1hbFR5cGVbXSA9IFsnZWFnbGUnLCAnYnVsbCcsICdrYW5nYXJvbycsICdsaW9uJ107XG5jb25zdCBDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRSA9ICdhc3NldHMvZ2FtZXMvY2hlc3NpbWFscy9jaGFsbGVuZ2UtYXZhdGFycyc7XG5cbmludGVyZmFjZSBDaGVzc2ltYWxzQm90U3R5bGUge1xuICBhZHZhbmNlbWVudDogbnVtYmVyO1xuICBjYXB0dXJlOiBudW1iZXI7XG4gIHNhZmV0eTogbnVtYmVyO1xuICBwb3dlcjogbnVtYmVyO1xuICBjZW50ZXI6IG51bWJlcjtcbiAgdW5sb2NrOiBudW1iZXI7XG4gIHJlcGx5OiBudW1iZXI7XG4gIHJhbmRvbW5lc3M6IG51bWJlcjtcbiAgc3ByZWFkOiBudW1iZXI7XG4gIG1vYmlsaXR5OiBudW1iZXI7XG4gIHRyYXA6IG51bWJlcjtcbiAgZW5kZ2FtZTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgQ2hlc3NpbWFsc0JvdE9wdGlvbnMge1xuICBjaGFsbGVuZ2VSb3VuZD86IG51bWJlcjtcbiAgbmlnaHRtYXJlTW9kZT86IENoZXNzaW1hbHNOaWdodG1hcmVNb2RlO1xufVxuXG5leHBvcnQgY29uc3QgQ0hFU1NJTUFMU19CT1RfUFJPRklMRVM6IENoZXNzaW1hbHNCb3RQcm9maWxlW10gPSBbXG4gIHtcbiAgICBpZDogJ2V4cGxvcmVyJyxcbiAgICBkaWZmaWN1bHR5OiAnZWFzeScsXG4gICAgYXZhdGFyOiAn8J+nrScsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vZXhwbG9yZXIucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RFeHBsb3JlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90RXhwbG9yZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnaW1wdWxzaXZlJyxcbiAgICBkaWZmaWN1bHR5OiAnZWFzeScsXG4gICAgYXZhdGFyOiAn4pqhJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9pbXB1bHNpdmUucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RJbXB1bHNpdmUnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdEltcHVsc2l2ZUJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdydW5uZXInLFxuICAgIGRpZmZpY3VsdHk6ICdlYXN5JyxcbiAgICBhdmF0YXI6ICfwn4+BJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9ydW5uZXIucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RSdW5uZXInLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFJ1bm5lckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdodW50ZXInLFxuICAgIGRpZmZpY3VsdHk6ICdub3JtYWwnLFxuICAgIGF2YXRhcjogJ/Cfjq8nLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L2h1bnRlci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEh1bnRlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90SHVudGVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2d1YXJkaWFuJyxcbiAgICBkaWZmaWN1bHR5OiAnbm9ybWFsJyxcbiAgICBhdmF0YXI6ICfwn5uh77iPJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9ndWFyZGlhbi5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEd1YXJkaWFuJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RHdWFyZGlhbkJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdqdW1wZXInLFxuICAgIGRpZmZpY3VsdHk6ICdub3JtYWwnLFxuICAgIGF2YXRhcjogJ/CfppgnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L2p1bXBlci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEp1bXBlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90SnVtcGVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3N0cmF0ZWdpc3QnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfimZ/vuI8nLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L3N0cmF0ZWdpc3QucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RTdHJhdGVnaXN0JyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RTdHJhdGVnaXN0Qm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3ByZWRhdG9yJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+mgScsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vcHJlZGF0b3IucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RQcmVkYXRvcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90UHJlZGF0b3JCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnc3ByaW50ZXInLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn5qAJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9zcHJpbnRlci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFNwcmludGVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RTcHJpbnRlckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdzZW50aW5lbCcsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/Cfj7AnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L3NlbnRpbmVsLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90U2VudGluZWwnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFNlbnRpbmVsQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ29yYWNsZScsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CflK4nLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L29yYWNsZS5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdE9yYWNsZScsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90T3JhY2xlQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2FtYnVzaGVyJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+qpCcsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vYW1idXNoZXIucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RBbWJ1c2hlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90QW1idXNoZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnbG9ja3NtaXRoJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+UkCcsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vbG9ja3NtaXRoLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90TG9ja3NtaXRoJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RMb2Nrc21pdGhCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnc3Rvcm0nLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn4yp77iPJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9zdG9ybS5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFN0b3JtJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RTdG9ybUJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdtYXRyaWFyY2gnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn5GRJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9tYXRyaWFyY2gucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RNYXRyaWFyY2gnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdE1hdHJpYXJjaEJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdlbmRnYW1lJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn4oybJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9lbmRnYW1lLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90RW5kZ2FtZScsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90RW5kZ2FtZUJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdtYWdudXMnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfimZ8nLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L25pZ2h0bWFyZS1tYWdudXMucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RNYWdudXMnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdE1hZ251c0JvZHknLFxuICB9LFxuXTtcblxuY29uc3QgQk9UX1NUWUxFUzogUmVjb3JkPENoZXNzaW1hbHNCb3RQcm9maWxlSWQsIENoZXNzaW1hbHNCb3RTdHlsZT4gPSB7XG4gIGV4cGxvcmVyOiB7IGFkdmFuY2VtZW50OiAxLjA1LCBjYXB0dXJlOiAwLjgyLCBzYWZldHk6IDAuNjIsIHBvd2VyOiAwLjgsIGNlbnRlcjogMS4xNSwgdW5sb2NrOiAxLjA1LCByZXBseTogMC43LCByYW5kb21uZXNzOiAyNjAsIHNwcmVhZDogMC42OCwgbW9iaWxpdHk6IDAuNzUsIHRyYXA6IDAuNSwgZW5kZ2FtZTogMC41NSB9LFxuICBpbXB1bHNpdmU6IHsgYWR2YW5jZW1lbnQ6IDAuOSwgY2FwdHVyZTogMS40NSwgc2FmZXR5OiAwLjQ4LCBwb3dlcjogMS4xNSwgY2VudGVyOiAwLjgsIHVubG9jazogMC45LCByZXBseTogMC41NSwgcmFuZG9tbmVzczogMjkwLCBzcHJlYWQ6IDAuNjIsIG1vYmlsaXR5OiAwLjg1LCB0cmFwOiAwLjYyLCBlbmRnYW1lOiAwLjUgfSxcbiAgcnVubmVyOiB7IGFkdmFuY2VtZW50OiAxLjU1LCBjYXB0dXJlOiAwLjc4LCBzYWZldHk6IDAuNSwgcG93ZXI6IDAuOTUsIGNlbnRlcjogMC43LCB1bmxvY2s6IDEuMSwgcmVwbHk6IDAuNTUsIHJhbmRvbW5lc3M6IDI1MCwgc3ByZWFkOiAwLjYsIG1vYmlsaXR5OiAwLjcyLCB0cmFwOiAwLjQ1LCBlbmRnYW1lOiAxLjEgfSxcbiAgaHVudGVyOiB7IGFkdmFuY2VtZW50OiAwLjk1LCBjYXB0dXJlOiAxLjQ1LCBzYWZldHk6IDAuOSwgcG93ZXI6IDEuMDUsIGNlbnRlcjogMC45NSwgdW5sb2NrOiAwLjk1LCByZXBseTogMSwgcmFuZG9tbmVzczogOTAsIHNwcmVhZDogMC4zLCBtb2JpbGl0eTogMC45NSwgdHJhcDogMC44MiwgZW5kZ2FtZTogMC43NiB9LFxuICBndWFyZGlhbjogeyBhZHZhbmNlbWVudDogMC44OCwgY2FwdHVyZTogMSwgc2FmZXR5OiAxLjQ1LCBwb3dlcjogMC44NSwgY2VudGVyOiAxLjA1LCB1bmxvY2s6IDEsIHJlcGx5OiAxLjE1LCByYW5kb21uZXNzOiA3MCwgc3ByZWFkOiAwLjI2LCBtb2JpbGl0eTogMC44MiwgdHJhcDogMC43MiwgZW5kZ2FtZTogMC43MiB9LFxuICBqdW1wZXI6IHsgYWR2YW5jZW1lbnQ6IDEuMTIsIGNhcHR1cmU6IDEsIHNhZmV0eTogMC45MiwgcG93ZXI6IDEuNDIsIGNlbnRlcjogMS4xOCwgdW5sb2NrOiAxLjA4LCByZXBseTogMC45NSwgcmFuZG9tbmVzczogOTUsIHNwcmVhZDogMC4zMiwgbW9iaWxpdHk6IDEuMTUsIHRyYXA6IDAuOSwgZW5kZ2FtZTogMC44MiB9LFxuICBzdHJhdGVnaXN0OiB7IGFkdmFuY2VtZW50OiAxLjA1LCBjYXB0dXJlOiAxLjA4LCBzYWZldHk6IDEuMjIsIHBvd2VyOiAxLjA4LCBjZW50ZXI6IDEuMTYsIHVubG9jazogMS4xLCByZXBseTogMS4yNSwgcmFuZG9tbmVzczogMjIsIHNwcmVhZDogMC4xNCwgbW9iaWxpdHk6IDEuMDgsIHRyYXA6IDEuMDYsIGVuZGdhbWU6IDEgfSxcbiAgcHJlZGF0b3I6IHsgYWR2YW5jZW1lbnQ6IDAuOTgsIGNhcHR1cmU6IDEuNjgsIHNhZmV0eTogMS4wMiwgcG93ZXI6IDEuMzQsIGNlbnRlcjogMSwgdW5sb2NrOiAxLCByZXBseTogMS4xMiwgcmFuZG9tbmVzczogMjgsIHNwcmVhZDogMC4xNiwgbW9iaWxpdHk6IDEuMDIsIHRyYXA6IDEuMTgsIGVuZGdhbWU6IDAuODIgfSxcbiAgc3ByaW50ZXI6IHsgYWR2YW5jZW1lbnQ6IDEuNzIsIGNhcHR1cmU6IDAuOSwgc2FmZXR5OiAwLjk1LCBwb3dlcjogMS4wOCwgY2VudGVyOiAwLjg2LCB1bmxvY2s6IDEuMTgsIHJlcGx5OiAxLCByYW5kb21uZXNzOiAyNiwgc3ByZWFkOiAwLjE1LCBtb2JpbGl0eTogMC45NSwgdHJhcDogMC43OCwgZW5kZ2FtZTogMS40MiB9LFxuICBzZW50aW5lbDogeyBhZHZhbmNlbWVudDogMC45LCBjYXB0dXJlOiAxLjEyLCBzYWZldHk6IDEuNzIsIHBvd2VyOiAwLjk1LCBjZW50ZXI6IDEuMjgsIHVubG9jazogMS4wNSwgcmVwbHk6IDEuMzgsIHJhbmRvbW5lc3M6IDE4LCBzcHJlYWQ6IDAuMTIsIG1vYmlsaXR5OiAwLjg2LCB0cmFwOiAxLjA0LCBlbmRnYW1lOiAwLjg0IH0sXG4gIG9yYWNsZTogeyBhZHZhbmNlbWVudDogMSwgY2FwdHVyZTogMS4xMiwgc2FmZXR5OiAxLjQyLCBwb3dlcjogMS4xLCBjZW50ZXI6IDEuMTgsIHVubG9jazogMS4wOCwgcmVwbHk6IDEuOCwgcmFuZG9tbmVzczogOCwgc3ByZWFkOiAwLjA4LCBtb2JpbGl0eTogMS4wNiwgdHJhcDogMS4yMiwgZW5kZ2FtZTogMS4wOCB9LFxuICBhbWJ1c2hlcjogeyBhZHZhbmNlbWVudDogMC45LCBjYXB0dXJlOiAxLjQ4LCBzYWZldHk6IDEuMDgsIHBvd2VyOiAxLjQ2LCBjZW50ZXI6IDEuMDUsIHVubG9jazogMS4wMiwgcmVwbHk6IDEuMzIsIHJhbmRvbW5lc3M6IDE0LCBzcHJlYWQ6IDAuMSwgbW9iaWxpdHk6IDEuMTIsIHRyYXA6IDEuNzIsIGVuZGdhbWU6IDAuOTIgfSxcbiAgbG9ja3NtaXRoOiB7IGFkdmFuY2VtZW50OiAwLjg4LCBjYXB0dXJlOiAxLjA0LCBzYWZldHk6IDEuNTUsIHBvd2VyOiAxLjAyLCBjZW50ZXI6IDEuNDgsIHVubG9jazogMS4xMiwgcmVwbHk6IDEuNTIsIHJhbmRvbW5lc3M6IDEyLCBzcHJlYWQ6IDAuMSwgbW9iaWxpdHk6IDEuNTgsIHRyYXA6IDEuMjQsIGVuZGdhbWU6IDAuODYgfSxcbiAgc3Rvcm06IHsgYWR2YW5jZW1lbnQ6IDEuMTgsIGNhcHR1cmU6IDEuMzgsIHNhZmV0eTogMC45OCwgcG93ZXI6IDEuNjIsIGNlbnRlcjogMS4wOCwgdW5sb2NrOiAxLjE4LCByZXBseTogMS4yMiwgcmFuZG9tbmVzczogMTgsIHNwcmVhZDogMC4xMywgbW9iaWxpdHk6IDEuMzYsIHRyYXA6IDEuMjgsIGVuZGdhbWU6IDEuMDIgfSxcbiAgbWF0cmlhcmNoOiB7IGFkdmFuY2VtZW50OiAwLjk2LCBjYXB0dXJlOiAxLjE4LCBzYWZldHk6IDEuNjQsIHBvd2VyOiAxLjE4LCBjZW50ZXI6IDEuMjIsIHVubG9jazogMS4wOCwgcmVwbHk6IDEuNjYsIHJhbmRvbW5lc3M6IDEwLCBzcHJlYWQ6IDAuMDgsIG1vYmlsaXR5OiAxLjAyLCB0cmFwOiAxLjM2LCBlbmRnYW1lOiAxIH0sXG4gIGVuZGdhbWU6IHsgYWR2YW5jZW1lbnQ6IDEuNDYsIGNhcHR1cmU6IDEsIHNhZmV0eTogMS4yOCwgcG93ZXI6IDEuMDQsIGNlbnRlcjogMC45NCwgdW5sb2NrOiAxLjA4LCByZXBseTogMS40NCwgcmFuZG9tbmVzczogMTAsIHNwcmVhZDogMC4wOSwgbW9iaWxpdHk6IDAuOTgsIHRyYXA6IDEuMDIsIGVuZGdhbWU6IDEuODYgfSxcbiAgbWFnbnVzOiB7IGFkdmFuY2VtZW50OiAxLjA0LCBjYXB0dXJlOiAxLjIyLCBzYWZldHk6IDEuOSwgcG93ZXI6IDAuOSwgY2VudGVyOiAxLjQyLCB1bmxvY2s6IDEuMDgsIHJlcGx5OiAyLjA4LCByYW5kb21uZXNzOiAzLCBzcHJlYWQ6IDAuMDQsIG1vYmlsaXR5OiAxLjA4LCB0cmFwOiAxLjQyLCBlbmRnYW1lOiAxLjg2IH0sXG59O1xuXG5jb25zdCBERUZBVUxUX0JPVF9QUk9GSUxFX0JZX0RJRkZJQ1VMVFk6IFJlY29yZDxDaGVzc2ltYWxzQm90RGlmZmljdWx0eSwgQ2hlc3NpbWFsc0JvdFByb2ZpbGVJZD4gPSB7XG4gIGVhc3k6ICdleHBsb3JlcicsXG4gIG5vcm1hbDogJ2h1bnRlcicsXG4gIGhhcmQ6ICdzdHJhdGVnaXN0Jyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQ2hlc3NpbWFsc0dhbWVPcHRpb25zIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIG1vZGU/OiBDaGVzc2ltYWxzR2FtZU1vZGU7XG4gIHN0YXR1cz86IENoZXNzaW1hbHNHYW1lU3RhdHVzO1xuICBvbmxpbmU/OiBDaGVzc2ltYWxzT25saW5lU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGVzc2ltYWxzR2FtZShcbiAgYm9hcmRTaXplOiBDaGVzc2ltYWxzQm9hcmRTaXplID0gNixcbiAgb3B0aW9uczogQ3JlYXRlQ2hlc3NpbWFsc0dhbWVPcHRpb25zID0ge30sXG4pOiBDaGVzc2ltYWxzR2FtZVN0YXRlIHtcbiAgY29uc3QgcGllY2VzOiBDaGVzc2ltYWxzUGllY2VbXSA9IFtdO1xuICBjb25zdCB3aGl0ZVJvdyA9IGJvYXJkU2l6ZSAtIDI7XG4gIGNvbnN0IGJsYWNrUm93ID0gMTtcblxuICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBib2FyZFNpemU7IGNvbCArPSAxKSB7XG4gICAgcGllY2VzLnB1c2goe1xuICAgICAgaWQ6IGBXJHtjb2wgKyAxfWAsXG4gICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgIHBvc2l0aW9uOiB7IHJvdzogd2hpdGVSb3csIGNvbCB9LFxuICAgICAgY2FwdHVyZWQ6IGZhbHNlLFxuICAgIH0pO1xuICAgIHBpZWNlcy5wdXNoKHtcbiAgICAgIGlkOiBgQiR7Y29sICsgMX1gLFxuICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgICBwb3NpdGlvbjogeyByb3c6IGJsYWNrUm93LCBjb2wgfSxcbiAgICAgIGNhcHR1cmVkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlID0gcmVmcmVzaENoZXNzaW1hbHNQb3dlclVubG9ja3Moe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IGNyZWF0ZUxvY2FsSWQoKSxcbiAgICBtb2RlOiBvcHRpb25zLm1vZGUgPz8gJ2xvY2FsJyxcbiAgICBib2FyZFNpemUsXG4gICAgc3RhdHVzOiBvcHRpb25zLnN0YXR1cyA/PyAnaW5fcHJvZ3Jlc3MnLFxuICAgIGN1cnJlbnRUdXJuOiAnd2hpdGUnLFxuICAgIHBpZWNlcyxcbiAgICBwbGF5ZXJzOiB7XG4gICAgICB3aGl0ZTogeyBjb2xvcjogJ3doaXRlJywgcG93ZXJVbmxvY2tlZDogZmFsc2UsIGNhcmRzOiBjcmVhdGVDYXJkcygpIH0sXG4gICAgICBibGFjazogeyBjb2xvcjogJ2JsYWNrJywgcG93ZXJVbmxvY2tlZDogZmFsc2UsIGNhcmRzOiBjcmVhdGVDYXJkcygpIH0sXG4gICAgfSxcbiAgICBtb3ZlQ291bnQ6IDAsXG4gICAgb25saW5lOiBvcHRpb25zLm9ubGluZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtb3ZlSGlzdG9yeTogW2NyZWF0ZU1vdmVIaXN0b3J5RW50cnkoc3RhdGUpXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoZXNzaW1hbHNQaWVjZUF0KFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgcG9zaXRpb246IENoZXNzaW1hbHNQb3NpdGlvbixcbik6IENoZXNzaW1hbHNQaWVjZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBhY3RpdmVQaWVjZXMoc3RhdGUpLmZpbmQoXG4gICAgKHBpZWNlKSA9PlxuICAgICAgIXBpZWNlLmNhcHR1cmVkICYmIHBpZWNlLnBvc2l0aW9uLnJvdyA9PT0gcG9zaXRpb24ucm93ICYmIHBpZWNlLnBvc2l0aW9uLmNvbCA9PT0gcG9zaXRpb24uY29sLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlc3NpbWFsc0xlZ2FsTW92ZXMoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBwaWVjZUlkOiBzdHJpbmcsXG4gIGFuaW1hbD86IENoZXNzaW1hbHNBbmltYWxUeXBlLFxuKTogQ2hlc3NpbWFsc01vdmVbXSB7XG4gIGlmIChzdGF0ZS5zdGF0dXMgIT09ICdpbl9wcm9ncmVzcycpIHJldHVybiBbXTtcblxuICBjb25zdCBwaWVjZSA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcGllY2VJZCAmJiAhaXRlbS5jYXB0dXJlZCk7XG4gIGlmICghcGllY2UgfHwgcGllY2UuY29sb3IgIT09IHN0YXRlLmN1cnJlbnRUdXJuKSByZXR1cm4gW107XG5cbiAgaWYgKGFuaW1hbCkge1xuICAgIGNvbnN0IHBsYXllciA9IHN0YXRlLnBsYXllcnNbcGllY2UuY29sb3JdO1xuICAgIGlmICghcGxheWVyLnBvd2VyVW5sb2NrZWQgfHwgIWhhc1Bvd2VyQ2FyZFVzZShwbGF5ZXIuY2FyZHNbYW5pbWFsXSkpIHJldHVybiBbXTtcbiAgICByZXR1cm4gZ2V0UG93ZXJNb3ZlcyhzdGF0ZSwgcGllY2UsIGFuaW1hbCk7XG4gIH1cblxuICByZXR1cm4gZ2V0QmFzaWNNb3ZlcyhzdGF0ZSwgcGllY2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yID0gc3RhdGUuY3VycmVudFR1cm4sXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgaWYgKHN0YXRlLnN0YXR1cyAhPT0gJ2luX3Byb2dyZXNzJykgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IHR1cm5TdGF0ZSA9IGNvbG9yID09PSBzdGF0ZS5jdXJyZW50VHVybiA/IHN0YXRlIDogeyAuLi5zdGF0ZSwgY3VycmVudFR1cm46IGNvbG9yIH07XG4gIGNvbnN0IHBsYXllciA9IHR1cm5TdGF0ZS5wbGF5ZXJzW2NvbG9yXTtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHBpZWNlIG9mIGFjdGl2ZVBpZWNlcyh0dXJuU3RhdGUpKSB7XG4gICAgaWYgKHBpZWNlLmNhcHR1cmVkIHx8IHBpZWNlLmNvbG9yICE9PSBjb2xvcikgY29udGludWU7XG5cbiAgICBtb3Zlcy5wdXNoKC4uLmdldENoZXNzaW1hbHNMZWdhbE1vdmVzKHR1cm5TdGF0ZSwgcGllY2UuaWQpKTtcbiAgICBpZiAoIXBsYXllci5wb3dlclVubG9ja2VkKSBjb250aW51ZTtcblxuICAgIGZvciAoY29uc3QgYW5pbWFsIG9mIEFOSU1BTFMpIHtcbiAgICAgIGlmICghaGFzUG93ZXJDYXJkVXNlKHBsYXllci5jYXJkc1thbmltYWxdKSkgY29udGludWU7XG4gICAgICBtb3Zlcy5wdXNoKC4uLmdldENoZXNzaW1hbHNMZWdhbE1vdmVzKHR1cm5TdGF0ZSwgcGllY2UuaWQsIGFuaW1hbCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNob29zZUNoZXNzaW1hbHNCb3RNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgZGlmZmljdWx0eTogQ2hlc3NpbWFsc0JvdERpZmZpY3VsdHkgPSAnbm9ybWFsJyxcbiAgcHJvZmlsZUlkOiBDaGVzc2ltYWxzQm90UHJvZmlsZUlkID0gREVGQVVMVF9CT1RfUFJPRklMRV9CWV9ESUZGSUNVTFRZW2RpZmZpY3VsdHldLFxuICBvcHRpb25zOiBDaGVzc2ltYWxzQm90T3B0aW9ucyA9IHt9LFxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBjb25zdCBtb3ZlcyA9IGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKHN0YXRlKTtcbiAgaWYgKG1vdmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgYmFzZVN0eWxlID0gQk9UX1NUWUxFU1twcm9maWxlSWRdID8/IEJPVF9TVFlMRVNbREVGQVVMVF9CT1RfUFJPRklMRV9CWV9ESUZGSUNVTFRZW2RpZmZpY3VsdHldXTtcbiAgY29uc3QgY2hhbGxlbmdlUHJlc3N1cmUgPSBnZXRDaGFsbGVuZ2VQcmVzc3VyZShvcHRpb25zLmNoYWxsZW5nZVJvdW5kKTtcbiAgY29uc3Qgc3R5bGUgPSB0dW5lQm90U3R5bGUoYmFzZVN0eWxlLCBkaWZmaWN1bHR5LCBjaGFsbGVuZ2VQcmVzc3VyZSwgb3B0aW9ucy5uaWdodG1hcmVNb2RlKTtcblxuICBjb25zdCBxdWlja1Njb3JlZCA9IG1vdmVzXG4gICAgLm1hcCgobW92ZSkgPT4gKHsgbW92ZSwgc2NvcmU6IHNjb3JlQm90TW92ZShzdGF0ZSwgbW92ZSwgZGlmZmljdWx0eSwgc3R5bGUsIGNoYWxsZW5nZVByZXNzdXJlLCBmYWxzZSwgb3B0aW9ucy5uaWdodG1hcmVNb2RlKSB9KSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuICBjb25zdCBsb29rYWhlYWRMaW1pdCA9IG9wdGlvbnMubmlnaHRtYXJlTW9kZSA9PT0gJ21hZ251cycgPyA0OCA6IGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDMyIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCcgPyAyNCA6IDA7XG4gIGNvbnN0IHNjb3JlZCA9IHF1aWNrU2NvcmVkXG4gICAgLm1hcCgoaXRlbSwgaW5kZXgpID0+ICh7XG4gICAgICBtb3ZlOiBpdGVtLm1vdmUsXG4gICAgICBzY29yZTpcbiAgICAgICAgaW5kZXggPCBsb29rYWhlYWRMaW1pdFxuICAgICAgICAgID8gc2NvcmVCb3RNb3ZlV2l0aExvb2thaGVhZChzdGF0ZSwgaXRlbS5tb3ZlLCBkaWZmaWN1bHR5LCBzdHlsZSwgY2hhbGxlbmdlUHJlc3N1cmUsIG9wdGlvbnMubmlnaHRtYXJlTW9kZSlcbiAgICAgICAgICA6IGl0ZW0uc2NvcmUsXG4gICAgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKTtcblxuICBpZiAoZGlmZmljdWx0eSA9PT0gJ2Vhc3knKSB7XG4gICAgY29uc3QgcGxheWFibGUgPSBzY29yZWQuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnNjb3JlID4gLTMwMDApO1xuICAgIHJldHVybiBwaWNrTm9pc3lCb3RNb3ZlKHBsYXlhYmxlLmxlbmd0aCA/IHBsYXlhYmxlIDogc2NvcmVkLCAwLjU1KTtcbiAgfVxuXG4gIGlmIChkaWZmaWN1bHR5ID09PSAnbm9ybWFsJykge1xuICAgIHJldHVybiBzY29yZWRbMF0/Lm1vdmU7XG4gIH1cblxuICBjb25zdCB3aW5uaW5nTW92ZSA9IHNjb3JlZC5maW5kKChpdGVtKSA9PiBpdGVtLnNjb3JlID49IDEwMDAwKTtcbiAgaWYgKHdpbm5pbmdNb3ZlKSByZXR1cm4gd2lubmluZ01vdmUubW92ZTtcblxuICBjb25zdCBvcHBvbmVudFdpbm5pbmdUYXJnZXRzID0gbmV3IFNldChcbiAgICBnZXRJbW1lZGlhdGVXaW5uaW5nTW92ZXMoc3RhdGUsIG90aGVyQ29sb3Ioc3RhdGUuY3VycmVudFR1cm4pKS5tYXAoKG1vdmUpID0+IHBvc2l0aW9uS2V5KG1vdmUudG8pKSxcbiAgKTtcbiAgaWYgKG9wcG9uZW50V2lubmluZ1RhcmdldHMuc2l6ZSA+IDApIHtcbiAgICBjb25zdCBibG9ja2luZ01vdmUgPSBzY29yZWQuZmluZChcbiAgICAgIChpdGVtKSA9PiBpdGVtLm1vdmUuY2FwdHVyZXNQaWVjZUlkIHx8IG9wcG9uZW50V2lubmluZ1RhcmdldHMuaGFzKHBvc2l0aW9uS2V5KGl0ZW0ubW92ZS50bykpLFxuICAgICk7XG4gICAgaWYgKGJsb2NraW5nTW92ZSkgcmV0dXJuIGJsb2NraW5nTW92ZS5tb3ZlO1xuICB9XG5cbiAgY29uc3QgY2hhbGxlbmdlQ2FwdHVyZSA9IGNob29zZUNoYWxsZW5nZUJhc2ljQ2FwdHVyZShzY29yZWQsIGNoYWxsZW5nZVByZXNzdXJlKTtcbiAgaWYgKGNoYWxsZW5nZUNhcHR1cmUpIHJldHVybiBjaGFsbGVuZ2VDYXB0dXJlO1xuXG4gIGNvbnN0IG5pZ2h0bWFyZUNhcHR1cmUgPSBjaG9vc2VOaWdodG1hcmVDYXB0dXJlKHNjb3JlZCwgb3B0aW9ucy5uaWdodG1hcmVNb2RlKTtcbiAgaWYgKG5pZ2h0bWFyZUNhcHR1cmUpIHJldHVybiBuaWdodG1hcmVDYXB0dXJlO1xuXG4gIGNvbnN0IGNvbnNlcnZhdGl2ZUNhcHR1cmUgPSBjaG9vc2VDb25zZXJ2YXRpdmVIYXJkQ2FwdHVyZShzdGF0ZSwgc2NvcmVkKTtcbiAgaWYgKGNvbnNlcnZhdGl2ZUNhcHR1cmUpIHJldHVybiBjb25zZXJ2YXRpdmVDYXB0dXJlO1xuXG4gIHJldHVybiBzY29yZWRbMF0/Lm1vdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUNoZXNzaW1hbHNNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY2FuZGlkYXRlOiBDaGVzc2ltYWxzTW92ZSxcbik6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICBjb25zdCBsZWdhbE1vdmUgPSBnZXRDaGVzc2ltYWxzTGVnYWxNb3ZlcyhzdGF0ZSwgY2FuZGlkYXRlLnBpZWNlSWQsIGNhbmRpZGF0ZS5hbmltYWwpLmZpbmQoKG1vdmUpID0+XG4gICAgc2FtZVBvc2l0aW9uKG1vdmUuZnJvbSwgY2FuZGlkYXRlLmZyb20pICYmIHNhbWVQb3NpdGlvbihtb3ZlLnRvLCBjYW5kaWRhdGUudG8pLFxuICApO1xuXG4gIGlmICghbGVnYWxNb3ZlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0lMTEVHQUxfTU9WRScpO1xuICB9XG5cbiAgY29uc3QgbW92ZWRQaWVjZSA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZCgocGllY2UpID0+IHBpZWNlLmlkID09PSBsZWdhbE1vdmUucGllY2VJZCk7XG4gIGlmICghbW92ZWRQaWVjZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19QSUVDRV9OT1RfRk9VTkQnKTtcbiAgfVxuXG4gIGNvbnN0IHBpZWNlcyA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkubWFwKChwaWVjZSkgPT4ge1xuICAgIGlmIChwaWVjZS5pZCA9PT0gbGVnYWxNb3ZlLnBpZWNlSWQpIHtcbiAgICAgIHJldHVybiB7IC4uLnBpZWNlLCBwb3NpdGlvbjogeyAuLi5sZWdhbE1vdmUudG8gfSB9O1xuICAgIH1cbiAgICBpZiAocGllY2UuaWQgPT09IGxlZ2FsTW92ZS5jYXB0dXJlc1BpZWNlSWQpIHtcbiAgICAgIHJldHVybiB7IC4uLnBpZWNlLCBjYXB0dXJlZDogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gcGllY2U7XG4gIH0pO1xuXG4gIGNvbnN0IHBsYXllcnMgPSB7XG4gICAgLi4uc3RhdGUucGxheWVycyxcbiAgICBbbW92ZWRQaWVjZS5jb2xvcl06IHtcbiAgICAgIC4uLnN0YXRlLnBsYXllcnNbbW92ZWRQaWVjZS5jb2xvcl0sXG4gICAgICBjYXJkczpcbiAgICAgICAgbGVnYWxNb3ZlLmtpbmQgPT09ICdwb3dlcicgJiYgbGVnYWxNb3ZlLmFuaW1hbFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5wbGF5ZXJzW21vdmVkUGllY2UuY29sb3JdLmNhcmRzLFxuICAgICAgICAgICAgICBbbGVnYWxNb3ZlLmFuaW1hbF06IGNvbnN1bWVQb3dlckNhcmRVc2Uoc3RhdGUucGxheWVyc1ttb3ZlZFBpZWNlLmNvbG9yXS5jYXJkc1tsZWdhbE1vdmUuYW5pbWFsXSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzdGF0ZS5wbGF5ZXJzW21vdmVkUGllY2UuY29sb3JdLmNhcmRzLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gcmVmcmVzaENoZXNzaW1hbHNQb3dlclVubG9ja3Moe1xuICAgIC4uLnN0YXRlLFxuICAgIHBpZWNlcyxcbiAgICBwbGF5ZXJzLFxuICAgIGN1cnJlbnRUdXJuOiBvdGhlckNvbG9yKG1vdmVkUGllY2UuY29sb3IpLFxuICAgIG1vdmVDb3VudDogc3RhdGUubW92ZUNvdW50ICsgMSxcbiAgICBsYXN0TW92ZTogbGVnYWxNb3ZlLFxuICB9KTtcblxuICBjb25zdCBwcm9tb3RlZCA9IGlzUHJvbW90aW9uUm93KG5leHRTdGF0ZS5ib2FyZFNpemUsIG1vdmVkUGllY2UuY29sb3IsIGxlZ2FsTW92ZS50byk7XG4gIGNvbnN0IGVuZW15UGllY2VzID0gYWN0aXZlUGllY2VzKG5leHRTdGF0ZSkuZmlsdGVyKFxuICAgIChwaWVjZSkgPT4gcGllY2UuY29sb3IgIT09IG1vdmVkUGllY2UuY29sb3IgJiYgIXBpZWNlLmNhcHR1cmVkLFxuICApO1xuICBjb25zdCBlbmVteUhhc0xlZ2FsTW92ZXMgPSBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhuZXh0U3RhdGUsIG5leHRTdGF0ZS5jdXJyZW50VHVybikubGVuZ3RoID4gMDtcblxuICBjb25zdCByZXNvbHZlZFN0YXRlID1cbiAgICBwcm9tb3RlZCB8fCBlbmVteVBpZWNlcy5sZW5ndGggPT09IDAgfHwgIWVuZW15SGFzTGVnYWxNb3Zlc1xuICAgICAgPyB7XG4gICAgICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgICAgIHN0YXR1czogJ2ZpbmlzaGVkJyBhcyBjb25zdCxcbiAgICAgICAgICB3aW5uZXI6IG1vdmVkUGllY2UuY29sb3IsXG4gICAgICAgICAgd2lubmVyUmVhc29uOiBwcm9tb3RlZFxuICAgICAgICAgICAgPyAoJ3Byb21vdGlvbicgYXMgY29uc3QpXG4gICAgICAgICAgICA6IGVuZW15UGllY2VzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICA/ICgnZWxpbWluYXRpb24nIGFzIGNvbnN0KVxuICAgICAgICAgICAgICA6ICgnYmxvY2tlZCcgYXMgY29uc3QpLFxuICAgICAgICB9XG4gICAgICA6IG5leHRTdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc29sdmVkU3RhdGUsXG4gICAgbW92ZUhpc3Rvcnk6IFtcbiAgICAgIC4uLmVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlKSxcbiAgICAgIGNyZWF0ZU1vdmVIaXN0b3J5RW50cnkocmVzb2x2ZWRTdGF0ZSwgbGVnYWxNb3ZlKSxcbiAgICBdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hlc3NpbWFsc1Jldmlld1N0YXRlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgZW50cnk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5LFxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IGJhc2VTdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgZGVsZXRlIGJhc2VTdGF0ZS5sYXN0TW92ZTtcbiAgZGVsZXRlIGJhc2VTdGF0ZS53aW5uZXI7XG4gIGRlbGV0ZSBiYXNlU3RhdGUud2lubmVyUmVhc29uO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VTdGF0ZSxcbiAgICBzdGF0dXM6IGVudHJ5LnN0YXR1cyxcbiAgICBjdXJyZW50VHVybjogZW50cnkuY3VycmVudFR1cm4sXG4gICAgcGllY2VzOiBjbG9uZVBpZWNlcyhlbnRyeS5waWVjZXMpLFxuICAgIG1vdmVDb3VudDogZW50cnkubW92ZU51bWJlcixcbiAgICAuLi4oZW50cnkud2lubmVyID8geyB3aW5uZXI6IGVudHJ5Lndpbm5lciB9IDoge30pLFxuICAgIC4uLihlbnRyeS53aW5uZXJSZWFzb24gPyB7IHdpbm5lclJlYXNvbjogZW50cnkud2lubmVyUmVhc29uIH0gOiB7fSksXG4gICAgLi4uKGVudHJ5Lm1vdmUgPyB7IGxhc3RNb3ZlOiBzYW5pdGl6ZU1vdmUoZW50cnkubW92ZSkgfSA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU/OiBDaGVzc2ltYWxzTW92ZSxcbik6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICBtb3ZlTnVtYmVyOiBzdGF0ZS5tb3ZlQ291bnQsXG4gICAgcGllY2VzOiBjbG9uZVBpZWNlcyhzdGF0ZS5waWVjZXMpLFxuICAgIGN1cnJlbnRUdXJuOiBzdGF0ZS5jdXJyZW50VHVybixcbiAgICBzdGF0dXM6IHN0YXRlLnN0YXR1cyxcbiAgICAuLi4obW92ZSA/IHsgbW92ZTogc2FuaXRpemVNb3ZlKG1vdmUpIH0gOiB7fSksXG4gICAgLi4uKHN0YXRlLndpbm5lciA/IHsgd2lubmVyOiBzdGF0ZS53aW5uZXIgfSA6IHt9KSxcbiAgICAuLi4oc3RhdGUud2lubmVyUmVhc29uID8geyB3aW5uZXJSZWFzb246IHN0YXRlLndpbm5lclJlYXNvbiB9IDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVNb3ZlSGlzdG9yeShzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5W10ge1xuICBpZiAoc3RhdGUubW92ZUhpc3Rvcnk/Lmxlbmd0aCkgcmV0dXJuIHN0YXRlLm1vdmVIaXN0b3J5Lm1hcChjbG9uZU1vdmVIaXN0b3J5RW50cnkpO1xuICByZXR1cm4gW2NyZWF0ZU1vdmVIaXN0b3J5RW50cnkoc3RhdGUpXTtcbn1cblxuZnVuY3Rpb24gY2xvbmVNb3ZlSGlzdG9yeUVudHJ5KGVudHJ5OiBDaGVzc2ltYWxzTW92ZUhpc3RvcnlFbnRyeSk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5lbnRyeSxcbiAgICBwaWVjZXM6IGNsb25lUGllY2VzKGVudHJ5LnBpZWNlcyksXG4gICAgLi4uKGVudHJ5Lm1vdmUgPyB7IG1vdmU6IHNhbml0aXplTW92ZShlbnRyeS5tb3ZlKSB9IDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjbG9uZVBpZWNlcyhwaWVjZXM6IENoZXNzaW1hbHNQaWVjZVtdKTogQ2hlc3NpbWFsc1BpZWNlW10ge1xuICByZXR1cm4gcGllY2VzLm1hcCgocGllY2UpID0+ICh7XG4gICAgLi4ucGllY2UsXG4gICAgcG9zaXRpb246IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZU1vdmUobW92ZTogQ2hlc3NpbWFsc01vdmUpOiBDaGVzc2ltYWxzTW92ZSB7XG4gIHJldHVybiB7XG4gICAgcGllY2VJZDogbW92ZS5waWVjZUlkLFxuICAgIGZyb206IHsgLi4ubW92ZS5mcm9tIH0sXG4gICAgdG86IHsgLi4ubW92ZS50byB9LFxuICAgIGtpbmQ6IG1vdmUua2luZCxcbiAgICAuLi4obW92ZS5hbmltYWwgPyB7IGFuaW1hbDogbW92ZS5hbmltYWwgfSA6IHt9KSxcbiAgICAuLi4obW92ZS5jYXB0dXJlc1BpZWNlSWQgPyB7IGNhcHR1cmVzUGllY2VJZDogbW92ZS5jYXB0dXJlc1BpZWNlSWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2lnbkNoZXNzaW1hbHNHYW1lKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbik6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICBjb25zdCByZXNpZ25lZFN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIHN0YXR1czogJ2ZpbmlzaGVkJyxcbiAgICB3aW5uZXI6IG90aGVyQ29sb3IoY29sb3IpLFxuICAgIHdpbm5lclJlYXNvbjogJ3Jlc2lnbmF0aW9uJyxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc2lnbmVkU3RhdGUsXG4gICAgbW92ZUhpc3Rvcnk6IFtcbiAgICAgIC4uLmVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlKSxcbiAgICAgIGNyZWF0ZU1vdmVIaXN0b3J5RW50cnkocmVzaWduZWRTdGF0ZSksXG4gICAgXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc2l0aW9uS2V5KHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cG9zaXRpb24ucm93fToke3Bvc2l0aW9uLmNvbH1gO1xufVxuXG5mdW5jdGlvbiBoYXNQb3dlckNhcmRVc2UoY2FyZDogeyB1c2VkOiBib29sZWFuOyB1c2VzUmVtYWluaW5nPzogbnVtYmVyIH0pOiBib29sZWFuIHtcbiAgcmV0dXJuIChjYXJkLnVzZXNSZW1haW5pbmcgPz8gKGNhcmQudXNlZCA/IDAgOiAxKSkgPiAwO1xufVxuXG5mdW5jdGlvbiBjb25zdW1lUG93ZXJDYXJkVXNlPFQgZXh0ZW5kcyB7IHVzZWQ6IGJvb2xlYW47IHVzZXNSZW1haW5pbmc/OiBudW1iZXIgfT4oY2FyZDogVCk6IFQge1xuICBjb25zdCByZW1haW5pbmcgPSBNYXRoLm1heCgwLCAoY2FyZC51c2VzUmVtYWluaW5nID8/IChjYXJkLnVzZWQgPyAwIDogMSkpIC0gMSk7XG4gIHJldHVybiB7XG4gICAgLi4uY2FyZCxcbiAgICB1c2VkOiByZW1haW5pbmcgPD0gMCxcbiAgICAuLi4oY2FyZC51c2VzUmVtYWluaW5nID09PSB1bmRlZmluZWQgPyB7fSA6IHsgdXNlc1JlbWFpbmluZzogcmVtYWluaW5nIH0pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDYXJkcygpIHtcbiAgcmV0dXJuIEFOSU1BTFMucmVkdWNlKFxuICAgIChjYXJkcywgdHlwZSkgPT4gKHtcbiAgICAgIC4uLmNhcmRzLFxuICAgICAgW3R5cGVdOiB7IHR5cGUsIHVzZWQ6IGZhbHNlIH0sXG4gICAgfSksXG4gICAge30gYXMgUmVjb3JkPENoZXNzaW1hbHNBbmltYWxUeXBlLCB7IHR5cGU6IENoZXNzaW1hbHNBbmltYWxUeXBlOyB1c2VkOiBib29sZWFuOyB1c2VzUmVtYWluaW5nPzogbnVtYmVyIH0+LFxuICApO1xufVxuXG5mdW5jdGlvbiBhY3RpdmVQaWVjZXMoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUpOiBDaGVzc2ltYWxzUGllY2VbXSB7XG4gIHJldHVybiBzdGF0ZS5waWVjZXMuZmlsdGVyKChwaWVjZSk6IHBpZWNlIGlzIENoZXNzaW1hbHNQaWVjZSA9PiAhIXBpZWNlKTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFzaWNNb3ZlcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgcGllY2U6IENoZXNzaW1hbHNQaWVjZSk6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBjb25zdCBkaXJlY3Rpb24gPSBwaWVjZS5jb2xvciA9PT0gJ3doaXRlJyA/IC0xIDogMTtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcbiAgY29uc3QgZm9yd2FyZCA9IHsgcm93OiBwaWVjZS5wb3NpdGlvbi5yb3cgKyBkaXJlY3Rpb24sIGNvbDogcGllY2UucG9zaXRpb24uY29sIH07XG5cbiAgaWYgKGlzSW5zaWRlQm9hcmQoc3RhdGUuYm9hcmRTaXplLCBmb3J3YXJkKSAmJiAhZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIGZvcndhcmQpKSB7XG4gICAgbW92ZXMucHVzaCh7XG4gICAgICBwaWVjZUlkOiBwaWVjZS5pZCxcbiAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgIHRvOiBmb3J3YXJkLFxuICAgICAga2luZDogJ2Jhc2ljJyxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY29sT2Zmc2V0IG9mIFstMSwgMV0pIHtcbiAgICBjb25zdCB0YXJnZXQgPSB7IHJvdzogcGllY2UucG9zaXRpb24ucm93ICsgZGlyZWN0aW9uLCBjb2w6IHBpZWNlLnBvc2l0aW9uLmNvbCArIGNvbE9mZnNldCB9O1xuICAgIGNvbnN0IHRhcmdldFBpZWNlID0gZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIHRhcmdldCk7XG4gICAgaWYgKFxuICAgICAgaXNJbnNpZGVCb2FyZChzdGF0ZS5ib2FyZFNpemUsIHRhcmdldCkgJiZcbiAgICAgIHRhcmdldFBpZWNlICYmXG4gICAgICB0YXJnZXRQaWVjZS5jb2xvciAhPT0gcGllY2UuY29sb3IgJiZcbiAgICAgICFpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIHBpZWNlLmNvbG9yLCB0YXJnZXQpXG4gICAgKSB7XG4gICAgICBtb3Zlcy5wdXNoKHtcbiAgICAgICAgcGllY2VJZDogcGllY2UuaWQsXG4gICAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgICAgdG86IHRhcmdldCxcbiAgICAgICAga2luZDogJ2Jhc2ljJyxcbiAgICAgICAgY2FwdHVyZXNQaWVjZUlkOiB0YXJnZXRQaWVjZS5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZnVuY3Rpb24gZ2V0UG93ZXJNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIHBpZWNlOiBDaGVzc2ltYWxzUGllY2UsXG4gIGFuaW1hbDogQ2hlc3NpbWFsc0FuaW1hbFR5cGUsXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgaWYgKGFuaW1hbCA9PT0gJ2thbmdhcm9vJykge1xuICAgIHJldHVybiBnZXRLYW5nYXJvb01vdmVzKHN0YXRlLCBwaWVjZSk7XG4gIH1cblxuICBjb25zdCBkaXJlY3Rpb25zID0gZ2V0UG93ZXJEaXJlY3Rpb25zKGFuaW1hbCk7XG4gIGNvbnN0IG1vdmVzOiBDaGVzc2ltYWxzTW92ZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBkaXJlY3Rpb24gb2YgZGlyZWN0aW9ucykge1xuICAgIGZvciAobGV0IGRpc3RhbmNlID0gMTsgZGlzdGFuY2UgPCBzdGF0ZS5ib2FyZFNpemU7IGRpc3RhbmNlICs9IDEpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHtcbiAgICAgICAgcm93OiBwaWVjZS5wb3NpdGlvbi5yb3cgKyBkaXJlY3Rpb24ucm93ICogZGlzdGFuY2UsXG4gICAgICAgIGNvbDogcGllY2UucG9zaXRpb24uY29sICsgZGlyZWN0aW9uLmNvbCAqIGRpc3RhbmNlLFxuICAgICAgfTtcbiAgICAgIGlmICghaXNJbnNpZGVCb2FyZChzdGF0ZS5ib2FyZFNpemUsIHRhcmdldCkpIGJyZWFrO1xuICAgICAgaWYgKGlzUHJvbW90aW9uUm93KHN0YXRlLmJvYXJkU2l6ZSwgcGllY2UuY29sb3IsIHRhcmdldCkpIGJyZWFrO1xuXG4gICAgICBjb25zdCB0YXJnZXRQaWVjZSA9IGdldENoZXNzaW1hbHNQaWVjZUF0KHN0YXRlLCB0YXJnZXQpO1xuICAgICAgaWYgKHRhcmdldFBpZWNlPy5jb2xvciA9PT0gcGllY2UuY29sb3IpIGJyZWFrO1xuXG4gICAgICBtb3Zlcy5wdXNoKHtcbiAgICAgICAgcGllY2VJZDogcGllY2UuaWQsXG4gICAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgICAgdG86IHRhcmdldCxcbiAgICAgICAga2luZDogJ3Bvd2VyJyxcbiAgICAgICAgYW5pbWFsLFxuICAgICAgICAuLi4odGFyZ2V0UGllY2UgPyB7IGNhcHR1cmVzUGllY2VJZDogdGFyZ2V0UGllY2UuaWQgfSA6IHt9KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGFyZ2V0UGllY2UpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZnVuY3Rpb24gZ2V0S2FuZ2Fyb29Nb3ZlcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgcGllY2U6IENoZXNzaW1hbHNQaWVjZSk6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBjb25zdCBtb3ZlczogQ2hlc3NpbWFsc01vdmVbXSA9IFtdO1xuICBjb25zdCBqdW1wcyA9IFtcbiAgICB7IHJvdzogLTIsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogLTIsIGNvbDogMSB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAtMiB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAyIH0sXG4gICAgeyByb3c6IDEsIGNvbDogLTIgfSxcbiAgICB7IHJvdzogMSwgY29sOiAyIH0sXG4gICAgeyByb3c6IDIsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMiwgY29sOiAxIH0sXG4gIF07XG5cbiAgZm9yIChjb25zdCBqdW1wIG9mIGp1bXBzKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0ge1xuICAgICAgcm93OiBwaWVjZS5wb3NpdGlvbi5yb3cgKyBqdW1wLnJvdyxcbiAgICAgIGNvbDogcGllY2UucG9zaXRpb24uY29sICsganVtcC5jb2wsXG4gICAgfTtcbiAgICBpZiAoIWlzSW5zaWRlQm9hcmQoc3RhdGUuYm9hcmRTaXplLCB0YXJnZXQpKSBjb250aW51ZTtcbiAgICBpZiAoaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBwaWVjZS5jb2xvciwgdGFyZ2V0KSkgY29udGludWU7XG5cbiAgICBjb25zdCB0YXJnZXRQaWVjZSA9IGdldENoZXNzaW1hbHNQaWVjZUF0KHN0YXRlLCB0YXJnZXQpO1xuICAgIGlmICh0YXJnZXRQaWVjZT8uY29sb3IgPT09IHBpZWNlLmNvbG9yKSBjb250aW51ZTtcblxuICAgIG1vdmVzLnB1c2goe1xuICAgICAgcGllY2VJZDogcGllY2UuaWQsXG4gICAgICBmcm9tOiB7IC4uLnBpZWNlLnBvc2l0aW9uIH0sXG4gICAgICB0bzogdGFyZ2V0LFxuICAgICAga2luZDogJ3Bvd2VyJyxcbiAgICAgIGFuaW1hbDogJ2thbmdhcm9vJyxcbiAgICAgIC4uLih0YXJnZXRQaWVjZSA/IHsgY2FwdHVyZXNQaWVjZUlkOiB0YXJnZXRQaWVjZS5pZCB9IDoge30pLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG1vdmVzO1xufVxuXG5mdW5jdGlvbiBzY29yZUJvdE1vdmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgZGlmZmljdWx0eTogQ2hlc3NpbWFsc0JvdERpZmZpY3VsdHksXG4gIHN0eWxlOiBDaGVzc2ltYWxzQm90U3R5bGUsXG4gIGNoYWxsZW5nZVByZXNzdXJlID0gMCxcbiAgaW5jbHVkZVRhY3RpY2FsUHJlc3N1cmUgPSB0cnVlLFxuICBuaWdodG1hcmVNb2RlOiBDaGVzc2ltYWxzTmlnaHRtYXJlTW9kZSA9ICdub25lJyxcbik6IG51bWJlciB7XG4gIGNvbnN0IGNvbG9yID0gc3RhdGUuY3VycmVudFR1cm47XG4gIGNvbnN0IHRhcmdldFBpZWNlID0gbW92ZS5jYXB0dXJlc1BpZWNlSWRcbiAgICA/IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZCgocGllY2UpID0+IHBpZWNlLmlkID09PSBtb3ZlLmNhcHR1cmVzUGllY2VJZClcbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYWR2YW5jZW1lbnQgPVxuICAgIGNvbG9yID09PSAnd2hpdGUnID8gc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUudG8ucm93IDogbW92ZS50by5yb3c7XG4gIGxldCBzY29yZSA9IGFkdmFuY2VtZW50ICogMjQgKiBzdHlsZS5hZHZhbmNlbWVudDtcbiAgY29uc3Qgc3RlcHNUb1Byb21vdGlvbiA9XG4gICAgY29sb3IgPT09ICd3aGl0ZScgPyBtb3ZlLnRvLnJvdyA6IHN0YXRlLmJvYXJkU2l6ZSAtIDEgLSBtb3ZlLnRvLnJvdztcbiAgc2NvcmUgKz0gTWF0aC5tYXgoMCwgc3RhdGUuYm9hcmRTaXplIC0gMSAtIHN0ZXBzVG9Qcm9tb3Rpb24pICogMTAgKiBjaGFsbGVuZ2VQcmVzc3VyZSAqIHN0eWxlLmFkdmFuY2VtZW50O1xuXG4gIGlmIChtb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBjb2xvciwgbW92ZS50bykpIHtcbiAgICBzY29yZSArPSAxMDAwMCArIDI1MDAgKiBjaGFsbGVuZ2VQcmVzc3VyZTtcbiAgfVxuICBpZiAobmlnaHRtYXJlTW9kZSA9PT0gJ2h1bnQnICYmIHRhcmdldFBpZWNlKSB7XG4gICAgc2NvcmUgKz0gKG1vdmUua2luZCA9PT0gJ3Bvd2VyJyA/IDc2MCA6IDYyMCkgKiBzdHlsZS5jYXB0dXJlO1xuICB9XG4gIGlmICh0YXJnZXRQaWVjZSkge1xuICAgIHNjb3JlICs9ICg1MjAgKyAxODAgKiBjaGFsbGVuZ2VQcmVzc3VyZSkgKiBzdHlsZS5jYXB0dXJlO1xuICAgIGlmIChtb3ZlLmtpbmQgPT09ICdiYXNpYycpIHNjb3JlICs9IDE2MCAqIGNoYWxsZW5nZVByZXNzdXJlICogc3R5bGUuY2FwdHVyZTtcbiAgICBjb25zdCB0YXJnZXRBZHZhbmNlbWVudCA9XG4gICAgICB0YXJnZXRQaWVjZS5jb2xvciA9PT0gJ3doaXRlJ1xuICAgICAgICA/IHN0YXRlLmJvYXJkU2l6ZSAtIDEgLSB0YXJnZXRQaWVjZS5wb3NpdGlvbi5yb3dcbiAgICAgICAgOiB0YXJnZXRQaWVjZS5wb3NpdGlvbi5yb3c7XG4gICAgc2NvcmUgKz0gdGFyZ2V0QWR2YW5jZW1lbnQgKiAoMTYgKyA4ICogY2hhbGxlbmdlUHJlc3N1cmUpICogc3R5bGUuY2FwdHVyZTtcbiAgfVxuICBpZiAobW92ZS5raW5kID09PSAncG93ZXInKSB7XG4gICAgc2NvcmUgKz0gKHRhcmdldFBpZWNlID8gMTIwIDogZGlmZmljdWx0eSA9PT0gJ2hhcmQnID8gLTYwIC0gMTcwICogY2hhbGxlbmdlUHJlc3N1cmUgOiAtMzApICogc3R5bGUucG93ZXI7XG4gIH1cbiAgaWYgKG5pZ2h0bWFyZU1vZGUgPT09ICdtYWdudXMnICYmIG1vdmUua2luZCA9PT0gJ3Bvd2VyJykge1xuICAgIHNjb3JlICs9IHNjb3JlTWFnbnVzUG93ZXJQYXRpZW5jZShzdGF0ZSwgbW92ZSwgdGFyZ2V0UGllY2UsIHN0eWxlKTtcbiAgfVxuICBpZiAobW92ZS5hbmltYWwgPT09ICdsaW9uJykgc2NvcmUgKz0gbmlnaHRtYXJlTW9kZSA9PT0gJ3ByaWRlJyA/IDI2MCAqIHN0eWxlLnBvd2VyIDogLTIwICogc3R5bGUucG93ZXI7XG4gIGlmIChtb3ZlLmFuaW1hbCA9PT0gJ2thbmdhcm9vJykgc2NvcmUgKz0gMTQgKiBzdHlsZS5wb3dlcjtcbiAgaWYgKHdvdWxkVW5sb2NrUG93ZXIoc3RhdGUsIGNvbG9yLCBtb3ZlLnRvKSkgc2NvcmUgKz0gOTAgKiBzdHlsZS51bmxvY2s7XG4gIGlmIChpbmNsdWRlVGFjdGljYWxQcmVzc3VyZSAmJiBzdGF0ZS5ib2FyZFNpemUgPD0gNikge1xuICAgIHNjb3JlICs9IGNvdW50UG93ZXJSZWFjaEFmdGVyTW92ZShzdGF0ZSwgbW92ZSwgY29sb3IpICogKGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDggOiA0KSAqIHN0eWxlLm1vYmlsaXR5O1xuICAgIHNjb3JlICs9IGNvdW50UHJvdGVjdGVkVGhyZWF0c0FmdGVyTW92ZShzdGF0ZSwgbW92ZSwgY29sb3IpICogKGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDM2IDogMTgpICogc3R5bGUudHJhcDtcbiAgICBzY29yZSArPSBzY29yZUVuZGdhbWVQcmVzc3VyZShzdGF0ZSwgbW92ZSwgY29sb3IpICogc3R5bGUuZW5kZ2FtZTtcbiAgfSBlbHNlIHtcbiAgICBzY29yZSArPSBzY29yZUVuZGdhbWVQcmVzc3VyZShzdGF0ZSwgbW92ZSwgY29sb3IpICogc3R5bGUuZW5kZ2FtZTtcbiAgfVxuICBpZiAoZGlmZmljdWx0eSA9PT0gJ2hhcmQnICYmIGlzU3F1YXJlVnVsbmVyYWJsZUFmdGVyTW92ZShzdGF0ZSwgbW92ZSkpIHtcbiAgICBzY29yZSAtPSAodGFyZ2V0UGllY2UgPyA4MCA6IDE0MCkgKiBzdHlsZS5zYWZldHk7XG4gIH1cbiAgc2NvcmUgKz0gKE1hdGgucmFuZG9tKCkgLSAwLjUpICogc3R5bGUucmFuZG9tbmVzcztcblxuICByZXR1cm4gc2NvcmU7XG59XG5cbmZ1bmN0aW9uIHNjb3JlQm90TW92ZVdpdGhMb29rYWhlYWQoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgZGlmZmljdWx0eTogQ2hlc3NpbWFsc0JvdERpZmZpY3VsdHksXG4gIHN0eWxlOiBDaGVzc2ltYWxzQm90U3R5bGUsXG4gIGNoYWxsZW5nZVByZXNzdXJlID0gMCxcbiAgbmlnaHRtYXJlTW9kZTogQ2hlc3NpbWFsc05pZ2h0bWFyZU1vZGUgPSAnbm9uZScsXG4pOiBudW1iZXIge1xuICBsZXQgc2NvcmUgPSBzY29yZUJvdE1vdmUoc3RhdGUsIG1vdmUsIGRpZmZpY3VsdHksIHN0eWxlLCBjaGFsbGVuZ2VQcmVzc3VyZSwgdHJ1ZSwgbmlnaHRtYXJlTW9kZSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhZnRlck1vdmUgPSBhcHBseUNoZXNzaW1hbHNNb3ZlKHN0YXRlLCBtb3ZlKTtcbiAgICBpZiAoYWZ0ZXJNb3ZlLnN0YXR1cyA9PT0gJ2ZpbmlzaGVkJykgcmV0dXJuIHNjb3JlICsgNTAwMDtcblxuICAgIGNvbnN0IG9wcG9uZW50TW92ZXMgPSBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhhZnRlck1vdmUpO1xuICAgIGNvbnN0IG9wcG9uZW50SW1tZWRpYXRlV2luID0gb3Bwb25lbnRNb3Zlcy5zb21lKFxuICAgICAgKG9wcG9uZW50TW92ZSkgPT5cbiAgICAgICAgb3Bwb25lbnRNb3ZlLmtpbmQgPT09ICdiYXNpYycgJiZcbiAgICAgICAgaXNQcm9tb3Rpb25Sb3coYWZ0ZXJNb3ZlLmJvYXJkU2l6ZSwgYWZ0ZXJNb3ZlLmN1cnJlbnRUdXJuLCBvcHBvbmVudE1vdmUudG8pLFxuICAgICk7XG4gICAgaWYgKG9wcG9uZW50SW1tZWRpYXRlV2luKSB7XG4gICAgICBzY29yZSAtPSAoZGlmZmljdWx0eSA9PT0gJ2Vhc3knID8gMTgwMCA6IGRpZmZpY3VsdHkgPT09ICdub3JtYWwnID8gNTIwMCA6IDgwMDAgKyA0MjAwICogY2hhbGxlbmdlUHJlc3N1cmUpICogc3R5bGUuc2FmZXR5O1xuICAgIH1cblxuICAgIGNvbnN0IG1vdmVkUGllY2UgPSBhZnRlck1vdmUucGllY2VzLmZpbmQoKHBpZWNlKSA9PiBwaWVjZS5pZCA9PT0gbW92ZS5waWVjZUlkICYmICFwaWVjZS5jYXB0dXJlZCk7XG4gICAgaWYgKG1vdmVkUGllY2UpIHtcbiAgICAgIGNvbnN0IGNhbkNhcHR1cmVNb3ZlZFBpZWNlID0gb3Bwb25lbnRNb3Zlcy5zb21lKChvcHBvbmVudE1vdmUpID0+IG9wcG9uZW50TW92ZS5jYXB0dXJlc1BpZWNlSWQgPT09IG1vdmUucGllY2VJZCk7XG4gICAgICBpZiAoY2FuQ2FwdHVyZU1vdmVkUGllY2UpIHtcbiAgICAgICAgc2NvcmUgLT0gKG1vdmUuY2FwdHVyZXNQaWVjZUlkID8gMTgwIDogZGlmZmljdWx0eSA9PT0gJ2Vhc3knID8gMTIwIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCcgPyAzNjAgOiA1NjApXG4gICAgICAgICAgKiBzdHlsZS5zYWZldHlcbiAgICAgICAgICAqICgxICsgY2hhbGxlbmdlUHJlc3N1cmUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZW50ZXIgPSAoYWZ0ZXJNb3ZlLmJvYXJkU2l6ZSAtIDEpIC8gMjtcbiAgICAgIGNvbnN0IGNlbnRlckNvbnRyb2wgPSBNYXRoLm1heCgwLCBhZnRlck1vdmUuYm9hcmRTaXplIC8gMiAtIE1hdGguYWJzKG1vdmVkUGllY2UucG9zaXRpb24uY29sIC0gY2VudGVyKSk7XG4gICAgICBzY29yZSArPSBjZW50ZXJDb250cm9sICogKGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDE4IDogMTApICogc3R5bGUuY2VudGVyO1xuICAgIH1cblxuICAgIGNvbnN0IG9wcG9uZW50QmVzdFJlcGx5ID0gb3Bwb25lbnRNb3Zlc1xuICAgICAgLm1hcCgob3Bwb25lbnRNb3ZlKSA9PiBzY29yZUJvdE1vdmUoYWZ0ZXJNb3ZlLCBvcHBvbmVudE1vdmUsIGRpZmZpY3VsdHksIHN0eWxlLCBjaGFsbGVuZ2VQcmVzc3VyZSwgZmFsc2UsIG5pZ2h0bWFyZU1vZGUpKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIgLSBhKVswXTtcblxuICAgIGlmIChvcHBvbmVudEJlc3RSZXBseSkge1xuICAgICAgY29uc3QgcmVwbHlXZWlnaHQgPSBkaWZmaWN1bHR5ID09PSAnZWFzeScgPyAwLjEyIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCcgPyAwLjMyICsgMC4wOCAqIGNoYWxsZW5nZVByZXNzdXJlIDogMC40OCArIDAuMTYgKiBjaGFsbGVuZ2VQcmVzc3VyZTtcbiAgICAgIHNjb3JlIC09IG9wcG9uZW50QmVzdFJlcGx5ICogcmVwbHlXZWlnaHQgKiBzdHlsZS5yZXBseTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHNjb3JlIC09IDEwMDA7XG4gIH1cblxuICByZXR1cm4gc2NvcmU7XG59XG5cbmZ1bmN0aW9uIGdldENoYWxsZW5nZVByZXNzdXJlKHJvdW5kPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCFyb3VuZCB8fCByb3VuZCA8PSAyKSByZXR1cm4gMDtcbiAgcmV0dXJuIE1hdGgubWluKDEsIE1hdGgubWF4KDAsIChyb3VuZCAtIDIpIC8gNikpO1xufVxuXG5mdW5jdGlvbiB0dW5lQm90U3R5bGUoXG4gIHN0eWxlOiBDaGVzc2ltYWxzQm90U3R5bGUsXG4gIGRpZmZpY3VsdHk6IENoZXNzaW1hbHNCb3REaWZmaWN1bHR5LFxuICBjaGFsbGVuZ2VQcmVzc3VyZTogbnVtYmVyLFxuICBuaWdodG1hcmVNb2RlOiBDaGVzc2ltYWxzTmlnaHRtYXJlTW9kZSA9ICdub25lJyxcbik6IENoZXNzaW1hbHNCb3RTdHlsZSB7XG4gIGlmIChuaWdodG1hcmVNb2RlID09PSAnaHVudCcpIHtcbiAgICBzdHlsZSA9IHtcbiAgICAgIC4uLnN0eWxlLFxuICAgICAgYWR2YW5jZW1lbnQ6IHN0eWxlLmFkdmFuY2VtZW50ICogMS4xMixcbiAgICAgIGNhcHR1cmU6IHN0eWxlLmNhcHR1cmUgKiAxLjcyLFxuICAgICAgcG93ZXI6IHN0eWxlLnBvd2VyICogMS4zLFxuICAgICAgc2FmZXR5OiBzdHlsZS5zYWZldHkgKiAwLjgyLFxuICAgICAgcmFuZG9tbmVzczogTWF0aC5taW4oc3R5bGUucmFuZG9tbmVzcywgMTIpLFxuICAgICAgdHJhcDogc3R5bGUudHJhcCAqIDEuMjgsXG4gICAgfTtcbiAgfVxuICBpZiAobmlnaHRtYXJlTW9kZSA9PT0gJ3ByaWRlJykge1xuICAgIHN0eWxlID0ge1xuICAgICAgLi4uc3R5bGUsXG4gICAgICBhZHZhbmNlbWVudDogc3R5bGUuYWR2YW5jZW1lbnQgKiAxLjA4LFxuICAgICAgY2FwdHVyZTogc3R5bGUuY2FwdHVyZSAqIDEuMzIsXG4gICAgICBwb3dlcjogc3R5bGUucG93ZXIgKiAxLjU1LFxuICAgICAgcmFuZG9tbmVzczogTWF0aC5taW4oc3R5bGUucmFuZG9tbmVzcywgMTYpLFxuICAgIH07XG4gIH1cbiAgaWYgKG5pZ2h0bWFyZU1vZGUgPT09ICdtYWdudXMnKSB7XG4gICAgc3R5bGUgPSB7XG4gICAgICAuLi5zdHlsZSxcbiAgICAgIGFkdmFuY2VtZW50OiBzdHlsZS5hZHZhbmNlbWVudCAqIDEuMDQsXG4gICAgICBjYXB0dXJlOiBzdHlsZS5jYXB0dXJlICogMS4xNixcbiAgICAgIHNhZmV0eTogc3R5bGUuc2FmZXR5ICogMS4zOCxcbiAgICAgIHBvd2VyOiBzdHlsZS5wb3dlciAqIDAuODIsXG4gICAgICBjZW50ZXI6IHN0eWxlLmNlbnRlciAqIDEuMixcbiAgICAgIHJlcGx5OiBzdHlsZS5yZXBseSAqIDEuMyxcbiAgICAgIHJhbmRvbW5lc3M6IE1hdGgubWluKHN0eWxlLnJhbmRvbW5lc3MsIDIpLFxuICAgICAgc3ByZWFkOiBzdHlsZS5zcHJlYWQgKiAwLjYsXG4gICAgICB0cmFwOiBzdHlsZS50cmFwICogMS4yMixcbiAgICAgIGVuZGdhbWU6IHN0eWxlLmVuZGdhbWUgKiAxLjI4LFxuICAgIH07XG4gIH1cbiAgaWYgKCFjaGFsbGVuZ2VQcmVzc3VyZSkgcmV0dXJuIHN0eWxlO1xuICBjb25zdCBwcmVzc3VyZSA9IGRpZmZpY3VsdHkgPT09ICdlYXN5JyA/IGNoYWxsZW5nZVByZXNzdXJlICogMC40NSA6IGNoYWxsZW5nZVByZXNzdXJlO1xuICByZXR1cm4ge1xuICAgIC4uLnN0eWxlLFxuICAgIGNhcHR1cmU6IHN0eWxlLmNhcHR1cmUgKiAoMSArIHByZXNzdXJlICogMC4yOCksXG4gICAgc2FmZXR5OiBzdHlsZS5zYWZldHkgKiAoMSArIHByZXNzdXJlICogMC4zNCksXG4gICAgcmVwbHk6IHN0eWxlLnJlcGx5ICogKDEgKyBwcmVzc3VyZSAqIDAuMjIpLFxuICAgIGNlbnRlcjogc3R5bGUuY2VudGVyICogKDEgKyBwcmVzc3VyZSAqIDAuMTIpLFxuICAgIHJhbmRvbW5lc3M6IHN0eWxlLnJhbmRvbW5lc3MgKiAoMSAtIHByZXNzdXJlICogMC42NSksXG4gICAgc3ByZWFkOiBzdHlsZS5zcHJlYWQgKiAoMSAtIHByZXNzdXJlICogMC4zNSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNob29zZUNoYWxsZW5nZUJhc2ljQ2FwdHVyZShcbiAgc2NvcmVkOiB7IG1vdmU6IENoZXNzaW1hbHNNb3ZlOyBzY29yZTogbnVtYmVyIH1bXSxcbiAgY2hhbGxlbmdlUHJlc3N1cmU6IG51bWJlcixcbik6IENoZXNzaW1hbHNNb3ZlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNoYWxsZW5nZVByZXNzdXJlIDwgMC41KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJlc3QgPSBzY29yZWRbMF07XG4gIGNvbnN0IGJlc3RCYXNpY0NhcHR1cmUgPSBzY29yZWQuZmluZCgoaXRlbSkgPT4gaXRlbS5tb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXRlbS5tb3ZlLmNhcHR1cmVzUGllY2VJZCk7XG4gIGlmICghYmVzdCB8fCAhYmVzdEJhc2ljQ2FwdHVyZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGJlc3QubW92ZS5raW5kID09PSAnYmFzaWMnICYmIGJlc3QubW92ZS5jYXB0dXJlc1BpZWNlSWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgdG9sZXJhbmNlID0gYmVzdC5tb3ZlLmtpbmQgPT09ICdwb3dlcicgJiYgIWJlc3QubW92ZS5jYXB0dXJlc1BpZWNlSWQgPyAxODAwIDogOTAwO1xuICByZXR1cm4gYmVzdC5zY29yZSAtIGJlc3RCYXNpY0NhcHR1cmUuc2NvcmUgPD0gdG9sZXJhbmNlID8gYmVzdEJhc2ljQ2FwdHVyZS5tb3ZlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjaG9vc2VOaWdodG1hcmVDYXB0dXJlKFxuICBzY29yZWQ6IHsgbW92ZTogQ2hlc3NpbWFsc01vdmU7IHNjb3JlOiBudW1iZXIgfVtdLFxuICBuaWdodG1hcmVNb2RlPzogQ2hlc3NpbWFsc05pZ2h0bWFyZU1vZGUsXG4pOiBDaGVzc2ltYWxzTW92ZSB8IHVuZGVmaW5lZCB7XG4gIGlmIChuaWdodG1hcmVNb2RlICE9PSAnaHVudCcpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYmVzdCA9IHNjb3JlZFswXTtcbiAgY29uc3QgY2FwdHVyZSA9IHNjb3JlZC5maW5kKChpdGVtKSA9PiBpdGVtLm1vdmUuY2FwdHVyZXNQaWVjZUlkKTtcbiAgaWYgKCFiZXN0IHx8ICFjYXB0dXJlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHJldHVybiBiZXN0LnNjb3JlIC0gY2FwdHVyZS5zY29yZSA8PSAxODAwID8gY2FwdHVyZS5tb3ZlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBzY29yZU1hZ251c1Bvd2VyUGF0aWVuY2UoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgdGFyZ2V0UGllY2U6IENoZXNzaW1hbHNQaWVjZSB8IHVuZGVmaW5lZCxcbiAgc3R5bGU6IENoZXNzaW1hbHNCb3RTdHlsZSxcbik6IG51bWJlciB7XG4gIGNvbnN0IGNvbG9yID0gc3RhdGUuY3VycmVudFR1cm47XG4gIGNvbnN0IGZyb21BZHZhbmNlbWVudCA9IGNvbG9yID09PSAnd2hpdGUnID8gc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUuZnJvbS5yb3cgOiBtb3ZlLmZyb20ucm93O1xuICBjb25zdCB0b0FkdmFuY2VtZW50ID0gY29sb3IgPT09ICd3aGl0ZScgPyBzdGF0ZS5ib2FyZFNpemUgLSAxIC0gbW92ZS50by5yb3cgOiBtb3ZlLnRvLnJvdztcbiAgY29uc3QgYWR2YW5jZW1lbnRHYWluID0gTWF0aC5tYXgoMCwgdG9BZHZhbmNlbWVudCAtIGZyb21BZHZhbmNlbWVudCk7XG4gIGNvbnN0IHN0ZXBzVG9Qcm9tb3Rpb24gPSBjb2xvciA9PT0gJ3doaXRlJyA/IG1vdmUudG8ucm93IDogc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUudG8ucm93O1xuICBjb25zdCBjcmVhdGVzUHJvbW90aW9uVGhyZWF0ID0gYWR2YW5jZW1lbnRHYWluID4gMCAmJiBzdGVwc1RvUHJvbW90aW9uIDw9IDE7XG5cbiAgaWYgKHRhcmdldFBpZWNlKSByZXR1cm4gMjYwICogc3R5bGUucG93ZXI7XG4gIGlmIChjcmVhdGVzUHJvbW90aW9uVGhyZWF0KSByZXR1cm4gMTgwICogc3R5bGUuZW5kZ2FtZTtcblxuICBjb25zdCBlYXJseUdhbWUgPSBzdGF0ZS5tb3ZlQ291bnQgPCBzdGF0ZS5ib2FyZFNpemU7XG4gIGNvbnN0IHdhbmRlcmluZ1BlbmFsdHkgPSBlYXJseUdhbWUgPyAxMTgwIDogNjIwO1xuICBjb25zdCBhbmltYWxQZW5hbHR5ID0gbW92ZS5hbmltYWwgPT09ICdrYW5nYXJvbycgPyAyMjAgOiBtb3ZlLmFuaW1hbCA9PT0gJ2xpb24nID8gMTYwIDogMDtcblxuICByZXR1cm4gLSh3YW5kZXJpbmdQZW5hbHR5ICsgYW5pbWFsUGVuYWx0eSkgKiBzdHlsZS5wb3dlcjtcbn1cblxuZnVuY3Rpb24gY291bnRQb3dlclJlYWNoQWZ0ZXJNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4pOiBudW1iZXIge1xuICB0cnkge1xuICAgIGNvbnN0IGFmdGVyTW92ZSA9IGFwcGx5Q2hlc3NpbWFsc01vdmUoc3RhdGUsIG1vdmUpO1xuICAgIGNvbnN0IGV2YWx1YXRpb25TdGF0ZSA9IHsgLi4uYWZ0ZXJNb3ZlLCBjdXJyZW50VHVybjogY29sb3IgfTtcbiAgICByZXR1cm4gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoZXZhbHVhdGlvblN0YXRlLCBjb2xvcikuZmlsdGVyKChuZXh0TW92ZSkgPT4gbmV4dE1vdmUua2luZCA9PT0gJ3Bvd2VyJykubGVuZ3RoO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb3VudFByb3RlY3RlZFRocmVhdHNBZnRlck1vdmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbik6IG51bWJlciB7XG4gIHRyeSB7XG4gICAgY29uc3QgYWZ0ZXJNb3ZlID0gYXBwbHlDaGVzc2ltYWxzTW92ZShzdGF0ZSwgbW92ZSk7XG4gICAgY29uc3QgZXZhbHVhdGlvblN0YXRlID0geyAuLi5hZnRlck1vdmUsIGN1cnJlbnRUdXJuOiBjb2xvciB9O1xuICAgIGNvbnN0IG91ck1vdmVzID0gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoZXZhbHVhdGlvblN0YXRlLCBjb2xvcik7XG4gICAgY29uc3QgZW5lbXlQaWVjZXMgPSBhY3RpdmVQaWVjZXMoYWZ0ZXJNb3ZlKS5maWx0ZXIoKHBpZWNlKSA9PiBwaWVjZS5jb2xvciAhPT0gY29sb3IgJiYgIXBpZWNlLmNhcHR1cmVkKTtcbiAgICByZXR1cm4gZW5lbXlQaWVjZXMuZmlsdGVyKChwaWVjZSkgPT5cbiAgICAgIG91ck1vdmVzLnNvbWUoKG5leHRNb3ZlKSA9PiBuZXh0TW92ZS5jYXB0dXJlc1BpZWNlSWQgPT09IHBpZWNlLmlkKSxcbiAgICApLmxlbmd0aDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NvcmVFbmRnYW1lUHJlc3N1cmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbik6IG51bWJlciB7XG4gIGNvbnN0IHJlbWFpbmluZ0VuZW15UGllY2VzID0gYWN0aXZlUGllY2VzKHN0YXRlKS5maWx0ZXIoKHBpZWNlKSA9PiBwaWVjZS5jb2xvciAhPT0gY29sb3IgJiYgIXBpZWNlLmNhcHR1cmVkKS5sZW5ndGg7XG4gIGNvbnN0IHVyZ2VuY3kgPSByZW1haW5pbmdFbmVteVBpZWNlcyA8PSBNYXRoLm1heCgyLCBNYXRoLmZsb29yKHN0YXRlLmJvYXJkU2l6ZSAvIDIpKSA/IDEuNiA6IDE7XG4gIGNvbnN0IGRpc3RhbmNlVG9Qcm9tb3Rpb24gPVxuICAgIGNvbG9yID09PSAnd2hpdGUnID8gbW92ZS50by5yb3cgOiBzdGF0ZS5ib2FyZFNpemUgLSAxIC0gbW92ZS50by5yb3c7XG4gIHJldHVybiBNYXRoLm1heCgwLCBzdGF0ZS5ib2FyZFNpemUgLSBkaXN0YW5jZVRvUHJvbW90aW9uKSAqIDE0ICogdXJnZW5jeTtcbn1cblxuZnVuY3Rpb24gY2hvb3NlQ29uc2VydmF0aXZlSGFyZENhcHR1cmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBzY29yZWQ6IHsgbW92ZTogQ2hlc3NpbWFsc01vdmU7IHNjb3JlOiBudW1iZXIgfVtdLFxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBpZiAoc3RhdGUuYm9hcmRTaXplICE9PSA4KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJlc3QgPSBzY29yZWRbMF07XG4gIGlmICghYmVzdCB8fCBiZXN0Lm1vdmUua2luZCAhPT0gJ3Bvd2VyJyB8fCAhYmVzdC5tb3ZlLmNhcHR1cmVzUGllY2VJZCB8fCBiZXN0LnNjb3JlID49IDEwMDAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGJlc3RCYXNpY0NhcHR1cmUgPSBzY29yZWQuZmluZCgoaXRlbSkgPT4gaXRlbS5tb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXRlbS5tb3ZlLmNhcHR1cmVzUGllY2VJZCk7XG4gIGlmICghYmVzdEJhc2ljQ2FwdHVyZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICByZXR1cm4gYmVzdC5zY29yZSAtIGJlc3RCYXNpY0NhcHR1cmUuc2NvcmUgPD0gNjUwID8gYmVzdEJhc2ljQ2FwdHVyZS5tb3ZlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBwaWNrTm9pc3lCb3RNb3ZlKFxuICBzY29yZWQ6IEFycmF5PHsgbW92ZTogQ2hlc3NpbWFsc01vdmU7IHNjb3JlOiBudW1iZXIgfT4sXG4gIHNwcmVhZDogbnVtYmVyLFxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBpZiAoc2NvcmVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcG9vbFNpemUgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoc2NvcmVkLmxlbmd0aCAqIHNwcmVhZCkpO1xuICBjb25zdCBwb29sID0gc2NvcmVkLnNsaWNlKDAsIHBvb2xTaXplKTtcbiAgY29uc3QgdG9wU2NvcmUgPSBwb29sWzBdPy5zY29yZSA/PyAwO1xuICBjb25zdCB3ZWlnaHRlZCA9IHBvb2wubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHJlbGF0aXZlID0gTWF0aC5tYXgoMCwgaXRlbS5zY29yZSAtIHRvcFNjb3JlICsgMTIwMCk7XG4gICAgY29uc3Qgd2VpZ2h0ID0gTWF0aC5tYXgoMSwgcmVsYXRpdmUgLyAxMjAgKyAocG9vbC5sZW5ndGggLSBpbmRleCkgKiAyKTtcbiAgICByZXR1cm4geyAuLi5pdGVtLCB3ZWlnaHQgfTtcbiAgfSk7XG4gIGNvbnN0IHRvdGFsV2VpZ2h0ID0gd2VpZ2h0ZWQucmVkdWNlKCh0b3RhbCwgaXRlbSkgPT4gdG90YWwgKyBpdGVtLndlaWdodCwgMCk7XG4gIGxldCBjdXJzb3IgPSBNYXRoLnJhbmRvbSgpICogdG90YWxXZWlnaHQ7XG4gIGZvciAoY29uc3QgaXRlbSBvZiB3ZWlnaHRlZCkge1xuICAgIGN1cnNvciAtPSBpdGVtLndlaWdodDtcbiAgICBpZiAoY3Vyc29yIDw9IDApIHJldHVybiBpdGVtLm1vdmU7XG4gIH1cbiAgcmV0dXJuIHBvb2xbMF0/Lm1vdmU7XG59XG5cbmZ1bmN0aW9uIGdldEltbWVkaWF0ZVdpbm5pbmdNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgcmV0dXJuIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKHN0YXRlLCBjb2xvcikuZmlsdGVyKFxuICAgIChtb3ZlKSA9PiBtb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBjb2xvciwgbW92ZS50byksXG4gICk7XG59XG5cbmZ1bmN0aW9uIHdvdWxkVW5sb2NrUG93ZXIoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uLFxuKTogYm9vbGVhbiB7XG4gIGlmIChzdGF0ZS5wbGF5ZXJzW2NvbG9yXS5wb3dlclVubG9ja2VkKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNlbnRlclRvcCA9IHN0YXRlLmJvYXJkU2l6ZSAvIDIgLSAxO1xuICBjb25zdCBjZW50ZXJCb3R0b20gPSBzdGF0ZS5ib2FyZFNpemUgLyAyO1xuICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyBwb3NpdGlvbi5yb3cgPD0gY2VudGVyVG9wIDogcG9zaXRpb24ucm93ID49IGNlbnRlckJvdHRvbTtcbn1cblxuZnVuY3Rpb24gaXNTcXVhcmVWdWxuZXJhYmxlQWZ0ZXJNb3ZlKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCBtb3ZlOiBDaGVzc2ltYWxzTW92ZSk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IGFmdGVyTW92ZSA9IGFwcGx5Q2hlc3NpbWFsc01vdmUoc3RhdGUsIG1vdmUpO1xuICAgIGlmIChhZnRlck1vdmUuc3RhdHVzID09PSAnZmluaXNoZWQnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKGFmdGVyTW92ZSkuc29tZSgoZW5lbXlNb3ZlKSA9PlxuICAgICAgc2FtZVBvc2l0aW9uKGVuZW15TW92ZS50bywgbW92ZS50bykgJiYgISFlbmVteU1vdmUuY2FwdHVyZXNQaWVjZUlkLFxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQb3dlckRpcmVjdGlvbnMoYW5pbWFsOiBDaGVzc2ltYWxzQW5pbWFsVHlwZSk6IENoZXNzaW1hbHNQb3NpdGlvbltdIHtcbiAgaWYgKGFuaW1hbCA9PT0gJ2VhZ2xlJykge1xuICAgIHJldHVybiBbXG4gICAgICB7IHJvdzogLTEsIGNvbDogLTEgfSxcbiAgICAgIHsgcm93OiAtMSwgY29sOiAxIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IDEsIGNvbDogMSB9LFxuICAgIF07XG4gIH1cbiAgaWYgKGFuaW1hbCA9PT0gJ2J1bGwnKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgcm93OiAtMSwgY29sOiAwIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAwIH0sXG4gICAgICB7IHJvdzogMCwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IDAsIGNvbDogMSB9LFxuICAgIF07XG4gIH1cbiAgcmV0dXJuIFtcbiAgICB7IHJvdzogLTEsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogLTEsIGNvbDogMCB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAxIH0sXG4gICAgeyByb3c6IDAsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMCwgY29sOiAxIH0sXG4gICAgeyByb3c6IDEsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMSwgY29sOiAwIH0sXG4gICAgeyByb3c6IDEsIGNvbDogMSB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiByZWZyZXNoQ2hlc3NpbWFsc1Bvd2VyVW5sb2NrcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHBsYXllcnM6IHtcbiAgICAgIHdoaXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLnBsYXllcnMud2hpdGUsXG4gICAgICAgIHBvd2VyVW5sb2NrZWQ6XG4gICAgICAgICAgc3RhdGUucGxheWVycy53aGl0ZS5wb3dlclVubG9ja2VkIHx8XG4gICAgICAgICAgaGFzQ3Jvc3NlZENlbnRlcihzdGF0ZSwgJ3doaXRlJykgfHxcbiAgICAgICAgICBoYXNFbmVteUVudGVyZWRIb21lKHN0YXRlLCAnd2hpdGUnKSxcbiAgICAgIH0sXG4gICAgICBibGFjazoge1xuICAgICAgICAuLi5zdGF0ZS5wbGF5ZXJzLmJsYWNrLFxuICAgICAgICBwb3dlclVubG9ja2VkOlxuICAgICAgICAgIHN0YXRlLnBsYXllcnMuYmxhY2sucG93ZXJVbmxvY2tlZCB8fFxuICAgICAgICAgIGhhc0Nyb3NzZWRDZW50ZXIoc3RhdGUsICdibGFjaycpIHx8XG4gICAgICAgICAgaGFzRW5lbXlFbnRlcmVkSG9tZShzdGF0ZSwgJ2JsYWNrJyksXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc0Nyb3NzZWRDZW50ZXIoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IpOiBib29sZWFuIHtcbiAgY29uc3QgY2VudGVyVG9wID0gc3RhdGUuYm9hcmRTaXplIC8gMiAtIDE7XG4gIGNvbnN0IGNlbnRlckJvdHRvbSA9IHN0YXRlLmJvYXJkU2l6ZSAvIDI7XG4gIHJldHVybiBhY3RpdmVQaWVjZXMoc3RhdGUpLnNvbWUoKHBpZWNlKSA9PiB7XG4gICAgaWYgKHBpZWNlLmNvbG9yICE9PSBjb2xvciB8fCBwaWVjZS5jYXB0dXJlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/IHBpZWNlLnBvc2l0aW9uLnJvdyA8PSBjZW50ZXJUb3AgOiBwaWVjZS5wb3NpdGlvbi5yb3cgPj0gY2VudGVyQm90dG9tO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFzRW5lbXlFbnRlcmVkSG9tZShzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcik6IGJvb2xlYW4ge1xuICBjb25zdCBjZW50ZXJUb3AgPSBzdGF0ZS5ib2FyZFNpemUgLyAyIC0gMTtcbiAgY29uc3QgY2VudGVyQm90dG9tID0gc3RhdGUuYm9hcmRTaXplIC8gMjtcbiAgY29uc3QgZW5lbXkgPSBvdGhlckNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGFjdGl2ZVBpZWNlcyhzdGF0ZSkuc29tZSgocGllY2UpID0+IHtcbiAgICBpZiAocGllY2UuY29sb3IgIT09IGVuZW15IHx8IHBpZWNlLmNhcHR1cmVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gcGllY2UucG9zaXRpb24ucm93ID49IGNlbnRlckJvdHRvbSA6IHBpZWNlLnBvc2l0aW9uLnJvdyA8PSBjZW50ZXJUb3A7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1Byb21vdGlvblJvdyhcbiAgYm9hcmRTaXplOiBDaGVzc2ltYWxzQm9hcmRTaXplLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/IHBvc2l0aW9uLnJvdyA9PT0gMCA6IHBvc2l0aW9uLnJvdyA9PT0gYm9hcmRTaXplIC0gMTtcbn1cblxuZnVuY3Rpb24gaXNJbnNpZGVCb2FyZChib2FyZFNpemU6IENoZXNzaW1hbHNCb2FyZFNpemUsIHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBwb3NpdGlvbi5yb3cgPj0gMCAmJiBwb3NpdGlvbi5yb3cgPCBib2FyZFNpemUgJiYgcG9zaXRpb24uY29sID49IDAgJiYgcG9zaXRpb24uY29sIDwgYm9hcmRTaXplXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNhbWVQb3NpdGlvbihhOiBDaGVzc2ltYWxzUG9zaXRpb24sIGI6IENoZXNzaW1hbHNQb3NpdGlvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gYS5yb3cgPT09IGIucm93ICYmIGEuY29sID09PSBiLmNvbDtcbn1cblxuZnVuY3Rpb24gb3RoZXJDb2xvcihjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yKTogQ2hlc3NpbWFsc1BsYXllckNvbG9yIHtcbiAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gJ2JsYWNrJyA6ICd3aGl0ZSc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvY2FsSWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2NhbC0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDgpfWA7XG59XG4iXX0=
|
|
1175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1lbmdpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21pbmktZ2FtZXMvY2hlc3NpbWFscy1lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0JBLE1BQU0sT0FBTyxHQUEyQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlFLE1BQU0sZ0NBQWdDLEdBQUcsMkNBQTJDLENBQUM7QUFzQnJGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUEyQjtJQUM3RDtRQUNFLEVBQUUsRUFBRSxVQUFVO1FBQ2QsVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLElBQUk7UUFDWixTQUFTLEVBQUUsR0FBRyxnQ0FBZ0MsZUFBZTtRQUM3RCxRQUFRLEVBQUUsdUJBQXVCO1FBQ2pDLGNBQWMsRUFBRSwyQkFBMkI7S0FDNUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxXQUFXO1FBQ2YsVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLEdBQUc7UUFDWCxTQUFTLEVBQUUsR0FBRyxnQ0FBZ0MsZ0JBQWdCO1FBQzlELFFBQVEsRUFBRSx3QkFBd0I7UUFDbEMsY0FBYyxFQUFFLDRCQUE0QjtLQUM3QztJQUNEO1FBQ0UsRUFBRSxFQUFFLFFBQVE7UUFDWixVQUFVLEVBQUUsTUFBTTtRQUNsQixNQUFNLEVBQUUsSUFBSTtRQUNaLFNBQVMsRUFBRSxHQUFHLGdDQUFnQyxhQUFhO1FBQzNELFFBQVEsRUFBRSxxQkFBcUI7UUFDL0IsY0FBYyxFQUFFLHlCQUF5QjtLQUMxQztJQUNEO1FBQ0UsRUFBRSxFQUFFLFFBQVE7UUFDWixVQUFVLEVBQUUsUUFBUTtRQUNwQixNQUFNLEVBQUUsSUFBSTtRQUNaLFNBQVMsRUFBRSxHQUFHLGdDQUFnQyxhQUFhO1FBQzNELFFBQVEsRUFBRSxxQkFBcUI7UUFDL0Is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VSxFQUFFLEdBQUc7UUFDZixNQUFNLEVBQUUsR0FBRztRQUNYLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsR0FBRztLQUNiO0lBQ0QsTUFBTSxFQUFFO1FBQ04sV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLElBQUk7UUFDYixNQUFNLEVBQUUsR0FBRztRQUNYLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxDQUFDO1FBQ1IsVUFBVSxFQUFFLEVBQUU7UUFDZCxNQUFNLEVBQUUsR0FBRztRQUNYLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsSUFBSTtLQUNkO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLENBQUM7UUFDVixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsQ0FBQztRQUNULEtBQUssRUFBRSxJQUFJO1FBQ1gsVUFBVSxFQUFFLEVBQUU7UUFDZCxNQUFNLEVBQUUsSUFBSTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsSUFBSTtLQUNkO0lBQ0QsTUFBTSxFQUFFO1FBQ04sV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLENBQUM7UUFDVixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsVUFBVSxFQUFFLEVBQUU7UUFDZCxNQUFNLEVBQUUsSUFBSTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLEdBQUc7UUFDVCxPQUFPLEVBQUUsSUFBSTtLQUNkO0lBQ0QsVUFBVSxFQUFFO1FBQ1YsV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLElBQUk7UUFDYixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsR0FBRztRQUNYLEtBQUssRUFBRSxJQUFJO1FBQ1gsVUFBVSxFQUFFLEVBQUU7UUFDZCxNQUFNLEVBQUUsSUFBSTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLElBQUk7UUFDYixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLENBQUM7UUFDVCxNQUFNLEVBQUUsQ0FBQztRQUNULEtBQUssRUFBRSxJQUFJO1FBQ1gsVUFBVSxFQUFFLEVBQUU7UUFDZCxNQUFNLEVBQUUsSUFBSTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsSUFBSTtLQUNkO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTyxFQUFFLEdBQUc7UUFDWixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxDQUFDO1FBQ1IsVUFBVSxFQUFFLEVBQUU7UUFDZCxNQUFNLEVBQUUsSUFBSTtRQUNaLFFBQVEsRUFBRSxJQUFJO1FBQ2QsSUFBSSxFQUFFLElBQUk7UUFDVixPQUFPLEVBQUUsSUFBSTtLQUNkO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFLEdBQUc7UUFDaEIsT0FBTyxFQUFFLElBQUk7UUFDYixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO1FBQ1gsTUFBTSxFQUFFLElBQUk7UUFDWixNQUFNLEVBQUUsSUFBSTtR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QUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUM1QyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsS0FBNEI7SUFDOUMsT0FBTyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxhQUFhO0lBQ3BCLE9BQU8sU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGVzc2ltYWxzQW5pbWFsVHlwZSxcbiAgQ2hlc3NpbWFsc0JvdERpZmZpY3VsdHksXG4gIENoZXNzaW1hbHNCb3RQcm9maWxlLFxuICBDaGVzc2ltYWxzQm90UHJvZmlsZUlkLFxuICBDaGVzc2ltYWxzQm9hcmRTaXplLFxuICBDaGVzc2ltYWxzR2FtZU1vZGUsXG4gIENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIENoZXNzaW1hbHNHYW1lU3RhdHVzLFxuICBDaGVzc2ltYWxzTW92ZSxcbiAgQ2hlc3NpbWFsc01vdmVIaXN0b3J5RW50cnksXG4gIENoZXNzaW1hbHNOaWdodG1hcmVNb2RlLFxuICBDaGVzc2ltYWxzT25saW5lU3RhdGUsXG4gIENoZXNzaW1hbHNQaWVjZSxcbiAgQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBDaGVzc2ltYWxzUG9zaXRpb24sXG59IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBBTklNQUxTOiBDaGVzc2ltYWxzQW5pbWFsVHlwZVtdID0gWydlYWdsZScsICdidWxsJywgJ2thbmdhcm9vJywgJ2xpb24nXTtcbmNvbnN0IENIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFID0gJ2Fzc2V0cy9nYW1lcy9jaGVzc2ltYWxzL2NoYWxsZW5nZS1hdmF0YXJzJztcblxuaW50ZXJmYWNlIENoZXNzaW1hbHNCb3RTdHlsZSB7XG4gIGFkdmFuY2VtZW50OiBudW1iZXI7XG4gIGNhcHR1cmU6IG51bWJlcjtcbiAgc2FmZXR5OiBudW1iZXI7XG4gIHBvd2VyOiBudW1iZXI7XG4gIGNlbnRlcjogbnVtYmVyO1xuICB1bmxvY2s6IG51bWJlcjtcbiAgcmVwbHk6IG51bWJlcjtcbiAgcmFuZG9tbmVzczogbnVtYmVyO1xuICBzcHJlYWQ6IG51bWJlcjtcbiAgbW9iaWxpdHk6IG51bWJlcjtcbiAgdHJhcDogbnVtYmVyO1xuICBlbmRnYW1lOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBDaGVzc2ltYWxzQm90T3B0aW9ucyB7XG4gIGNoYWxsZW5nZVJvdW5kPzogbnVtYmVyO1xuICBuaWdodG1hcmVNb2RlPzogQ2hlc3NpbWFsc05pZ2h0bWFyZU1vZGU7XG59XG5cbmV4cG9ydCBjb25zdCBDSEVTU0lNQUxTX0JPVF9QUk9GSUxFUzogQ2hlc3NpbWFsc0JvdFByb2ZpbGVbXSA9IFtcbiAge1xuICAgIGlkOiAnZXhwbG9yZXInLFxuICAgIGRpZmZpY3VsdHk6ICdlYXN5JyxcbiAgICBhdmF0YXI6ICfwn6etJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9leHBsb3Jlci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEV4cGxvcmVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RFeHBsb3JlckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdpbXB1bHNpdmUnLFxuICAgIGRpZmZpY3VsdHk6ICdlYXN5JyxcbiAgICBhdmF0YXI6ICfimqEnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L2ltcHVsc2l2ZS5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEltcHVsc2l2ZScsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90SW1wdWxzaXZlQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3J1bm5lcicsXG4gICAgZGlmZmljdWx0eTogJ2Vhc3knLFxuICAgIGF2YXRhcjogJ/Cfj4EnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L3J1bm5lci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFJ1bm5lcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90UnVubmVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2h1bnRlcicsXG4gICAgZGlmZmljdWx0eTogJ25vcm1hbCcsXG4gICAgYXZhdGFyOiAn8J+OrycsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vaHVudGVyLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90SHVudGVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RIdW50ZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnZ3VhcmRpYW4nLFxuICAgIGRpZmZpY3VsdHk6ICdub3JtYWwnLFxuICAgIGF2YXRhcjogJ/Cfm6HvuI8nLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L2d1YXJkaWFuLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90R3VhcmRpYW4nLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdEd1YXJkaWFuQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2p1bXBlcicsXG4gICAgZGlmZmljdWx0eTogJ25vcm1hbCcsXG4gICAgYXZhdGFyOiAn8J+mmCcsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vanVtcGVyLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90SnVtcGVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RKdW1wZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnc3RyYXRlZ2lzdCcsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ+KZn++4jycsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vc3RyYXRlZ2lzdC5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFN0cmF0ZWdpc3QnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFN0cmF0ZWdpc3RCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAncHJlZGF0b3InLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn6aBJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9wcmVkYXRvci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFByZWRhdG9yJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RQcmVkYXRvckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdzcHJpbnRlcicsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CfmoAnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L3NwcmludGVyLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90U3ByaW50ZXInLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFNwcmludGVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3NlbnRpbmVsJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+PsCcsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vc2VudGluZWwucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RTZW50aW5lbCcsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90U2VudGluZWxCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnb3JhY2xlJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+UricsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vb3JhY2xlLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90T3JhY2xlJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RPcmFjbGVCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnYW1idXNoZXInLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn6qkJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9hbWJ1c2hlci5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEFtYnVzaGVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RBbWJ1c2hlckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdsb2Nrc21pdGgnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn5SQJyxcbiAgICBhdmF0YXJTcmM6IGAke0NIRVNTSU1BTFNfQ0hBTExFTkdFX0FWQVRBUl9CQVNFfS9sb2Nrc21pdGgucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RMb2Nrc21pdGgnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdExvY2tzbWl0aEJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdzdG9ybScsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CfjKnvuI8nLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L3N0b3JtLnBuZ2AsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90U3Rvcm0nLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFN0b3JtQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ21hdHJpYXJjaCcsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CfkZEnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L21hdHJpYXJjaC5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdE1hdHJpYXJjaCcsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90TWF0cmlhcmNoQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2VuZGdhbWUnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfijJsnLFxuICAgIGF2YXRhclNyYzogYCR7Q0hFU1NJTUFMU19DSEFMTEVOR0VfQVZBVEFSX0JBU0V9L2VuZGdhbWUucG5nYCxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RFbmRnYW1lJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RFbmRnYW1lQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ21hZ251cycsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ+KZnycsXG4gICAgYXZhdGFyU3JjOiBgJHtDSEVTU0lNQUxTX0NIQUxMRU5HRV9BVkFUQVJfQkFTRX0vbmlnaHRtYXJlLW1hZ251cy5wbmdgLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdE1hZ251cycsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90TWFnbnVzQm9keScsXG4gIH0sXG5dO1xuXG5jb25zdCBCT1RfU1RZTEVTOiBSZWNvcmQ8Q2hlc3NpbWFsc0JvdFByb2ZpbGVJZCwgQ2hlc3NpbWFsc0JvdFN0eWxlPiA9IHtcbiAgZXhwbG9yZXI6IHtcbiAgICBhZHZhbmNlbWVudDogMS4wNSxcbiAgICBjYXB0dXJlOiAwLjgyLFxuICAgIHNhZmV0eTogMC42MixcbiAgICBwb3dlcjogMC44LFxuICAgIGNlbnRlcjogMS4xNSxcbiAgICB1bmxvY2s6IDEuMDUsXG4gICAgcmVwbHk6IDAuNyxcbiAgICByYW5kb21uZXNzOiAyNjAsXG4gICAgc3ByZWFkOiAwLjY4LFxuICAgIG1vYmlsaXR5OiAwLjc1LFxuICAgIHRyYXA6IDAuNSxcbiAgICBlbmRnYW1lOiAwLjU1LFxuICB9LFxuICBpbXB1bHNpdmU6IHtcbiAgICBhZHZhbmNlbWVudDogMC45LFxuICAgIGNhcHR1cmU6IDEuNDUsXG4gICAgc2FmZXR5OiAwLjQ4LFxuICAgIHBvd2VyOiAxLjE1LFxuICAgIGNlbnRlcjogMC44LFxuICAgIHVubG9jazogMC45LFxuICAgIHJlcGx5OiAwLjU1LFxuICAgIHJhbmRvbW5lc3M6IDI5MCxcbiAgICBzcHJlYWQ6IDAuNjIsXG4gICAgbW9iaWxpdHk6IDAuODUsXG4gICAgdHJhcDogMC42MixcbiAgICBlbmRnYW1lOiAwLjUsXG4gIH0sXG4gIHJ1bm5lcjoge1xuICAgIGFkdmFuY2VtZW50OiAxLjU1LFxuICAgIGNhcHR1cmU6IDAuNzgsXG4gICAgc2FmZXR5OiAwLjUsXG4gICAgcG93ZXI6IDAuOTUsXG4gICAgY2VudGVyOiAwLjcsXG4gICAgdW5sb2NrOiAxLjEsXG4gICAgcmVwbHk6IDAuNTUsXG4gICAgcmFuZG9tbmVzczogMjUwLFxuICAgIHNwcmVhZDogMC42LFxuICAgIG1vYmlsaXR5OiAwLjcyLFxuICAgIHRyYXA6IDAuNDUsXG4gICAgZW5kZ2FtZTogMS4xLFxuICB9LFxuICBodW50ZXI6IHtcbiAgICBhZHZhbmNlbWVudDogMC45NSxcbiAgICBjYXB0dXJlOiAxLjQ1LFxuICAgIHNhZmV0eTogMC45LFxuICAgIHBvd2VyOiAxLjA1LFxuICAgIGNlbnRlcjogMC45NSxcbiAgICB1bmxvY2s6IDAuOTUsXG4gICAgcmVwbHk6IDEsXG4gICAgcmFuZG9tbmVzczogOTAsXG4gICAgc3ByZWFkOiAwLjMsXG4gICAgbW9iaWxpdHk6IDAuOTUsXG4gICAgdHJhcDogMC44MixcbiAgICBlbmRnYW1lOiAwLjc2LFxuICB9LFxuICBndWFyZGlhbjoge1xuICAgIGFkdmFuY2VtZW50OiAwLjg4LFxuICAgIGNhcHR1cmU6IDEsXG4gICAgc2FmZXR5OiAxLjQ1LFxuICAgIHBvd2VyOiAwLjg1LFxuICAgIGNlbnRlcjogMS4wNSxcbiAgICB1bmxvY2s6IDEsXG4gICAgcmVwbHk6IDEuMTUsXG4gICAgcmFuZG9tbmVzczogNzAsXG4gICAgc3ByZWFkOiAwLjI2LFxuICAgIG1vYmlsaXR5OiAwLjgyLFxuICAgIHRyYXA6IDAuNzIsXG4gICAgZW5kZ2FtZTogMC43MixcbiAgfSxcbiAganVtcGVyOiB7XG4gICAgYWR2YW5jZW1lbnQ6IDEuMTIsXG4gICAgY2FwdHVyZTogMSxcbiAgICBzYWZldHk6IDAuOTIsXG4gICAgcG93ZXI6IDEuNDIsXG4gICAgY2VudGVyOiAxLjE4LFxuICAgIHVubG9jazogMS4wOCxcbiAgICByZXBseTogMC45NSxcbiAgICByYW5kb21uZXNzOiA5NSxcbiAgICBzcHJlYWQ6IDAuMzIsXG4gICAgbW9iaWxpdHk6IDEuMTUsXG4gICAgdHJhcDogMC45LFxuICAgIGVuZGdhbWU6IDAuODIsXG4gIH0sXG4gIHN0cmF0ZWdpc3Q6IHtcbiAgICBhZHZhbmNlbWVudDogMS4wNSxcbiAgICBjYXB0dXJlOiAxLjA4LFxuICAgIHNhZmV0eTogMS4yMixcbiAgICBwb3dlcjogMS4wOCxcbiAgICBjZW50ZXI6IDEuMTYsXG4gICAgdW5sb2NrOiAxLjEsXG4gICAgcmVwbHk6IDEuMjUsXG4gICAgcmFuZG9tbmVzczogMjIsXG4gICAgc3ByZWFkOiAwLjE0LFxuICAgIG1vYmlsaXR5OiAxLjA4LFxuICAgIHRyYXA6IDEuMDYsXG4gICAgZW5kZ2FtZTogMSxcbiAgfSxcbiAgcHJlZGF0b3I6IHtcbiAgICBhZHZhbmNlbWVudDogMC45OCxcbiAgICBjYXB0dXJlOiAxLjY4LFxuICAgIHNhZmV0eTogMS4wMixcbiAgICBwb3dlcjogMS4zNCxcbiAgICBjZW50ZXI6IDEsXG4gICAgdW5sb2NrOiAxLFxuICAgIHJlcGx5OiAxLjEyLFxuICAgIHJhbmRvbW5lc3M6IDI4LFxuICAgIHNwcmVhZDogMC4xNixcbiAgICBtb2JpbGl0eTogMS4wMixcbiAgICB0cmFwOiAxLjE4LFxuICAgIGVuZGdhbWU6IDAuODIsXG4gIH0sXG4gIHNwcmludGVyOiB7XG4gICAgYWR2YW5jZW1lbnQ6IDEuNzIsXG4gICAgY2FwdHVyZTogMC45LFxuICAgIHNhZmV0eTogMC45NSxcbiAgICBwb3dlcjogMS4wOCxcbiAgICBjZW50ZXI6IDAuODYsXG4gICAgdW5sb2NrOiAxLjE4LFxuICAgIHJlcGx5OiAxLFxuICAgIHJhbmRvbW5lc3M6IDI2LFxuICAgIHNwcmVhZDogMC4xNSxcbiAgICBtb2JpbGl0eTogMC45NSxcbiAgICB0cmFwOiAwLjc4LFxuICAgIGVuZGdhbWU6IDEuNDIsXG4gIH0sXG4gIHNlbnRpbmVsOiB7XG4gICAgYWR2YW5jZW1lbnQ6IDAuOSxcbiAgICBjYXB0dXJlOiAxLjEyLFxuICAgIHNhZmV0eTogMS43MixcbiAgICBwb3dlcjogMC45NSxcbiAgICBjZW50ZXI6IDEuMjgsXG4gICAgdW5sb2NrOiAxLjA1LFxuICAgIHJlcGx5OiAxLjM4LFxuICAgIHJhbmRvbW5lc3M6IDE4LFxuICAgIHNwcmVhZDogMC4xMixcbiAgICBtb2JpbGl0eTogMC44NixcbiAgICB0cmFwOiAxLjA0LFxuICAgIGVuZGdhbWU6IDAuODQsXG4gIH0sXG4gIG9yYWNsZToge1xuICAgIGFkdmFuY2VtZW50OiAxLFxuICAgIGNhcHR1cmU6IDEuMTIsXG4gICAgc2FmZXR5OiAxLjQyLFxuICAgIHBvd2VyOiAxLjEsXG4gICAgY2VudGVyOiAxLjE4LFxuICAgIHVubG9jazogMS4wOCxcbiAgICByZXBseTogMS44LFxuICAgIHJhbmRvbW5lc3M6IDgsXG4gICAgc3ByZWFkOiAwLjA4LFxuICAgIG1vYmlsaXR5OiAxLjA2LFxuICAgIHRyYXA6IDEuMjIsXG4gICAgZW5kZ2FtZTogMS4wOCxcbiAgfSxcbiAgYW1idXNoZXI6IHtcbiAgICBhZHZhbmNlbWVudDogMC45LFxuICAgIGNhcHR1cmU6IDEuNDgsXG4gICAgc2FmZXR5OiAxLjA4LFxuICAgIHBvd2VyOiAxLjQ2LFxuICAgIGNlbnRlcjogMS4wNSxcbiAgICB1bmxvY2s6IDEuMDIsXG4gICAgcmVwbHk6IDEuMzIsXG4gICAgcmFuZG9tbmVzczogMTQsXG4gICAgc3ByZWFkOiAwLjEsXG4gICAgbW9iaWxpdHk6IDEuMTIsXG4gICAgdHJhcDogMS43MixcbiAgICBlbmRnYW1lOiAwLjkyLFxuICB9LFxuICBsb2Nrc21pdGg6IHtcbiAgICBhZHZhbmNlbWVudDogMC44OCxcbiAgICBjYXB0dXJlOiAxLjA0LFxuICAgIHNhZmV0eTogMS41NSxcbiAgICBwb3dlcjogMS4wMixcbiAgICBjZW50ZXI6IDEuNDgsXG4gICAgdW5sb2NrOiAxLjEyLFxuICAgIHJlcGx5OiAxLjUyLFxuICAgIHJhbmRvbW5lc3M6IDEyLFxuICAgIHNwcmVhZDogMC4xLFxuICAgIG1vYmlsaXR5OiAxLjU4LFxuICAgIHRyYXA6IDEuMjQsXG4gICAgZW5kZ2FtZTogMC44NixcbiAgfSxcbiAgc3Rvcm06IHtcbiAgICBhZHZhbmNlbWVudDogMS4xOCxcbiAgICBjYXB0dXJlOiAxLjM4LFxuICAgIHNhZmV0eTogMC45OCxcbiAgICBwb3dlcjogMS42MixcbiAgICBjZW50ZXI6IDEuMDgsXG4gICAgdW5sb2NrOiAxLjE4LFxuICAgIHJlcGx5OiAxLjIyLFxuICAgIHJhbmRvbW5lc3M6IDE4LFxuICAgIHNwcmVhZDogMC4xMyxcbiAgICBtb2JpbGl0eTogMS4zNixcbiAgICB0cmFwOiAxLjI4LFxuICAgIGVuZGdhbWU6IDEuMDIsXG4gIH0sXG4gIG1hdHJpYXJjaDoge1xuICAgIGFkdmFuY2VtZW50OiAwLjk2LFxuICAgIGNhcHR1cmU6IDEuMTgsXG4gICAgc2FmZXR5OiAxLjY0LFxuICAgIHBvd2VyOiAxLjE4LFxuICAgIGNlbnRlcjogMS4yMixcbiAgICB1bmxvY2s6IDEuMDgsXG4gICAgcmVwbHk6IDEuNjYsXG4gICAgcmFuZG9tbmVzczogMTAsXG4gICAgc3ByZWFkOiAwLjA4LFxuICAgIG1vYmlsaXR5OiAxLjAyLFxuICAgIHRyYXA6IDEuMzYsXG4gICAgZW5kZ2FtZTogMSxcbiAgfSxcbiAgZW5kZ2FtZToge1xuICAgIGFkdmFuY2VtZW50OiAxLjQ2LFxuICAgIGNhcHR1cmU6IDEsXG4gICAgc2FmZXR5OiAxLjI4LFxuICAgIHBvd2VyOiAxLjA0LFxuICAgIGNlbnRlcjogMC45NCxcbiAgICB1bmxvY2s6IDEuMDgsXG4gICAgcmVwbHk6IDEuNDQsXG4gICAgcmFuZG9tbmVzczogMTAsXG4gICAgc3ByZWFkOiAwLjA5LFxuICAgIG1vYmlsaXR5OiAwLjk4LFxuICAgIHRyYXA6IDEuMDIsXG4gICAgZW5kZ2FtZTogMS44NixcbiAgfSxcbiAgbWFnbnVzOiB7XG4gICAgYWR2YW5jZW1lbnQ6IDEuMDQsXG4gICAgY2FwdHVyZTogMS4yMixcbiAgICBzYWZldHk6IDEuOSxcbiAgICBwb3dlcjogMC45LFxuICAgIGNlbnRlcjogMS40MixcbiAgICB1bmxvY2s6IDEuMDgsXG4gICAgcmVwbHk6IDIuMDgsXG4gICAgcmFuZG9tbmVzczogMyxcbiAgICBzcHJlYWQ6IDAuMDQsXG4gICAgbW9iaWxpdHk6IDEuMDgsXG4gICAgdHJhcDogMS40MixcbiAgICBlbmRnYW1lOiAxLjg2LFxuICB9LFxufTtcblxuY29uc3QgREVGQVVMVF9CT1RfUFJPRklMRV9CWV9ESUZGSUNVTFRZOiBSZWNvcmQ8Q2hlc3NpbWFsc0JvdERpZmZpY3VsdHksIENoZXNzaW1hbHNCb3RQcm9maWxlSWQ+ID0ge1xuICBlYXN5OiAnZXhwbG9yZXInLFxuICBub3JtYWw6ICdodW50ZXInLFxuICBoYXJkOiAnc3RyYXRlZ2lzdCcsXG4gIG1hc3RlcjogJ21hZ251cycsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUNoZXNzaW1hbHNHYW1lT3B0aW9ucyB7XG4gIGlkPzogc3RyaW5nO1xuICBtb2RlPzogQ2hlc3NpbWFsc0dhbWVNb2RlO1xuICBzdGF0dXM/OiBDaGVzc2ltYWxzR2FtZVN0YXR1cztcbiAgb25saW5lPzogQ2hlc3NpbWFsc09ubGluZVN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hlc3NpbWFsc0dhbWUoXG4gIGJvYXJkU2l6ZTogQ2hlc3NpbWFsc0JvYXJkU2l6ZSA9IDYsXG4gIG9wdGlvbnM6IENyZWF0ZUNoZXNzaW1hbHNHYW1lT3B0aW9ucyA9IHt9XG4pOiBDaGVzc2ltYWxzR2FtZVN0YXRlIHtcbiAgY29uc3QgcGllY2VzOiBDaGVzc2ltYWxzUGllY2VbXSA9IFtdO1xuICBjb25zdCB3aGl0ZVJvdyA9IGJvYXJkU2l6ZSAtIDI7XG4gIGNvbnN0IGJsYWNrUm93ID0gMTtcblxuICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBib2FyZFNpemU7IGNvbCArPSAxKSB7XG4gICAgcGllY2VzLnB1c2goe1xuICAgICAgaWQ6IGBXJHtjb2wgKyAxfWAsXG4gICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgIHBvc2l0aW9uOiB7IHJvdzogd2hpdGVSb3csIGNvbCB9LFxuICAgICAgY2FwdHVyZWQ6IGZhbHNlLFxuICAgIH0pO1xuICAgIHBpZWNlcy5wdXNoKHtcbiAgICAgIGlkOiBgQiR7Y29sICsgMX1gLFxuICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgICBwb3NpdGlvbjogeyByb3c6IGJsYWNrUm93LCBjb2wgfSxcbiAgICAgIGNhcHR1cmVkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlID0gcmVmcmVzaENoZXNzaW1hbHNQb3dlclVubG9ja3Moe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IGNyZWF0ZUxvY2FsSWQoKSxcbiAgICBtb2RlOiBvcHRpb25zLm1vZGUgPz8gJ2xvY2FsJyxcbiAgICBib2FyZFNpemUsXG4gICAgc3RhdHVzOiBvcHRpb25zLnN0YXR1cyA/PyAnaW5fcHJvZ3Jlc3MnLFxuICAgIGN1cnJlbnRUdXJuOiAnd2hpdGUnLFxuICAgIHBpZWNlcyxcbiAgICBwbGF5ZXJzOiB7XG4gICAgICB3aGl0ZTogeyBjb2xvcjogJ3doaXRlJywgcG93ZXJVbmxvY2tlZDogZmFsc2UsIGNhcmRzOiBjcmVhdGVDYXJkcygpIH0sXG4gICAgICBibGFjazogeyBjb2xvcjogJ2JsYWNrJywgcG93ZXJVbmxvY2tlZDogZmFsc2UsIGNhcmRzOiBjcmVhdGVDYXJkcygpIH0sXG4gICAgfSxcbiAgICBtb3ZlQ291bnQ6IDAsXG4gICAgb25saW5lOiBvcHRpb25zLm9ubGluZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtb3ZlSGlzdG9yeTogW2NyZWF0ZU1vdmVIaXN0b3J5RW50cnkoc3RhdGUpXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoZXNzaW1hbHNQaWVjZUF0KFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgcG9zaXRpb246IENoZXNzaW1hbHNQb3NpdGlvblxuKTogQ2hlc3NpbWFsc1BpZWNlIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZChcbiAgICBwaWVjZSA9PlxuICAgICAgIXBpZWNlLmNhcHR1cmVkICYmIHBpZWNlLnBvc2l0aW9uLnJvdyA9PT0gcG9zaXRpb24ucm93ICYmIHBpZWNlLnBvc2l0aW9uLmNvbCA9PT0gcG9zaXRpb24uY29sXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGVzc2ltYWxzTGVnYWxNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIHBpZWNlSWQ6IHN0cmluZyxcbiAgYW5pbWFsPzogQ2hlc3NpbWFsc0FuaW1hbFR5cGVcbik6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBpZiAoc3RhdGUuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnKSByZXR1cm4gW107XG5cbiAgY29uc3QgcGllY2UgPSBhY3RpdmVQaWVjZXMoc3RhdGUpLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBwaWVjZUlkICYmICFpdGVtLmNhcHR1cmVkKTtcbiAgaWYgKCFwaWVjZSB8fCBwaWVjZS5jb2xvciAhPT0gc3RhdGUuY3VycmVudFR1cm4pIHJldHVybiBbXTtcblxuICBpZiAoYW5pbWFsKSB7XG4gICAgY29uc3QgcGxheWVyID0gc3RhdGUucGxheWVyc1twaWVjZS5jb2xvcl07XG4gICAgaWYgKCFwbGF5ZXIucG93ZXJVbmxvY2tlZCB8fCAhaGFzUG93ZXJDYXJkVXNlKHBsYXllci5jYXJkc1thbmltYWxdKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBnZXRQb3dlck1vdmVzKHN0YXRlLCBwaWVjZSwgYW5pbWFsKTtcbiAgfVxuXG4gIHJldHVybiBnZXRCYXNpY01vdmVzKHN0YXRlLCBwaWVjZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IgPSBzdGF0ZS5jdXJyZW50VHVyblxuKTogQ2hlc3NpbWFsc01vdmVbXSB7XG4gIGlmIChzdGF0ZS5zdGF0dXMgIT09ICdpbl9wcm9ncmVzcycpIHJldHVybiBbXTtcblxuICBjb25zdCB0dXJuU3RhdGUgPSBjb2xvciA9PT0gc3RhdGUuY3VycmVudFR1cm4gPyBzdGF0ZSA6IHsgLi4uc3RhdGUsIGN1cnJlbnRUdXJuOiBjb2xvciB9O1xuICBjb25zdCBwbGF5ZXIgPSB0dXJuU3RhdGUucGxheWVyc1tjb2xvcl07XG4gIGNvbnN0IG1vdmVzOiBDaGVzc2ltYWxzTW92ZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBhY3RpdmVQaWVjZXModHVyblN0YXRlKSkge1xuICAgIGlmIChwaWVjZS5jYXB0dXJlZCB8fCBwaWVjZS5jb2xvciAhPT0gY29sb3IpIGNvbnRpbnVlO1xuXG4gICAgbW92ZXMucHVzaCguLi5nZXRDaGVzc2ltYWxzTGVnYWxNb3Zlcyh0dXJuU3RhdGUsIHBpZWNlLmlkKSk7XG4gICAgaWYgKCFwbGF5ZXIucG93ZXJVbmxvY2tlZCkgY29udGludWU7XG5cbiAgICBmb3IgKGNvbnN0IGFuaW1hbCBvZiBBTklNQUxTKSB7XG4gICAgICBpZiAoIWhhc1Bvd2VyQ2FyZFVzZShwbGF5ZXIuY2FyZHNbYW5pbWFsXSkpIGNvbnRpbnVlO1xuICAgICAgbW92ZXMucHVzaCguLi5nZXRDaGVzc2ltYWxzTGVnYWxNb3Zlcyh0dXJuU3RhdGUsIHBpZWNlLmlkLCBhbmltYWwpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW92ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaG9vc2VDaGVzc2ltYWxzQm90TW92ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGRpZmZpY3VsdHk6IENoZXNzaW1hbHNCb3REaWZmaWN1bHR5ID0gJ25vcm1hbCcsXG4gIHByb2ZpbGVJZDogQ2hlc3NpbWFsc0JvdFByb2ZpbGVJZCA9IERFRkFVTFRfQk9UX1BST0ZJTEVfQllfRElGRklDVUxUWVtkaWZmaWN1bHR5XSxcbiAgb3B0aW9uczogQ2hlc3NpbWFsc0JvdE9wdGlvbnMgPSB7fVxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBjb25zdCBtb3ZlcyA9IGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKHN0YXRlKTtcbiAgaWYgKG1vdmVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgYmFzZVN0eWxlID1cbiAgICBCT1RfU1RZTEVTW3Byb2ZpbGVJZF0gPz8gQk9UX1NUWUxFU1tERUZBVUxUX0JPVF9QUk9GSUxFX0JZX0RJRkZJQ1VMVFlbZGlmZmljdWx0eV1dO1xuICBjb25zdCBjaGFsbGVuZ2VQcmVzc3VyZSA9IGdldENoYWxsZW5nZVByZXNzdXJlKG9wdGlvbnMuY2hhbGxlbmdlUm91bmQpO1xuICBjb25zdCBzdHlsZSA9IHR1bmVCb3RTdHlsZShiYXNlU3R5bGUsIGRpZmZpY3VsdHksIGNoYWxsZW5nZVByZXNzdXJlLCBvcHRpb25zLm5pZ2h0bWFyZU1vZGUpO1xuXG4gIGNvbnN0IHF1aWNrU2NvcmVkID0gbW92ZXNcbiAgICAubWFwKG1vdmUgPT4gKHtcbiAgICAgIG1vdmUsXG4gICAgICBzY29yZTogc2NvcmVCb3RNb3ZlKFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgbW92ZSxcbiAgICAgICAgZGlmZmljdWx0eSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIGNoYWxsZW5nZVByZXNzdXJlLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgb3B0aW9ucy5uaWdodG1hcmVNb2RlXG4gICAgICApLFxuICAgIH0pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gIGNvbnN0IGxvb2thaGVhZExpbWl0ID1cbiAgICBvcHRpb25zLm5pZ2h0bWFyZU1vZGUgPT09ICdtYWdudXMnIHx8IGRpZmZpY3VsdHkgPT09ICdtYXN0ZXInXG4gICAgICA/IDQ4XG4gICAgICA6IGRpZmZpY3VsdHkgPT09ICdoYXJkJ1xuICAgICAgICA/IDMyXG4gICAgICAgIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCdcbiAgICAgICAgICA/IDI0XG4gICAgICAgICAgOiAwO1xuICBjb25zdCBzY29yZWQgPSBxdWlja1Njb3JlZFxuICAgIC5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoe1xuICAgICAgbW92ZTogaXRlbS5tb3ZlLFxuICAgICAgc2NvcmU6XG4gICAgICAgIGluZGV4IDwgbG9va2FoZWFkTGltaXRcbiAgICAgICAgICA/IHNjb3JlQm90TW92ZVdpdGhMb29rYWhlYWQoXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICBpdGVtLm1vdmUsXG4gICAgICAgICAgICAgIGRpZmZpY3VsdHksXG4gICAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgICBjaGFsbGVuZ2VQcmVzc3VyZSxcbiAgICAgICAgICAgICAgb3B0aW9ucy5uaWdodG1hcmVNb2RlXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBpdGVtLnNjb3JlLFxuICAgIH0pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG5cbiAgaWYgKGRpZmZpY3VsdHkgPT09ICdlYXN5Jykge1xuICAgIGNvbnN0IHBsYXlhYmxlID0gc2NvcmVkLmZpbHRlcihpdGVtID0+IGl0ZW0uc2NvcmUgPiAtMzAwMCk7XG4gICAgcmV0dXJuIHBpY2tOb2lzeUJvdE1vdmUocGxheWFibGUubGVuZ3RoID8gcGxheWFibGUgOiBzY29yZWQsIDAuNTUpO1xuICB9XG5cbiAgaWYgKGRpZmZpY3VsdHkgPT09ICdub3JtYWwnKSB7XG4gICAgcmV0dXJuIHNjb3JlZFswXT8ubW92ZTtcbiAgfVxuXG4gIGNvbnN0IHdpbm5pbmdNb3ZlID0gc2NvcmVkLmZpbmQoaXRlbSA9PiBpdGVtLnNjb3JlID49IDEwMDAwKTtcbiAgaWYgKHdpbm5pbmdNb3ZlKSByZXR1cm4gd2lubmluZ01vdmUubW92ZTtcblxuICBjb25zdCBvcHBvbmVudFdpbm5pbmdUYXJnZXRzID0gbmV3IFNldChcbiAgICBnZXRJbW1lZGlhdGVXaW5uaW5nTW92ZXMoc3RhdGUsIG90aGVyQ29sb3Ioc3RhdGUuY3VycmVudFR1cm4pKS5tYXAobW92ZSA9PiBwb3NpdGlvbktleShtb3ZlLnRvKSlcbiAgKTtcbiAgaWYgKG9wcG9uZW50V2lubmluZ1RhcmdldHMuc2l6ZSA+IDApIHtcbiAgICBjb25zdCBibG9ja2luZ01vdmUgPSBzY29yZWQuZmluZChcbiAgICAgIGl0ZW0gPT4gaXRlbS5tb3ZlLmNhcHR1cmVzUGllY2VJZCB8fCBvcHBvbmVudFdpbm5pbmdUYXJnZXRzLmhhcyhwb3NpdGlvbktleShpdGVtLm1vdmUudG8pKVxuICAgICk7XG4gICAgaWYgKGJsb2NraW5nTW92ZSkgcmV0dXJuIGJsb2NraW5nTW92ZS5tb3ZlO1xuICB9XG5cbiAgY29uc3QgY2hhbGxlbmdlQ2FwdHVyZSA9IGNob29zZUNoYWxsZW5nZUJhc2ljQ2FwdHVyZShzY29yZWQsIGNoYWxsZW5nZVByZXNzdXJlKTtcbiAgaWYgKGNoYWxsZW5nZUNhcHR1cmUpIHJldHVybiBjaGFsbGVuZ2VDYXB0dXJlO1xuXG4gIGNvbnN0IG5pZ2h0bWFyZUNhcHR1cmUgPSBjaG9vc2VOaWdodG1hcmVDYXB0dXJlKHNjb3JlZCwgb3B0aW9ucy5uaWdodG1hcmVNb2RlKTtcbiAgaWYgKG5pZ2h0bWFyZUNhcHR1cmUpIHJldHVybiBuaWdodG1hcmVDYXB0dXJlO1xuXG4gIGNvbnN0IGNvbnNlcnZhdGl2ZUNhcHR1cmUgPSBjaG9vc2VDb25zZXJ2YXRpdmVIYXJkQ2FwdHVyZShzdGF0ZSwgc2NvcmVkKTtcbiAgaWYgKGNvbnNlcnZhdGl2ZUNhcHR1cmUpIHJldHVybiBjb25zZXJ2YXRpdmVDYXB0dXJlO1xuXG4gIHJldHVybiBzY29yZWRbMF0/Lm1vdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUNoZXNzaW1hbHNNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY2FuZGlkYXRlOiBDaGVzc2ltYWxzTW92ZVxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IGxlZ2FsTW92ZSA9IGdldENoZXNzaW1hbHNMZWdhbE1vdmVzKHN0YXRlLCBjYW5kaWRhdGUucGllY2VJZCwgY2FuZGlkYXRlLmFuaW1hbCkuZmluZChcbiAgICBtb3ZlID0+IHNhbWVQb3NpdGlvbihtb3ZlLmZyb20sIGNhbmRpZGF0ZS5mcm9tKSAmJiBzYW1lUG9zaXRpb24obW92ZS50bywgY2FuZGlkYXRlLnRvKVxuICApO1xuXG4gIGlmICghbGVnYWxNb3ZlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0lMTEVHQUxfTU9WRScpO1xuICB9XG5cbiAgY29uc3QgbW92ZWRQaWVjZSA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZChwaWVjZSA9PiBwaWVjZS5pZCA9PT0gbGVnYWxNb3ZlLnBpZWNlSWQpO1xuICBpZiAoIW1vdmVkUGllY2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfUElFQ0VfTk9UX0ZPVU5EJyk7XG4gIH1cblxuICBjb25zdCBwaWVjZXMgPSBhY3RpdmVQaWVjZXMoc3RhdGUpLm1hcChwaWVjZSA9PiB7XG4gICAgaWYgKHBpZWNlLmlkID09PSBsZWdhbE1vdmUucGllY2VJZCkge1xuICAgICAgcmV0dXJuIHsgLi4ucGllY2UsIHBvc2l0aW9uOiB7IC4uLmxlZ2FsTW92ZS50byB9IH07XG4gICAgfVxuICAgIGlmIChwaWVjZS5pZCA9PT0gbGVnYWxNb3ZlLmNhcHR1cmVzUGllY2VJZCkge1xuICAgICAgcmV0dXJuIHsgLi4ucGllY2UsIGNhcHR1cmVkOiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBwaWVjZTtcbiAgfSk7XG5cbiAgY29uc3QgcGxheWVycyA9IHtcbiAgICAuLi5zdGF0ZS5wbGF5ZXJzLFxuICAgIFttb3ZlZFBpZWNlLmNvbG9yXToge1xuICAgICAgLi4uc3RhdGUucGxheWVyc1ttb3ZlZFBpZWNlLmNvbG9yXSxcbiAgICAgIGNhcmRzOlxuICAgICAgICBsZWdhbE1vdmUua2luZCA9PT0gJ3Bvd2VyJyAmJiBsZWdhbE1vdmUuYW5pbWFsXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnBsYXllcnNbbW92ZWRQaWVjZS5jb2xvcl0uY2FyZHMsXG4gICAgICAgICAgICAgIFtsZWdhbE1vdmUuYW5pbWFsXTogY29uc3VtZVBvd2VyQ2FyZFVzZShcbiAgICAgICAgICAgICAgICBzdGF0ZS5wbGF5ZXJzW21vdmVkUGllY2UuY29sb3JdLmNhcmRzW2xlZ2FsTW92ZS5hbmltYWxdXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzdGF0ZS5wbGF5ZXJzW21vdmVkUGllY2UuY29sb3JdLmNhcmRzLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gcmVmcmVzaENoZXNzaW1hbHNQb3dlclVubG9ja3Moe1xuICAgIC4uLnN0YXRlLFxuICAgIHBpZWNlcyxcbiAgICBwbGF5ZXJzLFxuICAgIGN1cnJlbnRUdXJuOiBvdGhlckNvbG9yKG1vdmVkUGllY2UuY29sb3IpLFxuICAgIG1vdmVDb3VudDogc3RhdGUubW92ZUNvdW50ICsgMSxcbiAgICBsYXN0TW92ZTogbGVnYWxNb3ZlLFxuICB9KTtcblxuICBjb25zdCBwcm9tb3RlZCA9IGlzUHJvbW90aW9uUm93KG5leHRTdGF0ZS5ib2FyZFNpemUsIG1vdmVkUGllY2UuY29sb3IsIGxlZ2FsTW92ZS50byk7XG4gIGNvbnN0IGVuZW15UGllY2VzID0gYWN0aXZlUGllY2VzKG5leHRTdGF0ZSkuZmlsdGVyKFxuICAgIHBpZWNlID0+IHBpZWNlLmNvbG9yICE9PSBtb3ZlZFBpZWNlLmNvbG9yICYmICFwaWVjZS5jYXB0dXJlZFxuICApO1xuICBjb25zdCBlbmVteUhhc0xlZ2FsTW92ZXMgPVxuICAgIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKG5leHRTdGF0ZSwgbmV4dFN0YXRlLmN1cnJlbnRUdXJuKS5sZW5ndGggPiAwO1xuXG4gIGNvbnN0IHJlc29sdmVkU3RhdGUgPVxuICAgIHByb21vdGVkIHx8IGVuZW15UGllY2VzLmxlbmd0aCA9PT0gMCB8fCAhZW5lbXlIYXNMZWdhbE1vdmVzXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5uZXh0U3RhdGUsXG4gICAgICAgICAgc3RhdHVzOiAnZmluaXNoZWQnIGFzIGNvbnN0LFxuICAgICAgICAgIHdpbm5lcjogbW92ZWRQaWVjZS5jb2xvcixcbiAgICAgICAgICB3aW5uZXJSZWFzb246IHByb21vdGVkXG4gICAgICAgICAgICA/ICgncHJvbW90aW9uJyBhcyBjb25zdClcbiAgICAgICAgICAgIDogZW5lbXlQaWVjZXMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgID8gKCdlbGltaW5hdGlvbicgYXMgY29uc3QpXG4gICAgICAgICAgICAgIDogKCdibG9ja2VkJyBhcyBjb25zdCksXG4gICAgICAgIH1cbiAgICAgIDogbmV4dFN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4ucmVzb2x2ZWRTdGF0ZSxcbiAgICBtb3ZlSGlzdG9yeTogWy4uLmVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlKSwgY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShyZXNvbHZlZFN0YXRlLCBsZWdhbE1vdmUpXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNoZXNzaW1hbHNSZXZpZXdTdGF0ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGVudHJ5OiBDaGVzc2ltYWxzTW92ZUhpc3RvcnlFbnRyeVxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IGJhc2VTdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgZGVsZXRlIGJhc2VTdGF0ZS5sYXN0TW92ZTtcbiAgZGVsZXRlIGJhc2VTdGF0ZS53aW5uZXI7XG4gIGRlbGV0ZSBiYXNlU3RhdGUud2lubmVyUmVhc29uO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VTdGF0ZSxcbiAgICBzdGF0dXM6IGVudHJ5LnN0YXR1cyxcbiAgICBjdXJyZW50VHVybjogZW50cnkuY3VycmVudFR1cm4sXG4gICAgcGllY2VzOiBjbG9uZVBpZWNlcyhlbnRyeS5waWVjZXMpLFxuICAgIG1vdmVDb3VudDogZW50cnkubW92ZU51bWJlcixcbiAgICAuLi4oZW50cnkud2lubmVyID8geyB3aW5uZXI6IGVudHJ5Lndpbm5lciB9IDoge30pLFxuICAgIC4uLihlbnRyeS53aW5uZXJSZWFzb24gPyB7IHdpbm5lclJlYXNvbjogZW50cnkud2lubmVyUmVhc29uIH0gOiB7fSksXG4gICAgLi4uKGVudHJ5Lm1vdmUgPyB7IGxhc3RNb3ZlOiBzYW5pdGl6ZU1vdmUoZW50cnkubW92ZSkgfSA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU/OiBDaGVzc2ltYWxzTW92ZVxuKTogQ2hlc3NpbWFsc01vdmVIaXN0b3J5RW50cnkge1xuICByZXR1cm4ge1xuICAgIG1vdmVOdW1iZXI6IHN0YXRlLm1vdmVDb3VudCxcbiAgICBwaWVjZXM6IGNsb25lUGllY2VzKHN0YXRlLnBpZWNlcyksXG4gICAgY3VycmVudFR1cm46IHN0YXRlLmN1cnJlbnRUdXJuLFxuICAgIHN0YXR1czogc3RhdGUuc3RhdHVzLFxuICAgIC4uLihtb3ZlID8geyBtb3ZlOiBzYW5pdGl6ZU1vdmUobW92ZSkgfSA6IHt9KSxcbiAgICAuLi4oc3RhdGUud2lubmVyID8geyB3aW5uZXI6IHN0YXRlLndpbm5lciB9IDoge30pLFxuICAgIC4uLihzdGF0ZS53aW5uZXJSZWFzb24gPyB7IHdpbm5lclJlYXNvbjogc3RhdGUud2lubmVyUmVhc29uIH0gOiB7fSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlKTogQ2hlc3NpbWFsc01vdmVIaXN0b3J5RW50cnlbXSB7XG4gIGlmIChzdGF0ZS5tb3ZlSGlzdG9yeT8ubGVuZ3RoKSByZXR1cm4gc3RhdGUubW92ZUhpc3RvcnkubWFwKGNsb25lTW92ZUhpc3RvcnlFbnRyeSk7XG4gIHJldHVybiBbY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShzdGF0ZSldO1xufVxuXG5mdW5jdGlvbiBjbG9uZU1vdmVIaXN0b3J5RW50cnkoZW50cnk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5KTogQ2hlc3NpbWFsc01vdmVIaXN0b3J5RW50cnkge1xuICByZXR1cm4ge1xuICAgIC4uLmVudHJ5LFxuICAgIHBpZWNlczogY2xvbmVQaWVjZXMoZW50cnkucGllY2VzKSxcbiAgICAuLi4oZW50cnkubW92ZSA/IHsgbW92ZTogc2FuaXRpemVNb3ZlKGVudHJ5Lm1vdmUpIH0gOiB7fSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsb25lUGllY2VzKHBpZWNlczogQ2hlc3NpbWFsc1BpZWNlW10pOiBDaGVzc2ltYWxzUGllY2VbXSB7XG4gIHJldHVybiBwaWVjZXMubWFwKHBpZWNlID0+ICh7XG4gICAgLi4ucGllY2UsXG4gICAgcG9zaXRpb246IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZU1vdmUobW92ZTogQ2hlc3NpbWFsc01vdmUpOiBDaGVzc2ltYWxzTW92ZSB7XG4gIHJldHVybiB7XG4gICAgcGllY2VJZDogbW92ZS5waWVjZUlkLFxuICAgIGZyb206IHsgLi4ubW92ZS5mcm9tIH0sXG4gICAgdG86IHsgLi4ubW92ZS50byB9LFxuICAgIGtpbmQ6IG1vdmUua2luZCxcbiAgICAuLi4obW92ZS5hbmltYWwgPyB7IGFuaW1hbDogbW92ZS5hbmltYWwgfSA6IHt9KSxcbiAgICAuLi4obW92ZS5jYXB0dXJlc1BpZWNlSWQgPyB7IGNhcHR1cmVzUGllY2VJZDogbW92ZS5jYXB0dXJlc1BpZWNlSWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2lnbkNoZXNzaW1hbHNHYW1lKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvclxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IHJlc2lnbmVkU3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3RhdHVzOiAnZmluaXNoZWQnLFxuICAgIHdpbm5lcjogb3RoZXJDb2xvcihjb2xvciksXG4gICAgd2lubmVyUmVhc29uOiAncmVzaWduYXRpb24nLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4ucmVzaWduZWRTdGF0ZSxcbiAgICBtb3ZlSGlzdG9yeTogWy4uLmVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlKSwgY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShyZXNpZ25lZFN0YXRlKV0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3NpdGlvbktleShwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3Bvc2l0aW9uLnJvd306JHtwb3NpdGlvbi5jb2x9YDtcbn1cblxuZnVuY3Rpb24gaGFzUG93ZXJDYXJkVXNlKGNhcmQ6IHsgdXNlZDogYm9vbGVhbjsgdXNlc1JlbWFpbmluZz86IG51bWJlciB9KTogYm9vbGVhbiB7XG4gIHJldHVybiAoY2FyZC51c2VzUmVtYWluaW5nID8/IChjYXJkLnVzZWQgPyAwIDogMSkpID4gMDtcbn1cblxuZnVuY3Rpb24gY29uc3VtZVBvd2VyQ2FyZFVzZTxUIGV4dGVuZHMgeyB1c2VkOiBib29sZWFuOyB1c2VzUmVtYWluaW5nPzogbnVtYmVyIH0+KGNhcmQ6IFQpOiBUIHtcbiAgY29uc3QgcmVtYWluaW5nID0gTWF0aC5tYXgoMCwgKGNhcmQudXNlc1JlbWFpbmluZyA/PyAoY2FyZC51c2VkID8gMCA6IDEpKSAtIDEpO1xuICByZXR1cm4ge1xuICAgIC4uLmNhcmQsXG4gICAgdXNlZDogcmVtYWluaW5nIDw9IDAsXG4gICAgLi4uKGNhcmQudXNlc1JlbWFpbmluZyA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHVzZXNSZW1haW5pbmc6IHJlbWFpbmluZyB9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FyZHMoKSB7XG4gIHJldHVybiBBTklNQUxTLnJlZHVjZShcbiAgICAoY2FyZHMsIHR5cGUpID0+ICh7XG4gICAgICAuLi5jYXJkcyxcbiAgICAgIFt0eXBlXTogeyB0eXBlLCB1c2VkOiBmYWxzZSB9LFxuICAgIH0pLFxuICAgIHt9IGFzIFJlY29yZDxcbiAgICAgIENoZXNzaW1hbHNBbmltYWxUeXBlLFxuICAgICAgeyB0eXBlOiBDaGVzc2ltYWxzQW5pbWFsVHlwZTsgdXNlZDogYm9vbGVhbjsgdXNlc1JlbWFpbmluZz86IG51bWJlciB9XG4gICAgPlxuICApO1xufVxuXG5mdW5jdGlvbiBhY3RpdmVQaWVjZXMoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUpOiBDaGVzc2ltYWxzUGllY2VbXSB7XG4gIHJldHVybiBzdGF0ZS5waWVjZXMuZmlsdGVyKChwaWVjZSk6IHBpZWNlIGlzIENoZXNzaW1hbHNQaWVjZSA9PiAhIXBpZWNlKTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFzaWNNb3ZlcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgcGllY2U6IENoZXNzaW1hbHNQaWVjZSk6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBjb25zdCBkaXJlY3Rpb24gPSBwaWVjZS5jb2xvciA9PT0gJ3doaXRlJyA/IC0xIDogMTtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcbiAgY29uc3QgZm9yd2FyZCA9IHsgcm93OiBwaWVjZS5wb3NpdGlvbi5yb3cgKyBkaXJlY3Rpb24sIGNvbDogcGllY2UucG9zaXRpb24uY29sIH07XG5cbiAgaWYgKGlzSW5zaWRlQm9hcmQoc3RhdGUuYm9hcmRTaXplLCBmb3J3YXJkKSAmJiAhZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIGZvcndhcmQpKSB7XG4gICAgbW92ZXMucHVzaCh7XG4gICAgICBwaWVjZUlkOiBwaWVjZS5pZCxcbiAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgIHRvOiBmb3J3YXJkLFxuICAgICAga2luZDogJ2Jhc2ljJyxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY29sT2Zmc2V0IG9mIFstMSwgMV0pIHtcbiAgICBjb25zdCB0YXJnZXQgPSB7IHJvdzogcGllY2UucG9zaXRpb24ucm93ICsgZGlyZWN0aW9uLCBjb2w6IHBpZWNlLnBvc2l0aW9uLmNvbCArIGNvbE9mZnNldCB9O1xuICAgIGNvbnN0IHRhcmdldFBpZWNlID0gZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIHRhcmdldCk7XG4gICAgaWYgKFxuICAgICAgaXNJbnNpZGVCb2FyZChzdGF0ZS5ib2FyZFNpemUsIHRhcmdldCkgJiZcbiAgICAgIHRhcmdldFBpZWNlICYmXG4gICAgICB0YXJnZXRQaWVjZS5jb2xvciAhPT0gcGllY2UuY29sb3IgJiZcbiAgICAgICFpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIHBpZWNlLmNvbG9yLCB0YXJnZXQpXG4gICAgKSB7XG4gICAgICBtb3Zlcy5wdXNoKHtcbiAgICAgICAgcGllY2VJZDogcGllY2UuaWQsXG4gICAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgICAgdG86IHRhcmdldCxcbiAgICAgICAga2luZDogJ2Jhc2ljJyxcbiAgICAgICAgY2FwdHVyZXNQaWVjZUlkOiB0YXJnZXRQaWVjZS5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZnVuY3Rpb24gZ2V0UG93ZXJNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIHBpZWNlOiBDaGVzc2ltYWxzUGllY2UsXG4gIGFuaW1hbDogQ2hlc3NpbWFsc0FuaW1hbFR5cGVcbik6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBpZiAoYW5pbWFsID09PSAna2FuZ2Fyb28nKSB7XG4gICAgcmV0dXJuIGdldEthbmdhcm9vTW92ZXMoc3RhdGUsIHBpZWNlKTtcbiAgfVxuXG4gIGNvbnN0IGRpcmVjdGlvbnMgPSBnZXRQb3dlckRpcmVjdGlvbnMoYW5pbWFsKTtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGRpcmVjdGlvbiBvZiBkaXJlY3Rpb25zKSB7XG4gICAgZm9yIChsZXQgZGlzdGFuY2UgPSAxOyBkaXN0YW5jZSA8IHN0YXRlLmJvYXJkU2l6ZTsgZGlzdGFuY2UgKz0gMSkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0ge1xuICAgICAgICByb3c6IHBpZWNlLnBvc2l0aW9uLnJvdyArIGRpcmVjdGlvbi5yb3cgKiBkaXN0YW5jZSxcbiAgICAgICAgY29sOiBwaWVjZS5wb3NpdGlvbi5jb2wgKyBkaXJlY3Rpb24uY29sICogZGlzdGFuY2UsXG4gICAgICB9O1xuICAgICAgaWYgKCFpc0luc2lkZUJvYXJkKHN0YXRlLmJvYXJkU2l6ZSwgdGFyZ2V0KSkgYnJlYWs7XG4gICAgICBpZiAoaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBwaWVjZS5jb2xvciwgdGFyZ2V0KSkgYnJlYWs7XG5cbiAgICAgIGNvbnN0IHRhcmdldFBpZWNlID0gZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIHRhcmdldCk7XG4gICAgICBpZiAodGFyZ2V0UGllY2U/LmNvbG9yID09PSBwaWVjZS5jb2xvcikgYnJlYWs7XG5cbiAgICAgIG1vdmVzLnB1c2goe1xuICAgICAgICBwaWVjZUlkOiBwaWVjZS5pZCxcbiAgICAgICAgZnJvbTogeyAuLi5waWVjZS5wb3NpdGlvbiB9LFxuICAgICAgICB0bzogdGFyZ2V0LFxuICAgICAgICBraW5kOiAncG93ZXInLFxuICAgICAgICBhbmltYWwsXG4gICAgICAgIC4uLih0YXJnZXRQaWVjZSA/IHsgY2FwdHVyZXNQaWVjZUlkOiB0YXJnZXRQaWVjZS5pZCB9IDoge30pLFxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0YXJnZXRQaWVjZSkgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1vdmVzO1xufVxuXG5mdW5jdGlvbiBnZXRLYW5nYXJvb01vdmVzKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCBwaWVjZTogQ2hlc3NpbWFsc1BpZWNlKTogQ2hlc3NpbWFsc01vdmVbXSB7XG4gIGNvbnN0IG1vdmVzOiBDaGVzc2ltYWxzTW92ZVtdID0gW107XG4gIGNvbnN0IGp1bXBzID0gW1xuICAgIHsgcm93OiAtMiwgY29sOiAtMSB9LFxuICAgIHsgcm93OiAtMiwgY29sOiAxIH0sXG4gICAgeyByb3c6IC0xLCBjb2w6IC0yIH0sXG4gICAgeyByb3c6IC0xLCBjb2w6IDIgfSxcbiAgICB7IHJvdzogMSwgY29sOiAtMiB9LFxuICAgIHsgcm93OiAxLCBjb2w6IDIgfSxcbiAgICB7IHJvdzogMiwgY29sOiAtMSB9LFxuICAgIHsgcm93OiAyLCBjb2w6IDEgfSxcbiAgXTtcblxuICBmb3IgKGNvbnN0IGp1bXAgb2YganVtcHMpIHtcbiAgICBjb25zdCB0YXJnZXQgPSB7XG4gICAgICByb3c6IHBpZWNlLnBvc2l0aW9uLnJvdyArIGp1bXAucm93LFxuICAgICAgY29sOiBwaWVjZS5wb3NpdGlvbi5jb2wgKyBqdW1wLmNvbCxcbiAgICB9O1xuICAgIGlmICghaXNJbnNpZGVCb2FyZChzdGF0ZS5ib2FyZFNpemUsIHRhcmdldCkpIGNvbnRpbnVlO1xuICAgIGlmIChpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIHBpZWNlLmNvbG9yLCB0YXJnZXQpKSBjb250aW51ZTtcblxuICAgIGNvbnN0IHRhcmdldFBpZWNlID0gZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIHRhcmdldCk7XG4gICAgaWYgKHRhcmdldFBpZWNlPy5jb2xvciA9PT0gcGllY2UuY29sb3IpIGNvbnRpbnVlO1xuXG4gICAgbW92ZXMucHVzaCh7XG4gICAgICBwaWVjZUlkOiBwaWVjZS5pZCxcbiAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgIHRvOiB0YXJnZXQsXG4gICAgICBraW5kOiAncG93ZXInLFxuICAgICAgYW5pbWFsOiAna2FuZ2Fyb28nLFxuICAgICAgLi4uKHRhcmdldFBpZWNlID8geyBjYXB0dXJlc1BpZWNlSWQ6IHRhcmdldFBpZWNlLmlkIH0gOiB7fSksXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbW92ZXM7XG59XG5cbmZ1bmN0aW9uIHNjb3JlQm90TW92ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU6IENoZXNzaW1hbHNNb3ZlLFxuICBkaWZmaWN1bHR5OiBDaGVzc2ltYWxzQm90RGlmZmljdWx0eSxcbiAgc3R5bGU6IENoZXNzaW1hbHNCb3RTdHlsZSxcbiAgY2hhbGxlbmdlUHJlc3N1cmUgPSAwLFxuICBpbmNsdWRlVGFjdGljYWxQcmVzc3VyZSA9IHRydWUsXG4gIG5pZ2h0bWFyZU1vZGU6IENoZXNzaW1hbHNOaWdodG1hcmVNb2RlID0gJ25vbmUnXG4pOiBudW1iZXIge1xuICBjb25zdCBjb2xvciA9IHN0YXRlLmN1cnJlbnRUdXJuO1xuICBjb25zdCB0YXJnZXRQaWVjZSA9IG1vdmUuY2FwdHVyZXNQaWVjZUlkXG4gICAgPyBhY3RpdmVQaWVjZXMoc3RhdGUpLmZpbmQocGllY2UgPT4gcGllY2UuaWQgPT09IG1vdmUuY2FwdHVyZXNQaWVjZUlkKVxuICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBhZHZhbmNlbWVudCA9IGNvbG9yID09PSAnd2hpdGUnID8gc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUudG8ucm93IDogbW92ZS50by5yb3c7XG4gIGxldCBzY29yZSA9IGFkdmFuY2VtZW50ICogMjQgKiBzdHlsZS5hZHZhbmNlbWVudDtcbiAgY29uc3Qgc3RlcHNUb1Byb21vdGlvbiA9IGNvbG9yID09PSAnd2hpdGUnID8gbW92ZS50by5yb3cgOiBzdGF0ZS5ib2FyZFNpemUgLSAxIC0gbW92ZS50by5yb3c7XG4gIHNjb3JlICs9XG4gICAgTWF0aC5tYXgoMCwgc3RhdGUuYm9hcmRTaXplIC0gMSAtIHN0ZXBzVG9Qcm9tb3Rpb24pICpcbiAgICAxMCAqXG4gICAgY2hhbGxlbmdlUHJlc3N1cmUgKlxuICAgIHN0eWxlLmFkdmFuY2VtZW50O1xuXG4gIGlmIChtb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBjb2xvciwgbW92ZS50bykpIHtcbiAgICBzY29yZSArPSAxMDAwMCArIDI1MDAgKiBjaGFsbGVuZ2VQcmVzc3VyZTtcbiAgfVxuICBpZiAobmlnaHRtYXJlTW9kZSA9PT0gJ2h1bnQnICYmIHRhcmdldFBpZWNlKSB7XG4gICAgc2NvcmUgKz0gKG1vdmUua2luZCA9PT0gJ3Bvd2VyJyA/IDc2MCA6IDYyMCkgKiBzdHlsZS5jYXB0dXJlO1xuICB9XG4gIGlmICh0YXJnZXRQaWVjZSkge1xuICAgIHNjb3JlICs9ICg1MjAgKyAxODAgKiBjaGFsbGVuZ2VQcmVzc3VyZSkgKiBzdHlsZS5jYXB0dXJlO1xuICAgIGlmIChtb3ZlLmtpbmQgPT09ICdiYXNpYycpIHNjb3JlICs9IDE2MCAqIGNoYWxsZW5nZVByZXNzdXJlICogc3R5bGUuY2FwdHVyZTtcbiAgICBjb25zdCB0YXJnZXRBZHZhbmNlbWVudCA9XG4gICAgICB0YXJnZXRQaWVjZS5jb2xvciA9PT0gJ3doaXRlJ1xuICAgICAgICA/IHN0YXRlLmJvYXJkU2l6ZSAtIDEgLSB0YXJnZXRQaWVjZS5wb3NpdGlvbi5yb3dcbiAgICAgICAgOiB0YXJnZXRQaWVjZS5wb3NpdGlvbi5yb3c7XG4gICAgc2NvcmUgKz0gdGFyZ2V0QWR2YW5jZW1lbnQgKiAoMTYgKyA4ICogY2hhbGxlbmdlUHJlc3N1cmUpICogc3R5bGUuY2FwdHVyZTtcbiAgfVxuICBpZiAobW92ZS5raW5kID09PSAncG93ZXInKSB7XG4gICAgc2NvcmUgKz1cbiAgICAgICh0YXJnZXRQaWVjZSA/IDEyMCA6IGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IC02MCAtIDE3MCAqIGNoYWxsZW5nZVByZXNzdXJlIDogLTMwKSAqXG4gICAgICBzdHlsZS5wb3dlcjtcbiAgfVxuICBpZiAobmlnaHRtYXJlTW9kZSA9PT0gJ21hZ251cycgJiYgbW92ZS5raW5kID09PSAncG93ZXInKSB7XG4gICAgc2NvcmUgKz0gc2NvcmVNYWdudXNQb3dlclBhdGllbmNlKHN0YXRlLCBtb3ZlLCB0YXJnZXRQaWVjZSwgc3R5bGUpO1xuICB9XG4gIGlmIChtb3ZlLmFuaW1hbCA9PT0gJ2xpb24nKVxuICAgIHNjb3JlICs9IG5pZ2h0bWFyZU1vZGUgPT09ICdwcmlkZScgPyAyNjAgKiBzdHlsZS5wb3dlciA6IC0yMCAqIHN0eWxlLnBvd2VyO1xuICBpZiAobW92ZS5hbmltYWwgPT09ICdrYW5nYXJvbycpIHNjb3JlICs9IDE0ICogc3R5bGUucG93ZXI7XG4gIGlmICh3b3VsZFVubG9ja1Bvd2VyKHN0YXRlLCBjb2xvciwgbW92ZS50bykpIHNjb3JlICs9IDkwICogc3R5bGUudW5sb2NrO1xuICBpZiAoaW5jbHVkZVRhY3RpY2FsUHJlc3N1cmUgJiYgc3RhdGUuYm9hcmRTaXplIDw9IDYpIHtcbiAgICBzY29yZSArPVxuICAgICAgY291bnRQb3dlclJlYWNoQWZ0ZXJNb3ZlKHN0YXRlLCBtb3ZlLCBjb2xvcikgKlxuICAgICAgKGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDggOiA0KSAqXG4gICAgICBzdHlsZS5tb2JpbGl0eTtcbiAgICBzY29yZSArPVxuICAgICAgY291bnRQcm90ZWN0ZWRUaHJlYXRzQWZ0ZXJNb3ZlKHN0YXRlLCBtb3ZlLCBjb2xvcikgKlxuICAgICAgKGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDM2IDogMTgpICpcbiAgICAgIHN0eWxlLnRyYXA7XG4gICAgc2NvcmUgKz0gc2NvcmVFbmRnYW1lUHJlc3N1cmUoc3RhdGUsIG1vdmUsIGNvbG9yKSAqIHN0eWxlLmVuZGdhbWU7XG4gIH0gZWxzZSB7XG4gICAgc2NvcmUgKz0gc2NvcmVFbmRnYW1lUHJlc3N1cmUoc3RhdGUsIG1vdmUsIGNvbG9yKSAqIHN0eWxlLmVuZGdhbWU7XG4gIH1cbiAgaWYgKGRpZmZpY3VsdHkgPT09ICdoYXJkJyAmJiBpc1NxdWFyZVZ1bG5lcmFibGVBZnRlck1vdmUoc3RhdGUsIG1vdmUpKSB7XG4gICAgc2NvcmUgLT0gKHRhcmdldFBpZWNlID8gODAgOiAxNDApICogc3R5bGUuc2FmZXR5O1xuICB9XG4gIHNjb3JlICs9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIHN0eWxlLnJhbmRvbW5lc3M7XG5cbiAgcmV0dXJuIHNjb3JlO1xufVxuXG5mdW5jdGlvbiBzY29yZUJvdE1vdmVXaXRoTG9va2FoZWFkKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIGRpZmZpY3VsdHk6IENoZXNzaW1hbHNCb3REaWZmaWN1bHR5LFxuICBzdHlsZTogQ2hlc3NpbWFsc0JvdFN0eWxlLFxuICBjaGFsbGVuZ2VQcmVzc3VyZSA9IDAsXG4gIG5pZ2h0bWFyZU1vZGU6IENoZXNzaW1hbHNOaWdodG1hcmVNb2RlID0gJ25vbmUnXG4pOiBudW1iZXIge1xuICBsZXQgc2NvcmUgPSBzY29yZUJvdE1vdmUoc3RhdGUsIG1vdmUsIGRpZmZpY3VsdHksIHN0eWxlLCBjaGFsbGVuZ2VQcmVzc3VyZSwgdHJ1ZSwgbmlnaHRtYXJlTW9kZSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhZnRlck1vdmUgPSBhcHBseUNoZXNzaW1hbHNNb3ZlKHN0YXRlLCBtb3ZlKTtcbiAgICBpZiAoYWZ0ZXJNb3ZlLnN0YXR1cyA9PT0gJ2ZpbmlzaGVkJykgcmV0dXJuIHNjb3JlICsgNTAwMDtcblxuICAgIGNvbnN0IG9wcG9uZW50TW92ZXMgPSBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhhZnRlck1vdmUpO1xuICAgIGNvbnN0IG9wcG9uZW50SW1tZWRpYXRlV2luID0gb3Bwb25lbnRNb3Zlcy5zb21lKFxuICAgICAgb3Bwb25lbnRNb3ZlID0+XG4gICAgICAgIG9wcG9uZW50TW92ZS5raW5kID09PSAnYmFzaWMnICYmXG4gICAgICAgIGlzUHJvbW90aW9uUm93KGFmdGVyTW92ZS5ib2FyZFNpemUsIGFmdGVyTW92ZS5jdXJyZW50VHVybiwgb3Bwb25lbnRNb3ZlLnRvKVxuICAgICk7XG4gICAgaWYgKG9wcG9uZW50SW1tZWRpYXRlV2luKSB7XG4gICAgICBzY29yZSAtPVxuICAgICAgICAoZGlmZmljdWx0eSA9PT0gJ2Vhc3knXG4gICAgICAgICAgPyAxODAwXG4gICAgICAgICAgOiBkaWZmaWN1bHR5ID09PSAnbm9ybWFsJ1xuICAgICAgICAgICAgPyA1MjAwXG4gICAgICAgICAgICA6IDgwMDAgKyA0MjAwICogY2hhbGxlbmdlUHJlc3N1cmUpICogc3R5bGUuc2FmZXR5O1xuICAgIH1cblxuICAgIGNvbnN0IG1vdmVkUGllY2UgPSBhZnRlck1vdmUucGllY2VzLmZpbmQocGllY2UgPT4gcGllY2UuaWQgPT09IG1vdmUucGllY2VJZCAmJiAhcGllY2UuY2FwdHVyZWQpO1xuICAgIGlmIChtb3ZlZFBpZWNlKSB7XG4gICAgICBjb25zdCBjYW5DYXB0dXJlTW92ZWRQaWVjZSA9IG9wcG9uZW50TW92ZXMuc29tZShcbiAgICAgICAgb3Bwb25lbnRNb3ZlID0+IG9wcG9uZW50TW92ZS5jYXB0dXJlc1BpZWNlSWQgPT09IG1vdmUucGllY2VJZFxuICAgICAgKTtcbiAgICAgIGlmIChjYW5DYXB0dXJlTW92ZWRQaWVjZSkge1xuICAgICAgICBzY29yZSAtPVxuICAgICAgICAgIChtb3ZlLmNhcHR1cmVzUGllY2VJZFxuICAgICAgICAgICAgPyAxODBcbiAgICAgICAgICAgIDogZGlmZmljdWx0eSA9PT0gJ2Vhc3knXG4gICAgICAgICAgICAgID8gMTIwXG4gICAgICAgICAgICAgIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCdcbiAgICAgICAgICAgICAgICA/IDM2MFxuICAgICAgICAgICAgICAgIDogNTYwKSAqXG4gICAgICAgICAgc3R5bGUuc2FmZXR5ICpcbiAgICAgICAgICAoMSArIGNoYWxsZW5nZVByZXNzdXJlKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2VudGVyID0gKGFmdGVyTW92ZS5ib2FyZFNpemUgLSAxKSAvIDI7XG4gICAgICBjb25zdCBjZW50ZXJDb250cm9sID0gTWF0aC5tYXgoXG4gICAgICAgIDAsXG4gICAgICAgIGFmdGVyTW92ZS5ib2FyZFNpemUgLyAyIC0gTWF0aC5hYnMobW92ZWRQaWVjZS5wb3NpdGlvbi5jb2wgLSBjZW50ZXIpXG4gICAgICApO1xuICAgICAgc2NvcmUgKz0gY2VudGVyQ29udHJvbCAqIChkaWZmaWN1bHR5ID09PSAnaGFyZCcgPyAxOCA6IDEwKSAqIHN0eWxlLmNlbnRlcjtcbiAgICB9XG5cbiAgICBjb25zdCBvcHBvbmVudEJlc3RSZXBseSA9IG9wcG9uZW50TW92ZXNcbiAgICAgIC5tYXAob3Bwb25lbnRNb3ZlID0+XG4gICAgICAgIHNjb3JlQm90TW92ZShcbiAgICAgICAgICBhZnRlck1vdmUsXG4gICAgICAgICAgb3Bwb25lbnRNb3ZlLFxuICAgICAgICAgIGRpZmZpY3VsdHksXG4gICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgY2hhbGxlbmdlUHJlc3N1cmUsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgbmlnaHRtYXJlTW9kZVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc29ydCgoYSwgYikgPT4gYiAtIGEpWzBdO1xuXG4gICAgaWYgKG9wcG9uZW50QmVzdFJlcGx5KSB7XG4gICAgICBjb25zdCByZXBseVdlaWdodCA9XG4gICAgICAgIGRpZmZpY3VsdHkgPT09ICdlYXN5J1xuICAgICAgICAgID8gMC4xMlxuICAgICAgICAgIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCdcbiAgICAgICAgICAgID8gMC40ICsgMC4xICogY2hhbGxlbmdlUHJlc3N1cmVcbiAgICAgICAgICAgIDogZGlmZmljdWx0eSA9PT0gJ21hc3RlcidcbiAgICAgICAgICAgICAgPyAwLjcyICsgMC4yMiAqIGNoYWxsZW5nZVByZXNzdXJlXG4gICAgICAgICAgICAgIDogMC40OCArIDAuMTYgKiBjaGFsbGVuZ2VQcmVzc3VyZTtcbiAgICAgIHNjb3JlIC09IG9wcG9uZW50QmVzdFJlcGx5ICogcmVwbHlXZWlnaHQgKiBzdHlsZS5yZXBseTtcbiAgICB9XG5cbiAgICBpZiAoZGlmZmljdWx0eSA9PT0gJ2hhcmQnIHx8IGRpZmZpY3VsdHkgPT09ICdtYXN0ZXInKSB7XG4gICAgICBjb25zdCB0b3BPcHBNb3ZlcyA9IG9wcG9uZW50TW92ZXNcbiAgICAgICAgLm1hcChtID0+ICh7XG4gICAgICAgICAgbW92ZTogbSxcbiAgICAgICAgICBzY29yZTogc2NvcmVCb3RNb3ZlKFxuICAgICAgICAgICAgYWZ0ZXJNb3ZlLFxuICAgICAgICAgICAgbSxcbiAgICAgICAgICAgIGRpZmZpY3VsdHksXG4gICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgIGNoYWxsZW5nZVByZXNzdXJlLFxuICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICBuaWdodG1hcmVNb2RlXG4gICAgICAgICAgKSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSlcbiAgICAgICAgLnNsaWNlKDAsIDQpO1xuICAgICAgZm9yIChjb25zdCB7IG1vdmU6IG9wcE1vdmUgfSBvZiB0b3BPcHBNb3Zlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHMyID0gYXBwbHlDaGVzc2ltYWxzTW92ZShhZnRlck1vdmUsIG9wcE1vdmUpO1xuICAgICAgICAgIGlmIChzMi5zdGF0dXMgPT09ICdmaW5pc2hlZCcpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IG15Q291bnRlcnMgPSBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhzMik7XG4gICAgICAgICAgaWYgKG15Q291bnRlcnMubGVuZ3RoID09PSAwKSBjb250aW51ZTtcbiAgICAgICAgICBjb25zdCBteUJlc3QgPVxuICAgICAgICAgICAgbXlDb3VudGVyc1xuICAgICAgICAgICAgICAubWFwKG0gPT5cbiAgICAgICAgICAgICAgICBzY29yZUJvdE1vdmUoczIsIG0sIGRpZmZpY3VsdHksIHN0eWxlLCBjaGFsbGVuZ2VQcmVzc3VyZSwgZmFsc2UsIG5pZ2h0bWFyZU1vZGUpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIgLSBhKVswXSA/PyAwO1xuICAgICAgICAgIHNjb3JlICs9IG15QmVzdCAqIChkaWZmaWN1bHR5ID09PSAnbWFzdGVyJyA/IDAuMjIgOiAwLjE0KSAqIHN0eWxlLnJlcGx5O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBza2lwXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIHNjb3JlIC09IDEwMDA7XG4gIH1cblxuICByZXR1cm4gc2NvcmU7XG59XG5cbmZ1bmN0aW9uIGdldENoYWxsZW5nZVByZXNzdXJlKHJvdW5kPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgaWYgKCFyb3VuZCkgcmV0dXJuIDA7XG4gIHJldHVybiBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCByb3VuZCAvIDgpKTtcbn1cblxuZnVuY3Rpb24gdHVuZUJvdFN0eWxlKFxuICBzdHlsZTogQ2hlc3NpbWFsc0JvdFN0eWxlLFxuICBkaWZmaWN1bHR5OiBDaGVzc2ltYWxzQm90RGlmZmljdWx0eSxcbiAgY2hhbGxlbmdlUHJlc3N1cmU6IG51bWJlcixcbiAgbmlnaHRtYXJlTW9kZTogQ2hlc3NpbWFsc05pZ2h0bWFyZU1vZGUgPSAnbm9uZSdcbik6IENoZXNzaW1hbHNCb3RTdHlsZSB7XG4gIGlmIChuaWdodG1hcmVNb2RlID09PSAnaHVudCcpIHtcbiAgICBzdHlsZSA9IHtcbiAgICAgIC4uLnN0eWxlLFxuICAgICAgYWR2YW5jZW1lbnQ6IHN0eWxlLmFkdmFuY2VtZW50ICogMS4xMixcbiAgICAgIGNhcHR1cmU6IHN0eWxlLmNhcHR1cmUgKiAxLjcyLFxuICAgICAgcG93ZXI6IHN0eWxlLnBvd2VyICogMS4zLFxuICAgICAgc2FmZXR5OiBzdHlsZS5zYWZldHkgKiAwLjgyLFxuICAgICAgcmFuZG9tbmVzczogTWF0aC5taW4oc3R5bGUucmFuZG9tbmVzcywgMTIpLFxuICAgICAgdHJhcDogc3R5bGUudHJhcCAqIDEuMjgsXG4gICAgfTtcbiAgfVxuICBpZiAobmlnaHRtYXJlTW9kZSA9PT0gJ3ByaWRlJykge1xuICAgIHN0eWxlID0ge1xuICAgICAgLi4uc3R5bGUsXG4gICAgICBhZHZhbmNlbWVudDogc3R5bGUuYWR2YW5jZW1lbnQgKiAxLjA4LFxuICAgICAgY2FwdHVyZTogc3R5bGUuY2FwdHVyZSAqIDEuMzIsXG4gICAgICBwb3dlcjogc3R5bGUucG93ZXIgKiAxLjU1LFxuICAgICAgcmFuZG9tbmVzczogTWF0aC5taW4oc3R5bGUucmFuZG9tbmVzcywgMTYpLFxuICAgIH07XG4gIH1cbiAgaWYgKG5pZ2h0bWFyZU1vZGUgPT09ICdtYWdudXMnKSB7XG4gICAgc3R5bGUgPSB7XG4gICAgICAuLi5zdHlsZSxcbiAgICAgIGFkdmFuY2VtZW50OiBzdHlsZS5hZHZhbmNlbWVudCAqIDEuMDQsXG4gICAgICBjYXB0dXJlOiBzdHlsZS5jYXB0dXJlICogMS4xNixcbiAgICAgIHNhZmV0eTogc3R5bGUuc2FmZXR5ICogMS4zOCxcbiAgICAgIHBvd2VyOiBzdHlsZS5wb3dlciAqIDAuODIsXG4gICAgICBjZW50ZXI6IHN0eWxlLmNlbnRlciAqIDEuMixcbiAgICAgIHJlcGx5OiBzdHlsZS5yZXBseSAqIDEuMyxcbiAgICAgIHJhbmRvbW5lc3M6IE1hdGgubWluKHN0eWxlLnJhbmRvbW5lc3MsIDIpLFxuICAgICAgc3ByZWFkOiBzdHlsZS5zcHJlYWQgKiAwLjYsXG4gICAgICB0cmFwOiBzdHlsZS50cmFwICogMS4yMixcbiAgICAgIGVuZGdhbWU6IHN0eWxlLmVuZGdhbWUgKiAxLjI4LFxuICAgIH07XG4gIH1cbiAgaWYgKGRpZmZpY3VsdHkgPT09ICdtYXN0ZXInKSB7XG4gICAgc3R5bGUgPSB7XG4gICAgICAuLi5zdHlsZSxcbiAgICAgIGNhcHR1cmU6IHN0eWxlLmNhcHR1cmUgKiAxLjA4LFxuICAgICAgc2FmZXR5OiBzdHlsZS5zYWZldHkgKiAxLjIyLFxuICAgICAgcmVwbHk6IHN0eWxlLnJlcGx5ICogMS4zMixcbiAgICAgIGNlbnRlcjogc3R5bGUuY2VudGVyICogMS4xMixcbiAgICAgIHJhbmRvbW5lc3M6IE1hdGgubWluKHN0eWxlLnJhbmRvbW5lc3MsIDMpLFxuICAgICAgc3ByZWFkOiBzdHlsZS5zcHJlYWQgKiAwLjUsXG4gICAgICB0cmFwOiBzdHlsZS50cmFwICogMS4xNCxcbiAgICAgIGVuZGdhbWU6IHN0eWxlLmVuZGdhbWUgKiAxLjE4LFxuICAgIH07XG4gIH1cbiAgaWYgKCFjaGFsbGVuZ2VQcmVzc3VyZSkgcmV0dXJuIHN0eWxlO1xuICBjb25zdCBwcmVzc3VyZSA9XG4gICAgZGlmZmljdWx0eSA9PT0gJ2Vhc3knXG4gICAgICA/IGNoYWxsZW5nZVByZXNzdXJlICogMC40NVxuICAgICAgOiBkaWZmaWN1bHR5ID09PSAnbWFzdGVyJ1xuICAgICAgICA/IGNoYWxsZW5nZVByZXNzdXJlICogMS4xNVxuICAgICAgICA6IGNoYWxsZW5nZVByZXNzdXJlO1xuICByZXR1cm4ge1xuICAgIC4uLnN0eWxlLFxuICAgIGNhcHR1cmU6IHN0eWxlLmNhcHR1cmUgKiAoMSArIHByZXNzdXJlICogMC4yOCksXG4gICAgc2FmZXR5OiBzdHlsZS5zYWZldHkgKiAoMSArIHByZXNzdXJlICogMC4zNCksXG4gICAgcmVwbHk6IHN0eWxlLnJlcGx5ICogKDEgKyBwcmVzc3VyZSAqIDAuMjIpLFxuICAgIGNlbnRlcjogc3R5bGUuY2VudGVyICogKDEgKyBwcmVzc3VyZSAqIDAuMTIpLFxuICAgIHJhbmRvbW5lc3M6IHN0eWxlLnJhbmRvbW5lc3MgKiAoMSAtIHByZXNzdXJlICogMC42NSksXG4gICAgc3ByZWFkOiBzdHlsZS5zcHJlYWQgKiAoMSAtIHByZXNzdXJlICogMC4zNSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNob29zZUNoYWxsZW5nZUJhc2ljQ2FwdHVyZShcbiAgc2NvcmVkOiB7IG1vdmU6IENoZXNzaW1hbHNNb3ZlOyBzY29yZTogbnVtYmVyIH1bXSxcbiAgY2hhbGxlbmdlUHJlc3N1cmU6IG51bWJlclxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBpZiAoY2hhbGxlbmdlUHJlc3N1cmUgPCAwLjUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYmVzdCA9IHNjb3JlZFswXTtcbiAgY29uc3QgYmVzdEJhc2ljQ2FwdHVyZSA9IHNjb3JlZC5maW5kKFxuICAgIGl0ZW0gPT4gaXRlbS5tb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXRlbS5tb3ZlLmNhcHR1cmVzUGllY2VJZFxuICApO1xuICBpZiAoIWJlc3QgfHwgIWJlc3RCYXNpY0NhcHR1cmUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChiZXN0Lm1vdmUua2luZCA9PT0gJ2Jhc2ljJyAmJiBiZXN0Lm1vdmUuY2FwdHVyZXNQaWVjZUlkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHRvbGVyYW5jZSA9IGJlc3QubW92ZS5raW5kID09PSAncG93ZXInICYmICFiZXN0Lm1vdmUuY2FwdHVyZXNQaWVjZUlkID8gMTgwMCA6IDkwMDtcbiAgcmV0dXJuIGJlc3Quc2NvcmUgLSBiZXN0QmFzaWNDYXB0dXJlLnNjb3JlIDw9IHRvbGVyYW5jZSA/IGJlc3RCYXNpY0NhcHR1cmUubW92ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2hvb3NlTmlnaHRtYXJlQ2FwdHVyZShcbiAgc2NvcmVkOiB7IG1vdmU6IENoZXNzaW1hbHNNb3ZlOyBzY29yZTogbnVtYmVyIH1bXSxcbiAgbmlnaHRtYXJlTW9kZT86IENoZXNzaW1hbHNOaWdodG1hcmVNb2RlXG4pOiBDaGVzc2ltYWxzTW92ZSB8IHVuZGVmaW5lZCB7XG4gIGlmIChuaWdodG1hcmVNb2RlICE9PSAnaHVudCcpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYmVzdCA9IHNjb3JlZFswXTtcbiAgY29uc3QgY2FwdHVyZSA9IHNjb3JlZC5maW5kKGl0ZW0gPT4gaXRlbS5tb3ZlLmNhcHR1cmVzUGllY2VJZCk7XG4gIGlmICghYmVzdCB8fCAhY2FwdHVyZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICByZXR1cm4gYmVzdC5zY29yZSAtIGNhcHR1cmUuc2NvcmUgPD0gMTgwMCA/IGNhcHR1cmUubW92ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gc2NvcmVNYWdudXNQb3dlclBhdGllbmNlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIHRhcmdldFBpZWNlOiBDaGVzc2ltYWxzUGllY2UgfCB1bmRlZmluZWQsXG4gIHN0eWxlOiBDaGVzc2ltYWxzQm90U3R5bGVcbik6IG51bWJlciB7XG4gIGNvbnN0IGNvbG9yID0gc3RhdGUuY3VycmVudFR1cm47XG4gIGNvbnN0IGZyb21BZHZhbmNlbWVudCA9IGNvbG9yID09PSAnd2hpdGUnID8gc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUuZnJvbS5yb3cgOiBtb3ZlLmZyb20ucm93O1xuICBjb25zdCB0b0FkdmFuY2VtZW50ID0gY29sb3IgPT09ICd3aGl0ZScgPyBzdGF0ZS5ib2FyZFNpemUgLSAxIC0gbW92ZS50by5yb3cgOiBtb3ZlLnRvLnJvdztcbiAgY29uc3QgYWR2YW5jZW1lbnRHYWluID0gTWF0aC5tYXgoMCwgdG9BZHZhbmNlbWVudCAtIGZyb21BZHZhbmNlbWVudCk7XG4gIGNvbnN0IHN0ZXBzVG9Qcm9tb3Rpb24gPSBjb2xvciA9PT0gJ3doaXRlJyA/IG1vdmUudG8ucm93IDogc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUudG8ucm93O1xuICBjb25zdCBjcmVhdGVzUHJvbW90aW9uVGhyZWF0ID0gYWR2YW5jZW1lbnRHYWluID4gMCAmJiBzdGVwc1RvUHJvbW90aW9uIDw9IDE7XG5cbiAgaWYgKHRhcmdldFBpZWNlKSByZXR1cm4gMjYwICogc3R5bGUucG93ZXI7XG4gIGlmIChjcmVhdGVzUHJvbW90aW9uVGhyZWF0KSByZXR1cm4gMTgwICogc3R5bGUuZW5kZ2FtZTtcblxuICBjb25zdCBlYXJseUdhbWUgPSBzdGF0ZS5tb3ZlQ291bnQgPCBzdGF0ZS5ib2FyZFNpemU7XG4gIGNvbnN0IHdhbmRlcmluZ1BlbmFsdHkgPSBlYXJseUdhbWUgPyAxMTgwIDogNjIwO1xuICBjb25zdCBhbmltYWxQZW5hbHR5ID0gbW92ZS5hbmltYWwgPT09ICdrYW5nYXJvbycgPyAyMjAgOiBtb3ZlLmFuaW1hbCA9PT0gJ2xpb24nID8gMTYwIDogMDtcblxuICByZXR1cm4gLSh3YW5kZXJpbmdQZW5hbHR5ICsgYW5pbWFsUGVuYWx0eSkgKiBzdHlsZS5wb3dlcjtcbn1cblxuZnVuY3Rpb24gY291bnRQb3dlclJlYWNoQWZ0ZXJNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3Jcbik6IG51bWJlciB7XG4gIHRyeSB7XG4gICAgY29uc3QgYWZ0ZXJNb3ZlID0gYXBwbHlDaGVzc2ltYWxzTW92ZShzdGF0ZSwgbW92ZSk7XG4gICAgY29uc3QgZXZhbHVhdGlvblN0YXRlID0geyAuLi5hZnRlck1vdmUsIGN1cnJlbnRUdXJuOiBjb2xvciB9O1xuICAgIHJldHVybiBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhldmFsdWF0aW9uU3RhdGUsIGNvbG9yKS5maWx0ZXIoXG4gICAgICBuZXh0TW92ZSA9PiBuZXh0TW92ZS5raW5kID09PSAncG93ZXInXG4gICAgKS5sZW5ndGg7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvdW50UHJvdGVjdGVkVGhyZWF0c0FmdGVyTW92ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU6IENoZXNzaW1hbHNNb3ZlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yXG4pOiBudW1iZXIge1xuICB0cnkge1xuICAgIGNvbnN0IGFmdGVyTW92ZSA9IGFwcGx5Q2hlc3NpbWFsc01vdmUoc3RhdGUsIG1vdmUpO1xuICAgIGNvbnN0IGV2YWx1YXRpb25TdGF0ZSA9IHsgLi4uYWZ0ZXJNb3ZlLCBjdXJyZW50VHVybjogY29sb3IgfTtcbiAgICBjb25zdCBvdXJNb3ZlcyA9IGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKGV2YWx1YXRpb25TdGF0ZSwgY29sb3IpO1xuICAgIGNvbnN0IGVuZW15UGllY2VzID0gYWN0aXZlUGllY2VzKGFmdGVyTW92ZSkuZmlsdGVyKFxuICAgICAgcGllY2UgPT4gcGllY2UuY29sb3IgIT09IGNvbG9yICYmICFwaWVjZS5jYXB0dXJlZFxuICAgICk7XG4gICAgcmV0dXJuIGVuZW15UGllY2VzLmZpbHRlcihwaWVjZSA9PlxuICAgICAgb3VyTW92ZXMuc29tZShuZXh0TW92ZSA9PiBuZXh0TW92ZS5jYXB0dXJlc1BpZWNlSWQgPT09IHBpZWNlLmlkKVxuICAgICkubGVuZ3RoO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY29yZUVuZGdhbWVQcmVzc3VyZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU6IENoZXNzaW1hbHNNb3ZlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yXG4pOiBudW1iZXIge1xuICBjb25zdCByZW1haW5pbmdFbmVteVBpZWNlcyA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmlsdGVyKFxuICAgIHBpZWNlID0+IHBpZWNlLmNvbG9yICE9PSBjb2xvciAmJiAhcGllY2UuY2FwdHVyZWRcbiAgKS5sZW5ndGg7XG4gIGNvbnN0IHVyZ2VuY3kgPSByZW1haW5pbmdFbmVteVBpZWNlcyA8PSBNYXRoLm1heCgyLCBNYXRoLmZsb29yKHN0YXRlLmJvYXJkU2l6ZSAvIDIpKSA/IDEuNiA6IDE7XG4gIGNvbnN0IGRpc3RhbmNlVG9Qcm9tb3Rpb24gPSBjb2xvciA9PT0gJ3doaXRlJyA/IG1vdmUudG8ucm93IDogc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUudG8ucm93O1xuICByZXR1cm4gTWF0aC5tYXgoMCwgc3RhdGUuYm9hcmRTaXplIC0gZGlzdGFuY2VUb1Byb21vdGlvbikgKiAxNCAqIHVyZ2VuY3k7XG59XG5cbmZ1bmN0aW9uIGNob29zZUNvbnNlcnZhdGl2ZUhhcmRDYXB0dXJlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgc2NvcmVkOiB7IG1vdmU6IENoZXNzaW1hbHNNb3ZlOyBzY29yZTogbnVtYmVyIH1bXVxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBpZiAoc3RhdGUuYm9hcmRTaXplICE9PSA4KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJlc3QgPSBzY29yZWRbMF07XG4gIGlmICghYmVzdCB8fCBiZXN0Lm1vdmUua2luZCAhPT0gJ3Bvd2VyJyB8fCAhYmVzdC5tb3ZlLmNhcHR1cmVzUGllY2VJZCB8fCBiZXN0LnNjb3JlID49IDEwMDAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGJlc3RCYXNpY0NhcHR1cmUgPSBzY29yZWQuZmluZChcbiAgICBpdGVtID0+IGl0ZW0ubW92ZS5raW5kID09PSAnYmFzaWMnICYmIGl0ZW0ubW92ZS5jYXB0dXJlc1BpZWNlSWRcbiAgKTtcbiAgaWYgKCFiZXN0QmFzaWNDYXB0dXJlKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIHJldHVybiBiZXN0LnNjb3JlIC0gYmVzdEJhc2ljQ2FwdHVyZS5zY29yZSA8PSA2NTAgPyBiZXN0QmFzaWNDYXB0dXJlLm1vdmUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHBpY2tOb2lzeUJvdE1vdmUoXG4gIHNjb3JlZDogQXJyYXk8eyBtb3ZlOiBDaGVzc2ltYWxzTW92ZTsgc2NvcmU6IG51bWJlciB9PixcbiAgc3ByZWFkOiBudW1iZXJcbik6IENoZXNzaW1hbHNNb3ZlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHNjb3JlZC5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHBvb2xTaXplID0gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKHNjb3JlZC5sZW5ndGggKiBzcHJlYWQpKTtcbiAgY29uc3QgcG9vbCA9IHNjb3JlZC5zbGljZSgwLCBwb29sU2l6ZSk7XG4gIGNvbnN0IHRvcFNjb3JlID0gcG9vbFswXT8uc2NvcmUgPz8gMDtcbiAgY29uc3Qgd2VpZ2h0ZWQgPSBwb29sLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCByZWxhdGl2ZSA9IE1hdGgubWF4KDAsIGl0ZW0uc2NvcmUgLSB0b3BTY29yZSArIDEyMDApO1xuICAgIGNvbnN0IHdlaWdodCA9IE1hdGgubWF4KDEsIHJlbGF0aXZlIC8gMTIwICsgKHBvb2wubGVuZ3RoIC0gaW5kZXgpICogMik7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSwgd2VpZ2h0IH07XG4gIH0pO1xuICBjb25zdCB0b3RhbFdlaWdodCA9IHdlaWdodGVkLnJlZHVjZSgodG90YWwsIGl0ZW0pID0+IHRvdGFsICsgaXRlbS53ZWlnaHQsIDApO1xuICBsZXQgY3Vyc29yID0gTWF0aC5yYW5kb20oKSAqIHRvdGFsV2VpZ2h0O1xuICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2VpZ2h0ZWQpIHtcbiAgICBjdXJzb3IgLT0gaXRlbS53ZWlnaHQ7XG4gICAgaWYgKGN1cnNvciA8PSAwKSByZXR1cm4gaXRlbS5tb3ZlO1xuICB9XG4gIHJldHVybiBwb29sWzBdPy5tb3ZlO1xufVxuXG5mdW5jdGlvbiBnZXRJbW1lZGlhdGVXaW5uaW5nTW92ZXMoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgcmV0dXJuIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKHN0YXRlLCBjb2xvcikuZmlsdGVyKFxuICAgIG1vdmUgPT4gbW92ZS5raW5kID09PSAnYmFzaWMnICYmIGlzUHJvbW90aW9uUm93KHN0YXRlLmJvYXJkU2l6ZSwgY29sb3IsIG1vdmUudG8pXG4gICk7XG59XG5cbmZ1bmN0aW9uIHdvdWxkVW5sb2NrUG93ZXIoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uXG4pOiBib29sZWFuIHtcbiAgaWYgKHN0YXRlLnBsYXllcnNbY29sb3JdLnBvd2VyVW5sb2NrZWQpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgY2VudGVyVG9wID0gc3RhdGUuYm9hcmRTaXplIC8gMiAtIDE7XG4gIGNvbnN0IGNlbnRlckJvdHRvbSA9IHN0YXRlLmJvYXJkU2l6ZSAvIDI7XG4gIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/IHBvc2l0aW9uLnJvdyA8PSBjZW50ZXJUb3AgOiBwb3NpdGlvbi5yb3cgPj0gY2VudGVyQm90dG9tO1xufVxuXG5mdW5jdGlvbiBpc1NxdWFyZVZ1bG5lcmFibGVBZnRlck1vdmUoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIG1vdmU6IENoZXNzaW1hbHNNb3ZlKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYWZ0ZXJNb3ZlID0gYXBwbHlDaGVzc2ltYWxzTW92ZShzdGF0ZSwgbW92ZSk7XG4gICAgaWYgKGFmdGVyTW92ZS5zdGF0dXMgPT09ICdmaW5pc2hlZCcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoYWZ0ZXJNb3ZlKS5zb21lKFxuICAgICAgZW5lbXlNb3ZlID0+IHNhbWVQb3NpdGlvbihlbmVteU1vdmUudG8sIG1vdmUudG8pICYmICEhZW5lbXlNb3ZlLmNhcHR1cmVzUGllY2VJZFxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQb3dlckRpcmVjdGlvbnMoYW5pbWFsOiBDaGVzc2ltYWxzQW5pbWFsVHlwZSk6IENoZXNzaW1hbHNQb3NpdGlvbltdIHtcbiAgaWYgKGFuaW1hbCA9PT0gJ2VhZ2xlJykge1xuICAgIHJldHVybiBbXG4gICAgICB7IHJvdzogLTEsIGNvbDogLTEgfSxcbiAgICAgIHsgcm93OiAtMSwgY29sOiAxIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IDEsIGNvbDogMSB9LFxuICAgIF07XG4gIH1cbiAgaWYgKGFuaW1hbCA9PT0gJ2J1bGwnKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgcm93OiAtMSwgY29sOiAwIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAwIH0sXG4gICAgICB7IHJvdzogMCwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IDAsIGNvbDogMSB9LFxuICAgIF07XG4gIH1cbiAgcmV0dXJuIFtcbiAgICB7IHJvdzogLTEsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogLTEsIGNvbDogMCB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAxIH0sXG4gICAgeyByb3c6IDAsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMCwgY29sOiAxIH0sXG4gICAgeyByb3c6IDEsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMSwgY29sOiAwIH0sXG4gICAgeyByb3c6IDEsIGNvbDogMSB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiByZWZyZXNoQ2hlc3NpbWFsc1Bvd2VyVW5sb2NrcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHBsYXllcnM6IHtcbiAgICAgIHdoaXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLnBsYXllcnMud2hpdGUsXG4gICAgICAgIHBvd2VyVW5sb2NrZWQ6XG4gICAgICAgICAgc3RhdGUucGxheWVycy53aGl0ZS5wb3dlclVubG9ja2VkIHx8XG4gICAgICAgICAgaGFzQ3Jvc3NlZENlbnRlcihzdGF0ZSwgJ3doaXRlJykgfHxcbiAgICAgICAgICBoYXNFbmVteUVudGVyZWRIb21lKHN0YXRlLCAnd2hpdGUnKSxcbiAgICAgIH0sXG4gICAgICBibGFjazoge1xuICAgICAgICAuLi5zdGF0ZS5wbGF5ZXJzLmJsYWNrLFxuICAgICAgICBwb3dlclVubG9ja2VkOlxuICAgICAgICAgIHN0YXRlLnBsYXllcnMuYmxhY2sucG93ZXJVbmxvY2tlZCB8fFxuICAgICAgICAgIGhhc0Nyb3NzZWRDZW50ZXIoc3RhdGUsICdibGFjaycpIHx8XG4gICAgICAgICAgaGFzRW5lbXlFbnRlcmVkSG9tZShzdGF0ZSwgJ2JsYWNrJyksXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc0Nyb3NzZWRDZW50ZXIoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IpOiBib29sZWFuIHtcbiAgY29uc3QgY2VudGVyVG9wID0gc3RhdGUuYm9hcmRTaXplIC8gMiAtIDE7XG4gIGNvbnN0IGNlbnRlckJvdHRvbSA9IHN0YXRlLmJvYXJkU2l6ZSAvIDI7XG4gIHJldHVybiBhY3RpdmVQaWVjZXMoc3RhdGUpLnNvbWUocGllY2UgPT4ge1xuICAgIGlmIChwaWVjZS5jb2xvciAhPT0gY29sb3IgfHwgcGllY2UuY2FwdHVyZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyBwaWVjZS5wb3NpdGlvbi5yb3cgPD0gY2VudGVyVG9wIDogcGllY2UucG9zaXRpb24ucm93ID49IGNlbnRlckJvdHRvbTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhhc0VuZW15RW50ZXJlZEhvbWUoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IpOiBib29sZWFuIHtcbiAgY29uc3QgY2VudGVyVG9wID0gc3RhdGUuYm9hcmRTaXplIC8gMiAtIDE7XG4gIGNvbnN0IGNlbnRlckJvdHRvbSA9IHN0YXRlLmJvYXJkU2l6ZSAvIDI7XG4gIGNvbnN0IGVuZW15ID0gb3RoZXJDb2xvcihjb2xvcik7XG4gIHJldHVybiBhY3RpdmVQaWVjZXMoc3RhdGUpLnNvbWUocGllY2UgPT4ge1xuICAgIGlmIChwaWVjZS5jb2xvciAhPT0gZW5lbXkgfHwgcGllY2UuY2FwdHVyZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyBwaWVjZS5wb3NpdGlvbi5yb3cgPj0gY2VudGVyQm90dG9tIDogcGllY2UucG9zaXRpb24ucm93IDw9IGNlbnRlclRvcDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGlzUHJvbW90aW9uUm93KFxuICBib2FyZFNpemU6IENoZXNzaW1hbHNCb2FyZFNpemUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4gIHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb25cbik6IGJvb2xlYW4ge1xuICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyBwb3NpdGlvbi5yb3cgPT09IDAgOiBwb3NpdGlvbi5yb3cgPT09IGJvYXJkU2l6ZSAtIDE7XG59XG5cbmZ1bmN0aW9uIGlzSW5zaWRlQm9hcmQoYm9hcmRTaXplOiBDaGVzc2ltYWxzQm9hcmRTaXplLCBwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgcG9zaXRpb24ucm93ID49IDAgJiYgcG9zaXRpb24ucm93IDwgYm9hcmRTaXplICYmIHBvc2l0aW9uLmNvbCA+PSAwICYmIHBvc2l0aW9uLmNvbCA8IGJvYXJkU2l6ZVxuICApO1xufVxuXG5mdW5jdGlvbiBzYW1lUG9zaXRpb24oYTogQ2hlc3NpbWFsc1Bvc2l0aW9uLCBiOiBDaGVzc2ltYWxzUG9zaXRpb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIGEucm93ID09PSBiLnJvdyAmJiBhLmNvbCA9PT0gYi5jb2w7XG59XG5cbmZ1bmN0aW9uIG90aGVyQ29sb3IoY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcik6IENoZXNzaW1hbHNQbGF5ZXJDb2xvciB7XG4gIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/ICdibGFjaycgOiAnd2hpdGUnO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMb2NhbElkKCk6IHN0cmluZyB7XG4gIHJldHVybiBgbG9jYWwtJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA4KX1gO1xufVxuIl19
|