valtech-components 4.0.429 → 4.0.431
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/christianity-game.component.mjs +414 -162
- package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +33 -1
- package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +446 -162
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +1 -1
- package/lib/components/organisms/mini-games/christianity-game.component.d.ts +21 -2
- package/lib/components/organisms/mini-games/types.d.ts +3 -1
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -10,6 +10,26 @@ const STARTER_CARDS = {
|
|
|
10
10
|
p_elder: { id: 'p_elder', name: 'Elder', type: 'character', cost: 3, attack: 2, life: 4 },
|
|
11
11
|
p_champion: { id: 'p_champion', name: 'Champion', type: 'character', cost: 4, attack: 4, life: 4 },
|
|
12
12
|
};
|
|
13
|
+
const STARTING_SHARED_DECK = [
|
|
14
|
+
'o_simple',
|
|
15
|
+
'p_scout',
|
|
16
|
+
'o_simple',
|
|
17
|
+
'p_guard',
|
|
18
|
+
'p_warrior',
|
|
19
|
+
'o_simple',
|
|
20
|
+
'p_elder',
|
|
21
|
+
'p_scout',
|
|
22
|
+
'o_simple',
|
|
23
|
+
'p_champion',
|
|
24
|
+
'p_guard',
|
|
25
|
+
'o_simple',
|
|
26
|
+
'p_warrior',
|
|
27
|
+
'p_scout',
|
|
28
|
+
'o_simple',
|
|
29
|
+
'p_elder',
|
|
30
|
+
'p_guard',
|
|
31
|
+
'o_simple',
|
|
32
|
+
];
|
|
13
33
|
const STARTING_GAME = {
|
|
14
34
|
gameId: 'mock-christianity',
|
|
15
35
|
status: 'in_progress',
|
|
@@ -17,12 +37,14 @@ const STARTING_GAME = {
|
|
|
17
37
|
turnOwner: 'P1',
|
|
18
38
|
revision: 0,
|
|
19
39
|
turnCount: 1,
|
|
20
|
-
|
|
40
|
+
sharedDeck: STARTING_SHARED_DECK,
|
|
21
41
|
historyZone: [],
|
|
22
42
|
players: {
|
|
23
43
|
P1: {
|
|
24
44
|
seat: 'P1',
|
|
25
45
|
displayName: 'Jugador',
|
|
46
|
+
avatar: 'J',
|
|
47
|
+
avatarColor: '#2563eb',
|
|
26
48
|
leaderName: 'Adam',
|
|
27
49
|
leaderHp: 15,
|
|
28
50
|
leaderMaxHp: 15,
|
|
@@ -34,6 +56,8 @@ const STARTING_GAME = {
|
|
|
34
56
|
P2: {
|
|
35
57
|
seat: 'P2',
|
|
36
58
|
displayName: 'Rival',
|
|
59
|
+
avatar: 'R',
|
|
60
|
+
avatarColor: '#b45309',
|
|
37
61
|
leaderName: 'Noah',
|
|
38
62
|
leaderHp: 15,
|
|
39
63
|
leaderMaxHp: 15,
|
|
@@ -63,11 +87,13 @@ export class ChristianityGameComponent {
|
|
|
63
87
|
this.game = signal(structuredClone(STARTING_GAME));
|
|
64
88
|
this.selectedHandCard = signal(null);
|
|
65
89
|
this.selectedAttacker = signal(null);
|
|
90
|
+
this.selectedPreview = signal(null);
|
|
66
91
|
this.showHistory = signal(false);
|
|
67
92
|
this.player = computed(() => this.game().players.P1);
|
|
68
93
|
this.opponent = computed(() => this.game().players.P2);
|
|
69
94
|
this.currentPlayer = computed(() => this.game().players[this.game().turnOwner]);
|
|
70
95
|
this.isOwnTurn = computed(() => this.game().turnOwner === 'P1');
|
|
96
|
+
this.hasOpponentGuards = computed(() => this.opponent().battleZone.length > 0);
|
|
71
97
|
this.opponentHandCount = computed(() => this.opponent().handCount ?? this.opponent().hand?.length ?? 0);
|
|
72
98
|
this.statusText = computed(() => {
|
|
73
99
|
const attacker = this.selectedAttacker();
|
|
@@ -76,7 +102,7 @@ export class ChristianityGameComponent {
|
|
|
76
102
|
return this.t('christianityWaitTurn');
|
|
77
103
|
}
|
|
78
104
|
if (attacker) {
|
|
79
|
-
return this.t('christianityChooseTarget');
|
|
105
|
+
return this.hasOpponentGuards() ? this.t('christianityChooseCharacterTarget') : this.t('christianityChooseTarget');
|
|
80
106
|
}
|
|
81
107
|
if (handCard) {
|
|
82
108
|
const card = this.cardDefinition(handCard);
|
|
@@ -95,11 +121,24 @@ export class ChristianityGameComponent {
|
|
|
95
121
|
}
|
|
96
122
|
battleSlots(seat) {
|
|
97
123
|
const cards = this.game().players[seat].battleZone;
|
|
98
|
-
return Array.from({ length:
|
|
124
|
+
return Array.from({ length: 4 }, (_, index) => ({
|
|
99
125
|
trackId: cards[index]?.instanceId ?? `${seat}-empty-${index}`,
|
|
100
126
|
card: cards[index],
|
|
101
127
|
}));
|
|
102
128
|
}
|
|
129
|
+
hiddenHandCards(count) {
|
|
130
|
+
return Array.from({ length: count });
|
|
131
|
+
}
|
|
132
|
+
fanTransform(index, total, opponent) {
|
|
133
|
+
if (total <= 1)
|
|
134
|
+
return opponent ? 'rotate(180deg)' : 'none';
|
|
135
|
+
const center = (total - 1) / 2;
|
|
136
|
+
const offset = index - center;
|
|
137
|
+
const rotate = offset * 5;
|
|
138
|
+
const lift = Math.abs(offset) * 0.25;
|
|
139
|
+
const base = opponent ? 'rotate(180deg)' : '';
|
|
140
|
+
return `${base} translateY(${lift}rem) rotate(${rotate}deg)`;
|
|
141
|
+
}
|
|
103
142
|
readyOfferings(player) {
|
|
104
143
|
return player.offerings.reduce((total, offering) => total + (offering.ready ? offering.value : 0), 0);
|
|
105
144
|
}
|
|
@@ -108,7 +147,7 @@ export class ChristianityGameComponent {
|
|
|
108
147
|
return false;
|
|
109
148
|
if (card.type === 'offering')
|
|
110
149
|
return !this.player().offeringPlayedThisTurn;
|
|
111
|
-
return this.readyOfferings(this.player()) >= card.cost && this.player().battleZone.length <
|
|
150
|
+
return this.readyOfferings(this.player()) >= card.cost && this.player().battleZone.length < 4;
|
|
112
151
|
}
|
|
113
152
|
canPlaySelected() {
|
|
114
153
|
const selected = this.selectedHandCard();
|
|
@@ -117,6 +156,7 @@ export class ChristianityGameComponent {
|
|
|
117
156
|
selectHandCard(cardId) {
|
|
118
157
|
this.selectedAttacker.set(null);
|
|
119
158
|
this.selectedHandCard.set(this.selectedHandCard() === cardId ? null : cardId);
|
|
159
|
+
this.inspectHandCard(cardId);
|
|
120
160
|
}
|
|
121
161
|
playSelectedCard() {
|
|
122
162
|
const cardId = this.selectedHandCard();
|
|
@@ -168,14 +208,36 @@ export class ChristianityGameComponent {
|
|
|
168
208
|
}
|
|
169
209
|
selectAttacker(card) {
|
|
170
210
|
this.selectedHandCard.set(null);
|
|
211
|
+
this.inspectCharacter(card);
|
|
171
212
|
if (!this.isOwnTurn() || !card.canAttack)
|
|
172
213
|
return;
|
|
173
214
|
this.selectedAttacker.set(this.selectedAttacker()?.instanceId === card.instanceId ? null : card);
|
|
174
215
|
}
|
|
216
|
+
handleOpponentCharacter(card) {
|
|
217
|
+
this.inspectCharacter(card);
|
|
218
|
+
if (this.selectedAttacker()) {
|
|
219
|
+
this.attackCharacter(card);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
handleOpponentLeader() {
|
|
223
|
+
this.inspectLeader('P2');
|
|
224
|
+
if (this.selectedAttacker() && !this.hasOpponentGuards()) {
|
|
225
|
+
this.attackLeader();
|
|
226
|
+
}
|
|
227
|
+
}
|
|
175
228
|
attackLeader() {
|
|
176
229
|
const attacker = this.selectedAttacker();
|
|
177
230
|
if (!attacker)
|
|
178
231
|
return;
|
|
232
|
+
if (this.hasOpponentGuards()) {
|
|
233
|
+
this.selectedPreview.set({
|
|
234
|
+
title: this.opponent().leaderName,
|
|
235
|
+
eyebrow: this.t('christianityLeaderCard'),
|
|
236
|
+
meta: `${this.opponent().leaderHp}/${this.opponent().leaderMaxHp}`,
|
|
237
|
+
body: this.t('christianityLeaderProtected'),
|
|
238
|
+
});
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
179
241
|
this.game.update(game => {
|
|
180
242
|
const next = structuredClone(game);
|
|
181
243
|
const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
|
|
@@ -213,6 +275,7 @@ export class ChristianityGameComponent {
|
|
|
213
275
|
endTurn() {
|
|
214
276
|
this.selectedHandCard.set(null);
|
|
215
277
|
this.selectedAttacker.set(null);
|
|
278
|
+
this.selectedPreview.set(null);
|
|
216
279
|
this.game.update(game => {
|
|
217
280
|
const next = structuredClone(game);
|
|
218
281
|
next.turnOwner = next.turnOwner === 'P1' ? 'P2' : 'P1';
|
|
@@ -221,8 +284,21 @@ export class ChristianityGameComponent {
|
|
|
221
284
|
current.offeringPlayedThisTurn = false;
|
|
222
285
|
current.offerings = current.offerings.map(offering => ({ ...offering, ready: true }));
|
|
223
286
|
current.battleZone = current.battleZone.map(card => ({ ...card, canAttack: true }));
|
|
287
|
+
const drawnCard = next.sharedDeck.shift();
|
|
288
|
+
if (drawnCard) {
|
|
289
|
+
if (current.hand) {
|
|
290
|
+
current.hand.push(drawnCard);
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
current.handCount = (current.handCount ?? 0) + 1;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
224
296
|
next.revision++;
|
|
225
|
-
next.log = [
|
|
297
|
+
next.log = [
|
|
298
|
+
drawnCard ? `${current.displayName} roba una carta.` : `El mazo esta vacio.`,
|
|
299
|
+
`Turno de ${current.displayName}.`,
|
|
300
|
+
...next.log,
|
|
301
|
+
].slice(0, 4);
|
|
226
302
|
return next;
|
|
227
303
|
});
|
|
228
304
|
}
|
|
@@ -230,11 +306,11 @@ export class ChristianityGameComponent {
|
|
|
230
306
|
this.game.set(structuredClone(STARTING_GAME));
|
|
231
307
|
this.selectedHandCard.set(null);
|
|
232
308
|
this.selectedAttacker.set(null);
|
|
309
|
+
this.selectedPreview.set(null);
|
|
310
|
+
this.showHistory.set(false);
|
|
233
311
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
.historyZone.map(cardId => this.cardDefinition(cardId).name)
|
|
237
|
-
.join(', ');
|
|
312
|
+
closePreview() {
|
|
313
|
+
this.selectedPreview.set(null);
|
|
238
314
|
}
|
|
239
315
|
cleanupDestroyed(player, game) {
|
|
240
316
|
const destroyed = player.battleZone.filter(card => card.currentHp <= 0);
|
|
@@ -243,6 +319,52 @@ export class ChristianityGameComponent {
|
|
|
243
319
|
game.historyZone.push(...destroyed.map(card => card.cardId));
|
|
244
320
|
player.battleZone = player.battleZone.filter(card => card.currentHp > 0);
|
|
245
321
|
}
|
|
322
|
+
inspectLeader(seat) {
|
|
323
|
+
const player = this.game().players[seat];
|
|
324
|
+
this.selectedPreview.set({
|
|
325
|
+
title: player.leaderName,
|
|
326
|
+
eyebrow: this.t('christianityLeaderCard'),
|
|
327
|
+
meta: `${player.leaderHp}/${player.leaderMaxHp}`,
|
|
328
|
+
body: seat === 'P2' && this.hasOpponentGuards() ? this.t('christianityLeaderProtected') : this.t('christianityLeaderBody'),
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
inspectOffering(offering) {
|
|
332
|
+
this.selectedPreview.set({
|
|
333
|
+
title: offering.name,
|
|
334
|
+
eyebrow: this.t('christianityOfferingCard'),
|
|
335
|
+
meta: offering.ready ? this.t('christianityOfferingReady') : this.t('christianityOfferingExhausted'),
|
|
336
|
+
body: this.t('christianityOfferingBody'),
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
inspectDeck() {
|
|
340
|
+
this.selectedPreview.set({
|
|
341
|
+
title: this.t('christianityDeck'),
|
|
342
|
+
eyebrow: this.t('christianitySharedZone'),
|
|
343
|
+
meta: `${this.game().sharedDeck.length}`,
|
|
344
|
+
body: this.t('christianityDeckBody'),
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
inspectHandCard(cardId) {
|
|
348
|
+
const card = this.cardDefinition(cardId);
|
|
349
|
+
this.selectedPreview.set({
|
|
350
|
+
title: card.name,
|
|
351
|
+
eyebrow: card.type === 'offering' ? this.t('christianityOfferingCard') : this.t('christianityCharacterCard'),
|
|
352
|
+
meta: card.type === 'offering' ? `+${card.life}` : `${this.t('christianityCost')} ${card.cost} · ${card.attack}/${card.life}`,
|
|
353
|
+
body: card.type === 'offering' ? this.t('christianityOfferingBody') : this.t('christianityCharacterBody'),
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
inspectHistoryCard(cardId) {
|
|
357
|
+
this.showHistory.set(false);
|
|
358
|
+
this.inspectHandCard(cardId);
|
|
359
|
+
}
|
|
360
|
+
inspectCharacter(card) {
|
|
361
|
+
this.selectedPreview.set({
|
|
362
|
+
title: card.name,
|
|
363
|
+
eyebrow: this.t('christianityCharacterCard'),
|
|
364
|
+
meta: `${card.attack}/${card.currentHp}`,
|
|
365
|
+
body: card.canAttack ? this.t('christianityCharacterReady') : this.t('christianityCharacterExhausted'),
|
|
366
|
+
});
|
|
367
|
+
}
|
|
246
368
|
spendOfferings(player, cost) {
|
|
247
369
|
let remaining = cost;
|
|
248
370
|
player.offerings = player.offerings.map(offering => {
|
|
@@ -266,94 +388,129 @@ export class ChristianityGameComponent {
|
|
|
266
388
|
</div>
|
|
267
389
|
</section>
|
|
268
390
|
|
|
391
|
+
<section class="christianity-opponent-hand-area" [attr.aria-label]="t('christianityOpponentHand')">
|
|
392
|
+
<div class="christianity-player-badge christianity-player-badge--opponent">
|
|
393
|
+
<span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
|
|
394
|
+
<strong>{{ opponent().displayName }}</strong>
|
|
395
|
+
</div>
|
|
396
|
+
<div class="christianity-hand-fan christianity-hand-fan--opponent">
|
|
397
|
+
@for (_ of hiddenHandCards(opponentHandCount()); track $index) {
|
|
398
|
+
<button
|
|
399
|
+
type="button"
|
|
400
|
+
class="christianity-card-preview-card christianity-card-preview-card--back"
|
|
401
|
+
[style.transform]="fanTransform($index, opponentHandCount(), true)"
|
|
402
|
+
[attr.aria-label]="t('christianityHiddenCard')"
|
|
403
|
+
></button>
|
|
404
|
+
}
|
|
405
|
+
</div>
|
|
406
|
+
</section>
|
|
407
|
+
|
|
269
408
|
<section class="christianity-table" [attr.aria-label]="t('christianityTable')">
|
|
270
|
-
<section class="christianity-player christianity-player--opponent">
|
|
271
|
-
<div class="christianity-
|
|
272
|
-
|
|
273
|
-
<
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
}
|
|
283
|
-
</div>
|
|
284
|
-
</div>
|
|
285
|
-
<div class="christianity-hidden-hand">
|
|
286
|
-
<span>{{ t('christianityHand') }}</span>
|
|
287
|
-
<strong>{{ opponentHandCount() }}</strong>
|
|
288
|
-
</div>
|
|
289
|
-
</div>
|
|
290
|
-
<div class="christianity-battle-zone" [attr.aria-label]="t('christianityOpponentBattle')">
|
|
291
|
-
@for (slot of battleSlots('P2'); track slot.trackId) {
|
|
292
|
-
@if (slot.card) {
|
|
293
|
-
<button
|
|
294
|
-
type="button"
|
|
295
|
-
class="christianity-card christianity-card--battle"
|
|
296
|
-
[class.is-target]="selectedAttacker()"
|
|
297
|
-
(click)="attackCharacter(slot.card)"
|
|
298
|
-
>
|
|
299
|
-
<span>{{ slot.card.name }}</span>
|
|
300
|
-
<strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
|
|
301
|
-
</button>
|
|
302
|
-
} @else {
|
|
303
|
-
<span class="christianity-slot"></span>
|
|
304
|
-
}
|
|
409
|
+
<section class="christianity-player-rack christianity-player-rack--opponent">
|
|
410
|
+
<div class="christianity-offerings-zone">
|
|
411
|
+
@for (offering of opponent().offerings; track offering.instanceId) {
|
|
412
|
+
<button
|
|
413
|
+
type="button"
|
|
414
|
+
class="christianity-card-mini christianity-card-mini--offering"
|
|
415
|
+
[class.is-exhausted]="!offering.ready"
|
|
416
|
+
(click)="inspectOffering(offering)"
|
|
417
|
+
>
|
|
418
|
+
<span>{{ t('christianityOfferingCard') }}</span>
|
|
419
|
+
<strong>+{{ offering.value }}</strong>
|
|
420
|
+
</button>
|
|
305
421
|
}
|
|
306
422
|
</div>
|
|
423
|
+
<button type="button" class="christianity-leader-card" [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
|
|
424
|
+
<span>{{ opponent().leaderName }}</span>
|
|
425
|
+
<strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
|
|
426
|
+
</button>
|
|
427
|
+
<div class="christianity-player-badge">
|
|
428
|
+
<span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
|
|
429
|
+
<strong>{{ opponent().displayName }}</strong>
|
|
430
|
+
</div>
|
|
431
|
+
</section>
|
|
432
|
+
|
|
433
|
+
<section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
|
|
434
|
+
@for (slot of battleSlots('P2'); track slot.trackId) {
|
|
435
|
+
@if (slot.card) {
|
|
436
|
+
<button
|
|
437
|
+
type="button"
|
|
438
|
+
class="christianity-card-preview-card christianity-card-preview-card--battle"
|
|
439
|
+
[class.is-target]="selectedAttacker()"
|
|
440
|
+
(click)="handleOpponentCharacter(slot.card)"
|
|
441
|
+
>
|
|
442
|
+
<span>{{ slot.card.name }}</span>
|
|
443
|
+
<strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
|
|
444
|
+
</button>
|
|
445
|
+
} @else {
|
|
446
|
+
<span class="christianity-slot"></span>
|
|
447
|
+
}
|
|
448
|
+
}
|
|
307
449
|
</section>
|
|
308
450
|
|
|
309
451
|
<section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
|
|
310
|
-
<button type="button" class="christianity-pile" (click)="showHistory.set(
|
|
452
|
+
<button type="button" class="christianity-zone-pile christianity-zone-pile--history" (click)="showHistory.set(true)">
|
|
453
|
+
<i aria-hidden="true"></i>
|
|
454
|
+
<i aria-hidden="true"></i>
|
|
455
|
+
<i aria-hidden="true"></i>
|
|
311
456
|
<span>{{ t('christianityHistory') }}</span>
|
|
312
457
|
<strong>{{ game().historyZone.length }}</strong>
|
|
313
458
|
</button>
|
|
314
|
-
<
|
|
459
|
+
<button type="button" class="christianity-zone-pile christianity-zone-pile--deck" aria-live="polite" (click)="inspectDeck()">
|
|
460
|
+
<i aria-hidden="true"></i>
|
|
461
|
+
<i aria-hidden="true"></i>
|
|
462
|
+
<i aria-hidden="true"></i>
|
|
315
463
|
<span>{{ t('christianityDeck') }}</span>
|
|
316
|
-
<strong>{{ game().
|
|
317
|
-
</
|
|
318
|
-
<div class="christianity-
|
|
464
|
+
<strong>{{ game().sharedDeck.length }}</strong>
|
|
465
|
+
</button>
|
|
466
|
+
<div class="christianity-zone-card">
|
|
319
467
|
<span>{{ t('christianityPlace') }}</span>
|
|
320
468
|
<strong>{{ t('christianityEmpty') }}</strong>
|
|
321
469
|
</div>
|
|
322
470
|
</section>
|
|
323
471
|
|
|
324
|
-
<section class="christianity-
|
|
325
|
-
|
|
326
|
-
@
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
>
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
472
|
+
<section class="christianity-battle-zone" [attr.aria-label]="t('christianityYourBattle')">
|
|
473
|
+
@for (slot of battleSlots('P1'); track slot.trackId) {
|
|
474
|
+
@if (slot.card) {
|
|
475
|
+
<button
|
|
476
|
+
type="button"
|
|
477
|
+
class="christianity-card-preview-card christianity-card-preview-card--battle"
|
|
478
|
+
[class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
|
|
479
|
+
[class.is-exhausted]="!slot.card.canAttack"
|
|
480
|
+
(click)="selectAttacker(slot.card)"
|
|
481
|
+
>
|
|
482
|
+
<span>{{ slot.card.name }}</span>
|
|
483
|
+
<strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
|
|
484
|
+
</button>
|
|
485
|
+
} @else {
|
|
486
|
+
<span class="christianity-slot"></span>
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
</section>
|
|
490
|
+
|
|
491
|
+
<section class="christianity-player-rack">
|
|
492
|
+
<div class="christianity-offerings-zone">
|
|
493
|
+
@for (offering of player().offerings; track offering.instanceId) {
|
|
494
|
+
<button
|
|
495
|
+
type="button"
|
|
496
|
+
class="christianity-card-mini christianity-card-mini--offering"
|
|
497
|
+
[class.is-exhausted]="!offering.ready"
|
|
498
|
+
(click)="inspectOffering(offering)"
|
|
499
|
+
>
|
|
500
|
+
<span>{{ t('christianityOfferingCard') }}</span>
|
|
501
|
+
<strong>+{{ offering.value }}</strong>
|
|
502
|
+
</button>
|
|
341
503
|
}
|
|
342
504
|
</div>
|
|
343
|
-
<
|
|
344
|
-
<
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
</div>
|
|
505
|
+
<button type="button" class="christianity-leader-card" (click)="inspectLeader('P1')">
|
|
506
|
+
<span>{{ player().leaderName }}</span>
|
|
507
|
+
<strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
|
|
508
|
+
</button>
|
|
509
|
+
<div class="christianity-player-command">
|
|
510
|
+
<div class="christianity-player-badge">
|
|
511
|
+
<span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
|
|
512
|
+
<strong>{{ player().displayName }}</strong>
|
|
352
513
|
</div>
|
|
353
|
-
<button type="button" class="christianity-leader christianity-leader--target" (click)="attackLeader()">
|
|
354
|
-
<span>{{ player().leaderName }}</span>
|
|
355
|
-
<strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
|
|
356
|
-
</button>
|
|
357
514
|
<button type="button" class="christianity-end-turn" (click)="endTurn()">
|
|
358
515
|
{{ t('christianityEndTurn') }}
|
|
359
516
|
</button>
|
|
@@ -361,14 +518,15 @@ export class ChristianityGameComponent {
|
|
|
361
518
|
</section>
|
|
362
519
|
</section>
|
|
363
520
|
|
|
364
|
-
<section class="christianity-hand" [attr.aria-label]="t('christianityYourHand')">
|
|
521
|
+
<section class="christianity-hand-fan" [attr.aria-label]="t('christianityYourHand')">
|
|
365
522
|
@for (cardId of player().hand ?? []; track cardId + $index) {
|
|
366
523
|
@let card = cardDefinition(cardId);
|
|
367
524
|
<button
|
|
368
525
|
type="button"
|
|
369
|
-
class="christianity-card christianity-card--hand"
|
|
526
|
+
class="christianity-card-preview-card christianity-card-preview-card--hand"
|
|
370
527
|
[class.is-selected]="selectedHandCard() === cardId"
|
|
371
528
|
[class.is-disabled]="!canPlay(card)"
|
|
529
|
+
[style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
|
|
372
530
|
(click)="selectHandCard(cardId)"
|
|
373
531
|
>
|
|
374
532
|
<small>
|
|
@@ -390,6 +548,16 @@ export class ChristianityGameComponent {
|
|
|
390
548
|
}
|
|
391
549
|
</section>
|
|
392
550
|
|
|
551
|
+
@if (selectedPreview()) {
|
|
552
|
+
<button type="button" class="christianity-preview-backdrop" [attr.aria-label]="t('christianityClosePreview')" (click)="closePreview()"></button>
|
|
553
|
+
<aside class="christianity-floating-card" aria-live="polite">
|
|
554
|
+
<small>{{ selectedPreview()?.eyebrow }}</small>
|
|
555
|
+
<strong>{{ selectedPreview()?.title }}</strong>
|
|
556
|
+
<span>{{ selectedPreview()?.meta }}</span>
|
|
557
|
+
<p>{{ selectedPreview()?.body }}</p>
|
|
558
|
+
</aside>
|
|
559
|
+
}
|
|
560
|
+
|
|
393
561
|
<section class="christianity-actions" aria-live="polite">
|
|
394
562
|
<p>{{ statusText() }}</p>
|
|
395
563
|
<div>
|
|
@@ -403,17 +571,36 @@ export class ChristianityGameComponent {
|
|
|
403
571
|
</section>
|
|
404
572
|
|
|
405
573
|
@if (showHistory()) {
|
|
406
|
-
<
|
|
407
|
-
|
|
574
|
+
<button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseHistory')" (click)="showHistory.set(false)"></button>
|
|
575
|
+
<section class="christianity-history-drawer">
|
|
576
|
+
<header>
|
|
577
|
+
<h2>{{ t('christianityHistory') }}</h2>
|
|
578
|
+
<span>{{ game().historyZone.length }}</span>
|
|
579
|
+
</header>
|
|
408
580
|
@if (game().historyZone.length) {
|
|
409
|
-
<
|
|
581
|
+
<div class="christianity-history-grid">
|
|
582
|
+
@for (cardId of game().historyZone; track cardId + $index) {
|
|
583
|
+
@let card = cardDefinition(cardId);
|
|
584
|
+
<button type="button" class="christianity-card-preview-card" (click)="inspectHistoryCard(cardId)">
|
|
585
|
+
<small>{{ card.type === 'offering' ? t('christianityOfferingCard') : t('christianityCharacterCard') }}</small>
|
|
586
|
+
<span>{{ card.name }}</span>
|
|
587
|
+
<strong>
|
|
588
|
+
@if (card.type === 'offering') {
|
|
589
|
+
+{{ card.life }}
|
|
590
|
+
} @else {
|
|
591
|
+
{{ card.attack }} / {{ card.life }}
|
|
592
|
+
}
|
|
593
|
+
</strong>
|
|
594
|
+
</button>
|
|
595
|
+
}
|
|
596
|
+
</div>
|
|
410
597
|
} @else {
|
|
411
598
|
<p>{{ t('christianityHistoryEmpty') }}</p>
|
|
412
599
|
}
|
|
413
600
|
</section>
|
|
414
601
|
}
|
|
415
602
|
</main>
|
|
416
|
-
`, isInline: true, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{display:grid;grid-template-columns:repeat(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 .2rem #2563eb29}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{min-height:5.8rem;border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid rgba(37,99,235,.24);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-battle-zone{grid-template-columns:repeat(
|
|
603
|
+
`, isInline: true, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{display:grid;grid-template-columns:repeat(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 .2rem #2563eb29}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{min-height:5.8rem;border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}.christianity-hand-fan{position:relative;display:flex;justify-content:center;min-height:7.4rem;padding:0 .25rem;isolation:isolate}.christianity-hand-fan--opponent{min-height:5.2rem}.christianity-opponent-hand-area{display:grid;gap:.25rem;min-height:6.7rem;align-items:start;padding-bottom:.35rem}.christianity-card-preview-card,.christianity-card-mini,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile,.christianity-end-turn{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card-preview-card{display:grid;align-content:space-between;width:clamp(4.9rem,17vw,7.1rem);min-height:clamp(6.6rem,22vw,8.8rem);margin-inline:-.42rem;padding:.48rem;text-align:left;transform-origin:50% 115%;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;box-shadow:0 .5rem 1.25rem #2430441a}.christianity-card-preview-card--hand:hover,.christianity-card-preview-card--hand.is-selected{z-index:3;border-color:#2563eb;box-shadow:0 1rem 2rem #2563eb2e}.christianity-card-preview-card--back{min-height:4.8rem;background:linear-gradient(135deg,#102a431f,#102a4305),repeating-linear-gradient(45deg,#e2e8f0 0 .35rem,#f8fafc .35rem .7rem)}.christianity-card-preview-card--battle{width:100%;min-height:5.7rem;margin-inline:0}.christianity-card-preview-card span,.christianity-card-mini span,.christianity-leader-card span,.christianity-zone-card span,.christianity-zone-pile span{font-weight:700}.christianity-card-preview-card strong,.christianity-card-mini strong,.christianity-leader-card strong,.christianity-zone-card strong,.christianity-zone-pile strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{display:grid;grid-template-columns:minmax(4.2rem,1fr) minmax(5rem,6.5rem) minmax(4.2rem,1fr);gap:.55rem;align-items:end;justify-items:center}.christianity-player-rack--opponent{align-items:start}.christianity-player-badge,.christianity-player-command{display:grid;gap:.35rem;justify-items:center;min-width:0}.christianity-player-badge{align-content:start;color:#1f2933c2;font-size:.74rem}.christianity-player-badge--opponent{justify-self:center;grid-auto-flow:column;align-items:center;justify-content:center}.christianity-player-badge strong{max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-avatar{display:grid;place-items:center;width:1.85rem;height:1.85rem;border-radius:999px;color:#fff;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .9rem #102a4329}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-end;width:100%}.christianity-card-mini,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-mini{width:3.5rem}.christianity-leader-card{width:min(100%,6.5rem);min-height:5.8rem}.christianity-battle-zone{grid-template-columns:repeat(4,minmax(4rem,1fr))}.christianity-shared-zone{display:grid;grid-template-columns:repeat(3,minmax(4.3rem,1fr));align-items:stretch}.christianity-zone-pile{position:relative;isolation:isolate;overflow:hidden;min-height:5.6rem;box-shadow:inset 0 0 0 999px #ffffff1f}.christianity-zone-pile i{position:absolute;inset:.62rem .72rem auto auto;z-index:-1;width:2.7rem;height:3.7rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:#f8fafc;box-shadow:0 .35rem .85rem #102a431c;transform:rotate(4deg)}.christianity-zone-pile i:nth-child(2){transform:translate(-.28rem,.12rem) rotate(-3deg)}.christianity-zone-pile i:nth-child(3){background:linear-gradient(135deg,#102a4329,#102a4308),repeating-linear-gradient(45deg,#dbeafe 0 .33rem,#fff .33rem .66rem);transform:translate(-.54rem,.24rem) rotate(2deg)}.christianity-floating-card{position:fixed;top:50%;left:50%;z-index:21;display:grid;gap:.45rem;width:min(20rem,calc(100vw - 2rem));min-height:min(27rem,calc(100vh - 5rem));padding:1rem;border:1px solid rgba(36,48,68,.18);border-radius:.75rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 20% 0%,rgba(37,99,235,.12),transparent 45%);box-shadow:0 2.4rem 5rem #102a4357,inset 0 0 0 .35rem #ffffff8c;transform:translate(-50%,-50%) perspective(48rem) rotateX(5deg) rotateY(-5deg)}.christianity-preview-backdrop,.christianity-history-backdrop{position:fixed;inset:0;z-index:20;border:0;border-radius:0;background:#0f172a75}.christianity-floating-card small,.christianity-floating-card span{color:#1f2933a3}.christianity-floating-card strong{font-size:clamp(1.35rem,8vw,2rem);line-height:1.05}.christianity-floating-card p{margin:0;align-self:end;font-size:.95rem;line-height:1.35}.christianity-history-backdrop{z-index:22}.christianity-history-drawer{position:fixed;right:max(.5rem,env(safe-area-inset-right));bottom:max(.5rem,env(safe-area-inset-bottom));left:max(.5rem,env(safe-area-inset-left));z-index:23;display:grid;gap:.75rem;max-height:min(27rem,calc(100vh - 4rem));padding:.8rem;border:1px solid rgba(36,48,68,.16);border-radius:.75rem;background:#fffffffa;box-shadow:0 1.5rem 4rem #102a4347}.christianity-history-drawer header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-history-drawer h2,.christianity-history-drawer p{margin:0}.christianity-history-drawer header span{display:grid;place-items:center;min-width:1.85rem;height:1.85rem;border-radius:999px;background:#edf2f7;font-weight:800}.christianity-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.4rem,1fr));gap:.55rem;overflow-y:auto;padding:.1rem .1rem .25rem}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid rgba(37,99,235,.24);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-battle-zone{grid-template-columns:repeat(4,minmax(3.35rem,1fr));overflow-x:auto}.christianity-hand-fan{min-height:6.8rem;overflow-x:clip}.christianity-player-rack{grid-template-columns:minmax(3.6rem,1fr) minmax(4.8rem,5.6rem) minmax(3.6rem,1fr)}.christianity-shared-zone{grid-template-columns:repeat(3,minmax(3.7rem,1fr))}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);min-height:clamp(5.8rem,26vw,7.4rem)}.christianity-opponent-hand-area{min-height:6.2rem}}\n"] }); }
|
|
417
604
|
}
|
|
418
605
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, decorators: [{
|
|
419
606
|
type: Component,
|
|
@@ -430,94 +617,129 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
430
617
|
</div>
|
|
431
618
|
</section>
|
|
432
619
|
|
|
620
|
+
<section class="christianity-opponent-hand-area" [attr.aria-label]="t('christianityOpponentHand')">
|
|
621
|
+
<div class="christianity-player-badge christianity-player-badge--opponent">
|
|
622
|
+
<span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
|
|
623
|
+
<strong>{{ opponent().displayName }}</strong>
|
|
624
|
+
</div>
|
|
625
|
+
<div class="christianity-hand-fan christianity-hand-fan--opponent">
|
|
626
|
+
@for (_ of hiddenHandCards(opponentHandCount()); track $index) {
|
|
627
|
+
<button
|
|
628
|
+
type="button"
|
|
629
|
+
class="christianity-card-preview-card christianity-card-preview-card--back"
|
|
630
|
+
[style.transform]="fanTransform($index, opponentHandCount(), true)"
|
|
631
|
+
[attr.aria-label]="t('christianityHiddenCard')"
|
|
632
|
+
></button>
|
|
633
|
+
}
|
|
634
|
+
</div>
|
|
635
|
+
</section>
|
|
636
|
+
|
|
433
637
|
<section class="christianity-table" [attr.aria-label]="t('christianityTable')">
|
|
434
|
-
<section class="christianity-player christianity-player--opponent">
|
|
435
|
-
<div class="christianity-
|
|
436
|
-
|
|
437
|
-
<
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
}
|
|
447
|
-
</div>
|
|
448
|
-
</div>
|
|
449
|
-
<div class="christianity-hidden-hand">
|
|
450
|
-
<span>{{ t('christianityHand') }}</span>
|
|
451
|
-
<strong>{{ opponentHandCount() }}</strong>
|
|
452
|
-
</div>
|
|
453
|
-
</div>
|
|
454
|
-
<div class="christianity-battle-zone" [attr.aria-label]="t('christianityOpponentBattle')">
|
|
455
|
-
@for (slot of battleSlots('P2'); track slot.trackId) {
|
|
456
|
-
@if (slot.card) {
|
|
457
|
-
<button
|
|
458
|
-
type="button"
|
|
459
|
-
class="christianity-card christianity-card--battle"
|
|
460
|
-
[class.is-target]="selectedAttacker()"
|
|
461
|
-
(click)="attackCharacter(slot.card)"
|
|
462
|
-
>
|
|
463
|
-
<span>{{ slot.card.name }}</span>
|
|
464
|
-
<strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
|
|
465
|
-
</button>
|
|
466
|
-
} @else {
|
|
467
|
-
<span class="christianity-slot"></span>
|
|
468
|
-
}
|
|
638
|
+
<section class="christianity-player-rack christianity-player-rack--opponent">
|
|
639
|
+
<div class="christianity-offerings-zone">
|
|
640
|
+
@for (offering of opponent().offerings; track offering.instanceId) {
|
|
641
|
+
<button
|
|
642
|
+
type="button"
|
|
643
|
+
class="christianity-card-mini christianity-card-mini--offering"
|
|
644
|
+
[class.is-exhausted]="!offering.ready"
|
|
645
|
+
(click)="inspectOffering(offering)"
|
|
646
|
+
>
|
|
647
|
+
<span>{{ t('christianityOfferingCard') }}</span>
|
|
648
|
+
<strong>+{{ offering.value }}</strong>
|
|
649
|
+
</button>
|
|
469
650
|
}
|
|
470
651
|
</div>
|
|
652
|
+
<button type="button" class="christianity-leader-card" [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
|
|
653
|
+
<span>{{ opponent().leaderName }}</span>
|
|
654
|
+
<strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
|
|
655
|
+
</button>
|
|
656
|
+
<div class="christianity-player-badge">
|
|
657
|
+
<span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
|
|
658
|
+
<strong>{{ opponent().displayName }}</strong>
|
|
659
|
+
</div>
|
|
660
|
+
</section>
|
|
661
|
+
|
|
662
|
+
<section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
|
|
663
|
+
@for (slot of battleSlots('P2'); track slot.trackId) {
|
|
664
|
+
@if (slot.card) {
|
|
665
|
+
<button
|
|
666
|
+
type="button"
|
|
667
|
+
class="christianity-card-preview-card christianity-card-preview-card--battle"
|
|
668
|
+
[class.is-target]="selectedAttacker()"
|
|
669
|
+
(click)="handleOpponentCharacter(slot.card)"
|
|
670
|
+
>
|
|
671
|
+
<span>{{ slot.card.name }}</span>
|
|
672
|
+
<strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
|
|
673
|
+
</button>
|
|
674
|
+
} @else {
|
|
675
|
+
<span class="christianity-slot"></span>
|
|
676
|
+
}
|
|
677
|
+
}
|
|
471
678
|
</section>
|
|
472
679
|
|
|
473
680
|
<section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
|
|
474
|
-
<button type="button" class="christianity-pile" (click)="showHistory.set(
|
|
681
|
+
<button type="button" class="christianity-zone-pile christianity-zone-pile--history" (click)="showHistory.set(true)">
|
|
682
|
+
<i aria-hidden="true"></i>
|
|
683
|
+
<i aria-hidden="true"></i>
|
|
684
|
+
<i aria-hidden="true"></i>
|
|
475
685
|
<span>{{ t('christianityHistory') }}</span>
|
|
476
686
|
<strong>{{ game().historyZone.length }}</strong>
|
|
477
687
|
</button>
|
|
478
|
-
<
|
|
688
|
+
<button type="button" class="christianity-zone-pile christianity-zone-pile--deck" aria-live="polite" (click)="inspectDeck()">
|
|
689
|
+
<i aria-hidden="true"></i>
|
|
690
|
+
<i aria-hidden="true"></i>
|
|
691
|
+
<i aria-hidden="true"></i>
|
|
479
692
|
<span>{{ t('christianityDeck') }}</span>
|
|
480
|
-
<strong>{{ game().
|
|
481
|
-
</
|
|
482
|
-
<div class="christianity-
|
|
693
|
+
<strong>{{ game().sharedDeck.length }}</strong>
|
|
694
|
+
</button>
|
|
695
|
+
<div class="christianity-zone-card">
|
|
483
696
|
<span>{{ t('christianityPlace') }}</span>
|
|
484
697
|
<strong>{{ t('christianityEmpty') }}</strong>
|
|
485
698
|
</div>
|
|
486
699
|
</section>
|
|
487
700
|
|
|
488
|
-
<section class="christianity-
|
|
489
|
-
|
|
490
|
-
@
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
>
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
701
|
+
<section class="christianity-battle-zone" [attr.aria-label]="t('christianityYourBattle')">
|
|
702
|
+
@for (slot of battleSlots('P1'); track slot.trackId) {
|
|
703
|
+
@if (slot.card) {
|
|
704
|
+
<button
|
|
705
|
+
type="button"
|
|
706
|
+
class="christianity-card-preview-card christianity-card-preview-card--battle"
|
|
707
|
+
[class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
|
|
708
|
+
[class.is-exhausted]="!slot.card.canAttack"
|
|
709
|
+
(click)="selectAttacker(slot.card)"
|
|
710
|
+
>
|
|
711
|
+
<span>{{ slot.card.name }}</span>
|
|
712
|
+
<strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
|
|
713
|
+
</button>
|
|
714
|
+
} @else {
|
|
715
|
+
<span class="christianity-slot"></span>
|
|
716
|
+
}
|
|
717
|
+
}
|
|
718
|
+
</section>
|
|
719
|
+
|
|
720
|
+
<section class="christianity-player-rack">
|
|
721
|
+
<div class="christianity-offerings-zone">
|
|
722
|
+
@for (offering of player().offerings; track offering.instanceId) {
|
|
723
|
+
<button
|
|
724
|
+
type="button"
|
|
725
|
+
class="christianity-card-mini christianity-card-mini--offering"
|
|
726
|
+
[class.is-exhausted]="!offering.ready"
|
|
727
|
+
(click)="inspectOffering(offering)"
|
|
728
|
+
>
|
|
729
|
+
<span>{{ t('christianityOfferingCard') }}</span>
|
|
730
|
+
<strong>+{{ offering.value }}</strong>
|
|
731
|
+
</button>
|
|
505
732
|
}
|
|
506
733
|
</div>
|
|
507
|
-
<
|
|
508
|
-
<
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
</div>
|
|
734
|
+
<button type="button" class="christianity-leader-card" (click)="inspectLeader('P1')">
|
|
735
|
+
<span>{{ player().leaderName }}</span>
|
|
736
|
+
<strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
|
|
737
|
+
</button>
|
|
738
|
+
<div class="christianity-player-command">
|
|
739
|
+
<div class="christianity-player-badge">
|
|
740
|
+
<span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
|
|
741
|
+
<strong>{{ player().displayName }}</strong>
|
|
516
742
|
</div>
|
|
517
|
-
<button type="button" class="christianity-leader christianity-leader--target" (click)="attackLeader()">
|
|
518
|
-
<span>{{ player().leaderName }}</span>
|
|
519
|
-
<strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
|
|
520
|
-
</button>
|
|
521
743
|
<button type="button" class="christianity-end-turn" (click)="endTurn()">
|
|
522
744
|
{{ t('christianityEndTurn') }}
|
|
523
745
|
</button>
|
|
@@ -525,14 +747,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
525
747
|
</section>
|
|
526
748
|
</section>
|
|
527
749
|
|
|
528
|
-
<section class="christianity-hand" [attr.aria-label]="t('christianityYourHand')">
|
|
750
|
+
<section class="christianity-hand-fan" [attr.aria-label]="t('christianityYourHand')">
|
|
529
751
|
@for (cardId of player().hand ?? []; track cardId + $index) {
|
|
530
752
|
@let card = cardDefinition(cardId);
|
|
531
753
|
<button
|
|
532
754
|
type="button"
|
|
533
|
-
class="christianity-card christianity-card--hand"
|
|
755
|
+
class="christianity-card-preview-card christianity-card-preview-card--hand"
|
|
534
756
|
[class.is-selected]="selectedHandCard() === cardId"
|
|
535
757
|
[class.is-disabled]="!canPlay(card)"
|
|
758
|
+
[style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
|
|
536
759
|
(click)="selectHandCard(cardId)"
|
|
537
760
|
>
|
|
538
761
|
<small>
|
|
@@ -554,6 +777,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
554
777
|
}
|
|
555
778
|
</section>
|
|
556
779
|
|
|
780
|
+
@if (selectedPreview()) {
|
|
781
|
+
<button type="button" class="christianity-preview-backdrop" [attr.aria-label]="t('christianityClosePreview')" (click)="closePreview()"></button>
|
|
782
|
+
<aside class="christianity-floating-card" aria-live="polite">
|
|
783
|
+
<small>{{ selectedPreview()?.eyebrow }}</small>
|
|
784
|
+
<strong>{{ selectedPreview()?.title }}</strong>
|
|
785
|
+
<span>{{ selectedPreview()?.meta }}</span>
|
|
786
|
+
<p>{{ selectedPreview()?.body }}</p>
|
|
787
|
+
</aside>
|
|
788
|
+
}
|
|
789
|
+
|
|
557
790
|
<section class="christianity-actions" aria-live="polite">
|
|
558
791
|
<p>{{ statusText() }}</p>
|
|
559
792
|
<div>
|
|
@@ -567,16 +800,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
567
800
|
</section>
|
|
568
801
|
|
|
569
802
|
@if (showHistory()) {
|
|
570
|
-
<
|
|
571
|
-
|
|
803
|
+
<button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseHistory')" (click)="showHistory.set(false)"></button>
|
|
804
|
+
<section class="christianity-history-drawer">
|
|
805
|
+
<header>
|
|
806
|
+
<h2>{{ t('christianityHistory') }}</h2>
|
|
807
|
+
<span>{{ game().historyZone.length }}</span>
|
|
808
|
+
</header>
|
|
572
809
|
@if (game().historyZone.length) {
|
|
573
|
-
<
|
|
810
|
+
<div class="christianity-history-grid">
|
|
811
|
+
@for (cardId of game().historyZone; track cardId + $index) {
|
|
812
|
+
@let card = cardDefinition(cardId);
|
|
813
|
+
<button type="button" class="christianity-card-preview-card" (click)="inspectHistoryCard(cardId)">
|
|
814
|
+
<small>{{ card.type === 'offering' ? t('christianityOfferingCard') : t('christianityCharacterCard') }}</small>
|
|
815
|
+
<span>{{ card.name }}</span>
|
|
816
|
+
<strong>
|
|
817
|
+
@if (card.type === 'offering') {
|
|
818
|
+
+{{ card.life }}
|
|
819
|
+
} @else {
|
|
820
|
+
{{ card.attack }} / {{ card.life }}
|
|
821
|
+
}
|
|
822
|
+
</strong>
|
|
823
|
+
</button>
|
|
824
|
+
}
|
|
825
|
+
</div>
|
|
574
826
|
} @else {
|
|
575
827
|
<p>{{ t('christianityHistoryEmpty') }}</p>
|
|
576
828
|
}
|
|
577
829
|
</section>
|
|
578
830
|
}
|
|
579
831
|
</main>
|
|
580
|
-
`, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{display:grid;grid-template-columns:repeat(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 .2rem #2563eb29}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{min-height:5.8rem;border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid rgba(37,99,235,.24);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-battle-zone{grid-template-columns:repeat(
|
|
832
|
+
`, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{display:grid;grid-template-columns:repeat(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 .2rem #2563eb29}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{min-height:5.8rem;border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}.christianity-hand-fan{position:relative;display:flex;justify-content:center;min-height:7.4rem;padding:0 .25rem;isolation:isolate}.christianity-hand-fan--opponent{min-height:5.2rem}.christianity-opponent-hand-area{display:grid;gap:.25rem;min-height:6.7rem;align-items:start;padding-bottom:.35rem}.christianity-card-preview-card,.christianity-card-mini,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile,.christianity-end-turn{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card-preview-card{display:grid;align-content:space-between;width:clamp(4.9rem,17vw,7.1rem);min-height:clamp(6.6rem,22vw,8.8rem);margin-inline:-.42rem;padding:.48rem;text-align:left;transform-origin:50% 115%;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;box-shadow:0 .5rem 1.25rem #2430441a}.christianity-card-preview-card--hand:hover,.christianity-card-preview-card--hand.is-selected{z-index:3;border-color:#2563eb;box-shadow:0 1rem 2rem #2563eb2e}.christianity-card-preview-card--back{min-height:4.8rem;background:linear-gradient(135deg,#102a431f,#102a4305),repeating-linear-gradient(45deg,#e2e8f0 0 .35rem,#f8fafc .35rem .7rem)}.christianity-card-preview-card--battle{width:100%;min-height:5.7rem;margin-inline:0}.christianity-card-preview-card span,.christianity-card-mini span,.christianity-leader-card span,.christianity-zone-card span,.christianity-zone-pile span{font-weight:700}.christianity-card-preview-card strong,.christianity-card-mini strong,.christianity-leader-card strong,.christianity-zone-card strong,.christianity-zone-pile strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{display:grid;grid-template-columns:minmax(4.2rem,1fr) minmax(5rem,6.5rem) minmax(4.2rem,1fr);gap:.55rem;align-items:end;justify-items:center}.christianity-player-rack--opponent{align-items:start}.christianity-player-badge,.christianity-player-command{display:grid;gap:.35rem;justify-items:center;min-width:0}.christianity-player-badge{align-content:start;color:#1f2933c2;font-size:.74rem}.christianity-player-badge--opponent{justify-self:center;grid-auto-flow:column;align-items:center;justify-content:center}.christianity-player-badge strong{max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-avatar{display:grid;place-items:center;width:1.85rem;height:1.85rem;border-radius:999px;color:#fff;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .9rem #102a4329}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-end;width:100%}.christianity-card-mini,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-mini{width:3.5rem}.christianity-leader-card{width:min(100%,6.5rem);min-height:5.8rem}.christianity-battle-zone{grid-template-columns:repeat(4,minmax(4rem,1fr))}.christianity-shared-zone{display:grid;grid-template-columns:repeat(3,minmax(4.3rem,1fr));align-items:stretch}.christianity-zone-pile{position:relative;isolation:isolate;overflow:hidden;min-height:5.6rem;box-shadow:inset 0 0 0 999px #ffffff1f}.christianity-zone-pile i{position:absolute;inset:.62rem .72rem auto auto;z-index:-1;width:2.7rem;height:3.7rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:#f8fafc;box-shadow:0 .35rem .85rem #102a431c;transform:rotate(4deg)}.christianity-zone-pile i:nth-child(2){transform:translate(-.28rem,.12rem) rotate(-3deg)}.christianity-zone-pile i:nth-child(3){background:linear-gradient(135deg,#102a4329,#102a4308),repeating-linear-gradient(45deg,#dbeafe 0 .33rem,#fff .33rem .66rem);transform:translate(-.54rem,.24rem) rotate(2deg)}.christianity-floating-card{position:fixed;top:50%;left:50%;z-index:21;display:grid;gap:.45rem;width:min(20rem,calc(100vw - 2rem));min-height:min(27rem,calc(100vh - 5rem));padding:1rem;border:1px solid rgba(36,48,68,.18);border-radius:.75rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 20% 0%,rgba(37,99,235,.12),transparent 45%);box-shadow:0 2.4rem 5rem #102a4357,inset 0 0 0 .35rem #ffffff8c;transform:translate(-50%,-50%) perspective(48rem) rotateX(5deg) rotateY(-5deg)}.christianity-preview-backdrop,.christianity-history-backdrop{position:fixed;inset:0;z-index:20;border:0;border-radius:0;background:#0f172a75}.christianity-floating-card small,.christianity-floating-card span{color:#1f2933a3}.christianity-floating-card strong{font-size:clamp(1.35rem,8vw,2rem);line-height:1.05}.christianity-floating-card p{margin:0;align-self:end;font-size:.95rem;line-height:1.35}.christianity-history-backdrop{z-index:22}.christianity-history-drawer{position:fixed;right:max(.5rem,env(safe-area-inset-right));bottom:max(.5rem,env(safe-area-inset-bottom));left:max(.5rem,env(safe-area-inset-left));z-index:23;display:grid;gap:.75rem;max-height:min(27rem,calc(100vh - 4rem));padding:.8rem;border:1px solid rgba(36,48,68,.16);border-radius:.75rem;background:#fffffffa;box-shadow:0 1.5rem 4rem #102a4347}.christianity-history-drawer header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-history-drawer h2,.christianity-history-drawer p{margin:0}.christianity-history-drawer header span{display:grid;place-items:center;min-width:1.85rem;height:1.85rem;border-radius:999px;background:#edf2f7;font-weight:800}.christianity-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.4rem,1fr));gap:.55rem;overflow-y:auto;padding:.1rem .1rem .25rem}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid rgba(37,99,235,.24);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-battle-zone{grid-template-columns:repeat(4,minmax(3.35rem,1fr));overflow-x:auto}.christianity-hand-fan{min-height:6.8rem;overflow-x:clip}.christianity-player-rack{grid-template-columns:minmax(3.6rem,1fr) minmax(4.8rem,5.6rem) minmax(3.6rem,1fr)}.christianity-shared-zone{grid-template-columns:repeat(3,minmax(3.7rem,1fr))}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);min-height:clamp(5.8rem,26vw,7.4rem)}.christianity-opponent-hand-area{min-height:6.2rem}}\n"] }]
|
|
581
833
|
}], ctorParameters: () => [] });
|
|
582
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyaXN0aWFuaXR5LWdhbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9taW5pLWdhbWVzL2NocmlzdGlhbml0eS1nYW1lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBU3BELE1BQU0sYUFBYSxHQUErQztJQUNoRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQ25HLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQ3pGLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQ3pGLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdLVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBNSU5JX0dBTUVTX0kxOE4gfSBmcm9tICcuL21pbmktZ2FtZXMuaTE4bic7XG5pbXBvcnQge1xuICBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbixcbiAgQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UsXG4gIENocmlzdGlhbml0eUdhbWVTdGF0ZSxcbiAgQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUsXG4gIENocmlzdGlhbml0eVNlYXQsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBTVEFSVEVSX0NBUkRTOiBSZWNvcmQ8c3RyaW5nLCBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbj4gPSB7XG4gIG9fc2ltcGxlOiB7IGlkOiAnb19zaW1wbGUnLCBuYW1lOiAnT2ZyZW5kYSBzaW1wbGUnLCB0eXBlOiAnb2ZmZXJpbmcnLCBjb3N0OiAwLCBhdHRhY2s6IDAsIGxpZmU6IDEgfSxcbiAgcF9zY291dDogeyBpZDogJ3Bfc2NvdXQnLCBuYW1lOiAnU2NvdXQnLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogMSwgYXR0YWNrOiAxLCBsaWZlOiAxIH0sXG4gIHBfZ3VhcmQ6IHsgaWQ6ICdwX2d1YXJkJywgbmFtZTogJ0d1YXJkJywgdHlwZTogJ2NoYXJhY3RlcicsIGNvc3Q6IDIsIGF0dGFjazogMSwgbGlmZTogMyB9LFxuICBwX3dhcnJpb3I6IHsgaWQ6ICdwX3dhcnJpb3InLCBuYW1lOiAnV2FycmlvcicsIHR5cGU6ICdjaGFyYWN0ZXInLCBjb3N0OiAyLCBhdHRhY2s6IDIsIGxpZmU6IDIgfSxcbiAgcF9lbGRlcjogeyBpZDogJ3BfZWxkZXInLCBuYW1lOiAnRWxkZXInLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogMywgYXR0YWNrOiAyLCBsaWZlOiA0IH0sXG4gIHBfY2hhbXBpb246IHsgaWQ6ICdwX2NoYW1waW9uJywgbmFtZTogJ0NoYW1waW9uJywgdHlwZTogJ2NoYXJhY3RlcicsIGNvc3Q6IDQsIGF0dGFjazogNCwgbGlmZTogNCB9LFxufTtcblxuY29uc3QgU1RBUlRJTkdfR0FNRTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlID0ge1xuICBnYW1lSWQ6ICdtb2NrLWNocmlzdGlhbml0eScsXG4gIHN0YXR1czogJ2luX3Byb2dyZXNzJyxcbiAgbW9kZTogJ2xvY2FsX3Bhc3MnLFxuICB0dXJuT3duZXI6ICdQMScsXG4gIHJldmlzaW9uOiAwLFxuICB0dXJuQ291bnQ6IDEsXG4gIHNoYXJlZERlY2tDb3VudDogMTIsXG4gIGhpc3Rvcnlab25lOiBbXSxcbiAgcGxheWVyczoge1xuICAgIFAxOiB7XG4gICAgICBzZWF0OiAnUDEnLFxuICAgICAgZGlzcGxheU5hbWU6ICdKdWdhZG9yJyxcbiAgICAgIGxlYWRlck5hbWU6ICdBZGFtJyxcbiAgICAgIGxlYWRlckhwOiAxNSxcbiAgICAgIGxlYWRlck1heEhwOiAxNSxcbiAgICAgIG9mZmVyaW5nczogW3sgaW5zdGFuY2VJZDogJ3AxX29mZmVyaW5nXzAwMScsIGNhcmRJZDogJ29fc2ltcGxlJywgbmFtZTogJ09mcmVuZGEgc2ltcGxlJywgb3duZXI6ICdQMScsIHJlYWR5OiB0cnVlLCB2YWx1ZTogMSB9XSxcbiAgICAgIG9mZmVyaW5nUGxheWVkVGhpc1R1cm46IGZhbHNlLFxuICAgICAgaGFuZDogWydvX3NpbXBsZScsICdwX3Njb3V0JywgJ3Bfd2FycmlvcicsICdwX2d1YXJkJ10sXG4gICAgICBiYXR0bGVab25lOiBbXSxcbiAgICB9LFxuICAgIFAyOiB7XG4gICAgICBzZWF0OiAnUDInLFxuICAgICAgZGlzcGxheU5hbWU6ICdSaXZhbCcsXG4gICAgICBsZWFkZXJOYW1lOiAnTm9haCcsXG4gICAgICBsZWFkZXJIcDogMTUsXG4gICAgICBsZWFkZXJNYXhIcDogMTUsXG4gICAgICBvZmZlcmluZ3M6IFt7IGluc3RhbmNlSWQ6ICdwMl9vZmZlcmluZ18wMDEnLCBjYXJkSWQ6ICdvX3NpbXBsZScsIG5hbWU6ICdPZnJlbmRhIHNpbXBsZScsIG93bmVyOiAnUDInLCByZWFkeTogdHJ1ZSwgdmFsdWU6IDEgfV0sXG4gICAgICBvZmZlcmluZ1BsYXllZFRoaXNUdXJuOiBmYWxzZSxcbiAgICAgIGhhbmRDb3VudDogNCxcbiAgICAgIGJhdHRsZVpvbmU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGluc3RhbmNlSWQ6ICdvcHBfMDAxJyxcbiAgICAgICAgICBjYXJkSWQ6ICdwX3Njb3V0JyxcbiAgICAgICAgICBuYW1lOiAnU2NvdXQnLFxuICAgICAgICAgIG93bmVyOiAnUDInLFxuICAgICAgICAgIGNvbnRyb2xsZXI6ICdQMicsXG4gICAgICAgICAgYXR0YWNrOiAxLFxuICAgICAgICAgIGN1cnJlbnRIcDogMSxcbiAgICAgICAgICBtYXhIcDogMSxcbiAgICAgICAgICBjYW5BdHRhY2s6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICBsb2c6IFsnUGFydGlkYSBpbmljaWFkYS4nXSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1jaHJpc3RpYW5pdHktZ2FtZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG1haW4gY2xhc3M9XCJjaHJpc3RpYW5pdHktc2hlbGxcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhlYWRlclwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eUV5ZWJyb3cnKSB9fTwvcD5cbiAgICAgICAgICA8aDE+e3sgdCgnY2hyaXN0aWFuaXR5VGl0bGUnKSB9fTwvaDE+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXR1cm5cIiBbY2xhc3MuaXMtb3duLXR1cm5dPVwiaXNPd25UdXJuKClcIj5cbiAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlUdXJuJykgfX08L3NwYW4+XG4gICAgICAgICAgPHN0cm9uZz57eyBjdXJyZW50UGxheWVyKCkuZGlzcGxheU5hbWUgfX08L3N0cm9uZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXRhYmxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlUYWJsZScpXCI+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllciBjaHJpc3RpYW5pdHktcGxheWVyLS1vcHBvbmVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxheWVyX19zdW1tYXJ5XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWxlYWRlclwiPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBvcHBvbmVudCgpLmxlYWRlck5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzdHJvbmc+e3sgb3Bwb25lbnQoKS5sZWFkZXJIcCB9fS97eyBvcHBvbmVudCgpLmxlYWRlck1heEhwIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktb2ZmZXJpbmdzXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5ncycpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHJlYWR5T2ZmZXJpbmdzKG9wcG9uZW50KCkpIH19L3t7IG9wcG9uZW50KCkub2ZmZXJpbmdzLmxlbmd0aCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmRzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgQGZvciAob2ZmZXJpbmcgb2Ygb3Bwb25lbnQoKS5vZmZlcmluZ3M7IHRyYWNrIG9mZmVyaW5nLmluc3RhbmNlSWQpIHtcbiAgICAgICAgICAgICAgICAgIDxpIFtjbGFzcy5pcy11c2VkXT1cIiFvZmZlcmluZy5yZWFkeVwiPjwvaT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhpZGRlbi1oYW5kXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eUhhbmQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHN0cm9uZz57eyBvcHBvbmVudEhhbmRDb3VudCgpIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlPcHBvbmVudEJhdHRsZScpXCI+XG4gICAgICAgICAgICBAZm9yIChzbG90IG9mIGJhdHRsZVNsb3RzKCdQMicpOyB0cmFjayBzbG90LnRyYWNrSWQpIHtcbiAgICAgICAgICAgICAgQGlmIChzbG90LmNhcmQpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQgY2hyaXN0aWFuaXR5LWNhcmQtLWJhdHRsZVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtdGFyZ2V0XT1cInNlbGVjdGVkQXR0YWNrZXIoKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXR0YWNrQ2hhcmFjdGVyKHNsb3QuY2FyZClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHNsb3QuY2FyZC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzbG90LmNhcmQuYXR0YWNrIH19IC8ge3sgc2xvdC5jYXJkLmN1cnJlbnRIcCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1zbG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1zaGFyZWQtem9uZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5U2hhcmVkWm9uZScpXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktcGlsZVwiIChjbGljayk9XCJzaG93SGlzdG9yeS5zZXQoIXNob3dIaXN0b3J5KCkpXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlIaXN0b3J5JykgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IGdhbWUoKS5oaXN0b3J5Wm9uZS5sZW5ndGggfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWRlY2tcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eURlY2snKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLnNoYXJlZERlY2tDb3VudCB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxhY2VcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eVBsYWNlJykgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2NocmlzdGlhbml0eUVtcHR5JykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktYmF0dGxlLXpvbmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVlvdXJCYXR0bGUnKVwiPlxuICAgICAgICAgICAgQGZvciAoc2xvdCBvZiBiYXR0bGVTbG90cygnUDEnKTsgdHJhY2sgc2xvdC50cmFja0lkKSB7XG4gICAgICAgICAgICAgIEBpZiAoc2xvdC5jYXJkKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkIGNocmlzdGlhbml0eS1jYXJkLS1iYXR0bGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkQXR0YWNrZXIoKT8uaW5zdGFuY2VJZCA9PT0gc2xvdC5jYXJkLmluc3RhbmNlSWRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWV4aGF1c3RlZF09XCIhc2xvdC5jYXJkLmNhbkF0dGFja1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QXR0YWNrZXIoc2xvdC5jYXJkKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgc2xvdC5jYXJkLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHNsb3QuY2FyZC5hdHRhY2sgfX0gLyB7eyBzbG90LmNhcmQuY3VycmVudEhwIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNsb3RcIj48L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllcl9fc3VtbWFyeVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZ3NcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdzJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzdHJvbmc+e3sgcmVhZHlPZmZlcmluZ3MocGxheWVyKCkpIH19L3t7IHBsYXllcigpLm9mZmVyaW5ncy5sZW5ndGggfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKG9mZmVyaW5nIG9mIHBsYXllcigpLm9mZmVyaW5nczsgdHJhY2sgb2ZmZXJpbmcuaW5zdGFuY2VJZCkge1xuICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzLmlzLXVzZWRdPVwiIW9mZmVyaW5nLnJlYWR5XCI+PC9pPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWxlYWRlciBjaHJpc3RpYW5pdHktbGVhZGVyLS10YXJnZXRcIiAoY2xpY2spPVwiYXR0YWNrTGVhZGVyKClcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgcGxheWVyKCkubGVhZGVyTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHN0cm9uZz57eyBwbGF5ZXIoKS5sZWFkZXJIcCB9fS97eyBwbGF5ZXIoKS5sZWFkZXJNYXhIcCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1lbmQtdHVyblwiIChjbGljayk9XCJlbmRUdXJuKClcIj5cbiAgICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5RW5kVHVybicpIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oYW5kXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlZb3VySGFuZCcpXCI+XG4gICAgICAgIEBmb3IgKGNhcmRJZCBvZiBwbGF5ZXIoKS5oYW5kID8/IFtdOyB0cmFjayBjYXJkSWQgKyAkaW5kZXgpIHtcbiAgICAgICAgICBAbGV0IGNhcmQgPSBjYXJkRGVmaW5pdGlvbihjYXJkSWQpO1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZCBjaHJpc3RpYW5pdHktY2FyZC0taGFuZFwiXG4gICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRIYW5kQ2FyZCgpID09PSBjYXJkSWRcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWRpc2FibGVkXT1cIiFjYW5QbGF5KGNhcmQpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RIYW5kQ2FyZChjYXJkSWQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgIEBpZiAoY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKSB7XG4gICAgICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdDYXJkJykgfX1cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5Q29zdCcpIH19IHt7IGNhcmQuY29zdCB9fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPHNwYW4+e3sgY2FyZC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgQGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHtcbiAgICAgICAgICAgICAgICAre3sgY2FyZC5saWZlIH19XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIHt7IGNhcmQuYXR0YWNrIH19IC8ge3sgY2FyZC5saWZlIH19XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWFjdGlvbnNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgPHA+e3sgc3RhdHVzVGV4dCgpIH19PC9wPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRIYW5kQ2FyZCgpIHx8ICFjYW5QbGF5U2VsZWN0ZWQoKVwiIChjbGljayk9XCJwbGF5U2VsZWN0ZWRDYXJkKClcIj5cbiAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVBsYXlDYXJkJykgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVzZXRNb2NrKClcIj5cbiAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVJlc2V0JykgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIEBpZiAoc2hvd0hpc3RvcnkoKSkge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5XCI+XG4gICAgICAgICAgPGgyPnt7IHQoJ2NocmlzdGlhbml0eUhpc3RvcnknKSB9fTwvaDI+XG4gICAgICAgICAgQGlmIChnYW1lKCkuaGlzdG9yeVpvbmUubGVuZ3RoKSB7XG4gICAgICAgICAgICA8cD57eyBoaXN0b3J5TmFtZXMoKSB9fTwvcD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eUhpc3RvcnlFbXB0eScpIH19PC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuICAgIDwvbWFpbj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29sb3I6IHZhcigtLXZhbC10ZXh0LWNvbG9yLCAjMWYyOTMzKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zaGVsbCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC44NzVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNzVyZW0gMC4yNXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjEyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y2ZjhmYjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oZWFkZXIsXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllcl9fc3VtbWFyeSxcbiAgICAgIC5jaHJpc3RpYW5pdHktc2hhcmVkLXpvbmUsXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGdhcDogMC43NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oZWFkZXIgaDEsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBwLFxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5IGgyLFxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjM1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4xO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBwLFxuICAgICAgLmNocmlzdGlhbml0eS10dXJuIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncyBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1oaWRkZW4taGFuZCBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1kZWNrIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYWNlIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXBpbGUgc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyIHNwYW4ge1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjY0KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXR1cm4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlcixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLFxuICAgICAgLmNocmlzdGlhbml0eS1oaWRkZW4taGFuZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGlsZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktZGVjayxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxhY2Uge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMTVyZW07XG4gICAgICAgIG1pbi13aWR0aDogNS4yNXJlbTtcbiAgICAgICAgcGFkZGluZzogMC41NXJlbSAwLjY1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktdHVybi5pcy1vd24tdHVybiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxOCwgMTI4LCAxMDgsIDAuMzUpO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWNmZGY1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXRhYmxlIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjU1cmVtIDAuMzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNkY2VhZmI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjY1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNSwgbWlubWF4KDQuMnJlbSwgMWZyKSk7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiA3cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjU1cmVtIDAuNHJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc2KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSB7XG4gICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMC40cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktZW5kLXR1cm4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMgYnV0dG9uLFxuICAgICAgLmNocmlzdGlhbml0eS1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItLXRhcmdldCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIG1pbi1oZWlnaHQ6IDUuOHJlbTtcbiAgICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNXJlbSAxLjI1cmVtIHJnYmEoMzYsIDQ4LCA2OCwgMC4wOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCBzcGFuIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkIHN0cm9uZyB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogZW5kO1xuICAgICAgICBwYWRkaW5nOiAwLjE1cmVtIDAuMzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLmlzLXNlbGVjdGVkIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjMjU2M2ViO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgzNywgOTksIDIzNSwgMC4xNik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC5pcy1kaXNhYmxlZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC5pcy1leGhhdXN0ZWQge1xuICAgICAgICBvcGFjaXR5OiAwLjU1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQuaXMtdGFyZ2V0IHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZGMyNjI2O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmRzIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICAgICAgZ3JpZC1hdXRvLWNvbHVtbnM6IDAuN3JlbTtcbiAgICAgICAgZ2FwOiAwLjE2cmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogZW5kO1xuICAgICAgICBtaW4taGVpZ2h0OiAxLjA1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmRzIGkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDAuNjVyZW07XG4gICAgICAgIGhlaWdodDogMC45NXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNiwgNDIsIDY3LCAwLjIyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4xOHJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkcyBpLmlzLXVzZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjY2JkNWUxO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zbG90IHtcbiAgICAgICAgbWluLWhlaWdodDogNS44cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBkYXNoZWQgcmdiYSgzNiwgNDgsIDY4LCAwLjIyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDUpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLWF1dG8tY29sdW1uczogbWlubWF4KDZyZW0sIDhyZW0pO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBnYXA6IDAuNTVyZW07XG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMge1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIGRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBidXR0b24sXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgbWluLWhlaWdodDogMi40cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuNzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBidXR0b246bm90KDpkaXNhYmxlZCksXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzEwMmE0MztcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeSB7XG4gICAgICAgIHBhZGRpbmc6IDAuNzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cblxuICAgICAgYnV0dG9uOmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgb3BhY2l0eTogMC41NTtcbiAgICAgIH1cblxuICAgICAgYnV0dG9uOmZvY3VzLXZpc2libGUge1xuICAgICAgICBvdXRsaW5lOiAwLjE4NzVyZW0gc29saWQgcmdiYSgzNywgOTksIDIzNSwgMC4yNCk7XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwLjEyNXJlbTtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDcyMHB4KSB7XG4gICAgICAgIC5jaHJpc3RpYW5pdHktc2hlbGwge1xuICAgICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMDtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LXBsYXllcl9fc3VtbWFyeSxcbiAgICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSxcbiAgICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIHtcbiAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1iYXR0bGUtem9uZSB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNSwgbWlubWF4KDMuOHJlbSwgMWZyKSk7XG4gICAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENocmlzdGlhbml0eUdhbWVDb21wb25lbnQge1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBnYW1lID0gc2lnbmFsPENocmlzdGlhbml0eUdhbWVTdGF0ZT4oc3RydWN0dXJlZENsb25lKFNUQVJUSU5HX0dBTUUpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkSGFuZENhcmQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZEF0dGFja2VyID0gc2lnbmFsPENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzaG93SGlzdG9yeSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsYXllciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2FtZSgpLnBsYXllcnMuUDEpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3Bwb25lbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdhbWUoKS5wbGF5ZXJzLlAyKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGN1cnJlbnRQbGF5ZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdhbWUoKS5wbGF5ZXJzW3RoaXMuZ2FtZSgpLnR1cm5Pd25lcl0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNPd25UdXJuID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nYW1lKCkudHVybk93bmVyID09PSAnUDEnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wcG9uZW50SGFuZENvdW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHBvbmVudCgpLmhhbmRDb3VudCA/PyB0aGlzLm9wcG9uZW50KCkuaGFuZD8ubGVuZ3RoID8/IDApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhdHVzVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhdHRhY2tlciA9IHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpO1xuICAgIGNvbnN0IGhhbmRDYXJkID0gdGhpcy5zZWxlY3RlZEhhbmRDYXJkKCk7XG4gICAgaWYgKCF0aGlzLmlzT3duVHVybigpKSB7XG4gICAgICByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlXYWl0VHVybicpO1xuICAgIH1cbiAgICBpZiAoYXR0YWNrZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eUNob29zZVRhcmdldCcpO1xuICAgIH1cbiAgICBpZiAoaGFuZENhcmQpIHtcbiAgICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGhhbmRDYXJkKTtcbiAgICAgIHJldHVybiB0aGlzLmNhblBsYXkoY2FyZCkgPyB0aGlzLnQoJ2NocmlzdGlhbml0eVJlYWR5VG9QbGF5JykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eU5lZWRPZmZlcmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hvb3NlQ2FyZCcpO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnTWluaUdhbWVzJywgTUlOSV9HQU1FU19JMThOKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdNaW5pR2FtZXMnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYXJkRGVmaW5pdGlvbihjYXJkSWQ6IHN0cmluZyk6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uIHtcbiAgICByZXR1cm4gU1RBUlRFUl9DQVJEU1tjYXJkSWRdID8/IFNUQVJURVJfQ0FSRFNbJ3Bfc2NvdXQnXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBiYXR0bGVTbG90cyhzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogQXJyYXk8eyB0cmFja0lkOiBzdHJpbmc7IGNhcmQ/OiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSB9PiB7XG4gICAgY29uc3QgY2FyZHMgPSB0aGlzLmdhbWUoKS5wbGF5ZXJzW3NlYXRdLmJhdHRsZVpvbmU7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDUgfSwgKF8sIGluZGV4KSA9PiAoe1xuICAgICAgdHJhY2tJZDogY2FyZHNbaW5kZXhdPy5pbnN0YW5jZUlkID8/IGAke3NlYXR9LWVtcHR5LSR7aW5kZXh9YCxcbiAgICAgIGNhcmQ6IGNhcmRzW2luZGV4XSxcbiAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZHlPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBsYXllci5vZmZlcmluZ3MucmVkdWNlKCh0b3RhbCwgb2ZmZXJpbmcpID0+IHRvdGFsICsgKG9mZmVyaW5nLnJlYWR5ID8gb2ZmZXJpbmcudmFsdWUgOiAwKSwgMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuUGxheShjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc093blR1cm4oKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHJldHVybiAhdGhpcy5wbGF5ZXIoKS5vZmZlcmluZ1BsYXllZFRoaXNUdXJuO1xuICAgIHJldHVybiB0aGlzLnJlYWR5T2ZmZXJpbmdzKHRoaXMucGxheWVyKCkpID49IGNhcmQuY29zdCAmJiB0aGlzLnBsYXllcigpLmJhdHRsZVpvbmUubGVuZ3RoIDwgNTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5QbGF5U2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSGFuZENhcmQoKTtcbiAgICByZXR1cm4gISFzZWxlY3RlZCAmJiB0aGlzLmNhblBsYXkodGhpcy5jYXJkRGVmaW5pdGlvbihzZWxlY3RlZCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEhhbmRDYXJkKGNhcmRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZCgpID09PSBjYXJkSWQgPyBudWxsIDogY2FyZElkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwbGF5U2VsZWN0ZWRDYXJkKCk6IHZvaWQge1xuICAgIGNvbnN0IGNhcmRJZCA9IHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZCgpO1xuICAgIGlmICghY2FyZElkKSByZXR1cm47XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKTtcbiAgICBpZiAoIXRoaXMuY2FuUGxheShjYXJkKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5nYW1lLnVwZGF0ZShnYW1lID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gICAgICBjb25zdCBwbGF5ZXIgPSBuZXh0LnBsYXllcnMuUDE7XG4gICAgICBjb25zdCBoYW5kSW5kZXggPSBwbGF5ZXIuaGFuZD8uaW5kZXhPZihjYXJkSWQpID8/IC0xO1xuICAgICAgaWYgKGhhbmRJbmRleCA8IDAgfHwgIXBsYXllci5oYW5kKSByZXR1cm4gZ2FtZTtcbiAgICAgIHBsYXllci5oYW5kLnNwbGljZShoYW5kSW5kZXgsIDEpO1xuICAgICAgaWYgKGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJykge1xuICAgICAgICBwbGF5ZXIub2ZmZXJpbmdzLnB1c2goe1xuICAgICAgICAgIGluc3RhbmNlSWQ6IGBwMV9vZmZlcmluZ18ke25leHQucmV2aXNpb24gKyAxfWAsXG4gICAgICAgICAgY2FyZElkOiBjYXJkLmlkLFxuICAgICAgICAgIG5hbWU6IGNhcmQubmFtZSxcbiAgICAgICAgICBvd25lcjogJ1AxJyxcbiAgICAgICAgICByZWFkeTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogY2FyZC5saWZlLFxuICAgICAgICB9KTtcbiAgICAgICAgcGxheWVyLm9mZmVyaW5nUGxheWVkVGhpc1R1cm4gPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zcGVuZE9mZmVyaW5ncyhwbGF5ZXIsIGNhcmQuY29zdCk7XG4gICAgICAgIHBsYXllci5iYXR0bGVab25lLnB1c2goe1xuICAgICAgICAgIGluc3RhbmNlSWQ6IGBwMV8ke25leHQucmV2aXNpb24gKyAxfV8ke3BsYXllci5iYXR0bGVab25lLmxlbmd0aH1gLFxuICAgICAgICAgIGNhcmRJZDogY2FyZC5pZCxcbiAgICAgICAgICBuYW1lOiBjYXJkLm5hbWUsXG4gICAgICAgICAgb3duZXI6ICdQMScsXG4gICAgICAgICAgY29udHJvbGxlcjogJ1AxJyxcbiAgICAgICAgICBhdHRhY2s6IGNhcmQuYXR0YWNrLFxuICAgICAgICAgIGN1cnJlbnRIcDogY2FyZC5saWZlLFxuICAgICAgICAgIG1heEhwOiBjYXJkLmxpZmUsXG4gICAgICAgICAgY2FuQXR0YWNrOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtcbiAgICAgICAgY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gYCR7Y2FyZC5uYW1lfSBxdWVkYSBsaXN0YSBjb21vIG9mcmVuZGEuYCA6IGAke2NhcmQubmFtZX0gZW50cmEgZW4gYmF0YWxsYS5gLFxuICAgICAgICAuLi5uZXh0LmxvZyxcbiAgICAgIF0uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEF0dGFja2VyKGNhcmQ6IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChudWxsKTtcbiAgICBpZiAoIXRoaXMuaXNPd25UdXJuKCkgfHwgIWNhcmQuY2FuQXR0YWNrKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldCh0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKT8uaW5zdGFuY2VJZCA9PT0gY2FyZC5pbnN0YW5jZUlkID8gbnVsbCA6IGNhcmQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF0dGFja0xlYWRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBhdHRhY2tlciA9IHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpO1xuICAgIGlmICghYXR0YWNrZXIpIHJldHVybjtcbiAgICB0aGlzLmdhbWUudXBkYXRlKGdhbWUgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgICAgIGNvbnN0IGxpdmVBdHRhY2tlciA9IG5leHQucGxheWVycy5QMS5iYXR0bGVab25lLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IGF0dGFja2VyLmluc3RhbmNlSWQpO1xuICAgICAgaWYgKCFsaXZlQXR0YWNrZXIgfHwgIWxpdmVBdHRhY2tlci5jYW5BdHRhY2spIHJldHVybiBnYW1lO1xuICAgICAgbmV4dC5wbGF5ZXJzLlAyLmxlYWRlckhwID0gTWF0aC5tYXgoMCwgbmV4dC5wbGF5ZXJzLlAyLmxlYWRlckhwIC0gbGl2ZUF0dGFja2VyLmF0dGFjayk7XG4gICAgICBsaXZlQXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtgJHtsaXZlQXR0YWNrZXIubmFtZX0gYXRhY2EgYWwgbGlkZXIgcml2YWwuYCwgLi4ubmV4dC5sb2ddLnNsaWNlKDAsIDQpO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhdHRhY2tDaGFyYWN0ZXIodGFyZ2V0OiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSk6IHZvaWQge1xuICAgIGNvbnN0IGF0dGFja2VyID0gdGhpcy5zZWxlY3RlZEF0dGFja2VyKCk7XG4gICAgaWYgKCFhdHRhY2tlcikgcmV0dXJuO1xuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgY29uc3QgbGl2ZUF0dGFja2VyID0gbmV4dC5wbGF5ZXJzLlAxLmJhdHRsZVpvbmUuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gYXR0YWNrZXIuaW5zdGFuY2VJZCk7XG4gICAgICBjb25zdCBsaXZlVGFyZ2V0ID0gbmV4dC5wbGF5ZXJzLlAyLmJhdHRsZVpvbmUuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gdGFyZ2V0Lmluc3RhbmNlSWQpO1xuICAgICAgaWYgKCFsaXZlQXR0YWNrZXIgfHwgIWxpdmVUYXJnZXQgfHwgIWxpdmVBdHRhY2tlci5jYW5BdHRhY2spIHJldHVybiBnYW1lO1xuICAgICAgbGl2ZVRhcmdldC5jdXJyZW50SHAgLT0gbGl2ZUF0dGFja2VyLmF0dGFjaztcbiAgICAgIGxpdmVBdHRhY2tlci5jdXJyZW50SHAgLT0gbGl2ZVRhcmdldC5hdHRhY2s7XG4gICAgICBsaXZlQXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gICAgICB0aGlzLmNsZWFudXBEZXN0cm95ZWQobmV4dC5wbGF5ZXJzLlAxLCBuZXh0KTtcbiAgICAgIHRoaXMuY2xlYW51cERlc3Ryb3llZChuZXh0LnBsYXllcnMuUDIsIG5leHQpO1xuICAgICAgbmV4dC5yZXZpc2lvbisrO1xuICAgICAgbmV4dC5sb2cgPSBbYCR7bGl2ZUF0dGFja2VyLm5hbWV9IGNvbWJhdGUgY29udHJhICR7bGl2ZVRhcmdldC5uYW1lfS5gLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNrZXIuc2V0KG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVuZFR1cm4oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNrZXIuc2V0KG51bGwpO1xuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgbmV4dC50dXJuT3duZXIgPSBuZXh0LnR1cm5Pd25lciA9PT0gJ1AxJyA/ICdQMicgOiAnUDEnO1xuICAgICAgbmV4dC50dXJuQ291bnQrKztcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBuZXh0LnBsYXllcnNbbmV4dC50dXJuT3duZXJdO1xuICAgICAgY3VycmVudC5vZmZlcmluZ1BsYXllZFRoaXNUdXJuID0gZmFsc2U7XG4gICAgICBjdXJyZW50Lm9mZmVyaW5ncyA9IGN1cnJlbnQub2ZmZXJpbmdzLm1hcChvZmZlcmluZyA9PiAoeyAuLi5vZmZlcmluZywgcmVhZHk6IHRydWUgfSkpO1xuICAgICAgY3VycmVudC5iYXR0bGVab25lID0gY3VycmVudC5iYXR0bGVab25lLm1hcChjYXJkID0+ICh7IC4uLmNhcmQsIGNhbkF0dGFjazogdHJ1ZSB9KSk7XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtgVHVybm8gZGUgJHtjdXJyZW50LmRpc3BsYXlOYW1lfS5gLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldE1vY2soKTogdm9pZCB7XG4gICAgdGhpcy5nYW1lLnNldChzdHJ1Y3R1cmVkQ2xvbmUoU1RBUlRJTkdfR0FNRSkpO1xuICAgIHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZC5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoaXN0b3J5TmFtZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nYW1lKClcbiAgICAgIC5oaXN0b3J5Wm9uZS5tYXAoY2FyZElkID0+IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKS5uYW1lKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBEZXN0cm95ZWQocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSwgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgZGVzdHJveWVkID0gcGxheWVyLmJhdHRsZVpvbmUuZmlsdGVyKGNhcmQgPT4gY2FyZC5jdXJyZW50SHAgPD0gMCk7XG4gICAgaWYgKCFkZXN0cm95ZWQubGVuZ3RoKSByZXR1cm47XG4gICAgZ2FtZS5oaXN0b3J5Wm9uZS5wdXNoKC4uLmRlc3Ryb3llZC5tYXAoY2FyZCA9PiBjYXJkLmNhcmRJZCkpO1xuICAgIHBsYXllci5iYXR0bGVab25lID0gcGxheWVyLmJhdHRsZVpvbmUuZmlsdGVyKGNhcmQgPT4gY2FyZC5jdXJyZW50SHAgPiAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3BlbmRPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSwgY29zdDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IHJlbWFpbmluZyA9IGNvc3Q7XG4gICAgcGxheWVyLm9mZmVyaW5ncyA9IHBsYXllci5vZmZlcmluZ3MubWFwKG9mZmVyaW5nID0+IHtcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCAhb2ZmZXJpbmcucmVhZHkpIHJldHVybiBvZmZlcmluZztcbiAgICAgIHJlbWFpbmluZyAtPSBvZmZlcmluZy52YWx1ZTtcbiAgICAgIHJldHVybiB7IC4uLm9mZmVyaW5nLCByZWFkeTogZmFsc2UgfTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
834
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyaXN0aWFuaXR5LWdhbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9taW5pLWdhbWVzL2NocmlzdGlhbml0eS1nYW1lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBaUJwRCxNQUFNLGFBQWEsR0FBK0M7SUFDaEUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUNuRyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN6RixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN6RixTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxF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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaU9UIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IE1JTklfR0FNRVNfSTE4TiB9IGZyb20gJy4vbWluaS1nYW1lcy5pMThuJztcbmltcG9ydCB7XG4gIENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uLFxuICBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSxcbiAgQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBDaHJpc3RpYW5pdHlPZmZlcmluZ0luc3RhbmNlLFxuICBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSxcbiAgQ2hyaXN0aWFuaXR5U2VhdCxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmludGVyZmFjZSBDaHJpc3RpYW5pdHlDYXJkUHJldmlldyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGV5ZWJyb3c6IHN0cmluZztcbiAgbWV0YTogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG59XG5cbmNvbnN0IFNUQVJURVJfQ0FSRFM6IFJlY29yZDxzdHJpbmcsIENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uPiA9IHtcbiAgb19zaW1wbGU6IHsgaWQ6ICdvX3NpbXBsZScsIG5hbWU6ICdPZnJlbmRhIHNpbXBsZScsIHR5cGU6ICdvZmZlcmluZycsIGNvc3Q6IDAsIGF0dGFjazogMCwgbGlmZTogMSB9LFxuICBwX3Njb3V0OiB7IGlkOiAncF9zY291dCcsIG5hbWU6ICdTY291dCcsIHR5cGU6ICdjaGFyYWN0ZXInLCBjb3N0OiAxLCBhdHRhY2s6IDEsIGxpZmU6IDEgfSxcbiAgcF9ndWFyZDogeyBpZDogJ3BfZ3VhcmQnLCBuYW1lOiAnR3VhcmQnLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogMiwgYXR0YWNrOiAxLCBsaWZlOiAzIH0sXG4gIHBfd2FycmlvcjogeyBpZDogJ3Bfd2FycmlvcicsIG5hbWU6ICdXYXJyaW9yJywgdHlwZTogJ2NoYXJhY3RlcicsIGNvc3Q6IDIsIGF0dGFjazogMiwgbGlmZTogMiB9LFxuICBwX2VsZGVyOiB7IGlkOiAncF9lbGRlcicsIG5hbWU6ICdFbGRlcicsIHR5cGU6ICdjaGFyYWN0ZXInLCBjb3N0OiAzLCBhdHRhY2s6IDIsIGxpZmU6IDQgfSxcbiAgcF9jaGFtcGlvbjogeyBpZDogJ3BfY2hhbXBpb24nLCBuYW1lOiAnQ2hhbXBpb24nLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogNCwgYXR0YWNrOiA0LCBsaWZlOiA0IH0sXG59O1xuXG5jb25zdCBTVEFSVElOR19TSEFSRURfREVDSyA9IFtcbiAgJ29fc2ltcGxlJyxcbiAgJ3Bfc2NvdXQnLFxuICAnb19zaW1wbGUnLFxuICAncF9ndWFyZCcsXG4gICdwX3dhcnJpb3InLFxuICAnb19zaW1wbGUnLFxuICAncF9lbGRlcicsXG4gICdwX3Njb3V0JyxcbiAgJ29fc2ltcGxlJyxcbiAgJ3BfY2hhbXBpb24nLFxuICAncF9ndWFyZCcsXG4gICdvX3NpbXBsZScsXG4gICdwX3dhcnJpb3InLFxuICAncF9zY291dCcsXG4gICdvX3NpbXBsZScsXG4gICdwX2VsZGVyJyxcbiAgJ3BfZ3VhcmQnLFxuICAnb19zaW1wbGUnLFxuXTtcblxuY29uc3QgU1RBUlRJTkdfR0FNRTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlID0ge1xuICBnYW1lSWQ6ICdtb2NrLWNocmlzdGlhbml0eScsXG4gIHN0YXR1czogJ2luX3Byb2dyZXNzJyxcbiAgbW9kZTogJ2xvY2FsX3Bhc3MnLFxuICB0dXJuT3duZXI6ICdQMScsXG4gIHJldmlzaW9uOiAwLFxuICB0dXJuQ291bnQ6IDEsXG4gIHNoYXJlZERlY2s6IFNUQVJUSU5HX1NIQVJFRF9ERUNLLFxuICBoaXN0b3J5Wm9uZTogW10sXG4gIHBsYXllcnM6IHtcbiAgICBQMToge1xuICAgICAgc2VhdDogJ1AxJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnSnVnYWRvcicsXG4gICAgICBhdmF0YXI6ICdKJyxcbiAgICAgIGF2YXRhckNvbG9yOiAnIzI1NjNlYicsXG4gICAgICBsZWFkZXJOYW1lOiAnQWRhbScsXG4gICAgICBsZWFkZXJIcDogMTUsXG4gICAgICBsZWFkZXJNYXhIcDogMTUsXG4gICAgICBvZmZlcmluZ3M6IFt7IGluc3RhbmNlSWQ6ICdwMV9vZmZlcmluZ18wMDEnLCBjYXJkSWQ6ICdvX3NpbXBsZScsIG5hbWU6ICdPZnJlbmRhIHNpbXBsZScsIG93bmVyOiAnUDEnLCByZWFkeTogdHJ1ZSwgdmFsdWU6IDEgfV0sXG4gICAgICBvZmZlcmluZ1BsYXllZFRoaXNUdXJuOiBmYWxzZSxcbiAgICAgIGhhbmQ6IFsnb19zaW1wbGUnLCAncF9zY291dCcsICdwX3dhcnJpb3InLCAncF9ndWFyZCddLFxuICAgICAgYmF0dGxlWm9uZTogW10sXG4gICAgfSxcbiAgICBQMjoge1xuICAgICAgc2VhdDogJ1AyJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnUml2YWwnLFxuICAgICAgYXZhdGFyOiAnUicsXG4gICAgICBhdmF0YXJDb2xvcjogJyNiNDUzMDknLFxuICAgICAgbGVhZGVyTmFtZTogJ05vYWgnLFxuICAgICAgbGVhZGVySHA6IDE1LFxuICAgICAgbGVhZGVyTWF4SHA6IDE1LFxuICAgICAgb2ZmZXJpbmdzOiBbeyBpbnN0YW5jZUlkOiAncDJfb2ZmZXJpbmdfMDAxJywgY2FyZElkOiAnb19zaW1wbGUnLCBuYW1lOiAnT2ZyZW5kYSBzaW1wbGUnLCBvd25lcjogJ1AyJywgcmVhZHk6IHRydWUsIHZhbHVlOiAxIH1dLFxuICAgICAgb2ZmZXJpbmdQbGF5ZWRUaGlzVHVybjogZmFsc2UsXG4gICAgICBoYW5kQ291bnQ6IDQsXG4gICAgICBiYXR0bGVab25lOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiAnb3BwXzAwMScsXG4gICAgICAgICAgY2FyZElkOiAncF9zY291dCcsXG4gICAgICAgICAgbmFtZTogJ1Njb3V0JyxcbiAgICAgICAgICBvd25lcjogJ1AyJyxcbiAgICAgICAgICBjb250cm9sbGVyOiAnUDInLFxuICAgICAgICAgIGF0dGFjazogMSxcbiAgICAgICAgICBjdXJyZW50SHA6IDEsXG4gICAgICAgICAgbWF4SHA6IDEsXG4gICAgICAgICAgY2FuQXR0YWNrOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAgbG9nOiBbJ1BhcnRpZGEgaW5pY2lhZGEuJ10sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtY2hyaXN0aWFuaXR5LWdhbWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxtYWluIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNoZWxsXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oZWFkZXJcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cD57eyB0KCdjaHJpc3RpYW5pdHlFeWVicm93JykgfX08L3A+XG4gICAgICAgICAgPGgxPnt7IHQoJ2NocmlzdGlhbml0eVRpdGxlJykgfX08L2gxPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS10dXJuXCIgW2NsYXNzLmlzLW93bi10dXJuXT1cImlzT3duVHVybigpXCI+XG4gICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5VHVybicpIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgY3VycmVudFBsYXllcigpLmRpc3BsYXlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1vcHBvbmVudC1oYW5kLWFyZWFcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eU9wcG9uZW50SGFuZCcpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxheWVyLWJhZGdlIGNocmlzdGlhbml0eS1wbGF5ZXItYmFkZ2UtLW9wcG9uZW50XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaHJpc3RpYW5pdHktYXZhdGFyXCIgW3N0eWxlLmJhY2tncm91bmRdPVwib3Bwb25lbnQoKS5hdmF0YXJDb2xvclwiPnt7IG9wcG9uZW50KCkuYXZhdGFyIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgb3Bwb25lbnQoKS5kaXNwbGF5TmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1oYW5kLWZhbiBjaHJpc3RpYW5pdHktaGFuZC1mYW4tLW9wcG9uZW50XCI+XG4gICAgICAgICAgQGZvciAoXyBvZiBoaWRkZW5IYW5kQ2FyZHMob3Bwb25lbnRIYW5kQ291bnQoKSk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQgY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYWNrXCJcbiAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCJmYW5UcmFuc2Zvcm0oJGluZGV4LCBvcHBvbmVudEhhbmRDb3VudCgpLCB0cnVlKVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5SGlkZGVuQ2FyZCcpXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS10YWJsZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5VGFibGUnKVwiPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1wbGF5ZXItcmFjayBjaHJpc3RpYW5pdHktcGxheWVyLXJhY2stLW9wcG9uZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZ3Mtem9uZVwiPlxuICAgICAgICAgICAgQGZvciAob2ZmZXJpbmcgb2Ygb3Bwb25lbnQoKS5vZmZlcmluZ3M7IHRyYWNrIG9mZmVyaW5nLmluc3RhbmNlSWQpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtbWluaSBjaHJpc3RpYW5pdHktY2FyZC1taW5pLS1vZmZlcmluZ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmlzLWV4aGF1c3RlZF09XCIhb2ZmZXJpbmcucmVhZHlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJpbnNwZWN0T2ZmZXJpbmcob2ZmZXJpbmcpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQ2FyZCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+K3t7IG9mZmVyaW5nLnZhbHVlIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkXCIgW2NsYXNzLmlzLXRhcmdldF09XCJzZWxlY3RlZEF0dGFja2VyKCkgJiYgIWhhc09wcG9uZW50R3VhcmRzKClcIiAoY2xpY2spPVwiaGFuZGxlT3Bwb25lbnRMZWFkZXIoKVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgb3Bwb25lbnQoKS5sZWFkZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZz57eyBvcHBvbmVudCgpLmxlYWRlckhwIH19L3t7IG9wcG9uZW50KCkubGVhZGVyTWF4SHAgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1iYWRnZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaHJpc3RpYW5pdHktYXZhdGFyXCIgW3N0eWxlLmJhY2tncm91bmRdPVwib3Bwb25lbnQoKS5hdmF0YXJDb2xvclwiPnt7IG9wcG9uZW50KCkuYXZhdGFyIH19PC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZz57eyBvcHBvbmVudCgpLmRpc3BsYXlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1iYXR0bGUtem9uZSBjaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUtLW9wcG9uZW50XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlPcHBvbmVudEJhdHRsZScpXCI+XG4gICAgICAgICAgQGZvciAoc2xvdCBvZiBiYXR0bGVTbG90cygnUDInKTsgdHJhY2sgc2xvdC50cmFja0lkKSB7XG4gICAgICAgICAgICBAaWYgKHNsb3QuY2FyZCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQgY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYXR0bGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy10YXJnZXRdPVwic2VsZWN0ZWRBdHRhY2tlcigpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT3Bwb25lbnRDaGFyYWN0ZXIoc2xvdC5jYXJkKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBzbG90LmNhcmQubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHNsb3QuY2FyZC5hdHRhY2sgfX0gLyB7eyBzbG90LmNhcmQuY3VycmVudEhwIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNsb3RcIj48L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktc2hhcmVkLXpvbmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVNoYXJlZFpvbmUnKVwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBjaHJpc3RpYW5pdHktem9uZS1waWxlLS1oaXN0b3J5XCIgKGNsaWNrKT1cInNob3dIaXN0b3J5LnNldCh0cnVlKVwiPlxuICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5SGlzdG9yeScpIH19PC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZz57eyBnYW1lKCkuaGlzdG9yeVpvbmUubGVuZ3RoIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktem9uZS1waWxlIGNocmlzdGlhbml0eS16b25lLXBpbGUtLWRlY2tcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiAoY2xpY2spPVwiaW5zcGVjdERlY2soKVwiPlxuICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5RGVjaycpIH19PC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZz57eyBnYW1lKCkuc2hhcmVkRGVjay5sZW5ndGggfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXpvbmUtY2FyZFwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5UGxhY2UnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgdCgnY2hyaXN0aWFuaXR5RW1wdHknKSB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktYmF0dGxlLXpvbmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVlvdXJCYXR0bGUnKVwiPlxuICAgICAgICAgIEBmb3IgKHNsb3Qgb2YgYmF0dGxlU2xvdHMoJ1AxJyk7IHRyYWNrIHNsb3QudHJhY2tJZCkge1xuICAgICAgICAgICAgQGlmIChzbG90LmNhcmQpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkIGNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRBdHRhY2tlcigpPy5pbnN0YW5jZUlkID09PSBzbG90LmNhcmQuaW5zdGFuY2VJZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmlzLWV4aGF1c3RlZF09XCIhc2xvdC5jYXJkLmNhbkF0dGFja1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEF0dGFja2VyKHNsb3QuY2FyZClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc2xvdC5jYXJkLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzbG90LmNhcmQuYXR0YWNrIH19IC8ge3sgc2xvdC5jYXJkLmN1cnJlbnRIcCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1zbG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1yYWNrXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZ3Mtem9uZVwiPlxuICAgICAgICAgICAgQGZvciAob2ZmZXJpbmcgb2YgcGxheWVyKCkub2ZmZXJpbmdzOyB0cmFjayBvZmZlcmluZy5pbnN0YW5jZUlkKSB7XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLW1pbmkgY2hyaXN0aWFuaXR5LWNhcmQtbWluaS0tb2ZmZXJpbmdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1leGhhdXN0ZWRdPVwiIW9mZmVyaW5nLnJlYWR5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5zcGVjdE9mZmVyaW5nKG9mZmVyaW5nKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPit7eyBvZmZlcmluZy52YWx1ZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1sZWFkZXItY2FyZFwiIChjbGljayk9XCJpbnNwZWN0TGVhZGVyKCdQMScpXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBwbGF5ZXIoKS5sZWFkZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZz57eyBwbGF5ZXIoKS5sZWFkZXJIcCB9fS97eyBwbGF5ZXIoKS5sZWFkZXJNYXhIcCB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxheWVyLWNvbW1hbmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxheWVyLWJhZGdlXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWF2YXRhclwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInBsYXllcigpLmF2YXRhckNvbG9yXCI+e3sgcGxheWVyKCkuYXZhdGFyIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHBsYXllcigpLmRpc3BsYXlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWVuZC10dXJuXCIgKGNsaWNrKT1cImVuZFR1cm4oKVwiPlxuICAgICAgICAgICAgICB7eyB0KCdjaHJpc3RpYW5pdHlFbmRUdXJuJykgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhhbmQtZmFuXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlZb3VySGFuZCcpXCI+XG4gICAgICAgIEBmb3IgKGNhcmRJZCBvZiBwbGF5ZXIoKS5oYW5kID8/IFtdOyB0cmFjayBjYXJkSWQgKyAkaW5kZXgpIHtcbiAgICAgICAgICBAbGV0IGNhcmQgPSBjYXJkRGVmaW5pdGlvbihjYXJkSWQpO1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQgY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kXCJcbiAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJzZWxlY3RlZEhhbmRDYXJkKCkgPT09IGNhcmRJZFwiXG4gICAgICAgICAgICBbY2xhc3MuaXMtZGlzYWJsZWRdPVwiIWNhblBsYXkoY2FyZClcIlxuICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCJmYW5UcmFuc2Zvcm0oJGluZGV4LCBwbGF5ZXIoKS5oYW5kPy5sZW5ndGggPz8gMCwgZmFsc2UpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RIYW5kQ2FyZChjYXJkSWQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgIEBpZiAoY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKSB7XG4gICAgICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdDYXJkJykgfX1cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5Q29zdCcpIH19IHt7IGNhcmQuY29zdCB9fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPHNwYW4+e3sgY2FyZC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgQGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHtcbiAgICAgICAgICAgICAgICAre3sgY2FyZC5saWZlIH19XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIHt7IGNhcmQuYXR0YWNrIH19IC8ge3sgY2FyZC5saWZlIH19XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIEBpZiAoc2VsZWN0ZWRQcmV2aWV3KCkpIHtcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktcHJldmlldy1iYWNrZHJvcFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5Q2xvc2VQcmV2aWV3JylcIiAoY2xpY2spPVwiY2xvc2VQcmV2aWV3KClcIj48L2J1dHRvbj5cbiAgICAgICAgPGFzaWRlIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmRcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICA8c21hbGw+e3sgc2VsZWN0ZWRQcmV2aWV3KCk/LmV5ZWJyb3cgfX08L3NtYWxsPlxuICAgICAgICAgIDxzdHJvbmc+e3sgc2VsZWN0ZWRQcmV2aWV3KCk/LnRpdGxlIH19PC9zdHJvbmc+XG4gICAgICAgICAgPHNwYW4+e3sgc2VsZWN0ZWRQcmV2aWV3KCk/Lm1ldGEgfX08L3NwYW4+XG4gICAgICAgICAgPHA+e3sgc2VsZWN0ZWRQcmV2aWV3KCk/LmJvZHkgfX08L3A+XG4gICAgICAgIDwvYXNpZGU+XG4gICAgICB9XG5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWFjdGlvbnNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgPHA+e3sgc3RhdHVzVGV4dCgpIH19PC9wPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRIYW5kQ2FyZCgpIHx8ICFjYW5QbGF5U2VsZWN0ZWQoKVwiIChjbGljayk9XCJwbGF5U2VsZWN0ZWRDYXJkKClcIj5cbiAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVBsYXlDYXJkJykgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVzZXRNb2NrKClcIj5cbiAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVJlc2V0JykgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIEBpZiAoc2hvd0hpc3RvcnkoKSkge1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5LWJhY2tkcm9wXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlDbG9zZUhpc3RvcnknKVwiIChjbGljayk9XCJzaG93SGlzdG9yeS5zZXQoZmFsc2UpXCI+PC9idXR0b24+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyXCI+XG4gICAgICAgICAgPGhlYWRlcj5cbiAgICAgICAgICAgIDxoMj57eyB0KCdjaHJpc3RpYW5pdHlIaXN0b3J5JykgfX08L2gyPlxuICAgICAgICAgICAgPHNwYW4+e3sgZ2FtZSgpLmhpc3Rvcnlab25lLmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgICBAaWYgKGdhbWUoKS5oaXN0b3J5Wm9uZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkXCI+XG4gICAgICAgICAgICAgIEBmb3IgKGNhcmRJZCBvZiBnYW1lKCkuaGlzdG9yeVpvbmU7IHRyYWNrIGNhcmRJZCArICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBsZXQgY2FyZCA9IGNhcmREZWZpbml0aW9uKGNhcmRJZCk7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmRcIiAoY2xpY2spPVwiaW5zcGVjdEhpc3RvcnlDYXJkKGNhcmRJZClcIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD57eyBjYXJkLnR5cGUgPT09ICdvZmZlcmluZycgPyB0KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSA6IHQoJ2NocmlzdGlhbml0eUNoYXJhY3RlckNhcmQnKSB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjYXJkLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICt7eyBjYXJkLmxpZmUgfX1cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAge3sgY2FyZC5hdHRhY2sgfX0gLyB7eyBjYXJkLmxpZmUgfX1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHA+e3sgdCgnY2hyaXN0aWFuaXR5SGlzdG9yeUVtcHR5JykgfX08L3A+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG4gICAgPC9tYWluPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb2xvcjogdmFyKC0tdmFsLXRleHQtY29sb3IsICMxZjI5MzMpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNoZWxsIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjg3NXJlbTtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbSAwLjI1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjZmOGZiO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlcixcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyX19zdW1tYXJ5LFxuICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBoMSxcbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyIHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnkgaDIsXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oZWFkZXIgaDEge1xuICAgICAgICBmb250LXNpemU6IDEuMzVyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyIHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LXR1cm4gc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpZGRlbi1oYW5kIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWRlY2sgc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxhY2Ugc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktcGlsZSBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXIgc3BhbiB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjQpO1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktdHVybixcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZ3MsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpZGRlbi1oYW5kLFxuICAgICAgLmNocmlzdGlhbml0eS1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1kZWNrLFxuICAgICAgLmNocmlzdGlhbml0eS1wbGFjZSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC4xNXJlbTtcbiAgICAgICAgbWluLXdpZHRoOiA1LjI1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjU1cmVtIDAuNjVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS10dXJuLmlzLW93bi10dXJuIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE4LCAxMjgsIDEwOCwgMC4zNSk7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlY2ZkZjU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktdGFibGUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNzVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMC4zNXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2RjZWFmYjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXIge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg1LCBtaW5tYXgoNC4ycmVtLCAxZnIpKTtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDdyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMC40cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzYpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNoYXJlZC16b25lIHtcbiAgICAgICAgcGFkZGluZzogMC41NXJlbSAwLjRyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1lbmQtdHVybixcbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBidXR0b24sXG4gICAgICAuY2hyaXN0aWFuaXR5LXBpbGUsXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci0tdGFyZ2V0IHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE2KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgbWluLWhlaWdodDogNS44cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjVyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC41cmVtIDEuMjVyZW0gcmdiYSgzNiwgNDgsIDY4LCAwLjA4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkIHNwYW4ge1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQgc3Ryb25nIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBlbmQ7XG4gICAgICAgIHBhZGRpbmc6IDAuMTVyZW0gMC4zNXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlZGYyZjc7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQuaXMtc2VsZWN0ZWQge1xuICAgICAgICBib3JkZXItY29sb3I6ICMyNTYzZWI7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDM3LCA5OSwgMjM1LCAwLjE2KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLmlzLWRpc2FibGVkLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLmlzLWV4aGF1c3RlZCB7XG4gICAgICAgIG9wYWNpdHk6IDAuNTU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC5pcy10YXJnZXQge1xuICAgICAgICBib3JkZXItY29sb3I6ICNkYzI2MjY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZHMge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBncmlkLWF1dG8tY29sdW1uczogMC43cmVtO1xuICAgICAgICBnYXA6IDAuMTZyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBlbmQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEuMDVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZHMgaSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMC42NXJlbTtcbiAgICAgICAgaGVpZ2h0OiAwLjk1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE2LCA0MiwgNjcsIDAuMjIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjE4cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmRzIGkuaXMtdXNlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNjYmQ1ZTE7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNsb3Qge1xuICAgICAgICBtaW4taGVpZ2h0OiA1LjhyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCByZ2JhKDM2LCA0OCwgNjgsIDAuMjIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtYXV0by1jb2x1bW5zOiBtaW5tYXgoNnJlbSwgOHJlbSk7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGdhcDogMC41NXJlbTtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBwYWRkaW5nOiAwLjc1cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMgZGl2IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIGJ1dHRvbixcbiAgICAgIC5jaHJpc3RpYW5pdHktZW5kLXR1cm4ge1xuICAgICAgICBtaW4taGVpZ2h0OiAyLjRyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC43NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIGJ1dHRvbjpub3QoOmRpc2FibGVkKSxcbiAgICAgIC5jaHJpc3RpYW5pdHktZW5kLXR1cm4ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTAyYTQzO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5IHtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWZhbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDcuNHJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjI1cmVtO1xuICAgICAgICBpc29sYXRpb246IGlzb2xhdGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4tLW9wcG9uZW50IHtcbiAgICAgICAgbWluLWhlaWdodDogNS4ycmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9wcG9uZW50LWhhbmQtYXJlYSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC4yNXJlbTtcbiAgICAgICAgbWluLWhlaWdodDogNi43cmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjM1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLW1pbmksXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLWNhcmQsXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktZW5kLXR1cm4ge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTYpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDQuOXJlbSwgMTd2dywgNy4xcmVtKTtcbiAgICAgICAgbWluLWhlaWdodDogY2xhbXAoNi42cmVtLCAyMnZ3LCA4LjhyZW0pO1xuICAgICAgICBtYXJnaW4taW5saW5lOiAtMC40MnJlbTtcbiAgICAgICAgcGFkZGluZzogMC40OHJlbTtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDExNSU7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgdHJhbnNmb3JtIDE2MG1zIGVhc2UsXG4gICAgICAgICAgYm94LXNoYWRvdyAxNjBtcyBlYXNlLFxuICAgICAgICAgIGJvcmRlci1jb2xvciAxNjBtcyBlYXNlO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNXJlbSAxLjI1cmVtIHJnYmEoMzYsIDQ4LCA2OCwgMC4xKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZDpob3ZlcixcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQuaXMtc2VsZWN0ZWQge1xuICAgICAgICB6LWluZGV4OiAzO1xuICAgICAgICBib3JkZXItY29sb3I6ICMyNTYzZWI7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMXJlbSAycmVtIHJnYmEoMzcsIDk5LCAyMzUsIDAuMTgpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYWNrIHtcbiAgICAgICAgbWluLWhlaWdodDogNC44cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMTYsIDQyLCA2NywgMC4xMiksIHJnYmEoMTYsIDQyLCA2NywgMC4wMikpLFxuICAgICAgICAgIHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoNDVkZWcsICNlMmU4ZjAgMCAwLjM1cmVtLCAjZjhmYWZjIDAuMzVyZW0gMC43cmVtKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDUuN3JlbTtcbiAgICAgICAgbWFyZ2luLWlubGluZTogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLW1pbmkgc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQgc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBzcGFuIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtbWluaSBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkIHN0cm9uZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkIHN0cm9uZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIHN0cm9uZyB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogZW5kO1xuICAgICAgICBwYWRkaW5nOiAwLjE1cmVtIDAuMzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItcmFjayB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDQuMnJlbSwgMWZyKSBtaW5tYXgoNXJlbSwgNi41cmVtKSBtaW5tYXgoNC4ycmVtLCAxZnIpO1xuICAgICAgICBnYXA6IDAuNTVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBlbmQ7XG4gICAgICAgIGp1c3RpZnktaXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItcmFjay0tb3Bwb25lbnQge1xuICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLWJhZGdlLFxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItY29tbWFuZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC4zNXJlbTtcbiAgICAgICAganVzdGlmeS1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLWJhZGdlIHtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3RhcnQ7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzYpO1xuICAgICAgICBmb250LXNpemU6IDAuNzRyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLWJhZGdlLS1vcHBvbmVudCB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItYmFkZ2Ugc3Ryb25nIHtcbiAgICAgICAgbWF4LXdpZHRoOiA2LjVyZW07XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWF2YXRhciB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAxLjg1cmVtO1xuICAgICAgICBoZWlnaHQ6IDEuODVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgZm9udC1zaXplOiAwLjc2cmVtO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuMzVyZW0gMC45cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xNik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLXpvbmUge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIGdhcDogMC4yNXJlbTtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBtaW4taGVpZ2h0OiA0LjlyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNDhyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pIHtcbiAgICAgICAgd2lkdGg6IDMuNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCB7XG4gICAgICAgIHdpZHRoOiBtaW4oMTAwJSwgNi41cmVtKTtcbiAgICAgICAgbWluLWhlaWdodDogNS44cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgbWlubWF4KDRyZW0sIDFmcikpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNoYXJlZC16b25lIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgbWlubWF4KDQuM3JlbSwgMWZyKSk7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgaXNvbGF0aW9uOiBpc29sYXRlO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBtaW4taGVpZ2h0OiA1LjZyZW07XG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDk5OXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIGkge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAwLjYycmVtIDAuNzJyZW0gYXV0byBhdXRvO1xuICAgICAgICB6LWluZGV4OiAtMTtcbiAgICAgICAgd2lkdGg6IDIuN3JlbTtcbiAgICAgICAgaGVpZ2h0OiAzLjdyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTYsIDQyLCA2NywgMC4xOCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC4zNXJlbSAwLjg1cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xMSk7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDRkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBpOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0wLjI4cmVtLCAwLjEycmVtKSByb3RhdGUoLTNkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBpOm50aC1jaGlsZCgzKSB7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgxNiwgNDIsIDY3LCAwLjE2KSwgcmdiYSgxNiwgNDIsIDY3LCAwLjAzKSksXG4gICAgICAgICAgcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCg0NWRlZywgI2RiZWFmZSAwIDAuMzNyZW0sICNmZmZmZmYgMC4zM3JlbSAwLjY2cmVtKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTAuNTRyZW0sIDAuMjRyZW0pIHJvdGF0ZSgyZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB6LWluZGV4OiAyMTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgICB3aWR0aDogbWluKDIwcmVtLCBjYWxjKDEwMHZ3IC0gMnJlbSkpO1xuICAgICAgICBtaW4taGVpZ2h0OiBtaW4oMjdyZW0sIGNhbGMoMTAwdmggLSA1cmVtKSk7XG4gICAgICAgIHBhZGRpbmc6IDFyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xOCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KSwgcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjk2KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAyMCUgMCUsIHJnYmEoMzcsIDk5LCAyMzUsIDAuMTIpLCB0cmFuc3BhcmVudCA0NSUpO1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIDAgMi40cmVtIDVyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjM0KSxcbiAgICAgICAgICBpbnNldCAwIDAgMCAwLjM1cmVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NSk7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpIHBlcnNwZWN0aXZlKDQ4cmVtKSByb3RhdGVYKDVkZWcpIHJvdGF0ZVkoLTVkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctYmFja2Ryb3AsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktYmFja2Ryb3Age1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICB6LWluZGV4OiAyMDtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuNDYpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQgc21hbGwsXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQgc3BhbiB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjQpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQgc3Ryb25nIHtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjM1cmVtLCA4dncsIDJyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGFsaWduLXNlbGY6IGVuZDtcbiAgICAgICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWJhY2tkcm9wIHtcbiAgICAgICAgei1pbmRleDogMjI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHJpZ2h0OiBtYXgoMC41cmVtLCBlbnYoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KSk7XG4gICAgICAgIGJvdHRvbTogbWF4KDAuNXJlbSwgZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pKTtcbiAgICAgICAgbGVmdDogbWF4KDAuNXJlbSwgZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KSk7XG4gICAgICAgIHotaW5kZXg6IDIzO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNzVyZW07XG4gICAgICAgIG1heC1oZWlnaHQ6IG1pbigyN3JlbSwgY2FsYygxMDB2aCAtIDRyZW0pKTtcbiAgICAgICAgcGFkZGluZzogMC44cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTYpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTgpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDEuNXJlbSA0cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4yOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIgaGVhZGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBnYXA6IDAuNzVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIgaDIsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIgaGVhZGVyIHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4td2lkdGg6IDEuODVyZW07XG4gICAgICAgIGhlaWdodDogMS44NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlZGYyZjc7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoNS40cmVtLCAxZnIpKTtcbiAgICAgICAgZ2FwOiAwLjU1cmVtO1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICBwYWRkaW5nOiAwLjFyZW0gMC4xcmVtIDAuMjVyZW07XG4gICAgICB9XG5cbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cblxuICAgICAgYnV0dG9uOmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgb3BhY2l0eTogMC41NTtcbiAgICAgIH1cblxuICAgICAgYnV0dG9uOmZvY3VzLXZpc2libGUge1xuICAgICAgICBvdXRsaW5lOiAwLjE4NzVyZW0gc29saWQgcmdiYSgzNywgOTksIDIzNSwgMC4yNCk7XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwLjEyNXJlbTtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDcyMHB4KSB7XG4gICAgICAgIC5jaHJpc3RpYW5pdHktc2hlbGwge1xuICAgICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMDtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LXBsYXllcl9fc3VtbWFyeSxcbiAgICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSxcbiAgICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIHtcbiAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1iYXR0bGUtem9uZSB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgbWlubWF4KDMuMzVyZW0sIDFmcikpO1xuICAgICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtZmFuIHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA2LjhyZW07XG4gICAgICAgICAgb3ZlcmZsb3cteDogY2xpcDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLXJhY2sge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDMuNnJlbSwgMWZyKSBtaW5tYXgoNC44cmVtLCA1LjZyZW0pIG1pbm1heCgzLjZyZW0sIDFmcik7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXNoYXJlZC16b25lIHtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCBtaW5tYXgoMy43cmVtLCAxZnIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQge1xuICAgICAgICAgIHdpZHRoOiBjbGFtcCg0LjJyZW0sIDIwdncsIDUuN3JlbSk7XG4gICAgICAgICAgbWluLWhlaWdodDogY2xhbXAoNS44cmVtLCAyNnZ3LCA3LjRyZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1vcHBvbmVudC1oYW5kLWFyZWEge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDYuMnJlbTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENocmlzdGlhbml0eUdhbWVDb21wb25lbnQge1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBnYW1lID0gc2lnbmFsPENocmlzdGlhbml0eUdhbWVTdGF0ZT4oc3RydWN0dXJlZENsb25lKFNUQVJUSU5HX0dBTUUpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkSGFuZENhcmQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZEF0dGFja2VyID0gc2lnbmFsPENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFByZXZpZXcgPSBzaWduYWw8Q2hyaXN0aWFuaXR5Q2FyZFByZXZpZXcgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3dIaXN0b3J5ID0gc2lnbmFsKGZhbHNlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGxheWVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nYW1lKCkucGxheWVycy5QMSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBvcHBvbmVudCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2FtZSgpLnBsYXllcnMuUDIpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY3VycmVudFBsYXllciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2FtZSgpLnBsYXllcnNbdGhpcy5nYW1lKCkudHVybk93bmVyXSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc093blR1cm4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdhbWUoKS50dXJuT3duZXIgPT09ICdQMScpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGFzT3Bwb25lbnRHdWFyZHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wcG9uZW50KCkuYmF0dGxlWm9uZS5sZW5ndGggPiAwKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wcG9uZW50SGFuZENvdW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHBvbmVudCgpLmhhbmRDb3VudCA/PyB0aGlzLm9wcG9uZW50KCkuaGFuZD8ubGVuZ3RoID8/IDApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhdHVzVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhdHRhY2tlciA9IHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpO1xuICAgIGNvbnN0IGhhbmRDYXJkID0gdGhpcy5zZWxlY3RlZEhhbmRDYXJkKCk7XG4gICAgaWYgKCF0aGlzLmlzT3duVHVybigpKSB7XG4gICAgICByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlXYWl0VHVybicpO1xuICAgIH1cbiAgICBpZiAoYXR0YWNrZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wcG9uZW50R3VhcmRzKCkgPyB0aGlzLnQoJ2NocmlzdGlhbml0eUNob29zZUNoYXJhY3RlclRhcmdldCcpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlDaG9vc2VUYXJnZXQnKTtcbiAgICB9XG4gICAgaWYgKGhhbmRDYXJkKSB7XG4gICAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGVmaW5pdGlvbihoYW5kQ2FyZCk7XG4gICAgICByZXR1cm4gdGhpcy5jYW5QbGF5KGNhcmQpID8gdGhpcy50KCdjaHJpc3RpYW5pdHlSZWFkeVRvUGxheScpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlOZWVkT2ZmZXJpbmdzJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eUNob29zZUNhcmQnKTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMoJ01pbmlHYW1lcycsIE1JTklfR0FNRVNfSTE4Tik7XG4gIH1cblxuICBwcm90ZWN0ZWQgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCAnTWluaUdhbWVzJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FyZERlZmluaXRpb24oY2FyZElkOiBzdHJpbmcpOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbiB7XG4gICAgcmV0dXJuIFNUQVJURVJfQ0FSRFNbY2FyZElkXSA/PyBTVEFSVEVSX0NBUkRTWydwX3Njb3V0J107XG4gIH1cblxuICBwcm90ZWN0ZWQgYmF0dGxlU2xvdHMoc2VhdDogQ2hyaXN0aWFuaXR5U2VhdCk6IEFycmF5PHsgdHJhY2tJZDogc3RyaW5nOyBjYXJkPzogQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UgfT4ge1xuICAgIGNvbnN0IGNhcmRzID0gdGhpcy5nYW1lKCkucGxheWVyc1tzZWF0XS5iYXR0bGVab25lO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA0IH0sIChfLCBpbmRleCkgPT4gKHtcbiAgICAgIHRyYWNrSWQ6IGNhcmRzW2luZGV4XT8uaW5zdGFuY2VJZCA/PyBgJHtzZWF0fS1lbXB0eS0ke2luZGV4fWAsXG4gICAgICBjYXJkOiBjYXJkc1tpbmRleF0sXG4gICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhpZGRlbkhhbmRDYXJkcyhjb3VudDogbnVtYmVyKTogdW5rbm93bltdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmFuVHJhbnNmb3JtKGluZGV4OiBudW1iZXIsIHRvdGFsOiBudW1iZXIsIG9wcG9uZW50OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAodG90YWwgPD0gMSkgcmV0dXJuIG9wcG9uZW50ID8gJ3JvdGF0ZSgxODBkZWcpJyA6ICdub25lJztcbiAgICBjb25zdCBjZW50ZXIgPSAodG90YWwgLSAxKSAvIDI7XG4gICAgY29uc3Qgb2Zmc2V0ID0gaW5kZXggLSBjZW50ZXI7XG4gICAgY29uc3Qgcm90YXRlID0gb2Zmc2V0ICogNTtcbiAgICBjb25zdCBsaWZ0ID0gTWF0aC5hYnMob2Zmc2V0KSAqIDAuMjU7XG4gICAgY29uc3QgYmFzZSA9IG9wcG9uZW50ID8gJ3JvdGF0ZSgxODBkZWcpJyA6ICcnO1xuICAgIHJldHVybiBgJHtiYXNlfSB0cmFuc2xhdGVZKCR7bGlmdH1yZW0pIHJvdGF0ZSgke3JvdGF0ZX1kZWcpYDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkeU9mZmVyaW5ncyhwbGF5ZXI6IENocmlzdGlhbml0eVBsYXllclN0YXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcGxheWVyLm9mZmVyaW5ncy5yZWR1Y2UoKHRvdGFsLCBvZmZlcmluZykgPT4gdG90YWwgKyAob2ZmZXJpbmcucmVhZHkgPyBvZmZlcmluZy52YWx1ZSA6IDApLCAwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5QbGF5KGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmlzT3duVHVybigpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJykgcmV0dXJuICF0aGlzLnBsYXllcigpLm9mZmVyaW5nUGxheWVkVGhpc1R1cm47XG4gICAgcmV0dXJuIHRoaXMucmVhZHlPZmZlcmluZ3ModGhpcy5wbGF5ZXIoKSkgPj0gY2FyZC5jb3N0ICYmIHRoaXMucGxheWVyKCkuYmF0dGxlWm9uZS5sZW5ndGggPCA0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhblBsYXlTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZCgpO1xuICAgIHJldHVybiAhIXNlbGVjdGVkICYmIHRoaXMuY2FuUGxheSh0aGlzLmNhcmREZWZpbml0aW9uKHNlbGVjdGVkKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0SGFuZENhcmQoY2FyZElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNrZXIuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZC5zZXQodGhpcy5zZWxlY3RlZEhhbmRDYXJkKCkgPT09IGNhcmRJZCA/IG51bGwgOiBjYXJkSWQpO1xuICAgIHRoaXMuaW5zcGVjdEhhbmRDYXJkKGNhcmRJZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGxheVNlbGVjdGVkQ2FyZCgpOiB2b2lkIHtcbiAgICBjb25zdCBjYXJkSWQgPSB0aGlzLnNlbGVjdGVkSGFuZENhcmQoKTtcbiAgICBpZiAoIWNhcmRJZCkgcmV0dXJuO1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGNhcmRJZCk7XG4gICAgaWYgKCF0aGlzLmNhblBsYXkoY2FyZCkpIHJldHVybjtcblxuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgY29uc3QgcGxheWVyID0gbmV4dC5wbGF5ZXJzLlAxO1xuICAgICAgY29uc3QgaGFuZEluZGV4ID0gcGxheWVyLmhhbmQ/LmluZGV4T2YoY2FyZElkKSA/PyAtMTtcbiAgICAgIGlmIChoYW5kSW5kZXggPCAwIHx8ICFwbGF5ZXIuaGFuZCkgcmV0dXJuIGdhbWU7XG4gICAgICBwbGF5ZXIuaGFuZC5zcGxpY2UoaGFuZEluZGV4LCAxKTtcbiAgICAgIGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHtcbiAgICAgICAgcGxheWVyLm9mZmVyaW5ncy5wdXNoKHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiBgcDFfb2ZmZXJpbmdfJHtuZXh0LnJldmlzaW9uICsgMX1gLFxuICAgICAgICAgIGNhcmRJZDogY2FyZC5pZCxcbiAgICAgICAgICBuYW1lOiBjYXJkLm5hbWUsXG4gICAgICAgICAgb3duZXI6ICdQMScsXG4gICAgICAgICAgcmVhZHk6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IGNhcmQubGlmZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHBsYXllci5vZmZlcmluZ1BsYXllZFRoaXNUdXJuID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3BlbmRPZmZlcmluZ3MocGxheWVyLCBjYXJkLmNvc3QpO1xuICAgICAgICBwbGF5ZXIuYmF0dGxlWm9uZS5wdXNoKHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiBgcDFfJHtuZXh0LnJldmlzaW9uICsgMX1fJHtwbGF5ZXIuYmF0dGxlWm9uZS5sZW5ndGh9YCxcbiAgICAgICAgICBjYXJkSWQ6IGNhcmQuaWQsXG4gICAgICAgICAgbmFtZTogY2FyZC5uYW1lLFxuICAgICAgICAgIG93bmVyOiAnUDEnLFxuICAgICAgICAgIGNvbnRyb2xsZXI6ICdQMScsXG4gICAgICAgICAgYXR0YWNrOiBjYXJkLmF0dGFjayxcbiAgICAgICAgICBjdXJyZW50SHA6IGNhcmQubGlmZSxcbiAgICAgICAgICBtYXhIcDogY2FyZC5saWZlLFxuICAgICAgICAgIGNhbkF0dGFjazogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgbmV4dC5yZXZpc2lvbisrO1xuICAgICAgbmV4dC5sb2cgPSBbXG4gICAgICAgIGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJyA/IGAke2NhcmQubmFtZX0gcXVlZGEgbGlzdGEgY29tbyBvZnJlbmRhLmAgOiBgJHtjYXJkLm5hbWV9IGVudHJhIGVuIGJhdGFsbGEuYCxcbiAgICAgICAgLi4ubmV4dC5sb2csXG4gICAgICBdLnNsaWNlKDAsIDQpO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RBdHRhY2tlcihjYXJkOiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZC5zZXQobnVsbCk7XG4gICAgdGhpcy5pbnNwZWN0Q2hhcmFjdGVyKGNhcmQpO1xuICAgIGlmICghdGhpcy5pc093blR1cm4oKSB8fCAhY2FyZC5jYW5BdHRhY2spIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNrZXIuc2V0KHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpPy5pbnN0YW5jZUlkID09PSBjYXJkLmluc3RhbmNlSWQgPyBudWxsIDogY2FyZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlT3Bwb25lbnRDaGFyYWN0ZXIoY2FyZDogQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UpOiB2b2lkIHtcbiAgICB0aGlzLmluc3BlY3RDaGFyYWN0ZXIoY2FyZCk7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpKSB7XG4gICAgICB0aGlzLmF0dGFja0NoYXJhY3RlcihjYXJkKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlT3Bwb25lbnRMZWFkZXIoKTogdm9pZCB7XG4gICAgdGhpcy5pbnNwZWN0TGVhZGVyKCdQMicpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKSAmJiAhdGhpcy5oYXNPcHBvbmVudEd1YXJkcygpKSB7XG4gICAgICB0aGlzLmF0dGFja0xlYWRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhdHRhY2tMZWFkZXIoKTogdm9pZCB7XG4gICAgY29uc3QgYXR0YWNrZXIgPSB0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKTtcbiAgICBpZiAoIWF0dGFja2VyKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaGFzT3Bwb25lbnRHdWFyZHMoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KHtcbiAgICAgICAgdGl0bGU6IHRoaXMub3Bwb25lbnQoKS5sZWFkZXJOYW1lLFxuICAgICAgICBleWVicm93OiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSxcbiAgICAgICAgbWV0YTogYCR7dGhpcy5vcHBvbmVudCgpLmxlYWRlckhwfS8ke3RoaXMub3Bwb25lbnQoKS5sZWFkZXJNYXhIcH1gLFxuICAgICAgICBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlclByb3RlY3RlZCcpLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgY29uc3QgbGl2ZUF0dGFja2VyID0gbmV4dC5wbGF5ZXJzLlAxLmJhdHRsZVpvbmUuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gYXR0YWNrZXIuaW5zdGFuY2VJZCk7XG4gICAgICBpZiAoIWxpdmVBdHRhY2tlciB8fCAhbGl2ZUF0dGFja2VyLmNhbkF0dGFjaykgcmV0dXJuIGdhbWU7XG4gICAgICBuZXh0LnBsYXllcnMuUDIubGVhZGVySHAgPSBNYXRoLm1heCgwLCBuZXh0LnBsYXllcnMuUDIubGVhZGVySHAgLSBsaXZlQXR0YWNrZXIuYXR0YWNrKTtcbiAgICAgIGxpdmVBdHRhY2tlci5jYW5BdHRhY2sgPSBmYWxzZTtcbiAgICAgIG5leHQucmV2aXNpb24rKztcbiAgICAgIG5leHQubG9nID0gW2Ake2xpdmVBdHRhY2tlci5uYW1lfSBhdGFjYSBhbCBsaWRlciByaXZhbC5gLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNrZXIuc2V0KG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF0dGFja0NoYXJhY3Rlcih0YXJnZXQ6IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlKTogdm9pZCB7XG4gICAgY29uc3QgYXR0YWNrZXIgPSB0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKTtcbiAgICBpZiAoIWF0dGFja2VyKSByZXR1cm47XG4gICAgdGhpcy5nYW1lLnVwZGF0ZShnYW1lID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gICAgICBjb25zdCBsaXZlQXR0YWNrZXIgPSBuZXh0LnBsYXllcnMuUDEuYmF0dGxlWm9uZS5maW5kKGNhcmQgPT4gY2FyZC5pbnN0YW5jZUlkID09PSBhdHRhY2tlci5pbnN0YW5jZUlkKTtcbiAgICAgIGNvbnN0IGxpdmVUYXJnZXQgPSBuZXh0LnBsYXllcnMuUDIuYmF0dGxlWm9uZS5maW5kKGNhcmQgPT4gY2FyZC5pbnN0YW5jZUlkID09PSB0YXJnZXQuaW5zdGFuY2VJZCk7XG4gICAgICBpZiAoIWxpdmVBdHRhY2tlciB8fCAhbGl2ZVRhcmdldCB8fCAhbGl2ZUF0dGFja2VyLmNhbkF0dGFjaykgcmV0dXJuIGdhbWU7XG4gICAgICBsaXZlVGFyZ2V0LmN1cnJlbnRIcCAtPSBsaXZlQXR0YWNrZXIuYXR0YWNrO1xuICAgICAgbGl2ZUF0dGFja2VyLmN1cnJlbnRIcCAtPSBsaXZlVGFyZ2V0LmF0dGFjaztcbiAgICAgIGxpdmVBdHRhY2tlci5jYW5BdHRhY2sgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2xlYW51cERlc3Ryb3llZChuZXh0LnBsYXllcnMuUDEsIG5leHQpO1xuICAgICAgdGhpcy5jbGVhbnVwRGVzdHJveWVkKG5leHQucGxheWVycy5QMiwgbmV4dCk7XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtgJHtsaXZlQXR0YWNrZXIubmFtZX0gY29tYmF0ZSBjb250cmEgJHtsaXZlVGFyZ2V0Lm5hbWV9LmAsIC4uLm5leHQubG9nXS5zbGljZSgwLCA0KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZW5kVHVybigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgbmV4dC50dXJuT3duZXIgPSBuZXh0LnR1cm5Pd25lciA9PT0gJ1AxJyA/ICdQMicgOiAnUDEnO1xuICAgICAgbmV4dC50dXJuQ291bnQrKztcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBuZXh0LnBsYXllcnNbbmV4dC50dXJuT3duZXJdO1xuICAgICAgY3VycmVudC5vZmZlcmluZ1BsYXllZFRoaXNUdXJuID0gZmFsc2U7XG4gICAgICBjdXJyZW50Lm9mZmVyaW5ncyA9IGN1cnJlbnQub2ZmZXJpbmdzLm1hcChvZmZlcmluZyA9PiAoeyAuLi5vZmZlcmluZywgcmVhZHk6IHRydWUgfSkpO1xuICAgICAgY3VycmVudC5iYXR0bGVab25lID0gY3VycmVudC5iYXR0bGVab25lLm1hcChjYXJkID0+ICh7IC4uLmNhcmQsIGNhbkF0dGFjazogdHJ1ZSB9KSk7XG4gICAgICBjb25zdCBkcmF3bkNhcmQgPSBuZXh0LnNoYXJlZERlY2suc2hpZnQoKTtcbiAgICAgIGlmIChkcmF3bkNhcmQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQuaGFuZCkge1xuICAgICAgICAgIGN1cnJlbnQuaGFuZC5wdXNoKGRyYXduQ2FyZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudC5oYW5kQ291bnQgPSAoY3VycmVudC5oYW5kQ291bnQgPz8gMCkgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtcbiAgICAgICAgZHJhd25DYXJkID8gYCR7Y3VycmVudC5kaXNwbGF5TmFtZX0gcm9iYSB1bmEgY2FydGEuYCA6IGBFbCBtYXpvIGVzdGEgdmFjaW8uYCxcbiAgICAgICAgYFR1cm5vIGRlICR7Y3VycmVudC5kaXNwbGF5TmFtZX0uYCxcbiAgICAgICAgLi4ubmV4dC5sb2csXG4gICAgICBdLnNsaWNlKDAsIDQpO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRNb2NrKCk6IHZvaWQge1xuICAgIHRoaXMuZ2FtZS5zZXQoc3RydWN0dXJlZENsb25lKFNUQVJUSU5HX0dBTUUpKTtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMuc2hvd0hpc3Rvcnkuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbG9zZVByZXZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwRGVzdHJveWVkKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUsIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGRlc3Ryb3llZCA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwIDw9IDApO1xuICAgIGlmICghZGVzdHJveWVkLmxlbmd0aCkgcmV0dXJuO1xuICAgIGdhbWUuaGlzdG9yeVpvbmUucHVzaCguLi5kZXN0cm95ZWQubWFwKGNhcmQgPT4gY2FyZC5jYXJkSWQpKTtcbiAgICBwbGF5ZXIuYmF0dGxlWm9uZSA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwID4gMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdExlYWRlcihzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogdm9pZCB7XG4gICAgY29uc3QgcGxheWVyID0gdGhpcy5nYW1lKCkucGxheWVyc1tzZWF0XTtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQoe1xuICAgICAgdGl0bGU6IHBsYXllci5sZWFkZXJOYW1lLFxuICAgICAgZXllYnJvdzogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJyksXG4gICAgICBtZXRhOiBgJHtwbGF5ZXIubGVhZGVySHB9LyR7cGxheWVyLmxlYWRlck1heEhwfWAsXG4gICAgICBib2R5OiBzZWF0ID09PSAnUDInICYmIHRoaXMuaGFzT3Bwb25lbnRHdWFyZHMoKSA/IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyUHJvdGVjdGVkJykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckJvZHknKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNwZWN0T2ZmZXJpbmcob2ZmZXJpbmc6IENocmlzdGlhbml0eU9mZmVyaW5nSW5zdGFuY2UpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQoe1xuICAgICAgdGl0bGU6IG9mZmVyaW5nLm5hbWUsXG4gICAgICBleWVicm93OiB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQ2FyZCcpLFxuICAgICAgbWV0YTogb2ZmZXJpbmcucmVhZHkgPyB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nUmVhZHknKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdFeGhhdXN0ZWQnKSxcbiAgICAgIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdCb2R5JyksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdERlY2soKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KHtcbiAgICAgIHRpdGxlOiB0aGlzLnQoJ2NocmlzdGlhbml0eURlY2snKSxcbiAgICAgIGV5ZWJyb3c6IHRoaXMudCgnY2hyaXN0aWFuaXR5U2hhcmVkWm9uZScpLFxuICAgICAgbWV0YTogYCR7dGhpcy5nYW1lKCkuc2hhcmVkRGVjay5sZW5ndGh9YCxcbiAgICAgIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5RGVja0JvZHknKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNwZWN0SGFuZENhcmQoY2FyZElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkSWQpO1xuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldCh7XG4gICAgICB0aXRsZTogY2FyZC5uYW1lLFxuICAgICAgZXllYnJvdzogY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyQ2FyZCcpLFxuICAgICAgbWV0YTogY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gYCske2NhcmQubGlmZX1gIDogYCR7dGhpcy50KCdjaHJpc3RpYW5pdHlDb3N0Jyl9ICR7Y2FyZC5jb3N0fSDCtyAke2NhcmQuYXR0YWNrfS8ke2NhcmQubGlmZX1gLFxuICAgICAgYm9keTogY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0JvZHknKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyQm9keScpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc3BlY3RIaXN0b3J5Q2FyZChjYXJkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0hpc3Rvcnkuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmluc3BlY3RIYW5kQ2FyZChjYXJkSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNwZWN0Q2hhcmFjdGVyKGNhcmQ6IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KHtcbiAgICAgIHRpdGxlOiBjYXJkLm5hbWUsXG4gICAgICBleWVicm93OiB0aGlzLnQoJ2NocmlzdGlhbml0eUNoYXJhY3RlckNhcmQnKSxcbiAgICAgIG1ldGE6IGAke2NhcmQuYXR0YWNrfS8ke2NhcmQuY3VycmVudEhwfWAsXG4gICAgICBib2R5OiBjYXJkLmNhbkF0dGFjayA/IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyUmVhZHknKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyRXhoYXVzdGVkJyksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNwZW5kT2ZmZXJpbmdzKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUsIGNvc3Q6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCByZW1haW5pbmcgPSBjb3N0O1xuICAgIHBsYXllci5vZmZlcmluZ3MgPSBwbGF5ZXIub2ZmZXJpbmdzLm1hcChvZmZlcmluZyA9PiB7XG4gICAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgIW9mZmVyaW5nLnJlYWR5KSByZXR1cm4gb2ZmZXJpbmc7XG4gICAgICByZW1haW5pbmcgLT0gb2ZmZXJpbmcudmFsdWU7XG4gICAgICByZXR1cm4geyAuLi5vZmZlcmluZywgcmVhZHk6IGZhbHNlIH07XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|