@tomerh2001/israeli-bank-scrapers 6.3.11 → 6.4.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.
- package/lib/scrapers/hapoalim.js +314 -3
- package/lib/scrapers/visa-cal.js +2 -2
- package/lib/transactions.d.ts +12 -0
- package/lib/transactions.js +1 -1
- package/package.json +1 -1
package/lib/scrapers/hapoalim.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _moment = _interopRequireDefault(require("moment"));
|
|
8
8
|
var _uuid = require("uuid");
|
|
9
|
+
var _constants = require("../constants");
|
|
9
10
|
var _debug = require("../helpers/debug");
|
|
10
11
|
var _fetch = require("../helpers/fetch");
|
|
11
12
|
var _navigation = require("../helpers/navigation");
|
|
@@ -52,7 +53,7 @@ function convertTransactions(txns) {
|
|
|
52
53
|
date: (0, _moment.default)(txn.eventDate, DATE_FORMAT).toISOString(),
|
|
53
54
|
processedDate: (0, _moment.default)(txn.valueDate, DATE_FORMAT).toISOString(),
|
|
54
55
|
originalAmount: isOutbound ? -txn.eventAmount : txn.eventAmount,
|
|
55
|
-
originalCurrency:
|
|
56
|
+
originalCurrency: _constants.SHEKEL_CURRENCY,
|
|
56
57
|
chargedAmount: isOutbound ? -txn.eventAmount : txn.eventAmount,
|
|
57
58
|
description: txn.activityDescription || '',
|
|
58
59
|
status: txn.serialNumber === 0 ? _transactions.TransactionStatuses.Pending : _transactions.TransactionStatuses.Completed,
|
|
@@ -61,6 +62,31 @@ function convertTransactions(txns) {
|
|
|
61
62
|
return result;
|
|
62
63
|
});
|
|
63
64
|
}
|
|
65
|
+
function convertForexTransactions(txns, currency) {
|
|
66
|
+
return txns.map(txn => {
|
|
67
|
+
const isOutbound = txn.eventActivityTypeCode === 2;
|
|
68
|
+
const dateStr = txn.executingDate.toString(); // Date transaction was executed
|
|
69
|
+
const valueDateStr = txn.valueDate.toString(); // Date value was actually added to account
|
|
70
|
+
|
|
71
|
+
let memo = '';
|
|
72
|
+
if (txn.eventDetails) {
|
|
73
|
+
memo = txn.eventDetails;
|
|
74
|
+
}
|
|
75
|
+
const result = {
|
|
76
|
+
type: _transactions.TransactionTypes.Normal,
|
|
77
|
+
identifier: txn.referenceNumber || txn.recordSerialNumber,
|
|
78
|
+
date: (0, _moment.default)(valueDateStr, DATE_FORMAT).toISOString(),
|
|
79
|
+
processedDate: (0, _moment.default)(dateStr, DATE_FORMAT).toISOString(),
|
|
80
|
+
originalAmount: isOutbound ? -txn.eventAmount : txn.eventAmount,
|
|
81
|
+
originalCurrency: currency,
|
|
82
|
+
chargedAmount: isOutbound ? -txn.eventAmount : txn.eventAmount,
|
|
83
|
+
description: txn.activityDescription || '',
|
|
84
|
+
status: _transactions.TransactionStatuses.Completed,
|
|
85
|
+
memo
|
|
86
|
+
};
|
|
87
|
+
return result;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
64
90
|
async function getRestContext(page) {
|
|
65
91
|
await (0, _waiting.waitUntil)(() => {
|
|
66
92
|
return page.evaluate(() => !!window.bnhpApp);
|
|
@@ -121,6 +147,256 @@ async function getAccountBalance(apiSiteUrl, page, accountNumber) {
|
|
|
121
147
|
const balanceAndCreditLimit = await (0, _fetch.fetchGetWithinPage)(page, balanceAndCreditLimitUrl);
|
|
122
148
|
return balanceAndCreditLimit?.currentBalance;
|
|
123
149
|
}
|
|
150
|
+
async function getForexAccounts(baseUrl, page, accountNumber, startDate, endDate) {
|
|
151
|
+
debug('========== FETCHING FOREX ACCOUNTS ==========');
|
|
152
|
+
debug('Account: %s, Date range: %s to %s', accountNumber, startDate, endDate);
|
|
153
|
+
const accounts = [];
|
|
154
|
+
const currency = {
|
|
155
|
+
code: 19,
|
|
156
|
+
swift: _constants.SHEKEL_CURRENCY
|
|
157
|
+
};
|
|
158
|
+
try {
|
|
159
|
+
const detailedAccountTypeCode = 142; // For foreign currency accounts
|
|
160
|
+
const forexUrl = `${baseUrl}/ServerServices/foreign-currency/transactions?accountId=${accountNumber}&type=business&retrievalStartDate=${startDate}&retrievalEndDate=${endDate}¤cyCodeList=${currency.code}&detailedAccountTypeCodeList=${detailedAccountTypeCode}&view=details&lang=he`;
|
|
161
|
+
debug('Trying forex %s', forexUrl);
|
|
162
|
+
const forexData = await (0, _fetch.fetchGetWithinPage)(page, forexUrl, true); // ignoreErrors = true
|
|
163
|
+
|
|
164
|
+
if (forexData && forexData.balancesAndLimitsDataList && forexData.balancesAndLimitsDataList.length > 0) {
|
|
165
|
+
debug('✓ Found forex data');
|
|
166
|
+
for (const currencyData of forexData.balancesAndLimitsDataList) {
|
|
167
|
+
const currencySwiftCode = currencyData.currencySwiftCode || currency.swift;
|
|
168
|
+
const transactionCount = currencyData.transactions?.length || 0;
|
|
169
|
+
|
|
170
|
+
// Get balance from the most recent transaction's currentBalance field
|
|
171
|
+
// If no transactions, fall back to currencyData.currentBalance
|
|
172
|
+
let balance = currencyData.currentBalance;
|
|
173
|
+
if (transactionCount > 0 && currencyData.transactions) {
|
|
174
|
+
balance = currencyData.transactions[0].currentBalance;
|
|
175
|
+
debug(' - Using balance from most recent transaction: %s', balance);
|
|
176
|
+
}
|
|
177
|
+
debug(' - Currency: %s, Balance: %s, Transactions: %d', currencySwiftCode, balance, transactionCount);
|
|
178
|
+
|
|
179
|
+
// Log transaction dates for debugging
|
|
180
|
+
if (transactionCount > 0) {
|
|
181
|
+
const txnDates = currencyData.transactions?.map(t => t.executingDate).join(', ') || '';
|
|
182
|
+
debug(' Transaction dates: %s', txnDates);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Only add if there's actually a balance or transactions
|
|
186
|
+
if (balance !== 0 || transactionCount > 0) {
|
|
187
|
+
const txns = convertForexTransactions(currencyData.transactions || [], currencySwiftCode);
|
|
188
|
+
const forexAccountNumber = `${accountNumber}-${currencySwiftCode}`;
|
|
189
|
+
accounts.push({
|
|
190
|
+
accountNumber: forexAccountNumber,
|
|
191
|
+
balance,
|
|
192
|
+
currency: currencySwiftCode,
|
|
193
|
+
txns
|
|
194
|
+
});
|
|
195
|
+
debug(' ✓ Added forex account: %s with %d transactions', forexAccountNumber, txns.length);
|
|
196
|
+
} else {
|
|
197
|
+
debug(' - Skipping %s (zero balance and no transactions)', currencySwiftCode);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
} else {
|
|
201
|
+
debug(' - No forex data found');
|
|
202
|
+
}
|
|
203
|
+
} catch (error) {
|
|
204
|
+
debug(' - Error fetching forex: %s', error);
|
|
205
|
+
// Continue trying other currencies
|
|
206
|
+
}
|
|
207
|
+
debug('Returning %d forex accounts', accounts.length);
|
|
208
|
+
return accounts;
|
|
209
|
+
}
|
|
210
|
+
async function getSavingsAccounts(baseUrl, page, accountNumber) {
|
|
211
|
+
const savingsUrl = `${baseUrl}/ServerServices/deposits-and-savings/deposits?accountId=${accountNumber}&view=details&lang=he`;
|
|
212
|
+
const savingsData = await (0, _fetch.fetchGetWithinPage)(page, savingsUrl);
|
|
213
|
+
if (!savingsData || !savingsData.depositsWrapperData || savingsData.depositsWrapperData.length === 0) {
|
|
214
|
+
debug('No savings accounts found for account %s', accountNumber);
|
|
215
|
+
return [];
|
|
216
|
+
}
|
|
217
|
+
const accounts = [];
|
|
218
|
+
for (const wrapper of savingsData.depositsWrapperData) {
|
|
219
|
+
// Create a separate account for each individual deposit
|
|
220
|
+
for (const deposit of wrapper.data) {
|
|
221
|
+
const balance = deposit.revaluedTotalAmount || deposit.principalAmount;
|
|
222
|
+
const savingsAccountNumber = `${accountNumber}-${deposit.depositSerialId}`;
|
|
223
|
+
accounts.push({
|
|
224
|
+
accountNumber: savingsAccountNumber,
|
|
225
|
+
savingsAccount: true,
|
|
226
|
+
balance,
|
|
227
|
+
txns: [] // Savings accounts typically don't have transaction history in the same way
|
|
228
|
+
});
|
|
229
|
+
debug('Added savings account %s with balance %s', savingsAccountNumber, balance);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return accounts;
|
|
233
|
+
}
|
|
234
|
+
async function getInvestmentAccounts(baseUrl, page, account) {
|
|
235
|
+
debug('========== FETCHING INVESTMENT ACCOUNTS ==========');
|
|
236
|
+
const accounts = [];
|
|
237
|
+
const accountNumber = `${account.branchNumber}-${account.accountNumber}`; // Don't include bankNumber here because investment API doesn't use it
|
|
238
|
+
|
|
239
|
+
// Set up request interception to capture session headers
|
|
240
|
+
let capturedSession = null;
|
|
241
|
+
let capturedCsession = null;
|
|
242
|
+
const requestHandler = request => {
|
|
243
|
+
try {
|
|
244
|
+
const headers = request.headers();
|
|
245
|
+
if (headers.session && !capturedSession) {
|
|
246
|
+
capturedSession = headers.session;
|
|
247
|
+
debug(' - Captured session from network request');
|
|
248
|
+
}
|
|
249
|
+
if (headers.csession && !capturedCsession) {
|
|
250
|
+
capturedCsession = headers.csession;
|
|
251
|
+
debug(' - Captured csession from network request');
|
|
252
|
+
}
|
|
253
|
+
request.continue();
|
|
254
|
+
} catch (e) {
|
|
255
|
+
debug(' - Error in request handler: %s', e);
|
|
256
|
+
// Try to continue anyway
|
|
257
|
+
try {
|
|
258
|
+
request.continue();
|
|
259
|
+
} catch (continueError) {
|
|
260
|
+
// Ignore if already handled
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
try {
|
|
265
|
+
// Navigate to mytrade section to establish session
|
|
266
|
+
const mytradeUrl = `${baseUrl}/mytrade/app`;
|
|
267
|
+
debug('Navigating to mytrade section: %s', mytradeUrl);
|
|
268
|
+
await page.setRequestInterception(true);
|
|
269
|
+
page.on('request', requestHandler);
|
|
270
|
+
|
|
271
|
+
// Try to navigate, but if it fails (e.g., MyTrade not enabled), clean up and return empty
|
|
272
|
+
try {
|
|
273
|
+
await page.goto(mytradeUrl, {
|
|
274
|
+
waitUntil: 'networkidle2',
|
|
275
|
+
timeout: 60000
|
|
276
|
+
});
|
|
277
|
+
// Wait longer for the page to fully load and establish session
|
|
278
|
+
await new Promise(resolve => setTimeout(resolve, 5000));
|
|
279
|
+
} catch (navError) {
|
|
280
|
+
debug(' - Navigation to MyTrade failed (likely not enabled): %s', navError);
|
|
281
|
+
// Clean up request interception
|
|
282
|
+
page.off('request', requestHandler);
|
|
283
|
+
await page.setRequestInterception(false);
|
|
284
|
+
debug('Returning 0 investment accounts (MyTrade not accessible)');
|
|
285
|
+
return accounts;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Now turn off request interception before we make API calls
|
|
289
|
+
page.off('request', requestHandler);
|
|
290
|
+
await page.setRequestInterception(false);
|
|
291
|
+
debug('Mytrade page loaded, session established');
|
|
292
|
+
const fields = 'EngName,EngSymbol,HebName,HebSymbol,Symbol,ExpirationDate,ItemType,StockType,IsEtf,IsForeign,CurrencyCode,Exchange,CreationEquityNum,EquityType,ContractType,AllowedOrderDirection,EquitySubType';
|
|
293
|
+
const investmentUrl = `${baseUrl}/ServerServices/mytrade/api/v2/json2/account/view?account=${accountNumber}&fields=${fields}`;
|
|
294
|
+
debug('Trying investment account URL: %s', investmentUrl);
|
|
295
|
+
|
|
296
|
+
// Get XSRF token and session data from cookies
|
|
297
|
+
const cookies = await page.cookies();
|
|
298
|
+
const XSRFCookie = cookies.find(cookie => cookie.name === 'XSRF-TOKEN');
|
|
299
|
+
|
|
300
|
+
// Use captured session or fallback to generated ones
|
|
301
|
+
const sessionId = capturedSession || (0, _uuid.v4)();
|
|
302
|
+
const csession = capturedCsession || Math.random().toString();
|
|
303
|
+
const headers = {
|
|
304
|
+
'Content-Type': 'application/json; charset=utf-8',
|
|
305
|
+
csession,
|
|
306
|
+
session: sessionId,
|
|
307
|
+
Referer: mytradeUrl
|
|
308
|
+
};
|
|
309
|
+
if (XSRFCookie != null) {
|
|
310
|
+
headers['X-XSRF-TOKEN'] = XSRFCookie.value;
|
|
311
|
+
debug(' - Using XSRF token: %s', XSRFCookie.value.substring(0, 10) + '...');
|
|
312
|
+
}
|
|
313
|
+
debug(' - Request headers: csession=%s, session=%s', csession, sessionId);
|
|
314
|
+
const investmentData = await (0, _fetch.fetchPostWithinPage)(page, investmentUrl, {}, headers);
|
|
315
|
+
debug(' - Response received: %s', investmentData ? 'YES' : 'NO');
|
|
316
|
+
if (investmentData) {
|
|
317
|
+
debug(' - Response has View: %s', investmentData.View ? 'YES' : 'NO');
|
|
318
|
+
debug(' - Response has View.Account: %s', investmentData.View?.Account ? 'YES' : 'NO');
|
|
319
|
+
}
|
|
320
|
+
if (investmentData?.View?.Account) {
|
|
321
|
+
debug('✓ Found investment account data');
|
|
322
|
+
const accountData = investmentData.View.Account;
|
|
323
|
+
const balance = accountData.OnlineValue || 0;
|
|
324
|
+
const currency = accountData.CurrencyCode || _constants.SHEKEL_CURRENCY;
|
|
325
|
+
|
|
326
|
+
// Get securities from the balance array
|
|
327
|
+
const securities = [];
|
|
328
|
+
const balances = accountData.AccountPosition?.Balance || [];
|
|
329
|
+
const metaSecurities = investmentData.View.Meta?.Security || [];
|
|
330
|
+
|
|
331
|
+
// Create a map of security metadata for easy lookup
|
|
332
|
+
const metaMap = new Map();
|
|
333
|
+
for (const meta of metaSecurities) {
|
|
334
|
+
metaMap.set(meta['-Key'], meta);
|
|
335
|
+
}
|
|
336
|
+
for (const securityBalance of balances) {
|
|
337
|
+
const meta = metaMap.get(securityBalance.EquityNumber);
|
|
338
|
+
securities.push({
|
|
339
|
+
name: meta?.EngName || '',
|
|
340
|
+
symbol: meta?.EngSymbol || '',
|
|
341
|
+
volume: securityBalance.OnlineNV,
|
|
342
|
+
value: securityBalance.OnlineVL,
|
|
343
|
+
currency: securityBalance.CurrencyCode || meta?.CurrencyCode || _constants.SHEKEL_CURRENCY,
|
|
344
|
+
changePercentage: securityBalance.BaseRateChangePercentage,
|
|
345
|
+
profitLoss: securityBalance.ProfitLoss
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
debug(' - Balance: %s %s, Securities: %d', balance, currency, securities.length);
|
|
349
|
+
if (balance !== 0 || securities.length > 0) {
|
|
350
|
+
const investmentAccountNumber = `${account.bankNumber}-${account.branchNumber}-${account.accountNumber}-investment`;
|
|
351
|
+
accounts.push({
|
|
352
|
+
accountNumber: investmentAccountNumber,
|
|
353
|
+
balance,
|
|
354
|
+
currency,
|
|
355
|
+
savingsAccount: true,
|
|
356
|
+
txns: [],
|
|
357
|
+
securities
|
|
358
|
+
});
|
|
359
|
+
debug(' ✓ Added investment account: %s with %d securities', investmentAccountNumber, securities.length);
|
|
360
|
+
} else {
|
|
361
|
+
debug(' - Skipping (zero balance and no securities)');
|
|
362
|
+
}
|
|
363
|
+
} else {
|
|
364
|
+
debug(' - No investment account data found');
|
|
365
|
+
}
|
|
366
|
+
} catch (error) {
|
|
367
|
+
debug(' - Error fetching investment account: %s', error);
|
|
368
|
+
// Log more details about the error
|
|
369
|
+
if (error instanceof Error) {
|
|
370
|
+
debug(' Error message: %s', error.message);
|
|
371
|
+
debug(' Error stack: %s', error.stack);
|
|
372
|
+
}
|
|
373
|
+
} finally {
|
|
374
|
+
// Clean up request interception (in case it wasn't already done)
|
|
375
|
+
try {
|
|
376
|
+
page.off('request', requestHandler);
|
|
377
|
+
await page.setRequestInterception(false);
|
|
378
|
+
} catch (e) {
|
|
379
|
+
// Ignore cleanup errors
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
// Navigate back to the main homepage to restore the session for subsequent scraping
|
|
383
|
+
try {
|
|
384
|
+
const homepageUrl = `${baseUrl}/ng-portals/rb/he/homepage`;
|
|
385
|
+
debug('Navigating back to homepage: %s', homepageUrl);
|
|
386
|
+
await page.goto(homepageUrl, {
|
|
387
|
+
waitUntil: 'networkidle2',
|
|
388
|
+
timeout: 30000
|
|
389
|
+
});
|
|
390
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
391
|
+
debug('Homepage restored');
|
|
392
|
+
} catch (navError) {
|
|
393
|
+
debug(' - Failed to navigate back to homepage: %s', navError);
|
|
394
|
+
// Continue anyway, the outer try-catch in fetchAccountData will handle it
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
debug('Returning %d investment accounts', accounts.length);
|
|
398
|
+
return accounts;
|
|
399
|
+
}
|
|
124
400
|
async function fetchAccountData(page, baseUrl, options) {
|
|
125
401
|
const restContext = await getRestContext(page);
|
|
126
402
|
const apiSiteUrl = `${baseUrl}/${restContext}`;
|
|
@@ -146,12 +422,47 @@ async function fetchAccountData(page, baseUrl, options) {
|
|
|
146
422
|
} else {
|
|
147
423
|
debug('Skipping balance for a closed account, balance will be undefined');
|
|
148
424
|
}
|
|
149
|
-
|
|
425
|
+
let txns = [];
|
|
426
|
+
try {
|
|
427
|
+
txns = await getAccountTransactions(baseUrl, apiSiteUrl, page, accountNumber, startDateStr, endDateStr, additionalTransactionInformation);
|
|
428
|
+
} catch (error) {
|
|
429
|
+
debug('Error fetching transactions for %s (possibly closed account): %s', accountNumber, error);
|
|
430
|
+
// Continue with empty transactions
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// Add regular checking account
|
|
150
434
|
accounts.push({
|
|
151
435
|
accountNumber,
|
|
152
436
|
balance,
|
|
153
437
|
txns
|
|
154
438
|
});
|
|
439
|
+
|
|
440
|
+
// Fetch forex accounts for this account number
|
|
441
|
+
try {
|
|
442
|
+
const forexAccounts = await getForexAccounts(baseUrl, page, accountNumber, startDateStr, endDateStr);
|
|
443
|
+
accounts.push(...forexAccounts);
|
|
444
|
+
debug('Added %d forex accounts to results', forexAccounts.length);
|
|
445
|
+
} catch (error) {
|
|
446
|
+
debug('Error fetching forex accounts for %s: %s', accountNumber, error);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
// Fetch savings accounts for this account number
|
|
450
|
+
try {
|
|
451
|
+
const savingsAccounts = await getSavingsAccounts(baseUrl, page, accountNumber);
|
|
452
|
+
accounts.push(...savingsAccounts);
|
|
453
|
+
debug('Added %d savings accounts to results', savingsAccounts.length);
|
|
454
|
+
} catch (error) {
|
|
455
|
+
debug('Error fetching savings accounts for %s: %s', accountNumber, error);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
// Fetch investment accounts for this account number
|
|
459
|
+
try {
|
|
460
|
+
const investmentAccounts = await getInvestmentAccounts(baseUrl, page, account);
|
|
461
|
+
accounts.push(...investmentAccounts);
|
|
462
|
+
debug('Added %d investment accounts to results', investmentAccounts.length);
|
|
463
|
+
} catch (error) {
|
|
464
|
+
debug('Error fetching investment accounts for %s: %s', accountNumber, error);
|
|
465
|
+
}
|
|
155
466
|
}
|
|
156
467
|
const accountData = {
|
|
157
468
|
success: true,
|
|
@@ -195,4 +506,4 @@ class HapoalimScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
|
|
|
195
506
|
}
|
|
196
507
|
}
|
|
197
508
|
var _default = exports.default = HapoalimScraper;
|
|
198
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfdXVpZCIsIl9kZWJ1ZyIsIl9mZXRjaCIsIl9uYXZpZ2F0aW9uIiwiX3dhaXRpbmciLCJfdHJhbnNhY3Rpb25zIiwiX2Jhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJkZWJ1ZyIsImdldERlYnVnIiwiREFURV9GT1JNQVQiLCJjb252ZXJ0VHJhbnNhY3Rpb25zIiwidHhucyIsIm1hcCIsInR4biIsImlzT3V0Ym91bmQiLCJldmVudEFjdGl2aXR5VHlwZUNvZGUiLCJtZW1vIiwiYmVuZWZpY2lhcnlEZXRhaWxzRGF0YSIsInBhcnR5SGVhZGxpbmUiLCJwYXJ0eU5hbWUiLCJtZXNzYWdlSGVhZGxpbmUiLCJtZXNzYWdlRGV0YWlsIiwibWVtb0xpbmVzIiwicHVzaCIsImxlbmd0aCIsImpvaW4iLCJyZXN1bHQiLCJ0eXBlIiwiVHJhbnNhY3Rpb25UeXBlcyIsIk5vcm1hbCIsImlkZW50aWZpZXIiLCJyZWZlcmVuY2VOdW1iZXIiLCJkYXRlIiwibW9tZW50IiwiZXZlbnREYXRlIiwidG9JU09TdHJpbmciLCJwcm9jZXNzZWREYXRlIiwidmFsdWVEYXRlIiwib3JpZ2luYWxBbW91bnQiLCJldmVudEFtb3VudCIsIm9yaWdpbmFsQ3VycmVuY3kiLCJjaGFyZ2VkQW1vdW50IiwiZGVzY3JpcHRpb24iLCJhY3Rpdml0eURlc2NyaXB0aW9uIiwic3RhdHVzIiwic2VyaWFsTnVtYmVyIiwiVHJhbnNhY3Rpb25TdGF0dXNlcyIsIlBlbmRpbmciLCJDb21wbGV0ZWQiLCJnZXRSZXN0Q29udGV4dCIsInBhZ2UiLCJ3YWl0VW50aWwiLCJldmFsdWF0ZSIsIndpbmRvdyIsImJuaHBBcHAiLCJyZXN0Q29udGV4dCIsInNsaWNlIiwiZmV0Y2hQb2FsaW1YU1JGV2l0aGluUGFnZSIsInVybCIsInBhZ2VVdWlkIiwiY29va2llcyIsIlhTUkZDb29raWUiLCJmaW5kIiwiY29va2llIiwibmFtZSIsImhlYWRlcnMiLCJ2YWx1ZSIsInV1aWQiLCJ1dWlkNCIsImZldGNoUG9zdFdpdGhpblBhZ2UiLCJnZXRFeHRyYVNjcmFwIiwidHhuc1Jlc3VsdCIsImJhc2VVcmwiLCJhY2NvdW50TnVtYmVyIiwicHJvbWlzZXMiLCJ0cmFuc2FjdGlvbnMiLCJ0cmFuc2FjdGlvbiIsInBmbURldGFpbHMiLCJleHRyYVRyYW5zYWN0aW9uRGV0YWlscyIsImZldGNoR2V0V2l0aGluUGFnZSIsInRyYW5zYWN0aW9uTnVtYmVyIiwicmVzIiwiUHJvbWlzZSIsImFsbCIsImdldEFjY291bnRUcmFuc2FjdGlvbnMiLCJhcGlTaXRlVXJsIiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsImFkZGl0aW9uYWxUcmFuc2FjdGlvbkluZm9ybWF0aW9uIiwidHhuc1VybCIsImZpbmFsUmVzdWx0IiwiZ2V0QWNjb3VudEJhbGFuY2UiLCJiYWxhbmNlQW5kQ3JlZGl0TGltaXRVcmwiLCJiYWxhbmNlQW5kQ3JlZGl0TGltaXQiLCJjdXJyZW50QmFsYW5jZSIsImZldGNoQWNjb3VudERhdGEiLCJvcHRpb25zIiwiYWNjb3VudERhdGFVcmwiLCJhY2NvdW50c0luZm8iLCJkZWZhdWx0U3RhcnRNb21lbnQiLCJzdWJ0cmFjdCIsImFkZCIsInRvRGF0ZSIsInN0YXJ0TW9tZW50IiwibWF4Iiwic3RhcnREYXRlU3RyIiwiZm9ybWF0IiwiZW5kRGF0ZVN0ciIsImFjY291bnRzIiwiYWNjb3VudCIsImJhbGFuY2UiLCJiYW5rTnVtYmVyIiwiYnJhbmNoTnVtYmVyIiwiaXNBY3RpdmVBY2NvdW50IiwiYWNjb3VudENsb3NpbmdSZWFzb25Db2RlIiwiYWNjb3VudERhdGEiLCJzdWNjZXNzIiwiZ2V0UG9zc2libGVMb2dpblJlc3VsdHMiLCJ1cmxzIiwiTG9naW5SZXN1bHRzIiwiU3VjY2VzcyIsIkludmFsaWRQYXNzd29yZCIsIkNoYW5nZVBhc3N3b3JkIiwiY3JlYXRlTG9naW5GaWVsZHMiLCJjcmVkZW50aWFscyIsInNlbGVjdG9yIiwidXNlckNvZGUiLCJwYXNzd29yZCIsIkhhcG9hbGltU2NyYXBlciIsIkJhc2VTY3JhcGVyV2l0aEJyb3dzZXIiLCJnZXRMb2dpbk9wdGlvbnMiLCJsb2dpblVybCIsImZpZWxkcyIsInN1Ym1pdEJ1dHRvblNlbGVjdG9yIiwicG9zdEFjdGlvbiIsIndhaXRGb3JSZWRpcmVjdCIsInBvc3NpYmxlUmVzdWx0cyIsImZldGNoRGF0YSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9oYXBvYWxpbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyB0eXBlIFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHsgdjQgYXMgdXVpZDQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGdldERlYnVnIH0gZnJvbSAnLi4vaGVscGVycy9kZWJ1Zyc7XG5pbXBvcnQgeyBmZXRjaEdldFdpdGhpblBhZ2UsIGZldGNoUG9zdFdpdGhpblBhZ2UgfSBmcm9tICcuLi9oZWxwZXJzL2ZldGNoJztcbmltcG9ydCB7IHdhaXRGb3JSZWRpcmVjdCB9IGZyb20gJy4uL2hlbHBlcnMvbmF2aWdhdGlvbic7XG5pbXBvcnQgeyB3YWl0VW50aWwgfSBmcm9tICcuLi9oZWxwZXJzL3dhaXRpbmcnO1xuaW1wb3J0IHsgdHlwZSBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25TdGF0dXNlcywgVHJhbnNhY3Rpb25UeXBlcywgdHlwZSBUcmFuc2FjdGlvbnNBY2NvdW50IH0gZnJvbSAnLi4vdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IEJhc2VTY3JhcGVyV2l0aEJyb3dzZXIsIExvZ2luUmVzdWx0cywgdHlwZSBQb3NzaWJsZUxvZ2luUmVzdWx0cyB9IGZyb20gJy4vYmFzZS1zY3JhcGVyLXdpdGgtYnJvd3Nlcic7XG5pbXBvcnQgeyB0eXBlIFNjcmFwZXJPcHRpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuXG5jb25zdCBkZWJ1ZyA9IGdldERlYnVnKCdoYXBvYWxpbScpO1xuXG5jb25zdCBEQVRFX0ZPUk1BVCA9ICdZWVlZTU1ERCc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbmFtZXNwYWNlXG5kZWNsYXJlIG5hbWVzcGFjZSB3aW5kb3cge1xuICBjb25zdCBibmhwQXBwOiBhbnk7XG59XG5cbmludGVyZmFjZSBTY3JhcGVkVHJhbnNhY3Rpb24ge1xuICBzZXJpYWxOdW1iZXI/OiBudW1iZXI7XG4gIGFjdGl2aXR5RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV2ZW50QW1vdW50OiBudW1iZXI7XG4gIHZhbHVlRGF0ZT86IHN0cmluZztcbiAgZXZlbnREYXRlPzogc3RyaW5nO1xuICByZWZlcmVuY2VOdW1iZXI/OiBudW1iZXI7XG4gIFNjcmFwZWRUcmFuc2FjdGlvbj86IHN0cmluZztcbiAgZXZlbnRBY3Rpdml0eVR5cGVDb2RlOiBudW1iZXI7XG4gIGN1cnJlbnRCYWxhbmNlOiBudW1iZXI7XG4gIHBmbURldGFpbHM6IHN0cmluZztcbiAgYmVuZWZpY2lhcnlEZXRhaWxzRGF0YT86IHtcbiAgICBwYXJ0eUhlYWRsaW5lPzogc3RyaW5nO1xuICAgIHBhcnR5TmFtZT86IHN0cmluZztcbiAgICBtZXNzYWdlSGVhZGxpbmU/OiBzdHJpbmc7XG4gICAgbWVzc2FnZURldGFpbD86IHN0cmluZztcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFNjcmFwZWRQZm1UcmFuc2FjdGlvbiB7XG4gIHRyYW5zYWN0aW9uTnVtYmVyOiBudW1iZXI7XG59XG5cbnR5cGUgRmV0Y2hlZEFjY291bnREYXRhID0ge1xuICBiYW5rTnVtYmVyOiBzdHJpbmc7XG4gIGFjY291bnROdW1iZXI6IHN0cmluZztcbiAgYnJhbmNoTnVtYmVyOiBzdHJpbmc7XG4gIGFjY291bnRDbG9zaW5nUmVhc29uQ29kZTogbnVtYmVyO1xufVtdO1xuXG50eXBlIEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YSA9IHtcbiAgdHJhbnNhY3Rpb25zOiBTY3JhcGVkVHJhbnNhY3Rpb25bXTtcbn07XG5cbnR5cGUgQmFsYW5jZUFuZENyZWRpdExpbWl0ID0ge1xuICBjcmVkaXRMaW1pdEFtb3VudDogbnVtYmVyO1xuICBjcmVkaXRMaW1pdERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNyZWRpdExpbWl0VXRpbGl6YXRpb25BbW91bnQ6IG51bWJlcjtcbiAgY3JlZGl0TGltaXRVdGlsaXphdGlvbkV4aXN0YW5jZUNvZGU6IG51bWJlcjtcbiAgY3JlZGl0TGltaXRVdGlsaXphdGlvblBlcmNlbnQ6IG51bWJlcjtcbiAgY3VycmVudEFjY291bnRMaW1pdHNBbW91bnQ6IG51bWJlcjtcbiAgY3VycmVudEJhbGFuY2U6IG51bWJlcjtcbiAgd2l0aGRyYXdhbEJhbGFuY2U6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIGNvbnZlcnRUcmFuc2FjdGlvbnModHhuczogU2NyYXBlZFRyYW5zYWN0aW9uW10pOiBUcmFuc2FjdGlvbltdIHtcbiAgcmV0dXJuIHR4bnMubWFwKHR4biA9PiB7XG4gICAgY29uc3QgaXNPdXRib3VuZCA9IHR4bi5ldmVudEFjdGl2aXR5VHlwZUNvZGUgPT09IDI7XG5cbiAgICBsZXQgbWVtbyA9ICcnO1xuICAgIGlmICh0eG4uYmVuZWZpY2lhcnlEZXRhaWxzRGF0YSkge1xuICAgICAgY29uc3QgeyBwYXJ0eUhlYWRsaW5lLCBwYXJ0eU5hbWUsIG1lc3NhZ2VIZWFkbGluZSwgbWVzc2FnZURldGFpbCB9ID0gdHhuLmJlbmVmaWNpYXJ5RGV0YWlsc0RhdGE7XG4gICAgICBjb25zdCBtZW1vTGluZXM6IHN0cmluZ1tdID0gW107XG4gICAgICBpZiAocGFydHlIZWFkbGluZSkge1xuICAgICAgICBtZW1vTGluZXMucHVzaChwYXJ0eUhlYWRsaW5lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnR5TmFtZSkge1xuICAgICAgICBtZW1vTGluZXMucHVzaChgJHtwYXJ0eU5hbWV9LmApO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVzc2FnZUhlYWRsaW5lKSB7XG4gICAgICAgIG1lbW9MaW5lcy5wdXNoKG1lc3NhZ2VIZWFkbGluZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXNzYWdlRGV0YWlsKSB7XG4gICAgICAgIG1lbW9MaW5lcy5wdXNoKGAke21lc3NhZ2VEZXRhaWx9LmApO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVtb0xpbmVzLmxlbmd0aCkge1xuICAgICAgICBtZW1vID0gbWVtb0xpbmVzLmpvaW4oJyAnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IFRyYW5zYWN0aW9uID0ge1xuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWwsXG4gICAgICBpZGVudGlmaWVyOiB0eG4ucmVmZXJlbmNlTnVtYmVyLFxuICAgICAgZGF0ZTogbW9tZW50KHR4bi5ldmVudERhdGUsIERBVEVfRk9STUFUKS50b0lTT1N0cmluZygpLFxuICAgICAgcHJvY2Vzc2VkRGF0ZTogbW9tZW50KHR4bi52YWx1ZURhdGUsIERBVEVfRk9STUFUKS50b0lTT1N0cmluZygpLFxuICAgICAgb3JpZ2luYWxBbW91bnQ6IGlzT3V0Ym91bmQgPyAtdHhuLmV2ZW50QW1vdW50IDogdHhuLmV2ZW50QW1vdW50LFxuICAgICAgb3JpZ2luYWxDdXJyZW5jeTogJ0lMUycsXG4gICAgICBjaGFyZ2VkQW1vdW50OiBpc091dGJvdW5kID8gLXR4bi5ldmVudEFtb3VudCA6IHR4bi5ldmVudEFtb3VudCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0eG4uYWN0aXZpdHlEZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgIHN0YXR1czogdHhuLnNlcmlhbE51bWJlciA9PT0gMCA/IFRyYW5zYWN0aW9uU3RhdHVzZXMuUGVuZGluZyA6IFRyYW5zYWN0aW9uU3RhdHVzZXMuQ29tcGxldGVkLFxuICAgICAgbWVtbyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3RDb250ZXh0KHBhZ2U6IFBhZ2UpIHtcbiAgYXdhaXQgd2FpdFVudGlsKCgpID0+IHtcbiAgICByZXR1cm4gcGFnZS5ldmFsdWF0ZSgoKSA9PiAhIXdpbmRvdy5ibmhwQXBwKTtcbiAgfSwgJ3dhaXRpbmcgZm9yIGFwcCBkYXRhIGxvYWQnKTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYWdlLmV2YWx1YXRlKCgpID0+IHtcbiAgICByZXR1cm4gd2luZG93LmJuaHBBcHAucmVzdENvbnRleHQ7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQuc2xpY2UoMSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoUG9hbGltWFNSRldpdGhpblBhZ2UoXG4gIHBhZ2U6IFBhZ2UsXG4gIHVybDogc3RyaW5nLFxuICBwYWdlVXVpZDogc3RyaW5nLFxuKTogUHJvbWlzZTxGZXRjaGVkQWNjb3VudFRyYW5zYWN0aW9uc0RhdGEgfCBudWxsPiB7XG4gIGNvbnN0IGNvb2tpZXMgPSBhd2FpdCBwYWdlLmNvb2tpZXMoKTtcbiAgY29uc3QgWFNSRkNvb2tpZSA9IGNvb2tpZXMuZmluZChjb29raWUgPT4gY29va2llLm5hbWUgPT09ICdYU1JGLVRPS0VOJyk7XG4gIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgaWYgKFhTUkZDb29raWUgIT0gbnVsbCkge1xuICAgIGhlYWRlcnNbJ1gtWFNSRi1UT0tFTiddID0gWFNSRkNvb2tpZS52YWx1ZTtcbiAgfVxuICBoZWFkZXJzLnBhZ2VVdWlkID0gcGFnZVV1aWQ7XG4gIGhlYWRlcnMudXVpZCA9IHV1aWQ0KCk7XG4gIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCc7XG4gIHJldHVybiBmZXRjaFBvc3RXaXRoaW5QYWdlPEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YT4ocGFnZSwgdXJsLCBbXSwgaGVhZGVycyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhU2NyYXAoXG4gIHR4bnNSZXN1bHQ6IEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YSxcbiAgYmFzZVVybDogc3RyaW5nLFxuICBwYWdlOiBQYWdlLFxuICBhY2NvdW50TnVtYmVyOiBzdHJpbmcsXG4pOiBQcm9taXNlPEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YT4ge1xuICBjb25zdCBwcm9taXNlcyA9IHR4bnNSZXN1bHQudHJhbnNhY3Rpb25zLm1hcChhc3luYyAodHJhbnNhY3Rpb246IFNjcmFwZWRUcmFuc2FjdGlvbik6IFByb21pc2U8U2NyYXBlZFRyYW5zYWN0aW9uPiA9PiB7XG4gICAgY29uc3QgeyBwZm1EZXRhaWxzLCBzZXJpYWxOdW1iZXIgfSA9IHRyYW5zYWN0aW9uO1xuICAgIGlmIChzZXJpYWxOdW1iZXIgIT09IDApIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9JHtwZm1EZXRhaWxzfSZhY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZsYW5nPWhlYDtcbiAgICAgIGNvbnN0IGV4dHJhVHJhbnNhY3Rpb25EZXRhaWxzID0gKGF3YWl0IGZldGNoR2V0V2l0aGluUGFnZTxTY3JhcGVkUGZtVHJhbnNhY3Rpb25bXT4ocGFnZSwgdXJsKSkgfHwgW107XG4gICAgICBpZiAoZXh0cmFUcmFuc2FjdGlvbkRldGFpbHMgJiYgZXh0cmFUcmFuc2FjdGlvbkRldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgdHJhbnNhY3Rpb25OdW1iZXIgfSA9IGV4dHJhVHJhbnNhY3Rpb25EZXRhaWxzWzBdO1xuICAgICAgICBpZiAodHJhbnNhY3Rpb25OdW1iZXIpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi50cmFuc2FjdGlvbiwgcmVmZXJlbmNlTnVtYmVyOiB0cmFuc2FjdGlvbk51bWJlciB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgfSk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgcmV0dXJuIHsgdHJhbnNhY3Rpb25zOiByZXMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QWNjb3VudFRyYW5zYWN0aW9ucyhcbiAgYmFzZVVybDogc3RyaW5nLFxuICBhcGlTaXRlVXJsOiBzdHJpbmcsXG4gIHBhZ2U6IFBhZ2UsXG4gIGFjY291bnROdW1iZXI6IHN0cmluZyxcbiAgc3RhcnREYXRlOiBzdHJpbmcsXG4gIGVuZERhdGU6IHN0cmluZyxcbiAgYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24gPSBmYWxzZSxcbikge1xuICBjb25zdCB0eG5zVXJsID0gYCR7YXBpU2l0ZVVybH0vY3VycmVudC1hY2NvdW50L3RyYW5zYWN0aW9ucz9hY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZudW1JdGVtc1BlclBhZ2U9MTAwMCZyZXRyaWV2YWxFbmREYXRlPSR7ZW5kRGF0ZX0mcmV0cmlldmFsU3RhcnREYXRlPSR7c3RhcnREYXRlfSZzb3J0Q29kZT0xYDtcbiAgY29uc3QgdHhuc1Jlc3VsdCA9IGF3YWl0IGZldGNoUG9hbGltWFNSRldpdGhpblBhZ2UocGFnZSwgdHhuc1VybCwgJy9jdXJyZW50LWFjY291bnQvdHJhbnNhY3Rpb25zJyk7XG5cbiAgY29uc3QgZmluYWxSZXN1bHQgPVxuICAgIGFkZGl0aW9uYWxUcmFuc2FjdGlvbkluZm9ybWF0aW9uICYmIHR4bnNSZXN1bHQ/LnRyYW5zYWN0aW9ucy5sZW5ndGhcbiAgICAgID8gYXdhaXQgZ2V0RXh0cmFTY3JhcCh0eG5zUmVzdWx0LCBiYXNlVXJsLCBwYWdlLCBhY2NvdW50TnVtYmVyKVxuICAgICAgOiB0eG5zUmVzdWx0O1xuXG4gIHJldHVybiBjb252ZXJ0VHJhbnNhY3Rpb25zKGZpbmFsUmVzdWx0Py50cmFuc2FjdGlvbnMgPz8gW10pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBY2NvdW50QmFsYW5jZShhcGlTaXRlVXJsOiBzdHJpbmcsIHBhZ2U6IFBhZ2UsIGFjY291bnROdW1iZXI6IHN0cmluZykge1xuICBjb25zdCBiYWxhbmNlQW5kQ3JlZGl0TGltaXRVcmwgPSBgJHthcGlTaXRlVXJsfS9jdXJyZW50LWFjY291bnQvY29tcG9zaXRlL2JhbGFuY2VBbmRDcmVkaXRMaW1pdD9hY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZ2aWV3PWRldGFpbHMmbGFuZz1oZWA7XG4gIGNvbnN0IGJhbGFuY2VBbmRDcmVkaXRMaW1pdCA9IGF3YWl0IGZldGNoR2V0V2l0aGluUGFnZTxCYWxhbmNlQW5kQ3JlZGl0TGltaXQ+KHBhZ2UsIGJhbGFuY2VBbmRDcmVkaXRMaW1pdFVybCk7XG5cbiAgcmV0dXJuIGJhbGFuY2VBbmRDcmVkaXRMaW1pdD8uY3VycmVudEJhbGFuY2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQWNjb3VudERhdGEocGFnZTogUGFnZSwgYmFzZVVybDogc3RyaW5nLCBvcHRpb25zOiBTY3JhcGVyT3B0aW9ucykge1xuICBjb25zdCByZXN0Q29udGV4dCA9IGF3YWl0IGdldFJlc3RDb250ZXh0KHBhZ2UpO1xuICBjb25zdCBhcGlTaXRlVXJsID0gYCR7YmFzZVVybH0vJHtyZXN0Q29udGV4dH1gO1xuICBjb25zdCBhY2NvdW50RGF0YVVybCA9IGAke2Jhc2VVcmx9L1NlcnZlclNlcnZpY2VzL2dlbmVyYWwvYWNjb3VudHNgO1xuXG4gIGRlYnVnKCdmZXRjaGluZyBhY2NvdW50cyBkYXRhJyk7XG4gIGNvbnN0IGFjY291bnRzSW5mbyA9IChhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8RmV0Y2hlZEFjY291bnREYXRhPihwYWdlLCBhY2NvdW50RGF0YVVybCkpIHx8IFtdO1xuICBkZWJ1ZygnZ290ICVkIGFjY291bnRzLCBmZXRjaGluZyB0eG5zIGFuZCBiYWxhbmNlJywgYWNjb3VudHNJbmZvLmxlbmd0aCk7XG5cbiAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJykuYWRkKDEsICdkYXknKTtcbiAgY29uc3Qgc3RhcnREYXRlID0gb3B0aW9ucy5zdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudC5tYXgoZGVmYXVsdFN0YXJ0TW9tZW50LCBtb21lbnQoc3RhcnREYXRlKSk7XG4gIGNvbnN0IHsgYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24gfSA9IG9wdGlvbnM7XG5cbiAgY29uc3Qgc3RhcnREYXRlU3RyID0gc3RhcnRNb21lbnQuZm9ybWF0KERBVEVfRk9STUFUKTtcbiAgY29uc3QgZW5kRGF0ZVN0ciA9IG1vbWVudCgpLmZvcm1hdChEQVRFX0ZPUk1BVCk7XG5cbiAgY29uc3QgYWNjb3VudHM6IFRyYW5zYWN0aW9uc0FjY291bnRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYWNjb3VudCBvZiBhY2NvdW50c0luZm8pIHtcbiAgICBsZXQgYmFsYW5jZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjY291bnROdW1iZXIgPSBgJHthY2NvdW50LmJhbmtOdW1iZXJ9LSR7YWNjb3VudC5icmFuY2hOdW1iZXJ9LSR7YWNjb3VudC5hY2NvdW50TnVtYmVyfWA7XG5cbiAgICBjb25zdCBpc0FjdGl2ZUFjY291bnQgPSBhY2NvdW50LmFjY291bnRDbG9zaW5nUmVhc29uQ29kZSA9PT0gMDtcbiAgICBpZiAoaXNBY3RpdmVBY2NvdW50KSB7XG4gICAgICBiYWxhbmNlID0gYXdhaXQgZ2V0QWNjb3VudEJhbGFuY2UoYXBpU2l0ZVVybCwgcGFnZSwgYWNjb3VudE51bWJlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdTa2lwcGluZyBiYWxhbmNlIGZvciBhIGNsb3NlZCBhY2NvdW50LCBiYWxhbmNlIHdpbGwgYmUgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHhucyA9IGF3YWl0IGdldEFjY291bnRUcmFuc2FjdGlvbnMoXG4gICAgICBiYXNlVXJsLFxuICAgICAgYXBpU2l0ZVVybCxcbiAgICAgIHBhZ2UsXG4gICAgICBhY2NvdW50TnVtYmVyLFxuICAgICAgc3RhcnREYXRlU3RyLFxuICAgICAgZW5kRGF0ZVN0cixcbiAgICAgIGFkZGl0aW9uYWxUcmFuc2FjdGlvbkluZm9ybWF0aW9uLFxuICAgICk7XG5cbiAgICBhY2NvdW50cy5wdXNoKHtcbiAgICAgIGFjY291bnROdW1iZXIsXG4gICAgICBiYWxhbmNlLFxuICAgICAgdHhucyxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGFjY291bnREYXRhID0ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgYWNjb3VudHMsXG4gIH07XG4gIGRlYnVnKCdmZXRjaGluZyBlbmRlZCcpO1xuICByZXR1cm4gYWNjb3VudERhdGE7XG59XG5cbmZ1bmN0aW9uIGdldFBvc3NpYmxlTG9naW5SZXN1bHRzKGJhc2VVcmw6IHN0cmluZykge1xuICBjb25zdCB1cmxzOiBQb3NzaWJsZUxvZ2luUmVzdWx0cyA9IHt9O1xuICB1cmxzW0xvZ2luUmVzdWx0cy5TdWNjZXNzXSA9IFtcbiAgICBgJHtiYXNlVXJsfS9wb3J0YWxzZXJ2ZXIvSG9tZVBhZ2VgLFxuICAgIGAke2Jhc2VVcmx9L25nLXBvcnRhbHMtYnQvcmIvaGUvaG9tZXBhZ2VgLFxuICAgIGAke2Jhc2VVcmx9L25nLXBvcnRhbHMvcmIvaGUvaG9tZXBhZ2VgLFxuICBdO1xuICB1cmxzW0xvZ2luUmVzdWx0cy5JbnZhbGlkUGFzc3dvcmRdID0gW1xuICAgIGAke2Jhc2VVcmx9L0FVVEhFTlRJQ0FURS9MT0dPTj9mbG93PUFVVEhFTlRJQ0FURSZzdGF0ZT1MT0dPTiZlcnJvcmNvZGU9MS42JmNhbGxtZT1mYWxzZWAsXG4gIF07XG4gIHVybHNbTG9naW5SZXN1bHRzLkNoYW5nZVBhc3N3b3JkXSA9IFtcbiAgICBgJHtiYXNlVXJsfS9NQ1AvU1RBUlQ/Zmxvdz1NQ1Amc3RhdGU9U1RBUlQmZXhwaXJlZERhdGU9bnVsbGAsXG4gICAgL1xcL0FCT1VUVE9FWFBJUkVcXC9TVEFSVC9pLFxuICBdO1xuICByZXR1cm4gdXJscztcbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gIHJldHVybiBbXG4gICAgeyBzZWxlY3RvcjogJyN1c2VyQ29kZScsIHZhbHVlOiBjcmVkZW50aWFscy51c2VyQ29kZSB9LFxuICAgIHsgc2VsZWN0b3I6ICcjcGFzc3dvcmQnLCB2YWx1ZTogY3JlZGVudGlhbHMucGFzc3dvcmQgfSxcbiAgXTtcbn1cblxudHlwZSBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyA9IHsgdXNlckNvZGU6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9O1xuXG5jbGFzcyBIYXBvYWxpbVNjcmFwZXIgZXh0ZW5kcyBCYXNlU2NyYXBlcldpdGhCcm93c2VyPFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gIGdldCBiYXNlVXJsKCkge1xuICAgIHJldHVybiAnaHR0cHM6Ly9sb2dpbi5iYW5raGFwb2FsaW0uY28uaWwnO1xuICB9XG5cbiAgZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscykge1xuICAgIHJldHVybiB7XG4gICAgICBsb2dpblVybDogYCR7dGhpcy5iYXNlVXJsfS9jZ2ktYmluL3BvYWx3d3djP3JlcU5hbWU9Z2V0TG9nb25QYWdlYCxcbiAgICAgIGZpZWxkczogY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHMpLFxuICAgICAgc3VibWl0QnV0dG9uU2VsZWN0b3I6ICcubG9naW4tYnRuJyxcbiAgICAgIHBvc3RBY3Rpb246IGFzeW5jICgpID0+IHdhaXRGb3JSZWRpcmVjdCh0aGlzLnBhZ2UpLFxuICAgICAgcG9zc2libGVSZXN1bHRzOiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyh0aGlzLmJhc2VVcmwpLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBmZXRjaERhdGEoKSB7XG4gICAgcmV0dXJuIGZldGNoQWNjb3VudERhdGEodGhpcy5wYWdlLCB0aGlzLmJhc2VVcmwsIHRoaXMub3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSGFwb2FsaW1TY3JhcGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxLQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxhQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyx1QkFBQSxHQUFBUCxPQUFBO0FBQThHLFNBQUFELHVCQUFBUyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRzlHLE1BQU1HLEtBQUssR0FBRyxJQUFBQyxlQUFRLEVBQUMsVUFBVSxDQUFDO0FBRWxDLE1BQU1DLFdBQVcsR0FBRyxVQUFVOztBQUU5Qjs7QUFrREEsU0FBU0MsbUJBQW1CQSxDQUFDQyxJQUEwQixFQUFpQjtFQUN0RSxPQUFPQSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0MsR0FBRyxJQUFJO0lBQ3JCLE1BQU1DLFVBQVUsR0FBR0QsR0FBRyxDQUFDRSxxQkFBcUIsS0FBSyxDQUFDO0lBRWxELElBQUlDLElBQUksR0FBRyxFQUFFO0lBQ2IsSUFBSUgsR0FBRyxDQUFDSSxzQkFBc0IsRUFBRTtNQUM5QixNQUFNO1FBQUVDLGFBQWE7UUFBRUMsU0FBUztRQUFFQyxlQUFlO1FBQUVDO01BQWMsQ0FBQyxHQUFHUixHQUFHLENBQUNJLHNCQUFzQjtNQUMvRixNQUFNSyxTQUFtQixHQUFHLEVBQUU7TUFDOUIsSUFBSUosYUFBYSxFQUFFO1FBQ2pCSSxTQUFTLENBQUNDLElBQUksQ0FBQ0wsYUFBYSxDQUFDO01BQy9CO01BRUEsSUFBSUMsU0FBUyxFQUFFO1FBQ2JHLFNBQVMsQ0FBQ0MsSUFBSSxDQUFDLEdBQUdKLFNBQVMsR0FBRyxDQUFDO01BQ2pDO01BRUEsSUFBSUMsZUFBZSxFQUFFO1FBQ25CRSxTQUFTLENBQUNDLElBQUksQ0FBQ0gsZUFBZSxDQUFDO01BQ2pDO01BRUEsSUFBSUMsYUFBYSxFQUFFO1FBQ2pCQyxTQUFTLENBQUNDLElBQUksQ0FBQyxHQUFHRixhQUFhLEdBQUcsQ0FBQztNQUNyQztNQUVBLElBQUlDLFNBQVMsQ0FBQ0UsTUFBTSxFQUFFO1FBQ3BCUixJQUFJLEdBQUdNLFNBQVMsQ0FBQ0csSUFBSSxDQUFDLEdBQUcsQ0FBQztNQUM1QjtJQUNGO0lBRUEsTUFBTUMsTUFBbUIsR0FBRztNQUMxQkMsSUFBSSxFQUFFQyw4QkFBZ0IsQ0FBQ0MsTUFBTTtNQUM3QkMsVUFBVSxFQUFFakIsR0FBRyxDQUFDa0IsZUFBZTtNQUMvQkMsSUFBSSxFQUFFLElBQUFDLGVBQU0sRUFBQ3BCLEdBQUcsQ0FBQ3FCLFNBQVMsRUFBRXpCLFdBQVcsQ0FBQyxDQUFDMEIsV0FBVyxDQUFDLENBQUM7TUFDdERDLGFBQWEsRUFBRSxJQUFBSCxlQUFNLEVBQUNwQixHQUFHLENBQUN3QixTQUFTLEVBQUU1QixXQUFXLENBQUMsQ0FBQzBCLFdBQVcsQ0FBQyxDQUFDO01BQy9ERyxjQUFjLEVBQUV4QixVQUFVLEdBQUcsQ0FBQ0QsR0FBRyxDQUFDMEIsV0FBVyxHQUFHMUIsR0FBRyxDQUFDMEIsV0FBVztNQUMvREMsZ0JBQWdCLEVBQUUsS0FBSztNQUN2QkMsYUFBYSxFQUFFM0IsVUFBVSxHQUFHLENBQUNELEdBQUcsQ0FBQzBCLFdBQVcsR0FBRzFCLEdBQUcsQ0FBQzBCLFdBQVc7TUFDOURHLFdBQVcsRUFBRTdCLEdBQUcsQ0FBQzhCLG1CQUFtQixJQUFJLEVBQUU7TUFDMUNDLE1BQU0sRUFBRS9CLEdBQUcsQ0FBQ2dDLFlBQVksS0FBSyxDQUFDLEdBQUdDLGlDQUFtQixDQUFDQyxPQUFPLEdBQUdELGlDQUFtQixDQUFDRSxTQUFTO01BQzVGaEM7SUFDRixDQUFDO0lBRUQsT0FBT1UsTUFBTTtFQUNmLENBQUMsQ0FBQztBQUNKO0FBRUEsZUFBZXVCLGNBQWNBLENBQUNDLElBQVUsRUFBRTtFQUN4QyxNQUFNLElBQUFDLGtCQUFTLEVBQUMsTUFBTTtJQUNwQixPQUFPRCxJQUFJLENBQUNFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxPQUFPLENBQUM7RUFDOUMsQ0FBQyxFQUFFLDJCQUEyQixDQUFDO0VBRS9CLE1BQU01QixNQUFNLEdBQUcsTUFBTXdCLElBQUksQ0FBQ0UsUUFBUSxDQUFDLE1BQU07SUFDdkMsT0FBT0MsTUFBTSxDQUFDQyxPQUFPLENBQUNDLFdBQVc7RUFDbkMsQ0FBQyxDQUFDO0VBRUYsT0FBTzdCLE1BQU0sQ0FBQzhCLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDeEI7QUFFQSxlQUFlQyx5QkFBeUJBLENBQ3RDUCxJQUFVLEVBQ1ZRLEdBQVcsRUFDWEMsUUFBZ0IsRUFDZ0M7RUFDaEQsTUFBTUMsT0FBTyxHQUFHLE1BQU1WLElBQUksQ0FBQ1UsT0FBTyxDQUFDLENBQUM7RUFDcEMsTUFBTUMsVUFBVSxHQUFHRCxPQUFPLENBQUNFLElBQUksQ0FBQ0MsTUFBTSxJQUFJQSxNQUFNLENBQUNDLElBQUksS0FBSyxZQUFZLENBQUM7RUFDdkUsTUFBTUMsT0FBNEIsR0FBRyxDQUFDLENBQUM7RUFDdkMsSUFBSUosVUFBVSxJQUFJLElBQUksRUFBRTtJQUN0QkksT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHSixVQUFVLENBQUNLLEtBQUs7RUFDNUM7RUFDQUQsT0FBTyxDQUFDTixRQUFRLEdBQUdBLFFBQVE7RUFDM0JNLE9BQU8sQ0FBQ0UsSUFBSSxHQUFHLElBQUFDLFFBQUssRUFBQyxDQUFDO0VBQ3RCSCxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsZ0NBQWdDO0VBQzFELE9BQU8sSUFBQUksMEJBQW1CLEVBQWlDbkIsSUFBSSxFQUFFUSxHQUFHLEVBQUUsRUFBRSxFQUFFTyxPQUFPLENBQUM7QUFDcEY7QUFFQSxlQUFlSyxhQUFhQSxDQUMxQkMsVUFBMEMsRUFDMUNDLE9BQWUsRUFDZnRCLElBQVUsRUFDVnVCLGFBQXFCLEVBQ29CO0VBQ3pDLE1BQU1DLFFBQVEsR0FBR0gsVUFBVSxDQUFDSSxZQUFZLENBQUMvRCxHQUFHLENBQUMsTUFBT2dFLFdBQStCLElBQWtDO0lBQ25ILE1BQU07TUFBRUMsVUFBVTtNQUFFaEM7SUFBYSxDQUFDLEdBQUcrQixXQUFXO0lBQ2hELElBQUkvQixZQUFZLEtBQUssQ0FBQyxFQUFFO01BQ3RCLE1BQU1hLEdBQUcsR0FBRyxHQUFHYyxPQUFPLEdBQUdLLFVBQVUsY0FBY0osYUFBYSxVQUFVO01BQ3hFLE1BQU1LLHVCQUF1QixHQUFHLENBQUMsTUFBTSxJQUFBQyx5QkFBa0IsRUFBMEI3QixJQUFJLEVBQUVRLEdBQUcsQ0FBQyxLQUFLLEVBQUU7TUFDcEcsSUFBSW9CLHVCQUF1QixJQUFJQSx1QkFBdUIsQ0FBQ3RELE1BQU0sRUFBRTtRQUM3RCxNQUFNO1VBQUV3RDtRQUFrQixDQUFDLEdBQUdGLHVCQUF1QixDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJRSxpQkFBaUIsRUFBRTtVQUNyQixPQUFPO1lBQUUsR0FBR0osV0FBVztZQUFFN0MsZUFBZSxFQUFFaUQ7VUFBa0IsQ0FBQztRQUMvRDtNQUNGO0lBQ0Y7SUFDQSxPQUFPSixXQUFXO0VBQ3BCLENBQUMsQ0FBQztFQUNGLE1BQU1LLEdBQUcsR0FBRyxNQUFNQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ1QsUUFBUSxDQUFDO0VBQ3ZDLE9BQU87SUFBRUMsWUFBWSxFQUFFTTtFQUFJLENBQUM7QUFDOUI7QUFFQSxlQUFlRyxzQkFBc0JBLENBQ25DWixPQUFlLEVBQ2ZhLFVBQWtCLEVBQ2xCbkMsSUFBVSxFQUNWdUIsYUFBcUIsRUFDckJhLFNBQWlCLEVBQ2pCQyxPQUFlLEVBQ2ZDLGdDQUFnQyxHQUFHLEtBQUssRUFDeEM7RUFDQSxNQUFNQyxPQUFPLEdBQUcsR0FBR0osVUFBVSwyQ0FBMkNaLGFBQWEsMENBQTBDYyxPQUFPLHVCQUF1QkQsU0FBUyxhQUFhO0VBQ25MLE1BQU1mLFVBQVUsR0FBRyxNQUFNZCx5QkFBeUIsQ0FBQ1AsSUFBSSxFQUFFdUMsT0FBTyxFQUFFLCtCQUErQixDQUFDO0VBRWxHLE1BQU1DLFdBQVcsR0FDZkYsZ0NBQWdDLElBQUlqQixVQUFVLEVBQUVJLFlBQVksQ0FBQ25ELE1BQU0sR0FDL0QsTUFBTThDLGFBQWEsQ0FBQ0MsVUFBVSxFQUFFQyxPQUFPLEVBQUV0QixJQUFJLEVBQUV1QixhQUFhLENBQUMsR0FDN0RGLFVBQVU7RUFFaEIsT0FBTzdELG1CQUFtQixDQUFDZ0YsV0FBVyxFQUFFZixZQUFZLElBQUksRUFBRSxDQUFDO0FBQzdEO0FBRUEsZUFBZWdCLGlCQUFpQkEsQ0FBQ04sVUFBa0IsRUFBRW5DLElBQVUsRUFBRXVCLGFBQXFCLEVBQUU7RUFDdEYsTUFBTW1CLHdCQUF3QixHQUFHLEdBQUdQLFVBQVUsOERBQThEWixhQUFhLHVCQUF1QjtFQUNoSixNQUFNb0IscUJBQXFCLEdBQUcsTUFBTSxJQUFBZCx5QkFBa0IsRUFBd0I3QixJQUFJLEVBQUUwQyx3QkFBd0IsQ0FBQztFQUU3RyxPQUFPQyxxQkFBcUIsRUFBRUMsY0FBYztBQUM5QztBQUVBLGVBQWVDLGdCQUFnQkEsQ0FBQzdDLElBQVUsRUFBRXNCLE9BQWUsRUFBRXdCLE9BQXVCLEVBQUU7RUFDcEYsTUFBTXpDLFdBQVcsR0FBRyxNQUFNTixjQUFjLENBQUNDLElBQUksQ0FBQztFQUM5QyxNQUFNbUMsVUFBVSxHQUFHLEdBQUdiLE9BQU8sSUFBSWpCLFdBQVcsRUFBRTtFQUM5QyxNQUFNMEMsY0FBYyxHQUFHLEdBQUd6QixPQUFPLGtDQUFrQztFQUVuRWpFLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQztFQUMvQixNQUFNMkYsWUFBWSxHQUFHLENBQUMsTUFBTSxJQUFBbkIseUJBQWtCLEVBQXFCN0IsSUFBSSxFQUFFK0MsY0FBYyxDQUFDLEtBQUssRUFBRTtFQUMvRjFGLEtBQUssQ0FBQyw0Q0FBNEMsRUFBRTJGLFlBQVksQ0FBQzFFLE1BQU0sQ0FBQztFQUV4RSxNQUFNMkUsa0JBQWtCLEdBQUcsSUFBQWxFLGVBQU0sRUFBQyxDQUFDLENBQUNtRSxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztFQUN0RSxNQUFNZixTQUFTLEdBQUdVLE9BQU8sQ0FBQ1YsU0FBUyxJQUFJYSxrQkFBa0IsQ0FBQ0csTUFBTSxDQUFDLENBQUM7RUFDbEUsTUFBTUMsV0FBVyxHQUFHdEUsZUFBTSxDQUFDdUUsR0FBRyxDQUFDTCxrQkFBa0IsRUFBRSxJQUFBbEUsZUFBTSxFQUFDcUQsU0FBUyxDQUFDLENBQUM7RUFDckUsTUFBTTtJQUFFRTtFQUFpQyxDQUFDLEdBQUdRLE9BQU87RUFFcEQsTUFBTVMsWUFBWSxHQUFHRixXQUFXLENBQUNHLE1BQU0sQ0FBQ2pHLFdBQVcsQ0FBQztFQUNwRCxNQUFNa0csVUFBVSxHQUFHLElBQUExRSxlQUFNLEVBQUMsQ0FBQyxDQUFDeUUsTUFBTSxDQUFDakcsV0FBVyxDQUFDO0VBRS9DLE1BQU1tRyxRQUErQixHQUFHLEVBQUU7RUFFMUMsS0FBSyxNQUFNQyxPQUFPLElBQUlYLFlBQVksRUFBRTtJQUNsQyxJQUFJWSxPQUEyQjtJQUMvQixNQUFNckMsYUFBYSxHQUFHLEdBQUdvQyxPQUFPLENBQUNFLFVBQVUsSUFBSUYsT0FBTyxDQUFDRyxZQUFZLElBQUlILE9BQU8sQ0FBQ3BDLGFBQWEsRUFBRTtJQUU5RixNQUFNd0MsZUFBZSxHQUFHSixPQUFPLENBQUNLLHdCQUF3QixLQUFLLENBQUM7SUFDOUQsSUFBSUQsZUFBZSxFQUFFO01BQ25CSCxPQUFPLEdBQUcsTUFBTW5CLGlCQUFpQixDQUFDTixVQUFVLEVBQUVuQyxJQUFJLEVBQUV1QixhQUFhLENBQUM7SUFDcEUsQ0FBQyxNQUFNO01BQ0xsRSxLQUFLLENBQUMsa0VBQWtFLENBQUM7SUFDM0U7SUFFQSxNQUFNSSxJQUFJLEdBQUcsTUFBTXlFLHNCQUFzQixDQUN2Q1osT0FBTyxFQUNQYSxVQUFVLEVBQ1ZuQyxJQUFJLEVBQ0p1QixhQUFhLEVBQ2JnQyxZQUFZLEVBQ1pFLFVBQVUsRUFDVm5CLGdDQUNGLENBQUM7SUFFRG9CLFFBQVEsQ0FBQ3JGLElBQUksQ0FBQztNQUNaa0QsYUFBYTtNQUNicUMsT0FBTztNQUNQbkc7SUFDRixDQUFDLENBQUM7RUFDSjtFQUVBLE1BQU13RyxXQUFXLEdBQUc7SUFDbEJDLE9BQU8sRUFBRSxJQUFJO0lBQ2JSO0VBQ0YsQ0FBQztFQUNEckcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0VBQ3ZCLE9BQU80RyxXQUFXO0FBQ3BCO0FBRUEsU0FBU0UsdUJBQXVCQSxDQUFDN0MsT0FBZSxFQUFFO0VBQ2hELE1BQU04QyxJQUEwQixHQUFHLENBQUMsQ0FBQztFQUNyQ0EsSUFBSSxDQUFDQyxvQ0FBWSxDQUFDQyxPQUFPLENBQUMsR0FBRyxDQUMzQixHQUFHaEQsT0FBTyx3QkFBd0IsRUFDbEMsR0FBR0EsT0FBTywrQkFBK0IsRUFDekMsR0FBR0EsT0FBTyw0QkFBNEIsQ0FDdkM7RUFDRDhDLElBQUksQ0FBQ0Msb0NBQVksQ0FBQ0UsZUFBZSxDQUFDLEdBQUcsQ0FDbkMsR0FBR2pELE9BQU8sOEVBQThFLENBQ3pGO0VBQ0Q4QyxJQUFJLENBQUNDLG9DQUFZLENBQUNHLGNBQWMsQ0FBQyxHQUFHLENBQ2xDLEdBQUdsRCxPQUFPLGtEQUFrRCxFQUM1RCx5QkFBeUIsQ0FDMUI7RUFDRCxPQUFPOEMsSUFBSTtBQUNiO0FBRUEsU0FBU0ssaUJBQWlCQSxDQUFDQyxXQUF1QyxFQUFFO0VBQ2xFLE9BQU8sQ0FDTDtJQUFFQyxRQUFRLEVBQUUsV0FBVztJQUFFM0QsS0FBSyxFQUFFMEQsV0FBVyxDQUFDRTtFQUFTLENBQUMsRUFDdEQ7SUFBRUQsUUFBUSxFQUFFLFdBQVc7SUFBRTNELEtBQUssRUFBRTBELFdBQVcsQ0FBQ0c7RUFBUyxDQUFDLENBQ3ZEO0FBQ0g7QUFJQSxNQUFNQyxlQUFlLFNBQVNDLDhDQUFzQixDQUE2QjtFQUMvRTtFQUNBLElBQUl6RCxPQUFPQSxDQUFBLEVBQUc7SUFDWixPQUFPLGtDQUFrQztFQUMzQztFQUVBMEQsZUFBZUEsQ0FBQ04sV0FBdUMsRUFBRTtJQUN2RCxPQUFPO01BQ0xPLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQzNELE9BQU8sd0NBQXdDO01BQ2pFNEQsTUFBTSxFQUFFVCxpQkFBaUIsQ0FBQ0MsV0FBVyxDQUFDO01BQ3RDUyxvQkFBb0IsRUFBRSxZQUFZO01BQ2xDQyxVQUFVLEVBQUUsTUFBQUEsQ0FBQSxLQUFZLElBQUFDLDJCQUFlLEVBQUMsSUFBSSxDQUFDckYsSUFBSSxDQUFDO01BQ2xEc0YsZUFBZSxFQUFFbkIsdUJBQXVCLENBQUMsSUFBSSxDQUFDN0MsT0FBTztJQUN2RCxDQUFDO0VBQ0g7RUFFQSxNQUFNaUUsU0FBU0EsQ0FBQSxFQUFHO0lBQ2hCLE9BQU8xQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM3QyxJQUFJLEVBQUUsSUFBSSxDQUFDc0IsT0FBTyxFQUFFLElBQUksQ0FBQ3dCLE9BQU8sQ0FBQztFQUNoRTtBQUNGO0FBQUMsSUFBQTBDLFFBQUEsR0FBQUMsT0FBQSxDQUFBckksT0FBQSxHQUVjMEgsZUFBZSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
509
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfdXVpZCIsIl9jb25zdGFudHMiLCJfZGVidWciLCJfZmV0Y2giLCJfbmF2aWdhdGlvbiIsIl93YWl0aW5nIiwiX3RyYW5zYWN0aW9ucyIsIl9iYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZGVidWciLCJnZXREZWJ1ZyIsIkRBVEVfRk9STUFUIiwiY29udmVydFRyYW5zYWN0aW9ucyIsInR4bnMiLCJtYXAiLCJ0eG4iLCJpc091dGJvdW5kIiwiZXZlbnRBY3Rpdml0eVR5cGVDb2RlIiwibWVtbyIsImJlbmVmaWNpYXJ5RGV0YWlsc0RhdGEiLCJwYXJ0eUhlYWRsaW5lIiwicGFydHlOYW1lIiwibWVzc2FnZUhlYWRsaW5lIiwibWVzc2FnZURldGFpbCIsIm1lbW9MaW5lcyIsInB1c2giLCJsZW5ndGgiLCJqb2luIiwicmVzdWx0IiwidHlwZSIsIlRyYW5zYWN0aW9uVHlwZXMiLCJOb3JtYWwiLCJpZGVudGlmaWVyIiwicmVmZXJlbmNlTnVtYmVyIiwiZGF0ZSIsIm1vbWVudCIsImV2ZW50RGF0ZSIsInRvSVNPU3RyaW5nIiwicHJvY2Vzc2VkRGF0ZSIsInZhbHVlRGF0ZSIsIm9yaWdpbmFsQW1vdW50IiwiZXZlbnRBbW91bnQiLCJvcmlnaW5hbEN1cnJlbmN5IiwiU0hFS0VMX0NVUlJFTkNZIiwiY2hhcmdlZEFtb3VudCIsImRlc2NyaXB0aW9uIiwiYWN0aXZpdHlEZXNjcmlwdGlvbiIsInN0YXR1cyIsInNlcmlhbE51bWJlciIsIlRyYW5zYWN0aW9uU3RhdHVzZXMiLCJQZW5kaW5nIiwiQ29tcGxldGVkIiwiY29udmVydEZvcmV4VHJhbnNhY3Rpb25zIiwiY3VycmVuY3kiLCJkYXRlU3RyIiwiZXhlY3V0aW5nRGF0ZSIsInRvU3RyaW5nIiwidmFsdWVEYXRlU3RyIiwiZXZlbnREZXRhaWxzIiwicmVjb3JkU2VyaWFsTnVtYmVyIiwiZ2V0UmVzdENvbnRleHQiLCJwYWdlIiwid2FpdFVudGlsIiwiZXZhbHVhdGUiLCJ3aW5kb3ciLCJibmhwQXBwIiwicmVzdENvbnRleHQiLCJzbGljZSIsImZldGNoUG9hbGltWFNSRldpdGhpblBhZ2UiLCJ1cmwiLCJwYWdlVXVpZCIsImNvb2tpZXMiLCJYU1JGQ29va2llIiwiZmluZCIsImNvb2tpZSIsIm5hbWUiLCJoZWFkZXJzIiwidmFsdWUiLCJ1dWlkIiwidXVpZDQiLCJmZXRjaFBvc3RXaXRoaW5QYWdlIiwiZ2V0RXh0cmFTY3JhcCIsInR4bnNSZXN1bHQiLCJiYXNlVXJsIiwiYWNjb3VudE51bWJlciIsInByb21pc2VzIiwidHJhbnNhY3Rpb25zIiwidHJhbnNhY3Rpb24iLCJwZm1EZXRhaWxzIiwiZXh0cmFUcmFuc2FjdGlvbkRldGFpbHMiLCJmZXRjaEdldFdpdGhpblBhZ2UiLCJ0cmFuc2FjdGlvbk51bWJlciIsInJlcyIsIlByb21pc2UiLCJhbGwiLCJnZXRBY2NvdW50VHJhbnNhY3Rpb25zIiwiYXBpU2l0ZVVybCIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJhZGRpdGlvbmFsVHJhbnNhY3Rpb25JbmZvcm1hdGlvbiIsInR4bnNVcmwiLCJmaW5hbFJlc3VsdCIsImdldEFjY291bnRCYWxhbmNlIiwiYmFsYW5jZUFuZENyZWRpdExpbWl0VXJsIiwiYmFsYW5jZUFuZENyZWRpdExpbWl0IiwiY3VycmVudEJhbGFuY2UiLCJnZXRGb3JleEFjY291bnRzIiwiYWNjb3VudHMiLCJjb2RlIiwic3dpZnQiLCJkZXRhaWxlZEFjY291bnRUeXBlQ29kZSIsImZvcmV4VXJsIiwiZm9yZXhEYXRhIiwiYmFsYW5jZXNBbmRMaW1pdHNEYXRhTGlzdCIsImN1cnJlbmN5RGF0YSIsImN1cnJlbmN5U3dpZnRDb2RlIiwidHJhbnNhY3Rpb25Db3VudCIsImJhbGFuY2UiLCJ0eG5EYXRlcyIsInQiLCJmb3JleEFjY291bnROdW1iZXIiLCJlcnJvciIsImdldFNhdmluZ3NBY2NvdW50cyIsInNhdmluZ3NVcmwiLCJzYXZpbmdzRGF0YSIsImRlcG9zaXRzV3JhcHBlckRhdGEiLCJ3cmFwcGVyIiwiZGVwb3NpdCIsImRhdGEiLCJyZXZhbHVlZFRvdGFsQW1vdW50IiwicHJpbmNpcGFsQW1vdW50Iiwic2F2aW5nc0FjY291bnROdW1iZXIiLCJkZXBvc2l0U2VyaWFsSWQiLCJzYXZpbmdzQWNjb3VudCIsImdldEludmVzdG1lbnRBY2NvdW50cyIsImFjY291bnQiLCJicmFuY2hOdW1iZXIiLCJjYXB0dXJlZFNlc3Npb24iLCJjYXB0dXJlZENzZXNzaW9uIiwicmVxdWVzdEhhbmRsZXIiLCJyZXF1ZXN0Iiwic2Vzc2lvbiIsImNzZXNzaW9uIiwiY29udGludWUiLCJjb250aW51ZUVycm9yIiwibXl0cmFkZVVybCIsInNldFJlcXVlc3RJbnRlcmNlcHRpb24iLCJvbiIsImdvdG8iLCJ0aW1lb3V0IiwicmVzb2x2ZSIsInNldFRpbWVvdXQiLCJuYXZFcnJvciIsIm9mZiIsImZpZWxkcyIsImludmVzdG1lbnRVcmwiLCJzZXNzaW9uSWQiLCJNYXRoIiwicmFuZG9tIiwiUmVmZXJlciIsInN1YnN0cmluZyIsImludmVzdG1lbnREYXRhIiwiVmlldyIsIkFjY291bnQiLCJhY2NvdW50RGF0YSIsIk9ubGluZVZhbHVlIiwiQ3VycmVuY3lDb2RlIiwic2VjdXJpdGllcyIsImJhbGFuY2VzIiwiQWNjb3VudFBvc2l0aW9uIiwiQmFsYW5jZSIsIm1ldGFTZWN1cml0aWVzIiwiTWV0YSIsIlNlY3VyaXR5IiwibWV0YU1hcCIsIk1hcCIsIm1ldGEiLCJzZXQiLCJzZWN1cml0eUJhbGFuY2UiLCJnZXQiLCJFcXVpdHlOdW1iZXIiLCJFbmdOYW1lIiwic3ltYm9sIiwiRW5nU3ltYm9sIiwidm9sdW1lIiwiT25saW5lTlYiLCJPbmxpbmVWTCIsImNoYW5nZVBlcmNlbnRhZ2UiLCJCYXNlUmF0ZUNoYW5nZVBlcmNlbnRhZ2UiLCJwcm9maXRMb3NzIiwiUHJvZml0TG9zcyIsImludmVzdG1lbnRBY2NvdW50TnVtYmVyIiwiYmFua051bWJlciIsIkVycm9yIiwibWVzc2FnZSIsInN0YWNrIiwiaG9tZXBhZ2VVcmwiLCJmZXRjaEFjY291bnREYXRhIiwib3B0aW9ucyIsImFjY291bnREYXRhVXJsIiwiYWNjb3VudHNJbmZvIiwiZGVmYXVsdFN0YXJ0TW9tZW50Iiwic3VidHJhY3QiLCJhZGQiLCJ0b0RhdGUiLCJzdGFydE1vbWVudCIsIm1heCIsInN0YXJ0RGF0ZVN0ciIsImZvcm1hdCIsImVuZERhdGVTdHIiLCJpc0FjdGl2ZUFjY291bnQiLCJhY2NvdW50Q2xvc2luZ1JlYXNvbkNvZGUiLCJmb3JleEFjY291bnRzIiwic2F2aW5nc0FjY291bnRzIiwiaW52ZXN0bWVudEFjY291bnRzIiwic3VjY2VzcyIsImdldFBvc3NpYmxlTG9naW5SZXN1bHRzIiwidXJscyIsIkxvZ2luUmVzdWx0cyIsIlN1Y2Nlc3MiLCJJbnZhbGlkUGFzc3dvcmQiLCJDaGFuZ2VQYXNzd29yZCIsImNyZWF0ZUxvZ2luRmllbGRzIiwiY3JlZGVudGlhbHMiLCJzZWxlY3RvciIsInVzZXJDb2RlIiwicGFzc3dvcmQiLCJIYXBvYWxpbVNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiZ2V0TG9naW5PcHRpb25zIiwibG9naW5VcmwiLCJzdWJtaXRCdXR0b25TZWxlY3RvciIsInBvc3RBY3Rpb24iLCJ3YWl0Rm9yUmVkaXJlY3QiLCJwb3NzaWJsZVJlc3VsdHMiLCJmZXRjaERhdGEiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyYXBlcnMvaGFwb2FsaW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgdHlwZSBQYWdlIH0gZnJvbSAncHVwcGV0ZWVyJztcbmltcG9ydCB7IHY0IGFzIHV1aWQ0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBTSEVLRUxfQ1VSUkVOQ1kgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0RGVidWcgfSBmcm9tICcuLi9oZWxwZXJzL2RlYnVnJztcbmltcG9ydCB7IGZldGNoR2V0V2l0aGluUGFnZSwgZmV0Y2hQb3N0V2l0aGluUGFnZSB9IGZyb20gJy4uL2hlbHBlcnMvZmV0Y2gnO1xuaW1wb3J0IHsgd2FpdEZvclJlZGlyZWN0IH0gZnJvbSAnLi4vaGVscGVycy9uYXZpZ2F0aW9uJztcbmltcG9ydCB7IHdhaXRVbnRpbCB9IGZyb20gJy4uL2hlbHBlcnMvd2FpdGluZyc7XG5pbXBvcnQge1xuICB0eXBlIFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvblN0YXR1c2VzLFxuICBUcmFuc2FjdGlvblR5cGVzLFxuICB0eXBlIFRyYW5zYWN0aW9uc0FjY291bnQsXG4gIHR5cGUgU2VjdXJpdHksXG59IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBCYXNlU2NyYXBlcldpdGhCcm93c2VyLCBMb2dpblJlc3VsdHMsIHR5cGUgUG9zc2libGVMb2dpblJlc3VsdHMgfSBmcm9tICcuL2Jhc2Utc2NyYXBlci13aXRoLWJyb3dzZXInO1xuaW1wb3J0IHsgdHlwZSBTY3JhcGVyT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlJztcblxuY29uc3QgZGVidWcgPSBnZXREZWJ1ZygnaGFwb2FsaW0nKTtcblxuY29uc3QgREFURV9GT1JNQVQgPSAnWVlZWU1NREQnO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZVxuZGVjbGFyZSBuYW1lc3BhY2Ugd2luZG93IHtcbiAgY29uc3QgYm5ocEFwcDogYW55O1xufVxuXG5pbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uIHtcbiAgc2VyaWFsTnVtYmVyPzogbnVtYmVyO1xuICBhY3Rpdml0eURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudEFtb3VudDogbnVtYmVyO1xuICB2YWx1ZURhdGU/OiBzdHJpbmc7XG4gIGV2ZW50RGF0ZT86IHN0cmluZztcbiAgcmVmZXJlbmNlTnVtYmVyPzogbnVtYmVyO1xuICBTY3JhcGVkVHJhbnNhY3Rpb24/OiBzdHJpbmc7XG4gIGV2ZW50QWN0aXZpdHlUeXBlQ29kZTogbnVtYmVyO1xuICBjdXJyZW50QmFsYW5jZTogbnVtYmVyO1xuICBwZm1EZXRhaWxzOiBzdHJpbmc7XG4gIGJlbmVmaWNpYXJ5RGV0YWlsc0RhdGE/OiB7XG4gICAgcGFydHlIZWFkbGluZT86IHN0cmluZztcbiAgICBwYXJ0eU5hbWU/OiBzdHJpbmc7XG4gICAgbWVzc2FnZUhlYWRsaW5lPzogc3RyaW5nO1xuICAgIG1lc3NhZ2VEZXRhaWw/OiBzdHJpbmc7XG4gIH07XG59XG5cbmludGVyZmFjZSBTY3JhcGVkUGZtVHJhbnNhY3Rpb24ge1xuICB0cmFuc2FjdGlvbk51bWJlcjogbnVtYmVyO1xufVxuXG50eXBlIEZldGNoZWRBY2NvdW50RGF0YSA9IHtcbiAgYmFua051bWJlcjogc3RyaW5nO1xuICBhY2NvdW50TnVtYmVyOiBzdHJpbmc7XG4gIGJyYW5jaE51bWJlcjogc3RyaW5nO1xuICBhY2NvdW50Q2xvc2luZ1JlYXNvbkNvZGU6IG51bWJlcjtcbn1bXTtcblxudHlwZSBGZXRjaGVkQWNjb3VudFRyYW5zYWN0aW9uc0RhdGEgPSB7XG4gIHRyYW5zYWN0aW9uczogU2NyYXBlZFRyYW5zYWN0aW9uW107XG59O1xuXG50eXBlIEJhbGFuY2VBbmRDcmVkaXRMaW1pdCA9IHtcbiAgY3JlZGl0TGltaXRBbW91bnQ6IG51bWJlcjtcbiAgY3JlZGl0TGltaXREZXNjcmlwdGlvbjogc3RyaW5nO1xuICBjcmVkaXRMaW1pdFV0aWxpemF0aW9uQW1vdW50OiBudW1iZXI7XG4gIGNyZWRpdExpbWl0VXRpbGl6YXRpb25FeGlzdGFuY2VDb2RlOiBudW1iZXI7XG4gIGNyZWRpdExpbWl0VXRpbGl6YXRpb25QZXJjZW50OiBudW1iZXI7XG4gIGN1cnJlbnRBY2NvdW50TGltaXRzQW1vdW50OiBudW1iZXI7XG4gIGN1cnJlbnRCYWxhbmNlOiBudW1iZXI7XG4gIHdpdGhkcmF3YWxCYWxhbmNlOiBudW1iZXI7XG59O1xuXG5pbnRlcmZhY2UgRm9yZXhUcmFuc2FjdGlvbiB7XG4gIGV4ZWN1dGluZ0RhdGU6IG51bWJlcjtcbiAgdmFsdWVEYXRlOiBudW1iZXI7XG4gIGFjdGl2aXR5RGVzY3JpcHRpb246IHN0cmluZztcbiAgZXZlbnRBbW91bnQ6IG51bWJlcjtcbiAgY3VycmVudEJhbGFuY2U6IG51bWJlcjtcbiAgcmVmZXJlbmNlTnVtYmVyPzogbnVtYmVyO1xuICBldmVudERldGFpbHM/OiBzdHJpbmc7XG4gIGV2ZW50QWN0aXZpdHlUeXBlQ29kZTogbnVtYmVyO1xuICBjdXJyZW5jeVN3aWZ0Q29kZTogc3RyaW5nO1xuICByZWNvcmRTZXJpYWxOdW1iZXI/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBGb3JleEN1cnJlbmN5RGF0YSB7XG4gIGN1cnJlbmN5Q29kZTogbnVtYmVyO1xuICBjdXJyZW5jeVN3aWZ0Q29kZTogc3RyaW5nO1xuICBjdXJyZW5jeVN3aWZ0RGVzY3JpcHRpb246IHN0cmluZztcbiAgY3VycmVudEJhbGFuY2U6IG51bWJlcjtcbiAgdHJhbnNhY3Rpb25zOiBGb3JleFRyYW5zYWN0aW9uW107XG4gIGRldGFpbGVkQWNjb3VudFR5cGVDb2RlOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBGb3JleEFjY291bnREYXRhIHtcbiAgYmFsYW5jZXNBbmRMaW1pdHNEYXRhTGlzdDogRm9yZXhDdXJyZW5jeURhdGFbXTtcbn1cblxuaW50ZXJmYWNlIFNhdmluZ3NEZXBvc2l0IHtcbiAgcHJpbmNpcGFsQW1vdW50OiBudW1iZXI7XG4gIHJldmFsdWVkVG90YWxBbW91bnQ6IG51bWJlcjtcbiAgZGVwb3NpdFNlcmlhbElkOiBudW1iZXI7XG4gIHByb2R1Y3RGcmVlVGV4dD86IHN0cmluZztcbiAgc2hvcnRQcm9kdWN0TmFtZT86IHN0cmluZztcbiAgZm9ybWF0dGVkQWdyZWVtZW50T3BlbmluZ0RhdGU/OiBzdHJpbmc7XG4gIGZvcm1hdHRlZEVuZEV4aXREYXRlPzogc3RyaW5nO1xuICBub21pbmFsSW50ZXJlc3Q/OiBudW1iZXI7XG4gIGRldGFpbGVkQWNjb3VudFR5cGVDb2RlOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTYXZpbmdzV3JhcHBlciB7XG4gIGRhdGE6IFNhdmluZ3NEZXBvc2l0W107XG4gIGFtb3VudDogbnVtYmVyO1xuICByZXZhbHVhdGVkQW1vdW50OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTYXZpbmdzQWNjb3VudERhdGEge1xuICBkZXBvc2l0c1dyYXBwZXJEYXRhOiBTYXZpbmdzV3JhcHBlcltdO1xufVxuXG5pbnRlcmZhY2UgSW52ZXN0bWVudFNlY3VyaXR5QmFsYW5jZSB7XG4gIEVxdWl0eU51bWJlcjogc3RyaW5nO1xuICBCYXNlUmF0ZT86IG51bWJlcjtcbiAgTGFzdFJhdGU/OiBudW1iZXI7XG4gIEJhc2VSYXRlQ2hhbmdlUGVyY2VudGFnZT86IG51bWJlcjtcbiAgT25saW5lTlY6IG51bWJlcjtcbiAgT25saW5lVkw6IG51bWJlcjtcbiAgT25saW5lTmlzVkw/OiBudW1iZXI7XG4gIFByb2ZpdExvc3M/OiBudW1iZXI7XG4gIEN1cnJlbmN5Q29kZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEludmVzdG1lbnRTZWN1cml0eU1ldGEge1xuICAnLUtleSc6IHN0cmluZztcbiAgRW5nTmFtZT86IHN0cmluZztcbiAgRW5nU3ltYm9sPzogc3RyaW5nO1xuICBIZWJOYW1lPzogc3RyaW5nO1xuICBIZWJTeW1ib2w/OiBzdHJpbmc7XG4gIFN5bWJvbD86IHN0cmluZztcbiAgSXRlbVR5cGU/OiBzdHJpbmc7XG4gIFN0b2NrVHlwZT86IHN0cmluZztcbiAgSXNGb3JlaWduPzogYm9vbGVhbjtcbiAgQ3VycmVuY3lDb2RlPzogc3RyaW5nO1xuICBFeGNoYW5nZT86IHN0cmluZztcbiAgRXF1aXR5VHlwZT86IG51bWJlcjtcbiAgRXF1aXR5U3ViVHlwZT86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEludmVzdG1lbnRBY2NvdW50RGF0YSB7XG4gIFZpZXc/OiB7XG4gICAgQWNjb3VudD86IHtcbiAgICAgIE9ubGluZVZhbHVlPzogbnVtYmVyO1xuICAgICAgT25saW5lQ2FzaD86IG51bWJlcjtcbiAgICAgIEN1cnJlbmN5Q29kZT86IHN0cmluZztcbiAgICAgIEFjY291bnRQb3NpdGlvbj86IHtcbiAgICAgICAgQmFsYW5jZT86IEludmVzdG1lbnRTZWN1cml0eUJhbGFuY2VbXTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBNZXRhPzoge1xuICAgICAgU2VjdXJpdHk/OiBJbnZlc3RtZW50U2VjdXJpdHlNZXRhW107XG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydFRyYW5zYWN0aW9ucyh0eG5zOiBTY3JhcGVkVHJhbnNhY3Rpb25bXSk6IFRyYW5zYWN0aW9uW10ge1xuICByZXR1cm4gdHhucy5tYXAodHhuID0+IHtcbiAgICBjb25zdCBpc091dGJvdW5kID0gdHhuLmV2ZW50QWN0aXZpdHlUeXBlQ29kZSA9PT0gMjtcblxuICAgIGxldCBtZW1vID0gJyc7XG4gICAgaWYgKHR4bi5iZW5lZmljaWFyeURldGFpbHNEYXRhKSB7XG4gICAgICBjb25zdCB7IHBhcnR5SGVhZGxpbmUsIHBhcnR5TmFtZSwgbWVzc2FnZUhlYWRsaW5lLCBtZXNzYWdlRGV0YWlsIH0gPSB0eG4uYmVuZWZpY2lhcnlEZXRhaWxzRGF0YTtcbiAgICAgIGNvbnN0IG1lbW9MaW5lczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmIChwYXJ0eUhlYWRsaW5lKSB7XG4gICAgICAgIG1lbW9MaW5lcy5wdXNoKHBhcnR5SGVhZGxpbmUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFydHlOYW1lKSB7XG4gICAgICAgIG1lbW9MaW5lcy5wdXNoKGAke3BhcnR5TmFtZX0uYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXNzYWdlSGVhZGxpbmUpIHtcbiAgICAgICAgbWVtb0xpbmVzLnB1c2gobWVzc2FnZUhlYWRsaW5lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lc3NhZ2VEZXRhaWwpIHtcbiAgICAgICAgbWVtb0xpbmVzLnB1c2goYCR7bWVzc2FnZURldGFpbH0uYCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZW1vTGluZXMubGVuZ3RoKSB7XG4gICAgICAgIG1lbW8gPSBtZW1vTGluZXMuam9pbignICcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogVHJhbnNhY3Rpb24gPSB7XG4gICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGVzLk5vcm1hbCxcbiAgICAgIGlkZW50aWZpZXI6IHR4bi5yZWZlcmVuY2VOdW1iZXIsXG4gICAgICBkYXRlOiBtb21lbnQodHhuLmV2ZW50RGF0ZSwgREFURV9GT1JNQVQpLnRvSVNPU3RyaW5nKCksXG4gICAgICBwcm9jZXNzZWREYXRlOiBtb21lbnQodHhuLnZhbHVlRGF0ZSwgREFURV9GT1JNQVQpLnRvSVNPU3RyaW5nKCksXG4gICAgICBvcmlnaW5hbEFtb3VudDogaXNPdXRib3VuZCA/IC10eG4uZXZlbnRBbW91bnQgOiB0eG4uZXZlbnRBbW91bnQsXG4gICAgICBvcmlnaW5hbEN1cnJlbmN5OiBTSEVLRUxfQ1VSUkVOQ1ksXG4gICAgICBjaGFyZ2VkQW1vdW50OiBpc091dGJvdW5kID8gLXR4bi5ldmVudEFtb3VudCA6IHR4bi5ldmVudEFtb3VudCxcbiAgICAgIGRlc2NyaXB0aW9uOiB0eG4uYWN0aXZpdHlEZXNjcmlwdGlvbiB8fCAnJyxcbiAgICAgIHN0YXR1czogdHhuLnNlcmlhbE51bWJlciA9PT0gMCA/IFRyYW5zYWN0aW9uU3RhdHVzZXMuUGVuZGluZyA6IFRyYW5zYWN0aW9uU3RhdHVzZXMuQ29tcGxldGVkLFxuICAgICAgbWVtbyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRGb3JleFRyYW5zYWN0aW9ucyh0eG5zOiBGb3JleFRyYW5zYWN0aW9uW10sIGN1cnJlbmN5OiBzdHJpbmcpOiBUcmFuc2FjdGlvbltdIHtcbiAgcmV0dXJuIHR4bnMubWFwKHR4biA9PiB7XG4gICAgY29uc3QgaXNPdXRib3VuZCA9IHR4bi5ldmVudEFjdGl2aXR5VHlwZUNvZGUgPT09IDI7XG4gICAgY29uc3QgZGF0ZVN0ciA9IHR4bi5leGVjdXRpbmdEYXRlLnRvU3RyaW5nKCk7IC8vIERhdGUgdHJhbnNhY3Rpb24gd2FzIGV4ZWN1dGVkXG4gICAgY29uc3QgdmFsdWVEYXRlU3RyID0gdHhuLnZhbHVlRGF0ZS50b1N0cmluZygpOyAvLyBEYXRlIHZhbHVlIHdhcyBhY3R1YWxseSBhZGRlZCB0byBhY2NvdW50XG5cbiAgICBsZXQgbWVtbyA9ICcnO1xuICAgIGlmICh0eG4uZXZlbnREZXRhaWxzKSB7XG4gICAgICBtZW1vID0gdHhuLmV2ZW50RGV0YWlscztcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IFRyYW5zYWN0aW9uID0ge1xuICAgICAgdHlwZTogVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWwsXG4gICAgICBpZGVudGlmaWVyOiB0eG4ucmVmZXJlbmNlTnVtYmVyIHx8IHR4bi5yZWNvcmRTZXJpYWxOdW1iZXIsXG4gICAgICBkYXRlOiBtb21lbnQodmFsdWVEYXRlU3RyLCBEQVRFX0ZPUk1BVCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHByb2Nlc3NlZERhdGU6IG1vbWVudChkYXRlU3RyLCBEQVRFX0ZPUk1BVCkudG9JU09TdHJpbmcoKSxcbiAgICAgIG9yaWdpbmFsQW1vdW50OiBpc091dGJvdW5kID8gLXR4bi5ldmVudEFtb3VudCA6IHR4bi5ldmVudEFtb3VudCxcbiAgICAgIG9yaWdpbmFsQ3VycmVuY3k6IGN1cnJlbmN5LFxuICAgICAgY2hhcmdlZEFtb3VudDogaXNPdXRib3VuZCA/IC10eG4uZXZlbnRBbW91bnQgOiB0eG4uZXZlbnRBbW91bnQsXG4gICAgICBkZXNjcmlwdGlvbjogdHhuLmFjdGl2aXR5RGVzY3JpcHRpb24gfHwgJycsXG4gICAgICBzdGF0dXM6IFRyYW5zYWN0aW9uU3RhdHVzZXMuQ29tcGxldGVkLFxuICAgICAgbWVtbyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3RDb250ZXh0KHBhZ2U6IFBhZ2UpIHtcbiAgYXdhaXQgd2FpdFVudGlsKCgpID0+IHtcbiAgICByZXR1cm4gcGFnZS5ldmFsdWF0ZSgoKSA9PiAhIXdpbmRvdy5ibmhwQXBwKTtcbiAgfSwgJ3dhaXRpbmcgZm9yIGFwcCBkYXRhIGxvYWQnKTtcblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYWdlLmV2YWx1YXRlKCgpID0+IHtcbiAgICByZXR1cm4gd2luZG93LmJuaHBBcHAucmVzdENvbnRleHQ7XG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQuc2xpY2UoMSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoUG9hbGltWFNSRldpdGhpblBhZ2UoXG4gIHBhZ2U6IFBhZ2UsXG4gIHVybDogc3RyaW5nLFxuICBwYWdlVXVpZDogc3RyaW5nLFxuKTogUHJvbWlzZTxGZXRjaGVkQWNjb3VudFRyYW5zYWN0aW9uc0RhdGEgfCBudWxsPiB7XG4gIGNvbnN0IGNvb2tpZXMgPSBhd2FpdCBwYWdlLmNvb2tpZXMoKTtcbiAgY29uc3QgWFNSRkNvb2tpZSA9IGNvb2tpZXMuZmluZChjb29raWUgPT4gY29va2llLm5hbWUgPT09ICdYU1JGLVRPS0VOJyk7XG4gIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgaWYgKFhTUkZDb29raWUgIT0gbnVsbCkge1xuICAgIGhlYWRlcnNbJ1gtWFNSRi1UT0tFTiddID0gWFNSRkNvb2tpZS52YWx1ZTtcbiAgfVxuICBoZWFkZXJzLnBhZ2VVdWlkID0gcGFnZVV1aWQ7XG4gIGhlYWRlcnMudXVpZCA9IHV1aWQ0KCk7XG4gIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD1VVEYtOCc7XG4gIHJldHVybiBmZXRjaFBvc3RXaXRoaW5QYWdlPEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YT4ocGFnZSwgdXJsLCBbXSwgaGVhZGVycyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEV4dHJhU2NyYXAoXG4gIHR4bnNSZXN1bHQ6IEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YSxcbiAgYmFzZVVybDogc3RyaW5nLFxuICBwYWdlOiBQYWdlLFxuICBhY2NvdW50TnVtYmVyOiBzdHJpbmcsXG4pOiBQcm9taXNlPEZldGNoZWRBY2NvdW50VHJhbnNhY3Rpb25zRGF0YT4ge1xuICBjb25zdCBwcm9taXNlcyA9IHR4bnNSZXN1bHQudHJhbnNhY3Rpb25zLm1hcChhc3luYyAodHJhbnNhY3Rpb246IFNjcmFwZWRUcmFuc2FjdGlvbik6IFByb21pc2U8U2NyYXBlZFRyYW5zYWN0aW9uPiA9PiB7XG4gICAgY29uc3QgeyBwZm1EZXRhaWxzLCBzZXJpYWxOdW1iZXIgfSA9IHRyYW5zYWN0aW9uO1xuICAgIGlmIChzZXJpYWxOdW1iZXIgIT09IDApIHtcbiAgICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9JHtwZm1EZXRhaWxzfSZhY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZsYW5nPWhlYDtcbiAgICAgIGNvbnN0IGV4dHJhVHJhbnNhY3Rpb25EZXRhaWxzID0gKGF3YWl0IGZldGNoR2V0V2l0aGluUGFnZTxTY3JhcGVkUGZtVHJhbnNhY3Rpb25bXT4ocGFnZSwgdXJsKSkgfHwgW107XG4gICAgICBpZiAoZXh0cmFUcmFuc2FjdGlvbkRldGFpbHMgJiYgZXh0cmFUcmFuc2FjdGlvbkRldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHsgdHJhbnNhY3Rpb25OdW1iZXIgfSA9IGV4dHJhVHJhbnNhY3Rpb25EZXRhaWxzWzBdO1xuICAgICAgICBpZiAodHJhbnNhY3Rpb25OdW1iZXIpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi50cmFuc2FjdGlvbiwgcmVmZXJlbmNlTnVtYmVyOiB0cmFuc2FjdGlvbk51bWJlciB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgfSk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgcmV0dXJuIHsgdHJhbnNhY3Rpb25zOiByZXMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0QWNjb3VudFRyYW5zYWN0aW9ucyhcbiAgYmFzZVVybDogc3RyaW5nLFxuICBhcGlTaXRlVXJsOiBzdHJpbmcsXG4gIHBhZ2U6IFBhZ2UsXG4gIGFjY291bnROdW1iZXI6IHN0cmluZyxcbiAgc3RhcnREYXRlOiBzdHJpbmcsXG4gIGVuZERhdGU6IHN0cmluZyxcbiAgYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24gPSBmYWxzZSxcbikge1xuICBjb25zdCB0eG5zVXJsID0gYCR7YXBpU2l0ZVVybH0vY3VycmVudC1hY2NvdW50L3RyYW5zYWN0aW9ucz9hY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZudW1JdGVtc1BlclBhZ2U9MTAwMCZyZXRyaWV2YWxFbmREYXRlPSR7ZW5kRGF0ZX0mcmV0cmlldmFsU3RhcnREYXRlPSR7c3RhcnREYXRlfSZzb3J0Q29kZT0xYDtcbiAgY29uc3QgdHhuc1Jlc3VsdCA9IGF3YWl0IGZldGNoUG9hbGltWFNSRldpdGhpblBhZ2UocGFnZSwgdHhuc1VybCwgJy9jdXJyZW50LWFjY291bnQvdHJhbnNhY3Rpb25zJyk7XG5cbiAgY29uc3QgZmluYWxSZXN1bHQgPVxuICAgIGFkZGl0aW9uYWxUcmFuc2FjdGlvbkluZm9ybWF0aW9uICYmIHR4bnNSZXN1bHQ/LnRyYW5zYWN0aW9ucy5sZW5ndGhcbiAgICAgID8gYXdhaXQgZ2V0RXh0cmFTY3JhcCh0eG5zUmVzdWx0LCBiYXNlVXJsLCBwYWdlLCBhY2NvdW50TnVtYmVyKVxuICAgICAgOiB0eG5zUmVzdWx0O1xuXG4gIHJldHVybiBjb252ZXJ0VHJhbnNhY3Rpb25zKGZpbmFsUmVzdWx0Py50cmFuc2FjdGlvbnMgPz8gW10pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBY2NvdW50QmFsYW5jZShhcGlTaXRlVXJsOiBzdHJpbmcsIHBhZ2U6IFBhZ2UsIGFjY291bnROdW1iZXI6IHN0cmluZykge1xuICBjb25zdCBiYWxhbmNlQW5kQ3JlZGl0TGltaXRVcmwgPSBgJHthcGlTaXRlVXJsfS9jdXJyZW50LWFjY291bnQvY29tcG9zaXRlL2JhbGFuY2VBbmRDcmVkaXRMaW1pdD9hY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZ2aWV3PWRldGFpbHMmbGFuZz1oZWA7XG4gIGNvbnN0IGJhbGFuY2VBbmRDcmVkaXRMaW1pdCA9IGF3YWl0IGZldGNoR2V0V2l0aGluUGFnZTxCYWxhbmNlQW5kQ3JlZGl0TGltaXQ+KHBhZ2UsIGJhbGFuY2VBbmRDcmVkaXRMaW1pdFVybCk7XG5cbiAgcmV0dXJuIGJhbGFuY2VBbmRDcmVkaXRMaW1pdD8uY3VycmVudEJhbGFuY2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEZvcmV4QWNjb3VudHMoXG4gIGJhc2VVcmw6IHN0cmluZyxcbiAgcGFnZTogUGFnZSxcbiAgYWNjb3VudE51bWJlcjogc3RyaW5nLFxuICBzdGFydERhdGU6IHN0cmluZyxcbiAgZW5kRGF0ZTogc3RyaW5nLFxuKTogUHJvbWlzZTxUcmFuc2FjdGlvbnNBY2NvdW50W10+IHtcbiAgZGVidWcoJz09PT09PT09PT0gRkVUQ0hJTkcgRk9SRVggQUNDT1VOVFMgPT09PT09PT09PScpO1xuICBkZWJ1ZygnQWNjb3VudDogJXMsIERhdGUgcmFuZ2U6ICVzIHRvICVzJywgYWNjb3VudE51bWJlciwgc3RhcnREYXRlLCBlbmREYXRlKTtcblxuICBjb25zdCBhY2NvdW50czogVHJhbnNhY3Rpb25zQWNjb3VudFtdID0gW107XG5cbiAgY29uc3QgY3VycmVuY3kgPSB7IGNvZGU6IDE5LCBzd2lmdDogU0hFS0VMX0NVUlJFTkNZIH07XG4gIHRyeSB7XG4gICAgY29uc3QgZGV0YWlsZWRBY2NvdW50VHlwZUNvZGUgPSAxNDI7IC8vIEZvciBmb3JlaWduIGN1cnJlbmN5IGFjY291bnRzXG4gICAgY29uc3QgZm9yZXhVcmwgPSBgJHtiYXNlVXJsfS9TZXJ2ZXJTZXJ2aWNlcy9mb3JlaWduLWN1cnJlbmN5L3RyYW5zYWN0aW9ucz9hY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZ0eXBlPWJ1c2luZXNzJnJldHJpZXZhbFN0YXJ0RGF0ZT0ke3N0YXJ0RGF0ZX0mcmV0cmlldmFsRW5kRGF0ZT0ke2VuZERhdGV9JmN1cnJlbmN5Q29kZUxpc3Q9JHtjdXJyZW5jeS5jb2RlfSZkZXRhaWxlZEFjY291bnRUeXBlQ29kZUxpc3Q9JHtkZXRhaWxlZEFjY291bnRUeXBlQ29kZX0mdmlldz1kZXRhaWxzJmxhbmc9aGVgO1xuICAgIGRlYnVnKCdUcnlpbmcgZm9yZXggJXMnLCBmb3JleFVybCk7XG5cbiAgICBjb25zdCBmb3JleERhdGEgPSBhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8Rm9yZXhBY2NvdW50RGF0YT4ocGFnZSwgZm9yZXhVcmwsIHRydWUpOyAvLyBpZ25vcmVFcnJvcnMgPSB0cnVlXG5cbiAgICBpZiAoZm9yZXhEYXRhICYmIGZvcmV4RGF0YS5iYWxhbmNlc0FuZExpbWl0c0RhdGFMaXN0ICYmIGZvcmV4RGF0YS5iYWxhbmNlc0FuZExpbWl0c0RhdGFMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGRlYnVnKCfinJMgRm91bmQgZm9yZXggZGF0YScpO1xuXG4gICAgICBmb3IgKGNvbnN0IGN1cnJlbmN5RGF0YSBvZiBmb3JleERhdGEuYmFsYW5jZXNBbmRMaW1pdHNEYXRhTGlzdCkge1xuICAgICAgICBjb25zdCBjdXJyZW5jeVN3aWZ0Q29kZSA9IGN1cnJlbmN5RGF0YS5jdXJyZW5jeVN3aWZ0Q29kZSB8fCBjdXJyZW5jeS5zd2lmdDtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25Db3VudCA9IGN1cnJlbmN5RGF0YS50cmFuc2FjdGlvbnM/Lmxlbmd0aCB8fCAwO1xuXG4gICAgICAgIC8vIEdldCBiYWxhbmNlIGZyb20gdGhlIG1vc3QgcmVjZW50IHRyYW5zYWN0aW9uJ3MgY3VycmVudEJhbGFuY2UgZmllbGRcbiAgICAgICAgLy8gSWYgbm8gdHJhbnNhY3Rpb25zLCBmYWxsIGJhY2sgdG8gY3VycmVuY3lEYXRhLmN1cnJlbnRCYWxhbmNlXG4gICAgICAgIGxldCBiYWxhbmNlID0gY3VycmVuY3lEYXRhLmN1cnJlbnRCYWxhbmNlO1xuICAgICAgICBpZiAodHJhbnNhY3Rpb25Db3VudCA+IDAgJiYgY3VycmVuY3lEYXRhLnRyYW5zYWN0aW9ucykge1xuICAgICAgICAgIGJhbGFuY2UgPSBjdXJyZW5jeURhdGEudHJhbnNhY3Rpb25zWzBdLmN1cnJlbnRCYWxhbmNlO1xuICAgICAgICAgIGRlYnVnKCcgIC0gVXNpbmcgYmFsYW5jZSBmcm9tIG1vc3QgcmVjZW50IHRyYW5zYWN0aW9uOiAlcycsIGJhbGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVidWcoJyAgLSBDdXJyZW5jeTogJXMsIEJhbGFuY2U6ICVzLCBUcmFuc2FjdGlvbnM6ICVkJywgY3VycmVuY3lTd2lmdENvZGUsIGJhbGFuY2UsIHRyYW5zYWN0aW9uQ291bnQpO1xuXG4gICAgICAgIC8vIExvZyB0cmFuc2FjdGlvbiBkYXRlcyBmb3IgZGVidWdnaW5nXG4gICAgICAgIGlmICh0cmFuc2FjdGlvbkNvdW50ID4gMCkge1xuICAgICAgICAgIGNvbnN0IHR4bkRhdGVzID0gY3VycmVuY3lEYXRhLnRyYW5zYWN0aW9ucz8ubWFwKHQgPT4gdC5leGVjdXRpbmdEYXRlKS5qb2luKCcsICcpIHx8ICcnO1xuICAgICAgICAgIGRlYnVnKCcgICAgVHJhbnNhY3Rpb24gZGF0ZXM6ICVzJywgdHhuRGF0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBhZGQgaWYgdGhlcmUncyBhY3R1YWxseSBhIGJhbGFuY2Ugb3IgdHJhbnNhY3Rpb25zXG4gICAgICAgIGlmIChiYWxhbmNlICE9PSAwIHx8IHRyYW5zYWN0aW9uQ291bnQgPiAwKSB7XG4gICAgICAgICAgY29uc3QgdHhucyA9IGNvbnZlcnRGb3JleFRyYW5zYWN0aW9ucyhjdXJyZW5jeURhdGEudHJhbnNhY3Rpb25zIHx8IFtdLCBjdXJyZW5jeVN3aWZ0Q29kZSk7XG4gICAgICAgICAgY29uc3QgZm9yZXhBY2NvdW50TnVtYmVyID0gYCR7YWNjb3VudE51bWJlcn0tJHtjdXJyZW5jeVN3aWZ0Q29kZX1gO1xuXG4gICAgICAgICAgYWNjb3VudHMucHVzaCh7XG4gICAgICAgICAgICBhY2NvdW50TnVtYmVyOiBmb3JleEFjY291bnROdW1iZXIsXG4gICAgICAgICAgICBiYWxhbmNlLFxuICAgICAgICAgICAgY3VycmVuY3k6IGN1cnJlbmN5U3dpZnRDb2RlLFxuICAgICAgICAgICAgdHhucyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGRlYnVnKCcgIOKckyBBZGRlZCBmb3JleCBhY2NvdW50OiAlcyB3aXRoICVkIHRyYW5zYWN0aW9ucycsIGZvcmV4QWNjb3VudE51bWJlciwgdHhucy5sZW5ndGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlYnVnKCcgIC0gU2tpcHBpbmcgJXMgKHplcm8gYmFsYW5jZSBhbmQgbm8gdHJhbnNhY3Rpb25zKScsIGN1cnJlbmN5U3dpZnRDb2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1ZygnICAtIE5vIGZvcmV4IGRhdGEgZm91bmQnKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZGVidWcoJyAgLSBFcnJvciBmZXRjaGluZyBmb3JleDogJXMnLCBlcnJvcik7XG4gICAgLy8gQ29udGludWUgdHJ5aW5nIG90aGVyIGN1cnJlbmNpZXNcbiAgfVxuXG4gIGRlYnVnKCdSZXR1cm5pbmcgJWQgZm9yZXggYWNjb3VudHMnLCBhY2NvdW50cy5sZW5ndGgpO1xuICByZXR1cm4gYWNjb3VudHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNhdmluZ3NBY2NvdW50cyhiYXNlVXJsOiBzdHJpbmcsIHBhZ2U6IFBhZ2UsIGFjY291bnROdW1iZXI6IHN0cmluZyk6IFByb21pc2U8VHJhbnNhY3Rpb25zQWNjb3VudFtdPiB7XG4gIGNvbnN0IHNhdmluZ3NVcmwgPSBgJHtiYXNlVXJsfS9TZXJ2ZXJTZXJ2aWNlcy9kZXBvc2l0cy1hbmQtc2F2aW5ncy9kZXBvc2l0cz9hY2NvdW50SWQ9JHthY2NvdW50TnVtYmVyfSZ2aWV3PWRldGFpbHMmbGFuZz1oZWA7XG4gIGNvbnN0IHNhdmluZ3NEYXRhID0gYXdhaXQgZmV0Y2hHZXRXaXRoaW5QYWdlPFNhdmluZ3NBY2NvdW50RGF0YT4ocGFnZSwgc2F2aW5nc1VybCk7XG5cbiAgaWYgKCFzYXZpbmdzRGF0YSB8fCAhc2F2aW5nc0RhdGEuZGVwb3NpdHNXcmFwcGVyRGF0YSB8fCBzYXZpbmdzRGF0YS5kZXBvc2l0c1dyYXBwZXJEYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIGRlYnVnKCdObyBzYXZpbmdzIGFjY291bnRzIGZvdW5kIGZvciBhY2NvdW50ICVzJywgYWNjb3VudE51bWJlcik7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgYWNjb3VudHM6IFRyYW5zYWN0aW9uc0FjY291bnRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qgd3JhcHBlciBvZiBzYXZpbmdzRGF0YS5kZXBvc2l0c1dyYXBwZXJEYXRhKSB7XG4gICAgLy8gQ3JlYXRlIGEgc2VwYXJhdGUgYWNjb3VudCBmb3IgZWFjaCBpbmRpdmlkdWFsIGRlcG9zaXRcbiAgICBmb3IgKGNvbnN0IGRlcG9zaXQgb2Ygd3JhcHBlci5kYXRhKSB7XG4gICAgICBjb25zdCBiYWxhbmNlID0gZGVwb3NpdC5yZXZhbHVlZFRvdGFsQW1vdW50IHx8IGRlcG9zaXQucHJpbmNpcGFsQW1vdW50O1xuICAgICAgY29uc3Qgc2F2aW5nc0FjY291bnROdW1iZXIgPSBgJHthY2NvdW50TnVtYmVyfS0ke2RlcG9zaXQuZGVwb3NpdFNlcmlhbElkfWA7XG5cbiAgICAgIGFjY291bnRzLnB1c2goe1xuICAgICAgICBhY2NvdW50TnVtYmVyOiBzYXZpbmdzQWNjb3VudE51bWJlcixcbiAgICAgICAgc2F2aW5nc0FjY291bnQ6IHRydWUsXG4gICAgICAgIGJhbGFuY2UsXG4gICAgICAgIHR4bnM6IFtdLCAvLyBTYXZpbmdzIGFjY291bnRzIHR5cGljYWxseSBkb24ndCBoYXZlIHRyYW5zYWN0aW9uIGhpc3RvcnkgaW4gdGhlIHNhbWUgd2F5XG4gICAgICB9KTtcblxuICAgICAgZGVidWcoJ0FkZGVkIHNhdmluZ3MgYWNjb3VudCAlcyB3aXRoIGJhbGFuY2UgJXMnLCBzYXZpbmdzQWNjb3VudE51bWJlciwgYmFsYW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFjY291bnRzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRJbnZlc3RtZW50QWNjb3VudHMoXG4gIGJhc2VVcmw6IHN0cmluZyxcbiAgcGFnZTogUGFnZSxcbiAgYWNjb3VudDogeyBiYW5rTnVtYmVyOiBzdHJpbmc7IGJyYW5jaE51bWJlcjogc3RyaW5nOyBhY2NvdW50TnVtYmVyOiBzdHJpbmcgfSxcbik6IFByb21pc2U8VHJhbnNhY3Rpb25zQWNjb3VudFtdPiB7XG4gIGRlYnVnKCc9PT09PT09PT09IEZFVENISU5HIElOVkVTVE1FTlQgQUNDT1VOVFMgPT09PT09PT09PScpO1xuICBjb25zdCBhY2NvdW50czogVHJhbnNhY3Rpb25zQWNjb3VudFtdID0gW107XG4gIGNvbnN0IGFjY291bnROdW1iZXIgPSBgJHthY2NvdW50LmJyYW5jaE51bWJlcn0tJHthY2NvdW50LmFjY291bnROdW1iZXJ9YDsgLy8gRG9uJ3QgaW5jbHVkZSBiYW5rTnVtYmVyIGhlcmUgYmVjYXVzZSBpbnZlc3RtZW50IEFQSSBkb2Vzbid0IHVzZSBpdFxuXG4gIC8vIFNldCB1cCByZXF1ZXN0IGludGVyY2VwdGlvbiB0byBjYXB0dXJlIHNlc3Npb24gaGVhZGVyc1xuICBsZXQgY2FwdHVyZWRTZXNzaW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgbGV0IGNhcHR1cmVkQ3Nlc3Npb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IHJlcXVlc3RIYW5kbGVyID0gKHJlcXVlc3Q6IGFueSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gcmVxdWVzdC5oZWFkZXJzKCk7XG4gICAgICBpZiAoaGVhZGVycy5zZXNzaW9uICYmICFjYXB0dXJlZFNlc3Npb24pIHtcbiAgICAgICAgY2FwdHVyZWRTZXNzaW9uID0gaGVhZGVycy5zZXNzaW9uO1xuICAgICAgICBkZWJ1ZygnICAtIENhcHR1cmVkIHNlc3Npb24gZnJvbSBuZXR3b3JrIHJlcXVlc3QnKTtcbiAgICAgIH1cbiAgICAgIGlmIChoZWFkZXJzLmNzZXNzaW9uICYmICFjYXB0dXJlZENzZXNzaW9uKSB7XG4gICAgICAgIGNhcHR1cmVkQ3Nlc3Npb24gPSBoZWFkZXJzLmNzZXNzaW9uO1xuICAgICAgICBkZWJ1ZygnICAtIENhcHR1cmVkIGNzZXNzaW9uIGZyb20gbmV0d29yayByZXF1ZXN0Jyk7XG4gICAgICB9XG4gICAgICByZXF1ZXN0LmNvbnRpbnVlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZGVidWcoJyAgLSBFcnJvciBpbiByZXF1ZXN0IGhhbmRsZXI6ICVzJywgZSk7XG4gICAgICAvLyBUcnkgdG8gY29udGludWUgYW55d2F5XG4gICAgICB0cnkge1xuICAgICAgICByZXF1ZXN0LmNvbnRpbnVlKCk7XG4gICAgICB9IGNhdGNoIChjb250aW51ZUVycm9yKSB7XG4gICAgICAgIC8vIElnbm9yZSBpZiBhbHJlYWR5IGhhbmRsZWRcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdHJ5IHtcbiAgICAvLyBOYXZpZ2F0ZSB0byBteXRyYWRlIHNlY3Rpb24gdG8gZXN0YWJsaXNoIHNlc3Npb25cbiAgICBjb25zdCBteXRyYWRlVXJsID0gYCR7YmFzZVVybH0vbXl0cmFkZS9hcHBgO1xuICAgIGRlYnVnKCdOYXZpZ2F0aW5nIHRvIG15dHJhZGUgc2VjdGlvbjogJXMnLCBteXRyYWRlVXJsKTtcblxuICAgIGF3YWl0IHBhZ2Uuc2V0UmVxdWVzdEludGVyY2VwdGlvbih0cnVlKTtcbiAgICBwYWdlLm9uKCdyZXF1ZXN0JywgcmVxdWVzdEhhbmRsZXIpO1xuXG4gICAgLy8gVHJ5IHRvIG5hdmlnYXRlLCBidXQgaWYgaXQgZmFpbHMgKGUuZy4sIE15VHJhZGUgbm90IGVuYWJsZWQpLCBjbGVhbiB1cCBhbmQgcmV0dXJuIGVtcHR5XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHBhZ2UuZ290byhteXRyYWRlVXJsLCB7IHdhaXRVbnRpbDogJ25ldHdvcmtpZGxlMicsIHRpbWVvdXQ6IDYwMDAwIH0pO1xuICAgICAgLy8gV2FpdCBsb25nZXIgZm9yIHRoZSBwYWdlIHRvIGZ1bGx5IGxvYWQgYW5kIGVzdGFibGlzaCBzZXNzaW9uXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgNTAwMCkpO1xuICAgIH0gY2F0Y2ggKG5hdkVycm9yKSB7XG4gICAgICBkZWJ1ZygnICAtIE5hdmlnYXRpb24gdG8gTXlUcmFkZSBmYWlsZWQgKGxpa2VseSBub3QgZW5hYmxlZCk6ICVzJywgbmF2RXJyb3IpO1xuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdCBpbnRlcmNlcHRpb25cbiAgICAgIHBhZ2Uub2ZmKCdyZXF1ZXN0JywgcmVxdWVzdEhhbmRsZXIpO1xuICAgICAgYXdhaXQgcGFnZS5zZXRSZXF1ZXN0SW50ZXJjZXB0aW9uKGZhbHNlKTtcbiAgICAgIGRlYnVnKCdSZXR1cm5pbmcgMCBpbnZlc3RtZW50IGFjY291bnRzIChNeVRyYWRlIG5vdCBhY2Nlc3NpYmxlKScpO1xuICAgICAgcmV0dXJuIGFjY291bnRzO1xuICAgIH1cblxuICAgIC8vIE5vdyB0dXJuIG9mZiByZXF1ZXN0IGludGVyY2VwdGlvbiBiZWZvcmUgd2UgbWFrZSBBUEkgY2FsbHNcbiAgICBwYWdlLm9mZigncmVxdWVzdCcsIHJlcXVlc3RIYW5kbGVyKTtcbiAgICBhd2FpdCBwYWdlLnNldFJlcXVlc3RJbnRlcmNlcHRpb24oZmFsc2UpO1xuXG4gICAgZGVidWcoJ015dHJhZGUgcGFnZSBsb2FkZWQsIHNlc3Npb24gZXN0YWJsaXNoZWQnKTtcblxuICAgIGNvbnN0IGZpZWxkcyA9XG4gICAgICAnRW5nTmFtZSxFbmdTeW1ib2wsSGViTmFtZSxIZWJTeW1ib2wsU3ltYm9sLEV4cGlyYXRpb25EYXRlLEl0ZW1UeXBlLFN0b2NrVHlwZSxJc0V0ZixJc0ZvcmVpZ24sQ3VycmVuY3lDb2RlLEV4Y2hhbmdlLENyZWF0aW9uRXF1aXR5TnVtLEVxdWl0eVR5cGUsQ29udHJhY3RUeXBlLEFsbG93ZWRPcmRlckRpcmVjdGlvbixFcXVpdHlTdWJUeXBlJztcbiAgICBjb25zdCBpbnZlc3RtZW50VXJsID0gYCR7YmFzZVVybH0vU2VydmVyU2VydmljZXMvbXl0cmFkZS9hcGkvdjIvanNvbjIvYWNjb3VudC92aWV3P2FjY291bnQ9JHthY2NvdW50TnVtYmVyfSZmaWVsZHM9JHtmaWVsZHN9YDtcbiAgICBkZWJ1ZygnVHJ5aW5nIGludmVzdG1lbnQgYWNjb3VudCBVUkw6ICVzJywgaW52ZXN0bWVudFVybCk7XG5cbiAgICAvLyBHZXQgWFNSRiB0b2tlbiBhbmQgc2Vzc2lvbiBkYXRhIGZyb20gY29va2llc1xuICAgIGNvbnN0IGNvb2tpZXMgPSBhd2FpdCBwYWdlLmNvb2tpZXMoKTtcbiAgICBjb25zdCBYU1JGQ29va2llID0gY29va2llcy5maW5kKGNvb2tpZSA9PiBjb29raWUubmFtZSA9PT0gJ1hTUkYtVE9LRU4nKTtcblxuICAgIC8vIFVzZSBjYXB0dXJlZCBzZXNzaW9uIG9yIGZhbGxiYWNrIHRvIGdlbmVyYXRlZCBvbmVzXG4gICAgY29uc3Qgc2Vzc2lvbklkID0gY2FwdHVyZWRTZXNzaW9uIHx8IHV1aWQ0KCk7XG4gICAgY29uc3QgY3Nlc3Npb24gPSBjYXB0dXJlZENzZXNzaW9uIHx8IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnLFxuICAgICAgY3Nlc3Npb24sXG4gICAgICBzZXNzaW9uOiBzZXNzaW9uSWQsXG4gICAgICBSZWZlcmVyOiBteXRyYWRlVXJsLFxuICAgIH07XG4gICAgaWYgKFhTUkZDb29raWUgIT0gbnVsbCkge1xuICAgICAgaGVhZGVyc1snWC1YU1JGLVRPS0VOJ10gPSBYU1JGQ29va2llLnZhbHVlO1xuICAgICAgZGVidWcoJyAgLSBVc2luZyBYU1JGIHRva2VuOiAlcycsIFhTUkZDb29raWUudmFsdWUuc3Vic3RyaW5nKDAsIDEwKSArICcuLi4nKTtcbiAgICB9XG5cbiAgICBkZWJ1ZygnICAtIFJlcXVlc3QgaGVhZGVyczogY3Nlc3Npb249JXMsIHNlc3Npb249JXMnLCBjc2Vzc2lvbiwgc2Vzc2lvbklkKTtcblxuICAgIGNvbnN0IGludmVzdG1lbnREYXRhID0gYXdhaXQgZmV0Y2hQb3N0V2l0aGluUGFnZTxJbnZlc3RtZW50QWNjb3VudERhdGE+KHBhZ2UsIGludmVzdG1lbnRVcmwsIHt9LCBoZWFkZXJzKTtcblxuICAgIGRlYnVnKCcgIC0gUmVzcG9uc2UgcmVjZWl2ZWQ6ICVzJywgaW52ZXN0bWVudERhdGEgPyAnWUVTJyA6ICdOTycpO1xuICAgIGlmIChpbnZlc3RtZW50RGF0YSkge1xuICAgICAgZGVidWcoJyAgLSBSZXNwb25zZSBoYXMgVmlldzogJXMnLCBpbnZlc3RtZW50RGF0YS5WaWV3ID8gJ1lFUycgOiAnTk8nKTtcbiAgICAgIGRlYnVnKCcgIC0gUmVzcG9uc2UgaGFzIFZpZXcuQWNjb3VudDogJXMnLCBpbnZlc3RtZW50RGF0YS5WaWV3Py5BY2NvdW50ID8gJ1lFUycgOiAnTk8nKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXN0bWVudERhdGE/LlZpZXc/LkFjY291bnQpIHtcbiAgICAgIGRlYnVnKCfinJMgRm91bmQgaW52ZXN0bWVudCBhY2NvdW50IGRhdGEnKTtcblxuICAgICAgY29uc3QgYWNjb3VudERhdGEgPSBpbnZlc3RtZW50RGF0YS5WaWV3LkFjY291bnQ7XG4gICAgICBjb25zdCBiYWxhbmNlID0gYWNjb3VudERhdGEuT25saW5lVmFsdWUgfHwgMDtcbiAgICAgIGNvbnN0IGN1cnJlbmN5ID0gYWNjb3VudERhdGEuQ3VycmVuY3lDb2RlIHx8IFNIRUtFTF9DVVJSRU5DWTtcblxuICAgICAgLy8gR2V0IHNlY3VyaXRpZXMgZnJvbSB0aGUgYmFsYW5jZSBhcnJheVxuICAgICAgY29uc3Qgc2VjdXJpdGllczogU2VjdXJpdHlbXSA9IFtdO1xuICAgICAgY29uc3QgYmFsYW5jZXMgPSBhY2NvdW50RGF0YS5BY2NvdW50UG9zaXRpb24/LkJhbGFuY2UgfHwgW107XG4gICAgICBjb25zdCBtZXRhU2VjdXJpdGllcyA9IGludmVzdG1lbnREYXRhLlZpZXcuTWV0YT8uU2VjdXJpdHkgfHwgW107XG5cbiAgICAgIC8vIENyZWF0ZSBhIG1hcCBvZiBzZWN1cml0eSBtZXRhZGF0YSBmb3IgZWFzeSBsb29rdXBcbiAgICAgIGNvbnN0IG1ldGFNYXAgPSBuZXcgTWFwPHN0cmluZywgSW52ZXN0bWVudFNlY3VyaXR5TWV0YT4oKTtcbiAgICAgIGZvciAoY29uc3QgbWV0YSBvZiBtZXRhU2VjdXJpdGllcykge1xuICAgICAgICBtZXRhTWFwLnNldChtZXRhWyctS2V5J10sIG1ldGEpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHNlY3VyaXR5QmFsYW5jZSBvZiBiYWxhbmNlcykge1xuICAgICAgICBjb25zdCBtZXRhID0gbWV0YU1hcC5nZXQoc2VjdXJpdHlCYWxhbmNlLkVxdWl0eU51bWJlcik7XG5cbiAgICAgICAgc2VjdXJpdGllcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBtZXRhPy5FbmdOYW1lIHx8ICcnLFxuICAgICAgICAgIHN5bWJvbDogbWV0YT8uRW5nU3ltYm9sIHx8ICcnLFxuICAgICAgICAgIHZvbHVtZTogc2VjdXJpdHlCYWxhbmNlLk9ubGluZU5WLFxuICAgICAgICAgIHZhbHVlOiBzZWN1cml0eUJhbGFuY2UuT25saW5lVkwsXG4gICAgICAgICAgY3VycmVuY3k6IHNlY3VyaXR5QmFsYW5jZS5DdXJyZW5jeUNvZGUgfHwgbWV0YT8uQ3VycmVuY3lDb2RlIHx8IFNIRUtFTF9DVVJSRU5DWSxcbiAgICAgICAgICBjaGFuZ2VQZXJjZW50YWdlOiBzZWN1cml0eUJhbGFuY2UuQmFzZVJhdGVDaGFuZ2VQZXJjZW50YWdlLFxuICAgICAgICAgIHByb2ZpdExvc3M6IHNlY3VyaXR5QmFsYW5jZS5Qcm9maXRMb3NzLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZGVidWcoJyAgLSBCYWxhbmNlOiAlcyAlcywgU2VjdXJpdGllczogJWQnLCBiYWxhbmNlLCBjdXJyZW5jeSwgc2VjdXJpdGllcy5sZW5ndGgpO1xuXG4gICAgICBpZiAoYmFsYW5jZSAhPT0gMCB8fCBzZWN1cml0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaW52ZXN0bWVudEFjY291bnROdW1iZXIgPSBgJHthY2NvdW50LmJhbmtOdW1iZXJ9LSR7YWNjb3VudC5icmFuY2hOdW1iZXJ9LSR7YWNjb3VudC5hY2NvdW50TnVtYmVyfS1pbnZlc3RtZW50YDtcbiAgICAgICAgYWNjb3VudHMucHVzaCh7XG4gICAgICAgICAgYWNjb3VudE51bWJlcjogaW52ZXN0bWVudEFjY291bnROdW1iZXIsXG4gICAgICAgICAgYmFsYW5jZSxcbiAgICAgICAgICBjdXJyZW5jeSxcbiAgICAgICAgICBzYXZpbmdzQWNjb3VudDogdHJ1ZSxcbiAgICAgICAgICB0eG5zOiBbXSxcbiAgICAgICAgICBzZWN1cml0aWVzLFxuICAgICAgICB9KTtcblxuICAgICAgICBkZWJ1ZygnICDinJMgQWRkZWQgaW52ZXN0bWVudCBhY2NvdW50OiAlcyB3aXRoICVkIHNlY3VyaXRpZXMnLCBpbnZlc3RtZW50QWNjb3VudE51bWJlciwgc2VjdXJpdGllcy5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVidWcoJyAgLSBTa2lwcGluZyAoemVybyBiYWxhbmNlIGFuZCBubyBzZWN1cml0aWVzKScpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1ZygnICAtIE5vIGludmVzdG1lbnQgYWNjb3VudCBkYXRhIGZvdW5kJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGRlYnVnKCcgIC0gRXJyb3IgZmV0Y2hpbmcgaW52ZXN0bWVudCBhY2NvdW50OiAlcycsIGVycm9yKTtcbiAgICAvLyBMb2cgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSBlcnJvclxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBkZWJ1ZygnICAgIEVycm9yIG1lc3NhZ2U6ICVzJywgZXJyb3IubWVzc2FnZSk7XG4gICAgICBkZWJ1ZygnICAgIEVycm9yIHN0YWNrOiAlcycsIGVycm9yLnN0YWNrKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgLy8gQ2xlYW4gdXAgcmVxdWVzdCBpbnRlcmNlcHRpb24gKGluIGNhc2UgaXQgd2Fzbid0IGFscmVhZHkgZG9uZSlcbiAgICB0cnkge1xuICAgICAgcGFnZS5vZmYoJ3JlcXVlc3QnLCByZXF1ZXN0SGFuZGxlcik7XG4gICAgICBhd2FpdCBwYWdlLnNldFJlcXVlc3RJbnRlcmNlcHRpb24oZmFsc2UpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElnbm9yZSBjbGVhbnVwIGVycm9yc1xuICAgIH1cblxuICAgIC8vIE5hdmlnYXRlIGJhY2sgdG8gdGhlIG1haW4gaG9tZXBhZ2UgdG8gcmVzdG9yZSB0aGUgc2Vzc2lvbiBmb3Igc3Vic2VxdWVudCBzY3JhcGluZ1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBob21lcGFnZVVybCA9IGAke2Jhc2VVcmx9L25nLXBvcnRhbHMvcmIvaGUvaG9tZXBhZ2VgO1xuICAgICAgZGVidWcoJ05hdmlnYXRpbmcgYmFjayB0byBob21lcGFnZTogJXMnLCBob21lcGFnZVVybCk7XG4gICAgICBhd2FpdCBwYWdlLmdvdG8oaG9tZXBhZ2VVcmwsIHsgd2FpdFVudGlsOiAnbmV0d29ya2lkbGUyJywgdGltZW91dDogMzAwMDAgfSk7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwMCkpO1xuICAgICAgZGVidWcoJ0hvbWVwYWdlIHJlc3RvcmVkJyk7XG4gICAgfSBjYXRjaCAobmF2RXJyb3IpIHtcbiAgICAgIGRlYnVnKCcgIC0gRmFpbGVkIHRvIG5hdmlnYXRlIGJhY2sgdG8gaG9tZXBhZ2U6ICVzJywgbmF2RXJyb3IpO1xuICAgICAgLy8gQ29udGludWUgYW55d2F5LCB0aGUgb3V0ZXIgdHJ5LWNhdGNoIGluIGZldGNoQWNjb3VudERhdGEgd2lsbCBoYW5kbGUgaXRcbiAgICB9XG4gIH1cblxuICBkZWJ1ZygnUmV0dXJuaW5nICVkIGludmVzdG1lbnQgYWNjb3VudHMnLCBhY2NvdW50cy5sZW5ndGgpO1xuICByZXR1cm4gYWNjb3VudHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQWNjb3VudERhdGEocGFnZTogUGFnZSwgYmFzZVVybDogc3RyaW5nLCBvcHRpb25zOiBTY3JhcGVyT3B0aW9ucykge1xuICBjb25zdCByZXN0Q29udGV4dCA9IGF3YWl0IGdldFJlc3RDb250ZXh0KHBhZ2UpO1xuICBjb25zdCBhcGlTaXRlVXJsID0gYCR7YmFzZVVybH0vJHtyZXN0Q29udGV4dH1gO1xuICBjb25zdCBhY2NvdW50RGF0YVVybCA9IGAke2Jhc2VVcmx9L1NlcnZlclNlcnZpY2VzL2dlbmVyYWwvYWNjb3VudHNgO1xuXG4gIGRlYnVnKCdmZXRjaGluZyBhY2NvdW50cyBkYXRhJyk7XG4gIGNvbnN0IGFjY291bnRzSW5mbyA9IChhd2FpdCBmZXRjaEdldFdpdGhpblBhZ2U8RmV0Y2hlZEFjY291bnREYXRhPihwYWdlLCBhY2NvdW50RGF0YVVybCkpIHx8IFtdO1xuICBkZWJ1ZygnZ290ICVkIGFjY291bnRzLCBmZXRjaGluZyB0eG5zIGFuZCBiYWxhbmNlJywgYWNjb3VudHNJbmZvLmxlbmd0aCk7XG5cbiAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJykuYWRkKDEsICdkYXknKTtcbiAgY29uc3Qgc3RhcnREYXRlID0gb3B0aW9ucy5zdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudC5tYXgoZGVmYXVsdFN0YXJ0TW9tZW50LCBtb21lbnQoc3RhcnREYXRlKSk7XG4gIGNvbnN0IHsgYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24gfSA9IG9wdGlvbnM7XG5cbiAgY29uc3Qgc3RhcnREYXRlU3RyID0gc3RhcnRNb21lbnQuZm9ybWF0KERBVEVfRk9STUFUKTtcbiAgY29uc3QgZW5kRGF0ZVN0ciA9IG1vbWVudCgpLmZvcm1hdChEQVRFX0ZPUk1BVCk7XG5cbiAgY29uc3QgYWNjb3VudHM6IFRyYW5zYWN0aW9uc0FjY291bnRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgYWNjb3VudCBvZiBhY2NvdW50c0luZm8pIHtcbiAgICBsZXQgYmFsYW5jZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFjY291bnROdW1iZXIgPSBgJHthY2NvdW50LmJhbmtOdW1iZXJ9LSR7YWNjb3VudC5icmFuY2hOdW1iZXJ9LSR7YWNjb3VudC5hY2NvdW50TnVtYmVyfWA7XG5cbiAgICBjb25zdCBpc0FjdGl2ZUFjY291bnQgPSBhY2NvdW50LmFjY291bnRDbG9zaW5nUmVhc29uQ29kZSA9PT0gMDtcbiAgICBpZiAoaXNBY3RpdmVBY2NvdW50KSB7XG4gICAgICBiYWxhbmNlID0gYXdhaXQgZ2V0QWNjb3VudEJhbGFuY2UoYXBpU2l0ZVVybCwgcGFnZSwgYWNjb3VudE51bWJlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdTa2lwcGluZyBiYWxhbmNlIGZvciBhIGNsb3NlZCBhY2NvdW50LCBiYWxhbmNlIHdpbGwgYmUgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgbGV0IHR4bnM6IFRyYW5zYWN0aW9uW10gPSBbXTtcbiAgICB0cnkge1xuICAgICAgdHhucyA9IGF3YWl0IGdldEFjY291bnRUcmFuc2FjdGlvbnMoXG4gICAgICAgIGJhc2VVcmwsXG4gICAgICAgIGFwaVNpdGVVcmwsXG4gICAgICAgIHBhZ2UsXG4gICAgICAgIGFjY291bnROdW1iZXIsXG4gICAgICAgIHN0YXJ0RGF0ZVN0cixcbiAgICAgICAgZW5kRGF0ZVN0cixcbiAgICAgICAgYWRkaXRpb25hbFRyYW5zYWN0aW9uSW5mb3JtYXRpb24sXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkZWJ1ZygnRXJyb3IgZmV0Y2hpbmcgdHJhbnNhY3Rpb25zIGZvciAlcyAocG9zc2libHkgY2xvc2VkIGFjY291bnQpOiAlcycsIGFjY291bnROdW1iZXIsIGVycm9yKTtcbiAgICAgIC8vIENvbnRpbnVlIHdpdGggZW1wdHkgdHJhbnNhY3Rpb25zXG4gICAgfVxuXG4gICAgLy8gQWRkIHJlZ3VsYXIgY2hlY2tpbmcgYWNjb3VudFxuICAgIGFjY291bnRzLnB1c2goe1xuICAgICAgYWNjb3VudE51bWJlcixcbiAgICAgIGJhbGFuY2UsXG4gICAgICB0eG5zLFxuICAgIH0pO1xuXG4gICAgLy8gRmV0Y2ggZm9yZXggYWNjb3VudHMgZm9yIHRoaXMgYWNjb3VudCBudW1iZXJcbiAgICB0cnkge1xuICAgICAgY29uc3QgZm9yZXhBY2NvdW50cyA9IGF3YWl0IGdldEZvcmV4QWNjb3VudHMoYmFzZVVybCwgcGFnZSwgYWNjb3VudE51bWJlciwgc3RhcnREYXRlU3RyLCBlbmREYXRlU3RyKTtcbiAgICAgIGFjY291bnRzLnB1c2goLi4uZm9yZXhBY2NvdW50cyk7XG4gICAgICBkZWJ1ZygnQWRkZWQgJWQgZm9yZXggYWNjb3VudHMgdG8gcmVzdWx0cycsIGZvcmV4QWNjb3VudHMubGVuZ3RoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZGVidWcoJ0Vycm9yIGZldGNoaW5nIGZvcmV4IGFjY291bnRzIGZvciAlczogJXMnLCBhY2NvdW50TnVtYmVyLCBlcnJvcik7XG4gICAgfVxuXG4gICAgLy8gRmV0Y2ggc2F2aW5ncyBhY2NvdW50cyBmb3IgdGhpcyBhY2NvdW50IG51bWJlclxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzYXZpbmdzQWNjb3VudHMgPSBhd2FpdCBnZXRTYXZpbmdzQWNjb3VudHMoYmFzZVVybCwgcGFnZSwgYWNjb3VudE51bWJlcik7XG4gICAgICBhY2NvdW50cy5wdXNoKC4uLnNhdmluZ3NBY2NvdW50cyk7XG4gICAgICBkZWJ1ZygnQWRkZWQgJWQgc2F2aW5ncyBhY2NvdW50cyB0byByZXN1bHRzJywgc2F2aW5nc0FjY291bnRzLmxlbmd0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGRlYnVnKCdFcnJvciBmZXRjaGluZyBzYXZpbmdzIGFjY291bnRzIGZvciAlczogJXMnLCBhY2NvdW50TnVtYmVyLCBlcnJvcik7XG4gICAgfVxuXG4gICAgLy8gRmV0Y2ggaW52ZXN0bWVudCBhY2NvdW50cyBmb3IgdGhpcyBhY2NvdW50IG51bWJlclxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbnZlc3RtZW50QWNjb3VudHMgPSBhd2FpdCBnZXRJbnZlc3RtZW50QWNjb3VudHMoYmFzZVVybCwgcGFnZSwgYWNjb3VudCk7XG4gICAgICBhY2NvdW50cy5wdXNoKC4uLmludmVzdG1lbnRBY2NvdW50cyk7XG4gICAgICBkZWJ1ZygnQWRkZWQgJWQgaW52ZXN0bWVudCBhY2NvdW50cyB0byByZXN1bHRzJywgaW52ZXN0bWVudEFjY291bnRzLmxlbmd0aCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGRlYnVnKCdFcnJvciBmZXRjaGluZyBpbnZlc3RtZW50IGFjY291bnRzIGZvciAlczogJXMnLCBhY2NvdW50TnVtYmVyLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWNjb3VudERhdGEgPSB7XG4gICAgc3VjY2VzczogdHJ1ZSxcbiAgICBhY2NvdW50cyxcbiAgfTtcbiAgZGVidWcoJ2ZldGNoaW5nIGVuZGVkJyk7XG4gIHJldHVybiBhY2NvdW50RGF0YTtcbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVMb2dpblJlc3VsdHMoYmFzZVVybDogc3RyaW5nKSB7XG4gIGNvbnN0IHVybHM6IFBvc3NpYmxlTG9naW5SZXN1bHRzID0ge307XG4gIHVybHNbTG9naW5SZXN1bHRzLlN1Y2Nlc3NdID0gW1xuICAgIGAke2Jhc2VVcmx9L3BvcnRhbHNlcnZlci9Ib21lUGFnZWAsXG4gICAgYCR7YmFzZVVybH0vbmctcG9ydGFscy1idC9yYi9oZS9ob21lcGFnZWAsXG4gICAgYCR7YmFzZVVybH0vbmctcG9ydGFscy9yYi9oZS9ob21lcGFnZWAsXG4gIF07XG4gIHVybHNbTG9naW5SZXN1bHRzLkludmFsaWRQYXNzd29yZF0gPSBbXG4gICAgYCR7YmFzZVVybH0vQVVUSEVOVElDQVRFL0xPR09OP2Zsb3c9QVVUSEVOVElDQVRFJnN0YXRlPUxPR09OJmVycm9yY29kZT0xLjYmY2FsbG1lPWZhbHNlYCxcbiAgXTtcbiAgdXJsc1tMb2dpblJlc3VsdHMuQ2hhbmdlUGFzc3dvcmRdID0gW1xuICAgIGAke2Jhc2VVcmx9L01DUC9TVEFSVD9mbG93PU1DUCZzdGF0ZT1TVEFSVCZleHBpcmVkRGF0ZT1udWxsYCxcbiAgICAvXFwvQUJPVVRUT0VYUElSRVxcL1NUQVJUL2ksXG4gIF07XG4gIHJldHVybiB1cmxzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpIHtcbiAgcmV0dXJuIFtcbiAgICB7IHNlbGVjdG9yOiAnI3VzZXJDb2RlJywgdmFsdWU6IGNyZWRlbnRpYWxzLnVzZXJDb2RlIH0sXG4gICAgeyBzZWxlY3RvcjogJyNwYXNzd29yZCcsIHZhbHVlOiBjcmVkZW50aWFscy5wYXNzd29yZCB9LFxuICBdO1xufVxuXG50eXBlIFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzID0geyB1c2VyQ29kZTogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH07XG5cbmNsYXNzIEhhcG9hbGltU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyV2l0aEJyb3dzZXI8U2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHM+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgZ2V0IGJhc2VVcmwoKSB7XG4gICAgcmV0dXJuICdodHRwczovL2xvZ2luLmJhbmtoYXBvYWxpbS5jby5pbCc7XG4gIH1cblxuICBnZXRMb2dpbk9wdGlvbnMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvZ2luVXJsOiBgJHt0aGlzLmJhc2VVcmx9L2NnaS1iaW4vcG9hbHd3d2M/cmVxTmFtZT1nZXRMb2dvblBhZ2VgLFxuICAgICAgZmllbGRzOiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFscyksXG4gICAgICBzdWJtaXRCdXR0b25TZWxlY3RvcjogJy5sb2dpbi1idG4nLFxuICAgICAgcG9zdEFjdGlvbjogYXN5bmMgKCkgPT4gd2FpdEZvclJlZGlyZWN0KHRoaXMucGFnZSksXG4gICAgICBwb3NzaWJsZVJlc3VsdHM6IGdldFBvc3NpYmxlTG9naW5SZXN1bHRzKHRoaXMuYmFzZVVybCksXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRGF0YSgpIHtcbiAgICByZXR1cm4gZmV0Y2hBY2NvdW50RGF0YSh0aGlzLnBhZ2UsIHRoaXMuYmFzZVVybCwgdGhpcy5vcHRpb25zKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIYXBvYWxpbVNjcmFwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLEtBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FB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
|
package/lib/scrapers/visa-cal.js
CHANGED
|
@@ -302,7 +302,7 @@ class VisaCalScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
|
|
|
302
302
|
const txns = this.options.outputData?.enableTransactionsFilterByDate ?? true ? (0, _transactions.filterOldTransactions)(transactions, (0, _moment.default)(startDate), this.options.combineInstallments || false) : transactions;
|
|
303
303
|
return {
|
|
304
304
|
txns,
|
|
305
|
-
balance: -frame?.nextTotalDebit,
|
|
305
|
+
balance: _lodash.default.isNumber(frame?.nextTotalDebit) ? -frame?.nextTotalDebit : undefined,
|
|
306
306
|
accountNumber: card.last4Digits
|
|
307
307
|
};
|
|
308
308
|
}));
|
|
@@ -315,4 +315,4 @@ class VisaCalScraper extends _baseScraperWithBrowser.BaseScraperWithBrowser {
|
|
|
315
315
|
}
|
|
316
316
|
}
|
|
317
317
|
var _default = exports.default = VisaCalScraper;
|
|
318
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGVidWciLCJfZWxlbWVudHNJbnRlcmFjdGlvbnMiLCJfZmV0Y2giLCJfbmF2aWdhdGlvbiIsIl9zdG9yYWdlIiwiX3RyYW5zYWN0aW9ucyIsIl93YWl0aW5nIiwiX3RyYW5zYWN0aW9uczIiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsIl9sb2Rhc2giLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJhcGlIZWFkZXJzIiwiT3JpZ2luIiwiUmVmZXJlciIsIkxPR0lOX1VSTCIsIlRSQU5TQUNUSU9OU19SRVFVRVNUX0VORFBPSU5UIiwiRlJBTUVTX1JFUVVFU1RfRU5EUE9JTlQiLCJQRU5ESU5HX1RSQU5TQUNUSU9OU19SRVFVRVNUX0VORFBPSU5UIiwiU1NPX0FVVEhPUklaQVRJT05fUkVRVUVTVF9FTkRQT0lOVCIsIkludmFsaWRQYXNzd29yZE1lc3NhZ2UiLCJkZWJ1ZyIsImdldERlYnVnIiwiVHJuVHlwZUNvZGUiLCJpc0F1dGhNb2R1bGUiLCJyZXN1bHQiLCJCb29sZWFuIiwiYXV0aCIsImNhbENvbm5lY3RUb2tlbiIsIlN0cmluZyIsInRyaW0iLCJhdXRoTW9kdWxlT3JVbmRlZmluZWQiLCJ1bmRlZmluZWQiLCJpc1BlbmRpbmciLCJ0cmFuc2FjdGlvbiIsImRlYkNyZERhdGUiLCJpc0NhcmRUcmFuc2FjdGlvbkRldGFpbHMiLCJpc0NhcmRQZW5kaW5nVHJhbnNhY3Rpb25EZXRhaWxzIiwiZ2V0TG9naW5GcmFtZSIsInBhZ2UiLCJmcmFtZSIsIndhaXRVbnRpbCIsImZyYW1lcyIsImZpbmQiLCJmIiwidXJsIiwiaW5jbHVkZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsIkVycm9yIiwiaGFzSW52YWxpZFBhc3N3b3JkRXJyb3IiLCJlcnJvckZvdW5kIiwiZWxlbWVudFByZXNlbnRPblBhZ2UiLCJlcnJvck1lc3NhZ2UiLCJwYWdlRXZhbCIsIml0ZW0iLCJpbm5lclRleHQiLCJoYXNDaGFuZ2VQYXNzd29yZEZvcm0iLCJnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyIsInVybHMiLCJMb2dpblJlc3VsdHMiLCJTdWNjZXNzIiwiSW52YWxpZFBhc3N3b3JkIiwib3B0aW9ucyIsIkNoYW5nZVBhc3N3b3JkIiwiY3JlYXRlTG9naW5GaWVsZHMiLCJjcmVkZW50aWFscyIsInNlbGVjdG9yIiwidmFsdWUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiY29udmVydFBhcnNlZERhdGFUb1RyYW5zYWN0aW9ucyIsImRhdGEiLCJwZW5kaW5nRGF0YSIsInBlbmRpbmdUcmFuc2FjdGlvbnMiLCJjYXJkc0xpc3QiLCJmbGF0TWFwIiwiY2FyZCIsImF1dGhEZXRhbGlzTGlzdCIsImJhbmtBY2NvdW50cyIsIm1vbnRoRGF0YSIsInJlZ3VsYXJEZWJpdERheXMiLCJhY2NvdW50cyIsImRlYml0RGF0ZXMiLCJpbW1lZGlhdGVEZWJpdERheXMiLCJpbW1pZGlhdGVEZWJpdHMiLCJkZWJpdERheXMiLCJjb21wbGV0ZWRUcmFuc2FjdGlvbnMiLCJkZWJpdERhdGUiLCJ0cmFuc2FjdGlvbnMiLCJhbGwiLCJtYXAiLCJudW1PZlBheW1lbnRzIiwibnVtYmVyT2ZQYXltZW50cyIsImluc3RhbGxtZW50cyIsIm51bWJlciIsImN1clBheW1lbnROdW0iLCJ0b3RhbCIsImRhdGUiLCJtb21lbnQiLCJ0cm5QdXJjaGFzZURhdGUiLCJjaGFyZ2VkQW1vdW50IiwidHJuQW10IiwiYW10QmVmb3JlQ29udkFuZEluZGV4Iiwib3JpZ2luYWxBbW91bnQiLCJ0cm5UeXBlQ29kZSIsImNyZWRpdCIsImlkZW50aWZpZXIiLCJ0cm5JbnRJZCIsInR5cGUiLCJyZWd1bGFyIiwic3RhbmRpbmdPcmRlciIsIlRyYW5zYWN0aW9uVHlwZXMiLCJOb3JtYWwiLCJJbnN0YWxsbWVudHMiLCJzdGF0dXMiLCJUcmFuc2FjdGlvblN0YXR1c2VzIiwiUGVuZGluZyIsIkNvbXBsZXRlZCIsImFkZCIsInRvSVNPU3RyaW5nIiwicHJvY2Vzc2VkRGF0ZSIsIkRhdGUiLCJvcmlnaW5hbEN1cnJlbmN5IiwidHJuQ3VycmVuY3lTeW1ib2wiLCJjaGFyZ2VkQ3VycmVuY3kiLCJkZWJDcmRDdXJyZW5jeVN5bWJvbCIsImRlc2NyaXB0aW9uIiwibWVyY2hhbnROYW1lIiwibWVtbyIsInRyYW5zVHlwZUNvbW1lbnREZXRhaWxzIiwidG9TdHJpbmciLCJjYXRlZ29yeSIsImJyYW5jaENvZGVEZXNjIiwiVmlzYUNhbFNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiYXV0aG9yaXphdGlvbiIsIm9wZW5Mb2dpblBvcHVwIiwid2FpdFVudGlsRWxlbWVudEZvdW5kIiwiY2xpY2tCdXR0b24iLCJnZXRDYXJkcyIsImluaXREYXRhIiwiZ2V0RnJvbVNlc3Npb25TdG9yYWdlIiwiY2FyZHMiLCJjYXJkVW5pcXVlSWQiLCJsYXN0NERpZ2l0cyIsImdldEF1dGhvcml6YXRpb25IZWFkZXIiLCJhdXRoTW9kdWxlIiwiZ2V0WFNpdGVJZCIsImdldExvZ2luT3B0aW9ucyIsImF1dGhSZXF1ZXN0UHJvbWlzZSIsIndhaXRGb3JSZXF1ZXN0IiwidGltZW91dCIsImNhdGNoIiwibG9naW5VcmwiLCJmaWVsZHMiLCJzdWJtaXRCdXR0b25TZWxlY3RvciIsInBvc3NpYmxlUmVzdWx0cyIsImNoZWNrUmVhZGluZXNzIiwicHJlQWN0aW9uIiwicG9zdEFjdGlvbiIsIndhaXRGb3JOYXZpZ2F0aW9uIiwiY3VycmVudFVybCIsImdldEN1cnJlbnRVcmwiLCJlbmRzV2l0aCIsInJlcXVlc3QiLCJoZWFkZXJzIiwicmVxdWlyZXNDaGFuZ2VQYXNzd29yZCIsInVzZXJBZ2VudCIsImZldGNoRGF0YSIsImRlZmF1bHRTdGFydE1vbWVudCIsInN1YnRyYWN0Iiwic3RhcnREYXRlIiwidG9EYXRlIiwic3RhcnRNb21lbnQiLCJtYXgiLCJmb3JtYXQiLCJ4U2l0ZUlkIiwiQXV0aG9yaXphdGlvbiIsImZ1dHVyZU1vbnRoc1RvU2NyYXBlIiwiZmV0Y2hQb3N0IiwiY2FyZHNGb3JGcmFtZURhdGEiLCJmaW5hbE1vbnRoVG9GZXRjaE1vbWVudCIsIm1vbnRocyIsImRpZmYiLCJhbGxNb250aHNEYXRhIiwiXyIsImJhbmtJc3N1ZWRDYXJkcyIsImNhcmRMZXZlbEZyYW1lcyIsImNhcmRVbmlxdWVJREFycmF5IiwiaSIsIm1vbnRoIiwiY2xvbmUiLCJ5ZWFyIiwic3RhdHVzQ29kZSIsInRpdGxlIiwicHVzaCIsInR4bnMiLCJvdXRwdXREYXRhIiwiZW5hYmxlVHJhbnNhY3Rpb25zRmlsdGVyQnlEYXRlIiwiZmlsdGVyT2xkVHJhbnNhY3Rpb25zIiwiY29tYmluZUluc3RhbGxtZW50cyIsImJhbGFuY2UiLCJuZXh0VG90YWxEZWJpdCIsImFjY291bnROdW1iZXIiLCJKU09OIiwic3RyaW5naWZ5Iiwic3VjY2VzcyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy92aXNhLWNhbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyB0eXBlIEhUVFBSZXF1ZXN0LCB0eXBlIEZyYW1lLCB0eXBlIFBhZ2UgfSBmcm9tICdwdXBwZXRlZXInO1xuaW1wb3J0IHsgZ2V0RGVidWcgfSBmcm9tICcuLi9oZWxwZXJzL2RlYnVnJztcbmltcG9ydCB7IGNsaWNrQnV0dG9uLCBlbGVtZW50UHJlc2VudE9uUGFnZSwgcGFnZUV2YWwsIHdhaXRVbnRpbEVsZW1lbnRGb3VuZCB9IGZyb20gJy4uL2hlbHBlcnMvZWxlbWVudHMtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB7IGZldGNoUG9zdCB9IGZyb20gJy4uL2hlbHBlcnMvZmV0Y2gnO1xuaW1wb3J0IHsgZ2V0Q3VycmVudFVybCwgd2FpdEZvck5hdmlnYXRpb24gfSBmcm9tICcuLi9oZWxwZXJzL25hdmlnYXRpb24nO1xuaW1wb3J0IHsgZ2V0RnJvbVNlc3Npb25TdG9yYWdlIH0gZnJvbSAnLi4vaGVscGVycy9zdG9yYWdlJztcbmltcG9ydCB7IGZpbHRlck9sZFRyYW5zYWN0aW9ucyB9IGZyb20gJy4uL2hlbHBlcnMvdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IHdhaXRVbnRpbCB9IGZyb20gJy4uL2hlbHBlcnMvd2FpdGluZyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvblN0YXR1c2VzLCBUcmFuc2FjdGlvblR5cGVzLCB0eXBlIFRyYW5zYWN0aW9uLCB0eXBlIFRyYW5zYWN0aW9uc0FjY291bnQgfSBmcm9tICcuLi90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgQmFzZVNjcmFwZXJXaXRoQnJvd3NlciwgTG9naW5SZXN1bHRzLCB0eXBlIExvZ2luT3B0aW9ucyB9IGZyb20gJy4vYmFzZS1zY3JhcGVyLXdpdGgtYnJvd3Nlcic7XG5pbXBvcnQgeyB0eXBlIFNjcmFwZXJTY3JhcGluZ1Jlc3VsdCB9IGZyb20gJy4vaW50ZXJmYWNlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IGFwaUhlYWRlcnMgPSB7XG4gICdVc2VyLUFnZW50JzpcbiAgICAnTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzE0Mi4wLjAuMCBTYWZhcmkvNTM3LjM2JyxcbiAgT3JpZ2luOiAnaHR0cHM6Ly9kaWdpdGFsLXdlYi5jYWwtb25saW5lLmNvLmlsJyxcbiAgUmVmZXJlcjogJ2h0dHBzOi8vZGlnaXRhbC13ZWIuY2FsLW9ubGluZS5jby5pbCcsXG4gICdBY2NlcHQtTGFuZ3VhZ2UnOiAnaGUtSUwsaGU7cT0wLjksZW4tVVM7cT0wLjgsZW47cT0wLjcnLFxuICAnU2VjLUZldGNoLVNpdGUnOiAnc2FtZS1zaXRlJyxcbiAgJ1NlYy1GZXRjaC1Nb2RlJzogJ2NvcnMnLFxuICAnU2VjLUZldGNoLURlc3QnOiAnZW1wdHknLFxufTtcbmNvbnN0IExPR0lOX1VSTCA9ICdodHRwczovL3d3dy5jYWwtb25saW5lLmNvLmlsLyc7XG5jb25zdCBUUkFOU0FDVElPTlNfUkVRVUVTVF9FTkRQT0lOVCA9XG4gICdodHRwczovL2FwaS5jYWwtb25saW5lLmNvLmlsL1RyYW5zYWN0aW9ucy9hcGkvdHJhbnNhY3Rpb25zRGV0YWlscy9nZXRDYXJkVHJhbnNhY3Rpb25zRGV0YWlscyc7XG5jb25zdCBGUkFNRVNfUkVRVUVTVF9FTkRQT0lOVCA9ICdodHRwczovL2FwaS5jYWwtb25saW5lLmNvLmlsL0ZyYW1lcy9hcGkvRnJhbWVzL0dldEZyYW1lU3RhdHVzJztcbmNvbnN0IFBFTkRJTkdfVFJBTlNBQ1RJT05TX1JFUVVFU1RfRU5EUE9JTlQgPVxuICAnaHR0cHM6Ly9hcGkuY2FsLW9ubGluZS5jby5pbC9UcmFuc2FjdGlvbnMvYXBpL2FwcHJvdmFscy9nZXRDbGVhcmFuY2VSZXF1ZXN0cyc7XG5jb25zdCBTU09fQVVUSE9SSVpBVElPTl9SRVFVRVNUX0VORFBPSU5UID0gJ2h0dHBzOi8vY29ubmVjdC5jYWwtb25saW5lLmNvLmlsL2NvbC1yZXN0L2NhbGNvbm5lY3QvYXV0aGVudGljYXRpb24vU1NPJztcblxuY29uc3QgSW52YWxpZFBhc3N3b3JkTWVzc2FnZSA9ICfXqdedINeU157Xqdeq157XqSDXkNeVINeU16HXmdeh157XlCDXqdeU15XXlteg15Ug16nXkteV15nXmdedJztcblxuY29uc3QgZGVidWcgPSBnZXREZWJ1ZygndmlzYS1jYWwnKTtcblxuZW51bSBUcm5UeXBlQ29kZSB7XG4gIHJlZ3VsYXIgPSAnNScsXG4gIGNyZWRpdCA9ICc2JyxcbiAgaW5zdGFsbG1lbnRzID0gJzgnLFxuICBzdGFuZGluZ09yZGVyID0gJzknLFxufVxuXG5pbnRlcmZhY2UgU2NyYXBlZFRyYW5zYWN0aW9uIHtcbiAgYW10QmVmb3JlQ29udkFuZEluZGV4OiBudW1iZXI7XG4gIGJyYW5jaENvZGVEZXNjOiBzdHJpbmc7XG4gIGNhc2hBY2NNYW5hZ2VyTmFtZTogbnVsbDtcbiAgY2FzaEFjY291bnRNYW5hZ2VyOiBudWxsO1xuICBjYXNoQWNjb3VudFRybkFtdDogbnVtYmVyO1xuICBjaGFyZ2VFeHRlcm5hbFRvQ2FyZENvbW1lbnQ6IHN0cmluZztcbiAgY29tbWVudHM6IFtdO1xuICBjdXJQYXltZW50TnVtOiBudW1iZXI7XG4gIGRlYkNyZEN1cnJlbmN5U3ltYm9sOiBDdXJyZW5jeVN5bWJvbDtcbiAgZGViQ3JkRGF0ZTogc3RyaW5nO1xuICBkZWJpdFNwcmVhZEluZDogYm9vbGVhbjtcbiAgZGlzY291bnRBbW91bnQ6IHVua25vd247XG4gIGRpc2NvdW50UmVhc29uOiB1bmtub3duO1xuICBpbW1lZGlhdGVDb21tZW50czogW107XG4gIGlzSW1tZWRpYXRlQ29tbWVudEluZDogYm9vbGVhbjtcbiAgaXNJbW1lZGlhdGVISEtJbmQ6IGJvb2xlYW47XG4gIGlzTWFyZ2FyaXRhOiBib29sZWFuO1xuICBpc1NwcmVhZFBheW1lbnN0QWJyb2FkOiBib29sZWFuO1xuICBsaW5rZWRDb21tZW50czogW107XG4gIG1lcmNoYW50QWRkcmVzczogc3RyaW5nO1xuICBtZXJjaGFudE5hbWU6IHN0cmluZztcbiAgbWVyY2hhbnRQaG9uZU5vOiBzdHJpbmc7XG4gIG51bU9mUGF5bWVudHM6IG51bWJlcjtcbiAgb25Hb2luZ1RyYW5zYWN0aW9uc0NvbW1lbnQ6IHN0cmluZztcbiAgcmVmdW5kSW5kOiBib29sZWFuO1xuICByb3VuZGluZ0Ftb3VudDogdW5rbm93bjtcbiAgcm91bmRpbmdSZWFzb246IHVua25vd247XG4gIHRva2VuSW5kOiAwO1xuICB0b2tlbk51bWJlclBhcnQ0OiAnJztcbiAgdHJhbnNDYXJkUHJlc2VudEluZDogYm9vbGVhbjtcbiAgdHJhbnNUeXBlQ29tbWVudERldGFpbHM6IFtdO1xuICB0cm5BbXQ6IG51bWJlcjtcbiAgdHJuQ3VycmVuY3lTeW1ib2w6IEN1cnJlbmN5U3ltYm9sO1xuICB0cm5FeGFjV2F5OiBudW1iZXI7XG4gIHRybkludElkOiBzdHJpbmc7XG4gIHRybk51bWFyZXRvcjogbnVtYmVyO1xuICB0cm5QdXJjaGFzZURhdGU6IHN0cmluZztcbiAgdHJuVHlwZTogc3RyaW5nO1xuICB0cm5UeXBlQ29kZTogVHJuVHlwZUNvZGU7XG4gIHdhbGxldFByb3ZpZGVyQ29kZTogMDtcbiAgd2FsbGV0UHJvdmlkZXJEZXNjOiAnJztcbiAgZWFybHlQYXltZW50SW5kOiBib29sZWFuO1xufVxuaW50ZXJmYWNlIFNjcmFwZWRQZW5kaW5nVHJhbnNhY3Rpb24ge1xuICBtZXJjaGFudElEOiBzdHJpbmc7XG4gIG1lcmNoYW50TmFtZTogc3RyaW5nO1xuICB0cm5QdXJjaGFzZURhdGU6IHN0cmluZztcbiAgd2FsbGV0VHJhbkluZDogbnVtYmVyO1xuICB0cmFuc2FjdGlvbnNPcmlnaW46IG51bWJlcjtcbiAgdHJuQW10OiBudW1iZXI7XG4gIHRwYUFwcHJvdmFsQW1vdW50OiB1bmtub3duO1xuICB0cm5DdXJyZW5jeVN5bWJvbDogQ3VycmVuY3lTeW1ib2w7XG4gIHRyblR5cGVDb2RlOiBUcm5UeXBlQ29kZTtcbiAgdHJuVHlwZTogc3RyaW5nO1xuICBicmFuY2hDb2RlRGVzYzogc3RyaW5nO1xuICB0cmFuc0NhcmRQcmVzZW50SW5kOiBib29sZWFuO1xuICBqNUluZGljYXRvcjogc3RyaW5nO1xuICBudW1iZXJPZlBheW1lbnRzOiBudW1iZXI7XG4gIGZpcnN0UGF5bWVudEFtb3VudDogbnVtYmVyO1xuICB0cmFuc1R5cGVDb21tZW50RGV0YWlsczogW107XG59XG5pbnRlcmZhY2UgSW5pdFJlc3BvbnNlIHtcbiAgcmVzdWx0OiB7XG4gICAgY2FyZHM6IHtcbiAgICAgIGNhcmRVbmlxdWVJZDogc3RyaW5nO1xuICAgICAgbGFzdDREaWdpdHM6IHN0cmluZztcbiAgICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gICAgfVtdO1xuICB9O1xufVxudHlwZSBDdXJyZW5jeVN5bWJvbCA9IHN0cmluZztcbmludGVyZmFjZSBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzRXJyb3Ige1xuICB0aXRsZTogc3RyaW5nO1xuICBzdGF0dXNDb2RlOiBudW1iZXI7XG59XG5pbnRlcmZhY2UgQ2FyZFRyYW5zYWN0aW9uRGV0YWlscyBleHRlbmRzIENhcmRUcmFuc2FjdGlvbkRldGFpbHNFcnJvciB7XG4gIHJlc3VsdDoge1xuICAgIGJhbmtBY2NvdW50czoge1xuICAgICAgYmFua0FjY291bnROdW06IHN0cmluZztcbiAgICAgIGJhbmtOYW1lOiBzdHJpbmc7XG4gICAgICBjaG9pY2VFeHRlcm5hbFRyYW5zYWN0aW9uczogYW55O1xuICAgICAgY3VycmVudEJhbmtBY2NvdW50SW5kOiBib29sZWFuO1xuICAgICAgZGViaXREYXRlczoge1xuICAgICAgICBiYXNrZXRBbW91bnRDb21tZW50OiB1bmtub3duO1xuICAgICAgICBjaG9pY2VISEtEZWJpdDogbnVtYmVyO1xuICAgICAgICBkYXRlOiBzdHJpbmc7XG4gICAgICAgIGRlYml0UmVhc29uOiB1bmtub3duO1xuICAgICAgICBmaXhEZWJpdEFtb3VudDogbnVtYmVyO1xuICAgICAgICBmcm9tUHVyY2hhc2VEYXRlOiBzdHJpbmc7XG4gICAgICAgIGlzQ2hvaWNlUmVwYWltZW50OiBib29sZWFuO1xuICAgICAgICB0b1B1cmNoYXNlRGF0ZTogc3RyaW5nO1xuICAgICAgICB0b3RhbEJhc2tldEFtb3VudDogbnVtYmVyO1xuICAgICAgICB0b3RhbERlYml0czoge1xuICAgICAgICAgIGN1cnJlbmN5U3ltYm9sOiBDdXJyZW5jeVN5bWJvbDtcbiAgICAgICAgICBhbW91bnQ6IG51bWJlcjtcbiAgICAgICAgfVtdO1xuICAgICAgICB0cmFuc2FjdGlvbnM6IFNjcmFwZWRUcmFuc2FjdGlvbltdO1xuICAgICAgfVtdO1xuICAgICAgaW1taWRpYXRlRGViaXRzOiB7IHRvdGFsRGViaXRzOiBbXTsgZGViaXREYXlzOiBbXSB9O1xuICAgIH1bXTtcbiAgICBibG9ja2VkQ2FyZEluZDogYm9vbGVhbjtcbiAgfTtcbiAgc3RhdHVzQ29kZTogMTtcbiAgc3RhdHVzRGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhdHVzVGl0bGU6IHN0cmluZztcbn1cbmludGVyZmFjZSBDYXJkUGVuZGluZ1RyYW5zYWN0aW9uRGV0YWlscyBleHRlbmRzIENhcmRUcmFuc2FjdGlvbkRldGFpbHNFcnJvciB7XG4gIHJlc3VsdDoge1xuICAgIGNhcmRzTGlzdDoge1xuICAgICAgY2FyZFVuaXF1ZUlEOiBzdHJpbmc7XG4gICAgICBhdXRoRGV0YWxpc0xpc3Q6IFNjcmFwZWRQZW5kaW5nVHJhbnNhY3Rpb25bXTtcbiAgICB9W107XG4gIH07XG4gIHN0YXR1c0NvZGU6IDE7XG4gIHN0YXR1c0Rlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXR1c1RpdGxlOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBBdXRoTW9kdWxlIHtcbiAgYXV0aDoge1xuICAgIGNhbENvbm5lY3RUb2tlbjogc3RyaW5nIHwgbnVsbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNBdXRoTW9kdWxlKHJlc3VsdDogYW55KTogcmVzdWx0IGlzIEF1dGhNb2R1bGUge1xuICByZXR1cm4gQm9vbGVhbihyZXN1bHQ/LmF1dGg/LmNhbENvbm5lY3RUb2tlbiAmJiBTdHJpbmcocmVzdWx0LmF1dGguY2FsQ29ubmVjdFRva2VuKS50cmltKCkpO1xufVxuXG5mdW5jdGlvbiBhdXRoTW9kdWxlT3JVbmRlZmluZWQocmVzdWx0OiBhbnkpOiBBdXRoTW9kdWxlIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGlzQXV0aE1vZHVsZShyZXN1bHQpID8gcmVzdWx0IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc1BlbmRpbmcoXG4gIHRyYW5zYWN0aW9uOiBTY3JhcGVkVHJhbnNhY3Rpb24gfCBTY3JhcGVkUGVuZGluZ1RyYW5zYWN0aW9uLFxuKTogdHJhbnNhY3Rpb24gaXMgU2NyYXBlZFBlbmRpbmdUcmFuc2FjdGlvbiB7XG4gIHJldHVybiAodHJhbnNhY3Rpb24gYXMgU2NyYXBlZFRyYW5zYWN0aW9uKS5kZWJDcmREYXRlID09PSB1bmRlZmluZWQ7IC8vIGFuIGFyYml0cmFyeSBmaWVsZCB0aGF0IG9ubHkgYXBwZWFycyBpbiBhIGNvbXBsZXRlZCB0cmFuc2FjdGlvblxufVxuXG5mdW5jdGlvbiBpc0NhcmRUcmFuc2FjdGlvbkRldGFpbHMoXG4gIHJlc3VsdDogQ2FyZFRyYW5zYWN0aW9uRGV0YWlscyB8IENhcmRUcmFuc2FjdGlvbkRldGFpbHNFcnJvcixcbik6IHJlc3VsdCBpcyBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzIHtcbiAgcmV0dXJuIChyZXN1bHQgYXMgQ2FyZFRyYW5zYWN0aW9uRGV0YWlscykucmVzdWx0ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQ2FyZFBlbmRpbmdUcmFuc2FjdGlvbkRldGFpbHMoXG4gIHJlc3VsdDogQ2FyZFBlbmRpbmdUcmFuc2FjdGlvbkRldGFpbHMgfCBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzRXJyb3IsXG4pOiByZXN1bHQgaXMgQ2FyZFBlbmRpbmdUcmFuc2FjdGlvbkRldGFpbHMge1xuICByZXR1cm4gKHJlc3VsdCBhcyBDYXJkUGVuZGluZ1RyYW5zYWN0aW9uRGV0YWlscykucmVzdWx0ICE9PSB1bmRlZmluZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldExvZ2luRnJhbWUocGFnZTogUGFnZSkge1xuICBsZXQgZnJhbWU6IEZyYW1lIHwgbnVsbCA9IG51bGw7XG4gIGRlYnVnKCd3YWl0IHVudGlsIGxvZ2luIGZyYW1lIGZvdW5kJyk7XG4gIGF3YWl0IHdhaXRVbnRpbChcbiAgICAoKSA9PiB7XG4gICAgICBmcmFtZSA9IHBhZ2UuZnJhbWVzKCkuZmluZChmID0+IGYudXJsKCkuaW5jbHVkZXMoJ2Nvbm5lY3QnKSkgfHwgbnVsbDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoISFmcmFtZSk7XG4gICAgfSxcbiAgICAnd2FpdCBmb3IgaWZyYW1lIHdpdGggbG9naW4gZm9ybScsXG4gICAgMTAwMDAsXG4gICAgMTAwMCxcbiAgKTtcblxuICBpZiAoIWZyYW1lKSB7XG4gICAgZGVidWcoJ2ZhaWxlZCB0byBmaW5kIGxvZ2luIGZyYW1lIGZvciAxMCBzZWNvbmRzJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gZXh0cmFjdCBsb2dpbiBpZnJhbWUnKTtcbiAgfVxuXG4gIHJldHVybiBmcmFtZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFzSW52YWxpZFBhc3N3b3JkRXJyb3IocGFnZTogUGFnZSkge1xuICBjb25zdCBmcmFtZSA9IGF3YWl0IGdldExvZ2luRnJhbWUocGFnZSk7XG4gIGNvbnN0IGVycm9yRm91bmQgPSBhd2FpdCBlbGVtZW50UHJlc2VudE9uUGFnZShmcmFtZSwgJ2Rpdi5nZW5lcmFsLWVycm9yID4gZGl2Jyk7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yRm91bmRcbiAgICA/IGF3YWl0IHBhZ2VFdmFsKGZyYW1lLCAnZGl2LmdlbmVyYWwtZXJyb3IgPiBkaXYnLCAnJywgaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiAoaXRlbSBhcyBIVE1MRGl2RWxlbWVudCkuaW5uZXJUZXh0O1xuICAgICAgfSlcbiAgICA6ICcnO1xuICByZXR1cm4gZXJyb3JNZXNzYWdlID09PSBJbnZhbGlkUGFzc3dvcmRNZXNzYWdlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYXNDaGFuZ2VQYXNzd29yZEZvcm0ocGFnZTogUGFnZSkge1xuICBjb25zdCBmcmFtZSA9IGF3YWl0IGdldExvZ2luRnJhbWUocGFnZSk7XG4gIGNvbnN0IGVycm9yRm91bmQgPSBhd2FpdCBlbGVtZW50UHJlc2VudE9uUGFnZShmcmFtZSwgJy5jaGFuZ2UtcGFzc3dvcmQtc3VidGl0bGUnKTtcbiAgcmV0dXJuIGVycm9yRm91bmQ7XG59XG5cbmZ1bmN0aW9uIGdldFBvc3NpYmxlTG9naW5SZXN1bHRzKCkge1xuICBkZWJ1ZygncmV0dXJuIHBvc3NpYmxlIGxvZ2luIHJlc3VsdHMnKTtcbiAgY29uc3QgdXJsczogTG9naW5PcHRpb25zWydwb3NzaWJsZVJlc3VsdHMnXSA9IHtcbiAgICBbTG9naW5SZXN1bHRzLlN1Y2Nlc3NdOiBbL2Rhc2hib2FyZC9pXSxcbiAgICBbTG9naW5SZXN1bHRzLkludmFsaWRQYXNzd29yZF06IFtcbiAgICAgIGFzeW5jIChvcHRpb25zPzogeyBwYWdlPzogUGFnZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBvcHRpb25zPy5wYWdlO1xuICAgICAgICBpZiAoIXBhZ2UpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc0ludmFsaWRQYXNzd29yZEVycm9yKHBhZ2UpO1xuICAgICAgfSxcbiAgICBdLFxuICAgIC8vIFtMb2dpblJlc3VsdHMuQWNjb3VudEJsb2NrZWRdOiBbXSwgLy8gVE9ETyBhZGQgd2hlbiByZWFjaGluZyB0aGlzIHNjZW5hcmlvXG4gICAgW0xvZ2luUmVzdWx0cy5DaGFuZ2VQYXNzd29yZF06IFtcbiAgICAgIGFzeW5jIChvcHRpb25zPzogeyBwYWdlPzogUGFnZSB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhZ2UgPSBvcHRpb25zPy5wYWdlO1xuICAgICAgICBpZiAoIXBhZ2UpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc0NoYW5nZVBhc3N3b3JkRm9ybShwYWdlKTtcbiAgICAgIH0sXG4gICAgXSxcbiAgfTtcbiAgcmV0dXJuIHVybHM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscykge1xuICBkZWJ1ZygnY3JlYXRlIGxvZ2luIGZpZWxkcyBmb3IgdXNlcm5hbWUgYW5kIHBhc3N3b3JkJyk7XG4gIHJldHVybiBbXG4gICAgeyBzZWxlY3RvcjogJ1tmb3JtY29udHJvbG5hbWU9XCJ1c2VyTmFtZVwiXScsIHZhbHVlOiBjcmVkZW50aWFscy51c2VybmFtZSB9LFxuICAgIHsgc2VsZWN0b3I6ICdbZm9ybWNvbnRyb2xuYW1lPVwicGFzc3dvcmRcIl0nLCB2YWx1ZTogY3JlZGVudGlhbHMucGFzc3dvcmQgfSxcbiAgXTtcbn1cblxuZnVuY3Rpb24gY29udmVydFBhcnNlZERhdGFUb1RyYW5zYWN0aW9ucyhcbiAgZGF0YTogQ2FyZFRyYW5zYWN0aW9uRGV0YWlsc1tdLFxuICBwZW5kaW5nRGF0YT86IENhcmRQZW5kaW5nVHJhbnNhY3Rpb25EZXRhaWxzIHwgbnVsbCxcbik6IFRyYW5zYWN0aW9uW10ge1xuICBjb25zdCBwZW5kaW5nVHJhbnNhY3Rpb25zID0gcGVuZGluZ0RhdGE/LnJlc3VsdFxuICAgID8gcGVuZGluZ0RhdGEucmVzdWx0LmNhcmRzTGlzdC5mbGF0TWFwKGNhcmQgPT4gY2FyZC5hdXRoRGV0YWxpc0xpc3QpXG4gICAgOiBbXTtcblxuICBjb25zdCBiYW5rQWNjb3VudHMgPSBkYXRhLmZsYXRNYXAobW9udGhEYXRhID0+IG1vbnRoRGF0YS5yZXN1bHQuYmFua0FjY291bnRzKTtcbiAgY29uc3QgcmVndWxhckRlYml0RGF5cyA9IGJhbmtBY2NvdW50cy5mbGF0TWFwKGFjY291bnRzID0+IGFjY291bnRzLmRlYml0RGF0ZXMpO1xuICBjb25zdCBpbW1lZGlhdGVEZWJpdERheXMgPSBiYW5rQWNjb3VudHMuZmxhdE1hcChhY2NvdW50cyA9PiBhY2NvdW50cy5pbW1pZGlhdGVEZWJpdHMuZGViaXREYXlzKTtcbiAgY29uc3QgY29tcGxldGVkVHJhbnNhY3Rpb25zID0gWy4uLnJlZ3VsYXJEZWJpdERheXMsIC4uLmltbWVkaWF0ZURlYml0RGF5c10uZmxhdE1hcChcbiAgICBkZWJpdERhdGUgPT4gZGViaXREYXRlLnRyYW5zYWN0aW9ucyxcbiAgKTtcblxuICBjb25zdCBhbGw6IChTY3JhcGVkVHJhbnNhY3Rpb24gfCBTY3JhcGVkUGVuZGluZ1RyYW5zYWN0aW9uKVtdID0gWy4uLnBlbmRpbmdUcmFuc2FjdGlvbnMsIC4uLmNvbXBsZXRlZFRyYW5zYWN0aW9uc107XG5cbiAgcmV0dXJuIGFsbC5tYXAodHJhbnNhY3Rpb24gPT4ge1xuICAgIGNvbnN0IG51bU9mUGF5bWVudHMgPSBpc1BlbmRpbmcodHJhbnNhY3Rpb24pID8gdHJhbnNhY3Rpb24ubnVtYmVyT2ZQYXltZW50cyA6IHRyYW5zYWN0aW9uLm51bU9mUGF5bWVudHM7XG4gICAgY29uc3QgaW5zdGFsbG1lbnRzID0gbnVtT2ZQYXltZW50c1xuICAgICAgPyB7XG4gICAgICAgICAgbnVtYmVyOiBpc1BlbmRpbmcodHJhbnNhY3Rpb24pID8gMSA6IHRyYW5zYWN0aW9uLmN1clBheW1lbnROdW0sXG4gICAgICAgICAgdG90YWw6IG51bU9mUGF5bWVudHMsXG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZGF0ZSA9IG1vbWVudCh0cmFuc2FjdGlvbi50cm5QdXJjaGFzZURhdGUpO1xuXG4gICAgY29uc3QgY2hhcmdlZEFtb3VudCA9IChpc1BlbmRpbmcodHJhbnNhY3Rpb24pID8gdHJhbnNhY3Rpb24udHJuQW10IDogdHJhbnNhY3Rpb24uYW10QmVmb3JlQ29udkFuZEluZGV4KSAqIC0xO1xuICAgIGNvbnN0IG9yaWdpbmFsQW1vdW50ID0gdHJhbnNhY3Rpb24udHJuQW10ICogKHRyYW5zYWN0aW9uLnRyblR5cGVDb2RlID09PSBUcm5UeXBlQ29kZS5jcmVkaXQgPyAxIDogLTEpO1xuXG4gICAgY29uc3QgcmVzdWx0OiBUcmFuc2FjdGlvbiA9IHtcbiAgICAgIGlkZW50aWZpZXI6ICFpc1BlbmRpbmcodHJhbnNhY3Rpb24pID8gdHJhbnNhY3Rpb24udHJuSW50SWQgOiB1bmRlZmluZWQsXG4gICAgICB0eXBlOiBbVHJuVHlwZUNvZGUucmVndWxhciwgVHJuVHlwZUNvZGUuc3RhbmRpbmdPcmRlcl0uaW5jbHVkZXModHJhbnNhY3Rpb24udHJuVHlwZUNvZGUpXG4gICAgICAgID8gVHJhbnNhY3Rpb25UeXBlcy5Ob3JtYWxcbiAgICAgICAgOiBUcmFuc2FjdGlvblR5cGVzLkluc3RhbGxtZW50cyxcbiAgICAgIHN0YXR1czogaXNQZW5kaW5nKHRyYW5zYWN0aW9uKSA/IFRyYW5zYWN0aW9uU3RhdHVzZXMuUGVuZGluZyA6IFRyYW5zYWN0aW9uU3RhdHVzZXMuQ29tcGxldGVkLFxuICAgICAgZGF0ZTogaW5zdGFsbG1lbnRzID8gZGF0ZS5hZGQoaW5zdGFsbG1lbnRzLm51bWJlciAtIDEsICdtb250aCcpLnRvSVNPU3RyaW5nKCkgOiBkYXRlLnRvSVNPU3RyaW5nKCksXG4gICAgICBwcm9jZXNzZWREYXRlOiBpc1BlbmRpbmcodHJhbnNhY3Rpb24pID8gZGF0ZS50b0lTT1N0cmluZygpIDogbmV3IERhdGUodHJhbnNhY3Rpb24uZGViQ3JkRGF0ZSkudG9JU09TdHJpbmcoKSxcbiAgICAgIG9yaWdpbmFsQW1vdW50LFxuICAgICAgb3JpZ2luYWxDdXJyZW5jeTogdHJhbnNhY3Rpb24udHJuQ3VycmVuY3lTeW1ib2wsXG4gICAgICBjaGFyZ2VkQW1vdW50LFxuICAgICAgY2hhcmdlZEN1cnJlbmN5OiAhaXNQZW5kaW5nKHRyYW5zYWN0aW9uKSA/IHRyYW5zYWN0aW9uLmRlYkNyZEN1cnJlbmN5U3ltYm9sIDogdW5kZWZpbmVkLFxuICAgICAgZGVzY3JpcHRpb246IHRyYW5zYWN0aW9uLm1lcmNoYW50TmFtZSxcbiAgICAgIG1lbW86IHRyYW5zYWN0aW9uLnRyYW5zVHlwZUNvbW1lbnREZXRhaWxzLnRvU3RyaW5nKCksXG4gICAgICBjYXRlZ29yeTogdHJhbnNhY3Rpb24uYnJhbmNoQ29kZURlc2MsXG4gICAgfTtcblxuICAgIGlmIChpbnN0YWxsbWVudHMpIHtcbiAgICAgIHJlc3VsdC5pbnN0YWxsbWVudHMgPSBpbnN0YWxsbWVudHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbnR5cGUgU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMgPSB7IHVzZXJuYW1lOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfTtcblxuY2xhc3MgVmlzYUNhbFNjcmFwZXIgZXh0ZW5kcyBCYXNlU2NyYXBlcldpdGhCcm93c2VyPFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzPiB7XG4gIHByaXZhdGUgYXV0aG9yaXphdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgYXV0aFJlcXVlc3RQcm9taXNlOiBQcm9taXNlPEhUVFBSZXF1ZXN0IHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZDtcblxuICBvcGVuTG9naW5Qb3B1cCA9IGFzeW5jICgpID0+IHtcbiAgICBkZWJ1Zygnb3BlbiBsb2dpbiBwb3B1cCwgd2FpdCB1bnRpbCBsb2dpbiBidXR0b24gYXZhaWxhYmxlJyk7XG4gICAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKHRoaXMucGFnZSwgJyNjY0xvZ2luRGVza3RvcEJ0bicsIHRydWUpO1xuICAgIGRlYnVnKCdjbGljayBvbiB0aGUgbG9naW4gYnV0dG9uJyk7XG4gICAgYXdhaXQgY2xpY2tCdXR0b24odGhpcy5wYWdlLCAnI2NjTG9naW5EZXNrdG9wQnRuJyk7XG4gICAgZGVidWcoJ2dldCB0aGUgZnJhbWUgdGhhdCBob2xkcyB0aGUgbG9naW4nKTtcbiAgICBjb25zdCBmcmFtZSA9IGF3YWl0IGdldExvZ2luRnJhbWUodGhpcy5wYWdlKTtcbiAgICBkZWJ1Zygnd2FpdCB1bnRpbCB0aGUgcGFzc3dvcmQgbG9naW4gdGFiIGhlYWRlciBpcyBhdmFpbGFibGUnKTtcbiAgICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQoZnJhbWUsICcjcmVndWxhci1sb2dpbicpO1xuICAgIGRlYnVnKCduYXZpZ2F0ZSB0byB0aGUgcGFzc3dvcmQgbG9naW4gdGFiJyk7XG4gICAgYXdhaXQgY2xpY2tCdXR0b24oZnJhbWUsICcjcmVndWxhci1sb2dpbicpO1xuICAgIGRlYnVnKCd3YWl0IHVudGlsIHRoZSBwYXNzd29yZCBsb2dpbiB0YWIgaXMgYWN0aXZlJyk7XG4gICAgYXdhaXQgd2FpdFVudGlsRWxlbWVudEZvdW5kKGZyYW1lLCAncmVndWxhci1sb2dpbicpO1xuXG4gICAgcmV0dXJuIGZyYW1lO1xuICB9O1xuXG4gIGFzeW5jIGdldENhcmRzKCkge1xuICAgIGNvbnN0IGluaXREYXRhID0gYXdhaXQgd2FpdFVudGlsKFxuICAgICAgKCkgPT4gZ2V0RnJvbVNlc3Npb25TdG9yYWdlPEluaXRSZXNwb25zZT4odGhpcy5wYWdlLCAnaW5pdCcpLFxuICAgICAgJ2dldCBpbml0IGRhdGEgaW4gc2Vzc2lvbiBzdG9yYWdlJyxcbiAgICAgIDEwMDAwLFxuICAgICAgMTAwMCxcbiAgICApO1xuICAgIGlmICghaW5pdERhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IGZpbmQgXCJpbml0XCIgZGF0YSBpbiBzZXNzaW9uIHN0b3JhZ2UnKTtcbiAgICB9XG4gICAgcmV0dXJuIGluaXREYXRhPy5yZXN1bHQuY2FyZHMubWFwKCh7IGNhcmRVbmlxdWVJZCwgbGFzdDREaWdpdHMgfSkgPT4gKHsgY2FyZFVuaXF1ZUlkLCBsYXN0NERpZ2l0cyB9KSk7XG4gIH1cblxuICBhc3luYyBnZXRBdXRob3JpemF0aW9uSGVhZGVyKCkge1xuICAgIGlmICghdGhpcy5hdXRob3JpemF0aW9uKSB7XG4gICAgICBkZWJ1ZygnZmV0Y2hpbmcgYXV0aG9yaXphdGlvbiBoZWFkZXInKTtcbiAgICAgIGNvbnN0IGF1dGhNb2R1bGUgPSBhd2FpdCB3YWl0VW50aWwoXG4gICAgICAgIGFzeW5jICgpID0+IGF1dGhNb2R1bGVPclVuZGVmaW5lZChhd2FpdCBnZXRGcm9tU2Vzc2lvblN0b3JhZ2U8QXV0aE1vZHVsZT4odGhpcy5wYWdlLCAnYXV0aC1tb2R1bGUnKSksXG4gICAgICAgICdnZXQgYXV0aG9yaXphdGlvbiBoZWFkZXIgd2l0aCB2YWxpZCB0b2tlbiBpbiBzZXNzaW9uIHN0b3JhZ2UnLFxuICAgICAgICAxMF8wMDAsXG4gICAgICAgIDUwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBgQ0FMQXV0aFNjaGVtZSAke2F1dGhNb2R1bGUuYXV0aC5jYWxDb25uZWN0VG9rZW59YDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXV0aG9yaXphdGlvbjtcbiAgfVxuXG4gIGFzeW5jIGdldFhTaXRlSWQoKSB7XG4gICAgLypcbiAgICAgIEkgZG9uJ3Qga25vdyBpZiB0aGUgY29uc3RhbnQgYmVsb3cgd2lsbCBjaGFuZ2UgaW4gdGhlIGZlYXR1cmUuXG4gICAgICBJZiBzbywgdXNlIHRoZSBuZXh0IGNvZGU6XG5cbiAgICAgIHJldHVybiB0aGlzLnBhZ2UuZXZhbHVhdGUoKCkgPT4gbmV3IFV0KCkueFNpdGVJZCk7XG5cbiAgICAgIFRvIGdldCB0aGUgY2xhc3NuYW1lIHNlYXJjaCBmb3IgJ3hTaXRlSWQnIGluIHRoZSBwYWdlIHNvdXJjZVxuICAgICAgY2xhc3MgVXQge1xuICAgICAgICBjb25zdHJ1Y3RvcihfZSwgb24sIHluKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlID0gX2UsXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IG9uLFxuICAgICAgICAgICAgdGhpcy5ldmVudEJ1c1NlcnZpY2UgPSB5bixcbiAgICAgICAgICAgIHRoaXMueFNpdGVJZCA9IFwiMDkwMzE5ODctMjczRS0yMzExLTkwNkMtOEFGODVCMTdDOEQ5XCIsXG4gICAgKi9cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCcwOTAzMTk4Ny0yNzNFLTIzMTEtOTA2Qy04QUY4NUIxN0M4RDknKTtcbiAgfVxuXG4gIGdldExvZ2luT3B0aW9ucyhjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpOiBMb2dpbk9wdGlvbnMge1xuICAgIHRoaXMuYXV0aFJlcXVlc3RQcm9taXNlID0gdGhpcy5wYWdlXG4gICAgICAud2FpdEZvclJlcXVlc3QoU1NPX0FVVEhPUklaQVRJT05fUkVRVUVTVF9FTkRQT0lOVCwgeyB0aW1lb3V0OiAxMF8wMDAgfSlcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgZGVidWcoJ2Vycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0b2tlbiByZXF1ZXN0JywgZSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgbG9naW5Vcmw6IGAke0xPR0lOX1VSTH1gLFxuICAgICAgZmllbGRzOiBjcmVhdGVMb2dpbkZpZWxkcyhjcmVkZW50aWFscyksXG4gICAgICBzdWJtaXRCdXR0b25TZWxlY3RvcjogJ2J1dHRvblt0eXBlPVwic3VibWl0XCJdJyxcbiAgICAgIHBvc3NpYmxlUmVzdWx0czogZ2V0UG9zc2libGVMb2dpblJlc3VsdHMoKSxcbiAgICAgIGNoZWNrUmVhZGluZXNzOiBhc3luYyAoKSA9PiB3YWl0VW50aWxFbGVtZW50Rm91bmQodGhpcy5wYWdlLCAnI2NjTG9naW5EZXNrdG9wQnRuJyksXG4gICAgICBwcmVBY3Rpb246IHRoaXMub3BlbkxvZ2luUG9wdXAsXG4gICAgICBwb3N0QWN0aW9uOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgd2FpdEZvck5hdmlnYXRpb24odGhpcy5wYWdlKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gYXdhaXQgZ2V0Q3VycmVudFVybCh0aGlzLnBhZ2UpO1xuICAgICAgICAgIGlmIChjdXJyZW50VXJsLmVuZHNXaXRoKCdzaXRlLXR1dG9yaWFsJykpIHtcbiAgICAgICAgICAgIGF3YWl0IGNsaWNrQnV0dG9uKHRoaXMucGFnZSwgJ2J1dHRvbi5idG4tY2xvc2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHRoaXMuYXV0aFJlcXVlc3RQcm9taXNlO1xuICAgICAgICAgIHRoaXMuYXV0aG9yaXphdGlvbiA9IFN0cmluZyhyZXF1ZXN0Py5oZWFkZXJzKCkuYXV0aG9yaXphdGlvbiB8fCAnJykudHJpbSgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFVybCA9IGF3YWl0IGdldEN1cnJlbnRVcmwodGhpcy5wYWdlKTtcbiAgICAgICAgICBpZiAoY3VycmVudFVybC5lbmRzV2l0aCgnZGFzaGJvYXJkJykpIHJldHVybjtcbiAgICAgICAgICBjb25zdCByZXF1aXJlc0NoYW5nZVBhc3N3b3JkID0gYXdhaXQgaGFzQ2hhbmdlUGFzc3dvcmRGb3JtKHRoaXMucGFnZSk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQ2hhbmdlUGFzc3dvcmQpIHJldHVybjtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdXNlckFnZW50OiBhcGlIZWFkZXJzWydVc2VyLUFnZW50J10sXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRGF0YSgpOiBQcm9taXNlPFNjcmFwZXJTY3JhcGluZ1Jlc3VsdD4ge1xuICAgIGNvbnN0IGRlZmF1bHRTdGFydE1vbWVudCA9IG1vbWVudCgpLnN1YnRyYWN0KDEsICd5ZWFycycpLnN1YnRyYWN0KDYsICdtb250aHMnKS5hZGQoMSwgJ2RheScpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMub3B0aW9ucy5zdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbW9tZW50Lm1heChkZWZhdWx0U3RhcnRNb21lbnQsIG1vbWVudChzdGFydERhdGUpKTtcbiAgICBkZWJ1ZyhgZmV0Y2ggdHJhbnNhY3Rpb25zIHN0YXJ0aW5nICR7c3RhcnRNb21lbnQuZm9ybWF0KCl9YCk7XG5cbiAgICBjb25zdCBbY2FyZHMsIHhTaXRlSWQsIEF1dGhvcml6YXRpb25dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5nZXRDYXJkcygpLFxuICAgICAgdGhpcy5nZXRYU2l0ZUlkKCksXG4gICAgICB0aGlzLmdldEF1dGhvcml6YXRpb25IZWFkZXIoKSxcbiAgICBdKTtcblxuICAgIGNvbnN0IGZ1dHVyZU1vbnRoc1RvU2NyYXBlID0gdGhpcy5vcHRpb25zLmZ1dHVyZU1vbnRoc1RvU2NyYXBlID8/IDE7XG5cbiAgICBkZWJ1ZygnZmV0Y2ggZnJhbWVzIChtaXNnYXJvdCkgb2YgY2FyZHMnKTtcbiAgICBjb25zdCBmcmFtZXMgPSBhd2FpdCBmZXRjaFBvc3QoXG4gICAgICBGUkFNRVNfUkVRVUVTVF9FTkRQT0lOVCxcbiAgICAgIHsgY2FyZHNGb3JGcmFtZURhdGE6IGNhcmRzLm1hcCgoeyBjYXJkVW5pcXVlSWQgfSkgPT4gKHsgY2FyZFVuaXF1ZUlkIH0pKSB9LFxuICAgICAge1xuICAgICAgICBBdXRob3JpemF0aW9uLFxuICAgICAgICAnWC1TaXRlLUlkJzogeFNpdGVJZCxcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgLi4uYXBpSGVhZGVycyxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IGFjY291bnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjYXJkcy5tYXAoYXN5bmMgY2FyZCA9PiB7XG4gICAgICAgIGNvbnN0IGZpbmFsTW9udGhUb0ZldGNoTW9tZW50ID0gbW9tZW50KCkuYWRkKGZ1dHVyZU1vbnRoc1RvU2NyYXBlLCAnbW9udGgnKTtcbiAgICAgICAgY29uc3QgbW9udGhzID0gZmluYWxNb250aFRvRmV0Y2hNb21lbnQuZGlmZihzdGFydE1vbWVudCwgJ21vbnRocycpO1xuICAgICAgICBjb25zdCBhbGxNb250aHNEYXRhOiBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzW10gPSBbXTtcbiAgICAgICAgY29uc3QgZnJhbWUgPSBfLmZpbmQoZnJhbWVzLnJlc3VsdC5iYW5rSXNzdWVkQ2FyZHMuY2FyZExldmVsRnJhbWVzLCB7IGNhcmRVbmlxdWVJZDogY2FyZC5jYXJkVW5pcXVlSWQgfSk7XG5cbiAgICAgICAgZGVidWcoYGZldGNoIHBlbmRpbmcgdHJhbnNhY3Rpb25zIGZvciBjYXJkICR7Y2FyZC5jYXJkVW5pcXVlSWR9YCk7XG4gICAgICAgIGxldCBwZW5kaW5nRGF0YSA9IGF3YWl0IGZldGNoUG9zdChcbiAgICAgICAgICBQRU5ESU5HX1RSQU5TQUNUSU9OU19SRVFVRVNUX0VORFBPSU5ULFxuICAgICAgICAgIHsgY2FyZFVuaXF1ZUlEQXJyYXk6IFtjYXJkLmNhcmRVbmlxdWVJZF0gfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uLFxuICAgICAgICAgICAgJ1gtU2l0ZS1JZCc6IHhTaXRlSWQsXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgLi4uYXBpSGVhZGVycyxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuXG4gICAgICAgIGRlYnVnKGBmZXRjaCBjb21wbGV0ZWQgdHJhbnNhY3Rpb25zIGZvciBjYXJkICR7Y2FyZC5jYXJkVW5pcXVlSWR9YCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IG1vbnRoczsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgbW9udGggPSBmaW5hbE1vbnRoVG9GZXRjaE1vbWVudC5jbG9uZSgpLnN1YnRyYWN0KGksICdtb250aHMnKTtcbiAgICAgICAgICBjb25zdCBtb250aERhdGEgPSBhd2FpdCBmZXRjaFBvc3QoXG4gICAgICAgICAgICBUUkFOU0FDVElPTlNfUkVRVUVTVF9FTkRQT0lOVCxcbiAgICAgICAgICAgIHsgY2FyZFVuaXF1ZUlkOiBjYXJkLmNhcmRVbmlxdWVJZCwgbW9udGg6IG1vbnRoLmZvcm1hdCgnTScpLCB5ZWFyOiBtb250aC5mb3JtYXQoJ1lZWVknKSB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBdXRob3JpemF0aW9uLFxuICAgICAgICAgICAgICAnWC1TaXRlLUlkJzogeFNpdGVJZCxcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgLi4uYXBpSGVhZGVycyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChtb250aERhdGE/LnN0YXR1c0NvZGUgIT09IDEpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBmYWlsZWQgdG8gZmV0Y2ggdHJhbnNhY3Rpb25zIGZvciBjYXJkICR7Y2FyZC5sYXN0NERpZ2l0c30uIE1lc3NhZ2U6ICR7bW9udGhEYXRhPy50aXRsZSB8fCAnJ31gLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghaXNDYXJkVHJhbnNhY3Rpb25EZXRhaWxzKG1vbnRoRGF0YSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbW9udGhEYXRhIGlzIG5vdCBvZiB0eXBlIENhcmRUcmFuc2FjdGlvbkRldGFpbHMnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhbGxNb250aHNEYXRhLnB1c2gobW9udGhEYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwZW5kaW5nRGF0YT8uc3RhdHVzQ29kZSAhPT0gMSAmJiBwZW5kaW5nRGF0YT8uc3RhdHVzQ29kZSAhPT0gOTYpIHtcbiAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgIGBmYWlsZWQgdG8gZmV0Y2ggcGVuZGluZyB0cmFuc2FjdGlvbnMgZm9yIGNhcmQgJHtjYXJkLmxhc3Q0RGlnaXRzfS4gTWVzc2FnZTogJHtwZW5kaW5nRGF0YT8udGl0bGUgfHwgJyd9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHBlbmRpbmdEYXRhID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICghaXNDYXJkUGVuZGluZ1RyYW5zYWN0aW9uRGV0YWlscyhwZW5kaW5nRGF0YSkpIHtcbiAgICAgICAgICBkZWJ1ZygncGVuZGluZ0RhdGEgaXMgbm90IG9mIHR5cGUgQ2FyZFRyYW5zYWN0aW9uRGV0YWlscycpO1xuICAgICAgICAgIHBlbmRpbmdEYXRhID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9ucyA9IGNvbnZlcnRQYXJzZWREYXRhVG9UcmFuc2FjdGlvbnMoYWxsTW9udGhzRGF0YSwgcGVuZGluZ0RhdGEpO1xuXG4gICAgICAgIGRlYnVnKCdmaWx0ZXIgb3V0IG9sZCB0cmFuc2FjdGlvbnMnKTtcbiAgICAgICAgY29uc3QgdHhucyA9XG4gICAgICAgICAgKHRoaXMub3B0aW9ucy5vdXRwdXREYXRhPy5lbmFibGVUcmFuc2FjdGlvbnNGaWx0ZXJCeURhdGUgPz8gdHJ1ZSlcbiAgICAgICAgICAgID8gZmlsdGVyT2xkVHJhbnNhY3Rpb25zKHRyYW5zYWN0aW9ucywgbW9tZW50KHN0YXJ0RGF0ZSksIHRoaXMub3B0aW9ucy5jb21iaW5lSW5zdGFsbG1lbnRzIHx8IGZhbHNlKVxuICAgICAgICAgICAgOiB0cmFuc2FjdGlvbnM7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eG5zLFxuICAgICAgICAgIGJhbGFuY2U6IC1mcmFtZT8ubmV4dFRvdGFsRGViaXQsXG4gICAgICAgICAgYWNjb3VudE51bWJlcjogY2FyZC5sYXN0NERpZ2l0cyxcbiAgICAgICAgfSBhcyBUcmFuc2FjdGlvbnNBY2NvdW50O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGRlYnVnKCdyZXR1cm4gdGhlIHNjcmFwZWQgYWNjb3VudHMnKTtcblxuICAgIGRlYnVnKEpTT04uc3RyaW5naWZ5KGFjY291bnRzLCBudWxsLCAyKSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBhY2NvdW50cyxcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpc2FDYWxTY3JhcGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxxQkFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sYUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsY0FBQSxHQUFBUixPQUFBO0FBQ0Es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
|
|
318
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGVidWciLCJfZWxlbWVudHNJbnRlcmFjdGlvbnMiLCJfZmV0Y2giLCJfbmF2aWdhdGlvbiIsIl9zdG9yYWdlIiwiX3RyYW5zYWN0aW9ucyIsIl93YWl0aW5nIiwiX3RyYW5zYWN0aW9uczIiLCJfYmFzZVNjcmFwZXJXaXRoQnJvd3NlciIsIl9sb2Rhc2giLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJhcGlIZWFkZXJzIiwiT3JpZ2luIiwiUmVmZXJlciIsIkxPR0lOX1VSTCIsIlRSQU5TQUNUSU9OU19SRVFVRVNUX0VORFBPSU5UIiwiRlJBTUVTX1JFUVVFU1RfRU5EUE9JTlQiLCJQRU5ESU5HX1RSQU5TQUNUSU9OU19SRVFVRVNUX0VORFBPSU5UIiwiU1NPX0FVVEhPUklaQVRJT05fUkVRVUVTVF9FTkRQT0lOVCIsIkludmFsaWRQYXNzd29yZE1lc3NhZ2UiLCJkZWJ1ZyIsImdldERlYnVnIiwiVHJuVHlwZUNvZGUiLCJpc0F1dGhNb2R1bGUiLCJyZXN1bHQiLCJCb29sZWFuIiwiYXV0aCIsImNhbENvbm5lY3RUb2tlbiIsIlN0cmluZyIsInRyaW0iLCJhdXRoTW9kdWxlT3JVbmRlZmluZWQiLCJ1bmRlZmluZWQiLCJpc1BlbmRpbmciLCJ0cmFuc2FjdGlvbiIsImRlYkNyZERhdGUiLCJpc0NhcmRUcmFuc2FjdGlvbkRldGFpbHMiLCJpc0NhcmRQZW5kaW5nVHJhbnNhY3Rpb25EZXRhaWxzIiwiZ2V0TG9naW5GcmFtZSIsInBhZ2UiLCJmcmFtZSIsIndhaXRVbnRpbCIsImZyYW1lcyIsImZpbmQiLCJmIiwidXJsIiwiaW5jbHVkZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsIkVycm9yIiwiaGFzSW52YWxpZFBhc3N3b3JkRXJyb3IiLCJlcnJvckZvdW5kIiwiZWxlbWVudFByZXNlbnRPblBhZ2UiLCJlcnJvck1lc3NhZ2UiLCJwYWdlRXZhbCIsIml0ZW0iLCJpbm5lclRleHQiLCJoYXNDaGFuZ2VQYXNzd29yZEZvcm0iLCJnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cyIsInVybHMiLCJMb2dpblJlc3VsdHMiLCJTdWNjZXNzIiwiSW52YWxpZFBhc3N3b3JkIiwib3B0aW9ucyIsIkNoYW5nZVBhc3N3b3JkIiwiY3JlYXRlTG9naW5GaWVsZHMiLCJjcmVkZW50aWFscyIsInNlbGVjdG9yIiwidmFsdWUiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwiY29udmVydFBhcnNlZERhdGFUb1RyYW5zYWN0aW9ucyIsImRhdGEiLCJwZW5kaW5nRGF0YSIsInBlbmRpbmdUcmFuc2FjdGlvbnMiLCJjYXJkc0xpc3QiLCJmbGF0TWFwIiwiY2FyZCIsImF1dGhEZXRhbGlzTGlzdCIsImJhbmtBY2NvdW50cyIsIm1vbnRoRGF0YSIsInJlZ3VsYXJEZWJpdERheXMiLCJhY2NvdW50cyIsImRlYml0RGF0ZXMiLCJpbW1lZGlhdGVEZWJpdERheXMiLCJpbW1pZGlhdGVEZWJpdHMiLCJkZWJpdERheXMiLCJjb21wbGV0ZWRUcmFuc2FjdGlvbnMiLCJkZWJpdERhdGUiLCJ0cmFuc2FjdGlvbnMiLCJhbGwiLCJtYXAiLCJudW1PZlBheW1lbnRzIiwibnVtYmVyT2ZQYXltZW50cyIsImluc3RhbGxtZW50cyIsIm51bWJlciIsImN1clBheW1lbnROdW0iLCJ0b3RhbCIsImRhdGUiLCJtb21lbnQiLCJ0cm5QdXJjaGFzZURhdGUiLCJjaGFyZ2VkQW1vdW50IiwidHJuQW10IiwiYW10QmVmb3JlQ29udkFuZEluZGV4Iiwib3JpZ2luYWxBbW91bnQiLCJ0cm5UeXBlQ29kZSIsImNyZWRpdCIsImlkZW50aWZpZXIiLCJ0cm5JbnRJZCIsInR5cGUiLCJyZWd1bGFyIiwic3RhbmRpbmdPcmRlciIsIlRyYW5zYWN0aW9uVHlwZXMiLCJOb3JtYWwiLCJJbnN0YWxsbWVudHMiLCJzdGF0dXMiLCJUcmFuc2FjdGlvblN0YXR1c2VzIiwiUGVuZGluZyIsIkNvbXBsZXRlZCIsImFkZCIsInRvSVNPU3RyaW5nIiwicHJvY2Vzc2VkRGF0ZSIsIkRhdGUiLCJvcmlnaW5hbEN1cnJlbmN5IiwidHJuQ3VycmVuY3lTeW1ib2wiLCJjaGFyZ2VkQ3VycmVuY3kiLCJkZWJDcmRDdXJyZW5jeVN5bWJvbCIsImRlc2NyaXB0aW9uIiwibWVyY2hhbnROYW1lIiwibWVtbyIsInRyYW5zVHlwZUNvbW1lbnREZXRhaWxzIiwidG9TdHJpbmciLCJjYXRlZ29yeSIsImJyYW5jaENvZGVEZXNjIiwiVmlzYUNhbFNjcmFwZXIiLCJCYXNlU2NyYXBlcldpdGhCcm93c2VyIiwiYXV0aG9yaXphdGlvbiIsIm9wZW5Mb2dpblBvcHVwIiwid2FpdFVudGlsRWxlbWVudEZvdW5kIiwiY2xpY2tCdXR0b24iLCJnZXRDYXJkcyIsImluaXREYXRhIiwiZ2V0RnJvbVNlc3Npb25TdG9yYWdlIiwiY2FyZHMiLCJjYXJkVW5pcXVlSWQiLCJsYXN0NERpZ2l0cyIsImdldEF1dGhvcml6YXRpb25IZWFkZXIiLCJhdXRoTW9kdWxlIiwiZ2V0WFNpdGVJZCIsImdldExvZ2luT3B0aW9ucyIsImF1dGhSZXF1ZXN0UHJvbWlzZSIsIndhaXRGb3JSZXF1ZXN0IiwidGltZW91dCIsImNhdGNoIiwibG9naW5VcmwiLCJmaWVsZHMiLCJzdWJtaXRCdXR0b25TZWxlY3RvciIsInBvc3NpYmxlUmVzdWx0cyIsImNoZWNrUmVhZGluZXNzIiwicHJlQWN0aW9uIiwicG9zdEFjdGlvbiIsIndhaXRGb3JOYXZpZ2F0aW9uIiwiY3VycmVudFVybCIsImdldEN1cnJlbnRVcmwiLCJlbmRzV2l0aCIsInJlcXVlc3QiLCJoZWFkZXJzIiwicmVxdWlyZXNDaGFuZ2VQYXNzd29yZCIsInVzZXJBZ2VudCIsImZldGNoRGF0YSIsImRlZmF1bHRTdGFydE1vbWVudCIsInN1YnRyYWN0Iiwic3RhcnREYXRlIiwidG9EYXRlIiwic3RhcnRNb21lbnQiLCJtYXgiLCJmb3JtYXQiLCJ4U2l0ZUlkIiwiQXV0aG9yaXphdGlvbiIsImZ1dHVyZU1vbnRoc1RvU2NyYXBlIiwiZmV0Y2hQb3N0IiwiY2FyZHNGb3JGcmFtZURhdGEiLCJmaW5hbE1vbnRoVG9GZXRjaE1vbWVudCIsIm1vbnRocyIsImRpZmYiLCJhbGxNb250aHNEYXRhIiwiXyIsImJhbmtJc3N1ZWRDYXJkcyIsImNhcmRMZXZlbEZyYW1lcyIsImNhcmRVbmlxdWVJREFycmF5IiwiaSIsIm1vbnRoIiwiY2xvbmUiLCJ5ZWFyIiwic3RhdHVzQ29kZSIsInRpdGxlIiwicHVzaCIsInR4bnMiLCJvdXRwdXREYXRhIiwiZW5hYmxlVHJhbnNhY3Rpb25zRmlsdGVyQnlEYXRlIiwiZmlsdGVyT2xkVHJhbnNhY3Rpb25zIiwiY29tYmluZUluc3RhbGxtZW50cyIsImJhbGFuY2UiLCJpc051bWJlciIsIm5leHRUb3RhbERlYml0IiwiYWNjb3VudE51bWJlciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdWNjZXNzIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmFwZXJzL3Zpc2EtY2FsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IHR5cGUgSFRUUFJlcXVlc3QsIHR5cGUgRnJhbWUsIHR5cGUgUGFnZSB9IGZyb20gJ3B1cHBldGVlcic7XG5pbXBvcnQgeyBnZXREZWJ1ZyB9IGZyb20gJy4uL2hlbHBlcnMvZGVidWcnO1xuaW1wb3J0IHsgY2xpY2tCdXR0b24sIGVsZW1lbnRQcmVzZW50T25QYWdlLCBwYWdlRXZhbCwgd2FpdFVudGlsRWxlbWVudEZvdW5kIH0gZnJvbSAnLi4vaGVscGVycy9lbGVtZW50cy1pbnRlcmFjdGlvbnMnO1xuaW1wb3J0IHsgZmV0Y2hQb3N0IH0gZnJvbSAnLi4vaGVscGVycy9mZXRjaCc7XG5pbXBvcnQgeyBnZXRDdXJyZW50VXJsLCB3YWl0Rm9yTmF2aWdhdGlvbiB9IGZyb20gJy4uL2hlbHBlcnMvbmF2aWdhdGlvbic7XG5pbXBvcnQgeyBnZXRGcm9tU2Vzc2lvblN0b3JhZ2UgfSBmcm9tICcuLi9oZWxwZXJzL3N0b3JhZ2UnO1xuaW1wb3J0IHsgZmlsdGVyT2xkVHJhbnNhY3Rpb25zIH0gZnJvbSAnLi4vaGVscGVycy90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgd2FpdFVudGlsIH0gZnJvbSAnLi4vaGVscGVycy93YWl0aW5nJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uU3RhdHVzZXMsIFRyYW5zYWN0aW9uVHlwZXMsIHR5cGUgVHJhbnNhY3Rpb24sIHR5cGUgVHJhbnNhY3Rpb25zQWNjb3VudCB9IGZyb20gJy4uL3RyYW5zYWN0aW9ucyc7XG5pbXBvcnQgeyBCYXNlU2NyYXBlcldpdGhCcm93c2VyLCBMb2dpblJlc3VsdHMsIHR5cGUgTG9naW5PcHRpb25zIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXItd2l0aC1icm93c2VyJztcbmltcG9ydCB7IHR5cGUgU2NyYXBlclNjcmFwaW5nUmVzdWx0IH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuY29uc3QgYXBpSGVhZGVycyA9IHtcbiAgJ1VzZXItQWdlbnQnOlxuICAgICdNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBJbnRlbCBNYWMgT1MgWCAxMF8xNV83KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTQyLjAuMC4wIFNhZmFyaS81MzcuMzYnLFxuICBPcmlnaW46ICdodHRwczovL2RpZ2l0YWwtd2ViLmNhbC1vbmxpbmUuY28uaWwnLFxuICBSZWZlcmVyOiAnaHR0cHM6Ly9kaWdpdGFsLXdlYi5jYWwtb25saW5lLmNvLmlsJyxcbiAgJ0FjY2VwdC1MYW5ndWFnZSc6ICdoZS1JTCxoZTtxPTAuOSxlbi1VUztxPTAuOCxlbjtxPTAuNycsXG4gICdTZWMtRmV0Y2gtU2l0ZSc6ICdzYW1lLXNpdGUnLFxuICAnU2VjLUZldGNoLU1vZGUnOiAnY29ycycsXG4gICdTZWMtRmV0Y2gtRGVzdCc6ICdlbXB0eScsXG59O1xuY29uc3QgTE9HSU5fVVJMID0gJ2h0dHBzOi8vd3d3LmNhbC1vbmxpbmUuY28uaWwvJztcbmNvbnN0IFRSQU5TQUNUSU9OU19SRVFVRVNUX0VORFBPSU5UID1cbiAgJ2h0dHBzOi8vYXBpLmNhbC1vbmxpbmUuY28uaWwvVHJhbnNhY3Rpb25zL2FwaS90cmFuc2FjdGlvbnNEZXRhaWxzL2dldENhcmRUcmFuc2FjdGlvbnNEZXRhaWxzJztcbmNvbnN0IEZSQU1FU19SRVFVRVNUX0VORFBPSU5UID0gJ2h0dHBzOi8vYXBpLmNhbC1vbmxpbmUuY28uaWwvRnJhbWVzL2FwaS9GcmFtZXMvR2V0RnJhbWVTdGF0dXMnO1xuY29uc3QgUEVORElOR19UUkFOU0FDVElPTlNfUkVRVUVTVF9FTkRQT0lOVCA9XG4gICdodHRwczovL2FwaS5jYWwtb25saW5lLmNvLmlsL1RyYW5zYWN0aW9ucy9hcGkvYXBwcm92YWxzL2dldENsZWFyYW5jZVJlcXVlc3RzJztcbmNvbnN0IFNTT19BVVRIT1JJWkFUSU9OX1JFUVVFU1RfRU5EUE9JTlQgPSAnaHR0cHM6Ly9jb25uZWN0LmNhbC1vbmxpbmUuY28uaWwvY29sLXJlc3QvY2FsY29ubmVjdC9hdXRoZW50aWNhdGlvbi9TU08nO1xuXG5jb25zdCBJbnZhbGlkUGFzc3dvcmRNZXNzYWdlID0gJ9ep150g15TXntep16rXntepINeQ15Ug15TXodeZ16HXnteUINep15TXldeW16DXlSDXqdeS15XXmdeZ150nO1xuXG5jb25zdCBkZWJ1ZyA9IGdldERlYnVnKCd2aXNhLWNhbCcpO1xuXG5lbnVtIFRyblR5cGVDb2RlIHtcbiAgcmVndWxhciA9ICc1JyxcbiAgY3JlZGl0ID0gJzYnLFxuICBpbnN0YWxsbWVudHMgPSAnOCcsXG4gIHN0YW5kaW5nT3JkZXIgPSAnOScsXG59XG5cbmludGVyZmFjZSBTY3JhcGVkVHJhbnNhY3Rpb24ge1xuICBhbXRCZWZvcmVDb252QW5kSW5kZXg6IG51bWJlcjtcbiAgYnJhbmNoQ29kZURlc2M6IHN0cmluZztcbiAgY2FzaEFjY01hbmFnZXJOYW1lOiBudWxsO1xuICBjYXNoQWNjb3VudE1hbmFnZXI6IG51bGw7XG4gIGNhc2hBY2NvdW50VHJuQW10OiBudW1iZXI7XG4gIGNoYXJnZUV4dGVybmFsVG9DYXJkQ29tbWVudDogc3RyaW5nO1xuICBjb21tZW50czogW107XG4gIGN1clBheW1lbnROdW06IG51bWJlcjtcbiAgZGViQ3JkQ3VycmVuY3lTeW1ib2w6IEN1cnJlbmN5U3ltYm9sO1xuICBkZWJDcmREYXRlOiBzdHJpbmc7XG4gIGRlYml0U3ByZWFkSW5kOiBib29sZWFuO1xuICBkaXNjb3VudEFtb3VudDogdW5rbm93bjtcbiAgZGlzY291bnRSZWFzb246IHVua25vd247XG4gIGltbWVkaWF0ZUNvbW1lbnRzOiBbXTtcbiAgaXNJbW1lZGlhdGVDb21tZW50SW5kOiBib29sZWFuO1xuICBpc0ltbWVkaWF0ZUhIS0luZDogYm9vbGVhbjtcbiAgaXNNYXJnYXJpdGE6IGJvb2xlYW47XG4gIGlzU3ByZWFkUGF5bWVuc3RBYnJvYWQ6IGJvb2xlYW47XG4gIGxpbmtlZENvbW1lbnRzOiBbXTtcbiAgbWVyY2hhbnRBZGRyZXNzOiBzdHJpbmc7XG4gIG1lcmNoYW50TmFtZTogc3RyaW5nO1xuICBtZXJjaGFudFBob25lTm86IHN0cmluZztcbiAgbnVtT2ZQYXltZW50czogbnVtYmVyO1xuICBvbkdvaW5nVHJhbnNhY3Rpb25zQ29tbWVudDogc3RyaW5nO1xuICByZWZ1bmRJbmQ6IGJvb2xlYW47XG4gIHJvdW5kaW5nQW1vdW50OiB1bmtub3duO1xuICByb3VuZGluZ1JlYXNvbjogdW5rbm93bjtcbiAgdG9rZW5JbmQ6IDA7XG4gIHRva2VuTnVtYmVyUGFydDQ6ICcnO1xuICB0cmFuc0NhcmRQcmVzZW50SW5kOiBib29sZWFuO1xuICB0cmFuc1R5cGVDb21tZW50RGV0YWlsczogW107XG4gIHRybkFtdDogbnVtYmVyO1xuICB0cm5DdXJyZW5jeVN5bWJvbDogQ3VycmVuY3lTeW1ib2w7XG4gIHRybkV4YWNXYXk6IG51bWJlcjtcbiAgdHJuSW50SWQ6IHN0cmluZztcbiAgdHJuTnVtYXJldG9yOiBudW1iZXI7XG4gIHRyblB1cmNoYXNlRGF0ZTogc3RyaW5nO1xuICB0cm5UeXBlOiBzdHJpbmc7XG4gIHRyblR5cGVDb2RlOiBUcm5UeXBlQ29kZTtcbiAgd2FsbGV0UHJvdmlkZXJDb2RlOiAwO1xuICB3YWxsZXRQcm92aWRlckRlc2M6ICcnO1xuICBlYXJseVBheW1lbnRJbmQ6IGJvb2xlYW47XG59XG5pbnRlcmZhY2UgU2NyYXBlZFBlbmRpbmdUcmFuc2FjdGlvbiB7XG4gIG1lcmNoYW50SUQ6IHN0cmluZztcbiAgbWVyY2hhbnROYW1lOiBzdHJpbmc7XG4gIHRyblB1cmNoYXNlRGF0ZTogc3RyaW5nO1xuICB3YWxsZXRUcmFuSW5kOiBudW1iZXI7XG4gIHRyYW5zYWN0aW9uc09yaWdpbjogbnVtYmVyO1xuICB0cm5BbXQ6IG51bWJlcjtcbiAgdHBhQXBwcm92YWxBbW91bnQ6IHVua25vd247XG4gIHRybkN1cnJlbmN5U3ltYm9sOiBDdXJyZW5jeVN5bWJvbDtcbiAgdHJuVHlwZUNvZGU6IFRyblR5cGVDb2RlO1xuICB0cm5UeXBlOiBzdHJpbmc7XG4gIGJyYW5jaENvZGVEZXNjOiBzdHJpbmc7XG4gIHRyYW5zQ2FyZFByZXNlbnRJbmQ6IGJvb2xlYW47XG4gIGo1SW5kaWNhdG9yOiBzdHJpbmc7XG4gIG51bWJlck9mUGF5bWVudHM6IG51bWJlcjtcbiAgZmlyc3RQYXltZW50QW1vdW50OiBudW1iZXI7XG4gIHRyYW5zVHlwZUNvbW1lbnREZXRhaWxzOiBbXTtcbn1cbmludGVyZmFjZSBJbml0UmVzcG9uc2Uge1xuICByZXN1bHQ6IHtcbiAgICBjYXJkczoge1xuICAgICAgY2FyZFVuaXF1ZUlkOiBzdHJpbmc7XG4gICAgICBsYXN0NERpZ2l0czogc3RyaW5nO1xuICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICB9W107XG4gIH07XG59XG50eXBlIEN1cnJlbmN5U3ltYm9sID0gc3RyaW5nO1xuaW50ZXJmYWNlIENhcmRUcmFuc2FjdGlvbkRldGFpbHNFcnJvciB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbn1cbmludGVyZmFjZSBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzIGV4dGVuZHMgQ2FyZFRyYW5zYWN0aW9uRGV0YWlsc0Vycm9yIHtcbiAgcmVzdWx0OiB7XG4gICAgYmFua0FjY291bnRzOiB7XG4gICAgICBiYW5rQWNjb3VudE51bTogc3RyaW5nO1xuICAgICAgYmFua05hbWU6IHN0cmluZztcbiAgICAgIGNob2ljZUV4dGVybmFsVHJhbnNhY3Rpb25zOiBhbnk7XG4gICAgICBjdXJyZW50QmFua0FjY291bnRJbmQ6IGJvb2xlYW47XG4gICAgICBkZWJpdERhdGVzOiB7XG4gICAgICAgIGJhc2tldEFtb3VudENvbW1lbnQ6IHVua25vd247XG4gICAgICAgIGNob2ljZUhIS0RlYml0OiBudW1iZXI7XG4gICAgICAgIGRhdGU6IHN0cmluZztcbiAgICAgICAgZGViaXRSZWFzb246IHVua25vd247XG4gICAgICAgIGZpeERlYml0QW1vdW50OiBudW1iZXI7XG4gICAgICAgIGZyb21QdXJjaGFzZURhdGU6IHN0cmluZztcbiAgICAgICAgaXNDaG9pY2VSZXBhaW1lbnQ6IGJvb2xlYW47XG4gICAgICAgIHRvUHVyY2hhc2VEYXRlOiBzdHJpbmc7XG4gICAgICAgIHRvdGFsQmFza2V0QW1vdW50OiBudW1iZXI7XG4gICAgICAgIHRvdGFsRGViaXRzOiB7XG4gICAgICAgICAgY3VycmVuY3lTeW1ib2w6IEN1cnJlbmN5U3ltYm9sO1xuICAgICAgICAgIGFtb3VudDogbnVtYmVyO1xuICAgICAgICB9W107XG4gICAgICAgIHRyYW5zYWN0aW9uczogU2NyYXBlZFRyYW5zYWN0aW9uW107XG4gICAgICB9W107XG4gICAgICBpbW1pZGlhdGVEZWJpdHM6IHsgdG90YWxEZWJpdHM6IFtdOyBkZWJpdERheXM6IFtdIH07XG4gICAgfVtdO1xuICAgIGJsb2NrZWRDYXJkSW5kOiBib29sZWFuO1xuICB9O1xuICBzdGF0dXNDb2RlOiAxO1xuICBzdGF0dXNEZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGF0dXNUaXRsZTogc3RyaW5nO1xufVxuaW50ZXJmYWNlIENhcmRQZW5kaW5nVHJhbnNhY3Rpb25EZXRhaWxzIGV4dGVuZHMgQ2FyZFRyYW5zYWN0aW9uRGV0YWlsc0Vycm9yIHtcbiAgcmVzdWx0OiB7XG4gICAgY2FyZHNMaXN0OiB7XG4gICAgICBjYXJkVW5pcXVlSUQ6IHN0cmluZztcbiAgICAgIGF1dGhEZXRhbGlzTGlzdDogU2NyYXBlZFBlbmRpbmdUcmFuc2FjdGlvbltdO1xuICAgIH1bXTtcbiAgfTtcbiAgc3RhdHVzQ29kZTogMTtcbiAgc3RhdHVzRGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhdHVzVGl0bGU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEF1dGhNb2R1bGUge1xuICBhdXRoOiB7XG4gICAgY2FsQ29ubmVjdFRva2VuOiBzdHJpbmcgfCBudWxsO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpc0F1dGhNb2R1bGUocmVzdWx0OiBhbnkpOiByZXN1bHQgaXMgQXV0aE1vZHVsZSB7XG4gIHJldHVybiBCb29sZWFuKHJlc3VsdD8uYXV0aD8uY2FsQ29ubmVjdFRva2VuICYmIFN0cmluZyhyZXN1bHQuYXV0aC5jYWxDb25uZWN0VG9rZW4pLnRyaW0oKSk7XG59XG5cbmZ1bmN0aW9uIGF1dGhNb2R1bGVPclVuZGVmaW5lZChyZXN1bHQ6IGFueSk6IEF1dGhNb2R1bGUgfCB1bmRlZmluZWQge1xuICByZXR1cm4gaXNBdXRoTW9kdWxlKHJlc3VsdCkgPyByZXN1bHQgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzUGVuZGluZyhcbiAgdHJhbnNhY3Rpb246IFNjcmFwZWRUcmFuc2FjdGlvbiB8IFNjcmFwZWRQZW5kaW5nVHJhbnNhY3Rpb24sXG4pOiB0cmFuc2FjdGlvbiBpcyBTY3JhcGVkUGVuZGluZ1RyYW5zYWN0aW9uIHtcbiAgcmV0dXJuICh0cmFuc2FjdGlvbiBhcyBTY3JhcGVkVHJhbnNhY3Rpb24pLmRlYkNyZERhdGUgPT09IHVuZGVmaW5lZDsgLy8gYW4gYXJiaXRyYXJ5IGZpZWxkIHRoYXQgb25seSBhcHBlYXJzIGluIGEgY29tcGxldGVkIHRyYW5zYWN0aW9uXG59XG5cbmZ1bmN0aW9uIGlzQ2FyZFRyYW5zYWN0aW9uRGV0YWlscyhcbiAgcmVzdWx0OiBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzIHwgQ2FyZFRyYW5zYWN0aW9uRGV0YWlsc0Vycm9yLFxuKTogcmVzdWx0IGlzIENhcmRUcmFuc2FjdGlvbkRldGFpbHMge1xuICByZXR1cm4gKHJlc3VsdCBhcyBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzKS5yZXN1bHQgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaXNDYXJkUGVuZGluZ1RyYW5zYWN0aW9uRGV0YWlscyhcbiAgcmVzdWx0OiBDYXJkUGVuZGluZ1RyYW5zYWN0aW9uRGV0YWlscyB8IENhcmRUcmFuc2FjdGlvbkRldGFpbHNFcnJvcixcbik6IHJlc3VsdCBpcyBDYXJkUGVuZGluZ1RyYW5zYWN0aW9uRGV0YWlscyB7XG4gIHJldHVybiAocmVzdWx0IGFzIENhcmRQZW5kaW5nVHJhbnNhY3Rpb25EZXRhaWxzKS5yZXN1bHQgIT09IHVuZGVmaW5lZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0TG9naW5GcmFtZShwYWdlOiBQYWdlKSB7XG4gIGxldCBmcmFtZTogRnJhbWUgfCBudWxsID0gbnVsbDtcbiAgZGVidWcoJ3dhaXQgdW50aWwgbG9naW4gZnJhbWUgZm91bmQnKTtcbiAgYXdhaXQgd2FpdFVudGlsKFxuICAgICgpID0+IHtcbiAgICAgIGZyYW1lID0gcGFnZS5mcmFtZXMoKS5maW5kKGYgPT4gZi51cmwoKS5pbmNsdWRlcygnY29ubmVjdCcpKSB8fCBudWxsO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSghIWZyYW1lKTtcbiAgICB9LFxuICAgICd3YWl0IGZvciBpZnJhbWUgd2l0aCBsb2dpbiBmb3JtJyxcbiAgICAxMDAwMCxcbiAgICAxMDAwLFxuICApO1xuXG4gIGlmICghZnJhbWUpIHtcbiAgICBkZWJ1ZygnZmFpbGVkIHRvIGZpbmQgbG9naW4gZnJhbWUgZm9yIDEwIHNlY29uZHMnKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byBleHRyYWN0IGxvZ2luIGlmcmFtZScpO1xuICB9XG5cbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYXNJbnZhbGlkUGFzc3dvcmRFcnJvcihwYWdlOiBQYWdlKSB7XG4gIGNvbnN0IGZyYW1lID0gYXdhaXQgZ2V0TG9naW5GcmFtZShwYWdlKTtcbiAgY29uc3QgZXJyb3JGb3VuZCA9IGF3YWl0IGVsZW1lbnRQcmVzZW50T25QYWdlKGZyYW1lLCAnZGl2LmdlbmVyYWwtZXJyb3IgPiBkaXYnKTtcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3JGb3VuZFxuICAgID8gYXdhaXQgcGFnZUV2YWwoZnJhbWUsICdkaXYuZ2VuZXJhbC1lcnJvciA+IGRpdicsICcnLCBpdGVtID0+IHtcbiAgICAgICAgcmV0dXJuIChpdGVtIGFzIEhUTUxEaXZFbGVtZW50KS5pbm5lclRleHQ7XG4gICAgICB9KVxuICAgIDogJyc7XG4gIHJldHVybiBlcnJvck1lc3NhZ2UgPT09IEludmFsaWRQYXNzd29yZE1lc3NhZ2U7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhc0NoYW5nZVBhc3N3b3JkRm9ybShwYWdlOiBQYWdlKSB7XG4gIGNvbnN0IGZyYW1lID0gYXdhaXQgZ2V0TG9naW5GcmFtZShwYWdlKTtcbiAgY29uc3QgZXJyb3JGb3VuZCA9IGF3YWl0IGVsZW1lbnRQcmVzZW50T25QYWdlKGZyYW1lLCAnLmNoYW5nZS1wYXNzd29yZC1zdWJ0aXRsZScpO1xuICByZXR1cm4gZXJyb3JGb3VuZDtcbn1cblxuZnVuY3Rpb24gZ2V0UG9zc2libGVMb2dpblJlc3VsdHMoKSB7XG4gIGRlYnVnKCdyZXR1cm4gcG9zc2libGUgbG9naW4gcmVzdWx0cycpO1xuICBjb25zdCB1cmxzOiBMb2dpbk9wdGlvbnNbJ3Bvc3NpYmxlUmVzdWx0cyddID0ge1xuICAgIFtMb2dpblJlc3VsdHMuU3VjY2Vzc106IFsvZGFzaGJvYXJkL2ldLFxuICAgIFtMb2dpblJlc3VsdHMuSW52YWxpZFBhc3N3b3JkXTogW1xuICAgICAgYXN5bmMgKG9wdGlvbnM/OiB7IHBhZ2U/OiBQYWdlIH0pID0+IHtcbiAgICAgICAgY29uc3QgcGFnZSA9IG9wdGlvbnM/LnBhZ2U7XG4gICAgICAgIGlmICghcGFnZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzSW52YWxpZFBhc3N3b3JkRXJyb3IocGFnZSk7XG4gICAgICB9LFxuICAgIF0sXG4gICAgLy8gW0xvZ2luUmVzdWx0cy5BY2NvdW50QmxvY2tlZF06IFtdLCAvLyBUT0RPIGFkZCB3aGVuIHJlYWNoaW5nIHRoaXMgc2NlbmFyaW9cbiAgICBbTG9naW5SZXN1bHRzLkNoYW5nZVBhc3N3b3JkXTogW1xuICAgICAgYXN5bmMgKG9wdGlvbnM/OiB7IHBhZ2U/OiBQYWdlIH0pID0+IHtcbiAgICAgICAgY29uc3QgcGFnZSA9IG9wdGlvbnM/LnBhZ2U7XG4gICAgICAgIGlmICghcGFnZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzQ2hhbmdlUGFzc3dvcmRGb3JtKHBhZ2UpO1xuICAgICAgfSxcbiAgICBdLFxuICB9O1xuICByZXR1cm4gdXJscztcbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9naW5GaWVsZHMoY3JlZGVudGlhbHM6IFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzKSB7XG4gIGRlYnVnKCdjcmVhdGUgbG9naW4gZmllbGRzIGZvciB1c2VybmFtZSBhbmQgcGFzc3dvcmQnKTtcbiAgcmV0dXJuIFtcbiAgICB7IHNlbGVjdG9yOiAnW2Zvcm1jb250cm9sbmFtZT1cInVzZXJOYW1lXCJdJywgdmFsdWU6IGNyZWRlbnRpYWxzLnVzZXJuYW1lIH0sXG4gICAgeyBzZWxlY3RvcjogJ1tmb3JtY29udHJvbG5hbWU9XCJwYXNzd29yZFwiXScsIHZhbHVlOiBjcmVkZW50aWFscy5wYXNzd29yZCB9LFxuICBdO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0UGFyc2VkRGF0YVRvVHJhbnNhY3Rpb25zKFxuICBkYXRhOiBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzW10sXG4gIHBlbmRpbmdEYXRhPzogQ2FyZFBlbmRpbmdUcmFuc2FjdGlvbkRldGFpbHMgfCBudWxsLFxuKTogVHJhbnNhY3Rpb25bXSB7XG4gIGNvbnN0IHBlbmRpbmdUcmFuc2FjdGlvbnMgPSBwZW5kaW5nRGF0YT8ucmVzdWx0XG4gICAgPyBwZW5kaW5nRGF0YS5yZXN1bHQuY2FyZHNMaXN0LmZsYXRNYXAoY2FyZCA9PiBjYXJkLmF1dGhEZXRhbGlzTGlzdClcbiAgICA6IFtdO1xuXG4gIGNvbnN0IGJhbmtBY2NvdW50cyA9IGRhdGEuZmxhdE1hcChtb250aERhdGEgPT4gbW9udGhEYXRhLnJlc3VsdC5iYW5rQWNjb3VudHMpO1xuICBjb25zdCByZWd1bGFyRGViaXREYXlzID0gYmFua0FjY291bnRzLmZsYXRNYXAoYWNjb3VudHMgPT4gYWNjb3VudHMuZGViaXREYXRlcyk7XG4gIGNvbnN0IGltbWVkaWF0ZURlYml0RGF5cyA9IGJhbmtBY2NvdW50cy5mbGF0TWFwKGFjY291bnRzID0+IGFjY291bnRzLmltbWlkaWF0ZURlYml0cy5kZWJpdERheXMpO1xuICBjb25zdCBjb21wbGV0ZWRUcmFuc2FjdGlvbnMgPSBbLi4ucmVndWxhckRlYml0RGF5cywgLi4uaW1tZWRpYXRlRGViaXREYXlzXS5mbGF0TWFwKFxuICAgIGRlYml0RGF0ZSA9PiBkZWJpdERhdGUudHJhbnNhY3Rpb25zLFxuICApO1xuXG4gIGNvbnN0IGFsbDogKFNjcmFwZWRUcmFuc2FjdGlvbiB8IFNjcmFwZWRQZW5kaW5nVHJhbnNhY3Rpb24pW10gPSBbLi4ucGVuZGluZ1RyYW5zYWN0aW9ucywgLi4uY29tcGxldGVkVHJhbnNhY3Rpb25zXTtcblxuICByZXR1cm4gYWxsLm1hcCh0cmFuc2FjdGlvbiA9PiB7XG4gICAgY29uc3QgbnVtT2ZQYXltZW50cyA9IGlzUGVuZGluZyh0cmFuc2FjdGlvbikgPyB0cmFuc2FjdGlvbi5udW1iZXJPZlBheW1lbnRzIDogdHJhbnNhY3Rpb24ubnVtT2ZQYXltZW50cztcbiAgICBjb25zdCBpbnN0YWxsbWVudHMgPSBudW1PZlBheW1lbnRzXG4gICAgICA/IHtcbiAgICAgICAgICBudW1iZXI6IGlzUGVuZGluZyh0cmFuc2FjdGlvbikgPyAxIDogdHJhbnNhY3Rpb24uY3VyUGF5bWVudE51bSxcbiAgICAgICAgICB0b3RhbDogbnVtT2ZQYXltZW50cyxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBkYXRlID0gbW9tZW50KHRyYW5zYWN0aW9uLnRyblB1cmNoYXNlRGF0ZSk7XG5cbiAgICBjb25zdCBjaGFyZ2VkQW1vdW50ID0gKGlzUGVuZGluZyh0cmFuc2FjdGlvbikgPyB0cmFuc2FjdGlvbi50cm5BbXQgOiB0cmFuc2FjdGlvbi5hbXRCZWZvcmVDb252QW5kSW5kZXgpICogLTE7XG4gICAgY29uc3Qgb3JpZ2luYWxBbW91bnQgPSB0cmFuc2FjdGlvbi50cm5BbXQgKiAodHJhbnNhY3Rpb24udHJuVHlwZUNvZGUgPT09IFRyblR5cGVDb2RlLmNyZWRpdCA/IDEgOiAtMSk7XG5cbiAgICBjb25zdCByZXN1bHQ6IFRyYW5zYWN0aW9uID0ge1xuICAgICAgaWRlbnRpZmllcjogIWlzUGVuZGluZyh0cmFuc2FjdGlvbikgPyB0cmFuc2FjdGlvbi50cm5JbnRJZCA6IHVuZGVmaW5lZCxcbiAgICAgIHR5cGU6IFtUcm5UeXBlQ29kZS5yZWd1bGFyLCBUcm5UeXBlQ29kZS5zdGFuZGluZ09yZGVyXS5pbmNsdWRlcyh0cmFuc2FjdGlvbi50cm5UeXBlQ29kZSlcbiAgICAgICAgPyBUcmFuc2FjdGlvblR5cGVzLk5vcm1hbFxuICAgICAgICA6IFRyYW5zYWN0aW9uVHlwZXMuSW5zdGFsbG1lbnRzLFxuICAgICAgc3RhdHVzOiBpc1BlbmRpbmcodHJhbnNhY3Rpb24pID8gVHJhbnNhY3Rpb25TdGF0dXNlcy5QZW5kaW5nIDogVHJhbnNhY3Rpb25TdGF0dXNlcy5Db21wbGV0ZWQsXG4gICAgICBkYXRlOiBpbnN0YWxsbWVudHMgPyBkYXRlLmFkZChpbnN0YWxsbWVudHMubnVtYmVyIC0gMSwgJ21vbnRoJykudG9JU09TdHJpbmcoKSA6IGRhdGUudG9JU09TdHJpbmcoKSxcbiAgICAgIHByb2Nlc3NlZERhdGU6IGlzUGVuZGluZyh0cmFuc2FjdGlvbikgPyBkYXRlLnRvSVNPU3RyaW5nKCkgOiBuZXcgRGF0ZSh0cmFuc2FjdGlvbi5kZWJDcmREYXRlKS50b0lTT1N0cmluZygpLFxuICAgICAgb3JpZ2luYWxBbW91bnQsXG4gICAgICBvcmlnaW5hbEN1cnJlbmN5OiB0cmFuc2FjdGlvbi50cm5DdXJyZW5jeVN5bWJvbCxcbiAgICAgIGNoYXJnZWRBbW91bnQsXG4gICAgICBjaGFyZ2VkQ3VycmVuY3k6ICFpc1BlbmRpbmcodHJhbnNhY3Rpb24pID8gdHJhbnNhY3Rpb24uZGViQ3JkQ3VycmVuY3lTeW1ib2wgOiB1bmRlZmluZWQsXG4gICAgICBkZXNjcmlwdGlvbjogdHJhbnNhY3Rpb24ubWVyY2hhbnROYW1lLFxuICAgICAgbWVtbzogdHJhbnNhY3Rpb24udHJhbnNUeXBlQ29tbWVudERldGFpbHMudG9TdHJpbmcoKSxcbiAgICAgIGNhdGVnb3J5OiB0cmFuc2FjdGlvbi5icmFuY2hDb2RlRGVzYyxcbiAgICB9O1xuXG4gICAgaWYgKGluc3RhbGxtZW50cykge1xuICAgICAgcmVzdWx0Lmluc3RhbGxtZW50cyA9IGluc3RhbGxtZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbn1cblxudHlwZSBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyA9IHsgdXNlcm5hbWU6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9O1xuXG5jbGFzcyBWaXNhQ2FsU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyV2l0aEJyb3dzZXI8U2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHM+IHtcbiAgcHJpdmF0ZSBhdXRob3JpemF0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBhdXRoUmVxdWVzdFByb21pc2U6IFByb21pc2U8SFRUUFJlcXVlc3QgfCB1bmRlZmluZWQ+IHwgdW5kZWZpbmVkO1xuXG4gIG9wZW5Mb2dpblBvcHVwID0gYXN5bmMgKCkgPT4ge1xuICAgIGRlYnVnKCdvcGVuIGxvZ2luIHBvcHVwLCB3YWl0IHVudGlsIGxvZ2luIGJ1dHRvbiBhdmFpbGFibGUnKTtcbiAgICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQodGhpcy5wYWdlLCAnI2NjTG9naW5EZXNrdG9wQnRuJywgdHJ1ZSk7XG4gICAgZGVidWcoJ2NsaWNrIG9uIHRoZSBsb2dpbiBidXR0b24nKTtcbiAgICBhd2FpdCBjbGlja0J1dHRvbih0aGlzLnBhZ2UsICcjY2NMb2dpbkRlc2t0b3BCdG4nKTtcbiAgICBkZWJ1ZygnZ2V0IHRoZSBmcmFtZSB0aGF0IGhvbGRzIHRoZSBsb2dpbicpO1xuICAgIGNvbnN0IGZyYW1lID0gYXdhaXQgZ2V0TG9naW5GcmFtZSh0aGlzLnBhZ2UpO1xuICAgIGRlYnVnKCd3YWl0IHVudGlsIHRoZSBwYXNzd29yZCBsb2dpbiB0YWIgaGVhZGVyIGlzIGF2YWlsYWJsZScpO1xuICAgIGF3YWl0IHdhaXRVbnRpbEVsZW1lbnRGb3VuZChmcmFtZSwgJyNyZWd1bGFyLWxvZ2luJyk7XG4gICAgZGVidWcoJ25hdmlnYXRlIHRvIHRoZSBwYXNzd29yZCBsb2dpbiB0YWInKTtcbiAgICBhd2FpdCBjbGlja0J1dHRvbihmcmFtZSwgJyNyZWd1bGFyLWxvZ2luJyk7XG4gICAgZGVidWcoJ3dhaXQgdW50aWwgdGhlIHBhc3N3b3JkIGxvZ2luIHRhYiBpcyBhY3RpdmUnKTtcbiAgICBhd2FpdCB3YWl0VW50aWxFbGVtZW50Rm91bmQoZnJhbWUsICdyZWd1bGFyLWxvZ2luJyk7XG5cbiAgICByZXR1cm4gZnJhbWU7XG4gIH07XG5cbiAgYXN5bmMgZ2V0Q2FyZHMoKSB7XG4gICAgY29uc3QgaW5pdERhdGEgPSBhd2FpdCB3YWl0VW50aWwoXG4gICAgICAoKSA9PiBnZXRGcm9tU2Vzc2lvblN0b3JhZ2U8SW5pdFJlc3BvbnNlPih0aGlzLnBhZ2UsICdpbml0JyksXG4gICAgICAnZ2V0IGluaXQgZGF0YSBpbiBzZXNzaW9uIHN0b3JhZ2UnLFxuICAgICAgMTAwMDAsXG4gICAgICAxMDAwLFxuICAgICk7XG4gICAgaWYgKCFpbml0RGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgZmluZCBcImluaXRcIiBkYXRhIGluIHNlc3Npb24gc3RvcmFnZScpO1xuICAgIH1cbiAgICByZXR1cm4gaW5pdERhdGE/LnJlc3VsdC5jYXJkcy5tYXAoKHsgY2FyZFVuaXF1ZUlkLCBsYXN0NERpZ2l0cyB9KSA9PiAoeyBjYXJkVW5pcXVlSWQsIGxhc3Q0RGlnaXRzIH0pKTtcbiAgfVxuXG4gIGFzeW5jIGdldEF1dGhvcml6YXRpb25IZWFkZXIoKSB7XG4gICAgaWYgKCF0aGlzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgIGRlYnVnKCdmZXRjaGluZyBhdXRob3JpemF0aW9uIGhlYWRlcicpO1xuICAgICAgY29uc3QgYXV0aE1vZHVsZSA9IGF3YWl0IHdhaXRVbnRpbChcbiAgICAgICAgYXN5bmMgKCkgPT4gYXV0aE1vZHVsZU9yVW5kZWZpbmVkKGF3YWl0IGdldEZyb21TZXNzaW9uU3RvcmFnZTxBdXRoTW9kdWxlPih0aGlzLnBhZ2UsICdhdXRoLW1vZHVsZScpKSxcbiAgICAgICAgJ2dldCBhdXRob3JpemF0aW9uIGhlYWRlciB3aXRoIHZhbGlkIHRva2VuIGluIHNlc3Npb24gc3RvcmFnZScsXG4gICAgICAgIDEwXzAwMCxcbiAgICAgICAgNTAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGBDQUxBdXRoU2NoZW1lICR7YXV0aE1vZHVsZS5hdXRoLmNhbENvbm5lY3RUb2tlbn1gO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hdXRob3JpemF0aW9uO1xuICB9XG5cbiAgYXN5bmMgZ2V0WFNpdGVJZCgpIHtcbiAgICAvKlxuICAgICAgSSBkb24ndCBrbm93IGlmIHRoZSBjb25zdGFudCBiZWxvdyB3aWxsIGNoYW5nZSBpbiB0aGUgZmVhdHVyZS5cbiAgICAgIElmIHNvLCB1c2UgdGhlIG5leHQgY29kZTpcblxuICAgICAgcmV0dXJuIHRoaXMucGFnZS5ldmFsdWF0ZSgoKSA9PiBuZXcgVXQoKS54U2l0ZUlkKTtcblxuICAgICAgVG8gZ2V0IHRoZSBjbGFzc25hbWUgc2VhcmNoIGZvciAneFNpdGVJZCcgaW4gdGhlIHBhZ2Ugc291cmNlXG4gICAgICBjbGFzcyBVdCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKF9lLCBvbiwgeW4pIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUgPSBfZSxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gb24sXG4gICAgICAgICAgICB0aGlzLmV2ZW50QnVzU2VydmljZSA9IHluLFxuICAgICAgICAgICAgdGhpcy54U2l0ZUlkID0gXCIwOTAzMTk4Ny0yNzNFLTIzMTEtOTA2Qy04QUY4NUIxN0M4RDlcIixcbiAgICAqL1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJzA5MDMxOTg3LTI3M0UtMjMxMS05MDZDLThBRjg1QjE3QzhEOScpO1xuICB9XG5cbiAgZ2V0TG9naW5PcHRpb25zKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyk6IExvZ2luT3B0aW9ucyB7XG4gICAgdGhpcy5hdXRoUmVxdWVzdFByb21pc2UgPSB0aGlzLnBhZ2VcbiAgICAgIC53YWl0Rm9yUmVxdWVzdChTU09fQVVUSE9SSVpBVElPTl9SRVFVRVNUX0VORFBPSU5ULCB7IHRpbWVvdXQ6IDEwXzAwMCB9KVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICBkZWJ1ZygnZXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRva2VuIHJlcXVlc3QnLCBlKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBsb2dpblVybDogYCR7TE9HSU5fVVJMfWAsXG4gICAgICBmaWVsZHM6IGNyZWF0ZUxvZ2luRmllbGRzKGNyZWRlbnRpYWxzKSxcbiAgICAgIHN1Ym1pdEJ1dHRvblNlbGVjdG9yOiAnYnV0dG9uW3R5cGU9XCJzdWJtaXRcIl0nLFxuICAgICAgcG9zc2libGVSZXN1bHRzOiBnZXRQb3NzaWJsZUxvZ2luUmVzdWx0cygpLFxuICAgICAgY2hlY2tSZWFkaW5lc3M6IGFzeW5jICgpID0+IHdhaXRVbnRpbEVsZW1lbnRGb3VuZCh0aGlzLnBhZ2UsICcjY2NMb2dpbkRlc2t0b3BCdG4nKSxcbiAgICAgIHByZUFjdGlvbjogdGhpcy5vcGVuTG9naW5Qb3B1cCxcbiAgICAgIHBvc3RBY3Rpb246IGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB3YWl0Rm9yTmF2aWdhdGlvbih0aGlzLnBhZ2UpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRVcmwgPSBhd2FpdCBnZXRDdXJyZW50VXJsKHRoaXMucGFnZSk7XG4gICAgICAgICAgaWYgKGN1cnJlbnRVcmwuZW5kc1dpdGgoJ3NpdGUtdHV0b3JpYWwnKSkge1xuICAgICAgICAgICAgYXdhaXQgY2xpY2tCdXR0b24odGhpcy5wYWdlLCAnYnV0dG9uLmJ0bi1jbG9zZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgdGhpcy5hdXRoUmVxdWVzdFByb21pc2U7XG4gICAgICAgICAgdGhpcy5hdXRob3JpemF0aW9uID0gU3RyaW5nKHJlcXVlc3Q/LmhlYWRlcnMoKS5hdXRob3JpemF0aW9uIHx8ICcnKS50cmltKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gYXdhaXQgZ2V0Q3VycmVudFVybCh0aGlzLnBhZ2UpO1xuICAgICAgICAgIGlmIChjdXJyZW50VXJsLmVuZHNXaXRoKCdkYXNoYm9hcmQnKSkgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IHJlcXVpcmVzQ2hhbmdlUGFzc3dvcmQgPSBhd2FpdCBoYXNDaGFuZ2VQYXNzd29yZEZvcm0odGhpcy5wYWdlKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNDaGFuZ2VQYXNzd29yZCkgcmV0dXJuO1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB1c2VyQWdlbnQ6IGFwaUhlYWRlcnNbJ1VzZXItQWdlbnQnXSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hEYXRhKCk6IFByb21pc2U8U2NyYXBlclNjcmFwaW5nUmVzdWx0PiB7XG4gICAgY29uc3QgZGVmYXVsdFN0YXJ0TW9tZW50ID0gbW9tZW50KCkuc3VidHJhY3QoMSwgJ3llYXJzJykuc3VidHJhY3QoNiwgJ21vbnRocycpLmFkZCgxLCAnZGF5Jyk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSB8fCBkZWZhdWx0U3RhcnRNb21lbnQudG9EYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQubWF4KGRlZmF1bHRTdGFydE1vbWVudCwgbW9tZW50KHN0YXJ0RGF0ZSkpO1xuICAgIGRlYnVnKGBmZXRjaCB0cmFuc2FjdGlvbnMgc3RhcnRpbmcgJHtzdGFydE1vbWVudC5mb3JtYXQoKX1gKTtcblxuICAgIGNvbnN0IFtjYXJkcywgeFNpdGVJZCwgQXV0aG9yaXphdGlvbl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmdldENhcmRzKCksXG4gICAgICB0aGlzLmdldFhTaXRlSWQoKSxcbiAgICAgIHRoaXMuZ2V0QXV0aG9yaXphdGlvbkhlYWRlcigpLFxuICAgIF0pO1xuXG4gICAgY29uc3QgZnV0dXJlTW9udGhzVG9TY3JhcGUgPSB0aGlzLm9wdGlvbnMuZnV0dXJlTW9udGhzVG9TY3JhcGUgPz8gMTtcblxuICAgIGRlYnVnKCdmZXRjaCBmcmFtZXMgKG1pc2dhcm90KSBvZiBjYXJkcycpO1xuICAgIGNvbnN0IGZyYW1lcyA9IGF3YWl0IGZldGNoUG9zdChcbiAgICAgIEZSQU1FU19SRVFVRVNUX0VORFBPSU5ULFxuICAgICAgeyBjYXJkc0ZvckZyYW1lRGF0YTogY2FyZHMubWFwKCh7IGNhcmRVbmlxdWVJZCB9KSA9PiAoeyBjYXJkVW5pcXVlSWQgfSkpIH0sXG4gICAgICB7XG4gICAgICAgIEF1dGhvcml6YXRpb24sXG4gICAgICAgICdYLVNpdGUtSWQnOiB4U2l0ZUlkLFxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAuLi5hcGlIZWFkZXJzLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3QgYWNjb3VudHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNhcmRzLm1hcChhc3luYyBjYXJkID0+IHtcbiAgICAgICAgY29uc3QgZmluYWxNb250aFRvRmV0Y2hNb21lbnQgPSBtb21lbnQoKS5hZGQoZnV0dXJlTW9udGhzVG9TY3JhcGUsICdtb250aCcpO1xuICAgICAgICBjb25zdCBtb250aHMgPSBmaW5hbE1vbnRoVG9GZXRjaE1vbWVudC5kaWZmKHN0YXJ0TW9tZW50LCAnbW9udGhzJyk7XG4gICAgICAgIGNvbnN0IGFsbE1vbnRoc0RhdGE6IENhcmRUcmFuc2FjdGlvbkRldGFpbHNbXSA9IFtdO1xuICAgICAgICBjb25zdCBmcmFtZSA9IF8uZmluZChmcmFtZXMucmVzdWx0LmJhbmtJc3N1ZWRDYXJkcy5jYXJkTGV2ZWxGcmFtZXMsIHsgY2FyZFVuaXF1ZUlkOiBjYXJkLmNhcmRVbmlxdWVJZCB9KTtcblxuICAgICAgICBkZWJ1ZyhgZmV0Y2ggcGVuZGluZyB0cmFuc2FjdGlvbnMgZm9yIGNhcmQgJHtjYXJkLmNhcmRVbmlxdWVJZH1gKTtcbiAgICAgICAgbGV0IHBlbmRpbmdEYXRhID0gYXdhaXQgZmV0Y2hQb3N0KFxuICAgICAgICAgIFBFTkRJTkdfVFJBTlNBQ1RJT05TX1JFUVVFU1RfRU5EUE9JTlQsXG4gICAgICAgICAgeyBjYXJkVW5pcXVlSURBcnJheTogW2NhcmQuY2FyZFVuaXF1ZUlkXSB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb24sXG4gICAgICAgICAgICAnWC1TaXRlLUlkJzogeFNpdGVJZCxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAuLi5hcGlIZWFkZXJzLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgZGVidWcoYGZldGNoIGNvbXBsZXRlZCB0cmFuc2FjdGlvbnMgZm9yIGNhcmQgJHtjYXJkLmNhcmRVbmlxdWVJZH1gKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbW9udGhzOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBtb250aCA9IGZpbmFsTW9udGhUb0ZldGNoTW9tZW50LmNsb25lKCkuc3VidHJhY3QoaSwgJ21vbnRocycpO1xuICAgICAgICAgIGNvbnN0IG1vbnRoRGF0YSA9IGF3YWl0IGZldGNoUG9zdChcbiAgICAgICAgICAgIFRSQU5TQUNUSU9OU19SRVFVRVNUX0VORFBPSU5ULFxuICAgICAgICAgICAgeyBjYXJkVW5pcXVlSWQ6IGNhcmQuY2FyZFVuaXF1ZUlkLCBtb250aDogbW9udGguZm9ybWF0KCdNJyksIHllYXI6IG1vbnRoLmZvcm1hdCgnWVlZWScpIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEF1dGhvcml6YXRpb24sXG4gICAgICAgICAgICAgICdYLVNpdGUtSWQnOiB4U2l0ZUlkLFxuICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAuLi5hcGlIZWFkZXJzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKG1vbnRoRGF0YT8uc3RhdHVzQ29kZSAhPT0gMSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYGZhaWxlZCB0byBmZXRjaCB0cmFuc2FjdGlvbnMgZm9yIGNhcmQgJHtjYXJkLmxhc3Q0RGlnaXRzfS4gTWVzc2FnZTogJHttb250aERhdGE/LnRpdGxlIHx8ICcnfWAsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCFpc0NhcmRUcmFuc2FjdGlvbkRldGFpbHMobW9udGhEYXRhKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtb250aERhdGEgaXMgbm90IG9mIHR5cGUgQ2FyZFRyYW5zYWN0aW9uRGV0YWlscycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFsbE1vbnRoc0RhdGEucHVzaChtb250aERhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBlbmRpbmdEYXRhPy5zdGF0dXNDb2RlICE9PSAxICYmIHBlbmRpbmdEYXRhPy5zdGF0dXNDb2RlICE9PSA5Nikge1xuICAgICAgICAgIGRlYnVnKFxuICAgICAgICAgICAgYGZhaWxlZCB0byBmZXRjaCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBmb3IgY2FyZCAke2NhcmQubGFzdDREaWdpdHN9LiBNZXNzYWdlOiAke3BlbmRpbmdEYXRhPy50aXRsZSB8fCAnJ31gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcGVuZGluZ0RhdGEgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhcmRQZW5kaW5nVHJhbnNhY3Rpb25EZXRhaWxzKHBlbmRpbmdEYXRhKSkge1xuICAgICAgICAgIGRlYnVnKCdwZW5kaW5nRGF0YSBpcyBub3Qgb2YgdHlwZSBDYXJkVHJhbnNhY3Rpb25EZXRhaWxzJyk7XG4gICAgICAgICAgcGVuZGluZ0RhdGEgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25zID0gY29udmVydFBhcnNlZERhdGFUb1RyYW5zYWN0aW9ucyhhbGxNb250aHNEYXRhLCBwZW5kaW5nRGF0YSk7XG5cbiAgICAgICAgZGVidWcoJ2ZpbHRlciBvdXQgb2xkIHRyYW5zYWN0aW9ucycpO1xuICAgICAgICBjb25zdCB0eG5zID1cbiAgICAgICAgICAodGhpcy5vcHRpb25zLm91dHB1dERhdGE/LmVuYWJsZVRyYW5zYWN0aW9uc0ZpbHRlckJ5RGF0ZSA/PyB0cnVlKVxuICAgICAgICAgICAgPyBmaWx0ZXJPbGRUcmFuc2FjdGlvbnModHJhbnNhY3Rpb25zLCBtb21lbnQoc3RhcnREYXRlKSwgdGhpcy5vcHRpb25zLmNvbWJpbmVJbnN0YWxsbWVudHMgfHwgZmFsc2UpXG4gICAgICAgICAgICA6IHRyYW5zYWN0aW9ucztcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR4bnMsXG4gICAgICAgICAgYmFsYW5jZTogXy5pc051bWJlcihmcmFtZT8ubmV4dFRvdGFsRGViaXQpID8gLWZyYW1lPy5uZXh0VG90YWxEZWJpdCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhY2NvdW50TnVtYmVyOiBjYXJkLmxhc3Q0RGlnaXRzLFxuICAgICAgICB9IGFzIFRyYW5zYWN0aW9uc0FjY291bnQ7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZGVidWcoJ3JldHVybiB0aGUgc2NyYXBlZCBhY2NvdW50cycpO1xuXG4gICAgZGVidWcoSlNPTi5zdHJpbmdpZnkoYWNjb3VudHMsIG51bGwsIDIpKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIGFjY291bnRzLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlzYUNhbFNjcmFwZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLHFCQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxhQUFBLEdBQUFOLE9BQUE7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
|
package/lib/transactions.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
export interface TransactionsAccount {
|
|
2
2
|
accountNumber: string;
|
|
3
3
|
balance?: number;
|
|
4
|
+
currency?: string;
|
|
5
|
+
savingsAccount?: boolean;
|
|
4
6
|
txns: Transaction[];
|
|
7
|
+
securities?: Security[];
|
|
5
8
|
}
|
|
6
9
|
export declare enum TransactionTypes {
|
|
7
10
|
Normal = "normal",
|
|
@@ -45,3 +48,12 @@ export interface Transaction {
|
|
|
45
48
|
installments?: TransactionInstallments;
|
|
46
49
|
category?: string;
|
|
47
50
|
}
|
|
51
|
+
export interface Security {
|
|
52
|
+
name?: string;
|
|
53
|
+
symbol: string;
|
|
54
|
+
volume: number;
|
|
55
|
+
value: number;
|
|
56
|
+
currency?: string;
|
|
57
|
+
changePercentage?: number;
|
|
58
|
+
profitLoss?: number;
|
|
59
|
+
}
|
package/lib/transactions.js
CHANGED
|
@@ -14,4 +14,4 @@ let TransactionStatuses = exports.TransactionStatuses = /*#__PURE__*/function (T
|
|
|
14
14
|
TransactionStatuses["Pending"] = "pending";
|
|
15
15
|
return TransactionStatuses;
|
|
16
16
|
}({});
|
|
17
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUcmFuc2FjdGlvblR5cGVzIiwiZXhwb3J0cyIsIlRyYW5zYWN0aW9uU3RhdHVzZXMiXSwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNhY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25zQWNjb3VudCB7XG4gIGFjY291bnROdW1iZXI6IHN0cmluZztcbiAgYmFsYW5jZT86IG51bWJlcjtcbiAgY3VycmVuY3k/OiBzdHJpbmc7XG4gIHNhdmluZ3NBY2NvdW50PzogYm9vbGVhbjtcbiAgdHhuczogVHJhbnNhY3Rpb25bXTtcbiAgc2VjdXJpdGllcz86IFNlY3VyaXR5W107XG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uVHlwZXMge1xuICBOb3JtYWwgPSAnbm9ybWFsJyxcbiAgSW5zdGFsbG1lbnRzID0gJ2luc3RhbGxtZW50cycsXG59XG5cbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uU3RhdHVzZXMge1xuICBDb21wbGV0ZWQgPSAnY29tcGxldGVkJyxcbiAgUGVuZGluZyA9ICdwZW5kaW5nJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkluc3RhbGxtZW50cyB7XG4gIC8qKlxuICAgKiB0aGUgY3VycmVudCBpbnN0YWxsbWVudCBudW1iZXJcbiAgICovXG4gIG51bWJlcjogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiB0aGUgdG90YWwgbnVtYmVyIG9mIGluc3RhbGxtZW50c1xuICAgKi9cbiAgdG90YWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbiB7XG4gIHR5cGU6IFRyYW5zYWN0aW9uVHlwZXM7XG4gIC8qKlxuICAgKiBzb21ldGltZXMgY2FsbGVkIEFzbWFjaHRhXG4gICAqL1xuICBpZGVudGlmaWVyPzogc3RyaW5nIHwgbnVtYmVyO1xuICAvKipcbiAgICogSVNPIGRhdGUgc3RyaW5nXG4gICAqL1xuICBkYXRlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJU08gZGF0ZSBzdHJpbmdcbiAgICovXG4gIHByb2Nlc3NlZERhdGU6IHN0cmluZztcbiAgb3JpZ2luYWxBbW91bnQ6IG51bWJlcjtcbiAgb3JpZ2luYWxDdXJyZW5jeTogc3RyaW5nO1xuICBjaGFyZ2VkQW1vdW50OiBudW1iZXI7XG4gIGNoYXJnZWRDdXJyZW5jeT86IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgbWVtbz86IHN0cmluZztcbiAgc3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzO1xuICBpbnN0YWxsbWVudHM/OiBUcmFuc2FjdGlvbkluc3RhbGxtZW50cztcbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJpdHkge1xuICBuYW1lPzogc3RyaW5nO1xuICBzeW1ib2w6IHN0cmluZztcbiAgdm9sdW1lOiBudW1iZXI7XG4gIHZhbHVlOiBudW1iZXI7XG4gIGN1cnJlbmN5Pzogc3RyaW5nO1xuICBjaGFuZ2VQZXJjZW50YWdlPzogbnVtYmVyO1xuICBwcm9maXRMb3NzPzogbnVtYmVyO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7SUFTWUEsZ0JBQWdCLEdBQUFDLE9BQUEsQ0FBQUQsZ0JBQUEsMEJBQWhCQSxnQkFBZ0I7RUFBaEJBLGdCQUFnQjtFQUFoQkEsZ0JBQWdCO0VBQUEsT0FBaEJBLGdCQUFnQjtBQUFBO0FBQUEsSUFLaEJFLG1CQUFtQixHQUFBRCxPQUFBLENBQUFDLG1CQUFBLDBCQUFuQkEsbUJBQW1CO0VBQW5CQSxtQkFBbUI7RUFBbkJBLG1CQUFtQjtFQUFBLE9BQW5CQSxtQkFBbUI7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|