israeli-bank-scrapers 6.4.2 → 6.5.0

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.
@@ -56,7 +56,7 @@ function createLoginFields(credentials) {
56
56
  value: credentials.password
57
57
  }];
58
58
  }
59
- function extractTransactionsFromPage(transactions, status) {
59
+ function extractTransactionsFromPage(transactions, status, options) {
60
60
  if (transactions === null || transactions.length === 0) {
61
61
  return [];
62
62
  }
@@ -74,6 +74,9 @@ function extractTransactionsFromPage(transactions, status) {
74
74
  chargedAmount: rawTransaction.Amount,
75
75
  originalAmount: rawTransaction.Amount
76
76
  };
77
+ if (options?.includeRawTransaction) {
78
+ newTransaction.rawTransaction = rawTransaction;
79
+ }
77
80
  return newTransaction;
78
81
  });
79
82
  return result;
@@ -96,7 +99,7 @@ async function clickByXPath(page, xpath) {
96
99
  function removeSpecialCharacters(str) {
97
100
  return str.replace(/[^0-9/-]/g, '');
98
101
  }
99
- async function fetchTransactionsForAccount(page, startDate, accountId) {
102
+ async function fetchTransactionsForAccount(page, startDate, accountId, options) {
100
103
  // DEVELOPER NOTICE the account number received from the server is being altered at
101
104
  // runtime for some accounts after 1-2 seconds so we need to hang the process for a short while.
102
105
  await hangProcess(4000);
@@ -119,8 +122,8 @@ async function fetchTransactionsForAccount(page, startDate, accountId) {
119
122
  const pendingTransactions = response.TodayTransactionsItems;
120
123
  const transactions = response.HistoryTransactionsItems;
121
124
  const balance = response.BalanceDisplay ? parseFloat(response.BalanceDisplay) : undefined;
122
- const pendingTxns = extractTransactionsFromPage(pendingTransactions, _transactions.TransactionStatuses.Pending);
123
- const completedTxns = extractTransactionsFromPage(transactions, _transactions.TransactionStatuses.Completed);
125
+ const pendingTxns = extractTransactionsFromPage(pendingTransactions, _transactions.TransactionStatuses.Pending, options);
126
+ const completedTxns = extractTransactionsFromPage(transactions, _transactions.TransactionStatuses.Completed, options);
124
127
  const txns = [...pendingTxns, ...completedTxns];
125
128
  return {
126
129
  accountNumber,
@@ -128,7 +131,7 @@ async function fetchTransactionsForAccount(page, startDate, accountId) {
128
131
  txns
129
132
  };
130
133
  }
131
- async function fetchTransactions(page, startDate) {
134
+ async function fetchTransactions(page, startDate, options) {
132
135
  const accounts = [];
133
136
 
134
137
  // DEVELOPER NOTICE the account number received from the server is being altered at
@@ -147,7 +150,7 @@ async function fetchTransactions(page, startDate) {
147
150
  await clickByXPath(page, 'xpath///*[contains(@class, "number") and contains(@class, "combo-inner")]');
148
151
  await clickByXPath(page, `xpath///span[contains(text(), '${accountId}')]`);
149
152
  }
150
- accounts.push(await fetchTransactionsForAccount(page, startDate, removeSpecialCharacters(accountId)));
153
+ accounts.push(await fetchTransactionsForAccount(page, startDate, removeSpecialCharacters(accountId), options));
151
154
  }
152
155
  return accounts;
153
156
  }
@@ -189,7 +192,7 @@ class LeumiScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
189
192
  const startDate = this.options.startDate || defaultStartMoment.toDate();
190
193
  const startMoment = _moment.default.max(minimumStartMoment, (0, _moment.default)(startDate));
191
194
  await this.navigateTo(TRANSACTIONS_URL);
192
- const accounts = await fetchTransactions(this.page, startMoment);
195
+ const accounts = await fetchTransactions(this.page, startMoment, this.options);
193
196
  return {
194
197
  success: true,
195
198
  accounts
@@ -197,4 +200,4 @@ class LeumiScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
197
200
  }
198
201
  }
199
202
  var _default = exports.default = LeumiScraper;
200
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2RlYnVnIiwiX2VsZW1lbnRzSW50ZXJhY3Rpb25zIiwiX25hdmlnYXRpb24iLCJfdHJhbnNhY3Rpb25zIiwiX2Jhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJkZWJ1ZyIsImdldERlYnVnIiwiQkFTRV9VUkwiLCJMT0dJTl9VUkwiLCJUUkFOU0FDVElPTlNfVVJMIiwiRklMVEVSRURfVFJBTlNBQ1RJT05TX1VSTCIsIkRBVEVfRk9STUFUIiwiQUNDT1VOVF9CTE9DS0VEX01TRyIsIklOVkFMSURfUEFTU1dPUkRfTVNHIiwiZ2V0UG9zc2libGVMb2dpblJlc3VsdHMiLCJ1cmxzIiwiTG9naW5SZXN1bHRzIiwiU3VjY2VzcyIsIkludmFsaWRQYXNzd29yZCIsIm9wdGlvbnMiLCJwYWdlIiwiRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJwYWdlRXZhbEFsbCIsImVsZW1lbnQiLCJwYXJlbnRFbGVtZW50IiwiY2hpbGRyZW4iLCJpbm5lclRleHQiLCJzdGFydHNXaXRoIiwiQWNjb3VudEJsb2NrZWQiLCJsYWJlbCIsIkNoYW5nZVBhc3N3b3JkIiwiY3JlYXRlTG9naW5GaWVsZHMiLCJjcmVkZW50aWFscyIsInNlbGVjdG9yIiwidmFsdWUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiZXh0cmFjdFRyYW5zYWN0aW9uc0Zyb21QYWdlIiwidHJhbnNhY3Rpb25zIiwic3RhdHVzIiwibGVuZ3RoIiwicmVzdWx0IiwibWFwIiwicmF3VHJhbnNhY3Rpb24iLCJkYXRlIiwibW9tZW50IiwiRGF0ZVVUQyIsIm1pbGxpc2Vjb25kcyIsInRvSVNPU3RyaW5nIiwibmV3VHJhbnNhY3Rpb24iLCJ0eXBlIiwiVHJhbnNhY3Rpb25UeXBlcyIsIk5vcm1hbCIsInByb2Nlc3NlZERhdGUiLCJkZXNjcmlwdGlvbiIsIkRlc2NyaXB0aW9uIiwiaWRlbnRpZmllciIsIlJlZmVyZW5jZU51bWJlckxvbmciLCJtZW1vIiwiQWRkaXRpb25hbERhdGEiLCJvcmlnaW5hbEN1cnJlbmN5IiwiU0hFS0VMX0NVUlJFTkNZIiwiY2hhcmdlZEFtb3VudCIsIkFtb3VudCIsIm9yaWdpbmFsQW1vdW50IiwiaGFuZ1Byb2Nlc3MiLCJ0aW1lb3V0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwiY2xpY2tCeVhQYXRoIiwieHBhdGgiLCJ3YWl0Rm9yU2VsZWN0b3IiLCJ2aXNpYmxlIiwiZWxtIiwiJCQiLCJjbGljayIsInJlbW92ZVNwZWNpYWxDaGFyYWN0ZXJzIiwic3RyIiwicmVwbGFjZSIsImZldGNoVHJhbnNhY3Rpb25zRm9yQWNjb3VudCIsInN0YXJ0RGF0ZSIsImFjY291bnRJZCIsIndhaXRVbnRpbEVsZW1lbnRGb3VuZCIsImNsaWNrQnV0dG9uIiwiZmlsbElucHV0IiwiZm9ybWF0IiwiZm9jdXMiLCJmaW5hbFJlc3BvbnNlIiwid2FpdEZvclJlc3BvbnNlIiwicmVzcG9uc2UiLCJ1cmwiLCJyZXF1ZXN0IiwibWV0aG9kIiwicmVzcG9uc2VKc29uIiwianNvbiIsImFjY291bnROdW1iZXIiLCJKU09OIiwicGFyc2UiLCJqc29uUmVzcCIsInBlbmRpbmdUcmFuc2FjdGlvbnMiLCJUb2RheVRyYW5zYWN0aW9uc0l0ZW1zIiwiSGlzdG9yeVRyYW5zYWN0aW9uc0l0ZW1zIiwiYmFsYW5jZSIsIkJhbGFuY2VEaXNwbGF5IiwicGFyc2VGbG9hdCIsInVuZGVmaW5lZCIsInBlbmRpbmdUeG5zIiwiVHJhbnNhY3Rpb25TdGF0dXNlcyIsIlBlbmRpbmciLCJjb21wbGV0ZWRUeG5zIiwiQ29tcGxldGVkIiwidHhucyIsImZldGNoVHJhbnNhY3Rpb25zIiwiYWNjb3VudHMiLCJhY2NvdW50c0lkcyIsImV2YWx1YXRlIiwiQXJyYXkiLCJmcm9tIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwidGV4dENvbnRlbnQiLCJwdXNoIiwibmF2aWdhdGVUb0xvZ2luIiwibG9naW5CdXR0b25TZWxlY3RvciIsImxvZ2luVXJsIiwicGFnZUV2YWwiLCJocmVmIiwiZ290byIsIndhaXRGb3JOYXZpZ2F0aW9uIiwid2FpdFVudGlsIiwiYWxsIiwid2FpdEZvclBvc3RMb2dpbiIsInJhY2UiLCJMZXVtaVNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZ2V0TG9naW5PcHRpb25zIiwiZmllbGRzIiwic3VibWl0QnV0dG9uU2VsZWN0b3IiLCJjaGVja1JlYWRpbmVzcyIsInBvc3RBY3Rpb24iLCJwb3NzaWJsZVJlc3VsdHMiLCJmZXRjaERhdGEiLCJtaW5pbXVtU3RhcnRNb21lbnQiLCJzdWJ0cmFjdCIsImFkZCIsImRlZmF1bHRTdGFydE1vbWVudCIsInRvRGF0ZSIsInN0YXJ0TW9tZW50IiwibWF4IiwibmF2aWdhdGVUbyIsInN1Y2Nlc3MiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyYXBlcnMvbGV1bWkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCwgeyB0eXBlIE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyB0eXBlIFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHsgU0hFS0VMX0NVUlJFTkNZIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQgeyBjbGlja0J1dHRvbiwgZmlsbElucHV0LCBwYWdlRXZhbCwgcGFnZUV2YWxBbGwsIHdhaXRVbnRpbEVsZW1lbnRGb3VuZCB9IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IHdhaXRGb3JOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vaGVscGVycy9uYXZpZ2F0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uU3RhdHVzZXMsIFRyYW5zYWN0aW9uVHlwZXMsIHR5cGUgVHJhbnNhY3Rpb24sIHR5cGUgVHJhbnNhY3Rpb25zQWNjb3VudCB9IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBCYXNlU2NyYXBlcldpdGhCcm93c2VyLCBMb2dpblJlc3VsdHMsIHR5cGUgTG9naW5PcHRpb25zIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyJztcbmltcG9ydCB7IHR5cGUgU2NyYXBlclNjcmFwaW5nUmVzdWx0IH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuXG5jb25zdCBkZWJ1ZyA9IGdldERlYnVnKCdsZXVtaScpO1xuY29uc3QgQkFTRV9VUkwgPSAnaHR0cHM6Ly9oYjIuYmFua2xldW1pLmNvLmlsJztcbmNvbnN0IExPR0lOX1VSTCA9ICdodHRwczovL3d3dy5sZXVtaS5jby5pbC8nO1xuY29uc3QgVFJBTlNBQ1RJT05TX1VSTCA9IGAke0JBU0VfVVJMfS9lQmFua2luZy9TTy9TUEEuYXNweCMvdHMvQnVzaW5lc3NBY2NvdW50VHJ4P1dpZGdldFBhcj0xYDtcbmNvbnN0IEZJTFRFUkVEX1RSQU5TQUNUSU9OU19VUkwgPSBgJHtCQVNFX1VSTH0vQ2hhbm5lbFdDRi9Ccm9rZXIuc3ZjL1Byb2Nlc3NSZXF1ZXN0P21vZHVsZU5hbWU9VUNfU09fMjdfR2V0QnVzaW5lc3NBY2NvdW50VHJ4YDtcblxuY29uc3QgREFURV9GT1JNQVQgPSAnREQuTU0uWVknO1xuY29uc3QgQUNDT1VOVF9CTE9DS0VEX01TRyA9ICfXlNee16DXldeZINeX16HXldedJztcbmNvbnN0IElOVkFMSURfUEFTU1dPUkRfTVNHID0gJ9eQ15fXkyDXkNeVINeZ15XXqteoINee16TXqNeY15kg15TXlNeW15PXlNeV16og16nXnteh16jXqiDXqdeS15XXmdeZ150uINeg15nXqtefINec16DXodeV16og16nXldeRJztcblxuZnVuY3Rpb24gZ2V0UG9zc2libGVMb2dpblJlc3VsdHMoKSB7XG4gIGNvbnN0IHVybHM6IExvZ2luT3B0aW9uc1sncG9zc2libGVSZXN1bHRzJ10gPSB7XG4gICAgW0xvZ2luUmVzdWx0cy5TdWNjZXNzXTogWy9lYmFua2luZ1xcL1NPXFwvU1BBLmFzcHgvaV0sXG4gICAgW0xvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmRdOiBbXG4gICAgICBhc3luYyBvcHRpb25zID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLnBhZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcGFnZSBvcHRpb25zIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYXdhaXQgcGFnZUV2YWxBbGwob3B0aW9ucy5wYWdlLCAnc3ZnI0NhcGFfMScsICcnLCBlbGVtZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4gKGVsZW1lbnRbMF0/LnBhcmVudEVsZW1lbnQ/LmNoaWxkcmVuWzFdIGFzIEhUTUxEaXZFbGVtZW50KT8uaW5uZXJUZXh0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlPy5zdGFydHNXaXRoKElOVkFMSURfUEFTU1dPUkRfTVNHKTtcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbTG9naW5SZXN1bHRzLkFjY291bnRCbG9ja2VkXTogW1xuICAgICAgLy8gTk9USUNFIC0gbWlnaHQgbm90IGJlIHJlbGV2YW50IHN0YXJ0aW5nIHRoZSBMZXVtaSByZS1kZXNpZ24gZHVyaW5nIDIwMjIgU2VwXG4gICAgICBhc3luYyBvcHRpb25zID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLnBhZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcGFnZSBvcHRpb25zIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYXdhaXQgcGFnZUV2YWxBbGwob3B0aW9ucy5wYWdlLCAnLmVyckhlYWRlcicsICcnLCBsYWJlbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIChsYWJlbFswXSBhcyBIVE1MRWxlbWVudCk/LmlubmVyVGV4dDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZT8uc3RhcnRzV2l0aChBQ0NPVU5UX0JMT0NLRURfTVNHKTtcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbTG9naW5SZXN1bHRzLkNoYW5nZVBhc3N3b3JkXTogWydodHRwczovL2hiMi5iYW5rbGV1bWkuY28uaWwvYXV0aGVudGljYXRlJ10sIC8vIE5PVElDRSAtIG1pZ2h0IG5vdCBiZSByZWxldmFudCBzdGFydGluZyB0aGUgTGV1bWkgcmUtZGVzaWduIGR1cmluZyAyMDIyIFNlcFxuICB9O1xuICByZXR1cm4gdXJscztcbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gIHJldHVybiBbXG4gICAgeyBzZWxlY3RvcjogJ2lucHV0W3BsYWNlaG9sZGVyPVwi16nXnSDXntep16rXntepXCJdJywgdmFsdWU6IGNyZWRlbnRpYWxzLnVzZXJuYW1lIH0sXG4gICAgeyBzZWxlY3RvcjogJ2lucHV0W3BsYWNlaG9sZGVyPVwi16HXmdeh157XlFwiXScsIHZhbHVlOiBjcmVkZW50aWFscy5wYXNzd29yZCB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VHJhbnNhY3Rpb25zRnJvbVBhZ2UodHJhbnNhY3Rpb25zOiBhbnlbXSwgc3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzKTogVHJhbnNhY3Rpb25bXSB7XG4gIGlmICh0cmFuc2FjdGlvbnMgPT09IG51bGwgfHwgdHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogVHJhbnNhY3Rpb25bXSA9IHRyYW5zYWN0aW9ucy5tYXAocmF3VHJhbnNhY3Rpb24gPT4ge1xuICAgIGNvbnN0IGRhdGUgPSBtb21lbnQocmF3VHJhbnNhY3Rpb24uRGF0ZVVUQykubWlsbGlzZWNvbmRzKDApLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgbmV3VHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWwsXG4gICAgICBkYXRlLFxuICAgICAgcHJvY2Vzc2VkRGF0ZTogZGF0ZSxcbiAgICAgIGRlc2NyaXB0aW9uOiByYXdUcmFuc2FjdGlvbi5EZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgIGlkZW50aWZpZXI6IHJhd1RyYW5zYWN0aW9uLlJlZmVyZW5jZU51bWJlckxvbmcsXG4gICAgICBtZW1vOiByYXdUcmFuc2FjdGlvbi5BZGRpdGlvbmFsRGF0YSB8fCAnJyxcbiAgICAgIG9yaWdpbmFsQ3VycmVuY3k6IFNIRUtFTF9DVVJSRU5DWSxcbiAgICAgIGNoYXJnZWRBbW91bnQ6IHJhd1RyYW5zYWN0aW9uLkFtb3VudCxcbiAgICAgIG9yaWdpbmFsQW1vdW50OiByYXdUcmFuc2FjdGlvbi5BbW91bnQsXG4gICAgfTtcblxuICAgIHJldHVybiBuZXdUcmFuc2FjdGlvbjtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gaGFuZ1Byb2Nlc3ModGltZW91dDogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9LCB0aW1lb3V0KTtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsaWNrQnlYUGF0aChwYWdlOiBQYWdlLCB4cGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHBhZ2Uud2FpdEZvclNlbGVjdG9yKHhwYXRoLCB7IHRpbWVvdXQ6IDMwMDAwLCB2aXNpYmxlOiB0cnVlIH0pO1xuICBjb25zdCBlbG0gPSBhd2FpdCBwYWdlLiQkKHhwYXRoKTtcbiAgYXdhaXQgZWxtWzBdLmNsaWNrKCk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNwZWNpYWxDaGFyYWN0ZXJzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bXjAtOS8tXS9nLCAnJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoVHJhbnNhY3Rpb25zRm9yQWNjb3VudChcbiAgcGFnZTogUGFnZSxcbiAgc3RhcnREYXRlOiBNb21lbnQsXG4gIGFjY291bnRJZDogc3RyaW5nLFxuKTogUHJvbWlzZTxUcmFuc2FjdGlvbnNBY2NvdW50PiB7XG4gIC8vIERFVkVMT1BFUiBOT1RJQ0UgdGhlIGFjY291bnQgbnVtYmVyIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBpcyBiZWluZyBhbHRlcmVkIGF0XG4gIC8vIHJ1bnRpbWUgZm9yIHNvbWUgYWNjb3VudHMgYWZ0ZXIgMS0yIHNlY29uZHMgc28gd2UgbmVlZCB0byBoYW5nIHRoZSBwcm9jZXNzIGZvciBhIHNob3J0IHdoaWxlLlxuICBhd2FpdCBoYW5nUHJvY2Vzcyg0MDAwKTtcblxuICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJ2J1dHRvblt0aXRsZT1cIteX15nXpNeV16kg157Xqten15PXnVwiXScsIHRydWUpO1xuICBhd2FpdCBjbGlja0J1dHRvbihwYWdlLCAnYnV0dG9uW3RpdGxlPVwi15fXmdek15XXqSDXnteq16fXk9edXCJdJyk7XG4gIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAnYmxsLXJhZGlvLWJ1dHRvbicsIHRydWUpO1xuICBhd2FpdCBjbGlja0J1dHRvbihwYWdlLCAnYmxsLXJhZGlvLWJ1dHRvbjpub3QoW2NoZWNrZWRdKScpO1xuXG4gIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAnaW5wdXRbZm9ybWNvbnRyb2xuYW1lPVwidHh0SW5wdXRGcm9tXCJdJywgdHJ1ZSk7XG5cbiAgYXdhaXQgZmlsbElucHV0KHBhZ2UsICdpbnB1dFtmb3JtY29udHJvbG5hbWU9XCJ0eHRJbnB1dEZyb21cIl0nLCBzdGFydERhdGUuZm9ybWF0KERBVEVfRk9STUFUKSk7XG5cbiAgLy8gd2UgbXVzdCBibHVyIHRoZSBmcm9tIGNvbnRyb2wgb3RoZXJ3aXNlIHRoZSBzZWFyY2ggd2lsbCB1c2UgdGhlIHByZXZpb3VzIHZhbHVlXG4gIGF3YWl0IHBhZ2UuZm9jdXMoXCJidXR0b25bYXJpYS1sYWJlbD0n16HXoNefJ11cIik7XG5cbiAgYXdhaXQgY2xpY2tCdXR0b24ocGFnZSwgXCJidXR0b25bYXJpYS1sYWJlbD0n16HXoNefJ11cIik7XG4gIGNvbnN0IGZpbmFsUmVzcG9uc2UgPSBhd2FpdCBwYWdlLndhaXRGb3JSZXNwb25zZShyZXNwb25zZSA9PiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnVybCgpID09PSBGSUxURVJFRF9UUkFOU0FDVElPTlNfVVJMICYmIHJlc3BvbnNlLnJlcXVlc3QoKS5tZXRob2QoKSA9PT0gJ1BPU1QnO1xuICB9KTtcblxuICBjb25zdCByZXNwb25zZUpzb246IGFueSA9IGF3YWl0IGZpbmFsUmVzcG9uc2UuanNvbigpO1xuXG4gIGNvbnN0IGFjY291bnROdW1iZXIgPSBhY2NvdW50SWQucmVwbGFjZSgnLycsICdfJykucmVwbGFjZSgvW15cXGQtX10vZywgJycpO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXNwb25zZUpzb24uanNvblJlc3ApO1xuXG4gIGNvbnN0IHBlbmRpbmdUcmFuc2FjdGlvbnMgPSByZXNwb25zZS5Ub2RheVRyYW5zYWN0aW9uc0l0ZW1zO1xuICBjb25zdCB0cmFuc2FjdGlvbnMgPSByZXNwb25zZS5IaXN0b3J5VHJhbnNhY3Rpb25zSXRlbXM7XG4gIGNvbnN0IGJhbGFuY2UgPSByZXNwb25zZS5CYWxhbmNlRGlzcGxheSA/IHBhcnNlRmxvYXQocmVzcG9uc2UuQmFsYW5jZURpc3BsYXkpIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHBlbmRpbmdUeG5zID0gZXh0cmFjdFRyYW5zYWN0aW9uc0Zyb21QYWdlKHBlbmRpbmdUcmFuc2FjdGlvbnMsIFRyYW5zYWN0aW9uU3RhdHVzZXMuUGVuZGluZyk7XG4gIGNvbnN0IGNvbXBsZXRlZFR4bnMgPSBleHRyYWN0VHJhbnNhY3Rpb25zRnJvbVBhZ2UodHJhbnNhY3Rpb25zLCBUcmFuc2FjdGlvblN0YXR1c2VzLkNvbXBsZXRlZCk7XG4gIGNvbnN0IHR4bnMgPSBbLi4ucGVuZGluZ1R4bnMsIC4uLmNvbXBsZXRlZFR4bnNdO1xuXG4gIHJldHVybiB7XG4gICAgYWNjb3VudE51bWJlcixcbiAgICBiYWxhbmNlLFxuICAgIHR4bnMsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoVHJhbnNhY3Rpb25zKHBhZ2U6IFBhZ2UsIHN0YXJ0RGF0ZTogTW9tZW50KTogUHJvbWlzZTxUcmFuc2FjdGlvbnNBY2NvdW50W10+IHtcbiAgY29uc3QgYWNjb3VudHM6IFRyYW5zYWN0aW9uc0FjY291bnRbXSA9IFtdO1xuXG4gIC8vIERFVkVMT1BFUiBOT1RJQ0UgdGhlIGFjY291bnQgbnVtYmVyIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBpcyBiZWluZyBhbHRlcmVkIGF0XG4gIC8vIHJ1bnRpbWUgZm9yIHNvbWUgYWNjb3VudHMgYWZ0ZXIgMS0yIHNlY29uZHMgc28gd2UgbmVlZCB0byBoYW5nIHRoZSBwcm9jZXNzIGZvciBhIHNob3J0IHdoaWxlLlxuICBhd2FpdCBoYW5nUHJvY2Vzcyg0MDAwKTtcblxuICBjb25zdCBhY2NvdW50c0lkcyA9IChhd2FpdCBwYWdlLmV2YWx1YXRlKCgpID0+XG4gICAgQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhcHAtbWFza2VkLW51bWJlci1jb21ibyBzcGFuLmRpc3BsYXktbnVtYmVyLWxpJyksIGUgPT4gZS50ZXh0Q29udGVudCksXG4gICkpIGFzIHN0cmluZ1tdO1xuXG4gIC8vIGR1ZSB0byBhIGJ1ZywgdGhlIGFsdGVyZWQgdmFsdWUgbWlnaHQgaW5jbHVkZSB1bmRlc2lyZWQgc2lnbnMgbGlrZSAmIHRoYXQgc2hvdWxkIGJlIHJlbW92ZWRcblxuICBpZiAoIWFjY291bnRzSWRzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGV4dHJhY3Qgb3IgcGFyc2UgdGhlIGFjY291bnQgbnVtYmVyJyk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGFjY291bnRJZCBvZiBhY2NvdW50c0lkcykge1xuICAgIGlmIChhY2NvdW50c0lkcy5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBnZXQgbGlzdCBvZiBhY2NvdW50cyBhbmQgY2hlY2sgYWNjb3VudElkXG4gICAgICBhd2FpdCBjbGlja0J5WFBhdGgocGFnZSwgJ3hwYXRoLy8vKltjb250YWlucyhAY2xhc3MsIFwibnVtYmVyXCIpIGFuZCBjb250YWlucyhAY2xhc3MsIFwiY29tYm8taW5uZXJcIildJyk7XG4gICAgICBhd2FpdCBjbGlja0J5WFBhdGgocGFnZSwgYHhwYXRoLy8vc3Bhbltjb250YWlucyh0ZXh0KCksICcke2FjY291bnRJZH0nKV1gKTtcbiAgICB9XG5cbiAgICBhY2NvdW50cy5wdXNoKGF3YWl0IGZldGNoVHJhbnNhY3Rpb25zRm9yQWNjb3VudChwYWdlLCBzdGFydERhdGUsIHJlbW92ZVNwZWNpYWxDaGFyYWN0ZXJzKGFjY291bnRJZCkpKTtcbiAgfVxuXG4gIHJldHVybiBhY2NvdW50cztcbn1cblxuYXN5bmMgZnVuY3Rpb24gbmF2aWdhdGVUb0xvZ2luKHBhZ2U6IFBhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgbG9naW5CdXR0b25TZWxlY3RvciA9ICcuZW50ZXItYWNjb3VudCBhW29yaWdpbmFsdGl0bGU9XCLXm9eg15nXodeUINec15fXqdeR15XXoNeaXCJdJztcbiAgZGVidWcoJ3dhaXQgZm9yIGhvbWVwYWdlIHRvIGNsaWNrIG9uIGxvZ2luIGJ1dHRvbicpO1xuICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgbG9naW5CdXR0b25TZWxlY3Rvcik7XG4gIGRlYnVnKCduYXZpZ2F0ZSB0byBsb2dpbiBwYWdlJyk7XG4gIGNvbnN0IGxvZ2luVXJsID0gYXdhaXQgcGFnZUV2YWwocGFnZSwgbG9naW5CdXR0b25TZWxlY3RvciwgbnVsbCwgZWxlbWVudCA9PiB7XG4gICAgcmV0dXJuIChlbGVtZW50IGFzIGFueSkuaHJlZjtcbiAgfSk7XG4gIGRlYnVnKGBuYXZpZ2F0aW5nIHRvIHBhZ2UgKCR7bG9naW5Vcmx9KWApO1xuICBhd2FpdCBwYWdlLmdvdG8obG9naW5VcmwpO1xuICBkZWJ1Zygnd2FpdGluZyBmb3IgcGFnZSB0byBiZSBsb2FkZWQgKG5ldHdvcmtpZGxlMiknKTtcbiAgYXdhaXQgd2FpdEZvck5hdmlnYXRpb24ocGFnZSwgeyB3YWl0VW50aWw6ICduZXR3b3JraWRsZTInIH0pO1xuICBkZWJ1Zygnd2FpdGluZyBmb3IgY29tcG9uZW50cyBvZiBsb2dpbiB0byBlbnRlciBjcmVkZW50aWFscycpO1xuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICdpbnB1dFtwbGFjZWhvbGRlcj1cItep150g157Xqdeq157XqVwiXScsIHRydWUpLFxuICAgIHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAnaW5wdXRbcGxhY2Vob2xkZXI9XCLXodeZ16HXnteUXCJdJywgdHJ1ZSksXG4gICAgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICdidXR0b25bdHlwZT1cInN1Ym1pdFwiXScsIHRydWUpLFxuICBdKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvclBvc3RMb2dpbihwYWdlOiBQYWdlKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICdhW3RpdGxlPVwi15PXnNeSINec15fXqdeR15XXn1wiXScsIHRydWUsIDYwMDAwKSxcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJ2Rpdi5tYWluLWNvbnRlbnQnLCBmYWxzZSwgNjAwMDApLFxuICAgIHBhZ2Uud2FpdEZvclNlbGVjdG9yKGB4cGF0aC8vZGl2W2NvbnRhaW5zKHN0cmluZygpLFwiJHtJTlZBTElEX1BBU1NXT1JEX01TR31cIildYCksXG4gICAgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICdmb3JtW2FjdGlvbj1cIi9jaGFuZ2VwYXNzd29yZFwiXScsIHRydWUsIDYwMDAwKSwgLy8gbm90IHN1cmUgaWYgdGhleSBrZXB0IHRoaXMgb25lXG4gIF0pO1xufVxuXG50eXBlIFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzID0geyB1c2VybmFtZTogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH07XG5cbmNsYXNzIExldW1pU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyV2l0aEJyb3dzZXI8U2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHM+IHtcbiAgZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscykge1xuICAgIHJldHVybiB7XG4gICAgICBsb2dpblVybDogTE9HSU5fVVJMLFxuICAgICAgZmllbGRzOiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFscyksXG4gICAgICBzdWJtaXRCdXR0b25TZWxlY3RvcjogXCJidXR0b25bdHlwZT0nc3VibWl0J11cIixcbiAgICAgIGNoZWNrUmVhZGluZXNzOiBhc3luYyAoKSA9PiBuYXZpZ2F0ZVRvTG9naW4odGhpcy5wYWdlKSxcbiAgICAgIHBvc3RBY3Rpb246IGFzeW5jICgpID0+IHdhaXRGb3JQb3N0TG9naW4odGhpcy5wYWdlKSxcbiAgICAgIHBvc3NpYmxlUmVzdWx0czogZ2V0UG9zc2libGVMb2dpblJlc3VsdHMoKSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hEYXRhKCk6IFByb21pc2U8U2NyYXBlclNjcmFwaW5nUmVzdWx0PiB7XG4gICAgY29uc3QgbWluaW11bVN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMywgJ3llYXJzJykuYWRkKDEsICdkYXknKTtcbiAgICBjb25zdCBkZWZhdWx0U3RhcnRNb21lbnQgPSBtb21lbnQoKS5zdWJ0cmFjdCgxLCAneWVhcnMnKS5hZGQoMSwgJ2RheScpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMub3B0aW9ucy5zdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbW9tZW50Lm1heChtaW5pbXVtU3RhcnRNb21lbnQsIG1vbWVudChzdGFydERhdGUpKTtcblxuICAgIGF3YWl0IHRoaXMubmF2aWdhdGVUbyhUUkFOU0FDVElPTlNfVVJMKTtcblxuICAgIGNvbnN0IGFjY291bnRzID0gYXdhaXQgZmV0Y2hUcmFuc2FjdGlvbnModGhpcy5wYWdlLCBzdGFydE1vbWVudCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIGFjY291bnRzLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGV1bWlTY3JhcGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxxQkFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssYUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sdUJBQUEsR0FBQU4sT0FBQTtBQUFzRyxTQUFBRCx1QkFBQVEsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUd0RyxNQUFNRyxLQUFLLEdBQUcsSUFBQUMsZUFBUSxFQUFDLE9BQU8sQ0FBQztBQUMvQixNQUFNQyxRQUFRLEdBQUcsNkJBQTZCO0FBQzlDLE1BQU1DLFNBQVMsR0FBRywwQkFBMEI7QUFDNUMsTUFBTUMsZ0JBQWdCLEdBQUcsR0FBR0YsUUFBUSwwREFBMEQ7QUFDOUYsTUFBTUcseUJBQXlCLEdBQUcsR0FBR0gsUUFBUSxpRkFBaUY7QUFFOUgsTUFBTUksV0FBVyxHQUFHLFVBQVU7QUFDOUIsTUFBTUMsbUJBQW1CLEdBQUcsWUFBWTtBQUN4QyxNQUFNQyxvQkFBb0IsR0FBRyx3REFBd0Q7QUFFckYsU0FBU0MsdUJBQXVCQSxDQUFBLEVBQUc7RUFDakMsTUFBTUMsSUFBcUMsR0FBRztJQUM1QyxDQUFDQyxvQ0FBWSxDQUFDQyxPQUFPLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQztJQUNuRCxDQUFDRCxvQ0FBWSxDQUFDRSxlQUFlLEdBQUcsQ0FDOUIsTUFBTUMsT0FBTyxJQUFJO01BQ2YsSUFBSSxDQUFDQSxPQUFPLElBQUksQ0FBQ0EsT0FBTyxDQUFDQyxJQUFJLEVBQUU7UUFDN0IsTUFBTSxJQUFJQyxLQUFLLENBQUMsK0JBQStCLENBQUM7TUFDbEQ7TUFDQSxNQUFNQyxZQUFZLEdBQUcsTUFBTSxJQUFBQyxpQ0FBVyxFQUFDSixPQUFPLENBQUNDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFSSxPQUFPLElBQUk7UUFDaEYsT0FBUUEsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFQyxhQUFhLEVBQUVDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBcUJDLFNBQVM7TUFDOUUsQ0FBQyxDQUFDO01BRUYsT0FBT0wsWUFBWSxFQUFFTSxVQUFVLENBQUNmLG9CQUFvQixDQUFDO0lBQ3ZELENBQUMsQ0FDRjtJQUNELENBQUNHLG9DQUFZLENBQUNhLGNBQWMsR0FBRztJQUM3QjtJQUNBLE1BQU1WLE9BQU8sSUFBSTtNQUNmLElBQUksQ0FBQ0EsT0FBTyxJQUFJLENBQUNBLE9BQU8sQ0FBQ0MsSUFBSSxFQUFFO1FBQzdCLE1BQU0sSUFBSUMsS0FBSyxDQUFDLCtCQUErQixDQUFDO01BQ2xEO01BQ0EsTUFBTUMsWUFBWSxHQUFHLE1BQU0sSUFBQUMsaUNBQVcsRUFBQ0osT0FBTyxDQUFDQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRVUsS0FBSyxJQUFJO1FBQzlFLE9BQVFBLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBa0JILFNBQVM7TUFDN0MsQ0FBQyxDQUFDO01BRUYsT0FBT0wsWUFBWSxFQUFFTSxVQUFVLENBQUNoQixtQkFBbUIsQ0FBQztJQUN0RCxDQUFDLENBQ0Y7SUFDRCxDQUFDSSxvQ0FBWSxDQUFDZSxjQUFjLEdBQUcsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFFO0VBQy9FLENBQUM7RUFDRCxPQUFPaEIsSUFBSTtBQUNiO0FBRUEsU0FBU2lCLGlCQUFpQkEsQ0FBQ0MsV0FBdUMsRUFBRTtFQUNsRSxPQUFPLENBQ0w7SUFBRUMsUUFBUSxFQUFFLCtCQUErQjtJQUFFQyxLQUFLLEVBQUVGLFdBQVcsQ0FBQ0c7RUFBUyxDQUFDLEVBQzFFO0lBQUVGLFFBQVEsRUFBRSw0QkFBNEI7SUFBRUMsS0FBSyxFQUFFRixXQUFXLENBQUNJO0VBQVMsQ0FBQyxDQUN4RTtBQUNIO0FBRUEsU0FBU0MsMkJBQTJCQSxDQUFDQyxZQUFtQixFQUFFQyxNQUEyQixFQUFpQjtFQUNwRyxJQUFJRCxZQUFZLEtBQUssSUFBSSxJQUFJQSxZQUFZLENBQUNFLE1BQU0sS0FBSyxDQUFDLEVBQUU7SUFDdEQsT0FBTyxFQUFFO0VBQ1g7RUFFQSxNQUFNQyxNQUFxQixHQUFHSCxZQUFZLENBQUNJLEdBQUcsQ0FBQ0MsY0FBYyxJQUFJO0lBQy9ELE1BQU1DLElBQUksR0FBRyxJQUFBQyxlQUFNLEVBQUNGLGNBQWMsQ0FBQ0csT0FBTyxDQUFDLENBQUNDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUM7SUFDekUsTUFBTUMsY0FBMkIsR0FBRztNQUNsQ1YsTUFBTTtNQUNOVyxJQUFJLEVBQUVDLDhCQUFnQixDQUFDQyxNQUFNO01BQzdCUixJQUFJO01BQ0pTLGFBQWEsRUFBRVQsSUFBSTtNQUNuQlUsV0FBVyxFQUFFWCxjQUFjLENBQUNZLFdBQVcsSUFBSSxFQUFFO01BQzdDQyxVQUFVLEVBQUViLGNBQWMsQ0FBQ2MsbUJBQW1CO01BQzlDQyxJQUFJLEVBQUVmLGNBQWMsQ0FBQ2dCLGNBQWMsSUFBSSxFQUFFO01BQ3pDQyxnQkFBZ0IsRUFBRUMsMEJBQWU7TUFDakNDLGFBQWEsRUFBRW5CLGNBQWMsQ0FBQ29CLE1BQU07TUFDcENDLGNBQWMsRUFBRXJCLGNBQWMsQ0FBQ29CO0lBQ2pDLENBQUM7SUFFRCxPQUFPZCxjQUFjO0VBQ3ZCLENBQUMsQ0FBQztFQUVGLE9BQU9SLE1BQU07QUFDZjtBQUVBLFNBQVN3QixXQUFXQSxDQUFDQyxPQUFlLEVBQUU7RUFDcEMsT0FBTyxJQUFJQyxPQUFPLENBQU9DLE9BQU8sSUFBSTtJQUNsQ0MsVUFBVSxDQUFDLE1BQU07TUFDZkQsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLEVBQUVGLE9BQU8sQ0FBQztFQUNiLENBQUMsQ0FBQztBQUNKO0FBRUEsZUFBZUksWUFBWUEsQ0FBQ25ELElBQVUsRUFBRW9ELEtBQWEsRUFBaUI7RUFDcEUsTUFBTXBELElBQUksQ0FBQ3FELGVBQWUsQ0FBQ0QsS0FBSyxFQUFFO0lBQUVMLE9BQU8sRUFBRSxLQUFLO0lBQUVPLE9BQU8sRUFBRTtFQUFLLENBQUMsQ0FBQztFQUNwRSxNQUFNQyxHQUFHLEdBQUcsTUFBTXZELElBQUksQ0FBQ3dELEVBQUUsQ0FBQ0osS0FBSyxDQUFDO0VBQ2hDLE1BQU1HLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQ0UsS0FBSyxDQUFDLENBQUM7QUFDdEI7QUFFQSxTQUFTQyx1QkFBdUJBLENBQUNDLEdBQVcsRUFBVTtFQUNwRCxPQUFPQSxHQUFHLENBQUNDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO0FBQ3JDO0FBRUEsZUFBZUMsMkJBQTJCQSxDQUN4QzdELElBQVUsRUFDVjhELFNBQWlCLEVBQ2pCQyxTQUFpQixFQUNhO0VBQzlCO0VBQ0E7RUFDQSxNQUFNakIsV0FBVyxDQUFDLElBQUksQ0FBQztFQUV2QixNQUFNLElBQUFrQiwyQ0FBcUIsRUFBQ2hFLElBQUksRUFBRSw2QkFBNkIsRUFBRSxJQUFJLENBQUM7RUFDdEUsTUFBTSxJQUFBaUUsaUNBQVcsRUFBQ2pFLElBQUksRUFBRSw2QkFBNkIsQ0FBQztFQUN0RCxNQUFNLElBQUFnRSwyQ0FBcUIsRUFBQ2hFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUM7RUFDM0QsTUFBTSxJQUFBaUUsaUNBQVcsRUFBQ2pFLElBQUksRUFBRSxpQ0FBaUMsQ0FBQztFQUUxRCxNQUFNLElBQUFnRSwyQ0FBcUIsRUFBQ2hFLElBQUksRUFBRSx1Q0FBdUMsRUFBRSxJQUFJLENBQUM7RUFFaEYsTUFBTSxJQUFBa0UsK0JBQVMsRUFBQ2xFLElBQUksRUFBRSx1Q0FBdUMsRUFBRThELFNBQVMsQ0FBQ0ssTUFBTSxDQUFDNUUsV0FBVyxDQUFDLENBQUM7O0VBRTdGO0VBQ0EsTUFBTVMsSUFBSSxDQUFDb0UsS0FBSyxDQUFDLDBCQUEwQixDQUFDO0VBRTVDLE1BQU0sSUFBQUgsaUNBQVcsRUFBQ2pFLElBQUksRUFBRSwwQkFBMEIsQ0FBQztFQUNuRCxNQUFNcUUsYUFBYSxHQUFHLE1BQU1yRSxJQUFJLENBQUNzRSxlQUFlLENBQUNDLFFBQVEsSUFBSTtJQUMzRCxPQUFPQSxRQUFRLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEtBQUtsRix5QkFBeUIsSUFBSWlGLFFBQVEsQ0FBQ0UsT0FBTyxDQUFDLENBQUMsQ0FBQ0MsTUFBTSxDQUFDLENBQUMsS0FBSyxNQUFNO0VBQy9GLENBQUMsQ0FBQztFQUVGLE1BQU1DLFlBQWlCLEdBQUcsTUFBTU4sYUFBYSxDQUFDTyxJQUFJLENBQUMsQ0FBQztFQUVwRCxNQUFNQyxhQUFhLEdBQUdkLFNBQVMsQ0FBQ0gsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQ0EsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7RUFFekUsTUFBTVcsUUFBUSxHQUFHTyxJQUFJLENBQUNDLEtBQUssQ0FBQ0osWUFBWSxDQUFDSyxRQUFRLENBQUM7RUFFbEQsTUFBTUMsbUJBQW1CLEdBQUdWLFFBQVEsQ0FBQ1csc0JBQXNCO0VBQzNELE1BQU0vRCxZQUFZLEdBQUdvRCxRQUFRLENBQUNZLHdCQUF3QjtFQUN0RCxNQUFNQyxPQUFPLEdBQUdiLFFBQVEsQ0FBQ2MsY0FBYyxHQUFHQyxVQUFVLENBQUNmLFFBQVEsQ0FBQ2MsY0FBYyxDQUFDLEdBQUdFLFNBQVM7RUFFekYsTUFBTUMsV0FBVyxHQUFHdEUsMkJBQTJCLENBQUMrRCxtQkFBbUIsRUFBRVEsaUNBQW1CLENBQUNDLE9BQU8sQ0FBQztFQUNqRyxNQUFNQyxhQUFhLEdBQUd6RSwyQkFBMkIsQ0FBQ0MsWUFBWSxFQUFFc0UsaUNBQW1CLENBQUNHLFNBQVMsQ0FBQztFQUM5RixNQUFNQyxJQUFJLEdBQUcsQ0FBQyxHQUFHTCxXQUFXLEVBQUUsR0FBR0csYUFBYSxDQUFDO0VBRS9DLE9BQU87SUFDTGQsYUFBYTtJQUNiTyxPQUFPO0lBQ1BTO0VBQ0YsQ0FBQztBQUNIO0FBRUEsZUFBZUMsaUJBQWlCQSxDQUFDOUYsSUFBVSxFQUFFOEQsU0FBaUIsRUFBa0M7RUFDOUYsTUFBTWlDLFFBQStCLEdBQUcsRUFBRTs7RUFFMUM7RUFDQTtFQUNBLE1BQU1qRCxXQUFXLENBQUMsSUFBSSxDQUFDO0VBRXZCLE1BQU1rRCxXQUFXLEdBQUksTUFBTWhHLElBQUksQ0FBQ2lHLFFBQVEsQ0FBQyxNQUN2Q0MsS0FBSyxDQUFDQyxJQUFJLENBQUNDLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUMsZ0RBQWdELENBQUMsRUFBRXZILENBQUMsSUFBSUEsQ0FBQyxDQUFDd0gsV0FBVyxDQUM1RyxDQUFjOztFQUVkOztFQUVBLElBQUksQ0FBQ04sV0FBVyxDQUFDM0UsTUFBTSxFQUFFO0lBQ3ZCLE1BQU0sSUFBSXBCLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQztFQUNsRTtFQUVBLEtBQUssTUFBTThELFNBQVMsSUFBSWlDLFdBQVcsRUFBRTtJQUNuQyxJQUFJQSxXQUFXLENBQUMzRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO01BQzFCO01BQ0EsTUFBTThCLFlBQVksQ0FBQ25ELElBQUksRUFBRSwyRUFBMkUsQ0FBQztNQUNyRyxNQUFNbUQsWUFBWSxDQUFDbkQsSUFBSSxFQUFFLGtDQUFrQytELFNBQVMsS0FBSyxDQUFDO0lBQzVFO0lBRUFnQyxRQUFRLENBQUNRLElBQUksQ0FBQyxNQUFNMUMsMkJBQTJCLENBQUM3RCxJQUFJLEVBQUU4RCxTQUFTLEVBQUVKLHVCQUF1QixDQUFDSyxTQUFTLENBQUMsQ0FBQyxDQUFDO0VBQ3ZHO0VBRUEsT0FBT2dDLFFBQVE7QUFDakI7QUFFQSxlQUFlUyxlQUFlQSxDQUFDeEcsSUFBVSxFQUFpQjtFQUN4RCxNQUFNeUcsbUJBQW1CLEdBQUcsaURBQWlEO0VBQzdFeEgsS0FBSyxDQUFDLDRDQUE0QyxDQUFDO0VBQ25ELE1BQU0sSUFBQStFLDJDQUFxQixFQUFDaEUsSUFBSSxFQUFFeUcsbUJBQW1CLENBQUM7RUFDdER4SCxLQUFLLENBQUMsd0JBQXdCLENBQUM7RUFDL0IsTUFBTXlILFFBQVEsR0FBRyxNQUFNLElBQUFDLDhCQUFRLEVBQUMzRyxJQUFJLEVBQUV5RyxtQkFBbUIsRUFBRSxJQUFJLEVBQUVyRyxPQUFPLElBQUk7SUFDMUUsT0FBUUEsT0FBTyxDQUFTd0csSUFBSTtFQUM5QixDQUFDLENBQUM7RUFDRjNILEtBQUssQ0FBQyx1QkFBdUJ5SCxRQUFRLEdBQUcsQ0FBQztFQUN6QyxNQUFNMUcsSUFBSSxDQUFDNkcsSUFBSSxDQUFDSCxRQUFRLENBQUM7RUFDekJ6SCxLQUFLLENBQUMsOENBQThDLENBQUM7RUFDckQsTUFBTSxJQUFBNkgsNkJBQWlCLEVBQUM5RyxJQUFJLEVBQUU7SUFBRStHLFNBQVMsRUFBRTtFQUFlLENBQUMsQ0FBQztFQUM1RDlILEtBQUssQ0FBQyxzREFBc0QsQ0FBQztFQUM3RCxNQUFNK0QsT0FBTyxDQUFDZ0UsR0FBRyxDQUFDLENBQ2hCLElBQUFoRCwyQ0FBcUIsRUFBQ2hFLElBQUksRUFBRSwrQkFBK0IsRUFBRSxJQUFJLENBQUMsRUFDbEUsSUFBQWdFLDJDQUFxQixFQUFDaEUsSUFBSSxFQUFFLDRCQUE0QixFQUFFLElBQUksQ0FBQyxFQUMvRCxJQUFBZ0UsMkNBQXFCLEVBQUNoRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLENBQzNELENBQUM7QUFDSjtBQUVBLGVBQWVpSCxnQkFBZ0JBLENBQUNqSCxJQUFVLEVBQWlCO0VBQ3pELE1BQU1nRCxPQUFPLENBQUNrRSxJQUFJLENBQUMsQ0FDakIsSUFBQWxELDJDQUFxQixFQUFDaEUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsRUFDakUsSUFBQWdFLDJDQUFxQixFQUFDaEUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFDN0RBLElBQUksQ0FBQ3FELGVBQWUsQ0FBQyxpQ0FBaUM1RCxvQkFBb0IsS0FBSyxDQUFDLEVBQ2hGLElBQUF1RSwyQ0FBcUIsRUFBQ2hFLElBQUksRUFBRSxnQ0FBZ0MsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUU7RUFBQSxDQUM3RSxDQUFDO0FBQ0o7QUFJQSxNQUFNbUgsWUFBWSxTQUFTQyw4Q0FBc0IsQ0FBNkI7RUFDNUVDLGVBQWVBLENBQUN4RyxXQUF1QyxFQUFFO0lBQ3ZELE9BQU87TUFDTDZGLFFBQVEsRUFBRXRILFNBQVM7TUFDbkJrSSxNQUFNLEVBQUUxRyxpQkFBaUIsQ0FBQ0MsV0FBVyxDQUFDO01BQ3RDMEcsb0JBQW9CLEVBQUUsdUJBQXVCO01BQzdDQyxjQUFjLEVBQUUsTUFBQUEsQ0FBQSxLQUFZaEIsZUFBZSxDQUFDLElBQUksQ0FBQ3hHLElBQUksQ0FBQztNQUN0RHlILFVBQVUsRUFBRSxNQUFBQSxDQUFBLEtBQVlSLGdCQUFnQixDQUFDLElBQUksQ0FBQ2pILElBQUksQ0FBQztNQUNuRDBILGVBQWUsRUFBRWhJLHVCQUF1QixDQUFDO0lBQzNDLENBQUM7RUFDSDtFQUVBLE1BQU1pSSxTQUFTQSxDQUFBLEVBQW1DO0lBQ2hELE1BQU1DLGtCQUFrQixHQUFHLElBQUFsRyxlQUFNLEVBQUMsQ0FBQyxDQUFDbUcsUUFBUSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDdEUsTUFBTUMsa0JBQWtCLEdBQUcsSUFBQXJHLGVBQU0sRUFBQyxDQUFDLENBQUNtRyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN0RSxNQUFNaEUsU0FBUyxHQUFHLElBQUksQ0FBQy9ELE9BQU8sQ0FBQytELFNBQVMsSUFBSWlFLGtCQUFrQixDQUFDQyxNQUFNLENBQUMsQ0FBQztJQUN2RSxNQUFNQyxXQUFXLEdBQUd2RyxlQUFNLENBQUN3RyxHQUFHLENBQUNOLGtCQUFrQixFQUFFLElBQUFsRyxlQUFNLEVBQUNvQyxTQUFTLENBQUMsQ0FBQztJQUVyRSxNQUFNLElBQUksQ0FBQ3FFLFVBQVUsQ0FBQzlJLGdCQUFnQixDQUFDO0lBRXZDLE1BQU0wRyxRQUFRLEdBQUcsTUFBTUQsaUJBQWlCLENBQUMsSUFBSSxDQUFDOUYsSUFBSSxFQUFFaUksV0FBVyxDQUFDO0lBRWhFLE9BQU87TUFDTEcsT0FBTyxFQUFFLElBQUk7TUFDYnJDO0lBQ0YsQ0FBQztFQUNIO0FBQ0Y7QUFBQyxJQUFBc0MsUUFBQSxHQUFBQyxPQUFBLENBQUF0SixPQUFBLEdBRWNtSSxZQUFZIiwiaWdub3JlTGlzdCI6W119
203
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2RlYnVnIiwiX2VsZW1lbnRzSW50ZXJhY3Rpb25zIiwiX25hdmlnYXRpb24iLCJfdHJhbnNhY3Rpb25zIiwiX2Jhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJkZWJ1ZyIsImdldERlYnVnIiwiQkFTRV9VUkwiLCJMT0dJTl9VUkwiLCJUUkFOU0FDVElPTlNfVVJMIiwiRklMVEVSRURfVFJBTlNBQ1RJT05TX1VSTCIsIkRBVEVfRk9STUFUIiwiQUNDT1VOVF9CTE9DS0VEX01TRyIsIklOVkFMSURfUEFTU1dPUkRfTVNHIiwiZ2V0UG9zc2libGVMb2dpblJlc3VsdHMiLCJ1cmxzIiwiTG9naW5SZXN1bHRzIiwiU3VjY2VzcyIsIkludmFsaWRQYXNzd29yZCIsIm9wdGlvbnMiLCJwYWdlIiwiRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJwYWdlRXZhbEFsbCIsImVsZW1lbnQiLCJwYXJlbnRFbGVtZW50IiwiY2hpbGRyZW4iLCJpbm5lclRleHQiLCJzdGFydHNXaXRoIiwiQWNjb3VudEJsb2NrZWQiLCJsYWJlbCIsIkNoYW5nZVBhc3N3b3JkIiwiY3JlYXRlTG9naW5GaWVsZHMiLCJjcmVkZW50aWFscyIsInNlbGVjdG9yIiwidmFsdWUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiZXh0cmFjdFRyYW5zYWN0aW9uc0Zyb21QYWdlIiwidHJhbnNhY3Rpb25zIiwic3RhdHVzIiwibGVuZ3RoIiwicmVzdWx0IiwibWFwIiwicmF3VHJhbnNhY3Rpb24iLCJkYXRlIiwibW9tZW50IiwiRGF0ZVVUQyIsIm1pbGxpc2Vjb25kcyIsInRvSVNPU3RyaW5nIiwibmV3VHJhbnNhY3Rpb24iLCJ0eXBlIiwiVHJhbnNhY3Rpb25UeXBlcyIsIk5vcm1hbCIsInByb2Nlc3NlZERhdGUiLCJkZXNjcmlwdGlvbiIsIkRlc2NyaXB0aW9uIiwiaWRlbnRpZmllciIsIlJlZmVyZW5jZU51bWJlckxvbmciLCJtZW1vIiwiQWRkaXRpb25hbERhdGEiLCJvcmlnaW5hbEN1cnJlbmN5IiwiU0hFS0VMX0NVUlJFTkNZIiwiY2hhcmdlZEFtb3VudCIsIkFtb3VudCIsIm9yaWdpbmFsQW1vdW50IiwiaW5jbHVkZVJhd1RyYW5zYWN0aW9uIiwiaGFuZ1Byb2Nlc3MiLCJ0aW1lb3V0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRUaW1lb3V0IiwiY2xpY2tCeVhQYXRoIiwieHBhdGgiLCJ3YWl0Rm9yU2VsZWN0b3IiLCJ2aXNpYmxlIiwiZWxtIiwiJCQiLCJjbGljayIsInJlbW92ZVNwZWNpYWxDaGFyYWN0ZXJzIiwic3RyIiwicmVwbGFjZSIsImZldGNoVHJhbnNhY3Rpb25zRm9yQWNjb3VudCIsInN0YXJ0RGF0ZSIsImFjY291bnRJZCIsIndhaXRVbnRpbEVsZW1lbnRGb3VuZCIsImNsaWNrQnV0dG9uIiwiZmlsbElucHV0IiwiZm9ybWF0IiwiZm9jdXMiLCJmaW5hbFJlc3BvbnNlIiwid2FpdEZvclJlc3BvbnNlIiwicmVzcG9uc2UiLCJ1cmwiLCJyZXF1ZXN0IiwibWV0aG9kIiwicmVzcG9uc2VKc29uIiwianNvbiIsImFjY291bnROdW1iZXIiLCJKU09OIiwicGFyc2UiLCJqc29uUmVzcCIsInBlbmRpbmdUcmFuc2FjdGlvbnMiLCJUb2RheVRyYW5zYWN0aW9uc0l0ZW1zIiwiSGlzdG9yeVRyYW5zYWN0aW9uc0l0ZW1zIiwiYmFsYW5jZSIsIkJhbGFuY2VEaXNwbGF5IiwicGFyc2VGbG9hdCIsInVuZGVmaW5lZCIsInBlbmRpbmdUeG5zIiwiVHJhbnNhY3Rpb25TdGF0dXNlcyIsIlBlbmRpbmciLCJjb21wbGV0ZWRUeG5zIiwiQ29tcGxldGVkIiwidHhucyIsImZldGNoVHJhbnNhY3Rpb25zIiwiYWNjb3VudHMiLCJhY2NvdW50c0lkcyIsImV2YWx1YXRlIiwiQXJyYXkiLCJmcm9tIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwidGV4dENvbnRlbnQiLCJwdXNoIiwibmF2aWdhdGVUb0xvZ2luIiwibG9naW5CdXR0b25TZWxlY3RvciIsImxvZ2luVXJsIiwicGFnZUV2YWwiLCJocmVmIiwiZ290byIsIndhaXRGb3JOYXZpZ2F0aW9uIiwid2FpdFVudGlsIiwiYWxsIiwid2FpdEZvclBvc3RMb2dpbiIsInJhY2UiLCJMZXVtaVNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZ2V0TG9naW5PcHRpb25zIiwiZmllbGRzIiwic3VibWl0QnV0dG9uU2VsZWN0b3IiLCJjaGVja1JlYWRpbmVzcyIsInBvc3RBY3Rpb24iLCJwb3NzaWJsZVJlc3VsdHMiLCJmZXRjaERhdGEiLCJtaW5pbXVtU3RhcnRNb21lbnQiLCJzdWJ0cmFjdCIsImFkZCIsImRlZmF1bHRTdGFydE1vbWVudCIsInRvRGF0ZSIsInN0YXJ0TW9tZW50IiwibWF4IiwibmF2aWdhdGVUbyIsInN1Y2Nlc3MiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyYXBlcnMvbGV1bWkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCwgeyB0eXBlIE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyB0eXBlIFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHsgU0hFS0VMX0NVUlJFTkNZIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQgeyBjbGlja0J1dHRvbiwgZmlsbElucHV0LCBwYWdlRXZhbCwgcGFnZUV2YWxBbGwsIHdhaXRVbnRpbEVsZW1lbnRGb3VuZCB9IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IHdhaXRGb3JOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vaGVscGVycy9uYXZpZ2F0aW9uJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uU3RhdHVzZXMsIFRyYW5zYWN0aW9uVHlwZXMsIHR5cGUgVHJhbnNhY3Rpb24sIHR5cGUgVHJhbnNhY3Rpb25zQWNjb3VudCB9IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBCYXNlU2NyYXBlcldpdGhCcm93c2VyLCBMb2dpblJlc3VsdHMsIHR5cGUgTG9naW5PcHRpb25zIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyJztcbmltcG9ydCB7IHR5cGUgU2NyYXBlck9wdGlvbnMsIHR5cGUgU2NyYXBlclNjcmFwaW5nUmVzdWx0IH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuXG5jb25zdCBkZWJ1ZyA9IGdldERlYnVnKCdsZXVtaScpO1xuY29uc3QgQkFTRV9VUkwgPSAnaHR0cHM6Ly9oYjIuYmFua2xldW1pLmNvLmlsJztcbmNvbnN0IExPR0lOX1VSTCA9ICdodHRwczovL3d3dy5sZXVtaS5jby5pbC8nO1xuY29uc3QgVFJBTlNBQ1RJT05TX1VSTCA9IGAke0JBU0VfVVJMfS9lQmFua2luZy9TTy9TUEEuYXNweCMvdHMvQnVzaW5lc3NBY2NvdW50VHJ4P1dpZGdldFBhcj0xYDtcbmNvbnN0IEZJTFRFUkVEX1RSQU5TQUNUSU9OU19VUkwgPSBgJHtCQVNFX1VSTH0vQ2hhbm5lbFdDRi9Ccm9rZXIuc3ZjL1Byb2Nlc3NSZXF1ZXN0P21vZHVsZU5hbWU9VUNfU09fMjdfR2V0QnVzaW5lc3NBY2NvdW50VHJ4YDtcblxuY29uc3QgREFURV9GT1JNQVQgPSAnREQuTU0uWVknO1xuY29uc3QgQUNDT1VOVF9CTE9DS0VEX01TRyA9ICfXlNee16DXldeZINeX16HXldedJztcbmNvbnN0IElOVkFMSURfUEFTU1dPUkRfTVNHID0gJ9eQ15fXkyDXkNeVINeZ15XXqteoINee16TXqNeY15kg15TXlNeW15PXlNeV16og16nXnteh16jXqiDXqdeS15XXmdeZ150uINeg15nXqtefINec16DXodeV16og16nXldeRJztcblxuZnVuY3Rpb24gZ2V0UG9zc2libGVMb2dpblJlc3VsdHMoKSB7XG4gIGNvbnN0IHVybHM6IExvZ2luT3B0aW9uc1sncG9zc2libGVSZXN1bHRzJ10gPSB7XG4gICAgW0xvZ2luUmVzdWx0cy5TdWNjZXNzXTogWy9lYmFua2luZ1xcL1NPXFwvU1BBLmFzcHgvaV0sXG4gICAgW0xvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmRdOiBbXG4gICAgICBhc3luYyBvcHRpb25zID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLnBhZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcGFnZSBvcHRpb25zIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYXdhaXQgcGFnZUV2YWxBbGwob3B0aW9ucy5wYWdlLCAnc3ZnI0NhcGFfMScsICcnLCBlbGVtZW50ID0+IHtcbiAgICAgICAgICByZXR1cm4gKGVsZW1lbnRbMF0/LnBhcmVudEVsZW1lbnQ/LmNoaWxkcmVuWzFdIGFzIEhUTUxEaXZFbGVtZW50KT8uaW5uZXJUZXh0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlPy5zdGFydHNXaXRoKElOVkFMSURfUEFTU1dPUkRfTVNHKTtcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbTG9naW5SZXN1bHRzLkFjY291bnRCbG9ja2VkXTogW1xuICAgICAgLy8gTk9USUNFIC0gbWlnaHQgbm90IGJlIHJlbGV2YW50IHN0YXJ0aW5nIHRoZSBMZXVtaSByZS1kZXNpZ24gZHVyaW5nIDIwMjIgU2VwXG4gICAgICBhc3luYyBvcHRpb25zID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLnBhZ2UpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcGFnZSBvcHRpb25zIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYXdhaXQgcGFnZUV2YWxBbGwob3B0aW9ucy5wYWdlLCAnLmVyckhlYWRlcicsICcnLCBsYWJlbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIChsYWJlbFswXSBhcyBIVE1MRWxlbWVudCk/LmlubmVyVGV4dDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZT8uc3RhcnRzV2l0aChBQ0NPVU5UX0JMT0NLRURfTVNHKTtcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbTG9naW5SZXN1bHRzLkNoYW5nZVBhc3N3b3JkXTogWydodHRwczovL2hiMi5iYW5rbGV1bWkuY28uaWwvYXV0aGVudGljYXRlJ10sIC8vIE5PVElDRSAtIG1pZ2h0IG5vdCBiZSByZWxldmFudCBzdGFydGluZyB0aGUgTGV1bWkgcmUtZGVzaWduIGR1cmluZyAyMDIyIFNlcFxuICB9O1xuICByZXR1cm4gdXJscztcbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gIHJldHVybiBbXG4gICAgeyBzZWxlY3RvcjogJ2lucHV0W3BsYWNlaG9sZGVyPVwi16nXnSDXntep16rXntepXCJdJywgdmFsdWU6IGNyZWRlbnRpYWxzLnVzZXJuYW1lIH0sXG4gICAgeyBzZWxlY3RvcjogJ2lucHV0W3BsYWNlaG9sZGVyPVwi16HXmdeh157XlFwiXScsIHZhbHVlOiBjcmVkZW50aWFscy5wYXNzd29yZCB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VHJhbnNhY3Rpb25zRnJvbVBhZ2UoXG4gIHRyYW5zYWN0aW9uczogYW55W10sXG4gIHN0YXR1czogVHJhbnNhY3Rpb25TdGF0dXNlcyxcbiAgb3B0aW9ucz86IFNjcmFwZXJPcHRpb25zLFxuKTogVHJhbnNhY3Rpb25bXSB7XG4gIGlmICh0cmFuc2FjdGlvbnMgPT09IG51bGwgfHwgdHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogVHJhbnNhY3Rpb25bXSA9IHRyYW5zYWN0aW9ucy5tYXAocmF3VHJhbnNhY3Rpb24gPT4ge1xuICAgIGNvbnN0IGRhdGUgPSBtb21lbnQocmF3VHJhbnNhY3Rpb24uRGF0ZVVUQykubWlsbGlzZWNvbmRzKDApLnRvSVNPU3RyaW5nKCk7XG4gICAgY29uc3QgbmV3VHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0ge1xuICAgICAgc3RhdHVzLFxuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWwsXG4gICAgICBkYXRlLFxuICAgICAgcHJvY2Vzc2VkRGF0ZTogZGF0ZSxcbiAgICAgIGRlc2NyaXB0aW9uOiByYXdUcmFuc2FjdGlvbi5EZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgIGlkZW50aWZpZXI6IHJhd1RyYW5zYWN0aW9uLlJlZmVyZW5jZU51bWJlckxvbmcsXG4gICAgICBtZW1vOiByYXdUcmFuc2FjdGlvbi5BZGRpdGlvbmFsRGF0YSB8fCAnJyxcbiAgICAgIG9yaWdpbmFsQ3VycmVuY3k6IFNIRUtFTF9DVVJSRU5DWSxcbiAgICAgIGNoYXJnZWRBbW91bnQ6IHJhd1RyYW5zYWN0aW9uLkFtb3VudCxcbiAgICAgIG9yaWdpbmFsQW1vdW50OiByYXdUcmFuc2FjdGlvbi5BbW91bnQsXG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zPy5pbmNsdWRlUmF3VHJhbnNhY3Rpb24pIHtcbiAgICAgIG5ld1RyYW5zYWN0aW9uLnJhd1RyYW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1RyYW5zYWN0aW9uO1xuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBoYW5nUHJvY2Vzcyh0aW1lb3V0OiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0sIHRpbWVvdXQpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2xpY2tCeVhQYXRoKHBhZ2U6IFBhZ2UsIHhwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcGFnZS53YWl0Rm9yU2VsZWN0b3IoeHBhdGgsIHsgdGltZW91dDogMzAwMDAsIHZpc2libGU6IHRydWUgfSk7XG4gIGNvbnN0IGVsbSA9IGF3YWl0IHBhZ2UuJCQoeHBhdGgpO1xuICBhd2FpdCBlbG1bMF0uY2xpY2soKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3BlY2lhbENoYXJhY3RlcnMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1teMC05Ly1dL2csICcnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hUcmFuc2FjdGlvbnNGb3JBY2NvdW50KFxuICBwYWdlOiBQYWdlLFxuICBzdGFydERhdGU6IE1vbWVudCxcbiAgYWNjb3VudElkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFNjcmFwZXJPcHRpb25zLFxuKTogUHJvbWlzZTxUcmFuc2FjdGlvbnNBY2NvdW50PiB7XG4gIC8vIERFVkVMT1BFUiBOT1RJQ0UgdGhlIGFjY291bnQgbnVtYmVyIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBpcyBiZWluZyBhbHRlcmVkIGF0XG4gIC8vIHJ1bnRpbWUgZm9yIHNvbWUgYWNjb3VudHMgYWZ0ZXIgMS0yIHNlY29uZHMgc28gd2UgbmVlZCB0byBoYW5nIHRoZSBwcm9jZXNzIGZvciBhIHNob3J0IHdoaWxlLlxuICBhd2FpdCBoYW5nUHJvY2Vzcyg0MDAwKTtcblxuICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJ2J1dHRvblt0aXRsZT1cIteX15nXpNeV16kg157Xqten15PXnVwiXScsIHRydWUpO1xuICBhd2FpdCBjbGlja0J1dHRvbihwYWdlLCAnYnV0dG9uW3RpdGxlPVwi15fXmdek15XXqSDXnteq16fXk9edXCJdJyk7XG4gIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAnYmxsLXJhZGlvLWJ1dHRvbicsIHRydWUpO1xuICBhd2FpdCBjbGlja0J1dHRvbihwYWdlLCAnYmxsLXJhZGlvLWJ1dHRvbjpub3QoW2NoZWNrZWRdKScpO1xuXG4gIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAnaW5wdXRbZm9ybWNvbnRyb2xuYW1lPVwidHh0SW5wdXRGcm9tXCJdJywgdHJ1ZSk7XG5cbiAgYXdhaXQgZmlsbElucHV0KHBhZ2UsICdpbnB1dFtmb3JtY29udHJvbG5hbWU9XCJ0eHRJbnB1dEZyb21cIl0nLCBzdGFydERhdGUuZm9ybWF0KERBVEVfRk9STUFUKSk7XG5cbiAgLy8gd2UgbXVzdCBibHVyIHRoZSBmcm9tIGNvbnRyb2wgb3RoZXJ3aXNlIHRoZSBzZWFyY2ggd2lsbCB1c2UgdGhlIHByZXZpb3VzIHZhbHVlXG4gIGF3YWl0IHBhZ2UuZm9jdXMoXCJidXR0b25bYXJpYS1sYWJlbD0n16HXoNefJ11cIik7XG5cbiAgYXdhaXQgY2xpY2tCdXR0b24ocGFnZSwgXCJidXR0b25bYXJpYS1sYWJlbD0n16HXoNefJ11cIik7XG4gIGNvbnN0IGZpbmFsUmVzcG9uc2UgPSBhd2FpdCBwYWdlLndhaXRGb3JSZXNwb25zZShyZXNwb25zZSA9PiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnVybCgpID09PSBGSUxURVJFRF9UUkFOU0FDVElPTlNfVVJMICYmIHJlc3BvbnNlLnJlcXVlc3QoKS5tZXRob2QoKSA9PT0gJ1BPU1QnO1xuICB9KTtcblxuICBjb25zdCByZXNwb25zZUpzb246IGFueSA9IGF3YWl0IGZpbmFsUmVzcG9uc2UuanNvbigpO1xuXG4gIGNvbnN0IGFjY291bnROdW1iZXIgPSBhY2NvdW50SWQucmVwbGFjZSgnLycsICdfJykucmVwbGFjZSgvW15cXGQtX10vZywgJycpO1xuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXNwb25zZUpzb24uanNvblJlc3ApO1xuXG4gIGNvbnN0IHBlbmRpbmdUcmFuc2FjdGlvbnMgPSByZXNwb25zZS5Ub2RheVRyYW5zYWN0aW9uc0l0ZW1zO1xuICBjb25zdCB0cmFuc2FjdGlvbnMgPSByZXNwb25zZS5IaXN0b3J5VHJhbnNhY3Rpb25zSXRlbXM7XG4gIGNvbnN0IGJhbGFuY2UgPSByZXNwb25zZS5CYWxhbmNlRGlzcGxheSA/IHBhcnNlRmxvYXQocmVzcG9uc2UuQmFsYW5jZURpc3BsYXkpIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHBlbmRpbmdUeG5zID0gZXh0cmFjdFRyYW5zYWN0aW9uc0Zyb21QYWdlKHBlbmRpbmdUcmFuc2FjdGlvbnMsIFRyYW5zYWN0aW9uU3RhdHVzZXMuUGVuZGluZywgb3B0aW9ucyk7XG4gIGNvbnN0IGNvbXBsZXRlZFR4bnMgPSBleHRyYWN0VHJhbnNhY3Rpb25zRnJvbVBhZ2UodHJhbnNhY3Rpb25zLCBUcmFuc2FjdGlvblN0YXR1c2VzLkNvbXBsZXRlZCwgb3B0aW9ucyk7XG4gIGNvbnN0IHR4bnMgPSBbLi4ucGVuZGluZ1R4bnMsIC4uLmNvbXBsZXRlZFR4bnNdO1xuXG4gIHJldHVybiB7XG4gICAgYWNjb3VudE51bWJlcixcbiAgICBiYWxhbmNlLFxuICAgIHR4bnMsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoVHJhbnNhY3Rpb25zKFxuICBwYWdlOiBQYWdlLFxuICBzdGFydERhdGU6IE1vbWVudCxcbiAgb3B0aW9uczogU2NyYXBlck9wdGlvbnMsXG4pOiBQcm9taXNlPFRyYW5zYWN0aW9uc0FjY291bnRbXT4ge1xuICBjb25zdCBhY2NvdW50czogVHJhbnNhY3Rpb25zQWNjb3VudFtdID0gW107XG5cbiAgLy8gREVWRUxPUEVSIE5PVElDRSB0aGUgYWNjb3VudCBudW1iZXIgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyIGlzIGJlaW5nIGFsdGVyZWQgYXRcbiAgLy8gcnVudGltZSBmb3Igc29tZSBhY2NvdW50cyBhZnRlciAxLTIgc2Vjb25kcyBzbyB3ZSBuZWVkIHRvIGhhbmcgdGhlIHByb2Nlc3MgZm9yIGEgc2hvcnQgd2hpbGUuXG4gIGF3YWl0IGhhbmdQcm9jZXNzKDQwMDApO1xuXG4gIGNvbnN0IGFjY291bnRzSWRzID0gKGF3YWl0IHBhZ2UuZXZhbHVhdGUoKCkgPT5cbiAgICBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2FwcC1tYXNrZWQtbnVtYmVyLWNvbWJvIHNwYW4uZGlzcGxheS1udW1iZXItbGknKSwgZSA9PiBlLnRleHRDb250ZW50KSxcbiAgKSkgYXMgc3RyaW5nW107XG5cbiAgLy8gZHVlIHRvIGEgYnVnLCB0aGUgYWx0ZXJlZCB2YWx1ZSBtaWdodCBpbmNsdWRlIHVuZGVzaXJlZCBzaWducyBsaWtlICYgdGhhdCBzaG91bGQgYmUgcmVtb3ZlZFxuXG4gIGlmICghYWNjb3VudHNJZHMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZXh0cmFjdCBvciBwYXJzZSB0aGUgYWNjb3VudCBudW1iZXInKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgYWNjb3VudElkIG9mIGFjY291bnRzSWRzKSB7XG4gICAgaWYgKGFjY291bnRzSWRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIGdldCBsaXN0IG9mIGFjY291bnRzIGFuZCBjaGVjayBhY2NvdW50SWRcbiAgICAgIGF3YWl0IGNsaWNrQnlYUGF0aChwYWdlLCAneHBhdGgvLy8qW2NvbnRhaW5zKEBjbGFzcywgXCJudW1iZXJcIikgYW5kIGNvbnRhaW5zKEBjbGFzcywgXCJjb21iby1pbm5lclwiKV0nKTtcbiAgICAgIGF3YWl0IGNsaWNrQnlYUGF0aChwYWdlLCBgeHBhdGgvLy9zcGFuW2NvbnRhaW5zKHRleHQoKSwgJyR7YWNjb3VudElkfScpXWApO1xuICAgIH1cblxuICAgIGFjY291bnRzLnB1c2goYXdhaXQgZmV0Y2hUcmFuc2FjdGlvbnNGb3JBY2NvdW50KHBhZ2UsIHN0YXJ0RGF0ZSwgcmVtb3ZlU3BlY2lhbENoYXJhY3RlcnMoYWNjb3VudElkKSwgb3B0aW9ucykpO1xuICB9XG5cbiAgcmV0dXJuIGFjY291bnRzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBuYXZpZ2F0ZVRvTG9naW4ocGFnZTogUGFnZSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBsb2dpbkJ1dHRvblNlbGVjdG9yID0gJy5lbnRlci1hY2NvdW50IGFbb3JpZ2luYWx0aXRsZT1cIteb16DXmdeh15Qg15zXl9ep15HXldeg15pcIl0nO1xuICBkZWJ1Zygnd2FpdCBmb3IgaG9tZXBhZ2UgdG8gY2xpY2sgb24gbG9naW4gYnV0dG9uJyk7XG4gIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCBsb2dpbkJ1dHRvblNlbGVjdG9yKTtcbiAgZGVidWcoJ25hdmlnYXRlIHRvIGxvZ2luIHBhZ2UnKTtcbiAgY29uc3QgbG9naW5VcmwgPSBhd2FpdCBwYWdlRXZhbChwYWdlLCBsb2dpbkJ1dHRvblNlbGVjdG9yLCBudWxsLCBlbGVtZW50ID0+IHtcbiAgICByZXR1cm4gKGVsZW1lbnQgYXMgYW55KS5ocmVmO1xuICB9KTtcbiAgZGVidWcoYG5hdmlnYXRpbmcgdG8gcGFnZSAoJHtsb2dpblVybH0pYCk7XG4gIGF3YWl0IHBhZ2UuZ290byhsb2dpblVybCk7XG4gIGRlYnVnKCd3YWl0aW5nIGZvciBwYWdlIHRvIGJlIGxvYWRlZCAobmV0d29ya2lkbGUyKScpO1xuICBhd2FpdCB3YWl0Rm9yTmF2aWdhdGlvbihwYWdlLCB7IHdhaXRVbnRpbDogJ25ldHdvcmtpZGxlMicgfSk7XG4gIGRlYnVnKCd3YWl0aW5nIGZvciBjb21wb25lbnRzIG9mIGxvZ2luIHRvIGVudGVyIGNyZWRlbnRpYWxzJyk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJ2lucHV0W3BsYWNlaG9sZGVyPVwi16nXnSDXntep16rXntepXCJdJywgdHJ1ZSksXG4gICAgd2FpdFVudGlsRWxlbWVudEZvdW5kKHBhZ2UsICdpbnB1dFtwbGFjZWhvbGRlcj1cIteh15nXodee15RcIl0nLCB0cnVlKSxcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJ2J1dHRvblt0eXBlPVwic3VibWl0XCJdJywgdHJ1ZSksXG4gIF0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yUG9zdExvZ2luKHBhZ2U6IFBhZ2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJ2FbdGl0bGU9XCLXk9ec15Ig15zXl9ep15HXldefXCJdJywgdHJ1ZSwgNjAwMDApLFxuICAgIHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCAnZGl2Lm1haW4tY29udGVudCcsIGZhbHNlLCA2MDAwMCksXG4gICAgcGFnZS53YWl0Rm9yU2VsZWN0b3IoYHhwYXRoLy9kaXZbY29udGFpbnMoc3RyaW5nKCksXCIke0lOVkFMSURfUEFTU1dPUkRfTVNHfVwiKV1gKSxcbiAgICB3YWl0VW50aWxFbGVtZW50Rm91bmQocGFnZSwgJ2Zvcm1bYWN0aW9uPVwiL2NoYW5nZXBhc3N3b3JkXCJdJywgdHJ1ZSwgNjAwMDApLCAvLyBub3Qgc3VyZSBpZiB0aGV5IGtlcHQgdGhpcyBvbmVcbiAgXSk7XG59XG5cbnR5cGUgU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMgPSB7IHVzZXJuYW1lOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfTtcblxuY2xhc3MgTGV1bWlTY3JhcGVyIGV4dGVuZHMgQmFzZVNjcmFwZXJXaXRoQnJvd3NlcjxTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscz4ge1xuICBnZXRMb2dpbk9wdGlvbnMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvZ2luVXJsOiBMT0dJTl9VUkwsXG4gICAgICBmaWVsZHM6IGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzKSxcbiAgICAgIHN1Ym1pdEJ1dHRvblNlbGVjdG9yOiBcImJ1dHRvblt0eXBlPSdzdWJtaXQnXVwiLFxuICAgICAgY2hlY2tSZWFkaW5lc3M6IGFzeW5jICgpID0+IG5hdmlnYXRlVG9Mb2dpbih0aGlzLnBhZ2UpLFxuICAgICAgcG9zdEFjdGlvbjogYXN5bmMgKCkgPT4gd2FpdEZvclBvc3RMb2dpbih0aGlzLnBhZ2UpLFxuICAgICAgcG9zc2libGVSZXN1bHRzOiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cygpLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmZXRjaERhdGEoKTogUHJvbWlzZTxTY3JhcGVyU2NyYXBpbmdSZXN1bHQ+IHtcbiAgICBjb25zdCBtaW5pbXVtU3RhcnRNb21lbnQgPSBtb21lbnQoKS5zdWJ0cmFjdCgzLCAneWVhcnMnKS5hZGQoMSwgJ2RheScpO1xuICAgIGNvbnN0IGRlZmF1bHRTdGFydE1vbWVudCA9IG1vbWVudCgpLnN1YnRyYWN0KDEsICd5ZWFycycpLmFkZCgxLCAnZGF5Jyk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSB8fCBkZWZhdWx0U3RhcnRNb21lbnQudG9EYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQubWF4KG1pbmltdW1TdGFydE1vbWVudCwgbW9tZW50KHN0YXJ0RGF0ZSkpO1xuXG4gICAgYXdhaXQgdGhpcy5uYXZpZ2F0ZVRvKFRSQU5TQUNUSU9OU19VUkwpO1xuXG4gICAgY29uc3QgYWNjb3VudHMgPSBhd2FpdCBmZXRjaFRyYW5zYWN0aW9ucyh0aGlzLnBhZ2UsIHN0YXJ0TW9tZW50LCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBhY2NvdW50cyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExldW1pU2NyYXBlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsVUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcscUJBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGFBQUEsR0FBQUws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
@@ -155,13 +155,13 @@ function getMemo({
155
155
  }
156
156
  return comments;
157
157
  }
158
- function mapTransaction(rawTransaction) {
158
+ function mapTransaction(rawTransaction, options) {
159
159
  const isPending = rawTransaction.paymentDate === null;
160
160
  const processedDate = (0, _moment.default)(isPending ? rawTransaction.purchaseDate : rawTransaction.paymentDate).toISOString();
161
161
  const status = isPending ? _transactions2.TransactionStatuses.Pending : _transactions2.TransactionStatuses.Completed;
162
162
  const installments = getInstallmentsInfo(rawTransaction.comments);
163
163
  const identifier = installments ? `${rawTransaction.dealData?.arn}_${installments.number}` : rawTransaction.dealData?.arn;
164
- return {
164
+ const result = {
165
165
  type: getTransactionType(rawTransaction.planName, rawTransaction.planTypeId),
166
166
  date: (0, _moment.default)(rawTransaction.purchaseDate).toISOString(),
167
167
  processedDate,
@@ -176,8 +176,12 @@ function mapTransaction(rawTransaction) {
176
176
  identifier,
177
177
  status
178
178
  };
179
+ if (options?.includeRawTransaction) {
180
+ result.rawTransaction = rawTransaction;
181
+ }
182
+ return result;
179
183
  }
180
- async function fetchTransactionsForMonth(page, monthMoment) {
184
+ async function fetchTransactionsForMonth(page, monthMoment, options) {
181
185
  const url = getTransactionsUrl(monthMoment);
182
186
  const data = await (0, _fetch.fetchGetWithinPage)(page, url);
183
187
  const transactionsByAccount = {};
@@ -188,7 +192,7 @@ async function fetchTransactionsForMonth(page, monthMoment) {
188
192
  if (!transactionsByAccount[transaction.shortCardNumber]) {
189
193
  transactionsByAccount[transaction.shortCardNumber] = [];
190
194
  }
191
- const mappedTransaction = mapTransaction(transaction);
195
+ const mappedTransaction = mapTransaction(transaction, options);
192
196
  transactionsByAccount[transaction.shortCardNumber].push(mappedTransaction);
193
197
  });
194
198
  return transactionsByAccount;
@@ -224,7 +228,7 @@ async function fetchTransactions(page, options) {
224
228
  await loadCategories(page);
225
229
  let allResults = {};
226
230
  for (let i = 0; i < allMonths.length; i += 1) {
227
- const result = await fetchTransactionsForMonth(page, allMonths[i]);
231
+ const result = await fetchTransactionsForMonth(page, allMonths[i], options);
228
232
  allResults = addResult(allResults, result);
229
233
  }
230
234
  Object.keys(allResults).forEach(accountNumber => {
@@ -296,4 +300,4 @@ class MaxScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
296
300
  }
297
301
  }
298
302
  var _default = exports.default = MaxScraper;
299
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2RhdGVzIiwiX2RlYnVnIiwiX2VsZW1lbnRzSW50ZXJhY3Rpb25zIiwiX2ZldGNoIiwiX25hdmlnYXRpb24iLCJfdHJhbnNhY3Rpb25zIiwiX3RyYW5zYWN0aW9uczIiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImRlYnVnIiwiZ2V0RGVidWciLCJCQVNFX0FQSV9BQ1RJT05TX1VSTCIsIkJBU0VfV0VMQ09NRV9VUkwiLCJMT0dJTl9VUkwiLCJQQVNTV09SRF9FWFBJUkVEX1VSTCIsIlNVQ0NFU1NfVVJMIiwiTWF4UGxhbk5hbWUiLCJJTlZBTElEX0RFVEFJTFNfU0VMRUNUT1IiLCJMT0dJTl9FUlJPUl9TRUxFQ1RPUiIsImNhdGVnb3JpZXMiLCJNYXAiLCJyZWRpcmVjdE9yRGlhbG9nIiwicGFnZSIsIlByb21pc2UiLCJyYWNlIiwid2FpdEZvclJlZGlyZWN0Iiwid2FpdFVudGlsRWxlbWVudEZvdW5kIiwiZ2V0VHJhbnNhY3Rpb25zVXJsIiwibW9udGhNb21lbnQiLCJtb250aCIsInllYXIiLCJkYXRlIiwidXJsIiwiVVJMIiwic2VhcmNoUGFyYW1zIiwic2V0IiwidG9TdHJpbmciLCJsb2FkQ2F0ZWdvcmllcyIsInJlcyIsImZldGNoR2V0V2l0aGluUGFnZSIsIkFycmF5IiwiaXNBcnJheSIsInJlc3VsdCIsImxlbmd0aCIsImZvckVhY2giLCJpZCIsIm5hbWUiLCJnZXRUcmFuc2FjdGlvblR5cGUiLCJwbGFuTmFtZSIsInBsYW5UeXBlSWQiLCJjbGVhbmVkVXBUeG5UeXBlU3RyIiwicmVwbGFjZSIsInRyaW0iLCJJbW1lZGlhdGVDaGFyZ2UiLCJOb3JtYWwiLCJNb250aGx5Q2hhcmdlIiwiT25lTW9udGhQb3N0cG9uZWQiLCJNb250aGx5UG9zdHBvbmVkIiwiRnV0dXJlUHVyY2hhc2VGaW5hbmNpbmciLCJNb250aGx5UGF5bWVudCIsIk1vbnRobHlQb3N0cG9uZWRJbnN0YWxsbWVudHMiLCJUaGlydHlEYXlzUGx1cyIsIlR3b01vbnRoc1Bvc3Rwb25lZCIsIlR3b01vbnRoc1Bvc3Rwb25lZDIiLCJBY2N1bXVsYXRpbmdCYXNrZXQiLCJJbnRlcm5ldFNob3BwaW5nIiwiTW9udGhseUNoYXJnZVBsdXNJbnRlcmVzdCIsIlBvc3Rwb25lZFRyYW5zYWN0aW9uSW5zdGFsbG1lbnRzIiwiUmVwbGFjZW1lbnRDYXJkIiwiRWFybHlSZXBheW1lbnQiLCJNb250aGx5Q2FyZEZlZSIsIkN1cnJlbmN5UG9ja2V0IiwiVHJhbnNhY3Rpb25UeXBlcyIsIkluc3RhbGxtZW50cyIsIkNyZWRpdCIsIkNyZWRpdE91dHNpZGVUaGVMaW1pdCIsIkVycm9yIiwiZ2V0SW5zdGFsbG1lbnRzSW5mbyIsImNvbW1lbnRzIiwidW5kZWZpbmVkIiwibWF0Y2hlcyIsIm1hdGNoIiwibnVtYmVyIiwicGFyc2VJbnQiLCJ0b3RhbCIsImdldENoYXJnZWRDdXJyZW5jeSIsImN1cnJlbmN5SWQiLCJTSEVLRUxfQ1VSUkVOQ1kiLCJET0xMQVJfQ1VSUkVOQ1kiLCJFVVJPX0NVUlJFTkNZIiwiZ2V0TWVtbyIsImZ1bmRzVHJhbnNmZXJSZWNlaXZlck9yVHJhbnNmZXIiLCJmdW5kc1RyYW5zZmVyQ29tbWVudCIsIm1lbW8iLCJtYXBUcmFuc2FjdGlvbiIsInJhd1RyYW5zYWN0aW9uIiwiaXNQZW5kaW5nIiwicGF5bWVudERhdGUiLCJwcm9jZXNzZWREYXRlIiwibW9tZW50IiwicHVyY2hhc2VEYXRlIiwidG9JU09TdHJpbmciLCJzdGF0dXMiLCJUcmFuc2FjdGlvblN0YXR1c2VzIiwiUGVuZGluZyIsIkNvbXBsZXRlZCIsImluc3RhbGxtZW50cyIsImlkZW50aWZpZXIiLCJkZWFsRGF0YSIsImFybiIsInR5cGUiLCJvcmlnaW5hbEFtb3VudCIsIm9yaWdpbmFsQ3VycmVuY3kiLCJjaGFyZ2VkQW1vdW50IiwiYWN0dWFsUGF5bWVudEFtb3VudCIsImNoYXJnZWRDdXJyZW5jeSIsInBheW1lbnRDdXJyZW5jeSIsImRlc2NyaXB0aW9uIiwibWVyY2hhbnROYW1lIiwiY2F0ZWdvcnkiLCJnZXQiLCJjYXRlZ29yeUlkIiwiZmV0Y2hUcmFuc2FjdGlvbnNGb3JNb250aCIsImRhdGEiLCJ0cmFuc2FjdGlvbnNCeUFjY291bnQiLCJ0cmFuc2FjdGlvbnMiLCJmaWx0ZXIiLCJ0cmFuc2FjdGlvbiIsInNob3J0Q2FyZE51bWJlciIsIm1hcHBlZFRyYW5zYWN0aW9uIiwicHVzaCIsImFkZFJlc3VsdCIsImFsbFJlc3VsdHMiLCJjbG9uZWRSZXN1bHRzIiwiT2JqZWN0Iiwia2V5cyIsImFjY291bnROdW1iZXIiLCJwcmVwYXJlVHJhbnNhY3Rpb25zIiwidHhucyIsInN0YXJ0TW9tZW50IiwiY29tYmluZUluc3RhbGxtZW50cyIsImVuYWJsZVRyYW5zYWN0aW9uc0ZpbHRlckJ5RGF0ZSIsImNsb25lZFR4bnMiLCJmcm9tIiwiZml4SW5zdGFsbG1lbnRzIiwic29ydFRyYW5zYWN0aW9uc0J5RGF0ZSIsImZpbHRlck9sZFRyYW5zYWN0aW9ucyIsImZldGNoVHJhbnNhY3Rpb25zIiwib3B0aW9ucyIsImZ1dHVyZU1vbnRoc1RvU2NyYXBlIiwiZGVmYXVsdFN0YXJ0TW9tZW50Iiwic3VidHJhY3QiLCJzdGFydE1vbWVudExpbWl0Iiwic3RhcnREYXRlIiwidG9EYXRlIiwibWF4IiwiYWxsTW9udGhzIiwiZ2V0QWxsTW9udGhNb21lbnRzIiwiaSIsIm91dHB1dERhdGEiLCJnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyIsInVybHMiLCJMb2dpblJlc3VsdHMiLCJTdWNjZXNzIiwiQ2hhbmdlUGFzc3dvcmQiLCJJbnZhbGlkUGFzc3dvcmQiLCJlbGVtZW50UHJlc2VudE9uUGFnZSIsIlVua25vd25FcnJvciIsImNyZWF0ZUxvZ2luRmllbGRzIiwiY3JlZGVudGlhbHMiLCJzZWxlY3RvciIsInZhbHVlIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIk1heFNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZ2V0TG9naW5PcHRpb25zIiwibG9naW5VcmwiLCJmaWVsZHMiLCJzdWJtaXRCdXR0b25TZWxlY3RvciIsInByZUFjdGlvbiIsImNsaWNrQnV0dG9uIiwiY2hlY2tSZWFkaW5lc3MiLCJwb3N0QWN0aW9uIiwicG9zc2libGVSZXN1bHRzIiwid2FpdFVudGlsIiwiZmV0Y2hEYXRhIiwicmVzdWx0cyIsImFjY291bnRzIiwibWFwIiwic3VjY2VzcyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9tYXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCwgeyB0eXBlIE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyB0eXBlIFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHsgRE9MTEFSX0NVUlJFTkNZLCBFVVJPX0NVUlJFTkNZLCBTSEVLRUxfQ1VSUkVOQ1kgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IGdldEFsbE1vbnRoTW9tZW50cyBmcm9tICcuLi9oZWxwZXJzL2RhdGVzJztcbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQgeyBjbGlja0J1dHRvbiwgZWxlbWVudFByZXNlbnRPblBhZ2UsIHdhaXRVbnRpbEVsZW1lbnRGb3VuZCB9IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IGZldGNoR2V0V2l0aGluUGFnZSB9IGZyb20gJy4uL2hlbHBlcnMvZmV0Y2gnO1xuaW1wb3J0IHsgd2FpdEZvclJlZGlyZWN0IH0gZnJvbSAnLi4vaGVscGVycy9uYXZpZ2F0aW9uJztcbmltcG9ydCB7IGZpbHRlck9sZFRyYW5zYWN0aW9ucywgZml4SW5zdGFsbG1lbnRzLCBzb3J0VHJhbnNhY3Rpb25zQnlEYXRlIH0gZnJvbSAnLi4vaGVscGVycy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25TdGF0dXNlcywgVHJhbnNhY3Rpb25UeXBlcywgdHlwZSBUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQge1xuICBCYXNlU2NyYXBlcldpdGhCcm93c2VyLFxuICBMb2dpblJlc3VsdHMsXG4gIHR5cGUgTG9naW5PcHRpb25zLFxuICB0eXBlIFBvc3NpYmxlTG9naW5SZXN1bHRzLFxufSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuaW1wb3J0IHsgdHlwZSBTY3JhcGVyT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuY29uc3QgZGVidWcgPSBnZXREZWJ1ZygnbWF4Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uIHtcbiAgc2hvcnRDYXJkTnVtYmVyOiBzdHJpbmc7XG4gIHBheW1lbnREYXRlPzogc3RyaW5nO1xuICBwdXJjaGFzZURhdGU6IHN0cmluZztcbiAgYWN0dWFsUGF5bWVudEFtb3VudDogc3RyaW5nO1xuICBwYXltZW50Q3VycmVuY3k6IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsQ3VycmVuY3k6IHN0cmluZztcbiAgb3JpZ2luYWxBbW91bnQ6IG51bWJlcjtcbiAgcGxhbk5hbWU6IHN0cmluZztcbiAgcGxhblR5cGVJZDogbnVtYmVyO1xuICBjb21tZW50czogc3RyaW5nO1xuICBtZXJjaGFudE5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcnlJZDogbnVtYmVyO1xuICBmdW5kc1RyYW5zZmVyQ29tbWVudD86IHN0cmluZztcbiAgZnVuZHNUcmFuc2ZlclJlY2VpdmVyT3JUcmFuc2Zlcj86IHN0cmluZztcbiAgZGVhbERhdGE/OiB7XG4gICAgYXJuOiBzdHJpbmc7XG4gIH07XG59XG5cbmNvbnN0IEJBU0VfQVBJX0FDVElPTlNfVVJMID0gJ2h0dHBzOi8vb25saW5lbGNhcGkubWF4LmNvLmlsJztcbmNvbnN0IEJBU0VfV0VMQ09NRV9VUkwgPSAnaHR0cHM6Ly93d3cubWF4LmNvLmlsJztcblxuY29uc3QgTE9HSU5fVVJMID0gYCR7QkFTRV9XRUxDT01FX1VSTH0vbG9naW5gO1xuY29uc3QgUEFTU1dPUkRfRVhQSVJFRF9VUkwgPSBgJHtCQVNFX1dFTENPTUVfVVJMfS9yZW5ldy1wYXNzd29yZGA7XG5jb25zdCBTVUNDRVNTX1VSTCA9IGAke0JBU0VfV0VMQ09NRV9VUkx9L2hvbWVwYWdlL3BlcnNvbmFsYDtcblxuZW51bSBNYXhQbGFuTmFtZSB7XG4gIE5vcm1hbCA9ICfXqNeS15nXnNeUJyxcbiAgSW1tZWRpYXRlQ2hhcmdlID0gJ9eX15nXldeRINei16HXp9eV16og157XmdeZ15PXmScsXG4gIEludGVybmV0U2hvcHBpbmcgPSAn15DXmdeg15jXqNeg15gv15fXlVwi15wnLFxuICBJbnN0YWxsbWVudHMgPSAn16rXqdec15XXnteZ150nLFxuICBNb250aGx5Q2hhcmdlID0gJ9eX15nXldeRINeX15XXk9ep15knLFxuICBPbmVNb250aFBvc3Rwb25lZCA9ICfXk9eX15XXmSDXl9eV15PXqScsXG4gIE1vbnRobHlQb3N0cG9uZWQgPSAn15PXl9eV15kg15zXl9eZ15XXkSDXlNeX15XXk9ep15knLFxuICBNb250aGx5UGF5bWVudCA9ICfXqtep15zXldedINeX15XXk9ep15knLFxuICBGdXR1cmVQdXJjaGFzZUZpbmFuY2luZyA9ICfXnteZ157XldefINec16jXm9eZ16nXlCDXoteq15nXk9eZ16onLFxuICBNb250aGx5UG9zdHBvbmVkSW5zdGFsbG1lbnRzID0gJ9eT15fXldeZINeX15XXk9epINeq16nXnNeV157XmdedJyxcbiAgVGhpcnR5RGF5c1BsdXMgPSAn16LXoden16ogMzAg16TXnNeV16EnLFxuICBUd29Nb250aHNQb3N0cG9uZWQgPSAn15PXl9eV15kg15fXldeT16nXmdeZ150nLFxuICBUd29Nb250aHNQb3N0cG9uZWQyID0gXCLXk9eX15XXmSAyINeXJyDXqtep15zXldee15nXnVwiLFxuICBNb250aGx5Q2hhcmdlUGx1c0ludGVyZXN0ID0gJ9eX15XXk9ep15kgKyDXqNeZ15HXmdeqJyxcbiAgQ3JlZGl0ID0gJ9en16jXk9eZ15gnLFxuICBDcmVkaXRPdXRzaWRlVGhlTGltaXQgPSAn16fXqNeT15nXmC3XnteX15XXpSDXnNee16HXkteo16onLFxuICBBY2N1bXVsYXRpbmdCYXNrZXQgPSAn16HXnCDXntem15jXkdeoJyxcbiAgUG9zdHBvbmVkVHJhbnNhY3Rpb25JbnN0YWxsbWVudHMgPSAn16TXqNeZ16HXqiDXlNei16HXp9eUINeU15PXl9eV15nXlCcsXG4gIFJlcGxhY2VtZW50Q2FyZCA9ICfXm9eo15jXmdehINeX15zXmdek15knLFxuICBFYXJseVJlcGF5bWVudCA9ICfXpNeo16LXldefINee15XXp9eT150nLFxuICBNb250aGx5Q2FyZEZlZSA9ICfXk9ee15kg15vXqNeY15nXoScsXG4gIEN1cnJlbmN5UG9ja2V0ID0gJ9eX15nXldeRINeQ16jXoNenINee15jXlycsXG59XG5cbmNvbnN0IElOVkFMSURfREVUQUlMU19TRUxFQ1RPUiA9ICcjcG9wdXBXcm9uZ0RldGFpbHMnO1xuY29uc3QgTE9HSU5fRVJST1JfU0VMRUNUT1IgPSAnI3BvcHVwQ2FyZEhvbGRlcnNMb2dpbkVycm9yJztcblxuY29uc3QgY2F0ZWdvcmllcyA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG5cbmZ1bmN0aW9uIHJlZGlyZWN0T3JEaWFsb2cocGFnZTogUGFnZSkge1xuICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcbiAgICB3YWl0Rm9yUmVkaXJlY3QocGFnZSwgMjAwMDAsIGZhbHNlLCBbQkFTRV9XRUxDT01FX1VSTCwgYCR7QkFTRV9XRUxDT01FX1VSTH0vYF0pLFxuICAgIHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCBJTlZBTElEX0RFVEFJTFNfU0VMRUNUT1IsIHRydWUpLFxuICAgIHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCBMT0dJTl9FUlJPUl9TRUxFQ1RPUiwgdHJ1ZSksXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2FjdGlvbnNVcmwobW9udGhNb21lbnQ6IE1vbWVudCkge1xuICBjb25zdCBtb250aCA9IG1vbnRoTW9tZW50Lm1vbnRoKCkgKyAxO1xuICBjb25zdCB5ZWFyID0gbW9udGhNb21lbnQueWVhcigpO1xuICBjb25zdCBkYXRlID0gYCR7eWVhcn0tJHttb250aH0tMDFgO1xuXG4gIC8qKlxuICAgKiB1cmwgZXhwbGFuYXRpb246XG4gICAqIHVzZXJJbmRleDogLTEgZm9yIGFsbCBhY2NvdW50IG93bmVyc1xuICAgKiBjYXJkSW5kZXg6IC0xIGZvciBhbGwgY2FyZHMgdW5kZXIgdGhlIGFjY291bnRcbiAgICogYWxsIG90aGVyIHF1ZXJ5IHBhcmFtcyBhcmUgc3RhdGljLCBiZXNpZGUgdGhlIGRhdGUgd2hpY2ggY2hhbmdlcyBmb3IgcmVxdWVzdCBwZXIgbW9udGhcbiAgICovXG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7QkFTRV9BUElfQUNUSU9OU19VUkx9L2FwaS9yZWdpc3RlcmVkL3RyYW5zYWN0aW9uRGV0YWlscy9nZXRUcmFuc2FjdGlvbnNBbmRHcmFwaHNgKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXG4gICAgJ2ZpbHRlckRhdGEnLFxuICAgIGB7XCJ1c2VySW5kZXhcIjotMSxcImNhcmRJbmRleFwiOi0xLFwibW9udGhWaWV3XCI6dHJ1ZSxcImRhdGVcIjpcIiR7ZGF0ZX1cIixcImRhdGVzXCI6e1wic3RhcnREYXRlXCI6XCIwXCIsXCJlbmREYXRlXCI6XCIwXCJ9LFwiYmFua0FjY291bnRcIjp7XCJiYW5rQWNjb3VudEluZGV4XCI6LTEsXCJjYXJkc1wiOm51bGx9fWAsXG4gICk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdmaXJzdENhbGxDYXJkSW5kZXgnLCAnLTEnKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuXG5pbnRlcmZhY2UgRmV0Y2hDYXRlZ29yeVJlc3VsdCB7XG4gIHJlc3VsdD86IEFycmF5PHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgfT47XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRDYXRlZ29yaWVzKHBhZ2U6IFBhZ2UpIHtcbiAgZGVidWcoJ0xvYWRpbmcgY2F0ZWdvcmllcycpO1xuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8RmV0Y2hDYXRlZ29yeVJlc3VsdD4ocGFnZSwgYCR7QkFTRV9BUElfQUNUSU9OU19VUkx9L2FwaS9jb250ZW50cy9nZXRDYXRlZ29yaWVzYCk7XG4gIGlmIChyZXMgJiYgQXJyYXkuaXNBcnJheShyZXMucmVzdWx0KSkge1xuICAgIGRlYnVnKGAke3Jlcy5yZXN1bHQubGVuZ3RofSBjYXRlZ29yaWVzIGxvYWRlZGApO1xuICAgIHJlcy5yZXN1bHQ/LmZvckVhY2goKHsgaWQsIG5hbWUgfSkgPT4gY2F0ZWdvcmllcy5zZXQoaWQsIG5hbWUpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2FjdGlvblR5cGUocGxhbk5hbWU6IHN0cmluZywgcGxhblR5cGVJZDogbnVtYmVyKSB7XG4gIGNvbnN0IGNsZWFuZWRVcFR4blR5cGVTdHIgPSBwbGFuTmFtZS5yZXBsYWNlKCdcXHQnLCAnICcpLnRyaW0oKSBhcyBNYXhQbGFuTmFtZTtcbiAgc3dpdGNoIChjbGVhbmVkVXBUeG5UeXBlU3RyKSB7XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5JbW1lZGlhdGVDaGFyZ2U6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5Ob3JtYWw6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5Nb250aGx5Q2hhcmdlOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuT25lTW9udGhQb3N0cG9uZWQ6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5Nb250aGx5UG9zdHBvbmVkOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuRnV0dXJlUHVyY2hhc2VGaW5hbmNpbmc6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5Nb250aGx5UGF5bWVudDpcbiAgICBjYXNlIE1heFBsYW5OYW1lLk1vbnRobHlQb3N0cG9uZWRJbnN0YWxsbWVudHM6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5UaGlydHlEYXlzUGx1czpcbiAgICBjYXNlIE1heFBsYW5OYW1lLlR3b01vbnRoc1Bvc3Rwb25lZDpcbiAgICBjYXNlIE1heFBsYW5OYW1lLlR3b01vbnRoc1Bvc3Rwb25lZDI6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5BY2N1bXVsYXRpbmdCYXNrZXQ6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5JbnRlcm5ldFNob3BwaW5nOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuTW9udGhseUNoYXJnZVBsdXNJbnRlcmVzdDpcbiAgICBjYXNlIE1heFBsYW5OYW1lLlBvc3Rwb25lZFRyYW5zYWN0aW9uSW5zdGFsbG1lbnRzOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuUmVwbGFjZW1lbnRDYXJkOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuRWFybHlSZXBheW1lbnQ6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5Nb250aGx5Q2FyZEZlZTpcbiAgICBjYXNlIE1heFBsYW5OYW1lLkN1cnJlbmN5UG9ja2V0OlxuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZXMuTm9ybWFsO1xuICAgIGNhc2UgTWF4UGxhbk5hbWUuSW5zdGFsbG1lbnRzOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuQ3JlZGl0OlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuQ3JlZGl0T3V0c2lkZVRoZUxpbWl0OlxuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZXMuSW5zdGFsbG1lbnRzO1xuICAgIGRlZmF1bHQ6XG4gICAgICBzd2l0Y2ggKHBsYW5UeXBlSWQpIHtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZXMuSW5zdGFsbG1lbnRzO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZXMuTm9ybWFsO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0cmFuc2FjdGlvbiB0eXBlICR7Y2xlYW5lZFVwVHhuVHlwZVN0ciBhcyBzdHJpbmd9YCk7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SW5zdGFsbG1lbnRzSW5mbyhjb21tZW50czogc3RyaW5nKSB7XG4gIGlmICghY29tbWVudHMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBjb21tZW50cy5tYXRjaCgvXFxkKy9nKTtcbiAgaWYgKCFtYXRjaGVzIHx8IG1hdGNoZXMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlcjogcGFyc2VJbnQobWF0Y2hlc1swXSwgMTApLFxuICAgIHRvdGFsOiBwYXJzZUludChtYXRjaGVzWzFdLCAxMCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENoYXJnZWRDdXJyZW5jeShjdXJyZW5jeUlkOiBudW1iZXIgfCBudWxsKSB7XG4gIHN3aXRjaCAoY3VycmVuY3lJZCkge1xuICAgIGNhc2UgMzc2OlxuICAgICAgcmV0dXJuIFNIRUtFTF9DVVJSRU5DWTtcbiAgICBjYXNlIDg0MDpcbiAgICAgIHJldHVybiBET0xMQVJfQ1VSUkVOQ1k7XG4gICAgY2FzZSA5Nzg6XG4gICAgICByZXR1cm4gRVVST19DVVJSRU5DWTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVtbyh7XG4gIGNvbW1lbnRzLFxuICBmdW5kc1RyYW5zZmVyUmVjZWl2ZXJPclRyYW5zZmVyLFxuICBmdW5kc1RyYW5zZmVyQ29tbWVudCxcbn06IFBpY2s8U2NyYXBlZFRyYW5zYWN0aW9uLCAnY29tbWVudHMnIHwgJ2Z1bmRzVHJhbnNmZXJSZWNlaXZlck9yVHJhbnNmZXInIHwgJ2Z1bmRzVHJhbnNmZXJDb21tZW50Jz4pIHtcbiAgaWYgKGZ1bmRzVHJhbnNmZXJSZWNlaXZlck9yVHJhbnNmZXIpIHtcbiAgICBjb25zdCBtZW1vID0gY29tbWVudHMgPyBgJHtjb21tZW50c30gJHtmdW5kc1RyYW5zZmVyUmVjZWl2ZXJPclRyYW5zZmVyfWAgOiBmdW5kc1RyYW5zZmVyUmVjZWl2ZXJPclRyYW5zZmVyO1xuICAgIHJldHVybiBmdW5kc1RyYW5zZmVyQ29tbWVudCA/IGAke21lbW99OiAke2Z1bmRzVHJhbnNmZXJDb21tZW50fWAgOiBtZW1vO1xuICB9XG5cbiAgcmV0dXJuIGNvbW1lbnRzO1xufVxuXG5mdW5jdGlvbiBtYXBUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogU2NyYXBlZFRyYW5zYWN0aW9uKTogVHJhbnNhY3Rpb24ge1xuICBjb25zdCBpc1BlbmRpbmcgPSByYXdUcmFuc2FjdGlvbi5wYXltZW50RGF0ZSA9PT0gbnVsbDtcbiAgY29uc3QgcHJvY2Vzc2VkRGF0ZSA9IG1vbWVudChpc1BlbmRpbmcgPyByYXdUcmFuc2FjdGlvbi5wdXJjaGFzZURhdGUgOiByYXdUcmFuc2FjdGlvbi5wYXltZW50RGF0ZSkudG9JU09TdHJpbmcoKTtcbiAgY29uc3Qgc3RhdHVzID0gaXNQZW5kaW5nID8gVHJhbnNhY3Rpb25TdGF0dXNlcy5QZW5kaW5nIDogVHJhbnNhY3Rpb25TdGF0dXNlcy5Db21wbGV0ZWQ7XG5cbiAgY29uc3QgaW5zdGFsbG1lbnRzID0gZ2V0SW5zdGFsbG1lbnRzSW5mbyhyYXdUcmFuc2FjdGlvbi5jb21tZW50cyk7XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBpbnN0YWxsbWVudHNcbiAgICA/IGAke3Jhd1RyYW5zYWN0aW9uLmRlYWxEYXRhPy5hcm59XyR7aW5zdGFsbG1lbnRzLm51bWJlcn1gXG4gICAgOiByYXdUcmFuc2FjdGlvbi5kZWFsRGF0YT8uYXJuO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogZ2V0VHJhbnNhY3Rpb25UeXBlKHJhd1RyYW5zYWN0aW9uLnBsYW5OYW1lLCByYXdUcmFuc2FjdGlvbi5wbGFuVHlwZUlkKSxcbiAgICBkYXRlOiBtb21lbnQocmF3VHJhbnNhY3Rpb24ucHVyY2hhc2VEYXRlKS50b0lTT1N0cmluZygpLFxuICAgIHByb2Nlc3NlZERhdGUsXG4gICAgb3JpZ2luYWxBbW91bnQ6IC1yYXdUcmFuc2FjdGlvbi5vcmlnaW5hbEFtb3VudCxcbiAgICBvcmlnaW5hbEN1cnJlbmN5OiByYXdUcmFuc2FjdGlvbi5vcmlnaW5hbEN1cnJlbmN5LFxuICAgIGNoYXJnZWRBbW91bnQ6IC1yYXdUcmFuc2FjdGlvbi5hY3R1YWxQYXltZW50QW1vdW50LFxuICAgIGNoYXJnZWRDdXJyZW5jeTogZ2V0Q2hhcmdlZEN1cnJlbmN5KHJhd1RyYW5zYWN0aW9uLnBheW1lbnRDdXJyZW5jeSksXG4gICAgZGVzY3JpcHRpb246IHJhd1RyYW5zYWN0aW9uLm1lcmNoYW50TmFtZS50cmltKCksXG4gICAgbWVtbzogZ2V0TWVtbyhyYXdUcmFuc2FjdGlvbiksXG4gICAgY2F0ZWdvcnk6IGNhdGVnb3JpZXMuZ2V0KHJhd1RyYW5zYWN0aW9uPy5jYXRlZ29yeUlkKSxcbiAgICBpbnN0YWxsbWVudHMsXG4gICAgaWRlbnRpZmllcixcbiAgICBzdGF0dXMsXG4gIH07XG59XG5pbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uc1Jlc3VsdCB7XG4gIHJlc3VsdD86IHtcbiAgICB0cmFuc2FjdGlvbnM6IFNjcmFwZWRUcmFuc2FjdGlvbltdO1xuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaFRyYW5zYWN0aW9uc0Zvck1vbnRoKHBhZ2U6IFBhZ2UsIG1vbnRoTW9tZW50OiBNb21lbnQpIHtcbiAgY29uc3QgdXJsID0gZ2V0VHJhbnNhY3Rpb25zVXJsKG1vbnRoTW9tZW50KTtcblxuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hHZXRXaXRoaW5QYWdlPFNjcmFwZWRUcmFuc2FjdGlvbnNSZXN1bHQ+KHBhZ2UsIHVybCk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uc0J5QWNjb3VudDogUmVjb3JkPHN0cmluZywgVHJhbnNhY3Rpb25bXT4gPSB7fTtcblxuICBpZiAoIWRhdGEgfHwgIWRhdGEucmVzdWx0KSByZXR1cm4gdHJhbnNhY3Rpb25zQnlBY2NvdW50O1xuXG4gIGRhdGEucmVzdWx0LnRyYW5zYWN0aW9uc1xuICAgIC8vIEZpbHRlciBvdXQgbm9uLXRyYW5zYWN0aW9ucyB3aXRob3V0IGEgcGxhbiB0eXBlLCBlLmcuIHN1bW1hcnkgcm93c1xuICAgIC5maWx0ZXIodHJhbnNhY3Rpb24gPT4gISF0cmFuc2FjdGlvbi5wbGFuTmFtZSlcbiAgICAuZm9yRWFjaCgodHJhbnNhY3Rpb246IFNjcmFwZWRUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgaWYgKCF0cmFuc2FjdGlvbnNCeUFjY291bnRbdHJhbnNhY3Rpb24uc2hvcnRDYXJkTnVtYmVyXSkge1xuICAgICAgICB0cmFuc2FjdGlvbnNCeUFjY291bnRbdHJhbnNhY3Rpb24uc2hvcnRDYXJkTnVtYmVyXSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBwZWRUcmFuc2FjdGlvbiA9IG1hcFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKTtcbiAgICAgIHRyYW5zYWN0aW9uc0J5QWNjb3VudFt0cmFuc2FjdGlvbi5zaG9ydENhcmROdW1iZXJdLnB1c2gobWFwcGVkVHJhbnNhY3Rpb24pO1xuICAgIH0pO1xuXG4gIHJldHVybiB0cmFuc2FjdGlvbnNCeUFjY291bnQ7XG59XG5cbmZ1bmN0aW9uIGFkZFJlc3VsdChhbGxSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBUcmFuc2FjdGlvbltdPiwgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBUcmFuc2FjdGlvbltdPikge1xuICBjb25zdCBjbG9uZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBUcmFuc2FjdGlvbltdPiA9IHsgLi4uYWxsUmVzdWx0cyB9O1xuICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goYWNjb3VudE51bWJlciA9PiB7XG4gICAgaWYgKCFjbG9uZWRSZXN1bHRzW2FjY291bnROdW1iZXJdKSB7XG4gICAgICBjbG9uZWRSZXN1bHRzW2FjY291bnROdW1iZXJdID0gW107XG4gICAgfVxuICAgIGNsb25lZFJlc3VsdHNbYWNjb3VudE51bWJlcl0ucHVzaCguLi5yZXN1bHRbYWNjb3VudE51bWJlcl0pO1xuICB9KTtcbiAgcmV0dXJuIGNsb25lZFJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUcmFuc2FjdGlvbnMoXG4gIHR4bnM6IFRyYW5zYWN0aW9uW10sXG4gIHN0YXJ0TW9tZW50OiBtb21lbnQuTW9tZW50LFxuICBjb21iaW5lSW5zdGFsbG1lbnRzOiBib29sZWFuLFxuICBlbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGU6IGJvb2xlYW4sXG4pIHtcbiAgbGV0IGNsb25lZFR4bnMgPSBBcnJheS5mcm9tKHR4bnMpO1xuICBpZiAoIWNvbWJpbmVJbnN0YWxsbWVudHMpIHtcbiAgICBjbG9uZWRUeG5zID0gZml4SW5zdGFsbG1lbnRzKGNsb25lZFR4bnMpO1xuICB9XG4gIGNsb25lZFR4bnMgPSBzb3J0VHJhbnNhY3Rpb25zQnlEYXRlKGNsb25lZFR4bnMpO1xuICBjbG9uZWRUeG5zID0gZW5hYmxlVHJhbnNhY3Rpb25zRmlsdGVyQnlEYXRlXG4gICAgPyBmaWx0ZXJPbGRUcmFuc2FjdGlvbnMoY2xvbmVkVHhucywgc3RhcnRNb21lbnQsIGNvbWJpbmVJbnN0YWxsbWVudHMgfHwgZmFsc2UpXG4gICAgOiBjbG9uZWRUeG5zO1xuICByZXR1cm4gY2xvbmVkVHhucztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hUcmFuc2FjdGlvbnMocGFnZTogUGFnZSwgb3B0aW9uczogU2NyYXBlck9wdGlvbnMpIHtcbiAgY29uc3QgZnV0dXJlTW9udGhzVG9TY3JhcGUgPSBvcHRpb25zLmZ1dHVyZU1vbnRoc1RvU2NyYXBlID8/IDE7XG4gIGNvbnN0IGRlZmF1bHRTdGFydE1vbWVudCA9IG1vbWVudCgpLnN1YnRyYWN0KDEsICd5ZWFycycpO1xuICBjb25zdCBzdGFydE1vbWVudExpbWl0ID0gbW9tZW50KCkuc3VidHJhY3QoNCwgJ3llYXJzJyk7XG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IG9wdGlvbnMuc3RhcnREYXRlIHx8IGRlZmF1bHRTdGFydE1vbWVudC50b0RhdGUoKTtcbiAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQubWF4KHN0YXJ0TW9tZW50TGltaXQsIG1vbWVudChzdGFydERhdGUpKTtcbiAgY29uc3QgYWxsTW9udGhzID0gZ2V0QWxsTW9udGhNb21lbnRzKHN0YXJ0TW9tZW50LCBmdXR1cmVNb250aHNUb1NjcmFwZSk7XG5cbiAgYXdhaXQgbG9hZENhdGVnb3JpZXMocGFnZSk7XG5cbiAgbGV0IGFsbFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIFRyYW5zYWN0aW9uW10+ID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsTW9udGhzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hUcmFuc2FjdGlvbnNGb3JNb250aChwYWdlLCBhbGxNb250aHNbaV0pO1xuICAgIGFsbFJlc3VsdHMgPSBhZGRSZXN1bHQoYWxsUmVzdWx0cywgcmVzdWx0KTtcbiAgfVxuXG4gIE9iamVjdC5rZXlzKGFsbFJlc3VsdHMpLmZvckVhY2goYWNjb3VudE51bWJlciA9PiB7XG4gICAgbGV0IHR4bnMgPSBhbGxSZXN1bHRzW2FjY291bnROdW1iZXJdO1xuICAgIHR4bnMgPSBwcmVwYXJlVHJhbnNhY3Rpb25zKFxuICAgICAgdHhucyxcbiAgICAgIHN0YXJ0TW9tZW50LFxuICAgICAgb3B0aW9ucy5jb21iaW5lSW5zdGFsbG1lbnRzIHx8IGZhbHNlLFxuICAgICAgb3B0aW9ucy5vdXRwdXREYXRhPy5lbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGUgPz8gdHJ1ZSxcbiAgICApO1xuICAgIGFsbFJlc3VsdHNbYWNjb3VudE51bWJlcl0gPSB0eG5zO1xuICB9KTtcblxuICByZXR1cm4gYWxsUmVzdWx0cztcbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVMb2dpblJlc3VsdHMocGFnZTogUGFnZSk6IFBvc3NpYmxlTG9naW5SZXN1bHRzIHtcbiAgY29uc3QgdXJsczogUG9zc2libGVMb2dpblJlc3VsdHMgPSB7fTtcbiAgdXJsc1tMb2dpblJlc3VsdHMuU3VjY2Vzc10gPSBbU1VDQ0VTU19VUkxdO1xuICB1cmxzW0xvZ2luUmVzdWx0cy5DaGFuZ2VQYXNzd29yZF0gPSBbUEFTU1dPUkRfRVhQSVJFRF9VUkxdO1xuICB1cmxzW0xvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmRdID0gW1xuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBlbGVtZW50UHJlc2VudE9uUGFnZShwYWdlLCBJTlZBTElEX0RFVEFJTFNfU0VMRUNUT1IpO1xuICAgIH0sXG4gIF07XG4gIHVybHNbTG9naW5SZXN1bHRzLlVua25vd25FcnJvcl0gPSBbXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGVsZW1lbnRQcmVzZW50T25QYWdlKHBhZ2UsIExPR0lOX0VSUk9SX1NFTEVDVE9SKTtcbiAgICB9LFxuICBdO1xuICByZXR1cm4gdXJscztcbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gIHJldHVybiBbXG4gICAgeyBzZWxlY3RvcjogJyN1c2VyLW5hbWUnLCB2YWx1ZTogY3JlZGVudGlhbHMudXNlcm5hbWUgfSxcbiAgICB7IHNlbGVjdG9yOiAnI3Bhc3N3b3JkJywgdmFsdWU6IGNyZWRlbnRpYWxzLnBhc3N3b3JkIH0sXG4gIF07XG59XG5cbnR5cGUgU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMgPSB7IHVzZXJuYW1lOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfTtcblxuY2xhc3MgTWF4U2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyV2l0aEJyb3dzZXI8U2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHM+IHtcbiAgZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyk6IExvZ2luT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvZ2luVXJsOiBMT0dJTl9VUkwsXG4gICAgICBmaWVsZHM6IGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzKSxcbiAgICAgIHN1Ym1pdEJ1dHRvblNlbGVjdG9yOiAnYXBwLXVzZXItbG9naW4tZm9ybSAuZ2VuZXJhbC1idXR0b24uc2VuZC1tZS1jb2RlJyxcbiAgICAgIHByZUFjdGlvbjogYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoYXdhaXQgZWxlbWVudFByZXNlbnRPblBhZ2UodGhpcy5wYWdlLCAnI2Nsb3NlUG9wdXAnKSkge1xuICAgICAgICAgIGF3YWl0IGNsaWNrQnV0dG9uKHRoaXMucGFnZSwgJyNjbG9zZVBvcHVwJyk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgY2xpY2tCdXR0b24odGhpcy5wYWdlLCAnLnBlcnNvbmFsLWFyZWEgPiBhLmdvLXRvLXBlcnNvbmFsLWFyZWEnKTtcbiAgICAgICAgaWYgKGF3YWl0IGVsZW1lbnRQcmVzZW50T25QYWdlKHRoaXMucGFnZSwgJy5sb2dpbi1saW5rI3ByaXZhdGUnKSkge1xuICAgICAgICAgIGF3YWl0IGNsaWNrQnV0dG9uKHRoaXMucGFnZSwgJy5sb2dpbi1saW5rI3ByaXZhdGUnKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQodGhpcy5wYWdlLCAnI2xvZ2luLXBhc3N3b3JkLWxpbmsnLCB0cnVlKTtcbiAgICAgICAgYXdhaXQgY2xpY2tCdXR0b24odGhpcy5wYWdlLCAnI2xvZ2luLXBhc3N3b3JkLWxpbmsnKTtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKHRoaXMucGFnZSwgJyNsb2dpbi1wYXNzd29yZC50YWItcGFuZS5hY3RpdmUgYXBwLXVzZXItbG9naW4tZm9ybScsIHRydWUpO1xuICAgICAgfSxcbiAgICAgIGNoZWNrUmVhZGluZXNzOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZCh0aGlzLnBhZ2UsICcucGVyc29uYWwtYXJlYSA+IGEuZ28tdG8tcGVyc29uYWwtYXJlYScsIHRydWUpO1xuICAgICAgfSxcbiAgICAgIHBvc3RBY3Rpb246IGFzeW5jICgpID0+IHJlZGlyZWN0T3JEaWFsb2codGhpcy5wYWdlKSxcbiAgICAgIHBvc3NpYmxlUmVzdWx0czogZ2V0UG9zc2libGVMb2dpblJlc3VsdHModGhpcy5wYWdlKSxcbiAgICAgIHdhaXRVbnRpbDogJ2RvbWNvbnRlbnRsb2FkZWQnLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmZXRjaERhdGEoKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGZldGNoVHJhbnNhY3Rpb25zKHRoaXMucGFnZSwgdGhpcy5vcHRpb25zKTtcbiAgICBjb25zdCBhY2NvdW50cyA9IE9iamVjdC5rZXlzKHJlc3VsdHMpLm1hcChhY2NvdW50TnVtYmVyID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFjY291bnROdW1iZXIsXG4gICAgICAgIHR4bnM6IHJlc3VsdHNbYWNjb3VudE51bWJlcl0sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBhY2NvdW50cyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1heFNjcmFwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxxQkFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sV0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sYUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsY0FBQSxHQUFBUixPQUFBO0FB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
303
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2RhdGVzIiwiX2RlYnVnIiwiX2VsZW1lbnRzSW50ZXJhY3Rpb25zIiwiX2ZldGNoIiwiX25hdmlnYXRpb24iLCJfdHJhbnNhY3Rpb25zIiwiX3RyYW5zYWN0aW9uczIiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImRlYnVnIiwiZ2V0RGVidWciLCJCQVNFX0FQSV9BQ1RJT05TX1VSTCIsIkJBU0VfV0VMQ09NRV9VUkwiLCJMT0dJTl9VUkwiLCJQQVNTV09SRF9FWFBJUkVEX1VSTCIsIlNVQ0NFU1NfVVJMIiwiTWF4UGxhbk5hbWUiLCJJTlZBTElEX0RFVEFJTFNfU0VMRUNUT1IiLCJMT0dJTl9FUlJPUl9TRUxFQ1RPUiIsImNhdGVnb3JpZXMiLCJNYXAiLCJyZWRpcmVjdE9yRGlhbG9nIiwicGFnZSIsIlByb21pc2UiLCJyYWNlIiwid2FpdEZvclJlZGlyZWN0Iiwid2FpdFVudGlsRWxlbWVudEZvdW5kIiwiZ2V0VHJhbnNhY3Rpb25zVXJsIiwibW9udGhNb21lbnQiLCJtb250aCIsInllYXIiLCJkYXRlIiwidXJsIiwiVVJMIiwic2VhcmNoUGFyYW1zIiwic2V0IiwidG9TdHJpbmciLCJsb2FkQ2F0ZWdvcmllcyIsInJlcyIsImZldGNoR2V0V2l0aGluUGFnZSIsIkFycmF5IiwiaXNBcnJheSIsInJlc3VsdCIsImxlbmd0aCIsImZvckVhY2giLCJpZCIsIm5hbWUiLCJnZXRUcmFuc2FjdGlvblR5cGUiLCJwbGFuTmFtZSIsInBsYW5UeXBlSWQiLCJjbGVhbmVkVXBUeG5UeXBlU3RyIiwicmVwbGFjZSIsInRyaW0iLCJJbW1lZGlhdGVDaGFyZ2UiLCJOb3JtYWwiLCJNb250aGx5Q2hhcmdlIiwiT25lTW9udGhQb3N0cG9uZWQiLCJNb250aGx5UG9zdHBvbmVkIiwiRnV0dXJlUHVyY2hhc2VGaW5hbmNpbmciLCJNb250aGx5UGF5bWVudCIsIk1vbnRobHlQb3N0cG9uZWRJbnN0YWxsbWVudHMiLCJUaGlydHlEYXlzUGx1cyIsIlR3b01vbnRoc1Bvc3Rwb25lZCIsIlR3b01vbnRoc1Bvc3Rwb25lZDIiLCJBY2N1bXVsYXRpbmdCYXNrZXQiLCJJbnRlcm5ldFNob3BwaW5nIiwiTW9udGhseUNoYXJnZVBsdXNJbnRlcmVzdCIsIlBvc3Rwb25lZFRyYW5zYWN0aW9uSW5zdGFsbG1lbnRzIiwiUmVwbGFjZW1lbnRDYXJkIiwiRWFybHlSZXBheW1lbnQiLCJNb250aGx5Q2FyZEZlZSIsIkN1cnJlbmN5UG9ja2V0IiwiVHJhbnNhY3Rpb25UeXBlcyIsIkluc3RhbGxtZW50cyIsIkNyZWRpdCIsIkNyZWRpdE91dHNpZGVUaGVMaW1pdCIsIkVycm9yIiwiZ2V0SW5zdGFsbG1lbnRzSW5mbyIsImNvbW1lbnRzIiwidW5kZWZpbmVkIiwibWF0Y2hlcyIsIm1hdGNoIiwibnVtYmVyIiwicGFyc2VJbnQiLCJ0b3RhbCIsImdldENoYXJnZWRDdXJyZW5jeSIsImN1cnJlbmN5SWQiLCJTSEVLRUxfQ1VSUkVOQ1kiLCJET0xMQVJfQ1VSUkVOQ1kiLCJFVVJPX0NVUlJFTkNZIiwiZ2V0TWVtbyIsImZ1bmRzVHJhbnNmZXJSZWNlaXZlck9yVHJhbnNmZXIiLCJmdW5kc1RyYW5zZmVyQ29tbWVudCIsIm1lbW8iLCJtYXBUcmFuc2FjdGlvbiIsInJhd1RyYW5zYWN0aW9uIiwib3B0aW9ucyIsImlzUGVuZGluZyIsInBheW1lbnREYXRlIiwicHJvY2Vzc2VkRGF0ZSIsIm1vbWVudCIsInB1cmNoYXNlRGF0ZSIsInRvSVNPU3RyaW5nIiwic3RhdHVzIiwiVHJhbnNhY3Rpb25TdGF0dXNlcyIsIlBlbmRpbmciLCJDb21wbGV0ZWQiLCJpbnN0YWxsbWVudHMiLCJpZGVudGlmaWVyIiwiZGVhbERhdGEiLCJhcm4iLCJ0eXBlIiwib3JpZ2luYWxBbW91bnQiLCJvcmlnaW5hbEN1cnJlbmN5IiwiY2hhcmdlZEFtb3VudCIsImFjdHVhbFBheW1lbnRBbW91bnQiLCJjaGFyZ2VkQ3VycmVuY3kiLCJwYXltZW50Q3VycmVuY3kiLCJkZXNjcmlwdGlvbiIsIm1lcmNoYW50TmFtZSIsImNhdGVnb3J5IiwiZ2V0IiwiY2F0ZWdvcnlJZCIsImluY2x1ZGVSYXdUcmFuc2FjdGlvbiIsImZldGNoVHJhbnNhY3Rpb25zRm9yTW9udGgiLCJkYXRhIiwidHJhbnNhY3Rpb25zQnlBY2NvdW50IiwidHJhbnNhY3Rpb25zIiwiZmlsdGVyIiwidHJhbnNhY3Rpb24iLCJzaG9ydENhcmROdW1iZXIiLCJtYXBwZWRUcmFuc2FjdGlvbiIsInB1c2giLCJhZGRSZXN1bHQiLCJhbGxSZXN1bHRzIiwiY2xvbmVkUmVzdWx0cyIsIk9iamVjdCIsImtleXMiLCJhY2NvdW50TnVtYmVyIiwicHJlcGFyZVRyYW5zYWN0aW9ucyIsInR4bnMiLCJzdGFydE1vbWVudCIsImNvbWJpbmVJbnN0YWxsbWVudHMiLCJlbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGUiLCJjbG9uZWRUeG5zIiwiZnJvbSIsImZpeEluc3RhbGxtZW50cyIsInNvcnRUcmFuc2FjdGlvbnNCeURhdGUiLCJmaWx0ZXJPbGRUcmFuc2FjdGlvbnMiLCJmZXRjaFRyYW5zYWN0aW9ucyIsImZ1dHVyZU1vbnRoc1RvU2NyYXBlIiwiZGVmYXVsdFN0YXJ0TW9tZW50Iiwic3VidHJhY3QiLCJzdGFydE1vbWVudExpbWl0Iiwic3RhcnREYXRlIiwidG9EYXRlIiwibWF4IiwiYWxsTW9udGhzIiwiZ2V0QWxsTW9udGhNb21lbnRzIiwiaSIsIm91dHB1dERhdGEiLCJnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyIsInVybHMiLCJMb2dpblJlc3VsdHMiLCJTdWNjZXNzIiwiQ2hhbmdlUGFzc3dvcmQiLCJJbnZhbGlkUGFzc3dvcmQiLCJlbGVtZW50UHJlc2VudE9uUGFnZSIsIlVua25vd25FcnJvciIsImNyZWF0ZUxvZ2luRmllbGRzIiwiY3JlZGVudGlhbHMiLCJzZWxlY3RvciIsInZhbHVlIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIk1heFNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZ2V0TG9naW5PcHRpb25zIiwibG9naW5VcmwiLCJmaWVsZHMiLCJzdWJtaXRCdXR0b25TZWxlY3RvciIsInByZUFjdGlvbiIsImNsaWNrQnV0dG9uIiwiY2hlY2tSZWFkaW5lc3MiLCJwb3N0QWN0aW9uIiwicG9zc2libGVSZXN1bHRzIiwid2FpdFVudGlsIiwiZmV0Y2hEYXRhIiwicmVzdWx0cyIsImFjY291bnRzIiwibWFwIiwic3VjY2VzcyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9tYXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCwgeyB0eXBlIE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyB0eXBlIFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHsgRE9MTEFSX0NVUlJFTkNZLCBFVVJPX0NVUlJFTkNZLCBTSEVLRUxfQ1VSUkVOQ1kgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IGdldEFsbE1vbnRoTW9tZW50cyBmcm9tICcuLi9oZWxwZXJzL2RhdGVzJztcbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQgeyBjbGlja0J1dHRvbiwgZWxlbWVudFByZXNlbnRPblBhZ2UsIHdhaXRVbnRpbEVsZW1lbnRGb3VuZCB9IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IGZldGNoR2V0V2l0aGluUGFnZSB9IGZyb20gJy4uL2hlbHBlcnMvZmV0Y2gnO1xuaW1wb3J0IHsgd2FpdEZvclJlZGlyZWN0IH0gZnJvbSAnLi4vaGVscGVycy9uYXZpZ2F0aW9uJztcbmltcG9ydCB7IGZpbHRlck9sZFRyYW5zYWN0aW9ucywgZml4SW5zdGFsbG1lbnRzLCBzb3J0VHJhbnNhY3Rpb25zQnlEYXRlIH0gZnJvbSAnLi4vaGVscGVycy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25TdGF0dXNlcywgVHJhbnNhY3Rpb25UeXBlcywgdHlwZSBUcmFuc2FjdGlvbiB9IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQge1xuICBCYXNlU2NyYXBlcldpdGhCcm93c2VyLFxuICBMb2dpblJlc3VsdHMsXG4gIHR5cGUgTG9naW5PcHRpb25zLFxuICB0eXBlIFBvc3NpYmxlTG9naW5SZXN1bHRzLFxufSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuaW1wb3J0IHsgdHlwZSBTY3JhcGVyT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuY29uc3QgZGVidWcgPSBnZXREZWJ1ZygnbWF4Jyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uIHtcbiAgc2hvcnRDYXJkTnVtYmVyOiBzdHJpbmc7XG4gIHBheW1lbnREYXRlPzogc3RyaW5nO1xuICBwdXJjaGFzZURhdGU6IHN0cmluZztcbiAgYWN0dWFsUGF5bWVudEFtb3VudDogc3RyaW5nO1xuICBwYXltZW50Q3VycmVuY3k6IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsQ3VycmVuY3k6IHN0cmluZztcbiAgb3JpZ2luYWxBbW91bnQ6IG51bWJlcjtcbiAgcGxhbk5hbWU6IHN0cmluZztcbiAgcGxhblR5cGVJZDogbnVtYmVyO1xuICBjb21tZW50czogc3RyaW5nO1xuICBtZXJjaGFudE5hbWU6IHN0cmluZztcbiAgY2F0ZWdvcnlJZDogbnVtYmVyO1xuICBmdW5kc1RyYW5zZmVyQ29tbWVudD86IHN0cmluZztcbiAgZnVuZHNUcmFuc2ZlclJlY2VpdmVyT3JUcmFuc2Zlcj86IHN0cmluZztcbiAgZGVhbERhdGE/OiB7XG4gICAgYXJuOiBzdHJpbmc7XG4gIH07XG59XG5cbmNvbnN0IEJBU0VfQVBJX0FDVElPTlNfVVJMID0gJ2h0dHBzOi8vb25saW5lbGNhcGkubWF4LmNvLmlsJztcbmNvbnN0IEJBU0VfV0VMQ09NRV9VUkwgPSAnaHR0cHM6Ly93d3cubWF4LmNvLmlsJztcblxuY29uc3QgTE9HSU5fVVJMID0gYCR7QkFTRV9XRUxDT01FX1VSTH0vbG9naW5gO1xuY29uc3QgUEFTU1dPUkRfRVhQSVJFRF9VUkwgPSBgJHtCQVNFX1dFTENPTUVfVVJMfS9yZW5ldy1wYXNzd29yZGA7XG5jb25zdCBTVUNDRVNTX1VSTCA9IGAke0JBU0VfV0VMQ09NRV9VUkx9L2hvbWVwYWdlL3BlcnNvbmFsYDtcblxuZW51bSBNYXhQbGFuTmFtZSB7XG4gIE5vcm1hbCA9ICfXqNeS15nXnNeUJyxcbiAgSW1tZWRpYXRlQ2hhcmdlID0gJ9eX15nXldeRINei16HXp9eV16og157XmdeZ15PXmScsXG4gIEludGVybmV0U2hvcHBpbmcgPSAn15DXmdeg15jXqNeg15gv15fXlVwi15wnLFxuICBJbnN0YWxsbWVudHMgPSAn16rXqdec15XXnteZ150nLFxuICBNb250aGx5Q2hhcmdlID0gJ9eX15nXldeRINeX15XXk9ep15knLFxuICBPbmVNb250aFBvc3Rwb25lZCA9ICfXk9eX15XXmSDXl9eV15PXqScsXG4gIE1vbnRobHlQb3N0cG9uZWQgPSAn15PXl9eV15kg15zXl9eZ15XXkSDXlNeX15XXk9ep15knLFxuICBNb250aGx5UGF5bWVudCA9ICfXqtep15zXldedINeX15XXk9ep15knLFxuICBGdXR1cmVQdXJjaGFzZUZpbmFuY2luZyA9ICfXnteZ157XldefINec16jXm9eZ16nXlCDXoteq15nXk9eZ16onLFxuICBNb250aGx5UG9zdHBvbmVkSW5zdGFsbG1lbnRzID0gJ9eT15fXldeZINeX15XXk9epINeq16nXnNeV157XmdedJyxcbiAgVGhpcnR5RGF5c1BsdXMgPSAn16LXoden16ogMzAg16TXnNeV16EnLFxuICBUd29Nb250aHNQb3N0cG9uZWQgPSAn15PXl9eV15kg15fXldeT16nXmdeZ150nLFxuICBUd29Nb250aHNQb3N0cG9uZWQyID0gXCLXk9eX15XXmSAyINeXJyDXqtep15zXldee15nXnVwiLFxuICBNb250aGx5Q2hhcmdlUGx1c0ludGVyZXN0ID0gJ9eX15XXk9ep15kgKyDXqNeZ15HXmdeqJyxcbiAgQ3JlZGl0ID0gJ9en16jXk9eZ15gnLFxuICBDcmVkaXRPdXRzaWRlVGhlTGltaXQgPSAn16fXqNeT15nXmC3XnteX15XXpSDXnNee16HXkteo16onLFxuICBBY2N1bXVsYXRpbmdCYXNrZXQgPSAn16HXnCDXntem15jXkdeoJyxcbiAgUG9zdHBvbmVkVHJhbnNhY3Rpb25JbnN0YWxsbWVudHMgPSAn16TXqNeZ16HXqiDXlNei16HXp9eUINeU15PXl9eV15nXlCcsXG4gIFJlcGxhY2VtZW50Q2FyZCA9ICfXm9eo15jXmdehINeX15zXmdek15knLFxuICBFYXJseVJlcGF5bWVudCA9ICfXpNeo16LXldefINee15XXp9eT150nLFxuICBNb250aGx5Q2FyZEZlZSA9ICfXk9ee15kg15vXqNeY15nXoScsXG4gIEN1cnJlbmN5UG9ja2V0ID0gJ9eX15nXldeRINeQ16jXoNenINee15jXlycsXG59XG5cbmNvbnN0IElOVkFMSURfREVUQUlMU19TRUxFQ1RPUiA9ICcjcG9wdXBXcm9uZ0RldGFpbHMnO1xuY29uc3QgTE9HSU5fRVJST1JfU0VMRUNUT1IgPSAnI3BvcHVwQ2FyZEhvbGRlcnNMb2dpbkVycm9yJztcblxuY29uc3QgY2F0ZWdvcmllcyA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG5cbmZ1bmN0aW9uIHJlZGlyZWN0T3JEaWFsb2cocGFnZTogUGFnZSkge1xuICByZXR1cm4gUHJvbWlzZS5yYWNlKFtcbiAgICB3YWl0Rm9yUmVkaXJlY3QocGFnZSwgMjAwMDAsIGZhbHNlLCBbQkFTRV9XRUxDT01FX1VSTCwgYCR7QkFTRV9XRUxDT01FX1VSTH0vYF0pLFxuICAgIHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCBJTlZBTElEX0RFVEFJTFNfU0VMRUNUT1IsIHRydWUpLFxuICAgIHdhaXRVbnRpbEVsZW1lbnRGb3VuZChwYWdlLCBMT0dJTl9FUlJPUl9TRUxFQ1RPUiwgdHJ1ZSksXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2FjdGlvbnNVcmwobW9udGhNb21lbnQ6IE1vbWVudCkge1xuICBjb25zdCBtb250aCA9IG1vbnRoTW9tZW50Lm1vbnRoKCkgKyAxO1xuICBjb25zdCB5ZWFyID0gbW9udGhNb21lbnQueWVhcigpO1xuICBjb25zdCBkYXRlID0gYCR7eWVhcn0tJHttb250aH0tMDFgO1xuXG4gIC8qKlxuICAgKiB1cmwgZXhwbGFuYXRpb246XG4gICAqIHVzZXJJbmRleDogLTEgZm9yIGFsbCBhY2NvdW50IG93bmVyc1xuICAgKiBjYXJkSW5kZXg6IC0xIGZvciBhbGwgY2FyZHMgdW5kZXIgdGhlIGFjY291bnRcbiAgICogYWxsIG90aGVyIHF1ZXJ5IHBhcmFtcyBhcmUgc3RhdGljLCBiZXNpZGUgdGhlIGRhdGUgd2hpY2ggY2hhbmdlcyBmb3IgcmVxdWVzdCBwZXIgbW9udGhcbiAgICovXG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7QkFTRV9BUElfQUNUSU9OU19VUkx9L2FwaS9yZWdpc3RlcmVkL3RyYW5zYWN0aW9uRGV0YWlscy9nZXRUcmFuc2FjdGlvbnNBbmRHcmFwaHNgKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXG4gICAgJ2ZpbHRlckRhdGEnLFxuICAgIGB7XCJ1c2VySW5kZXhcIjotMSxcImNhcmRJbmRleFwiOi0xLFwibW9udGhWaWV3XCI6dHJ1ZSxcImRhdGVcIjpcIiR7ZGF0ZX1cIixcImRhdGVzXCI6e1wic3RhcnREYXRlXCI6XCIwXCIsXCJlbmREYXRlXCI6XCIwXCJ9LFwiYmFua0FjY291bnRcIjp7XCJiYW5rQWNjb3VudEluZGV4XCI6LTEsXCJjYXJkc1wiOm51bGx9fWAsXG4gICk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdmaXJzdENhbGxDYXJkSW5kZXgnLCAnLTEnKTtcbiAgcmV0dXJuIHVybC50b1N0cmluZygpO1xufVxuXG5pbnRlcmZhY2UgRmV0Y2hDYXRlZ29yeVJlc3VsdCB7XG4gIHJlc3VsdD86IEFycmF5PHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgfT47XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRDYXRlZ29yaWVzKHBhZ2U6IFBhZ2UpIHtcbiAgZGVidWcoJ0xvYWRpbmcgY2F0ZWdvcmllcycpO1xuICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8RmV0Y2hDYXRlZ29yeVJlc3VsdD4ocGFnZSwgYCR7QkFTRV9BUElfQUNUSU9OU19VUkx9L2FwaS9jb250ZW50cy9nZXRDYXRlZ29yaWVzYCk7XG4gIGlmIChyZXMgJiYgQXJyYXkuaXNBcnJheShyZXMucmVzdWx0KSkge1xuICAgIGRlYnVnKGAke3Jlcy5yZXN1bHQubGVuZ3RofSBjYXRlZ29yaWVzIGxvYWRlZGApO1xuICAgIHJlcy5yZXN1bHQ/LmZvckVhY2goKHsgaWQsIG5hbWUgfSkgPT4gY2F0ZWdvcmllcy5zZXQoaWQsIG5hbWUpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2FjdGlvblR5cGUocGxhbk5hbWU6IHN0cmluZywgcGxhblR5cGVJZDogbnVtYmVyKSB7XG4gIGNvbnN0IGNsZWFuZWRVcFR4blR5cGVTdHIgPSBwbGFuTmFtZS5yZXBsYWNlKCdcXHQnLCAnICcpLnRyaW0oKSBhcyBNYXhQbGFuTmFtZTtcbiAgc3dpdGNoIChjbGVhbmVkVXBUeG5UeXBlU3RyKSB7XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5JbW1lZGlhdGVDaGFyZ2U6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5Ob3JtYWw6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5Nb250aGx5Q2hhcmdlOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuT25lTW9udGhQb3N0cG9uZWQ6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5Nb250aGx5UG9zdHBvbmVkOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuRnV0dXJlUHVyY2hhc2VGaW5hbmNpbmc6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5Nb250aGx5UGF5bWVudDpcbiAgICBjYXNlIE1heFBsYW5OYW1lLk1vbnRobHlQb3N0cG9uZWRJbnN0YWxsbWVudHM6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5UaGlydHlEYXlzUGx1czpcbiAgICBjYXNlIE1heFBsYW5OYW1lLlR3b01vbnRoc1Bvc3Rwb25lZDpcbiAgICBjYXNlIE1heFBsYW5OYW1lLlR3b01vbnRoc1Bvc3Rwb25lZDI6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5BY2N1bXVsYXRpbmdCYXNrZXQ6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5JbnRlcm5ldFNob3BwaW5nOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuTW9udGhseUNoYXJnZVBsdXNJbnRlcmVzdDpcbiAgICBjYXNlIE1heFBsYW5OYW1lLlBvc3Rwb25lZFRyYW5zYWN0aW9uSW5zdGFsbG1lbnRzOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuUmVwbGFjZW1lbnRDYXJkOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuRWFybHlSZXBheW1lbnQ6XG4gICAgY2FzZSBNYXhQbGFuTmFtZS5Nb250aGx5Q2FyZEZlZTpcbiAgICBjYXNlIE1heFBsYW5OYW1lLkN1cnJlbmN5UG9ja2V0OlxuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZXMuTm9ybWFsO1xuICAgIGNhc2UgTWF4UGxhbk5hbWUuSW5zdGFsbG1lbnRzOlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuQ3JlZGl0OlxuICAgIGNhc2UgTWF4UGxhbk5hbWUuQ3JlZGl0T3V0c2lkZVRoZUxpbWl0OlxuICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZXMuSW5zdGFsbG1lbnRzO1xuICAgIGRlZmF1bHQ6XG4gICAgICBzd2l0Y2ggKHBsYW5UeXBlSWQpIHtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZXMuSW5zdGFsbG1lbnRzO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZXMuTm9ybWFsO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0cmFuc2FjdGlvbiB0eXBlICR7Y2xlYW5lZFVwVHhuVHlwZVN0ciBhcyBzdHJpbmd9YCk7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SW5zdGFsbG1lbnRzSW5mbyhjb21tZW50czogc3RyaW5nKSB7XG4gIGlmICghY29tbWVudHMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IG1hdGNoZXMgPSBjb21tZW50cy5tYXRjaCgvXFxkKy9nKTtcbiAgaWYgKCFtYXRjaGVzIHx8IG1hdGNoZXMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlcjogcGFyc2VJbnQobWF0Y2hlc1swXSwgMTApLFxuICAgIHRvdGFsOiBwYXJzZUludChtYXRjaGVzWzFdLCAxMCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENoYXJnZWRDdXJyZW5jeShjdXJyZW5jeUlkOiBudW1iZXIgfCBudWxsKSB7XG4gIHN3aXRjaCAoY3VycmVuY3lJZCkge1xuICAgIGNhc2UgMzc2OlxuICAgICAgcmV0dXJuIFNIRUtFTF9DVVJSRU5DWTtcbiAgICBjYXNlIDg0MDpcbiAgICAgIHJldHVybiBET0xMQVJfQ1VSUkVOQ1k7XG4gICAgY2FzZSA5Nzg6XG4gICAgICByZXR1cm4gRVVST19DVVJSRU5DWTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVtbyh7XG4gIGNvbW1lbnRzLFxuICBmdW5kc1RyYW5zZmVyUmVjZWl2ZXJPclRyYW5zZmVyLFxuICBmdW5kc1RyYW5zZmVyQ29tbWVudCxcbn06IFBpY2s8U2NyYXBlZFRyYW5zYWN0aW9uLCAnY29tbWVudHMnIHwgJ2Z1bmRzVHJhbnNmZXJSZWNlaXZlck9yVHJhbnNmZXInIHwgJ2Z1bmRzVHJhbnNmZXJDb21tZW50Jz4pIHtcbiAgaWYgKGZ1bmRzVHJhbnNmZXJSZWNlaXZlck9yVHJhbnNmZXIpIHtcbiAgICBjb25zdCBtZW1vID0gY29tbWVudHMgPyBgJHtjb21tZW50c30gJHtmdW5kc1RyYW5zZmVyUmVjZWl2ZXJPclRyYW5zZmVyfWAgOiBmdW5kc1RyYW5zZmVyUmVjZWl2ZXJPclRyYW5zZmVyO1xuICAgIHJldHVybiBmdW5kc1RyYW5zZmVyQ29tbWVudCA/IGAke21lbW99OiAke2Z1bmRzVHJhbnNmZXJDb21tZW50fWAgOiBtZW1vO1xuICB9XG5cbiAgcmV0dXJuIGNvbW1lbnRzO1xufVxuXG5mdW5jdGlvbiBtYXBUcmFuc2FjdGlvbihyYXdUcmFuc2FjdGlvbjogU2NyYXBlZFRyYW5zYWN0aW9uLCBvcHRpb25zPzogU2NyYXBlck9wdGlvbnMpOiBUcmFuc2FjdGlvbiB7XG4gIGNvbnN0IGlzUGVuZGluZyA9IHJhd1RyYW5zYWN0aW9uLnBheW1lbnREYXRlID09PSBudWxsO1xuICBjb25zdCBwcm9jZXNzZWREYXRlID0gbW9tZW50KGlzUGVuZGluZyA/IHJhd1RyYW5zYWN0aW9uLnB1cmNoYXNlRGF0ZSA6IHJhd1RyYW5zYWN0aW9uLnBheW1lbnREYXRlKS50b0lTT1N0cmluZygpO1xuICBjb25zdCBzdGF0dXMgPSBpc1BlbmRpbmcgPyBUcmFuc2FjdGlvblN0YXR1c2VzLlBlbmRpbmcgOiBUcmFuc2FjdGlvblN0YXR1c2VzLkNvbXBsZXRlZDtcblxuICBjb25zdCBpbnN0YWxsbWVudHMgPSBnZXRJbnN0YWxsbWVudHNJbmZvKHJhd1RyYW5zYWN0aW9uLmNvbW1lbnRzKTtcbiAgY29uc3QgaWRlbnRpZmllciA9IGluc3RhbGxtZW50c1xuICAgID8gYCR7cmF3VHJhbnNhY3Rpb24uZGVhbERhdGE/LmFybn1fJHtpbnN0YWxsbWVudHMubnVtYmVyfWBcbiAgICA6IHJhd1RyYW5zYWN0aW9uLmRlYWxEYXRhPy5hcm47XG5cbiAgY29uc3QgcmVzdWx0OiBUcmFuc2FjdGlvbiA9IHtcbiAgICB0eXBlOiBnZXRUcmFuc2FjdGlvblR5cGUocmF3VHJhbnNhY3Rpb24ucGxhbk5hbWUsIHJhd1RyYW5zYWN0aW9uLnBsYW5UeXBlSWQpLFxuICAgIGRhdGU6IG1vbWVudChyYXdUcmFuc2FjdGlvbi5wdXJjaGFzZURhdGUpLnRvSVNPU3RyaW5nKCksXG4gICAgcHJvY2Vzc2VkRGF0ZSxcbiAgICBvcmlnaW5hbEFtb3VudDogLXJhd1RyYW5zYWN0aW9uLm9yaWdpbmFsQW1vdW50LFxuICAgIG9yaWdpbmFsQ3VycmVuY3k6IHJhd1RyYW5zYWN0aW9uLm9yaWdpbmFsQ3VycmVuY3ksXG4gICAgY2hhcmdlZEFtb3VudDogLXJhd1RyYW5zYWN0aW9uLmFjdHVhbFBheW1lbnRBbW91bnQsXG4gICAgY2hhcmdlZEN1cnJlbmN5OiBnZXRDaGFyZ2VkQ3VycmVuY3kocmF3VHJhbnNhY3Rpb24ucGF5bWVudEN1cnJlbmN5KSxcbiAgICBkZXNjcmlwdGlvbjogcmF3VHJhbnNhY3Rpb24ubWVyY2hhbnROYW1lLnRyaW0oKSxcbiAgICBtZW1vOiBnZXRNZW1vKHJhd1RyYW5zYWN0aW9uKSxcbiAgICBjYXRlZ29yeTogY2F0ZWdvcmllcy5nZXQocmF3VHJhbnNhY3Rpb24/LmNhdGVnb3J5SWQpLFxuICAgIGluc3RhbGxtZW50cyxcbiAgICBpZGVudGlmaWVyLFxuICAgIHN0YXR1cyxcbiAgfTtcblxuICBpZiAob3B0aW9ucz8uaW5jbHVkZVJhd1RyYW5zYWN0aW9uKSB7XG4gICAgcmVzdWx0LnJhd1RyYW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuaW50ZXJmYWNlIFNjcmFwZWRUcmFuc2FjdGlvbnNSZXN1bHQge1xuICByZXN1bHQ/OiB7XG4gICAgdHJhbnNhY3Rpb25zOiBTY3JhcGVkVHJhbnNhY3Rpb25bXTtcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hUcmFuc2FjdGlvbnNGb3JNb250aChwYWdlOiBQYWdlLCBtb250aE1vbWVudDogTW9tZW50LCBvcHRpb25zPzogU2NyYXBlck9wdGlvbnMpIHtcbiAgY29uc3QgdXJsID0gZ2V0VHJhbnNhY3Rpb25zVXJsKG1vbnRoTW9tZW50KTtcblxuICBjb25zdCBkYXRhID0gYXdhaXQgZmV0Y2hHZXRXaXRoaW5QYWdlPFNjcmFwZWRUcmFuc2FjdGlvbnNSZXN1bHQ+KHBhZ2UsIHVybCk7XG4gIGNvbnN0IHRyYW5zYWN0aW9uc0J5QWNjb3VudDogUmVjb3JkPHN0cmluZywgVHJhbnNhY3Rpb25bXT4gPSB7fTtcblxuICBpZiAoIWRhdGEgfHwgIWRhdGEucmVzdWx0KSByZXR1cm4gdHJhbnNhY3Rpb25zQnlBY2NvdW50O1xuXG4gIGRhdGEucmVzdWx0LnRyYW5zYWN0aW9uc1xuICAgIC8vIEZpbHRlciBvdXQgbm9uLXRyYW5zYWN0aW9ucyB3aXRob3V0IGEgcGxhbiB0eXBlLCBlLmcuIHN1bW1hcnkgcm93c1xuICAgIC5maWx0ZXIodHJhbnNhY3Rpb24gPT4gISF0cmFuc2FjdGlvbi5wbGFuTmFtZSlcbiAgICAuZm9yRWFjaCgodHJhbnNhY3Rpb246IFNjcmFwZWRUcmFuc2FjdGlvbikgPT4ge1xuICAgICAgaWYgKCF0cmFuc2FjdGlvbnNCeUFjY291bnRbdHJhbnNhY3Rpb24uc2hvcnRDYXJkTnVtYmVyXSkge1xuICAgICAgICB0cmFuc2FjdGlvbnNCeUFjY291bnRbdHJhbnNhY3Rpb24uc2hvcnRDYXJkTnVtYmVyXSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXBwZWRUcmFuc2FjdGlvbiA9IG1hcFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLCBvcHRpb25zKTtcbiAgICAgIHRyYW5zYWN0aW9uc0J5QWNjb3VudFt0cmFuc2FjdGlvbi5zaG9ydENhcmROdW1iZXJdLnB1c2gobWFwcGVkVHJhbnNhY3Rpb24pO1xuICAgIH0pO1xuXG4gIHJldHVybiB0cmFuc2FjdGlvbnNCeUFjY291bnQ7XG59XG5cbmZ1bmN0aW9uIGFkZFJlc3VsdChhbGxSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBUcmFuc2FjdGlvbltdPiwgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBUcmFuc2FjdGlvbltdPikge1xuICBjb25zdCBjbG9uZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBUcmFuc2FjdGlvbltdPiA9IHsgLi4uYWxsUmVzdWx0cyB9O1xuICBPYmplY3Qua2V5cyhyZXN1bHQpLmZvckVhY2goYWNjb3VudE51bWJlciA9PiB7XG4gICAgaWYgKCFjbG9uZWRSZXN1bHRzW2FjY291bnROdW1iZXJdKSB7XG4gICAgICBjbG9uZWRSZXN1bHRzW2FjY291bnROdW1iZXJdID0gW107XG4gICAgfVxuICAgIGNsb25lZFJlc3VsdHNbYWNjb3VudE51bWJlcl0ucHVzaCguLi5yZXN1bHRbYWNjb3VudE51bWJlcl0pO1xuICB9KTtcbiAgcmV0dXJuIGNsb25lZFJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUcmFuc2FjdGlvbnMoXG4gIHR4bnM6IFRyYW5zYWN0aW9uW10sXG4gIHN0YXJ0TW9tZW50OiBtb21lbnQuTW9tZW50LFxuICBjb21iaW5lSW5zdGFsbG1lbnRzOiBib29sZWFuLFxuICBlbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGU6IGJvb2xlYW4sXG4pIHtcbiAgbGV0IGNsb25lZFR4bnMgPSBBcnJheS5mcm9tKHR4bnMpO1xuICBpZiAoIWNvbWJpbmVJbnN0YWxsbWVudHMpIHtcbiAgICBjbG9uZWRUeG5zID0gZml4SW5zdGFsbG1lbnRzKGNsb25lZFR4bnMpO1xuICB9XG4gIGNsb25lZFR4bnMgPSBzb3J0VHJhbnNhY3Rpb25zQnlEYXRlKGNsb25lZFR4bnMpO1xuICBjbG9uZWRUeG5zID0gZW5hYmxlVHJhbnNhY3Rpb25zRmlsdGVyQnlEYXRlXG4gICAgPyBmaWx0ZXJPbGRUcmFuc2FjdGlvbnMoY2xvbmVkVHhucywgc3RhcnRNb21lbnQsIGNvbWJpbmVJbnN0YWxsbWVudHMgfHwgZmFsc2UpXG4gICAgOiBjbG9uZWRUeG5zO1xuICByZXR1cm4gY2xvbmVkVHhucztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hUcmFuc2FjdGlvbnMocGFnZTogUGFnZSwgb3B0aW9uczogU2NyYXBlck9wdGlvbnMpIHtcbiAgY29uc3QgZnV0dXJlTW9udGhzVG9TY3JhcGUgPSBvcHRpb25zLmZ1dHVyZU1vbnRoc1RvU2NyYXBlID8/IDE7XG4gIGNvbnN0IGRlZmF1bHRTdGFydE1vbWVudCA9IG1vbWVudCgpLnN1YnRyYWN0KDEsICd5ZWFycycpO1xuICBjb25zdCBzdGFydE1vbWVudExpbWl0ID0gbW9tZW50KCkuc3VidHJhY3QoNCwgJ3llYXJzJyk7XG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IG9wdGlvbnMuc3RhcnREYXRlIHx8IGRlZmF1bHRTdGFydE1vbWVudC50b0RhdGUoKTtcbiAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQubWF4KHN0YXJ0TW9tZW50TGltaXQsIG1vbWVudChzdGFydERhdGUpKTtcbiAgY29uc3QgYWxsTW9udGhzID0gZ2V0QWxsTW9udGhNb21lbnRzKHN0YXJ0TW9tZW50LCBmdXR1cmVNb250aHNUb1NjcmFwZSk7XG5cbiAgYXdhaXQgbG9hZENhdGVnb3JpZXMocGFnZSk7XG5cbiAgbGV0IGFsbFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIFRyYW5zYWN0aW9uW10+ID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsTW9udGhzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hUcmFuc2FjdGlvbnNGb3JNb250aChwYWdlLCBhbGxNb250aHNbaV0sIG9wdGlvbnMpO1xuICAgIGFsbFJlc3VsdHMgPSBhZGRSZXN1bHQoYWxsUmVzdWx0cywgcmVzdWx0KTtcbiAgfVxuXG4gIE9iamVjdC5rZXlzKGFsbFJlc3VsdHMpLmZvckVhY2goYWNjb3VudE51bWJlciA9PiB7XG4gICAgbGV0IHR4bnMgPSBhbGxSZXN1bHRzW2FjY291bnROdW1iZXJdO1xuICAgIHR4bnMgPSBwcmVwYXJlVHJhbnNhY3Rpb25zKFxuICAgICAgdHhucyxcbiAgICAgIHN0YXJ0TW9tZW50LFxuICAgICAgb3B0aW9ucy5jb21iaW5lSW5zdGFsbG1lbnRzIHx8IGZhbHNlLFxuICAgICAgb3B0aW9ucy5vdXRwdXREYXRhPy5lbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGUgPz8gdHJ1ZSxcbiAgICApO1xuICAgIGFsbFJlc3VsdHNbYWNjb3VudE51bWJlcl0gPSB0eG5zO1xuICB9KTtcblxuICByZXR1cm4gYWxsUmVzdWx0cztcbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVMb2dpblJlc3VsdHMocGFnZTogUGFnZSk6IFBvc3NpYmxlTG9naW5SZXN1bHRzIHtcbiAgY29uc3QgdXJsczogUG9zc2libGVMb2dpblJlc3VsdHMgPSB7fTtcbiAgdXJsc1tMb2dpblJlc3VsdHMuU3VjY2Vzc10gPSBbU1VDQ0VTU19VUkxdO1xuICB1cmxzW0xvZ2luUmVzdWx0cy5DaGFuZ2VQYXNzd29yZF0gPSBbUEFTU1dPUkRfRVhQSVJFRF9VUkxdO1xuICB1cmxzW0xvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmRdID0gW1xuICAgIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiBlbGVtZW50UHJlc2VudE9uUGFnZShwYWdlLCBJTlZBTElEX0RFVEFJTFNfU0VMRUNUT1IpO1xuICAgIH0sXG4gIF07XG4gIHVybHNbTG9naW5SZXN1bHRzLlVua25vd25FcnJvcl0gPSBbXG4gICAgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIGVsZW1lbnRQcmVzZW50T25QYWdlKHBhZ2UsIExPR0lOX0VSUk9SX1NFTEVDVE9SKTtcbiAgICB9LFxuICBdO1xuICByZXR1cm4gdXJscztcbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gIHJldHVybiBbXG4gICAgeyBzZWxlY3RvcjogJyN1c2VyLW5hbWUnLCB2YWx1ZTogY3JlZGVudGlhbHMudXNlcm5hbWUgfSxcbiAgICB7IHNlbGVjdG9yOiAnI3Bhc3N3b3JkJywgdmFsdWU6IGNyZWRlbnRpYWxzLnBhc3N3b3JkIH0sXG4gIF07XG59XG5cbnR5cGUgU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMgPSB7IHVzZXJuYW1lOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfTtcblxuY2xhc3MgTWF4U2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyV2l0aEJyb3dzZXI8U2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHM+IHtcbiAgZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyk6IExvZ2luT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvZ2luVXJsOiBMT0dJTl9VUkwsXG4gICAgICBmaWVsZHM6IGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzKSxcbiAgICAgIHN1Ym1pdEJ1dHRvblNlbGVjdG9yOiAnYXBwLXVzZXItbG9naW4tZm9ybSAuZ2VuZXJhbC1idXR0b24uc2VuZC1tZS1jb2RlJyxcbiAgICAgIHByZUFjdGlvbjogYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoYXdhaXQgZWxlbWVudFByZXNlbnRPblBhZ2UodGhpcy5wYWdlLCAnI2Nsb3NlUG9wdXAnKSkge1xuICAgICAgICAgIGF3YWl0IGNsaWNrQnV0dG9uKHRoaXMucGFnZSwgJyNjbG9zZVBvcHVwJyk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgY2xpY2tCdXR0b24odGhpcy5wYWdlLCAnLnBlcnNvbmFsLWFyZWEgPiBhLmdvLXRvLXBlcnNvbmFsLWFyZWEnKTtcbiAgICAgICAgaWYgKGF3YWl0IGVsZW1lbnRQcmVzZW50T25QYWdlKHRoaXMucGFnZSwgJy5sb2dpbi1saW5rI3ByaXZhdGUnKSkge1xuICAgICAgICAgIGF3YWl0IGNsaWNrQnV0dG9uKHRoaXMucGFnZSwgJy5sb2dpbi1saW5rI3ByaXZhdGUnKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQodGhpcy5wYWdlLCAnI2xvZ2luLXBhc3N3b3JkLWxpbmsnLCB0cnVlKTtcbiAgICAgICAgYXdhaXQgY2xpY2tCdXR0b24odGhpcy5wYWdlLCAnI2xvZ2luLXBhc3N3b3JkLWxpbmsnKTtcbiAgICAgICAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKHRoaXMucGFnZSwgJyNsb2dpbi1wYXNzd29yZC50YWItcGFuZS5hY3RpdmUgYXBwLXVzZXItbG9naW4tZm9ybScsIHRydWUpO1xuICAgICAgfSxcbiAgICAgIGNoZWNrUmVhZGluZXNzOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZCh0aGlzLnBhZ2UsICcucGVyc29uYWwtYXJlYSA+IGEuZ28tdG8tcGVyc29uYWwtYXJlYScsIHRydWUpO1xuICAgICAgfSxcbiAgICAgIHBvc3RBY3Rpb246IGFzeW5jICgpID0+IHJlZGlyZWN0T3JEaWFsb2codGhpcy5wYWdlKSxcbiAgICAgIHBvc3NpYmxlUmVzdWx0czogZ2V0UG9zc2libGVMb2dpblJlc3VsdHModGhpcy5wYWdlKSxcbiAgICAgIHdhaXRVbnRpbDogJ2RvbWNvbnRlbnRsb2FkZWQnLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmZXRjaERhdGEoKSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGZldGNoVHJhbnNhY3Rpb25zKHRoaXMucGFnZSwgdGhpcy5vcHRpb25zKTtcbiAgICBjb25zdCBhY2NvdW50cyA9IE9iamVjdC5rZXlzKHJlc3VsdHMpLm1hcChhY2NvdW50TnVtYmVyID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFjY291bnROdW1iZXIsXG4gICAgICAgIHR4bnM6IHJlc3VsdHNbYWNjb3VudE51bWJlcl0sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBhY2NvdW50cyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1heFNjcmFwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFF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