dcdx 1.3.0-next.36 → 1.3.0-next.37

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.
@@ -5,12 +5,13 @@ import { glob } from 'glob';
5
5
  import { join, resolve, dirname } from 'path';
6
6
  import { cwd } from 'process';
7
7
  import { input, confirm, password, select } from '@inquirer/prompts';
8
- import { existsSync, readFileSync, createReadStream, rmSync, writeFileSync, mkdirSync, createWriteStream, realpathSync } from 'fs';
9
- import axios from 'axios';
8
+ import { existsSync, readFileSync, createReadStream, mkdirSync, createWriteStream, rmSync, writeFileSync, realpathSync } from 'fs';
10
9
  import { SingleBar, Presets } from 'cli-progress';
10
+ import axios from 'axios';
11
+ import FormData from 'form-data';
11
12
  import { parse } from 'content-disposition';
12
13
  import { homedir } from 'os';
13
- import FormData from 'form-data';
14
+ import { finished } from 'stream/promises';
14
15
  import simpleGit from 'simple-git';
15
16
  import { spawn, execSync } from 'child_process';
16
17
  import inquirer from 'inquirer';
@@ -171,6 +172,28 @@ const registerLicense = async (appKey, license, baseUrl, username, password, ver
171
172
  return true;
172
173
  };
173
174
 
175
+ const downloadApp = async (addonKey) => {
176
+ const tmpDir = join(homedir(), '.dcdx', 'tmp');
177
+ mkdirSync(tmpDir, { recursive: true });
178
+ let downloadUrl = `https://marketplace.atlassian.com/download/plugins/${addonKey}`;
179
+ const { data: listing } = await axios.get(`https://marketplace.atlassian.com/rest/2/addons/${addonKey}?hosting=datacenter&withVersion=true`).catch(() => ({ data: null }));
180
+ if (listing) {
181
+ downloadUrl = listing._embedded?.version?._embedded?.artifact?._links?.binary?.href || downloadUrl;
182
+ }
183
+ const response = await axios({
184
+ method: 'get',
185
+ url: downloadUrl,
186
+ responseType: 'stream'
187
+ });
188
+ const disposition = parse(response.headers['content-disposition']);
189
+ const filename = disposition?.parameters?.filename || addonKey;
190
+ const tmpFile = join(tmpDir, filename);
191
+ const writer = createWriteStream(tmpFile);
192
+ response.data.pipe(writer);
193
+ await finished(writer);
194
+ return tmpFile;
195
+ };
196
+
174
197
  const getAptDictory = async (cwd$1, mustUseDefaultConfiguration, force) => {
175
198
  // Translate common relative paths to absolute paths
176
199
  let result = cwd$1 ?
@@ -420,27 +443,6 @@ const round = (value, step = 1.0) => {
420
443
  const inv = 1.0 / step;
421
444
  return Math.floor(value * inv) / inv;
422
445
  };
423
- const download = async (addonKey) => {
424
- const tmpDir = join(homedir(), '.dcdx', 'tmp');
425
- let tmpFile = join(tmpDir, addonKey);
426
- mkdirSync(tmpDir, { recursive: true });
427
- let downloadUrl = `https://marketplace.atlassian.com/download/plugins/${addonKey}`;
428
- const { data: listing } = await axios.get(`https://marketplace.atlassian.com/rest/2/addons/${addonKey}?hosting=datacenter&withVersion=true`).catch(() => ({ data: null }));
429
- if (listing) {
430
- downloadUrl = listing._embedded?.version?._embedded?.artifact?._links?.binary?.href || downloadUrl;
431
- }
432
- await axios({
433
- method: 'get',
434
- url: downloadUrl,
435
- responseType: 'stream'
436
- }).then(response => {
437
- const disposition = parse(response.headers['content-disposition']);
438
- const filename = disposition?.parameters?.filename || addonKey;
439
- tmpFile = filename;
440
- response.data.pipe(createWriteStream(tmpFile));
441
- }).catch(() => null);
442
- return tmpFile;
443
- };
444
446
  const installApp = async (options) => {
445
447
  // Set default value for username/password
446
448
  const username = options.username || 'admin';
@@ -454,7 +456,7 @@ const installApp = async (options) => {
454
456
  // Get the app license
455
457
  const appLicense = await getAppLicense(options.license, options.force);
456
458
  // Download the file from MPAC
457
- const file = await download(options.appKey);
459
+ const file = await downloadApp(options.appKey);
458
460
  let count = 0;
459
461
  let timerId = null;
460
462
  let isInstalledSuccesfully = false;
@@ -585,7 +587,7 @@ const installApp = async (options) => {
585
587
  progressBar.start(180, 0);
586
588
  const timerId = setInterval(() => progressBar.increment(), 1000);
587
589
  // Download the file from MPAC
588
- const file = await download(addonKey);
590
+ const file = await downloadApp(addonKey);
589
591
  // Upload it into the cluster using the UPM REST API
590
592
  const isInstalled = await uploadToUPM(options.baseUrl, file, adminUsername, adminPassword, false);
591
593
  if (!isInstalled) {
@@ -10199,4 +10201,4 @@ process.on('SIGINT', () => {
10199
10201
  console.log(`Received term signal, trying to stop gracefully 💪`);
10200
10202
  gracefulExit(1);
10201
10203
  });
10202
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9saWNlbmNlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvY2FwaXRhbGl6ZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9tZXNzYWdlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEFwcExpY2Vuc2UuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL3VwbS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEFwdERpcmVjdG9yeS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEFXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UHJvZHVjdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2RjYXB0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcGVyc2lzdHNBV1NDcmVkZW50aWFscy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3dhaXRGb3JVc2VySW5wdXQuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9yZXN0YXJ0Q2x1c3Rlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2luc3RhbGxBcHAuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL0FjdGlvbkhhbmRsZXIuanMiLCIuLi8uLi9kaXN0L3NyYy90eXBlcy9EYXRhYmFzZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL3R5cGVzL0FwcGxpY2F0aW9uLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9hbXBzLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9pc1JlY3Vyc2l2ZUJ1aWxkLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9zaG93UmVjdXJzaXZlQnVpbGRXYXJuaW5nLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9DdXN0b21CdWlsZGVyLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9kb2NrZXIuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL0luc3RhbGxlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvRmlsZVdhdGNoZXIuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL3RvQWJzb2x1dGVQYXRoLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9nZXRWZXJzaW9ucy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2NvbW1hbmRzL2luc3RhbGwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHRpbWVib21iID0ge1xuICAgICdqaXJhJzogJ0FBQUNCQTBPREFvUGVOcDlrbDF2MmpBVWh1L3pLNDYwT3lRSFNMdVZJa1VhVGJ3TlZCS1VoRW5idWdzVER1QTJzU1BiZ2JGZlB4T0MxaSs0eUVYTzUrdm5QUit5R2lHU1cvQ3VvWGM3dkJvTXZUNEVOQU92NS9XY3RVSVVHMWxWcU54N25xUFFTSmZjY0NsOEdtVTBtU1hqbERwUlhTNVF4YXU1UnFWOTBuY0NLUXpMVGNSSzlFdTk0NElwL2NRL00xTXdyVGtUYmk1TFoxYXJmTU0waHN5ZzcvWDZBOUx2RTg5ejJqM1p2c0ptUUJCUHB6UUp4cVA3VTRyK3FiamFOMzJ6RysvYmFSMmRNbDZjMzVlaTJxSWFoLzRkdmFIa092enBrVS94NUlaOHZib2RPSTljTWJkU2Nsbm54ajM4RUMxWFpzY1V1bll5MzZKdlZJM094R1ptYlpYZHp3SVU1bFZKV2k5MHJualZRR29pNzBCODczR05oUE9RTzUxT0ZHZmtTNXlRV1JLSDh5QWJ4eEdacDlRbS9FQ2hwYkdFeFI3TUJxR2RBbFRrY29rSzdNTWVNVGZ3YTJOTTlURHNkdGZTZlFHbld4dzdDQjQ3ZnJzUVNoRFN3Skpyby9paU5tZ25jdzFHUWw1ckkwdHJ0ZXRZNHNLZ1lDSi9ZNHFWRlNSMGxOR1EzUDA0YUR4clRLdldPak1YVDBMdXhDVTMzdHhhU2lQZmZ1UmpyM2ZzTy9tQzZvZy9WbXNtdUdZTjBJajkzVEZZY1ZYdW5RYWFEYjQrd0piRmQ3dmcwT0k1SWY1M05FTnRvSzJBbFZRd0dTY2pTRnQ1bHJqZFd5bXU4V0VJZ1N3dHBweXpBc0xneFJrOFA1aEc5UE1BM2JLaVBzcGRzVUxqSlJ3WDd1a2Y1L05YN1RBdEFoVUFoUVNIejlEZ3ljT1g3d2N3RVJNSmIzVExHYjRDRkdrQi94VVdTUkszQlpMclBGOVJuNlptclVxSlgwMm9jJyxcbiAgICAnY29uZmx1ZW5jZSc6ICdBQUFDemcwT0RBb1BlTnA5Vk85djJqQVEvWjYvd3RLK0lZV0dzRUtIRkdtUW1KYXUvR2dJbTlpWUpoTU9ZcHJZa2UxQTRhK2ZTY2hHS3RxUFB2dmV2WHYzenAvNmdxTEhMRWIySGJLc1R2TnpwOWxDOThNQTJaYmROS1lnZGlBR250UERRMno2ODhIY2RIL2FNN1A1bzJrWlR6UUVKaUU0cERBaUNUZ0JuZ2FEMGIwUkNyNWYxUzl1SGZjVVdYU1FCenVJZVFyQ0NEbGIxMG1vNkE0Y0pUTFFTVmxJbHpGVWdncEk4aWNrTWJBVkViSSt5cElsaVBHNlI1SWw1ejRrWEVGM0EweEpwMUd5d2E4cEZRZVBLSEFtRGR0NitBOWNKVlFFSzV5V21oTVY4SEdaTFJXa3dyRjhQWk1ncEdQZkdoN0lVTkJVVWM2Y0FLUkNjVkVZcmJsQWFaeHRLRU9yc3FqOFYvVVM4NXp4WGQrZlVHd0Q3MGlja1J3eWY3QVJBQ3ppcVVZbys4SXJtdC9qVVlEOWlUK1lZbU5JS0ZQQUNBdXZ5SElhUUVVU0hZZ3owRzhyb3JnQzhycDVxdmFFWlZwM3B0MHU4c3ZlM1RpVENzU0lyMEE2bGxHcjFWd2Zkd1BzbWIyNVBqamJWd3EyRWNaY202blM2REtYK0kzaVQxeVAvQ3k0MlRCZTRGQUswV2haVnR1NmF6WWJaZVpsQjBVMndycG5rUW9xcTQwVXlzdDY3UnFCOXpVOGs2NG9sWWVxS25HbU5Deldpc2VPVW9Ld2hMTG9LMUV4a1pJU1ZnOTVjcjNaTi9ZcWR1ZVNZVzY0OS9tZHJmSkFaT1FNM2IzYjk2RFJ1aFZrMzI2MWtrRnZleHdlNDFVUXRKTjEydTVHejZHY1BUN1BuNzFINzB0NjlDUGNieC9hOXJjajNyRHV3bGs0eHByS0NBNVZOK29KanNhQjJSLzc1c1FmZXpNM0dJeEg1bXlLVDZQTi9RRXJ0RHdnRlFFNkU5VkRDTFVadE44RjMwS28wSzlJcVhUUnViblo4SHBGbFp0ekF5WVVHYi9yeU9PSWNZVldWQ3BCbDVrQ2pVd2xVaHlGMm1ZODBXYW9YeGR6RWhPV2UyWXNOb1JSV1d4TXQ2eFgvaEg2UDV1eEY4YjNyTEpJbHoxTHBRVzk1cFFQdnFmTHEwa213b2hJZUxzMmw5UE16ZlE0OEx2dldUYmZNWTFBWERnOUtKRExDVjJDOUhVTUgrQ2FKZk9mdWRpL3Ywa0lHVnN3TEFJVUVNUTlYNzdncUdCZGZIMEhJekJhVjhOYWRQVUNGQm4rUmlVQTREK0lxVlFwVFRvdUxWWTY2YUNHWDAyMTIxJyxcbiAgICAnYml0YnVja2V0JzogJ0FBQUJtZzBPREFvUGVOcDlVbDF2MHpBVWZjK3ZzTVJiSmFkSnRqR3BVaVMySkpST05PbGFCNFNBQjllOVcweFR1N0p2Q3YzM2VJbURPb1I0dmVmZTQvUGhONTloUjViY2tQaVdSTmV6S0o1RkNaa3ZHVW1pSkE0eXJaQUxMUGtCVXJIWG90RW51NWVCUlc2YjhLTVVvQ3l3OHhINkJWWnMyS0tjZTNUSnBVSlFYQWtvZmgybE9lY2NJVjFkZlJoSkM3ZlJYckp1d0p6QUxQTDAvcUYrcEk5WEdhUHordUdHc3B2YmtkUng4QXdjcjBuUmRPQ25sWG5tU2xxT1VxdjBEbHR1cmVUS2c2dk9pSVpiNko5UG92aWFSbTlwSEhzME05Q2YvUnYxRHYvU1A1bE15b3JSOTlXYXJ0WlZYbWRzVVpXMDNoUU9TSHRDRituMlRMQUI0aGxJb1lUZWdTRkhvMytBUVBLMVFUeCttMDJuenpya28rSlE2TU8wSFM0b0RCZmZRNUpyb2pTU25iUm81TFpEY016U0V0UkVkQmIxQVl3TlJ6c1hmZjBKZ2pDd0xqRy80bUI1Z2lFK0p6aGJGM2VzeU9uOWx4ZjFGMjE0NWE2T1d1MlYvcW1DLzJkVmRvY3RtT3FwdGs1UEdpZCtYSng0MnczTlBQSFdRdUQ5ZlhKYkw4UGt0ZkxoVTJBditOMnJZTVk2dVVFRnBuY1kvQVlDZ2ZGQU1Dd0NGSHprQmxrR0gvdlJkVGVlQlNmVU16VURiNFcyQWhReU04OTNXUGcyUThvUUFZUmRCU3lLZVZVZG9nPT1YMDJqcicsXG4gICAgJ2JhbWJvbyc6ICdBQUFCM3cwT0RBb1BlTnA5VWx0cjJ6QVlmZmV2RU93dG9NUjEwcVlMR0piWVdzbm83R0E3ZzkwZVpQbHJvdFdXakNTbnpYNzlGRjhJWVdrZkRQSjNPZWR3enZjaDJ6ZG9XU3ZrenBGN3Y1amRMcndwQ2tpYUljLzFQT2VSTXhBYXNtTU5FYTNBejJ4bkhUMDRnUUpxdUJRaE5lQjc3dlFHdXpQczNqazVyWElweDVRWmZnRGZxQWFHVXRSVU9hajRhZFgrUGtwR3krVU9oTkUrdm5HRzVsYURhZ3M5TDNtdHVUb09KRjVQa2phNVpvclhKd0VYSEcrcEpRZGFOdlMvY1l0TEF5c0JWRmZ1MTllaHZ4WFBRcjRJSndWMUFHVUxLekluZUJiKzhQQmQvR1dPSDZZZjc1MU5vOWllYXVqbGVZTUhLWWw4KytGYjEzVkdvMUVVWi9oem5PQk5Fb2ZiSUZ2SEVkNm14RGI4MWtRb1VINUVaZytvcDBkRU1GbUFRcldTZjRBWjlITnZUUDFyTVpuc3JMR21wRnB6S3NaTVZwT3kyOERRYmZ3ZW8xQWlJUTBxdURhSzU0MEJpOHcxTWhLeFJodFpXWHZIVGdobit6TFFCdlU0NkVsYTFyTFpjWUVLT0VBcGF6dnZmS1hjZWlTb1lHL2tjVFhoVFVsRkcrWFZiZ0tWTkhBK2dGN0JOOHQzVXVVNXNkcFJ3WFVYR25tbFZWMENDbVJWVTNHOEV2ZjVNS1V3OXZxSUZWMzZ0WDdtb05qZm83Q1BUeGZlblpJSkVyTE1TSWhYMzA5cHZEZDhTVWdLM3NtS01wSnNrblZLQnRyMjZ0NEQrZ2QzQUM1cU1Dd0NGSE9hVFdmRnZMQ0xKUGZ0M3FrdFZvM0ZhZm1aQWhSb2piOUlBeGo4S0VxUERReTBzdG9zMzk0U1FRPT1YMDJtcSdcbn07XG5leHBvcnQgY29uc3QgYXBwM2hvdXIgPSAnQUFBQkNBME9EQW9QZU5wZGowMVB3a0FVUmZmekt5WnhaMUl5VXpBUmtsbFEyNGdSYVFNdEduYVA4VkVtdGpQTmZGVDU5eUpWRnl6ZnVia243OTZVeDBCejZTbWJVTTVuYkR6ajk3UklTeG96SHBNVW5iU3E4OHBvVWFMenRGRVN0VU42TUpaMlRhaVZwdS9ZWTJNNnRJNnNRcnRIbXg4cWQ3NEVaK1RCSXZ5VVUvQW9ZczdqaUUwanprbldReE11aWZBMklCbFViblE3QXVsVmp3TjlBYVU5YXRBU3M2OU8yZE5GVTR3WEpMYzFhT1VHdzl3MzRKd0NUVFpvZTdSUHFVZ2VwMlgwVm0wbjBmTnV0NGdTeGwvSmNuajluRmI2UTV0UC9VZXUzTCswUEhXNGdoWkZtbTJ6WlY1azYvOTVDYlI3WTliWUdvL3pHclYzSXI0alJiRHlDQTZ2dDM0RE84cDNTREFzQWhRbkpqTEQ1azlGcjN1YUl6a1hLZjgzbzV2RGRRSVVlNFhlcXVOQ0MzRCs5aHQ5WlloTlpGS21uaGM9WDAyZGgnO1xuIiwiZXhwb3J0IGNvbnN0IGNhcGl0YWxpemUgPSAodmFsdWUpID0+IHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc2xpY2UoMSk7XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnLi4vaGVscGVycy9jYXBpdGFsaXplJztcbmltcG9ydCB7IGdldFJ1bkZvclN0YWdlIH0gZnJvbSAnLi9oZWxwZXJzL2dldFJ1bkZvclN0YWdlJztcbmNvbnN0IHRvTnVtYmVyID0gKHN0YWdlKSA9PiB7XG4gICAgc3dpdGNoIChzdGFnZSkge1xuICAgICAgICBjYXNlICdvbmUtbm9kZSc6IHJldHVybiAndGhpcmQnO1xuICAgICAgICBjYXNlICd0d28tbm9kZSc6IHJldHVybiAnZm91cnRoJztcbiAgICAgICAgY2FzZSAnZm91ci1ub2RlJzogcmV0dXJuICdmaWZ0aCc7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBlbXB0eUxpbmUgPSAoKSA9PiBjb25zb2xlLmxvZygn4oCLJyk7XG5leHBvcnQgY29uc3QgZ2VuZXJpYyA9IHtcbiAgICBoZWFkZXI6IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX19fXyAgICAgIF8gICAgICAgICAgX19fX18gICAgICAgICBfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIFxcXFwgX19ffCB8XyBfX18gICB8ICAgICB8X19fIF9fX3wgfF8gX19fIF9fXyAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICB8IC4nfCAgX3wgLid8ICB8ICAgLS18IC1ffCAgIHwgIF98IC1ffCAgX3wgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fXy98X18sfF98IHxfXyx8ICB8X19fX198X19ffF98X3xffCB8X19ffF98ICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgX19fX18gICAgICAgICAgICBfX19fXyAgICAgICAgIF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fXyAgICAgICAgIF8gXyAgIF8gXyAgIFxuICB8ICBfICB8X19fIF9fXyAgIHwgIF8gIHxfX18gX19ffCAgX3xfX18gX19fIF9fX19fIF9fXyBfX18gX19fIF9fXyAgIHxfICAgX3xfX18gX19ffCB8IHxffF98IHxfIFxuICB8ICAgICB8IC4gfCAuIHwgIHwgICBfX3wgLV98ICBffCAgX3wgLiB8ICBffCAgICAgfCAuJ3wgICB8ICBffCAtX3wgICAgfCB8IHwgLiB8IC4gfCB8ICdffCB8ICBffFxuICB8X198X198ICBffCAgX3wgIHxfX3wgIHxfX198X3wgfF98IHxfX198X3wgfF98X3xffF9fLHxffF98X19ffF9fX3wgICAgfF98IHxfX198X19ffF98XyxffF98X3wgIFxuICAgICAgICB8X3wgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gIFdlbGNvbWUgdG8gdGhlIGF1dG9tYXRlZCBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCAoRENBUFQpLlxuICBUaGlzIHdpbGwgZ3VpZGUgeW91IHRocm91Z2ggYWxsIHRoZSBzdGVwcyB0byBwcm9kdWNlIHRoZSByZXF1aXJlZCBwZXJmb3JtYW5jZSB0ZXN0aW5nIHJlc3VsdHNcbiAgZm9yIHlvdXIgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwcm92YWwuXG5gXG59O1xuZXhwb3J0IGNvbnN0IGluaXQgPSB7XG4gICAgaGVhZGVyOiAocHJvZHVjdCkgPT4gYFxuICBXZSB3aWxsIG5vdyBmb2xsb3cgYWxsIHRoZSBzdGVwcyBhcyBkb2N1bWVudGVkIGluIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBVc2VyIEd1aWRlIEZvciAke2NhcGl0YWxpemUocHJvZHVjdCl9LlxuICBQbGVhc2UgY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBwcmlvciB0byBzdGFydGluZyB0aGUgdGVzdCBydW46XG5cbiAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS0ke3Byb2R1Y3R9L1xuXG4gIE9uY2UgeW91IHN0YXJ0IHRoZSB0ZXN0IHJ1biB3ZSB3aWxsIHByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnQgb24gQVdTLiBcbiAgSU1QT1JUQU5UOiBUaGlzIGNhbiBpbmN1ciBjb3N0cy5cbiAgXG4gIFlvdSBjYW4gc3RvcCB0aGlzIHByb2Nlc3MgYXQgYW55IHRpbWUgYnkgZXhpdGluZyB0aGlzIHByb2dyYW0uIEJlIHN1cmUgdG8gcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byByZXNldCBcbiAgdGhlIEFXUyBlbnZpcm9ubWVudCBhbmQgcHJldmVudCB1bmV4cGVjdGVkIGNvc3RzLlxuXG4gICQgZGNkeCBhcHQgdGVhcmRvd25cblxuICBZb3UgY2FuIGFsc28gcmVzdW1lL3Jlc3RhcnQgZXZlcnkgcGFydCBvZiB0aGUgdGVzdCBydW4gdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6XG5cbiAgJCBkY2R4IGFwdCBpbml0IC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcHJvdmlzaW9uIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuMSAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjIgLS1wcm9kdWN0ICR7cHJvZHVjdH1cbiAgJCBkY2R4IGFwdCBydW4zIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuNCAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjUgLS1wcm9kdWN0ICR7cHJvZHVjdH1cblxuICBXZSB3aWxsIGNvbnRpbnVlIHdpdGggdGhlIGZvbGxvd2luZyBzdGVwczpcbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICAxLiAgUHJvdmlzaW9uIHRoZSBlbnZpcm9ubWVudFxuICAyLiAgUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuICAzLiAgTHVjZW5lIEluZGV4IHRpbWluZyB0ZXN0IHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDQuICBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDUuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIG9uZS1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDMpXG4gIDYuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIHR3by1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDQpXG4gIDcuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIGZvdXItbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA1KVxuICA4LiAgR2VuZXJhdGUgcmVwb3J0c1xuICA5LiAgVGVhcmRvd24gb2YgZW52aXJvbm1lbnRcbiAgMTAuIFNlY3VyaXR5IFNjYW5uZXIgZm9yIERhdGEgQ2VudGVyIGFwcHNcbmAgOiBgXG4gIDEuIFByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnRcbiAgMi4gUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuICAzLiBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDQuIFNjYWxhYmlsaXR5IHRlc3Rpbmcgb24gb25lLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gMylcbiAgNS4gU2NhbGFiaWxpdHkgdGVzdGluZyBvbiB0d28tbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA0KVxuICA2LiBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIGZvdXItbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA1KVxuICA3LiBHZW5lcmF0ZSByZXBvcnRzXG4gIDguIFRlYXJkb3duIG9mIGVudmlyb25tZW50XG4gIDkuIFNlY3VyaXR5IFNjYW5uZXIgZm9yIERhdGEgQ2VudGVyIGFwcHNcbmB9YCxcbn07XG5leHBvcnQgY29uc3QgcHJvdmlzaW9uaW5nID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfCAgXyAgfCBfXyAgfCAgICAgfCAgfCAgfCAgICAgfCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICAgfCAgIHwgfCAgIF9ffFxuICB8ICAgX198ICAgIC18ICB8ICB8ICB8ICB8LSAgIC18X18gICB8LSAgIC18ICB8ICB8IHwgfCB8LSAgIC18IHwgfCB8ICB8ICB8XG4gIHxfX3wgIHxfX3xfX3xfX19fX3xcXFxcX19fL3xfX19fX3xfX19fX3xfX19fX3xfX19fX3xffF9fX3xfX19fX3xffF9fX3xfX19fX3xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvbi5cblxuICBJbiBvcmRlciB0byBkbyB0aGlzLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246XG5cbiAgMS4gVGhlIGxvY2F0aW9uIG9mIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBvbiB5b3VyIGRpc2tcbiAgMi4gQVdTIGNyZWRlbnRpYWxzXG4gIDMuIFByb2R1Y3QgbGljZW5zZVxuYCxcbiAgICBhc2tGb3JBV1NDcmVkZW50aWFsczogKHByb2R1Y3QpID0+IGBcbiAgSW4gb3JkZXIgdG8gcHJvdmlzaW9uIHRoZSAke2NhcGl0YWxpemUocHJvZHVjdCl9IGNsdXN0ZXIsIHdlIG5lZWQgQWRtaW5pc3RyYXRvciBjcmVkZW50aWFscyBmb3IgQVdTLlxuICBQbGVhc2UgcmVmZXIgdG8gdGhlIERDQVBUIGRvY3VtZW50YXRpb24gdG8gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgdGhlIEFXUyBhY2Nlc3Mga2V5czpcblxuICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLSR7cHJvZHVjdH0vI3NldHVwLSR7cHJvZHVjdH0tZGF0YS1jZW50ZXItZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQtb24tazhzLVxuYCxcbiAgICBhc2tGb3JFbnZpcm9ubWVudDogYFxuICBXaGVuIHByb3Zpc2lvbmluZyB0aGUgY2x1c3Rlciwgd2UgbmVlZCBhIHVuaXF1ZSBlbnZpcm9ubWVudCBuYW1lLlxuICBUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGNyZWF0ZSBtdWx0aXBsZSBjbHVzdGVycyAoaS5lLiBmb3IgZGlmZmVyZW50IGhvc3QgcHJvZHVjdHMpIGFuZCB0byBpZGVudGlmeSB3aGljaCBjbHVzdGVyIHRvIHVzZSBkdXJpbmcgdGVzdGluZyAmIHRlYXJkb3duLlxuYCxcbiAgICBhc2tGb3JIb3N0TGljZW5zZTogYFxuICBUaGUgaG9zdCBwcm9kdWN0IHJlcXVpcmVzIGEgdmFsaWQgbGljZW5zZS5cblxuICBCeSBkZWZhdWx0IHdlIHVzZSB0aGUgNzJoIGRldmVsb3BlciBsaWNlbnNlIHByb3ZpZGVkIGJ5IEF0bGFzc2lhbi4gSWYgeW91IG5lZWQgYSBtb3JlIGV4dGVuc2l2ZSBsaWNlbnNlLFxuICB5b3UgY2FuIGdlbmVyYXRlIGFuIGV2YWx1YXRpb24gbGljZW5zZSBmcm9tIG15LmF0bGFzc2lhbi5jb20gb3IgYXNrIEF0bGFzc2lhbiBNYXJrZXRwbGFjZSBEZXZlbG9wZXIgU3VwcG9ydCBmb3IgYSB0ZXN0IGxpY2Vuc2UuXG5gLFxuICAgIGFza0ZvckFwcExpY2Vuc2U6IGBcblRoZSBhcHAgcmVxdWlyZXMgYSB2YWxpZCBsaWNlbnNlLlxuXG5CeSBkZWZhdWx0IHdlIHVzZSB0aGUgMyBob3VyIHRpbWVib21iIGxpY2Vuc2UgcHJvdmlkZWQgYnkgQXRsYXNzaWFuLiBJZiB5b3UgbmVlZCBhIG1vcmUgZXh0ZW5zaXZlIGxpY2Vuc2UsXG55b3UgY2FuIGdlbmVyYXRlIGFuIGV2YWx1YXRpb24gbGljZW5zZSBmcm9tIG15LmF0bGFzc2lhbi5jb20gb3IgYXNrIEF0bGFzc2lhbiBNYXJrZXRwbGFjZSBEZXZlbG9wZXIgU3VwcG9ydCBmb3IgYSB0ZXN0IGxpY2Vuc2UuXG5gLFxuICAgIHJlYWR5OiBgXG4gIFdlIGhhdmUgbm93IGdhdGhlcmVkIGFsbCB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gcHJvdmlzaW9uIHRoZSBjbHVzdGVyLlxuXG4gICEhIElNUE9SVEFOVCAhIVxuICBcbiAgV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cbiAgUGxlYXNlIG5vdGUgdGhhdCBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50IHdpbGwgaW5jdXIgQVdTIHVzYWdlIGNvc3RzLlxuYCxcbiAgICBhd3NDcmVkZW50aWFsc1BlcnNpc3RlZDogJ+KclCBBV1MgY3JlZGVudGlhbHMgd3JpdHRlbiB0byBhcHAvdXRpbC9rOHMvYXdzX2VudnMnLFxuICAgIHRlcnJhZm9ybUNvbmZpZ3VyYXRpb25QZXJzaXN0ZWQ6IGDinJQgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24gd3JpdHRlbiB0byBhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzYFxufTtcbmV4cG9ydCBjb25zdCBSdW4xID0ge1xuICAgIGhlYWRlcjogKCkgPT4gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gICBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfF8gIHwgIFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICAgX3wgfF8gXG4gIHxfX3xfX3xfX19fX3xffF9fX3wgIHxfX19fX3xcblxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG4gIFRoaXMgd2lsbCBwcm9kdWNlIHRoZSBwZXJmb3JtYW5jZSBiYXNlbGluZSByZXN1bHRzLlxuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgYmFzZWxpbmUgdGVzdCBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICBZb3UgY2FuIGdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIEFQVCBzb3VyY2VzOlxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRcbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbkluIG9yZGVyIHRvIGJlIGFibGUgdG8gc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCwgd2Ugd2lsbCBub3cgY29uZmlndXJlIHRoZSBEQyBjbHVzdGVyIG9uIEFXU1xuXG4hISBJTVBPUlRBTlQgISFcblxuV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cblBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG5XZSB3aWxsIG5vdyBzdGFydCB0aGUgUGVyZm9ybWFuY2UgUmVncmVzc2lvbiB0ZXN0XG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG5gLFxuICAgIGZhaWx1cmU6IChzdGFnZSwgY3dkLCBwcm9kdWN0LCBlbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgbGV0IG91dHB1dCA9IGBcbiAg4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSAke3N0YWdlfSB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG5cbiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlc3QgcnVuIHdhcyBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bC4gXG4gIFBsZWFzZSByZXZpZXcgdGhlIHRlc3QgcmVzdWx0cyBhbmQgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIGlmIHJlcXVpcmVkLlxuYDtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBvdXRwdXQgKz0gYCAgJHtrZXl9OiAke3ZhbHVlfVxcbmApO1xuICAgICAgICBvdXRwdXQgKz0gYFxuICBGdWxsIHJlcG9ydCBjYW4gYmUgZm91bmQgaGVyZTpcbiAgJHtqb2luKHJlc3VsdHNCYXNlRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpfVxuXG4gIFlvdSBjYW4gcmVzdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1bjEgLS1wcm9kdWN0ICR7cHJvZHVjdH0gLS1jd2QgJHtjd2R9IC0tZW52aXJvbm1lbnQgJHtlbnZpcm9ubWVudH1cbmA7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBSdW4yID0ge1xuICAgIGhlYWRlcjogKHByb2R1Y3QpID0+IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8ICBffFxuICB8X198X198X19fX198X3xfX198ICB8X19ffFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdGluZyB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuICBUaGlzIHdpbGwgYWxsb3cgdGhlIGdlbmVyYXRpb24gb2YgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlcG9ydC5cbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICBJbiBhZGRpdGlvbiwgYSBMdWNlbmUgSW5kZXggVGltaW5nIFRlc3QgaXMgYWxzbyBwYXJ0IG9mIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3RzLmAgOiAnJ31cbiAgVGhlIHNlY29uZCBydW4gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczpcbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICAxLiBJbnN0YWxsIHRoZSBhcHAgaW50byB0aGUgY2x1c3RlclxuICAyLiBCZW5jaG1hcmsgdGhlIHJlLWluZGV4IHRpbWUgd2l0aCB5b3VyIGFwcCBpbnN0YWxsZWRcbiAgMy4gUGVyZm9ybWFuY2UgcmVzdWx0cyBnZW5lcmF0aW9uIHdpdGggdGhlIGFwcCBpbnN0YWxsZWRcbmAgOiBgXG4gIDEuIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gIDIuIFBlcmZvcm1hbmNlIHJlc3VsdHMgZ2VuZXJhdGlvbiB3aXRoIHRoZSBhcHAgaW5zdGFsbGVkXG5gfVxuICBJdCBpcyBpbXBvcnRhbnQgdGhhdCB5b3UgYXJlIHJ1bm5pbmcgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICBZb3UgY2FuIGdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIEFQVCBzb3VyY2VzOlxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRcbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbkluIG9yZGVyIHRvIGJlIGFibGUgdG8gc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCwgd2Ugd2lsbCBub3cgY29uZmlndXJlIHRoZSBEQyBjbHVzdGVyIG9uIEFXU1xuXG4hISBJTVBPUlRBTlQgISFcblxuV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cblBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHRoZSBQZXJmb3JtYW5jZSBSZWdyZXNzaW9uIHRlc3RcbmAsXG4gICAgc3VjY2VzczogYFxu4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcbmAsXG4gICAgZmFpbHVyZTogKHN0YWdlLCBjd2QsIHByb2R1Y3QsIGVudmlyb25tZW50LCByZXN1bHRzQmFzZURpciwgcmVzdWx0cykgPT4ge1xuICAgICAgICBsZXQgb3V0cHV0ID0gYFxuICDinJQgRmluaXNoZWQgdGhlIHBlcmZvcm1hbmNlICR7c3RhZ2V9IHRlc3Rpbmcgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcnVuMiAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IEx1Y2VuZVRpbWluZ1Rlc3QgPSB7XG4gICAgaGVhZGVyOiAoX3Byb2R1Y3QsIHN0YWdlKSA9PiBgXG4gIF9fICAgIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIFxuICB8ICB8ICB8ICB8ICB8ICAgICB8ICAgX198ICAgfCB8ICAgX198XG4gIHwgIHxfX3wgIHwgIHwgICAtLXwgICBfX3wgfCB8IHwgICBfX3xcbiAgfF9fX19ffF9fX19ffF9fX19ffF9fX19ffF98X19ffF9fX19ffFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfF8gICBffCAgICAgfCAgICAgfCAgICAgfCAgIHwgfCAgIF9ffFxuICAgIHwgfCB8LSAgIC18IHwgfCB8LSAgIC18IHwgfCB8ICB8ICB8XG4gICAgfF98IHxfX19fX3xffF98X3xfX19fX3xffF9fX3xfX19fX3xcbiAgICAgIF9fX19fIF9fX19fIF9fX19fIF9fX19fICAgICAgICAgXG4gICAgICB8XyAgIF98ICAgX198ICAgX198XyAgIF98ICAgICAgICBcbiAgICAgICAgfCB8IHwgICBfX3xfXyAgIHwgfCB8ICAgICAgICAgIFxuICAgICAgICB8X3wgfF9fX19ffF9fX19ffCB8X3wgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgdGhlIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdCB3aXRoIGFwcCBpbnN0YWxsZWRcbiAgVGhpcyBpcyBwYXJ0IG9mIHRoZSBQZXJmb3JtYW5jZSAke3N0YWdlfSB0ZXN0IChydW4gMilcblxuICBBZnRlciB0aGUgcmUtaW5kZXggaXMgY29tcGxldGVkIGEgc2NyZWVuc2hvdCBpcyBjcmVhdGVkIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHJlcXVpcmVkIHRlc3QgcmVzdWx0c1xuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgTHVjZW5lIGluZGV4IHRpbWluZyB0ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gIFlvdSBjYW4gZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVBUIHNvdXJjZXM6XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdFxuYCxcbiAgICByZWFkeUZvclByb3Zpc2lvbmluZzogYFxuSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgTHVjZW5lIGluZGV4IHRpbWluZyB0ZXN0LCB3ZSB3aWxsIG5vdyBjb25maWd1cmUgdGhlIERDIGNsdXN0ZXIgb24gQVdTXG5cbiEhIElNUE9SVEFOVCAhIVxuXG5XZSB3aWxsIGJlIHdyaXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGlzay4gVGhpcyB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuUGxlYXNlIG5vdGUgdGhhdCBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50IHdpbGwgaW5jdXIgQVdTIHVzYWdlIGNvc3RzLlxuYCxcbiAgICBzdGFydFRlc3Q6IGBcbiAgV2UgYXJlIHJlYWR5IHRvIHN0YXJ0IHRoZSBMdWNlbmUgSW5kZXggdGltaW5nIHRlc3RcbiAgT25jZSB0aGUgdGVzdCBpcyBmaW5pc2hlZCwgYSBicm93c2VyIHdpbmRvdyBpcyBvcGVuZWQgdG8gY2FwdHVyZSB0aGUgdGVzdCByZXN1bHRzLlxuXG4gICEhIElNUE9SVEFOVCAhIVxuXG4gIFRoaXMgbWF5IHRha2UgfjUwIG1pbnV0ZXMuIFBsZWFzZSBkbyBub3QgdGVybWluYXRlIHRoZSBwcm9ncmFtXG4gIERvIG5vdCBjbG9zZSB0aGUgYnJvd3NlciB3aW5kb3csIG9yIGVsc2UgdGhlIHRlc3Qgd2lsbCBmYWlsXG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgTHVjZW5lIEluZGV4IFRpbWluaWcgdGVzdCB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuYCxcbiAgICBmYWlsdXJlOiAoX3N0YWdlLCBjd2QsIHByb2R1Y3QsIGVudmlyb25tZW50KSA9PiBgXG4gIOKclCBGaW5pc2hlZCB0aGUgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0IHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG5cbiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlc3QgcnVuIHdhcyBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bC4gXG4gIFBsZWFzZSByZXZpZXcgdGhlIHRlc3QgcmVzdWx0cyBhbmQgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIGlmIHJlcXVpcmVkLlxuXG4gIFlvdSBjYW4gcmVzdGFydCB0aGUgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcmVpbmRleCAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYFxufTtcbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgIFxuICB8ICBfICB8ICAgX198IF9fICB8ICAgX198ICAgICB8IF9fICB8ICAgICB8ICBfICB8ICAgfCB8ICAgICB8ICAgX198ICBcbiAgfCAgIF9ffCAgIF9ffCAgICAtfCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgfCAgICAgfCB8IHwgfCAgIC0tfCAgIF9ffCAgXG4gIHxfX3wgIHxfX19fX3xfX3xfX3xfX3wgIHxfX19fX3xfX3xfX3xffF98X3xfX3xfX3xffF9fX3xfX19fX3xfX19fX3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgIFxuICAgICAgfCBfXyAgfCAgIF9ffCAgIF9ffCBfXyAgfCAgIF9ffCAgIF9ffCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICBcbiAgICAgIHwgICAgLXwgICBfX3wgIHwgIHwgICAgLXwgICBfX3xfXyAgIHxfXyAgIHwtICAgLXwgIHwgIHwgfCB8IHwgICAgXG4gICAgICB8X198X198X19fX198X19fX198X198X198X19fX198X19fX198X19fX198X19fX198X19fX198X3xfX198ICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8IF9fICB8ICAgX198ICBfICB8ICAgICB8IF9fICB8XyAgIF98ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHxfX3xfX3xfX19fX3xfX3wgIHxfX19fX3xfX3xfX3wgfF98ICAgICAgICAgICAgICAgICAgICAgIFxuXG5cbiAgV2UgYXJlIGdvaW5nIHRvIGdlbmVyYXRlIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlcG9ydFxuICBUaGUgcmVwb3J0IGNvbnN0aXN0cyBvZiBhIENTViBhbmQgUE5HIGZpbGUgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIFxuICB0aGUgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwIHJldmlld1xuYFxufTtcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyA9IHtcbiAgICBoZWFkZXI6IChwcm9kdWN0LCBzdGFnZSkgPT4gYFxuJHtzdGFnZSA9PT0gJ29uZS1ub2RlJyA/IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8XyAgfFxuICB8X198X198X19fX198X3xfX198ICB8X19ffFxuYCA6IHN0YWdlID09PSAndHdvLW5vZGUnID8gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gXG4gIHwgX18gIHwgIHwgIHwgICB8IHwgIHwgfCB8XG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgIHxfICB8XG4gIHxfX3xfX3xfX19fX3xffF9fX3wgICAgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICBcbmAgOiBgXG4gIF9fX19fIF9fX19fIF9fX19fICAgIF9fXyBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfCAgX3xcbiAgfCAgICAtfCAgfCAgfCB8IHwgfCAgfF8gIHxcbiAgfF9ffF9ffF9fX19ffF98X19ffCAgfF9fX3wgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYH1cblxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIGZvciAke3N0YWdlfSAke2NhcGl0YWxpemUocHJvZHVjdCl9IERDIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uczogKHJ1biAke2dldFJ1bkZvclN0YWdlKHN0YWdlKX0pXG5cbiAgVGhlICR7dG9OdW1iZXIoc3RhZ2UpfSBydW4gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgMS4gQWRqdXN0IHRoZSBlbnZpcm9ubWVudCB0byBhICR7c3RhZ2V9IGNsdXN0ZXJcbiAgMS4gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgMy4gU2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Rpbmcgd2l0aCB0aGUgYXBwIGluc3RhbGxlZFxuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgb24gYSBEQ0FQVCB2ZXJzaW9uIHRoYXQgaGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG4gIE1vcmUgaW5mb3JtYXRpb24gb24gZGV2ZWxvcGluZyBhcHAtc3BlY2lmaWMgYWN0aW9ucyBjYW4gYmUgZm91bmQgaGVyZTpcblxuJHtwcm9kdWN0ID09PSAnamlyYScgP1xuICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWppcmEvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5YFxuICAgICAgICA6IHByb2R1Y3QgPT09ICdjb25mbHVlbmNlJyA/XG4gICAgICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWNvbmZsdWVuY2UvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbnMtbG9jYWxseWBcbiAgICAgICAgICAgIDogcHJvZHVjdCA9PT0gJ2JhbWJvbycgP1xuICAgICAgICAgICAgICAgICcgIGh0dHBzOi8vZGV2ZWxvcGVyLmF0bGFzc2lhbi5jb20vcGxhdGZvcm0vbWFya2V0cGxhY2UvZGMtYXBwcy1wZXJmb3JtYW5jZS10b29sa2l0LXVzZXItZ3VpZGUtYmFtYm9vLyMyLS1hcHAtc3BlY2lmaWMtYWN0aW9ucy1kZXZlbG9wbWVudCdcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID09PSAnYml0YnVja2V0J1xuICAgICAgICAgICAgICAgIDogJyAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS1iaXRidWNrZXQvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5J31cbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbiAgSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrLCB3ZSB3aWxsIG5vdyByZWNvbmZpZ3VyZSB0aGUgREMgY2x1c3RlciBvbiBBV1NcblxuICAhISBJTVBPUlRBTlQgISFcbiAgXG4gIFdlIHdpbGwgYmUgd3JpdGluZyB0aGUgY29uZmlndXJhdGlvbiB0byBkaXNrLiBUaGlzIHdpbGwgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uXG4gIFBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG4gIFJlYWR5IHRvIHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uc1xuYCxcbiAgICBmYWlsdXJlOiAoc3RhZ2UsIGN3ZCwgcHJvZHVjdCwgZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSA9PiB7XG4gICAgICAgIGxldCBvdXRwdXQgPSBgXG7inJQgRmluaXNoZWQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnNcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1biR7Z2V0UnVuRm9yU3RhZ2Uoc3RhZ2UpfSAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IFNjYWxhYmlsaXR5UmVwb3J0TWVzc2FnZXMgPSB7XG4gICAgaGVhZGVyOiBgXG4gIF9fX19fIF9fX19fIF9fX19fIF9fICAgIF9fX19fIF9fX19fIF9fX19fIF9fICAgIF9fX19fIF9fX19fIF9fIF9fIFxuICB8ICAgX198ICAgICB8ICBfICB8ICB8ICB8ICBfICB8IF9fICB8ICAgICB8ICB8ICB8ICAgICB8XyAgIF98ICB8ICB8XG4gIHxfXyAgIHwgICAtLXwgICAgIHwgIHxfX3wgICAgIHwgX18gLXwtICAgLXwgIHxfX3wtICAgLXwgfCB8IHxfICAgX3xcbiAgfF9fX19ffF9fX19ffF9ffF9ffF9fX19ffF9ffF9ffF9fX19ffF9fX19ffF9fX19ffF9fX19ffCB8X3wgICB8X3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHwgX18gIHwgICBfX3wgIF8gIHwgICAgIHwgX18gIHxfICAgX3wgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8X198X198X19fX198X198ICB8X19fX198X198X198IHxffCAgICAgICAgICAgICAgICAgICAgXG5gXG59O1xuZXhwb3J0IGNvbnN0IFJlc3RhcnQgPSB7XG4gICAgaGVhZGVyOiBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfCBfXyAgfCAgIF9ffCAgIF9ffF8gICBffCAgXyAgfCBfXyAgfF8gICBffFxuICB8ICAgIC18ICAgX198X18gICB8IHwgfCB8ICAgICB8ICAgIC18IHwgfCAgXG4gIHxfX3xfX3xfX19fX3xfX19fX3wgfF98IHxfX3xfX3xfX3xfX3wgfF98ICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgcmVzdGFydCB0aGUgY2x1c3RlciB1c2VkIGluIHRoZSBEYXRhIENlbnRlciBBcHBsaWNhdGlvbiBQZXJmb3JtYW5jZSB0ZXN0aW5nLlxuYFxufTtcbmV4cG9ydCBjb25zdCBUZWFyZG93biA9IHtcbiAgICBoZWFkZXI6IGBcbiAgX19fX18gX19fX18gX19fX18gX19fX18gX19fXyAgX19fX18gXyBfIF8gX19fX18gXG4gIHxfICAgX3wgICBfX3wgIF8gIHwgX18gIHwgICAgXFxcXHwgICAgIHwgfCB8IHwgICB8IHxcbiAgICB8IHwgfCAgIF9ffCAgICAgfCAgICAtfCAgfCAgfCAgfCAgfCB8IHwgfCB8IHwgfFxuICAgIHxffCB8X19fX198X198X198X198X198X19fXy98X19fX198X19fX198X3xfX198XG5cbiAgV2Ugd2lsbCBub3cgdGVybWluYXRlIHRoZSBjbHVzdGVyIHVzZWQgaW4gdGhlIERhdGEgQ2VudGVyIEFwcGxpY2F0aW9uIFBlcmZvcm1hbmNlIHRlc3RpbmcuXG5gXG59O1xuIiwiaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBhcHAzaG91ciB9IGZyb20gJy4uLy4uL2hlbHBlcnMvbGljZW5jZXMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEFwcExpY2Vuc2UgPSAobGljZW5zZSwgZm9yY2UpID0+IHtcbiAgICBjb25zdCBhcHBMaWNlbnNlID0gbGljZW5zZSAmJiBleGlzdHNTeW5jKGxpY2Vuc2UpID8gcmVhZEZpbGVTeW5jKGxpY2Vuc2UsICd1dGY4JykgOiBsaWNlbnNlO1xuICAgIGlmIChmb3JjZSkge1xuICAgICAgICByZXR1cm4gYXBwTGljZW5zZSB8fCBhcHAzaG91cjtcbiAgICB9XG4gICAgY29uc29sZS5sb2cocHJvdmlzaW9uaW5nLmFza0ZvckFwcExpY2Vuc2UpO1xuICAgIHJldHVybiBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6IGBMaWNlbnNlYCxcbiAgICAgICAgZGVmYXVsdDogYXBwTGljZW5zZSB8fCBhcHAzaG91cixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtIH0gZnJvbSAnZnMnO1xuZXhwb3J0IGNvbnN0IHVwbG9hZFRvVVBNID0gYXN5bmMgKGJhc2VVcmwsIHBhdGgsIHVzZXJuYW1lLCBwYXNzd29yZCwgdmVyYm9zZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHVzZXJuYW1lICYmIHBhc3N3b3JkID8gQnVmZmVyLmZyb20oYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLz9vc19hdXRoVHlwZT1iYXNpY2AsIGNyZWRlbnRpYWxzID8ge1xuICAgICAgICBoZWFkZXJzOiB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9XG4gICAgfSA6IHVuZGVmaW5lZCkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHVwbG9hZCBwbHVnaW4gYXJjaGl2ZSBmaWxlIHRvIFVQTSwgdW5hYmxlIHRvIHJldHJpZXZlIHRva2VuJywgZXJyKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gcmVzcG9uc2UuaGVhZGVyc1sndXBtLXRva2VuJ107XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncGx1Z2luJywgY3JlYXRlUmVhZFN0cmVhbShwYXRoKSk7XG4gICAgICAgICAgICByZXR1cm4gYXhpb3MucG9zdChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLz90b2tlbj0ke3Rva2VufWAsIGZvcm1EYXRhLCB7IGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZm9ybURhdGEuZ2V0SGVhZGVycygpLFxuICAgICAgICAgICAgICAgICAgICAuLi5jcmVkZW50aWFscyA/IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH0gOiB7fVxuICAgICAgICAgICAgICAgIH0gfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmluaXNoZWQgdXBsb2FkaW5nIHBsdWdpbiBhcmNoaXZlIHRvIFVQTScpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNLCB1bmFibGUgdG8gcmV0cmlldmUgdG9rZW4gZnJvbSBoZWFkZXJzOicsIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmhlYWRlcnMsIG51bGwsIDIpKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IGNvbnN0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZCA9IGFzeW5jIChhcHBLZXksIGJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgdmVyYm9zZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHVzZXJuYW1lICYmIHBhc3N3b3JkID8gQnVmZmVyLmZyb20oYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdXYWl0aW5nIGZvciBwbHVnaW4gdG8gYmVjb21lIGVuYWJsZWQnKTtcbiAgICBsZXQgaXNFbmFibGVkID0gZmFsc2U7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICB3aGlsZSAoIWlzRW5hYmxlZCAmJiBjb3VudCA8IDEyMCkge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwMCkpO1xuICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKGBXYWl0aW5nIGZvciBwbHVnaW4gdG8gYmVjb21lIGVuYWJsZWQuLi4gJHtjb3VudH1zYCk7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYXhpb3MuZ2V0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvJHthcHBLZXl9LWtleWAsIGNyZWRlbnRpYWxzID8ge1xuICAgICAgICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfVxuICAgICAgICB9IDogdW5kZWZpbmVkKS5jYXRjaCgoKSA9PiAoeyBkYXRhOiB7IGVuYWJsZWQ6IGZhbHNlIH0gfSkpO1xuICAgICAgICBpc0VuYWJsZWQgPSBkYXRhPy5lbmFibGVkO1xuICAgICAgICBjb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gaXNFbmFibGVkO1xufTtcbmV4cG9ydCBjb25zdCByZWdpc3RlckxpY2Vuc2UgPSBhc3luYyAoYXBwS2V5LCBsaWNlbnNlLCBiYXNlVXJsLCB1c2VybmFtZSwgcGFzc3dvcmQsIHZlcmJvc2UgPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB1c2VybmFtZSAmJiBwYXNzd29yZCA/IEJ1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKSA6IG51bGw7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5L2xpY2Vuc2VgLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdYLUF0bGFzc2lhbi1Ub2tlbic6ICduby1jaGVjaycsXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3ZuZC5hdGwucGx1Z2lucytqc29uJyxcbiAgICAgICAgICAgIC4uLmNyZWRlbnRpYWxzID8geyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfSA6IHt9XG4gICAgICAgIH1cbiAgICB9KS5jYXRjaCgoKSA9PiAoeyBkYXRhOiB7fSB9KSk7XG4gICAgY29uc3QgeyByYXdMaWNlbnNlIH0gPSBkYXRhO1xuICAgIGlmICghcmF3TGljZW5zZSB8fCByYXdMaWNlbnNlICE9PSBsaWNlbnNlKSB7XG4gICAgICAgIHJldHVybiBheGlvcy5wdXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5L2xpY2Vuc2VgLCBgeyBcInJhd0xpY2Vuc2VcIjogXCIke2xpY2Vuc2V9XCIgfWAsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnWC1BdGxhc3NpYW4tVG9rZW4nOiAnbm8tY2hlY2snLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vdm5kLmF0bC5wbHVnaW5zK2pzb24nLFxuICAgICAgICAgICAgICAgIC4uLmNyZWRlbnRpYWxzID8geyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfSA6IHt9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmluaXNoZWQgdXBsb2FkaW5nIGxpY2Vuc2UgdG8gVVBNJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgbGljZW5zZSB0byBVUE0nLCBlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSwgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY3dkIGFzIHB3ZCB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHNpbXBsZUdpdCBmcm9tICdzaW1wbGUtZ2l0JztcbmltcG9ydCB7IGVtcHR5TGluZSB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBnZXRBcHREaWN0b3J5ID0gYXN5bmMgKGN3ZCwgbXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uLCBmb3JjZSkgPT4ge1xuICAgIC8vIFRyYW5zbGF0ZSBjb21tb24gcmVsYXRpdmUgcGF0aHMgdG8gYWJzb2x1dGUgcGF0aHNcbiAgICBsZXQgcmVzdWx0ID0gY3dkID9cbiAgICAgICAgY3dkLnN0YXJ0c1dpdGgoJ34vJylcbiAgICAgICAgICAgID8gY3dkLnJlcGxhY2UoJ34vJywgaG9tZWRpcigpKVxuICAgICAgICAgICAgOiBjd2Quc3RhcnRzV2l0aCgnLi8nKVxuICAgICAgICAgICAgICAgID8gY3dkLnJlcGxhY2UoJy4vJywgcHdkKCkgKyAnLycpXG4gICAgICAgICAgICAgICAgOiBjd2QgPT09ICcuJ1xuICAgICAgICAgICAgICAgICAgICA/IHB3ZCgpXG4gICAgICAgICAgICAgICAgICAgIDogY3dkXG4gICAgICAgIDogcHdkKCk7XG4gICAgLy8gSWYgd2UgYXJlIGluIGludGVyYWN0aXZlIG1vZGUsIHdlIHNob3VsZCBhc2sgcXVlc3Rpb25zIGZpcnN0XG4gICAgaWYgKCFmb3JjZSkge1xuICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IGluIHRoZSBBUFQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKSk7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIEFQVCBkaXJlY3RvcnksIHdlIHdpbGwgYmUgdXNpbmcgdGhlIGN1cnJlbnQgZGlyZWN0b3J5Li4uXG4gICAgICAgIGxldCB1c2VDdXJyZW50RGlyZWN0b3J5ID0gaXNDdXJyZW50RGlyZWN0b3J5RWxpZ2FibGU7XG4gICAgICAgIC8vIC4uLnVubGVzcyB0b2xkIG90aGVyd2lzZVxuICAgICAgICBpZiAoaXNDdXJyZW50RGlyZWN0b3J5RWxpZ2FibGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIFdlJ3ZlIGZvdW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeTpcbiAgJHtyZXN1bHR9XG5gKTtcbiAgICAgICAgICAgIHVzZUN1cnJlbnREaXJlY3RvcnkgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRG8geW91IHdpc2ggdG8gdXNlIHRoaXMgZGlyZWN0b3J5P2AsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHdlIGFyZSBub3QgZ29pbmcgdG8gdXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgYXNrIGZvciB0aGUgYWx0ZXJuYXRpdmVcbiAgICAgICAgbGV0IGRpcmVjdG9yeSA9IHJlc3VsdDtcbiAgICAgICAgaWYgKCF1c2VDdXJyZW50RGlyZWN0b3J5KSB7XG4gICAgICAgICAgICBkaXJlY3RvcnkgPSBhd2FpdCBpbnB1dCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBzcGVjaWZ5IHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgQXBwIFBlZm9ybWFuY2UgVG9vbGtpdCBpcyBsb2NhdGVkJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiByZXN1bHQsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRyYW5zbGF0ZSBjb21tb24gcmVsYXRpdmUgcGF0aHMgdG8gYWJzb2x1dGUgcGF0aHNcbiAgICAgICAgZGlyZWN0b3J5ID0gZGlyZWN0b3J5LnN0YXJ0c1dpdGgoJ34vJylcbiAgICAgICAgICAgID8gZGlyZWN0b3J5LnJlcGxhY2UoJ34vJywgaG9tZWRpcigpICsgJy8nKVxuICAgICAgICAgICAgOiBkaXJlY3Rvcnkuc3RhcnRzV2l0aCgnLi8nKVxuICAgICAgICAgICAgICAgID8gZGlyZWN0b3J5LnJlcGxhY2UoJy4vJywgcHdkKCkgKyAnLycpXG4gICAgICAgICAgICAgICAgOiBkaXJlY3RvcnkgPT09ICcuJ1xuICAgICAgICAgICAgICAgICAgICA/IHB3ZCgpXG4gICAgICAgICAgICAgICAgICAgIDogZGlyZWN0b3J5O1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcHJvdmlkZWQgYWx0ZXJuYXRpdmUgaXMgYSBEQ0FQVCBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgaXNEaXJlY3RvcnlFbGlnYWJsZSA9IGV4aXN0c1N5bmMocmVzb2x2ZShqb2luKGRpcmVjdG9yeSwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKSkpO1xuICAgICAgICBpZiAoIWlzRGlyZWN0b3J5RWxpZ2FibGUpIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGlzIG5vdCBhIERDQVBUIGRpcmVjdG9yeSwgYXNrIGlmIHdlIG5lZWQgdG8gY2xvbmUgaXQgZnJvbSBHaXRodWJcbiAgICAgICAgICAgIGNvbnN0IG11c3RDbG9uZUFQVCA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBUaGUgZGlyZWN0b3J5IGVpdGhlciBkb2Vzbid0IGV4aXN0LCBvciBpdCBkb2Vzbid0IGNvbnRhaW4gdGhlIEFwcCBQZWZvcm1hbmNlIFRvb2xraXQuIERvIHlvdSB3YW50IHRvIGNsb25lIERDQVBUIGZyb20gc291cmNlP2AsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIHdlIG11c3QgY2xvbmUgaXQgZnJvbSBHaXRodWIsIHdlIHNob3VsZCBjbG9uZSBpdCBmcm9tIEdpdGh1YlxuICAgICAgICAgICAgaWYgKG11c3RDbG9uZUFQVCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHNpbXBsZUdpdCgpLmNsb25lKCdodHRwczovL2dpdGh1Yi5jb20vYXRsYXNzaWFuL2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0LmdpdCcsIGRpcmVjdG9yeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBuZWVkcyB0byBiZSBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoZm9yIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdGluZylcbiAgICAgICAgaWYgKG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgLy8gQXNrIG5pY2VseS4uLlxuICAgICAgICAgICAgY29uc3QgaXNEZWZhdWx0Q29uZmlndXJhdGlvbiA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgY29uZmlybSB0aGF0IHRoZSBjaG9zZW4gZGlyZWN0b3J5IGlzIHVzaW5nIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIERDQVBUIChtYXN0ZXIgYnJhbmNoKSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gLi4uYnV0IGFsc28sIE5vIGlzIG5vdCBhbiBvcHRpb25cbiAgICAgICAgICAgIGlmICghaXNEZWZhdWx0Q29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgcmVxdWlyZWQgdG8gdXNlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSBtYXN0ZXIgdG8gY29udGludWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFzayBuaWNlbHkuLi5cbiAgICAgICAgICAgIGNvbnN0IGlzQXBwU3BlY2lmaWNDb25maWd1cmF0aW9uID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBjb25maXJtIHRoYXQgdGhlIGNob3NlbiBkaXJlY3RvcnkgaGFzIGEgRENBUFQgaW5zdGFsbGF0aW9uIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIC4uLmJ1dCBhbHNvLCBObyBpcyBub3QgYW4gb3B0aW9uXG4gICAgICAgICAgICBpZiAoIWlzQXBwU3BlY2lmaWNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdCBpcyByZXF1aXJlZCB0byBoYXZlIGFwcC1zcGVjaWZpYyBhY3Rpb25zIGluIG9yZGVyIHRvIGNvbnRpbnVlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2V0IHRoZSByZXN1bHQgdG8gdGhlIHByb3ZpZGVkIGRpcmVjdG9yeVxuICAgICAgICByZXN1bHQgPSBkaXJlY3Rvcnk7XG4gICAgICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSBhbmQgd2UgbmVlZCB0byB1c2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgd2Ugd2lsbCBjbG9uZSBpdCBmcm9tIEdpdGh1YlxuICAgIH1cbiAgICBlbHNlIGlmIChtdXN0VXNlRGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgLy8gSWYgdGhlIHByb3ZpZGVkIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdHMgd2UgY2FuIHVzZSBpdFxuICAgICAgICAvLyBPdGhlcndpc2UgdXNlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0byBlbnN1cmUgYSBmcmVzaCBub24tcGVyc2lzdGVudCBjaGVja291dFxuICAgICAgICByZXN1bHQgPSAhZXhpc3RzU3luYyhyZXN1bHQpXG4gICAgICAgICAgICA/IHJlc3VsdFxuICAgICAgICAgICAgOiBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ2RjYXB0Jyk7XG4gICAgICAgIC8vIEluZm9ybSB0aGUgdXNlciBvZiB0aGUgY2hvc2VuIGRpcmVjdG9yeVxuICAgICAgICBjb25zb2xlLmxvZygnICBJbnN0YWxsaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvZiBEQ0FQVCBmcm9tIHNvdXJjZSAobm9uLWludGVyYWN0aXZlIG1vZGUpJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7cmVzdWx0fWApO1xuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgICAgICBybVN5bmMocmVzdWx0LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIC8vIFJldHJpZXZlIERDQVBUIGZyb20gZ2l0aHViXG4gICAgICAgIGF3YWl0IHNpbXBsZUdpdCgpLmNsb25lKCdodHRwczovL2dpdGh1Yi5jb20vYXRsYXNzaWFuL2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0LmdpdCcsIHJlc3VsdCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCfinJQgRmluaXNoZWQgaW5zdGFsbGluZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRENBUFQgZnJvbSBzb3VyY2UgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUgYW5kIHdlIG5lZWQgdG8gdXNlIGFwcCBzcGVjaWZpYyBjb25maWd1cmF0aW9uLCBtYWtlIHN1cmUgdGhhdCBpdCBleGlzdHNcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgaW4gdGhlIEFQVCBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgaXNDdXJyZW50RGlyZWN0b3J5RWxpZ2FibGUgPSBleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKTtcbiAgICAgICAgLy8gSWYgdGhpcyBpcyBub3QgYSBEQ0FQVCBkaXJlY3RvcnksIHdlIGNhbm5vdCBjb250aW51ZVxuICAgICAgICBpZiAoIWlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAke3Jlc3VsdH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnICBVc2luZyBEQ0FQVCBmcm9tIGN1cnJlbnQgZGlyZWN0b3J5IChub24taW50ZXJhY3RpdmUgbW9kZSknKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtyZXN1bHR9YCk7XG4gICAgICAgIGVtcHR5TGluZSgpO1xuICAgIH1cbiAgICAvLyBUaGlzIHNob3VsZCBub3Qgb2NjdXIsIGJlY2F1c2UgZWl0aGVyIHdlIGhhdmUgZXN0YWJsaXNoZWQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGhhcyBEQ0FQVFxuICAgIC8vIG9yIHdlIGhhdmUgY2xvbmVkIGl0IGludG8gYSAobmV3KSBkaXJlY3RvcnkuIFRoaXMgaXMgbWVyZWx5IGEgY2hlY2sgZm9yIGlmIHRoZSBsYXR0ZXIgZmFpbGVkLlxuICAgIGlmICghZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgaW4gdGhlIHByb3ZpZGVkIGRpcmVjdG9yeSAke3Jlc3VsdH1gKTtcbiAgICB9XG4gICAgLy8gU29tZSBhZGRpdGlvbmFsIGNoZWNrcyB0byBlbnN1cmUgdGhhdCB3ZSBhcmUgaW4gYSB2YWxpZCBEQ0FQVCBkaXJlY3RvcnlcbiAgICBjb25zdCBoYXNFbnZGaWxlID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9hd3NfZW52cycpKTtcbiAgICBjb25zdCBoYXNTbmFwc2hvdEpTT04gPSBleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LXNuYXBzaG90cy5qc29uJykpO1xuICAgIGNvbnN0IGhhc1RlcnJhZm9ybVZhcmlhYmxlcyA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpO1xuICAgIGlmICghaGFzRW52RmlsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSByZXF1aXJlZCAnYXdzX2VucycgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2F3c19lbnZzJyl9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFoYXNTbmFwc2hvdEpTT04pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2RjYXB0LXNuYXBzaG90cy5qc29uJyBmaWxlLiBFeHBlY3RlZCB0byBmaW5kIGl0IGluICR7am9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQtc25hcHNob3RzLmpzb24nKX1gKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWhhc1RlcnJhZm9ybVZhcmlhYmxlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSByZXF1aXJlZCAnZGNhcHQudGZ2YXJzJyBmaWxlLiBFeHBlY3RlZCB0byBmaW5kIGl0IGluICR7am9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJyl9YCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuIiwiaW1wb3J0IHsgcGFzc3dvcmQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0QVdTQ3JlZGVudGlhbHMgPSBhc3luYyAocHJvZHVjdCwgZm9yY2UpID0+IHtcbiAgICAvLyBUcnkgZ2V0dGluZyB0aGUgQVdTIGNyZWRlbnRpYWxzIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgY29uc3QgeyBBV1NfQUNDRVNTX0tFWV9JRCwgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIH0gPSBwcm9jZXNzLmVudjtcbiAgICAvLyBJZiB0aGV5IGV4aXN0cyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHJldHVybiB0aGVtIGltbWVkaWF0ZWx5XG4gICAgaWYgKEFXU19BQ0NFU1NfS0VZX0lEICYmIEFXU19TRUNSRVRfQUNDRVNTX0tFWSkge1xuICAgICAgICByZXR1cm4gW0FXU19BQ0NFU1NfS0VZX0lELCBBV1NfU0VDUkVUX0FDQ0VTU19LRVldO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBhcmUgbm90IGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCB3ZSBzaG91bGQgYXNrIGZvciB0aGVtXG4gICAgaWYgKCFmb3JjZSkge1xuICAgICAgICAvLyBTaG93IGEgbWVzc2FnZSBhc2tpbmcgbmljZWx5XG4gICAgICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5hc2tGb3JBV1NDcmVkZW50aWFscyhwcm9kdWN0KSk7XG4gICAgICAgIGNvbnN0IGF3c19hY2Nlc3Nfa2V5X2lkID0gYXdhaXQgcGFzc3dvcmQoe1xuICAgICAgICAgICAgbWVzc2FnZTogYEFXUyBBY2Nlc3MgS2V5IElEYCxcbiAgICAgICAgICAgIHZhbGlkYXRlOiAoaW5wdXQpID0+IHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgaW5wdXQubGVuZ3RoID4gMFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5ID0gYXdhaXQgcGFzc3dvcmQoe1xuICAgICAgICAgICAgbWVzc2FnZTogYEFXUyBTZWNyZXQgQWNjZXNzIEtleWAsXG4gICAgICAgICAgICB2YWxpZGF0ZTogKGlucHV0KSA9PiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnICYmIGlucHV0Lmxlbmd0aCA+IDBcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV07XG4gICAgfVxuICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgYW5kIHRoZSBjcmVkZW50aWFscyBoYXZlIG5vdCBiZWVuIGZvdW5kLCB3ZSBzaG91bGQgdGhyb3cgYW4gZXJyb3JcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBBV1MgY3JlZGVudGlhbHMgY291bGQgbm90IGJlIGZvdW5kLiBQbGVhc2UgcHJvdmlkZSB0aGUgJ0FXU19BQ0NFU1NfS0VZX0lEJyBhbmQgJ0FXU19TRUNSRVRfQUNDRVNTX0tFWScgZW52aXJvbm1lbnQgdmFyaWFibGVzYCk7XG59O1xuIiwiaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0RW52aXJvbm1lbnROYW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5hc2tGb3JFbnZpcm9ubWVudCk7XG4gICAgcmV0dXJuIGlucHV0KHtcbiAgICAgICAgbWVzc2FnZTogYEVudmlyb25tZW50IG5hbWVgLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IHNlbGVjdCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmV4cG9ydCBjb25zdCBnZXRQcm9kdWN0ID0gYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiBzZWxlY3Qoe1xuICAgICAgICBtZXNzYWdlOiBgUGxlYXNlIGNob29zZSB0aGUgcHJvZHVjdCBmb3Igd2hpY2ggeW91IHdpc2ggdG8gcnVuIERDQVBUYCxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnSmlyYScsIHZhbHVlOiAnamlyYScgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0NvbmZsdWVuY2UnLCB2YWx1ZTogJ2NvbmZsdWVuY2UnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdCYW1ib28nLCB2YWx1ZTogJ2JhbWJvbycgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ0JpdGJ1Y2tldCcsIHZhbHVlOiAnYml0YnVja2V0JyB9XG4gICAgICAgIF1cbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBpbnN0YWxsID0gYXN5bmMgKGN3ZCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBcbiAgU3RhcnQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvblxuICBVc2luZyBEQ0FQVCBjb25maWd1cmF0aW9uIGZyb20gJHtjd2R9XG5gKTtcbiAgICBjb25zdCBiYXNlRGlyID0gam9pbihjd2QsICdhcHAvdXRpbC9rOHMnKTtcbiAgICB3cml0ZUZpbGVTeW5jKGpvaW4oYmFzZURpciwgJ291dHB1dHMuanNvbicpLCAnIyB0ZXJyYWZvcm0gb3V0cHV0JywgJ3V0Zi04Jyk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLWVudi1maWxlJywgJ2F3c19lbnZzJyxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L2RjYXB0LnRmdmFyczovZGF0YS1jZW50ZXItdGVycmFmb3JtL2NvbmYudGZ2YXJzYCxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L2RjYXB0LXNuYXBzaG90cy5qc29uOi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vZGNhcHQtc25hcHNob3RzLmpzb25gLFxuICAgICAgICAgICAgJy12JywgYCR7YmFzZURpcn0vbG9nczovZGF0YS1jZW50ZXItdGVycmFmb3JtL2xvZ3NgLFxuICAgICAgICAgICAgJy12JywgYCR7YmFzZURpcn0vb3V0cHV0cy5qc29uOi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vb3V0cHV0cy5qc29uYCxcbiAgICAgICAgICAgICdhdGxhc3NpYW5sYWJzL3RlcnJhZm9ybTpsYXRlc3QnLFxuICAgICAgICAgICAgJy4vaW5zdGFsbC5zaCcsICctYycsICdjb25mLnRmdmFycydcbiAgICAgICAgXSwgeyBjd2Q6IGJhc2VEaXIsIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhgXG7inJQgRmluaXNoZWQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvblxuICBDbHVzdGVyIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluICR7YmFzZURpcn0vb3V0cHV0cy5qc29uXG5gKTtcbn07XG5leHBvcnQgY29uc3QgcnVuVGVzdCA9IGFzeW5jIChjd2QsIGVudmlyb25tZW50LCBwcm9kdWN0KSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLWVudi1maWxlJywgJy4vYXBwL3V0aWwvazhzL2F3c19lbnZzJyxcbiAgICAgICAgICAgICctZScsIGBSRUdJT049dXMtZWFzdC0yYCxcbiAgICAgICAgICAgICctZScsIGBFTlZJUk9OTUVOVF9OQU1FPSR7ZW52aXJvbm1lbnR9YCxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH06L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdGAsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9L2FwcC91dGlsL2s4cy9ienRfb25fcG9kLnNoOi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vYnp0X29uX3BvZC5zaGAsXG4gICAgICAgICAgICAnYXRsYXNzaWFubGFicy90ZXJyYWZvcm06bGF0ZXN0JyxcbiAgICAgICAgICAgICdiYXNoJywgJ2J6dF9vbl9wb2Quc2gnLCBgJHtwcm9kdWN0fS55bWxgXG4gICAgICAgIF0sIHsgY3dkLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG59O1xuZXhwb3J0IGNvbnN0IHJlZ3Jlc3Npb25SZXBvcnQgPSBhc3luYyAoY3dkLCBydW4xRGlyLCBydW4yRGlyKSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLXdvcmtkaXInLCAnLy9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC9hcHAvcmVwb3J0c19nZW5lcmF0aW9uJyxcbiAgICAgICAgICAgICctLWVudHJ5cG9pbnQnLCAncHl0aG9uJyxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH06L2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0YCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjFEaXJ9Oi9yZXN1bHRzL3J1bjFgLFxuICAgICAgICAgICAgJy12JywgYCR7cnVuMkRpcn06L3Jlc3VsdHMvcnVuMmAsXG4gICAgICAgICAgICAnYXRsYXNzaWFuL2RjYXB0JyxcbiAgICAgICAgICAgICdjc3ZfY2hhcnRfZ2VuZXJhdG9yLnB5JywgJ3BlcmZvcm1hbmNlX3Byb2ZpbGUueW1sJ1xuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgZ2VuZXJhdGluZyB0aGUgUGVyZm9ybWFuY2UgUmVncmVzc2lvbiBSZXBvcnRgKTtcbn07XG5leHBvcnQgY29uc3Qgc2NhbGFiaWxpdHlSZXBvcnQgPSBhc3luYyAoY3dkLCByZXN1bHRzRGlyMSwgcmVzdWx0c0RpcjIsIHJlc3VsdHNEaXIzKSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLXdvcmtkaXInLCAnLy9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC9hcHAvcmVwb3J0c19nZW5lcmF0aW9uJyxcbiAgICAgICAgICAgICctLWVudHJ5cG9pbnQnLCAncHl0aG9uJyxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH06L2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0YCxcbiAgICAgICAgICAgICctdicsIGAke3Jlc3VsdHNEaXIxfTovZGNhcHQvc2NhbGVfcmVzdWx0c18xYCxcbiAgICAgICAgICAgICctdicsIGAke3Jlc3VsdHNEaXIyfTovZGNhcHQvc2NhbGVfcmVzdWx0c18yYCxcbiAgICAgICAgICAgICctdicsIGAke3Jlc3VsdHNEaXIzfTovZGNhcHQvc2NhbGVfcmVzdWx0c18zYCxcbiAgICAgICAgICAgICdhdGxhc3NpYW4vZGNhcHQnLFxuICAgICAgICAgICAgJ2Nzdl9jaGFydF9nZW5lcmF0b3IucHknLCAnc2NhbGVfcHJvZmlsZS55bWwnXG4gICAgICAgIF0sIHsgY3dkLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coYOKclCBGaW5pc2hlZCBnZW5lcmF0aW5nIHRoZSBTY2FsYWJpbGl0eSBCZW5jaG1hcmsgUmVwb3J0YCk7XG59O1xuZXhwb3J0IGNvbnN0IHJlc3RhcnQgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCwgcHJvZHVjdCkgPT4ge1xuICAgIHdyaXRlRmlsZVN5bmMoam9pbihjd2QsICcuL2FwcC91dGlsL2s4cy9kZWxldGVfcG9kLnNoJyksIGBcbmF3cyBla3MgdXBkYXRlLWt1YmVjb25maWcgLS1uYW1lIGF0bGFzLSRFTlZJUk9OTUVOVF9OQU1FLWNsdXN0ZXIgLS1yZWdpb24gJFJFR0lPTlxua3ViZWN0bCByb2xsb3V0IHJlc3RhcnQgc3RzLyRQUk9EVUNUIC1uIGF0bGFzc2lhblxua3ViZWN0bCByb2xsb3V0IHN0YXR1cyBzdHMgJFBST0RVQ1QgLW4gYXRsYXNzaWFuYCwgJ3V0ZjgnKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRvY2tlciA9IHNwYXduKCdkb2NrZXInLCBbXG4gICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgICctaXQnLFxuICAgICAgICAgICAgYC0tcHVsbD1hbHdheXNgLFxuICAgICAgICAgICAgJy0tZW52LWZpbGUnLCAnLi9hcHAvdXRpbC9rOHMvYXdzX2VudnMnLFxuICAgICAgICAgICAgJy1lJywgYFJFR0lPTj11cy1lYXN0LTJgLFxuICAgICAgICAgICAgJy1lJywgYEVOVklST05NRU5UX05BTUU9JHtlbnZpcm9ubWVudH1gLFxuICAgICAgICAgICAgJy1lJywgYFBST0RVQ1Q9JHtwcm9kdWN0fWAsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRgLFxuICAgICAgICAgICAgJy12JywgYCR7Y3dkfS9hcHAvdXRpbC9rOHMvZGVsZXRlX3BvZC5zaDovZGF0YS1jZW50ZXItdGVycmFmb3JtL2RlbGV0ZV9wb2Quc2hgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbmxhYnMvdGVycmFmb3JtOmxhdGVzdCcsXG4gICAgICAgICAgICAnYmFzaCcsICdkZWxldGVfcG9kLnNoJ1xuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xufTtcbmV4cG9ydCBjb25zdCB0ZXJtaW5hdGUgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCkgPT4ge1xuICAgIGNvbnN0IGJhc2VEaXIgPSByZXNvbHZlKGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJykpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgYC0tcHVsbD1hbHdheXNgLFxuICAgICAgICAgICAgJy0tZW52LWZpbGUnLCAnYXdzX2VudnMnLFxuICAgICAgICAgICAgJy0td29ya2RpcicsICcvL2RhdGEtY2VudGVyLXRlcnJhZm9ybScsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS90ZXJtaW5hdGVfY2x1c3Rlci5weTovZGF0YS1jZW50ZXItdGVycmFmb3JtL3Rlcm1pbmF0ZV9jbHVzdGVyLnB5YCxcbiAgICAgICAgICAgICdhdGxhc3NpYW4vZGNhcHQnLFxuICAgICAgICAgICAgJ3Rlcm1pbmF0ZV9jbHVzdGVyLnB5JywgJy0tY2x1c3Rlcl9uYW1lJywgYGF0bGFzLSR7ZW52aXJvbm1lbnR9LWNsdXN0ZXJgLCAnLS1hd3NfcmVnaW9uJywgJ3VzLWVhc3QtMidcbiAgICAgICAgXSwgeyBjd2Q6IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyksIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIHRlcm1pbmF0aW5nIHRoZSBEQyBjbHVzdGVyIG9uIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvbmApO1xufTtcbiIsImltcG9ydCB7IHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgcGVyc2lzdEFXU0NyZWRlbnRpYWxzID0gKGN3ZCwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSkgPT4ge1xuICAgIHdyaXRlRmlsZVN5bmMoam9pbihjd2QsICdhcHAvdXRpbC9rOHMvYXdzX2VudnMnKSwgYFxuIyBhd3NfZW52cyBmaWxlIHNob3VsZCBjb250YWluIEFXUyB2YXJpYWJsZXMgbmVlZGVkIGZvciBhdXRob3JpemF0aW9uICh3aXRob3V0IHF1b3RlcylcbkFXU19BQ0NFU1NfS0VZX0lEPSR7YXdzX2FjY2Vzc19rZXlfaWR9XG5BV1NfU0VDUkVUX0FDQ0VTU19LRVk9JHthd3Nfc2VjcmV0X2FjY2Vzc19rZXl9XG5gLnRyaW0oKSwgJ3V0Zi04Jyk7XG4gICAgY29uc29sZS5sb2cocHJvdmlzaW9uaW5nLmF3c0NyZWRlbnRpYWxzUGVyc2lzdGVkKTtcbn07XG4iLCJpbXBvcnQgaW5xdWlyZXIgZnJvbSAnaW5xdWlyZXInO1xuaW1wb3J0IFByZXNzVG9Db250aW51ZVByb21wdCBmcm9tICdpbnF1aXJlci1wcmVzcy10by1jb250aW51ZSc7XG5pbnF1aXJlci5yZWdpc3RlclByb21wdCgncHJlc3MtdG8tY29udGludWUnLCBQcmVzc1RvQ29udGludWVQcm9tcHQpO1xuZXhwb3J0IGNvbnN0IHdhaXRGb3JVc2VySW5wdXQgPSBhc3luYyAobWVzc2FnZSwgZm9yY2UpID0+IHtcbiAgICBjb25zdCB7IGtleSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KHtcbiAgICAgICAgbmFtZTogJ2tleScsXG4gICAgICAgIHR5cGU6ICdwcmVzcy10by1jb250aW51ZScsXG4gICAgICAgIGFueUtleTogdHJ1ZSxcbiAgICAgICAgcHJlc3NUb0NvbnRpbnVlTWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgd2hlbjogIWZvcmNlXG4gICAgfSk7XG4gICAgcmV0dXJuIGtleSB8fCB7IHZhbHVlOiB1bmRlZmluZWQgfTtcbn07XG4iLCJpbXBvcnQgeyBlbXB0eUxpbmUsIFJlc3RhcnQgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyByZXN0YXJ0IH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCByZXN0YXJ0Q2x1c3RlciA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gU2hvdyBuaWNlIGxpdHRsZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhSZXN0YXJ0LmhlYWRlcik7XG4gICAgLy8gQXNrIGZvciB0aGUgcHJvcGVyIGRpcmVjdG9yeSBvZiBBUFRcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGRpcmVjdG9yeSwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gQXNrIHRoZSB1c2VyIGlmIHRoZXkgYXJlIHJlYWR5IHRvIHNheSBnb29kYnllIHRvIHRoZWlyIGNsdXN0ZXJcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZS4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIGVtcHR5TGluZSgpO1xuICAgIC8vIFRlcm1pbmF0ZSBpdCFcbiAgICBhd2FpdCByZXN0YXJ0KGRpcmVjdG9yeSwgb3B0aW9ucy5lbnZpcm9ubWVudCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBBc2sgdGhlIHVzZXIgdG8gcXVpdCB0aGUgcHJvZ3JhbVxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGV4aXQuLi4nLCBvcHRpb25zLmZvcmNlKTtcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtLCBpbnB1dCwgcGFzc3dvcmQgYXMgcGFzc3dvcmRQcm9tcHQsIHNlbGVjdCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcmVzZXRzLCBTaW5nbGVCYXIgfSBmcm9tICdjbGktcHJvZ3Jlc3MnO1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tICdjb250ZW50LWRpc3Bvc2l0aW9uJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtLCBta2RpclN5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZWdpc3RlckxpY2Vuc2UsIHVwbG9hZFRvVVBNLCB3YWl0Rm9yUGx1Z2luVG9CZUVuYWJsZWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3VwbSc7XG5pbXBvcnQgeyBnZXRBcHBMaWNlbnNlIH0gZnJvbSAnLi9nZXRBcHBMaWNlbnNlJztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vZ2V0QVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgZ2V0RW52aXJvbm1lbnROYW1lIH0gZnJvbSAnLi9nZXRFbnZpcm9ubWVudE5hbWUnO1xuaW1wb3J0IHsgZ2V0UHJvZHVjdCB9IGZyb20gJy4vZ2V0UHJvZHVjdCc7XG5pbXBvcnQgeyByZXN0YXJ0Q2x1c3RlciB9IGZyb20gJy4vcmVzdGFydENsdXN0ZXInO1xuY29uc3QgcHJvZ3Jlc3NCYXIgPSBuZXcgU2luZ2xlQmFyKHtcbiAgICBmb3JtYXQ6ICcgIFt7YmFyfV0ge3BlcmNlbnRhZ2V9JSB8IEVUQToge2V0YV9mb3JtYXR0ZWR9bScsXG4gICAgZm9ybWF0VGltZTogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gcHJvZ3Jlc3NCYXIuZ2V0VG90YWwoKSAvIDYwO1xuICAgICAgICBjb25zdCB0aW1lUGFzc2VkID0gcm91bmQoKHByb2dyZXNzQmFyLmdldFRvdGFsKCkgLSB2YWx1ZSkgLyA2MCwgMC41KTtcbiAgICAgICAgcmV0dXJuIHRpbWVQYXNzZWQgPT09IHRvdGFsID8gYCR7dG90YWx9YCA6IGAke3RvdGFsIC0gdGltZVBhc3NlZH1gO1xuICAgIH0sXG4gICAgaGlkZUN1cnNvcjogdHJ1ZVxufSwgUHJlc2V0cy5sZWdhY3kpO1xuY29uc3Qgcm91bmQgPSAodmFsdWUsIHN0ZXAgPSAxLjApID0+IHtcbiAgICBjb25zdCBpbnYgPSAxLjAgLyBzdGVwO1xuICAgIHJldHVybiBNYXRoLmZsb29yKHZhbHVlICogaW52KSAvIGludjtcbn07XG5jb25zdCBkb3dubG9hZCA9IGFzeW5jIChhZGRvbktleSkgPT4ge1xuICAgIGNvbnN0IHRtcERpciA9IGpvaW4oaG9tZWRpcigpLCAnLmRjZHgnLCAndG1wJyk7XG4gICAgbGV0IHRtcEZpbGUgPSBqb2luKHRtcERpciwgYWRkb25LZXkpO1xuICAgIG1rZGlyU3luYyh0bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGxldCBkb3dubG9hZFVybCA9IGBodHRwczovL21hcmtldHBsYWNlLmF0bGFzc2lhbi5jb20vZG93bmxvYWQvcGx1Z2lucy8ke2FkZG9uS2V5fWA7XG4gICAgY29uc3QgeyBkYXRhOiBsaXN0aW5nIH0gPSBhd2FpdCBheGlvcy5nZXQoYGh0dHBzOi8vbWFya2V0cGxhY2UuYXRsYXNzaWFuLmNvbS9yZXN0LzIvYWRkb25zLyR7YWRkb25LZXl9P2hvc3Rpbmc9ZGF0YWNlbnRlciZ3aXRoVmVyc2lvbj10cnVlYCkuY2F0Y2goKCkgPT4gKHsgZGF0YTogbnVsbCB9KSk7XG4gICAgaWYgKGxpc3RpbmcpIHtcbiAgICAgICAgZG93bmxvYWRVcmwgPSBsaXN0aW5nLl9lbWJlZGRlZD8udmVyc2lvbj8uX2VtYmVkZGVkPy5hcnRpZmFjdD8uX2xpbmtzPy5iaW5hcnk/LmhyZWYgfHwgZG93bmxvYWRVcmw7XG4gICAgfVxuICAgIGF3YWl0IGF4aW9zKHtcbiAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgdXJsOiBkb3dubG9hZFVybCxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnc3RyZWFtJ1xuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICBjb25zdCBkaXNwb3NpdGlvbiA9IHBhcnNlKHJlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSk7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gZGlzcG9zaXRpb24/LnBhcmFtZXRlcnM/LmZpbGVuYW1lIHx8IGFkZG9uS2V5O1xuICAgICAgICB0bXBGaWxlID0gZmlsZW5hbWU7XG4gICAgICAgIHJlc3BvbnNlLmRhdGEucGlwZShjcmVhdGVXcml0ZVN0cmVhbSh0bXBGaWxlKSk7XG4gICAgfSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgcmV0dXJuIHRtcEZpbGU7XG59O1xuZXhwb3J0IGNvbnN0IGluc3RhbGxBcHAgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlIGZvciB1c2VybmFtZS9wYXNzd29yZFxuICAgIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnYWRtaW4nO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gb3B0aW9ucy5wYXNzd29yZCB8fCAnYWRtaW4nO1xuICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgd2Ugd2lsbCBkb3dubG9hZCBpdCBmcm9tIE1QQUNcbiAgICBpZiAob3B0aW9ucy5mb3JjZSkge1xuICAgICAgICAvLyBJbiBvcmRlciB0byBkbyBzbywgd2UgbmVlZCBhbiBhcHBrZXkuIElmIHRoaXMgaXMgbm90IHByb3ZpZGVkLCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICBpZiAoIW9wdGlvbnMuYXBwS2V5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBhdXRvbWF0aWNhbGx5IGluc3RhbGwgYXBwIGludG8gY2x1c3RlciwgYGFwcEtleWAgd2FzIG5vdCBwcm92aWRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdldCB0aGUgYXBwIGxpY2Vuc2VcbiAgICAgICAgY29uc3QgYXBwTGljZW5zZSA9IGF3YWl0IGdldEFwcExpY2Vuc2Uob3B0aW9ucy5saWNlbnNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgLy8gRG93bmxvYWQgdGhlIGZpbGUgZnJvbSBNUEFDXG4gICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZChvcHRpb25zLmFwcEtleSk7XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGxldCB0aW1lcklkID0gbnVsbDtcbiAgICAgICAgbGV0IGlzSW5zdGFsbGVkU3VjY2VzZnVsbHkgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUgKCFpc0luc3RhbGxlZFN1Y2Nlc2Z1bGx5ICYmIGNvdW50IDw9IDQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSW5zdGFsbGluZyB0aGUgYXBwICgke29wdGlvbnMuYXBwS2V5fSkgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFJldHJ5aW5nIGluc3RhbGxhdGlvbiBvZiB0aGUgYXBwICgke29wdGlvbnMuYXBwS2V5fSkgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJIChhdHRlbXB0ICR7Y291bnQgKyAxfSlgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU2hvdyBhIHByb2dyZXNzIGJhclxuICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0YXJ0KDE4MCwgMCk7XG4gICAgICAgICAgICAgICAgdGltZXJJZCA9IHNldEludGVydmFsKCgpID0+IHByb2dyZXNzQmFyLmluY3JlbWVudCgpLCAxMDAwKTtcbiAgICAgICAgICAgICAgICAvLyBVcGxvYWQgaXQgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVVBNIFJFU1QgQVBJXG4gICAgICAgICAgICAgICAgY29uc3QgaXNJbnN0YWxsZWQgPSBhd2FpdCB1cGxvYWRUb1VQTShvcHRpb25zLmJhc2VVcmwsIGZpbGUsIHVzZXJuYW1lLCBwYXNzd29yZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmICghaXNJbnN0YWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCBhcHAgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gcmVzdGFydCB0aGUgYXBwbGljYXRpb24gY29udGFpbmVyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucmVzdGFydEFmdGVySW5zdGFsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgcmVzdGFydHMsIHRoZSBwcm9kdWN0IG9wdGlvbiBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMucHJvZHVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJyAgRmFpbGVkIHRvIHJlc3RhcnQgYXBwbGljYXRpb24sIHJlcXVpcmVkIG9wdGlvbiBgcHJvZHVjdGAgaXMgbWlzc2luZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRm9yIHJlc3RhcnRzLCB0aGUgZW52aXJvbm1lbnQgb3B0aW9uIGlzIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIW9wdGlvbnMuZW52aXJvbm1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCcgIEZhaWxlZCB0byByZXN0YXJ0IGFwcGxpY2F0aW9uLCByZXF1aXJlZCBvcHRpb24gYHByb2R1Y3RgIGlzIG1pc3NpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9rLCBnb29kIHRvIGdvIVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2ggcmlnaHQsIHdlIGFsc28gbmVlZCBEQ0FQVCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlc3RhcnQgdGhlIGNsdXN0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIGZhbHNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBub3cgZ29pbmcgdG8gcmVzdGFydCB0aGUgY2x1c3RlciBhbmQgaG9wZSBmb3IgdGhlIGJlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIFJlc3RhcnRpbmcgJHtvcHRpb25zLnByb2R1Y3R9IHRvIGVuc3VyZSBhcHAgaW5zdGFsbGF0aW9uYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZXN0YXJ0Q2x1c3Rlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd3NfYWNjZXNzX2tleV9pZDogb3B0aW9ucy5hd3NfYWNjZXNzX2tleV9pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IG9wdGlvbnMuYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgcGx1Z2luIHRvIGJlIGVuYWJsZWRcbiAgICAgICAgICAgICAgICBjb25zdCBpc0VuYWJsZWQgPSBhd2FpdCB3YWl0Rm9yUGx1Z2luVG9CZUVuYWJsZWQob3B0aW9ucy5hcHBLZXksIG9wdGlvbnMuYmFzZVVybCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYXBwIGNvdWxkIG5vdCBiZSBlbmFibGVkIG9uIHRoZSBjbHVzdGVyLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGFwcGxpY2F0aW9uIGxvZyBmaWxlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBSZWdpc3RlciB0aGUgbGljZW5zZSAodXNlIHRoZSAzIGhvdXIgdGltZWJvbWIgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUpXG4gICAgICAgICAgICAgICAgY29uc3QgaXNMaWNlbnNlZCA9IGF3YWl0IHJlZ2lzdGVyTGljZW5zZShvcHRpb25zLmFwcEtleSwgYXBwTGljZW5zZSwgb3B0aW9ucy5iYXNlVXJsLCB1c2VybmFtZSwgcGFzc3dvcmQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTGljZW5zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbGljZW5zZSBjb3VsZCBub3QgYmUgYXBwbGllZCBmb3IgdGhlIGFwcCBvbiB0aGUgY2x1c3RlciwgcGxlYXNlIHJlZmVyIHRvIHRoZSBhcHBsaWNhdGlvbiBsb2cgZmlsZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXNJbnN0YWxsZWRTdWNjZXNmdWxseSA9IGlzSW5zdGFsbGVkICYmIGlzRW5hYmxlZCAmJiBpc0xpY2Vuc2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChjb3VudCA8PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgYSBtaW51dGUgKGNvb2xkb3duIHBlcmlvZCkgYmVmb3JlIHJldHJ5aW5nXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDAwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5zdG9wKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZVxuICAgICAgICBybVN5bmMoZmlsZSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgLy8gVGVsbCB0aGVtIHdlIHN1Y2NlZWRlZFxuICAgICAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgdGhlIGFwcCAoJHtvcHRpb25zLmFwcEtleX0pYCk7XG4gICAgICAgIC8vIElmIHdlJ3JlIGluIGludGVyYWN0aXZlIG1vZGUsIGxldCdzIGJlIG5pY2VcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhleSBoYXZlIG9wdGlvbnNcbiAgICAgICAgY29uc29sZS5sb2coYFxuICBJdCBpcyBub3cgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIEppcmEgY2x1c3Rlci5cbiAgV2UgY2FuIGluc3RhbGwgaXQgZnJvbSB0aGUgQXRsYXNzaWFuIE1hcmtldHBsYWNlIG9yIHlvdSBjYW4gaW5zdGFsbCBpdCBtYW51YWxseS5cbmApO1xuICAgICAgICAvLyBBc2sgdGhlbSBpZiB0aGV5IHByZWZlciBhdXRvbWF0aW9uIG9yIHRlZGlvdXMgbWFudWFsIHRhc2tzXG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IGF3YWl0IHNlbGVjdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgSG93IGRvIHlvdSB3YW50IHRvIGluc3RhbGwgdGhlIGFwcD9gLFxuICAgICAgICAgICAgZGVmYXVsdDogJ21wYWMnLFxuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICAgIHsgbmFtZTogJ01hcmtldHBsYWNlJywgdmFsdWU6ICdtcGFjJyB9LFxuICAgICAgICAgICAgICAgIHsgbmFtZTogJ01hbnVhbCcsIHZhbHVlOiAnbWFudWFsJyB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJZiB0aGV5IGNob3NlIGF1dG9tYXRpb24sIGxldCdzIGF1dG9tYXRlIVxuICAgICAgICBpZiAobWV0aG9kID09PSAnbXBhYycpIHtcbiAgICAgICAgICAgIC8vIEFzayB0aGVtIG5pY2VseSBmb3IgdGhlIGFwcCBrZXlcbiAgICAgICAgICAgIGNvbnN0IGFkZG9uS2V5ID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgcHJvdmlkZSB0aGUga2V5IG9mIHRoZSBhcHAgdG8gYmUgaW5zdGFsbGVkJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSBhcHAgbGljZW5zZSB0byBiZSB1c2VkXG4gICAgICAgICAgICBjb25zdCBhcHBMaWNlbnNlID0gYXdhaXQgZ2V0QXBwTGljZW5zZShvcHRpb25zLmxpY2Vuc2UsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAgICAgLy8gQXNrIHRoZW0gbmljZWx5IGZvciB0aGUgdXNlcm5hbWVcbiAgICAgICAgICAgIGNvbnN0IGFkbWluVXNlcm5hbWUgPSBhd2FpdCBpbnB1dCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBwcm92aWRlIHRoZSB1c2VybmFtZSBvZiBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB1c2VybmFtZSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSB1c2VybmFtZVxuICAgICAgICAgICAgY29uc3QgYWRtaW5QYXNzd29yZCA9IGF3YWl0IHBhc3N3b3JkUHJvbXB0KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHByb3ZpZGUgdGhlIHVzZXJuYW1lIG9mIGEgc3lzdGVtIGFkbWluaXN0cmF0b3InLFxuICAgICAgICAgICAgICAgIHZhbGlkYXRlOiBpdGVtID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyAmJiBpdGVtLmxlbmd0aCA+IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQXNrIHRoZW0gbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVzdGFydCB0aGUgYXBwbGljYXRpb25cbiAgICAgICAgICAgIGNvbnN0IHJlc3RhcnRBZnRlckluc3RhbGwgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVzdGFydCB0aGUgaG9zdCBhcHBsaWNhdGlvbiBhZnRlciBpbnN0YWxsYXRpb24/JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gVGVsbCB0aGVtIHdlIGFyZSBzdGFydGluZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBJbnN0YWxsaW5nIHRoZSBhcHAgKCR7YWRkb25LZXl9KSBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVbml2ZXJzYWwgUGx1Z2luIE1hbmFnZXIgUkVTVCBBUElgKTtcbiAgICAgICAgICAgIC8vIFNob3cgYSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0YXJ0KDE4MCwgMCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lcklkID0gc2V0SW50ZXJ2YWwoKCkgPT4gcHJvZ3Jlc3NCYXIuaW5jcmVtZW50KCksIDEwMDApO1xuICAgICAgICAgICAgLy8gRG93bmxvYWQgdGhlIGZpbGUgZnJvbSBNUEFDXG4gICAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZG93bmxvYWQoYWRkb25LZXkpO1xuICAgICAgICAgICAgLy8gVXBsb2FkIGl0IGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVQTSBSRVNUIEFQSVxuICAgICAgICAgICAgY29uc3QgaXNJbnN0YWxsZWQgPSBhd2FpdCB1cGxvYWRUb1VQTShvcHRpb25zLmJhc2VVcmwsIGZpbGUsIGFkbWluVXNlcm5hbWUsIGFkbWluUGFzc3dvcmQsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmICghaXNJbnN0YWxsZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbnN0YWxsIGFwcCBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVbml2ZXJzYWwgUGx1Z2luIE1hbmFnZXIgUkVTVCBBUEknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gcmVzdGFydCB0aGUgYXBwbGljYXRpb24gY29udGFpbmVyXG4gICAgICAgICAgICBpZiAocmVzdGFydEFmdGVySW5zdGFsbCkge1xuICAgICAgICAgICAgICAgIC8vIEFzayB0aGVtIG5pY2VseSBmb3IgdGhlIGhvc3QgcHJvZHVjdFxuICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3QgPSBvcHRpb25zLnByb2R1Y3QgfHwgYXdhaXQgZ2V0UHJvZHVjdCgpO1xuICAgICAgICAgICAgICAgIC8vIEFzayBmb3IgdGhlIEFXUyBjcmVkZW50aWFsc1xuICAgICAgICAgICAgICAgIGNvbnN0IFthd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5XSA9IGF3YWl0IGdldEFXU0NyZWRlbnRpYWxzKHByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAgICAgICAgIC8vIEFzayBmb3IgdGhlIGVudmlyb25tZW50IG5hbWVcbiAgICAgICAgICAgICAgICBjb25zdCBlbnZpcm9ubWVudCA9IG9wdGlvbnMuZW52aXJvbm1lbnQgfHwgYXdhaXQgZ2V0RW52aXJvbm1lbnROYW1lKCk7XG4gICAgICAgICAgICAgICAgLy8gT2ggcmlnaHQsIHdlIGFsc28gbmVlZCBEQ0FQVCBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHJlc3RhcnQgdGhlIGNsdXN0ZXJcbiAgICAgICAgICAgICAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCBmYWxzZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlIG5vdyBnb2luZyB0byByZXN0YXJ0IHRoZSBjbHVzdGVyIGFuZCBob3BlIGZvciB0aGUgYmVzdFxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgIFJlc3RhcnRpbmcgJHtvcHRpb25zLnByb2R1Y3R9IHRvIGVuc3VyZSBhcHAgaW5zdGFsbGF0aW9uYCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgcmVzdGFydENsdXN0ZXIoe1xuICAgICAgICAgICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3Q6IHByb2R1Y3QsXG4gICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICAgICAgICAgICAgICAgICAgYXdzX2FjY2Vzc19rZXlfaWQ6IGF3c19hY2Nlc3Nfa2V5X2lkLFxuICAgICAgICAgICAgICAgICAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IGF3c19zZWNyZXRfYWNjZXNzX2tleSxcbiAgICAgICAgICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBwbHVnaW4gdG8gYmUgZW5hYmxlZFxuICAgICAgICAgICAgY29uc3QgaXNFbmFibGVkID0gYXdhaXQgd2FpdEZvclBsdWdpblRvQmVFbmFibGVkKGFkZG9uS2V5LCBvcHRpb25zLmJhc2VVcmwsIGFkbWluVXNlcm5hbWUsIGFkbWluUGFzc3dvcmQsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmICghaXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYXBwIGNvdWxkIG5vdCBiZSBlbmFibGVkIG9uIHRoZSBjbHVzdGVyLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGFwcGxpY2F0aW9uIGxvZyBmaWxlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIHByb3ZpZGVkIGxpY2Vuc2VcbiAgICAgICAgICAgIGNvbnN0IGlzTGljZW5zZWQgPSBhd2FpdCByZWdpc3RlckxpY2Vuc2UoYWRkb25LZXksIGFwcExpY2Vuc2UsIG9wdGlvbnMuYmFzZVVybCwgYWRtaW5Vc2VybmFtZSwgYWRtaW5QYXNzd29yZCwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFpc0xpY2Vuc2VkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbGljZW5zZSBjb3VsZCBub3QgYmUgYXBwbGllZCBmb3IgdGhlIGFwcCBvbiB0aGUgY2x1c3RlciwgcGxlYXNlIHJlZmVyIHRvIHRoZSBhcHBsaWNhdGlvbiBsb2cgZmlsZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGVcbiAgICAgICAgICAgIHJtU3luYyhmaWxlLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgLy8gU3RvcCB0aGUgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICBwcm9ncmVzc0Jhci5zdG9wKCk7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpO1xuICAgICAgICAgICAgLy8gVGVsbCB0aGVtIHdlIHN1Y2NlZWRlZFxuICAgICAgICAgICAgY29uc29sZS5sb2coYOKclCBGaW5pc2hlZCBpbnN0YWxsaW5nIHRoZSBhcHAgKCR7YWRkb25LZXl9KWApO1xuICAgICAgICAgICAgLy8gVGhleSBjaG9zZSB2aW9sZW5jZVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUnViIGl0IGluIHRoZWlyIGZhY2VcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgWW91IGNhbiBub3cgaW5zdGFsbCB0aGUgYXBwIG1hbnVhbGx5IGludG8gdGhlIGNsdXN0ZXIuXG4gIFBsZWFzZSBnbyB0byB0aGUgZm9sbG93aW5nIHBhZ2U6XG4gICAgXG4gICR7b3B0aW9ucy5iYXNlVXJsfS9wbHVnaW5zL3NlcnZsZXQvdXBtP3NvdXJjZT1zaWRlX25hdl9tYW5hZ2VfYWRkb25zXG5gKTtcbiAgICAgICAgICAgIC8vIE1ha2UgdGhlbSBncm92ZWxcbiAgICAgICAgICAgIGNvbnN0IGlzSW5zdGFsbGVkTWFudWFsbHkgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgUGxlYXNlIGNvbmZpcm0gdGhhdCB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIGFwcCBtYW51YWxseWBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gSWYgdGhlIGFwcCBhaW4ndCBpbnN0YWxsZWQsIHdlIGFpbid0IGRvaW5nIG5vdGhpbicuIFNvIHdlIGJldHRlciB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICAgICAgaWYgKCFpc0luc3RhbGxlZE1hbnVhbGx5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdCBpcyByZXF1aXJlZCB0byBpbnN0YWxsIHRoZSBhcHAgdG8gcnVuIHRoZSBzZWNvbmQgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgYXN5bmNFeGl0SG9vaywgZ3JhY2VmdWxFeGl0IH0gZnJvbSAnZXhpdC1ob29rJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuZXhwb3J0IGNvbnN0IEFjdGlvbkhhbmRsZXIgPSBhc3luYyAocHJvZ3JhbSwgeyBhY3Rpb24sIGVycm9ySGFuZGxlciB9LCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgb3BzID0gb3B0aW9ucyB8fCBwcm9ncmFtLm9wdHMoKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgICAgYXN5bmNFeGl0SG9vayhhc3luYyAoY29kZSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlcnJvckhhbmRsZXIob3BzKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcmVqZWN0aW5nIHRoZSBwcm9taXNlIHRvIGF2b2lkIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBcIkNhbGxpbmcgcHJvY2Vzcy5leGl0XCIgbG9nIG1lc3NhZ2UgZnJvbSBleGl0LWhvb2tcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycjtcbiAgICAgICAgICAgICAgICByZWplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHdhaXQ6IDYwICogMSAqIDEwMDBcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdGlvbihvcHMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZ3JhY2VmdWxFeGl0KDApO1xuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnIuaXNzdWVzLmZvckVhY2goaXNzdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYFVuYWJsZSB0byBwYXJzZSBvcHRpb24gJHtpc3N1ZS5wYXRoLmpvaW4oJywnKX06ICR7aXNzdWUubWVzc2FnZX1cXG5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgfHwgdHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdyYWNlZnVsRXhpdCgxKTtcbiAgICAgICAgfSk7XG4gICAgfSkuY2F0Y2gobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwcm9ncmFtLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZSxcbiAgICAgICAgICAgIC8vIHdlIGNhbiBhc3N1bWUgYSBjbGVhbiBleGl0XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB2ZXJzaW9ucyBmcm9tICcuLi8uLi9hc3NldHMvdmVyc2lvbnMuanNvbic7XG5leHBvcnQgY29uc3QgU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzID0gei5lbnVtKFtcbiAgICAncG9zdGdyZXNxbCcsXG4gICAgJ215c3FsJyxcbiAgICAnbXNzcWwnXG5dKTtcbmV4cG9ydCBjb25zdCBTdXBwb3J0ZWRNU1NRTEVkaXRpb25zID0gei5lbnVtKFtcbiAgICAnRGV2ZWxvcGVyJyxcbiAgICAnRXhwcmVzcycsXG4gICAgJ1N0YW5kYXJkJyxcbiAgICAnRW50ZXJwcmlzZScsXG4gICAgJ0VudGVycHJpc2VDb3JlJ1xuXSk7XG5leHBvcnQgY29uc3QgRGF0YWJhc2VPcHRpb25zID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcyxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSksXG4gICAgZGF0YWJhc2U6IHouc3RyaW5nKCkuZGVmYXVsdCgnZGNkeCcpLFxuICAgIHVzZXJuYW1lOiB6LnN0cmluZygpLmRlZmF1bHQoJ2RjZHgnKSxcbiAgICBwYXNzd29yZDogei5zdHJpbmcoKS5kZWZhdWx0KCdkY2R4JyksXG4gICAgY2xlYW46IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHBydW5lOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICB2ZXJib3NlOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKClcbn0pO1xuZXhwb3J0IGNvbnN0IFBvc3RncmVTUUxPcHRpb25zID0gRGF0YWJhc2VPcHRpb25zLmV4dGVuZCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLnJlZmluZShpdGVtID0+IGl0ZW0gPT09IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMucG9zdGdyZXNxbCkuZGVmYXVsdChTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLnBvc3RncmVzcWwpLFxuICAgIHRhZzogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiB2ZXJzaW9uc1tTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLnBvc3RncmVzcWxdLmluY2x1ZGVzKGl0ZW0pKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSkuZGVmYXVsdCg1NDMyKSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ29yZy5wb3N0Z3Jlc3FsLkRyaXZlcicpLmRlZmF1bHQoJ29yZy5wb3N0Z3Jlc3FsLkRyaXZlcicpXG59KTtcbmV4cG9ydCBjb25zdCBNeVNRTE9wdGlvbnMgPSBEYXRhYmFzZU9wdGlvbnMuZXh0ZW5kKHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5teXNxbCkuZGVmYXVsdChTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm15c3FsKSxcbiAgICB0YWc6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gdmVyc2lvbnNbU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5teXNxbF0uaW5jbHVkZXMoaXRlbSkpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKS5kZWZhdWx0KDMzMDYpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnY29tLm15c3FsLmpkYmMuRHJpdmVyJykuZGVmYXVsdCgnY29tLm15c3FsLmpkYmMuRHJpdmVyJylcbn0pO1xuZXhwb3J0IGNvbnN0IE1TU1FMT3B0aW9ucyA9IERhdGFiYXNlT3B0aW9ucy5leHRlbmQoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm1zc3FsKS5kZWZhdWx0KFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXNzcWwpLFxuICAgIHRhZzogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiB2ZXJzaW9uc1tTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm1zc3FsXS5pbmNsdWRlcyhpdGVtKSkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgZWRpdGlvbjogU3VwcG9ydGVkTVNTUUxFZGl0aW9ucy5kZWZhdWx0KCdEZXZlbG9wZXInKSxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSkuZGVmYXVsdCgxNDMzKSxcbiAgICB1c2VybmFtZTogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnc2EnKS5kZWZhdWx0KCdzYScpLFxuICAgIHBhc3N3b3JkOiB6LnN0cmluZygpLmRlZmF1bHQoJ0RhdGFDZW50ZXJEWCEnKSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ2NvbS5taWNyb3NvZnQuc3Fsc2VydmVyLmpkYmMuU1FMU2VydmVyRHJpdmVyJykuZGVmYXVsdCgnY29tLm1pY3Jvc29mdC5zcWxzZXJ2ZXIuamRiYy5TUUxTZXJ2ZXJEcml2ZXInKVxufSk7XG4iLCJpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcyB9IGZyb20gJy4vRGF0YWJhc2UnO1xuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyA9IHouZW51bShbXG4gICAgJ2ppcmEnLFxuICAgICdjb25mbHVlbmNlJyxcbiAgICAnYml0YnVja2V0JyxcbiAgICAnYmFtYm9vJ1xuXSk7XG5leHBvcnQgY29uc3QgQXBwbGljYXRpb25PcHRpb25zID0gei5vYmplY3Qoe1xuICAgIG5hbWU6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICB0YWc6IHouc3RyaW5nKCkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgZGF0YWJhc2U6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5kZWZhdWx0KCdwb3N0Z3Jlc3FsJyksXG4gICAgZGF0YWJhc2VUYWc6IHouc3RyaW5nKCkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgcG9ydDogei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpLmRlZmF1bHQoJzgwJyksXG4gICAgY29udGV4dFBhdGg6IHouc3RyaW5nKCksXG4gICAgeG1zOiB6LnN0cmluZygpLmRlZmF1bHQoJzEwMjRtJyksXG4gICAgeG14OiB6LnN0cmluZygpLmRlZmF1bHQoJzEwMjRtJyksXG4gICAgd2F0Y2g6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGV4dDogei5hcnJheSh6LnN0cmluZygpKSxcbiAgICBpbnN0YWxsOiB6LmJvb2xlYW4oKSxcbiAgICBvdXRwdXREaXJlY3Rvcnk6IHouc3RyaW5nKCksXG4gICAgYWN0aXZhdGVQcm9maWxlczogei5zdHJpbmcoKSxcbiAgICBjbGVhbjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgcHJ1bmU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGRlYnVnOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAgIGN3ZDogei5zdHJpbmcoKVxufSkucGFydGlhbCh7XG4gICAgY29udGV4dFBhdGg6IHRydWUsXG4gICAgZXh0OiB0cnVlLFxuICAgIGluc3RhbGw6IHRydWUsXG4gICAgb3V0cHV0RGlyZWN0b3J5OiB0cnVlLFxuICAgIGFjdGl2YXRlUHJvZmlsZXM6IHRydWUsXG4gICAgY3dkOiB0cnVlXG59KTtcbiIsImltcG9ydCB7IERPTVBhcnNlciwgWE1MU2VyaWFsaXplciB9IGZyb20gJ0B4bWxkb20veG1sZG9tJztcbmltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBYTUxQYXJzZXIgfSBmcm9tICdmYXN0LXhtbC1wYXJzZXInO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeHBhdGggZnJvbSAneHBhdGgnO1xuaW1wb3J0IHsgU3VwcG9ydGVkQXBwbGljYXRpb25zIH0gZnJvbSAnLi4vdHlwZXMvQXBwbGljYXRpb24nO1xuZXhwb3J0IGNsYXNzIEFNUFMge1xuICAgIG9wdGlvbnM7XG4gICAgbWF2ZW4gPSBudWxsO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7XG4gICAgICAgIHByb2ZpbGVzOiBbXVxuICAgIH0pIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFB1YmxpYyBNZXRob2RzXG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMubWF2ZW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGtpbGxlZCA9IHRoaXMubWF2ZW4ua2lsbCgwKTtcbiAgICAgICAgICAgIGlmICgha2lsbGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gdGVybWluYXRlIGV4aXN0aW5nIE1hdmVuIHByb2Nlc3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBidWlsZChhcmdzKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXZlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtpbGxlZCA9IHRoaXMubWF2ZW4ua2lsbCgwKTtcbiAgICAgICAgICAgICAgICBpZiAoIWtpbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gdGVybWluYXRlIGV4aXN0aW5nIE1hdmVuIHByb2Nlc3MnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tYXZlbiA9IHNwYXduKCdtdm4nLCBbJ3BhY2thZ2UnLCAuLi5hcmdzXSwgeyBjd2Q6IHRoaXMub3B0aW9ucz8uY3dkIHx8IGN3ZCgpLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICAgICAgdGhpcy5tYXZlbi5vbignZXhpdCcsIChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXZlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09IDAgfHwgY29kZSA9PT0gMTMwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYE1hdmVuIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlzQXRsYXNzaWFuUGx1Z2luID0gKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmdldE5vZGVzKCcvLypbbG9jYWwtbmFtZSgpPVxcJ3BhY2thZ2luZ1xcJ10nKTtcbiAgICAgICAgICAgIHJldHVybiBub2Rlcy5zb21lKGl0ZW0gPT4gaXRlbS50ZXh0Q29udGVudCA9PT0gJ2F0bGFzc2lhbi1wbHVnaW4nKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGdldEFwcGxpY2F0aW9uVmVyc2lvbigpIHtcbiAgICAgICAgY29uc3QgYXBwbGljYXRpb25zID0gdGhpcy5nZXRBcHBsaWNhdGlvbnMoKTtcbiAgICAgICAgaWYgKGFwcGxpY2F0aW9ucy5zaXplID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBbLCB2ZXJzaW9uXSA9IEFycmF5LmZyb20oYXBwbGljYXRpb25zKVswXTtcbiAgICAgICAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFwcGxpY2F0aW9ucy5zaXplID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgQXRsYXNzaWFuIFBsdWdpbiBwcm9qZWN0IGNvbnRhaW5zIG11bHRpcGxlIEFNUFMgY29uZmlndXJhdGlvbiwgdW5hYmxlIHRvIGRlY2lkZSB3aGljaCBwcm9kdWN0IHRvIHVzZSDwn5iwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0QXBwbGljYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGFwcGxpY2F0aW9ucyA9IHRoaXMuZ2V0QXBwbGljYXRpb25zKCk7XG4gICAgICAgIGlmIChhcHBsaWNhdGlvbnMuc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgW25hbWVdID0gQXJyYXkuZnJvbShhcHBsaWNhdGlvbnMpWzBdO1xuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXBwbGljYXRpb25zLnNpemUgPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBBdGxhc3NpYW4gUGx1Z2luIHByb2plY3QgY29udGFpbnMgbXVsdGlwbGUgQU1QUyBjb25maWd1cmF0aW9uLCB1bmFibGUgdG8gZGVjaWRlIHdoaWNoIHByb2R1Y3QgdG8gdXNlIPCfmLAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZ2V0QXBwbGljYXRpb25zKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXROb2RlcygnLy8qW2xvY2FsLW5hbWUoKT1cXCdncm91cElkXFwnIGFuZCB0ZXh0KCk9XFwnY29tLmF0bGFzc2lhbi5tYXZlbi5wbHVnaW5zXFwnXScpO1xuICAgICAgICBjb25zdCBub2Rlc1dpdGhBY3RpdmVQcm9maWxlID0gbm9kZXMuZmlsdGVyKG5vZGUgPT4gdGhpcy5pc0FjdGl2YXRlZFByb2ZpbGUobm9kZSkpO1xuICAgICAgICBub2Rlc1dpdGhBY3RpdmVQcm9maWxlLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBsdWdpbiB9ID0gdGhpcy50b09iamVjdChwYXJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoJ2FtcHMtbWF2ZW4tcGx1Z2luJyA9PT0gcGx1Z2luPy5hcnRpZmFjdElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgY29uZmlndXJhdGlvbiB9ID0gcGx1Z2luIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbj8ucHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZ3VyYXRpb24/LnByb2R1Y3RzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24ucHJvZHVjdHMuZm9yRWFjaCgocHJvZHVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdXBwb3J0ZWRBcHBsaWNhdGlvbiA9IHRoaXMuZ2V0U3VwcG9ydGVkQXBwbGljYXRpb24ocHJvZHVjdC5pZCkgfHwgdGhpcy5nZXRTdXBwb3J0ZWRBcHBsaWNhdGlvbihwcm9kdWN0Lmluc3RhbmNlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydGVkQXBwbGljYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmRvUHJvcGVydHlSZXBsYWNlbWVudChwcm9kdWN0LnZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0KHN1cHBvcnRlZEFwcGxpY2F0aW9uLCB2ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBwcm9kdWN0IH0gPSBjb25maWd1cmF0aW9uPy5wcm9kdWN0cyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvZHVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdXBwb3J0ZWRBcHBsaWNhdGlvbiA9IHRoaXMuZ2V0U3VwcG9ydGVkQXBwbGljYXRpb24ocHJvZHVjdC5pZCkgfHwgdGhpcy5nZXRTdXBwb3J0ZWRBcHBsaWNhdGlvbihwcm9kdWN0Lmluc3RhbmNlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydGVkQXBwbGljYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmRvUHJvcGVydHlSZXBsYWNlbWVudChwcm9kdWN0LnZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuc2V0KHN1cHBvcnRlZEFwcGxpY2F0aW9uLCB2ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VwcG9ydGVkQXBwbGljYXRpb24gPSB0aGlzLmdldFN1cHBvcnRlZEFwcGxpY2F0aW9uKHBsdWdpbj8uYXJ0aWZhY3RJZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldFZlcnNpb24obm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0ZWRBcHBsaWNhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChzdXBwb3J0ZWRBcHBsaWNhdGlvbiwgdmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHJpdmF0ZSBNZXRob2RzXG4gICAgZ2V0U3VwcG9ydGVkQXBwbGljYXRpb24odmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlPy5pbmNsdWRlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzLmppcmEpKSB7XG4gICAgICAgICAgICByZXR1cm4gU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcy5qaXJhO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlPy5pbmNsdWRlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzLmNvbmZsdWVuY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcy5jb25mbHVlbmNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbHVlPy5pbmNsdWRlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzLmJhbWJvbykpIHtcbiAgICAgICAgICAgIHJldHVybiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzLmJhbWJvbztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZT8uaW5jbHVkZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcy5iaXRidWNrZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcy5iaXRidWNrZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGdldFZlcnNpb24obm9kZSkge1xuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgY29uc3QgeyBwbHVnaW4gfSA9IHRoaXMudG9PYmplY3QocGFyZW50Tm9kZSk7XG4gICAgICAgICAgICBjb25zdCB7IGNvbmZpZ3VyYXRpb24gfSA9IHBsdWdpbiB8fCB7fTtcbiAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uPy5wcm9kdWN0VmVyc2lvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRvUHJvcGVydHlSZXBsYWNlbWVudChwbHVnaW4uY29uZmlndXJhdGlvbi5wcm9kdWN0VmVyc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb25maWd1cmF0aW9uPy5wcm9kdWN0cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3QgPSBBcnJheS5pc0FycmF5KGNvbmZpZ3VyYXRpb24/LnByb2R1Y3RzKSA/IGNvbmZpZ3VyYXRpb24/LnByb2R1Y3RzWzBdIDogY29uZmlndXJhdGlvbi5wcm9kdWN0cy5wcm9kdWN0O1xuICAgICAgICAgICAgICAgIGlmIChwcm9kdWN0ICYmIHByb2R1Y3QudmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb1Byb3BlcnR5UmVwbGFjZW1lbnQocHJvZHVjdC52ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZG9Qcm9wZXJ0eVJlcGxhY2VtZW50KHZhbHVlKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBwcm9maWxlLCByZXBsYWNlIHByb2ZpbGUgcHJvcGVydGllcyBmaXJzdCBhcyB0aGV5IHRha2UgcHJlY2VkZW5jZVxuICAgICAgICBjb25zdCBwcm9maWxlUHJvcGVydGllcyA9IHRoaXMuZ2V0UHJvcGVydGllcygpO1xuICAgICAgICBPYmplY3QuZW50cmllcyhwcm9maWxlUHJvcGVydGllcykuZm9yRWFjaCgoW3Byb3BlcnR5S2V5LCBwcm9wZXJ0eVZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2VBbGwoYCRcXHske3Byb3BlcnR5S2V5fX1gLCBwcm9wZXJ0eVZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykuZm9yRWFjaCgoW3Byb3BlcnR5S2V5LCBwcm9wZXJ0eVZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2VBbGwoYCRcXHske3Byb3BlcnR5S2V5fX1gLCBwcm9wZXJ0eVZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGdldFByb3BlcnRpZXMoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZ2V0Tm9kZXMoJy8vKltsb2NhbC1uYW1lKCk9XFwncHJvcGVydGllc1xcJ10nKTtcbiAgICAgICAgY29uc3Qgbm9kZXNXaXRoQWN0aXZlUHJvZmlsZSA9IG5vZGVzLmZpbHRlcihub2RlID0+IHRoaXMuaXNBY3RpdmF0ZWRQcm9maWxlKG5vZGUpKTtcbiAgICAgICAgbm9kZXNXaXRoQWN0aXZlUHJvZmlsZS5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBwcm9wZXJ0aWVzIH0gPSB0aGlzLnRvT2JqZWN0KG5vZGUpO1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocHJvcGVydGllcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiByZXN1bHRba2V5XSA9IHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGdldE5vZGVzKGV4cHJlc3Npb24sIHNpbmdsZSkge1xuICAgICAgICBjb25zdCBwb21GaWxlUGF0aCA9IGpvaW4odGhpcy5vcHRpb25zPy5jd2QgfHwgY3dkKCksICcuL3BvbS54bWwnKTtcbiAgICAgICAgY29uc3QgaGFzUG9tRmlsZSA9IGV4aXN0c1N5bmMocG9tRmlsZVBhdGgpO1xuICAgICAgICBpZiAoaGFzUG9tRmlsZSkge1xuICAgICAgICAgICAgY29uc3QgeG1sID0gcmVhZEZpbGVTeW5jKHBvbUZpbGVQYXRoLCAndXRmOCcpO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh4bWwsICd0ZXh0L3htbCcpO1xuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBzaW5nbGUgPyB4cGF0aC5zZWxlY3QoZXhwcmVzc2lvbiwgZG9jLCB0cnVlKSA6IHhwYXRoLnNlbGVjdChleHByZXNzaW9uLCBkb2MsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNpbmdsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHRvT2JqZWN0KG5vZGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBYTUxQYXJzZXIoKTtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2UobmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhub2RlKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmluZFBhcmVudE5vZGVCeVRhZ05hbWUodGFnTmFtZSwgbm9kZSkge1xuICAgICAgICBjb25zdCB7IHBhcmVudE5vZGUgfSA9IG5vZGU7XG4gICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSB0YWdOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50Tm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRQYXJlbnROb2RlQnlUYWdOYW1lKHRhZ05hbWUsIHBhcmVudE5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpc0FjdGl2YXRlZFByb2ZpbGUobm9kZSkge1xuICAgICAgICBjb25zdCBwcm9maWxlUGFyZW50Tm9kZSA9IHRoaXMuZmluZFBhcmVudE5vZGVCeVRhZ05hbWUoJ3Byb2ZpbGUnLCBub2RlKTtcbiAgICAgICAgY29uc3QgcHJvZmlsZU5vZGUgPSBwcm9maWxlUGFyZW50Tm9kZSA/IHRoaXMudG9PYmplY3QocHJvZmlsZVBhcmVudE5vZGUpIDogbnVsbDtcbiAgICAgICAgaWYgKCFwcm9maWxlTm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJvZmlsZU5vZGUgJiYgKHByb2ZpbGVOb2RlLmFjdGl2ZUJ5RGVmYXVsdCA9PT0gJ3RydWUnIHx8IHRoaXMub3B0aW9ucy5wcm9maWxlcy5pbmNsdWRlcyhwcm9maWxlTm9kZS5wcm9maWxlLmlkKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IGlzUmVjdXJzaXZlQnVpbGQgPSAobGFzdEJ1aWxkQ29tcGxldGVkKSA9PiBsYXN0QnVpbGRDb21wbGV0ZWQgPiAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSA1ICogMTAwMCk7XG4iLCJleHBvcnQgY29uc3Qgc2hvd1JlY3Vyc2l2ZUJ1aWxkV2FybmluZyA9IChvdXRwdXREaXJlY3RvcnkpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJlY3Vyc2l2ZSBidWlsZCB0cmlnZ2VyIGRldGVjdGVkLiBUaGUgbGFzdCBidWlsZCBjb21wbGV0ZWQgbGFzdCB0aGFuIDUgc2Vjb25kcyBhZ29cblRoaXMgbWF5IGluZGljYXRlIHRoYXQgdGhlIGJ1aWxkIGNoYW5nZXMgZmlsZXMgb3V0c2lkZSBvZiB0aGUgb3V0cHV0IGRpcmVjdG9yeVxuQWx0ZXJuYXRpdmVseSwgTWF2ZW4gaXMgdXNpbmcgYSBkaWZmZXJlbnQgb3V0cHV0IGRpcmVjdG9yeSB0aGFuIGNvbmZpZ3VyZWQ6XG4nJHtvdXRwdXREaXJlY3Rvcnl9J1xuXG5QbGVhc2UgbWFrZSBzdXJlIHRvIGNoZWNrIHlvdXIgYnVpbGQgcHJvY2VzcyBhbmQvb3Igc3BlY2lmeSBhIGRpZmZlcmVudCBvdXRwdXQgZGlyZWN0b3J5IHVzaW5nIHRoZSAnLW8nIG9wdGlvblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09YCk7XG59O1xuIiwiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ3Byb2Nlc3MnO1xuZXhwb3J0IGNsYXNzIEN1c3RvbUJ1aWxkZXIge1xuICAgIG9wdGlvbnM7XG4gICAgcHJvYyA9IG51bGw7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbnN0cnVjdG9yXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUHVibGljIE1ldGhvZHNcbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5wcm9jKSB7XG4gICAgICAgICAgICBjb25zdCBraWxsZWQgPSB0aGlzLnByb2Mua2lsbCgwKTtcbiAgICAgICAgICAgIGlmICgha2lsbGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gdGVybWluYXRlIGV4aXN0aW5nIGJ1aWxkIHByb2Nlc3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBidWlsZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBraWxsZWQgPSB0aGlzLnByb2Mua2lsbCgwKTtcbiAgICAgICAgICAgICAgICBpZiAoIWtpbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gdGVybWluYXRlIGV4aXN0aW5nIGJ1aWxkIHByb2Nlc3MnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBleGVjU3luYyh0aGlzLm9wdGlvbnMuY21kLCB7IGN3ZDogdGhpcy5vcHRpb25zPy5jd2QgfHwgY3dkKCksIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc3RhdHVzIH0gPSBlcnI7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQnVpbGQgZXhpdGVkIHdpdGggY29kZSAke3N0YXR1c31gKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgRG9ja2Vyb2RlIGZyb20gJ2RvY2tlcm9kZSc7XG5pbXBvcnQgeyBjd2QgfSBmcm9tICdwcm9jZXNzJztcbmNvbnN0IGRvY2tlciA9IG5ldyBEb2NrZXJvZGUoKTtcbmV4cG9ydCBjb25zdCBnZXRSdW5uaW5nQ29udGFpbmVySWRzID0gYXN5bmMgKGFwcGxpY2F0aW9uKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVycyA9IGF3YWl0IGRvY2tlci5saXN0Q29udGFpbmVycyh7IGZpbHRlcnM6IHtcbiAgICAgICAgICAgIHN0YXR1czogWydydW5uaW5nJ10sXG4gICAgICAgICAgICBsYWJlbDogW2Bjb20uZG9ja2VyLmNvbXBvc2Uuc2VydmljZT0ke2FwcGxpY2F0aW9ufWBdXG4gICAgICAgIH0gfSk7XG4gICAgcmV0dXJuIGNvbnRhaW5lcnMubWFwKGl0ZW0gPT4gaXRlbS5JZCk7XG59O1xuZXhwb3J0IGNvbnN0IGNvcHkgPSBhc3luYyAoc291cmNlUGF0aCwgZGVzdGluYXRpb25QYXRoKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFsnY3AnLCBzb3VyY2VQYXRoLCBkZXN0aW5hdGlvblBhdGhdLCB7IGN3ZDogY3dkKCksIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgcmVzb2x2ZSBhcyByZXNvbHZlUGF0aCB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBEb2NrZXIgZnJvbSAnLi9kb2NrZXInO1xuaW1wb3J0IHsgdXBsb2FkVG9VUE0gfSBmcm9tICcuL3VwbSc7XG5leHBvcnQgY29uc3QgSW5zdGFsbGVyID0gYXN5bmMgKG5hbWUsIHBhdGgsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjb250YWluZXJJZHMgPSBhd2FpdCBEb2NrZXIuZ2V0UnVubmluZ0NvbnRhaW5lcklkcyhuYW1lKTtcbiAgICBpZiAoIWNvbnRhaW5lcklkcyB8fCBjb250YWluZXJJZHMubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgY29uc29sZS5sb2coYFRoZXJlIGFyZSBubyBydW5uaW5nIGluc3RhbmNlIG9mICR7bmFtZX0sIHVuYWJsZSB0byBpbnN0YWxsIHBsdWdpbiDwn6SUYCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29udGFpbmVySWRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFRoZXJlIGFyZSBtdWx0cGxlIHJ1bm5pbmcgaW5zdGFuY2Ugb2YgJHtuYW1lfSwgdW5hYmxlIHRvIGRldGVybWluZSB3aGljaCBvbmUgdG8gdXNlIPCfpJRgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb250YWluZXJJZCA9IGNvbnRhaW5lcklkc1swXTtcbiAgICBpZiAoY29udGFpbmVySWQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMub2JyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgdXBkYXRlZCBwbHVnaW4sIHVwbG9hZGluZyBpdCB0byBVUE0gb24gcnVubmluZyBpbnN0YW5jZXMgb2YgJHtuYW1lfWApO1xuICAgICAgICAgICAgY29uc3QgaG9zdFVybCA9IG9wdGlvbnMucG9ydCA/IGBsb2NhbGhvc3Q6JHtvcHRpb25zLnBvcnR9YCA6IGBsb2NhbGhvc3RgO1xuICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMudXNlcm5hbWUgJiYgb3B0aW9ucy5wYXNzd29yZCA/IGBodHRwOi8vJHtvcHRpb25zLnVzZXJuYW1lfToke29wdGlvbnMucGFzc3dvcmR9QCR7aG9zdFVybH1gIDogYGh0dHA6Ly8ke2hvc3RVcmx9YDtcbiAgICAgICAgICAgIGF3YWl0IHVwbG9hZFRvVVBNKHJlc29sdmVQYXRoKG9wdGlvbnMuY3dkIHx8IGN3ZCgpLCBwYXRoKSwgYmFzZVVybCkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHVwbG9hZCBwbHVnaW4gYXJjaGl2ZSBmaWxlIHRvIFVQTScsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCB1cGRhdGVkIHBsdWdpbiwgdXBsb2FkaW5nIGl0IHRvIFF1aWNrUmVsb2FkIG9uIHJ1bm5pbmcgaW5zdGFuY2VzIG9mICR7bmFtZX1gKTtcbiAgICAgICAgICAgIGF3YWl0IERvY2tlci5jb3B5KHJlc29sdmVQYXRoKG9wdGlvbnMuY3dkIHx8IGN3ZCgpLCBwYXRoKSwgYCR7Y29udGFpbmVySWR9Oi9vcHQvcXVpY2tyZWxvYWQvYClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiBjb25zb2xlLmxvZygnRmluaXNoZWQgdXBsb2FkaW5nIHBsdWdpbiBhcmNoaXZlIHRvIFF1aWNrUmVsb2FkJykpXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHVwbG9hZCBwbHVnaW4gYXJjaGl2ZSBmaWxlIHRvIFF1aWNrUmVsb2FkJywgZXJyKSk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgd2F0Y2ggfSBmcm9tICdjaG9raWRhcic7XG5pbXBvcnQgeyBjd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IGlzUmVjdXJzaXZlQnVpbGQgfSBmcm9tICcuLi9oZWxwZXJzL2lzUmVjdXJzaXZlQnVpbGQnO1xuaW1wb3J0IHsgc2hvd1JlY3Vyc2l2ZUJ1aWxkV2FybmluZyB9IGZyb20gJy4uL2hlbHBlcnMvc2hvd1JlY3Vyc2l2ZUJ1aWxkV2FybmluZyc7XG5pbXBvcnQgeyBBTVBTIH0gZnJvbSAnLi9hbXBzJztcbmltcG9ydCB7IEN1c3RvbUJ1aWxkZXIgfSBmcm9tICcuL0N1c3RvbUJ1aWxkZXInO1xuaW1wb3J0IHsgSW5zdGFsbGVyIH0gZnJvbSAnLi9JbnN0YWxsZXInO1xuZXhwb3J0IGNvbnN0IEZpbGVXYXRjaGVyID0gKG5hbWUsIG9wdGlvbnMsIG1hdmVuT3B0cywgaW5zdGFsbE9ubHkgPSBmYWxzZSkgPT4ge1xuICAgIGxldCBsYXN0QnVpbGRDb21wbGV0ZWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBjb25zdCBvdXRwdXREaXJlY3RvcnkgPSBvcHRpb25zLm91dHB1dERpcmVjdG9yeSB8fCAndGFyZ2V0JztcbiAgICBjb25zdCBwYXR0ZXJucyA9IG9wdGlvbnMuZXh0IHx8IFsnKiovKiddO1xuICAgIGNvbnNvbGUubG9nKGBXYXRjaGluZyBmaWxlc3lzdGVtIGZvciBjaGFuZ2VzIHRvIHNvdXJjZSBmaWxlcyAoJHtwYXR0ZXJucy5qb2luKCcsICcpfSlgKTtcbiAgICBjb25zdCBhbXBzID0gbmV3IEFNUFMoe1xuICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICBwcm9maWxlczogb3B0aW9ucy5hY3RpdmF0ZVByb2ZpbGVzPy5zcGxpdCgnLCcpIHx8IFtdXG4gICAgfSk7XG4gICAgY29uc3QgZGVsaXZlcmFibGVFeHRlbnNpb24gPSBvcHRpb25zLm9iciA/ICcub2JyJyA6ICcuamFyJztcbiAgICByZXR1cm4gd2F0Y2gocGF0dGVybnMsIHtcbiAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCB8fCBjd2QoKSxcbiAgICAgICAgdXNlUG9sbGluZzogdHJ1ZSxcbiAgICAgICAgaW50ZXJ2YWw6IDIgKiAxMDAwLFxuICAgICAgICBiaW5hcnlJbnRlcnZhbDogMiAqIDEwMDAsXG4gICAgICAgIGF3YWl0V3JpdGVGaW5pc2g6IHRydWUsXG4gICAgICAgIHBlcnNpc3RlbnQ6IHRydWUsXG4gICAgICAgIGF0b21pYzogdHJ1ZVxuICAgIH0pLm9uKCdjaGFuZ2UnLCBhc3luYyAocGF0aCkgPT4ge1xuICAgICAgICBpZiAob3B0aW9ucy5pbnN0YWxsICYmIHBhdGguc3RhcnRzV2l0aChvdXRwdXREaXJlY3RvcnkpICYmIHBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aChkZWxpdmVyYWJsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIGF3YWl0IEluc3RhbGxlcihuYW1lLCBwYXRoLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghcGF0aC5zdGFydHNXaXRoKG91dHB1dERpcmVjdG9yeSkgJiYgIWluc3RhbGxPbmx5KSB7XG4gICAgICAgICAgICBpZiAoaXNSZWN1cnNpdmVCdWlsZChsYXN0QnVpbGRDb21wbGV0ZWQpKSB7XG4gICAgICAgICAgICAgICAgc2hvd1JlY3Vyc2l2ZUJ1aWxkV2FybmluZyhvdXRwdXREaXJlY3RvcnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RldGVjdGVkIGZpbGUgY2hhbmdlLCByZWJ1aWxkaW5nIEF0bGFzaWFuIERhdGEgQ2VudGVyIHBsdWdpbicpO1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5leGVjKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGFtcHMuYnVpbGQobWF2ZW5PcHRzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGaW5pc2hlZCBidWlsZGluZyBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgcGx1Z2luIGZvciAke25hbWV9Li4uIPCfkqpgKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZhaWxlZCB0byBidWlsZCBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgcGx1Z2luIGZvciAke25hbWV9Li4uIPCfmLBgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBidWlsZGVyID0gbmV3IEN1c3RvbUJ1aWxkZXIoeyBjbWQ6IG9wdGlvbnMuZXhlYywgY3dkOiBvcHRpb25zLmN3ZCB8fCBjd2QoKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYnVpbGRlci5idWlsZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZpbmlzaGVkIGJ1aWxkaW5nIEF0bGFzc2lhbiBEYXRhIENlbnRlciBwbHVnaW4gZm9yICR7bmFtZX0uLi4g8J+SqmApO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIGJ1aWxkIEF0bGFzc2lhbiBEYXRhIENlbnRlciBwbHVnaW4gZm9yICR7bmFtZX0uLi4g8J+YsGApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGFzdEJ1aWxkQ29tcGxldGVkID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyByZWFscGF0aFN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgdG9BYnNvbHV0ZVBhdGggPSAocmVsYXRpdmVQYXRoKSA9PiB7XG4gICAgY29uc3QgWywgZmlsZVBhdGhdID0gcHJvY2Vzcy5hcmd2O1xuICAgIGNvbnN0IGV4ZWN1dGFibGVGaWxlRGlyID0gZGlybmFtZShyZWFscGF0aFN5bmMoZmlsZVBhdGgpKTtcbiAgICBjb25zdCBiYXNlZGlyID0gZXhlY3V0YWJsZUZpbGVEaXIuc3Vic3RyaW5nKDAsIGV4ZWN1dGFibGVGaWxlRGlyLmluZGV4T2YoJ2RjZHgnKSArIDQpO1xuICAgIHJldHVybiBqb2luKGJhc2VkaXIsIHJlbGF0aXZlUGF0aC5yZXBsYWNlQWxsKCcuLi8nLCAnJykpO1xufTtcbiIsImltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IHRvQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi90b0Fic29sdXRlUGF0aCc7XG5leHBvcnQgY29uc3QgZ2V0VmVyc2lvbnMgPSAoKSA9PiB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyh0b0Fic29sdXRlUGF0aCgnLi4vLi4vYXNzZXRzL3ZlcnNpb25zLmpzb24nKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgdmVyc2lvbnMgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICAgIHJldHVybiB2ZXJzaW9ucztcbn07XG4iLCIjIS91c3IvYmluL2VudiBub2RlXG5pbXBvcnQgeyBDb21tYW5kIGFzIENvbW1hbmRlciwgSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBncmFjZWZ1bEV4aXQgfSBmcm9tICdleGl0LWhvb2snO1xuaW1wb3J0IHsgZ2xvYiB9IGZyb20gJ2dsb2InO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBnZXRBcHBMaWNlbnNlIH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2V0QXBwTGljZW5zZSc7XG5pbXBvcnQgeyBpbnN0YWxsQXBwIH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvaW5zdGFsbEFwcCc7XG5pbXBvcnQgeyBBY3Rpb25IYW5kbGVyIH0gZnJvbSAnLi4vaGVscGVycy9BY3Rpb25IYW5kbGVyJztcbmltcG9ydCB7IEFNUFMgfSBmcm9tICcuLi9oZWxwZXJzL2FtcHMnO1xuaW1wb3J0IHsgRmlsZVdhdGNoZXIgfSBmcm9tICcuLi9oZWxwZXJzL0ZpbGVXYXRjaGVyJztcbmltcG9ydCB7IGdldFZlcnNpb25zIH0gZnJvbSAnLi4vaGVscGVycy9nZXRWZXJzaW9ucyc7XG5pbXBvcnQgeyBJbnN0YWxsZXIgfSBmcm9tICcuLi9oZWxwZXJzL0luc3RhbGxlcic7XG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmRlcigpO1xuY29uc3QgdmVyc2lvbnMgPSBnZXRWZXJzaW9ucygpO1xuY29uc3QgQ29tbWFuZCA9ICgpID0+IHtcbiAgICBsZXQgcXVpY2tSZWxvYWQgPSBudWxsO1xuICAgIHJldHVybiB7XG4gICAgICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFtcHMgPSBuZXcgQU1QUyh7XG4gICAgICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgICAgICBwcm9maWxlczogb3B0aW9ucy5hY3RpdmF0ZVByb2ZpbGVzPy5zcGxpdCgnLCcpIHx8IFtdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLm1wYWMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuYmFzZVVybCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXCItLWJhc2VVcmxcIiwgcmVxdWlyZWQgZm9yIGluc3RhbGxpbmcgZnJvbSB0aGUgQXRsYXNzaWFuIE1hcmtldHBsYWNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFvcHRpb25zLmFwcEtleSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXCItLWFwcEtleVwiLCByZXF1aXJlZCBmb3IgaW5zdGFsbGluZyBmcm9tIHRoZSBBdGxhc3NpYW4gTWFya2V0cGxhY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgaW5zdGFsbEFwcCh7XG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmw6IG9wdGlvbnMuYmFzZVVybCxcbiAgICAgICAgICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgICAgICAgICAgbGljZW5zZTogYXdhaXQgZ2V0QXBwTGljZW5zZShvcHRpb25zLmxpY2Vuc2UsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IG9wdGlvbnMucGFzc3dvcmQsXG4gICAgICAgICAgICAgICAgICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmb3JjZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFhbXBzLmlzQXRsYXNzaWFuUGx1Z2luKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBhbiBBdGxhc3NpYW4gUGx1Z2luIHByb2plY3QgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IPCfpJQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGFtcHMuZ2V0QXBwbGljYXRpb24oKTtcbiAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgQXRsYXNzaWFuIFBsdWdpbiBwcm9qZWN0IGRvZXMgbm90IGNvbnRhaW4gYW4gQU1QUyBjb25maWd1cmF0aW9uLCB1bmFibGUgdG8gZGV0ZWN0IHByb2R1Y3Qg8J+YsCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gYW1wcy5nZXRBcHBsaWNhdGlvblZlcnNpb24oKTtcbiAgICAgICAgICAgICAgICBpZiAoIXZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZGV0ZXJtaW5lIHZlcnNpb24gZnJvbSBBTVBTIGFuZCBubyBwcm9kdWN0IHZlcnNpb24gcHJvdmlkZWQgKC0tdGFnKScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghdmVyc2lvbnNbbmFtZV0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9kdWN0IHZlcnNpb24gJyR7dmVyc2lvbn0nIGlzIGludmFsaWQuIEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt2ZXJzaW9uc1tuYW1lXS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub2JyICYmICFvcHRpb25zLnVzZXJuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3B0aW9uQXJndW1lbnRFcnJvcignTWlzc2luZyBhcmd1bWVudCBcIi0tdXNlcm5hbWVcIiwgcmVxdWlyZWQgZm9yIGluc3RhbGxpbmcgT0JSIGFydGlmYWN0cycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zLm9iciAmJiAhb3B0aW9ucy5wYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXCItLXBhc3N3b3JkXCIsIHJlcXVpcmVkIGZvciBpbnN0YWxsaW5nIE9CUiBhcnRpZmFjdHMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMud2F0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgcXVpY2tSZWxvYWQgPSBGaWxlV2F0Y2hlcihuYW1lLCBvcHRpb25zLCBbXSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dERpcmVjdG9yeSA9IG9wdGlvbnMub3V0cHV0RGlyZWN0b3J5IHx8ICd0YXJnZXQnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGl2ZXJhYmxlRXh0ZW5zaW9uID0gb3B0aW9ucy5vYnIgPyAnb2JyJyA6ICdqYXInO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgZ2xvYihgJHtvdXRwdXREaXJlY3Rvcnl9LyouJHtkZWxpdmVyYWJsZUV4dGVuc2lvbn1gLCB7IGN3ZDogcmVzb2x2ZShvcHRpb25zLmN3ZCB8fCBjd2QoKSkgfSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoZmlsZXMubWFwKHBhdGggPT4gSW5zdGFsbGVyKG5hbWUsIHBhdGgsIG9wdGlvbnMpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHF1aWNrUmVsb2FkKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFN0b3BwaW5nIGZpbGVzeXN0ZW0gd2F0Y2hlci4uLiDij7NgKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBxdWlja1JlbG9hZC5jbG9zZSgpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFN1Y2Nlc3NmdWxseSBzdG9wcGVkIGFsbCBydW5uaW5nIHByb2Nlc3NlcyDwn5KqYCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbnByb2dyYW1cbiAgICAubmFtZSgnZGNkeCBpbnN0YWxsJylcbiAgICAuZGVzY3JpcHRpb24oYEluc3RhbGwgdGhlIEF0bGFzc2lhbiBEYXRhIENlbnRlciBwbHVnaW4gdXNpbmcgdGhlIEF0bGFzc2lhbiBNYXZlbiBQbHVnaW4gU3VpdGUgKEFNUFMpIGNvbmZpZ3VyYXRpb24uXG5JZiB0aGVyZSBpcyBhIHJ1bm5pbmcgaW5zdGFuY2UsIGl0IHdpbGwgdHJ5IHRvIGluc3RhbGwgdGhlIHBsdWdpbiB1c2luZyBRdWlja1JlbG9hZCBvciB0aGUgVVBNIChmb3IgT0JSKS5gKVxuICAgIC5zaG93SGVscEFmdGVyRXJyb3IodHJ1ZSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy13LCAtLXdhdGNoJywgJ1dhdGNoIGZvciBmaWxlc3lzdGVtIGNoYW5nZXMgdG8gSkFSIG9yIE9CUiBmaWxlcyBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLW8sIC0tb3V0cHV0RGlyZWN0b3J5IDxkaXJlY3Rvcnk+JywgJ091dHB1dCBkaXJlY3Rvcnkgd2hlcmUgdG8gbG9vayBmb3IgZ2VuZXJhdGVkIEpBUiBvciBPQlIgZmlsZXMgKGRlZmF1bHRzIHRvIGB0YXJnZXRgKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLVAsIC0tYWN0aXZhdGUtcHJvZmlsZXMgPGFyZz4nLCAnQ29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgcHJvZmlsZXMgdG8gYWN0aXZhdGUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tb2JyJywgJ1VwbG9hZCBnZW5lcmF0ZWQgT0JSIGZpbGUgaW5zdGVhZCBvZiBKQVIgZmlsZSB3aGVuIGluc3RhbGxpbmcgdGhlIGFwcCcpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS11c2VybmFtZSA8dXNlcm5hbWU+JywgJ1RoZSB1c2VybmFtZSBvZiB0aGUgYWRtaW5pc3RyYXRvciAocmVxdWlyZWQgd2l0aCAtLW9iciwgb3B0aW9uYWwgZm9yIC0tbXBhYyknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcGFzc3dvcmQgPHBhc3N3b3JkPicsICdUaGUgcGFzc3dvcmQgb2YgdGhlIGFkbWluaXN0cmF0b3IgKHJlcXVpcmVkIHdpdGggLS1vYnIsIG9wdGlvbmFsIGZvciAtLW1wYWMpJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLW1wYWMnLCAnSW5zdGFsbCB0aGUgYXBwIGZyb20gdGhlIEF0bGFzc2lhbiBNYXJrZXRwbGFjZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1iYXNlVXJsIDx1cmw+JywgJ1VSTCBvZiB0aGUgaW5zdGFuY2UgKHJlcXVpcmVkIHdpdGggLS1tcGFjKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIHRvIGJlIGluc3RhbGxlZCAocmVxdWlyZWQgd2l0aCAtLW1wYWMpJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWxpY2Vuc2UgPHBhdGhfb3JfbGljZW5zZT4nLCAnVGhlIGFwcCBsaWNlbnNlLCBlaXRoZXIgYXMgYSBwYXRoIHRvIGEgZmlsZSBvciB0aGUgbGljZW5zZSBpdHNlbGYnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFNUFMgY29uZmlndXJhdGlvbicpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIENvbW1hbmQoKSwgeyAuLi5vcHRpb25zLCBpbnN0YWxsOiB0cnVlIH0pKTtcbnByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpLmNhdGNoKCgpID0+IGdyYWNlZnVsRXhpdCgxKSk7XG5wcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYFJlY2VpdmVkIHRlcm0gc2lnbmFsLCB0cnlpbmcgdG8gc3RvcCBncmFjZWZ1bGx5IPCfkqpgKTtcbiAgICBncmFjZWZ1bEV4aXQoMSk7XG59KTtcbiJdLCJuYW1lcyI6WyJjd2QiLCJwd2QiLCJwYXNzd29yZCIsInBhc3N3b3JkUHJvbXB0IiwidmVyc2lvbnMiLCJEb2NrZXIuZ2V0UnVubmluZ0NvbnRhaW5lcklkcyIsInJlc29sdmVQYXRoIiwiRG9ja2VyLmNvcHkiLCJDb21tYW5kZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1PLE1BQU0sUUFBUSxHQUFHLDJhQUEyYTs7QUNONWIsTUFBTSxVQUFVLEdBQUcsQ0FB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O0FBQ0E7QUFDQSxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixTQUFTO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
10204
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9saWNlbmNlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvY2FwaXRhbGl6ZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9tZXNzYWdlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEFwcExpY2Vuc2UuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL3VwbS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2Rvd25sb2FkQXBwLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0QXB0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0QVdTQ3JlZGVudGlhbHMuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRFbnZpcm9ubWVudE5hbWUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRQcm9kdWN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZGNhcHQuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3Jlc3RhcnRDbHVzdGVyLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvaW5zdGFsbEFwcC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvQWN0aW9uSGFuZGxlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL3R5cGVzL0RhdGFiYXNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvdHlwZXMvQXBwbGljYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2FtcHMuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2lzUmVjdXJzaXZlQnVpbGQuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL3Nob3dSZWN1cnNpdmVCdWlsZFdhcm5pbmcuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL0N1c3RvbUJ1aWxkZXIuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2RvY2tlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvSW5zdGFsbGVyLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9GaWxlV2F0Y2hlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvdG9BYnNvbHV0ZVBhdGguanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2dldFZlcnNpb25zLmpzIiwiLi4vLi4vZGlzdC9zcmMvY29tbWFuZHMvaW5zdGFsbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdGltZWJvbWIgPSB7XG4gICAgJ2ppcmEnOiAnQUFBQ0JBME9EQW9QZU5wOWtsMXYyakFVaHUveks0NjBPeVFIU0x1VklrVWFUYndOVkJLVWhFbmJ1Z3NURHVBMnNTUGJnYkZmUHhPQzFpKzR5RVhPNSt2blBSK3lHaUdTVy9DdW9YYzd2Qm9NdlQ0RU5BT3Y1L1djdFVJVUcxbFZxTng3bnFQUVNKZmNjQ2w4R21VMG1TWGpsRHBSWFM1UXhhdTVScVY5MG5jQ0tRekxUY1JLOUV1OTQ0SXAvY1EvTTFNd3JUa1RiaTVMWjFhcmZNTTBoc3lnNy9YNkE5THZFODl6MmozWnZzSm1RQkJQcHpRSnhxUDdVNHIrcWJqYU4zMnpHKy9iYVIyZE1sNmMzNWVpMnFJYWgvNGR2YUhrT3Z6cGtVL3g1SVo4dmJvZE9JOWNNYmRTY2xubnhqMzhFQzFYWnNjVXVuWXkzNkp2VkkzT3hHWm1iWlhkendJVTVsVkpXaTkwcm5qVlFHb2k3MEI4NzNHTmhQT1FPNTFPRkdma1M1eVFXUktIOHlBYnh4R1pwOVFtL0VDaHBiR0V4UjdNQnFHZEFsVGtjb2tLN01NZU1UZndhMk5NOVREc2R0ZlNmUUduV3h3N0NCNDdmcnNRU2hEU3dKSnJvL2lpTm1nbmN3MUdRbDVySTB0cnRldFk0c0tnWUNKL1k0cVZGU1IwbE5HUTNQMDRhRHhyVEt2V09qTVhUMEx1eENVMzN0eGFTaVBmZnVSanIzZnNPL21DNm9nL1Ztc211R1lOMElqOTNURlljVlh1blFhYURiNCt3SmJGZDd2ZzBPSTVJZjUzTkVOdG9LMkFsVlF3R1NjalNGdDVscmpkV3ltdThXRUlnU3d0cHB5ekFzTGd4Ums4UDVoRzlQTUEzYktpUHNwZHNVTGpKUndYN3VrZjUvTlg3VEF0QWhVQWhRU0h6OURneWNPWDd3Y3dFUk1KYjNUTEdiNENGR2tCL3hVV1NSSzNCWkxyUEY5Um42Wm1yVXFKWDAyb2MnLFxuICAgICdjb25mbHVlbmNlJzogJ0FBQUN6ZzBPREFvUGVOcDlWTzl2MmpBUS9aNi93dEsrSVlXR3NFS0hGR21RbUphdS9HZ0ltOWlZSmhNT1lwcllrZTFBNGErZlNjaEdLdHFQUHZ2ZXZYdjN6cC82Z3FMSExFYjJIYktzVHZOenA5bEM5OE1BMlpiZE5LWWdkaUFHbnRQRFEyejY4OEhjZEgvYU03UDVvMmtaVHpRRUppRTRwREFpQ1RnQm5nYUQwYjBSQ3I1ZjFTOXVIZmNVV1hTUUJ6dUllUXJDQ0RsYjEwbW82QTRjSlRMUVNWbElsekZVZ2dwSThpY2tNYkFWRWJJK3lwSWxpUEc2UjVJbDV6NGtYRUYzQTB4SnAxR3l3YThwRlFlUEtIQW1EZHQ2K0E5Y0pWUUVLNXlXbWhNVjhIR1pMUldrd3JGOFBaTWdwR1BmR2g3SVVOQlVVYzZjQUtSQ2NWRVlyYmxBYVp4dEtFT3JzcWo4Vi9VUzg1enhYZCtmVUd3RDcwaWNrUnd5ZjdBUkFDemlxVVlvKzhJcm10L2pVWUQ5aVQrWVltTklLRlBBQ0F1dnlISWFRRVVTSFlnejBHOHJvcmdDOHJwNXF2YUVaVnAzcHQwdThzdmUzVGlUQ3NTSXIwQTZsbEdyMVZ3ZmR3UHNtYjI1UGpqYlZ3cTJFY1pjbTZuUzZES1grSTNpVDF5UC9DeTQyVEJlNEZBSzBXaFpWdHU2YXpZYlplWmxCMFUyd3JwbmtRb3FxNDBVeXN0NjdScUI5elU4azY0b2xZZXFLbkdtTkN6V2lzZU9Vb0t3aExMb0sxRXhrWklTVmc5NWNyM1pOL1lxZHVlU1lXNjQ5L21kcmZKQVpPUU0zYjNiOTZEUnVoVmszMjYxa2tGdmV4d2U0MVVRdEpOMTJ1NUd6NkdjUFQ3UG43MUg3MHQ2OUNQY2J4L2E5cmNqM3JEdXdsazR4cHJLQ0E1Vk4rb0pqc2FCMlIvNzVzUWZlek0zR0l4SDVteUtUNlBOL1FFcnREd2dGUUU2RTlWRENMVVp0TjhGMzBLbzBLOUlxWFRSdWJuWjhIcEZsWnR6QXlZVUdiL3J5T09JY1lWV1ZDcEJsNWtDalV3bFVoeUYybVk4MFdhb1h4ZHpFaE9XZTJZc05vUlJXV3hNdDZ4WC9oSDZQNXV4RjhiM3JMSklsejFMcFFXOTVwUVB2cWZMcTBrbXdvaEllTHMybDlQTXpmUTQ4THZ2V1RiZk1ZMUFYRGc5S0pETENWMkM5SFVNSCtDYUpmT2Z1ZGkvdjBrSUdWc3dMQUlVRU1ROVg3N2dxR0JkZkgwSEl6QmFWOE5hZFBVQ0ZCbitSaVVBNEQrSXFWUXBUVG91TFZZNjZhQ0dYMDIxMjEnLFxuICAgICdiaXRidWNrZXQnOiAnQUFBQm1nME9EQW9QZU5wOVVsMXYwekFVZmMrdnNNUmJKYWRKdGpHcFVpUzJKSlJPTk9sYUI0U0FCOWU5VzB4VHU3SnZDdjMzZUltRE9vUjR2ZWZlNC9QaE41OWhSNWJja1BpV1JOZXpLSjVGQ1prdkdVbWlKQTR5clpBTExQa0JVckhYb3RFbnU1ZUJSVzZiOEtNVW9DeXc4eEg2QlZaczJLS2NlM1RKcFVKUVhBa29maDJsT2VjY0lWMWRmUmhKQzdmUlhySnV3SnpBTFBMMC9xRitwSTlYR2FQeit1R0dzcHZia2RSeDhBd2NyMG5SZE9DbmxYbm1TbHFPVXF2MERsdHVyZVRLZzZ2T2lJWmI2SjlQb3ZpYVJtOXBISHMwTTlDZi9SdjFEdi9TUDVsTXlvclI5OVdhcnRaVlhtZHNVWlcwM2hRT1NIdENGK24yVExBQjRobElvWVRlZ1NGSG8zK0FRUEsxUVR4K20wMm56enJrbytKUTZNTzBIUzRvREJmZlE1SnJvalNTbmJSbzVMWkRjTXpTRXRSRWRCYjFBWXdOUnpzWGZmMEpnakN3TGpHLzRtQjVnaUUrSnpoYkYzZXN5T245bHhmMUYyMTQ1YTZPV3UyVi9xbUMvMmRWZG9jdG1PcXB0azVQR2lkK1hKeDQydzNOUFBIV1F1RDlmWEpiTDhQa3RmTGhVMkF2K04ycllNWTZ1VUVGcG5jWS9BWUNnZkZBTUN3Q0ZIemtCbGtHSC92UmRUZWVCU2ZVTXpVRGI0VzJBaFF5TTg5M1dQZzJROG9RQVlSZEJTeUtlVlVkb2c9PVgwMmpyJyxcbiAgICAnYmFtYm9vJzogJ0FBQUIzdzBPREFvUGVOcDlVbHRyMnpBWWZmZXZFT3d0b01SMTBxWUxHSmJZV3NubzdHQTdnOTBlWlBscm90V1dqQ1Nuelg3OUZGOElZV2tmRFBKM09lZHd6dmNoMnpkb1dTdmt6cEY3djVqZExyd3BDa2lhSWMvMVBPZVJNeEFhc21NTkVhM0F6MnhuSFQwNGdRSnF1QlFoTmVCNzd2UUd1elBzM2prNXJYSXB4NVFaZmdEZnFBYUdVdFJVT2FqNGFkWCtQa3BHeStVT2hORSt2bkdHNWxhRGFnczlMM210dVRvT0pGNVBramE1Wm9yWEp3RVhIRytwSlFkYU52Uy9jWXRMQXlzQlZGZnUxOWVodnhYUFFyNElKd1YxQUdVTEt6SW5lQmIrOFBCZC9HV09INllmNzUxTm85aWVhdWpsZVlNSEtZbDgrK0ZiMTNWR28xRVVaL2h6bk9CTkVvZmJJRnZIRWQ2bXhEYjgxa1FvVUg1RVpnK29wMGRFTUZtQVFyV1NmNEFaOUhOdlRQMXJNWm5zckxHbXBGcHpLc1pNVnBPeTI4RFFiZndlbzFBaUlRMHF1RGFLNTQwQmk4dzFNaEt4Umh0WldYdkhUZ2huK3pMUUJ2VTQ2RWxhMXJMWmNZRUtPRUFwYXp2dmZLWGNlaVNvWUcva2NUWGhUVWxGRytYVmJnS1ZOSEErZ0Y3Qk44dDNVdVU1c2RwUndYVVhHbm1sVlYwQ0NtUlZVM0c4RXZmNU1LVXc5dnFJRlYzNnRYN21vTmpmbzdDUFR4ZmVuWklKRXJMTVNJaFgzMDlwdkRkOFNVZ0szc21LTXBKc2tuVktCdHIyNnQ0RCtnZDNBQzVxTUN3Q0ZIT2FUV2ZGdkxDTEpQZnQzcWt0Vm8zRmFmbVpBaFJvamI5SUF4ajhLRXFQRFF5MHN0b3MzOTRTUVE9PVgwMm1xJ1xufTtcbmV4cG9ydCBjb25zdCBhcHAzaG91ciA9ICdBQUFCQ0EwT0RBb1BlTnBkajAxUHdrQVVSZmZ6S3laeFoxSXlVekFSa2xsUTI0Z1JhUU10R25hUDhWRW10alBOZkZUNTl5SlZGeXpmdWJrbjc5NlV4MEJ6NlNtYlVNNW5iRHpqOTdSSVN4b3pIcE1VbmJTcTg4cG9VYUx6dEZFU3RVTjZNSloyVGFpVnB1L1lZMk02dEk2c1FydEhteDhxZDc0RVorVEJJdnlVVS9Bb1lzN2ppRTBqemtuV1F4TXVpZkEySUJsVWJuUTdBdWxWandOOUFhVTlhdEFTczY5TzJkTkZVNHdYSkxjMWFPVUd3OXczNEp3Q1RUWm9lN1JQcVVnZXAyWDBWbTBuMGZOdXQ0Z1N4bC9KY25qOW5GYjZRNXRQL1VldTNMKzBQSFc0Z2haRm1tMnpaVjVrNi85NUNiUjdZOWJZR28vekdyVjNJcjRqUmJEeUNBNnZ0MzRETzhwM1NEQXNBaFFuSmpMRDVrOUZyM3VhSXprWEtmODNvNXZEZFFJVWU0WGVxdU5DQzNEKzlodDlaWWhOWkZLbW5oYz1YMDJkaCc7XG4iLCJleHBvcnQgY29uc3QgY2FwaXRhbGl6ZSA9ICh2YWx1ZSkgPT4gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKTtcbiIsImltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICcuLi9oZWxwZXJzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHsgZ2V0UnVuRm9yU3RhZ2UgfSBmcm9tICcuL2hlbHBlcnMvZ2V0UnVuRm9yU3RhZ2UnO1xuY29uc3QgdG9OdW1iZXIgPSAoc3RhZ2UpID0+IHtcbiAgICBzd2l0Y2ggKHN0YWdlKSB7XG4gICAgICAgIGNhc2UgJ29uZS1ub2RlJzogcmV0dXJuICd0aGlyZCc7XG4gICAgICAgIGNhc2UgJ3R3by1ub2RlJzogcmV0dXJuICdmb3VydGgnO1xuICAgICAgICBjYXNlICdmb3VyLW5vZGUnOiByZXR1cm4gJ2ZpZnRoJztcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IGVtcHR5TGluZSA9ICgpID0+IGNvbnNvbGUubG9nKCfigIsnKTtcbmV4cG9ydCBjb25zdCBnZW5lcmljID0ge1xuICAgIGhlYWRlcjogYFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fICAgICAgXyAgICAgICAgICBfX19fXyAgICAgICAgIF8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgXFxcXCBfX198IHxfIF9fXyAgIHwgICAgIHxfX18gX19ffCB8XyBfX18gX19fICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgIHwgIHwgLid8ICBffCAuJ3wgIHwgICAtLXwgLV98ICAgfCAgX3wgLV98ICBffCAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHxfX19fL3xfXyx8X3wgfF9fLHwgIHxfX19fX3xfX198X3xffF98IHxfX198X3wgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBfX19fXyAgICAgICAgICAgIF9fX19fICAgICAgICAgX19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fICAgICAgICAgXyBfICAgXyBfICAgXG4gIHwgIF8gIHxfX18gX19fICAgfCAgXyAgfF9fXyBfX198ICBffF9fXyBfX18gX19fX18gX19fIF9fXyBfX18gX19fICAgfF8gICBffF9fXyBfX198IHwgfF98X3wgfF8gXG4gIHwgICAgIHwgLiB8IC4gfCAgfCAgIF9ffCAtX3wgIF98ICBffCAuIHwgIF98ICAgICB8IC4nfCAgIHwgIF98IC1ffCAgICB8IHwgfCAuIHwgLiB8IHwgJ198IHwgIF98XG4gIHxfX3xfX3wgIF98ICBffCAgfF9ffCAgfF9fX3xffCB8X3wgfF9fX3xffCB8X3xffF98X18sfF98X3xfX198X19ffCAgICB8X3wgfF9fX3xfX198X3xfLF98X3xffCAgXG4gICAgICAgIHxffCB8X3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgV2VsY29tZSB0byB0aGUgYXV0b21hdGVkIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IChEQ0FQVCkuXG4gIFRoaXMgd2lsbCBndWlkZSB5b3UgdGhyb3VnaCBhbGwgdGhlIHN0ZXBzIHRvIHByb2R1Y2UgdGhlIHJlcXVpcmVkIHBlcmZvcm1hbmNlIHRlc3RpbmcgcmVzdWx0c1xuICBmb3IgeW91ciAoYW5udWFsKSBEYXRhIENlbnRlciBhcHByb3ZhbC5cbmBcbn07XG5leHBvcnQgY29uc3QgaW5pdCA9IHtcbiAgICBoZWFkZXI6IChwcm9kdWN0KSA9PiBgXG4gIFdlIHdpbGwgbm93IGZvbGxvdyBhbGwgdGhlIHN0ZXBzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IFVzZXIgR3VpZGUgRm9yICR7Y2FwaXRhbGl6ZShwcm9kdWN0KX0uXG4gIFBsZWFzZSBjb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIHByaW9yIHRvIHN0YXJ0aW5nIHRoZSB0ZXN0IHJ1bjpcblxuICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLSR7cHJvZHVjdH0vXG5cbiAgT25jZSB5b3Ugc3RhcnQgdGhlIHRlc3QgcnVuIHdlIHdpbGwgcHJvdmlzaW9uIHRoZSBlbnZpcm9ubWVudCBvbiBBV1MuIFxuICBJTVBPUlRBTlQ6IFRoaXMgY2FuIGluY3VyIGNvc3RzLlxuICBcbiAgWW91IGNhbiBzdG9wIHRoaXMgcHJvY2VzcyBhdCBhbnkgdGltZSBieSBleGl0aW5nIHRoaXMgcHJvZ3JhbS4gQmUgc3VyZSB0byBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kIHRvIHJlc2V0IFxuICB0aGUgQVdTIGVudmlyb25tZW50IGFuZCBwcmV2ZW50IHVuZXhwZWN0ZWQgY29zdHMuXG5cbiAgJCBkY2R4IGFwdCB0ZWFyZG93blxuXG4gIFlvdSBjYW4gYWxzbyByZXN1bWUvcmVzdGFydCBldmVyeSBwYXJ0IG9mIHRoZSB0ZXN0IHJ1biB1c2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZyBjb21tYW5kczpcblxuICAkIGRjZHggYXB0IGluaXQgLS1wcm9kdWN0ICR7cHJvZHVjdH1cbiAgJCBkY2R4IGFwdCBwcm92aXNpb24gLS1wcm9kdWN0ICR7cHJvZHVjdH1cbiAgJCBkY2R4IGFwdCBydW4xIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuMiAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjMgLS1wcm9kdWN0ICR7cHJvZHVjdH1cbiAgJCBkY2R4IGFwdCBydW40IC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuNSAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuXG4gIFdlIHdpbGwgY29udGludWUgd2l0aCB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuJHtwcm9kdWN0ID09PSAnamlyYScgPyBgXG4gIDEuICBQcm92aXNpb24gdGhlIGVudmlyb25tZW50XG4gIDIuICBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG4gIDMuICBMdWNlbmUgSW5kZXggdGltaW5nIHRlc3Qgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcbiAgNC4gIFBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcbiAgNS4gIFNjYWxhYmlsaXR5IHRlc3Rpbmcgb24gb25lLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gMylcbiAgNi4gIFNjYWxhYmlsaXR5IHRlc3Rpbmcgb24gdHdvLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gNClcbiAgNy4gIFNjYWxhYmlsaXR5IHRlc3Rpbmcgb24gZm91ci1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDUpXG4gIDguICBHZW5lcmF0ZSByZXBvcnRzXG4gIDkuICBUZWFyZG93biBvZiBlbnZpcm9ubWVudFxuICAxMC4gU2VjdXJpdHkgU2Nhbm5lciBmb3IgRGF0YSBDZW50ZXIgYXBwc1xuYCA6IGBcbiAgMS4gUHJvdmlzaW9uIHRoZSBlbnZpcm9ubWVudFxuICAyLiBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG4gIDMuIFBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcbiAgNC4gU2NhbGFiaWxpdHkgdGVzdGluZyBvbiBvbmUtbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biAzKVxuICA1LiBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIHR3by1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDQpXG4gIDYuIFNjYWxhYmlsaXR5IHRlc3Rpbmcgb24gZm91ci1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDUpXG4gIDcuIEdlbmVyYXRlIHJlcG9ydHNcbiAgOC4gVGVhcmRvd24gb2YgZW52aXJvbm1lbnRcbiAgOS4gU2VjdXJpdHkgU2Nhbm5lciBmb3IgRGF0YSBDZW50ZXIgYXBwc1xuYH1gLFxufTtcbmV4cG9ydCBjb25zdCBwcm92aXNpb25pbmcgPSB7XG4gICAgaGVhZGVyOiBgXG4gIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIFxuICB8ICBfICB8IF9fICB8ICAgICB8ICB8ICB8ICAgICB8ICAgX198ICAgICB8ICAgICB8ICAgfCB8ICAgICB8ICAgfCB8ICAgX198XG4gIHwgICBfX3wgICAgLXwgIHwgIHwgIHwgIHwtICAgLXxfXyAgIHwtICAgLXwgIHwgIHwgfCB8IHwtICAgLXwgfCB8IHwgIHwgIHxcbiAgfF9ffCAgfF9ffF9ffF9fX19ffFxcXFxfX18vfF9fX19ffF9fX19ffF9fX19ffF9fX19ffF98X19ffF9fX19ffF98X19ffF9fX19ffFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBXZSB3aWxsIG5vdyBzdGFydCBwcm92aXNpb25pbmcgQVdTIHVzaW5nIHRoZSBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hY2UgVG9vbGtpdCAoRENBUFQpIFRlcnJhZm9ybSBjb25maWd1cmF0aW9uLlxuXG4gIEluIG9yZGVyIHRvIGRvIHRoaXMsIHdlIG5lZWQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjpcblxuICAxLiBUaGUgbG9jYXRpb24gb2YgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IG9uIHlvdXIgZGlza1xuICAyLiBBV1MgY3JlZGVudGlhbHNcbiAgMy4gUHJvZHVjdCBsaWNlbnNlXG5gLFxuICAgIGFza0ZvckFXU0NyZWRlbnRpYWxzOiAocHJvZHVjdCkgPT4gYFxuICBJbiBvcmRlciB0byBwcm92aXNpb24gdGhlICR7Y2FwaXRhbGl6ZShwcm9kdWN0KX0gY2x1c3Rlciwgd2UgbmVlZCBBZG1pbmlzdHJhdG9yIGNyZWRlbnRpYWxzIGZvciBBV1MuXG4gIFBsZWFzZSByZWZlciB0byB0aGUgRENBUFQgZG9jdW1lbnRhdGlvbiB0byBmaW5kIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGNyZWF0ZSB0aGUgQVdTIGFjY2VzcyBrZXlzOlxuXG4gIGh0dHBzOi8vZGV2ZWxvcGVyLmF0bGFzc2lhbi5jb20vcGxhdGZvcm0vbWFya2V0cGxhY2UvZGMtYXBwcy1wZXJmb3JtYW5jZS10b29sa2l0LXVzZXItZ3VpZGUtJHtwcm9kdWN0fS8jc2V0dXAtJHtwcm9kdWN0fS1kYXRhLWNlbnRlci1kZXZlbG9wbWVudC1lbnZpcm9ubWVudC1vbi1rOHMtXG5gLFxuICAgIGFza0ZvckVudmlyb25tZW50OiBgXG4gIFdoZW4gcHJvdmlzaW9uaW5nIHRoZSBjbHVzdGVyLCB3ZSBuZWVkIGEgdW5pcXVlIGVudmlyb25tZW50IG5hbWUuXG4gIFRoaXMgd2lsbCBhbGxvdyB5b3UgdG8gY3JlYXRlIG11bHRpcGxlIGNsdXN0ZXJzIChpLmUuIGZvciBkaWZmZXJlbnQgaG9zdCBwcm9kdWN0cykgYW5kIHRvIGlkZW50aWZ5IHdoaWNoIGNsdXN0ZXIgdG8gdXNlIGR1cmluZyB0ZXN0aW5nICYgdGVhcmRvd24uXG5gLFxuICAgIGFza0Zvckhvc3RMaWNlbnNlOiBgXG4gIFRoZSBob3N0IHByb2R1Y3QgcmVxdWlyZXMgYSB2YWxpZCBsaWNlbnNlLlxuXG4gIEJ5IGRlZmF1bHQgd2UgdXNlIHRoZSA3MmggZGV2ZWxvcGVyIGxpY2Vuc2UgcHJvdmlkZWQgYnkgQXRsYXNzaWFuLiBJZiB5b3UgbmVlZCBhIG1vcmUgZXh0ZW5zaXZlIGxpY2Vuc2UsXG4gIHlvdSBjYW4gZ2VuZXJhdGUgYW4gZXZhbHVhdGlvbiBsaWNlbnNlIGZyb20gbXkuYXRsYXNzaWFuLmNvbSBvciBhc2sgQXRsYXNzaWFuIE1hcmtldHBsYWNlIERldmVsb3BlciBTdXBwb3J0IGZvciBhIHRlc3QgbGljZW5zZS5cbmAsXG4gICAgYXNrRm9yQXBwTGljZW5zZTogYFxuVGhlIGFwcCByZXF1aXJlcyBhIHZhbGlkIGxpY2Vuc2UuXG5cbkJ5IGRlZmF1bHQgd2UgdXNlIHRoZSAzIGhvdXIgdGltZWJvbWIgbGljZW5zZSBwcm92aWRlZCBieSBBdGxhc3NpYW4uIElmIHlvdSBuZWVkIGEgbW9yZSBleHRlbnNpdmUgbGljZW5zZSxcbnlvdSBjYW4gZ2VuZXJhdGUgYW4gZXZhbHVhdGlvbiBsaWNlbnNlIGZyb20gbXkuYXRsYXNzaWFuLmNvbSBvciBhc2sgQXRsYXNzaWFuIE1hcmtldHBsYWNlIERldmVsb3BlciBTdXBwb3J0IGZvciBhIHRlc3QgbGljZW5zZS5cbmAsXG4gICAgcmVhZHk6IGBcbiAgV2UgaGF2ZSBub3cgZ2F0aGVyZWQgYWxsIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBwcm92aXNpb24gdGhlIGNsdXN0ZXIuXG5cbiAgISEgSU1QT1JUQU5UICEhXG4gIFxuICBXZSB3aWxsIGJlIHdyaXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGlzay4gVGhpcyB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuICBQbGVhc2Ugbm90ZSB0aGF0IHByb3Zpc2lvbmluZyB0aGUgZW52aXJvbm1lbnQgd2lsbCBpbmN1ciBBV1MgdXNhZ2UgY29zdHMuXG5gLFxuICAgIGF3c0NyZWRlbnRpYWxzUGVyc2lzdGVkOiAn4pyUIEFXUyBjcmVkZW50aWFscyB3cml0dGVuIHRvIGFwcC91dGlsL2s4cy9hd3NfZW52cycsXG4gICAgdGVycmFmb3JtQ29uZmlndXJhdGlvblBlcnNpc3RlZDogYOKclCBUZXJyYWZvcm0gY29uZmlndXJhdGlvbiB3cml0dGVuIHRvIGFwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnNgXG59O1xuZXhwb3J0IGNvbnN0IFJ1bjEgPSB7XG4gICAgaGVhZGVyOiAoKSA9PiBgXG4gIF9fX19fIF9fX19fIF9fX19fICAgIF9fXyAgIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfCAgXG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgICBffCB8XyBcbiAgfF9ffF9ffF9fX19ffF98X19ffCAgfF9fX19ffFxuXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aG91dCBhcHAgaW5zdGFsbGVkIChydW4gMSlcbiAgVGhpcyB3aWxsIHByb2R1Y2UgdGhlIHBlcmZvcm1hbmNlIGJhc2VsaW5lIHJlc3VsdHMuXG5cbiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgeW91IGFyZSBydW5uaW5nIHRoZSBiYXNlbGluZSB0ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gIFlvdSBjYW4gZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVBUIHNvdXJjZXM6XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdFxuYCxcbiAgICByZWFkeUZvclByb3Zpc2lvbmluZzogYFxuSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0LCB3ZSB3aWxsIG5vdyBjb25maWd1cmUgdGhlIERDIGNsdXN0ZXIgb24gQVdTXG5cbiEhIElNUE9SVEFOVCAhIVxuXG5XZSB3aWxsIGJlIHdyaXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGlzay4gVGhpcyB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuUGxlYXNlIG5vdGUgdGhhdCBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50IHdpbGwgaW5jdXIgQVdTIHVzYWdlIGNvc3RzLlxuYCxcbiAgICBzdGFydFRlc3Q6IGBcbldlIHdpbGwgbm93IHN0YXJ0IHRoZSBQZXJmb3JtYW5jZSBSZWdyZXNzaW9uIHRlc3RcbmAsXG4gICAgc3VjY2VzczogYFxu4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aG91dCBhcHAgaW5zdGFsbGVkIChydW4gMSlcbmAsXG4gICAgZmFpbHVyZTogKHN0YWdlLCBjd2QsIHByb2R1Y3QsIGVudmlyb25tZW50LCByZXN1bHRzQmFzZURpciwgcmVzdWx0cykgPT4ge1xuICAgICAgICBsZXQgb3V0cHV0ID0gYFxuICDinJQgRmluaXNoZWQgdGhlIHBlcmZvcm1hbmNlICR7c3RhZ2V9IHRlc3Rpbmcgd2l0aG91dCBhcHAgaW5zdGFsbGVkIChydW4gMSlcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcnVuMSAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IFJ1bjIgPSB7XG4gICAgaGVhZGVyOiAocHJvZHVjdCkgPT4gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gXG4gIHwgX18gIHwgIHwgIHwgICB8IHwgIHxfICB8XG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgIHwgIF98XG4gIHxfX3xfX3xfX19fX3xffF9fX3wgIHxfX198XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIFRoaXMgd2lsbCBhbGxvdyB0aGUgZ2VuZXJhdGlvbiBvZiBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gcmVwb3J0LlxuJHtwcm9kdWN0ID09PSAnamlyYScgPyBgXG4gIEluIGFkZGl0aW9uLCBhIEx1Y2VuZSBJbmRleCBUaW1pbmcgVGVzdCBpcyBhbHNvIHBhcnQgb2YgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdHMuYCA6ICcnfVxuICBUaGUgc2Vjb25kIHJ1biBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuJHtwcm9kdWN0ID09PSAnamlyYScgPyBgXG4gIDEuIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gIDIuIEJlbmNobWFyayB0aGUgcmUtaW5kZXggdGltZSB3aXRoIHlvdXIgYXBwIGluc3RhbGxlZFxuICAzLiBQZXJmb3JtYW5jZSByZXN1bHRzIGdlbmVyYXRpb24gd2l0aCB0aGUgYXBwIGluc3RhbGxlZFxuYCA6IGBcbiAgMS4gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgMi4gUGVyZm9ybWFuY2UgcmVzdWx0cyBnZW5lcmF0aW9uIHdpdGggdGhlIGFwcCBpbnN0YWxsZWRcbmB9XG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gIFlvdSBjYW4gZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVBUIHNvdXJjZXM6XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdFxuYCxcbiAgICByZWFkeUZvclByb3Zpc2lvbmluZzogYFxuSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0LCB3ZSB3aWxsIG5vdyBjb25maWd1cmUgdGhlIERDIGNsdXN0ZXIgb24gQVdTXG5cbiEhIElNUE9SVEFOVCAhIVxuXG5XZSB3aWxsIGJlIHdyaXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGlzay4gVGhpcyB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuUGxlYXNlIG5vdGUgdGhhdCBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50IHdpbGwgaW5jdXIgQVdTIHVzYWdlIGNvc3RzLlxuYCxcbiAgICBzdGFydFRlc3Q6IGBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgdGhlIFBlcmZvcm1hbmNlIFJlZ3Jlc3Npb24gdGVzdFxuYCxcbiAgICBzdWNjZXNzOiBgXG7inJQgRmluaXNoZWQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdGluZyB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuYCxcbiAgICBmYWlsdXJlOiAoc3RhZ2UsIGN3ZCwgcHJvZHVjdCwgZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSA9PiB7XG4gICAgICAgIGxldCBvdXRwdXQgPSBgXG4gIOKclCBGaW5pc2hlZCB0aGUgcGVyZm9ybWFuY2UgJHtzdGFnZX0gdGVzdGluZyB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuXG4gIFVuZm9ydHVuYXRlbHksIHRoZSB0ZXN0IHJ1biB3YXMgZmluaXNoZWQgdW5zdWNjZXNmdWwuIFxuICBQbGVhc2UgcmV2aWV3IHRoZSB0ZXN0IHJlc3VsdHMgYW5kIGFkanVzdCB0aGUgY29uZmlndXJhdGlvbiBpZiByZXF1aXJlZC5cbmA7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdHMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gb3V0cHV0ICs9IGAgICR7a2V5fTogJHt2YWx1ZX1cXG5gKTtcbiAgICAgICAgb3V0cHV0ICs9IGBcbiAgRnVsbCByZXBvcnQgY2FuIGJlIGZvdW5kIGhlcmU6XG4gICR7am9pbihyZXN1bHRzQmFzZURpciwgJ3Jlc3VsdHNfc3VtbWFyeS5sb2cnKX1cblxuICBZb3UgY2FuIHJlc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHRlc3RpbmcgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOlxuICBcbiAgJCBkY2R4IGFwdCBydW4yIC0tcHJvZHVjdCAke3Byb2R1Y3R9IC0tY3dkICR7Y3dkfSAtLWVudmlyb25tZW50ICR7ZW52aXJvbm1lbnR9XG5gO1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgTHVjZW5lVGltaW5nVGVzdCA9IHtcbiAgICBoZWFkZXI6IChfcHJvZHVjdCwgc3RhZ2UpID0+IGBcbiAgX18gICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gXG4gIHwgIHwgIHwgIHwgIHwgICAgIHwgICBfX3wgICB8IHwgICBfX3xcbiAgfCAgfF9ffCAgfCAgfCAgIC0tfCAgIF9ffCB8IHwgfCAgIF9ffFxuICB8X19fX198X19fX198X19fX198X19fX198X3xfX198X19fX198XG4gIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIFxuICB8XyAgIF98ICAgICB8ICAgICB8ICAgICB8ICAgfCB8ICAgX198XG4gICAgfCB8IHwtICAgLXwgfCB8IHwtICAgLXwgfCB8IHwgIHwgIHxcbiAgICB8X3wgfF9fX19ffF98X3xffF9fX19ffF98X19ffF9fX19ffFxuICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gICAgICAgICBcbiAgICAgIHxfICAgX3wgICBfX3wgICBfX3xfICAgX3wgICAgICAgIFxuICAgICAgICB8IHwgfCAgIF9ffF9fICAgfCB8IHwgICAgICAgICAgXG4gICAgICAgIHxffCB8X19fX198X19fX198IHxffCAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0IHdpdGggYXBwIGluc3RhbGxlZFxuICBUaGlzIGlzIHBhcnQgb2YgdGhlIFBlcmZvcm1hbmNlICR7c3RhZ2V9IHRlc3QgKHJ1biAyKVxuXG4gIEFmdGVyIHRoZSByZS1pbmRleCBpcyBjb21wbGV0ZWQgYSBzY3JlZW5zaG90IGlzIGNyZWF0ZWQgd2hpY2ggaXMgcGFydCBvZiB0aGUgcmVxdWlyZWQgdGVzdCByZXN1bHRzXG5cbiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgeW91IGFyZSBydW5uaW5nIHRoZSBMdWNlbmUgaW5kZXggdGltaW5nIHRlc3Qgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi5cbiAgWW91IGNhbiBnZXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBBUFQgc291cmNlczpcblxuICBodHRwczovL2dpdGh1Yi5jb20vYXRsYXNzaWFuL2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0XG5gLFxuICAgIHJlYWR5Rm9yUHJvdmlzaW9uaW5nOiBgXG5JbiBvcmRlciB0byBiZSBhYmxlIHRvIHN0YXJ0IHRoZSBMdWNlbmUgaW5kZXggdGltaW5nIHRlc3QsIHdlIHdpbGwgbm93IGNvbmZpZ3VyZSB0aGUgREMgY2x1c3RlciBvbiBBV1NcblxuISEgSU1QT1JUQU5UICEhXG5cbldlIHdpbGwgYmUgd3JpdGluZyB0aGUgY29uZmlndXJhdGlvbiB0byBkaXNrLiBUaGlzIHdpbGwgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uXG5QbGVhc2Ugbm90ZSB0aGF0IHByb3Zpc2lvbmluZyB0aGUgZW52aXJvbm1lbnQgd2lsbCBpbmN1ciBBV1MgdXNhZ2UgY29zdHMuXG5gLFxuICAgIHN0YXJ0VGVzdDogYFxuICBXZSBhcmUgcmVhZHkgdG8gc3RhcnQgdGhlIEx1Y2VuZSBJbmRleCB0aW1pbmcgdGVzdFxuICBPbmNlIHRoZSB0ZXN0IGlzIGZpbmlzaGVkLCBhIGJyb3dzZXIgd2luZG93IGlzIG9wZW5lZCB0byBjYXB0dXJlIHRoZSB0ZXN0IHJlc3VsdHMuXG5cbiAgISEgSU1QT1JUQU5UICEhXG5cbiAgVGhpcyBtYXkgdGFrZSB+NTAgbWludXRlcy4gUGxlYXNlIGRvIG5vdCB0ZXJtaW5hdGUgdGhlIHByb2dyYW1cbiAgRG8gbm90IGNsb3NlIHRoZSBicm93c2VyIHdpbmRvdywgb3IgZWxzZSB0aGUgdGVzdCB3aWxsIGZhaWxcbmAsXG4gICAgc3VjY2VzczogYFxu4pyUIEZpbmlzaGVkIHRoZSBMdWNlbmUgSW5kZXggVGltaW5pZyB0ZXN0IHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG5gLFxuICAgIGZhaWx1cmU6IChfc3RhZ2UsIGN3ZCwgcHJvZHVjdCwgZW52aXJvbm1lbnQpID0+IGBcbiAg4pyUIEZpbmlzaGVkIHRoZSBMdWNlbmUgSW5kZXggVGltaW5nIHRlc3Qgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBMdWNlbmUgSW5kZXggVGltaW5nIHRlc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kOlxuICBcbiAgJCBkY2R4IGFwdCByZWluZGV4IC0tcHJvZHVjdCAke3Byb2R1Y3R9IC0tY3dkICR7Y3dkfSAtLWVudmlyb25tZW50ICR7ZW52aXJvbm1lbnR9XG5gXG59O1xuZXhwb3J0IGNvbnN0IFBlcmZvcm1hbmNlUmVwb3J0TWVzc2FnZXMgPSB7XG4gICAgaGVhZGVyOiBgXG4gIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fICAgXG4gIHwgIF8gIHwgICBfX3wgX18gIHwgICBfX3wgICAgIHwgX18gIHwgICAgIHwgIF8gIHwgICB8IHwgICAgIHwgICBfX3wgIFxuICB8ICAgX198ICAgX198ICAgIC18ICAgX198ICB8ICB8ICAgIC18IHwgfCB8ICAgICB8IHwgfCB8ICAgLS18ICAgX198ICBcbiAgfF9ffCAgfF9fX19ffF9ffF9ffF9ffCAgfF9fX19ffF9ffF9ffF98X3xffF9ffF9ffF98X19ffF9fX19ffF9fX19ffCAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgICAgXG4gICAgICB8IF9fICB8ICAgX198ICAgX198IF9fICB8ICAgX198ICAgX198ICAgX198ICAgICB8ICAgICB8ICAgfCB8ICAgIFxuICAgICAgfCAgICAtfCAgIF9ffCAgfCAgfCAgICAtfCAgIF9ffF9fICAgfF9fICAgfC0gICAtfCAgfCAgfCB8IHwgfCAgICBcbiAgICAgIHxfX3xfX3xfX19fX3xfX19fX3xfX3xfX3xfX19fX3xfX19fX3xfX19fX3xfX19fX3xfX19fX3xffF9fX3wgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHwgX18gIHwgICBfX3wgIF8gIHwgICAgIHwgX18gIHxfICAgX3wgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8ICAgIC18ICAgX198ICAgX198ICB8ICB8ICAgIC18IHwgfCAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfF9ffF9ffF9fX19ffF9ffCAgfF9fX19ffF9ffF9ffCB8X3wgICAgICAgICAgICAgICAgICAgICAgXG5cblxuICBXZSBhcmUgZ29pbmcgdG8gZ2VuZXJhdGUgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gcmVwb3J0XG4gIFRoZSByZXBvcnQgY29uc3Rpc3RzIG9mIGEgQ1NWIGFuZCBQTkcgZmlsZSB0aGF0IGFyZSByZXF1aXJlZCBmb3IgXG4gIHRoZSAoYW5udWFsKSBEYXRhIENlbnRlciBhcHAgcmV2aWV3XG5gXG59O1xuZXhwb3J0IGNvbnN0IFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzID0ge1xuICAgIGhlYWRlcjogKHByb2R1Y3QsIHN0YWdlKSA9PiBgXG4ke3N0YWdlID09PSAnb25lLW5vZGUnID8gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gXG4gIHwgX18gIHwgIHwgIHwgICB8IHwgIHxfICB8XG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgIHxfICB8XG4gIHxfX3xfX3xfX19fX3xffF9fX3wgIHxfX198XG5gIDogc3RhZ2UgPT09ICd0d28tbm9kZScgPyBgXG4gIF9fX19fIF9fX19fIF9fX19fICAgIF9fXyBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfCB8IHxcbiAgfCAgICAtfCAgfCAgfCB8IHwgfCAgfF8gIHxcbiAgfF9ffF9ffF9fX19ffF98X19ffCAgICB8X3wgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYCA6IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8ICBffFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8XyAgfFxuICB8X198X198X19fX198X3xfX198ICB8X19ffCAgICAgICAgICAgICAgICAgICAgICAgICAgXG5gfVxuXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgZm9yICR7c3RhZ2V9ICR7Y2FwaXRhbGl6ZShwcm9kdWN0KX0gREMgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zOiAocnVuICR7Z2V0UnVuRm9yU3RhZ2Uoc3RhZ2UpfSlcblxuICBUaGUgJHt0b051bWJlcihzdGFnZSl9IHJ1biBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICAxLiBBZGp1c3QgdGhlIGVudmlyb25tZW50IHRvIGEgJHtzdGFnZX0gY2x1c3RlclxuICAxLiBJbnN0YWxsIHRoZSBhcHAgaW50byB0aGUgY2x1c3RlclxuICAzLiBTY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdGluZyB3aXRoIHRoZSBhcHAgaW5zdGFsbGVkXG5cbiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgeW91IGFyZSBydW5uaW5nIHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCBvbiBhIERDQVBUIHZlcnNpb24gdGhhdCBoYXMgYXBwLXNwZWNpZmljIGFjdGlvbnNcbiAgTW9yZSBpbmZvcm1hdGlvbiBvbiBkZXZlbG9waW5nIGFwcC1zcGVjaWZpYyBhY3Rpb25zIGNhbiBiZSBmb3VuZCBoZXJlOlxuXG4ke3Byb2R1Y3QgPT09ICdqaXJhJyA/XG4gICAgICAgIGAgIGh0dHBzOi8vZGV2ZWxvcGVyLmF0bGFzc2lhbi5jb20vcGxhdGZvcm0vbWFya2V0cGxhY2UvZGMtYXBwcy1wZXJmb3JtYW5jZS10b29sa2l0LXVzZXItZ3VpZGUtamlyYS8jMy0tZGV2ZWxvcC1hbmQtdGVzdC1hcHAtc3BlY2lmaWMtYWN0aW9uLWxvY2FsbHlgXG4gICAgICAgIDogcHJvZHVjdCA9PT0gJ2NvbmZsdWVuY2UnID9cbiAgICAgICAgICAgIGAgIGh0dHBzOi8vZGV2ZWxvcGVyLmF0bGFzc2lhbi5jb20vcGxhdGZvcm0vbWFya2V0cGxhY2UvZGMtYXBwcy1wZXJmb3JtYW5jZS10b29sa2l0LXVzZXItZ3VpZGUtY29uZmx1ZW5jZS8jMy0tZGV2ZWxvcC1hbmQtdGVzdC1hcHAtc3BlY2lmaWMtYWN0aW9ucy1sb2NhbGx5YFxuICAgICAgICAgICAgOiBwcm9kdWN0ID09PSAnYmFtYm9vJyA/XG4gICAgICAgICAgICAgICAgJyAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS1iYW1ib28vIzItLWFwcC1zcGVjaWZpYy1hY3Rpb25zLWRldmVsb3BtZW50J1xuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPT09ICdiaXRidWNrZXQnXG4gICAgICAgICAgICAgICAgOiAnICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWJpdGJ1Y2tldC8jMy0tZGV2ZWxvcC1hbmQtdGVzdC1hcHAtc3BlY2lmaWMtYWN0aW9uLWxvY2FsbHknfVxuYCxcbiAgICByZWFkeUZvclByb3Zpc2lvbmluZzogYFxuICBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmssIHdlIHdpbGwgbm93IHJlY29uZmlndXJlIHRoZSBEQyBjbHVzdGVyIG9uIEFXU1xuXG4gICEhIElNUE9SVEFOVCAhIVxuICBcbiAgV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cbiAgUGxlYXNlIG5vdGUgdGhhdCBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50IHdpbGwgaW5jdXIgQVdTIHVzYWdlIGNvc3RzLlxuYCxcbiAgICBzdGFydFRlc3Q6IGBcbiAgUmVhZHkgdG8gc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnNcbmAsXG4gICAgc3VjY2VzczogYFxu4pyUIEZpbmlzaGVkIHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG5gLFxuICAgIGZhaWx1cmU6IChzdGFnZSwgY3dkLCBwcm9kdWN0LCBlbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgbGV0IG91dHB1dCA9IGBcbuKclCBGaW5pc2hlZCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uc1xuXG4gIFVuZm9ydHVuYXRlbHksIHRoZSB0ZXN0IHJ1biB3YXMgZmluaXNoZWQgdW5zdWNjZXNmdWwuIFxuICBQbGVhc2UgcmV2aWV3IHRoZSB0ZXN0IHJlc3VsdHMgYW5kIGFkanVzdCB0aGUgY29uZmlndXJhdGlvbiBpZiByZXF1aXJlZC5cbmA7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdHMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gb3V0cHV0ICs9IGAgICR7a2V5fTogJHt2YWx1ZX1cXG5gKTtcbiAgICAgICAgb3V0cHV0ICs9IGBcbiAgRnVsbCByZXBvcnQgY2FuIGJlIGZvdW5kIGhlcmU6XG4gICR7am9pbihyZXN1bHRzQmFzZURpciwgJ3Jlc3VsdHNfc3VtbWFyeS5sb2cnKX1cblxuICBZb3UgY2FuIHJlc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcnVuJHtnZXRSdW5Gb3JTdGFnZShzdGFnZSl9IC0tcHJvZHVjdCAke3Byb2R1Y3R9IC0tY3dkICR7Y3dkfSAtLWVudmlyb25tZW50ICR7ZW52aXJvbm1lbnR9XG5gO1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgU2NhbGFiaWxpdHlSZXBvcnRNZXNzYWdlcyA9IHtcbiAgICBoZWFkZXI6IGBcbiAgX19fX18gX19fX18gX19fX18gX18gICAgX19fX18gX19fX18gX19fX18gX18gICAgX19fX18gX19fX18gX18gX18gXG4gIHwgICBfX3wgICAgIHwgIF8gIHwgIHwgIHwgIF8gIHwgX18gIHwgICAgIHwgIHwgIHwgICAgIHxfICAgX3wgIHwgIHxcbiAgfF9fICAgfCAgIC0tfCAgICAgfCAgfF9ffCAgICAgfCBfXyAtfC0gICAtfCAgfF9ffC0gICAtfCB8IHwgfF8gICBffFxuICB8X19fX198X19fX198X198X198X19fX198X198X198X19fX198X19fX198X19fX198X19fX198IHxffCAgIHxffCAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCBfXyAgfCAgIF9ffCAgXyAgfCAgICAgfCBfXyAgfF8gICBffCAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8ICAgIC18ICAgX198ICAgX198ICB8ICB8ICAgIC18IHwgfCAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHxfX3xfX3xfX19fX3xfX3wgIHxfX19fX3xfX3xfX3wgfF98ICAgICAgICAgICAgICAgICAgICBcbmBcbn07XG5leHBvcnQgY29uc3QgUmVzdGFydCA9IHtcbiAgICBoZWFkZXI6IGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIFxuICB8IF9fICB8ICAgX198ICAgX198XyAgIF98ICBfICB8IF9fICB8XyAgIF98XG4gIHwgICAgLXwgICBfX3xfXyAgIHwgfCB8IHwgICAgIHwgICAgLXwgfCB8ICBcbiAgfF9ffF9ffF9fX19ffF9fX19ffCB8X3wgfF9ffF9ffF9ffF9ffCB8X3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBXZSB3aWxsIG5vdyByZXN0YXJ0IHRoZSBjbHVzdGVyIHVzZWQgaW4gdGhlIERhdGEgQ2VudGVyIEFwcGxpY2F0aW9uIFBlcmZvcm1hbmNlIHRlc3RpbmcuXG5gXG59O1xuZXhwb3J0IGNvbnN0IFRlYXJkb3duID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fICBfX19fXyBfIF8gXyBfX19fXyBcbiAgfF8gICBffCAgIF9ffCAgXyAgfCBfXyAgfCAgICBcXFxcfCAgICAgfCB8IHwgfCAgIHwgfFxuICAgIHwgfCB8ICAgX198ICAgICB8ICAgIC18ICB8ICB8ICB8ICB8IHwgfCB8IHwgfCB8XG4gICAgfF98IHxfX19fX3xfX3xfX3xfX3xfX3xfX19fL3xfX19fX3xfX19fX3xffF9fX3xcblxuICBXZSB3aWxsIG5vdyB0ZXJtaW5hdGUgdGhlIGNsdXN0ZXIgdXNlZCBpbiB0aGUgRGF0YSBDZW50ZXIgQXBwbGljYXRpb24gUGVyZm9ybWFuY2UgdGVzdGluZy5cbmBcbn07XG4iLCJpbXBvcnQgeyBpbnB1dCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGFwcDNob3VyIH0gZnJvbSAnLi4vLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0QXBwTGljZW5zZSA9IChsaWNlbnNlLCBmb3JjZSkgPT4ge1xuICAgIGNvbnN0IGFwcExpY2Vuc2UgPSBsaWNlbnNlICYmIGV4aXN0c1N5bmMobGljZW5zZSkgPyByZWFkRmlsZVN5bmMobGljZW5zZSwgJ3V0ZjgnKSA6IGxpY2Vuc2U7XG4gICAgaWYgKGZvcmNlKSB7XG4gICAgICAgIHJldHVybiBhcHBMaWNlbnNlIHx8IGFwcDNob3VyO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yQXBwTGljZW5zZSk7XG4gICAgcmV0dXJuIGlucHV0KHtcbiAgICAgICAgbWVzc2FnZTogYExpY2Vuc2VgLFxuICAgICAgICBkZWZhdWx0OiBhcHBMaWNlbnNlIHx8IGFwcDNob3VyLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0pO1xufTtcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCB7IGNyZWF0ZVJlYWRTdHJlYW0gfSBmcm9tICdmcyc7XG5leHBvcnQgY29uc3QgdXBsb2FkVG9VUE0gPSBhc3luYyAoYmFzZVVybCwgcGF0aCwgdXNlcm5hbWUsIHBhc3N3b3JkLCB2ZXJib3NlID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdXNlcm5hbWUgJiYgcGFzc3dvcmQgPyBCdWZmZXIuZnJvbShgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0JykgOiBudWxsO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvP29zX2F1dGhUeXBlPWJhc2ljYCwgY3JlZGVudGlhbHMgPyB7XG4gICAgICAgIGhlYWRlcnM6IHsgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtjcmVkZW50aWFsc31gIH1cbiAgICB9IDogdW5kZWZpbmVkKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNLCB1bmFibGUgdG8gcmV0cmlldmUgdG9rZW4nLCBlcnIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSByZXNwb25zZS5oZWFkZXJzWyd1cG0tdG9rZW4nXTtcbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdwbHVnaW4nLCBjcmVhdGVSZWFkU3RyZWFtKHBhdGgpKTtcbiAgICAgICAgICAgIHJldHVybiBheGlvcy5wb3N0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvP3Rva2VuPSR7dG9rZW59YCwgZm9ybURhdGEsIHsgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAuLi5mb3JtRGF0YS5nZXRIZWFkZXJzKCksXG4gICAgICAgICAgICAgICAgICAgIC4uLmNyZWRlbnRpYWxzID8geyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfSA6IHt9XG4gICAgICAgICAgICAgICAgfSB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGaW5pc2hlZCB1cGxvYWRpbmcgcGx1Z2luIGFyY2hpdmUgdG8gVVBNJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgcGx1Z2luIGFyY2hpdmUgZmlsZSB0byBVUE0sIHVuYWJsZSB0byByZXRyaWV2ZSB0b2tlbiBmcm9tIGhlYWRlcnM6JywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuaGVhZGVycywgbnVsbCwgMikpO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5leHBvcnQgY29uc3Qgd2FpdEZvclBsdWdpblRvQmVFbmFibGVkID0gYXN5bmMgKGFwcEtleSwgYmFzZVVybCwgdXNlcm5hbWUsIHBhc3N3b3JkLCB2ZXJib3NlID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdXNlcm5hbWUgJiYgcGFzc3dvcmQgPyBCdWZmZXIuZnJvbShgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0JykgOiBudWxsO1xuICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ1dhaXRpbmcgZm9yIHBsdWdpbiB0byBiZWNvbWUgZW5hYmxlZCcpO1xuICAgIGxldCBpc0VuYWJsZWQgPSBmYWxzZTtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIHdoaWxlICghaXNFbmFibGVkICYmIGNvdW50IDwgMTIwKSB7XG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDAwKSk7XG4gICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coYFdhaXRpbmcgZm9yIHBsdWdpbiB0byBiZWNvbWUgZW5hYmxlZC4uLiAke2NvdW50fXNgKTtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5YCwgY3JlZGVudGlhbHMgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9XG4gICAgICAgIH0gOiB1bmRlZmluZWQpLmNhdGNoKCgpID0+ICh7IGRhdGE6IHsgZW5hYmxlZDogZmFsc2UgfSB9KSk7XG4gICAgICAgIGlzRW5hYmxlZCA9IGRhdGE/LmVuYWJsZWQ7XG4gICAgICAgIGNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiBpc0VuYWJsZWQ7XG59O1xuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTGljZW5zZSA9IGFzeW5jIChhcHBLZXksIGxpY2Vuc2UsIGJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgdmVyYm9zZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHVzZXJuYW1lICYmIHBhc3N3b3JkID8gQnVmZmVyLmZyb20oYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGF4aW9zLmdldChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLyR7YXBwS2V5fS1rZXkvbGljZW5zZWAsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ1gtQXRsYXNzaWFuLVRva2VuJzogJ25vLWNoZWNrJyxcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vdm5kLmF0bC5wbHVnaW5zK2pzb24nLFxuICAgICAgICAgICAgLi4uY3JlZGVudGlhbHMgPyB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9IDoge31cbiAgICAgICAgfVxuICAgIH0pLmNhdGNoKCgpID0+ICh7IGRhdGE6IHt9IH0pKTtcbiAgICBjb25zdCB7IHJhd0xpY2Vuc2UgfSA9IGRhdGE7XG4gICAgaWYgKCFyYXdMaWNlbnNlIHx8IHJhd0xpY2Vuc2UgIT09IGxpY2Vuc2UpIHtcbiAgICAgICAgcmV0dXJuIGF4aW9zLnB1dChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLyR7YXBwS2V5fS1rZXkvbGljZW5zZWAsIGB7IFwicmF3TGljZW5zZVwiOiBcIiR7bGljZW5zZX1cIiB9YCwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdYLUF0bGFzc2lhbi1Ub2tlbic6ICduby1jaGVjaycsXG4gICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi92bmQuYXRsLnBsdWdpbnMranNvbicsXG4gICAgICAgICAgICAgICAgLi4uY3JlZGVudGlhbHMgPyB7ICdBdXRob3JpemF0aW9uJzogYEJhc2ljICR7Y3JlZGVudGlhbHN9YCB9IDoge31cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGaW5pc2hlZCB1cGxvYWRpbmcgbGljZW5zZSB0byBVUE0nKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHVwbG9hZCBsaWNlbnNlIHRvIFVQTScsIGVycik7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgcGFyc2UgfSBmcm9tICdjb250ZW50LWRpc3Bvc2l0aW9uJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtLCBta2RpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZmluaXNoZWQgfSBmcm9tICdzdHJlYW0vcHJvbWlzZXMnO1xuZXhwb3J0IGNvbnN0IGRvd25sb2FkQXBwID0gYXN5bmMgKGFkZG9uS2V5KSA9PiB7XG4gICAgY29uc3QgdG1wRGlyID0gam9pbihob21lZGlyKCksICcuZGNkeCcsICd0bXAnKTtcbiAgICBta2RpclN5bmModG1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBsZXQgZG93bmxvYWRVcmwgPSBgaHR0cHM6Ly9tYXJrZXRwbGFjZS5hdGxhc3NpYW4uY29tL2Rvd25sb2FkL3BsdWdpbnMvJHthZGRvbktleX1gO1xuICAgIGNvbnN0IHsgZGF0YTogbGlzdGluZyB9ID0gYXdhaXQgYXhpb3MuZ2V0KGBodHRwczovL21hcmtldHBsYWNlLmF0bGFzc2lhbi5jb20vcmVzdC8yL2FkZG9ucy8ke2FkZG9uS2V5fT9ob3N0aW5nPWRhdGFjZW50ZXImd2l0aFZlcnNpb249dHJ1ZWApLmNhdGNoKCgpID0+ICh7IGRhdGE6IG51bGwgfSkpO1xuICAgIGlmIChsaXN0aW5nKSB7XG4gICAgICAgIGRvd25sb2FkVXJsID0gbGlzdGluZy5fZW1iZWRkZWQ/LnZlcnNpb24/Ll9lbWJlZGRlZD8uYXJ0aWZhY3Q/Ll9saW5rcz8uYmluYXJ5Py5ocmVmIHx8IGRvd25sb2FkVXJsO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zKHtcbiAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgdXJsOiBkb3dubG9hZFVybCxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnc3RyZWFtJ1xuICAgIH0pO1xuICAgIGNvbnN0IGRpc3Bvc2l0aW9uID0gcGFyc2UocmVzcG9uc2UuaGVhZGVyc1snY29udGVudC1kaXNwb3NpdGlvbiddKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGRpc3Bvc2l0aW9uPy5wYXJhbWV0ZXJzPy5maWxlbmFtZSB8fCBhZGRvbktleTtcbiAgICBjb25zdCB0bXBGaWxlID0gam9pbih0bXBEaXIsIGZpbGVuYW1lKTtcbiAgICBjb25zdCB3cml0ZXIgPSBjcmVhdGVXcml0ZVN0cmVhbSh0bXBGaWxlKTtcbiAgICByZXNwb25zZS5kYXRhLnBpcGUod3JpdGVyKTtcbiAgICBhd2FpdCBmaW5pc2hlZCh3cml0ZXIpO1xuICAgIHJldHVybiB0bXBGaWxlO1xufTtcbiIsImltcG9ydCB7IGNvbmZpcm0sIGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGN3ZCBhcyBwd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCBzaW1wbGVHaXQgZnJvbSAnc2ltcGxlLWdpdCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0QXB0RGljdG9yeSA9IGFzeW5jIChjd2QsIG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbiwgZm9yY2UpID0+IHtcbiAgICAvLyBUcmFuc2xhdGUgY29tbW9uIHJlbGF0aXZlIHBhdGhzIHRvIGFic29sdXRlIHBhdGhzXG4gICAgbGV0IHJlc3VsdCA9IGN3ZCA/XG4gICAgICAgIGN3ZC5zdGFydHNXaXRoKCd+LycpXG4gICAgICAgICAgICA/IGN3ZC5yZXBsYWNlKCd+LycsIGhvbWVkaXIoKSlcbiAgICAgICAgICAgIDogY3dkLnN0YXJ0c1dpdGgoJy4vJylcbiAgICAgICAgICAgICAgICA/IGN3ZC5yZXBsYWNlKCcuLycsIHB3ZCgpICsgJy8nKVxuICAgICAgICAgICAgICAgIDogY3dkID09PSAnLidcbiAgICAgICAgICAgICAgICAgICAgPyBwd2QoKVxuICAgICAgICAgICAgICAgICAgICA6IGN3ZFxuICAgICAgICA6IHB3ZCgpO1xuICAgIC8vIElmIHdlIGFyZSBpbiBpbnRlcmFjdGl2ZSBtb2RlLCB3ZSBzaG91bGQgYXNrIHF1ZXN0aW9ucyBmaXJzdFxuICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIGN1cnJlbnRseSBpbiB0aGUgQVBUIGRpcmVjdG9yeVxuICAgICAgICBjb25zdCBpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpO1xuICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBBUFQgZGlyZWN0b3J5LCB3ZSB3aWxsIGJlIHVzaW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4uLlxuICAgICAgICBsZXQgdXNlQ3VycmVudERpcmVjdG9yeSA9IGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlO1xuICAgICAgICAvLyAuLi51bmxlc3MgdG9sZCBvdGhlcndpc2VcbiAgICAgICAgaWYgKGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBXZSd2ZSBmb3VuZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rvcnk6XG4gICR7cmVzdWx0fVxuYCk7XG4gICAgICAgICAgICB1c2VDdXJyZW50RGlyZWN0b3J5ID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYERvIHlvdSB3aXNoIHRvIHVzZSB0aGlzIGRpcmVjdG9yeT9gLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGdvaW5nIHRvIHVzZSB0aGUgY3VycmVudCBkaXJlY3RvcnksIGFzayBmb3IgdGhlIGFsdGVybmF0aXZlXG4gICAgICAgIGxldCBkaXJlY3RvcnkgPSByZXN1bHQ7XG4gICAgICAgIGlmICghdXNlQ3VycmVudERpcmVjdG9yeSkge1xuICAgICAgICAgICAgZGlyZWN0b3J5ID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc3BlY2lmeSB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIEFwcCBQZWZvcm1hbmNlIFRvb2xraXQgaXMgbG9jYXRlZCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogcmVzdWx0LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFuc2xhdGUgY29tbW9uIHJlbGF0aXZlIHBhdGhzIHRvIGFic29sdXRlIHBhdGhzXG4gICAgICAgIGRpcmVjdG9yeSA9IGRpcmVjdG9yeS5zdGFydHNXaXRoKCd+LycpXG4gICAgICAgICAgICA/IGRpcmVjdG9yeS5yZXBsYWNlKCd+LycsIGhvbWVkaXIoKSArICcvJylcbiAgICAgICAgICAgIDogZGlyZWN0b3J5LnN0YXJ0c1dpdGgoJy4vJylcbiAgICAgICAgICAgICAgICA/IGRpcmVjdG9yeS5yZXBsYWNlKCcuLycsIHB3ZCgpICsgJy8nKVxuICAgICAgICAgICAgICAgIDogZGlyZWN0b3J5ID09PSAnLidcbiAgICAgICAgICAgICAgICAgICAgPyBwd2QoKVxuICAgICAgICAgICAgICAgICAgICA6IGRpcmVjdG9yeTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHByb3ZpZGVkIGFsdGVybmF0aXZlIGlzIGEgRENBUFQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGlzRGlyZWN0b3J5RWxpZ2FibGUgPSBleGlzdHNTeW5jKHJlc29sdmUoam9pbihkaXJlY3RvcnksICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpKTtcbiAgICAgICAgaWYgKCFpc0RpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBEQ0FQVCBkaXJlY3RvcnksIGFzayBpZiB3ZSBuZWVkIHRvIGNsb25lIGl0IGZyb20gR2l0aHViXG4gICAgICAgICAgICBjb25zdCBtdXN0Q2xvbmVBUFQgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGhlIGRpcmVjdG9yeSBlaXRoZXIgZG9lc24ndCBleGlzdCwgb3IgaXQgZG9lc24ndCBjb250YWluIHRoZSBBcHAgUGVmb3JtYW5jZSBUb29sa2l0LiBEbyB5b3Ugd2FudCB0byBjbG9uZSBEQ0FQVCBmcm9tIHNvdXJjZT9gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBtdXN0IGNsb25lIGl0IGZyb20gR2l0aHViLCB3ZSBzaG91bGQgY2xvbmUgaXQgZnJvbSBHaXRodWJcbiAgICAgICAgICAgIGlmIChtdXN0Q2xvbmVBUFQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBzaW1wbGVHaXQoKS5jbG9uZSgnaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC5naXQnLCBkaXJlY3RvcnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgbmVlZHMgdG8gYmUgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGZvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3RpbmcpXG4gICAgICAgIGlmIChtdXN0VXNlRGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIC8vIEFzayBuaWNlbHkuLi5cbiAgICAgICAgICAgIGNvbnN0IGlzRGVmYXVsdENvbmZpZ3VyYXRpb24gPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGNvbmZpcm0gdGhhdCB0aGUgY2hvc2VuIGRpcmVjdG9yeSBpcyB1c2luZyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBEQ0FQVCAobWFzdGVyIGJyYW5jaCknXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIC4uLmJ1dCBhbHNvLCBObyBpcyBub3QgYW4gb3B0aW9uXG4gICAgICAgICAgICBpZiAoIWlzRGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIHVzZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gbWFzdGVyIHRvIGNvbnRpbnVlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5Li4uXG4gICAgICAgICAgICBjb25zdCBpc0FwcFNwZWNpZmljQ29uZmlndXJhdGlvbiA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgY29uZmlybSB0aGF0IHRoZSBjaG9zZW4gZGlyZWN0b3J5IGhhcyBhIERDQVBUIGluc3RhbGxhdGlvbiB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAuLi5idXQgYWxzbywgTm8gaXMgbm90IGFuIG9wdGlvblxuICAgICAgICAgICAgaWYgKCFpc0FwcFNwZWNpZmljQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhcHAtc3BlY2lmaWMgYWN0aW9ucyBpbiBvcmRlciB0byBjb250aW51ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB0aGUgcmVzdWx0IHRvIHRoZSBwcm92aWRlZCBkaXJlY3RvcnlcbiAgICAgICAgcmVzdWx0ID0gZGlyZWN0b3J5O1xuICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUgYW5kIHdlIG5lZWQgdG8gdXNlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHdlIHdpbGwgY2xvbmUgaXQgZnJvbSBHaXRodWJcbiAgICB9XG4gICAgZWxzZSBpZiAobXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIC8vIElmIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3RzIHdlIGNhbiB1c2UgaXRcbiAgICAgICAgLy8gT3RoZXJ3aXNlIHVzZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gZW5zdXJlIGEgZnJlc2ggbm9uLXBlcnNpc3RlbnQgY2hlY2tvdXRcbiAgICAgICAgcmVzdWx0ID0gIWV4aXN0c1N5bmMocmVzdWx0KVxuICAgICAgICAgICAgPyByZXN1bHRcbiAgICAgICAgICAgIDogam9pbihob21lZGlyKCksICcuZGNkeCcsICdkY2FwdCcpO1xuICAgICAgICAvLyBJbmZvcm0gdGhlIHVzZXIgb2YgdGhlIGNob3NlbiBkaXJlY3RvcnlcbiAgICAgICAgY29uc29sZS5sb2coJyAgSW5zdGFsbGluZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRENBUFQgZnJvbSBzb3VyY2UgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke3Jlc3VsdH1gKTtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHlcbiAgICAgICAgcm1TeW5jKHJlc3VsdCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAvLyBSZXRyaWV2ZSBEQ0FQVCBmcm9tIGdpdGh1YlxuICAgICAgICBhd2FpdCBzaW1wbGVHaXQoKS5jbG9uZSgnaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC5naXQnLCByZXN1bHQpO1xuICAgICAgICBjb25zb2xlLmxvZygn4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9mIERDQVBUIGZyb20gc291cmNlIChub24taW50ZXJhY3RpdmUgbW9kZSknKTtcbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGFuZCB3ZSBuZWVkIHRvIHVzZSBhcHAgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgbWFrZSBzdXJlIHRoYXQgaXQgZXhpc3RzXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IGluIHRoZSBBUFQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKSk7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgbm90IGEgRENBUFQgZGlyZWN0b3J5LCB3ZSBjYW5ub3QgY29udGludWVcbiAgICAgICAgaWYgKCFpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgJHtyZXN1bHR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJyAgVXNpbmcgRENBUFQgZnJvbSBjdXJyZW50IGRpcmVjdG9yeSAobm9uLWludGVyYWN0aXZlIG1vZGUpJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7cmVzdWx0fWApO1xuICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICB9XG4gICAgLy8gVGhpcyBzaG91bGQgbm90IG9jY3VyLCBiZWNhdXNlIGVpdGhlciB3ZSBoYXZlIGVzdGFibGlzaGVkIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBoYXMgRENBUFRcbiAgICAvLyBvciB3ZSBoYXZlIGNsb25lZCBpdCBpbnRvIGEgKG5ldykgZGlyZWN0b3J5LiBUaGlzIGlzIG1lcmVseSBhIGNoZWNrIGZvciBpZiB0aGUgbGF0dGVyIGZhaWxlZC5cbiAgICBpZiAoIWV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IGluIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkgJHtyZXN1bHR9YCk7XG4gICAgfVxuICAgIC8vIFNvbWUgYWRkaXRpb25hbCBjaGVja3MgdG8gZW5zdXJlIHRoYXQgd2UgYXJlIGluIGEgdmFsaWQgRENBUFQgZGlyZWN0b3J5XG4gICAgY29uc3QgaGFzRW52RmlsZSA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvYXdzX2VudnMnKSk7XG4gICAgY29uc3QgaGFzU25hcHNob3RKU09OID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC1zbmFwc2hvdHMuanNvbicpKTtcbiAgICBjb25zdCBoYXNUZXJyYWZvcm1WYXJpYWJsZXMgPSBleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKTtcbiAgICBpZiAoIWhhc0VudkZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2F3c19lbnMnIGZpbGUuIEV4cGVjdGVkIHRvIGZpbmQgaXQgaW4gJHtqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9hd3NfZW52cycpfWApO1xuICAgIH1cbiAgICBlbHNlIGlmICghaGFzU25hcHNob3RKU09OKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcXVpcmVkICdkY2FwdC1zbmFwc2hvdHMuanNvbicgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LXNuYXBzaG90cy5qc29uJyl9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFoYXNUZXJyYWZvcm1WYXJpYWJsZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2RjYXB0LnRmdmFycycgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbiIsImltcG9ydCB7IHBhc3N3b3JkIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEFXU0NyZWRlbnRpYWxzID0gYXN5bmMgKHByb2R1Y3QsIGZvcmNlKSA9PiB7XG4gICAgLy8gVHJ5IGdldHRpbmcgdGhlIEFXUyBjcmVkZW50aWFscyBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGNvbnN0IHsgQVdTX0FDQ0VTU19LRVlfSUQsIEFXU19TRUNSRVRfQUNDRVNTX0tFWSB9ID0gcHJvY2Vzcy5lbnY7XG4gICAgLy8gSWYgdGhleSBleGlzdHMgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzLCByZXR1cm4gdGhlbSBpbW1lZGlhdGVseVxuICAgIGlmIChBV1NfQUNDRVNTX0tFWV9JRCAmJiBBV1NfU0VDUkVUX0FDQ0VTU19LRVkpIHtcbiAgICAgICAgcmV0dXJuIFtBV1NfQUNDRVNTX0tFWV9JRCwgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZXTtcbiAgICB9XG4gICAgLy8gSWYgd2UgYXJlIG5vdCBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgd2Ugc2hvdWxkIGFzayBmb3IgdGhlbVxuICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgLy8gU2hvdyBhIG1lc3NhZ2UgYXNraW5nIG5pY2VseVxuICAgICAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yQVdTQ3JlZGVudGlhbHMocHJvZHVjdCkpO1xuICAgICAgICBjb25zdCBhd3NfYWNjZXNzX2tleV9pZCA9IGF3YWl0IHBhc3N3b3JkKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBBV1MgQWNjZXNzIEtleSBJRGAsXG4gICAgICAgICAgICB2YWxpZGF0ZTogKGlucHV0KSA9PiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnICYmIGlucHV0Lmxlbmd0aCA+IDBcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGF3c19zZWNyZXRfYWNjZXNzX2tleSA9IGF3YWl0IHBhc3N3b3JkKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGBBV1MgU2VjcmV0IEFjY2VzcyBLZXlgLFxuICAgICAgICAgICAgdmFsaWRhdGU6IChpbnB1dCkgPT4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyAmJiBpbnB1dC5sZW5ndGggPiAwXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIGFuZCB0aGUgY3JlZGVudGlhbHMgaGF2ZSBub3QgYmVlbiBmb3VuZCwgd2Ugc2hvdWxkIHRocm93IGFuIGVycm9yXG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgQVdTIGNyZWRlbnRpYWxzIGNvdWxkIG5vdCBiZSBmb3VuZC4gUGxlYXNlIHByb3ZpZGUgdGhlICdBV1NfQUNDRVNTX0tFWV9JRCcgYW5kICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknIGVudmlyb25tZW50IHZhcmlhYmxlc2ApO1xufTtcbiIsImltcG9ydCB7IGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEVudmlyb25tZW50TmFtZSA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9yRW52aXJvbm1lbnQpO1xuICAgIHJldHVybiBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6IGBFbnZpcm9ubWVudCBuYW1lYCxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBzZWxlY3QgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5leHBvcnQgY29uc3QgZ2V0UHJvZHVjdCA9IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gc2VsZWN0KHtcbiAgICAgICAgbWVzc2FnZTogYFBsZWFzZSBjaG9vc2UgdGhlIHByb2R1Y3QgZm9yIHdoaWNoIHlvdSB3aXNoIHRvIHJ1biBEQ0FQVGAsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ0ppcmEnLCB2YWx1ZTogJ2ppcmEnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdDb25mbHVlbmNlJywgdmFsdWU6ICdjb25mbHVlbmNlJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQmFtYm9vJywgdmFsdWU6ICdiYW1ib28nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdCaXRidWNrZXQnLCB2YWx1ZTogJ2JpdGJ1Y2tldCcgfVxuICAgICAgICBdXG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgaW5zdGFsbCA9IGFzeW5jIChjd2QpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgXG4gIFN0YXJ0IHByb3Zpc2lvbmluZyBBV1MgdXNpbmcgdGhlIEF0bGFzc2lhbiBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFjZSBUb29sa2l0IChEQ0FQVCkgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb25cbiAgVXNpbmcgRENBUFQgY29uZmlndXJhdGlvbiBmcm9tICR7Y3dkfVxuYCk7XG4gICAgY29uc3QgYmFzZURpciA9IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyk7XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSwgJyMgdGVycmFmb3JtIG91dHB1dCcsICd1dGYtOCcpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS1lbnYtZmlsZScsICdhd3NfZW52cycsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS9kY2FwdC50ZnZhcnM6L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9jb25mLnRmdmFyc2AsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS9kY2FwdC1zbmFwc2hvdHMuanNvbjovZGF0YS1jZW50ZXItdGVycmFmb3JtL2RjYXB0LXNuYXBzaG90cy5qc29uYCxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L2xvZ3M6L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9sb2dzYCxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L291dHB1dHMuanNvbjovZGF0YS1jZW50ZXItdGVycmFmb3JtL291dHB1dHMuanNvbmAsXG4gICAgICAgICAgICAnYXRsYXNzaWFubGFicy90ZXJyYWZvcm06bGF0ZXN0JyxcbiAgICAgICAgICAgICcuL2luc3RhbGwuc2gnLCAnLWMnLCAnY29uZi50ZnZhcnMnXG4gICAgICAgIF0sIHsgY3dkOiBiYXNlRGlyLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coYFxu4pyUIEZpbmlzaGVkIHByb3Zpc2lvbmluZyBBV1MgdXNpbmcgdGhlIEF0bGFzc2lhbiBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFjZSBUb29sa2l0IChEQ0FQVCkgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb25cbiAgQ2x1c3RlciBkZXRhaWxzIGNhbiBiZSBmb3VuZCBpbiAke2Jhc2VEaXJ9L291dHB1dHMuanNvblxuYCk7XG59O1xuZXhwb3J0IGNvbnN0IHJ1blRlc3QgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCwgcHJvZHVjdCkgPT4ge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS1lbnYtZmlsZScsICcuL2FwcC91dGlsL2s4cy9hd3NfZW52cycsXG4gICAgICAgICAgICAnLWUnLCBgUkVHSU9OPXVzLWVhc3QtMmAsXG4gICAgICAgICAgICAnLWUnLCBgRU5WSVJPTk1FTlRfTkFNRT0ke2Vudmlyb25tZW50fWAsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRgLFxuICAgICAgICAgICAgJy12JywgYCR7Y3dkfS9hcHAvdXRpbC9rOHMvYnp0X29uX3BvZC5zaDovZGF0YS1jZW50ZXItdGVycmFmb3JtL2J6dF9vbl9wb2Quc2hgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbmxhYnMvdGVycmFmb3JtOmxhdGVzdCcsXG4gICAgICAgICAgICAnYmFzaCcsICdienRfb25fcG9kLnNoJywgYCR7cHJvZHVjdH0ueW1sYFxuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xufTtcbmV4cG9ydCBjb25zdCByZWdyZXNzaW9uUmVwb3J0ID0gYXN5bmMgKGN3ZCwgcnVuMURpciwgcnVuMkRpcikgPT4ge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS13b3JrZGlyJywgJy8vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXQvYXBwL3JlcG9ydHNfZ2VuZXJhdGlvbicsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdGAsXG4gICAgICAgICAgICAnLXYnLCBgJHtydW4xRGlyfTovcmVzdWx0cy9ydW4xYCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjJEaXJ9Oi9yZXN1bHRzL3J1bjJgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbi9kY2FwdCcsXG4gICAgICAgICAgICAnY3N2X2NoYXJ0X2dlbmVyYXRvci5weScsICdwZXJmb3JtYW5jZV9wcm9maWxlLnltbCdcbiAgICAgICAgXSwgeyBjd2QsIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGdlbmVyYXRpbmcgdGhlIFBlcmZvcm1hbmNlIFJlZ3Jlc3Npb24gUmVwb3J0YCk7XG59O1xuZXhwb3J0IGNvbnN0IHNjYWxhYmlsaXR5UmVwb3J0ID0gYXN5bmMgKGN3ZCwgcmVzdWx0c0RpcjEsIHJlc3VsdHNEaXIyLCByZXN1bHRzRGlyMykgPT4ge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS13b3JrZGlyJywgJy8vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXQvYXBwL3JlcG9ydHNfZ2VuZXJhdGlvbicsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdGAsXG4gICAgICAgICAgICAnLXYnLCBgJHtyZXN1bHRzRGlyMX06L2RjYXB0L3NjYWxlX3Jlc3VsdHNfMWAsXG4gICAgICAgICAgICAnLXYnLCBgJHtyZXN1bHRzRGlyMn06L2RjYXB0L3NjYWxlX3Jlc3VsdHNfMmAsXG4gICAgICAgICAgICAnLXYnLCBgJHtyZXN1bHRzRGlyM306L2RjYXB0L3NjYWxlX3Jlc3VsdHNfM2AsXG4gICAgICAgICAgICAnYXRsYXNzaWFuL2RjYXB0JyxcbiAgICAgICAgICAgICdjc3ZfY2hhcnRfZ2VuZXJhdG9yLnB5JywgJ3NjYWxlX3Byb2ZpbGUueW1sJ1xuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgZ2VuZXJhdGluZyB0aGUgU2NhbGFiaWxpdHkgQmVuY2htYXJrIFJlcG9ydGApO1xufTtcbmV4cG9ydCBjb25zdCByZXN0YXJ0ID0gYXN5bmMgKGN3ZCwgZW52aXJvbm1lbnQsIHByb2R1Y3QpID0+IHtcbiAgICB3cml0ZUZpbGVTeW5jKGpvaW4oY3dkLCAnLi9hcHAvdXRpbC9rOHMvZGVsZXRlX3BvZC5zaCcpLCBgXG5hd3MgZWtzIHVwZGF0ZS1rdWJlY29uZmlnIC0tbmFtZSBhdGxhcy0kRU5WSVJPTk1FTlRfTkFNRS1jbHVzdGVyIC0tcmVnaW9uICRSRUdJT05cbmt1YmVjdGwgcm9sbG91dCByZXN0YXJ0IHN0cy8kUFJPRFVDVCAtbiBhdGxhc3NpYW5cbmt1YmVjdGwgcm9sbG91dCBzdGF0dXMgc3RzICRQUk9EVUNUIC1uIGF0bGFzc2lhbmAsICd1dGY4Jyk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLWVudi1maWxlJywgJy4vYXBwL3V0aWwvazhzL2F3c19lbnZzJyxcbiAgICAgICAgICAgICctZScsIGBSRUdJT049dXMtZWFzdC0yYCxcbiAgICAgICAgICAgICctZScsIGBFTlZJUk9OTUVOVF9OQU1FPSR7ZW52aXJvbm1lbnR9YCxcbiAgICAgICAgICAgICctZScsIGBQUk9EVUNUPSR7cHJvZHVjdH1gLFxuICAgICAgICAgICAgJy12JywgYCR7Y3dkfTovZGF0YS1jZW50ZXItdGVycmFmb3JtL2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0YCxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH0vYXBwL3V0aWwvazhzL2RlbGV0ZV9wb2Quc2g6L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9kZWxldGVfcG9kLnNoYCxcbiAgICAgICAgICAgICdhdGxhc3NpYW5sYWJzL3RlcnJhZm9ybTpsYXRlc3QnLFxuICAgICAgICAgICAgJ2Jhc2gnLCAnZGVsZXRlX3BvZC5zaCdcbiAgICAgICAgXSwgeyBjd2QsIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbn07XG5leHBvcnQgY29uc3QgdGVybWluYXRlID0gYXN5bmMgKGN3ZCwgZW52aXJvbm1lbnQpID0+IHtcbiAgICBjb25zdCBiYXNlRGlyID0gcmVzb2x2ZShqb2luKGN3ZCwgJ2FwcC91dGlsL2s4cycpKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRvY2tlciA9IHNwYXduKCdkb2NrZXInLCBbXG4gICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLWVudi1maWxlJywgJ2F3c19lbnZzJyxcbiAgICAgICAgICAgICctLXdvcmtkaXInLCAnLy9kYXRhLWNlbnRlci10ZXJyYWZvcm0nLFxuICAgICAgICAgICAgJy0tZW50cnlwb2ludCcsICdweXRob24nLFxuICAgICAgICAgICAgJy12JywgYCR7YmFzZURpcn0vdGVybWluYXRlX2NsdXN0ZXIucHk6L2RhdGEtY2VudGVyLXRlcnJhZm9ybS90ZXJtaW5hdGVfY2x1c3Rlci5weWAsXG4gICAgICAgICAgICAnYXRsYXNzaWFuL2RjYXB0JyxcbiAgICAgICAgICAgICd0ZXJtaW5hdGVfY2x1c3Rlci5weScsICctLWNsdXN0ZXJfbmFtZScsIGBhdGxhcy0ke2Vudmlyb25tZW50fS1jbHVzdGVyYCwgJy0tYXdzX3JlZ2lvbicsICd1cy1lYXN0LTInXG4gICAgICAgIF0sIHsgY3dkOiBqb2luKGN3ZCwgJ2FwcC91dGlsL2s4cycpLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coYOKclCBGaW5pc2hlZCB0ZXJtaW5hdGluZyB0aGUgREMgY2x1c3RlciBvbiBBV1MgdXNpbmcgdGhlIEF0bGFzc2lhbiBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFjZSBUb29sa2l0IChEQ0FQVCkgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb25gKTtcbn07XG4iLCJpbXBvcnQgeyB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IHBlcnNpc3RBV1NDcmVkZW50aWFscyA9IChjd2QsIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpID0+IHtcbiAgICB3cml0ZUZpbGVTeW5jKGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzL2F3c19lbnZzJyksIGBcbiMgYXdzX2VudnMgZmlsZSBzaG91bGQgY29udGFpbiBBV1MgdmFyaWFibGVzIG5lZWRlZCBmb3IgYXV0aG9yaXphdGlvbiAod2l0aG91dCBxdW90ZXMpXG5BV1NfQUNDRVNTX0tFWV9JRD0ke2F3c19hY2Nlc3Nfa2V5X2lkfVxuQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZPSR7YXdzX3NlY3JldF9hY2Nlc3Nfa2V5fVxuYC50cmltKCksICd1dGYtOCcpO1xuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5hd3NDcmVkZW50aWFsc1BlcnNpc3RlZCk7XG59O1xuIiwiaW1wb3J0IGlucXVpcmVyIGZyb20gJ2lucXVpcmVyJztcbmltcG9ydCBQcmVzc1RvQ29udGludWVQcm9tcHQgZnJvbSAnaW5xdWlyZXItcHJlc3MtdG8tY29udGludWUnO1xuaW5xdWlyZXIucmVnaXN0ZXJQcm9tcHQoJ3ByZXNzLXRvLWNvbnRpbnVlJywgUHJlc3NUb0NvbnRpbnVlUHJvbXB0KTtcbmV4cG9ydCBjb25zdCB3YWl0Rm9yVXNlcklucHV0ID0gYXN5bmMgKG1lc3NhZ2UsIGZvcmNlKSA9PiB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdCh7XG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICB0eXBlOiAncHJlc3MtdG8tY29udGludWUnLFxuICAgICAgICBhbnlLZXk6IHRydWUsXG4gICAgICAgIHByZXNzVG9Db250aW51ZU1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHdoZW46ICFmb3JjZVxuICAgIH0pO1xuICAgIHJldHVybiBrZXkgfHwgeyB2YWx1ZTogdW5kZWZpbmVkIH07XG59O1xuIiwiaW1wb3J0IHsgZW1wdHlMaW5lLCBSZXN0YXJ0IH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgcmVzdGFydCB9IGZyb20gJy4vZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4vZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9nZXRBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgcmVzdGFydENsdXN0ZXIgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIFNob3cgbmljZSBsaXR0bGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2coUmVzdGFydC5oZWFkZXIpO1xuICAgIC8vIEFzayBmb3IgdGhlIHByb3BlciBkaXJlY3Rvcnkgb2YgQVBUXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgdHJ1ZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhkaXJlY3RvcnksIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIEFzayB0aGUgdXNlciBpZiB0aGV5IGFyZSByZWFkeSB0byBzYXkgZ29vZGJ5ZSB0byB0aGVpciBjbHVzdGVyXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICBlbXB0eUxpbmUoKTtcbiAgICAvLyBUZXJtaW5hdGUgaXQhXG4gICAgYXdhaXQgcmVzdGFydChkaXJlY3RvcnksIG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gQXNrIHRoZSB1c2VyIHRvIHF1aXQgdGhlIHByb2dyYW1cbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBleGl0Li4uJywgb3B0aW9ucy5mb3JjZSk7XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSwgaW5wdXQsIHBhc3N3b3JkIGFzIHBhc3N3b3JkUHJvbXB0LCBzZWxlY3QgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBQcmVzZXRzLCBTaW5nbGVCYXIgfSBmcm9tICdjbGktcHJvZ3Jlc3MnO1xuaW1wb3J0IHsgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJMaWNlbnNlLCB1cGxvYWRUb1VQTSwgd2FpdEZvclBsdWdpblRvQmVFbmFibGVkIH0gZnJvbSAnLi4vLi4vaGVscGVycy91cG0nO1xuaW1wb3J0IHsgZG93bmxvYWRBcHAgfSBmcm9tICcuL2Rvd25sb2FkQXBwJztcbmltcG9ydCB7IGdldEFwcExpY2Vuc2UgfSBmcm9tICcuL2dldEFwcExpY2Vuc2UnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4vZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9nZXRBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBnZXRFbnZpcm9ubWVudE5hbWUgfSBmcm9tICcuL2dldEVudmlyb25tZW50TmFtZSc7XG5pbXBvcnQgeyBnZXRQcm9kdWN0IH0gZnJvbSAnLi9nZXRQcm9kdWN0JztcbmltcG9ydCB7IHJlc3RhcnRDbHVzdGVyIH0gZnJvbSAnLi9yZXN0YXJ0Q2x1c3Rlcic7XG5jb25zdCBwcm9ncmVzc0JhciA9IG5ldyBTaW5nbGVCYXIoe1xuICAgIGZvcm1hdDogJyAgW3tiYXJ9XSB7cGVyY2VudGFnZX0lIHwgRVRBOiB7ZXRhX2Zvcm1hdHRlZH1tJyxcbiAgICBmb3JtYXRUaW1lOiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdG90YWwgPSBwcm9ncmVzc0Jhci5nZXRUb3RhbCgpIC8gNjA7XG4gICAgICAgIGNvbnN0IHRpbWVQYXNzZWQgPSByb3VuZCgocHJvZ3Jlc3NCYXIuZ2V0VG90YWwoKSAtIHZhbHVlKSAvIDYwLCAwLjUpO1xuICAgICAgICByZXR1cm4gdGltZVBhc3NlZCA9PT0gdG90YWwgPyBgJHt0b3RhbH1gIDogYCR7dG90YWwgLSB0aW1lUGFzc2VkfWA7XG4gICAgfSxcbiAgICBoaWRlQ3Vyc29yOiB0cnVlXG59LCBQcmVzZXRzLmxlZ2FjeSk7XG5jb25zdCByb3VuZCA9ICh2YWx1ZSwgc3RlcCA9IDEuMCkgPT4ge1xuICAgIGNvbnN0IGludiA9IDEuMCAvIHN0ZXA7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodmFsdWUgKiBpbnYpIC8gaW52O1xufTtcbmV4cG9ydCBjb25zdCBpbnN0YWxsQXBwID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBTZXQgZGVmYXVsdCB2YWx1ZSBmb3IgdXNlcm5hbWUvcGFzc3dvcmRcbiAgICBjb25zdCB1c2VybmFtZSA9IG9wdGlvbnMudXNlcm5hbWUgfHwgJ2FkbWluJztcbiAgICBjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMucGFzc3dvcmQgfHwgJ2FkbWluJztcbiAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIHdlIHdpbGwgZG93bmxvYWQgaXQgZnJvbSBNUEFDXG4gICAgaWYgKG9wdGlvbnMuZm9yY2UpIHtcbiAgICAgICAgLy8gSW4gb3JkZXIgdG8gZG8gc28sIHdlIG5lZWQgYW4gYXBwa2V5LiBJZiB0aGlzIGlzIG5vdCBwcm92aWRlZCwgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgaWYgKCFvcHRpb25zLmFwcEtleSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gYXV0b21hdGljYWxseSBpbnN0YWxsIGFwcCBpbnRvIGNsdXN0ZXIsIGBhcHBLZXlgIHdhcyBub3QgcHJvdmlkZWQnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBHZXQgdGhlIGFwcCBsaWNlbnNlXG4gICAgICAgIGNvbnN0IGFwcExpY2Vuc2UgPSBhd2FpdCBnZXRBcHBMaWNlbnNlKG9wdGlvbnMubGljZW5zZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgIC8vIERvd25sb2FkIHRoZSBmaWxlIGZyb20gTVBBQ1xuICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgZG93bmxvYWRBcHAob3B0aW9ucy5hcHBLZXkpO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBsZXQgdGltZXJJZCA9IG51bGw7XG4gICAgICAgIGxldCBpc0luc3RhbGxlZFN1Y2Nlc2Z1bGx5ID0gZmFsc2U7XG4gICAgICAgIHdoaWxlICghaXNJbnN0YWxsZWRTdWNjZXNmdWxseSAmJiBjb3VudCA8PSA0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIEluc3RhbGxpbmcgdGhlIGFwcCAoJHtvcHRpb25zLmFwcEtleX0pIGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVuaXZlcnNhbCBQbHVnaW4gTWFuYWdlciBSRVNUIEFQSWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBSZXRyeWluZyBpbnN0YWxsYXRpb24gb2YgdGhlIGFwcCAoJHtvcHRpb25zLmFwcEtleX0pIGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVuaXZlcnNhbCBQbHVnaW4gTWFuYWdlciBSRVNUIEFQSSAoYXR0ZW1wdCAke2NvdW50ICsgMX0pYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFNob3cgYSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5zdGFydCgxODAsIDApO1xuICAgICAgICAgICAgICAgIHRpbWVySWQgPSBzZXRJbnRlcnZhbCgoKSA9PiBwcm9ncmVzc0Jhci5pbmNyZW1lbnQoKSwgMTAwMCk7XG4gICAgICAgICAgICAgICAgLy8gVXBsb2FkIGl0IGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVQTSBSRVNUIEFQSVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzSW5zdGFsbGVkID0gYXdhaXQgdXBsb2FkVG9VUE0ob3B0aW9ucy5iYXNlVXJsLCBmaWxlLCB1c2VybmFtZSwgcGFzc3dvcmQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzSW5zdGFsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGluc3RhbGwgYXBwIGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVuaXZlcnNhbCBQbHVnaW4gTWFuYWdlciBSRVNUIEFQSScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHJlc3RhcnQgdGhlIGFwcGxpY2F0aW9uIGNvbnRhaW5lclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnJlc3RhcnRBZnRlckluc3RhbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIHJlc3RhcnRzLCB0aGUgcHJvZHVjdCBvcHRpb24gaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLnByb2R1Y3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCcgIEZhaWxlZCB0byByZXN0YXJ0IGFwcGxpY2F0aW9uLCByZXF1aXJlZCBvcHRpb24gYHByb2R1Y3RgIGlzIG1pc3NpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciByZXN0YXJ0cywgdGhlIGVudmlyb25tZW50IG9wdGlvbiBpcyByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFvcHRpb25zLmVudmlyb25tZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnICBGYWlsZWQgdG8gcmVzdGFydCBhcHBsaWNhdGlvbiwgcmVxdWlyZWQgb3B0aW9uIGBwcm9kdWN0YCBpcyBtaXNzaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBPaywgZ29vZCB0byBnbyFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9oIHJpZ2h0LCB3ZSBhbHNvIG5lZWQgRENBUFQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZXN0YXJ0IHRoZSBjbHVzdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCBmYWxzZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgbm93IGdvaW5nIHRvIHJlc3RhcnQgdGhlIGNsdXN0ZXIgYW5kIGhvcGUgZm9yIHRoZSBiZXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICBSZXN0YXJ0aW5nICR7b3B0aW9ucy5wcm9kdWN0fSB0byBlbnN1cmUgYXBwIGluc3RhbGxhdGlvbmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVzdGFydENsdXN0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdzX2FjY2Vzc19rZXlfaWQ6IG9wdGlvbnMuYXdzX2FjY2Vzc19rZXlfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5OiBvcHRpb25zLmF3c19zZWNyZXRfYWNjZXNzX2tleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHBsdWdpbiB0byBiZSBlbmFibGVkXG4gICAgICAgICAgICAgICAgY29uc3QgaXNFbmFibGVkID0gYXdhaXQgd2FpdEZvclBsdWdpblRvQmVFbmFibGVkKG9wdGlvbnMuYXBwS2V5LCBvcHRpb25zLmJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmICghaXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGFwcCBjb3VsZCBub3QgYmUgZW5hYmxlZCBvbiB0aGUgY2x1c3RlciwgcGxlYXNlIHJlZmVyIHRvIHRoZSBhcHBsaWNhdGlvbiBsb2cgZmlsZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGxpY2Vuc2UgKHVzZSB0aGUgMyBob3VyIHRpbWVib21iIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlKVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzTGljZW5zZWQgPSBhd2FpdCByZWdpc3RlckxpY2Vuc2Uob3B0aW9ucy5hcHBLZXksIGFwcExpY2Vuc2UsIG9wdGlvbnMuYmFzZVVybCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0xpY2Vuc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGxpY2Vuc2UgY291bGQgbm90IGJlIGFwcGxpZWQgZm9yIHRoZSBhcHAgb24gdGhlIGNsdXN0ZXIsIHBsZWFzZSByZWZlciB0byB0aGUgYXBwbGljYXRpb24gbG9nIGZpbGVzIGZvciBtb3JlIGluZm9ybWF0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlzSW5zdGFsbGVkU3VjY2VzZnVsbHkgPSBpc0luc3RhbGxlZCAmJiBpc0VuYWJsZWQgJiYgaXNMaWNlbnNlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPD0gMykge1xuICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGEgbWludXRlIChjb29sZG93biBwZXJpb2QpIGJlZm9yZSByZXRyeWluZ1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwMCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgICAgICAgLy8gU3RvcCB0aGUgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3RvcCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lcklkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdGVtcG9yYXJ5IGZpbGVcbiAgICAgICAgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIC8vIFRlbGwgdGhlbSB3ZSBzdWNjZWVkZWRcbiAgICAgICAgY29uc29sZS5sb2coYOKclCBGaW5pc2hlZCBpbnN0YWxsaW5nIHRoZSBhcHAgKCR7b3B0aW9ucy5hcHBLZXl9KWApO1xuICAgICAgICAvLyBJZiB3ZSdyZSBpbiBpbnRlcmFjdGl2ZSBtb2RlLCBsZXQncyBiZSBuaWNlXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXkgaGF2ZSBvcHRpb25zXG4gICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSXQgaXMgbm93IHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBKaXJhIGNsdXN0ZXIuXG4gIFdlIGNhbiBpbnN0YWxsIGl0IGZyb20gdGhlIEF0bGFzc2lhbiBNYXJrZXRwbGFjZSBvciB5b3UgY2FuIGluc3RhbGwgaXQgbWFudWFsbHkuXG5gKTtcbiAgICAgICAgLy8gQXNrIHRoZW0gaWYgdGhleSBwcmVmZXIgYXV0b21hdGlvbiBvciB0ZWRpb3VzIG1hbnVhbCB0YXNrc1xuICAgICAgICBjb25zdCBtZXRob2QgPSBhd2FpdCBzZWxlY3Qoe1xuICAgICAgICAgICAgbWVzc2FnZTogYEhvdyBkbyB5b3Ugd2FudCB0byBpbnN0YWxsIHRoZSBhcHA/YCxcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdtcGFjJyxcbiAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAgICB7IG5hbWU6ICdNYXJrZXRwbGFjZScsIHZhbHVlOiAnbXBhYycgfSxcbiAgICAgICAgICAgICAgICB7IG5hbWU6ICdNYW51YWwnLCB2YWx1ZTogJ21hbnVhbCcgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgdGhleSBjaG9zZSBhdXRvbWF0aW9uLCBsZXQncyBhdXRvbWF0ZSFcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ21wYWMnKSB7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSBhcHAga2V5XG4gICAgICAgICAgICBjb25zdCBhZGRvbktleSA9IGF3YWl0IGlucHV0KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHByb3ZpZGUgdGhlIGtleSBvZiB0aGUgYXBwIHRvIGJlIGluc3RhbGxlZCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQXNrIHRoZW0gbmljZWx5IGZvciB0aGUgYXBwIGxpY2Vuc2UgdG8gYmUgdXNlZFxuICAgICAgICAgICAgY29uc3QgYXBwTGljZW5zZSA9IGF3YWl0IGdldEFwcExpY2Vuc2Uob3B0aW9ucy5saWNlbnNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgICAgIC8vIEFzayB0aGVtIG5pY2VseSBmb3IgdGhlIHVzZXJuYW1lXG4gICAgICAgICAgICBjb25zdCBhZG1pblVzZXJuYW1lID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgcHJvdmlkZSB0aGUgdXNlcm5hbWUgb2YgYSBzeXN0ZW0gYWRtaW5pc3RyYXRvcicsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogdXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQXNrIHRoZW0gbmljZWx5IGZvciB0aGUgdXNlcm5hbWVcbiAgICAgICAgICAgIGNvbnN0IGFkbWluUGFzc3dvcmQgPSBhd2FpdCBwYXNzd29yZFByb21wdCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBwcm92aWRlIHRoZSB1c2VybmFtZSBvZiBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yJyxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZTogaXRlbSA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgaXRlbS5sZW5ndGggPiAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEFzayB0aGVtIG5pY2VseSBpZiB3ZSBuZWVkIHRvIHJlc3RhcnQgdGhlIGFwcGxpY2F0aW9uXG4gICAgICAgICAgICBjb25zdCByZXN0YXJ0QWZ0ZXJJbnN0YWxsID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1Jlc3RhcnQgdGhlIGhvc3QgYXBwbGljYXRpb24gYWZ0ZXIgaW5zdGFsbGF0aW9uPycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlbSB3ZSBhcmUgc3RhcnRpbmdcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSW5zdGFsbGluZyB0aGUgYXBwICgke2FkZG9uS2V5fSkgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJYCk7XG4gICAgICAgICAgICAvLyBTaG93IGEgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICBwcm9ncmVzc0Jhci5zdGFydCgxODAsIDApO1xuICAgICAgICAgICAgY29uc3QgdGltZXJJZCA9IHNldEludGVydmFsKCgpID0+IHByb2dyZXNzQmFyLmluY3JlbWVudCgpLCAxMDAwKTtcbiAgICAgICAgICAgIC8vIERvd25sb2FkIHRoZSBmaWxlIGZyb20gTVBBQ1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IGRvd25sb2FkQXBwKGFkZG9uS2V5KTtcbiAgICAgICAgICAgIC8vIFVwbG9hZCBpdCBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVUE0gUkVTVCBBUElcbiAgICAgICAgICAgIGNvbnN0IGlzSW5zdGFsbGVkID0gYXdhaXQgdXBsb2FkVG9VUE0ob3B0aW9ucy5iYXNlVXJsLCBmaWxlLCBhZG1pblVzZXJuYW1lLCBhZG1pblBhc3N3b3JkLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIWlzSW5zdGFsbGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gaW5zdGFsbCBhcHAgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHJlc3RhcnQgdGhlIGFwcGxpY2F0aW9uIGNvbnRhaW5lclxuICAgICAgICAgICAgaWYgKHJlc3RhcnRBZnRlckluc3RhbGwpIHtcbiAgICAgICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSBob3N0IHByb2R1Y3RcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0ID0gb3B0aW9ucy5wcm9kdWN0IHx8IGF3YWl0IGdldFByb2R1Y3QoKTtcbiAgICAgICAgICAgICAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICAgICAgICAgICAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhwcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgICAgICAgICAvLyBBc2sgZm9yIHRoZSBlbnZpcm9ubWVudCBuYW1lXG4gICAgICAgICAgICAgICAgY29uc3QgZW52aXJvbm1lbnQgPSBvcHRpb25zLmVudmlyb25tZW50IHx8IGF3YWl0IGdldEVudmlyb25tZW50TmFtZSgpO1xuICAgICAgICAgICAgICAgIC8vIE9oIHJpZ2h0LCB3ZSBhbHNvIG5lZWQgRENBUFQgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZXN0YXJ0IHRoZSBjbHVzdGVyXG4gICAgICAgICAgICAgICAgY29uc3QgY3dkID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgZmFsc2UsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBub3cgZ29pbmcgdG8gcmVzdGFydCB0aGUgY2x1c3RlciBhbmQgaG9wZSBmb3IgdGhlIGJlc3RcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICBSZXN0YXJ0aW5nICR7b3B0aW9ucy5wcm9kdWN0fSB0byBlbnN1cmUgYXBwIGluc3RhbGxhdGlvbmApO1xuICAgICAgICAgICAgICAgIGF3YWl0IHJlc3RhcnRDbHVzdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0OiBwcm9kdWN0LFxuICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudDogZW52aXJvbm1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGF3c19hY2Nlc3Nfa2V5X2lkOiBhd3NfYWNjZXNzX2tleV9pZCxcbiAgICAgICAgICAgICAgICAgICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5OiBhd3Nfc2VjcmV0X2FjY2Vzc19rZXksXG4gICAgICAgICAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgcGx1Z2luIHRvIGJlIGVuYWJsZWRcbiAgICAgICAgICAgIGNvbnN0IGlzRW5hYmxlZCA9IGF3YWl0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZChhZGRvbktleSwgb3B0aW9ucy5iYXNlVXJsLCBhZG1pblVzZXJuYW1lLCBhZG1pblBhc3N3b3JkLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIWlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGFwcCBjb3VsZCBub3QgYmUgZW5hYmxlZCBvbiB0aGUgY2x1c3RlciwgcGxlYXNlIHJlZmVyIHRvIHRoZSBhcHBsaWNhdGlvbiBsb2cgZmlsZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwcm92aWRlZCBsaWNlbnNlXG4gICAgICAgICAgICBjb25zdCBpc0xpY2Vuc2VkID0gYXdhaXQgcmVnaXN0ZXJMaWNlbnNlKGFkZG9uS2V5LCBhcHBMaWNlbnNlLCBvcHRpb25zLmJhc2VVcmwsIGFkbWluVXNlcm5hbWUsIGFkbWluUGFzc3dvcmQsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmICghaXNMaWNlbnNlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGxpY2Vuc2UgY291bGQgbm90IGJlIGFwcGxpZWQgZm9yIHRoZSBhcHAgb24gdGhlIGNsdXN0ZXIsIHBsZWFzZSByZWZlciB0byB0aGUgYXBwbGljYXRpb24gbG9nIGZpbGVzIGZvciBtb3JlIGluZm9ybWF0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlXG4gICAgICAgICAgICBybVN5bmMoZmlsZSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIC8vIFN0b3AgdGhlIHByb2dyZXNzIGJhclxuICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3RvcCgpO1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aW1lcklkKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlbSB3ZSBzdWNjZWVkZWRcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgaW5zdGFsbGluZyB0aGUgYXBwICgke2FkZG9uS2V5fSlgKTtcbiAgICAgICAgICAgIC8vIFRoZXkgY2hvc2UgdmlvbGVuY2VcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJ1YiBpdCBpbiB0aGVpciBmYWNlXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFlvdSBjYW4gbm93IGluc3RhbGwgdGhlIGFwcCBtYW51YWxseSBpbnRvIHRoZSBjbHVzdGVyLlxuICBQbGVhc2UgZ28gdG8gdGhlIGZvbGxvd2luZyBwYWdlOlxuICAgIFxuICAke29wdGlvbnMuYmFzZVVybH0vcGx1Z2lucy9zZXJ2bGV0L3VwbT9zb3VyY2U9c2lkZV9uYXZfbWFuYWdlX2FkZG9uc1xuYCk7XG4gICAgICAgICAgICAvLyBNYWtlIHRoZW0gZ3JvdmVsXG4gICAgICAgICAgICBjb25zdCBpc0luc3RhbGxlZE1hbnVhbGx5ID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFBsZWFzZSBjb25maXJtIHRoYXQgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBhcHAgbWFudWFsbHlgXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBhcHAgYWluJ3QgaW5zdGFsbGVkLCB3ZSBhaW4ndCBkb2luZyBub3RoaW4nLiBTbyB3ZSBiZXR0ZXIgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgICAgIGlmICghaXNJbnN0YWxsZWRNYW51YWxseSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgYXBwIHRvIHJ1biB0aGUgc2Vjb25kIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IGFzeW5jRXhpdEhvb2ssIGdyYWNlZnVsRXhpdCB9IGZyb20gJ2V4aXQtaG9vayc7XG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmV4cG9ydCBjb25zdCBBY3Rpb25IYW5kbGVyID0gYXN5bmMgKHByb2dyYW0sIHsgYWN0aW9uLCBlcnJvckhhbmRsZXIgfSwgb3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IG9wcyA9IG9wdGlvbnMgfHwgcHJvZ3JhbS5vcHRzKCk7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICAgIGFzeW5jRXhpdEhvb2soYXN5bmMgKGNvZGUpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvZGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgZXJyb3JIYW5kbGVyKG9wcykuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZS50cmltKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIHJlamVjdGluZyB0aGUgcHJvbWlzZSB0byBhdm9pZCB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gXCJDYWxsaW5nIHByb2Nlc3MuZXhpdFwiIGxvZyBtZXNzYWdlIGZyb20gZXhpdC1ob29rXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnI7XG4gICAgICAgICAgICAgICAgcmVqZWN0KG1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB3YWl0OiA2MCAqIDEgKiAxMDAwXG4gICAgICAgIH0pO1xuICAgICAgICBhY3Rpb24ob3BzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGdyYWNlZnVsRXhpdCgwKTtcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyLmlzc3Vlcy5mb3JFYWNoKGlzc3VlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlICs9IGBVbmFibGUgdG8gcGFyc2Ugb3B0aW9uICR7aXNzdWUucGF0aC5qb2luKCcsJyl9OiAke2lzc3VlLm1lc3NhZ2V9XFxuYDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiBlcnIgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBncmFjZWZ1bEV4aXQoMSk7XG4gICAgICAgIH0pO1xuICAgIH0pLmNhdGNoKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcHJvZ3JhbS5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UsXG4gICAgICAgICAgICAvLyB3ZSBjYW4gYXNzdW1lIGEgY2xlYW4gZXhpdFxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgdmVyc2lvbnMgZnJvbSAnLi4vLi4vYXNzZXRzL3ZlcnNpb25zLmpzb24nO1xuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcyA9IHouZW51bShbXG4gICAgJ3Bvc3RncmVzcWwnLFxuICAgICdteXNxbCcsXG4gICAgJ21zc3FsJ1xuXSk7XG5leHBvcnQgY29uc3QgU3VwcG9ydGVkTVNTUUxFZGl0aW9ucyA9IHouZW51bShbXG4gICAgJ0RldmVsb3BlcicsXG4gICAgJ0V4cHJlc3MnLFxuICAgICdTdGFuZGFyZCcsXG4gICAgJ0VudGVycHJpc2UnLFxuICAgICdFbnRlcnByaXNlQ29yZSdcbl0pO1xuZXhwb3J0IGNvbnN0IERhdGFiYXNlT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMsXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLFxuICAgIGRhdGFiYXNlOiB6LnN0cmluZygpLmRlZmF1bHQoJ2RjZHgnKSxcbiAgICB1c2VybmFtZTogei5zdHJpbmcoKS5kZWZhdWx0KCdkY2R4JyksXG4gICAgcGFzc3dvcmQ6IHouc3RyaW5nKCkuZGVmYXVsdCgnZGNkeCcpLFxuICAgIGNsZWFuOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBwcnVuZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgdmVyYm9zZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpXG59KTtcbmV4cG9ydCBjb25zdCBQb3N0Z3JlU1FMT3B0aW9ucyA9IERhdGFiYXNlT3B0aW9ucy5leHRlbmQoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLnBvc3RncmVzcWwpLmRlZmF1bHQoU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5wb3N0Z3Jlc3FsKSxcbiAgICB0YWc6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gdmVyc2lvbnNbU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5wb3N0Z3Jlc3FsXS5pbmNsdWRlcyhpdGVtKSkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLmRlZmF1bHQoNTQzMiksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdvcmcucG9zdGdyZXNxbC5Ecml2ZXInKS5kZWZhdWx0KCdvcmcucG9zdGdyZXNxbC5Ecml2ZXInKVxufSk7XG5leHBvcnQgY29uc3QgTXlTUUxPcHRpb25zID0gRGF0YWJhc2VPcHRpb25zLmV4dGVuZCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLnJlZmluZShpdGVtID0+IGl0ZW0gPT09IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXlzcWwpLmRlZmF1bHQoU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5teXNxbCksXG4gICAgdGFnOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IHZlcnNpb25zW1N1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXlzcWxdLmluY2x1ZGVzKGl0ZW0pKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSkuZGVmYXVsdCgzMzA2KSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ2NvbS5teXNxbC5qZGJjLkRyaXZlcicpLmRlZmF1bHQoJ2NvbS5teXNxbC5qZGJjLkRyaXZlcicpXG59KTtcbmV4cG9ydCBjb25zdCBNU1NRTE9wdGlvbnMgPSBEYXRhYmFzZU9wdGlvbnMuZXh0ZW5kKHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5tc3NxbCkuZGVmYXVsdChTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm1zc3FsKSxcbiAgICB0YWc6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gdmVyc2lvbnNbU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5tc3NxbF0uaW5jbHVkZXMoaXRlbSkpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIGVkaXRpb246IFN1cHBvcnRlZE1TU1FMRWRpdGlvbnMuZGVmYXVsdCgnRGV2ZWxvcGVyJyksXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLmRlZmF1bHQoMTQzMyksXG4gICAgdXNlcm5hbWU6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ3NhJykuZGVmYXVsdCgnc2EnKSxcbiAgICBwYXNzd29yZDogei5zdHJpbmcoKS5kZWZhdWx0KCdEYXRhQ2VudGVyRFghJyksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdjb20ubWljcm9zb2Z0LnNxbHNlcnZlci5qZGJjLlNRTFNlcnZlckRyaXZlcicpLmRlZmF1bHQoJ2NvbS5taWNyb3NvZnQuc3Fsc2VydmVyLmpkYmMuU1FMU2VydmVyRHJpdmVyJylcbn0pO1xuIiwiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMgfSBmcm9tICcuL0RhdGFiYXNlJztcbmV4cG9ydCBjb25zdCBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMgPSB6LmVudW0oW1xuICAgICdqaXJhJyxcbiAgICAnY29uZmx1ZW5jZScsXG4gICAgJ2JpdGJ1Y2tldCcsXG4gICAgJ2JhbWJvbydcbl0pO1xuZXhwb3J0IGNvbnN0IEFwcGxpY2F0aW9uT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBuYW1lOiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgdGFnOiB6LnN0cmluZygpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIGRhdGFiYXNlOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuZGVmYXVsdCgncG9zdGdyZXNxbCcpLFxuICAgIGRhdGFiYXNlVGFnOiB6LnN0cmluZygpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIHBvcnQ6IHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKS5kZWZhdWx0KCc4MCcpLFxuICAgIGNvbnRleHRQYXRoOiB6LnN0cmluZygpLFxuICAgIHhtczogei5zdHJpbmcoKS5kZWZhdWx0KCcxMDI0bScpLFxuICAgIHhteDogei5zdHJpbmcoKS5kZWZhdWx0KCcxMDI0bScpLFxuICAgIHdhdGNoOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBleHQ6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgaW5zdGFsbDogei5ib29sZWFuKCksXG4gICAgb3V0cHV0RGlyZWN0b3J5OiB6LnN0cmluZygpLFxuICAgIGFjdGl2YXRlUHJvZmlsZXM6IHouc3RyaW5nKCksXG4gICAgY2xlYW46IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHBydW5lOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBkZWJ1Zzogei5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgICBjd2Q6IHouc3RyaW5nKClcbn0pLnBhcnRpYWwoe1xuICAgIGNvbnRleHRQYXRoOiB0cnVlLFxuICAgIGV4dDogdHJ1ZSxcbiAgICBpbnN0YWxsOiB0cnVlLFxuICAgIG91dHB1dERpcmVjdG9yeTogdHJ1ZSxcbiAgICBhY3RpdmF0ZVByb2ZpbGVzOiB0cnVlLFxuICAgIGN3ZDogdHJ1ZVxufSk7XG4iLCJpbXBvcnQgeyBET01QYXJzZXIsIFhNTFNlcmlhbGl6ZXIgfSBmcm9tICdAeG1sZG9tL3htbGRvbSc7XG5pbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgWE1MUGFyc2VyIH0gZnJvbSAnZmFzdC14bWwtcGFyc2VyJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHhwYXRoIGZyb20gJ3hwYXRoJztcbmltcG9ydCB7IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyB9IGZyb20gJy4uL3R5cGVzL0FwcGxpY2F0aW9uJztcbmV4cG9ydCBjbGFzcyBBTVBTIHtcbiAgICBvcHRpb25zO1xuICAgIG1hdmVuID0gbnVsbDtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29uc3RydWN0b3JcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge1xuICAgICAgICBwcm9maWxlczogW11cbiAgICB9KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQdWJsaWMgTWV0aG9kc1xuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLm1hdmVuKSB7XG4gICAgICAgICAgICBjb25zdCBraWxsZWQgPSB0aGlzLm1hdmVuLmtpbGwoMCk7XG4gICAgICAgICAgICBpZiAoIWtpbGxlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHRlcm1pbmF0ZSBleGlzdGluZyBNYXZlbiBwcm9jZXNzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgYnVpbGQoYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubWF2ZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBraWxsZWQgPSB0aGlzLm1hdmVuLmtpbGwoMCk7XG4gICAgICAgICAgICAgICAgaWYgKCFraWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIHRlcm1pbmF0ZSBleGlzdGluZyBNYXZlbiBwcm9jZXNzJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubWF2ZW4gPSBzcGF3bignbXZuJywgWydwYWNrYWdlJywgLi4uYXJnc10sIHsgY3dkOiB0aGlzLm9wdGlvbnM/LmN3ZCB8fCBjd2QoKSwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgICAgIHRoaXMubWF2ZW4ub24oJ2V4aXQnLCAoY29kZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubWF2ZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAwIHx8IGNvZGUgPT09IDEzMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBNYXZlbiBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpc0F0bGFzc2lhblBsdWdpbiA9ICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5nZXROb2RlcygnLy8qW2xvY2FsLW5hbWUoKT1cXCdwYWNrYWdpbmdcXCddJyk7XG4gICAgICAgICAgICByZXR1cm4gbm9kZXMuc29tZShpdGVtID0+IGl0ZW0udGV4dENvbnRlbnQgPT09ICdhdGxhc3NpYW4tcGx1Z2luJyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBnZXRBcHBsaWNhdGlvblZlcnNpb24oKSB7XG4gICAgICAgIGNvbnN0IGFwcGxpY2F0aW9ucyA9IHRoaXMuZ2V0QXBwbGljYXRpb25zKCk7XG4gICAgICAgIGlmIChhcHBsaWNhdGlvbnMuc2l6ZSA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgWywgdmVyc2lvbl0gPSBBcnJheS5mcm9tKGFwcGxpY2F0aW9ucylbMF07XG4gICAgICAgICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcHBsaWNhdGlvbnMuc2l6ZSA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIEF0bGFzc2lhbiBQbHVnaW4gcHJvamVjdCBjb250YWlucyBtdWx0aXBsZSBBTVBTIGNvbmZpZ3VyYXRpb24sIHVuYWJsZSB0byBkZWNpZGUgd2hpY2ggcHJvZHVjdCB0byB1c2Ug8J+YsCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldEFwcGxpY2F0aW9uKCkge1xuICAgICAgICBjb25zdCBhcHBsaWNhdGlvbnMgPSB0aGlzLmdldEFwcGxpY2F0aW9ucygpO1xuICAgICAgICBpZiAoYXBwbGljYXRpb25zLnNpemUgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IFtuYW1lXSA9IEFycmF5LmZyb20oYXBwbGljYXRpb25zKVswXTtcbiAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFwcGxpY2F0aW9ucy5zaXplID4gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgQXRsYXNzaWFuIFBsdWdpbiBwcm9qZWN0IGNvbnRhaW5zIG11bHRpcGxlIEFNUFMgY29uZmlndXJhdGlvbiwgdW5hYmxlIHRvIGRlY2lkZSB3aGljaCBwcm9kdWN0IHRvIHVzZSDwn5iwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGdldEFwcGxpY2F0aW9ucygpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZ2V0Tm9kZXMoJy8vKltsb2NhbC1uYW1lKCk9XFwnZ3JvdXBJZFxcJyBhbmQgdGV4dCgpPVxcJ2NvbS5hdGxhc3NpYW4ubWF2ZW4ucGx1Z2luc1xcJ10nKTtcbiAgICAgICAgY29uc3Qgbm9kZXNXaXRoQWN0aXZlUHJvZmlsZSA9IG5vZGVzLmZpbHRlcihub2RlID0+IHRoaXMuaXNBY3RpdmF0ZWRQcm9maWxlKG5vZGUpKTtcbiAgICAgICAgbm9kZXNXaXRoQWN0aXZlUHJvZmlsZS5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBwbHVnaW4gfSA9IHRoaXMudG9PYmplY3QocGFyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKCdhbXBzLW1hdmVuLXBsdWdpbicgPT09IHBsdWdpbj8uYXJ0aWZhY3RJZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGNvbmZpZ3VyYXRpb24gfSA9IHBsdWdpbiB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24/LnByb2R1Y3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb25maWd1cmF0aW9uPy5wcm9kdWN0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLnByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VwcG9ydGVkQXBwbGljYXRpb24gPSB0aGlzLmdldFN1cHBvcnRlZEFwcGxpY2F0aW9uKHByb2R1Y3QuaWQpIHx8IHRoaXMuZ2V0U3VwcG9ydGVkQXBwbGljYXRpb24ocHJvZHVjdC5pbnN0YW5jZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRlZEFwcGxpY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5kb1Byb3BlcnR5UmVwbGFjZW1lbnQocHJvZHVjdC52ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChzdXBwb3J0ZWRBcHBsaWNhdGlvbiwgdmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcHJvZHVjdCB9ID0gY29uZmlndXJhdGlvbj8ucHJvZHVjdHMgfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VwcG9ydGVkQXBwbGljYXRpb24gPSB0aGlzLmdldFN1cHBvcnRlZEFwcGxpY2F0aW9uKHByb2R1Y3QuaWQpIHx8IHRoaXMuZ2V0U3VwcG9ydGVkQXBwbGljYXRpb24ocHJvZHVjdC5pbnN0YW5jZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRlZEFwcGxpY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5kb1Byb3BlcnR5UmVwbGFjZW1lbnQocHJvZHVjdC52ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChzdXBwb3J0ZWRBcHBsaWNhdGlvbiwgdmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRlZEFwcGxpY2F0aW9uID0gdGhpcy5nZXRTdXBwb3J0ZWRBcHBsaWNhdGlvbihwbHVnaW4/LmFydGlmYWN0SWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRWZXJzaW9uKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydGVkQXBwbGljYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoc3VwcG9ydGVkQXBwbGljYXRpb24sIHZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFByaXZhdGUgTWV0aG9kc1xuICAgIGdldFN1cHBvcnRlZEFwcGxpY2F0aW9uKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZT8uaW5jbHVkZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcy5qaXJhKSkge1xuICAgICAgICAgICAgcmV0dXJuIFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMuamlyYTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZT8uaW5jbHVkZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcy5jb25mbHVlbmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMuY29uZmx1ZW5jZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWx1ZT8uaW5jbHVkZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcy5iYW1ib28pKSB7XG4gICAgICAgICAgICByZXR1cm4gU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcy5iYW1ib287XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodmFsdWU/LmluY2x1ZGVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMuYml0YnVja2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMuYml0YnVja2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBnZXRWZXJzaW9uKG5vZGUpIHtcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcGx1Z2luIH0gPSB0aGlzLnRvT2JqZWN0KHBhcmVudE5vZGUpO1xuICAgICAgICAgICAgY29uc3QgeyBjb25maWd1cmF0aW9uIH0gPSBwbHVnaW4gfHwge307XG4gICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbj8ucHJvZHVjdFZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb1Byb3BlcnR5UmVwbGFjZW1lbnQocGx1Z2luLmNvbmZpZ3VyYXRpb24ucHJvZHVjdFZlcnNpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlndXJhdGlvbj8ucHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0ID0gQXJyYXkuaXNBcnJheShjb25maWd1cmF0aW9uPy5wcm9kdWN0cykgPyBjb25maWd1cmF0aW9uPy5wcm9kdWN0c1swXSA6IGNvbmZpZ3VyYXRpb24ucHJvZHVjdHMucHJvZHVjdDtcbiAgICAgICAgICAgICAgICBpZiAocHJvZHVjdCAmJiBwcm9kdWN0LnZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9Qcm9wZXJ0eVJlcGxhY2VtZW50KHByb2R1Y3QudmVyc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGRvUHJvcGVydHlSZXBsYWNlbWVudCh2YWx1ZSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcHJvZmlsZSwgcmVwbGFjZSBwcm9maWxlIHByb3BlcnRpZXMgZmlyc3QgYXMgdGhleSB0YWtlIHByZWNlZGVuY2VcbiAgICAgICAgY29uc3QgcHJvZmlsZVByb3BlcnRpZXMgPSB0aGlzLmdldFByb3BlcnRpZXMoKTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocHJvZmlsZVByb3BlcnRpZXMpLmZvckVhY2goKFtwcm9wZXJ0eUtleSwgcHJvcGVydHlWYWx1ZV0pID0+IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlQWxsKGAkXFx7JHtwcm9wZXJ0eUtleX19YCwgcHJvcGVydHlWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCk7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpLmZvckVhY2goKFtwcm9wZXJ0eUtleSwgcHJvcGVydHlWYWx1ZV0pID0+IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlQWxsKGAkXFx7JHtwcm9wZXJ0eUtleX19YCwgcHJvcGVydHlWYWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBnZXRQcm9wZXJ0aWVzKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB0aGlzLmdldE5vZGVzKCcvLypbbG9jYWwtbmFtZSgpPVxcJ3Byb3BlcnRpZXNcXCddJyk7XG4gICAgICAgIGNvbnN0IG5vZGVzV2l0aEFjdGl2ZVByb2ZpbGUgPSBub2Rlcy5maWx0ZXIobm9kZSA9PiB0aGlzLmlzQWN0aXZhdGVkUHJvZmlsZShub2RlKSk7XG4gICAgICAgIG5vZGVzV2l0aEFjdGl2ZVByb2ZpbGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvcGVydGllcyB9ID0gdGhpcy50b09iamVjdChub2RlKTtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gcmVzdWx0W2tleV0gPSB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBnZXROb2RlcyhleHByZXNzaW9uLCBzaW5nbGUpIHtcbiAgICAgICAgY29uc3QgcG9tRmlsZVBhdGggPSBqb2luKHRoaXMub3B0aW9ucz8uY3dkIHx8IGN3ZCgpLCAnLi9wb20ueG1sJyk7XG4gICAgICAgIGNvbnN0IGhhc1BvbUZpbGUgPSBleGlzdHNTeW5jKHBvbUZpbGVQYXRoKTtcbiAgICAgICAgaWYgKGhhc1BvbUZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHhtbCA9IHJlYWRGaWxlU3luYyhwb21GaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoeG1sLCAndGV4dC94bWwnKTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gc2luZ2xlID8geHBhdGguc2VsZWN0KGV4cHJlc3Npb24sIGRvYywgdHJ1ZSkgOiB4cGF0aC5zZWxlY3QoZXhwcmVzc2lvbiwgZG9jLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlcykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzaW5nbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICB0b09iamVjdChub2RlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgWE1MUGFyc2VyKCk7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlKG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcobm9kZSkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZpbmRQYXJlbnROb2RlQnlUYWdOYW1lKHRhZ05hbWUsIG5vZGUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJlbnROb2RlIH0gPSBub2RlO1xuICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kUGFyZW50Tm9kZUJ5VGFnTmFtZSh0YWdOYW1lLCBwYXJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaXNBY3RpdmF0ZWRQcm9maWxlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgcHJvZmlsZVBhcmVudE5vZGUgPSB0aGlzLmZpbmRQYXJlbnROb2RlQnlUYWdOYW1lKCdwcm9maWxlJywgbm9kZSk7XG4gICAgICAgIGNvbnN0IHByb2ZpbGVOb2RlID0gcHJvZmlsZVBhcmVudE5vZGUgPyB0aGlzLnRvT2JqZWN0KHByb2ZpbGVQYXJlbnROb2RlKSA6IG51bGw7XG4gICAgICAgIGlmICghcHJvZmlsZU5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHByb2ZpbGVOb2RlICYmIChwcm9maWxlTm9kZS5hY3RpdmVCeURlZmF1bHQgPT09ICd0cnVlJyB8fCB0aGlzLm9wdGlvbnMucHJvZmlsZXMuaW5jbHVkZXMocHJvZmlsZU5vZGUucHJvZmlsZS5pZCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImV4cG9ydCBjb25zdCBpc1JlY3Vyc2l2ZUJ1aWxkID0gKGxhc3RCdWlsZENvbXBsZXRlZCkgPT4gbGFzdEJ1aWxkQ29tcGxldGVkID4gKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gNSAqIDEwMDApO1xuIiwiZXhwb3J0IGNvbnN0IHNob3dSZWN1cnNpdmVCdWlsZFdhcm5pbmcgPSAob3V0cHV0RGlyZWN0b3J5KSA9PiB7XG4gICAgY29uc29sZS5sb2coYFxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZWN1cnNpdmUgYnVpbGQgdHJpZ2dlciBkZXRlY3RlZC4gVGhlIGxhc3QgYnVpbGQgY29tcGxldGVkIGxhc3QgdGhhbiA1IHNlY29uZHMgYWdvXG5UaGlzIG1heSBpbmRpY2F0ZSB0aGF0IHRoZSBidWlsZCBjaGFuZ2VzIGZpbGVzIG91dHNpZGUgb2YgdGhlIG91dHB1dCBkaXJlY3RvcnlcbkFsdGVybmF0aXZlbHksIE1hdmVuIGlzIHVzaW5nIGEgZGlmZmVyZW50IG91dHB1dCBkaXJlY3RvcnkgdGhhbiBjb25maWd1cmVkOlxuJyR7b3V0cHV0RGlyZWN0b3J5fSdcblxuUGxlYXNlIG1ha2Ugc3VyZSB0byBjaGVjayB5b3VyIGJ1aWxkIHByb2Nlc3MgYW5kL29yIHNwZWNpZnkgYSBkaWZmZXJlbnQgb3V0cHV0IGRpcmVjdG9yeSB1c2luZyB0aGUgJy1vJyBvcHRpb25cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PWApO1xufTtcbiIsImltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBjd2QgfSBmcm9tICdwcm9jZXNzJztcbmV4cG9ydCBjbGFzcyBDdXN0b21CdWlsZGVyIHtcbiAgICBvcHRpb25zO1xuICAgIHByb2MgPSBudWxsO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb25zdHJ1Y3RvclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFB1YmxpYyBNZXRob2RzXG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvYykge1xuICAgICAgICAgICAgY29uc3Qga2lsbGVkID0gdGhpcy5wcm9jLmtpbGwoMCk7XG4gICAgICAgICAgICBpZiAoIWtpbGxlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHRlcm1pbmF0ZSBleGlzdGluZyBidWlsZCBwcm9jZXNzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgYnVpbGQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcm9jKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2lsbGVkID0gdGhpcy5wcm9jLmtpbGwoMCk7XG4gICAgICAgICAgICAgICAgaWYgKCFraWxsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIHRlcm1pbmF0ZSBleGlzdGluZyBidWlsZCBwcm9jZXNzJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXhlY1N5bmModGhpcy5vcHRpb25zLmNtZCwgeyBjd2Q6IHRoaXMub3B0aW9ucz8uY3dkIHx8IGN3ZCgpLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gZXJyO1xuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYEJ1aWxkIGV4aXRlZCB3aXRoIGNvZGUgJHtzdGF0dXN9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IERvY2tlcm9kZSBmcm9tICdkb2NrZXJvZGUnO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAncHJvY2Vzcyc7XG5jb25zdCBkb2NrZXIgPSBuZXcgRG9ja2Vyb2RlKCk7XG5leHBvcnQgY29uc3QgZ2V0UnVubmluZ0NvbnRhaW5lcklkcyA9IGFzeW5jIChhcHBsaWNhdGlvbikgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBhd2FpdCBkb2NrZXIubGlzdENvbnRhaW5lcnMoeyBmaWx0ZXJzOiB7XG4gICAgICAgICAgICBzdGF0dXM6IFsncnVubmluZyddLFxuICAgICAgICAgICAgbGFiZWw6IFtgY29tLmRvY2tlci5jb21wb3NlLnNlcnZpY2U9JHthcHBsaWNhdGlvbn1gXVxuICAgICAgICB9IH0pO1xuICAgIHJldHVybiBjb250YWluZXJzLm1hcChpdGVtID0+IGl0ZW0uSWQpO1xufTtcbmV4cG9ydCBjb25zdCBjb3B5ID0gYXN5bmMgKHNvdXJjZVBhdGgsIGRlc3RpbmF0aW9uUGF0aCkgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRvY2tlciA9IHNwYXduKCdkb2NrZXInLCBbJ2NwJywgc291cmNlUGF0aCwgZGVzdGluYXRpb25QYXRoXSwgeyBjd2Q6IGN3ZCgpLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IHJlc29sdmUgYXMgcmVzb2x2ZVBhdGggfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0ICogYXMgRG9ja2VyIGZyb20gJy4vZG9ja2VyJztcbmltcG9ydCB7IHVwbG9hZFRvVVBNIH0gZnJvbSAnLi91cG0nO1xuZXhwb3J0IGNvbnN0IEluc3RhbGxlciA9IGFzeW5jIChuYW1lLCBwYXRoLCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVySWRzID0gYXdhaXQgRG9ja2VyLmdldFJ1bm5pbmdDb250YWluZXJJZHMobmFtZSk7XG4gICAgaWYgKCFjb250YWluZXJJZHMgfHwgY29udGFpbmVySWRzLmxlbmd0aCA8PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBUaGVyZSBhcmUgbm8gcnVubmluZyBpbnN0YW5jZSBvZiAke25hbWV9LCB1bmFibGUgdG8gaW5zdGFsbCBwbHVnaW4g8J+klGApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbnRhaW5lcklkcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBUaGVyZSBhcmUgbXVsdHBsZSBydW5uaW5nIGluc3RhbmNlIG9mICR7bmFtZX0sIHVuYWJsZSB0byBkZXRlcm1pbmUgd2hpY2ggb25lIHRvIHVzZSDwn6SUYCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVySWQgPSBjb250YWluZXJJZHNbMF07XG4gICAgaWYgKGNvbnRhaW5lcklkKSB7XG4gICAgICAgIGlmIChvcHRpb25zLm9icikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYEZvdW5kIHVwZGF0ZWQgcGx1Z2luLCB1cGxvYWRpbmcgaXQgdG8gVVBNIG9uIHJ1bm5pbmcgaW5zdGFuY2VzIG9mICR7bmFtZX1gKTtcbiAgICAgICAgICAgIGNvbnN0IGhvc3RVcmwgPSBvcHRpb25zLnBvcnQgPyBgbG9jYWxob3N0OiR7b3B0aW9ucy5wb3J0fWAgOiBgbG9jYWxob3N0YDtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnVzZXJuYW1lICYmIG9wdGlvbnMucGFzc3dvcmQgPyBgaHR0cDovLyR7b3B0aW9ucy51c2VybmFtZX06JHtvcHRpb25zLnBhc3N3b3JkfUAke2hvc3RVcmx9YCA6IGBodHRwOi8vJHtob3N0VXJsfWA7XG4gICAgICAgICAgICBhd2FpdCB1cGxvYWRUb1VQTShyZXNvbHZlUGF0aChvcHRpb25zLmN3ZCB8fCBjd2QoKSwgcGF0aCksIGJhc2VVcmwpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgcGx1Z2luIGFyY2hpdmUgZmlsZSB0byBVUE0nLCBlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgdXBkYXRlZCBwbHVnaW4sIHVwbG9hZGluZyBpdCB0byBRdWlja1JlbG9hZCBvbiBydW5uaW5nIGluc3RhbmNlcyBvZiAke25hbWV9YCk7XG4gICAgICAgICAgICBhd2FpdCBEb2NrZXIuY29weShyZXNvbHZlUGF0aChvcHRpb25zLmN3ZCB8fCBjd2QoKSwgcGF0aCksIGAke2NvbnRhaW5lcklkfTovb3B0L3F1aWNrcmVsb2FkL2ApXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gY29uc29sZS5sb2coJ0ZpbmlzaGVkIHVwbG9hZGluZyBwbHVnaW4gYXJjaGl2ZSB0byBRdWlja1JlbG9hZCcpKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgcGx1Z2luIGFyY2hpdmUgZmlsZSB0byBRdWlja1JlbG9hZCcsIGVycikpO1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImltcG9ydCB7IHdhdGNoIH0gZnJvbSAnY2hva2lkYXInO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBpc1JlY3Vyc2l2ZUJ1aWxkIH0gZnJvbSAnLi4vaGVscGVycy9pc1JlY3Vyc2l2ZUJ1aWxkJztcbmltcG9ydCB7IHNob3dSZWN1cnNpdmVCdWlsZFdhcm5pbmcgfSBmcm9tICcuLi9oZWxwZXJzL3Nob3dSZWN1cnNpdmVCdWlsZFdhcm5pbmcnO1xuaW1wb3J0IHsgQU1QUyB9IGZyb20gJy4vYW1wcyc7XG5pbXBvcnQgeyBDdXN0b21CdWlsZGVyIH0gZnJvbSAnLi9DdXN0b21CdWlsZGVyJztcbmltcG9ydCB7IEluc3RhbGxlciB9IGZyb20gJy4vSW5zdGFsbGVyJztcbmV4cG9ydCBjb25zdCBGaWxlV2F0Y2hlciA9IChuYW1lLCBvcHRpb25zLCBtYXZlbk9wdHMsIGluc3RhbGxPbmx5ID0gZmFsc2UpID0+IHtcbiAgICBsZXQgbGFzdEJ1aWxkQ29tcGxldGVkID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgY29uc3Qgb3V0cHV0RGlyZWN0b3J5ID0gb3B0aW9ucy5vdXRwdXREaXJlY3RvcnkgfHwgJ3RhcmdldCc7XG4gICAgY29uc3QgcGF0dGVybnMgPSBvcHRpb25zLmV4dCB8fCBbJyoqLyonXTtcbiAgICBjb25zb2xlLmxvZyhgV2F0Y2hpbmcgZmlsZXN5c3RlbSBmb3IgY2hhbmdlcyB0byBzb3VyY2UgZmlsZXMgKCR7cGF0dGVybnMuam9pbignLCAnKX0pYCk7XG4gICAgY29uc3QgYW1wcyA9IG5ldyBBTVBTKHtcbiAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgcHJvZmlsZXM6IG9wdGlvbnMuYWN0aXZhdGVQcm9maWxlcz8uc3BsaXQoJywnKSB8fCBbXVxuICAgIH0pO1xuICAgIGNvbnN0IGRlbGl2ZXJhYmxlRXh0ZW5zaW9uID0gb3B0aW9ucy5vYnIgPyAnLm9icicgOiAnLmphcic7XG4gICAgcmV0dXJuIHdhdGNoKHBhdHRlcm5zLCB7XG4gICAgICAgIGN3ZDogb3B0aW9ucy5jd2QgfHwgY3dkKCksXG4gICAgICAgIHVzZVBvbGxpbmc6IHRydWUsXG4gICAgICAgIGludGVydmFsOiAyICogMTAwMCxcbiAgICAgICAgYmluYXJ5SW50ZXJ2YWw6IDIgKiAxMDAwLFxuICAgICAgICBhd2FpdFdyaXRlRmluaXNoOiB0cnVlLFxuICAgICAgICBwZXJzaXN0ZW50OiB0cnVlLFxuICAgICAgICBhdG9taWM6IHRydWVcbiAgICB9KS5vbignY2hhbmdlJywgYXN5bmMgKHBhdGgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaW5zdGFsbCAmJiBwYXRoLnN0YXJ0c1dpdGgob3V0cHV0RGlyZWN0b3J5KSAmJiBwYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoZGVsaXZlcmFibGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgICBhd2FpdCBJbnN0YWxsZXIobmFtZSwgcGF0aCwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXBhdGguc3RhcnRzV2l0aChvdXRwdXREaXJlY3RvcnkpICYmICFpbnN0YWxsT25seSkge1xuICAgICAgICAgICAgaWYgKGlzUmVjdXJzaXZlQnVpbGQobGFzdEJ1aWxkQ29tcGxldGVkKSkge1xuICAgICAgICAgICAgICAgIHNob3dSZWN1cnNpdmVCdWlsZFdhcm5pbmcob3V0cHV0RGlyZWN0b3J5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEZXRlY3RlZCBmaWxlIGNoYW5nZSwgcmVidWlsZGluZyBBdGxhc2lhbiBEYXRhIENlbnRlciBwbHVnaW4nKTtcbiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuZXhlYykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhbXBzLmJ1aWxkKG1hdmVuT3B0cykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRmluaXNoZWQgYnVpbGRpbmcgQXRsYXNzaWFuIERhdGEgQ2VudGVyIHBsdWdpbiBmb3IgJHtuYW1lfS4uLiDwn5KqYCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWlsZWQgdG8gYnVpbGQgQXRsYXNzaWFuIERhdGEgQ2VudGVyIHBsdWdpbiBmb3IgJHtuYW1lfS4uLiDwn5iwYCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBDdXN0b21CdWlsZGVyKHsgY21kOiBvcHRpb25zLmV4ZWMsIGN3ZDogb3B0aW9ucy5jd2QgfHwgY3dkKCkgfSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGJ1aWxkZXIuYnVpbGQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGaW5pc2hlZCBidWlsZGluZyBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgcGx1Z2luIGZvciAke25hbWV9Li4uIPCfkqpgKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEZhaWxlZCB0byBidWlsZCBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgcGx1Z2luIGZvciAke25hbWV9Li4uIPCfmLBgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxhc3RCdWlsZENvbXBsZXRlZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgcmVhbHBhdGhTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IHRvQWJzb2x1dGVQYXRoID0gKHJlbGF0aXZlUGF0aCkgPT4ge1xuICAgIGNvbnN0IFssIGZpbGVQYXRoXSA9IHByb2Nlc3MuYXJndjtcbiAgICBjb25zdCBleGVjdXRhYmxlRmlsZURpciA9IGRpcm5hbWUocmVhbHBhdGhTeW5jKGZpbGVQYXRoKSk7XG4gICAgY29uc3QgYmFzZWRpciA9IGV4ZWN1dGFibGVGaWxlRGlyLnN1YnN0cmluZygwLCBleGVjdXRhYmxlRmlsZURpci5pbmRleE9mKCdkY2R4JykgKyA0KTtcbiAgICByZXR1cm4gam9pbihiYXNlZGlyLCByZWxhdGl2ZVBhdGgucmVwbGFjZUFsbCgnLi4vJywgJycpKTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyB0b0Fic29sdXRlUGF0aCB9IGZyb20gJy4vdG9BYnNvbHV0ZVBhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFZlcnNpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmModG9BYnNvbHV0ZVBhdGgoJy4uLy4uL2Fzc2V0cy92ZXJzaW9ucy5qc29uJyksICd1dGYtOCcpO1xuICAgIGNvbnN0IHZlcnNpb25zID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICByZXR1cm4gdmVyc2lvbnM7XG59O1xuIiwiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHsgQ29tbWFuZCBhcyBDb21tYW5kZXIsIEludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yLCBPcHRpb24gfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgZ3JhY2VmdWxFeGl0IH0gZnJvbSAnZXhpdC1ob29rJztcbmltcG9ydCB7IGdsb2IgfSBmcm9tICdnbG9iJztcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgZ2V0QXBwTGljZW5zZSB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dldEFwcExpY2Vuc2UnO1xuaW1wb3J0IHsgaW5zdGFsbEFwcCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2luc3RhbGxBcHAnO1xuaW1wb3J0IHsgQWN0aW9uSGFuZGxlciB9IGZyb20gJy4uL2hlbHBlcnMvQWN0aW9uSGFuZGxlcic7XG5pbXBvcnQgeyBBTVBTIH0gZnJvbSAnLi4vaGVscGVycy9hbXBzJztcbmltcG9ydCB7IEZpbGVXYXRjaGVyIH0gZnJvbSAnLi4vaGVscGVycy9GaWxlV2F0Y2hlcic7XG5pbXBvcnQgeyBnZXRWZXJzaW9ucyB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0VmVyc2lvbnMnO1xuaW1wb3J0IHsgSW5zdGFsbGVyIH0gZnJvbSAnLi4vaGVscGVycy9JbnN0YWxsZXInO1xuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kZXIoKTtcbmNvbnN0IHZlcnNpb25zID0gZ2V0VmVyc2lvbnMoKTtcbmNvbnN0IENvbW1hbmQgPSAoKSA9PiB7XG4gICAgbGV0IHF1aWNrUmVsb2FkID0gbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhbXBzID0gbmV3IEFNUFMoe1xuICAgICAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICAgICAgcHJvZmlsZXM6IG9wdGlvbnMuYWN0aXZhdGVQcm9maWxlcz8uc3BsaXQoJywnKSB8fCBbXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5tcGFjKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFvcHRpb25zLmJhc2VVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50IFwiLS1iYXNlVXJsXCIsIHJlcXVpcmVkIGZvciBpbnN0YWxsaW5nIGZyb20gdGhlIEF0bGFzc2lhbiBNYXJrZXRwbGFjZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICghb3B0aW9ucy5hcHBLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50IFwiLS1hcHBLZXlcIiwgcmVxdWlyZWQgZm9yIGluc3RhbGxpbmcgZnJvbSB0aGUgQXRsYXNzaWFuIE1hcmtldHBsYWNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IGluc3RhbGxBcHAoe1xuICAgICAgICAgICAgICAgICAgICBiYXNlVXJsOiBvcHRpb25zLmJhc2VVcmwsXG4gICAgICAgICAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICAgICAgICAgIGxpY2Vuc2U6IGF3YWl0IGdldEFwcExpY2Vuc2Uob3B0aW9ucy5saWNlbnNlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBvcHRpb25zLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZm9yY2U6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghYW1wcy5pc0F0bGFzc2lhblBsdWdpbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgYW4gQXRsYXNzaWFuIFBsdWdpbiBwcm9qZWN0IGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSDwn6SUJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBhbXBzLmdldEFwcGxpY2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIEF0bGFzc2lhbiBQbHVnaW4gcHJvamVjdCBkb2VzIG5vdCBjb250YWluIGFuIEFNUFMgY29uZmlndXJhdGlvbiwgdW5hYmxlIHRvIGRldGVjdCBwcm9kdWN0IPCfmLAnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbiA9IGFtcHMuZ2V0QXBwbGljYXRpb25WZXJzaW9uKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF2ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGRldGVybWluZSB2ZXJzaW9uIGZyb20gQU1QUyBhbmQgbm8gcHJvZHVjdCB2ZXJzaW9uIHByb3ZpZGVkICgtLXRhZyknKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXZlcnNpb25zW25hbWVdLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvZHVjdCB2ZXJzaW9uICcke3ZlcnNpb259JyBpcyBpbnZhbGlkLiBBbGxvd2VkIGNob2ljZXMgYXJlICR7dmVyc2lvbnNbbmFtZV0uam9pbignLCAnKX0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9iciAmJiAhb3B0aW9ucy51c2VybmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IoJ01pc3NpbmcgYXJndW1lbnQgXCItLXVzZXJuYW1lXCIsIHJlcXVpcmVkIGZvciBpbnN0YWxsaW5nIE9CUiBhcnRpZmFjdHMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5vYnIgJiYgIW9wdGlvbnMucGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcHRpb25Bcmd1bWVudEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50IFwiLS1wYXNzd29yZFwiLCByZXF1aXJlZCBmb3IgaW5zdGFsbGluZyBPQlIgYXJ0aWZhY3RzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLndhdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHF1aWNrUmVsb2FkID0gRmlsZVdhdGNoZXIobmFtZSwgb3B0aW9ucywgW10sIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXREaXJlY3RvcnkgPSBvcHRpb25zLm91dHB1dERpcmVjdG9yeSB8fCAndGFyZ2V0JztcbiAgICAgICAgICAgICAgICBjb25zdCBkZWxpdmVyYWJsZUV4dGVuc2lvbiA9IG9wdGlvbnMub2JyID8gJ29icicgOiAnamFyJztcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IGdsb2IoYCR7b3V0cHV0RGlyZWN0b3J5fS8qLiR7ZGVsaXZlcmFibGVFeHRlbnNpb259YCwgeyBjd2Q6IHJlc29sdmUob3B0aW9ucy5jd2QgfHwgY3dkKCkpIH0pO1xuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGZpbGVzLm1hcChwYXRoID0+IEluc3RhbGxlcihuYW1lLCBwYXRoLCBvcHRpb25zKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmIChxdWlja1JlbG9hZCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdG9wcGluZyBmaWxlc3lzdGVtIHdhdGNoZXIuLi4g4o+zYCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgcXVpY2tSZWxvYWQuY2xvc2UoKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTdWNjZXNzZnVsbHkgc3RvcHBlZCBhbGwgcnVubmluZyBwcm9jZXNzZXMg8J+SqmApO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5wcm9ncmFtXG4gICAgLm5hbWUoJ2RjZHggaW5zdGFsbCcpXG4gICAgLmRlc2NyaXB0aW9uKGBJbnN0YWxsIHRoZSBBdGxhc3NpYW4gRGF0YSBDZW50ZXIgcGx1Z2luIHVzaW5nIHRoZSBBdGxhc3NpYW4gTWF2ZW4gUGx1Z2luIFN1aXRlIChBTVBTKSBjb25maWd1cmF0aW9uLlxuSWYgdGhlcmUgaXMgYSBydW5uaW5nIGluc3RhbmNlLCBpdCB3aWxsIHRyeSB0byBpbnN0YWxsIHRoZSBwbHVnaW4gdXNpbmcgUXVpY2tSZWxvYWQgb3IgdGhlIFVQTSAoZm9yIE9CUikuYClcbiAgICAuc2hvd0hlbHBBZnRlckVycm9yKHRydWUpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctdywgLS13YXRjaCcsICdXYXRjaCBmb3IgZmlsZXN5c3RlbSBjaGFuZ2VzIHRvIEpBUiBvciBPQlIgZmlsZXMgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnknKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1vLCAtLW91dHB1dERpcmVjdG9yeSA8ZGlyZWN0b3J5PicsICdPdXRwdXQgZGlyZWN0b3J5IHdoZXJlIHRvIGxvb2sgZm9yIGdlbmVyYXRlZCBKQVIgb3IgT0JSIGZpbGVzIChkZWZhdWx0cyB0byBgdGFyZ2V0YCknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1QLCAtLWFjdGl2YXRlLXByb2ZpbGVzIDxhcmc+JywgJ0NvbW1hLWRlbGltaXRlZCBsaXN0IG9mIHByb2ZpbGVzIHRvIGFjdGl2YXRlJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLW9icicsICdVcGxvYWQgZ2VuZXJhdGVkIE9CUiBmaWxlIGluc3RlYWQgb2YgSkFSIGZpbGUgd2hlbiBpbnN0YWxsaW5nIHRoZSBhcHAnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdXNlcm5hbWUgPHVzZXJuYW1lPicsICdUaGUgdXNlcm5hbWUgb2YgdGhlIGFkbWluaXN0cmF0b3IgKHJlcXVpcmVkIHdpdGggLS1vYnIsIG9wdGlvbmFsIGZvciAtLW1wYWMpJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXBhc3N3b3JkIDxwYXNzd29yZD4nLCAnVGhlIHBhc3N3b3JkIG9mIHRoZSBhZG1pbmlzdHJhdG9yIChyZXF1aXJlZCB3aXRoIC0tb2JyLCBvcHRpb25hbCBmb3IgLS1tcGFjKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tcGFjJywgJ0luc3RhbGwgdGhlIGFwcCBmcm9tIHRoZSBBdGxhc3NpYW4gTWFya2V0cGxhY2UnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYmFzZVVybCA8dXJsPicsICdVUkwgb2YgdGhlIGluc3RhbmNlIChyZXF1aXJlZCB3aXRoIC0tbXBhYyknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxrZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCB0byBiZSBpbnN0YWxsZWQgKHJlcXVpcmVkIHdpdGggLS1tcGFjKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1saWNlbnNlIDxwYXRoX29yX2xpY2Vuc2U+JywgJ1RoZSBhcHAgbGljZW5zZSwgZWl0aGVyIGFzIGEgcGF0aCB0byBhIGZpbGUgb3IgdGhlIGxpY2Vuc2UgaXRzZWxmJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBTVBTIGNvbmZpZ3VyYXRpb24nKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBDb21tYW5kKCksIHsgLi4ub3B0aW9ucywgaW5zdGFsbDogdHJ1ZSB9KSk7XG5wcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KS5jYXRjaCgoKSA9PiBncmFjZWZ1bEV4aXQoMSkpO1xucHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBSZWNlaXZlZCB0ZXJtIHNpZ25hbCwgdHJ5aW5nIHRvIHN0b3AgZ3JhY2VmdWxseSDwn5KqYCk7XG4gICAgZ3JhY2VmdWxFeGl0KDEpO1xufSk7XG4iXSwibmFtZXMiOlsiY3dkIiwicHdkIiwicGFzc3dvcmQiLCJwYXNzd29yZFByb21wdCIsInZlcnNpb25zIiwiRG9ja2VyLmdldFJ1bm5pbmdDb250YWluZXJJZHMiLCJyZXNvbHZlUGF0aCIsIkRvY2tlci5jb3B5IiwiQ29tbWFuZGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTU8sTUFBTSxRQUFRLEdBQUcsMmFBQTJhOztBQ041YixNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOztBQ1U1RSxNQUFNLFNBQVMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFxRXpDLE1BQU0sWUFBWSxHQUFHO0FBQzVCLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDO0FBQ3hDLDRCQUE0QixFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRDtBQUNBO0FBQ0EsOEZBQThGLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUM7QUFDMUgsQ0FBQztBQUNELElBQUksaUJBQWlCLEVBQUUsQ0FBQztBQUN4QjtBQUNBO0FBQ0EsQ0FBQztBQUNELElBQUksaUJBQWlCLEVBQUUsQ0FBQztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxJQUFJLHVCQUF1QixFQUFFLG9EQUFvRDtBQUNqRixJQUFJLCtCQUErQixFQUFFLENBQUMsOERBQThELENBQUM7QUFDckcsQ0FB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Q0FBQztBQUM1QixTQUFTLENBQUMsQ0FBQztBQUNYLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUk7QUFDeEIsUUFBUSxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDOUIsWUFBWSxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25DO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixTQUFTO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoRE0sTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQy9DLElBQUksWUFBWTtBQUNoQixJQUFJLE9BQU87QUFDWCxJQUFJLE9BQU87QUFDWCxDQUFDLENBQUMsQ0FBQztBQUNJLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM3QyxJQUFJLFdBQVc7QUFDZixJQUFJLFNBQVM7QUFDYixJQUFJLFVBQVU7QUFDZCxJQUFJLFlBQVk7QUFDaEIsSUFBSSxnQkFBZ0I7QUFDcEIsQ0FBQyxDQUFDLENBQUM7QUFDSSxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3hDLElBQUksSUFBSSxFQUFFLHdCQUF3QjtBQUNsQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3hDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3hDLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3hDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3JDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3JDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3ZDLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsQ0FBQyxDQUFDLENBQUM7QUFDOEIsZUFBZSxDQUFDLE1BQU0sQ0FBQztBQUN4RCxJQUFJLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7QUFDMUosSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUlDLFVBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUN6SCxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztBQUNoRyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssdUJBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7QUFDeEcsQ0FBQyxF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