@tricoteuses/assemblee 1.4.0 → 1.5.1

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.
Files changed (78) hide show
  1. package/lib/bugs/acteur-00010.js +3 -3
  2. package/lib/bugs/agenda-00002.js +3 -3
  3. package/lib/bugs/agenda-00002.mjs +2 -2
  4. package/lib/bugs/agenda-00008.js +3 -3
  5. package/lib/bugs/agenda-00011.js +3 -3
  6. package/lib/bugs/agenda-00011.mjs +2 -2
  7. package/lib/bugs.js +3 -3
  8. package/lib/bugs.mjs +2 -2
  9. package/lib/datasets.d.ts +1 -0
  10. package/lib/datasets.js +28 -3
  11. package/lib/datasets.mjs +14 -3
  12. package/lib/dossiers_legislatifs.js +1 -1
  13. package/lib/dossiers_legislatifs.mjs +1 -2
  14. package/lib/file_systems.js +32 -26
  15. package/lib/file_systems.mjs +6 -3
  16. package/lib/index.d.ts +1 -1
  17. package/lib/index.js +1 -1
  18. package/lib/index.mjs +1 -1
  19. package/lib/inserters.js +1 -3
  20. package/lib/inserters.mjs +1 -3
  21. package/lib/loaders.js +2 -2
  22. package/lib/loaders.mjs +2 -2
  23. package/lib/parsers/documents.js +1 -2
  24. package/lib/parsers/documents.mjs +1 -2
  25. package/lib/raw_types/acteurs_et_organes.js +2 -2
  26. package/lib/raw_types/agendas.js +2 -2
  27. package/lib/raw_types/amendements.js +2 -2
  28. package/lib/raw_types/debats.d.ts +5 -4
  29. package/lib/raw_types/debats.js +11 -7
  30. package/lib/raw_types/debats.mjs +9 -5
  31. package/lib/raw_types/dossiers_legislatifs.d.ts +3 -0
  32. package/lib/raw_types/dossiers_legislatifs.js +9 -6
  33. package/lib/raw_types/dossiers_legislatifs.mjs +7 -4
  34. package/lib/raw_types/questions.d.ts +1 -1
  35. package/lib/raw_types/questions.js +4 -4
  36. package/lib/raw_types/questions.mjs +2 -2
  37. package/lib/raw_types/scrutins.js +2 -2
  38. package/lib/scripts/bugs_helper.js +3 -3
  39. package/lib/scripts/bugs_helper.mjs +2 -2
  40. package/lib/scripts/clean_reorganized_data.js +13 -42
  41. package/lib/scripts/clean_reorganized_data.mjs +8 -18
  42. package/lib/scripts/document_dossiers_legislatifs.js +3 -3
  43. package/lib/scripts/document_dossiers_legislatifs.mjs +2 -2
  44. package/lib/scripts/parse_textes_lois.js +2 -1
  45. package/lib/scripts/reorganize_data.js +17 -46
  46. package/lib/scripts/reorganize_data.mjs +8 -18
  47. package/lib/scripts/retrieve_open_data.js +5 -5
  48. package/lib/scripts/retrieve_open_data.mjs +4 -4
  49. package/lib/scripts/retrieve_senateurs_photos.js +1 -2
  50. package/lib/scripts/retrieve_senateurs_photos.mjs +1 -2
  51. package/lib/scripts/retrieve_textes_lois.js +3 -3
  52. package/lib/scripts/retrieve_textes_lois.mjs +1 -1
  53. package/lib/scripts/validate_json.js +3 -3
  54. package/lib/scripts/validate_json.mjs +2 -2
  55. package/lib/shared_types/codes_actes.d.ts +129 -342
  56. package/lib/shared_types/codes_actes.js +212 -243
  57. package/lib/shared_types/codes_actes.mjs +211 -224
  58. package/lib/types/acteurs_et_organes.d.ts +32 -32
  59. package/lib/types/acteurs_et_organes.js +3 -3
  60. package/lib/types/acteurs_et_organes.mjs +1 -1
  61. package/lib/types/agendas.d.ts +5 -5
  62. package/lib/types/agendas.js +3 -3
  63. package/lib/types/agendas.mjs +1 -1
  64. package/lib/types/amendements.d.ts +1 -1
  65. package/lib/types/amendements.js +3 -3
  66. package/lib/types/amendements.mjs +1 -1
  67. package/lib/types/debats.d.ts +5 -4
  68. package/lib/types/debats.js +11 -7
  69. package/lib/types/debats.mjs +9 -5
  70. package/lib/types/dossiers_legislatifs.d.ts +2 -0
  71. package/lib/types/dossiers_legislatifs.js +9 -10
  72. package/lib/types/dossiers_legislatifs.mjs +8 -9
  73. package/lib/types/questions.d.ts +1 -1
  74. package/lib/types/questions.js +4 -4
  75. package/lib/types/questions.mjs +2 -2
  76. package/lib/types/scrutins.js +3 -3
  77. package/lib/types/scrutins.mjs +1 -1
  78. package/package.json +2 -2
@@ -3,7 +3,7 @@ import { execSync } from "child_process";
3
3
  import commandLineArgs from "command-line-args";
4
4
  import fs from "fs-extra";
5
5
  import path from "path";
6
- import { datasets, DatasetStructure, EnabledDatasets } from "../datasets.mjs";
6
+ import { datasets, DatasetStructure, EnabledDatasets, filterByLegislature } from "../datasets.mjs";
7
7
  import { existingDateToJson, patchedDateToJson } from "../dates.mjs";
8
8
  import * as git from "../git.mjs";
9
9
  import { walkDir } from "../file_systems.mjs";
@@ -15,7 +15,6 @@ import { Convert as DossiersLegislatifsRawConvert } from "../raw_types/dossiers_
15
15
  import { Convert as ScrutinsRawConvert } from "../raw_types/scrutins.mjs";
16
16
  import { Convert as QuestionsRawConvert } from "../raw_types/questions.mjs";
17
17
  import { Convert as ComptesRendusRawConvert } from "../raw_types/debats.mjs";
18
- import { Legislature } from "../types/legislatures.mjs";
19
18
  const optionsDefinitions = [{
20
19
  alias: "C",
21
20
  help: "clone repositories from given group (or organization) git URL",
@@ -79,18 +78,9 @@ function reorganizeData(options) {
79
78
  const validateRawData = !options["no-validate-raw"];
80
79
  options.categories.map(datasetName => assert.notStrictEqual(EnabledDatasets[datasetName], undefined, `Unknown name of dataset: ${datasetName}`));
81
80
  const enabledDatasets = options.categories.reduce((enabledDatasets, datasetName) => enabledDatasets | EnabledDatasets[datasetName], EnabledDatasets.None);
82
- let choosenDatasets = datasets;
83
- // When a given legislature is 0, it is the same as giving no legislature:
84
- // It means "every legislatures".
85
- const legislatures = options.legislature?.some(legislature => legislature === 0) ? undefined : options.legislature;
86
- if (legislatures !== undefined) {
87
- const enabledLegislatures = legislatures.map(legislature => legislature.toString());
88
- for (let [key, value] of Object.entries(choosenDatasets)) {
89
- choosenDatasets[key] = value.filter(dataset => dataset.legislature === Legislature.All || enabledLegislatures.includes(dataset.legislature));
90
- }
91
- }
81
+ let chosenDatasets = filterByLegislature(datasets, options.legislature);
92
82
  if (enabledDatasets & EnabledDatasets.ActeursEtOrganes) {
93
- for (const dataset of choosenDatasets.acteursEtOrganes) {
83
+ for (const dataset of chosenDatasets.acteursEtOrganes) {
94
84
  const originalJsonDirectoryOrFilePath = path.join(dataDir, dataset.filename);
95
85
  if (!options.silent) {
96
86
  console.log(`Reorganizing ${originalJsonDirectoryOrFilePath}`);
@@ -270,7 +260,7 @@ function reorganizeData(options) {
270
260
  }
271
261
  }
272
262
  if (enabledDatasets & EnabledDatasets.Agendas) {
273
- for (const dataset of choosenDatasets.agendas) {
263
+ for (const dataset of chosenDatasets.agendas) {
274
264
  const originalJsonDirectoryOrFilePath = path.join(dataDir, dataset.filename);
275
265
  if (!options.silent) {
276
266
  console.log(`Reorganizing ${originalJsonDirectoryOrFilePath}`);
@@ -334,7 +324,7 @@ function reorganizeData(options) {
334
324
  }
335
325
  }
336
326
  if (enabledDatasets & EnabledDatasets.Amendements) {
337
- for (const dataset of choosenDatasets.amendements) {
327
+ for (const dataset of chosenDatasets.amendements) {
338
328
  const originalJsonDirectoryOrFilePath = path.join(dataDir, dataset.filename);
339
329
  if (!options.silent) {
340
330
  console.log(`Reorganizing ${originalJsonDirectoryOrFilePath}`);
@@ -400,7 +390,7 @@ function reorganizeData(options) {
400
390
  }
401
391
  }
402
392
  if (enabledDatasets & EnabledDatasets.DossiersLegislatifs) {
403
- for (const dataset of choosenDatasets.dossiersLegislatifs) {
393
+ for (const dataset of chosenDatasets.dossiersLegislatifs) {
404
394
  const originalJsonDirectoryOrFilePath = path.join(dataDir, dataset.filename);
405
395
  if (!options.silent) {
406
396
  console.log(`Reorganizing ${originalJsonDirectoryOrFilePath}`);
@@ -489,7 +479,7 @@ function reorganizeData(options) {
489
479
  }
490
480
  }
491
481
  if (enabledDatasets & EnabledDatasets.Scrutins) {
492
- for (let dataset of choosenDatasets.scrutins) {
482
+ for (let dataset of chosenDatasets.scrutins) {
493
483
  const originalJsonDirectoryOrFilePath = path.join(dataDir, dataset.filename);
494
484
  if (!options.silent) {
495
485
  console.log(`Reorganizing ${originalJsonDirectoryOrFilePath}`);
@@ -717,4 +707,4 @@ if (process.argv[1].endsWith("reorganize_data.ts")) {
717
707
  const options = commandLineArgs(optionsDefinitions);
718
708
  process.exit(reorganizeData(options));
719
709
  }
720
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsImRhdGFzZXRzIiwiRGF0YXNldFN0cnVjdHVyZSIsIkVuYWJsZWREYXRhc2V0cyIsImV4aXN0aW5nRGF0ZVRvSnNvbiIsInBhdGNoZWREYXRlVG9Kc29uIiwiZ2l0Iiwid2Fsa0RpciIsInBhdGhGcm9tRG9jdW1lbnRVaWQiLCJwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkIiwicGF0aEZyb21SZXVuaW9uVWlkIiwicGF0aEZyb21TY3J1dGluVWlkIiwicGF0aEZyb21VaWQiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQiLCJBZ2VuZGFzUmF3Q29udmVydCIsIkFtZW5kZW1lbnRzUmF3Q29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IiwiU2NydXRpbnNSYXdDb252ZXJ0IiwiUXVlc3Rpb25zUmF3Q29udmVydCIsIkNvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0VmFsdWUiLCJtdWx0aXBsZSIsIk51bWJlciIsImRlZmF1bHRPcHRpb24iLCJyZW9yZ2FuaXplRGF0YSIsIm9wdGlvbnMiLCJkYXRhRGlyIiwiRGF0ZSIsInByb3RvdHlwZSIsInRvSlNPTiIsImV4aXRDb2RlIiwiZ2l0R3JvdXBVcmwiLCJjbG9uZSIsInRyaW0iLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwidmFsaWRhdGVSYXdEYXRhIiwiY2F0ZWdvcmllcyIsIm1hcCIsImRhdGFzZXROYW1lIiwibm90U3RyaWN0RXF1YWwiLCJlbmFibGVkRGF0YXNldHMiLCJyZWR1Y2UiLCJOb25lIiwiY2hvb3NlbkRhdGFzZXRzIiwibGVnaXNsYXR1cmVzIiwibGVnaXNsYXR1cmUiLCJzb21lIiwiZW5hYmxlZExlZ2lzbGF0dXJlcyIsInRvU3RyaW5nIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwiZmlsdGVyIiwiZGF0YXNldCIsIkFsbCIsImluY2x1ZGVzIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImFjdGV1cnNFdE9yZ2FuZXMiLCJvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoIiwiam9pbiIsImZpbGVuYW1lIiwic2lsZW50IiwiY29uc29sZSIsImxvZyIsImJhc2VuYW1lIiwiY3dkIiwiZW52IiwicHJvY2VzcyIsImVuY29kaW5nIiwic3RkaW8iLCJkYXRhc2V0UmVvcmdhbml6ZWREaXIiLCJwdWxsIiwiZW5zdXJlRGlyU3luYyIsInJlYWRkaXJTeW5jIiwicmVtb3ZlU3luYyIsImFjdGV1cnNSZW9yZ2FuaXplZERpciIsIm1rZGlyU3luYyIsIm9yZ2FuZXNSZW9yZ2FuaXplZERpciIsInN0cnVjdHVyZSIsIlNpbmdsZUZpbGUiLCJvcmlnaW5hbEpzb24iLCJyZWFkRmlsZVN5bmMiLCJvcmlnaW5hbERhdGEiLCJ0b0FjdGV1cnNFdE9yZ2FuZXMiLCJKU09OIiwicGFyc2UiLCJhY3RldXIiLCJleHBvcnQiLCJhY3RldXJzIiwicmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJ1aWQiLCJ3cml0ZUZpbGVTeW5jIiwic3RyaW5naWZ5Iiwib3JnYW5lIiwib3JnYW5lcyIsIlNlZ21lbnRlZEZpbGVzIiwiZGVwb3J0c0J5QWN0ZXVyVWlkIiwiZXhpc3RzU3luYyIsImRlcG9ydFNwbGl0UGF0aCIsImRlcG9ydEZpbGVuYW1lIiwibGVuZ3RoIiwiZW5kc1dpdGgiLCJkZXBvcnRPcmlnaW5hbEZpbGVQYXRoIiwidmVyYm9zZSIsImRlcG9ydE9yaWdpbmFsSnNvbiIsImRlcG9ydE9yaWdpbmFsIiwidG9EZXBvcnQiLCJkZXBvcnQiLCJkZXBvcnRzIiwiYWN0ZXVyUmVmIiwicHVzaCIsInZhbHVlcyIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJtYW5kYXRzQnlBY3RldXJVaWQiLCJtYW5kYXRTcGxpdFBhdGgiLCJtYW5kYXRGaWxlbmFtZSIsIm1hbmRhdE9yaWdpbmFsRmlsZVBhdGgiLCJtYW5kYXRPcmlnaW5hbEpzb24iLCJtYW5kYXRPcmlnaW5hbCIsInRvTWFuZGF0V3JhcHBlciIsIm1hbmRhdCIsIm1hbmRhdHMiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImFjdGV1ck9yaWdpbmFsRmlsZVBhdGgiLCJhY3RldXJPcmlnaW5hbEpzb24iLCJhY3RldXJPcmlnaW5hbCIsInRvQWN0ZXVyIiwiYWN0ZXVyVWlkIiwic3RyaWN0RXF1YWwiLCJhY3RldXJSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lT3JpZ2luYWxGaWxlUGF0aCIsIm9yZ2FuZU9yaWdpbmFsSnNvbiIsIm9yZ2FuZU9yaWdpbmFsIiwidG9PcmdhbmUiLCJvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aCIsImNvbW1pdCIsImVycm9yQ29kZSIsImNvbW1pdEFuZFB1c2giLCJyZW1vdGUiLCJBZ2VuZGFzIiwiYWdlbmRhcyIsInRvQWdlbmRhcyIsInJldW5pb24iLCJyZXVuaW9ucyIsIndyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbiIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCIsInJldW5pb25PcmlnaW5hbEpzb24iLCJyZXVuaW9uT3JpZ2luYWwiLCJ0b1JldW5pb24iLCJBbWVuZGVtZW50cyIsImFtZW5kZW1lbnRzIiwidG9BbWVuZGVtZW50cyIsInRleHRlTGVnaXNsYXRpZiIsInRleHRlc0V0QW1lbmRlbWVudHMiLCJ0ZXh0ZWxlZyIsImFtZW5kZW1lbnQiLCJ3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24iLCJhbWVuZGVtZW50U3BsaXRQYXRoIiwiYW1lbmRlbWVudEZpbGVuYW1lIiwiYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGgiLCJhbWVuZGVtZW50T3JpZ2luYWxKc29uIiwiYW1lbmRlbWVudE9yaWdpbmFsIiwidG9BbWVuZGVtZW50V3JhcHBlciIsIkRvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnRzRGlyIiwiZG9zc2llcnNEaXIiLCJ0b0Rvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb2N1bWVudCIsInRleHRlc0xlZ2lzbGF0aWZzIiwid3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbiIsImRvc3NpZXJQYXJsZW1lbnRhaXJlIiwiZG9zc2llciIsIndyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24iLCJkb2N1bWVudFNwbGl0UGF0aCIsImRvY3VtZW50RmlsZW5hbWUiLCJkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGgiLCJkb2N1bWVudE9yaWdpbmFsSnNvbiIsImRvY3VtZW50T3JpZ2luYWwiLCJ0b0RvY3VtZW50IiwiZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgiLCJkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsIiwidG9Eb3NzaWVyUGFybGVtZW50YWlyZSIsIlNjcnV0aW5zIiwic2NydXRpbnMiLCJ0b1NjcnV0aW5zIiwic2NydXRpbiIsIndyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbiIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCIsInNjcnV0aW5PcmlnaW5hbEpzb24iLCJzY3J1dGluT3JpZ2luYWwiLCJ0b1NjcnV0aW5XcmFwcGVyIiwiUXVlc3Rpb25zIiwicXVlc3Rpb25zIiwicXVlc3Rpb25TcGxpdFBhdGgiLCJxdWVzdGlvbkZpbGVuYW1lIiwicXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRoIiwicXVlc3Rpb25PcmlnaW5hbEpzb24iLCJxdWVzdGlvbk9yaWdpbmFsIiwidG9RdWVzdGlvbldyYXBwZXIiLCJxdWVzdGlvbiIsIndyaXRlUXVlc3Rpb25zUmVvcmdhbml6ZWRKc29uIiwiQ29tcHRlc1JlbmR1c1NlYW5jZXMiLCJjb21wdGVzUmVuZHVzU2VhbmNlcyIsImNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoIiwiY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZSIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uIiwiY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbCIsInRvQ29tcHRlUmVuZHVXcmFwcGVyIiwiY29tcHRlUmVuZHVTZWFuY2UiLCJjb21wdGVSZW5kdSIsIndyaXRlQ29tcHRlc1JlbmR1c1Jlb3JnYW5pemVkSnNvbiIsInVpZFRleHRlTGVnaXNsYXRpZiIsInRleHRlTGVnaXNsYXRpZlJlZiIsInRleHRlTGVnaXNsYXRpZkRpciIsInJldW5pb25zRGlyIiwic2NydXRpbnNEaXIiLCJxdWVzdGlvbnNEaXIiLCJxdWVzdGlvblVpZFJlZ2V4IiwiY29tcHRlc1JlbmR1c0RpciIsImNvbXB0ZVJlbmR1VWlkUmVnZXgiLCJhcmd2IiwiZXhpdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL3Jlb3JnYW5pemVfZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgZGF0YXNldHMsIERhdGFzZXRTdHJ1Y3R1cmUsIEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vZ2l0XCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7XG4gIHBhdGhGcm9tRG9jdW1lbnRVaWQsXG4gIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQsXG4gIHBhdGhGcm9tUmV1bmlvblVpZCxcbiAgcGF0aEZyb21TY3J1dGluVWlkLFxuICBwYXRoRnJvbVVpZCxcbn0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL3F1ZXN0aW9uc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIENvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kZWJhdHNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi4vdHlwZXMvbGVnaXNsYXR1cmVzXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiQ1wiLFxuICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgc3BsaXQgZmlsZXNcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJrXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJsXCIsXG4gICAgaGVscDogXCJsZWdpc2xhdHVyZXMgb2YgY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZXRyaWV2ZTsgbGVhdmUgZW1wdHkgb3IgdXNlIDAgZm9yIGFsbFwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBOdW1iZXIsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJwXCIsXG4gICAgaGVscDogXCJwdWxsIHJlcG9zaXRvcmllcyBiZWZvcmUgcHJvY2VlZGluZ1wiLFxuICAgIG5hbWU6IFwicHVsbFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcIlZcIixcbiAgICBoZWxwOiBcImRvbid0IHZhbGlkYXRlIHJhdyBkYXRhXCIsXG4gICAgbmFtZTogXCJuby12YWxpZGF0ZS1yYXdcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cblxuZnVuY3Rpb24gcmVvcmdhbml6ZURhdGEob3B0aW9uczogYW55KTogbnVtYmVyIHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIGxldCBleGl0Q29kZSA9IDEwIC8vIE5vdGhpbmcgdG8gY29tbWl0XG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHZhbGlkYXRlUmF3RGF0YSA9ICFvcHRpb25zW1wibm8tdmFsaWRhdGUtcmF3XCJdXG5cbiAgb3B0aW9ucy5jYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBsZXQgY2hvb3NlbkRhdGFzZXRzID0gZGF0YXNldHNcbiAgLy8gV2hlbiBhIGdpdmVuIGxlZ2lzbGF0dXJlIGlzIDAsIGl0IGlzIHRoZSBzYW1lIGFzIGdpdmluZyBubyBsZWdpc2xhdHVyZTpcbiAgLy8gSXQgbWVhbnMgXCJldmVyeSBsZWdpc2xhdHVyZXNcIi5cbiAgY29uc3QgbGVnaXNsYXR1cmVzID0gb3B0aW9ucy5sZWdpc2xhdHVyZT8uc29tZShcbiAgICAobGVnaXNsYXR1cmU6IG51bWJlcikgPT4gbGVnaXNsYXR1cmUgPT09IDAsXG4gIClcbiAgICA/IHVuZGVmaW5lZFxuICAgIDogb3B0aW9ucy5sZWdpc2xhdHVyZVxuICBpZiAobGVnaXNsYXR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBlbmFibGVkTGVnaXNsYXR1cmVzID0gbGVnaXNsYXR1cmVzLm1hcCgobGVnaXNsYXR1cmU6IG51bWJlcikgPT5cbiAgICAgIGxlZ2lzbGF0dXJlLnRvU3RyaW5nKCksXG4gICAgKVxuICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjaG9vc2VuRGF0YXNldHMpKSB7XG4gICAgICBjaG9vc2VuRGF0YXNldHNba2V5IGFzIGtleW9mIHR5cGVvZiBjaG9vc2VuRGF0YXNldHNdID0gdmFsdWUuZmlsdGVyKFxuICAgICAgICAoZGF0YXNldDogeyBsZWdpc2xhdHVyZTogYW55IH0pID0+XG4gICAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSA9PT0gTGVnaXNsYXR1cmUuQWxsIHx8XG4gICAgICAgICAgZW5hYmxlZExlZ2lzbGF0dXJlcy5pbmNsdWRlcyhkYXRhc2V0LmxlZ2lzbGF0dXJlKSxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgaWYgKG9wdGlvbnMucHVsbCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vbWFzdGVyYCwge1xuICAgICAgICAgIGN3ZDogZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdWxsIC0tcmViYXNlYCwge1xuICAgICAgICAgIGN3ZDogZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBhY3RldXJzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImFjdGV1cnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhhY3RldXJzUmVvcmdhbml6ZWREaXIpXG4gICAgICBjb25zdCBvcmdhbmVzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcIm9yZ2FuZXNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhvcmdhbmVzUmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQuYWN0ZXVycy5hY3RldXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0Lm9yZ2FuZXMub3JnYW5lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBkZXBvcnRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcImRlcG9ydFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJkZXBvcnRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBkZXBvcnRTcGxpdFBhdGhbZGVwb3J0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFkZXBvcnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLmRlcG9ydFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJkZXBvcnRcIiBmaWxlOiAke2RlcG9ydE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvRGVwb3J0KGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkZXBvcnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0ID0gZGVwb3J0T3JpZ2luYWwuZGVwb3J0XG4gICAgICAgICAgICAgICAgbGV0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAoZGVwb3J0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2RlcG9ydC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVwb3J0cy5wdXNoKGRlcG9ydClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0cyBvZiBPYmplY3QudmFsdWVzKGRlcG9ydHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBkZXBvcnRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYW5kYXRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcIm1hbmRhdFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJtYW5kYXRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBtYW5kYXRTcGxpdFBhdGhbbWFuZGF0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFtYW5kYXRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLm1hbmRhdFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJtYW5kYXRcIiBmaWxlOiAke21hbmRhdE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvTWFuZGF0V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShtYW5kYXRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0ID0gbWFuZGF0T3JpZ2luYWwubWFuZGF0XG4gICAgICAgICAgICAgICAgbGV0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAobWFuZGF0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5wdXNoKG1hbmRhdClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0cyBvZiBPYmplY3QudmFsdWVzKG1hbmRhdHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBtYW5kYXRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJhY3RldXJcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYWN0ZXVyXCIgZmlsZTogJHthY3RldXJPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1ck9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXIoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGFjdGV1ck9yaWdpbmFsLmFjdGV1clxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJVaWQgPSBhY3RldXIudWlkW1wiI3RleHRcIl1cbiAgICAgICAgICAgICAgY29uc3QgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChkZXBvcnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLmRlcG9ydHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIuZGVwb3J0cyA9IHsgZGVwb3J0OiBkZXBvcnRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIubWFuZGF0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5tYW5kYXRzID0geyBtYW5kYXQ6IG1hbmRhdHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGFjdGV1clVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wib3JnYW5lXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcIm9yZ2FuZVwiIGZpbGU6ICR7b3JnYW5lT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmUgPSBvcmdhbmVPcmlnaW5hbC5vcmdhbmVcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9vc2VuRGF0YXNldHMuYWdlbmRhcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b0FnZW5kYXMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb24gb2Ygb3JpZ2luYWxEYXRhLnJldW5pb25zLnJldW5pb24pIHtcbiAgICAgICAgICAgICAgd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgcmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV1bmlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJyZXVuaW9uXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHJldW5pb25TcGxpdFBhdGhbcmV1bmlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXJldW5pb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnJldW5pb25TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwicmV1bmlvblwiIGZpbGU6ICR7cmV1bmlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJldW5pb25PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBZ2VuZGFzUmF3Q29udmVydC50b1JldW5pb24ocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UocmV1bmlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbiA9IHJldW5pb25PcmlnaW5hbC5yZXVuaW9uXG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFtZW5kZW1lbnRzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob29zZW5EYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50cyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIG9yaWdpbmFsRGF0YS50ZXh0ZXNFdEFtZW5kZW1lbnRzXG4gICAgICAgICAgICAgIC50ZXh0ZWxlZykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYW1lbmRlbWVudFwiIGZpbGU6ICR7YW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYW1lbmRlbWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IGFtZW5kZW1lbnRPcmlnaW5hbC5hbWVuZGVtZW50XG4gICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGFtZW5kZW1lbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvY3VtZW50c0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9jdW1lbnRzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9jdW1lbnRzRGlyKVxuICAgICAgY29uc3QgZG9zc2llcnNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvc3NpZXJzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9zc2llcnNEaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC50ZXh0ZXNMZWdpc2xhdGlmc1xuICAgICAgICAgICAgICAuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgZG9zc2llclBhcmxlbWVudGFpcmUgfSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0XG4gICAgICAgICAgICAgIC5kb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXIpIHtcbiAgICAgICAgICAgICAgd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJkb2N1bWVudFwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmRvY3VtZW50U3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImRvY3VtZW50XCIgZmlsZTogJHtkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0RvY3VtZW50KGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkb2N1bWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBkb2N1bWVudE9yaWdpbmFsLmRvY3VtZW50XG4gICAgICAgICAgICAgIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9zc2llclBhcmxlbWVudGFpcmVcIiBmaWxlOiAke2Rvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoXG4gICAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmUgPVxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWwuZG9zc2llclBhcmxlbWVudGFpcmVcbiAgICAgICAgICAgICAgd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAobGV0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzLnNjcnV0aW5zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5zKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluIG9mIG9yaWdpbmFsRGF0YS5zY3J1dGlucy5zY3J1dGluKSB7XG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5zY3J1dGluU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInNjcnV0aW5cIiBmaWxlOiAke3NjcnV0aW5PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbldyYXBwZXIoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uoc2NydXRpbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbiA9IHNjcnV0aW5PcmlnaW5hbC5zY3J1dGluXG4gICAgICAgICAgICAgIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHNjcnV0aW4pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBxdWVzdGlvblNwbGl0UGF0aFtxdWVzdGlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXF1ZXN0aW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ucXVlc3Rpb25TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwicXVlc3Rpb25cIiBmaWxlOiAke3F1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gUXVlc3Rpb25zUmF3Q29udmVydC50b1F1ZXN0aW9uV3JhcHBlcihxdWVzdGlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UocXVlc3Rpb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gcXVlc3Rpb25PcmlnaW5hbC5xdWVzdGlvblxuICAgICAgICAgICAgICB3cml0ZVF1ZXN0aW9uc1Jlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHF1ZXN0aW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Db21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5jb21wdGVzUmVuZHVzU2VhbmNlcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUob3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCwgXCIueG1sXCIpXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5jb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJjb21wdGVSZW5kdVNlYW5jZVwiIGZpbGU6ICR7Y29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQ29tcHRlc1JlbmR1c1Jhd0NvbnZlcnQudG9Db21wdGVSZW5kdVdyYXBwZXIoXG4gICAgICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZSA9IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWwuY29tcHRlUmVuZHVcbiAgICAgICAgICAgICAgd3JpdGVDb21wdGVzUmVuZHVzUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gUmVzdG9yZSBzdGFuZGFyZCBjb252ZXJzaW9uIG9mIGRhdGVzIHRvIEpTT04uXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGV4aXN0aW5nRGF0ZVRvSnNvblxuXG4gIHJldHVybiBleGl0Q29kZVxufVxuXG5mdW5jdGlvbiB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gIGRhdGFzZXRSZW9yZ2FuaXplZERpcjogc3RyaW5nLFxuICBhbWVuZGVtZW50OiB7XG4gICAgdWlkOiBzdHJpbmdcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZSZWY6IHN0cmluZ1xuICB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHVpZFRleHRlTGVnaXNsYXRpZiA9IGFtZW5kZW1lbnQudGV4dGVMZWdpc2xhdGlmUmVmXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbCh1aWRUZXh0ZUxlZ2lzbGF0aWYsIHVuZGVmaW5lZClcbiAgY29uc3QgdGV4dGVMZWdpc2xhdGlmRGlyID0gcGF0aC5qb2luKFxuICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICB1aWRUZXh0ZUxlZ2lzbGF0aWYsXG4gIClcbiAgZnMuZW5zdXJlRGlyU3luYyh0ZXh0ZUxlZ2lzbGF0aWZEaXIpXG4gIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgIHRleHRlTGVnaXNsYXRpZkRpcixcbiAgICBhbWVuZGVtZW50LnVpZCArIFwiLmpzb25cIixcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgIEpTT04uc3RyaW5naWZ5KGFtZW5kZW1lbnQsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oXG4gIGRvY3VtZW50c0Rpcjogc3RyaW5nLFxuICBkb2N1bWVudDogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXIsIGRvY3VtZW50LnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KGRvY3VtZW50LCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgZG9zc2llcnNEaXI6IHN0cmluZyxcbiAgZG9zc2llclBhcmxlbWVudGFpcmU6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQoXG4gICAgZG9zc2llcnNEaXIsXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmUudWlkLFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgYCR7YmFzZW5hbWV9Lmpzb25gLFxuICAgIEpTT04uc3RyaW5naWZ5KGRvc3NpZXJQYXJsZW1lbnRhaXJlLCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oXG4gIHJldW5pb25zRGlyOiBzdHJpbmcsXG4gIHJldW5pb246IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tUmV1bmlvblVpZChyZXVuaW9uc0RpciwgcmV1bmlvbi51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShyZXVuaW9uLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKFxuICBzY3J1dGluc0Rpcjogc3RyaW5nLFxuICBzY3J1dGluOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVNjcnV0aW5VaWQoc2NydXRpbnNEaXIsIHNjcnV0aW4udWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoc2NydXRpbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlUXVlc3Rpb25zUmVvcmdhbml6ZWRKc29uKFxuICBxdWVzdGlvbnNEaXI6IHN0cmluZyxcbiAgcXVlc3Rpb246IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBxdWVzdGlvblVpZFJlZ2V4OiBSZWdFeHAgPSAvXlFBTihSXFxkKykoTFxcZCspUShFfEd8T1NEKShcXGQrKSQvXG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21VaWQocXVlc3Rpb25zRGlyLCBxdWVzdGlvbi51aWQsIHF1ZXN0aW9uVWlkUmVnZXgpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShxdWVzdGlvbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlQ29tcHRlc1JlbmR1c1Jlb3JnYW5pemVkSnNvbihcbiAgY29tcHRlc1JlbmR1c0Rpcjogc3RyaW5nLFxuICBjb21wdGVSZW5kdTogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbXB0ZVJlbmR1VWlkUmVnZXg6IFJlZ0V4cCA9XG4gICAgL15DUlNBTihSXFxkKykoTFxcZCspKFNcXGQrKShPfEUpKFxcZCspKE5cXGQrKSQvXG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21VaWQoXG4gICAgY29tcHRlc1JlbmR1c0RpcixcbiAgICBjb21wdGVSZW5kdS51aWQsXG4gICAgY29tcHRlUmVuZHVVaWRSZWdleCxcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoY29tcHRlUmVuZHUsIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbmlmIChwcm9jZXNzLmFyZ3ZbMV0uZW5kc1dpdGgoXCJyZW9yZ2FuaXplX2RhdGEudHNcIikpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5cbiAgcHJvY2Vzcy5leGl0KHJlb3JnYW5pemVEYXRhKG9wdGlvbnMpKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFNLE1BQU0sUUFBUTtBQUMzQixTQUFTQyxRQUFRLFFBQVEsZUFBZTtBQUN4QyxPQUFPQyxlQUFlLE1BQU0sbUJBQW1CO0FBQy9DLE9BQU9DLEVBQUUsTUFBTSxVQUFVO0FBQ3pCLE9BQU9DLElBQUksTUFBTSxNQUFNO0FBQUEsU0FFZEMsUUFBUSxFQUFFQyxnQkFBZ0IsRUFBRUMsZUFBZTtBQUFBLFNBQzNDQyxrQkFBa0IsRUFBRUMsaUJBQWlCO0FBQUEsT0FDdkMsS0FBS0MsR0FBRztBQUFBLFNBQ05DLE9BQU87QUFBQSxTQUVkQyxtQkFBbUIsRUFDbkJDLCtCQUErQixFQUMvQkMsa0JBQWtCLEVBQ2xCQyxrQkFBa0IsRUFDbEJDLFdBQVc7QUFBQSxTQUVKQyxPQUFPLElBQUlDLDBCQUEwQjtBQUFBLFNBQ3JDRCxPQUFPLElBQUlFLGlCQUFpQjtBQUFBLFNBQzVCRixPQUFPLElBQUlHLHFCQUFxQjtBQUFBLFNBQ2hDSCxPQUFPLElBQUlJLDZCQUE2QjtBQUFBLFNBQ3hDSixPQUFPLElBQUlLLGtCQUFrQjtBQUFBLFNBQzdCTCxPQUFPLElBQUlNLG1CQUFtQjtBQUFBLFNBQzlCTixPQUFPLElBQUlPLHVCQUF1QjtBQUFBLFNBQ2xDQyxXQUFXO0FBRXBCLE1BQU1DLGtCQUFrQixHQUFHLENBQ3pCO0VBQ0VDLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSwrREFBK0Q7RUFDckVDLElBQUksRUFBRSxPQUFPO0VBQ2JDLElBQUksRUFBRUM7QUFDUixDQUFDLEVBQ0Q7RUFDRUosS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFFLG9CQUFvQjtFQUMxQkMsSUFBSSxFQUFFLFFBQVE7RUFDZEMsSUFBSSxFQUFFRTtBQUNSLENBQUMsRUFDRDtF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
710
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsImRhdGFzZXRzIiwiRGF0YXNldFN0cnVjdHVyZSIsIkVuYWJsZWREYXRhc2V0cyIsImZpbHRlckJ5TGVnaXNsYXR1cmUiLCJleGlzdGluZ0RhdGVUb0pzb24iLCJwYXRjaGVkRGF0ZVRvSnNvbiIsImdpdCIsIndhbGtEaXIiLCJwYXRoRnJvbURvY3VtZW50VWlkIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsInBhdGhGcm9tUmV1bmlvblVpZCIsInBhdGhGcm9tU2NydXRpblVpZCIsInBhdGhGcm9tVWlkIiwiQ29udmVydCIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwiQWdlbmRhc1Jhd0NvbnZlcnQiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCIsIlNjcnV0aW5zUmF3Q29udmVydCIsIlF1ZXN0aW9uc1Jhd0NvbnZlcnQiLCJDb21wdGVzUmVuZHVzUmF3Q29udmVydCIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiQm9vbGVhbiIsImRlZmF1bHRWYWx1ZSIsIm11bHRpcGxlIiwiTnVtYmVyIiwiZGVmYXVsdE9wdGlvbiIsInJlb3JnYW5pemVEYXRhIiwib3B0aW9ucyIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwiZXhpdENvZGUiLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJub3RTdHJpY3RFcXVhbCIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJjaG9zZW5EYXRhc2V0cyIsImxlZ2lzbGF0dXJlIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwib3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCIsImpvaW4iLCJmaWxlbmFtZSIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJiYXNlbmFtZSIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiZGF0YXNldFJlb3JnYW5pemVkRGlyIiwicHVsbCIsImVuc3VyZURpclN5bmMiLCJyZWFkZGlyU3luYyIsInJlbW92ZVN5bmMiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJTaW5nbGVGaWxlIiwib3JpZ2luYWxKc29uIiwicmVhZEZpbGVTeW5jIiwib3JpZ2luYWxEYXRhIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiSlNPTiIsInBhcnNlIiwiYWN0ZXVyIiwiZXhwb3J0IiwiYWN0ZXVycyIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIm9yZ2FuZSIsIm9yZ2FuZXMiLCJTZWdtZW50ZWRGaWxlcyIsImRlcG9ydHNCeUFjdGV1clVpZCIsImV4aXN0c1N5bmMiLCJkZXBvcnRTcGxpdFBhdGgiLCJkZXBvcnRGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCIsInZlcmJvc2UiLCJkZXBvcnRPcmlnaW5hbEpzb24iLCJkZXBvcnRPcmlnaW5hbCIsInRvRGVwb3J0IiwiZGVwb3J0IiwiZGVwb3J0cyIsImFjdGV1clJlZiIsInB1c2giLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWFuZGF0c0J5QWN0ZXVyVWlkIiwibWFuZGF0U3BsaXRQYXRoIiwibWFuZGF0RmlsZW5hbWUiLCJtYW5kYXRPcmlnaW5hbEZpbGVQYXRoIiwibWFuZGF0T3JpZ2luYWxKc29uIiwibWFuZGF0T3JpZ2luYWwiLCJ0b01hbmRhdFdyYXBwZXIiLCJtYW5kYXQiLCJtYW5kYXRzIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgiLCJvcmdhbmVPcmlnaW5hbEpzb24iLCJvcmdhbmVPcmlnaW5hbCIsInRvT3JnYW5lIiwib3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJjb21taXQiLCJlcnJvckNvZGUiLCJjb21taXRBbmRQdXNoIiwicmVtb3RlIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9uIiwicmV1bmlvbnMiLCJ3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24iLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbk9yaWdpbmFsRmlsZVBhdGgiLCJyZXVuaW9uT3JpZ2luYWxKc29uIiwicmV1bmlvbk9yaWdpbmFsIiwidG9SZXVuaW9uIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNFdEFtZW5kZW1lbnRzIiwidGV4dGVsZWciLCJhbWVuZGVtZW50Iiwid3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uIiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiYW1lbmRlbWVudE9yaWdpbmFsSnNvbiIsImFtZW5kZW1lbnRPcmlnaW5hbCIsInRvQW1lbmRlbWVudFdyYXBwZXIiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50c0RpciIsImRvc3NpZXJzRGlyIiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsIndyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXIiLCJ3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uIiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiZG9jdW1lbnRPcmlnaW5hbEpzb24iLCJkb2N1bWVudE9yaWdpbmFsIiwidG9Eb2N1bWVudCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbCIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwidG9TY3J1dGlucyIsInNjcnV0aW4iLCJ3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24iLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwic2NydXRpbk9yaWdpbmFsIiwidG9TY3J1dGluV3JhcHBlciIsIlF1ZXN0aW9ucyIsInF1ZXN0aW9ucyIsInF1ZXN0aW9uU3BsaXRQYXRoIiwicXVlc3Rpb25GaWxlbmFtZSIsInF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCIsInF1ZXN0aW9uT3JpZ2luYWxKc29uIiwicXVlc3Rpb25PcmlnaW5hbCIsInRvUXVlc3Rpb25XcmFwcGVyIiwicXVlc3Rpb24iLCJ3cml0ZVF1ZXN0aW9uc1Jlb3JnYW5pemVkSnNvbiIsIkNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlc1JlbmR1c1NlYW5jZXMiLCJjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aCIsImNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGgiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbiIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWwiLCJ0b0NvbXB0ZVJlbmR1V3JhcHBlciIsImNvbXB0ZVJlbmR1U2VhbmNlIiwiY29tcHRlUmVuZHUiLCJ3cml0ZUNvbXB0ZXNSZW5kdXNSZW9yZ2FuaXplZEpzb24iLCJ1aWRUZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZSZWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZEaXIiLCJyZXVuaW9uc0RpciIsInNjcnV0aW5zRGlyIiwicXVlc3Rpb25zRGlyIiwicXVlc3Rpb25VaWRSZWdleCIsImNvbXB0ZXNSZW5kdXNEaXIiLCJjb21wdGVSZW5kdVVpZFJlZ2V4IiwiYXJndiIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZW9yZ2FuaXplX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7XG4gIGRhdGFzZXRzLFxuICBEYXRhc2V0U3RydWN0dXJlLFxuICBFbmFibGVkRGF0YXNldHMsXG4gIGZpbHRlckJ5TGVnaXNsYXR1cmUsXG59IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vZ2l0XCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7XG4gIHBhdGhGcm9tRG9jdW1lbnRVaWQsXG4gIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQsXG4gIHBhdGhGcm9tUmV1bmlvblVpZCxcbiAgcGF0aEZyb21TY3J1dGluVWlkLFxuICBwYXRoRnJvbVVpZCxcbn0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL3F1ZXN0aW9uc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIENvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kZWJhdHNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJDXCIsXG4gICAgaGVscDogXCJjbG9uZSByZXBvc2l0b3JpZXMgZnJvbSBnaXZlbiBncm91cCAob3Igb3JnYW5pemF0aW9uKSBnaXQgVVJMXCIsXG4gICAgbmFtZTogXCJjbG9uZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImNcIixcbiAgICBoZWxwOiBcImNvbW1pdCBzcGxpdCBmaWxlc1wiLFxuICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImtcIixcbiAgICBkZWZhdWx0VmFsdWU6IFtcIkFsbFwiXSxcbiAgICBoZWxwOiBcImNhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmVvcmdhbml6ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwiY2F0ZWdvcmllc1wiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImxcIixcbiAgICBoZWxwOiBcImxlZ2lzbGF0dXJlcyBvZiBjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJldHJpZXZlOyBsZWF2ZSBlbXB0eSBvciB1c2UgMCBmb3IgYWxsXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJsZWdpc2xhdHVyZVwiLFxuICAgIHR5cGU6IE51bWJlcixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInBcIixcbiAgICBoZWxwOiBcInB1bGwgcmVwb3NpdG9yaWVzIGJlZm9yZSBwcm9jZWVkaW5nXCIsXG4gICAgbmFtZTogXCJwdWxsXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInJcIixcbiAgICBoZWxwOiBcInB1c2ggY29tbWl0IHRvIGdpdmVuIHJlbW90ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwic1wiLFxuICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiVlwiLFxuICAgIGhlbHA6IFwiZG9uJ3QgdmFsaWRhdGUgcmF3IGRhdGFcIixcbiAgICBuYW1lOiBcIm5vLXZhbGlkYXRlLXJhd1wiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJ2XCIsXG4gICAgaGVscDogXCJ2ZXJib3NlIGxvZ3NcIixcbiAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuXVxuXG5mdW5jdGlvbiByZW9yZ2FuaXplRGF0YShvcHRpb25zOiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IHBhdGNoZWREYXRlVG9Kc29uXG5cbiAgbGV0IGV4aXRDb2RlID0gMTAgLy8gTm90aGluZyB0byBjb21taXRcbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgdmFsaWRhdGVSYXdEYXRhID0gIW9wdGlvbnNbXCJuby12YWxpZGF0ZS1yYXdcIl1cblxuICBvcHRpb25zLmNhdGVnb3JpZXMubWFwKChkYXRhc2V0TmFtZTogc3RyaW5nKSA9PlxuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBgVW5rbm93biBuYW1lIG9mIGRhdGFzZXQ6ICR7ZGF0YXNldE5hbWV9YCxcbiAgICApLFxuICApXG4gIGNvbnN0IGVuYWJsZWREYXRhc2V0cyA9IG9wdGlvbnMuY2F0ZWdvcmllcy5yZWR1Y2UoXG4gICAgKGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLCBkYXRhc2V0TmFtZTogc3RyaW5nKTogRW5hYmxlZERhdGFzZXRzID0+XG4gICAgICBlbmFibGVkRGF0YXNldHMgfFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICBFbmFibGVkRGF0YXNldHMuTm9uZSxcbiAgKVxuXG4gIGxldCBjaG9zZW5EYXRhc2V0cyA9IGZpbHRlckJ5TGVnaXNsYXR1cmUoZGF0YXNldHMsIG9wdGlvbnMubGVnaXNsYXR1cmUpXG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgaWYgKG9wdGlvbnMucHVsbCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vbWFzdGVyYCwge1xuICAgICAgICAgIGN3ZDogZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdWxsIC0tcmViYXNlYCwge1xuICAgICAgICAgIGN3ZDogZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBhY3RldXJzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImFjdGV1cnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhhY3RldXJzUmVvcmdhbml6ZWREaXIpXG4gICAgICBjb25zdCBvcmdhbmVzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcIm9yZ2FuZXNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhvcmdhbmVzUmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQuYWN0ZXVycy5hY3RldXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0Lm9yZ2FuZXMub3JnYW5lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBkZXBvcnRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcImRlcG9ydFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJkZXBvcnRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBkZXBvcnRTcGxpdFBhdGhbZGVwb3J0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFkZXBvcnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLmRlcG9ydFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJkZXBvcnRcIiBmaWxlOiAke2RlcG9ydE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvRGVwb3J0KGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkZXBvcnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0ID0gZGVwb3J0T3JpZ2luYWwuZGVwb3J0XG4gICAgICAgICAgICAgICAgbGV0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAoZGVwb3J0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2RlcG9ydC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVwb3J0cy5wdXNoKGRlcG9ydClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0cyBvZiBPYmplY3QudmFsdWVzKGRlcG9ydHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBkZXBvcnRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYW5kYXRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcIm1hbmRhdFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJtYW5kYXRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBtYW5kYXRTcGxpdFBhdGhbbWFuZGF0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFtYW5kYXRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLm1hbmRhdFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJtYW5kYXRcIiBmaWxlOiAke21hbmRhdE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvTWFuZGF0V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShtYW5kYXRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0ID0gbWFuZGF0T3JpZ2luYWwubWFuZGF0XG4gICAgICAgICAgICAgICAgbGV0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAobWFuZGF0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5wdXNoKG1hbmRhdClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0cyBvZiBPYmplY3QudmFsdWVzKG1hbmRhdHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBtYW5kYXRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJhY3RldXJcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYWN0ZXVyXCIgZmlsZTogJHthY3RldXJPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1ck9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXIoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGFjdGV1ck9yaWdpbmFsLmFjdGV1clxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJVaWQgPSBhY3RldXIudWlkW1wiI3RleHRcIl1cbiAgICAgICAgICAgICAgY29uc3QgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChkZXBvcnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLmRlcG9ydHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIuZGVwb3J0cyA9IHsgZGVwb3J0OiBkZXBvcnRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIubWFuZGF0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5tYW5kYXRzID0geyBtYW5kYXQ6IG1hbmRhdHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGFjdGV1clVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wib3JnYW5lXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcIm9yZ2FuZVwiIGZpbGU6ICR7b3JnYW5lT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmUgPSBvcmdhbmVPcmlnaW5hbC5vcmdhbmVcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFnZW5kYXNSYXdDb252ZXJ0LnRvQWdlbmRhcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV1bmlvbiBvZiBvcmlnaW5hbERhdGEucmV1bmlvbnMucmV1bmlvbikge1xuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcInJldW5pb25cIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ucmV1bmlvblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJyZXVuaW9uXCIgZmlsZTogJHtyZXVuaW9uT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFnZW5kYXNSYXdDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShyZXVuaW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uID0gcmV1bmlvbk9yaWdpbmFsLnJldW5pb25cbiAgICAgICAgICAgICAgd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgcmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQW1lbmRlbWVudHNSYXdDb252ZXJ0LnRvQW1lbmRlbWVudHMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBvcmlnaW5hbERhdGEudGV4dGVzRXRBbWVuZGVtZW50c1xuICAgICAgICAgICAgICAudGV4dGVsZWcpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICAgIGFtZW5kZW1lbnQsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImFtZW5kZW1lbnRcIiBmaWxlOiAke2FtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQW1lbmRlbWVudHNSYXdDb252ZXJ0LnRvQW1lbmRlbWVudFdyYXBwZXIoXG4gICAgICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFtZW5kZW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBhbWVuZGVtZW50T3JpZ2luYWwuYW1lbmRlbWVudFxuICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBhbWVuZGVtZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvY3VtZW50c0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9jdW1lbnRzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9jdW1lbnRzRGlyKVxuICAgICAgY29uc3QgZG9zc2llcnNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvc3NpZXJzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9zc2llcnNEaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC50ZXh0ZXNMZWdpc2xhdGlmc1xuICAgICAgICAgICAgICAuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgZG9zc2llclBhcmxlbWVudGFpcmUgfSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0XG4gICAgICAgICAgICAgIC5kb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXIpIHtcbiAgICAgICAgICAgICAgd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJkb2N1bWVudFwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmRvY3VtZW50U3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImRvY3VtZW50XCIgZmlsZTogJHtkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0RvY3VtZW50KGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkb2N1bWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBkb2N1bWVudE9yaWdpbmFsLmRvY3VtZW50XG4gICAgICAgICAgICAgIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9zc2llclBhcmxlbWVudGFpcmVcIiBmaWxlOiAke2Rvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoXG4gICAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmUgPVxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWwuZG9zc2llclBhcmxlbWVudGFpcmVcbiAgICAgICAgICAgICAgd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAobGV0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbnMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygb3JpZ2luYWxEYXRhLnNjcnV0aW5zLnNjcnV0aW4pIHtcbiAgICAgICAgICAgICAgd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgc2NydXRpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnNjcnV0aW5TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwic2NydXRpblwiIGZpbGU6ICR7c2NydXRpbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGluV3JhcHBlcihzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluID0gc2NydXRpbk9yaWdpbmFsLnNjcnV0aW5cbiAgICAgICAgICAgICAgd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgc2NydXRpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUXVlc3Rpb25zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnF1ZXN0aW9ucykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uU3BsaXRQYXRoW3F1ZXN0aW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghcXVlc3Rpb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5xdWVzdGlvblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJxdWVzdGlvblwiIGZpbGU6ICR7cXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBRdWVzdGlvbnNSYXdDb252ZXJ0LnRvUXVlc3Rpb25XcmFwcGVyKHF1ZXN0aW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShxdWVzdGlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb24gPSBxdWVzdGlvbk9yaWdpbmFsLnF1ZXN0aW9uXG4gICAgICAgICAgICAgIHdyaXRlUXVlc3Rpb25zUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgcXVlc3Rpb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcIi54bWxcIilcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoW1xuICAgICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGgubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgaWYgKCFjb21wdGVSZW5kdVNlYW5jZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImNvbXB0ZVJlbmR1U2VhbmNlXCIgZmlsZTogJHtjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBDb21wdGVzUmVuZHVzUmF3Q29udmVydC50b0NvbXB0ZVJlbmR1V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlID0gY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbC5jb21wdGVSZW5kdVxuICAgICAgICAgICAgICB3cml0ZUNvbXB0ZXNSZW5kdXNSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGV4aXRDb2RlXG59XG5cbmZ1bmN0aW9uIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgZGF0YXNldFJlb3JnYW5pemVkRGlyOiBzdHJpbmcsXG4gIGFtZW5kZW1lbnQ6IHtcbiAgICB1aWQ6IHN0cmluZ1xuICAgIHRleHRlTGVnaXNsYXRpZlJlZjogc3RyaW5nXG4gIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgdWlkVGV4dGVMZWdpc2xhdGlmID0gYW1lbmRlbWVudC50ZXh0ZUxlZ2lzbGF0aWZSZWZcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHVpZFRleHRlTGVnaXNsYXRpZiwgdW5kZWZpbmVkKVxuICBjb25zdCB0ZXh0ZUxlZ2lzbGF0aWZEaXIgPSBwYXRoLmpvaW4oXG4gICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgIHVpZFRleHRlTGVnaXNsYXRpZixcbiAgKVxuICBmcy5lbnN1cmVEaXJTeW5jKHRleHRlTGVnaXNsYXRpZkRpcilcbiAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgdGV4dGVMZWdpc2xhdGlmRGlyLFxuICAgIGFtZW5kZW1lbnQudWlkICsgXCIuanNvblwiLFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudCwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihcbiAgZG9jdW1lbnRzRGlyOiBzdHJpbmcsXG4gIGRvY3VtZW50OiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0RpciwgZG9jdW1lbnQudWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnQsIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICBkb3NzaWVyc0Rpcjogc3RyaW5nLFxuICBkb3NzaWVyUGFybGVtZW50YWlyZTogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgICBkb3NzaWVyc0RpcixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZS51aWQsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICBgJHtiYXNlbmFtZX0uanNvbmAsXG4gICAgSlNPTi5zdHJpbmdpZnkoZG9zc2llclBhcmxlbWVudGFpcmUsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihcbiAgcmV1bmlvbnNEaXI6IHN0cmluZyxcbiAgcmV1bmlvbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyLCByZXVuaW9uLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHJldW5pb24sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oXG4gIHNjcnV0aW5zRGlyOiBzdHJpbmcsXG4gIHNjcnV0aW46IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tU2NydXRpblVpZChzY3J1dGluc0Rpciwgc2NydXRpbi51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShzY3J1dGluLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVRdWVzdGlvbnNSZW9yZ2FuaXplZEpzb24oXG4gIHF1ZXN0aW9uc0Rpcjogc3RyaW5nLFxuICBxdWVzdGlvbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHF1ZXN0aW9uVWlkUmVnZXg6IFJlZ0V4cCA9IC9eUUFOKFJcXGQrKShMXFxkKylRKEV8R3xPU0QpKFxcZCspJC9cbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVVpZChxdWVzdGlvbnNEaXIsIHF1ZXN0aW9uLnVpZCwgcXVlc3Rpb25VaWRSZWdleClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHF1ZXN0aW9uLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVDb21wdGVzUmVuZHVzUmVvcmdhbml6ZWRKc29uKFxuICBjb21wdGVzUmVuZHVzRGlyOiBzdHJpbmcsXG4gIGNvbXB0ZVJlbmR1OiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgY29tcHRlUmVuZHVVaWRSZWdleDogUmVnRXhwID1cbiAgICAvXkNSU0FOKFJcXGQrKShMXFxkKykoU1xcZCspKE98RSkoXFxkKykoTlxcZCspJC9cbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVVpZChcbiAgICBjb21wdGVzUmVuZHVzRGlyLFxuICAgIGNvbXB0ZVJlbmR1LnVpZCxcbiAgICBjb21wdGVSZW5kdVVpZFJlZ2V4LFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShjb21wdGVSZW5kdSwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHByb2Nlc3MuYXJndlsxXS5lbmRzV2l0aChcInJlb3JnYW5pemVfZGF0YS50c1wiKSkge1xuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuICBwcm9jZXNzLmV4aXQocmVvcmdhbml6ZURhdGEob3B0aW9ucykpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE1BQU0sTUFBTSxRQUFRO0FBQzNCLFNBQVNDLFFBQVEsUUFBUSxlQUFlO0FBQ3hDLE9BQU9DLGVBQWUsTUFBTSxtQkFBbUI7QUFDL0MsT0FBT0MsRUFBRSxNQUFNLFVBQVU7QUFDekIsT0FBT0MsSUFBSSxNQUFNLE1BQU07QUFBQSxTQUdyQkMsUUFBUSxFQUNSQyxnQkFBZ0IsRUFDaEJDLGVBQWUsRUFDZkMsbUJBQW1CO0FBQUEsU0FFWkMsa0JBQWtCLEVBQUVDLGlCQUFpQjtBQUFBLE9BQ3ZDLEtBQUtDLEdBQUc7QUFBQSxTQUNOQyxPQUFPO0FBQUEsU0FFZEMsbUJBQW1CLEVBQ25CQywrQkFBK0IsRUFDL0JDLGtCQUFrQixFQUNsQkMsa0JBQWtCLEVBQ2xCQyxXQUFXO0FBQUEsU0FFSkMsT0FBTyxJQUFJQywwQkFBMEI7QUFBQSxTQUNyQ0QsT0FBTyxJQUFJRSxpQkFBaUI7QUFBQSxTQUM1QkYsT0FBTyxJQUFJRyxxQkFBcUI7QUFBQSxTQUNoQ0gsT0FBTyxJQUFJSSw2QkFBNkI7QUFBQSxTQUN4Q0osT0FBTyxJQUFJSyxrQkFBa0I7QUFBQSxTQUM3QkwsT0FBTyxJQUFJTSxtQkFBbUI7QUFBQSxTQUM5Qk4sT0FBTyxJQUFJTyx1QkFBdUI7QUFFM0MsTUFBTUMsa0JBQWtCLEdBQUcsQ0FDekI7RUFDRUMsS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFFLCtEQUErRDtFQUNyRUMsSUFBSSxFQUFFLE9BQU87RUFDYkMsSUFBSSxFQUFFQztBQUNSLENBQUMsRUFDRDtFQUNFSixLQUFLLEVBQUUsR0FBRztFQUNWQyxJQUFJLEVBQUUsb0JBQW9CO0VBQzFCQyxJQUFJLEVBQUUsUUFBUTtFQUNkQyxJQUFJLEVBQUVFO0FBQ1IsQ0FBQyxFQUNEO0VBQ0VMLEtBQUssRUFBRSxHQUFHO0VBQ1ZNLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQztFQUNyQkwsSUFBSSxFQUFFLHNDQUFzQztFQUM1Q00sUUFBUSxFQUFFLElBQUk7RUFDZEwsSUFBSSxFQUFFLFlBQVk7RUFDbEJDLElBQUksRUFBRUM7QUFDUixDQUFDLEVBQ0Q7RUFDRUosS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFFLGtGQUFrRjtFQUN4Rk0sUUFBUSxFQUFFLElBQUk7RUFDZEwsSUFBSSxFQUFFLGFBQWE7RUFDbkJDLElBQUksRUFBRUs7QUFDUixDQUFDLEVBQ0Q7RUFDRVIsS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFFLHFDQUFxQztFQUMzQ0MsSUFBSSxFQUFFLE1BQU07RUFDWkMsSUFBSSxFQUFFRTtBQUNSLENBQUMsRUFDRDtFQUNFTCxLQUFLLEVBQUUsR0FBRztFQUNWQyxJQUFJLEVBQUUsNkJBQTZCO0VBQ25DTSxRQUFRLEVBQUUsSUFBSTtFQUNkTCxJQUFJLEVBQUUsUUFBUTtFQUNkQyxJQUFJLEVBQUVDO0FBQ1IsQ0FBQyxFQUNEO0VBQ0VKLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSxvQkFBb0I7RUFDMUJDLElBQUksRUFBRSxRQUFRO0VBQ2RDLElBQUksRUFBRUU7QUFDUixDQUFDLEVBQ0Q7RUFDRUwsS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFFLHlCQUF5QjtFQUMvQkMsSUFBSSxFQUFFLGlCQUFpQjtFQUN2QkMsSUFBSSxFQUFFRTtBQUNSLENBQUMsRUFDRDtFQUNFTCxLQUFLLEVBQUUsR0FBRztFQUNWQyxJQUFJLEVBQUUsY0FBYztFQUNwQkMsSUFBSSxFQUFFLFNBQVM7RUFDZkMsSUFBSSxFQUFFRTtBQUNSLENBQUMsRUFDRDtFQUNFSSxhQUFhLEVBQUUsSUFBSTtFQUNuQlIsSUFBSSxFQUFFLGdEQUFnRDtFQUN0REMsSUFBSSxFQUFFLFNBQVM7RUFDZkMsSUFBSSxFQUFFQztBQUNSLENBQUMsQ0FDRjtBQUVELFNBQVNNLGNBQWNBLENBQUNDLE9BQVksRUFBVTtFQUM1QyxNQUFNQyxPQUFPLEdBQUdELE9BQU8sQ0FBQ0MsT0FBTztFQUMvQkMsSUFBSSxDQUFDQyxTQUFTLENBQUNDLE1BQU0sR0FBR2hDLGlCQUFpQjtFQUV6QyxJQUFJaUMsUUFBUSxHQUFHLEVBQUUsRUFBQztFQUNsQixNQUFNQyxXQUFXLEdBQUdOLE9BQU8sQ0FBQ08sS0FBSyxHQUM3QlAsT0FBTyxDQUFDTyxLQUFLLENBQUNDLElBQUksQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQ3hDQyxTQUFTO0VBQ2IsTUFBTUMsZUFBZSxHQUFHLENBQUNYLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztFQUVuREEsT0FBTyxDQUFDWSxVQUFVLENBQUNDLEdBQUcsQ0FBRUMsV0FBbUIsSUFDekNwRCxNQUFNLENBQUNxRCxjQUFjLENBQ2xCOUMsZUFBZSxDQUNkNkMsV0FBVyxDQUNaLEVBQ0RKLFNBQVMsRUFDUiw0QkFBMkJJLFdBQVksRUFDMUMsQ0FDRixDQUFDO0VBQ0QsTUFBTUUsZUFBZSxHQUFHaEIsT0FBTyxDQUFDWSxVQUFVLENBQUNLLE1BQU0sQ0FDL0MsQ0FBQ0QsZUFBZ0MsRUFBRUYsV0FBbUIsS0FDcERFLGVBQWUsR0FDZC9DLGVBQWUsQ0FDZDZDLFdBQVcsQ0FDWixFQUNIN0MsZUFBZSxDQUFDaUQsSUFDbEIsQ0FBQztFQUVELElBQUlDLGNBQWMsR0FBR2pELG1CQUFtQixDQUFDSCxRQUFRLEVBQUVpQyxPQUFPLENBQUNvQixXQUFXLENBQUM7RUFFdkUsSUFBSUosZUFBZSxHQUFHL0MsZUFBZSxDQUFDb0QsZ0JBQWdCLEVBQUU7SUFDdEQsS0FBSyxNQUFNQyxPQUFPLElBQUlILGNBQWMsQ0FBQ0ksZ0JBQWdCLEVBQUU7TUFDckQsTUFBTUMsK0JBQXVDLEdBQUcxRCxJQUFJLENBQUMyRCxJQUFJLENBQ3ZEeEIsT0FBTyxFQUNQcUIsT0FBTyxDQUFDSSxRQUNWLENBQUM7TUFDRCxJQUFJLENBQUMxQixPQUFPLENBQUMyQixNQUFNLEVBQUU7UUFDbkJDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFFLGdCQUFlTCwrQkFBZ0MsRUFBQyxDQUFDO01BQ2hFO01BRUEsTUFBTVYsV0FBVyxHQUFHaEQsSUFBSSxDQUFDZ0UsUUFBUSxDQUMvQk4sK0JBQStCLEVBQy9CLE9BQ0YsQ0FBQztNQUNELElBQUlsQixXQUFXLEtBQUtJLFNBQVMsRUFBRTtRQUM3Qi9DLFFBQVEsQ0FBRSxhQUFZMkMsV0FBWSxJQUFHUSxXQUFZLE1BQUssRUFBRTtVQUN0RGlCLEdBQUcsRUFBRTlCLE9BQU87VUFDWitCLEdBQUcsRUFBRUMsT0FBTyxDQUFDRCxHQUFHO1VBQ2hCRSxRQUFRLEVBQUUsT0FBTztVQUNqQkMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNO1FBQ3BDLENBQUMsQ0FBQztNQUNKO01BQ0EsTUFBTUMscUJBQXFCLEdBQUd0RSxJQUFJLENBQUMyRCxJQUFJLENBQUN4QixPQUFPLEVBQUVhLFdBQVcsQ0FBQztNQUM3RCxJQUFJZCxPQUFPLENBQUNxQyxJQUFJLEVBQUU7UUFDaEIxRSxRQUFRLENBQUUsZ0NBQStCLEVBQUU7VUFDekNvRSxHQUFHLEVBQUVLLHFCQUFxQjtVQUMxQkosR0FBRyxFQUFFQyxPQUFPLENBQUNELEdBQUc7VUFDaEJFLFFBQVEsRUFBRSxPQUFPO1VBQ2pCQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU07UUFDcEMsQ0FBQyxDQUFDO1FBQ0Z4RSxRQUFRLENBQUUsbUJBQWtCLEVBQUU7VUFDNUJvRSxHQUFHLEVBQUVLLHFCQUFxQjtVQUMxQkosR0FBRyxFQUFFQyxPQUFPLENBQUNELEdBQUc7VUFDaEJFLFFBQVEsRUFBRSxPQUFPO1VBQ2pCQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU07UUFDcEMsQ0FBQyxDQUFDO01BQ0o7TUFFQXRFLEVBQUUsQ0FBQ3lFLGFBQWEsQ0FBQ0YscUJBQXFCLENBQUM7TUFDdkMsS0FBSyxNQUFNVixRQUFRLElBQUk3RCxFQUFFLENBQUMwRSxXQUFXLENBQUNILHFCQUFxQixDQUFDLEVBQUU7UUFDNUQsSUFBSVYsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtVQUN2QjtRQUNGO1FBQ0E3RCxFQUFFLENBQUMyRSxVQUFVLENBQUMxRSxJQUFJLENBQUMyRCxJQUFJLENBQUNXLHFCQUFxQixFQUFFVixRQUFRLENBQUMsQ0FBQztNQUMzRDtNQUNBLE1BQU1lLHFCQUFxQixHQUFHM0UsSUFBSSxDQUFDMkQsSUFBSSxDQUFDVyxxQkFBcUIsRUFBRSxTQUFTLENBQUM7TUFDekV2RSxFQUFFLENBQUM2RSxTQUFTLENBQUNELHFCQUFxQixDQUFDO01BQ25DLE1BQU1FLHFCQUFxQixHQUFHN0UsSUFBSSxDQUFDMkQsSUFBSSxDQUFDVyxxQkFBcUIsRUFBRSxTQUFTLENBQUM7TUFDekV2RSxFQUFFLENBQUM2RSxTQUFTLENBQUNDLHFCQUFxQixDQUFDO01BRW5DLFFBQVFyQixPQUFPLENBQUNzQixTQUFTO1FBQ3ZCLEtBQUs1RSxnQkFBZ0IsQ0FBQzZFLFVBQVU7VUFDOUI7WUFDRSxNQUFNQyxZQUFvQixHQUFHakYsRUFBRSxDQUFDa0YsWUFBWSxDQUMxQ3ZCLCtCQUErQixFQUMvQjtjQUNFVSxRQUFRLEVBQUU7WUFDWixDQUNGLENBQUM7WUFDRCxNQUFNYyxZQUFpQixHQUFHckMsZUFBZSxHQUNyQzlCLDBCQUEwQixDQUFDb0Usa0JBQWtCLENBQUNILFlBQVksQ0FBQyxHQUMzREksSUFBSSxDQUFDQyxLQUFLLENBQUNMLFlBQVksQ0FBQztZQUU1QixLQUFLLE1BQU1NLE1BQU0sSUFBSUosWUFBWSxDQUFDSyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0YsTUFBTSxFQUFFO2NBQ3ZELE1BQU1HLHVCQUErQixHQUFHekYsSUFBSSxDQUFDMkQsSUFBSSxDQUMvQ2dCLHFCQUFxQixFQUNyQlcsTUFBTSxDQUFDSSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FDeEIsQ0FBQztjQUNEM0YsRUFBRSxDQUFDNEYsYUFBYSxDQUNkRix1QkFBdUIsRUFDdkJMLElBQUksQ0FBQ1EsU0FBUyxDQUFDTixNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUMvQjtnQkFDRWxCLFFBQVEsRUFBRTtjQUNaLENBQ0YsQ0FBQztZQUNIO1lBRUEsS0FBSyxNQUFNeUIsTUFBTSxJQUFJWCxZQUFZLENBQUNLLE1BQU0sQ0FBQ08sT0FBTyxDQUFDRCxNQUFNLEVBQUU7Y0FDdkQsTUFBTUosdUJBQStCLEdBQUd6RixJQUFJLENBQUMyRCxJQUFJLENBQy9Da0IscUJBQXFCLEVBQ3JCZ0IsTUFBTSxDQUFDSCxHQUFHLEdBQUcsT0FDZixDQUFDO2NBQ0QzRixFQUFFLENBQUM0RixhQUFhLENBQ2RGLHVCQUF1QixFQUN2QkwsSUFBSSxDQUFDUSxTQUFTLENBQUNDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQy9CO2dCQUNFekIsUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO1lBQ0g7VUFDRjtVQUNBO1FBQ0YsS0FBS2xFLGdCQUFnQixDQUFDNkYsY0FBYztVQUNsQztZQUNFLE1BQU1DLGtCQUVMLEdBQUcsQ0FBQyxDQUFDO1lBQ04sSUFDRWpHLEVBQUUsQ0FBQ2tHLFVBQVUsQ0FDWGpHLElBQUksQ0FBQzJELElBQUksQ0FBQ0QsK0JBQStCLEVBQUUsUUFBUSxDQUNyRCxDQUFDLEVBQ0Q7Y0FDQSxLQUFLLE1BQU13QyxlQUFlLElBQUkxRixPQUFPLENBQ25Da0QsK0JBQStCLEVBQy9CLENBQUMsUUFBUSxDQUNYLENBQUMsRUFBRTtnQkFDRCxNQUFNeUMsY0FBYyxHQUNsQkQsZUFBZSxDQUFDQSxlQUFlLENBQUNFLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQ0QsY0FBYyxDQUFDRSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7a0JBQ3JDO2dCQUNGO2dCQUNBLE1BQU1DLHNCQUFzQixHQUFHdEcsSUFBSSxDQUFDMkQsSUFBSSxDQUN0Q0QsK0JBQStCLEVBQy9CLEdBQUd3QyxlQUNMLENBQUM7Z0JBQ0QsSUFBSWhFLE9BQU8sQ0FBQ3FFLE9BQU8sRUFBRTtrQkFDbkJ6QyxPQUFPLENBQUNDLEdBQUcsQ0FDUiw0QkFBMkJ1QyxzQkFBdUIsR0FDckQsQ0FBQztnQkFDSDtnQkFDQSxNQUFNRSxrQkFBMEIsR0FBR3pHLEVBQUUsQ0FBQ2tGLFlBQVksQ0FDaERxQixzQkFBc0IsRUFDdEI7a0JBQ0VsQyxRQUFRLEVBQUU7Z0JBQ1osQ0FDRixDQUFDO2dCQUNELE1BQU1xQyxjQUFtQixHQUFHNUQsZUFBZSxHQUN2QzlCLDBCQUEwQixDQUFDMkYsUUFBUSxDQUFDRixrQkFBa0IsQ0FBQyxHQUN2RHBCLElBQUksQ0FBQ0MsS0FBSyxDQUFDbUIsa0JBQWtCLENBQUM7Z0JBQ2xDLE1BQU1HLE1BQU0sR0FBR0YsY0FBYyxDQUFDRSxNQUFNO2dCQUNwQyxJQUFJQyxPQUFPLEdBQUdaLGtCQUFrQixDQUFDVyxNQUFNLENBQUNFLFNBQVMsQ0FBQztnQkFDbEQsSUFBSUQsT0FBTyxLQUFLaEUsU0FBUyxFQUFFO2tCQUN6QmdFLE9BQU8sR0FBR1osa0JBQWtCLENBQUNXLE1BQU0sQ0FBQ0UsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDckQ7Z0JBQ0FELE9BQU8sQ0FBQ0UsSUFBSSxDQUFDSCxNQUFNLENBQUM7Y0FDdEI7Y0FFQSxLQUFLLE1BQU1DLE9BQU8sSUFBSUcsTUFBTSxDQUFDQyxNQUFNLENBQUNoQixrQkFBa0IsQ0FBQyxFQUFFO2dCQUN2RFksT0FBTyxDQUFDSyxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQ2hCRCxDQUFDLENBQUN4QixHQUFHLENBQUNVLE1BQU0sS0FBS2UsQ0FBQyxDQUFDekIsR0FBRyxDQUFDVSxNQUFNLEdBQ3pCYyxDQUFDLENBQUN4QixHQUFHLENBQUMwQixhQUFhLENBQUNELENBQUMsQ0FBQ3pCLEdBQUcsQ0FBQyxHQUMxQndCLENBQUMsQ0FBQ3hCLEdBQUcsQ0FBQ1UsTUFBTSxHQUFHZSxDQUFDLENBQUN6QixHQUFHLENBQUNVLE1BQzNCLENBQUM7Y0FDSDtZQUNGO1lBRUEsTUFBTWlCLGtCQUVMLEdBQUcsQ0FBQyxDQUFDO1lBQ04sSUFDRXRILEVBQUUsQ0FBQ2tHLFVBQVUsQ0FDWGpHLElBQUksQ0FBQzJELElBQUksQ0FBQ0QsK0JBQStCLEVBQUUsUUFBUSxDQUNyRCxDQUFDLEVBQ0Q7Y0FDQSxLQUFLLE1BQU00RCxlQUFlLElBQUk5RyxPQUFPLENBQ25Da0QsK0JBQStCLEVBQy9CLENBQUMsUUFBUSxDQUNYLENBQUMsRUFBRTtnQkFDRCxNQUFNNkQsY0FBYyxHQUNsQkQsZUFBZSxDQUFDQSxlQUFlLENBQUNsQixNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUNtQixjQUFjLENBQUNsQixRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7a0JBQ3JDO2dCQUNGO2dCQUNBLE1BQU1tQixzQkFBc0IsR0FBR3hILElBQUksQ0FBQzJELElBQUksQ0FDdENELCtCQUErQixFQUMvQixHQUFHNEQsZUFDTCxDQUFDO2dCQUNELElBQUlwRixPQUFPLENBQUNxRSxPQUFPLEVBQUU7a0JBQ25CekMsT0FBTyxDQUFDQyxHQUFHLENBQ1IsNEJBQTJCeUQsc0JBQXVCLEdBQ3JELENBQUM7Z0JBQ0g7Z0JBQ0EsTUFBTUMsa0JBQTBCLEdBQUcxSCxFQUFFLENBQUNrRixZQUFZLENBQ2hEdUMsc0JBQXNCLEVBQ3RCO2tCQUNFcEQsUUFBUSxFQUFFO2dCQUNaLENBQ0YsQ0FBQztnQkFDRCxNQUFNc0QsY0FBbUIsR0FBRzdFLGVBQWUsR0FDdkM5QiwwQkFBMEIsQ0FBQzRHLGVBQWUsQ0FDeENGLGtCQUNGLENBQUMsR0FDRHJDLElBQUksQ0FBQ0MsS0FBSyxDQUFDb0Msa0JBQWtCLENBQUM7Z0JBQ2xDLE1BQU1HLE1BQU0sR0FBR0YsY0FBYyxDQUFDRSxNQUFNO2dCQUNwQyxJQUFJQyxPQUFPLEdBQUdSLGtCQUFrQixDQUFDTyxNQUFNLENBQUNmLFNBQVMsQ0FBQztnQkFDbEQsSUFBSWdCLE9BQU8sS0FBS2pGLFNBQVMsRUFBRTtrQkFDekJpRixPQUFPLEdBQUdSLGtCQUFrQixDQUFDTyxNQUFNLENBQUNmLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JEO2dCQUNBZ0IsT0FBTyxDQUFDZixJQUFJLENBQUNjLE1BQU0sQ0FBQztjQUN0QjtjQUVBLEtBQUssTUFBTUMsT0FBTyxJQUFJZCxNQUFNLENBQUNDLE1BQU0sQ0FBQ0ssa0JBQWtCLENBQUMsRUFBRTtnQkFDdkRRLE9BQU8sQ0FBQ1osSUFBSSxDQUFDLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxLQUNoQkQsQ0FBQyxDQUFDeEIsR0FBRyxDQUFDVSxNQUFNLEtBQUtlLENBQUMsQ0FBQ3pCLEdBQUcsQ0FBQ1UsTUFBTSxHQUN6QmMsQ0FBQyxDQUFDeEIsR0FBRyxDQUFDMEIsYUFBYSxDQUFDRCxDQUFDLENBQUN6QixHQUFHLENBQUMsR0FDMUJ3QixDQUFDLENBQUN4QixHQUFHLENBQUNVLE1BQU0sR0FBR2UsQ0FBQyxDQUFDekIsR0FBRyxDQUFDVSxNQUMzQixDQUFDO2NBQ0g7WUFDRjtZQUVBLEtBQUssTUFBTTBCLGVBQWUsSUFBSXRILE9BQU8sQ0FDbkNrRCwrQkFBK0IsRUFDL0IsQ0FBQyxRQUFRLENBQ1gsQ0FBQyxFQUFFO2NBQ0QsTUFBTXFFLGNBQWMsR0FBR0QsZUFBZSxDQUFDQSxlQUFlLENBQUMxQixNQUFNLEdBQUcsQ0FBQyxDQUFDO2NBQ2xFLElBQUksQ0FBQzJCLGNBQWMsQ0FBQzFCLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDckM7Y0FDRjtjQUNBLE1BQU0yQixzQkFBc0IsR0FBR2hJLElBQUksQ0FBQzJELElBQUksQ0FDdENELCtCQUErQixFQUMvQixHQUFHb0UsZUFDTCxDQUFDO2NBQ0QsSUFBSTVGLE9BQU8sQ0FBQ3FFLE9BQU8sRUFBRTtnQkFDbkJ6QyxPQUFPLENBQUNDLEdBQUcsQ0FDUixpQ0FBZ0NpRSxzQkFBdUIsR0FDMUQsQ0FBQztjQUNIO2NBQ0EsTUFBTUMsa0JBQTBCLEdBQUdsSSxFQUFFLENBQUNrRixZQUFZLENBQ2hEK0Msc0JBQXNCLEVBQ3RCO2dCQUNFNUQsUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO2NBQ0QsTUFBTThELGNBQW1CLEdBQUdyRixlQUFlLEdBQ3ZDOUIsMEJBQTBCLENBQUNvSCxRQUFRLENBQUNGLGtCQUFrQixDQUFDLEdBQ3ZEN0MsSUFBSSxDQUFDQyxLQUFLLENBQUM0QyxrQkFBa0IsQ0FBQztjQUNsQyxNQUFNM0MsTUFBTSxHQUFHNEMsY0FBYyxDQUFDNUMsTUFBTTtjQUNwQyxNQUFNOEMsU0FBUyxHQUFHOUMsTUFBTSxDQUFDSSxHQUFHLENBQUMsT0FBTyxDQUFDO2NBQ3JDLE1BQU1rQixPQUFPLEdBQUdaLGtCQUFrQixDQUFDb0MsU0FBUyxDQUFDO2NBQzdDLElBQUl4QixPQUFPLEtBQUtoRSxTQUFTLEVBQUU7Z0JBQ3pCaEQsTUFBTSxDQUFDeUksV0FBVyxDQUFDL0MsTUFBTSxDQUFDc0IsT0FBTyxFQUFFaEUsU0FBUyxDQUFDO2dCQUM3QzBDLE1BQU0sQ0FBQ3NCLE9BQU8sR0FBRztrQkFBRUQsTUFBTSxFQUFFQztnQkFBUSxDQUFDO2NBQ3RDO2NBQ0EsTUFBTWlCLE9BQU8sR0FBR1Isa0JBQWtCLENBQUNlLFNBQVMsQ0FBQztjQUM3QyxJQUFJUCxPQUFPLEtBQUtqRixTQUFTLEVBQUU7Z0JBQ3pCaEQsTUFBTSxDQUFDeUksV0FBVyxDQUFDL0MsTUFBTSxDQUFDdUMsT0FBTyxFQUFFakYsU0FBUyxDQUFDO2dCQUM3QzBDLE1BQU0sQ0FBQ3VDLE9BQU8sR0FBRztrQkFBRUQsTUFBTSxFQUFFQztnQkFBUSxDQUFDO2NBQ3RDO2NBQ0EsTUFBTVMsNkJBQXFDLEdBQUd0SSxJQUFJLENBQUMyRCxJQUFJLENBQ3JEZ0IscUJBQXFCLEVBQ3JCeUQsU0FBUyxHQUFHLE9BQ2QsQ0FBQztjQUNEckksRUFBRSxDQUFDNEYsYUFBYSxDQUNkMkMsNkJBQTZCLEVBQzdCbEQsSUFBSSxDQUFDUSxTQUFTLENBQUNOLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQy9CO2dCQUNFbEIsUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO1lBQ0g7WUFFQSxLQUFLLE1BQU1tRSxlQUFlLElBQUkvSCxPQUFPLENBQ25Da0QsK0JBQStCLEVBQy9CLENBQUMsUUFBUSxDQUNYLENBQUMsRUFBRTtjQUNELE1BQU04RSxjQUFjLEdBQUdELGVBQWUsQ0FBQ0EsZUFBZSxDQUFDbkMsTUFBTSxHQUFHLENBQUMsQ0FBQztjQUNsRSxJQUFJLENBQUNvQyxjQUFjLENBQUNuQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3JDO2NBQ0Y7Y0FDQSxNQUFNb0Msc0JBQXNCLEdBQUd6SSxJQUFJLENBQUMyRCxJQUFJLENBQ3RDRCwrQkFBK0IsRUFDL0IsR0FBRzZFLGVBQ0wsQ0FBQztjQUNELElBQUlyRyxPQUFPLENBQUNxRSxPQUFPLEVBQUU7Z0JBQ25CekMsT0FBTyxDQUFDQyxHQUFHLENBQ1IsaUNBQWdDMEUsc0JBQXVCLEdBQzFELENBQUM7Y0FDSDtjQUNBLE1BQU1DLGtCQUEwQixHQUFHM0ksRUFBRSxDQUFDa0YsWUFBWSxDQUNoRHdELHNCQUFzQixFQUN0QjtnQkFDRXJFLFFBQVEsRUFBRTtjQUNaLENBQ0YsQ0FBQztjQUNELE1BQU11RSxjQUFtQixHQUFHOUYsZUFBZSxHQUN2QzlCLDBCQUEwQixDQUFDNkgsUUFBUSxDQUFDRixrQkFBa0IsQ0FBQyxHQUN2RHRELElBQUksQ0FBQ0MsS0FBSyxDQUFDcUQsa0JBQWtCLENBQUM7Y0FDbEMsTUFBTTdDLE1BQU0sR0FBRzhDLGNBQWMsQ0FBQzlDLE1BQU07Y0FDcEMsTUFBTWdELDZCQUFxQyxHQUFHN0ksSUFBSSxDQUFDMkQsSUFBSSxDQUNyRGtCLHFCQUFxQixFQUNyQmdCLE1BQU0sQ0FBQ0gsR0FBRyxHQUFHLE9BQ2YsQ0FBQztjQUNEM0YsRUFBRSxDQUFDNEYsYUFBYSxDQUNka0QsNkJBQTZCLEVBQzdCekQsSUFBSSxDQUFDUSxTQUFTLENBQUNDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQy9CO2dCQUNFekIsUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO1lBQ0g7VUFDRjtVQUNBO01BQ0o7TUFFQSxJQUFJbEMsT0FBTyxDQUFDNEcsTUFBTSxFQUFFO1FBQ2xCLE1BQU1DLFNBQVMsR0FBR3hJLEdBQUcsQ0FBQ3lJLGFBQWEsQ0FDakMxRSxxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCcEMsT0FBTyxDQUFDK0csTUFDVixDQUFDO1FBQ0QsSUFDRzFHLFFBQVEsS0FBSyxFQUFFLElBQUl3RyxTQUFTLEtBQUssRUFBRSxJQUNuQ3hHLFFBQVEsS0FBSyxDQUFDLElBQUl3RyxTQUFTLEtBQUssQ0FBQyxJQUFJQSxTQUFTLEtBQUssRUFBRyxFQUN2RDtVQUNBeEcsUUFBUSxHQUFHd0csU0FBUztRQUN0QjtNQUNGO0lBQ0Y7RUFDRjtFQUVBLElBQUk3RixlQUFlLEdBQUcvQyxlQUFlLENBQUMrSSxPQUFPLEVBQUU7SUFDN0MsS0FBSyxNQUFNMUYsT0FBTyxJQUFJSCxjQUFjLENBQUM4RixPQUFPLEVBQUU7TUFDNUMsTUFBTXpGLCtCQUF1QyxHQUFHMUQsSUFBSSxDQUFDMkQsSUFBSSxDQUN2RHhCLE9BQU8sRUFDUHFCLE9BQU8sQ0FBQ0ksUUFDVixDQUFDO01BQ0QsSUFBSSxDQUFDMUIsT0FBTyxDQUFDMkIsTUFBTSxFQUFFO1FBQ25CQyxPQUFPLENBQUNDLEdBQUcsQ0FBRSxnQkFBZUwsK0JBQWdDLEVBQUMsQ0FBQztNQUNoRTtNQUVBLE1BQU1WLFdBQVcsR0FBR2hELElBQUksQ0FBQ2dFLFFBQVEsQ0FDL0JOLCtCQUErQixFQUMvQixPQUNGLENBQUM7TUFDRCxJQUFJbEIsV0FBVyxLQUFLSSxTQUFTLEVBQUU7UUFDN0IvQyxRQUFRLENBQUUsYUFBWTJDLFdBQVksSUFBR1EsV0FBWSxNQUFLLEVBQUU7VUFDdERpQixHQUFHLEVBQUU5QixPQUFPO1VBQ1orQixHQUFHLEVBQUVDLE9BQU8sQ0FBQ0QsR0FBRztVQUNoQkUsUUFBUSxFQUFFLE9BQU87VUFDakJDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTTtRQUNwQyxDQUFDLENBQUM7TUFDSjtNQUVBLE1BQU1DLHFCQUFxQixHQUFHdEUsSUFBSSxDQUFDMkQsSUFBSSxDQUFDeEIsT0FBTyxFQUFFYSxXQUFXLENBQUM7TUFDN0RqRCxFQUFFLENBQUN5RSxhQUFhLENBQUNGLHFCQUFxQixDQUFDO01BQ3ZDLEtBQUssTUFBTVYsUUFBUSxJQUFJN0QsRUFBRSxDQUFDMEUsV0FBVyxDQUFDSCxxQkFBcUIsQ0FBQyxFQUFFO1FBQzVELElBQUlWLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7VUFDdkI7UUFDRjtRQUNBN0QsRUFBRSxDQUFDMkUsVUFBVSxDQUFDMUUsSUFBSSxDQUFDMkQsSUFBSSxDQUFDVyxxQkFBcUIsRUFBRVYsUUFBUSxDQUFDLENBQUM7TUFDM0Q7TUFFQSxRQUFRSixPQUFPLENBQUNzQixTQUFTO1FBQ3ZCLEtBQUs1RSxnQkFBZ0IsQ0FBQzZFLFVBQVU7VUFDOUI7WUFDRSxNQUFNQyxZQUFvQixHQUFHakYsRUFBRSxDQUFDa0YsWUFBWSxDQUMxQ3ZCLCtCQUErQixFQUMvQjtjQUNFVSxRQUFRLEVBQUU7WUFDWixDQUNGLENBQUM7WUFDRCxNQUFNYyxZQUFpQixHQUFHckMsZUFBZSxHQUNyQzdCLGlCQUFpQixDQUFDb0ksU0FBUyxDQUFDcEUsWUFBWSxDQUFDLEdBQ3pDSSxJQUFJLENBQUNDLEtBQUssQ0FBQ0wsWUFBWSxDQUFDO1lBRTVCLEtBQUssTUFBTXFFLE9BQU8sSUFBSW5FLFlBQVksQ0FBQ29FLFFBQVEsQ0FBQ0QsT0FBTyxFQUFFO2NBQ25ERSwyQkFBMkIsQ0FBQ2pGLHFCQUFxQixFQUFFK0UsT0FBTyxDQUFDO1lBQzdEO1VBQ0Y7VUFDQTtRQUNGLEtBQUtuSixnQkFBZ0IsQ0FBQzZGLGNBQWM7VUFDbEM7WUFDRSxLQUFLLE1BQU15RCxnQkFBZ0IsSUFBSWhKLE9BQU8sQ0FDcENrRCwrQkFBK0IsRUFDL0IsQ0FBQyxTQUFTLENBQ1osQ0FBQyxFQUFFO2NBQ0QsTUFBTStGLGVBQWUsR0FDbkJELGdCQUFnQixDQUFDQSxnQkFBZ0IsQ0FBQ3BELE1BQU0sR0FBRyxDQUFDLENBQUM7Y0FDL0MsSUFBSSxDQUFDcUQsZUFBZSxDQUFDcEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN0QztjQUNGO2NBQ0EsTUFBTXFELHVCQUF1QixHQUFHMUosSUFBSSxDQUFDMkQsSUFBSSxDQUN2Q0QsK0JBQStCLEVBQy9CLEdBQUc4RixnQkFDTCxDQUFDO2NBQ0QsSUFBSXRILE9BQU8sQ0FBQ3FFLE9BQU8sRUFBRTtnQkFDbkJ6QyxPQUFPLENBQUNDLEdBQUcsQ0FDUixrQ0FBaUMyRix1QkFBd0IsR0FDNUQsQ0FBQztjQUNIO2NBQ0EsTUFBTUMsbUJBQTJCLEdBQUc1SixFQUFFLENBQUNrRixZQUFZLENBQ2pEeUUsdUJBQXVCLEVBQ3ZCO2dCQUNFdEYsUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO2NBQ0QsTUFBTXdGLGVBQW9CLEdBQUcvRyxlQUFlLEdBQ3hDN0IsaUJBQWlCLENBQUM2SSxTQUFTLENBQUNGLG1CQUFtQixDQUFDLEdBQ2hEdkUsSUFBSSxDQUFDQyxLQUFLLENBQUNzRSxtQkFBbUIsQ0FBQztjQUNuQyxNQUFNTixPQUFPLEdBQUdPLGVBQWUsQ0FBQ1AsT0FBTztjQUN2Q0UsMkJBQTJCLENBQUNqRixxQkFBcUIsRUFBRStFLE9BQU8sQ0FBQztZQUM3RDtVQUNGO1VBQ0E7TUFDSjtNQUVBLElBQUluSCxPQUFPLENBQUM0RyxNQUFNLEVBQUU7UUFDbEIsTUFBTUMsU0FBUyxHQUFHeEksR0FBRyxDQUFDeUksYUFBYSxDQUNqQzFFLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEJwQyxPQUFPLENBQUMrRyxNQUNWLENBQUM7UUFDRCxJQUNHMUcsUUFBUSxLQUFLLEVBQUUsSUFBSXdHLFNBQVMsS0FBSyxFQUFFLElBQ25DeEcsUUFBUSxLQUFLLENBQUMsSUFBSXdHLFNBQVMsS0FBSyxDQUFDLElBQUlBLFNBQVMsS0FBSyxFQUFHLEVBQ3ZEO1VBQ0F4RyxRQUFRLEdBQUd3RyxTQUFTO1FBQ3RCO01BQ0Y7SUFDRjtFQUNGO0VBRUEsSUFBSTdGLGVBQWUsR0FBRy9DLGVBQWUsQ0FBQzJKLFdBQVcsRUFBRTtJQUNqRCxLQUFLLE1BQU10RyxPQUFPLElBQUlILGNBQWMsQ0FBQzBHLFdBQVcsRUFBRTtNQUNoRCxNQUFNckcsK0JBQXVDLEdBQUcxRCxJQUFJLENBQUMyRCxJQUFJLENBQ3ZEeEIsT0FBTyxFQUNQcUIsT0FBTyxDQUFDSSxRQUNWLENBQUM7TUFDRCxJQUFJLENBQUMxQixPQUFPLENBQUMyQixNQUFNLEVBQUU7UUFDbkJDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFFLGdCQUFlTCwrQkFBZ0MsRUFBQyxDQUFDO01BQ2hFO01BRUEsTUFBTVYsV0FBVyxHQUFHaEQsSUFBSSxDQUFDZ0UsUUFBUSxDQUMvQk4sK0JBQStCLEVBQy9CLE9BQ0YsQ0FBQztNQUNELElBQUlsQixXQUFXLEtBQUtJLFNBQVMsRUFBRTtRQUM3Qi9DLFFBQVEsQ0FBRSxhQUFZMkMsV0FBWSxJQUFHUSxXQUFZLE1BQUssRUFBRTtVQUN0RGlCLEdBQUcsRUFBRTlCLE9BQU87VUFDWitCLEdBQUcsRUFBRUMsT0FBTyxDQUFDRCxHQUFHO1VBQ2hCRSxRQUFRLEVBQUUsT0FBTztVQUNqQkMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNO1FBQ3BDLENBQUMsQ0FBQztNQUNKO01BRUEsTUFBTUMscUJBQXFCLEdBQUd0RSxJQUFJLENBQUMyRCxJQUFJLENBQUN4QixPQUFPLEVBQUVhLFdBQVcsQ0FBQztNQUM3RGpELEVBQUUsQ0FBQ3lFLGFBQWEsQ0FBQ0YscUJBQXFCLENBQUM7TUFDdkMsS0FBSyxNQUFNVixRQUFRLElBQUk3RCxFQUFFLENBQUMwRSxXQUFXLENBQUNILHFCQUFxQixDQUFDLEVBQUU7UUFDNUQsSUFBSVYsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtVQUN2QjtRQUNGO1FBQ0E3RCxFQUFFLENBQUMyRSxVQUFVLENBQUMxRSxJQUFJLENBQUMyRCxJQUFJLENBQUNXLHFCQUFxQixFQUFFVixRQUFRLENBQUMsQ0FBQztNQUMzRDtNQUVBLFFBQVFKLE9BQU8sQ0FBQ3NCLFNBQVM7UUFDdkIsS0FBSzVFLGdCQUFnQixDQUFDNkUsVUFBVTtVQUM5QjtZQUNFLE1BQU1DLFlBQW9CLEdBQUdqRixFQUFFLENBQUNrRixZQUFZLENBQzFDdkIsK0JBQStCLEVBQy9CO2NBQ0VVLFFBQVEsRUFBRTtZQUNaLENBQ0YsQ0FBQztZQUNELE1BQU1jLFlBQWlCLEdBQUdyQyxlQUFlLEdBQ3JDNUIscUJBQXFCLENBQUMrSSxhQUFhLENBQUNoRixZQUFZLENBQUMsR0FDakRJLElBQUksQ0FBQ0MsS0FBSyxDQUFDTCxZQUFZLENBQUM7WUFFNUIsS0FBSyxNQUFNaUYsZUFBZSxJQUFJL0UsWUFBWSxDQUFDZ0YsbUJBQW1CLENBQzNEQyxRQUFRLEVBQUU7Y0FDWCxLQUFLLE1BQU1DLFVBQVUsSUFBSUgsZUFBZSxDQUFDRixXQUFXLEVBQUU7Z0JBQ3BETSw4QkFBOEIsQ0FDNUIvRixxQkFBcUIsRUFDckI4RixVQUNGLENBQUM7Y0FDSDtZQUNGO1VBQ0Y7VUFDQTtRQUNGLEtBQUtsSyxnQkFBZ0IsQ0FBQzZGLGNBQWM7VUFDbEM7WUFDRSxLQUFLLE1BQU11RSxtQkFBbUIsSUFBSTlKLE9BQU8sQ0FDdkNrRCwrQkFDRixDQUFDLEVBQUU7Y0FDRCxNQUFNNkcsa0JBQWtCLEdBQ3RCRCxtQkFBbUIsQ0FBQ0EsbUJBQW1CLENBQUNsRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO2NBQ3JELElBQUksQ0FBQ21FLGtCQUFrQixDQUFDbEUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN6QztjQUNGO2NBQ0EsTUFBTW1FLDBCQUEwQixHQUFHeEssSUFBSSxDQUFDMkQsSUFBSSxDQUMxQ0QsK0JBQStCLEVBQy9CLEdBQUc0RyxtQkFDTCxDQUFDO2NBQ0QsSUFBSXBJLE9BQU8sQ0FBQ3FFLE9BQU8sRUFBRTtnQkFDbkJ6QyxPQUFPLENBQUNDLEdBQUcsQ0FDUixxQ0FBb0N5RywwQkFBMkIsR0FDbEUsQ0FBQztjQUNIO2NBQ0EsTUFBTUMsc0JBQThCLEdBQUcxSyxFQUFFLENBQUNrRixZQUFZLENBQ3BEdUYsMEJBQTBCLEVBQzFCO2dCQUNFcEcsUUFBUSxFQUFFO2NBQ1osQ0FDRixDQUFDO2NBQ0QsTUFBTXNHLGtCQUF1QixHQUFHN0gsZUFBZSxHQUMzQzVCLHFCQUFxQixDQUFDMEosbUJBQW1CLENBQ3ZDRixzQkFDRixDQUFDLEdBQ0RyRixJQUFJLENBQUNDLEtBQUssQ0FBQ29GLHNCQUFzQixDQUFDO2NBQ3RDLE1BQU1MLFVBQVUsR0FBR00sa0JBQWtCLENBQUNOLFVBQVU7Y0FDaERDLDhCQUE4QixDQUFDL0YscUJBQXFCLEVBQUU4RixVQUFVLENBQUM7WUFDbkU7VUFDRjtVQUNBO01BQ0o7TUFFQSxJQUFJbEksT0FBTyxDQUFDNEcsTUFBTSxFQUFFO1FBQ2xCLE1BQU1DLFNBQVMsR0FBR3hJLEdBQUcsQ0FBQ3lJLGFBQWEsQ0FDakMxRSxxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCcEMsT0FBTyxDQUFDK0csTUFDVixDQUFDO1FBQ0QsSUFDRzFHLFFBQVEsS0FBSyxFQUFFLElBQUl3RyxTQUFTLEtBQUssRUFBRSxJQUNuQ3hHLFFBQVEsS0FBSyxDQUFDLElBQUl3RyxTQUFTLEtBQUssQ0FBQyxJQUFJQSxTQUFTLEtBQUssRUFBRyxFQUN2RDtVQUNBeEcsUUFBUSxHQUFHd0csU0FBUztRQUN0QjtNQUNGO0lBQ0Y7RUFDRjtFQUVBLElBQUk3RixlQUFlLEdBQUcvQyxlQUFlLENBQUN5SyxtQkFBbUIsRUFBRTtJQUN6RCxLQUFLLE1BQU1wSCxPQUFPLElBQUlILGNBQWMsQ0FBQ3dILG1CQUFtQixFQUFFO01BQ3hELE1BQU1uSCwrQkFBdUMsR0FBRzFELElBQUksQ0FBQzJELElBQUksQ0FDdkR4QixPQUFPLEVBQ1BxQixPQUFPLENBQUNJLFFBQ1YsQ0FBQztNQUNELElBQUksQ0FBQzFCLE9BQU8sQ0FBQzJCLE1BQU0sRUFBRTtRQUNuQkMsT0FBTyxDQUFDQyxHQUFHLENBQUUsZ0JBQWVMLCtCQUFnQyxFQUFDLENBQUM7TUFDaEU7TUFFQSxNQUFNVixXQUFXLEdBQUdoRCxJQUFJLENBQUNnRSxRQUFRLENBQy9CTiwrQkFBK0IsRUFDL0IsT0FDRixDQUFDO01BQ0QsSUFBSWxCLFdBQVcsS0FBS0ksU0FBUyxFQUFFO1FBQzdCL0MsUUFBUSxDQUFFLGFBQVkyQyxXQUFZLElBQUdRLFdBQVksTUFBSyxFQUFFO1VBQ3REaUIsR0FBRyxFQUFFOUIsT0FBTztVQUNaK0IsR0FBRyxFQUFFQyxPQUFPLENBQUNELEdBQUc7VUFDaEJFLFFBQVEsRUFBRSxPQUFPO1VBQ2pCQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU07UUFDcEMsQ0FBQyxDQUFDO01BQ0o7TUFFQSxNQUFNQyxxQkFBcUIsR0FBR3RFLElBQUksQ0FBQzJELElBQUksQ0FBQ3hCLE9BQU8sRUFBRWEsV0FBVyxDQUFDO01BQzdEakQsRUFBRSxDQUFDeUUsYUFBYSxDQUFDRixxQkFBcUIsQ0FBQztNQUN2QyxLQUFLLE1BQU1WLFFBQVEsSUFBSTdELEVBQUUsQ0FBQzBFLFdBQVcsQ0FBQ0gscUJBQXFCLENBQUMsRUFBRTtRQUM1RCxJQUFJVixRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1VBQ3ZCO1FBQ0Y7UUFDQTdELEVBQUUsQ0FBQzJFLFVBQVUsQ0FBQzFFLElBQUksQ0FBQzJELElBQUksQ0FBQ1cscUJBQXFCLEVBQUVWLFFBQVEsQ0FBQyxDQUFDO01BQzNEO01BQ0EsTUFBTWtILFlBQVksR0FBRzlLLElBQUksQ0FBQzJELElBQUksQ0FBQ1cscUJBQXFCLEVBQUUsV0FBVyxDQUFDO01BQ2xFdkUsRUFBRSxDQUFDNkUsU0FBUyxDQUFDa0csWUFBWSxDQUFDO01BQzFCLE1BQU1DLFdBQVcsR0FBRy9LLElBQUksQ0FBQzJELElBQUksQ0FBQ1cscUJBQXFCLEVBQUUsVUFBVSxDQUFDO01BQ2hFdkUsRUFBRSxDQUFDNkUsU0FBUyxDQUFDbUcsV0FBVyxDQUFDO01BRXpCLFFBQVF2SCxPQUFPLENBQUNzQixTQUFTO1FBQ3ZCLEtBQUs1RSxnQkFBZ0IsQ0FBQzZFLFVBQVU7VUFDOUI7WUFDRSxNQUFNQyxZQUFvQixHQUFHakYsRUFBRSxDQUFDa0YsWUFBWSxDQUMxQ3ZCLCtCQUErQixFQUMvQjtjQUNFVSxRQUFRLEVBQUU7WUFDWixDQUNGLENBQUM7WUFDRCxNQUFNYyxZQUFpQixHQUFHckMsZUFBZSxHQUNyQzNCLDZCQUE2QixDQUFDOEoscUJBQXFCLENBQ2pEaEcsWUFDRixDQUFDLEdBQ0RJLElBQUksQ0FBQ0MsS0FBSyxDQUFDTCxZQUFZLENBQUM7WUFFNUIsS0FBSyxNQUFNaUcsUUFBUSxJQUFJL0YsWUFBWSxDQUFDSyxNQUFNLENBQUMyRixpQkFBaUIsQ0FDekRELFFBQVEsRUFBRTtjQUNYRSw0QkFBNEIsQ0FBQ0wsWUFBWSxFQUFFRyxRQUFRLENBQUM7WUFDdEQ7WUFFQSxLQUFLLE1BQU07Y0FBRUc7WUFBcUIsQ0FBQyxJQUFJbEcsWUFBWSxDQUFDSyxNQUFNLENBQ3ZEc0YsbUJBQW1CLENBQUNRLE9BQU8sRUFBRTtjQUM5QkMsd0NBQXdDLENBQ3RDUCxXQUFXLEVBQ1hLLG9CQUNGLENBQUM7WUFDSDtVQUNGO1VBQ0E7UUFDRixLQUFLbEwsZ0JBQWdCLENBQUM2RixjQUFjO1VBQ2xDO1lBQ0UsS0FBSyxNQUFNd0YsaUJBQWlCLElBQUkvSyxPQUFPLENBQ3JDa0QsK0JBQStCLEVBQy9CLENBQUMsVUFBVSxDQUNiLENBQUMsRUFBRTtjQUNELE1BQU04SCxnQkFBZ0IsR0FDcEJELGlCQUFpQixDQUFDQSxpQkFBaUIsQ0FBQ25GLE1BQU0sR0FBRyxDQUFDLENBQUM7Y0FDakQsSUFBSSxDQUFDb0YsZ0JBQWdCLENBQUNuRixRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3ZDO2NBQ0Y7Y0FDQSxNQUFNb0Ysd0JBQXdCLEdBQUd6TCxJQUFJLENBQUMyRCxJQUFJLENBQ3hDRCwrQkFBK0IsRUFDL0IsR0FBRzZILGlCQUNMLENBQUM7Y0FDRCxJQUFJckosT0FBTyxDQUFDcUUsT0FBTyxFQUFFO2dCQUNuQnpDLE9BQU8sQ0FBQ0MsR0FBRyxDQUNSLG1DQUFrQzBILHdCQUF5QixHQUM5RCxDQUFDO2NBQ0g7Y0FDQSxNQUFNQyxvQkFBNEIsR0FBRzNMLEVBQUUsQ0FBQ2tGLFlBQVksQ0FDbER3Ryx3QkFBd0IsRUFDeEI7Z0JBQ0VySCxRQUFRLEVBQUU7Y0FDWixDQUNGLENBQUM7Y0FDRCxNQUFNdUgsZ0JBQXFCLEdBQUc5SSxlQUFlLEdBQ3pDM0IsNkJBQTZCLENBQUMwSyxVQUFVLENBQUNGLG9CQUFvQixDQUFDLEdBQzlEdEcsSUFBSSxDQUFDQyxLQUFLLENBQUNxRyxvQkFBb0IsQ0FBQztjQUNwQyxNQUFNVCxRQUFRLEdBQUdVLGdCQUFnQixDQUFDVixRQUFRO2NBQzFDRSw0QkFBNEIsQ0FBQ0wsWUFBWSxFQUFFRyxRQUFRLENBQUM7WUFDdEQ7WUFFQSxLQUFLLE1BQU1ZLDZCQUE2QixJQUFJckwsT0FBTyxDQUNqRGtELCtCQUErQixFQUMvQixDQUFDLHNCQUFzQixDQUN6QixDQUFDLEVBQUU7Y0FDRCxNQUFNb0ksNEJBQTRCLEdBQ2hDRCw2QkFBNkIsQ0FDM0JBLDZCQUE2QixDQUFDekYsTUFBTSxHQUFHLENBQUMsQ0FDekM7Y0FDSCxJQUFJLENBQUMwRiw0QkFBNEIsQ0FBQ3pGLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDbkQ7Y0FDRjtjQUNBLE1BQU0wRixvQ0FBb0MsR0FBRy9MLElBQUksQ0FBQzJELElBQUksQ0FDcERELCtCQUErQixFQUMvQixHQUFHbUksNkJBQ0wsQ0FBQztjQUNELElBQUkzSixPQUFPLENBQUNxRSxPQUFPLEVBQUU7Z0JBQ25CekMsT0FBTyxDQUFDQyxHQUFHLENBQ1IsK0NBQThDZ0ksb0NBQXFDLEdBQ3RGLENBQUM7Y0FDSDtjQUNBLE1BQU1DLGdDQUF3QyxHQUFHak0sRUFBRSxDQUFDa0YsWUFBWSxDQUM5RDhHLG9DQUFvQyxFQUNwQztnQkFDRTNILFFBQVEsRUFBRTtjQUNaLENBQ0YsQ0FBQztjQUNELE1BQU02SCw0QkFBaUMsR0FBR3BKLGVBQWUsR0FDckQzQiw2QkFBNkIsQ0FBQ2dMLHNCQUFzQixDQUNsREYsZ0NBQ0YsQ0FBQyxHQUNENUcsSUFBSSxDQUFDQyxLQUFLLENBQUMyRyxnQ0FBZ0MsQ0FBQztjQUNoRCxNQUFNWixvQkFBb0IsR0FDeEJhLDRCQUE0QixDQUFDYixvQkFBb0I7Y0FDbkRFLHdDQUF3QyxDQUN0Q1AsV0FBVyxFQUNYSyxvQkFDRixDQUFDO1lBQ0g7VUFDRjtVQUNBO01BQ0o7TUFFQSxJQUFJbEosT0FBTyxDQUFDNEcsTUFBTSxFQUFFO1FBQ2xCLE1BQU1DLFNBQVMsR0FBR3hJLEdBQUcsQ0FBQ3lJLGFBQWEsQ0FDakMxRSxxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCcEMsT0FBTyxDQUFDK0csTUFDVixDQUFDO1FBQ0QsSUFDRzFHLFFBQVEsS0FBSyxFQUFFLElBQUl3RyxTQUFTLEtBQUssRUFBRSxJQUNuQ3hHLFFBQVEsS0FBSyxDQUFDLElBQUl3RyxTQUFTLEtBQUssQ0FBQyxJQUFJQSxTQUFTLEtBQUssRUFBRyxFQUN2RDtVQUNBeEcsUUFBUSxHQUFHd0csU0FBUztRQUN0QjtNQUNGO0lBQ0Y7RUFDRjtFQUVBLElBQUk3RixlQUFlLEdBQUcvQyxlQUFlLENBQUNnTSxRQUFRLEVBQUU7SUFDOUMsS0FBSyxJQUFJM0ksT0FBTyxJQUFJSCxjQUFjLENBQUMrSSxRQUFRLEVBQUU7TUFDM0MsTUFBTTFJLCtCQUF1QyxHQUFHMUQsSUFBSSxDQUFDMkQsSUFBSSxDQUN2RHhCLE9BQU8sRUFDUHFCLE9BQU8sQ0FBQ0ksUUFDVixDQUFDO01BQ0QsSUFBSSxDQUFDMUIsT0FBTyxDQUFDMkIsTUFBTSxFQUFFO1FBQ25CQyxPQUFPLENBQUNDLEdBQUcsQ0FBRSxnQkFBZUwsK0JBQWdDLEVBQUMsQ0FBQztNQUNoRTtNQUVBLE1BQU1WLFdBQVcsR0FBR2hELElBQUksQ0FBQ2dFLFFBQVEsQ0FDL0JOLCtCQUErQixFQUMvQixPQUNGLENBQUM7TUFDRCxJQUFJbEIsV0FBVyxLQUFLSSxTQUFTLEVBQUU7UUFDN0IvQyxRQUFRLENBQUUsYUFBWTJDLFdBQVksSUFBR1EsV0FBWSxNQUFLLEVBQUU7VUFDdERpQixHQUFHLEVBQUU5QixPQUFPO1VBQ1orQixHQUFHLEVBQUVDLE9BQU8sQ0FBQ0QsR0FBRztVQUNoQkUsUUFBUSxFQUFFLE9BQU87VUFDakJDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTTtRQUNwQyxDQUFDLENBQUM7TUFDSjtNQUVBLE1BQU1DLHFCQUFxQixHQUFHdEUsSUFBSSxDQUFDMkQsSUFBSSxDQUFDeEIsT0FBTyxFQUFFYSxXQUFXLENBQUM7TUFDN0RqRCxFQUFFLENBQUN5RSxhQUFhLENBQUNGLHFCQUFxQixDQUFDO01BQ3ZDLEtBQUssTUFBTVYsUUFBUSxJQUFJN0QsRUFBRSxDQUFDMEUsV0FBVyxDQUFDSCxxQkFBcUIsQ0FBQyxFQUFFO1FBQzVELElBQUlWLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7VUFDdkI7UUFDRjtRQUNBN0QsRUFBRSxDQUFDMkUsVUFBVSxDQUFDMUUsSUFBSSxDQUFDMkQsSUFBSSxDQUFDVyxxQkFBcUIsRUFBRVYsUUFBUSxDQUFDLENBQUM7TUFDM0Q7TUFFQSxRQUFRSixPQUFPLENBQUNzQixTQUFTO1FBQ3ZCLEtBQUs1RSxnQkFBZ0IsQ0FBQzZFLFVBQVU7VUFDOUI7WUFDRSxNQUFNQyxZQUFvQixHQUFHakYsRUFBRSxDQUFDa0YsWUFBWSxDQUMxQ3ZCLCtCQUErQixFQUMvQjtjQUNFVSxRQUFRLEVBQUU7WUFDWixDQUNGLENBQUM7WUFDRCxNQUFNYyxZQUFpQixHQUFHckMsZUFBZSxHQUNyQzFCLGtCQUFrQixDQUFDa0wsVUFBVSxDQUFDckgsWUFBWSxDQUFDLEdBQzNDSSxJQUFJLENBQUNDLEtBQUssQ0FBQ0wsWUFBWSxDQUFDO1lBRTVCLEtBQUssTUFBTXNILE9BQU8sSUFBSXBILFlBQVksQ0FBQ2tILFFBQVEsQ0FBQ0UsT0FBTyxFQUFFO2NBQ25EQywyQkFBMkIsQ0FBQ2pJLHFCQUFxQixFQUFFZ0ksT0FBTyxDQUFDO1lBQzdEO1VBQ0Y7VUFDQTtRQUNGLEtBQUtwTSxnQkFBZ0IsQ0FBQzZGLGNBQWM7VUFDbEM7WUFDRSxLQUFLLE1BQU15RyxnQkFBZ0IsSUFBSWhNLE9BQU8sQ0FDcENrRCwrQkFDRixDQUFDLEVBQUU7Y0FDRCxNQUFNK0ksZUFBZSxHQUNuQkQsZ0JBQWdCLENBQUNBLGdCQUFnQixDQUFDcEcsTUFBTSxHQUFHLENBQUMsQ0FBQztjQUMvQyxJQUFJLENBQUNxRyxlQUFlLENBQUNwRyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3RDO2NBQ0Y7Y0FDQSxNQUFNcUcsdUJBQXVCLEdBQUcxTSxJQUFJLENBQUMyRCxJQUFJLENBQ3ZDRCwrQkFBK0IsRUFDL0IsR0FBRzhJLGdCQUNMLENBQUM7Y0FDRCxJQUFJdEssT0FBTyxDQUFDcUUsT0FBTyxFQUFFO2dCQUNuQnpDLE9BQU8sQ0FBQ0MsR0FBRyxDQUNSLGtDQUFpQzJJLHVCQUF3QixHQUM1RCxDQUFDO2NBQ0g7Y0FDQSxNQUFNQyxtQkFBMkIsR0FBRzVNLEVBQUUsQ0FBQ2tGLFlBQVksQ0FDakR5SCx1QkFBdUIsRUFDdkI7Z0JBQ0V0SSxRQUFRLEVBQUU7Y0FDWixDQUNGLENBQUM7Y0FDRCxNQUFNd0ksZUFBb0IsR0FBRy9KLGVBQWUsR0FDeEMxQixrQkFBa0IsQ0FBQzBMLGdCQUFnQixDQUFDRixtQkFBbUIsQ0FBQyxHQUN4RHZILElBQUksQ0FBQ0MsS0FBSyxDQUFDc0gsbUJBQW1CLENBQUM7Y0FDbkMsTUFBTUwsT0FBTyxHQUFHTSxlQUFlLENBQUNOLE9BQU87Y0FDdkNDLDJCQUEyQixDQUFDakkscUJBQXFCLEVBQUVnSSxPQUFPLENBQUM7WUFDN0Q7VUFDRjtVQUNBO01BQ0o7TUFFQSxJQUFJcEssT0FBTyxDQUFDNEcsTUFBTSxFQUFFO1FBQ2xCLE1BQU1DLFNBQVMsR0FBR3hJLEdBQUcsQ0FBQ3lJLGFBQWEsQ0FDakMxRSxxQkFBcUIsRUFDckIsa0JBQWtCLEVBQ2xCcEMsT0FBTyxDQUFDK0csTUFDVixDQUFDO1FBQ0QsSUFDRzFHLFFBQVEsS0FBSyxFQUFFLElBQUl3RyxTQUFTLEtBQUssRUFBRSxJQUNuQ3hHLFFBQVEsS0FBSyxDQUFDLElBQUl3RyxTQUFTLEtBQUssQ0FBQyxJQUFJQSxTQUFTLEtBQUssRUFBRyxFQUN2RDtVQUNBeEcsUUFBUSxHQUFHd0csU0FBUztRQUN0QjtNQUNGO0lBQ0Y7RUFDRjtFQUVBLElBQUk3RixlQUFlLEdBQUcvQyxlQUFlLENBQUMyTSxTQUFTLEVBQUU7SUFDL0MsS0FBSyxNQUFNdEosT0FBTyxJQUFJdkQsUUFBUSxDQUFDOE0sU0FBUyxFQUFFO01BQ3hDLE1BQU1ySiwrQkFBdUMsR0FBRzFELElBQUksQ0FBQzJELElBQUksQ0FDdkR4QixPQUFPLEVBQ1BxQixPQUFPLENBQUNJLFFBQ1YsQ0FBQztNQUNELElBQUksQ0FBQzFCLE9BQU8sQ0FBQzJCLE1BQU0sRUFBRTtRQUNuQkMsT0FBTyxDQUFDQyxHQUFHLENBQUUsZ0JBQWVMLCtCQUFnQyxFQUFDLENBQUM7TUFDaEU7TUFFQSxNQUFNVixXQUFXLEdBQUdoRCxJQUFJLENBQUNnRSxRQUFRLENBQy9CTiwrQkFBK0IsRUFDL0IsT0FDRixDQUFDO01BQ0QsSUFBSWxCLFdBQVcsS0FBS0ksU0FBUyxFQUFFO1FBQzdCL0MsUUFBUSxDQUFFLGFBQVkyQyxXQUFZLElBQUdRLFdBQVksTUFBSyxFQUFFO1VBQ3REaUIsR0FBRyxFQUFFOUIsT0FBTztVQUNaK0IsR0FBRyxFQUFFQyxPQUFPLENBQUNELEdBQUc7VUFDaEJFLFFBQVEsRUFBRSxPQUFPO1VBQ2pCQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU07UUFDcEMsQ0FBQyxDQUFDO01BQ0o7TUFFQSxNQUFNQyxxQkFBcUIsR0FBR3RFLElBQUksQ0FBQzJELElBQUksQ0FBQ3hCLE9BQU8sRUFBRWEsV0FBVyxDQUFDO01BQzdEakQsRUFBRSxDQUFDeUUsYUFBYSxDQUFDRixxQkFBcUIsQ0FBQztNQUN2QyxLQUFLLE1BQU1WLFFBQVEsSUFBSTdELEVBQUUsQ0FBQzBFLFdBQVcsQ0FBQ0gscUJBQXFCLENBQUMsRUFBRTtRQUM1RCxJQUFJVixRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1VBQ3ZCO1FBQ0Y7UUFDQTdELEVBQUUsQ0FBQzJFLFVBQVUsQ0FBQzFFLElBQUksQ0FBQzJELElBQUksQ0FBQ1cscUJBQXFCLEVBQUVWLFFBQVEsQ0FBQyxDQUFDO01BQzNEO01BRUEsUUFBUUosT0FBTyxDQUFDc0IsU0FBUztRQUN2QixLQUFLNUUsZ0JBQWdCLENBQUM2RixjQUFjO1VBQ2xDO1lBQ0UsS0FBSyxNQUFNaUgsaUJBQWlCLElBQUl4TSxPQUFPLENBQ3JDa0QsK0JBQ0YsQ0FBQyxFQUFFO2NBQ0QsTUFBTXVKLGdCQUFnQixHQUNwQkQsaUJBQWlCLENBQUNBLGlCQUFpQixDQUFDNUcsTUFBTSxHQUFHLENBQUMsQ0FBQztjQUNqRCxJQUFJLENBQUM2RyxnQkFBZ0IsQ0FBQzVHLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDdkM7Y0FDRjtjQUNBLE1BQU02Ryx3QkFBd0IsR0FBR2xOLElBQUksQ0FBQzJELElBQUksQ0FDeENELCtCQUErQixFQUMvQixHQUFHc0osaUJBQ0wsQ0FBQztjQUNELElBQUk5SyxPQUFPLENBQUNxRSxPQUFPLEVBQUU7Z0JBQ25CekMsT0FBTyxDQUFDQyxHQUFHLENBQ1IsbUNBQWtDbUosd0JBQXlCLEdBQzlELENBQUM7Y0FDSDtjQUNBLE1BQU1DLG9CQUE0QixHQUFHcE4sRUFBRSxDQUFDa0YsWUFBWSxDQUNsRGlJLHdCQUF3QixFQUN4QjtnQkFDRTlJLFFBQVEsRUFBRTtjQUNaLENBQ0YsQ0FBQztjQUVELE1BQU1nSixnQkFBcUIsR0FBR3ZLLGVBQWUsR0FDekN6QixtQkFBbUIsQ0FBQ2lNLGlCQUFpQixDQUFDRixvQkFBb0IsQ0FBQyxHQUMzRC9ILElBQUksQ0FBQ0MsS0FBSyxDQUFDOEgsb0JBQW9CLENBQUM7Y0FDcEMsTUFBTUcsUUFBUSxHQUFHRixnQkFBZ0IsQ0FBQ0UsUUFBUTtjQUMxQ0MsNkJBQTZCLENBQUNqSixxQkFBcUIsRUFBRWdKLFFBQVEsQ0FBQztZQUNoRTtVQUNGO1VBQ0E7TUFDSjtNQUVBLElBQUlwTCxPQUFPLENBQUM0RyxNQUFNLEVBQUU7UUFDbEIsTUFBTUMsU0FBUyxHQUFHeEksR0FBRyxDQUFDeUksYUFBYSxDQUNqQzFFLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEJwQyxPQUFPLENBQUMrRyxNQUNWLENBQUM7UUFDRCxJQUNHMUcsUUFBUSxLQUFLLEVBQUUsSUFBSXdHLFNBQVMsS0FBSyxFQUFFLElBQ25DeEcsUUFBUSxLQUFLLENBQUMsSUFBSXdHLFNBQVMsS0FBSyxDQUFDLElBQUlBLFNBQVMsS0FBSyxFQUFHLEVBQ3ZEO1VBQ0F4RyxRQUFRLEdBQUd3RyxTQUFTO1FBQ3RCO01BQ0Y7SUFDRjtFQUNGO0VBRUEsSUFBSTdGLGVBQWUsR0FBRy9DLGVBQWUsQ0FBQ3FOLG9CQUFvQixFQUFFO0lBQzFELEtBQUssTUFBTWhLLE9BQU8sSUFBSXZELFFBQVEsQ0FBQ3dOLG9CQUFvQixFQUFFO01BQ25ELE1BQU0vSiwrQkFBdUMsR0FBRzFELElBQUksQ0FBQzJELElBQUksQ0FDdkR4QixPQUFPLEVBQ1BxQixPQUFPLENBQUNJLFFBQ1YsQ0FBQztNQUNELElBQUksQ0FBQzFCLE9BQU8sQ0FBQzJCLE1BQU0sRUFBRTtRQUNuQkMsT0FBTyxDQUFDQyxHQUFHLENBQUUsZ0JBQWVMLCtCQUFnQyxFQUFDLENBQUM7TUFDaEU7TUFFQSxNQUFNVixXQUFXLEdBQUdoRCxJQUFJLENBQUNnRSxRQUFRLENBQUNOLCtCQUErQixFQUFFLE1BQU0sQ0FBQztNQUMxRSxJQUFJbEIsV0FBVyxLQUFLSSxTQUFTLEVBQUU7UUFDN0IvQyxRQUFRLENBQUUsYUFBWTJDLFdBQVksSUFBR1EsV0FBWSxNQUFLLEVBQUU7VUFDdERpQixHQUFHLEVBQUU5QixPQUFPO1VBQ1orQixHQUFHLEVBQUVDLE9BQU8sQ0FBQ0QsR0FBRztVQUNoQkUsUUFBUSxFQUFFLE9BQU87VUFDakJDLEtBQUssRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTTtRQUNwQyxDQUFDLENBQUM7TUFDSjtNQUVBLE1BQU1DLHFCQUFxQixHQUFHdEUsSUFBSSxDQUFDMkQsSUFBSSxDQUFDeEIsT0FBTyxFQUFFYSxXQUFXLENBQUM7TUFDN0RqRCxFQUFFLENBQUN5RSxhQUFhLENBQUNGLHFCQUFxQixDQUFDO01BQ3ZDLEtBQUssTUFBTVYsUUFBUSxJQUFJN0QsRUFBRSxDQUFDMEUsV0FBVyxDQUFDSCxxQkFBcUIsQ0FBQyxFQUFFO1FBQzVELElBQUlWLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7VUFDdkI7UUFDRjtRQUNBN0QsRUFBRSxDQUFDMkUsVUFBVSxDQUFDMUUsSUFBSSxDQUFDMkQsSUFBSSxDQUFDVyxxQkFBcUIsRUFBRVYsUUFBUSxDQUFDLENBQUM7TUFDM0Q7TUFFQSxRQUFRSixPQUFPLENBQUNzQixTQUFTO1FBQ3ZCLEtBQUs1RSxnQkFBZ0IsQ0FBQzZGLGNBQWM7VUFDbEM7WUFDRSxLQUFLLE1BQU0ySCwwQkFBMEIsSUFBSWxOLE9BQU8sQ0FDOUNrRCwrQkFDRixDQUFDLEVBQUU7Y0FDRCxNQUFNaUsseUJBQXlCLEdBQzdCRCwwQkFBMEIsQ0FDeEJBLDBCQUEwQixDQUFDdEgsTUFBTSxHQUFHLENBQUMsQ0FDdEM7Y0FDSCxJQUFJLENBQUN1SCx5QkFBeUIsQ0FBQ3RILFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDaEQ7Y0FDRjtjQUNBLE1BQU11SCxpQ0FBaUMsR0FBRzVOLElBQUksQ0FBQzJELElBQUksQ0FDakRELCtCQUErQixFQUMvQixHQUFHZ0ssMEJBQ0wsQ0FBQztjQUNELElBQUl4TCxPQUFPLENBQUNxRSxPQUFPLEVBQUU7Z0JBQ25CekMsT0FBTyxDQUFDQyxHQUFHLENBQ1IsNENBQTJDNkosaUNBQWtDLEdBQ2hGLENBQUM7Y0FDSDtjQUNBLE1BQU1DLDZCQUFxQyxHQUFHOU4sRUFBRSxDQUFDa0YsWUFBWSxDQUMzRDJJLGlDQUFpQyxFQUNqQztnQkFDRXhKLFFBQVEsRUFBRTtjQUNaLENBQ0YsQ0FBQztjQUNELE1BQU0wSix5QkFBOEIsR0FBR2pMLGVBQWUsR0FDbER4Qix1QkFBdUIsQ0FBQzBNLG9CQUFvQixDQUMxQ0YsNkJBQ0YsQ0FBQyxHQUNEekksSUFBSSxDQUFDQyxLQUFLLENBQUN3SSw2QkFBNkIsQ0FBQztjQUU3QyxNQUFNRyxpQkFBaUIsR0FBR0YseUJBQXlCLENBQUNHLFdBQVc7Y0FDL0RDLGlDQUFpQyxDQUMvQjVKLHFCQUFxQixFQUNyQjBKLGlCQUNGLENBQUM7WUFDSDtVQUNGO1VBQ0E7TUFDSjtNQUVBLElBQUk5TCxPQUFPLENBQUM0RyxNQUFNLEVBQUU7UUFDbEIsTUFBTUMsU0FBUyxHQUFHeEksR0FBRyxDQUFDeUksYUFBYSxDQUNqQzFFLHFCQUFxQixFQUNyQixrQkFBa0IsRUFDbEJwQyxPQUFPLENBQUMrRyxNQUNWLENBQUM7UUFDRCxJQUNHMUcsUUFBUSxLQUFLLEVBQUUsSUFBSXdHLFNBQVMsS0FBSyxFQUFFLElBQ25DeEcsUUFBUSxLQUFLLENBQUMsSUFBSXdHLFNBQVMsS0FBSyxDQUFDLElBQUlBLFNBQVMsS0FBSyxFQUFHLEVBQ3ZEO1VBQ0F4RyxRQUFRLEdBQUd3RyxTQUFTO1FBQ3RCO01BQ0Y7SUFDRjtFQUNGOztFQUVBO0VBQ0EzRyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0MsTUFBTSxHQUFHakMsa0JBQWtCO0VBRTFDLE9BQU9rQyxRQUFRO0FBQ2pCO0FBRUEsU0FBUzhILDhCQUE4QkEsQ0FDckMvRixxQkFBNkIsRUFDN0I4RixVQUdDLEVBQ0s7RUFDTixNQUFNK0Qsa0JBQWtCLEdBQUcvRCxVQUFVLENBQUNnRSxrQkFBa0I7RUFDeER4TyxNQUFNLENBQUNxRCxjQUFjLENBQUNrTCxrQkFBa0IsRUFBRXZMLFNBQVMsQ0FBQztFQUNwRCxNQUFNeUwsa0JBQWtCLEdBQUdyTyxJQUFJLENBQUMyRCxJQUFJLENBQ2xDVyxxQkFBcUIsRUFDckI2SixrQkFDRixDQUFDO0VBQ0RwTyxFQUFFLENBQUN5RSxhQUFhLENBQUM2SixrQkFBa0IsQ0FBQztFQUNwQyxNQUFNNUksdUJBQXVCLEdBQUd6RixJQUFJLENBQUMyRCxJQUFJLENBQ3ZDMEssa0JBQWtCLEVBQ2xCakUsVUFBVSxDQUFDMUUsR0FBRyxHQUFHLE9BQ25CLENBQUM7RUFDRDNGLEVBQUUsQ0FBQzRGLGFBQWEsQ0FDZEYsdUJBQXVCLEVBQ3ZCTCxJQUFJLENBQUNRLFNBQVMsQ0FBQ3dFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQ25DO0lBQ0VoRyxRQUFRLEVBQUU7RUFDWixDQUNGLENBQUM7QUFDSDtBQUVBLFNBQVMrRyw0QkFBNEJBLENBQ25DTCxZQUFvQixFQUNwQkcsUUFBeUIsRUFDbkI7RUFDTixNQUFNakgsUUFBUSxHQUFHdkQsbUJBQW1CLENBQUNxSyxZQUFZLEVBQUVHLFFBQVEsQ0FBQ3ZGLEdBQUcsQ0FBQztFQUNoRTNGLEVBQUUsQ0FBQzRGLGFBQWEsQ0FBRSxHQUFFM0IsUUFBUyxPQUFNLEVBQUVvQixJQUFJLENBQUNRLFNBQVMsQ0FBQ3FGLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDdEU3RyxRQUFRLEVBQUU7RUFDWixDQUFDLENBQUM7QUFDSjtBQUVBLFNBQVNrSCx3Q0FBd0NBLENBQy9DUCxXQUFtQixFQUNuQkssb0JBQXFDLEVBQy9CO0VBQ04sTUFBTXBILFFBQVEsR0FBR3RELCtCQUErQixDQUM5Q3FLLFdBQVcsRUFDWEssb0JBQW9CLENBQUMxRixHQUN2QixDQUFDO0VBQ0QzRixFQUFFLENBQUM0RixhQUFhLENBQ2IsR0FBRTNCLFFBQVMsT0FBTSxFQUNsQm9CLElBQUksQ0FBQ1EsU0FBUyxDQUFDd0Ysb0JBQW9CLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUM3QztJQUNFaEgsUUFBUSxFQUFFO0VBQ1osQ0FDRixDQUFDO0FBQ0g7QUFFQSxTQUFTbUYsMkJBQTJCQSxDQUNsQytFLFdBQW1CLEVBQ25CakYsT0FBd0IsRUFDbEI7RUFDTixNQUFNckYsUUFBUSxHQUFHckQsa0JBQWtCLENBQUMyTixXQUFXLEVBQUVqRixPQUFPLENBQUMzRCxHQUFHLENBQUM7RUFDN0QzRixFQUFFLENBQUM0RixhQUFhLENBQUUsR0FBRTNCLFFBQVMsT0FBTSxFQUFFb0IsSUFBSSxDQUFDUSxTQUFTLENBQUN5RCxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3JFakYsUUFBUSxFQUFFO0VBQ1osQ0FBQyxDQUFDO0FBQ0o7QUFFQSxTQUFTbUksMkJBQTJCQSxDQUNsQ2dDLFdBQW1CLEVBQ25CakMsT0FBd0IsRUFDbEI7RUFDTixNQUFNdEksUUFBUSxHQUFHcEQsa0JBQWtCLENBQUMyTixXQUFXLEVBQUVqQyxPQUFPLENBQUM1RyxHQUFHLENBQUM7RUFDN0QzRixFQUFFLENBQUM0RixhQUFhLENBQUUsR0FBRTNCLFFBQVMsT0FBTSxFQUFFb0IsSUFBSSxDQUFDUSxTQUFTLENBQUMwRyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFO0lBQ3JFbEksUUFBUSxFQUFFO0VBQ1osQ0FBQyxDQUFDO0FBQ0o7QUFFQSxTQUFTbUosNkJBQTZCQSxDQUNwQ2lCLFlBQW9CLEVBQ3BCbEIsUUFBeUIsRUFDbkI7RUFDTixNQUFNbUIsZ0JBQXdCLEdBQUcsa0NBQWtDO0VBQ25FLE1BQU16SyxRQUFRLEdBQUduRCxXQUFXLENBQUMyTixZQUFZLEVBQUVsQixRQUFRLENBQUM1SCxHQUFHLEVBQUUrSSxnQkFBZ0IsQ0FBQztFQUMxRTFPLEVBQUUsQ0FBQzRGLGFBQWEsQ0FBRSxHQUFFM0IsUUFBUyxPQUFNLEVBQUVvQixJQUFJLENBQUNRLFNBQVMsQ0FBQzBILFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDdEVsSixRQUFRLEVBQUU7RUFDWixDQUFDLENBQUM7QUFDSjtBQUVBLFNBQVM4SixpQ0FBaUNBLENBQ3hDUSxnQkFBd0IsRUFDeEJULFdBQTRCLEVBQ3RCO0VBQ04sTUFBTVUsbUJBQTJCLEdBQy9CLDJDQUEyQztFQUM3QyxNQUFNM0ssUUFBUSxHQUFHbkQsV0FBVyxDQUMxQjZOLGdCQUFnQixFQUNoQlQsV0FBVyxDQUFDdkksR0FBRyxFQUNmaUosbUJBQ0YsQ0FBQztFQUNENU8sRUFBRSxDQUFDNEYsYUFBYSxDQUFFLEdBQUUzQixRQUFTLE9BQU0sRUFBRW9CLElBQUksQ0FBQ1EsU0FBUyxDQUFDcUksV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRTtJQUN6RTdKLFFBQVEsRUFBRTtFQUNaLENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0EsSUFBSUQsT0FBTyxDQUFDeUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDdkksUUFBUSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7RUFDbEQsTUFBTW5FLE9BQU8sR0FBR3BDLGVBQWUsQ0FBQ3dCLGtCQUFrQixDQUFDO0VBRW5ENkMsT0FBTyxDQUFDMEssSUFBSSxDQUFDNU0sY0FBYyxDQUFDQyxPQUFPLENBQUMsQ0FBQztBQUN2QyJ9