valtech-components 4.0.586 → 4.0.590

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.
@@ -12,7 +12,14 @@ export function canPlayCard(game, seat, card) {
12
12
  if (card.type === 'offering')
13
13
  return !player.offeringPlayedThisTurn;
14
14
  if (card.type === 'character') {
15
- return readyOfferings(player) >= (card.cost ?? 0) && player.battleZone.length < CHRISTIANITY_BATTLE_SLOTS;
15
+ return (readyOfferings(player) >= (card.cost ?? 0) &&
16
+ player.battleZone.length < CHRISTIANITY_BATTLE_SLOTS);
17
+ }
18
+ if (card.type === 'action' ||
19
+ card.type === 'wisdom' ||
20
+ card.type === 'event' ||
21
+ card.type === 'tool') {
22
+ return readyOfferings(player) >= (card.cost ?? 0);
16
23
  }
17
24
  if (card.type === 'place')
18
25
  return true;
@@ -48,7 +55,7 @@ export function playCardFromHand(game, seat, card, options = {}) {
48
55
  player.offeringPlayedThisTurn = true;
49
56
  }
50
57
  else if (card.type === 'character') {
51
- const occupiedSlots = new Set(player.battleZone.map((character, index) => Number.isInteger(character.slot) ? character.slot ?? index : index));
58
+ const occupiedSlots = new Set(player.battleZone.map((character, index) => Number.isInteger(character.slot) ? (character.slot ?? index) : index));
52
59
  const targetSlot = options.slotIndex ?? [0, 1, 2, 3].find(index => !occupiedSlots.has(index));
53
60
  if (targetSlot === undefined || occupiedSlots.has(targetSlot)) {
54
61
  return { game, played: false, playedOfferingValue: 0, spentOfferings: 0, log: [] };
@@ -70,6 +77,18 @@ export function playCardFromHand(game, seat, card, options = {}) {
70
77
  });
71
78
  player.battleZone.sort((left, right) => (left.slot ?? 0) - (right.slot ?? 0));
72
79
  }
80
+ else if (card.type === 'action' ||
81
+ card.type === 'wisdom' ||
82
+ card.type === 'event' ||
83
+ card.type === 'tool') {
84
+ spentOfferings = card.cost ?? 0;
85
+ if (spentOfferings > 0) {
86
+ spendOfferings(player, spentOfferings);
87
+ }
88
+ next.historyZone.push(card.id);
89
+ next.players[seat] = player;
90
+ resolveCardEffect(next, card, seat);
91
+ }
73
92
  else if (card.type === 'place') {
74
93
  const previousPlace = next.placeZone[0];
75
94
  if (previousPlace) {
@@ -106,9 +125,7 @@ export function resolveOfferingAbility(game, seat, offeringInstanceId, messages)
106
125
  }
107
126
  const reserveGain = offeringAbilityReserveGain(liveOffering.abilityText, liveOffering.value);
108
127
  player.temporaryOfferingReserve = (player.temporaryOfferingReserve ?? 0) + reserveGain;
109
- player.offerings = player.offerings.map(card => (card.instanceId === offeringInstanceId
110
- ? { ...card, abilityUsedThisTurn: true }
111
- : card));
128
+ player.offerings = player.offerings.map(card => card.instanceId === offeringInstanceId ? { ...card, abilityUsedThisTurn: true } : card);
112
129
  player.leaderHp = Math.max(0, player.leaderHp - 1);
113
130
  next.revision++;
114
131
  const log = [`${liveOffering.name}: ${liveOffering.abilityName}.`];
@@ -123,6 +140,12 @@ function playCardLog(card, displayName) {
123
140
  return `${displayName} queda lista como ofrenda.`;
124
141
  if (card.type === 'place')
125
142
  return `${displayName} queda como lugar activo.`;
143
+ if (card.type === 'action' || card.type === 'event')
144
+ return `${displayName} fue jugada.`;
145
+ if (card.type === 'wisdom')
146
+ return `${displayName} fue revelada.`;
147
+ if (card.type === 'tool')
148
+ return `${displayName} fue equipada.`;
126
149
  return `${displayName} entra en batalla.`;
127
150
  }
128
151
  export function resolveAttackLeader(game, attackerSeat, attackerInstanceId, messages) {
@@ -137,7 +160,9 @@ export function resolveAttackLeader(game, attackerSeat, attackerInstanceId, mess
137
160
  const damage = attacker.attack;
138
161
  next.players[defenderSeat].leaderHp = Math.max(0, next.players[defenderSeat].leaderHp - damage);
139
162
  attacker.canAttack = false;
140
- const log = [`${attacker.name} ${attackerSeat === 'P1' ? messages.attacksOpponentLeader : messages.attacksYourLeader}`];
163
+ const log = [
164
+ `${attacker.name} ${attackerSeat === 'P1' ? messages.attacksOpponentLeader : messages.attacksYourLeader}`,
165
+ ];
141
166
  evaluateVictory(next, log, messages);
142
167
  next.revision++;
143
168
  next.log = [...log, ...next.log].slice(0, 4);
@@ -162,7 +187,13 @@ export function resolveAttackCharacter(game, attackerSeat, attackerInstanceId, t
162
187
  evaluateVictory(next, log, messages);
163
188
  next.revision++;
164
189
  next.log = [...log, ...next.log].slice(0, 4);
165
- return { game: next, attacked: true, attackerDamage: target.attack, targetDamage: attacker.attack, log };
190
+ return {
191
+ game: next,
192
+ attacked: true,
193
+ attackerDamage: target.attack,
194
+ targetDamage: attacker.attack,
195
+ log,
196
+ };
166
197
  }
167
198
  export function advanceTurn(game, messages) {
168
199
  game.players[game.turnOwner].temporaryOfferingReserve = 0;
@@ -170,7 +201,11 @@ export function advanceTurn(game, messages) {
170
201
  game.turnCount++;
171
202
  const current = game.players[game.turnOwner];
172
203
  current.offeringPlayedThisTurn = false;
173
- current.offerings = current.offerings.map(offering => ({ ...offering, ready: true, abilityUsedThisTurn: false }));
204
+ current.offerings = current.offerings.map(offering => ({
205
+ ...offering,
206
+ ready: true,
207
+ abilityUsedThisTurn: false,
208
+ }));
174
209
  current.battleZone = current.battleZone.map(card => ({ ...card, canAttack: true }));
175
210
  const drawnCard = game.sharedDeck.shift();
176
211
  const log = [];
@@ -192,16 +227,16 @@ export function advanceTurn(game, messages) {
192
227
  ];
193
228
  }
194
229
  export function evaluateVictory(game, log, messages) {
195
- if (game.players.P1.leaderHp > 0
196
- && game.players.P2.leaderHp > 0
197
- && game.sharedDeck.length > 0)
230
+ if (game.players.P1.leaderHp > 0 && game.players.P2.leaderHp > 0 && game.sharedDeck.length > 0)
198
231
  return;
199
232
  game.status = 'finished';
200
233
  const winner = game.players.P1.leaderHp <= 0
201
234
  ? 'P2'
202
235
  : game.players.P2.leaderHp <= 0
203
236
  ? 'P1'
204
- : game.players.P1.leaderHp >= game.players.P2.leaderHp ? 'P1' : 'P2';
237
+ : game.players.P1.leaderHp >= game.players.P2.leaderHp
238
+ ? 'P1'
239
+ : 'P2';
205
240
  game.matchScore[winner] += 1;
206
241
  log.push(winner === 'P1' ? messages.youWin : messages.opponentWins);
207
242
  }
@@ -235,4 +270,142 @@ function offeringAbilityReserveGain(abilityText, fallbackValue) {
235
270
  export function opponentSeat(seat) {
236
271
  return seat === 'P1' ? 'P2' : 'P1';
237
272
  }
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyaXN0aWFuaXR5LXJ1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9taW5pLWdhbWVzL2NocmlzdGlhbml0eS1ydWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFzQzNDLE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBK0I7SUFDNUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyx3QkFBd0IsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzSSxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUErQjtJQUM1RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakYsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQ3pCLElBQTJCLEVBQzNCLElBQXNCLEVBQ3RCLElBQWdDO0lBRWhDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxhQUFhLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVTtRQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUM7SUFDcEUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQzlCLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyx5QkFBeUIsQ0FBQztJQUM1RyxDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU87UUFBRSxPQUFPLElBQUksQ0FBQztJQUN2QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLElBQTJCLEVBQzNCLElBQXNCLEVBQ3RCLElBQWdDLEVBQ2hDLFVBQXdELEVBQUU7SUFFMUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNyRixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RELElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3JGLENBQUM7SUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckQsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFDNUIsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBRXZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDN0IsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUMzRCxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztZQUNwQixVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLGFBQWEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUU7WUFDakUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2YsSUFBSSxFQUFFLFdBQVc7WUFDakIsS0FBSyxFQUFFLElBQUk7WUFDWCxLQUFLLEVBQUUsSUFBSTtZQUNYLEtBQUssRUFBRSxtQkFBbUI7WUFDMUIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDOUIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztJQUN2QyxDQUFDO1NBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9JLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5RixJQUFJLFVBQVUsS0FBSyxTQUFTLElBQUksYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzlELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDckYsQ0FBQztRQUNELGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUNoQyxjQUFjLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQ3JCLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUNwRixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZixJQUFJLEVBQUUsV0FBVztZQUNqQixLQUFLLEVBQUUsSUFBSTtZQUNYLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLElBQUksRUFBRSxVQUFVO1lBQ2hCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDeEIsU0FBUyxFQUFFLElBQUk7WUFDZixLQUFLLEVBQUUsSUFBSTtZQUNYLFNBQVMsRUFBRSxLQUFLO1NBQ2pCLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7U0FBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDakMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDN0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDaEYsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsSUFBMkIsRUFDM0IsSUFBc0IsRUFDdEIsa0JBQTBCO0lBRTFCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxhQUFhLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDM0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssa0JBQWtCLENBQUMsQ0FBQztJQUN2RixJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLG1CQUFtQjtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzVGLE9BQU8sY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUNwQyxJQUEyQixFQUMzQixJQUFzQixFQUN0QixrQkFBMEIsRUFDMUIsUUFBbUM7SUFFbkMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQzNELE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDaEcsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzNGLElBQUksQ0FBQyxZQUFZO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUVqSCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztJQUNyRCxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixjQUFjLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRywwQkFBMEIsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3RixNQUFNLENBQUMsd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLElBQUksQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0lBQ3ZGLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUM5QyxJQUFJLENBQUMsVUFBVSxLQUFLLGtCQUFrQjtRQUNwQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7UUFDeEMsQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbkQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ25FLElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBQ0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0MsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDM0YsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQWdDLEVBQUUsV0FBbUI7SUFDeEUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVU7UUFBRSxPQUFPLEdBQUcsV0FBVyw0QkFBNEIsQ0FBQztJQUNoRixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTztRQUFFLE9BQU8sR0FBRyxXQUFXLDJCQUEyQixDQUFDO0lBQzVFLE9BQU8sR0FBRyxXQUFXLG9CQUFvQixDQUFDO0FBQzVDLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLElBQTJCLEVBQzNCLFlBQThCLEVBQzlCLGtCQUEwQixFQUMxQixRQUFrQztJQUVsQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDaEQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLGFBQWEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEYsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDaEYsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLGtCQUFrQixDQUFDLENBQUM7SUFDNUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFFcEgsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNoRyxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQixNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxZQUFZLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDeEgsZUFBZSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hCLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3RGLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLElBQTJCLEVBQzNCLFlBQThCLEVBQzlCLGtCQUEwQixFQUMxQixnQkFBd0IsRUFDeEIsUUFBa0M7SUFFbEMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxhQUFhO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFFakgsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssa0JBQWtCLENBQUMsQ0FBQztJQUM1RyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLGdCQUFnQixDQUFDLENBQUM7SUFDeEcsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNoRixDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ3BDLFFBQVEsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNwQyxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUM1RSxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFN0MsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzRyxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUEyQixFQUFFLFFBQWtDO0lBQ3pGLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLHdCQUF3QixHQUFHLENBQUMsQ0FBQztJQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUM7SUFDdkMsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsSCxPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQyxNQUFNLEdBQUcsR0FBYSxFQUFFLENBQUM7SUFDekIsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLGVBQWUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxPQUFPO1FBQ0wsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVztRQUNqRixHQUFHLFFBQVEsQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLFdBQVcsR0FBRztRQUM1QyxHQUFHLEdBQUc7S0FDUCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBMkIsRUFBRSxHQUFhLEVBQUUsUUFBa0M7SUFDNUcsSUFDRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsQ0FBQztXQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsQ0FBQztXQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQzdCLE9BQU87SUFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztJQUN6QixNQUFNLE1BQU0sR0FBcUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLENBQUM7UUFDNUQsQ0FBQyxDQUFDLElBQUk7UUFDTixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLENBQUM7WUFDN0IsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUErQixFQUFFLElBQTJCO0lBQzNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07UUFBRSxPQUFPO0lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQStCLEVBQUUsSUFBWTtJQUMxRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDckIsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsd0JBQXdCLElBQUksQ0FBQyxDQUFDO0lBQzlELElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sQ0FBQyx3QkFBd0IsR0FBRyxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FBQztRQUMzRSxTQUFTLElBQUkscUJBQXFCLENBQUM7SUFDckMsQ0FBQztJQUNELE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDakQsSUFBSSxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUs7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUN2RCxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQztRQUM1QixPQUFPLEVBQUUsR0FBRyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3ZDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsMEJBQTBCLENBQUMsV0FBK0IsRUFBRSxhQUFxQjtJQUN4RixNQUFNLEtBQUssR0FBRyxXQUFXLEVBQUUsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDOUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDckQsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDckYsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBc0I7SUFDakQsT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sXG4gIENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlLFxuICBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsXG4gIENocmlzdGlhbml0eVBsYXllclN0YXRlLFxuICBDaHJpc3RpYW5pdHlTZWF0LFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IENIUklTVElBTklUWV9CQVRUTEVfU0xPVFMgPSA0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENocmlzdGlhbml0eVJ1bGVNZXNzYWdlcyB7XG4gIGF0dGFja3NPcHBvbmVudExlYWRlcjogc3RyaW5nO1xuICBhdHRhY2tzWW91ckxlYWRlcjogc3RyaW5nO1xuICBjb21iYXRzQWdhaW5zdDogc3RyaW5nO1xuICBkcmF3c0NhcmQ6IHN0cmluZztcbiAgZGVja0lzRW1wdHk6IHN0cmluZztcbiAgdHVybk9mOiBzdHJpbmc7XG4gIHlvdVdpbjogc3RyaW5nO1xuICBvcHBvbmVudFdpbnM6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaHJpc3RpYW5pdHlQbGF5Q2FyZFJlc3VsdCB7XG4gIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZTtcbiAgcGxheWVkOiBib29sZWFuO1xuICBwbGF5ZWRPZmZlcmluZ1ZhbHVlOiBudW1iZXI7XG4gIHNwZW50T2ZmZXJpbmdzOiBudW1iZXI7XG4gIGxvZzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hyaXN0aWFuaXR5QXR0YWNrUmVzdWx0IHtcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlO1xuICBhdHRhY2tlZDogYm9vbGVhbjtcbiAgYXR0YWNrZXJEYW1hZ2U6IG51bWJlcjtcbiAgdGFyZ2V0RGFtYWdlOiBudW1iZXI7XG4gIGxvZzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hyaXN0aWFuaXR5T2ZmZXJpbmdBYmlsaXR5UmVzdWx0IHtcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlO1xuICByZXNvbHZlZDogYm9vbGVhbjtcbiAgbGVhZGVyRGFtYWdlOiBudW1iZXI7XG4gIHJlc2VydmVHYWluOiBudW1iZXI7XG4gIHNwZW50T2ZmZXJpbmdzOiBudW1iZXI7XG4gIGxvZzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkeU9mZmVyaW5ncyhwbGF5ZXI6IENocmlzdGlhbml0eVBsYXllclN0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBsYXllci5vZmZlcmluZ3MucmVkdWNlKCh0b3RhbCwgb2ZmZXJpbmcpID0+IHRvdGFsICsgKG9mZmVyaW5nLnJlYWR5ID8gb2ZmZXJpbmcudmFsdWUgOiAwKSwgcGxheWVyLnRlbXBvcmFyeU9mZmVyaW5nUmVzZXJ2ZSA/PyAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvdGFsT2ZmZXJpbmdzKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gcGxheWVyLm9mZmVyaW5ncy5yZWR1Y2UoKHRvdGFsLCBvZmZlcmluZykgPT4gdG90YWwgKyBvZmZlcmluZy52YWx1ZSwgMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5QbGF5Q2FyZChcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0LFxuICBjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbixcbik6IGJvb2xlYW4ge1xuICBpZiAoZ2FtZS5zdGF0dXMgIT09ICdpbl9wcm9ncmVzcycgfHwgZ2FtZS50dXJuT3duZXIgIT09IHNlYXQpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcGxheWVyID0gZ2FtZS5wbGF5ZXJzW3NlYXRdO1xuICBpZiAoY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKSByZXR1cm4gIXBsYXllci5vZmZlcmluZ1BsYXllZFRoaXNUdXJuO1xuICBpZiAoY2FyZC50eXBlID09PSAnY2hhcmFjdGVyJykge1xuICAgIHJldHVybiByZWFkeU9mZmVyaW5ncyhwbGF5ZXIpID49IChjYXJkLmNvc3QgPz8gMCkgJiYgcGxheWVyLmJhdHRsZVpvbmUubGVuZ3RoIDwgQ0hSSVNUSUFOSVRZX0JBVFRMRV9TTE9UUztcbiAgfVxuICBpZiAoY2FyZC50eXBlID09PSAncGxhY2UnKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGxheUNhcmRGcm9tSGFuZChcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0LFxuICBjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbixcbiAgb3B0aW9uczogeyBzbG90SW5kZXg/OiBudW1iZXI7IGRpc3BsYXlOYW1lPzogc3RyaW5nIH0gPSB7fSxcbik6IENocmlzdGlhbml0eVBsYXlDYXJkUmVzdWx0IHtcbiAgaWYgKCFjYW5QbGF5Q2FyZChnYW1lLCBzZWF0LCBjYXJkKSkge1xuICAgIHJldHVybiB7IGdhbWUsIHBsYXllZDogZmFsc2UsIHBsYXllZE9mZmVyaW5nVmFsdWU6IDAsIHNwZW50T2ZmZXJpbmdzOiAwLCBsb2c6IFtdIH07XG4gIH1cblxuICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICBjb25zdCBwbGF5ZXIgPSBuZXh0LnBsYXllcnNbc2VhdF07XG4gIGNvbnN0IGhhbmRJbmRleCA9IHBsYXllci5oYW5kPy5pbmRleE9mKGNhcmQuaWQpID8/IC0xO1xuICBpZiAoaGFuZEluZGV4IDwgMCB8fCAhcGxheWVyLmhhbmQpIHtcbiAgICByZXR1cm4geyBnYW1lLCBwbGF5ZWQ6IGZhbHNlLCBwbGF5ZWRPZmZlcmluZ1ZhbHVlOiAwLCBzcGVudE9mZmVyaW5nczogMCwgbG9nOiBbXSB9O1xuICB9XG5cbiAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lID8/IGNhcmQubmFtZTtcbiAgbGV0IHBsYXllZE9mZmVyaW5nVmFsdWUgPSAwO1xuICBsZXQgc3BlbnRPZmZlcmluZ3MgPSAwO1xuXG4gIHBsYXllci5oYW5kLnNwbGljZShoYW5kSW5kZXgsIDEpO1xuICBpZiAoY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKSB7XG4gICAgcGxheWVkT2ZmZXJpbmdWYWx1ZSA9IGNhcmQub2ZmZXJpbmdWYWx1ZSA/PyBjYXJkLmxpZmUgPz8gMTtcbiAgICBwbGF5ZXIub2ZmZXJpbmdzLnB1c2goe1xuICAgICAgaW5zdGFuY2VJZDogYCR7c2VhdC50b0xvd2VyQ2FzZSgpfV9vZmZlcmluZ18ke25leHQucmV2aXNpb24gKyAxfWAsXG4gICAgICBjYXJkSWQ6IGNhcmQuaWQsXG4gICAgICBuYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgIG93bmVyOiBzZWF0LFxuICAgICAgcmVhZHk6IHRydWUsXG4gICAgICB2YWx1ZTogcGxheWVkT2ZmZXJpbmdWYWx1ZSxcbiAgICAgIGFiaWxpdHlOYW1lOiBjYXJkLmFiaWxpdHlOYW1lLFxuICAgICAgYWJpbGl0eVRleHQ6IGNhcmQuYWJpbGl0eVRleHQsXG4gICAgICBhYmlsaXR5Q29zdDogY2FyZC5hYmlsaXR5Q29zdCxcbiAgICB9KTtcbiAgICBwbGF5ZXIub2ZmZXJpbmdQbGF5ZWRUaGlzVHVybiA9IHRydWU7XG4gIH0gZWxzZSBpZiAoY2FyZC50eXBlID09PSAnY2hhcmFjdGVyJykge1xuICAgIGNvbnN0IG9jY3VwaWVkU2xvdHMgPSBuZXcgU2V0KHBsYXllci5iYXR0bGVab25lLm1hcCgoY2hhcmFjdGVyLCBpbmRleCkgPT4gTnVtYmVyLmlzSW50ZWdlcihjaGFyYWN0ZXIuc2xvdCkgPyBjaGFyYWN0ZXIuc2xvdCA/PyBpbmRleCA6IGluZGV4KSk7XG4gICAgY29uc3QgdGFyZ2V0U2xvdCA9IG9wdGlvbnMuc2xvdEluZGV4ID8/IFswLCAxLCAyLCAzXS5maW5kKGluZGV4ID0+ICFvY2N1cGllZFNsb3RzLmhhcyhpbmRleCkpO1xuICAgIGlmICh0YXJnZXRTbG90ID09PSB1bmRlZmluZWQgfHwgb2NjdXBpZWRTbG90cy5oYXModGFyZ2V0U2xvdCkpIHtcbiAgICAgIHJldHVybiB7IGdhbWUsIHBsYXllZDogZmFsc2UsIHBsYXllZE9mZmVyaW5nVmFsdWU6IDAsIHNwZW50T2ZmZXJpbmdzOiAwLCBsb2c6IFtdIH07XG4gICAgfVxuICAgIHNwZW50T2ZmZXJpbmdzID0gY2FyZC5jb3N0ID8/IDA7XG4gICAgc3BlbmRPZmZlcmluZ3MocGxheWVyLCBzcGVudE9mZmVyaW5ncyk7XG4gICAgY29uc3QgbGlmZSA9IGNhcmQubGlmZSA/PyAxO1xuICAgIHBsYXllci5iYXR0bGVab25lLnB1c2goe1xuICAgICAgaW5zdGFuY2VJZDogYCR7c2VhdC50b0xvd2VyQ2FzZSgpfV8ke25leHQucmV2aXNpb24gKyAxfV8ke3BsYXllci5iYXR0bGVab25lLmxlbmd0aH1gLFxuICAgICAgY2FyZElkOiBjYXJkLmlkLFxuICAgICAgbmFtZTogZGlzcGxheU5hbWUsXG4gICAgICBvd25lcjogc2VhdCxcbiAgICAgIGNvbnRyb2xsZXI6IHNlYXQsXG4gICAgICBzbG90OiB0YXJnZXRTbG90LFxuICAgICAgYXR0YWNrOiBjYXJkLmF0dGFjayA/PyAwLFxuICAgICAgY3VycmVudEhwOiBsaWZlLFxuICAgICAgbWF4SHA6IGxpZmUsXG4gICAgICBjYW5BdHRhY2s6IGZhbHNlLFxuICAgIH0pO1xuICAgIHBsYXllci5iYXR0bGVab25lLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiAobGVmdC5zbG90ID8/IDApIC0gKHJpZ2h0LnNsb3QgPz8gMCkpO1xuICB9IGVsc2UgaWYgKGNhcmQudHlwZSA9PT0gJ3BsYWNlJykge1xuICAgIGNvbnN0IHByZXZpb3VzUGxhY2UgPSBuZXh0LnBsYWNlWm9uZVswXTtcbiAgICBpZiAocHJldmlvdXNQbGFjZSkge1xuICAgICAgbmV4dC5oaXN0b3J5Wm9uZS5wdXNoKHByZXZpb3VzUGxhY2UpO1xuICAgIH1cbiAgICBuZXh0LnBsYWNlWm9uZSA9IFtjYXJkLmlkXTtcbiAgfVxuXG4gIG5leHQucmV2aXNpb24rKztcbiAgY29uc3QgbG9nID0gW3BsYXlDYXJkTG9nKGNhcmQsIGRpc3BsYXlOYW1lKV07XG4gIG5leHQubG9nID0gWy4uLmxvZywgLi4ubmV4dC5sb2ddLnNsaWNlKDAsIDQpO1xuICByZXR1cm4geyBnYW1lOiBuZXh0LCBwbGF5ZWQ6IHRydWUsIHBsYXllZE9mZmVyaW5nVmFsdWUsIHNwZW50T2ZmZXJpbmdzLCBsb2cgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhblVzZU9mZmVyaW5nQWJpbGl0eShcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0LFxuICBvZmZlcmluZ0luc3RhbmNlSWQ6IHN0cmluZyxcbik6IGJvb2xlYW4ge1xuICBpZiAoZ2FtZS5zdGF0dXMgIT09ICdpbl9wcm9ncmVzcycgfHwgZ2FtZS50dXJuT3duZXIgIT09IHNlYXQpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcGxheWVyID0gZ2FtZS5wbGF5ZXJzW3NlYXRdO1xuICBjb25zdCBvZmZlcmluZyA9IHBsYXllci5vZmZlcmluZ3MuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gb2ZmZXJpbmdJbnN0YW5jZUlkKTtcbiAgaWYgKCFvZmZlcmluZz8ucmVhZHkgfHwgIW9mZmVyaW5nLmFiaWxpdHlOYW1lIHx8IG9mZmVyaW5nLmFiaWxpdHlVc2VkVGhpc1R1cm4pIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHJlYWR5T2ZmZXJpbmdzKHBsYXllcikgPj0gKG9mZmVyaW5nLmFiaWxpdHlDb3N0ID8/IDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZU9mZmVyaW5nQWJpbGl0eShcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0LFxuICBvZmZlcmluZ0luc3RhbmNlSWQ6IHN0cmluZyxcbiAgbWVzc2FnZXM/OiBDaHJpc3RpYW5pdHlSdWxlTWVzc2FnZXMsXG4pOiBDaHJpc3RpYW5pdHlPZmZlcmluZ0FiaWxpdHlSZXN1bHQge1xuICBpZiAoIWNhblVzZU9mZmVyaW5nQWJpbGl0eShnYW1lLCBzZWF0LCBvZmZlcmluZ0luc3RhbmNlSWQpKSB7XG4gICAgcmV0dXJuIHsgZ2FtZSwgcmVzb2x2ZWQ6IGZhbHNlLCBsZWFkZXJEYW1hZ2U6IDAsIHJlc2VydmVHYWluOiAwLCBzcGVudE9mZmVyaW5nczogMCwgbG9nOiBbXSB9O1xuICB9XG5cbiAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgY29uc3QgcGxheWVyID0gbmV4dC5wbGF5ZXJzW3NlYXRdO1xuICBjb25zdCBsaXZlT2ZmZXJpbmcgPSBwbGF5ZXIub2ZmZXJpbmdzLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IG9mZmVyaW5nSW5zdGFuY2VJZCk7XG4gIGlmICghbGl2ZU9mZmVyaW5nKSByZXR1cm4geyBnYW1lLCByZXNvbHZlZDogZmFsc2UsIGxlYWRlckRhbWFnZTogMCwgcmVzZXJ2ZUdhaW46IDAsIHNwZW50T2ZmZXJpbmdzOiAwLCBsb2c6IFtdIH07XG5cbiAgY29uc3Qgc3BlbnRPZmZlcmluZ3MgPSBsaXZlT2ZmZXJpbmcuYWJpbGl0eUNvc3QgPz8gMDtcbiAgaWYgKHNwZW50T2ZmZXJpbmdzID4gMCkge1xuICAgIHNwZW5kT2ZmZXJpbmdzKHBsYXllciwgc3BlbnRPZmZlcmluZ3MpO1xuICB9XG4gIGNvbnN0IHJlc2VydmVHYWluID0gb2ZmZXJpbmdBYmlsaXR5UmVzZXJ2ZUdhaW4obGl2ZU9mZmVyaW5nLmFiaWxpdHlUZXh0LCBsaXZlT2ZmZXJpbmcudmFsdWUpO1xuICBwbGF5ZXIudGVtcG9yYXJ5T2ZmZXJpbmdSZXNlcnZlID0gKHBsYXllci50ZW1wb3JhcnlPZmZlcmluZ1Jlc2VydmUgPz8gMCkgKyByZXNlcnZlR2FpbjtcbiAgcGxheWVyLm9mZmVyaW5ncyA9IHBsYXllci5vZmZlcmluZ3MubWFwKGNhcmQgPT4gKFxuICAgIGNhcmQuaW5zdGFuY2VJZCA9PT0gb2ZmZXJpbmdJbnN0YW5jZUlkXG4gICAgICA/IHsgLi4uY2FyZCwgYWJpbGl0eVVzZWRUaGlzVHVybjogdHJ1ZSB9XG4gICAgICA6IGNhcmRcbiAgKSk7XG4gIHBsYXllci5sZWFkZXJIcCA9IE1hdGgubWF4KDAsIHBsYXllci5sZWFkZXJIcCAtIDEpO1xuICBuZXh0LnJldmlzaW9uKys7XG4gIGNvbnN0IGxvZyA9IFtgJHtsaXZlT2ZmZXJpbmcubmFtZX06ICR7bGl2ZU9mZmVyaW5nLmFiaWxpdHlOYW1lfS5gXTtcbiAgaWYgKG1lc3NhZ2VzKSB7XG4gICAgZXZhbHVhdGVWaWN0b3J5KG5leHQsIGxvZywgbWVzc2FnZXMpO1xuICB9XG4gIG5leHQubG9nID0gWy4uLmxvZywgLi4ubmV4dC5sb2ddLnNsaWNlKDAsIDQpO1xuICByZXR1cm4geyBnYW1lOiBuZXh0LCByZXNvbHZlZDogdHJ1ZSwgbGVhZGVyRGFtYWdlOiAxLCByZXNlcnZlR2Fpbiwgc3BlbnRPZmZlcmluZ3MsIGxvZyB9O1xufVxuXG5mdW5jdGlvbiBwbGF5Q2FyZExvZyhjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbiwgZGlzcGxheU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHJldHVybiBgJHtkaXNwbGF5TmFtZX0gcXVlZGEgbGlzdGEgY29tbyBvZnJlbmRhLmA7XG4gIGlmIChjYXJkLnR5cGUgPT09ICdwbGFjZScpIHJldHVybiBgJHtkaXNwbGF5TmFtZX0gcXVlZGEgY29tbyBsdWdhciBhY3Rpdm8uYDtcbiAgcmV0dXJuIGAke2Rpc3BsYXlOYW1lfSBlbnRyYSBlbiBiYXRhbGxhLmA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQXR0YWNrTGVhZGVyKFxuICBnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsXG4gIGF0dGFja2VyU2VhdDogQ2hyaXN0aWFuaXR5U2VhdCxcbiAgYXR0YWNrZXJJbnN0YW5jZUlkOiBzdHJpbmcsXG4gIG1lc3NhZ2VzOiBDaHJpc3RpYW5pdHlSdWxlTWVzc2FnZXMsXG4pOiBDaHJpc3RpYW5pdHlBdHRhY2tSZXN1bHQge1xuICBjb25zdCBkZWZlbmRlclNlYXQgPSBvcHBvbmVudFNlYXQoYXR0YWNrZXJTZWF0KTtcbiAgaWYgKGdhbWUuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnIHx8IGdhbWUucGxheWVyc1tkZWZlbmRlclNlYXRdLmJhdHRsZVpvbmUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7IGdhbWUsIGF0dGFja2VkOiBmYWxzZSwgYXR0YWNrZXJEYW1hZ2U6IDAsIHRhcmdldERhbWFnZTogMCwgbG9nOiBbXSB9O1xuICB9XG5cbiAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgY29uc3QgYXR0YWNrZXIgPSBuZXh0LnBsYXllcnNbYXR0YWNrZXJTZWF0XS5iYXR0bGVab25lLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IGF0dGFja2VySW5zdGFuY2VJZCk7XG4gIGlmICghYXR0YWNrZXIgfHwgIWF0dGFja2VyLmNhbkF0dGFjaykgcmV0dXJuIHsgZ2FtZSwgYXR0YWNrZWQ6IGZhbHNlLCBhdHRhY2tlckRhbWFnZTogMCwgdGFyZ2V0RGFtYWdlOiAwLCBsb2c6IFtdIH07XG5cbiAgY29uc3QgZGFtYWdlID0gYXR0YWNrZXIuYXR0YWNrO1xuICBuZXh0LnBsYXllcnNbZGVmZW5kZXJTZWF0XS5sZWFkZXJIcCA9IE1hdGgubWF4KDAsIG5leHQucGxheWVyc1tkZWZlbmRlclNlYXRdLmxlYWRlckhwIC0gZGFtYWdlKTtcbiAgYXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gIGNvbnN0IGxvZyA9IFtgJHthdHRhY2tlci5uYW1lfSAke2F0dGFja2VyU2VhdCA9PT0gJ1AxJyA/IG1lc3NhZ2VzLmF0dGFja3NPcHBvbmVudExlYWRlciA6IG1lc3NhZ2VzLmF0dGFja3NZb3VyTGVhZGVyfWBdO1xuICBldmFsdWF0ZVZpY3RvcnkobmV4dCwgbG9nLCBtZXNzYWdlcyk7XG4gIG5leHQucmV2aXNpb24rKztcbiAgbmV4dC5sb2cgPSBbLi4ubG9nLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gIHJldHVybiB7IGdhbWU6IG5leHQsIGF0dGFja2VkOiB0cnVlLCBhdHRhY2tlckRhbWFnZTogMCwgdGFyZ2V0RGFtYWdlOiBkYW1hZ2UsIGxvZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUF0dGFja0NoYXJhY3RlcihcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBhdHRhY2tlclNlYXQ6IENocmlzdGlhbml0eVNlYXQsXG4gIGF0dGFja2VySW5zdGFuY2VJZDogc3RyaW5nLFxuICB0YXJnZXRJbnN0YW5jZUlkOiBzdHJpbmcsXG4gIG1lc3NhZ2VzOiBDaHJpc3RpYW5pdHlSdWxlTWVzc2FnZXMsXG4pOiBDaHJpc3RpYW5pdHlBdHRhY2tSZXN1bHQge1xuICBjb25zdCBkZWZlbmRlclNlYXQgPSBvcHBvbmVudFNlYXQoYXR0YWNrZXJTZWF0KTtcbiAgaWYgKGdhbWUuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnKSByZXR1cm4geyBnYW1lLCBhdHRhY2tlZDogZmFsc2UsIGF0dGFja2VyRGFtYWdlOiAwLCB0YXJnZXREYW1hZ2U6IDAsIGxvZzogW10gfTtcblxuICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICBjb25zdCBhdHRhY2tlciA9IG5leHQucGxheWVyc1thdHRhY2tlclNlYXRdLmJhdHRsZVpvbmUuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gYXR0YWNrZXJJbnN0YW5jZUlkKTtcbiAgY29uc3QgdGFyZ2V0ID0gbmV4dC5wbGF5ZXJzW2RlZmVuZGVyU2VhdF0uYmF0dGxlWm9uZS5maW5kKGNhcmQgPT4gY2FyZC5pbnN0YW5jZUlkID09PSB0YXJnZXRJbnN0YW5jZUlkKTtcbiAgaWYgKCFhdHRhY2tlciB8fCAhdGFyZ2V0IHx8ICFhdHRhY2tlci5jYW5BdHRhY2spIHtcbiAgICByZXR1cm4geyBnYW1lLCBhdHRhY2tlZDogZmFsc2UsIGF0dGFja2VyRGFtYWdlOiAwLCB0YXJnZXREYW1hZ2U6IDAsIGxvZzogW10gfTtcbiAgfVxuXG4gIHRhcmdldC5jdXJyZW50SHAgLT0gYXR0YWNrZXIuYXR0YWNrO1xuICBhdHRhY2tlci5jdXJyZW50SHAgLT0gdGFyZ2V0LmF0dGFjaztcbiAgYXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gIGNsZWFudXBEZXN0cm95ZWQobmV4dC5wbGF5ZXJzW2F0dGFja2VyU2VhdF0sIG5leHQpO1xuICBjbGVhbnVwRGVzdHJveWVkKG5leHQucGxheWVyc1tkZWZlbmRlclNlYXRdLCBuZXh0KTtcbiAgY29uc3QgbG9nID0gW2Ake2F0dGFja2VyLm5hbWV9ICR7bWVzc2FnZXMuY29tYmF0c0FnYWluc3R9ICR7dGFyZ2V0Lm5hbWV9LmBdO1xuICBldmFsdWF0ZVZpY3RvcnkobmV4dCwgbG9nLCBtZXNzYWdlcyk7XG4gIG5leHQucmV2aXNpb24rKztcbiAgbmV4dC5sb2cgPSBbLi4ubG9nLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG5cbiAgcmV0dXJuIHsgZ2FtZTogbmV4dCwgYXR0YWNrZWQ6IHRydWUsIGF0dGFja2VyRGFtYWdlOiB0YXJnZXQuYXR0YWNrLCB0YXJnZXREYW1hZ2U6IGF0dGFja2VyLmF0dGFjaywgbG9nIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZHZhbmNlVHVybihnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsIG1lc3NhZ2VzOiBDaHJpc3RpYW5pdHlSdWxlTWVzc2FnZXMpOiBzdHJpbmdbXSB7XG4gIGdhbWUucGxheWVyc1tnYW1lLnR1cm5Pd25lcl0udGVtcG9yYXJ5T2ZmZXJpbmdSZXNlcnZlID0gMDtcbiAgZ2FtZS50dXJuT3duZXIgPSBvcHBvbmVudFNlYXQoZ2FtZS50dXJuT3duZXIpO1xuICBnYW1lLnR1cm5Db3VudCsrO1xuICBjb25zdCBjdXJyZW50ID0gZ2FtZS5wbGF5ZXJzW2dhbWUudHVybk93bmVyXTtcbiAgY3VycmVudC5vZmZlcmluZ1BsYXllZFRoaXNUdXJuID0gZmFsc2U7XG4gIGN1cnJlbnQub2ZmZXJpbmdzID0gY3VycmVudC5vZmZlcmluZ3MubWFwKG9mZmVyaW5nID0+ICh7IC4uLm9mZmVyaW5nLCByZWFkeTogdHJ1ZSwgYWJpbGl0eVVzZWRUaGlzVHVybjogZmFsc2UgfSkpO1xuICBjdXJyZW50LmJhdHRsZVpvbmUgPSBjdXJyZW50LmJhdHRsZVpvbmUubWFwKGNhcmQgPT4gKHsgLi4uY2FyZCwgY2FuQXR0YWNrOiB0cnVlIH0pKTtcbiAgY29uc3QgZHJhd25DYXJkID0gZ2FtZS5zaGFyZWREZWNrLnNoaWZ0KCk7XG4gIGNvbnN0IGxvZzogc3RyaW5nW10gPSBbXTtcbiAgaWYgKGRyYXduQ2FyZCkge1xuICAgIGlmIChjdXJyZW50LmhhbmQpIHtcbiAgICAgIGN1cnJlbnQuaGFuZC5wdXNoKGRyYXduQ2FyZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnQuaGFuZENvdW50ID0gKGN1cnJlbnQuaGFuZENvdW50ID8/IDApICsgMTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZXZhbHVhdGVWaWN0b3J5KGdhbWUsIGxvZywgbWVzc2FnZXMpO1xuICB9XG4gIHJldHVybiBbXG4gICAgZHJhd25DYXJkID8gYCR7Y3VycmVudC5kaXNwbGF5TmFtZX0gJHttZXNzYWdlcy5kcmF3c0NhcmR9YCA6IG1lc3NhZ2VzLmRlY2tJc0VtcHR5LFxuICAgIGAke21lc3NhZ2VzLnR1cm5PZn0gJHtjdXJyZW50LmRpc3BsYXlOYW1lfS5gLFxuICAgIC4uLmxvZyxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlVmljdG9yeShnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsIGxvZzogc3RyaW5nW10sIG1lc3NhZ2VzOiBDaHJpc3RpYW5pdHlSdWxlTWVzc2FnZXMpOiB2b2lkIHtcbiAgaWYgKFxuICAgIGdhbWUucGxheWVycy5QMS5sZWFkZXJIcCA+IDBcbiAgICAmJiBnYW1lLnBsYXllcnMuUDIubGVhZGVySHAgPiAwXG4gICAgJiYgZ2FtZS5zaGFyZWREZWNrLmxlbmd0aCA+IDBcbiAgKSByZXR1cm47XG4gIGdhbWUuc3RhdHVzID0gJ2ZpbmlzaGVkJztcbiAgY29uc3Qgd2lubmVyOiBDaHJpc3RpYW5pdHlTZWF0ID0gZ2FtZS5wbGF5ZXJzLlAxLmxlYWRlckhwIDw9IDBcbiAgICA/ICdQMidcbiAgICA6IGdhbWUucGxheWVycy5QMi5sZWFkZXJIcCA8PSAwXG4gICAgICA/ICdQMSdcbiAgICAgIDogZ2FtZS5wbGF5ZXJzLlAxLmxlYWRlckhwID49IGdhbWUucGxheWVycy5QMi5sZWFkZXJIcCA/ICdQMScgOiAnUDInO1xuICBnYW1lLm1hdGNoU2NvcmVbd2lubmVyXSArPSAxO1xuICBsb2cucHVzaCh3aW5uZXIgPT09ICdQMScgPyBtZXNzYWdlcy55b3VXaW4gOiBtZXNzYWdlcy5vcHBvbmVudFdpbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW51cERlc3Ryb3llZChwbGF5ZXI6IENocmlzdGlhbml0eVBsYXllclN0YXRlLCBnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUpOiB2b2lkIHtcbiAgY29uc3QgZGVzdHJveWVkID0gcGxheWVyLmJhdHRsZVpvbmUuZmlsdGVyKGNhcmQgPT4gY2FyZC5jdXJyZW50SHAgPD0gMCk7XG4gIGlmICghZGVzdHJveWVkLmxlbmd0aCkgcmV0dXJuO1xuICBnYW1lLmhpc3Rvcnlab25lLnB1c2goLi4uZGVzdHJveWVkLm1hcChjYXJkID0+IGNhcmQuY2FyZElkKSk7XG4gIHBsYXllci5iYXR0bGVab25lID0gcGxheWVyLmJhdHRsZVpvbmUuZmlsdGVyKGNhcmQgPT4gY2FyZC5jdXJyZW50SHAgPiAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwZW5kT2ZmZXJpbmdzKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUsIGNvc3Q6IG51bWJlcik6IHZvaWQge1xuICBsZXQgcmVtYWluaW5nID0gY29zdDtcbiAgY29uc3QgdGVtcG9yYXJ5UmVzZXJ2ZSA9IHBsYXllci50ZW1wb3JhcnlPZmZlcmluZ1Jlc2VydmUgPz8gMDtcbiAgaWYgKHRlbXBvcmFyeVJlc2VydmUgPiAwKSB7XG4gICAgY29uc3Qgc3BlbnRUZW1wb3JhcnlSZXNlcnZlID0gTWF0aC5taW4odGVtcG9yYXJ5UmVzZXJ2ZSwgcmVtYWluaW5nKTtcbiAgICBwbGF5ZXIudGVtcG9yYXJ5T2ZmZXJpbmdSZXNlcnZlID0gdGVtcG9yYXJ5UmVzZXJ2ZSAtIHNwZW50VGVtcG9yYXJ5UmVzZXJ2ZTtcbiAgICByZW1haW5pbmcgLT0gc3BlbnRUZW1wb3JhcnlSZXNlcnZlO1xuICB9XG4gIHBsYXllci5vZmZlcmluZ3MgPSBwbGF5ZXIub2ZmZXJpbmdzLm1hcChvZmZlcmluZyA9PiB7XG4gICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8ICFvZmZlcmluZy5yZWFkeSkgcmV0dXJuIG9mZmVyaW5nO1xuICAgIHJlbWFpbmluZyAtPSBvZmZlcmluZy52YWx1ZTtcbiAgICByZXR1cm4geyAuLi5vZmZlcmluZywgcmVhZHk6IGZhbHNlIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvZmZlcmluZ0FiaWxpdHlSZXNlcnZlR2FpbihhYmlsaXR5VGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLCBmYWxsYmFja1ZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBtYXRjaCA9IGFiaWxpdHlUZXh0Py5tYXRjaCgvdmFsb3IgZGUgKFxcZCspIG9mcmVuZGFzPy9pKTtcbiAgY29uc3QgcGFyc2VkID0gbWF0Y2ggPyBOdW1iZXIobWF0Y2hbMV0pIDogTnVtYmVyLk5hTjtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpICYmIHBhcnNlZCA+IDAgPyBwYXJzZWQgOiBNYXRoLm1heCgxLCBmYWxsYmFja1ZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wcG9uZW50U2VhdChzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogQ2hyaXN0aWFuaXR5U2VhdCB7XG4gIHJldHVybiBzZWF0ID09PSAnUDEnID8gJ1AyJyA6ICdQMSc7XG59XG4iXX0=
273
+ // --- Effect resolution (H7) ---
274
+ function resolveCardEffect(game, card, seat) {
275
+ const text = card.abilities?.[0]?.text ?? '';
276
+ switch (card.strategy) {
277
+ case 'directdamage':
278
+ effectDirectDamage(game, card, text, seat);
279
+ break;
280
+ case 'restore':
281
+ effectRestore(game, card, text, seat);
282
+ break;
283
+ case 'draw':
284
+ effectDraw(game, card, text, seat);
285
+ break;
286
+ case 'discard':
287
+ effectDiscard(game, card, text, seat);
288
+ break;
289
+ }
290
+ }
291
+ function effectDirectDamage(game, card, text, seat) {
292
+ const opponent = opponentSeat(seat);
293
+ const lower = text.toLowerCase();
294
+ let dmg;
295
+ if (lower.includes('tantos')) {
296
+ dmg = game.players[seat].battleZone.length;
297
+ }
298
+ else {
299
+ dmg = parseSpanishNumber(text);
300
+ }
301
+ if (dmg <= 0)
302
+ return;
303
+ game.players[opponent].leaderHp = Math.max(0, game.players[opponent].leaderHp - dmg);
304
+ }
305
+ function effectRestore(game, card, text, seat) {
306
+ const lower = text.toLowerCase();
307
+ const n = Math.max(1, parseSpanishNumber(text) || 1);
308
+ if (lower.includes('los líderes') || lower.includes('los lideres')) {
309
+ for (const s of ['P1', 'P2']) {
310
+ const p = game.players[s];
311
+ p.leaderHp = Math.min(p.leaderMaxHp ?? 30, p.leaderHp + n);
312
+ }
313
+ return;
314
+ }
315
+ if (lower.includes('tus personajes') || lower.includes('personajes en juego')) {
316
+ for (const ch of game.players[seat].battleZone) {
317
+ ch.currentHp = Math.min(ch.maxHp, ch.currentHp + n);
318
+ }
319
+ return;
320
+ }
321
+ if (lower.includes('del líder') ||
322
+ lower.includes('al líder') ||
323
+ lower.includes('del lider') ||
324
+ lower.includes('al lider')) {
325
+ const p = game.players[seat];
326
+ p.leaderHp = Math.min(p.leaderMaxHp ?? 30, p.leaderHp + n);
327
+ }
328
+ }
329
+ function effectDraw(game, card, text, seat) {
330
+ const lower = text.toLowerCase();
331
+ if (lower.includes('los jugadores')) {
332
+ const n = Math.max(1, parseSpanishNumber(text) || 1);
333
+ for (let i = 0; i < n; i++) {
334
+ drawCardFor(game, 'P1');
335
+ drawCardFor(game, 'P2');
336
+ }
337
+ return;
338
+ }
339
+ if (lower.includes('por cada personaje oponente')) {
340
+ const n = game.players[opponentSeat(seat)].battleZone.length;
341
+ for (let i = 0; i < n; i++)
342
+ drawCardFor(game, seat);
343
+ return;
344
+ }
345
+ const n = Math.max(1, parseSpanishNumber(text) || 1);
346
+ for (let i = 0; i < n; i++)
347
+ drawCardFor(game, seat);
348
+ }
349
+ function effectDiscard(game, card, text, seat) {
350
+ const lower = text.toLowerCase();
351
+ const opponent = opponentSeat(seat);
352
+ if (lower.includes('ambos jugadores descartan su mano') ||
353
+ lower.includes('los jugadores descartan su mano')) {
354
+ for (const s of ['P1', 'P2']) {
355
+ const p = game.players[s];
356
+ game.historyZone.push(...(p.hand ?? []));
357
+ p.hand = [];
358
+ }
359
+ return;
360
+ }
361
+ if ((lower.includes('oponente') && lower.includes('azar')) ||
362
+ lower.includes('tu oponente descarta')) {
363
+ const n = Math.max(1, parseSpanishNumber(text) || 1);
364
+ const op = game.players[opponent];
365
+ const hand = op.hand ?? [];
366
+ let seed = game.revision * 31 + game.turnCount * 7;
367
+ for (let i = 0; i < n && hand.length > 0; i++) {
368
+ seed = (seed * 1664525 + 1013904223) & 0xffffffff;
369
+ const idx = Math.abs(seed) % hand.length;
370
+ game.historyZone.push(hand[idx]);
371
+ hand.splice(idx, 1);
372
+ }
373
+ op.hand = hand;
374
+ }
375
+ }
376
+ function drawCardFor(game, seat) {
377
+ const card = game.sharedDeck.shift();
378
+ if (!card)
379
+ return;
380
+ const p = game.players[seat];
381
+ if (p.hand)
382
+ p.hand.push(card);
383
+ else
384
+ p.handCount = (p.handCount ?? 0) + 1;
385
+ }
386
+ function parseSpanishNumber(text) {
387
+ const words = {
388
+ un: 1,
389
+ una: 1,
390
+ uno: 1,
391
+ dos: 2,
392
+ tres: 3,
393
+ cuatro: 4,
394
+ cinco: 5,
395
+ seis: 6,
396
+ siete: 7,
397
+ ocho: 8,
398
+ nueve: 9,
399
+ diez: 10,
400
+ };
401
+ const digitMatch = text.match(/\b(\d+)\b/);
402
+ if (digitMatch)
403
+ return parseInt(digitMatch[1], 10);
404
+ const lower = text.toLowerCase();
405
+ for (const [word, n] of Object.entries(words)) {
406
+ if (new RegExp(`\\b${word}\\b`).test(lower))
407
+ return n;
408
+ }
409
+ return 0;
410
+ }
411
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyaXN0aWFuaXR5LXJ1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9taW5pLWdhbWVzL2NocmlzdGlhbml0eS1ydWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFzQzNDLE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBK0I7SUFDNUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FDNUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDbEUsTUFBTSxDQUFDLHdCQUF3QixJQUFJLENBQUMsQ0FDckMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQStCO0lBQzVELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FDekIsSUFBMkIsRUFDM0IsSUFBc0IsRUFDdEIsSUFBZ0M7SUFFaEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLGFBQWEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMzRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0Is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LEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUF1QixFQUFFLENBQUM7WUFDbkQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUUsQ0FBUyxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztRQUM5RSxLQUFLLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDL0MsRUFBRSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFDRCxJQUNFLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQzNCLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQzFCLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQzNCLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQzFCLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBRSxDQUFTLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7QUFDSCxDQUFDO0FB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LEVBQUUsQ0FBQztRQUNOLEdBQUcsRUFBRSxDQUFDO1FBQ04sR0FBRyxFQUFFLENBQUM7UUFDTixJQUFJLEVBQUUsQ0FBQztRQUNQLE1BQU0sRUFBRSxDQUFDO1FBQ1QsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLEVBQUUsQ0FBQztRQUNQLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxFQUFFLENBQUM7UUFDUCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksRUFBRSxFQUFFO0tBQ1QsQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0MsSUFBSSxVQUFVO1FBQUUsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNqQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzlDLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sXG4gIENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlLFxuICBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsXG4gIENocmlzdGlhbml0eVBsYXllclN0YXRlLFxuICBDaHJpc3RpYW5pdHlTZWF0LFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IENIUklTVElBTklUWV9CQVRUTEVfU0xPVFMgPSA0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENocmlzdGlhbml0eVJ1bGVNZXNzYWdlcyB7XG4gIGF0dGFja3NPcHBvbmVudExlYWRlcjogc3RyaW5nO1xuICBhdHRhY2tzWW91ckxlYWRlcjogc3RyaW5nO1xuICBjb21iYXRzQWdhaW5zdDogc3RyaW5nO1xuICBkcmF3c0NhcmQ6IHN0cmluZztcbiAgZGVja0lzRW1wdHk6IHN0cmluZztcbiAgdHVybk9mOiBzdHJpbmc7XG4gIHlvdVdpbjogc3RyaW5nO1xuICBvcHBvbmVudFdpbnM6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaHJpc3RpYW5pdHlQbGF5Q2FyZFJlc3VsdCB7XG4gIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZTtcbiAgcGxheWVkOiBib29sZWFuO1xuICBwbGF5ZWRPZmZlcmluZ1ZhbHVlOiBudW1iZXI7XG4gIHNwZW50T2ZmZXJpbmdzOiBudW1iZXI7XG4gIGxvZzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hyaXN0aWFuaXR5QXR0YWNrUmVzdWx0IHtcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlO1xuICBhdHRhY2tlZDogYm9vbGVhbjtcbiAgYXR0YWNrZXJEYW1hZ2U6IG51bWJlcjtcbiAgdGFyZ2V0RGFtYWdlOiBudW1iZXI7XG4gIGxvZzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hyaXN0aWFuaXR5T2ZmZXJpbmdBYmlsaXR5UmVzdWx0IHtcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlO1xuICByZXNvbHZlZDogYm9vbGVhbjtcbiAgbGVhZGVyRGFtYWdlOiBudW1iZXI7XG4gIHJlc2VydmVHYWluOiBudW1iZXI7XG4gIHNwZW50T2ZmZXJpbmdzOiBudW1iZXI7XG4gIGxvZzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWFkeU9mZmVyaW5ncyhwbGF5ZXI6IENocmlzdGlhbml0eVBsYXllclN0YXRlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBsYXllci5vZmZlcmluZ3MucmVkdWNlKFxuICAgICh0b3RhbCwgb2ZmZXJpbmcpID0+IHRvdGFsICsgKG9mZmVyaW5nLnJlYWR5ID8gb2ZmZXJpbmcudmFsdWUgOiAwKSxcbiAgICBwbGF5ZXIudGVtcG9yYXJ5T2ZmZXJpbmdSZXNlcnZlID8/IDBcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvdGFsT2ZmZXJpbmdzKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gcGxheWVyLm9mZmVyaW5ncy5yZWR1Y2UoKHRvdGFsLCBvZmZlcmluZykgPT4gdG90YWwgKyBvZmZlcmluZy52YWx1ZSwgMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5QbGF5Q2FyZChcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0LFxuICBjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvblxuKTogYm9vbGVhbiB7XG4gIGlmIChnYW1lLnN0YXR1cyAhPT0gJ2luX3Byb2dyZXNzJyB8fCBnYW1lLnR1cm5Pd25lciAhPT0gc2VhdCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwbGF5ZXIgPSBnYW1lLnBsYXllcnNbc2VhdF07XG4gIGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHJldHVybiAhcGxheWVyLm9mZmVyaW5nUGxheWVkVGhpc1R1cm47XG4gIGlmIChjYXJkLnR5cGUgPT09ICdjaGFyYWN0ZXInKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHJlYWR5T2ZmZXJpbmdzKHBsYXllcikgPj0gKGNhcmQuY29zdCA/PyAwKSAmJlxuICAgICAgcGxheWVyLmJhdHRsZVpvbmUubGVuZ3RoIDwgQ0hSSVNUSUFOSVRZX0JBVFRMRV9TTE9UU1xuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgIGNhcmQudHlwZSA9PT0gJ2FjdGlvbicgfHxcbiAgICBjYXJkLnR5cGUgPT09ICd3aXNkb20nIHx8XG4gICAgY2FyZC50eXBlID09PSAnZXZlbnQnIHx8XG4gICAgY2FyZC50eXBlID09PSAndG9vbCdcbiAgKSB7XG4gICAgcmV0dXJuIHJlYWR5T2ZmZXJpbmdzKHBsYXllcikgPj0gKGNhcmQuY29zdCA/PyAwKTtcbiAgfVxuICBpZiAoY2FyZC50eXBlID09PSAncGxhY2UnKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGxheUNhcmRGcm9tSGFuZChcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0LFxuICBjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbixcbiAgb3B0aW9uczogeyBzbG90SW5kZXg/OiBudW1iZXI7IGRpc3BsYXlOYW1lPzogc3RyaW5nIH0gPSB7fVxuKTogQ2hyaXN0aWFuaXR5UGxheUNhcmRSZXN1bHQge1xuICBpZiAoIWNhblBsYXlDYXJkKGdhbWUsIHNlYXQsIGNhcmQpKSB7XG4gICAgcmV0dXJuIHsgZ2FtZSwgcGxheWVkOiBmYWxzZSwgcGxheWVkT2ZmZXJpbmdWYWx1ZTogMCwgc3BlbnRPZmZlcmluZ3M6IDAsIGxvZzogW10gfTtcbiAgfVxuXG4gIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gIGNvbnN0IHBsYXllciA9IG5leHQucGxheWVyc1tzZWF0XTtcbiAgY29uc3QgaGFuZEluZGV4ID0gcGxheWVyLmhhbmQ/LmluZGV4T2YoY2FyZC5pZCkgPz8gLTE7XG4gIGlmIChoYW5kSW5kZXggPCAwIHx8ICFwbGF5ZXIuaGFuZCkge1xuICAgIHJldHVybiB7IGdhbWUsIHBsYXllZDogZmFsc2UsIHBsYXllZE9mZmVyaW5nVmFsdWU6IDAsIHNwZW50T2ZmZXJpbmdzOiAwLCBsb2c6IFtdIH07XG4gIH1cblxuICBjb25zdCBkaXNwbGF5TmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWUgPz8gY2FyZC5uYW1lO1xuICBsZXQgcGxheWVkT2ZmZXJpbmdWYWx1ZSA9IDA7XG4gIGxldCBzcGVudE9mZmVyaW5ncyA9IDA7XG5cbiAgcGxheWVyLmhhbmQuc3BsaWNlKGhhbmRJbmRleCwgMSk7XG4gIGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHtcbiAgICBwbGF5ZWRPZmZlcmluZ1ZhbHVlID0gY2FyZC5vZmZlcmluZ1ZhbHVlID8/IGNhcmQubGlmZSA/PyAxO1xuICAgIHBsYXllci5vZmZlcmluZ3MucHVzaCh7XG4gICAgICBpbnN0YW5jZUlkOiBgJHtzZWF0LnRvTG93ZXJDYXNlKCl9X29mZmVyaW5nXyR7bmV4dC5yZXZpc2lvbiArIDF9YCxcbiAgICAgIGNhcmRJZDogY2FyZC5pZCxcbiAgICAgIG5hbWU6IGRpc3BsYXlOYW1lLFxuICAgICAgb3duZXI6IHNlYXQsXG4gICAgICByZWFkeTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBwbGF5ZWRPZmZlcmluZ1ZhbHVlLFxuICAgICAgYWJpbGl0eU5hbWU6IGNhcmQuYWJpbGl0eU5hbWUsXG4gICAgICBhYmlsaXR5VGV4dDogY2FyZC5hYmlsaXR5VGV4dCxcbiAgICAgIGFiaWxpdHlDb3N0OiBjYXJkLmFiaWxpdHlDb3N0LFxuICAgIH0pO1xuICAgIHBsYXllci5vZmZlcmluZ1BsYXllZFRoaXNUdXJuID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChjYXJkLnR5cGUgPT09ICdjaGFyYWN0ZXInKSB7XG4gICAgY29uc3Qgb2NjdXBpZWRTbG90cyA9IG5ldyBTZXQoXG4gICAgICBwbGF5ZXIuYmF0dGxlWm9uZS5tYXAoKGNoYXJhY3RlciwgaW5kZXgpID0+XG4gICAgICAgIE51bWJlci5pc0ludGVnZXIoY2hhcmFjdGVyLnNsb3QpID8gKGNoYXJhY3Rlci5zbG90ID8/IGluZGV4KSA6IGluZGV4XG4gICAgICApXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRTbG90ID0gb3B0aW9ucy5zbG90SW5kZXggPz8gWzAsIDEsIDIsIDNdLmZpbmQoaW5kZXggPT4gIW9jY3VwaWVkU2xvdHMuaGFzKGluZGV4KSk7XG4gICAgaWYgKHRhcmdldFNsb3QgPT09IHVuZGVmaW5lZCB8fCBvY2N1cGllZFNsb3RzLmhhcyh0YXJnZXRTbG90KSkge1xuICAgICAgcmV0dXJuIHsgZ2FtZSwgcGxheWVkOiBmYWxzZSwgcGxheWVkT2ZmZXJpbmdWYWx1ZTogMCwgc3BlbnRPZmZlcmluZ3M6IDAsIGxvZzogW10gfTtcbiAgICB9XG4gICAgc3BlbnRPZmZlcmluZ3MgPSBjYXJkLmNvc3QgPz8gMDtcbiAgICBzcGVuZE9mZmVyaW5ncyhwbGF5ZXIsIHNwZW50T2ZmZXJpbmdzKTtcbiAgICBjb25zdCBsaWZlID0gY2FyZC5saWZlID8/IDE7XG4gICAgcGxheWVyLmJhdHRsZVpvbmUucHVzaCh7XG4gICAgICBpbnN0YW5jZUlkOiBgJHtzZWF0LnRvTG93ZXJDYXNlKCl9XyR7bmV4dC5yZXZpc2lvbiArIDF9XyR7cGxheWVyLmJhdHRsZVpvbmUubGVuZ3RofWAsXG4gICAgICBjYXJkSWQ6IGNhcmQuaWQsXG4gICAgICBuYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgIG93bmVyOiBzZWF0LFxuICAgICAgY29udHJvbGxlcjogc2VhdCxcbiAgICAgIHNsb3Q6IHRhcmdldFNsb3QsXG4gICAgICBhdHRhY2s6IGNhcmQuYXR0YWNrID8/IDAsXG4gICAgICBjdXJyZW50SHA6IGxpZmUsXG4gICAgICBtYXhIcDogbGlmZSxcbiAgICAgIGNhbkF0dGFjazogZmFsc2UsXG4gICAgfSk7XG4gICAgcGxheWVyLmJhdHRsZVpvbmUuc29ydCgobGVmdCwgcmlnaHQpID0+IChsZWZ0LnNsb3QgPz8gMCkgLSAocmlnaHQuc2xvdCA/PyAwKSk7XG4gIH0gZWxzZSBpZiAoXG4gICAgY2FyZC50eXBlID09PSAnYWN0aW9uJyB8fFxuICAgIGNhcmQudHlwZSA9PT0gJ3dpc2RvbScgfHxcbiAgICBjYXJkLnR5cGUgPT09ICdldmVudCcgfHxcbiAgICBjYXJkLnR5cGUgPT09ICd0b29sJ1xuICApIHtcbiAgICBzcGVudE9mZmVyaW5ncyA9IGNhcmQuY29zdCA/PyAwO1xuICAgIGlmIChzcGVudE9mZmVyaW5ncyA+IDApIHtcbiAgICAgIHNwZW5kT2ZmZXJpbmdzKHBsYXllciwgc3BlbnRPZmZlcmluZ3MpO1xuICAgIH1cbiAgICBuZXh0Lmhpc3Rvcnlab25lLnB1c2goY2FyZC5pZCk7XG4gICAgbmV4dC5wbGF5ZXJzW3NlYXRdID0gcGxheWVyO1xuICAgIHJlc29sdmVDYXJkRWZmZWN0KG5leHQsIGNhcmQsIHNlYXQpO1xuICB9IGVsc2UgaWYgKGNhcmQudHlwZSA9PT0gJ3BsYWNlJykge1xuICAgIGNvbnN0IHByZXZpb3VzUGxhY2UgPSBuZXh0LnBsYWNlWm9uZVswXTtcbiAgICBpZiAocHJldmlvdXNQbGFjZSkge1xuICAgICAgbmV4dC5oaXN0b3J5Wm9uZS5wdXNoKHByZXZpb3VzUGxhY2UpO1xuICAgIH1cbiAgICBuZXh0LnBsYWNlWm9uZSA9IFtjYXJkLmlkXTtcbiAgfVxuXG4gIG5leHQucmV2aXNpb24rKztcbiAgY29uc3QgbG9nID0gW3BsYXlDYXJkTG9nKGNhcmQsIGRpc3BsYXlOYW1lKV07XG4gIG5leHQubG9nID0gWy4uLmxvZywgLi4ubmV4dC5sb2ddLnNsaWNlKDAsIDQpO1xuICByZXR1cm4geyBnYW1lOiBuZXh0LCBwbGF5ZWQ6IHRydWUsIHBsYXllZE9mZmVyaW5nVmFsdWUsIHNwZW50T2ZmZXJpbmdzLCBsb2cgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhblVzZU9mZmVyaW5nQWJpbGl0eShcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0LFxuICBvZmZlcmluZ0luc3RhbmNlSWQ6IHN0cmluZ1xuKTogYm9vbGVhbiB7XG4gIGlmIChnYW1lLnN0YXR1cyAhPT0gJ2luX3Byb2dyZXNzJyB8fCBnYW1lLnR1cm5Pd25lciAhPT0gc2VhdCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwbGF5ZXIgPSBnYW1lLnBsYXllcnNbc2VhdF07XG4gIGNvbnN0IG9mZmVyaW5nID0gcGxheWVyLm9mZmVyaW5ncy5maW5kKGNhcmQgPT4gY2FyZC5pbnN0YW5jZUlkID09PSBvZmZlcmluZ0luc3RhbmNlSWQpO1xuICBpZiAoIW9mZmVyaW5nPy5yZWFkeSB8fCAhb2ZmZXJpbmcuYWJpbGl0eU5hbWUgfHwgb2ZmZXJpbmcuYWJpbGl0eVVzZWRUaGlzVHVybikgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gcmVhZHlPZmZlcmluZ3MocGxheWVyKSA+PSAob2ZmZXJpbmcuYWJpbGl0eUNvc3QgPz8gMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlT2ZmZXJpbmdBYmlsaXR5KFxuICBnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsXG4gIHNlYXQ6IENocmlzdGlhbml0eVNlYXQsXG4gIG9mZmVyaW5nSW5zdGFuY2VJZDogc3RyaW5nLFxuICBtZXNzYWdlcz86IENocmlzdGlhbml0eVJ1bGVNZXNzYWdlc1xuKTogQ2hyaXN0aWFuaXR5T2ZmZXJpbmdBYmlsaXR5UmVzdWx0IHtcbiAgaWYgKCFjYW5Vc2VPZmZlcmluZ0FiaWxpdHkoZ2FtZSwgc2VhdCwgb2ZmZXJpbmdJbnN0YW5jZUlkKSkge1xuICAgIHJldHVybiB7IGdhbWUsIHJlc29sdmVkOiBmYWxzZSwgbGVhZGVyRGFtYWdlOiAwLCByZXNlcnZlR2FpbjogMCwgc3BlbnRPZmZlcmluZ3M6IDAsIGxvZzogW10gfTtcbiAgfVxuXG4gIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gIGNvbnN0IHBsYXllciA9IG5leHQucGxheWVyc1tzZWF0XTtcbiAgY29uc3QgbGl2ZU9mZmVyaW5nID0gcGxheWVyLm9mZmVyaW5ncy5maW5kKGNhcmQgPT4gY2FyZC5pbnN0YW5jZUlkID09PSBvZmZlcmluZ0luc3RhbmNlSWQpO1xuICBpZiAoIWxpdmVPZmZlcmluZylcbiAgICByZXR1cm4geyBnYW1lLCByZXNvbHZlZDogZmFsc2UsIGxlYWRlckRhbWFnZTogMCwgcmVzZXJ2ZUdhaW46IDAsIHNwZW50T2ZmZXJpbmdzOiAwLCBsb2c6IFtdIH07XG5cbiAgY29uc3Qgc3BlbnRPZmZlcmluZ3MgPSBsaXZlT2ZmZXJpbmcuYWJpbGl0eUNvc3QgPz8gMDtcbiAgaWYgKHNwZW50T2ZmZXJpbmdzID4gMCkge1xuICAgIHNwZW5kT2ZmZXJpbmdzKHBsYXllciwgc3BlbnRPZmZlcmluZ3MpO1xuICB9XG4gIGNvbnN0IHJlc2VydmVHYWluID0gb2ZmZXJpbmdBYmlsaXR5UmVzZXJ2ZUdhaW4obGl2ZU9mZmVyaW5nLmFiaWxpdHlUZXh0LCBsaXZlT2ZmZXJpbmcudmFsdWUpO1xuICBwbGF5ZXIudGVtcG9yYXJ5T2ZmZXJpbmdSZXNlcnZlID0gKHBsYXllci50ZW1wb3JhcnlPZmZlcmluZ1Jlc2VydmUgPz8gMCkgKyByZXNlcnZlR2FpbjtcbiAgcGxheWVyLm9mZmVyaW5ncyA9IHBsYXllci5vZmZlcmluZ3MubWFwKGNhcmQgPT5cbiAgICBjYXJkLmluc3RhbmNlSWQgPT09IG9mZmVyaW5nSW5zdGFuY2VJZCA/IHsgLi4uY2FyZCwgYWJpbGl0eVVzZWRUaGlzVHVybjogdHJ1ZSB9IDogY2FyZFxuICApO1xuICBwbGF5ZXIubGVhZGVySHAgPSBNYXRoLm1heCgwLCBwbGF5ZXIubGVhZGVySHAgLSAxKTtcbiAgbmV4dC5yZXZpc2lvbisrO1xuICBjb25zdCBsb2cgPSBbYCR7bGl2ZU9mZmVyaW5nLm5hbWV9OiAke2xpdmVPZmZlcmluZy5hYmlsaXR5TmFtZX0uYF07XG4gIGlmIChtZXNzYWdlcykge1xuICAgIGV2YWx1YXRlVmljdG9yeShuZXh0LCBsb2csIG1lc3NhZ2VzKTtcbiAgfVxuICBuZXh0LmxvZyA9IFsuLi5sb2csIC4uLm5leHQubG9nXS5zbGljZSgwLCA0KTtcbiAgcmV0dXJuIHsgZ2FtZTogbmV4dCwgcmVzb2x2ZWQ6IHRydWUsIGxlYWRlckRhbWFnZTogMSwgcmVzZXJ2ZUdhaW4sIHNwZW50T2ZmZXJpbmdzLCBsb2cgfTtcbn1cblxuZnVuY3Rpb24gcGxheUNhcmRMb2coY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sIGRpc3BsYXlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKSByZXR1cm4gYCR7ZGlzcGxheU5hbWV9IHF1ZWRhIGxpc3RhIGNvbW8gb2ZyZW5kYS5gO1xuICBpZiAoY2FyZC50eXBlID09PSAncGxhY2UnKSByZXR1cm4gYCR7ZGlzcGxheU5hbWV9IHF1ZWRhIGNvbW8gbHVnYXIgYWN0aXZvLmA7XG4gIGlmIChjYXJkLnR5cGUgPT09ICdhY3Rpb24nIHx8IGNhcmQudHlwZSA9PT0gJ2V2ZW50JykgcmV0dXJuIGAke2Rpc3BsYXlOYW1lfSBmdWUganVnYWRhLmA7XG4gIGlmIChjYXJkLnR5cGUgPT09ICd3aXNkb20nKSByZXR1cm4gYCR7ZGlzcGxheU5hbWV9IGZ1ZSByZXZlbGFkYS5gO1xuICBpZiAoY2FyZC50eXBlID09PSAndG9vbCcpIHJldHVybiBgJHtkaXNwbGF5TmFtZX0gZnVlIGVxdWlwYWRhLmA7XG4gIHJldHVybiBgJHtkaXNwbGF5TmFtZX0gZW50cmEgZW4gYmF0YWxsYS5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUF0dGFja0xlYWRlcihcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBhdHRhY2tlclNlYXQ6IENocmlzdGlhbml0eVNlYXQsXG4gIGF0dGFja2VySW5zdGFuY2VJZDogc3RyaW5nLFxuICBtZXNzYWdlczogQ2hyaXN0aWFuaXR5UnVsZU1lc3NhZ2VzXG4pOiBDaHJpc3RpYW5pdHlBdHRhY2tSZXN1bHQge1xuICBjb25zdCBkZWZlbmRlclNlYXQgPSBvcHBvbmVudFNlYXQoYXR0YWNrZXJTZWF0KTtcbiAgaWYgKGdhbWUuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnIHx8IGdhbWUucGxheWVyc1tkZWZlbmRlclNlYXRdLmJhdHRsZVpvbmUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7IGdhbWUsIGF0dGFja2VkOiBmYWxzZSwgYXR0YWNrZXJEYW1hZ2U6IDAsIHRhcmdldERhbWFnZTogMCwgbG9nOiBbXSB9O1xuICB9XG5cbiAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgY29uc3QgYXR0YWNrZXIgPSBuZXh0LnBsYXllcnNbYXR0YWNrZXJTZWF0XS5iYXR0bGVab25lLmZpbmQoXG4gICAgY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IGF0dGFja2VySW5zdGFuY2VJZFxuICApO1xuICBpZiAoIWF0dGFja2VyIHx8ICFhdHRhY2tlci5jYW5BdHRhY2spXG4gICAgcmV0dXJuIHsgZ2FtZSwgYXR0YWNrZWQ6IGZhbHNlLCBhdHRhY2tlckRhbWFnZTogMCwgdGFyZ2V0RGFtYWdlOiAwLCBsb2c6IFtdIH07XG5cbiAgY29uc3QgZGFtYWdlID0gYXR0YWNrZXIuYXR0YWNrO1xuICBuZXh0LnBsYXllcnNbZGVmZW5kZXJTZWF0XS5sZWFkZXJIcCA9IE1hdGgubWF4KDAsIG5leHQucGxheWVyc1tkZWZlbmRlclNlYXRdLmxlYWRlckhwIC0gZGFtYWdlKTtcbiAgYXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gIGNvbnN0IGxvZyA9IFtcbiAgICBgJHthdHRhY2tlci5uYW1lfSAke2F0dGFja2VyU2VhdCA9PT0gJ1AxJyA/IG1lc3NhZ2VzLmF0dGFja3NPcHBvbmVudExlYWRlciA6IG1lc3NhZ2VzLmF0dGFja3NZb3VyTGVhZGVyfWAsXG4gIF07XG4gIGV2YWx1YXRlVmljdG9yeShuZXh0LCBsb2csIG1lc3NhZ2VzKTtcbiAgbmV4dC5yZXZpc2lvbisrO1xuICBuZXh0LmxvZyA9IFsuLi5sb2csIC4uLm5leHQubG9nXS5zbGljZSgwLCA0KTtcbiAgcmV0dXJuIHsgZ2FtZTogbmV4dCwgYXR0YWNrZWQ6IHRydWUsIGF0dGFja2VyRGFtYWdlOiAwLCB0YXJnZXREYW1hZ2U6IGRhbWFnZSwgbG9nIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQXR0YWNrQ2hhcmFjdGVyKFxuICBnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsXG4gIGF0dGFja2VyU2VhdDogQ2hyaXN0aWFuaXR5U2VhdCxcbiAgYXR0YWNrZXJJbnN0YW5jZUlkOiBzdHJpbmcsXG4gIHRhcmdldEluc3RhbmNlSWQ6IHN0cmluZyxcbiAgbWVzc2FnZXM6IENocmlzdGlhbml0eVJ1bGVNZXNzYWdlc1xuKTogQ2hyaXN0aWFuaXR5QXR0YWNrUmVzdWx0IHtcbiAgY29uc3QgZGVmZW5kZXJTZWF0ID0gb3Bwb25lbnRTZWF0KGF0dGFja2VyU2VhdCk7XG4gIGlmIChnYW1lLnN0YXR1cyAhPT0gJ2luX3Byb2dyZXNzJylcbiAgICByZXR1cm4geyBnYW1lLCBhdHRhY2tlZDogZmFsc2UsIGF0dGFja2VyRGFtYWdlOiAwLCB0YXJnZXREYW1hZ2U6IDAsIGxvZzogW10gfTtcblxuICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICBjb25zdCBhdHRhY2tlciA9IG5leHQucGxheWVyc1thdHRhY2tlclNlYXRdLmJhdHRsZVpvbmUuZmluZChcbiAgICBjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gYXR0YWNrZXJJbnN0YW5jZUlkXG4gICk7XG4gIGNvbnN0IHRhcmdldCA9IG5leHQucGxheWVyc1tkZWZlbmRlclNlYXRdLmJhdHRsZVpvbmUuZmluZChcbiAgICBjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gdGFyZ2V0SW5zdGFuY2VJZFxuICApO1xuICBpZiAoIWF0dGFja2VyIHx8ICF0YXJnZXQgfHwgIWF0dGFja2VyLmNhbkF0dGFjaykge1xuICAgIHJldHVybiB7IGdhbWUsIGF0dGFja2VkOiBmYWxzZSwgYXR0YWNrZXJEYW1hZ2U6IDAsIHRhcmdldERhbWFnZTogMCwgbG9nOiBbXSB9O1xuICB9XG5cbiAgdGFyZ2V0LmN1cnJlbnRIcCAtPSBhdHRhY2tlci5hdHRhY2s7XG4gIGF0dGFja2VyLmN1cnJlbnRIcCAtPSB0YXJnZXQuYXR0YWNrO1xuICBhdHRhY2tlci5jYW5BdHRhY2sgPSBmYWxzZTtcbiAgY2xlYW51cERlc3Ryb3llZChuZXh0LnBsYXllcnNbYXR0YWNrZXJTZWF0XSwgbmV4dCk7XG4gIGNsZWFudXBEZXN0cm95ZWQobmV4dC5wbGF5ZXJzW2RlZmVuZGVyU2VhdF0sIG5leHQpO1xuICBjb25zdCBsb2cgPSBbYCR7YXR0YWNrZXIubmFtZX0gJHttZXNzYWdlcy5jb21iYXRzQWdhaW5zdH0gJHt0YXJnZXQubmFtZX0uYF07XG4gIGV2YWx1YXRlVmljdG9yeShuZXh0LCBsb2csIG1lc3NhZ2VzKTtcbiAgbmV4dC5yZXZpc2lvbisrO1xuICBuZXh0LmxvZyA9IFsuLi5sb2csIC4uLm5leHQubG9nXS5zbGljZSgwLCA0KTtcblxuICByZXR1cm4ge1xuICAgIGdhbWU6IG5leHQsXG4gICAgYXR0YWNrZWQ6IHRydWUsXG4gICAgYXR0YWNrZXJEYW1hZ2U6IHRhcmdldC5hdHRhY2ssXG4gICAgdGFyZ2V0RGFtYWdlOiBhdHRhY2tlci5hdHRhY2ssXG4gICAgbG9nLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVR1cm4oXG4gIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZSxcbiAgbWVzc2FnZXM6IENocmlzdGlhbml0eVJ1bGVNZXNzYWdlc1xuKTogc3RyaW5nW10ge1xuICBnYW1lLnBsYXllcnNbZ2FtZS50dXJuT3duZXJdLnRlbXBvcmFyeU9mZmVyaW5nUmVzZXJ2ZSA9IDA7XG4gIGdhbWUudHVybk93bmVyID0gb3Bwb25lbnRTZWF0KGdhbWUudHVybk93bmVyKTtcbiAgZ2FtZS50dXJuQ291bnQrKztcbiAgY29uc3QgY3VycmVudCA9IGdhbWUucGxheWVyc1tnYW1lLnR1cm5Pd25lcl07XG4gIGN1cnJlbnQub2ZmZXJpbmdQbGF5ZWRUaGlzVHVybiA9IGZhbHNlO1xuICBjdXJyZW50Lm9mZmVyaW5ncyA9IGN1cnJlbnQub2ZmZXJpbmdzLm1hcChvZmZlcmluZyA9PiAoe1xuICAgIC4uLm9mZmVyaW5nLFxuICAgIHJlYWR5OiB0cnVlLFxuICAgIGFiaWxpdHlVc2VkVGhpc1R1cm46IGZhbHNlLFxuICB9KSk7XG4gIGN1cnJlbnQuYmF0dGxlWm9uZSA9IGN1cnJlbnQuYmF0dGxlWm9uZS5tYXAoY2FyZCA9PiAoeyAuLi5jYXJkLCBjYW5BdHRhY2s6IHRydWUgfSkpO1xuICBjb25zdCBkcmF3bkNhcmQgPSBnYW1lLnNoYXJlZERlY2suc2hpZnQoKTtcbiAgY29uc3QgbG9nOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAoZHJhd25DYXJkKSB7XG4gICAgaWYgKGN1cnJlbnQuaGFuZCkge1xuICAgICAgY3VycmVudC5oYW5kLnB1c2goZHJhd25DYXJkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudC5oYW5kQ291bnQgPSAoY3VycmVudC5oYW5kQ291bnQgPz8gMCkgKyAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBldmFsdWF0ZVZpY3RvcnkoZ2FtZSwgbG9nLCBtZXNzYWdlcyk7XG4gIH1cbiAgcmV0dXJuIFtcbiAgICBkcmF3bkNhcmQgPyBgJHtjdXJyZW50LmRpc3BsYXlOYW1lfSAke21lc3NhZ2VzLmRyYXdzQ2FyZH1gIDogbWVzc2FnZXMuZGVja0lzRW1wdHksXG4gICAgYCR7bWVzc2FnZXMudHVybk9mfSAke2N1cnJlbnQuZGlzcGxheU5hbWV9LmAsXG4gICAgLi4ubG9nLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVWaWN0b3J5KFxuICBnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsXG4gIGxvZzogc3RyaW5nW10sXG4gIG1lc3NhZ2VzOiBDaHJpc3RpYW5pdHlSdWxlTWVzc2FnZXNcbik6IHZvaWQge1xuICBpZiAoZ2FtZS5wbGF5ZXJzLlAxLmxlYWRlckhwID4gMCAmJiBnYW1lLnBsYXllcnMuUDIubGVhZGVySHAgPiAwICYmIGdhbWUuc2hhcmVkRGVjay5sZW5ndGggPiAwKVxuICAgIHJldHVybjtcbiAgZ2FtZS5zdGF0dXMgPSAnZmluaXNoZWQnO1xuICBjb25zdCB3aW5uZXI6IENocmlzdGlhbml0eVNlYXQgPVxuICAgIGdhbWUucGxheWVycy5QMS5sZWFkZXJIcCA8PSAwXG4gICAgICA/ICdQMidcbiAgICAgIDogZ2FtZS5wbGF5ZXJzLlAyLmxlYWRlckhwIDw9IDBcbiAgICAgICAgPyAnUDEnXG4gICAgICAgIDogZ2FtZS5wbGF5ZXJzLlAxLmxlYWRlckhwID49IGdhbWUucGxheWVycy5QMi5sZWFkZXJIcFxuICAgICAgICAgID8gJ1AxJ1xuICAgICAgICAgIDogJ1AyJztcbiAgZ2FtZS5tYXRjaFNjb3JlW3dpbm5lcl0gKz0gMTtcbiAgbG9nLnB1c2god2lubmVyID09PSAnUDEnID8gbWVzc2FnZXMueW91V2luIDogbWVzc2FnZXMub3Bwb25lbnRXaW5zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFudXBEZXN0cm95ZWQoXG4gIHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUsXG4gIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZVxuKTogdm9pZCB7XG4gIGNvbnN0IGRlc3Ryb3llZCA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwIDw9IDApO1xuICBpZiAoIWRlc3Ryb3llZC5sZW5ndGgpIHJldHVybjtcbiAgZ2FtZS5oaXN0b3J5Wm9uZS5wdXNoKC4uLmRlc3Ryb3llZC5tYXAoY2FyZCA9PiBjYXJkLmNhcmRJZCkpO1xuICBwbGF5ZXIuYmF0dGxlWm9uZSA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwID4gMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGVuZE9mZmVyaW5ncyhwbGF5ZXI6IENocmlzdGlhbml0eVBsYXllclN0YXRlLCBjb3N0OiBudW1iZXIpOiB2b2lkIHtcbiAgbGV0IHJlbWFpbmluZyA9IGNvc3Q7XG4gIGNvbnN0IHRlbXBvcmFyeVJlc2VydmUgPSBwbGF5ZXIudGVtcG9yYXJ5T2ZmZXJpbmdSZXNlcnZlID8/IDA7XG4gIGlmICh0ZW1wb3JhcnlSZXNlcnZlID4gMCkge1xuICAgIGNvbnN0IHNwZW50VGVtcG9yYXJ5UmVzZXJ2ZSA9IE1hdGgubWluKHRlbXBvcmFyeVJlc2VydmUsIHJlbWFpbmluZyk7XG4gICAgcGxheWVyLnRlbXBvcmFyeU9mZmVyaW5nUmVzZXJ2ZSA9IHRlbXBvcmFyeVJlc2VydmUgLSBzcGVudFRlbXBvcmFyeVJlc2VydmU7XG4gICAgcmVtYWluaW5nIC09IHNwZW50VGVtcG9yYXJ5UmVzZXJ2ZTtcbiAgfVxuICBwbGF5ZXIub2ZmZXJpbmdzID0gcGxheWVyLm9mZmVyaW5ncy5tYXAob2ZmZXJpbmcgPT4ge1xuICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCAhb2ZmZXJpbmcucmVhZHkpIHJldHVybiBvZmZlcmluZztcbiAgICByZW1haW5pbmcgLT0gb2ZmZXJpbmcudmFsdWU7XG4gICAgcmV0dXJuIHsgLi4ub2ZmZXJpbmcsIHJlYWR5OiBmYWxzZSB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb2ZmZXJpbmdBYmlsaXR5UmVzZXJ2ZUdhaW4oXG4gIGFiaWxpdHlUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGZhbGxiYWNrVmFsdWU6IG51bWJlclxuKTogbnVtYmVyIHtcbiAgY29uc3QgbWF0Y2ggPSBhYmlsaXR5VGV4dD8ubWF0Y2goL3ZhbG9yIGRlIChcXGQrKSBvZnJlbmRhcz8vaSk7XG4gIGNvbnN0IHBhcnNlZCA9IG1hdGNoID8gTnVtYmVyKG1hdGNoWzFdKSA6IE51bWJlci5OYU47XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSAmJiBwYXJzZWQgPiAwID8gcGFyc2VkIDogTWF0aC5tYXgoMSwgZmFsbGJhY2tWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcHBvbmVudFNlYXQoc2VhdDogQ2hyaXN0aWFuaXR5U2VhdCk6IENocmlzdGlhbml0eVNlYXQge1xuICByZXR1cm4gc2VhdCA9PT0gJ1AxJyA/ICdQMicgOiAnUDEnO1xufVxuXG4vLyAtLS0gRWZmZWN0IHJlc29sdXRpb24gKEg3KSAtLS1cblxuZnVuY3Rpb24gcmVzb2x2ZUNhcmRFZmZlY3QoXG4gIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZSxcbiAgY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sXG4gIHNlYXQ6IENocmlzdGlhbml0eVNlYXRcbik6IHZvaWQge1xuICBjb25zdCB0ZXh0ID0gY2FyZC5hYmlsaXRpZXM/LlswXT8udGV4dCA/PyAnJztcbiAgc3dpdGNoIChjYXJkLnN0cmF0ZWd5KSB7XG4gICAgY2FzZSAnZGlyZWN0ZGFtYWdlJzpcbiAgICAgIGVmZmVjdERpcmVjdERhbWFnZShnYW1lLCBjYXJkLCB0ZXh0LCBzZWF0KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Jlc3RvcmUnOlxuICAgICAgZWZmZWN0UmVzdG9yZShnYW1lLCBjYXJkLCB0ZXh0LCBzZWF0KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2RyYXcnOlxuICAgICAgZWZmZWN0RHJhdyhnYW1lLCBjYXJkLCB0ZXh0LCBzZWF0KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Rpc2NhcmQnOlxuICAgICAgZWZmZWN0RGlzY2FyZChnYW1lLCBjYXJkLCB0ZXh0LCBzZWF0KTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVmZmVjdERpcmVjdERhbWFnZShcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbixcbiAgdGV4dDogc3RyaW5nLFxuICBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0XG4pOiB2b2lkIHtcbiAgY29uc3Qgb3Bwb25lbnQgPSBvcHBvbmVudFNlYXQoc2VhdCk7XG4gIGNvbnN0IGxvd2VyID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICBsZXQgZG1nOiBudW1iZXI7XG4gIGlmIChsb3dlci5pbmNsdWRlcygndGFudG9zJykpIHtcbiAgICBkbWcgPSBnYW1lLnBsYXllcnNbc2VhdF0uYmF0dGxlWm9uZS5sZW5ndGg7XG4gIH0gZWxzZSB7XG4gICAgZG1nID0gcGFyc2VTcGFuaXNoTnVtYmVyKHRleHQpO1xuICB9XG4gIGlmIChkbWcgPD0gMCkgcmV0dXJuO1xuICBnYW1lLnBsYXllcnNbb3Bwb25lbnRdLmxlYWRlckhwID0gTWF0aC5tYXgoMCwgZ2FtZS5wbGF5ZXJzW29wcG9uZW50XS5sZWFkZXJIcCAtIGRtZyk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdFJlc3RvcmUoXG4gIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZSxcbiAgY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sXG4gIHRleHQ6IHN0cmluZyxcbiAgc2VhdDogQ2hyaXN0aWFuaXR5U2VhdFxuKTogdm9pZCB7XG4gIGNvbnN0IGxvd2VyID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBuID0gTWF0aC5tYXgoMSwgcGFyc2VTcGFuaXNoTnVtYmVyKHRleHQpIHx8IDEpO1xuICBpZiAobG93ZXIuaW5jbHVkZXMoJ2xvcyBsw61kZXJlcycpIHx8IGxvd2VyLmluY2x1ZGVzKCdsb3MgbGlkZXJlcycpKSB7XG4gICAgZm9yIChjb25zdCBzIG9mIFsnUDEnLCAnUDInXSBhcyBDaHJpc3RpYW5pdHlTZWF0W10pIHtcbiAgICAgIGNvbnN0IHAgPSBnYW1lLnBsYXllcnNbc107XG4gICAgICBwLmxlYWRlckhwID0gTWF0aC5taW4oKHAgYXMgYW55KS5sZWFkZXJNYXhIcCA/PyAzMCwgcC5sZWFkZXJIcCArIG4pO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGxvd2VyLmluY2x1ZGVzKCd0dXMgcGVyc29uYWplcycpIHx8IGxvd2VyLmluY2x1ZGVzKCdwZXJzb25hamVzIGVuIGp1ZWdvJykpIHtcbiAgICBmb3IgKGNvbnN0IGNoIG9mIGdhbWUucGxheWVyc1tzZWF0XS5iYXR0bGVab25lKSB7XG4gICAgICBjaC5jdXJyZW50SHAgPSBNYXRoLm1pbihjaC5tYXhIcCwgY2guY3VycmVudEhwICsgbik7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZiAoXG4gICAgbG93ZXIuaW5jbHVkZXMoJ2RlbCBsw61kZXInKSB8fFxuICAgIGxvd2VyLmluY2x1ZGVzKCdhbCBsw61kZXInKSB8fFxuICAgIGxvd2VyLmluY2x1ZGVzKCdkZWwgbGlkZXInKSB8fFxuICAgIGxvd2VyLmluY2x1ZGVzKCdhbCBsaWRlcicpXG4gICkge1xuICAgIGNvbnN0IHAgPSBnYW1lLnBsYXllcnNbc2VhdF07XG4gICAgcC5sZWFkZXJIcCA9IE1hdGgubWluKChwIGFzIGFueSkubGVhZGVyTWF4SHAgPz8gMzAsIHAubGVhZGVySHAgKyBuKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlZmZlY3REcmF3KFxuICBnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsXG4gIGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uLFxuICB0ZXh0OiBzdHJpbmcsXG4gIHNlYXQ6IENocmlzdGlhbml0eVNlYXRcbik6IHZvaWQge1xuICBjb25zdCBsb3dlciA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGxvd2VyLmluY2x1ZGVzKCdsb3MganVnYWRvcmVzJykpIHtcbiAgICBjb25zdCBuID0gTWF0aC5tYXgoMSwgcGFyc2VTcGFuaXNoTnVtYmVyKHRleHQpIHx8IDEpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICBkcmF3Q2FyZEZvcihnYW1lLCAnUDEnKTtcbiAgICAgIGRyYXdDYXJkRm9yKGdhbWUsICdQMicpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGxvd2VyLmluY2x1ZGVzKCdwb3IgY2FkYSBwZXJzb25hamUgb3BvbmVudGUnKSkge1xuICAgIGNvbnN0IG4gPSBnYW1lLnBsYXllcnNbb3Bwb25lbnRTZWF0KHNlYXQpXS5iYXR0bGVab25lLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykgZHJhd0NhcmRGb3IoZ2FtZSwgc2VhdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IG4gPSBNYXRoLm1heCgxLCBwYXJzZVNwYW5pc2hOdW1iZXIodGV4dCkgfHwgMSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgaSsrKSBkcmF3Q2FyZEZvcihnYW1lLCBzZWF0KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0RGlzY2FyZChcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbixcbiAgdGV4dDogc3RyaW5nLFxuICBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0XG4pOiB2b2lkIHtcbiAgY29uc3QgbG93ZXIgPSB0ZXh0LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG9wcG9uZW50ID0gb3Bwb25lbnRTZWF0KHNlYXQpO1xuICBpZiAoXG4gICAgbG93ZXIuaW5jbHVkZXMoJ2FtYm9zIGp1Z2Fkb3JlcyBkZXNjYXJ0YW4gc3UgbWFubycpIHx8XG4gICAgbG93ZXIuaW5jbHVkZXMoJ2xvcyBqdWdhZG9yZXMgZGVzY2FydGFuIHN1IG1hbm8nKVxuICApIHtcbiAgICBmb3IgKGNvbnN0IHMgb2YgWydQMScsICdQMiddIGFzIENocmlzdGlhbml0eVNlYXRbXSkge1xuICAgICAgY29uc3QgcCA9IGdhbWUucGxheWVyc1tzXTtcbiAgICAgIGdhbWUuaGlzdG9yeVpvbmUucHVzaCguLi4ocC5oYW5kID8/IFtdKSk7XG4gICAgICBwLmhhbmQgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChcbiAgICAobG93ZXIuaW5jbHVkZXMoJ29wb25lbnRlJykgJiYgbG93ZXIuaW5jbHVkZXMoJ2F6YXInKSkgfHxcbiAgICBsb3dlci5pbmNsdWRlcygndHUgb3BvbmVudGUgZGVzY2FydGEnKVxuICApIHtcbiAgICBjb25zdCBuID0gTWF0aC5tYXgoMSwgcGFyc2VTcGFuaXNoTnVtYmVyKHRleHQpIHx8IDEpO1xuICAgIGNvbnN0IG9wID0gZ2FtZS5wbGF5ZXJzW29wcG9uZW50XTtcbiAgICBjb25zdCBoYW5kID0gb3AuaGFuZCA/PyBbXTtcbiAgICBsZXQgc2VlZCA9IGdhbWUucmV2aXNpb24gKiAzMSArIGdhbWUudHVybkNvdW50ICogNztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG4gJiYgaGFuZC5sZW5ndGggPiAwOyBpKyspIHtcbiAgICAgIHNlZWQgPSAoc2VlZCAqIDE2NjQ1MjUgKyAxMDEzOTA0MjIzKSAmIDB4ZmZmZmZmZmY7XG4gICAgICBjb25zdCBpZHggPSBNYXRoLmFicyhzZWVkKSAlIGhhbmQubGVuZ3RoO1xuICAgICAgZ2FtZS5oaXN0b3J5Wm9uZS5wdXNoKGhhbmRbaWR4XSk7XG4gICAgICBoYW5kLnNwbGljZShpZHgsIDEpO1xuICAgIH1cbiAgICBvcC5oYW5kID0gaGFuZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkcmF3Q2FyZEZvcihnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsIHNlYXQ6IENocmlzdGlhbml0eVNlYXQpOiB2b2lkIHtcbiAgY29uc3QgY2FyZCA9IGdhbWUuc2hhcmVkRGVjay5zaGlmdCgpO1xuICBpZiAoIWNhcmQpIHJldHVybjtcbiAgY29uc3QgcCA9IGdhbWUucGxheWVyc1tzZWF0XTtcbiAgaWYgKHAuaGFuZCkgcC5oYW5kLnB1c2goY2FyZCk7XG4gIGVsc2UgcC5oYW5kQ291bnQgPSAocC5oYW5kQ291bnQgPz8gMCkgKyAxO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNwYW5pc2hOdW1iZXIodGV4dDogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3Qgd29yZHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gICAgdW46IDEsXG4gICAgdW5hOiAxLFxuICAgIHVubzogMSxcbiAgICBkb3M6IDIsXG4gICAgdHJlczogMyxcbiAgICBjdWF0cm86IDQsXG4gICAgY2luY286IDUsXG4gICAgc2VpczogNixcbiAgICBzaWV0ZTogNyxcbiAgICBvY2hvOiA4LFxuICAgIG51ZXZlOiA5LFxuICAgIGRpZXo6IDEwLFxuICB9O1xuICBjb25zdCBkaWdpdE1hdGNoID0gdGV4dC5tYXRjaCgvXFxiKFxcZCspXFxiLyk7XG4gIGlmIChkaWdpdE1hdGNoKSByZXR1cm4gcGFyc2VJbnQoZGlnaXRNYXRjaFsxXSwgMTApO1xuICBjb25zdCBsb3dlciA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgZm9yIChjb25zdCBbd29yZCwgbl0gb2YgT2JqZWN0LmVudHJpZXMod29yZHMpKSB7XG4gICAgaWYgKG5ldyBSZWdFeHAoYFxcXFxiJHt3b3JkfVxcXFxiYCkudGVzdChsb3dlcikpIHJldHVybiBuO1xuICB9XG4gIHJldHVybiAwO1xufVxuIl19
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '4.0.586';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC41ODYnO1xuIl19
5
+ export const VERSION = '4.0.590';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC41OTAnO1xuIl19