valtech-components 4.0.502 → 4.0.503

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.
@@ -14,6 +14,8 @@ export function canPlayCard(game, seat, card) {
14
14
  if (card.type === 'character') {
15
15
  return readyOfferings(player) >= (card.cost ?? 0) && player.battleZone.length < CHRISTIANITY_BATTLE_SLOTS;
16
16
  }
17
+ if (card.type === 'place')
18
+ return true;
17
19
  return false;
18
20
  }
19
21
  export function playCardFromHand(game, seat, card, options = {}) {
@@ -68,11 +70,25 @@ export function playCardFromHand(game, seat, card, options = {}) {
68
70
  });
69
71
  player.battleZone.sort((left, right) => (left.slot ?? 0) - (right.slot ?? 0));
70
72
  }
73
+ else if (card.type === 'place') {
74
+ const previousPlace = next.placeZone[0];
75
+ if (previousPlace) {
76
+ next.historyZone.push(previousPlace);
77
+ }
78
+ next.placeZone = [card.id];
79
+ }
71
80
  next.revision++;
72
- const log = [card.type === 'offering' ? `${displayName} queda lista como ofrenda.` : `${displayName} entra en batalla.`];
81
+ const log = [playCardLog(card, displayName)];
73
82
  next.log = [...log, ...next.log].slice(0, 4);
74
83
  return { game: next, played: true, playedOfferingValue, spentOfferings, log };
75
84
  }
85
+ function playCardLog(card, displayName) {
86
+ if (card.type === 'offering')
87
+ return `${displayName} queda lista como ofrenda.`;
88
+ if (card.type === 'place')
89
+ return `${displayName} queda como lugar activo.`;
90
+ return `${displayName} entra en batalla.`;
91
+ }
76
92
  export function resolveAttackLeader(game, attackerSeat, attackerInstanceId, messages) {
77
93
  const defenderSeat = opponentSeat(attackerSeat);
78
94
  if (game.status !== 'in_progress' || game.players[defenderSeat].battleZone.length > 0) {
@@ -160,4 +176,4 @@ export function spendOfferings(player, cost) {
160
176
  export function opponentSeat(seat) {
161
177
  return seat === 'P1' ? 'P2' : 'P1';
162
178
  }
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyaXN0aWFuaXR5LXJ1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9taW5pLWdhbWVzL2NocmlzdGlhbml0eS1ydWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUE2QjNDLE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBK0I7SUFDNUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQStCO0lBQzVELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FDekIsSUFBMkIsRUFDM0IsSUFBc0IsRUFDdEIsSUFBZ0M7SUFFaEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLGFBQWEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMzRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztJQUNwRSxJQUFJLElBQUksQ0FB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QUFLO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDdkQsU0FBUyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDNUIsT0FBTyxFQUFFLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQXNCO0lBQ2pELE9BQU8sSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uLFxuICBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSxcbiAgQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSxcbiAgQ2hyaXN0aWFuaXR5U2VhdCxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBDSFJJU1RJQU5JVFlfQkFUVExFX1NMT1RTID0gNDtcblxuZXhwb3J0IGludGVyZmFjZSBDaHJpc3RpYW5pdHlSdWxlTWVzc2FnZXMge1xuICBhdHRhY2tzT3Bwb25lbnRMZWFkZXI6IHN0cmluZztcbiAgYXR0YWNrc1lvdXJMZWFkZXI6IHN0cmluZztcbiAgY29tYmF0c0FnYWluc3Q6IHN0cmluZztcbiAgZHJhd3NDYXJkOiBzdHJpbmc7XG4gIGRlY2tJc0VtcHR5OiBzdHJpbmc7XG4gIHR1cm5PZjogc3RyaW5nO1xuICB5b3VXaW46IHN0cmluZztcbiAgb3Bwb25lbnRXaW5zOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hyaXN0aWFuaXR5UGxheUNhcmRSZXN1bHQge1xuICBnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGU7XG4gIHBsYXllZDogYm9vbGVhbjtcbiAgcGxheWVkT2ZmZXJpbmdWYWx1ZTogbnVtYmVyO1xuICBzcGVudE9mZmVyaW5nczogbnVtYmVyO1xuICBsb2c6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENocmlzdGlhbml0eUF0dGFja1Jlc3VsdCB7XG4gIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZTtcbiAgYXR0YWNrZWQ6IGJvb2xlYW47XG4gIGF0dGFja2VyRGFtYWdlOiBudW1iZXI7XG4gIHRhcmdldERhbWFnZTogbnVtYmVyO1xuICBsb2c6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZHlPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBwbGF5ZXIub2ZmZXJpbmdzLnJlZHVjZSgodG90YWwsIG9mZmVyaW5nKSA9PiB0b3RhbCArIChvZmZlcmluZy5yZWFkeSA/IG9mZmVyaW5nLnZhbHVlIDogMCksIDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG90YWxPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSk6IG51bWJlciB7XG4gIHJldHVybiBwbGF5ZXIub2ZmZXJpbmdzLnJlZHVjZSgodG90YWwsIG9mZmVyaW5nKSA9PiB0b3RhbCArIG9mZmVyaW5nLnZhbHVlLCAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhblBsYXlDYXJkKFxuICBnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsXG4gIHNlYXQ6IENocmlzdGlhbml0eVNlYXQsXG4gIGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uLFxuKTogYm9vbGVhbiB7XG4gIGlmIChnYW1lLnN0YXR1cyAhPT0gJ2luX3Byb2dyZXNzJyB8fCBnYW1lLnR1cm5Pd25lciAhPT0gc2VhdCkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwbGF5ZXIgPSBnYW1lLnBsYXllcnNbc2VhdF07XG4gIGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHJldHVybiAhcGxheWVyLm9mZmVyaW5nUGxheWVkVGhpc1R1cm47XG4gIGlmIChjYXJkLnR5cGUgPT09ICdjaGFyYWN0ZXInKSB7XG4gICAgcmV0dXJuIHJlYWR5T2ZmZXJpbmdzKHBsYXllcikgPj0gKGNhcmQuY29zdCA/PyAwKSAmJiBwbGF5ZXIuYmF0dGxlWm9uZS5sZW5ndGggPCBDSFJJU1RJQU5JVFlfQkFUVExFX1NMT1RTO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBsYXlDYXJkRnJvbUhhbmQoXG4gIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZSxcbiAgc2VhdDogQ2hyaXN0aWFuaXR5U2VhdCxcbiAgY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sXG4gIG9wdGlvbnM6IHsgc2xvdEluZGV4PzogbnVtYmVyOyBkaXNwbGF5TmFtZT86IHN0cmluZyB9ID0ge30sXG4pOiBDaHJpc3RpYW5pdHlQbGF5Q2FyZFJlc3VsdCB7XG4gIGlmICghY2FuUGxheUNhcmQoZ2FtZSwgc2VhdCwgY2FyZCkpIHtcbiAgICByZXR1cm4geyBnYW1lLCBwbGF5ZWQ6IGZhbHNlLCBwbGF5ZWRPZmZlcmluZ1ZhbHVlOiAwLCBzcGVudE9mZmVyaW5nczogMCwgbG9nOiBbXSB9O1xuICB9XG5cbiAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgY29uc3QgcGxheWVyID0gbmV4dC5wbGF5ZXJzW3NlYXRdO1xuICBjb25zdCBoYW5kSW5kZXggPSBwbGF5ZXIuaGFuZD8uaW5kZXhPZihjYXJkLmlkKSA/PyAtMTtcbiAgaWYgKGhhbmRJbmRleCA8IDAgfHwgIXBsYXllci5oYW5kKSB7XG4gICAgcmV0dXJuIHsgZ2FtZSwgcGxheWVkOiBmYWxzZSwgcGxheWVkT2ZmZXJpbmdWYWx1ZTogMCwgc3BlbnRPZmZlcmluZ3M6IDAsIGxvZzogW10gfTtcbiAgfVxuXG4gIGNvbnN0IGRpc3BsYXlOYW1lID0gb3B0aW9ucy5kaXNwbGF5TmFtZSA/PyBjYXJkLm5hbWU7XG4gIGxldCBwbGF5ZWRPZmZlcmluZ1ZhbHVlID0gMDtcbiAgbGV0IHNwZW50T2ZmZXJpbmdzID0gMDtcblxuICBwbGF5ZXIuaGFuZC5zcGxpY2UoaGFuZEluZGV4LCAxKTtcbiAgaWYgKGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJykge1xuICAgIHBsYXllZE9mZmVyaW5nVmFsdWUgPSBjYXJkLm9mZmVyaW5nVmFsdWUgPz8gY2FyZC5saWZlID8/IDE7XG4gICAgcGxheWVyLm9mZmVyaW5ncy5wdXNoKHtcbiAgICAgIGluc3RhbmNlSWQ6IGAke3NlYXQudG9Mb3dlckNhc2UoKX1fb2ZmZXJpbmdfJHtuZXh0LnJldmlzaW9uICsgMX1gLFxuICAgICAgY2FyZElkOiBjYXJkLmlkLFxuICAgICAgbmFtZTogZGlzcGxheU5hbWUsXG4gICAgICBvd25lcjogc2VhdCxcbiAgICAgIHJlYWR5OiB0cnVlLFxuICAgICAgdmFsdWU6IHBsYXllZE9mZmVyaW5nVmFsdWUsXG4gICAgICBhYmlsaXR5TmFtZTogY2FyZC5hYmlsaXR5TmFtZSxcbiAgICAgIGFiaWxpdHlUZXh0OiBjYXJkLmFiaWxpdHlUZXh0LFxuICAgICAgYWJpbGl0eUNvc3Q6IGNhcmQuYWJpbGl0eUNvc3QsXG4gICAgfSk7XG4gICAgcGxheWVyLm9mZmVyaW5nUGxheWVkVGhpc1R1cm4gPSB0cnVlO1xuICB9IGVsc2UgaWYgKGNhcmQudHlwZSA9PT0gJ2NoYXJhY3RlcicpIHtcbiAgICBjb25zdCBvY2N1cGllZFNsb3RzID0gbmV3IFNldChwbGF5ZXIuYmF0dGxlWm9uZS5tYXAoKGNoYXJhY3RlciwgaW5kZXgpID0+IE51bWJlci5pc0ludGVnZXIoY2hhcmFjdGVyLnNsb3QpID8gY2hhcmFjdGVyLnNsb3QgPz8gaW5kZXggOiBpbmRleCkpO1xuICAgIGNvbnN0IHRhcmdldFNsb3QgPSBvcHRpb25zLnNsb3RJbmRleCA/PyBbMCwgMSwgMiwgM10uZmluZChpbmRleCA9PiAhb2NjdXBpZWRTbG90cy5oYXMoaW5kZXgpKTtcbiAgICBpZiAodGFyZ2V0U2xvdCA9PT0gdW5kZWZpbmVkIHx8IG9jY3VwaWVkU2xvdHMuaGFzKHRhcmdldFNsb3QpKSB7XG4gICAgICByZXR1cm4geyBnYW1lLCBwbGF5ZWQ6IGZhbHNlLCBwbGF5ZWRPZmZlcmluZ1ZhbHVlOiAwLCBzcGVudE9mZmVyaW5nczogMCwgbG9nOiBbXSB9O1xuICAgIH1cbiAgICBzcGVudE9mZmVyaW5ncyA9IGNhcmQuY29zdCA/PyAwO1xuICAgIHNwZW5kT2ZmZXJpbmdzKHBsYXllciwgc3BlbnRPZmZlcmluZ3MpO1xuICAgIGNvbnN0IGxpZmUgPSBjYXJkLmxpZmUgPz8gMTtcbiAgICBwbGF5ZXIuYmF0dGxlWm9uZS5wdXNoKHtcbiAgICAgIGluc3RhbmNlSWQ6IGAke3NlYXQudG9Mb3dlckNhc2UoKX1fJHtuZXh0LnJldmlzaW9uICsgMX1fJHtwbGF5ZXIuYmF0dGxlWm9uZS5sZW5ndGh9YCxcbiAgICAgIGNhcmRJZDogY2FyZC5pZCxcbiAgICAgIG5hbWU6IGRpc3BsYXlOYW1lLFxuICAgICAgb3duZXI6IHNlYXQsXG4gICAgICBjb250cm9sbGVyOiBzZWF0LFxuICAgICAgc2xvdDogdGFyZ2V0U2xvdCxcbiAgICAgIGF0dGFjazogY2FyZC5hdHRhY2sgPz8gMCxcbiAgICAgIGN1cnJlbnRIcDogbGlmZSxcbiAgICAgIG1heEhwOiBsaWZlLFxuICAgICAgY2FuQXR0YWNrOiBmYWxzZSxcbiAgICB9KTtcbiAgICBwbGF5ZXIuYmF0dGxlWm9uZS5zb3J0KChsZWZ0LCByaWdodCkgPT4gKGxlZnQuc2xvdCA/PyAwKSAtIChyaWdodC5zbG90ID8/IDApKTtcbiAgfVxuXG4gIG5leHQucmV2aXNpb24rKztcbiAgY29uc3QgbG9nID0gW2NhcmQudHlwZSA9PT0gJ29mZmVyaW5nJyA/IGAke2Rpc3BsYXlOYW1lfSBxdWVkYSBsaXN0YSBjb21vIG9mcmVuZGEuYCA6IGAke2Rpc3BsYXlOYW1lfSBlbnRyYSBlbiBiYXRhbGxhLmBdO1xuICBuZXh0LmxvZyA9IFsuLi5sb2csIC4uLm5leHQubG9nXS5zbGljZSgwLCA0KTtcbiAgcmV0dXJuIHsgZ2FtZTogbmV4dCwgcGxheWVkOiB0cnVlLCBwbGF5ZWRPZmZlcmluZ1ZhbHVlLCBzcGVudE9mZmVyaW5ncywgbG9nIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQXR0YWNrTGVhZGVyKFxuICBnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsXG4gIGF0dGFja2VyU2VhdDogQ2hyaXN0aWFuaXR5U2VhdCxcbiAgYXR0YWNrZXJJbnN0YW5jZUlkOiBzdHJpbmcsXG4gIG1lc3NhZ2VzOiBDaHJpc3RpYW5pdHlSdWxlTWVzc2FnZXMsXG4pOiBDaHJpc3RpYW5pdHlBdHRhY2tSZXN1bHQge1xuICBjb25zdCBkZWZlbmRlclNlYXQgPSBvcHBvbmVudFNlYXQoYXR0YWNrZXJTZWF0KTtcbiAgaWYgKGdhbWUuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnIHx8IGdhbWUucGxheWVyc1tkZWZlbmRlclNlYXRdLmJhdHRsZVpvbmUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7IGdhbWUsIGF0dGFja2VkOiBmYWxzZSwgYXR0YWNrZXJEYW1hZ2U6IDAsIHRhcmdldERhbWFnZTogMCwgbG9nOiBbXSB9O1xuICB9XG5cbiAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgY29uc3QgYXR0YWNrZXIgPSBuZXh0LnBsYXllcnNbYXR0YWNrZXJTZWF0XS5iYXR0bGVab25lLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IGF0dGFja2VySW5zdGFuY2VJZCk7XG4gIGlmICghYXR0YWNrZXIgfHwgIWF0dGFja2VyLmNhbkF0dGFjaykgcmV0dXJuIHsgZ2FtZSwgYXR0YWNrZWQ6IGZhbHNlLCBhdHRhY2tlckRhbWFnZTogMCwgdGFyZ2V0RGFtYWdlOiAwLCBsb2c6IFtdIH07XG5cbiAgY29uc3QgZGFtYWdlID0gYXR0YWNrZXIuYXR0YWNrO1xuICBuZXh0LnBsYXllcnNbZGVmZW5kZXJTZWF0XS5sZWFkZXJIcCA9IE1hdGgubWF4KDAsIG5leHQucGxheWVyc1tkZWZlbmRlclNlYXRdLmxlYWRlckhwIC0gZGFtYWdlKTtcbiAgYXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gIGNvbnN0IGxvZyA9IFtgJHthdHRhY2tlci5uYW1lfSAke2F0dGFja2VyU2VhdCA9PT0gJ1AxJyA/IG1lc3NhZ2VzLmF0dGFja3NPcHBvbmVudExlYWRlciA6IG1lc3NhZ2VzLmF0dGFja3NZb3VyTGVhZGVyfWBdO1xuICBldmFsdWF0ZVZpY3RvcnkobmV4dCwgbG9nLCBtZXNzYWdlcyk7XG4gIG5leHQucmV2aXNpb24rKztcbiAgbmV4dC5sb2cgPSBbLi4ubG9nLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gIHJldHVybiB7IGdhbWU6IG5leHQsIGF0dGFja2VkOiB0cnVlLCBhdHRhY2tlckRhbWFnZTogMCwgdGFyZ2V0RGFtYWdlOiBkYW1hZ2UsIGxvZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUF0dGFja0NoYXJhY3RlcihcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBhdHRhY2tlclNlYXQ6IENocmlzdGlhbml0eVNlYXQsXG4gIGF0dGFja2VySW5zdGFuY2VJZDogc3RyaW5nLFxuICB0YXJnZXRJbnN0YW5jZUlkOiBzdHJpbmcsXG4gIG1lc3NhZ2VzOiBDaHJpc3RpYW5pdHlSdWxlTWVzc2FnZXMsXG4pOiBDaHJpc3RpYW5pdHlBdHRhY2tSZXN1bHQge1xuICBjb25zdCBkZWZlbmRlclNlYXQgPSBvcHBvbmVudFNlYXQoYXR0YWNrZXJTZWF0KTtcbiAgaWYgKGdhbWUuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnKSByZXR1cm4geyBnYW1lLCBhdHRhY2tlZDogZmFsc2UsIGF0dGFja2VyRGFtYWdlOiAwLCB0YXJnZXREYW1hZ2U6IDAsIGxvZzogW10gfTtcblxuICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICBjb25zdCBhdHRhY2tlciA9IG5leHQucGxheWVyc1thdHRhY2tlclNlYXRdLmJhdHRsZVpvbmUuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gYXR0YWNrZXJJbnN0YW5jZUlkKTtcbiAgY29uc3QgdGFyZ2V0ID0gbmV4dC5wbGF5ZXJzW2RlZmVuZGVyU2VhdF0uYmF0dGxlWm9uZS5maW5kKGNhcmQgPT4gY2FyZC5pbnN0YW5jZUlkID09PSB0YXJnZXRJbnN0YW5jZUlkKTtcbiAgaWYgKCFhdHRhY2tlciB8fCAhdGFyZ2V0IHx8ICFhdHRhY2tlci5jYW5BdHRhY2spIHtcbiAgICByZXR1cm4geyBnYW1lLCBhdHRhY2tlZDogZmFsc2UsIGF0dGFja2VyRGFtYWdlOiAwLCB0YXJnZXREYW1hZ2U6IDAsIGxvZzogW10gfTtcbiAgfVxuXG4gIHRhcmdldC5jdXJyZW50SHAgLT0gYXR0YWNrZXIuYXR0YWNrO1xuICBhdHRhY2tlci5jdXJyZW50SHAgLT0gdGFyZ2V0LmF0dGFjaztcbiAgYXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gIGNsZWFudXBEZXN0cm95ZWQobmV4dC5wbGF5ZXJzW2F0dGFja2VyU2VhdF0sIG5leHQpO1xuICBjbGVhbnVwRGVzdHJveWVkKG5leHQucGxheWVyc1tkZWZlbmRlclNlYXRdLCBuZXh0KTtcbiAgY29uc3QgbG9nID0gW2Ake2F0dGFja2VyLm5hbWV9ICR7bWVzc2FnZXMuY29tYmF0c0FnYWluc3R9ICR7dGFyZ2V0Lm5hbWV9LmBdO1xuICBldmFsdWF0ZVZpY3RvcnkobmV4dCwgbG9nLCBtZXNzYWdlcyk7XG4gIG5leHQucmV2aXNpb24rKztcbiAgbmV4dC5sb2cgPSBbLi4ubG9nLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG5cbiAgcmV0dXJuIHsgZ2FtZTogbmV4dCwgYXR0YWNrZWQ6IHRydWUsIGF0dGFja2VyRGFtYWdlOiB0YXJnZXQuYXR0YWNrLCB0YXJnZXREYW1hZ2U6IGF0dGFja2VyLmF0dGFjaywgbG9nIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZHZhbmNlVHVybihnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsIG1lc3NhZ2VzOiBDaHJpc3RpYW5pdHlSdWxlTWVzc2FnZXMpOiBzdHJpbmdbXSB7XG4gIGdhbWUudHVybk93bmVyID0gb3Bwb25lbnRTZWF0KGdhbWUudHVybk93bmVyKTtcbiAgZ2FtZS50dXJuQ291bnQrKztcbiAgY29uc3QgY3VycmVudCA9IGdhbWUucGxheWVyc1tnYW1lLnR1cm5Pd25lcl07XG4gIGN1cnJlbnQub2ZmZXJpbmdQbGF5ZWRUaGlzVHVybiA9IGZhbHNlO1xuICBjdXJyZW50Lm9mZmVyaW5ncyA9IGN1cnJlbnQub2ZmZXJpbmdzLm1hcChvZmZlcmluZyA9PiAoeyAuLi5vZmZlcmluZywgcmVhZHk6IHRydWUgfSkpO1xuICBjdXJyZW50LmJhdHRsZVpvbmUgPSBjdXJyZW50LmJhdHRsZVpvbmUubWFwKGNhcmQgPT4gKHsgLi4uY2FyZCwgY2FuQXR0YWNrOiB0cnVlIH0pKTtcbiAgY29uc3QgZHJhd25DYXJkID0gZ2FtZS5zaGFyZWREZWNrLnNoaWZ0KCk7XG4gIGlmIChkcmF3bkNhcmQpIHtcbiAgICBpZiAoY3VycmVudC5oYW5kKSB7XG4gICAgICBjdXJyZW50LmhhbmQucHVzaChkcmF3bkNhcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50LmhhbmRDb3VudCA9IChjdXJyZW50LmhhbmRDb3VudCA/PyAwKSArIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBbXG4gICAgZHJhd25DYXJkID8gYCR7Y3VycmVudC5kaXNwbGF5TmFtZX0gJHttZXNzYWdlcy5kcmF3c0NhcmR9YCA6IG1lc3NhZ2VzLmRlY2tJc0VtcHR5LFxuICAgIGAke21lc3NhZ2VzLnR1cm5PZn0gJHtjdXJyZW50LmRpc3BsYXlOYW1lfS5gLFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVWaWN0b3J5KGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZSwgbG9nOiBzdHJpbmdbXSwgbWVzc2FnZXM6IENocmlzdGlhbml0eVJ1bGVNZXNzYWdlcyk6IHZvaWQge1xuICBpZiAoZ2FtZS5wbGF5ZXJzLlAxLmxlYWRlckhwID4gMCAmJiBnYW1lLnBsYXllcnMuUDIubGVhZGVySHAgPiAwKSByZXR1cm47XG4gIGdhbWUuc3RhdHVzID0gJ2ZpbmlzaGVkJztcbiAgY29uc3Qgd2lubmVyOiBDaHJpc3RpYW5pdHlTZWF0ID0gZ2FtZS5wbGF5ZXJzLlAxLmxlYWRlckhwIDw9IDAgPyAnUDInIDogJ1AxJztcbiAgZ2FtZS5tYXRjaFNjb3JlW3dpbm5lcl0gKz0gMTtcbiAgbG9nLnB1c2god2lubmVyID09PSAnUDEnID8gbWVzc2FnZXMueW91V2luIDogbWVzc2FnZXMub3Bwb25lbnRXaW5zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFudXBEZXN0cm95ZWQocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSwgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlKTogdm9pZCB7XG4gIGNvbnN0IGRlc3Ryb3llZCA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwIDw9IDApO1xuICBpZiAoIWRlc3Ryb3llZC5sZW5ndGgpIHJldHVybjtcbiAgZ2FtZS5oaXN0b3J5Wm9uZS5wdXNoKC4uLmRlc3Ryb3llZC5tYXAoY2FyZCA9PiBjYXJkLmNhcmRJZCkpO1xuICBwbGF5ZXIuYmF0dGxlWm9uZSA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwID4gMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGVuZE9mZmVyaW5ncyhwbGF5ZXI6IENocmlzdGlhbml0eVBsYXllclN0YXRlLCBjb3N0OiBudW1iZXIpOiB2b2lkIHtcbiAgbGV0IHJlbWFpbmluZyA9IGNvc3Q7XG4gIHBsYXllci5vZmZlcmluZ3MgPSBwbGF5ZXIub2ZmZXJpbmdzLm1hcChvZmZlcmluZyA9PiB7XG4gICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8ICFvZmZlcmluZy5yZWFkeSkgcmV0dXJuIG9mZmVyaW5nO1xuICAgIHJlbWFpbmluZyAtPSBvZmZlcmluZy52YWx1ZTtcbiAgICByZXR1cm4geyAuLi5vZmZlcmluZywgcmVhZHk6IGZhbHNlIH07XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb3Bwb25lbnRTZWF0KHNlYXQ6IENocmlzdGlhbml0eVNlYXQpOiBDaHJpc3RpYW5pdHlTZWF0IHtcbiAgcmV0dXJuIHNlYXQgPT09ICdQMScgPyAnUDInIDogJ1AxJztcbn1cbiJdfQ==
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyaXN0aWFuaXR5LXJ1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9taW5pLWdhbWVzL2NocmlzdGlhbml0eS1ydWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUE2QjNDLE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBK0I7SUFDNUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQStCO0lBQzVELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FDekIsSUFBMkIsRUFDM0IsSUFBc0IsRUFDdEIsSUFBZ0M7SUFFaEMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLGFBQWEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUk7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUMzRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQztJQUNwRSxJQUFJLElBQUksQ0FB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Q0FBQztJQUN4RSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07UUFBRSxPQUFPO0lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQStCLEVBQUUsSUFBWTtJQUMxRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDckIsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNqRCxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSztZQUFFLE9BQU8sUUFBUSxDQUFDO1FBQ3ZELFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQzVCLE9BQU8sRUFBRSxHQUFHLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFzQjtJQUNqRCxPQUFPLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbixcbiAgQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UsXG4gIENocmlzdGlhbml0eUdhbWVTdGF0ZSxcbiAgQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUsXG4gIENocmlzdGlhbml0eVNlYXQsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgQ0hSSVNUSUFOSVRZX0JBVFRMRV9TTE9UUyA9IDQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hyaXN0aWFuaXR5UnVsZU1lc3NhZ2VzIHtcbiAgYXR0YWNrc09wcG9uZW50TGVhZGVyOiBzdHJpbmc7XG4gIGF0dGFja3NZb3VyTGVhZGVyOiBzdHJpbmc7XG4gIGNvbWJhdHNBZ2FpbnN0OiBzdHJpbmc7XG4gIGRyYXdzQ2FyZDogc3RyaW5nO1xuICBkZWNrSXNFbXB0eTogc3RyaW5nO1xuICB0dXJuT2Y6IHN0cmluZztcbiAgeW91V2luOiBzdHJpbmc7XG4gIG9wcG9uZW50V2luczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENocmlzdGlhbml0eVBsYXlDYXJkUmVzdWx0IHtcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlO1xuICBwbGF5ZWQ6IGJvb2xlYW47XG4gIHBsYXllZE9mZmVyaW5nVmFsdWU6IG51bWJlcjtcbiAgc3BlbnRPZmZlcmluZ3M6IG51bWJlcjtcbiAgbG9nOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaHJpc3RpYW5pdHlBdHRhY2tSZXN1bHQge1xuICBnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGU7XG4gIGF0dGFja2VkOiBib29sZWFuO1xuICBhdHRhY2tlckRhbWFnZTogbnVtYmVyO1xuICB0YXJnZXREYW1hZ2U6IG51bWJlcjtcbiAgbG9nOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWR5T2ZmZXJpbmdzKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gcGxheWVyLm9mZmVyaW5ncy5yZWR1Y2UoKHRvdGFsLCBvZmZlcmluZykgPT4gdG90YWwgKyAob2ZmZXJpbmcucmVhZHkgPyBvZmZlcmluZy52YWx1ZSA6IDApLCAwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvdGFsT2ZmZXJpbmdzKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUpOiBudW1iZXIge1xuICByZXR1cm4gcGxheWVyLm9mZmVyaW5ncy5yZWR1Y2UoKHRvdGFsLCBvZmZlcmluZykgPT4gdG90YWwgKyBvZmZlcmluZy52YWx1ZSwgMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW5QbGF5Q2FyZChcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0LFxuICBjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbixcbik6IGJvb2xlYW4ge1xuICBpZiAoZ2FtZS5zdGF0dXMgIT09ICdpbl9wcm9ncmVzcycgfHwgZ2FtZS50dXJuT3duZXIgIT09IHNlYXQpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcGxheWVyID0gZ2FtZS5wbGF5ZXJzW3NlYXRdO1xuICBpZiAoY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKSByZXR1cm4gIXBsYXllci5vZmZlcmluZ1BsYXllZFRoaXNUdXJuO1xuICBpZiAoY2FyZC50eXBlID09PSAnY2hhcmFjdGVyJykge1xuICAgIHJldHVybiByZWFkeU9mZmVyaW5ncyhwbGF5ZXIpID49IChjYXJkLmNvc3QgPz8gMCkgJiYgcGxheWVyLmJhdHRsZVpvbmUubGVuZ3RoIDwgQ0hSSVNUSUFOSVRZX0JBVFRMRV9TTE9UUztcbiAgfVxuICBpZiAoY2FyZC50eXBlID09PSAncGxhY2UnKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGxheUNhcmRGcm9tSGFuZChcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0LFxuICBjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbixcbiAgb3B0aW9uczogeyBzbG90SW5kZXg/OiBudW1iZXI7IGRpc3BsYXlOYW1lPzogc3RyaW5nIH0gPSB7fSxcbik6IENocmlzdGlhbml0eVBsYXlDYXJkUmVzdWx0IHtcbiAgaWYgKCFjYW5QbGF5Q2FyZChnYW1lLCBzZWF0LCBjYXJkKSkge1xuICAgIHJldHVybiB7IGdhbWUsIHBsYXllZDogZmFsc2UsIHBsYXllZE9mZmVyaW5nVmFsdWU6IDAsIHNwZW50T2ZmZXJpbmdzOiAwLCBsb2c6IFtdIH07XG4gIH1cblxuICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICBjb25zdCBwbGF5ZXIgPSBuZXh0LnBsYXllcnNbc2VhdF07XG4gIGNvbnN0IGhhbmRJbmRleCA9IHBsYXllci5oYW5kPy5pbmRleE9mKGNhcmQuaWQpID8/IC0xO1xuICBpZiAoaGFuZEluZGV4IDwgMCB8fCAhcGxheWVyLmhhbmQpIHtcbiAgICByZXR1cm4geyBnYW1lLCBwbGF5ZWQ6IGZhbHNlLCBwbGF5ZWRPZmZlcmluZ1ZhbHVlOiAwLCBzcGVudE9mZmVyaW5nczogMCwgbG9nOiBbXSB9O1xuICB9XG5cbiAgY29uc3QgZGlzcGxheU5hbWUgPSBvcHRpb25zLmRpc3BsYXlOYW1lID8/IGNhcmQubmFtZTtcbiAgbGV0IHBsYXllZE9mZmVyaW5nVmFsdWUgPSAwO1xuICBsZXQgc3BlbnRPZmZlcmluZ3MgPSAwO1xuXG4gIHBsYXllci5oYW5kLnNwbGljZShoYW5kSW5kZXgsIDEpO1xuICBpZiAoY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKSB7XG4gICAgcGxheWVkT2ZmZXJpbmdWYWx1ZSA9IGNhcmQub2ZmZXJpbmdWYWx1ZSA/PyBjYXJkLmxpZmUgPz8gMTtcbiAgICBwbGF5ZXIub2ZmZXJpbmdzLnB1c2goe1xuICAgICAgaW5zdGFuY2VJZDogYCR7c2VhdC50b0xvd2VyQ2FzZSgpfV9vZmZlcmluZ18ke25leHQucmV2aXNpb24gKyAxfWAsXG4gICAgICBjYXJkSWQ6IGNhcmQuaWQsXG4gICAgICBuYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgIG93bmVyOiBzZWF0LFxuICAgICAgcmVhZHk6IHRydWUsXG4gICAgICB2YWx1ZTogcGxheWVkT2ZmZXJpbmdWYWx1ZSxcbiAgICAgIGFiaWxpdHlOYW1lOiBjYXJkLmFiaWxpdHlOYW1lLFxuICAgICAgYWJpbGl0eVRleHQ6IGNhcmQuYWJpbGl0eVRleHQsXG4gICAgICBhYmlsaXR5Q29zdDogY2FyZC5hYmlsaXR5Q29zdCxcbiAgICB9KTtcbiAgICBwbGF5ZXIub2ZmZXJpbmdQbGF5ZWRUaGlzVHVybiA9IHRydWU7XG4gIH0gZWxzZSBpZiAoY2FyZC50eXBlID09PSAnY2hhcmFjdGVyJykge1xuICAgIGNvbnN0IG9jY3VwaWVkU2xvdHMgPSBuZXcgU2V0KHBsYXllci5iYXR0bGVab25lLm1hcCgoY2hhcmFjdGVyLCBpbmRleCkgPT4gTnVtYmVyLmlzSW50ZWdlcihjaGFyYWN0ZXIuc2xvdCkgPyBjaGFyYWN0ZXIuc2xvdCA/PyBpbmRleCA6IGluZGV4KSk7XG4gICAgY29uc3QgdGFyZ2V0U2xvdCA9IG9wdGlvbnMuc2xvdEluZGV4ID8/IFswLCAxLCAyLCAzXS5maW5kKGluZGV4ID0+ICFvY2N1cGllZFNsb3RzLmhhcyhpbmRleCkpO1xuICAgIGlmICh0YXJnZXRTbG90ID09PSB1bmRlZmluZWQgfHwgb2NjdXBpZWRTbG90cy5oYXModGFyZ2V0U2xvdCkpIHtcbiAgICAgIHJldHVybiB7IGdhbWUsIHBsYXllZDogZmFsc2UsIHBsYXllZE9mZmVyaW5nVmFsdWU6IDAsIHNwZW50T2ZmZXJpbmdzOiAwLCBsb2c6IFtdIH07XG4gICAgfVxuICAgIHNwZW50T2ZmZXJpbmdzID0gY2FyZC5jb3N0ID8/IDA7XG4gICAgc3BlbmRPZmZlcmluZ3MocGxheWVyLCBzcGVudE9mZmVyaW5ncyk7XG4gICAgY29uc3QgbGlmZSA9IGNhcmQubGlmZSA/PyAxO1xuICAgIHBsYXllci5iYXR0bGVab25lLnB1c2goe1xuICAgICAgaW5zdGFuY2VJZDogYCR7c2VhdC50b0xvd2VyQ2FzZSgpfV8ke25leHQucmV2aXNpb24gKyAxfV8ke3BsYXllci5iYXR0bGVab25lLmxlbmd0aH1gLFxuICAgICAgY2FyZElkOiBjYXJkLmlkLFxuICAgICAgbmFtZTogZGlzcGxheU5hbWUsXG4gICAgICBvd25lcjogc2VhdCxcbiAgICAgIGNvbnRyb2xsZXI6IHNlYXQsXG4gICAgICBzbG90OiB0YXJnZXRTbG90LFxuICAgICAgYXR0YWNrOiBjYXJkLmF0dGFjayA/PyAwLFxuICAgICAgY3VycmVudEhwOiBsaWZlLFxuICAgICAgbWF4SHA6IGxpZmUsXG4gICAgICBjYW5BdHRhY2s6IGZhbHNlLFxuICAgIH0pO1xuICAgIHBsYXllci5iYXR0bGVab25lLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiAobGVmdC5zbG90ID8/IDApIC0gKHJpZ2h0LnNsb3QgPz8gMCkpO1xuICB9IGVsc2UgaWYgKGNhcmQudHlwZSA9PT0gJ3BsYWNlJykge1xuICAgIGNvbnN0IHByZXZpb3VzUGxhY2UgPSBuZXh0LnBsYWNlWm9uZVswXTtcbiAgICBpZiAocHJldmlvdXNQbGFjZSkge1xuICAgICAgbmV4dC5oaXN0b3J5Wm9uZS5wdXNoKHByZXZpb3VzUGxhY2UpO1xuICAgIH1cbiAgICBuZXh0LnBsYWNlWm9uZSA9IFtjYXJkLmlkXTtcbiAgfVxuXG4gIG5leHQucmV2aXNpb24rKztcbiAgY29uc3QgbG9nID0gW3BsYXlDYXJkTG9nKGNhcmQsIGRpc3BsYXlOYW1lKV07XG4gIG5leHQubG9nID0gWy4uLmxvZywgLi4ubmV4dC5sb2ddLnNsaWNlKDAsIDQpO1xuICByZXR1cm4geyBnYW1lOiBuZXh0LCBwbGF5ZWQ6IHRydWUsIHBsYXllZE9mZmVyaW5nVmFsdWUsIHNwZW50T2ZmZXJpbmdzLCBsb2cgfTtcbn1cblxuZnVuY3Rpb24gcGxheUNhcmRMb2coY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sIGRpc3BsYXlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKSByZXR1cm4gYCR7ZGlzcGxheU5hbWV9IHF1ZWRhIGxpc3RhIGNvbW8gb2ZyZW5kYS5gO1xuICBpZiAoY2FyZC50eXBlID09PSAncGxhY2UnKSByZXR1cm4gYCR7ZGlzcGxheU5hbWV9IHF1ZWRhIGNvbW8gbHVnYXIgYWN0aXZvLmA7XG4gIHJldHVybiBgJHtkaXNwbGF5TmFtZX0gZW50cmEgZW4gYmF0YWxsYS5gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUF0dGFja0xlYWRlcihcbiAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBhdHRhY2tlclNlYXQ6IENocmlzdGlhbml0eVNlYXQsXG4gIGF0dGFja2VySW5zdGFuY2VJZDogc3RyaW5nLFxuICBtZXNzYWdlczogQ2hyaXN0aWFuaXR5UnVsZU1lc3NhZ2VzLFxuKTogQ2hyaXN0aWFuaXR5QXR0YWNrUmVzdWx0IHtcbiAgY29uc3QgZGVmZW5kZXJTZWF0ID0gb3Bwb25lbnRTZWF0KGF0dGFja2VyU2VhdCk7XG4gIGlmIChnYW1lLnN0YXR1cyAhPT0gJ2luX3Byb2dyZXNzJyB8fCBnYW1lLnBsYXllcnNbZGVmZW5kZXJTZWF0XS5iYXR0bGVab25lLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4geyBnYW1lLCBhdHRhY2tlZDogZmFsc2UsIGF0dGFja2VyRGFtYWdlOiAwLCB0YXJnZXREYW1hZ2U6IDAsIGxvZzogW10gfTtcbiAgfVxuXG4gIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gIGNvbnN0IGF0dGFja2VyID0gbmV4dC5wbGF5ZXJzW2F0dGFja2VyU2VhdF0uYmF0dGxlWm9uZS5maW5kKGNhcmQgPT4gY2FyZC5pbnN0YW5jZUlkID09PSBhdHRhY2tlckluc3RhbmNlSWQpO1xuICBpZiAoIWF0dGFja2VyIHx8ICFhdHRhY2tlci5jYW5BdHRhY2spIHJldHVybiB7IGdhbWUsIGF0dGFja2VkOiBmYWxzZSwgYXR0YWNrZXJEYW1hZ2U6IDAsIHRhcmdldERhbWFnZTogMCwgbG9nOiBbXSB9O1xuXG4gIGNvbnN0IGRhbWFnZSA9IGF0dGFja2VyLmF0dGFjaztcbiAgbmV4dC5wbGF5ZXJzW2RlZmVuZGVyU2VhdF0ubGVhZGVySHAgPSBNYXRoLm1heCgwLCBuZXh0LnBsYXllcnNbZGVmZW5kZXJTZWF0XS5sZWFkZXJIcCAtIGRhbWFnZSk7XG4gIGF0dGFja2VyLmNhbkF0dGFjayA9IGZhbHNlO1xuICBjb25zdCBsb2cgPSBbYCR7YXR0YWNrZXIubmFtZX0gJHthdHRhY2tlclNlYXQgPT09ICdQMScgPyBtZXNzYWdlcy5hdHRhY2tzT3Bwb25lbnRMZWFkZXIgOiBtZXNzYWdlcy5hdHRhY2tzWW91ckxlYWRlcn1gXTtcbiAgZXZhbHVhdGVWaWN0b3J5KG5leHQsIGxvZywgbWVzc2FnZXMpO1xuICBuZXh0LnJldmlzaW9uKys7XG4gIG5leHQubG9nID0gWy4uLmxvZywgLi4ubmV4dC5sb2ddLnNsaWNlKDAsIDQpO1xuICByZXR1cm4geyBnYW1lOiBuZXh0LCBhdHRhY2tlZDogdHJ1ZSwgYXR0YWNrZXJEYW1hZ2U6IDAsIHRhcmdldERhbWFnZTogZGFtYWdlLCBsb2cgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVBdHRhY2tDaGFyYWN0ZXIoXG4gIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZSxcbiAgYXR0YWNrZXJTZWF0OiBDaHJpc3RpYW5pdHlTZWF0LFxuICBhdHRhY2tlckluc3RhbmNlSWQ6IHN0cmluZyxcbiAgdGFyZ2V0SW5zdGFuY2VJZDogc3RyaW5nLFxuICBtZXNzYWdlczogQ2hyaXN0aWFuaXR5UnVsZU1lc3NhZ2VzLFxuKTogQ2hyaXN0aWFuaXR5QXR0YWNrUmVzdWx0IHtcbiAgY29uc3QgZGVmZW5kZXJTZWF0ID0gb3Bwb25lbnRTZWF0KGF0dGFja2VyU2VhdCk7XG4gIGlmIChnYW1lLnN0YXR1cyAhPT0gJ2luX3Byb2dyZXNzJykgcmV0dXJuIHsgZ2FtZSwgYXR0YWNrZWQ6IGZhbHNlLCBhdHRhY2tlckRhbWFnZTogMCwgdGFyZ2V0RGFtYWdlOiAwLCBsb2c6IFtdIH07XG5cbiAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgY29uc3QgYXR0YWNrZXIgPSBuZXh0LnBsYXllcnNbYXR0YWNrZXJTZWF0XS5iYXR0bGVab25lLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IGF0dGFja2VySW5zdGFuY2VJZCk7XG4gIGNvbnN0IHRhcmdldCA9IG5leHQucGxheWVyc1tkZWZlbmRlclNlYXRdLmJhdHRsZVpvbmUuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gdGFyZ2V0SW5zdGFuY2VJZCk7XG4gIGlmICghYXR0YWNrZXIgfHwgIXRhcmdldCB8fCAhYXR0YWNrZXIuY2FuQXR0YWNrKSB7XG4gICAgcmV0dXJuIHsgZ2FtZSwgYXR0YWNrZWQ6IGZhbHNlLCBhdHRhY2tlckRhbWFnZTogMCwgdGFyZ2V0RGFtYWdlOiAwLCBsb2c6IFtdIH07XG4gIH1cblxuICB0YXJnZXQuY3VycmVudEhwIC09IGF0dGFja2VyLmF0dGFjaztcbiAgYXR0YWNrZXIuY3VycmVudEhwIC09IHRhcmdldC5hdHRhY2s7XG4gIGF0dGFja2VyLmNhbkF0dGFjayA9IGZhbHNlO1xuICBjbGVhbnVwRGVzdHJveWVkKG5leHQucGxheWVyc1thdHRhY2tlclNlYXRdLCBuZXh0KTtcbiAgY2xlYW51cERlc3Ryb3llZChuZXh0LnBsYXllcnNbZGVmZW5kZXJTZWF0XSwgbmV4dCk7XG4gIGNvbnN0IGxvZyA9IFtgJHthdHRhY2tlci5uYW1lfSAke21lc3NhZ2VzLmNvbWJhdHNBZ2FpbnN0fSAke3RhcmdldC5uYW1lfS5gXTtcbiAgZXZhbHVhdGVWaWN0b3J5KG5leHQsIGxvZywgbWVzc2FnZXMpO1xuICBuZXh0LnJldmlzaW9uKys7XG4gIG5leHQubG9nID0gWy4uLmxvZywgLi4ubmV4dC5sb2ddLnNsaWNlKDAsIDQpO1xuXG4gIHJldHVybiB7IGdhbWU6IG5leHQsIGF0dGFja2VkOiB0cnVlLCBhdHRhY2tlckRhbWFnZTogdGFyZ2V0LmF0dGFjaywgdGFyZ2V0RGFtYWdlOiBhdHRhY2tlci5hdHRhY2ssIGxvZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWR2YW5jZVR1cm4oZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLCBtZXNzYWdlczogQ2hyaXN0aWFuaXR5UnVsZU1lc3NhZ2VzKTogc3RyaW5nW10ge1xuICBnYW1lLnR1cm5Pd25lciA9IG9wcG9uZW50U2VhdChnYW1lLnR1cm5Pd25lcik7XG4gIGdhbWUudHVybkNvdW50Kys7XG4gIGNvbnN0IGN1cnJlbnQgPSBnYW1lLnBsYXllcnNbZ2FtZS50dXJuT3duZXJdO1xuICBjdXJyZW50Lm9mZmVyaW5nUGxheWVkVGhpc1R1cm4gPSBmYWxzZTtcbiAgY3VycmVudC5vZmZlcmluZ3MgPSBjdXJyZW50Lm9mZmVyaW5ncy5tYXAob2ZmZXJpbmcgPT4gKHsgLi4ub2ZmZXJpbmcsIHJlYWR5OiB0cnVlIH0pKTtcbiAgY3VycmVudC5iYXR0bGVab25lID0gY3VycmVudC5iYXR0bGVab25lLm1hcChjYXJkID0+ICh7IC4uLmNhcmQsIGNhbkF0dGFjazogdHJ1ZSB9KSk7XG4gIGNvbnN0IGRyYXduQ2FyZCA9IGdhbWUuc2hhcmVkRGVjay5zaGlmdCgpO1xuICBpZiAoZHJhd25DYXJkKSB7XG4gICAgaWYgKGN1cnJlbnQuaGFuZCkge1xuICAgICAgY3VycmVudC5oYW5kLnB1c2goZHJhd25DYXJkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudC5oYW5kQ291bnQgPSAoY3VycmVudC5oYW5kQ291bnQgPz8gMCkgKyAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW1xuICAgIGRyYXduQ2FyZCA/IGAke2N1cnJlbnQuZGlzcGxheU5hbWV9ICR7bWVzc2FnZXMuZHJhd3NDYXJkfWAgOiBtZXNzYWdlcy5kZWNrSXNFbXB0eSxcbiAgICBgJHttZXNzYWdlcy50dXJuT2Z9ICR7Y3VycmVudC5kaXNwbGF5TmFtZX0uYCxcbiAgXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlVmljdG9yeShnYW1lOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsIGxvZzogc3RyaW5nW10sIG1lc3NhZ2VzOiBDaHJpc3RpYW5pdHlSdWxlTWVzc2FnZXMpOiB2b2lkIHtcbiAgaWYgKGdhbWUucGxheWVycy5QMS5sZWFkZXJIcCA+IDAgJiYgZ2FtZS5wbGF5ZXJzLlAyLmxlYWRlckhwID4gMCkgcmV0dXJuO1xuICBnYW1lLnN0YXR1cyA9ICdmaW5pc2hlZCc7XG4gIGNvbnN0IHdpbm5lcjogQ2hyaXN0aWFuaXR5U2VhdCA9IGdhbWUucGxheWVycy5QMS5sZWFkZXJIcCA8PSAwID8gJ1AyJyA6ICdQMSc7XG4gIGdhbWUubWF0Y2hTY29yZVt3aW5uZXJdICs9IDE7XG4gIGxvZy5wdXNoKHdpbm5lciA9PT0gJ1AxJyA/IG1lc3NhZ2VzLnlvdVdpbiA6IG1lc3NhZ2VzLm9wcG9uZW50V2lucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwRGVzdHJveWVkKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUsIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZSk6IHZvaWQge1xuICBjb25zdCBkZXN0cm95ZWQgPSBwbGF5ZXIuYmF0dGxlWm9uZS5maWx0ZXIoY2FyZCA9PiBjYXJkLmN1cnJlbnRIcCA8PSAwKTtcbiAgaWYgKCFkZXN0cm95ZWQubGVuZ3RoKSByZXR1cm47XG4gIGdhbWUuaGlzdG9yeVpvbmUucHVzaCguLi5kZXN0cm95ZWQubWFwKGNhcmQgPT4gY2FyZC5jYXJkSWQpKTtcbiAgcGxheWVyLmJhdHRsZVpvbmUgPSBwbGF5ZXIuYmF0dGxlWm9uZS5maWx0ZXIoY2FyZCA9PiBjYXJkLmN1cnJlbnRIcCA+IDApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BlbmRPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSwgY29zdDogbnVtYmVyKTogdm9pZCB7XG4gIGxldCByZW1haW5pbmcgPSBjb3N0O1xuICBwbGF5ZXIub2ZmZXJpbmdzID0gcGxheWVyLm9mZmVyaW5ncy5tYXAob2ZmZXJpbmcgPT4ge1xuICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCAhb2ZmZXJpbmcucmVhZHkpIHJldHVybiBvZmZlcmluZztcbiAgICByZW1haW5pbmcgLT0gb2ZmZXJpbmcudmFsdWU7XG4gICAgcmV0dXJuIHsgLi4ub2ZmZXJpbmcsIHJlYWR5OiBmYWxzZSB9O1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wcG9uZW50U2VhdChzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogQ2hyaXN0aWFuaXR5U2VhdCB7XG4gIHJldHVybiBzZWF0ID09PSAnUDEnID8gJ1AyJyA6ICdQMSc7XG59XG4iXX0=