valtech-components 4.0.479 â 4.0.481
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/bubble-blitz-game.component.mjs +18 -9
- package/esm2022/lib/components/organisms/mini-games/chessimals-engine.mjs +109 -16
- package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +34 -17
- package/esm2022/lib/components/organisms/mini-games/christianity-card.component.mjs +270 -0
- package/esm2022/lib/components/organisms/mini-games/christianity-game.component.mjs +2253 -0
- package/esm2022/lib/components/organisms/mini-games/memory-game.component.mjs +18 -9
- package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +311 -17
- package/esm2022/lib/components/organisms/mini-games/simon-game.component.mjs +18 -9
- package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
- package/esm2022/lib/directives/light-ripple.directive.mjs +57 -0
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/mini-games/public-api.mjs +34 -2
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/valtech-components-mini-games.mjs +34 -2
- package/fesm2022/valtech-components-mini-games.mjs.map +1 -1
- package/fesm2022/valtech-components.mjs +3075 -74
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/mini-games/bubble-blitz-game.component.d.ts +2 -0
- package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +4 -1
- package/lib/components/organisms/mini-games/christianity-card.component.d.ts +46 -0
- package/lib/components/organisms/mini-games/christianity-game.component.d.ts +177 -0
- package/lib/components/organisms/mini-games/memory-game.component.d.ts +2 -0
- package/lib/components/organisms/mini-games/simon-game.component.d.ts +2 -0
- package/lib/components/organisms/mini-games/types.d.ts +131 -1
- package/lib/directives/light-ripple.directive.d.ts +8 -0
- package/lib/version.d.ts +1 -1
- package/mini-games/public-api.d.ts +4 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/src/lib/assets/games/christianity/card-symbol.svg +51 -0
- package/src/lib/assets/games/christianity/card-template-reference/front.html +114 -0
- package/src/lib/assets/games/christianity/card-template-reference/front.style.css +352 -0
- package/src/lib/assets/games/christianity/data/01-genesis.bible-reference-suggestions.csv +191 -0
- package/src/lib/assets/games/christianity/data/01-genesis.bible-verses.nbv-open.csv +170 -0
- package/src/lib/assets/games/christianity/data/01-genesis.cards.csv +281 -0
- package/src/lib/assets/games/christianity/data/01-genesis.cards.i18n.csv +281 -0
- package/src/lib/assets/games/christianity/data/01-genesis.cards.json +16453 -0
- package/src/lib/assets/games/christianity/data/01-genesis.unassigned-effects.csv +49 -0
- package/src/lib/assets/games/christianity/data/README.md +40 -0
- package/src/lib/assets/games/christianity/data/data-con-habilides.csv +273 -0
- package/src/lib/assets/games/christianity/data/habilidades-por-tipo.xlsx +0 -0
- package/src/lib/assets/games/christianity/data/listado-edicion.csv +281 -0
- package/src/lib/assets/games/christianity/editions/1/cards/.gitkeep +1 -0
- package/src/lib/assets/games/christianity/editions/1/cards/PLACEHOLDER.png +0 -0
- package/src/lib/assets/games/christianity/editions/README.md +34 -0
- package/src/lib/assets/games/christianity/icons/1-icon.png +0 -0
- package/src/lib/assets/games/christianity/icons/action.png +0 -0
- package/src/lib/assets/games/christianity/icons/character.png +0 -0
- package/src/lib/assets/games/christianity/icons/event.png +0 -0
- package/src/lib/assets/games/christianity/icons/leader.png +0 -0
- package/src/lib/assets/games/christianity/icons/offering.png +0 -0
- package/src/lib/assets/games/christianity/icons/place.png +0 -0
- package/src/lib/assets/games/christianity/icons/tool.png +0 -0
- package/src/lib/assets/games/christianity/icons/wisdom.png +0 -0
- package/src/lib/assets/games/christianity/sources/README.md +16 -0
- package/src/lib/assets/games/christianity/sources/spaonbv_vpl.txt +29102 -0
- package/src/lib/assets/games/christianity/sources/spaonbv_vpl.xml +29104 -0
- package/src/lib/assets/games/christianity/spaonbv.txt +52 -0
|
@@ -70,18 +70,66 @@ export const CHESSIMALS_BOT_PROFILES = [
|
|
|
70
70
|
labelKey: 'chessimalsBotSentinel',
|
|
71
71
|
descriptionKey: 'chessimalsBotSentinelBody',
|
|
72
72
|
},
|
|
73
|
+
{
|
|
74
|
+
id: 'oracle',
|
|
75
|
+
difficulty: 'hard',
|
|
76
|
+
avatar: 'ðŪ',
|
|
77
|
+
labelKey: 'chessimalsBotOracle',
|
|
78
|
+
descriptionKey: 'chessimalsBotOracleBody',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
id: 'ambusher',
|
|
82
|
+
difficulty: 'hard',
|
|
83
|
+
avatar: 'ðŠĪ',
|
|
84
|
+
labelKey: 'chessimalsBotAmbusher',
|
|
85
|
+
descriptionKey: 'chessimalsBotAmbusherBody',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
id: 'locksmith',
|
|
89
|
+
difficulty: 'hard',
|
|
90
|
+
avatar: 'ð',
|
|
91
|
+
labelKey: 'chessimalsBotLocksmith',
|
|
92
|
+
descriptionKey: 'chessimalsBotLocksmithBody',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
id: 'storm',
|
|
96
|
+
difficulty: 'hard',
|
|
97
|
+
avatar: 'ðĐïļ',
|
|
98
|
+
labelKey: 'chessimalsBotStorm',
|
|
99
|
+
descriptionKey: 'chessimalsBotStormBody',
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: 'matriarch',
|
|
103
|
+
difficulty: 'hard',
|
|
104
|
+
avatar: 'ð',
|
|
105
|
+
labelKey: 'chessimalsBotMatriarch',
|
|
106
|
+
descriptionKey: 'chessimalsBotMatriarchBody',
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
id: 'endgame',
|
|
110
|
+
difficulty: 'hard',
|
|
111
|
+
avatar: 'â',
|
|
112
|
+
labelKey: 'chessimalsBotEndgame',
|
|
113
|
+
descriptionKey: 'chessimalsBotEndgameBody',
|
|
114
|
+
},
|
|
73
115
|
];
|
|
74
116
|
const BOT_STYLES = {
|
|
75
|
-
explorer: { advancement: 1.05, capture: 0.82, safety: 0.62, power: 0.8, center: 1.15, unlock: 1.05, reply: 0.7, randomness: 260, spread: 0.68 },
|
|
76
|
-
impulsive: { advancement: 0.9, capture: 1.45, safety: 0.48, power: 1.15, center: 0.8, unlock: 0.9, reply: 0.55, randomness: 290, spread: 0.62 },
|
|
77
|
-
runner: { advancement: 1.55, capture: 0.78, safety: 0.5, power: 0.95, center: 0.7, unlock: 1.1, reply: 0.55, randomness: 250, spread: 0.6 },
|
|
78
|
-
hunter: { advancement: 0.95, capture: 1.45, safety: 0.9, power: 1.05, center: 0.95, unlock: 0.95, reply: 1, randomness: 90, spread: 0.3 },
|
|
79
|
-
guardian: { advancement: 0.88, capture: 1, safety: 1.45, power: 0.85, center: 1.05, unlock: 1, reply: 1.15, randomness: 70, spread: 0.26 },
|
|
80
|
-
jumper: { advancement: 1.12, capture: 1, safety: 0.92, power: 1.42, center: 1.18, unlock: 1.08, reply: 0.95, randomness: 95, spread: 0.32 },
|
|
81
|
-
strategist: { advancement: 1.05, capture: 1.08, safety: 1.22, power: 1.08, center: 1.16, unlock: 1.1, reply: 1.25, randomness: 22, spread: 0.14 },
|
|
82
|
-
predator: { advancement: 0.98, capture: 1.68, safety: 1.02, power: 1.34, center: 1, unlock: 1, reply: 1.12, randomness: 28, spread: 0.16 },
|
|
83
|
-
sprinter: { advancement: 1.72, capture: 0.9, safety: 0.95, power: 1.08, center: 0.86, unlock: 1.18, reply: 1, randomness: 26, spread: 0.15 },
|
|
84
|
-
sentinel: { advancement: 0.9, capture: 1.12, safety: 1.72, power: 0.95, center: 1.28, unlock: 1.05, reply: 1.38, randomness: 18, spread: 0.12 },
|
|
117
|
+
explorer: { advancement: 1.05, capture: 0.82, safety: 0.62, power: 0.8, center: 1.15, unlock: 1.05, reply: 0.7, randomness: 260, spread: 0.68, mobility: 0.75, trap: 0.5, endgame: 0.55 },
|
|
118
|
+
impulsive: { advancement: 0.9, capture: 1.45, safety: 0.48, power: 1.15, center: 0.8, unlock: 0.9, reply: 0.55, randomness: 290, spread: 0.62, mobility: 0.85, trap: 0.62, endgame: 0.5 },
|
|
119
|
+
runner: { advancement: 1.55, capture: 0.78, safety: 0.5, power: 0.95, center: 0.7, unlock: 1.1, reply: 0.55, randomness: 250, spread: 0.6, mobility: 0.72, trap: 0.45, endgame: 1.1 },
|
|
120
|
+
hunter: { advancement: 0.95, capture: 1.45, safety: 0.9, power: 1.05, center: 0.95, unlock: 0.95, reply: 1, randomness: 90, spread: 0.3, mobility: 0.95, trap: 0.82, endgame: 0.76 },
|
|
121
|
+
guardian: { advancement: 0.88, capture: 1, safety: 1.45, power: 0.85, center: 1.05, unlock: 1, reply: 1.15, randomness: 70, spread: 0.26, mobility: 0.82, trap: 0.72, endgame: 0.72 },
|
|
122
|
+
jumper: { advancement: 1.12, capture: 1, safety: 0.92, power: 1.42, center: 1.18, unlock: 1.08, reply: 0.95, randomness: 95, spread: 0.32, mobility: 1.15, trap: 0.9, endgame: 0.82 },
|
|
123
|
+
strategist: { advancement: 1.05, capture: 1.08, safety: 1.22, power: 1.08, center: 1.16, unlock: 1.1, reply: 1.25, randomness: 22, spread: 0.14, mobility: 1.08, trap: 1.06, endgame: 1 },
|
|
124
|
+
predator: { advancement: 0.98, capture: 1.68, safety: 1.02, power: 1.34, center: 1, unlock: 1, reply: 1.12, randomness: 28, spread: 0.16, mobility: 1.02, trap: 1.18, endgame: 0.82 },
|
|
125
|
+
sprinter: { advancement: 1.72, capture: 0.9, safety: 0.95, power: 1.08, center: 0.86, unlock: 1.18, reply: 1, randomness: 26, spread: 0.15, mobility: 0.95, trap: 0.78, endgame: 1.42 },
|
|
126
|
+
sentinel: { advancement: 0.9, capture: 1.12, safety: 1.72, power: 0.95, center: 1.28, unlock: 1.05, reply: 1.38, randomness: 18, spread: 0.12, mobility: 0.86, trap: 1.04, endgame: 0.84 },
|
|
127
|
+
oracle: { advancement: 1, capture: 1.12, safety: 1.42, power: 1.1, center: 1.18, unlock: 1.08, reply: 1.8, randomness: 8, spread: 0.08, mobility: 1.06, trap: 1.22, endgame: 1.08 },
|
|
128
|
+
ambusher: { advancement: 0.9, capture: 1.48, safety: 1.08, power: 1.46, center: 1.05, unlock: 1.02, reply: 1.32, randomness: 14, spread: 0.1, mobility: 1.12, trap: 1.72, endgame: 0.92 },
|
|
129
|
+
locksmith: { advancement: 0.88, capture: 1.04, safety: 1.55, power: 1.02, center: 1.48, unlock: 1.12, reply: 1.52, randomness: 12, spread: 0.1, mobility: 1.58, trap: 1.24, endgame: 0.86 },
|
|
130
|
+
storm: { advancement: 1.18, capture: 1.38, safety: 0.98, power: 1.62, center: 1.08, unlock: 1.18, reply: 1.22, randomness: 18, spread: 0.13, mobility: 1.36, trap: 1.28, endgame: 1.02 },
|
|
131
|
+
matriarch: { advancement: 0.96, capture: 1.18, safety: 1.64, power: 1.18, center: 1.22, unlock: 1.08, reply: 1.66, randomness: 10, spread: 0.08, mobility: 1.02, trap: 1.36, endgame: 1 },
|
|
132
|
+
endgame: { advancement: 1.46, capture: 1, safety: 1.28, power: 1.04, center: 0.94, unlock: 1.08, reply: 1.44, randomness: 10, spread: 0.09, mobility: 0.98, trap: 1.02, endgame: 1.86 },
|
|
85
133
|
};
|
|
86
134
|
const DEFAULT_BOT_PROFILE_BY_DIFFICULTY = {
|
|
87
135
|
easy: 'explorer',
|
|
@@ -167,8 +215,17 @@ export function chooseChessimalsBotMove(state, difficulty = 'normal', profileId
|
|
|
167
215
|
if (moves.length === 0)
|
|
168
216
|
return undefined;
|
|
169
217
|
const style = BOT_STYLES[profileId] ?? BOT_STYLES[DEFAULT_BOT_PROFILE_BY_DIFFICULTY[difficulty]];
|
|
170
|
-
const
|
|
171
|
-
.map((move) => ({ move, score:
|
|
218
|
+
const quickScored = moves
|
|
219
|
+
.map((move) => ({ move, score: scoreBotMove(state, move, difficulty, style) }))
|
|
220
|
+
.sort((a, b) => b.score - a.score);
|
|
221
|
+
const lookaheadLimit = difficulty === 'hard' ? 32 : difficulty === 'normal' ? 24 : 0;
|
|
222
|
+
const scored = quickScored
|
|
223
|
+
.map((item, index) => ({
|
|
224
|
+
move: item.move,
|
|
225
|
+
score: index < lookaheadLimit
|
|
226
|
+
? scoreBotMoveWithLookahead(state, item.move, difficulty, style)
|
|
227
|
+
: item.score,
|
|
228
|
+
}))
|
|
172
229
|
.sort((a, b) => b.score - a.score);
|
|
173
230
|
if (difficulty === 'easy') {
|
|
174
231
|
const playable = scored.filter((item) => item.score > -3000);
|
|
@@ -369,7 +426,7 @@ function getPowerMoves(state, piece, animal) {
|
|
|
369
426
|
const directions = getPowerDirections(animal);
|
|
370
427
|
const moves = [];
|
|
371
428
|
for (const direction of directions) {
|
|
372
|
-
for (let distance = 1; distance
|
|
429
|
+
for (let distance = 1; distance < state.boardSize; distance += 1) {
|
|
373
430
|
const target = {
|
|
374
431
|
row: piece.position.row + direction.row * distance,
|
|
375
432
|
col: piece.position.col + direction.col * distance,
|
|
@@ -430,7 +487,7 @@ function getKangarooMoves(state, piece) {
|
|
|
430
487
|
}
|
|
431
488
|
return moves;
|
|
432
489
|
}
|
|
433
|
-
function scoreBotMove(state, move, difficulty, style) {
|
|
490
|
+
function scoreBotMove(state, move, difficulty, style, includeTacticalPressure = true) {
|
|
434
491
|
const color = state.currentTurn;
|
|
435
492
|
const targetPiece = move.capturesPieceId
|
|
436
493
|
? activePieces(state).find((piece) => piece.id === move.capturesPieceId)
|
|
@@ -456,6 +513,14 @@ function scoreBotMove(state, move, difficulty, style) {
|
|
|
456
513
|
score += 14 * style.power;
|
|
457
514
|
if (wouldUnlockPower(state, color, move.to))
|
|
458
515
|
score += 90 * style.unlock;
|
|
516
|
+
if (includeTacticalPressure && state.boardSize <= 6) {
|
|
517
|
+
score += countPowerReachAfterMove(state, move, color) * (difficulty === 'hard' ? 8 : 4) * style.mobility;
|
|
518
|
+
score += countProtectedThreatsAfterMove(state, move, color) * (difficulty === 'hard' ? 36 : 18) * style.trap;
|
|
519
|
+
score += scoreEndgamePressure(state, move, color) * style.endgame;
|
|
520
|
+
}
|
|
521
|
+
else {
|
|
522
|
+
score += scoreEndgamePressure(state, move, color) * style.endgame;
|
|
523
|
+
}
|
|
459
524
|
if (difficulty === 'hard' && isSquareVulnerableAfterMove(state, move)) {
|
|
460
525
|
score -= (targetPiece ? 80 : 140) * style.safety;
|
|
461
526
|
}
|
|
@@ -486,7 +551,7 @@ function scoreBotMoveWithLookahead(state, move, difficulty, style) {
|
|
|
486
551
|
score += centerControl * (difficulty === 'hard' ? 18 : 10) * style.center;
|
|
487
552
|
}
|
|
488
553
|
const opponentBestReply = opponentMoves
|
|
489
|
-
.map((opponentMove) => scoreBotMove(afterMove, opponentMove, difficulty, style))
|
|
554
|
+
.map((opponentMove) => scoreBotMove(afterMove, opponentMove, difficulty, style, false))
|
|
490
555
|
.sort((a, b) => b - a)[0];
|
|
491
556
|
if (opponentBestReply) {
|
|
492
557
|
const replyWeight = difficulty === 'easy' ? 0.12 : difficulty === 'normal' ? 0.32 : 0.48;
|
|
@@ -498,6 +563,34 @@ function scoreBotMoveWithLookahead(state, move, difficulty, style) {
|
|
|
498
563
|
}
|
|
499
564
|
return score;
|
|
500
565
|
}
|
|
566
|
+
function countPowerReachAfterMove(state, move, color) {
|
|
567
|
+
try {
|
|
568
|
+
const afterMove = applyChessimalsMove(state, move);
|
|
569
|
+
const evaluationState = { ...afterMove, currentTurn: color };
|
|
570
|
+
return getChessimalsAllLegalMoves(evaluationState, color).filter((nextMove) => nextMove.kind === 'power').length;
|
|
571
|
+
}
|
|
572
|
+
catch {
|
|
573
|
+
return 0;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
function countProtectedThreatsAfterMove(state, move, color) {
|
|
577
|
+
try {
|
|
578
|
+
const afterMove = applyChessimalsMove(state, move);
|
|
579
|
+
const evaluationState = { ...afterMove, currentTurn: color };
|
|
580
|
+
const ourMoves = getChessimalsAllLegalMoves(evaluationState, color);
|
|
581
|
+
const enemyPieces = activePieces(afterMove).filter((piece) => piece.color !== color && !piece.captured);
|
|
582
|
+
return enemyPieces.filter((piece) => ourMoves.some((nextMove) => nextMove.capturesPieceId === piece.id)).length;
|
|
583
|
+
}
|
|
584
|
+
catch {
|
|
585
|
+
return 0;
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
function scoreEndgamePressure(state, move, color) {
|
|
589
|
+
const remainingEnemyPieces = activePieces(state).filter((piece) => piece.color !== color && !piece.captured).length;
|
|
590
|
+
const urgency = remainingEnemyPieces <= Math.max(2, Math.floor(state.boardSize / 2)) ? 1.6 : 1;
|
|
591
|
+
const distanceToPromotion = color === 'white' ? move.to.row : state.boardSize - 1 - move.to.row;
|
|
592
|
+
return Math.max(0, state.boardSize - distanceToPromotion) * 14 * urgency;
|
|
593
|
+
}
|
|
501
594
|
function chooseConservativeHardCapture(state, scored) {
|
|
502
595
|
if (state.boardSize !== 8)
|
|
503
596
|
return undefined;
|
|
@@ -632,4 +725,4 @@ function otherColor(color) {
|
|
|
632
725
|
function createLocalId() {
|
|
633
726
|
return `local-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
634
727
|
}
|
|
635
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1lbmdpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21pbmktZ2FtZXMvY2hlc3NpbWFscy1lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE1BQU0sT0FBTyxHQUEyQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBYzlFLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUEyQjtJQUM3RDtRQUNFLEVBQUUsRUFBRSxVQUFVO1FBQ2QsVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLElBQUk7UUFDWixRQUFRLEVBQUUsdUJBQXVCO1FBQ2pDLGNBQWMsRUFBRSwyQkFBMkI7S0FDNUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxXQUFXO1FBQ2YsVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLEdBQUc7UUFDWCxRQUFRLEVBQUUsd0JBQXdCO1FBQ2xDLGNBQWMsRUFBRSw0QkFBNEI7S0FDN0M7SUFDRDtRQUNFLEVBQUUsRUFBRSxRQUFRO1FBQ1osVUFBVSxFQUFFLE1BQU07UUFDbEIsTUFBTSxFQUFFLElBQUk7UUFDWixRQUFRLEVBQUUscUJBQXFCO1FBQy9CLGNBQWMsRUFBRSx5QkFBeUI7S0FDMUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxRQUFRO1FBQ1osVUFBVSxFQUFFLFFBQVE7UUFDcEIsTUFBTSxFQUFFLElBQUk7UUFDWixRQUFRLEVBQUUscUJBQXFCO1FBQy9CLGNBQWMsRUFBRSx5QkFBeUI7S0FDMUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxVQUFVO1FBQ2QsVUFBVSxFQUFFLFFBQVE7UUFDcEIsTUFBTSxFQUFFLEtBQUs7UUFDYixRQUFRLEVBQUUsdUJBQXVCO1FBQ2pDLGNBQWMsRUFBRSwyQkFBMkI7S0FDNUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxRQUFRO1FBQ1osVUFBVSxFQUFFLFFBQVE7UUFDcEIsTUFBTSxFQUFFLElBQUk7UUFDWixRQUFRLEVBQUUscUJBQXFCO1FBQy9CLGNBQWMsRUFBRSx5QkFBeUI7S0FDMUM7SUFDRDtRQUNFLEVBQUUsRUFBRSxZQUFZO1FBQ2hCLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHlCQUF5QjtRQUNuQyxjQUFjLEVBQUUsNkJBQTZCO0tBQzlDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsVUFBVTtRQUNkLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxjQUFjLEVBQUUsMkJBQTJCO0tBQzVDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsVUFBVTtRQUNkLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxjQUFjLEVBQUUsMkJBQTJCO0tBQzVDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsVUFBVTtRQUNkLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxjQUFjLEVBQUUsMkJBQTJCO0tBQzVDO0NBQ0YsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUF1RDtJQUNyRSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMvSSxTQUFTLEVBQUUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMvSSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtJQUMzSSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtJQUN6SSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMxSSxNQUFNLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMzSSxVQUFVLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNqSixRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUMxSSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUM1SSxRQUFRLEVBQUUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtDQUNoSixDQUFDO0FBRUYsTUFBTSxpQ0FBaUMsR0FBNEQ7SUFDakcsSUFBSSxFQUFFLFVBQVU7SUFDaEIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsSUFBSSxFQUFFLFlBQVk7Q0FDbkIs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LE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDaEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0UsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQztJQUN6QyxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3RCLElBQUksTUFBTSxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztBQUN2QixDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FDL0IsS0FBMEIsRUFDMUIsS0FBNEI7SUFFNUIsT0FBTywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUNwRCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDbkYsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUN2QixLQUEwQixFQUMxQixLQUE0QixFQUM1QixRQUE0QjtJQUU1QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsYUFBYTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3JELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUN6QyxPQUFPLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQztBQUN0RixDQUFDO0FBRUQsU0FBUywyQkFBMkIsQ0FBQyxLQUEwQixFQUFFLElBQW9CO0lBQ25GLElBQUksQ0FBQztRQUNILE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssVUFBVTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2xELE9BQU8sMEJBQTBCLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FDOUQsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLE1BQTRCO0lBQ3RELElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLE9BQU87WUFDTCxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDcEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNuQixFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ25CLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDdEIsT0FBTztZQUNMLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7WUFDbkIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7WUFDbEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUNuQixFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtTQUNuQixDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU87UUFDTCxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDcEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtRQUNuQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO1FBQ25CLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDbkIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7UUFDbEIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtRQUNuQixFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtRQUNsQixFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtLQUNuQixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsNkJBQTZCLENBQUMsS0FBMEI7SUFDL0QsT0FBTztRQUNMLEdBQUcsS0FBSztRQUNSLE9BQU8sRUFBRTtZQUNQLEtBQUssRUFBRTtnQkFDTCxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSztnQkFDdEIsYUFBYSxFQUNYLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWE7b0JBQ2pDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7b0JBQ2hDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7YUFDdEM7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUs7Z0JBQ3RCLGFBQWEsRUFDWCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxhQUFhO29CQUNqQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO29CQUNoQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO2FBQ3RDO1NBQ0Y7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsS0FBMEIsRUFBRSxLQUE0QjtJQUNoRixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDekMsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDeEMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFELE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUM7SUFDbEcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxLQUEwQixFQUFFLEtBQTRCO0lBQ25GLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsT0FBTyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDeEMsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFELE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUM7SUFDbEcsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQ3JCLFNBQThCLEVBQzlCLEtBQTRCLEVBQzVCLFFBQTRCO0lBRTVCLE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsU0FBOEIsRUFBRSxRQUE0QjtJQUNqRixPQUFPLENBQ0wsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLElBQUksUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQy9GLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsQ0FBcUIsRUFBRSxDQUFxQjtJQUNoRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDNUMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQTRCO0lBQzlDLE9BQU8sS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVMsYUFBYTtJQUNwQixPQUFPLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hlc3NpbWFsc0FuaW1hbFR5cGUsXG4gIENoZXNzaW1hbHNCb3REaWZmaWN1bHR5LFxuICBDaGVzc2ltYWxzQm90UHJvZmlsZSxcbiAgQ2hlc3NpbWFsc0JvdFByb2ZpbGVJZCxcbiAgQ2hlc3NpbWFsc0JvYXJkU2l6ZSxcbiAgQ2hlc3NpbWFsc0dhbWVNb2RlLFxuICBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBDaGVzc2ltYWxzR2FtZVN0YXR1cyxcbiAgQ2hlc3NpbWFsc01vdmUsXG4gIENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5LFxuICBDaGVzc2ltYWxzT25saW5lU3RhdGUsXG4gIENoZXNzaW1hbHNQaWVjZSxcbiAgQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBDaGVzc2ltYWxzUG9zaXRpb24sXG59IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBBTklNQUxTOiBDaGVzc2ltYWxzQW5pbWFsVHlwZVtdID0gWydlYWdsZScsICdidWxsJywgJ2thbmdhcm9vJywgJ2xpb24nXTtcblxuaW50ZXJmYWNlIENoZXNzaW1hbHNCb3RTdHlsZSB7XG4gIGFkdmFuY2VtZW50OiBudW1iZXI7XG4gIGNhcHR1cmU6IG51bWJlcjtcbiAgc2FmZXR5OiBudW1iZXI7XG4gIHBvd2VyOiBudW1iZXI7XG4gIGNlbnRlcjogbnVtYmVyO1xuICB1bmxvY2s6IG51bWJlcjtcbiAgcmVwbHk6IG51bWJlcjtcbiAgcmFuZG9tbmVzczogbnVtYmVyO1xuICBzcHJlYWQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IENIRVNTSU1BTFNfQk9UX1BST0ZJTEVTOiBDaGVzc2ltYWxzQm90UHJvZmlsZVtdID0gW1xuICB7XG4gICAgaWQ6ICdleHBsb3JlcicsXG4gICAgZGlmZmljdWx0eTogJ2Vhc3knLFxuICAgIGF2YXRhcjogJ/Cfp60nLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEV4cGxvcmVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RFeHBsb3JlckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdpbXB1bHNpdmUnLFxuICAgIGRpZmZpY3VsdHk6ICdlYXN5JyxcbiAgICBhdmF0YXI6ICfimqEnLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEltcHVsc2l2ZScsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90SW1wdWxzaXZlQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3J1bm5lcicsXG4gICAgZGlmZmljdWx0eTogJ2Vhc3knLFxuICAgIGF2YXRhcjogJ/Cfj4EnLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFJ1bm5lcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90UnVubmVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2h1bnRlcicsXG4gICAgZGlmZmljdWx0eTogJ25vcm1hbCcsXG4gICAgYXZhdGFyOiAn8J+OrycsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90SHVudGVyJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RIdW50ZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnZ3VhcmRpYW4nLFxuICAgIGRpZmZpY3VsdHk6ICdub3JtYWwnLFxuICAgIGF2YXRhcjogJ/Cfm6HvuI8nLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEd1YXJkaWFuJyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RHdWFyZGlhbkJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdqdW1wZXInLFxuICAgIGRpZmZpY3VsdHk6ICdub3JtYWwnLFxuICAgIGF2YXRhcjogJ/CfppgnLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEp1bXBlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90SnVtcGVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3N0cmF0ZWdpc3QnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfimZ/vuI8nLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdFN0cmF0ZWdpc3QnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFN0cmF0ZWdpc3RCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAncHJlZGF0b3InLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn6aBJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RQcmVkYXRvcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90UHJlZGF0b3JCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnc3ByaW50ZXInLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn5qAJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RTcHJpbnRlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90U3ByaW50ZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnc2VudGluZWwnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfwn4+wJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RTZW50aW5lbCcsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90U2VudGluZWxCb2R5JyxcbiAgfSxcbl07XG5cbmNvbnN0IEJPVF9TVFlMRVM6IFJlY29yZDxDaGVzc2ltYWxzQm90UHJvZmlsZUlkLCBDaGVzc2ltYWxzQm90U3R5bGU+ID0ge1xuICBleHBsb3JlcjogeyBhZHZhbmNlbWVudDogMS4wNSwgY2FwdHVyZTogMC44Miwgc2FmZXR5OiAwLjYyLCBwb3dlcjogMC44LCBjZW50ZXI6IDEuMTUsIHVubG9jazogMS4wNSwgcmVwbHk6IDAuNywgcmFuZG9tbmVzczogMjYwLCBzcHJlYWQ6IDAuNjggfSxcbiAgaW1wdWxzaXZlOiB7IGFkdmFuY2VtZW50OiAwLjksIGNhcHR1cmU6IDEuNDUsIHNhZmV0eTogMC40OCwgcG93ZXI6IDEuMTUsIGNlbnRlcjogMC44LCB1bmxvY2s6IDAuOSwgcmVwbHk6IDAuNTUsIHJhbmRvbW5lc3M6IDI5MCwgc3ByZWFkOiAwLjYyIH0sXG4gIHJ1bm5lcjogeyBhZHZhbmNlbWVudDogMS41NSwgY2FwdHVyZTogMC43OCwgc2FmZXR5OiAwLjUsIHBvd2VyOiAwLjk1LCBjZW50ZXI6IDAuNywgdW5sb2NrOiAxLjEsIHJlcGx5OiAwLjU1LCByYW5kb21uZXNzOiAyNTAsIHNwcmVhZDogMC42IH0sXG4gIGh1bnRlcjogeyBhZHZhbmNlbWVudDogMC45NSwgY2FwdHVyZTogMS40NSwgc2FmZXR5OiAwLjksIHBvd2VyOiAxLjA1LCBjZW50ZXI6IDAuOTUsIHVubG9jazogMC45NSwgcmVwbHk6IDEsIHJhbmRvbW5lc3M6IDkwLCBzcHJlYWQ6IDAuMyB9LFxuICBndWFyZGlhbjogeyBhZHZhbmNlbWVudDogMC44OCwgY2FwdHVyZTogMSwgc2FmZXR5OiAxLjQ1LCBwb3dlcjogMC44NSwgY2VudGVyOiAxLjA1LCB1bmxvY2s6IDEsIHJlcGx5OiAxLjE1LCByYW5kb21uZXNzOiA3MCwgc3ByZWFkOiAwLjI2IH0sXG4gIGp1bXBlcjogeyBhZHZhbmNlbWVudDogMS4xMiwgY2FwdHVyZTogMSwgc2FmZXR5OiAwLjkyLCBwb3dlcjogMS40MiwgY2VudGVyOiAxLjE4LCB1bmxvY2s6IDEuMDgsIHJlcGx5OiAwLjk1LCByYW5kb21uZXNzOiA5NSwgc3ByZWFkOiAwLjMyIH0sXG4gIHN0cmF0ZWdpc3Q6IHsgYWR2YW5jZW1lbnQ6IDEuMDUsIGNhcHR1cmU6IDEuMDgsIHNhZmV0eTogMS4yMiwgcG93ZXI6IDEuMDgsIGNlbnRlcjogMS4xNiwgdW5sb2NrOiAxLjEsIHJlcGx5OiAxLjI1LCByYW5kb21uZXNzOiAyMiwgc3ByZWFkOiAwLjE0IH0sXG4gIHByZWRhdG9yOiB7IGFkdmFuY2VtZW50OiAwLjk4LCBjYXB0dXJlOiAxLjY4LCBzYWZldHk6IDEuMDIsIHBvd2VyOiAxLjM0LCBjZW50ZXI6IDEsIHVubG9jazogMSwgcmVwbHk6IDEuMTIsIHJhbmRvbW5lc3M6IDI4LCBzcHJlYWQ6IDAuMTYgfSxcbiAgc3ByaW50ZXI6IHsgYWR2YW5jZW1lbnQ6IDEuNzIsIGNhcHR1cmU6IDAuOSwgc2FmZXR5OiAwLjk1LCBwb3dlcjogMS4wOCwgY2VudGVyOiAwLjg2LCB1bmxvY2s6IDEuMTgsIHJlcGx5OiAxLCByYW5kb21uZXNzOiAyNiwgc3ByZWFkOiAwLjE1IH0sXG4gIHNlbnRpbmVsOiB7IGFkdmFuY2VtZW50OiAwLjksIGNhcHR1cmU6IDEuMTIsIHNhZmV0eTogMS43MiwgcG93ZXI6IDAuOTUsIGNlbnRlcjogMS4yOCwgdW5sb2NrOiAxLjA1LCByZXBseTogMS4zOCwgcmFuZG9tbmVzczogMTgsIHNwcmVhZDogMC4xMiB9LFxufTtcblxuY29uc3QgREVGQVVMVF9CT1RfUFJPRklMRV9CWV9ESUZGSUNVTFRZOiBSZWNvcmQ8Q2hlc3NpbWFsc0JvdERpZmZpY3VsdHksIENoZXNzaW1hbHNCb3RQcm9maWxlSWQ+ID0ge1xuICBlYXN5OiAnZXhwbG9yZXInLFxuICBub3JtYWw6ICdodW50ZXInLFxuICBoYXJkOiAnc3RyYXRlZ2lzdCcsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUNoZXNzaW1hbHNHYW1lT3B0aW9ucyB7XG4gIGlkPzogc3RyaW5nO1xuICBtb2RlPzogQ2hlc3NpbWFsc0dhbWVNb2RlO1xuICBzdGF0dXM/OiBDaGVzc2ltYWxzR2FtZVN0YXR1cztcbiAgb25saW5lPzogQ2hlc3NpbWFsc09ubGluZVN0YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hlc3NpbWFsc0dhbWUoXG4gIGJvYXJkU2l6ZTogQ2hlc3NpbWFsc0JvYXJkU2l6ZSA9IDYsXG4gIG9wdGlvbnM6IENyZWF0ZUNoZXNzaW1hbHNHYW1lT3B0aW9ucyA9IHt9LFxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IHBpZWNlczogQ2hlc3NpbWFsc1BpZWNlW10gPSBbXTtcbiAgY29uc3Qgd2hpdGVSb3cgPSBib2FyZFNpemUgLSAyO1xuICBjb25zdCBibGFja1JvdyA9IDE7XG5cbiAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgYm9hcmRTaXplOyBjb2wgKz0gMSkge1xuICAgIHBpZWNlcy5wdXNoKHtcbiAgICAgIGlkOiBgVyR7Y29sICsgMX1gLFxuICAgICAgY29sb3I6ICd3aGl0ZScsXG4gICAgICBwb3NpdGlvbjogeyByb3c6IHdoaXRlUm93LCBjb2wgfSxcbiAgICAgIGNhcHR1cmVkOiBmYWxzZSxcbiAgICB9KTtcbiAgICBwaWVjZXMucHVzaCh7XG4gICAgICBpZDogYEIke2NvbCArIDF9YCxcbiAgICAgIGNvbG9yOiAnYmxhY2snLFxuICAgICAgcG9zaXRpb246IHsgcm93OiBibGFja1JvdywgY29sIH0sXG4gICAgICBjYXB0dXJlZDogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBzdGF0ZSA9IHJlZnJlc2hDaGVzc2ltYWxzUG93ZXJVbmxvY2tzKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBjcmVhdGVMb2NhbElkKCksXG4gICAgbW9kZTogb3B0aW9ucy5tb2RlID8/ICdsb2NhbCcsXG4gICAgYm9hcmRTaXplLFxuICAgIHN0YXR1czogb3B0aW9ucy5zdGF0dXMgPz8gJ2luX3Byb2dyZXNzJyxcbiAgICBjdXJyZW50VHVybjogJ3doaXRlJyxcbiAgICBwaWVjZXMsXG4gICAgcGxheWVyczoge1xuICAgICAgd2hpdGU6IHsgY29sb3I6ICd3aGl0ZScsIHBvd2VyVW5sb2NrZWQ6IGZhbHNlLCBjYXJkczogY3JlYXRlQ2FyZHMoKSB9LFxuICAgICAgYmxhY2s6IHsgY29sb3I6ICdibGFjaycsIHBvd2VyVW5sb2NrZWQ6IGZhbHNlLCBjYXJkczogY3JlYXRlQ2FyZHMoKSB9LFxuICAgIH0sXG4gICAgbW92ZUNvdW50OiAwLFxuICAgIG9ubGluZTogb3B0aW9ucy5vbmxpbmUsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgbW92ZUhpc3Rvcnk6IFtjcmVhdGVNb3ZlSGlzdG9yeUVudHJ5KHN0YXRlKV0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGVzc2ltYWxzUGllY2VBdChcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24sXG4pOiBDaGVzc2ltYWxzUGllY2UgfCB1bmRlZmluZWQge1xuICByZXR1cm4gYWN0aXZlUGllY2VzKHN0YXRlKS5maW5kKFxuICAgIChwaWVjZSkgPT5cbiAgICAgICFwaWVjZS5jYXB0dXJlZCAmJiBwaWVjZS5wb3NpdGlvbi5yb3cgPT09IHBvc2l0aW9uLnJvdyAmJiBwaWVjZS5wb3NpdGlvbi5jb2wgPT09IHBvc2l0aW9uLmNvbCxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoZXNzaW1hbHNMZWdhbE1vdmVzKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgcGllY2VJZDogc3RyaW5nLFxuICBhbmltYWw/OiBDaGVzc2ltYWxzQW5pbWFsVHlwZSxcbik6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBpZiAoc3RhdGUuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnKSByZXR1cm4gW107XG5cbiAgY29uc3QgcGllY2UgPSBhY3RpdmVQaWVjZXMoc3RhdGUpLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHBpZWNlSWQgJiYgIWl0ZW0uY2FwdHVyZWQpO1xuICBpZiAoIXBpZWNlIHx8IHBpZWNlLmNvbG9yICE9PSBzdGF0ZS5jdXJyZW50VHVybikgcmV0dXJuIFtdO1xuXG4gIGlmIChhbmltYWwpIHtcbiAgICBjb25zdCBwbGF5ZXIgPSBzdGF0ZS5wbGF5ZXJzW3BpZWNlLmNvbG9yXTtcbiAgICBpZiAoIXBsYXllci5wb3dlclVubG9ja2VkIHx8IHBsYXllci5jYXJkc1thbmltYWxdLnVzZWQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gZ2V0UG93ZXJNb3ZlcyhzdGF0ZSwgcGllY2UsIGFuaW1hbCk7XG4gIH1cblxuICByZXR1cm4gZ2V0QmFzaWNNb3ZlcyhzdGF0ZSwgcGllY2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yID0gc3RhdGUuY3VycmVudFR1cm4sXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgaWYgKHN0YXRlLnN0YXR1cyAhPT0gJ2luX3Byb2dyZXNzJykgcmV0dXJuIFtdO1xuXG4gIGNvbnN0IHR1cm5TdGF0ZSA9IGNvbG9yID09PSBzdGF0ZS5jdXJyZW50VHVybiA/IHN0YXRlIDogeyAuLi5zdGF0ZSwgY3VycmVudFR1cm46IGNvbG9yIH07XG4gIGNvbnN0IHBsYXllciA9IHR1cm5TdGF0ZS5wbGF5ZXJzW2NvbG9yXTtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHBpZWNlIG9mIGFjdGl2ZVBpZWNlcyh0dXJuU3RhdGUpKSB7XG4gICAgaWYgKHBpZWNlLmNhcHR1cmVkIHx8IHBpZWNlLmNvbG9yICE9PSBjb2xvcikgY29udGludWU7XG5cbiAgICBtb3Zlcy5wdXNoKC4uLmdldENoZXNzaW1hbHNMZWdhbE1vdmVzKHR1cm5TdGF0ZSwgcGllY2UuaWQpKTtcbiAgICBpZiAoIXBsYXllci5wb3dlclVubG9ja2VkKSBjb250aW51ZTtcblxuICAgIGZvciAoY29uc3QgYW5pbWFsIG9mIEFOSU1BTFMpIHtcbiAgICAgIGlmIChwbGF5ZXIuY2FyZHNbYW5pbWFsXS51c2VkKSBjb250aW51ZTtcbiAgICAgIG1vdmVzLnB1c2goLi4uZ2V0Q2hlc3NpbWFsc0xlZ2FsTW92ZXModHVyblN0YXRlLCBwaWVjZS5pZCwgYW5pbWFsKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1vdmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hvb3NlQ2hlc3NpbWFsc0JvdE1vdmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBkaWZmaWN1bHR5OiBDaGVzc2ltYWxzQm90RGlmZmljdWx0eSA9ICdub3JtYWwnLFxuICBwcm9maWxlSWQ6IENoZXNzaW1hbHNCb3RQcm9maWxlSWQgPSBERUZBVUxUX0JPVF9QUk9GSUxFX0JZX0RJRkZJQ1VMVFlbZGlmZmljdWx0eV0sXG4pOiBDaGVzc2ltYWxzTW92ZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1vdmVzID0gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoc3RhdGUpO1xuICBpZiAobW92ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBzdHlsZSA9IEJPVF9TVFlMRVNbcHJvZmlsZUlkXSA/PyBCT1RfU1RZTEVTW0RFRkFVTFRfQk9UX1BST0ZJTEVfQllfRElGRklDVUxUWVtkaWZmaWN1bHR5XV07XG5cbiAgY29uc3Qgc2NvcmVkID0gbW92ZXNcbiAgICAubWFwKChtb3ZlKSA9PiAoeyBtb3ZlLCBzY29yZTogc2NvcmVCb3RNb3ZlV2l0aExvb2thaGVhZChzdGF0ZSwgbW92ZSwgZGlmZmljdWx0eSwgc3R5bGUpIH0pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG5cbiAgaWYgKGRpZmZpY3VsdHkgPT09ICdlYXN5Jykge1xuICAgIGNvbnN0IHBsYXlhYmxlID0gc2NvcmVkLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5zY29yZSA+IC0zMDAwKTtcbiAgICByZXR1cm4gcGlja05vaXN5Qm90TW92ZShwbGF5YWJsZS5sZW5ndGggPyBwbGF5YWJsZSA6IHNjb3JlZCwgMC41NSk7XG4gIH1cblxuICBpZiAoZGlmZmljdWx0eSA9PT0gJ25vcm1hbCcpIHtcbiAgICByZXR1cm4gc2NvcmVkWzBdPy5tb3ZlO1xuICB9XG5cbiAgY29uc3Qgd2lubmluZ01vdmUgPSBzY29yZWQuZmluZCgoaXRlbSkgPT4gaXRlbS5zY29yZSA+PSAxMDAwMCk7XG4gIGlmICh3aW5uaW5nTW92ZSkgcmV0dXJuIHdpbm5pbmdNb3ZlLm1vdmU7XG5cbiAgY29uc3Qgb3Bwb25lbnRXaW5uaW5nVGFyZ2V0cyA9IG5ldyBTZXQoXG4gICAgZ2V0SW1tZWRpYXRlV2lubmluZ01vdmVzKHN0YXRlLCBvdGhlckNvbG9yKHN0YXRlLmN1cnJlbnRUdXJuKSkubWFwKChtb3ZlKSA9PiBwb3NpdGlvbktleShtb3ZlLnRvKSksXG4gICk7XG4gIGlmIChvcHBvbmVudFdpbm5pbmdUYXJnZXRzLnNpemUgPiAwKSB7XG4gICAgY29uc3QgYmxvY2tpbmdNb3ZlID0gc2NvcmVkLmZpbmQoXG4gICAgICAoaXRlbSkgPT4gaXRlbS5tb3ZlLmNhcHR1cmVzUGllY2VJZCB8fCBvcHBvbmVudFdpbm5pbmdUYXJnZXRzLmhhcyhwb3NpdGlvbktleShpdGVtLm1vdmUudG8pKSxcbiAgICApO1xuICAgIGlmIChibG9ja2luZ01vdmUpIHJldHVybiBibG9ja2luZ01vdmUubW92ZTtcbiAgfVxuXG4gIGNvbnN0IGNvbnNlcnZhdGl2ZUNhcHR1cmUgPSBjaG9vc2VDb25zZXJ2YXRpdmVIYXJkQ2FwdHVyZShzdGF0ZSwgc2NvcmVkKTtcbiAgaWYgKGNvbnNlcnZhdGl2ZUNhcHR1cmUpIHJldHVybiBjb25zZXJ2YXRpdmVDYXB0dXJlO1xuXG4gIHJldHVybiBzY29yZWRbMF0/Lm1vdmU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseUNoZXNzaW1hbHNNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY2FuZGlkYXRlOiBDaGVzc2ltYWxzTW92ZSxcbik6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICBjb25zdCBsZWdhbE1vdmUgPSBnZXRDaGVzc2ltYWxzTGVnYWxNb3ZlcyhzdGF0ZSwgY2FuZGlkYXRlLnBpZWNlSWQsIGNhbmRpZGF0ZS5hbmltYWwpLmZpbmQoKG1vdmUpID0+XG4gICAgc2FtZVBvc2l0aW9uKG1vdmUuZnJvbSwgY2FuZGlkYXRlLmZyb20pICYmIHNhbWVQb3NpdGlvbihtb3ZlLnRvLCBjYW5kaWRhdGUudG8pLFxuICApO1xuXG4gIGlmICghbGVnYWxNb3ZlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0lMTEVHQUxfTU9WRScpO1xuICB9XG5cbiAgY29uc3QgbW92ZWRQaWVjZSA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZCgocGllY2UpID0+IHBpZWNlLmlkID09PSBsZWdhbE1vdmUucGllY2VJZCk7XG4gIGlmICghbW92ZWRQaWVjZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19QSUVDRV9OT1RfRk9VTkQnKTtcbiAgfVxuXG4gIGNvbnN0IHBpZWNlcyA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkubWFwKChwaWVjZSkgPT4ge1xuICAgIGlmIChwaWVjZS5pZCA9PT0gbGVnYWxNb3ZlLnBpZWNlSWQpIHtcbiAgICAgIHJldHVybiB7IC4uLnBpZWNlLCBwb3NpdGlvbjogeyAuLi5sZWdhbE1vdmUudG8gfSB9O1xuICAgIH1cbiAgICBpZiAocGllY2UuaWQgPT09IGxlZ2FsTW92ZS5jYXB0dXJlc1BpZWNlSWQpIHtcbiAgICAgIHJldHVybiB7IC4uLnBpZWNlLCBjYXB0dXJlZDogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gcGllY2U7XG4gIH0pO1xuXG4gIGNvbnN0IHBsYXllcnMgPSB7XG4gICAgLi4uc3RhdGUucGxheWVycyxcbiAgICBbbW92ZWRQaWVjZS5jb2xvcl06IHtcbiAgICAgIC4uLnN0YXRlLnBsYXllcnNbbW92ZWRQaWVjZS5jb2xvcl0sXG4gICAgICBjYXJkczpcbiAgICAgICAgbGVnYWxNb3ZlLmtpbmQgPT09ICdwb3dlcicgJiYgbGVnYWxNb3ZlLmFuaW1hbFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5wbGF5ZXJzW21vdmVkUGllY2UuY29sb3JdLmNhcmRzLFxuICAgICAgICAgICAgICBbbGVnYWxNb3ZlLmFuaW1hbF06IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5wbGF5ZXJzW21vdmVkUGllY2UuY29sb3JdLmNhcmRzW2xlZ2FsTW92ZS5hbmltYWxdLFxuICAgICAgICAgICAgICAgIHVzZWQ6IHRydWUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiBzdGF0ZS5wbGF5ZXJzW21vdmVkUGllY2UuY29sb3JdLmNhcmRzLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgbmV4dFN0YXRlID0gcmVmcmVzaENoZXNzaW1hbHNQb3dlclVubG9ja3Moe1xuICAgIC4uLnN0YXRlLFxuICAgIHBpZWNlcyxcbiAgICBwbGF5ZXJzLFxuICAgIGN1cnJlbnRUdXJuOiBvdGhlckNvbG9yKG1vdmVkUGllY2UuY29sb3IpLFxuICAgIG1vdmVDb3VudDogc3RhdGUubW92ZUNvdW50ICsgMSxcbiAgICBsYXN0TW92ZTogbGVnYWxNb3ZlLFxuICB9KTtcblxuICBjb25zdCBwcm9tb3RlZCA9IGlzUHJvbW90aW9uUm93KG5leHRTdGF0ZS5ib2FyZFNpemUsIG1vdmVkUGllY2UuY29sb3IsIGxlZ2FsTW92ZS50byk7XG4gIGNvbnN0IGVuZW15UGllY2VzID0gYWN0aXZlUGllY2VzKG5leHRTdGF0ZSkuZmlsdGVyKFxuICAgIChwaWVjZSkgPT4gcGllY2UuY29sb3IgIT09IG1vdmVkUGllY2UuY29sb3IgJiYgIXBpZWNlLmNhcHR1cmVkLFxuICApO1xuXG4gIGNvbnN0IHJlc29sdmVkU3RhdGUgPVxuICAgIHByb21vdGVkIHx8IGVuZW15UGllY2VzLmxlbmd0aCA9PT0gMFxuICAgICAgPyB7XG4gICAgICAgICAgLi4ubmV4dFN0YXRlLFxuICAgICAgICAgIHN0YXR1czogJ2ZpbmlzaGVkJyBhcyBjb25zdCxcbiAgICAgICAgICB3aW5uZXI6IG1vdmVkUGllY2UuY29sb3IsXG4gICAgICAgICAgd2lubmVyUmVhc29uOiBwcm9tb3RlZCA/ICgncHJvbW90aW9uJyBhcyBjb25zdCkgOiAoJ2VsaW1pbmF0aW9uJyBhcyBjb25zdCksXG4gICAgICAgIH1cbiAgICAgIDogbmV4dFN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4ucmVzb2x2ZWRTdGF0ZSxcbiAgICBtb3ZlSGlzdG9yeTogW1xuICAgICAgLi4uZW5zdXJlTW92ZUhpc3Rvcnkoc3RhdGUpLFxuICAgICAgY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShyZXNvbHZlZFN0YXRlLCBsZWdhbE1vdmUpLFxuICAgIF0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGVzc2ltYWxzUmV2aWV3U3RhdGUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBlbnRyeTogQ2hlc3NpbWFsc01vdmVIaXN0b3J5RW50cnksXG4pOiBDaGVzc2ltYWxzR2FtZVN0YXRlIHtcbiAgY29uc3QgYmFzZVN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlID0geyAuLi5zdGF0ZSB9O1xuICBkZWxldGUgYmFzZVN0YXRlLmxhc3RNb3ZlO1xuICBkZWxldGUgYmFzZVN0YXRlLndpbm5lcjtcbiAgZGVsZXRlIGJhc2VTdGF0ZS53aW5uZXJSZWFzb247XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVN0YXRlLFxuICAgIHN0YXR1czogZW50cnkuc3RhdHVzLFxuICAgIGN1cnJlbnRUdXJuOiBlbnRyeS5jdXJyZW50VHVybixcbiAgICBwaWVjZXM6IGNsb25lUGllY2VzKGVudHJ5LnBpZWNlcyksXG4gICAgbW92ZUNvdW50OiBlbnRyeS5tb3ZlTnVtYmVyLFxuICAgIC4uLihlbnRyeS53aW5uZXIgPyB7IHdpbm5lcjogZW50cnkud2lubmVyIH0gOiB7fSksXG4gICAgLi4uKGVudHJ5Lndpbm5lclJlYXNvbiA/IHsgd2lubmVyUmVhc29uOiBlbnRyeS53aW5uZXJSZWFzb24gfSA6IHt9KSxcbiAgICAuLi4oZW50cnkubW92ZSA/IHsgbGFzdE1vdmU6IHNhbml0aXplTW92ZShlbnRyeS5tb3ZlKSB9IDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNb3ZlSGlzdG9yeUVudHJ5KFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZT86IENoZXNzaW1hbHNNb3ZlLFxuKTogQ2hlc3NpbWFsc01vdmVIaXN0b3J5RW50cnkge1xuICByZXR1cm4ge1xuICAgIG1vdmVOdW1iZXI6IHN0YXRlLm1vdmVDb3VudCxcbiAgICBwaWVjZXM6IGNsb25lUGllY2VzKHN0YXRlLnBpZWNlcyksXG4gICAgY3VycmVudFR1cm46IHN0YXRlLmN1cnJlbnRUdXJuLFxuICAgIHN0YXR1czogc3RhdGUuc3RhdHVzLFxuICAgIC4uLihtb3ZlID8geyBtb3ZlOiBzYW5pdGl6ZU1vdmUobW92ZSkgfSA6IHt9KSxcbiAgICAuLi4oc3RhdGUud2lubmVyID8geyB3aW5uZXI6IHN0YXRlLndpbm5lciB9IDoge30pLFxuICAgIC4uLihzdGF0ZS53aW5uZXJSZWFzb24gPyB7IHdpbm5lclJlYXNvbjogc3RhdGUud2lubmVyUmVhc29uIH0gOiB7fSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlKTogQ2hlc3NpbWFsc01vdmVIaXN0b3J5RW50cnlbXSB7XG4gIGlmIChzdGF0ZS5tb3ZlSGlzdG9yeT8ubGVuZ3RoKSByZXR1cm4gc3RhdGUubW92ZUhpc3RvcnkubWFwKGNsb25lTW92ZUhpc3RvcnlFbnRyeSk7XG4gIHJldHVybiBbY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShzdGF0ZSldO1xufVxuXG5mdW5jdGlvbiBjbG9uZU1vdmVIaXN0b3J5RW50cnkoZW50cnk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5KTogQ2hlc3NpbWFsc01vdmVIaXN0b3J5RW50cnkge1xuICByZXR1cm4ge1xuICAgIC4uLmVudHJ5LFxuICAgIHBpZWNlczogY2xvbmVQaWVjZXMoZW50cnkucGllY2VzKSxcbiAgICAuLi4oZW50cnkubW92ZSA/IHsgbW92ZTogc2FuaXRpemVNb3ZlKGVudHJ5Lm1vdmUpIH0gOiB7fSksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsb25lUGllY2VzKHBpZWNlczogQ2hlc3NpbWFsc1BpZWNlW10pOiBDaGVzc2ltYWxzUGllY2VbXSB7XG4gIHJldHVybiBwaWVjZXMubWFwKChwaWVjZSkgPT4gKHtcbiAgICAuLi5waWVjZSxcbiAgICBwb3NpdGlvbjogeyAuLi5waWVjZS5wb3NpdGlvbiB9LFxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplTW92ZShtb3ZlOiBDaGVzc2ltYWxzTW92ZSk6IENoZXNzaW1hbHNNb3ZlIHtcbiAgcmV0dXJuIHtcbiAgICBwaWVjZUlkOiBtb3ZlLnBpZWNlSWQsXG4gICAgZnJvbTogeyAuLi5tb3ZlLmZyb20gfSxcbiAgICB0bzogeyAuLi5tb3ZlLnRvIH0sXG4gICAga2luZDogbW92ZS5raW5kLFxuICAgIC4uLihtb3ZlLmFuaW1hbCA/IHsgYW5pbWFsOiBtb3ZlLmFuaW1hbCB9IDoge30pLFxuICAgIC4uLihtb3ZlLmNhcHR1cmVzUGllY2VJZCA/IHsgY2FwdHVyZXNQaWVjZUlkOiBtb3ZlLmNhcHR1cmVzUGllY2VJZCB9IDoge30pLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzaWduQ2hlc3NpbWFsc0dhbWUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IHJlc2lnbmVkU3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUgPSB7XG4gICAgLi4uc3RhdGUsXG4gICAgc3RhdHVzOiAnZmluaXNoZWQnLFxuICAgIHdpbm5lcjogb3RoZXJDb2xvcihjb2xvciksXG4gICAgd2lubmVyUmVhc29uOiAncmVzaWduYXRpb24nLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgLi4ucmVzaWduZWRTdGF0ZSxcbiAgICBtb3ZlSGlzdG9yeTogW1xuICAgICAgLi4uZW5zdXJlTW92ZUhpc3Rvcnkoc3RhdGUpLFxuICAgICAgY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShyZXNpZ25lZFN0YXRlKSxcbiAgICBdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9zaXRpb25LZXkocG9zaXRpb246IENoZXNzaW1hbHNQb3NpdGlvbik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtwb3NpdGlvbi5yb3d9OiR7cG9zaXRpb24uY29sfWA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhcmRzKCkge1xuICByZXR1cm4gQU5JTUFMUy5yZWR1Y2UoXG4gICAgKGNhcmRzLCB0eXBlKSA9PiAoe1xuICAgICAgLi4uY2FyZHMsXG4gICAgICBbdHlwZV06IHsgdHlwZSwgdXNlZDogZmFsc2UgfSxcbiAgICB9KSxcbiAgICB7fSBhcyBSZWNvcmQ8Q2hlc3NpbWFsc0FuaW1hbFR5cGUsIHsgdHlwZTogQ2hlc3NpbWFsc0FuaW1hbFR5cGU7IHVzZWQ6IGJvb2xlYW4gfT4sXG4gICk7XG59XG5cbmZ1bmN0aW9uIGFjdGl2ZVBpZWNlcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IENoZXNzaW1hbHNQaWVjZVtdIHtcbiAgcmV0dXJuIHN0YXRlLnBpZWNlcy5maWx0ZXIoKHBpZWNlKTogcGllY2UgaXMgQ2hlc3NpbWFsc1BpZWNlID0+ICEhcGllY2UpO1xufVxuXG5mdW5jdGlvbiBnZXRCYXNpY01vdmVzKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCBwaWVjZTogQ2hlc3NpbWFsc1BpZWNlKTogQ2hlc3NpbWFsc01vdmVbXSB7XG4gIGNvbnN0IGRpcmVjdGlvbiA9IHBpZWNlLmNvbG9yID09PSAnd2hpdGUnID8gLTEgOiAxO1xuICBjb25zdCBtb3ZlczogQ2hlc3NpbWFsc01vdmVbXSA9IFtdO1xuICBjb25zdCBmb3J3YXJkID0geyByb3c6IHBpZWNlLnBvc2l0aW9uLnJvdyArIGRpcmVjdGlvbiwgY29sOiBwaWVjZS5wb3NpdGlvbi5jb2wgfTtcblxuICBpZiAoaXNJbnNpZGVCb2FyZChzdGF0ZS5ib2FyZFNpemUsIGZvcndhcmQpICYmICFnZXRDaGVzc2ltYWxzUGllY2VBdChzdGF0ZSwgZm9yd2FyZCkpIHtcbiAgICBtb3Zlcy5wdXNoKHtcbiAgICAgIHBpZWNlSWQ6IHBpZWNlLmlkLFxuICAgICAgZnJvbTogeyAuLi5waWVjZS5wb3NpdGlvbiB9LFxuICAgICAgdG86IGZvcndhcmQsXG4gICAgICBraW5kOiAnYmFzaWMnLFxuICAgIH0pO1xuICB9XG5cbiAgZm9yIChjb25zdCBjb2xPZmZzZXQgb2YgWy0xLCAxXSkge1xuICAgIGNvbnN0IHRhcmdldCA9IHsgcm93OiBwaWVjZS5wb3NpdGlvbi5yb3cgKyBkaXJlY3Rpb24sIGNvbDogcGllY2UucG9zaXRpb24uY29sICsgY29sT2Zmc2V0IH07XG4gICAgY29uc3QgdGFyZ2V0UGllY2UgPSBnZXRDaGVzc2ltYWxzUGllY2VBdChzdGF0ZSwgdGFyZ2V0KTtcbiAgICBpZiAoXG4gICAgICBpc0luc2lkZUJvYXJkKHN0YXRlLmJvYXJkU2l6ZSwgdGFyZ2V0KSAmJlxuICAgICAgdGFyZ2V0UGllY2UgJiZcbiAgICAgIHRhcmdldFBpZWNlLmNvbG9yICE9PSBwaWVjZS5jb2xvciAmJlxuICAgICAgIWlzUHJvbW90aW9uUm93KHN0YXRlLmJvYXJkU2l6ZSwgcGllY2UuY29sb3IsIHRhcmdldClcbiAgICApIHtcbiAgICAgIG1vdmVzLnB1c2goe1xuICAgICAgICBwaWVjZUlkOiBwaWVjZS5pZCxcbiAgICAgICAgZnJvbTogeyAuLi5waWVjZS5wb3NpdGlvbiB9LFxuICAgICAgICB0bzogdGFyZ2V0LFxuICAgICAgICBraW5kOiAnYmFzaWMnLFxuICAgICAgICBjYXB0dXJlc1BpZWNlSWQ6IHRhcmdldFBpZWNlLmlkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1vdmVzO1xufVxuXG5mdW5jdGlvbiBnZXRQb3dlck1vdmVzKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgcGllY2U6IENoZXNzaW1hbHNQaWVjZSxcbiAgYW5pbWFsOiBDaGVzc2ltYWxzQW5pbWFsVHlwZSxcbik6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBpZiAoYW5pbWFsID09PSAna2FuZ2Fyb28nKSB7XG4gICAgcmV0dXJuIGdldEthbmdhcm9vTW92ZXMoc3RhdGUsIHBpZWNlKTtcbiAgfVxuXG4gIGNvbnN0IGRpcmVjdGlvbnMgPSBnZXRQb3dlckRpcmVjdGlvbnMoYW5pbWFsKTtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGRpcmVjdGlvbiBvZiBkaXJlY3Rpb25zKSB7XG4gICAgZm9yIChsZXQgZGlzdGFuY2UgPSAxOyBkaXN0YW5jZSA8PSAzOyBkaXN0YW5jZSArPSAxKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB7XG4gICAgICAgIHJvdzogcGllY2UucG9zaXRpb24ucm93ICsgZGlyZWN0aW9uLnJvdyAqIGRpc3RhbmNlLFxuICAgICAgICBjb2w6IHBpZWNlLnBvc2l0aW9uLmNvbCArIGRpcmVjdGlvbi5jb2wgKiBkaXN0YW5jZSxcbiAgICAgIH07XG4gICAgICBpZiAoIWlzSW5zaWRlQm9hcmQoc3RhdGUuYm9hcmRTaXplLCB0YXJnZXQpKSBicmVhaztcbiAgICAgIGlmIChpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIHBpZWNlLmNvbG9yLCB0YXJnZXQpKSBicmVhaztcblxuICAgICAgY29uc3QgdGFyZ2V0UGllY2UgPSBnZXRDaGVzc2ltYWxzUGllY2VBdChzdGF0ZSwgdGFyZ2V0KTtcbiAgICAgIGlmICh0YXJnZXRQaWVjZT8uY29sb3IgPT09IHBpZWNlLmNvbG9yKSBicmVhaztcblxuICAgICAgbW92ZXMucHVzaCh7XG4gICAgICAgIHBpZWNlSWQ6IHBpZWNlLmlkLFxuICAgICAgICBmcm9tOiB7IC4uLnBpZWNlLnBvc2l0aW9uIH0sXG4gICAgICAgIHRvOiB0YXJnZXQsXG4gICAgICAgIGtpbmQ6ICdwb3dlcicsXG4gICAgICAgIGFuaW1hbCxcbiAgICAgICAgLi4uKHRhcmdldFBpZWNlID8geyBjYXB0dXJlc1BpZWNlSWQ6IHRhcmdldFBpZWNlLmlkIH0gOiB7fSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKHRhcmdldFBpZWNlKSBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW92ZXM7XG59XG5cbmZ1bmN0aW9uIGdldEthbmdhcm9vTW92ZXMoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIHBpZWNlOiBDaGVzc2ltYWxzUGllY2UpOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcbiAgY29uc3QganVtcHMgPSBbXG4gICAgeyByb3c6IC0yLCBjb2w6IC0xIH0sXG4gICAgeyByb3c6IC0yLCBjb2w6IDEgfSxcbiAgICB7IHJvdzogLTEsIGNvbDogLTIgfSxcbiAgICB7IHJvdzogLTEsIGNvbDogMiB9LFxuICAgIHsgcm93OiAxLCBjb2w6IC0yIH0sXG4gICAgeyByb3c6IDEsIGNvbDogMiB9LFxuICAgIHsgcm93OiAyLCBjb2w6IC0xIH0sXG4gICAgeyByb3c6IDIsIGNvbDogMSB9LFxuICBdO1xuXG4gIGZvciAoY29uc3QganVtcCBvZiBqdW1wcykge1xuICAgIGNvbnN0IHRhcmdldCA9IHtcbiAgICAgIHJvdzogcGllY2UucG9zaXRpb24ucm93ICsganVtcC5yb3csXG4gICAgICBjb2w6IHBpZWNlLnBvc2l0aW9uLmNvbCArIGp1bXAuY29sLFxuICAgIH07XG4gICAgaWYgKCFpc0luc2lkZUJvYXJkKHN0YXRlLmJvYXJkU2l6ZSwgdGFyZ2V0KSkgY29udGludWU7XG4gICAgaWYgKGlzUHJvbW90aW9uUm93KHN0YXRlLmJvYXJkU2l6ZSwgcGllY2UuY29sb3IsIHRhcmdldCkpIGNvbnRpbnVlO1xuXG4gICAgY29uc3QgdGFyZ2V0UGllY2UgPSBnZXRDaGVzc2ltYWxzUGllY2VBdChzdGF0ZSwgdGFyZ2V0KTtcbiAgICBpZiAodGFyZ2V0UGllY2U/LmNvbG9yID09PSBwaWVjZS5jb2xvcikgY29udGludWU7XG5cbiAgICBtb3Zlcy5wdXNoKHtcbiAgICAgIHBpZWNlSWQ6IHBpZWNlLmlkLFxuICAgICAgZnJvbTogeyAuLi5waWVjZS5wb3NpdGlvbiB9LFxuICAgICAgdG86IHRhcmdldCxcbiAgICAgIGtpbmQ6ICdwb3dlcicsXG4gICAgICBhbmltYWw6ICdrYW5nYXJvbycsXG4gICAgICAuLi4odGFyZ2V0UGllY2UgPyB7IGNhcHR1cmVzUGllY2VJZDogdGFyZ2V0UGllY2UuaWQgfSA6IHt9KSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZnVuY3Rpb24gc2NvcmVCb3RNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIGRpZmZpY3VsdHk6IENoZXNzaW1hbHNCb3REaWZmaWN1bHR5LFxuICBzdHlsZTogQ2hlc3NpbWFsc0JvdFN0eWxlLFxuKTogbnVtYmVyIHtcbiAgY29uc3QgY29sb3IgPSBzdGF0ZS5jdXJyZW50VHVybjtcbiAgY29uc3QgdGFyZ2V0UGllY2UgPSBtb3ZlLmNhcHR1cmVzUGllY2VJZFxuICAgID8gYWN0aXZlUGllY2VzKHN0YXRlKS5maW5kKChwaWVjZSkgPT4gcGllY2UuaWQgPT09IG1vdmUuY2FwdHVyZXNQaWVjZUlkKVxuICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBhZHZhbmNlbWVudCA9XG4gICAgY29sb3IgPT09ICd3aGl0ZScgPyBzdGF0ZS5ib2FyZFNpemUgLSAxIC0gbW92ZS50by5yb3cgOiBtb3ZlLnRvLnJvdztcbiAgbGV0IHNjb3JlID0gYWR2YW5jZW1lbnQgKiAyNCAqIHN0eWxlLmFkdmFuY2VtZW50O1xuXG4gIGlmIChtb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBjb2xvciwgbW92ZS50bykpIHtcbiAgICBzY29yZSArPSAxMDAwMDtcbiAgfVxuICBpZiAodGFyZ2V0UGllY2UpIHtcbiAgICBzY29yZSArPSA1MjAgKiBzdHlsZS5jYXB0dXJlO1xuICAgIGNvbnN0IHRhcmdldEFkdmFuY2VtZW50ID1cbiAgICAgIHRhcmdldFBpZWNlLmNvbG9yID09PSAnd2hpdGUnXG4gICAgICAgID8gc3RhdGUuYm9hcmRTaXplIC0gMSAtIHRhcmdldFBpZWNlLnBvc2l0aW9uLnJvd1xuICAgICAgICA6IHRhcmdldFBpZWNlLnBvc2l0aW9uLnJvdztcbiAgICBzY29yZSArPSB0YXJnZXRBZHZhbmNlbWVudCAqIDE2ICogc3R5bGUuY2FwdHVyZTtcbiAgfVxuICBpZiAobW92ZS5raW5kID09PSAncG93ZXInKSB7XG4gICAgc2NvcmUgKz0gKHRhcmdldFBpZWNlID8gMTIwIDogZGlmZmljdWx0eSA9PT0gJ2hhcmQnID8gLTYwIDogLTMwKSAqIHN0eWxlLnBvd2VyO1xuICB9XG4gIGlmIChtb3ZlLmFuaW1hbCA9PT0gJ2xpb24nKSBzY29yZSAtPSAyMCAqIHN0eWxlLnBvd2VyO1xuICBpZiAobW92ZS5hbmltYWwgPT09ICdrYW5nYXJvbycpIHNjb3JlICs9IDE0ICogc3R5bGUucG93ZXI7XG4gIGlmICh3b3VsZFVubG9ja1Bvd2VyKHN0YXRlLCBjb2xvciwgbW92ZS50bykpIHNjb3JlICs9IDkwICogc3R5bGUudW5sb2NrO1xuICBpZiAoZGlmZmljdWx0eSA9PT0gJ2hhcmQnICYmIGlzU3F1YXJlVnVsbmVyYWJsZUFmdGVyTW92ZShzdGF0ZSwgbW92ZSkpIHtcbiAgICBzY29yZSAtPSAodGFyZ2V0UGllY2UgPyA4MCA6IDE0MCkgKiBzdHlsZS5zYWZldHk7XG4gIH1cbiAgc2NvcmUgKz0gKE1hdGgucmFuZG9tKCkgLSAwLjUpICogc3R5bGUucmFuZG9tbmVzcztcblxuICByZXR1cm4gc2NvcmU7XG59XG5cbmZ1bmN0aW9uIHNjb3JlQm90TW92ZVdpdGhMb29rYWhlYWQoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgZGlmZmljdWx0eTogQ2hlc3NpbWFsc0JvdERpZmZpY3VsdHksXG4gIHN0eWxlOiBDaGVzc2ltYWxzQm90U3R5bGUsXG4pOiBudW1iZXIge1xuICBsZXQgc2NvcmUgPSBzY29yZUJvdE1vdmUoc3RhdGUsIG1vdmUsIGRpZmZpY3VsdHksIHN0eWxlKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGFmdGVyTW92ZSA9IGFwcGx5Q2hlc3NpbWFsc01vdmUoc3RhdGUsIG1vdmUpO1xuICAgIGlmIChhZnRlck1vdmUuc3RhdHVzID09PSAnZmluaXNoZWQnKSByZXR1cm4gc2NvcmUgKyA1MDAwO1xuXG4gICAgY29uc3Qgb3Bwb25lbnRNb3ZlcyA9IGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKGFmdGVyTW92ZSk7XG4gICAgY29uc3Qgb3Bwb25lbnRJbW1lZGlhdGVXaW4gPSBvcHBvbmVudE1vdmVzLnNvbWUoXG4gICAgICAob3Bwb25lbnRNb3ZlKSA9PlxuICAgICAgICBvcHBvbmVudE1vdmUua2luZCA9PT0gJ2Jhc2ljJyAmJlxuICAgICAgICBpc1Byb21vdGlvblJvdyhhZnRlck1vdmUuYm9hcmRTaXplLCBhZnRlck1vdmUuY3VycmVudFR1cm4sIG9wcG9uZW50TW92ZS50byksXG4gICAgKTtcbiAgICBpZiAob3Bwb25lbnRJbW1lZGlhdGVXaW4pIHtcbiAgICAgIHNjb3JlIC09IChkaWZmaWN1bHR5ID09PSAnZWFzeScgPyAxODAwIDogZGlmZmljdWx0eSA9PT0gJ25vcm1hbCcgPyA1MjAwIDogODAwMCkgKiBzdHlsZS5zYWZldHk7XG4gICAgfVxuXG4gICAgY29uc3QgbW92ZWRQaWVjZSA9IGFmdGVyTW92ZS5waWVjZXMuZmluZCgocGllY2UpID0+IHBpZWNlLmlkID09PSBtb3ZlLnBpZWNlSWQgJiYgIXBpZWNlLmNhcHR1cmVkKTtcbiAgICBpZiAobW92ZWRQaWVjZSkge1xuICAgICAgY29uc3QgY2FuQ2FwdHVyZU1vdmVkUGllY2UgPSBvcHBvbmVudE1vdmVzLnNvbWUoKG9wcG9uZW50TW92ZSkgPT4gb3Bwb25lbnRNb3ZlLmNhcHR1cmVzUGllY2VJZCA9PT0gbW92ZS5waWVjZUlkKTtcbiAgICAgIGlmIChjYW5DYXB0dXJlTW92ZWRQaWVjZSkge1xuICAgICAgICBzY29yZSAtPSAobW92ZS5jYXB0dXJlc1BpZWNlSWQgPyAxODAgOiBkaWZmaWN1bHR5ID09PSAnZWFzeScgPyAxMjAgOiBkaWZmaWN1bHR5ID09PSAnbm9ybWFsJyA/IDM2MCA6IDU2MClcbiAgICAgICAgICAqIHN0eWxlLnNhZmV0eTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2VudGVyID0gKGFmdGVyTW92ZS5ib2FyZFNpemUgLSAxKSAvIDI7XG4gICAgICBjb25zdCBjZW50ZXJDb250cm9sID0gTWF0aC5tYXgoMCwgYWZ0ZXJNb3ZlLmJvYXJkU2l6ZSAvIDIgLSBNYXRoLmFicyhtb3ZlZFBpZWNlLnBvc2l0aW9uLmNvbCAtIGNlbnRlcikpO1xuICAgICAgc2NvcmUgKz0gY2VudGVyQ29udHJvbCAqIChkaWZmaWN1bHR5ID09PSAnaGFyZCcgPyAxOCA6IDEwKSAqIHN0eWxlLmNlbnRlcjtcbiAgICB9XG5cbiAgICBjb25zdCBvcHBvbmVudEJlc3RSZXBseSA9IG9wcG9uZW50TW92ZXNcbiAgICAgIC5tYXAoKG9wcG9uZW50TW92ZSkgPT4gc2NvcmVCb3RNb3ZlKGFmdGVyTW92ZSwgb3Bwb25lbnRNb3ZlLCBkaWZmaWN1bHR5LCBzdHlsZSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYiAtIGEpWzBdO1xuXG4gICAgaWYgKG9wcG9uZW50QmVzdFJlcGx5KSB7XG4gICAgICBjb25zdCByZXBseVdlaWdodCA9IGRpZmZpY3VsdHkgPT09ICdlYXN5JyA/IDAuMTIgOiBkaWZmaWN1bHR5ID09PSAnbm9ybWFsJyA/IDAuMzIgOiAwLjQ4O1xuICAgICAgc2NvcmUgLT0gb3Bwb25lbnRCZXN0UmVwbHkgKiByZXBseVdlaWdodCAqIHN0eWxlLnJlcGx5O1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgc2NvcmUgLT0gMTAwMDtcbiAgfVxuXG4gIHJldHVybiBzY29yZTtcbn1cblxuZnVuY3Rpb24gY2hvb3NlQ29uc2VydmF0aXZlSGFyZENhcHR1cmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBzY29yZWQ6IHsgbW92ZTogQ2hlc3NpbWFsc01vdmU7IHNjb3JlOiBudW1iZXIgfVtdLFxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBpZiAoc3RhdGUuYm9hcmRTaXplICE9PSA4KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJlc3QgPSBzY29yZWRbMF07XG4gIGlmICghYmVzdCB8fCBiZXN0Lm1vdmUua2luZCAhPT0gJ3Bvd2VyJyB8fCAhYmVzdC5tb3ZlLmNhcHR1cmVzUGllY2VJZCB8fCBiZXN0LnNjb3JlID49IDEwMDAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGJlc3RCYXNpY0NhcHR1cmUgPSBzY29yZWQuZmluZCgoaXRlbSkgPT4gaXRlbS5tb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXRlbS5tb3ZlLmNhcHR1cmVzUGllY2VJZCk7XG4gIGlmICghYmVzdEJhc2ljQ2FwdHVyZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICByZXR1cm4gYmVzdC5zY29yZSAtIGJlc3RCYXNpY0NhcHR1cmUuc2NvcmUgPD0gNjUwID8gYmVzdEJhc2ljQ2FwdHVyZS5tb3ZlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBwaWNrTm9pc3lCb3RNb3ZlKFxuICBzY29yZWQ6IEFycmF5PHsgbW92ZTogQ2hlc3NpbWFsc01vdmU7IHNjb3JlOiBudW1iZXIgfT4sXG4gIHNwcmVhZDogbnVtYmVyLFxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBpZiAoc2NvcmVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcG9vbFNpemUgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoc2NvcmVkLmxlbmd0aCAqIHNwcmVhZCkpO1xuICBjb25zdCBwb29sID0gc2NvcmVkLnNsaWNlKDAsIHBvb2xTaXplKTtcbiAgY29uc3QgdG9wU2NvcmUgPSBwb29sWzBdPy5zY29yZSA/PyAwO1xuICBjb25zdCB3ZWlnaHRlZCA9IHBvb2wubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHJlbGF0aXZlID0gTWF0aC5tYXgoMCwgaXRlbS5zY29yZSAtIHRvcFNjb3JlICsgMTIwMCk7XG4gICAgY29uc3Qgd2VpZ2h0ID0gTWF0aC5tYXgoMSwgcmVsYXRpdmUgLyAxMjAgKyAocG9vbC5sZW5ndGggLSBpbmRleCkgKiAyKTtcbiAgICByZXR1cm4geyAuLi5pdGVtLCB3ZWlnaHQgfTtcbiAgfSk7XG4gIGNvbnN0IHRvdGFsV2VpZ2h0ID0gd2VpZ2h0ZWQucmVkdWNlKCh0b3RhbCwgaXRlbSkgPT4gdG90YWwgKyBpdGVtLndlaWdodCwgMCk7XG4gIGxldCBjdXJzb3IgPSBNYXRoLnJhbmRvbSgpICogdG90YWxXZWlnaHQ7XG4gIGZvciAoY29uc3QgaXRlbSBvZiB3ZWlnaHRlZCkge1xuICAgIGN1cnNvciAtPSBpdGVtLndlaWdodDtcbiAgICBpZiAoY3Vyc29yIDw9IDApIHJldHVybiBpdGVtLm1vdmU7XG4gIH1cbiAgcmV0dXJuIHBvb2xbMF0/Lm1vdmU7XG59XG5cbmZ1bmN0aW9uIGdldEltbWVkaWF0ZVdpbm5pbmdNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgcmV0dXJuIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKHN0YXRlLCBjb2xvcikuZmlsdGVyKFxuICAgIChtb3ZlKSA9PiBtb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBjb2xvciwgbW92ZS50byksXG4gICk7XG59XG5cbmZ1bmN0aW9uIHdvdWxkVW5sb2NrUG93ZXIoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uLFxuKTogYm9vbGVhbiB7XG4gIGlmIChzdGF0ZS5wbGF5ZXJzW2NvbG9yXS5wb3dlclVubG9ja2VkKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNlbnRlclRvcCA9IHN0YXRlLmJvYXJkU2l6ZSAvIDIgLSAxO1xuICBjb25zdCBjZW50ZXJCb3R0b20gPSBzdGF0ZS5ib2FyZFNpemUgLyAyO1xuICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyBwb3NpdGlvbi5yb3cgPD0gY2VudGVyVG9wIDogcG9zaXRpb24ucm93ID49IGNlbnRlckJvdHRvbTtcbn1cblxuZnVuY3Rpb24gaXNTcXVhcmVWdWxuZXJhYmxlQWZ0ZXJNb3ZlKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCBtb3ZlOiBDaGVzc2ltYWxzTW92ZSk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IGFmdGVyTW92ZSA9IGFwcGx5Q2hlc3NpbWFsc01vdmUoc3RhdGUsIG1vdmUpO1xuICAgIGlmIChhZnRlck1vdmUuc3RhdHVzID09PSAnZmluaXNoZWQnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKGFmdGVyTW92ZSkuc29tZSgoZW5lbXlNb3ZlKSA9PlxuICAgICAgc2FtZVBvc2l0aW9uKGVuZW15TW92ZS50bywgbW92ZS50bykgJiYgISFlbmVteU1vdmUuY2FwdHVyZXNQaWVjZUlkLFxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQb3dlckRpcmVjdGlvbnMoYW5pbWFsOiBDaGVzc2ltYWxzQW5pbWFsVHlwZSk6IENoZXNzaW1hbHNQb3NpdGlvbltdIHtcbiAgaWYgKGFuaW1hbCA9PT0gJ2VhZ2xlJykge1xuICAgIHJldHVybiBbXG4gICAgICB7IHJvdzogLTEsIGNvbDogLTEgfSxcbiAgICAgIHsgcm93OiAtMSwgY29sOiAxIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IDEsIGNvbDogMSB9LFxuICAgIF07XG4gIH1cbiAgaWYgKGFuaW1hbCA9PT0gJ2J1bGwnKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgcm93OiAtMSwgY29sOiAwIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAwIH0sXG4gICAgICB7IHJvdzogMCwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IDAsIGNvbDogMSB9LFxuICAgIF07XG4gIH1cbiAgcmV0dXJuIFtcbiAgICB7IHJvdzogLTEsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogLTEsIGNvbDogMCB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAxIH0sXG4gICAgeyByb3c6IDAsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMCwgY29sOiAxIH0sXG4gICAgeyByb3c6IDEsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMSwgY29sOiAwIH0sXG4gICAgeyByb3c6IDEsIGNvbDogMSB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiByZWZyZXNoQ2hlc3NpbWFsc1Bvd2VyVW5sb2NrcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHBsYXllcnM6IHtcbiAgICAgIHdoaXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLnBsYXllcnMud2hpdGUsXG4gICAgICAgIHBvd2VyVW5sb2NrZWQ6XG4gICAgICAgICAgc3RhdGUucGxheWVycy53aGl0ZS5wb3dlclVubG9ja2VkIHx8XG4gICAgICAgICAgaGFzQ3Jvc3NlZENlbnRlcihzdGF0ZSwgJ3doaXRlJykgfHxcbiAgICAgICAgICBoYXNFbmVteUVudGVyZWRIb21lKHN0YXRlLCAnd2hpdGUnKSxcbiAgICAgIH0sXG4gICAgICBibGFjazoge1xuICAgICAgICAuLi5zdGF0ZS5wbGF5ZXJzLmJsYWNrLFxuICAgICAgICBwb3dlclVubG9ja2VkOlxuICAgICAgICAgIHN0YXRlLnBsYXllcnMuYmxhY2sucG93ZXJVbmxvY2tlZCB8fFxuICAgICAgICAgIGhhc0Nyb3NzZWRDZW50ZXIoc3RhdGUsICdibGFjaycpIHx8XG4gICAgICAgICAgaGFzRW5lbXlFbnRlcmVkSG9tZShzdGF0ZSwgJ2JsYWNrJyksXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc0Nyb3NzZWRDZW50ZXIoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IpOiBib29sZWFuIHtcbiAgY29uc3QgY2VudGVyVG9wID0gc3RhdGUuYm9hcmRTaXplIC8gMiAtIDE7XG4gIGNvbnN0IGNlbnRlckJvdHRvbSA9IHN0YXRlLmJvYXJkU2l6ZSAvIDI7XG4gIHJldHVybiBhY3RpdmVQaWVjZXMoc3RhdGUpLnNvbWUoKHBpZWNlKSA9PiB7XG4gICAgaWYgKHBpZWNlLmNvbG9yICE9PSBjb2xvciB8fCBwaWVjZS5jYXB0dXJlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/IHBpZWNlLnBvc2l0aW9uLnJvdyA8PSBjZW50ZXJUb3AgOiBwaWVjZS5wb3NpdGlvbi5yb3cgPj0gY2VudGVyQm90dG9tO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFzRW5lbXlFbnRlcmVkSG9tZShzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcik6IGJvb2xlYW4ge1xuICBjb25zdCBjZW50ZXJUb3AgPSBzdGF0ZS5ib2FyZFNpemUgLyAyIC0gMTtcbiAgY29uc3QgY2VudGVyQm90dG9tID0gc3RhdGUuYm9hcmRTaXplIC8gMjtcbiAgY29uc3QgZW5lbXkgPSBvdGhlckNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGFjdGl2ZVBpZWNlcyhzdGF0ZSkuc29tZSgocGllY2UpID0+IHtcbiAgICBpZiAocGllY2UuY29sb3IgIT09IGVuZW15IHx8IHBpZWNlLmNhcHR1cmVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gcGllY2UucG9zaXRpb24ucm93ID49IGNlbnRlckJvdHRvbSA6IHBpZWNlLnBvc2l0aW9uLnJvdyA8PSBjZW50ZXJUb3A7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1Byb21vdGlvblJvdyhcbiAgYm9hcmRTaXplOiBDaGVzc2ltYWxzQm9hcmRTaXplLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/IHBvc2l0aW9uLnJvdyA9PT0gMCA6IHBvc2l0aW9uLnJvdyA9PT0gYm9hcmRTaXplIC0gMTtcbn1cblxuZnVuY3Rpb24gaXNJbnNpZGVCb2FyZChib2FyZFNpemU6IENoZXNzaW1hbHNCb2FyZFNpemUsIHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBwb3NpdGlvbi5yb3cgPj0gMCAmJiBwb3NpdGlvbi5yb3cgPCBib2FyZFNpemUgJiYgcG9zaXRpb24uY29sID49IDAgJiYgcG9zaXRpb24uY29sIDwgYm9hcmRTaXplXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNhbWVQb3NpdGlvbihhOiBDaGVzc2ltYWxzUG9zaXRpb24sIGI6IENoZXNzaW1hbHNQb3NpdGlvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gYS5yb3cgPT09IGIucm93ICYmIGEuY29sID09PSBiLmNvbDtcbn1cblxuZnVuY3Rpb24gb3RoZXJDb2xvcihjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yKTogQ2hlc3NpbWFsc1BsYXllckNvbG9yIHtcbiAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gJ2JsYWNrJyA6ICd3aGl0ZSc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvY2FsSWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2NhbC0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDgpfWA7XG59XG4iXX0=
|
|
728
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1lbmdpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21pbmktZ2FtZXMvY2hlc3NpbWFscy1lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE1BQU0sT0FBTyxHQUEyQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBaUI5RSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBMkI7SUFDN0Q7UUFDRSxFQUFFLEVBQUUsVUFBVTtRQUNkLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxjQUFjLEVBQUUsMkJBQTJCO0tBQzVDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsV0FBVztRQUNmLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxHQUFHO1FBQ1gsUUFBUSxFQUFFLHdCQUF3QjtRQUNsQyxjQUFjLEVBQUUsNEJBQTRCO0tBQzdDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsUUFBUTtRQUNaLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHFCQUFxQjtRQUMvQixjQUFjLEVBQUUseUJBQXlCO0tBQzFDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsUUFBUTtRQUNaLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLE1BQU0sRUFBRSxJQUFJO1FBQ1osUUFBUSxFQUFFLHFCQUFxQjtRQUMvQixjQUFjLEVBQUUseUJBQXlCO0tBQzFDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsVUFBVTtRQUNkLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsUUFBUSxFQUFFLHVCQUF1QjtRQUNqQyxjQUFjLEVBQUUsMkJBQTJCO0tBQzVDO0lBQ0Q7UUFDRSxFQUFFLEVBQUUsUUFBUTtRQUNa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RSxHQUFHLEVBQUU7SUFDekwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUU7SUFDckwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDcEwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDckwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDckwsVUFBVSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDekwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDckwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDdkwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDMUwsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDbkwsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDekwsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDM0wsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUU7SUFDeEwsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUU7SUFDekwsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJ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QUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hlc3NpbWFsc0FuaW1hbFR5cGUsXG4gIENoZXNzaW1hbHNCb3REaWZmaWN1bHR5LFxuICBDaGVzc2ltYWxzQm90UHJvZmlsZSxcbiAgQ2hlc3NpbWFsc0JvdFByb2ZpbGVJZCxcbiAgQ2hlc3NpbWFsc0JvYXJkU2l6ZSxcbiAgQ2hlc3NpbWFsc0dhbWVNb2RlLFxuICBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBDaGVzc2ltYWxzR2FtZVN0YXR1cyxcbiAgQ2hlc3NpbWFsc01vdmUsXG4gIENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5LFxuICBDaGVzc2ltYWxzT25saW5lU3RhdGUsXG4gIENoZXNzaW1hbHNQaWVjZSxcbiAgQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBDaGVzc2ltYWxzUG9zaXRpb24sXG59IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBBTklNQUxTOiBDaGVzc2ltYWxzQW5pbWFsVHlwZVtdID0gWydlYWdsZScsICdidWxsJywgJ2thbmdhcm9vJywgJ2xpb24nXTtcblxuaW50ZXJmYWNlIENoZXNzaW1hbHNCb3RTdHlsZSB7XG4gIGFkdmFuY2VtZW50OiBudW1iZXI7XG4gIGNhcHR1cmU6IG51bWJlcjtcbiAgc2FmZXR5OiBudW1iZXI7XG4gIHBvd2VyOiBudW1iZXI7XG4gIGNlbnRlcjogbnVtYmVyO1xuICB1bmxvY2s6IG51bWJlcjtcbiAgcmVwbHk6IG51bWJlcjtcbiAgcmFuZG9tbmVzczogbnVtYmVyO1xuICBzcHJlYWQ6IG51bWJlcjtcbiAgbW9iaWxpdHk6IG51bWJlcjtcbiAgdHJhcDogbnVtYmVyO1xuICBlbmRnYW1lOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBDSEVTU0lNQUxTX0JPVF9QUk9GSUxFUzogQ2hlc3NpbWFsc0JvdFByb2ZpbGVbXSA9IFtcbiAge1xuICAgIGlkOiAnZXhwbG9yZXInLFxuICAgIGRpZmZpY3VsdHk6ICdlYXN5JyxcbiAgICBhdmF0YXI6ICfwn6etJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RFeHBsb3JlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90RXhwbG9yZXJCb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnaW1wdWxzaXZlJyxcbiAgICBkaWZmaWN1bHR5OiAnZWFzeScsXG4gICAgYXZhdGFyOiAn4pqhJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RJbXB1bHNpdmUnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdEltcHVsc2l2ZUJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdydW5uZXInLFxuICAgIGRpZmZpY3VsdHk6ICdlYXN5JyxcbiAgICBhdmF0YXI6ICfwn4+BJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RSdW5uZXInLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFJ1bm5lckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdodW50ZXInLFxuICAgIGRpZmZpY3VsdHk6ICdub3JtYWwnLFxuICAgIGF2YXRhcjogJ/Cfjq8nLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEh1bnRlcicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90SHVudGVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2d1YXJkaWFuJyxcbiAgICBkaWZmaWN1bHR5OiAnbm9ybWFsJyxcbiAgICBhdmF0YXI6ICfwn5uh77iPJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RHdWFyZGlhbicsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90R3VhcmRpYW5Cb2R5JyxcbiAgfSxcbiAge1xuICAgIGlkOiAnanVtcGVyJyxcbiAgICBkaWZmaWN1bHR5OiAnbm9ybWFsJyxcbiAgICBhdmF0YXI6ICfwn6aYJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RKdW1wZXInLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdEp1bXBlckJvZHknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdzdHJhdGVnaXN0JyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn4pmf77iPJyxcbiAgICBsYWJlbEtleTogJ2NoZXNzaW1hbHNCb3RTdHJhdGVnaXN0JyxcbiAgICBkZXNjcmlwdGlvbktleTogJ2NoZXNzaW1hbHNCb3RTdHJhdGVnaXN0Qm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3ByZWRhdG9yJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+mgScsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90UHJlZGF0b3InLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFByZWRhdG9yQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3NwcmludGVyJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+agCcsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90U3ByaW50ZXInLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFNwcmludGVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3NlbnRpbmVsJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+PsCcsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90U2VudGluZWwnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFNlbnRpbmVsQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ29yYWNsZScsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CflK4nLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdE9yYWNsZScsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90T3JhY2xlQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2FtYnVzaGVyJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+qpCcsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90QW1idXNoZXInLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdEFtYnVzaGVyQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2xvY2tzbWl0aCcsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CflJAnLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdExvY2tzbWl0aCcsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90TG9ja3NtaXRoQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3N0b3JtJyxcbiAgICBkaWZmaWN1bHR5OiAnaGFyZCcsXG4gICAgYXZhdGFyOiAn8J+Mqe+4jycsXG4gICAgbGFiZWxLZXk6ICdjaGVzc2ltYWxzQm90U3Rvcm0nLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdFN0b3JtQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ21hdHJpYXJjaCcsXG4gICAgZGlmZmljdWx0eTogJ2hhcmQnLFxuICAgIGF2YXRhcjogJ/CfkZEnLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdE1hdHJpYXJjaCcsXG4gICAgZGVzY3JpcHRpb25LZXk6ICdjaGVzc2ltYWxzQm90TWF0cmlhcmNoQm9keScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2VuZGdhbWUnLFxuICAgIGRpZmZpY3VsdHk6ICdoYXJkJyxcbiAgICBhdmF0YXI6ICfijJsnLFxuICAgIGxhYmVsS2V5OiAnY2hlc3NpbWFsc0JvdEVuZGdhbWUnLFxuICAgIGRlc2NyaXB0aW9uS2V5OiAnY2hlc3NpbWFsc0JvdEVuZGdhbWVCb2R5JyxcbiAgfSxcbl07XG5cbmNvbnN0IEJPVF9TVFlMRVM6IFJlY29yZDxDaGVzc2ltYWxzQm90UHJvZmlsZUlkLCBDaGVzc2ltYWxzQm90U3R5bGU+ID0ge1xuICBleHBsb3JlcjogeyBhZHZhbmNlbWVudDogMS4wNSwgY2FwdHVyZTogMC44Miwgc2FmZXR5OiAwLjYyLCBwb3dlcjogMC44LCBjZW50ZXI6IDEuMTUsIHVubG9jazogMS4wNSwgcmVwbHk6IDAuNywgcmFuZG9tbmVzczogMjYwLCBzcHJlYWQ6IDAuNjgsIG1vYmlsaXR5OiAwLjc1LCB0cmFwOiAwLjUsIGVuZGdhbWU6IDAuNTUgfSxcbiAgaW1wdWxzaXZlOiB7IGFkdmFuY2VtZW50OiAwLjksIGNhcHR1cmU6IDEuNDUsIHNhZmV0eTogMC40OCwgcG93ZXI6IDEuMTUsIGNlbnRlcjogMC44LCB1bmxvY2s6IDAuOSwgcmVwbHk6IDAuNTUsIHJhbmRvbW5lc3M6IDI5MCwgc3ByZWFkOiAwLjYyLCBtb2JpbGl0eTogMC44NSwgdHJhcDogMC42MiwgZW5kZ2FtZTogMC41IH0sXG4gIHJ1bm5lcjogeyBhZHZhbmNlbWVudDogMS41NSwgY2FwdHVyZTogMC43OCwgc2FmZXR5OiAwLjUsIHBvd2VyOiAwLjk1LCBjZW50ZXI6IDAuNywgdW5sb2NrOiAxLjEsIHJlcGx5OiAwLjU1LCByYW5kb21uZXNzOiAyNTAsIHNwcmVhZDogMC42LCBtb2JpbGl0eTogMC43MiwgdHJhcDogMC40NSwgZW5kZ2FtZTogMS4xIH0sXG4gIGh1bnRlcjogeyBhZHZhbmNlbWVudDogMC45NSwgY2FwdHVyZTogMS40NSwgc2FmZXR5OiAwLjksIHBvd2VyOiAxLjA1LCBjZW50ZXI6IDAuOTUsIHVubG9jazogMC45NSwgcmVwbHk6IDEsIHJhbmRvbW5lc3M6IDkwLCBzcHJlYWQ6IDAuMywgbW9iaWxpdHk6IDAuOTUsIHRyYXA6IDAuODIsIGVuZGdhbWU6IDAuNzYgfSxcbiAgZ3VhcmRpYW46IHsgYWR2YW5jZW1lbnQ6IDAuODgsIGNhcHR1cmU6IDEsIHNhZmV0eTogMS40NSwgcG93ZXI6IDAuODUsIGNlbnRlcjogMS4wNSwgdW5sb2NrOiAxLCByZXBseTogMS4xNSwgcmFuZG9tbmVzczogNzAsIHNwcmVhZDogMC4yNiwgbW9iaWxpdHk6IDAuODIsIHRyYXA6IDAuNzIsIGVuZGdhbWU6IDAuNzIgfSxcbiAganVtcGVyOiB7IGFkdmFuY2VtZW50OiAxLjEyLCBjYXB0dXJlOiAxLCBzYWZldHk6IDAuOTIsIHBvd2VyOiAxLjQyLCBjZW50ZXI6IDEuMTgsIHVubG9jazogMS4wOCwgcmVwbHk6IDAuOTUsIHJhbmRvbW5lc3M6IDk1LCBzcHJlYWQ6IDAuMzIsIG1vYmlsaXR5OiAxLjE1LCB0cmFwOiAwLjksIGVuZGdhbWU6IDAuODIgfSxcbiAgc3RyYXRlZ2lzdDogeyBhZHZhbmNlbWVudDogMS4wNSwgY2FwdHVyZTogMS4wOCwgc2FmZXR5OiAxLjIyLCBwb3dlcjogMS4wOCwgY2VudGVyOiAxLjE2LCB1bmxvY2s6IDEuMSwgcmVwbHk6IDEuMjUsIHJhbmRvbW5lc3M6IDIyLCBzcHJlYWQ6IDAuMTQsIG1vYmlsaXR5OiAxLjA4LCB0cmFwOiAxLjA2LCBlbmRnYW1lOiAxIH0sXG4gIHByZWRhdG9yOiB7IGFkdmFuY2VtZW50OiAwLjk4LCBjYXB0dXJlOiAxLjY4LCBzYWZldHk6IDEuMDIsIHBvd2VyOiAxLjM0LCBjZW50ZXI6IDEsIHVubG9jazogMSwgcmVwbHk6IDEuMTIsIHJhbmRvbW5lc3M6IDI4LCBzcHJlYWQ6IDAuMTYsIG1vYmlsaXR5OiAxLjAyLCB0cmFwOiAxLjE4LCBlbmRnYW1lOiAwLjgyIH0sXG4gIHNwcmludGVyOiB7IGFkdmFuY2VtZW50OiAxLjcyLCBjYXB0dXJlOiAwLjksIHNhZmV0eTogMC45NSwgcG93ZXI6IDEuMDgsIGNlbnRlcjogMC44NiwgdW5sb2NrOiAxLjE4LCByZXBseTogMSwgcmFuZG9tbmVzczogMjYsIHNwcmVhZDogMC4xNSwgbW9iaWxpdHk6IDAuOTUsIHRyYXA6IDAuNzgsIGVuZGdhbWU6IDEuNDIgfSxcbiAgc2VudGluZWw6IHsgYWR2YW5jZW1lbnQ6IDAuOSwgY2FwdHVyZTogMS4xMiwgc2FmZXR5OiAxLjcyLCBwb3dlcjogMC45NSwgY2VudGVyOiAxLjI4LCB1bmxvY2s6IDEuMDUsIHJlcGx5OiAxLjM4LCByYW5kb21uZXNzOiAxOCwgc3ByZWFkOiAwLjEyLCBtb2JpbGl0eTogMC44NiwgdHJhcDogMS4wNCwgZW5kZ2FtZTogMC44NCB9LFxuICBvcmFjbGU6IHsgYWR2YW5jZW1lbnQ6IDEsIGNhcHR1cmU6IDEuMTIsIHNhZmV0eTogMS40MiwgcG93ZXI6IDEuMSwgY2VudGVyOiAxLjE4LCB1bmxvY2s6IDEuMDgsIHJlcGx5OiAxLjgsIHJhbmRvbW5lc3M6IDgsIHNwcmVhZDogMC4wOCwgbW9iaWxpdHk6IDEuMDYsIHRyYXA6IDEuMjIsIGVuZGdhbWU6IDEuMDggfSxcbiAgYW1idXNoZXI6IHsgYWR2YW5jZW1lbnQ6IDAuOSwgY2FwdHVyZTogMS40OCwgc2FmZXR5OiAxLjA4LCBwb3dlcjogMS40NiwgY2VudGVyOiAxLjA1LCB1bmxvY2s6IDEuMDIsIHJlcGx5OiAxLjMyLCByYW5kb21uZXNzOiAxNCwgc3ByZWFkOiAwLjEsIG1vYmlsaXR5OiAxLjEyLCB0cmFwOiAxLjcyLCBlbmRnYW1lOiAwLjkyIH0sXG4gIGxvY2tzbWl0aDogeyBhZHZhbmNlbWVudDogMC44OCwgY2FwdHVyZTogMS4wNCwgc2FmZXR5OiAxLjU1LCBwb3dlcjogMS4wMiwgY2VudGVyOiAxLjQ4LCB1bmxvY2s6IDEuMTIsIHJlcGx5OiAxLjUyLCByYW5kb21uZXNzOiAxMiwgc3ByZWFkOiAwLjEsIG1vYmlsaXR5OiAxLjU4LCB0cmFwOiAxLjI0LCBlbmRnYW1lOiAwLjg2IH0sXG4gIHN0b3JtOiB7IGFkdmFuY2VtZW50OiAxLjE4LCBjYXB0dXJlOiAxLjM4LCBzYWZldHk6IDAuOTgsIHBvd2VyOiAxLjYyLCBjZW50ZXI6IDEuMDgsIHVubG9jazogMS4xOCwgcmVwbHk6IDEuMjIsIHJhbmRvbW5lc3M6IDE4LCBzcHJlYWQ6IDAuMTMsIG1vYmlsaXR5OiAxLjM2LCB0cmFwOiAxLjI4LCBlbmRnYW1lOiAxLjAyIH0sXG4gIG1hdHJpYXJjaDogeyBhZHZhbmNlbWVudDogMC45NiwgY2FwdHVyZTogMS4xOCwgc2FmZXR5OiAxLjY0LCBwb3dlcjogMS4xOCwgY2VudGVyOiAxLjIyLCB1bmxvY2s6IDEuMDgsIHJlcGx5OiAxLjY2LCByYW5kb21uZXNzOiAxMCwgc3ByZWFkOiAwLjA4LCBtb2JpbGl0eTogMS4wMiwgdHJhcDogMS4zNiwgZW5kZ2FtZTogMSB9LFxuICBlbmRnYW1lOiB7IGFkdmFuY2VtZW50OiAxLjQ2LCBjYXB0dXJlOiAxLCBzYWZldHk6IDEuMjgsIHBvd2VyOiAxLjA0LCBjZW50ZXI6IDAuOTQsIHVubG9jazogMS4wOCwgcmVwbHk6IDEuNDQsIHJhbmRvbW5lc3M6IDEwLCBzcHJlYWQ6IDAuMDksIG1vYmlsaXR5OiAwLjk4LCB0cmFwOiAxLjAyLCBlbmRnYW1lOiAxLjg2IH0sXG59O1xuXG5jb25zdCBERUZBVUxUX0JPVF9QUk9GSUxFX0JZX0RJRkZJQ1VMVFk6IFJlY29yZDxDaGVzc2ltYWxzQm90RGlmZmljdWx0eSwgQ2hlc3NpbWFsc0JvdFByb2ZpbGVJZD4gPSB7XG4gIGVhc3k6ICdleHBsb3JlcicsXG4gIG5vcm1hbDogJ2h1bnRlcicsXG4gIGhhcmQ6ICdzdHJhdGVnaXN0Jyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQ2hlc3NpbWFsc0dhbWVPcHRpb25zIHtcbiAgaWQ/OiBzdHJpbmc7XG4gIG1vZGU/OiBDaGVzc2ltYWxzR2FtZU1vZGU7XG4gIHN0YXR1cz86IENoZXNzaW1hbHNHYW1lU3RhdHVzO1xuICBvbmxpbmU/OiBDaGVzc2ltYWxzT25saW5lU3RhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGVzc2ltYWxzR2FtZShcbiAgYm9hcmRTaXplOiBDaGVzc2ltYWxzQm9hcmRTaXplID0gNixcbiAgb3B0aW9uczogQ3JlYXRlQ2hlc3NpbWFsc0dhbWVPcHRpb25zID0ge30sXG4pOiBDaGVzc2ltYWxzR2FtZVN0YXRlIHtcbiAgY29uc3QgcGllY2VzOiBDaGVzc2ltYWxzUGllY2VbXSA9IFtdO1xuICBjb25zdCB3aGl0ZVJvdyA9IGJvYXJkU2l6ZSAtIDI7XG4gIGNvbnN0IGJsYWNrUm93ID0gMTtcblxuICBmb3IgKGxldCBjb2wgPSAwOyBjb2wgPCBib2FyZFNpemU7IGNvbCArPSAxKSB7XG4gICAgcGllY2VzLnB1c2goe1xuICAgICAgaWQ6IGBXJHtjb2wgKyAxfWAsXG4gICAgICBjb2xvcjogJ3doaXRlJyxcbiAgICAgIHBvc2l0aW9uOiB7IHJvdzogd2hpdGVSb3csIGNvbCB9LFxuICAgICAgY2FwdHVyZWQ6IGZhbHNlLFxuICAgIH0pO1xuICAgIHBpZWNlcy5wdXNoKHtcbiAgICAgIGlkOiBgQiR7Y29sICsgMX1gLFxuICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgICBwb3NpdGlvbjogeyByb3c6IGJsYWNrUm93LCBjb2wgfSxcbiAgICAgIGNhcHR1cmVkOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlID0gcmVmcmVzaENoZXNzaW1hbHNQb3dlclVubG9ja3Moe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IGNyZWF0ZUxvY2FsSWQoKSxcbiAgICBtb2RlOiBvcHRpb25zLm1vZGUgPz8gJ2xvY2FsJyxcbiAgICBib2FyZFNpemUsXG4gICAgc3RhdHVzOiBvcHRpb25zLnN0YXR1cyA/PyAnaW5fcHJvZ3Jlc3MnLFxuICAgIGN1cnJlbnRUdXJuOiAnd2hpdGUnLFxuICAgIHBpZWNlcyxcbiAgICBwbGF5ZXJzOiB7XG4gICAgICB3aGl0ZTogeyBjb2xvcjogJ3doaXRlJywgcG93ZXJVbmxvY2tlZDogZmFsc2UsIGNhcmRzOiBjcmVhdGVDYXJkcygpIH0sXG4gICAgICBibGFjazogeyBjb2xvcjogJ2JsYWNrJywgcG93ZXJVbmxvY2tlZDogZmFsc2UsIGNhcmRzOiBjcmVhdGVDYXJkcygpIH0sXG4gICAgfSxcbiAgICBtb3ZlQ291bnQ6IDAsXG4gICAgb25saW5lOiBvcHRpb25zLm9ubGluZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBtb3ZlSGlzdG9yeTogW2NyZWF0ZU1vdmVIaXN0b3J5RW50cnkoc3RhdGUpXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoZXNzaW1hbHNQaWVjZUF0KFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgcG9zaXRpb246IENoZXNzaW1hbHNQb3NpdGlvbixcbik6IENoZXNzaW1hbHNQaWVjZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBhY3RpdmVQaWVjZXMoc3RhdGUpLmZpbmQoXG4gICAgKHBpZWNlKSA9PlxuICAgICAgIXBpZWNlLmNhcHR1cmVkICYmIHBpZWNlLnBvc2l0aW9uLnJvdyA9PT0gcG9zaXRpb24ucm93ICYmIHBpZWNlLnBvc2l0aW9uLmNvbCA9PT0gcG9zaXRpb24uY29sLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hlc3NpbWFsc0xlZ2FsTW92ZXMoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBwaWVjZUlkOiBzdHJpbmcsXG4gIGFuaW1hbD86IENoZXNzaW1hbHNBbmltYWxUeXBlLFxuKTogQ2hlc3NpbWFsc01vdmVbXSB7XG4gIGlmIChzdGF0ZS5zdGF0dXMgIT09ICdpbl9wcm9ncmVzcycpIHJldHVybiBbXTtcblxuICBjb25zdCBwaWVjZSA9IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcGllY2VJZCAmJiAhaXRlbS5jYXB0dXJlZCk7XG4gIGlmICghcGllY2UgfHwgcGllY2UuY29sb3IgIT09IHN0YXRlLmN1cnJlbnRUdXJuKSByZXR1cm4gW107XG5cbiAgaWYgKGFuaW1hbCkge1xuICAgIGNvbnN0IHBsYXllciA9IHN0YXRlLnBsYXllcnNbcGllY2UuY29sb3JdO1xuICAgIGlmICghcGxheWVyLnBvd2VyVW5sb2NrZWQgfHwgcGxheWVyLmNhcmRzW2FuaW1hbF0udXNlZCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBnZXRQb3dlck1vdmVzKHN0YXRlLCBwaWVjZSwgYW5pbWFsKTtcbiAgfVxuXG4gIHJldHVybiBnZXRCYXNpY01vdmVzKHN0YXRlLCBwaWVjZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IgPSBzdGF0ZS5jdXJyZW50VHVybixcbik6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBpZiAoc3RhdGUuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnKSByZXR1cm4gW107XG5cbiAgY29uc3QgdHVyblN0YXRlID0gY29sb3IgPT09IHN0YXRlLmN1cnJlbnRUdXJuID8gc3RhdGUgOiB7IC4uLnN0YXRlLCBjdXJyZW50VHVybjogY29sb3IgfTtcbiAgY29uc3QgcGxheWVyID0gdHVyblN0YXRlLnBsYXllcnNbY29sb3JdO1xuICBjb25zdCBtb3ZlczogQ2hlc3NpbWFsc01vdmVbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgcGllY2Ugb2YgYWN0aXZlUGllY2VzKHR1cm5TdGF0ZSkpIHtcbiAgICBpZiAocGllY2UuY2FwdHVyZWQgfHwgcGllY2UuY29sb3IgIT09IGNvbG9yKSBjb250aW51ZTtcblxuICAgIG1vdmVzLnB1c2goLi4uZ2V0Q2hlc3NpbWFsc0xlZ2FsTW92ZXModHVyblN0YXRlLCBwaWVjZS5pZCkpO1xuICAgIGlmICghcGxheWVyLnBvd2VyVW5sb2NrZWQpIGNvbnRpbnVlO1xuXG4gICAgZm9yIChjb25zdCBhbmltYWwgb2YgQU5JTUFMUykge1xuICAgICAgaWYgKHBsYXllci5jYXJkc1thbmltYWxdLnVzZWQpIGNvbnRpbnVlO1xuICAgICAgbW92ZXMucHVzaCguLi5nZXRDaGVzc2ltYWxzTGVnYWxNb3Zlcyh0dXJuU3RhdGUsIHBpZWNlLmlkLCBhbmltYWwpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbW92ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaG9vc2VDaGVzc2ltYWxzQm90TW92ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGRpZmZpY3VsdHk6IENoZXNzaW1hbHNCb3REaWZmaWN1bHR5ID0gJ25vcm1hbCcsXG4gIHByb2ZpbGVJZDogQ2hlc3NpbWFsc0JvdFByb2ZpbGVJZCA9IERFRkFVTFRfQk9UX1BST0ZJTEVfQllfRElGRklDVUxUWVtkaWZmaWN1bHR5XSxcbik6IENoZXNzaW1hbHNNb3ZlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbW92ZXMgPSBnZXRDaGVzc2ltYWxzQWxsTGVnYWxNb3ZlcyhzdGF0ZSk7XG4gIGlmIChtb3Zlcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHN0eWxlID0gQk9UX1NUWUxFU1twcm9maWxlSWRdID8/IEJPVF9TVFlMRVNbREVGQVVMVF9CT1RfUFJPRklMRV9CWV9ESUZGSUNVTFRZW2RpZmZpY3VsdHldXTtcblxuICBjb25zdCBxdWlja1Njb3JlZCA9IG1vdmVzXG4gICAgLm1hcCgobW92ZSkgPT4gKHsgbW92ZSwgc2NvcmU6IHNjb3JlQm90TW92ZShzdGF0ZSwgbW92ZSwgZGlmZmljdWx0eSwgc3R5bGUpIH0pKVxuICAgIC5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gIGNvbnN0IGxvb2thaGVhZExpbWl0ID0gZGlmZmljdWx0eSA9PT0gJ2hhcmQnID8gMzIgOiBkaWZmaWN1bHR5ID09PSAnbm9ybWFsJyA/IDI0IDogMDtcbiAgY29uc3Qgc2NvcmVkID0gcXVpY2tTY29yZWRcbiAgICAubWFwKChpdGVtLCBpbmRleCkgPT4gKHtcbiAgICAgIG1vdmU6IGl0ZW0ubW92ZSxcbiAgICAgIHNjb3JlOlxuICAgICAgICBpbmRleCA8IGxvb2thaGVhZExpbWl0XG4gICAgICAgICAgPyBzY29yZUJvdE1vdmVXaXRoTG9va2FoZWFkKHN0YXRlLCBpdGVtLm1vdmUsIGRpZmZpY3VsdHksIHN0eWxlKVxuICAgICAgICAgIDogaXRlbS5zY29yZSxcbiAgICB9KSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuXG4gIGlmIChkaWZmaWN1bHR5ID09PSAnZWFzeScpIHtcbiAgICBjb25zdCBwbGF5YWJsZSA9IHNjb3JlZC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc2NvcmUgPiAtMzAwMCk7XG4gICAgcmV0dXJuIHBpY2tOb2lzeUJvdE1vdmUocGxheWFibGUubGVuZ3RoID8gcGxheWFibGUgOiBzY29yZWQsIDAuNTUpO1xuICB9XG5cbiAgaWYgKGRpZmZpY3VsdHkgPT09ICdub3JtYWwnKSB7XG4gICAgcmV0dXJuIHNjb3JlZFswXT8ubW92ZTtcbiAgfVxuXG4gIGNvbnN0IHdpbm5pbmdNb3ZlID0gc2NvcmVkLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc2NvcmUgPj0gMTAwMDApO1xuICBpZiAod2lubmluZ01vdmUpIHJldHVybiB3aW5uaW5nTW92ZS5tb3ZlO1xuXG4gIGNvbnN0IG9wcG9uZW50V2lubmluZ1RhcmdldHMgPSBuZXcgU2V0KFxuICAgIGdldEltbWVkaWF0ZVdpbm5pbmdNb3ZlcyhzdGF0ZSwgb3RoZXJDb2xvcihzdGF0ZS5jdXJyZW50VHVybikpLm1hcCgobW92ZSkgPT4gcG9zaXRpb25LZXkobW92ZS50bykpLFxuICApO1xuICBpZiAob3Bwb25lbnRXaW5uaW5nVGFyZ2V0cy5zaXplID4gMCkge1xuICAgIGNvbnN0IGJsb2NraW5nTW92ZSA9IHNjb3JlZC5maW5kKFxuICAgICAgKGl0ZW0pID0+IGl0ZW0ubW92ZS5jYXB0dXJlc1BpZWNlSWQgfHwgb3Bwb25lbnRXaW5uaW5nVGFyZ2V0cy5oYXMocG9zaXRpb25LZXkoaXRlbS5tb3ZlLnRvKSksXG4gICAgKTtcbiAgICBpZiAoYmxvY2tpbmdNb3ZlKSByZXR1cm4gYmxvY2tpbmdNb3ZlLm1vdmU7XG4gIH1cblxuICBjb25zdCBjb25zZXJ2YXRpdmVDYXB0dXJlID0gY2hvb3NlQ29uc2VydmF0aXZlSGFyZENhcHR1cmUoc3RhdGUsIHNjb3JlZCk7XG4gIGlmIChjb25zZXJ2YXRpdmVDYXB0dXJlKSByZXR1cm4gY29uc2VydmF0aXZlQ2FwdHVyZTtcblxuICByZXR1cm4gc2NvcmVkWzBdPy5tb3ZlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlDaGVzc2ltYWxzTW92ZShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGNhbmRpZGF0ZTogQ2hlc3NpbWFsc01vdmUsXG4pOiBDaGVzc2ltYWxzR2FtZVN0YXRlIHtcbiAgY29uc3QgbGVnYWxNb3ZlID0gZ2V0Q2hlc3NpbWFsc0xlZ2FsTW92ZXMoc3RhdGUsIGNhbmRpZGF0ZS5waWVjZUlkLCBjYW5kaWRhdGUuYW5pbWFsKS5maW5kKChtb3ZlKSA9PlxuICAgIHNhbWVQb3NpdGlvbihtb3ZlLmZyb20sIGNhbmRpZGF0ZS5mcm9tKSAmJiBzYW1lUG9zaXRpb24obW92ZS50bywgY2FuZGlkYXRlLnRvKSxcbiAgKTtcblxuICBpZiAoIWxlZ2FsTW92ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19JTExFR0FMX01PVkUnKTtcbiAgfVxuXG4gIGNvbnN0IG1vdmVkUGllY2UgPSBhY3RpdmVQaWVjZXMoc3RhdGUpLmZpbmQoKHBpZWNlKSA9PiBwaWVjZS5pZCA9PT0gbGVnYWxNb3ZlLnBpZWNlSWQpO1xuICBpZiAoIW1vdmVkUGllY2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfUElFQ0VfTk9UX0ZPVU5EJyk7XG4gIH1cblxuICBjb25zdCBwaWVjZXMgPSBhY3RpdmVQaWVjZXMoc3RhdGUpLm1hcCgocGllY2UpID0+IHtcbiAgICBpZiAocGllY2UuaWQgPT09IGxlZ2FsTW92ZS5waWVjZUlkKSB7XG4gICAgICByZXR1cm4geyAuLi5waWVjZSwgcG9zaXRpb246IHsgLi4ubGVnYWxNb3ZlLnRvIH0gfTtcbiAgICB9XG4gICAgaWYgKHBpZWNlLmlkID09PSBsZWdhbE1vdmUuY2FwdHVyZXNQaWVjZUlkKSB7XG4gICAgICByZXR1cm4geyAuLi5waWVjZSwgY2FwdHVyZWQ6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBpZWNlO1xuICB9KTtcblxuICBjb25zdCBwbGF5ZXJzID0ge1xuICAgIC4uLnN0YXRlLnBsYXllcnMsXG4gICAgW21vdmVkUGllY2UuY29sb3JdOiB7XG4gICAgICAuLi5zdGF0ZS5wbGF5ZXJzW21vdmVkUGllY2UuY29sb3JdLFxuICAgICAgY2FyZHM6XG4gICAgICAgIGxlZ2FsTW92ZS5raW5kID09PSAncG93ZXInICYmIGxlZ2FsTW92ZS5hbmltYWxcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucGxheWVyc1ttb3ZlZFBpZWNlLmNvbG9yXS5jYXJkcyxcbiAgICAgICAgICAgICAgW2xlZ2FsTW92ZS5hbmltYWxdOiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUucGxheWVyc1ttb3ZlZFBpZWNlLmNvbG9yXS5jYXJkc1tsZWdhbE1vdmUuYW5pbWFsXSxcbiAgICAgICAgICAgICAgICB1c2VkOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogc3RhdGUucGxheWVyc1ttb3ZlZFBpZWNlLmNvbG9yXS5jYXJkcyxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IG5leHRTdGF0ZSA9IHJlZnJlc2hDaGVzc2ltYWxzUG93ZXJVbmxvY2tzKHtcbiAgICAuLi5zdGF0ZSxcbiAgICBwaWVjZXMsXG4gICAgcGxheWVycyxcbiAgICBjdXJyZW50VHVybjogb3RoZXJDb2xvcihtb3ZlZFBpZWNlLmNvbG9yKSxcbiAgICBtb3ZlQ291bnQ6IHN0YXRlLm1vdmVDb3VudCArIDEsXG4gICAgbGFzdE1vdmU6IGxlZ2FsTW92ZSxcbiAgfSk7XG5cbiAgY29uc3QgcHJvbW90ZWQgPSBpc1Byb21vdGlvblJvdyhuZXh0U3RhdGUuYm9hcmRTaXplLCBtb3ZlZFBpZWNlLmNvbG9yLCBsZWdhbE1vdmUudG8pO1xuICBjb25zdCBlbmVteVBpZWNlcyA9IGFjdGl2ZVBpZWNlcyhuZXh0U3RhdGUpLmZpbHRlcihcbiAgICAocGllY2UpID0+IHBpZWNlLmNvbG9yICE9PSBtb3ZlZFBpZWNlLmNvbG9yICYmICFwaWVjZS5jYXB0dXJlZCxcbiAgKTtcblxuICBjb25zdCByZXNvbHZlZFN0YXRlID1cbiAgICBwcm9tb3RlZCB8fCBlbmVteVBpZWNlcy5sZW5ndGggPT09IDBcbiAgICAgID8ge1xuICAgICAgICAgIC4uLm5leHRTdGF0ZSxcbiAgICAgICAgICBzdGF0dXM6ICdmaW5pc2hlZCcgYXMgY29uc3QsXG4gICAgICAgICAgd2lubmVyOiBtb3ZlZFBpZWNlLmNvbG9yLFxuICAgICAgICAgIHdpbm5lclJlYXNvbjogcHJvbW90ZWQgPyAoJ3Byb21vdGlvbicgYXMgY29uc3QpIDogKCdlbGltaW5hdGlvbicgYXMgY29uc3QpLFxuICAgICAgICB9XG4gICAgICA6IG5leHRTdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc29sdmVkU3RhdGUsXG4gICAgbW92ZUhpc3Rvcnk6IFtcbiAgICAgIC4uLmVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlKSxcbiAgICAgIGNyZWF0ZU1vdmVIaXN0b3J5RW50cnkocmVzb2x2ZWRTdGF0ZSwgbGVnYWxNb3ZlKSxcbiAgICBdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2hlc3NpbWFsc1Jldmlld1N0YXRlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgZW50cnk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5LFxuKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gIGNvbnN0IGJhc2VTdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSA9IHsgLi4uc3RhdGUgfTtcbiAgZGVsZXRlIGJhc2VTdGF0ZS5sYXN0TW92ZTtcbiAgZGVsZXRlIGJhc2VTdGF0ZS53aW5uZXI7XG4gIGRlbGV0ZSBiYXNlU3RhdGUud2lubmVyUmVhc29uO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VTdGF0ZSxcbiAgICBzdGF0dXM6IGVudHJ5LnN0YXR1cyxcbiAgICBjdXJyZW50VHVybjogZW50cnkuY3VycmVudFR1cm4sXG4gICAgcGllY2VzOiBjbG9uZVBpZWNlcyhlbnRyeS5waWVjZXMpLFxuICAgIG1vdmVDb3VudDogZW50cnkubW92ZU51bWJlcixcbiAgICAuLi4oZW50cnkud2lubmVyID8geyB3aW5uZXI6IGVudHJ5Lndpbm5lciB9IDoge30pLFxuICAgIC4uLihlbnRyeS53aW5uZXJSZWFzb24gPyB7IHdpbm5lclJlYXNvbjogZW50cnkud2lubmVyUmVhc29uIH0gOiB7fSksXG4gICAgLi4uKGVudHJ5Lm1vdmUgPyB7IGxhc3RNb3ZlOiBzYW5pdGl6ZU1vdmUoZW50cnkubW92ZSkgfSA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTW92ZUhpc3RvcnlFbnRyeShcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU/OiBDaGVzc2ltYWxzTW92ZSxcbik6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICBtb3ZlTnVtYmVyOiBzdGF0ZS5tb3ZlQ291bnQsXG4gICAgcGllY2VzOiBjbG9uZVBpZWNlcyhzdGF0ZS5waWVjZXMpLFxuICAgIGN1cnJlbnRUdXJuOiBzdGF0ZS5jdXJyZW50VHVybixcbiAgICBzdGF0dXM6IHN0YXRlLnN0YXR1cyxcbiAgICAuLi4obW92ZSA/IHsgbW92ZTogc2FuaXRpemVNb3ZlKG1vdmUpIH0gOiB7fSksXG4gICAgLi4uKHN0YXRlLndpbm5lciA/IHsgd2lubmVyOiBzdGF0ZS53aW5uZXIgfSA6IHt9KSxcbiAgICAuLi4oc3RhdGUud2lubmVyUmVhc29uID8geyB3aW5uZXJSZWFzb246IHN0YXRlLndpbm5lclJlYXNvbiB9IDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBlbnN1cmVNb3ZlSGlzdG9yeShzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5W10ge1xuICBpZiAoc3RhdGUubW92ZUhpc3Rvcnk/Lmxlbmd0aCkgcmV0dXJuIHN0YXRlLm1vdmVIaXN0b3J5Lm1hcChjbG9uZU1vdmVIaXN0b3J5RW50cnkpO1xuICByZXR1cm4gW2NyZWF0ZU1vdmVIaXN0b3J5RW50cnkoc3RhdGUpXTtcbn1cblxuZnVuY3Rpb24gY2xvbmVNb3ZlSGlzdG9yeUVudHJ5KGVudHJ5OiBDaGVzc2ltYWxzTW92ZUhpc3RvcnlFbnRyeSk6IENoZXNzaW1hbHNNb3ZlSGlzdG9yeUVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5lbnRyeSxcbiAgICBwaWVjZXM6IGNsb25lUGllY2VzKGVudHJ5LnBpZWNlcyksXG4gICAgLi4uKGVudHJ5Lm1vdmUgPyB7IG1vdmU6IHNhbml0aXplTW92ZShlbnRyeS5tb3ZlKSB9IDoge30pLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjbG9uZVBpZWNlcyhwaWVjZXM6IENoZXNzaW1hbHNQaWVjZVtdKTogQ2hlc3NpbWFsc1BpZWNlW10ge1xuICByZXR1cm4gcGllY2VzLm1hcCgocGllY2UpID0+ICh7XG4gICAgLi4ucGllY2UsXG4gICAgcG9zaXRpb246IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgfSkpO1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZU1vdmUobW92ZTogQ2hlc3NpbWFsc01vdmUpOiBDaGVzc2ltYWxzTW92ZSB7XG4gIHJldHVybiB7XG4gICAgcGllY2VJZDogbW92ZS5waWVjZUlkLFxuICAgIGZyb206IHsgLi4ubW92ZS5mcm9tIH0sXG4gICAgdG86IHsgLi4ubW92ZS50byB9LFxuICAgIGtpbmQ6IG1vdmUua2luZCxcbiAgICAuLi4obW92ZS5hbmltYWwgPyB7IGFuaW1hbDogbW92ZS5hbmltYWwgfSA6IHt9KSxcbiAgICAuLi4obW92ZS5jYXB0dXJlc1BpZWNlSWQgPyB7IGNhcHR1cmVzUGllY2VJZDogbW92ZS5jYXB0dXJlc1BpZWNlSWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2lnbkNoZXNzaW1hbHNHYW1lKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbik6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICBjb25zdCByZXNpZ25lZFN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlID0ge1xuICAgIC4uLnN0YXRlLFxuICAgIHN0YXR1czogJ2ZpbmlzaGVkJyxcbiAgICB3aW5uZXI6IG90aGVyQ29sb3IoY29sb3IpLFxuICAgIHdpbm5lclJlYXNvbjogJ3Jlc2lnbmF0aW9uJyxcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIC4uLnJlc2lnbmVkU3RhdGUsXG4gICAgbW92ZUhpc3Rvcnk6IFtcbiAgICAgIC4uLmVuc3VyZU1vdmVIaXN0b3J5KHN0YXRlKSxcbiAgICAgIGNyZWF0ZU1vdmVIaXN0b3J5RW50cnkocmVzaWduZWRTdGF0ZSksXG4gICAgXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvc2l0aW9uS2V5KHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cG9zaXRpb24ucm93fToke3Bvc2l0aW9uLmNvbH1gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDYXJkcygpIHtcbiAgcmV0dXJuIEFOSU1BTFMucmVkdWNlKFxuICAgIChjYXJkcywgdHlwZSkgPT4gKHtcbiAgICAgIC4uLmNhcmRzLFxuICAgICAgW3R5cGVdOiB7IHR5cGUsIHVzZWQ6IGZhbHNlIH0sXG4gICAgfSksXG4gICAge30gYXMgUmVjb3JkPENoZXNzaW1hbHNBbmltYWxUeXBlLCB7IHR5cGU6IENoZXNzaW1hbHNBbmltYWxUeXBlOyB1c2VkOiBib29sZWFuIH0+LFxuICApO1xufVxuXG5mdW5jdGlvbiBhY3RpdmVQaWVjZXMoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUpOiBDaGVzc2ltYWxzUGllY2VbXSB7XG4gIHJldHVybiBzdGF0ZS5waWVjZXMuZmlsdGVyKChwaWVjZSk6IHBpZWNlIGlzIENoZXNzaW1hbHNQaWVjZSA9PiAhIXBpZWNlKTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFzaWNNb3ZlcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgcGllY2U6IENoZXNzaW1hbHNQaWVjZSk6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBjb25zdCBkaXJlY3Rpb24gPSBwaWVjZS5jb2xvciA9PT0gJ3doaXRlJyA/IC0xIDogMTtcbiAgY29uc3QgbW92ZXM6IENoZXNzaW1hbHNNb3ZlW10gPSBbXTtcbiAgY29uc3QgZm9yd2FyZCA9IHsgcm93OiBwaWVjZS5wb3NpdGlvbi5yb3cgKyBkaXJlY3Rpb24sIGNvbDogcGllY2UucG9zaXRpb24uY29sIH07XG5cbiAgaWYgKGlzSW5zaWRlQm9hcmQoc3RhdGUuYm9hcmRTaXplLCBmb3J3YXJkKSAmJiAhZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIGZvcndhcmQpKSB7XG4gICAgbW92ZXMucHVzaCh7XG4gICAgICBwaWVjZUlkOiBwaWVjZS5pZCxcbiAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgIHRvOiBmb3J3YXJkLFxuICAgICAga2luZDogJ2Jhc2ljJyxcbiAgICB9KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgY29sT2Zmc2V0IG9mIFstMSwgMV0pIHtcbiAgICBjb25zdCB0YXJnZXQgPSB7IHJvdzogcGllY2UucG9zaXRpb24ucm93ICsgZGlyZWN0aW9uLCBjb2w6IHBpZWNlLnBvc2l0aW9uLmNvbCArIGNvbE9mZnNldCB9O1xuICAgIGNvbnN0IHRhcmdldFBpZWNlID0gZ2V0Q2hlc3NpbWFsc1BpZWNlQXQoc3RhdGUsIHRhcmdldCk7XG4gICAgaWYgKFxuICAgICAgaXNJbnNpZGVCb2FyZChzdGF0ZS5ib2FyZFNpemUsIHRhcmdldCkgJiZcbiAgICAgIHRhcmdldFBpZWNlICYmXG4gICAgICB0YXJnZXRQaWVjZS5jb2xvciAhPT0gcGllY2UuY29sb3IgJiZcbiAgICAgICFpc1Byb21vdGlvblJvdyhzdGF0ZS5ib2FyZFNpemUsIHBpZWNlLmNvbG9yLCB0YXJnZXQpXG4gICAgKSB7XG4gICAgICBtb3Zlcy5wdXNoKHtcbiAgICAgICAgcGllY2VJZDogcGllY2UuaWQsXG4gICAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgICAgdG86IHRhcmdldCxcbiAgICAgICAga2luZDogJ2Jhc2ljJyxcbiAgICAgICAgY2FwdHVyZXNQaWVjZUlkOiB0YXJnZXRQaWVjZS5pZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZnVuY3Rpb24gZ2V0UG93ZXJNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIHBpZWNlOiBDaGVzc2ltYWxzUGllY2UsXG4gIGFuaW1hbDogQ2hlc3NpbWFsc0FuaW1hbFR5cGUsXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgaWYgKGFuaW1hbCA9PT0gJ2thbmdhcm9vJykge1xuICAgIHJldHVybiBnZXRLYW5nYXJvb01vdmVzKHN0YXRlLCBwaWVjZSk7XG4gIH1cblxuICBjb25zdCBkaXJlY3Rpb25zID0gZ2V0UG93ZXJEaXJlY3Rpb25zKGFuaW1hbCk7XG4gIGNvbnN0IG1vdmVzOiBDaGVzc2ltYWxzTW92ZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBkaXJlY3Rpb24gb2YgZGlyZWN0aW9ucykge1xuICAgIGZvciAobGV0IGRpc3RhbmNlID0gMTsgZGlzdGFuY2UgPCBzdGF0ZS5ib2FyZFNpemU7IGRpc3RhbmNlICs9IDEpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHtcbiAgICAgICAgcm93OiBwaWVjZS5wb3NpdGlvbi5yb3cgKyBkaXJlY3Rpb24ucm93ICogZGlzdGFuY2UsXG4gICAgICAgIGNvbDogcGllY2UucG9zaXRpb24uY29sICsgZGlyZWN0aW9uLmNvbCAqIGRpc3RhbmNlLFxuICAgICAgfTtcbiAgICAgIGlmICghaXNJbnNpZGVCb2FyZChzdGF0ZS5ib2FyZFNpemUsIHRhcmdldCkpIGJyZWFrO1xuICAgICAgaWYgKGlzUHJvbW90aW9uUm93KHN0YXRlLmJvYXJkU2l6ZSwgcGllY2UuY29sb3IsIHRhcmdldCkpIGJyZWFrO1xuXG4gICAgICBjb25zdCB0YXJnZXRQaWVjZSA9IGdldENoZXNzaW1hbHNQaWVjZUF0KHN0YXRlLCB0YXJnZXQpO1xuICAgICAgaWYgKHRhcmdldFBpZWNlPy5jb2xvciA9PT0gcGllY2UuY29sb3IpIGJyZWFrO1xuXG4gICAgICBtb3Zlcy5wdXNoKHtcbiAgICAgICAgcGllY2VJZDogcGllY2UuaWQsXG4gICAgICAgIGZyb206IHsgLi4ucGllY2UucG9zaXRpb24gfSxcbiAgICAgICAgdG86IHRhcmdldCxcbiAgICAgICAga2luZDogJ3Bvd2VyJyxcbiAgICAgICAgYW5pbWFsLFxuICAgICAgICAuLi4odGFyZ2V0UGllY2UgPyB7IGNhcHR1cmVzUGllY2VJZDogdGFyZ2V0UGllY2UuaWQgfSA6IHt9KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGFyZ2V0UGllY2UpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3Zlcztcbn1cblxuZnVuY3Rpb24gZ2V0S2FuZ2Fyb29Nb3ZlcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgcGllY2U6IENoZXNzaW1hbHNQaWVjZSk6IENoZXNzaW1hbHNNb3ZlW10ge1xuICBjb25zdCBtb3ZlczogQ2hlc3NpbWFsc01vdmVbXSA9IFtdO1xuICBjb25zdCBqdW1wcyA9IFtcbiAgICB7IHJvdzogLTIsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogLTIsIGNvbDogMSB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAtMiB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAyIH0sXG4gICAgeyByb3c6IDEsIGNvbDogLTIgfSxcbiAgICB7IHJvdzogMSwgY29sOiAyIH0sXG4gICAgeyByb3c6IDIsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMiwgY29sOiAxIH0sXG4gIF07XG5cbiAgZm9yIChjb25zdCBqdW1wIG9mIGp1bXBzKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0ge1xuICAgICAgcm93OiBwaWVjZS5wb3NpdGlvbi5yb3cgKyBqdW1wLnJvdyxcbiAgICAgIGNvbDogcGllY2UucG9zaXRpb24uY29sICsganVtcC5jb2wsXG4gICAgfTtcbiAgICBpZiAoIWlzSW5zaWRlQm9hcmQoc3RhdGUuYm9hcmRTaXplLCB0YXJnZXQpKSBjb250aW51ZTtcbiAgICBpZiAoaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBwaWVjZS5jb2xvciwgdGFyZ2V0KSkgY29udGludWU7XG5cbiAgICBjb25zdCB0YXJnZXRQaWVjZSA9IGdldENoZXNzaW1hbHNQaWVjZUF0KHN0YXRlLCB0YXJnZXQpO1xuICAgIGlmICh0YXJnZXRQaWVjZT8uY29sb3IgPT09IHBpZWNlLmNvbG9yKSBjb250aW51ZTtcblxuICAgIG1vdmVzLnB1c2goe1xuICAgICAgcGllY2VJZDogcGllY2UuaWQsXG4gICAgICBmcm9tOiB7IC4uLnBpZWNlLnBvc2l0aW9uIH0sXG4gICAgICB0bzogdGFyZ2V0LFxuICAgICAga2luZDogJ3Bvd2VyJyxcbiAgICAgIGFuaW1hbDogJ2thbmdhcm9vJyxcbiAgICAgIC4uLih0YXJnZXRQaWVjZSA/IHsgY2FwdHVyZXNQaWVjZUlkOiB0YXJnZXRQaWVjZS5pZCB9IDoge30pLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG1vdmVzO1xufVxuXG5mdW5jdGlvbiBzY29yZUJvdE1vdmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgZGlmZmljdWx0eTogQ2hlc3NpbWFsc0JvdERpZmZpY3VsdHksXG4gIHN0eWxlOiBDaGVzc2ltYWxzQm90U3R5bGUsXG4gIGluY2x1ZGVUYWN0aWNhbFByZXNzdXJlID0gdHJ1ZSxcbik6IG51bWJlciB7XG4gIGNvbnN0IGNvbG9yID0gc3RhdGUuY3VycmVudFR1cm47XG4gIGNvbnN0IHRhcmdldFBpZWNlID0gbW92ZS5jYXB0dXJlc1BpZWNlSWRcbiAgICA/IGFjdGl2ZVBpZWNlcyhzdGF0ZSkuZmluZCgocGllY2UpID0+IHBpZWNlLmlkID09PSBtb3ZlLmNhcHR1cmVzUGllY2VJZClcbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgYWR2YW5jZW1lbnQgPVxuICAgIGNvbG9yID09PSAnd2hpdGUnID8gc3RhdGUuYm9hcmRTaXplIC0gMSAtIG1vdmUudG8ucm93IDogbW92ZS50by5yb3c7XG4gIGxldCBzY29yZSA9IGFkdmFuY2VtZW50ICogMjQgKiBzdHlsZS5hZHZhbmNlbWVudDtcblxuICBpZiAobW92ZS5raW5kID09PSAnYmFzaWMnICYmIGlzUHJvbW90aW9uUm93KHN0YXRlLmJvYXJkU2l6ZSwgY29sb3IsIG1vdmUudG8pKSB7XG4gICAgc2NvcmUgKz0gMTAwMDA7XG4gIH1cbiAgaWYgKHRhcmdldFBpZWNlKSB7XG4gICAgc2NvcmUgKz0gNTIwICogc3R5bGUuY2FwdHVyZTtcbiAgICBjb25zdCB0YXJnZXRBZHZhbmNlbWVudCA9XG4gICAgICB0YXJnZXRQaWVjZS5jb2xvciA9PT0gJ3doaXRlJ1xuICAgICAgICA/IHN0YXRlLmJvYXJkU2l6ZSAtIDEgLSB0YXJnZXRQaWVjZS5wb3NpdGlvbi5yb3dcbiAgICAgICAgOiB0YXJnZXRQaWVjZS5wb3NpdGlvbi5yb3c7XG4gICAgc2NvcmUgKz0gdGFyZ2V0QWR2YW5jZW1lbnQgKiAxNiAqIHN0eWxlLmNhcHR1cmU7XG4gIH1cbiAgaWYgKG1vdmUua2luZCA9PT0gJ3Bvd2VyJykge1xuICAgIHNjb3JlICs9ICh0YXJnZXRQaWVjZSA/IDEyMCA6IGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IC02MCA6IC0zMCkgKiBzdHlsZS5wb3dlcjtcbiAgfVxuICBpZiAobW92ZS5hbmltYWwgPT09ICdsaW9uJykgc2NvcmUgLT0gMjAgKiBzdHlsZS5wb3dlcjtcbiAgaWYgKG1vdmUuYW5pbWFsID09PSAna2FuZ2Fyb28nKSBzY29yZSArPSAxNCAqIHN0eWxlLnBvd2VyO1xuICBpZiAod291bGRVbmxvY2tQb3dlcihzdGF0ZSwgY29sb3IsIG1vdmUudG8pKSBzY29yZSArPSA5MCAqIHN0eWxlLnVubG9jaztcbiAgaWYgKGluY2x1ZGVUYWN0aWNhbFByZXNzdXJlICYmIHN0YXRlLmJvYXJkU2l6ZSA8PSA2KSB7XG4gICAgc2NvcmUgKz0gY291bnRQb3dlclJlYWNoQWZ0ZXJNb3ZlKHN0YXRlLCBtb3ZlLCBjb2xvcikgKiAoZGlmZmljdWx0eSA9PT0gJ2hhcmQnID8gOCA6IDQpICogc3R5bGUubW9iaWxpdHk7XG4gICAgc2NvcmUgKz0gY291bnRQcm90ZWN0ZWRUaHJlYXRzQWZ0ZXJNb3ZlKHN0YXRlLCBtb3ZlLCBjb2xvcikgKiAoZGlmZmljdWx0eSA9PT0gJ2hhcmQnID8gMzYgOiAxOCkgKiBzdHlsZS50cmFwO1xuICAgIHNjb3JlICs9IHNjb3JlRW5kZ2FtZVByZXNzdXJlKHN0YXRlLCBtb3ZlLCBjb2xvcikgKiBzdHlsZS5lbmRnYW1lO1xuICB9IGVsc2Uge1xuICAgIHNjb3JlICs9IHNjb3JlRW5kZ2FtZVByZXNzdXJlKHN0YXRlLCBtb3ZlLCBjb2xvcikgKiBzdHlsZS5lbmRnYW1lO1xuICB9XG4gIGlmIChkaWZmaWN1bHR5ID09PSAnaGFyZCcgJiYgaXNTcXVhcmVWdWxuZXJhYmxlQWZ0ZXJNb3ZlKHN0YXRlLCBtb3ZlKSkge1xuICAgIHNjb3JlIC09ICh0YXJnZXRQaWVjZSA/IDgwIDogMTQwKSAqIHN0eWxlLnNhZmV0eTtcbiAgfVxuICBzY29yZSArPSAoTWF0aC5yYW5kb20oKSAtIDAuNSkgKiBzdHlsZS5yYW5kb21uZXNzO1xuXG4gIHJldHVybiBzY29yZTtcbn1cblxuZnVuY3Rpb24gc2NvcmVCb3RNb3ZlV2l0aExvb2thaGVhZChcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIG1vdmU6IENoZXNzaW1hbHNNb3ZlLFxuICBkaWZmaWN1bHR5OiBDaGVzc2ltYWxzQm90RGlmZmljdWx0eSxcbiAgc3R5bGU6IENoZXNzaW1hbHNCb3RTdHlsZSxcbik6IG51bWJlciB7XG4gIGxldCBzY29yZSA9IHNjb3JlQm90TW92ZShzdGF0ZSwgbW92ZSwgZGlmZmljdWx0eSwgc3R5bGUpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgYWZ0ZXJNb3ZlID0gYXBwbHlDaGVzc2ltYWxzTW92ZShzdGF0ZSwgbW92ZSk7XG4gICAgaWYgKGFmdGVyTW92ZS5zdGF0dXMgPT09ICdmaW5pc2hlZCcpIHJldHVybiBzY29yZSArIDUwMDA7XG5cbiAgICBjb25zdCBvcHBvbmVudE1vdmVzID0gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoYWZ0ZXJNb3ZlKTtcbiAgICBjb25zdCBvcHBvbmVudEltbWVkaWF0ZVdpbiA9IG9wcG9uZW50TW92ZXMuc29tZShcbiAgICAgIChvcHBvbmVudE1vdmUpID0+XG4gICAgICAgIG9wcG9uZW50TW92ZS5raW5kID09PSAnYmFzaWMnICYmXG4gICAgICAgIGlzUHJvbW90aW9uUm93KGFmdGVyTW92ZS5ib2FyZFNpemUsIGFmdGVyTW92ZS5jdXJyZW50VHVybiwgb3Bwb25lbnRNb3ZlLnRvKSxcbiAgICApO1xuICAgIGlmIChvcHBvbmVudEltbWVkaWF0ZVdpbikge1xuICAgICAgc2NvcmUgLT0gKGRpZmZpY3VsdHkgPT09ICdlYXN5JyA/IDE4MDAgOiBkaWZmaWN1bHR5ID09PSAnbm9ybWFsJyA/IDUyMDAgOiA4MDAwKSAqIHN0eWxlLnNhZmV0eTtcbiAgICB9XG5cbiAgICBjb25zdCBtb3ZlZFBpZWNlID0gYWZ0ZXJNb3ZlLnBpZWNlcy5maW5kKChwaWVjZSkgPT4gcGllY2UuaWQgPT09IG1vdmUucGllY2VJZCAmJiAhcGllY2UuY2FwdHVyZWQpO1xuICAgIGlmIChtb3ZlZFBpZWNlKSB7XG4gICAgICBjb25zdCBjYW5DYXB0dXJlTW92ZWRQaWVjZSA9IG9wcG9uZW50TW92ZXMuc29tZSgob3Bwb25lbnRNb3ZlKSA9PiBvcHBvbmVudE1vdmUuY2FwdHVyZXNQaWVjZUlkID09PSBtb3ZlLnBpZWNlSWQpO1xuICAgICAgaWYgKGNhbkNhcHR1cmVNb3ZlZFBpZWNlKSB7XG4gICAgICAgIHNjb3JlIC09IChtb3ZlLmNhcHR1cmVzUGllY2VJZCA/IDE4MCA6IGRpZmZpY3VsdHkgPT09ICdlYXN5JyA/IDEyMCA6IGRpZmZpY3VsdHkgPT09ICdub3JtYWwnID8gMzYwIDogNTYwKVxuICAgICAgICAgICogc3R5bGUuc2FmZXR5O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjZW50ZXIgPSAoYWZ0ZXJNb3ZlLmJvYXJkU2l6ZSAtIDEpIC8gMjtcbiAgICAgIGNvbnN0IGNlbnRlckNvbnRyb2wgPSBNYXRoLm1heCgwLCBhZnRlck1vdmUuYm9hcmRTaXplIC8gMiAtIE1hdGguYWJzKG1vdmVkUGllY2UucG9zaXRpb24uY29sIC0gY2VudGVyKSk7XG4gICAgICBzY29yZSArPSBjZW50ZXJDb250cm9sICogKGRpZmZpY3VsdHkgPT09ICdoYXJkJyA/IDE4IDogMTApICogc3R5bGUuY2VudGVyO1xuICAgIH1cblxuICAgIGNvbnN0IG9wcG9uZW50QmVzdFJlcGx5ID0gb3Bwb25lbnRNb3Zlc1xuICAgICAgLm1hcCgob3Bwb25lbnRNb3ZlKSA9PiBzY29yZUJvdE1vdmUoYWZ0ZXJNb3ZlLCBvcHBvbmVudE1vdmUsIGRpZmZpY3VsdHksIHN0eWxlLCBmYWxzZSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYiAtIGEpWzBdO1xuXG4gICAgaWYgKG9wcG9uZW50QmVzdFJlcGx5KSB7XG4gICAgICBjb25zdCByZXBseVdlaWdodCA9IGRpZmZpY3VsdHkgPT09ICdlYXN5JyA/IDAuMTIgOiBkaWZmaWN1bHR5ID09PSAnbm9ybWFsJyA/IDAuMzIgOiAwLjQ4O1xuICAgICAgc2NvcmUgLT0gb3Bwb25lbnRCZXN0UmVwbHkgKiByZXBseVdlaWdodCAqIHN0eWxlLnJlcGx5O1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgc2NvcmUgLT0gMTAwMDtcbiAgfVxuXG4gIHJldHVybiBzY29yZTtcbn1cblxuZnVuY3Rpb24gY291bnRQb3dlclJlYWNoQWZ0ZXJNb3ZlKFxuICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgbW92ZTogQ2hlc3NpbWFsc01vdmUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4pOiBudW1iZXIge1xuICB0cnkge1xuICAgIGNvbnN0IGFmdGVyTW92ZSA9IGFwcGx5Q2hlc3NpbWFsc01vdmUoc3RhdGUsIG1vdmUpO1xuICAgIGNvbnN0IGV2YWx1YXRpb25TdGF0ZSA9IHsgLi4uYWZ0ZXJNb3ZlLCBjdXJyZW50VHVybjogY29sb3IgfTtcbiAgICByZXR1cm4gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoZXZhbHVhdGlvblN0YXRlLCBjb2xvcikuZmlsdGVyKChuZXh0TW92ZSkgPT4gbmV4dE1vdmUua2luZCA9PT0gJ3Bvd2VyJykubGVuZ3RoO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb3VudFByb3RlY3RlZFRocmVhdHNBZnRlck1vdmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbik6IG51bWJlciB7XG4gIHRyeSB7XG4gICAgY29uc3QgYWZ0ZXJNb3ZlID0gYXBwbHlDaGVzc2ltYWxzTW92ZShzdGF0ZSwgbW92ZSk7XG4gICAgY29uc3QgZXZhbHVhdGlvblN0YXRlID0geyAuLi5hZnRlck1vdmUsIGN1cnJlbnRUdXJuOiBjb2xvciB9O1xuICAgIGNvbnN0IG91ck1vdmVzID0gZ2V0Q2hlc3NpbWFsc0FsbExlZ2FsTW92ZXMoZXZhbHVhdGlvblN0YXRlLCBjb2xvcik7XG4gICAgY29uc3QgZW5lbXlQaWVjZXMgPSBhY3RpdmVQaWVjZXMoYWZ0ZXJNb3ZlKS5maWx0ZXIoKHBpZWNlKSA9PiBwaWVjZS5jb2xvciAhPT0gY29sb3IgJiYgIXBpZWNlLmNhcHR1cmVkKTtcbiAgICByZXR1cm4gZW5lbXlQaWVjZXMuZmlsdGVyKChwaWVjZSkgPT5cbiAgICAgIG91ck1vdmVzLnNvbWUoKG5leHRNb3ZlKSA9PiBuZXh0TW92ZS5jYXB0dXJlc1BpZWNlSWQgPT09IHBpZWNlLmlkKSxcbiAgICApLmxlbmd0aDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NvcmVFbmRnYW1lUHJlc3N1cmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBtb3ZlOiBDaGVzc2ltYWxzTW92ZSxcbiAgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbik6IG51bWJlciB7XG4gIGNvbnN0IHJlbWFpbmluZ0VuZW15UGllY2VzID0gYWN0aXZlUGllY2VzKHN0YXRlKS5maWx0ZXIoKHBpZWNlKSA9PiBwaWVjZS5jb2xvciAhPT0gY29sb3IgJiYgIXBpZWNlLmNhcHR1cmVkKS5sZW5ndGg7XG4gIGNvbnN0IHVyZ2VuY3kgPSByZW1haW5pbmdFbmVteVBpZWNlcyA8PSBNYXRoLm1heCgyLCBNYXRoLmZsb29yKHN0YXRlLmJvYXJkU2l6ZSAvIDIpKSA/IDEuNiA6IDE7XG4gIGNvbnN0IGRpc3RhbmNlVG9Qcm9tb3Rpb24gPVxuICAgIGNvbG9yID09PSAnd2hpdGUnID8gbW92ZS50by5yb3cgOiBzdGF0ZS5ib2FyZFNpemUgLSAxIC0gbW92ZS50by5yb3c7XG4gIHJldHVybiBNYXRoLm1heCgwLCBzdGF0ZS5ib2FyZFNpemUgLSBkaXN0YW5jZVRvUHJvbW90aW9uKSAqIDE0ICogdXJnZW5jeTtcbn1cblxuZnVuY3Rpb24gY2hvb3NlQ29uc2VydmF0aXZlSGFyZENhcHR1cmUoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBzY29yZWQ6IHsgbW92ZTogQ2hlc3NpbWFsc01vdmU7IHNjb3JlOiBudW1iZXIgfVtdLFxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBpZiAoc3RhdGUuYm9hcmRTaXplICE9PSA4KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGJlc3QgPSBzY29yZWRbMF07XG4gIGlmICghYmVzdCB8fCBiZXN0Lm1vdmUua2luZCAhPT0gJ3Bvd2VyJyB8fCAhYmVzdC5tb3ZlLmNhcHR1cmVzUGllY2VJZCB8fCBiZXN0LnNjb3JlID49IDEwMDAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGJlc3RCYXNpY0NhcHR1cmUgPSBzY29yZWQuZmluZCgoaXRlbSkgPT4gaXRlbS5tb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXRlbS5tb3ZlLmNhcHR1cmVzUGllY2VJZCk7XG4gIGlmICghYmVzdEJhc2ljQ2FwdHVyZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICByZXR1cm4gYmVzdC5zY29yZSAtIGJlc3RCYXNpY0NhcHR1cmUuc2NvcmUgPD0gNjUwID8gYmVzdEJhc2ljQ2FwdHVyZS5tb3ZlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBwaWNrTm9pc3lCb3RNb3ZlKFxuICBzY29yZWQ6IEFycmF5PHsgbW92ZTogQ2hlc3NpbWFsc01vdmU7IHNjb3JlOiBudW1iZXIgfT4sXG4gIHNwcmVhZDogbnVtYmVyLFxuKTogQ2hlc3NpbWFsc01vdmUgfCB1bmRlZmluZWQge1xuICBpZiAoc2NvcmVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcG9vbFNpemUgPSBNYXRoLm1heCgxLCBNYXRoLmNlaWwoc2NvcmVkLmxlbmd0aCAqIHNwcmVhZCkpO1xuICBjb25zdCBwb29sID0gc2NvcmVkLnNsaWNlKDAsIHBvb2xTaXplKTtcbiAgY29uc3QgdG9wU2NvcmUgPSBwb29sWzBdPy5zY29yZSA/PyAwO1xuICBjb25zdCB3ZWlnaHRlZCA9IHBvb2wubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHJlbGF0aXZlID0gTWF0aC5tYXgoMCwgaXRlbS5zY29yZSAtIHRvcFNjb3JlICsgMTIwMCk7XG4gICAgY29uc3Qgd2VpZ2h0ID0gTWF0aC5tYXgoMSwgcmVsYXRpdmUgLyAxMjAgKyAocG9vbC5sZW5ndGggLSBpbmRleCkgKiAyKTtcbiAgICByZXR1cm4geyAuLi5pdGVtLCB3ZWlnaHQgfTtcbiAgfSk7XG4gIGNvbnN0IHRvdGFsV2VpZ2h0ID0gd2VpZ2h0ZWQucmVkdWNlKCh0b3RhbCwgaXRlbSkgPT4gdG90YWwgKyBpdGVtLndlaWdodCwgMCk7XG4gIGxldCBjdXJzb3IgPSBNYXRoLnJhbmRvbSgpICogdG90YWxXZWlnaHQ7XG4gIGZvciAoY29uc3QgaXRlbSBvZiB3ZWlnaHRlZCkge1xuICAgIGN1cnNvciAtPSBpdGVtLndlaWdodDtcbiAgICBpZiAoY3Vyc29yIDw9IDApIHJldHVybiBpdGVtLm1vdmU7XG4gIH1cbiAgcmV0dXJuIHBvb2xbMF0/Lm1vdmU7XG59XG5cbmZ1bmN0aW9uIGdldEltbWVkaWF0ZVdpbm5pbmdNb3ZlcyhcbiAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4pOiBDaGVzc2ltYWxzTW92ZVtdIHtcbiAgcmV0dXJuIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKHN0YXRlLCBjb2xvcikuZmlsdGVyKFxuICAgIChtb3ZlKSA9PiBtb3ZlLmtpbmQgPT09ICdiYXNpYycgJiYgaXNQcm9tb3Rpb25Sb3coc3RhdGUuYm9hcmRTaXplLCBjb2xvciwgbW92ZS50byksXG4gICk7XG59XG5cbmZ1bmN0aW9uIHdvdWxkVW5sb2NrUG93ZXIoXG4gIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uLFxuKTogYm9vbGVhbiB7XG4gIGlmIChzdGF0ZS5wbGF5ZXJzW2NvbG9yXS5wb3dlclVubG9ja2VkKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNlbnRlclRvcCA9IHN0YXRlLmJvYXJkU2l6ZSAvIDIgLSAxO1xuICBjb25zdCBjZW50ZXJCb3R0b20gPSBzdGF0ZS5ib2FyZFNpemUgLyAyO1xuICByZXR1cm4gY29sb3IgPT09ICd3aGl0ZScgPyBwb3NpdGlvbi5yb3cgPD0gY2VudGVyVG9wIDogcG9zaXRpb24ucm93ID49IGNlbnRlckJvdHRvbTtcbn1cblxuZnVuY3Rpb24gaXNTcXVhcmVWdWxuZXJhYmxlQWZ0ZXJNb3ZlKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCBtb3ZlOiBDaGVzc2ltYWxzTW92ZSk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IGFmdGVyTW92ZSA9IGFwcGx5Q2hlc3NpbWFsc01vdmUoc3RhdGUsIG1vdmUpO1xuICAgIGlmIChhZnRlck1vdmUuc3RhdHVzID09PSAnZmluaXNoZWQnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGdldENoZXNzaW1hbHNBbGxMZWdhbE1vdmVzKGFmdGVyTW92ZSkuc29tZSgoZW5lbXlNb3ZlKSA9PlxuICAgICAgc2FtZVBvc2l0aW9uKGVuZW15TW92ZS50bywgbW92ZS50bykgJiYgISFlbmVteU1vdmUuY2FwdHVyZXNQaWVjZUlkLFxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQb3dlckRpcmVjdGlvbnMoYW5pbWFsOiBDaGVzc2ltYWxzQW5pbWFsVHlwZSk6IENoZXNzaW1hbHNQb3NpdGlvbltdIHtcbiAgaWYgKGFuaW1hbCA9PT0gJ2VhZ2xlJykge1xuICAgIHJldHVybiBbXG4gICAgICB7IHJvdzogLTEsIGNvbDogLTEgfSxcbiAgICAgIHsgcm93OiAtMSwgY29sOiAxIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IDEsIGNvbDogMSB9LFxuICAgIF07XG4gIH1cbiAgaWYgKGFuaW1hbCA9PT0gJ2J1bGwnKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgcm93OiAtMSwgY29sOiAwIH0sXG4gICAgICB7IHJvdzogMSwgY29sOiAwIH0sXG4gICAgICB7IHJvdzogMCwgY29sOiAtMSB9LFxuICAgICAgeyByb3c6IDAsIGNvbDogMSB9LFxuICAgIF07XG4gIH1cbiAgcmV0dXJuIFtcbiAgICB7IHJvdzogLTEsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogLTEsIGNvbDogMCB9LFxuICAgIHsgcm93OiAtMSwgY29sOiAxIH0sXG4gICAgeyByb3c6IDAsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMCwgY29sOiAxIH0sXG4gICAgeyByb3c6IDEsIGNvbDogLTEgfSxcbiAgICB7IHJvdzogMSwgY29sOiAwIH0sXG4gICAgeyByb3c6IDEsIGNvbDogMSB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiByZWZyZXNoQ2hlc3NpbWFsc1Bvd2VyVW5sb2NrcyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHBsYXllcnM6IHtcbiAgICAgIHdoaXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLnBsYXllcnMud2hpdGUsXG4gICAgICAgIHBvd2VyVW5sb2NrZWQ6XG4gICAgICAgICAgc3RhdGUucGxheWVycy53aGl0ZS5wb3dlclVubG9ja2VkIHx8XG4gICAgICAgICAgaGFzQ3Jvc3NlZENlbnRlcihzdGF0ZSwgJ3doaXRlJykgfHxcbiAgICAgICAgICBoYXNFbmVteUVudGVyZWRIb21lKHN0YXRlLCAnd2hpdGUnKSxcbiAgICAgIH0sXG4gICAgICBibGFjazoge1xuICAgICAgICAuLi5zdGF0ZS5wbGF5ZXJzLmJsYWNrLFxuICAgICAgICBwb3dlclVubG9ja2VkOlxuICAgICAgICAgIHN0YXRlLnBsYXllcnMuYmxhY2sucG93ZXJVbmxvY2tlZCB8fFxuICAgICAgICAgIGhhc0Nyb3NzZWRDZW50ZXIoc3RhdGUsICdibGFjaycpIHx8XG4gICAgICAgICAgaGFzRW5lbXlFbnRlcmVkSG9tZShzdGF0ZSwgJ2JsYWNrJyksXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc0Nyb3NzZWRDZW50ZXIoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIGNvbG9yOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IpOiBib29sZWFuIHtcbiAgY29uc3QgY2VudGVyVG9wID0gc3RhdGUuYm9hcmRTaXplIC8gMiAtIDE7XG4gIGNvbnN0IGNlbnRlckJvdHRvbSA9IHN0YXRlLmJvYXJkU2l6ZSAvIDI7XG4gIHJldHVybiBhY3RpdmVQaWVjZXMoc3RhdGUpLnNvbWUoKHBpZWNlKSA9PiB7XG4gICAgaWYgKHBpZWNlLmNvbG9yICE9PSBjb2xvciB8fCBwaWVjZS5jYXB0dXJlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/IHBpZWNlLnBvc2l0aW9uLnJvdyA8PSBjZW50ZXJUb3AgOiBwaWVjZS5wb3NpdGlvbi5yb3cgPj0gY2VudGVyQm90dG9tO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGFzRW5lbXlFbnRlcmVkSG9tZShzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgY29sb3I6IENoZXNzaW1hbHNQbGF5ZXJDb2xvcik6IGJvb2xlYW4ge1xuICBjb25zdCBjZW50ZXJUb3AgPSBzdGF0ZS5ib2FyZFNpemUgLyAyIC0gMTtcbiAgY29uc3QgY2VudGVyQm90dG9tID0gc3RhdGUuYm9hcmRTaXplIC8gMjtcbiAgY29uc3QgZW5lbXkgPSBvdGhlckNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGFjdGl2ZVBpZWNlcyhzdGF0ZSkuc29tZSgocGllY2UpID0+IHtcbiAgICBpZiAocGllY2UuY29sb3IgIT09IGVuZW15IHx8IHBpZWNlLmNhcHR1cmVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gcGllY2UucG9zaXRpb24ucm93ID49IGNlbnRlckJvdHRvbSA6IHBpZWNlLnBvc2l0aW9uLnJvdyA8PSBjZW50ZXJUb3A7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBpc1Byb21vdGlvblJvdyhcbiAgYm9hcmRTaXplOiBDaGVzc2ltYWxzQm9hcmRTaXplLFxuICBjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICBwb3NpdGlvbjogQ2hlc3NpbWFsc1Bvc2l0aW9uLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBjb2xvciA9PT0gJ3doaXRlJyA/IHBvc2l0aW9uLnJvdyA9PT0gMCA6IHBvc2l0aW9uLnJvdyA9PT0gYm9hcmRTaXplIC0gMTtcbn1cblxuZnVuY3Rpb24gaXNJbnNpZGVCb2FyZChib2FyZFNpemU6IENoZXNzaW1hbHNCb2FyZFNpemUsIHBvc2l0aW9uOiBDaGVzc2ltYWxzUG9zaXRpb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBwb3NpdGlvbi5yb3cgPj0gMCAmJiBwb3NpdGlvbi5yb3cgPCBib2FyZFNpemUgJiYgcG9zaXRpb24uY29sID49IDAgJiYgcG9zaXRpb24uY29sIDwgYm9hcmRTaXplXG4gICk7XG59XG5cbmZ1bmN0aW9uIHNhbWVQb3NpdGlvbihhOiBDaGVzc2ltYWxzUG9zaXRpb24sIGI6IENoZXNzaW1hbHNQb3NpdGlvbik6IGJvb2xlYW4ge1xuICByZXR1cm4gYS5yb3cgPT09IGIucm93ICYmIGEuY29sID09PSBiLmNvbDtcbn1cblxuZnVuY3Rpb24gb3RoZXJDb2xvcihjb2xvcjogQ2hlc3NpbWFsc1BsYXllckNvbG9yKTogQ2hlc3NpbWFsc1BsYXllckNvbG9yIHtcbiAgcmV0dXJuIGNvbG9yID09PSAnd2hpdGUnID8gJ2JsYWNrJyA6ICd3aGl0ZSc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvY2FsSWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2NhbC0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDgpfWA7XG59XG4iXX0=
|